diff --git a/foundations/core/packages/account-client/src/client.ts b/foundations/core/packages/account-client/src/client.ts index 0a15fa45ed4..f4a5abd9c6e 100644 --- a/foundations/core/packages/account-client/src/client.ts +++ b/foundations/core/packages/account-client/src/client.ts @@ -147,6 +147,7 @@ export interface AccountClient { signUp: (email: string, password: string, first: string, last: string) => Promise login: (email: string, password: string) => Promise loginAsGuest: () => Promise + getLoginCapabilities: () => Promise<{ signUpEnabled: boolean, guestLoginAvailable: boolean }> isReadOnlyGuest: () => Promise getPerson: () => Promise getPersonInfo: (account: PersonUuid) => Promise @@ -722,6 +723,15 @@ class AccountClientImpl implements AccountClient { return await this.rpc(request) } + async getLoginCapabilities (): Promise<{ signUpEnabled: boolean, guestLoginAvailable: boolean }> { + const request = { + method: 'getLoginCapabilities' as const, + params: {} + } + + return await this.rpc(request) + } + async isReadOnlyGuest (): Promise { const request = { method: 'isReadOnlyGuest' as const, diff --git a/plugins/login-resources/src/components/LoginForm.svelte b/plugins/login-resources/src/components/LoginForm.svelte index ed4485488d0..02b752ec4b0 100644 --- a/plugins/login-resources/src/components/LoginForm.svelte +++ b/plugins/login-resources/src/components/LoginForm.svelte @@ -27,6 +27,7 @@ import BottomActionComponent from './BottomAction.svelte' import login from '../plugin' import { LoginInfo } from '@hcengineering/account-client' + import { fetchLoginCapabilities } from '../utils' export let navigateUrl: string | undefined = undefined export let signUpDisabled = false @@ -37,9 +38,18 @@ export let onLogin: ((loginInfo: LoginInfo | null, status: Status) => void | Promise) | undefined = undefined let method: LoginMethods = useOTP ? LoginMethods.Otp : LoginMethods.Password + let guestLoginAvailable = false + let capabilitiesLoaded = false + let signUpEnabled = true + $: effectiveSignUpDisabled = signUpDisabled || (capabilitiesLoaded && !signUpEnabled) onMount(() => { signupStore.setSignUpFlow(false) + void fetchLoginCapabilities().then((capabilities) => { + signUpEnabled = capabilities.signUpEnabled + guestLoginAvailable = capabilities.guestLoginAvailable + capabilitiesLoaded = true + }) }) function changeMethod (event: CustomEvent): void { @@ -87,15 +97,33 @@ {#if method === LoginMethods.Otp} - + {:else} - + {/if}
- + {#if guestLoginAvailable} + + {/if}