"use client"; import { TableCell, TableRow, Table, TableHeader, TableColumn, TableBody, Pagination, Dropdown, DropdownTrigger, DropdownMenu, DropdownItem, Input, User, Card, Divider, Chip, ChipProps, Checkbox, } from "@heroui/react"; import { Button } from "@heroui/button"; import React, { Key, useCallback, useEffect, useMemo, useState } from "react"; import { AddIcon, CreateIconIon, DeleteIcon, DotsYIcon, EyeFilledIcon, EyeIconMdi, SearchIcon, } from "@/components/icons"; import Link from "next/link"; import { getAllUserLevels } from "@/services/user-levels/user-levels-service"; import { close, loading } from "@/config/swal"; import { stringify } from "querystring"; type UserObject = { id: number; name: string; levelNumber: string; aliasName: string; parentLevelId: string; provinceId: string; status: string; }; export default function MasterUserLevelTable() { const [totalPage, setTotalPage] = useState(1); const [masterUserLevelTable, setMasterUserLevel] = useState([]); const [search, setSearch] = useState(""); const [doSetup, setDoSetup] = useState(false); const [userLevelAll, setUserLevelAll] = useState([]); const [selectAllLevel, setSelectAllLevel] = useState(false); const [selectedLevel, setSelectedLevel] = useState([]); const columns = [ { name: "No", uid: "no" }, { name: "Name", uid: "name" }, { name: "User Name", uid: "aliasName" }, { name: "Level Number", uid: "levelNumber" }, { name: "Parent", uid: "parentLevelId" }, { name: "Action", uid: "actions" }, ]; const columns2 = [ { name: "No", uid: "no" }, { name: "Setup", uid: "setup" }, { name: "Name", uid: "name" }, { name: "User Name", uid: "aliasName" }, { name: "Level Number", uid: "levelNumber" }, { name: "Parent", uid: "parentLevelId" }, { name: "Action", uid: "actions" }, ]; const [page, setPage] = useState(1); useEffect(() => { fetchData(); }, [page, selectedLevel]); useEffect(() => { fetchDataAll(); }, []); async function fetchData() { loading(); const request = { page: page, limit: 10, search: search, }; const res = await getAllUserLevels(request); const data = res?.data?.data; setTotalPage(Math.ceil(res?.data?.meta?.totalPage / 10)); await initUserData(10, data); close(); } async function fetchDataAll() { loading(); const request = { page: 1, limit: -1, search: "", }; const res = await getAllUserLevels(request); const data = res?.data?.data; setUserLevelAll(data); const temp = []; for (const element of data) { if (element.isApprovalActive) { temp.push(String(element.id)); } } setSelectedLevel(temp); close(); } async function initUserData(limit: number, data?: any) { if (data) { console.log(data); const startIndex = limit * (page - 1); let iterate = 0; const newData = data.map((value: any) => { iterate++; value.no = startIndex + iterate; return value; }); setMasterUserLevel(newData); } } let typingTimer: NodeJS.Timeout; const doneTypingInterval = 1500; const handleKeyUp = () => { clearTimeout(typingTimer); typingTimer = setTimeout(doneTyping, doneTypingInterval); }; const handleKeyDown = () => { clearTimeout(typingTimer); }; async function doneTyping() { fetchData(); } const doMapping = (status: boolean) => { setSelectAllLevel(status); if (status) { const temp = []; for (const element of userLevelAll) { temp.push(String(element.id)); } setSelectedLevel(temp); } else { setSelectedLevel([]); } }; const handleSelectedLevel = (id: string, checked: boolean) => { console.log("change", id, checked); const temp = [...selectedLevel]; if (checked) { temp.push(id); setSelectedLevel(temp); if (temp.length === userLevelAll.length) { setSelectAllLevel(true); } } else { const newTemp = temp.filter((a) => a !== id); setSelectedLevel(newTemp); if (newTemp.length !== userLevelAll.length) { setSelectAllLevel(false); } } }; const renderCell = useCallback( (masterUserLevel: UserObject, columnKey: Key) => { const findParentName = (data: string | number) => { let name = "-"; for (let i = 9; i < userLevelAll?.length; i++) { const temp = userLevelAll[i]; if (temp.id === Number(data)) { name = temp.name; break; } } return name; }; const cellValue = masterUserLevel[columnKey as keyof UserObject]; switch (columnKey) { case "parentLevelId": return

{findParentName(cellValue)}

; case "setup": return ( handleSelectedLevel(String(masterUserLevel.id), e) } /> ); case "actions": return (
{/* Detail */} Edit Delete
); default: return cellValue; } }, [selectedLevel, userLevelAll, masterUserLevelTable] ); return ( <>

Pencarian

} type="text" onChange={(e) => setSearch(e.target.value)} onKeyUp={handleKeyUp} onKeyDown={handleKeyDown} />
{doSetup && ( )}
{(column) => ( {column.uid === "setup" ? ( { doMapping(e); }} > ) : ( column.name )} )} {(item) => ( {(columnKey) => ( {renderCell(item, columnKey)} )} )}
setPage(page)} />
); }