Files
AFFiNE-Mirror/packages/frontend/component/src/components/auth-components/sign-up-page.tsx
fundon 8ee9f6ec05 chore: improve password error message (#6255)
chore: improve error message

chore: add password minlength & maxlength i18n

chore: check max length

fix: i18n variables

feat: add CredentialsRequirementType
2024-03-26 07:15:06 +00:00

85 lines
2.4 KiB
TypeScript

import type { PasswordLimitsFragment } from '@affine/graphql';
import { useAFFiNEI18N } from '@affine/i18n/hooks';
import { useSetAtom } from 'jotai';
import type { FC } from 'react';
import { useCallback, useState } from 'react';
import { Button } from '../../ui/button';
import { pushNotificationAtom } from '../notification-center';
import { AuthPageContainer } from './auth-page-container';
import { SetPassword } from './set-password';
import type { User } from './type';
export const SignUpPage: FC<{
passwordLimits: PasswordLimitsFragment;
user: User;
onSetPassword: (password: string) => Promise<void>;
openButtonText?: string;
onOpenAffine: () => void;
}> = ({
passwordLimits,
user: { email },
onSetPassword: propsOnSetPassword,
onOpenAffine,
openButtonText,
}) => {
const t = useAFFiNEI18N();
const [hasSetUp, setHasSetUp] = useState(false);
const pushNotification = useSetAtom(pushNotificationAtom);
const onSetPassword = useCallback(
(passWord: string) => {
propsOnSetPassword(passWord)
.then(() => setHasSetUp(true))
.catch(e =>
pushNotification({
title: t['com.affine.auth.password.set-failed'](),
message: String(e),
key: Date.now().toString(),
type: 'error',
})
);
},
[propsOnSetPassword, pushNotification, t]
);
const onLater = useCallback(() => {
setHasSetUp(true);
}, []);
return (
<AuthPageContainer
title={
hasSetUp
? t['com.affine.auth.sign.up.success.title']()
: t['com.affine.auth.page.sent.email.title']()
}
subtitle={
hasSetUp ? (
t['com.affine.auth.sign.up.success.subtitle']()
) : (
<>
{t['com.affine.auth.page.sent.email.subtitle']({
min: String(passwordLimits.minLength),
max: String(passwordLimits.maxLength),
})}
<a href={`mailto:${email}`}>{email}</a>
</>
)
}
>
{hasSetUp ? (
<Button type="primary" size="large" onClick={onOpenAffine}>
{openButtonText ?? t['com.affine.auth.open.affine']()}
</Button>
) : (
<SetPassword
passwordLimits={passwordLimits}
onSetPassword={onSetPassword}
onLater={onLater}
showLater={true}
/>
)}
</AuthPageContainer>
);
};