import { useFetchUserInfo, useSaveSetting, useSelectUserInfo, } from '@/hooks/userSettingHook'; import { getBase64FromUploadFileList, getUploadFileListFromBase64, normFile, } from '@/utils/fileUtil'; import { PlusOutlined, QuestionCircleOutlined } from '@ant-design/icons'; import { Button, Divider, Form, Input, Select, Space, Spin, Tooltip, Upload, UploadFile, } from 'antd'; import { useEffect } from 'react'; import SettingTitle from '../components/setting-title'; import { TimezoneList } from '../constants'; import { useSelectSubmitUserInfoLoading, useSelectUserInfoLoading, useValidateSubmittable, } from '../hooks'; import parentStyles from '../index.less'; import styles from './index.less'; const { Option } = Select; type FieldType = { nickname?: string; language?: string; email?: string; color_schema?: string; timezone?: string; avatar?: string; }; const tailLayout = { wrapperCol: { offset: 20, span: 4 }, }; const UserSettingProfile = () => { const userInfo = useSelectUserInfo(); const saveSetting = useSaveSetting(); const submitLoading = useSelectSubmitUserInfoLoading(); const { form, submittable } = useValidateSubmittable(); const loading = useSelectUserInfoLoading(); useFetchUserInfo(); const onFinish = async (values: any) => { const avatar = await getBase64FromUploadFileList(values.avatar); saveSetting({ ...values, avatar }); }; const onFinishFailed = (errorInfo: any) => { console.log('Failed:', errorInfo); }; useEffect(() => { const fileList: UploadFile[] = getUploadFileListFromBase64(userInfo.avatar); form.setFieldsValue({ ...userInfo, avatar: fileList }); }, [form, userInfo]); return (
label="Username" name="nickname" rules={[ { required: true, message: 'Please input your username!', whitespace: true, }, ]} > label={
Your photo
This will be displayed on your profile.
} name="avatar" valuePropName="fileList" getValueFromEvent={normFile} > { return false; }} showUploadList={{ showPreviewIcon: false, showRemoveIcon: false }} > label="Color schema" name="color_schema" rules={[ { required: true, message: 'Please select your color schema!' }, ]} > label="Language" name="language" rules={[{ required: true, message: 'Please input your language!' }]} > label="Timezone" name="timezone" rules={[{ required: true, message: 'Please input your timezone!' }]} > name="email" noStyle>

Once registered, an account cannot be changed and can only be cancelled.

prevValues.additional !== curValues.additional } >
); }; export default UserSettingProfile;