import { Button, Dropdown, Input, Menu, MenuButton } from "@mui/joy"; import React, { useEffect, useState } from "react"; import { toast } from "react-hot-toast"; import * as api from "@/helpers/api"; import { useUserStore } from "@/store/module"; import { UserNamePrefix } from "@/store/v1"; import { useTranslate } from "@/utils/i18n"; import showChangeMemberPasswordDialog from "../ChangeMemberPasswordDialog"; import { showCommonDialog } from "../Dialog/CommonDialog"; import Icon from "../Icon"; interface State { createUserUsername: string; createUserPassword: string; } const MemberSection = () => { const t = useTranslate(); const userStore = useUserStore(); const currentUser = userStore.state.user; const [state, setState] = useState({ createUserUsername: "", createUserPassword: "", }); const [userList, setUserList] = useState([]); useEffect(() => { fetchUserList(); }, []); const fetchUserList = async () => { const { data } = await api.getUserList(); setUserList(data.sort((a, b) => a.id - b.id)); }; const handleUsernameInputChange = (event: React.ChangeEvent) => { setState({ ...state, createUserUsername: event.target.value, }); }; const handlePasswordInputChange = (event: React.ChangeEvent) => { setState({ ...state, createUserPassword: event.target.value, }); }; const handleCreateUserBtnClick = async () => { if (state.createUserUsername === "" || state.createUserPassword === "") { toast.error(t("message.fill-form")); return; } const userCreate: UserCreate = { username: state.createUserUsername, password: state.createUserPassword, role: "USER", }; try { await api.createUser(userCreate); } catch (error: any) { toast.error(error.response.data.message); } await fetchUserList(); setState({ createUserUsername: "", createUserPassword: "", }); }; const handleChangePasswordClick = (user: User) => { showChangeMemberPasswordDialog(user); }; const handleArchiveUserClick = (user: User) => { showCommonDialog({ title: t("setting.member-section.archive-member"), content: t("setting.member-section.archive-warning", { username: user.username }), style: "danger", dialogName: "archive-user-dialog", onConfirm: async () => { await userStore.patchUser({ id: user.id, rowStatus: "ARCHIVED", }); fetchUserList(); }, }); }; const handleRestoreUserClick = async (user: User) => { await userStore.patchUser({ id: user.id, rowStatus: "NORMAL", }); fetchUserList(); }; const handleDeleteUserClick = (user: User) => { showCommonDialog({ title: t("setting.member-section.delete-member"), content: t("setting.member-section.delete-warning", { username: user.username }), style: "danger", dialogName: "delete-user-dialog", onConfirm: async () => { await userStore.deleteUser(`${UserNamePrefix}${user.username}`); fetchUserList(); }, }); }; return (

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

{t("common.username")}
{t("common.password")}
{t("setting.member-list")}
{userList.map((user) => ( ))}
ID {t("common.username")} {t("common.nickname")} {t("common.email")}
{user.id} {user.username} {user.rowStatus === "ARCHIVED" && "(Archived)"} {user.nickname} {user.email} {currentUser?.id === user.id ? ( {t("common.yourself")} ) : ( {user.rowStatus === "NORMAL" ? ( ) : ( <> )} )}
); }; export default MemberSection;