import { useMemo } from "react"; import { faArrowDown, faArrowUp, faMagnifyingGlass, faSearch, faUser } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { EmptyState, IconButton, Input, Pagination, Table, TableContainer, TBody, Th, THead, Tr } from "@app/components/v2"; import { usePagination, useResetPageHelper } from "@app/hooks"; import { OrderByDirection } from "@app/hooks/api/generic/types"; import { OrgUser } from "@app/hooks/api/types"; import { useListUserGroupMemberships } from "@app/hooks/api/users/queries"; import { UsePopUpState } from "@app/hooks/usePopUp"; import { UserGroupsRow } from "./UserGroupsRow"; type Props = { orgMembership: OrgUser; handlePopUpOpen: (popUpName: keyof UsePopUpState<["removeUserFromGroup"]>, data?: {}) => void; }; enum UserGroupsOrderBy { Name = "name" } export const UserGroupsTable = ({ handlePopUpOpen, orgMembership }: Props) => { const { data: groupMemberships = [], isLoading } = useListUserGroupMemberships( orgMembership.user.username ); const { search, setSearch, setPage, page, perPage, setPerPage, offset, orderDirection, toggleOrderDirection } = usePagination(UserGroupsOrderBy.Name, { initPerPage: 10 }); const filteredGroupMemberships = useMemo( () => groupMemberships .filter((group) => group.name.toLowerCase().includes(search.trim().toLowerCase())) .sort((a, b) => { const [membershipOne, membershipTwo] = orderDirection === OrderByDirection.ASC ? [a, b] : [b, a]; return membershipOne.name.toLowerCase().localeCompare(membershipTwo.name.toLowerCase()); }), [groupMemberships, orderDirection, search] ); useResetPageHelper({ totalCount: filteredGroupMemberships.length, offset, setPage }); return (
setSearch(e.target.value)} leftIcon={} placeholder="Search groups..." /> {filteredGroupMemberships.slice(offset, perPage * page).map((group) => ( ))}
Name
{Boolean(filteredGroupMemberships.length) && ( )} {!isLoading && !filteredGroupMemberships?.length && ( )}
); };