webapp/src/components/Nav/AuthModal/EmailConfirm.tsx

81 lines
2.6 KiB
TypeScript
Raw Normal View History

2022-10-25 16:25:42 +00:00
import styles from './AuthModal.module.scss'
import { clsx } from 'clsx'
import { t } from '../../../utils/intl'
2022-11-14 01:17:12 +00:00
import { hideModal, locale } from '../../../stores/ui'
import { createMemo, createSignal, onMount, Show } from 'solid-js'
import { handleClientRouteLinkClick, useRouter } from '../../../stores/router'
import type { ConfirmEmailSearchParams } from './types'
2022-11-14 01:17:12 +00:00
import { signSendLink, useAuth } from '../../../context/auth'
import { ApiError } from '../../../utils/apiClient'
import { email } from './sharedLogic'
2022-10-25 16:25:42 +00:00
export const EmailConfirm = () => {
const {
session,
actions: { confirmEmail }
} = useAuth()
2022-10-25 16:25:42 +00:00
2022-11-14 01:17:12 +00:00
const [isTokenExpired, setIsTokenExpired] = createSignal(false)
const [isTokenInvalid, setIsTokenInvalid] = createSignal(false)
2022-10-25 16:25:42 +00:00
const confirmedEmail = createMemo(() => session()?.user?.email || '')
const { searchParams } = useRouter<ConfirmEmailSearchParams>()
onMount(async () => {
const token = searchParams().token
try {
await confirmEmail(token)
} catch (error) {
2022-11-14 01:17:12 +00:00
if (error instanceof ApiError) {
if (error.code === 'token_expired') {
setIsTokenExpired(true)
return
}
if (error.code === 'token_invalid') {
setIsTokenInvalid(true)
return
}
}
2022-10-25 16:25:42 +00:00
console.log(error)
}
})
return (
<div>
2022-11-14 01:17:12 +00:00
{/* TODO: texts */}
<Show when={isTokenExpired()}>
<div class={styles.title}>Ссылка больше не действительна</div>
<div class={styles.text}>
<a href="/?modal=auth&mode=login" class={styles.sendLink} onClick={handleClientRouteLinkClick}>
{/*TODO: temp solution, should be send link again, but we don't have email here*/}
Вход
</a>
</div>
</Show>
<Show when={isTokenInvalid()}>
<div class={styles.title}>Неправильная ссылка</div>
<div class={styles.text}>
<a href="/?modal=auth&mode=login" class={styles.sendLink} onClick={handleClientRouteLinkClick}>
{/*TODO: temp solution, should be send link again, but we don't have email here*/}
Вход
</a>
</div>
</Show>
2022-10-25 16:25:42 +00:00
<Show when={Boolean(confirmedEmail())}>
2022-11-14 01:17:12 +00:00
<div class={styles.title}>{t('Hooray! Welcome!')}</div>
2022-10-25 16:25:42 +00:00
<div class={styles.text}>
{t("You've confirmed email")} {confirmedEmail()}
</div>
2022-11-14 01:17:12 +00:00
<div>
<button class={clsx('button', styles.submitButton)} onClick={() => hideModal()}>
{t('Go to main page')}
</button>
</div>
2022-10-25 16:25:42 +00:00
</Show>
</div>
)
}