diff --git a/app/(tabs)/beneficiaries/[id]/share.tsx b/app/(tabs)/beneficiaries/[id]/share.tsx index 8b933c2..3a48e2e 100644 --- a/app/(tabs)/beneficiaries/[id]/share.tsx +++ b/app/(tabs)/beneficiaries/[id]/share.tsx @@ -324,32 +324,7 @@ export default function ShareAccessScreen() { Invite Someone - - - - {isLoading ? ( - - ) : ( - - )} - - - - {/* Role Toggle */} + {/* Role Toggle - above email */} + + + + + {isLoading ? ( + + ) : ( + + )} + + {/* People with Access */} diff --git a/backend/src/routes/invitations.js b/backend/src/routes/invitations.js index 1a1b940..61a79d5 100644 --- a/backend/src/routes/invitations.js +++ b/backend/src/routes/invitations.js @@ -310,9 +310,7 @@ router.post('/', async (req, res) => { attempts++; } - // Create invitation (expires in 7 days) - const expiresAt = new Date(Date.now() + 7 * 24 * 60 * 60 * 1000); - + // Create invitation (no expiry) const { data: invitation, error } = await supabase .from('invitations') .insert({ @@ -321,8 +319,7 @@ router.post('/', async (req, res) => { token: inviteToken, role: role, email: email?.toLowerCase() || null, - label: label || null, - expires_at: expiresAt.toISOString() + label: label || null }) .select() .single(); @@ -690,8 +687,13 @@ router.delete('/:id', async (req, res) => { return res.status(404).json({ error: 'Invitation not found' }); } - if (invitation.accepted_at) { - return res.status(400).json({ error: 'Cannot revoke accepted invitation' }); + // If invitation was accepted, also remove user_access + if (invitation.accepted_by) { + await supabase + .from('user_access') + .delete() + .eq('beneficiary_id', invitation.beneficiary_id) + .eq('accessor_id', invitation.accepted_by); } // Delete invitation diff --git a/backend/src/services/email.js b/backend/src/services/email.js index 6ffc17f..1927859 100644 --- a/backend/src/services/email.js +++ b/backend/src/services/email.js @@ -222,7 +222,7 @@ If you didn't request this code, you can safely ignore this email. async function sendInvitationEmail({ email, inviterName, beneficiaryName, role, inviteCode }) { const frontendUrl = process.env.FRONTEND_URL || 'https://wellnuo.smartlaunchhub.com'; const acceptLink = `${frontendUrl}/accept-invite.html?code=${inviteCode}`; - const roleText = role === 'guardian' ? 'Guardian (full access)' : 'Caretaker (view only)'; + const roleText = role === 'guardian' ? 'Guardian' : 'Caretaker'; const htmlContent = ` @@ -276,9 +276,6 @@ async function sendInvitationEmail({ email, inviterName, beneficiaryName, role, -

- This invitation expires in 7 days. -

@@ -310,8 +307,6 @@ Your invitation code: ${inviteCode} Accept your invitation: ${acceptLink} -This invitation expires in 7 days. - If you didn't expect this invitation, you can safely ignore this email. WellNuo - Elderly Care Monitoring diff --git a/web/accept-invite.html b/web/accept-invite.html index faddbfc..114c346 100644 --- a/web/accept-invite.html +++ b/web/accept-invite.html @@ -4,6 +4,7 @@ Accept Invitation - WellNuo +