'use client' import { useState } from 'react' import { useTranslation } from 'react-i18next' import { useContext } from 'use-context-selector' import s from './index.module.css' import Collapse from '@/app/components/header/account-setting/collapse' import type { IItem } from '@/app/components/header/account-setting/collapse' import Modal from '@/app/components/base/modal' import Confirm from '@/app/components/base/confirm' import Button from '@/app/components/base/button' import { updateUserProfile } from '@/service/common' import { useAppContext } from '@/context/app-context' import { ToastContext } from '@/app/components/base/toast' import AppIcon from '@/app/components/base/app-icon' import Avatar from '@/app/components/base/avatar' import { IS_CE_EDITION } from '@/config' import Input from '@/app/components/base/input' const titleClassName = ` text-sm font-medium text-gray-900 ` const descriptionClassName = ` mt-1 text-xs font-normal text-gray-500 ` const validPassword = /^(?=.*[a-zA-Z])(?=.*\d).{8,}$/ export default function AccountPage() { const { t } = useTranslation() const { systemFeatures } = useAppContext() const { mutateUserProfile, userProfile, apps } = useAppContext() const { notify } = useContext(ToastContext) const [editNameModalVisible, setEditNameModalVisible] = useState(false) const [editName, setEditName] = useState('') const [editing, setEditing] = useState(false) const [editPasswordModalVisible, setEditPasswordModalVisible] = useState(false) const [currentPassword, setCurrentPassword] = useState('') const [password, setPassword] = useState('') const [confirmPassword, setConfirmPassword] = useState('') const [showDeleteAccountModal, setShowDeleteAccountModal] = useState(false) const [showCurrentPassword, setShowCurrentPassword] = useState(false) const [showPassword, setShowPassword] = useState(false) const [showConfirmPassword, setShowConfirmPassword] = useState(false) const handleEditName = () => { setEditNameModalVisible(true) setEditName(userProfile.name) } const handleSaveName = async () => { try { setEditing(true) await updateUserProfile({ url: 'account/name', body: { name: editName } }) notify({ type: 'success', message: t('common.actionMsg.modifiedSuccessfully') }) mutateUserProfile() setEditNameModalVisible(false) setEditing(false) } catch (e) { notify({ type: 'error', message: (e as Error).message }) setEditNameModalVisible(false) setEditing(false) } } const showErrorMessage = (message: string) => { notify({ type: 'error', message, }) } const valid = () => { if (!password.trim()) { showErrorMessage(t('login.error.passwordEmpty')) return false } if (!validPassword.test(password)) { showErrorMessage(t('login.error.passwordInvalid')) return false } if (password !== confirmPassword) { showErrorMessage(t('common.account.notEqual')) return false } return true } const resetPasswordForm = () => { setCurrentPassword('') setPassword('') setConfirmPassword('') } const handleSavePassword = async () => { if (!valid()) return try { setEditing(true) await updateUserProfile({ url: 'account/password', body: { password: currentPassword, new_password: password, repeat_new_password: confirmPassword, }, }) notify({ type: 'success', message: t('common.actionMsg.modifiedSuccessfully') }) mutateUserProfile() setEditPasswordModalVisible(false) resetPasswordForm() setEditing(false) } catch (e) { notify({ type: 'error', message: (e as Error).message }) setEditPasswordModalVisible(false) setEditing(false) } } const renderAppItem = (item: IItem) => { return (
{userProfile.name}
{userProfile.email}