2023-11-14 15:10:00 +00:00
|
|
|
|
import type { ConfirmEmailSearchParams } from './types'
|
|
|
|
|
|
2022-10-25 16:25:42 +00:00
|
|
|
|
import { clsx } from 'clsx'
|
2022-11-14 01:17:12 +00:00
|
|
|
|
import { createMemo, createSignal, onMount, Show } from 'solid-js'
|
2023-11-14 15:10:00 +00:00
|
|
|
|
|
|
|
|
|
import { useLocalize } from '../../../context/localize'
|
|
|
|
|
import { useSession } from '../../../context/session'
|
2023-11-28 13:18:25 +00:00
|
|
|
|
import { ApiError } from '../../../graphql/error'
|
2022-11-15 16:16:31 +00:00
|
|
|
|
import { useRouter } from '../../../stores/router'
|
2023-11-14 15:10:00 +00:00
|
|
|
|
import { hideModal } from '../../../stores/ui'
|
|
|
|
|
|
|
|
|
|
import styles from './AuthModal.module.scss'
|
2022-10-25 16:25:42 +00:00
|
|
|
|
|
|
|
|
|
export const EmailConfirm = () => {
|
2023-02-17 09:21:02 +00:00
|
|
|
|
const { t } = useLocalize()
|
2022-11-13 19:35:57 +00:00
|
|
|
|
const {
|
|
|
|
|
session,
|
2023-11-14 15:10:00 +00:00
|
|
|
|
actions: { confirmEmail },
|
2022-11-14 10:02:08 +00:00
|
|
|
|
} = useSession()
|
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}>
|
2023-02-17 09:21:02 +00:00
|
|
|
|
<a href="/?modal=auth&mode=login">
|
2022-11-14 01:17:12 +00:00
|
|
|
|
{/*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}>
|
2023-02-17 09:21:02 +00:00
|
|
|
|
<a href="/?modal=auth&mode=login">
|
2022-11-14 01:17:12 +00:00
|
|
|
|
{/*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>
|
|
|
|
|
)
|
|
|
|
|
}
|