Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added docs/pr/pending-invite-choice.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
19 changes: 19 additions & 0 deletions messages/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -1504,6 +1504,25 @@
"personal-information": "Personal Information",
"picture-delete-fail": "Cannot delete app picture, please check console log",
"picture-uploaded": "Picture uploaded successfully",
"pending-invite-badge": "Organization invitation",
"pending-invite-card-copy": "This invitation matches the email on your Capgo account.",
"pending-invite-create-org": "Decline all and continue",
"pending-invite-decline": "Decline",
"pending-invite-decline-failed": "Could not decline the invitation",
"pending-invite-declined": "Invitation declined",
"pending-invite-join": "Join organization",
"pending-invite-join-failed": "Could not join the organization",
"pending-invite-joined": "Organization joined",
"pending-invite-load-failed": "Could not load your organization invitation",
"pending-invite-logo-alt": "{name} logo",
"pending-invite-subtitle": "Review this invitation before continuing. You can join the organization or decline it.",
"pending-invite-subtitle-multiple": "Review these invitations before continuing. You can join or decline each organization.",
"pending-invite-summary": "Next step",
"pending-invite-summary-create": "Decline invitations that are not for you, then continue.",
"pending-invite-summary-join": "Accept an invite to add that organization to your account.",
"pending-invite-summary-title": "Choose where this account belongs",
"pending-invite-title": "Join your organization",
"pending-invite-title-multiple": "Choose an organization",
"plan": "Plan",
"plan-bandwidth": "GB Bandwidth",
"plan-desc": "Start building for free, then add a plan to go live.",
Expand Down
28 changes: 28 additions & 0 deletions src/modules/auth.ts
Original file line number Diff line number Diff line change
Expand Up @@ -204,11 +204,21 @@ async function guard(
function shouldRedirectToOrgOnboarding() {
if (to.path.startsWith('/onboarding/organization'))
return false
if (to.path.startsWith('/onboarding/invitation'))
return false
if (!inviteOrgId)
return true
return !organizationStore.organizations.some(org => org.gid === inviteOrgId && org.role.startsWith('invite'))
}

function shouldRedirectToPendingInviteOnboarding(organizationsLoaded: boolean) {
if (!organizationsLoaded)
return false
if (to.path.startsWith('/onboarding/invitation'))
return false
return organizationStore.organizations.some(org => org.role.startsWith('invite'))
}

if (hasAuth && sessionUser) {
const authConfirmedAt = main.auth?.email_confirmed_at
if (!main.auth || main.auth.id !== sessionUser.id || authConfirmedAt !== sessionUser.email_confirmed_at) {
Expand Down Expand Up @@ -266,6 +276,15 @@ async function guard(
}

const organizationsLoaded = await tryLoadOrganizations(() => organizationStore.fetchOrganizations())
if (shouldRedirectToPendingInviteOnboarding(organizationsLoaded)) {
return next({
path: '/onboarding/invitation',
query: {
to: to.path.startsWith('/onboarding/') ? '/dashboard' : to.fullPath,
},
})
}

if (organizationsLoaded && isAdminRoute) {
try {
main.isAdmin = await isPlatformAdmin()
Expand Down Expand Up @@ -332,6 +351,15 @@ async function guard(
}

let organizationsLoaded = await tryLoadOrganizations(() => organizationStore.dedupFetchOrganizations())
if (shouldRedirectToPendingInviteOnboarding(organizationsLoaded)) {
return next({
path: '/onboarding/invitation',
query: {
to: to.path.startsWith('/onboarding/') ? '/dashboard' : to.fullPath,
},
})
}

if (organizationsLoaded && !organizationStore.hasOrganizations && isSsoUser(sessionUser)) {
const didProvisionSsoMembership = await maybeProvisionSsoMembership(supabase, sessionData?.session ?? null)
if (didProvisionSsoMembership === 'redirect_login') {
Expand Down
Loading
Loading