diff --git a/packages/frontend-2/components/auth/LoginPanel.vue b/packages/frontend-2/components/auth/LoginPanel.vue index 5045c8ccd..b4529d0a1 100644 --- a/packages/frontend-2/components/auth/LoginPanel.vue +++ b/packages/frontend-2/components/auth/LoginPanel.vue @@ -6,7 +6,7 @@ class="mx-auto w-full" >
-
+

{{ title }}

@@ -14,11 +14,13 @@ {{ subtitle }}
+
{{ hasThirdPartyStrategies ? 'Or login with your email' : '' }}
- -
+ +
Don't have an account? Register @@ -43,10 +49,10 @@ import { useQuery } from '@vue/apollo-composable' import { AuthStrategy } from '~~/lib/auth/helpers/strategies' import { useLoginOrRegisterUtils, useAuthManager } from '~~/lib/auth/composables/auth' -import { loginServerInfoQuery } from '~~/lib/auth/graphql/queries' import { LayoutDialog } from '@speckle/ui-components' import { ArrowRightIcon } from '@heroicons/vue/20/solid' import { registerRoute } from '~~/lib/common/helpers/route' +import { authLoginPanelQuery } from '~/lib/auth/graphql/queries' const props = withDefaults( defineProps<{ @@ -61,9 +67,13 @@ const props = withDefaults( } ) +const { appId, challenge } = useLoginOrRegisterUtils() const { isLoggedIn } = useActiveUser() const { inviteToken } = useAuthManager() const router = useRouter() +const { result } = useQuery(authLoginPanelQuery, () => ({ + token: inviteToken.value +})) const finalRegisterRoute = computed(() => { const result = router.resolve({ @@ -77,8 +87,8 @@ const concreteComponent = computed(() => { return props.dialogMode ? LayoutDialog : 'div' }) -const { result } = useQuery(loginServerInfoQuery) -const { appId, challenge } = useLoginOrRegisterUtils() +const workspaceInvite = computed(() => result.value?.workspaceInvite) +const forcedInviteEmail = computed(() => workspaceInvite.value?.email) const serverInfo = computed(() => result.value?.serverInfo) const hasLocalStrategy = computed(() => diff --git a/packages/frontend-2/components/auth/LoginWithEmailBlock.vue b/packages/frontend-2/components/auth/LoginWithEmailBlock.vue index 3f7a4d4b3..fe5bb1dbd 100644 --- a/packages/frontend-2/components/auth/LoginWithEmailBlock.vue +++ b/packages/frontend-2/components/auth/LoginWithEmailBlock.vue @@ -10,7 +10,7 @@ color="foundation" :rules="emailRules" show-label - :disabled="loading" + :disabled="!!(loading || shouldForceInviteEmail)" auto-focus /> () -const { handleSubmit } = useForm() +const { handleSubmit, setValues } = useForm() const loading = ref(false) const emailRules = [isEmail] @@ -66,6 +79,12 @@ const isMounted = useMounted() const { loginWithEmail } = useAuthManager() const { triggerNotification } = useGlobalToast() +const inviteEmail = computed(() => props.workspaceInvite?.email) +const isInviteForExistingUser = computed(() => !!props.workspaceInvite?.user) +const shouldForceInviteEmail = computed( + () => !!(inviteEmail.value && isInviteForExistingUser.value) +) + const onSubmit = handleSubmit(async ({ email, password }) => { try { loading.value = true @@ -80,4 +99,14 @@ const onSubmit = handleSubmit(async ({ email, password }) => { loading.value = false } }) + +watch( + shouldForceInviteEmail, + (shouldForce) => { + if (shouldForce) { + setValues({ email: inviteEmail.value || '' }) + } + }, + { immediate: true } +) diff --git a/packages/frontend-2/components/auth/RegisterPanel.vue b/packages/frontend-2/components/auth/RegisterPanel.vue index e3fc57915..b13451d4b 100644 --- a/packages/frontend-2/components/auth/RegisterPanel.vue +++ b/packages/frontend-2/components/auth/RegisterPanel.vue @@ -1,7 +1,7 @@