'use client' import React, { useEffect, useReducer } from 'react' import { useTranslation } from 'react-i18next' import Link from 'next/link' import useSWR from 'swr' import { useRouter } from 'next/navigation' // import { useContext } from 'use-context-selector' import Button from '@/app/components/base/button' import Tooltip from '@/app/components/base/tooltip' import { SimpleSelect } from '@/app/components/base/select' import { timezones } from '@/utils/timezone' import { LanguagesSupported, languages } from '@/i18n/language' import { oneMoreStep } from '@/service/common' import Toast from '@/app/components/base/toast' // import I18n from '@/context/i18n' type IState = { formState: 'processing' | 'error' | 'success' | 'initial' invitation_code: string interface_language: string timezone: string } const reducer = (state: IState, action: any) => { switch (action.type) { case 'invitation_code': return { ...state, invitation_code: action.value } case 'interface_language': return { ...state, interface_language: action.value } case 'timezone': return { ...state, timezone: action.value } case 'formState': return { ...state, formState: action.value } case 'failed': return { formState: 'initial', invitation_code: '', interface_language: 'en-US', timezone: 'Asia/Shanghai', } default: throw new Error('Unknown action.') } } const OneMoreStep = () => { const { t } = useTranslation() const router = useRouter() // const { locale } = useContext(I18n) const [state, dispatch] = useReducer(reducer, { formState: 'initial', invitation_code: '', interface_language: 'en-US', timezone: 'Asia/Shanghai', }) const { data, error } = useSWR(state.formState === 'processing' ? { url: '/account/init', body: { invitation_code: state.invitation_code, interface_language: state.interface_language, timezone: state.timezone, }, } : null, oneMoreStep) useEffect(() => { if (error && error.status === 400) { Toast.notify({ type: 'error', message: t('login.invalidInvitationCode') }) dispatch({ type: 'failed', payload: null }) } if (data) router.push('/apps') }, [data, error]) return ( <>
{t('login.createSample')}