import { ErrorContent, FallbackComponent } from 'components/ErrorContent';
import { Loading } from 'components/Loading';
import React, { Suspense, useState } from 'react'
import { useTranslation } from 'react-i18next';
import { Config, Profile } from 'services/config';
import clsx from 'clsx';
import { useLogin } from 'services/s3si';
import { STAT_INK } from 'constant';
import { Header } from 'components/Header';
import { useSubField } from 'hooks/useSubField';
import { useNavigate } from 'react-router-dom';
import useSWRMutation from 'swr/mutation'
import { useService, useServiceMutation } from 'services/useService';
import { ErrorBoundary } from 'react-error-boundary';
const STAT_INK_KEY_LENGTH = 43;
const Page: React.FC<{ children?: React.ReactNode }> = ({ children }) => {
const { t } = useTranslation();
return
{children}
}
type FormData = {
config: Config,
profile: Profile,
}
const SPLATNET3_LANGS = {
"de-DE": "German",
"en-GB": "English (UK/Australia)",
"en-US": "English (US)",
"es-ES": "Spanish (Spain)",
"es-MX": "Spanish (Latin America)",
"fr-CA": "French (Canada)",
"fr-FR": "French (France)",
"it-IT": "Italian",
"ja-JP": "Japanese",
"ko-KR": "Korean",
"nl-NL": "Dutch",
"ru-RU": "Russian",
"zh-CN": "Chinese (China)",
"zh-TW": "Chinese (Taiwan)"
}
const UI_LANGS = {
"en": "English",
"zh-CN": "简体中文",
"ja": "日本語",
};
const Form: React.FC<{
oldValue: FormData,
onSaved?: () => void,
}> = ({ oldValue, onSaved }) => {
const { login } = useLogin();
const { t, i18n } = useTranslation();
const [value, setValue] = useState(oldValue);
const { subField } = useSubField({ value, onChange: setValue });
const { trigger: setProfile } = useServiceMutation('profile', 0)
const { trigger: setConfig } = useServiceMutation('config')
const changed = JSON.stringify(value) !== JSON.stringify(oldValue);
const sessionToken = subField('profile.state.loginState.sessionToken')
const statInkApiKey = subField('profile.state.statInkApiKey')
const splatnet3Lang = subField('profile.state.userLang')
const { trigger: onSave, isMutating: loading, error } = useSWRMutation('saveSettings', async () => {
await setProfile(value.profile);
await setConfig(value.config);
onSaved?.();
})
const loginState = useSWRMutation('login', async () => {
const result = await login();
if (!result) {
return;
}
sessionToken.onChange(result.sessionToken);
})
const statInkKeyError = (statInkApiKey.value?.length ?? STAT_INK_KEY_LENGTH) !== STAT_INK_KEY_LENGTH;
return <>
sessionToken.onChange(e.target.value)}
/>
>
}
const SettingsLoader: React.FC = () => {
const navigate = useNavigate();
const { data: config } = useService('config')
const { data: profile } = useService('profile', 0)
if (!config || !profile) {
return <>
Error
>
}
return <>