|
|
import { useRef, useState } from "react";import { titleCase } from "text-case";import Admin from "@/models/admin";import EditUserModal from "./EditUserModal";import showToast from "@/utils/toast";import { useModal } from "@/hooks/useModal";import ModalWrapper from "@/components/ModalWrapper";import moment from 'moment';
const ModMap = { admin: ["admin", "manager", "default"], manager: ["manager", "default"], default: [],};
export default function UserRow({ currUser, user }) { const rowRef = useRef(null); const canModify = ModMap[currUser?.role || "default"].includes(user.role); const [suspended, setSuspended] = useState(user.suspended === 1); const { isOpen, openModal, closeModal } = useModal(); const handleSuspend = async () => { if ( !window.confirm( `您确定要删除吗 ${user.username}?\n在您这样做之后,它们将被注销,并且无法重新登录` ) ) return false;
const { success, error } = await Admin.updateUser(user.id, { suspended: suspended ? 0 : 1, }); if (!success) showToast(error, "error", { clear: true }); if (success) { showToast( `User ${!suspended ? "has been suspended" : "is no longer suspended"}.`, "success", { clear: true } ); setSuspended(!suspended); } }; const handleDelete = async () => { if ( !window.confirm( `您确定要删除吗 ${user.username}?\n在您这样做之后,它们将被注销,并且无法重新登录` ) ) return false; const { success, error } = await Admin.deleteUser(user.id); if (!success) showToast(error, "error", { clear: true }); if (success) { rowRef?.current?.remove(); showToast("User deleted from system.", "success", { clear: true }); } };
return ( <> <tr ref={rowRef} className="bg-transparent text-white text-opacity-80 text-sm font-medium" > <th scope="row" className="px-6 py-4 whitespace-nowrap"> {user.username} </th> <td className="px-6 py-4">{titleCase(user.role)}</td> <td className="px-6 py-4">{new Date(user.createdAt).toLocaleDateString()}</td> <td className="px-6 py-4 flex items-center gap-x-6"> {canModify && ( <button onClick={openModal} className="text-sm font-medium text-white/80 light:text-black/80 rounded-lg hover:text-white hover:light:text-gray-500 px-2 py-1 hover:bg-white hover:bg-opacity-10" > 编辑 </button> )} {currUser?.id !== user.id && canModify && ( <> <button onClick={handleSuspend} className="text-sm font-medium text-white/80 light:text-black/80 hover:light:text-orange-500 hover:text-orange-300 rounded-lg px-2 py-1 hover:bg-white hover:light:bg-orange-50 hover:bg-opacity-10" > {suspended ? "Unsuspend" : "Suspend"} </button> <button onClick={handleDelete} className="text-sm font-medium text-white/80 light:text-black/80 hover:light:text-red-500 hover:text-red-300 rounded-lg px-2 py-1 hover:bg-white hover:light:bg-red-50 hover:bg-opacity-10" > 删除 </button> </> )} </td> </tr> <ModalWrapper isOpen={isOpen}> <EditUserModal currentUser={currUser} user={user} closeModal={closeModal} /> </ModalWrapper> </> );}
|