|
import { useSaveSetting } from '@/hooks/user-setting-hooks'; |
|
import { rsaPsw } from '@/utils'; |
|
import { Button, Divider, Form, Input, Space } from 'antd'; |
|
import SettingTitle from '../components/setting-title'; |
|
import { useValidateSubmittable } from '../hooks'; |
|
|
|
import { useTranslate } from '@/hooks/common-hooks'; |
|
import styles from './index.less'; |
|
|
|
type FieldType = { |
|
password?: string; |
|
new_password?: string; |
|
confirm_password?: string; |
|
}; |
|
|
|
const tailLayout = { |
|
wrapperCol: { offset: 20, span: 4 }, |
|
}; |
|
|
|
const UserSettingPassword = () => { |
|
const { form, submittable } = useValidateSubmittable(); |
|
const { saveSetting, loading } = useSaveSetting(); |
|
const { t } = useTranslate('setting'); |
|
|
|
const onFinish = (values: any) => { |
|
const password = rsaPsw(values.password) as string; |
|
const new_password = rsaPsw(values.new_password) as string; |
|
|
|
saveSetting({ password, new_password }); |
|
}; |
|
|
|
const onFinishFailed = (errorInfo: any) => { |
|
console.log('Failed:', errorInfo); |
|
}; |
|
|
|
return ( |
|
<section className={styles.passwordWrapper}> |
|
<SettingTitle |
|
title={t('password')} |
|
description={t('passwordDescription')} |
|
></SettingTitle> |
|
<Divider /> |
|
<Form |
|
colon={false} |
|
name="basic" |
|
labelAlign={'left'} |
|
labelCol={{ span: 8 }} |
|
wrapperCol={{ span: 16 }} |
|
style={{ width: '100%' }} |
|
initialValues={{ remember: true }} |
|
onFinish={onFinish} |
|
onFinishFailed={onFinishFailed} |
|
form={form} |
|
autoComplete="off" |
|
// requiredMark={'optional'} |
|
> |
|
<Form.Item<FieldType> |
|
label={t('currentPassword')} |
|
name="password" |
|
rules={[ |
|
{ |
|
required: true, |
|
message: t('currentPasswordMessage'), |
|
whitespace: true, |
|
}, |
|
]} |
|
> |
|
<Input.Password /> |
|
</Form.Item> |
|
<Divider /> |
|
<Form.Item label={t('newPassword')} required> |
|
<Form.Item<FieldType> |
|
noStyle |
|
name="new_password" |
|
rules={[ |
|
{ |
|
required: true, |
|
message: t('newPasswordMessage'), |
|
whitespace: true, |
|
}, |
|
{ type: 'string', min: 8, message: t('newPasswordDescription') }, |
|
]} |
|
> |
|
<Input.Password /> |
|
</Form.Item> |
|
</Form.Item> |
|
<Divider /> |
|
<Form.Item<FieldType> |
|
label={t('confirmPassword')} |
|
name="confirm_password" |
|
dependencies={['new_password']} |
|
rules={[ |
|
{ |
|
required: true, |
|
message: t('confirmPasswordMessage'), |
|
whitespace: true, |
|
}, |
|
{ type: 'string', min: 8, message: t('newPasswordDescription') }, |
|
({ getFieldValue }) => ({ |
|
validator(_, value) { |
|
if (!value || getFieldValue('new_password') === value) { |
|
return Promise.resolve(); |
|
} |
|
return Promise.reject( |
|
new Error(t('confirmPasswordNonMatchMessage')), |
|
); |
|
}, |
|
}), |
|
]} |
|
> |
|
<Input.Password /> |
|
</Form.Item> |
|
<Divider /> |
|
<Form.Item |
|
{...tailLayout} |
|
shouldUpdate={(prevValues, curValues) => |
|
prevValues.additional !== curValues.additional |
|
} |
|
> |
|
<Space> |
|
<Button htmlType="button">{t('cancel')}</Button> |
|
<Button |
|
type="primary" |
|
htmlType="submit" |
|
disabled={!submittable} |
|
loading={loading} |
|
> |
|
{t('save', { keyPrefix: 'common' })} |
|
</Button> |
|
</Space> |
|
</Form.Item> |
|
</Form> |
|
</section> |
|
); |
|
}; |
|
|
|
export default UserSettingPassword; |
|
|