Revert "oauth-confirm moved"

This reverts commit 5700968caf.
This commit is contained in:
Igor Lobanov 2022-10-31 13:36:41 +01:00
parent 3bcdfa582c
commit 23541c06ce
13 changed files with 68 additions and 58 deletions

View File

@ -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>
)
}

View File

@ -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>()

View File

@ -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>

View File

@ -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

View File

@ -0,0 +1,6 @@
.center {
display: flex;
justify-content: center;
align-items: center;
height: 420px;
}

View 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>
</>
)
}

View File

@ -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
} }

View File

@ -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 = {

View File

@ -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": "войдите"
} }

View File

@ -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>

View 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>

View File

@ -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'