diff --git a/src/components/Nav/AuthModal/EmailConfirm.module.scss b/src/components/Nav/AuthModal/ConfirmEmail.module.scss similarity index 100% rename from src/components/Nav/AuthModal/EmailConfirm.module.scss rename to src/components/Nav/AuthModal/ConfirmEmail.module.scss diff --git a/src/components/Nav/AuthModal/EmailConfirm.tsx b/src/components/Nav/AuthModal/ConfirmEmail.tsx similarity index 92% rename from src/components/Nav/AuthModal/EmailConfirm.tsx rename to src/components/Nav/AuthModal/ConfirmEmail.tsx index 6588285e..41922f01 100644 --- a/src/components/Nav/AuthModal/EmailConfirm.tsx +++ b/src/components/Nav/AuthModal/ConfirmEmail.tsx @@ -1,4 +1,4 @@ -import styles from './EmailConfirm.module.scss' +import styles from './ConfirmEmail.module.scss' import authModalStyles from './AuthModal.module.scss' import { clsx } from 'clsx' import { t } from '../../../utils/intl' @@ -11,7 +11,7 @@ type ConfirmEmailSearchParams = { token: string } -export const EmailConfirm = () => { +export const ConfirmEmail = () => { const confirmedEmail = 'test@test.com' const { searchParams } = useRouter() diff --git a/src/components/Nav/AuthModal/ConfirmOAuth.tsx b/src/components/Nav/AuthModal/ConfirmOAuth.tsx new file mode 100644 index 00000000..b46618a1 --- /dev/null +++ b/src/components/Nav/AuthModal/ConfirmOAuth.tsx @@ -0,0 +1,38 @@ +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() + + 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 ( +
+
{t('Hooray! Welcome!')}
+
+ {t("You've confirmed your account")} { /* TODO: get '%username%' */ } +
+
+ +
+
+ ) +} diff --git a/src/components/Nav/AuthModal/index.tsx b/src/components/Nav/AuthModal/index.tsx index 91480993..686ffecd 100644 --- a/src/components/Nav/AuthModal/index.tsx +++ b/src/components/Nav/AuthModal/index.tsx @@ -1,5 +1,5 @@ import { Show } from 'solid-js/web' -import { createEffect, createMemo, onMount } from 'solid-js' +import { createEffect, createMemo } from 'solid-js' import { t } from '../../../utils/intl' import { hideModal } from '../../../stores/ui' import { handleClientRouteLinkClick, useRouter } from '../../../stores/router' @@ -8,25 +8,15 @@ import styles from './AuthModal.module.scss' import { LoginForm } from './LoginForm' import { RegisterForm } from './RegisterForm' import { ForgotPasswordForm } from './ForgotPasswordForm' -import { EmailConfirm } from './EmailConfirm' +import { ConfirmEmail } from './ConfirmEmail' import type { AuthModalMode, AuthModalSearchParams } from './types' +import { ConfirmOAuth } from './ConfirmOAuth' -const AUTH_MODAL_MODES: Record = { - login: 'login', - register: 'register', - 'forgot-password': 'forgot-password', - // eslint-disable-next-line sonarjs/no-duplicate-string - 'confirm-email': 'confirm-email' -} export const AuthModal = () => { let rootRef: HTMLDivElement - const { searchParams } = useRouter() - - const mode = createMemo(() => { - return AUTH_MODAL_MODES[searchParams().mode] || 'login' - }) + const mode = createMemo(() => searchParams().mode || 'login') createEffect((oldMode) => { if (oldMode !== mode()) { @@ -38,12 +28,12 @@ export const AuthModal = () => {

{t('Discours')}

{t(`Join the global community of authors!`)}

@@ -80,7 +70,10 @@ export const AuthModal = () => { - + + + +
diff --git a/src/components/Nav/AuthModal/types.ts b/src/components/Nav/AuthModal/types.ts index e7aeed0e..4bccde25 100644 --- a/src/components/Nav/AuthModal/types.ts +++ b/src/components/Nav/AuthModal/types.ts @@ -1,4 +1,4 @@ -export type AuthModalMode = 'login' | 'register' | 'confirm-email' | 'forgot-password' +export type AuthModalMode = 'login' | 'register' | 'confirm-email' | 'confirm-oauth' | 'forgot-password' export type AuthModalSearchParams = { mode: AuthModalMode diff --git a/src/components/Nav/Confirmed.scss b/src/components/Nav/Confirmed.scss deleted file mode 100644 index 4307f056..00000000 --- a/src/components/Nav/Confirmed.scss +++ /dev/null @@ -1,6 +0,0 @@ -.center { - display: flex; - justify-content: center; - align-items: center; - height: 420px; -} diff --git a/src/components/Nav/Confirmed.tsx b/src/components/Nav/Confirmed.tsx deleted file mode 100644 index f870c83d..00000000 --- a/src/components/Nav/Confirmed.tsx +++ /dev/null @@ -1,18 +0,0 @@ -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 ( - <> -
{t('You was successfully authorized')}
- - ) -} diff --git a/src/components/Nav/Popup.tsx b/src/components/Nav/Popup.tsx index 40a25429..5afc9237 100644 --- a/src/components/Nav/Popup.tsx +++ b/src/components/Nav/Popup.tsx @@ -1,11 +1,11 @@ -import { createEffect, createSignal, onMount, Show } from 'solid-js' +import { createEffect, createSignal, JSX, onMount, Show } from 'solid-js' import style from './Popup.module.scss' import { hideModal, useModalStore } from '../../stores/ui' import { clsx } from 'clsx' interface PopupProps { name: string - children: any + children: JSX.Element class?: string } diff --git a/src/graphql/types.gen.ts b/src/graphql/types.gen.ts index 5b233587..0a520088 100644 --- a/src/graphql/types.gen.ts +++ b/src/graphql/types.gen.ts @@ -171,7 +171,7 @@ export type Mutation = { } export type MutationConfirmEmailArgs = { - code: Scalars['String'] + token: Scalars['String'] } export type MutationCreateChatArgs = { diff --git a/src/locales/ru.json b/src/locales/ru.json index 2f7a8b1d..7fea97ff 100644 --- a/src/locales/ru.json +++ b/src/locales/ru.json @@ -157,6 +157,7 @@ "Restore password": "Восстановить пароль", "Hooray! Welcome!": "Ура! Добро пожаловать!", "You've confirmed email": "Вы подтвердили почту", + "You've confirmed your account": "Вы подтвердили свою учётную запись", "This email is already taken. If it's you": "Такой email уже зарегистрирован. Если это вы", "enter": "войдите" } diff --git a/src/pages/confirm/[token].astro b/src/pages/confirm/[token].astro index 89528424..cd8ff21f 100644 --- a/src/pages/confirm/[token].astro +++ b/src/pages/confirm/[token].astro @@ -1,12 +1,4 @@ --- -import { Confirmed } from '../../components/Nav/Confirmed' -import { t } from '../../utils/intl' - const token = Astro.params.token?.toString() || '' +return Astro.redirect('/?modal=confirm-oauth&token=' + token) --- - -{t('Discours')} - - - - diff --git a/src/pages/confirm/index.astro b/src/pages/confirm/index.astro deleted file mode 100644 index 1edb4589..00000000 --- a/src/pages/confirm/index.astro +++ /dev/null @@ -1,10 +0,0 @@ ---- -import { t } from '../../utils/intl' -import { Confirmed } from '../../components/Nav/Confirmed' ---- - -{t('Discours')} - - - - diff --git a/src/utils/config.ts b/src/utils/config.ts index 75f03f39..748d491e 100644 --- a/src/utils/config.ts +++ b/src/utils/config.ts @@ -1,4 +1,4 @@ export const isDev = import.meta.env.MODE === 'development' -export const apiBaseUrl = 'https://newapi.discours.io' -// export const apiBaseUrl = 'http://localhost:8000' +// export const apiBaseUrl = 'https://newapi.discours.io' +export const apiBaseUrl = 'http://localhost:8000'