import { ApiError, unwrap } from '@pipu/core'; import { useState } from 'react'; import { useTranslation } from 'react-i18next'; import { ScrollView } from 'react-native'; import { useSession, useUser } from '../lib/session'; import { Button, ErrorBox, Field, H1, Muted, Screen, useErrorText } from '../ui/kit'; /** Обязательный шаг: новые логин и пароль админа после первого запуска или замена временного пароля. */ export default function SetupScreen() { const { t } = useTranslation(['auth', 'common']); const session = useSession(); const user = useUser(); const errorText = useErrorText(); const admin = user.must_change_credentials; const min = user.role === 'user' ? 8 : 12; const [username, setUsername] = useState(user.username); const [password, setPassword] = useState(''); const [repeat, setRepeat] = useState(''); const [busy, setBusy] = useState(false); const [error, setError] = useState(null); const mismatch = repeat !== '' && repeat !== password; const fieldErr = (f: string) => (error instanceof ApiError && error.fieldCode(f) ? errorText(error) : undefined); const submit = async () => { setBusy(true); setError(null); try { const res = admin ? await session.client.POST('/api/v1/me/bootstrap-credentials', { body: { new_username: username.trim(), new_password: password } }) : await session.client.POST('/api/v1/me/password', { body: { new_password: password } }); await session.apply(unwrap(res)); } catch (e) { setError(e); } finally { setBusy(false); } }; return (

{t(admin ? 'setup.admin_title' : 'setup.password_title')}

{t(admin ? 'setup.admin_text' : 'setup.password_text')} {admin && } {error && !fieldErr('new_password') && !fieldErr('new_username') ? errorText(error) : null}