"use client"; import { CreateIconIon, DeleteIcon, DotsYIcon, EyeIconMdi, SearchIcon, SuspendIcon, } from "@/components/icons"; import { error, success } from "@/config/swal"; import { deleteArticle, getListArticle } from "@/services/article"; import { deleteMasterUser, listMasterUsers } from "@/services/master-user"; import { Article, MasterUser } from "@/types/globals"; import { Button } from "@heroui/button"; import { Input } from "@heroui/input"; import { Chip, ChipProps, Dropdown, DropdownItem, DropdownMenu, DropdownTrigger, Pagination, Select, SelectItem, Spinner, Table, TableBody, TableCell, TableColumn, TableHeader, TableRow, } from "@heroui/react"; import Link from "next/link"; import { Key, useCallback, useEffect, useState } from "react"; import Swal from "sweetalert2"; import withReactContent from "sweetalert2-react-content"; const columns = [ { name: "No", uid: "no" }, { name: "Username", uid: "username" }, { name: "Fullname", uid: "fullname" }, { name: "Email", uid: "email" }, { name: "Status", uid: "status" }, // { name: "Identity Type", uid: "identityType" }, // { name: "Identity Number", uid: "identityNumber" }, // { name: "Users", uid: "users" }, // { name: "Status", uid: "status" }, { name: "Aksi", uid: "actions" }, ]; export default function MasterUserTable() { const MySwal = withReactContent(Swal); const [user, setUser] = useState([]); const [page, setPage] = useState(1); const [totalPage, setTotalPage] = useState(1); const [showData, setShowData] = useState("10"); const [search, setSearch] = useState(""); const [searchType, setSearchType] = useState("username"); useEffect(() => { initState(); }, [page, showData]); async function initState() { const res = await listMasterUsers({ page: page, limit: Number(showData), fullname: searchType === "fullname" ? search : "", username: searchType === "username" ? search : "", email: searchType === "email" ? search : "", }); getTableNumber(10, res?.data?.data); setTotalPage(res?.data?.meta?.totalPage); } const getTableNumber = (limit: number, data?: any) => { if (data) { const startIndex = limit * (page - 1); let iterate = 0; const newData = data.map((value: any) => { iterate++; value.no = startIndex + iterate; return value; }); setUser(newData); } }; async function doDelete(id: any) { // loading(); const resDelete = await deleteMasterUser(id); if (resDelete?.error) { error(resDelete.message); return false; } close(); successSubmit(); } const handleDelete = (id: any) => { MySwal.fire({ title: "Hapus Data", icon: "warning", showCancelButton: true, cancelButtonColor: "#3085d6", confirmButtonColor: "#d33", confirmButtonText: "Hapus", }).then((result) => { if (result.isConfirmed) { doDelete(id); } }); }; function successSubmit() { MySwal.fire({ title: "Sukses", icon: "success", confirmButtonColor: "#3085d6", confirmButtonText: "OK", }).then((result) => { if (result.isConfirmed) { initState(); } }); } const handleSuspend = (id: number, status: boolean) => { MySwal.fire({ title: `${!status ? "Lepas " : ""}Suspend User?`, icon: "warning", showCancelButton: true, cancelButtonColor: "#3085d6", confirmButtonColor: "#d33", confirmButtonText: "Yes", }).then((result) => { if (result.isConfirmed) { doSuspend(id, status); } }); }; async function doSuspend(id: number, status: boolean) { // loading(); console.log("do suspend", id, status); // const resDelete = await deleteMasterUser(id); // if (resDelete?.error) { // error(resDelete.message); // return false; // } // close(); successSubmit(); } const renderCell = useCallback((user: MasterUser, columnKey: Key) => { const cellValue = user[columnKey as keyof MasterUser]; const statusColorMap: Record = { active: "primary", cancel: "danger", pending: "success", }; switch (columnKey) { case "id": return
{user.id}
; case "status": return (
{user?.isSuspend ? "Suspend" : "Active"}
); case "actions": return (
Edit handleSuspend(user.id, !user?.isSuspend)} > Suspend handleDelete(user.id)} > Delete
); default: return cellValue; } }, []); let typingTimer: NodeJS.Timeout; const doneTypingInterval = 1500; const handleKeyUp = () => { clearTimeout(typingTimer); typingTimer = setTimeout(doneTyping, doneTypingInterval); }; const handleKeyDown = () => { clearTimeout(typingTimer); }; async function doneTyping() { initState(); } return ( <>

Pencarian

} type="text" onChange={(e) => setSearch(e.target.value)} onKeyUp={handleKeyUp} onKeyDown={handleKeyDown} endContent={ } />

Data

{(column) => ( {column.name} )} } > {(item) => ( {(columnKey) => ( {renderCell(item, columnKey)} )} )}
setPage(page)} />
); }