import PrimaryButton from "@/components/button/PrimaryButton"; import TextInput from "@/components/input/TextInput"; import Pagination from "@/components/pagination/Pagination"; import { useGetPeopleByRaidGroupCount } from "@/hooks/PersonHooks"; import { RaidGroup } from "@/interface/RaidGroup"; import { useAuth } from "@/providers/AuthProvider"; import { isRaidGroupAdmin, isRaidGroupLeader } from "@/util/PermissionUtil"; import { useEffect, useState } from "react"; import { useDebouncedCallback } from "use-debounce"; import PersonModal from "./modals/PersonModal"; import PersonLoader from "./PersonLoader"; export default function PersonTab({ raidGroup }:{ raidGroup: RaidGroup; }){ const { accountPermissions, raidGroupPermissions } = useAuth(); const [ displayCreatePersonModal, setDisplayCreatePersonModal ] = useState(false); const [ page, setPage ] = useState(1); const [ totalPages, setTotalPages ] = useState(1); const [ searchTerm, setSearchTerm ] = useState(""); const [ sentSearchTerm, setSentSearchTerm ] = useState(); const pageSize = 10; const modalId = crypto.randomUUID().replaceAll("-", ""); const personCountQuery = useGetPeopleByRaidGroupCount(raidGroup?.raidGroupId ?? "", sentSearchTerm); const updateSearchTerm = useDebouncedCallback((newSearchTerm: string) => { setSentSearchTerm(newSearchTerm); }, 1000); useEffect(() => { updateSearchTerm(searchTerm ?? ""); }, [ searchTerm, updateSearchTerm ]); useEffect(() => { if(personCountQuery.status === "success"){ //TODO: Fix this warning // eslint-disable-next-line react-hooks/set-state-in-effect setTotalPages(Math.ceil(personCountQuery.data / pageSize)); } }, [ personCountQuery ]); return ( <>
 
{/* Add Person Button */}
setDisplayCreatePersonModal(true)} disabled={!isRaidGroupAdmin(raidGroup.raidGroupId ?? "", raidGroupPermissions, accountPermissions) && !isRaidGroupLeader(raidGroup.raidGroupId ?? "", raidGroupPermissions, accountPermissions)} > Create Person setDisplayCreatePersonModal(false)} person={undefined} raidGroupId={raidGroup.raidGroupId ?? ""} />
{/* Person Search Box */}
setSearchTerm(e.target.value)} placeholder="Search" />
{ /* Person List */} {/* Pagination */}
); }