import React, { useEffect, useState } from "react"; import { useTranslation } from "react-i18next"; import { userService } from "../../services"; import { useAppSelector } from "../../store"; import * as api from "../../helpers/api"; import toastHelper from "../Toast"; import Dropdown from "../common/Dropdown"; import { showCommonDialog } from "../Dialog/CommonDialog"; import showChangeMemberPasswordDialog from "../ChangeMemberPasswordDialog"; import "../../less/settings/member-section.less"; interface State { createUserUsername: string; createUserPassword: string; repeatUserPassword: string; } const PreferencesSection = () => { const { t } = useTranslation(); const currentUser = useAppSelector((state) => state.user.user); const [state, setState] = useState({ createUserUsername: "", createUserPassword: "", repeatUserPassword: "", }); const [userList, setUserList] = useState([]); useEffect(() => { fetchUserList(); }, []); const fetchUserList = async () => { const { data } = (await api.getUserList()).data; setUserList(data); }; const handleUsernameInputChange = (event: React.ChangeEvent) => { setState({ ...state, createUserUsername: event.target.value, }); }; const handlePasswordInputChange = (event: React.ChangeEvent) => { setState({ ...state, createUserPassword: event.target.value, }); }; const handleRepeatPasswordInputChange = (event: React.ChangeEvent) => { setState({ ...state, repeatUserPassword: event.target.value, }); }; const handleCreateUserBtnClick = async () => { if (state.createUserUsername === "" || state.createUserPassword === "") { toastHelper.error(t("message.fill-form")); return; } if (state.createUserPassword !== state.repeatUserPassword) { toastHelper.error(t("message.password-not-match")); return; } const userCreate: UserCreate = { username: state.createUserUsername, password: state.createUserPassword, role: "USER", }; try { await api.createUser(userCreate); } catch (error: any) { toastHelper.error(error.response.data.message); } await fetchUserList(); setState({ createUserUsername: "", createUserPassword: "", repeatUserPassword: "", }); }; const handleChangePasswordClick = (user: User) => { showChangeMemberPasswordDialog(user); }; const handleArchiveUserClick = (user: User) => { showCommonDialog({ title: `Archive Member`, content: `❗️Are you sure to archive ${user.username}?`, style: "warning", onConfirm: async () => { await userService.patchUser({ id: user.id, rowStatus: "ARCHIVED", }); fetchUserList(); }, }); }; const handleRestoreUserClick = async (user: User) => { await userService.patchUser({ id: user.id, rowStatus: "NORMAL", }); fetchUserList(); }; const handleDeleteUserClick = (user: User) => { showCommonDialog({ title: `Delete Member`, content: `Are you sure to delete ${user.username}? THIS ACTION IS IRREVERSIABLE.❗️`, style: "warning", onConfirm: async () => { await userService.deleteUser({ id: user.id, }); fetchUserList(); }, }); }; return (

{t("setting.member-section.create-a-member")}

{t("common.username")}
{t("common.password")}
{t("common.repeat-password-short")}
{t("setting.member-list")}
ID {t("common.username")}
{userList.map((user) => (
{user.id} {user.username}
{currentUser?.id === user.id ? ( {t("common.yourself")} ) : ( {user.rowStatus === "NORMAL" ? ( ) : ( <> )} } /> )}
))}
); }; export default PreferencesSection;