diff --git a/src/components/Nav/AuthModal/EmailConfirm.tsx b/src/components/Nav/AuthModal/EmailConfirm.tsx index 8012cc29..a3d6c196 100644 --- a/src/components/Nav/AuthModal/EmailConfirm.tsx +++ b/src/components/Nav/AuthModal/EmailConfirm.tsx @@ -12,44 +12,26 @@ import styles from './AuthModal.module.scss' export const EmailConfirm = () => { const { t } = useLocalize() - const { searchParams } = useRouter() - const { - actions: { confirmEmail }, - session, - } = useSession() - const [isTokenExpired, setIsTokenExpired] = createSignal(false) // TODO: handle expired token in context/session - const [isTokenInvalid, setIsTokenInvalid] = createSignal(false) // TODO: handle invalid token in context/session - - createEffect(async () => { - const token = searchParams()?.access_token - if (token) await confirmEmail({ token }) + const { session, authError } = useSession() + const [email, setEmail] = createSignal('') + const [emailConfirmed, setEmailConfirmed] = createSignal(false) + createEffect(() => { + setEmail(session()?.user?.email) + setEmailConfirmed(session()?.user?.email_verified) }) - const email = createMemo(() => session()?.user?.email) - const confirmedEmail = createMemo(() => session()?.user?.email_verified) - return (
- {/* TODO: texts */} - -
Ссылка больше не действительна
+ +
{authError()}
- -
Неправильная ссылка
- -
- +
{t('Hooray! Welcome!')}
{t("You've confirmed email")} {email()} diff --git a/src/context/session.tsx b/src/context/session.tsx index 5945040e..0a1c6ea0 100644 --- a/src/context/session.tsx +++ b/src/context/session.tsx @@ -40,6 +40,7 @@ export type SessionContextType = { config: ConfigType session: Resource author: Resource + authError: Accessor isSessionLoaded: Accessor subscriptions: Accessor isAuthWithCallback: Accessor<() => void> @@ -104,17 +105,18 @@ export const SessionProvider = (props: { }) // load - const [configuration, setConfig] = createSignal(defaultConfig) const authorizer = createMemo(() => new Authorizer(defaultConfig)) const [isSessionLoaded, setIsSessionLoaded] = createSignal(false) + const [authError, setAuthError] = createSignal('') const [session, { refetch: loadSession, mutate: setSession }] = createResource( async () => { try { console.info('[context.session] loading session') return await authorizer().getSession() - } catch { - console.info('[context.session] cannot refresh session') + } catch (e) { + console.info('[context.session] cannot refresh session', e) + setAuthError(e) return null } }, @@ -141,7 +143,7 @@ export const SessionProvider = (props: { setSubscriptions(result || EMPTY_SUBSCRIPTIONS) } - // session postload effect + // when session is loaded createEffect(async () => { if (session()) { const token = session()?.access_token @@ -158,22 +160,16 @@ export const SessionProvider = (props: { if (a) { console.log('[context.session] author profile and subs loaded', author()) } else { + setSubscriptions(EMPTY_SUBSCRIPTIONS) + setAuthor(null) console.warn('[context.session] author is not loaded') } - setIsSessionLoaded(true) } + setIsSessionLoaded(true) } } }) - createEffect(() => { - if (session() !== null && author() === null) { - setIsSessionLoaded(true) - setAuthor(null) - setSubscriptions(EMPTY_SUBSCRIPTIONS) - } - }) - // initial effect onMount(async () => { const metaRes = await authorizer().getMetaData() @@ -242,9 +238,13 @@ export const SessionProvider = (props: { const confirmEmail = async (input: VerifyEmailInput) => { console.debug(`[context.session] calling authorizer's verify email with`, input) - const at: void | AuthToken = await authorizer().verifyEmail(input) - if (at) setSession(at) - return at + try { + const at: void | AuthToken = await authorizer().verifyEmail(input) + if (at) setSession(at) + return at + } catch (e) { + console.debug(e) + } } const isAuthenticated = createMemo(() => Boolean(author())) @@ -264,6 +264,7 @@ export const SessionProvider = (props: { changePassword, } const value: SessionContextType = { + authError, config: configuration(), session, subscriptions, diff --git a/src/graphql/client/core.ts b/src/graphql/client/core.ts index 6b698c19..191d1d43 100644 --- a/src/graphql/client/core.ts +++ b/src/graphql/client/core.ts @@ -95,7 +95,7 @@ export const apiClient = { }, getAllAuthors: async () => { const response = await publicGraphQLClient.query(authorsAll, {}).toPromise() - if (!response.data) console.error('[graphql.client.core] load_authors_all', response) + if (!response.data) console.error('[graphql.client.core] getAllAuthors', response) return response.data.get_authors_all }, diff --git a/src/graphql/query/core/authors-all.ts b/src/graphql/query/core/authors-all.ts index c8071e10..cfdc3d93 100644 --- a/src/graphql/query/core/authors-all.ts +++ b/src/graphql/query/core/authors-all.ts @@ -2,7 +2,7 @@ import { gql } from '@urql/core' export default gql` query { - get_authors_all() { + get_authors_all { id slug name