'use client' import type { Locale } from '@/i18n-config' import { RiAccountCircleLine } from '@remixicon/react' import { noop } from 'es-toolkit/compat' import Link from 'next/link' import { useRouter, useSearchParams } from 'next/navigation' import { useCallback, useState } from 'react' import { useTranslation } from 'react-i18next' import Button from '@/app/components/base/button' import Input from '@/app/components/base/input' import Loading from '@/app/components/base/loading' import { SimpleSelect } from '@/app/components/base/select' import Toast from '@/app/components/base/toast' import { useGlobalPublicStore } from '@/context/global-public-context' import { useDocLink } from '@/context/i18n' import { setLocaleOnClient } from '@/i18n-config' import { languages, LanguagesSupported } from '@/i18n-config/language' import { activateMember } from '@/service/common' import { useInvitationCheck } from '@/service/use-common' import { timezones } from '@/utils/timezone' import { resolvePostLoginRedirect } from '../utils/post-login-redirect' export default function InviteSettingsPage() { const { t } = useTranslation() const systemFeatures = useGlobalPublicStore(s => s.systemFeatures) const docLink = useDocLink() const router = useRouter() const searchParams = useSearchParams() const token = decodeURIComponent(searchParams.get('invite_token') as string) const [name, setName] = useState('') const [language, setLanguage] = useState(LanguagesSupported[0]) const [timezone, setTimezone] = useState(() => Intl.DateTimeFormat().resolvedOptions().timeZone || 'America/Los_Angeles') const checkParams = { url: '/activate/check', params: { token, }, } const { data: checkRes, refetch: recheck } = useInvitationCheck(checkParams.params, !!token) const handleActivate = useCallback(async () => { try { if (!name) { Toast.notify({ type: 'error', message: t('enterYourName', { ns: 'login' }) }) return } const res = await activateMember({ url: '/activate', body: { token, name, interface_language: language, timezone, }, }) if (res.result === 'success') { // Tokens are now stored in cookies by the backend await setLocaleOnClient(language, false) const redirectUrl = resolvePostLoginRedirect(searchParams) router.replace(redirectUrl || '/apps') } } catch { recheck() } }, [language, name, recheck, timezone, token, router, t]) if (!checkRes) return if (!checkRes.is_valid) { return (
🤷‍♂️

{t('invalid', { ns: 'login' })}

) } return (

{t('setYourAccount', { ns: 'login' })}

setName(e.target.value)} placeholder={t('namePlaceholder', { ns: 'login' }) || ''} onKeyDown={(e) => { if (e.key === 'Enter') { e.preventDefault() e.stopPropagation() handleActivate() } }} />
item.supported)} onSelect={(item) => { setLanguage(item.value as Locale) }} />
{/* timezone */}
{ setTimezone(item.value as string) }} />
{!systemFeatures.branding.enabled && (
{t('license.tip', { ns: 'login' })}   {t('license.link', { ns: 'login' })}
)}
) }