parent
3bcdfa582c
commit
23541c06ce
|
@ -1,38 +0,0 @@
|
||||||
import styles from './ConfirmEmail.module.scss'
|
|
||||||
import authModalStyles from './AuthModal.module.scss'
|
|
||||||
import { clsx } from 'clsx'
|
|
||||||
import { t } from '../../../utils/intl'
|
|
||||||
import { hideModal } from '../../../stores/ui'
|
|
||||||
import { onMount } from 'solid-js'
|
|
||||||
import { useRouter } from '../../../stores/router'
|
|
||||||
|
|
||||||
type ConfirmOAuthSearchParams = {
|
|
||||||
token: string
|
|
||||||
}
|
|
||||||
|
|
||||||
export const ConfirmOAuth = () => {
|
|
||||||
const { searchParams } = useRouter<ConfirmOAuthSearchParams>()
|
|
||||||
|
|
||||||
onMount(async () => {
|
|
||||||
console.debug('[confirm-oauth] params', searchParams())
|
|
||||||
const token = searchParams().token
|
|
||||||
localStorage.setItem('token', token)
|
|
||||||
window.addEventListener('mousemove', () => window.close())
|
|
||||||
window.addEventListener('keydown', () => window.close())
|
|
||||||
window.addEventListener('click', () => window.close())
|
|
||||||
})
|
|
||||||
|
|
||||||
return (
|
|
||||||
<div>
|
|
||||||
<div class={styles.title}>{t('Hooray! Welcome!')}</div>
|
|
||||||
<div class={styles.text}>
|
|
||||||
{t("You've confirmed your account")} { /* TODO: get '%username%' */ }
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<button class={clsx('button', authModalStyles.submitButton)} onClick={() => hideModal()}>
|
|
||||||
{t('Back to mainpage')}
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
)
|
|
||||||
}
|
|
|
@ -1,4 +1,4 @@
|
||||||
import styles from './ConfirmEmail.module.scss'
|
import styles from './EmailConfirm.module.scss'
|
||||||
import authModalStyles from './AuthModal.module.scss'
|
import authModalStyles from './AuthModal.module.scss'
|
||||||
import { clsx } from 'clsx'
|
import { clsx } from 'clsx'
|
||||||
import { t } from '../../../utils/intl'
|
import { t } from '../../../utils/intl'
|
||||||
|
@ -11,7 +11,7 @@ type ConfirmEmailSearchParams = {
|
||||||
token: string
|
token: string
|
||||||
}
|
}
|
||||||
|
|
||||||
export const ConfirmEmail = () => {
|
export const EmailConfirm = () => {
|
||||||
const confirmedEmail = 'test@test.com'
|
const confirmedEmail = 'test@test.com'
|
||||||
|
|
||||||
const { searchParams } = useRouter<ConfirmEmailSearchParams>()
|
const { searchParams } = useRouter<ConfirmEmailSearchParams>()
|
|
@ -1,5 +1,5 @@
|
||||||
import { Show } from 'solid-js/web'
|
import { Show } from 'solid-js/web'
|
||||||
import { createEffect, createMemo } from 'solid-js'
|
import { createEffect, createMemo, onMount } from 'solid-js'
|
||||||
import { t } from '../../../utils/intl'
|
import { t } from '../../../utils/intl'
|
||||||
import { hideModal } from '../../../stores/ui'
|
import { hideModal } from '../../../stores/ui'
|
||||||
import { handleClientRouteLinkClick, useRouter } from '../../../stores/router'
|
import { handleClientRouteLinkClick, useRouter } from '../../../stores/router'
|
||||||
|
@ -8,15 +8,25 @@ import styles from './AuthModal.module.scss'
|
||||||
import { LoginForm } from './LoginForm'
|
import { LoginForm } from './LoginForm'
|
||||||
import { RegisterForm } from './RegisterForm'
|
import { RegisterForm } from './RegisterForm'
|
||||||
import { ForgotPasswordForm } from './ForgotPasswordForm'
|
import { ForgotPasswordForm } from './ForgotPasswordForm'
|
||||||
import { ConfirmEmail } from './ConfirmEmail'
|
import { EmailConfirm } from './EmailConfirm'
|
||||||
import type { AuthModalMode, AuthModalSearchParams } from './types'
|
import type { AuthModalMode, AuthModalSearchParams } from './types'
|
||||||
import { ConfirmOAuth } from './ConfirmOAuth'
|
|
||||||
|
|
||||||
|
const AUTH_MODAL_MODES: Record<AuthModalMode, AuthModalMode> = {
|
||||||
|
login: 'login',
|
||||||
|
register: 'register',
|
||||||
|
'forgot-password': 'forgot-password',
|
||||||
|
// eslint-disable-next-line sonarjs/no-duplicate-string
|
||||||
|
'confirm-email': 'confirm-email'
|
||||||
|
}
|
||||||
|
|
||||||
export const AuthModal = () => {
|
export const AuthModal = () => {
|
||||||
let rootRef: HTMLDivElement
|
let rootRef: HTMLDivElement
|
||||||
|
|
||||||
const { searchParams } = useRouter<AuthModalSearchParams>()
|
const { searchParams } = useRouter<AuthModalSearchParams>()
|
||||||
const mode = createMemo<AuthModalMode>(() => searchParams().mode || 'login')
|
|
||||||
|
const mode = createMemo<AuthModalMode>(() => {
|
||||||
|
return AUTH_MODAL_MODES[searchParams().mode] || 'login'
|
||||||
|
})
|
||||||
|
|
||||||
createEffect((oldMode) => {
|
createEffect((oldMode) => {
|
||||||
if (oldMode !== mode()) {
|
if (oldMode !== mode()) {
|
||||||
|
@ -28,12 +38,12 @@ export const AuthModal = () => {
|
||||||
<div
|
<div
|
||||||
ref={rootRef}
|
ref={rootRef}
|
||||||
class={clsx('row', styles.view)}
|
class={clsx('row', styles.view)}
|
||||||
classList={{ [styles.signUp]: mode() === 'register' || mode().startsWith('confirm-') }}
|
classList={{ [styles.signUp]: mode() === 'register' || mode() === 'confirm-email' }}
|
||||||
>
|
>
|
||||||
<div class={clsx('col-sm-6', 'd-md-none', styles.authImage)}>
|
<div class={clsx('col-sm-6', 'd-md-none', styles.authImage)}>
|
||||||
<div
|
<div
|
||||||
class={styles.authImageText}
|
class={styles.authImageText}
|
||||||
classList={{ [styles.hidden]: mode() !== 'register' && !mode().startsWith('confirm-') }}
|
classList={{ [styles.hidden]: mode() !== 'register' && mode() !== 'confirm-email' }}
|
||||||
>
|
>
|
||||||
<h2>{t('Discours')}</h2>
|
<h2>{t('Discours')}</h2>
|
||||||
<h4>{t(`Join the global community of authors!`)}</h4>
|
<h4>{t(`Join the global community of authors!`)}</h4>
|
||||||
|
@ -70,10 +80,7 @@ export const AuthModal = () => {
|
||||||
<ForgotPasswordForm />
|
<ForgotPasswordForm />
|
||||||
</Show>
|
</Show>
|
||||||
<Show when={mode() === 'confirm-email'}>
|
<Show when={mode() === 'confirm-email'}>
|
||||||
<ConfirmEmail />
|
<EmailConfirm />
|
||||||
</Show>
|
|
||||||
<Show when={mode() === 'confirm-oauth'}>
|
|
||||||
<ConfirmOAuth />
|
|
||||||
</Show>
|
</Show>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
export type AuthModalMode = 'login' | 'register' | 'confirm-email' | 'confirm-oauth' | 'forgot-password'
|
export type AuthModalMode = 'login' | 'register' | 'confirm-email' | 'forgot-password'
|
||||||
|
|
||||||
export type AuthModalSearchParams = {
|
export type AuthModalSearchParams = {
|
||||||
mode: AuthModalMode
|
mode: AuthModalMode
|
||||||
|
|
6
src/components/Nav/Confirmed.scss
Normal file
6
src/components/Nav/Confirmed.scss
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
.center {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
height: 420px;
|
||||||
|
}
|
18
src/components/Nav/Confirmed.tsx
Normal file
18
src/components/Nav/Confirmed.tsx
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
import './Confirmed.scss'
|
||||||
|
import { onMount } from 'solid-js'
|
||||||
|
import { t } from '../../utils/intl'
|
||||||
|
|
||||||
|
export const Confirmed = (props: { token?: string }) => {
|
||||||
|
onMount(() => {
|
||||||
|
const token = props.token ?? document.cookie.split(';').at(0).replace('token=', '')
|
||||||
|
window.addEventListener('mousemove', () => window.close())
|
||||||
|
window.addEventListener('keydown', () => window.close())
|
||||||
|
window.addEventListener('click', () => window.close())
|
||||||
|
localStorage.setItem('token', token)
|
||||||
|
})
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<div class="center">{t('You was successfully authorized')}</div>
|
||||||
|
</>
|
||||||
|
)
|
||||||
|
}
|
|
@ -1,11 +1,11 @@
|
||||||
import { createEffect, createSignal, JSX, onMount, Show } from 'solid-js'
|
import { createEffect, createSignal, onMount, Show } from 'solid-js'
|
||||||
import style from './Popup.module.scss'
|
import style from './Popup.module.scss'
|
||||||
import { hideModal, useModalStore } from '../../stores/ui'
|
import { hideModal, useModalStore } from '../../stores/ui'
|
||||||
import { clsx } from 'clsx'
|
import { clsx } from 'clsx'
|
||||||
|
|
||||||
interface PopupProps {
|
interface PopupProps {
|
||||||
name: string
|
name: string
|
||||||
children: JSX.Element
|
children: any
|
||||||
class?: string
|
class?: string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -171,7 +171,7 @@ export type Mutation = {
|
||||||
}
|
}
|
||||||
|
|
||||||
export type MutationConfirmEmailArgs = {
|
export type MutationConfirmEmailArgs = {
|
||||||
token: Scalars['String']
|
code: Scalars['String']
|
||||||
}
|
}
|
||||||
|
|
||||||
export type MutationCreateChatArgs = {
|
export type MutationCreateChatArgs = {
|
||||||
|
|
|
@ -157,7 +157,6 @@
|
||||||
"Restore password": "Восстановить пароль",
|
"Restore password": "Восстановить пароль",
|
||||||
"Hooray! Welcome!": "Ура! Добро пожаловать!",
|
"Hooray! Welcome!": "Ура! Добро пожаловать!",
|
||||||
"You've confirmed email": "Вы подтвердили почту",
|
"You've confirmed email": "Вы подтвердили почту",
|
||||||
"You've confirmed your account": "Вы подтвердили свою учётную запись",
|
|
||||||
"This email is already taken. If it's you": "Такой email уже зарегистрирован. Если это вы",
|
"This email is already taken. If it's you": "Такой email уже зарегистрирован. Если это вы",
|
||||||
"enter": "войдите"
|
"enter": "войдите"
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,12 @@
|
||||||
---
|
---
|
||||||
|
import { Confirmed } from '../../components/Nav/Confirmed'
|
||||||
|
import { t } from '../../utils/intl'
|
||||||
|
|
||||||
const token = Astro.params.token?.toString() || ''
|
const token = Astro.params.token?.toString() || ''
|
||||||
return Astro.redirect('/?modal=confirm-oauth&token=' + token)
|
|
||||||
---
|
---
|
||||||
|
<html>
|
||||||
|
<head><title>{t('Discours')}</title></head>
|
||||||
|
<body>
|
||||||
|
<Confirmed token={token} />
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
10
src/pages/confirm/index.astro
Normal file
10
src/pages/confirm/index.astro
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
---
|
||||||
|
import { t } from '../../utils/intl'
|
||||||
|
import { Confirmed } from '../../components/Nav/Confirmed'
|
||||||
|
---
|
||||||
|
<html>
|
||||||
|
<head><title>{t('Discours')}</title></head>
|
||||||
|
<body>
|
||||||
|
<Confirmed />
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -1,4 +1,4 @@
|
||||||
export const isDev = import.meta.env.MODE === 'development'
|
export const isDev = import.meta.env.MODE === 'development'
|
||||||
|
|
||||||
// export const apiBaseUrl = 'https://newapi.discours.io'
|
export const apiBaseUrl = 'https://newapi.discours.io'
|
||||||
export const apiBaseUrl = 'http://localhost:8000'
|
// export const apiBaseUrl = 'http://localhost:8000'
|
||||||
|
|
Loading…
Reference in New Issue
Block a user