mirror of
https://git.mirrors.martin98.com/https://github.com/infiniflow/ragflow.git
synced 2025-06-04 11:24:00 +08:00

### What problem does this PR solve? fix: Limit the length of the new password input box to no less than 8 #1634 ### Type of change - [x] Bug Fix (non-breaking change which fixes an issue)
140 lines
3.9 KiB
TypeScript
140 lines
3.9 KiB
TypeScript
import { useOneNamespaceEffectsLoading } from '@/hooks/store-hooks';
|
|
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 loading = useOneNamespaceEffectsLoading('settingModel', ['setting']);
|
|
const { form, submittable } = useValidateSubmittable();
|
|
const saveSetting = 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;
|