diff --git a/packages/next-common/components/fellowship/salary/claimants/list.jsx b/packages/next-common/components/fellowship/salary/claimants/list.jsx index 5963ee9a77..782dd6f7ca 100644 --- a/packages/next-common/components/fellowship/salary/claimants/list.jsx +++ b/packages/next-common/components/fellowship/salary/claimants/list.jsx @@ -2,7 +2,7 @@ import DataList from "next-common/components/dataList"; import { SecondaryCard } from "next-common/components/styled/containers/secondaryCard"; import FellowshipRank from "../../rank"; import { usePageProps } from "next-common/context/page"; -import { find } from "lodash-es"; +import { find, has, isNil } from "lodash-es"; import AddressUser from "next-common/components/user/addressUser"; import FellowshipSalaryMemberIsRegistered from "./isRegistered"; import Link from "next/link"; @@ -10,6 +10,9 @@ import { useSalaryAsset } from "next-common/hooks/useSalaryAsset"; import ValueDisplay from "next-common/components/valueDisplay"; import { toPrecision } from "next-common/utils"; import FellowshipSalaryMemberStatus from "./status"; +import useRankFilter from "next-common/hooks/fellowship/useRankFilter"; +import { TitleContainer } from "next-common/components/styled/containers/titleContainer"; +import { useFellowshipSalaryMemberStatusFilter } from "next-common/hooks/fellowship/salary/useFellowshipSalaryStatusFilter"; const columns = [ { @@ -50,19 +53,45 @@ const columns = [ export default function FellowshipSalaryClaimants() { const { fellowshipParams, fellowshipMembers, fellowshipSalaryClaimants } = usePageProps(); + const { symbol, decimals } = useSalaryAsset(); + + const resolvedClaimants = fellowshipSalaryClaimants.map((claimant) => { + const address = claimant?.address; + const member = find(fellowshipMembers, { address }); + const rank = member?.rank; + + return { + rank, + ...claimant, + }; + }); + + const ranks = [...new Set(fellowshipMembers.map((m) => m.rank))]; + const { rank, component: rankFilterComponent } = useRankFilter(ranks); + + const statusValues = ["attempted", "registered", "nothing"]; + const { status, component: statusFilterComponent } = + useFellowshipSalaryMemberStatusFilter(statusValues); + + const filteredClaimants = + isNil(rank) && isNil(status) + ? resolvedClaimants + : resolvedClaimants.filter((claimant) => { + return ( + (isNil(rank) || claimant.rank === rank) && + (isNil(status) || has(claimant?.status?.status, status)) + ); + }); const { activeSalary = [], passiveSalary = [] } = fellowshipParams ?? {}; - const { symbol, decimals } = useSalaryAsset(); - const rows = fellowshipSalaryClaimants?.map((claimant) => { + const rows = filteredClaimants?.map((claimant) => { const address = claimant?.address; const status = claimant?.status; const cycleIndex = status.lastActive; - const member = find(fellowshipMembers, { address }); - const rank = member?.rank; return [ - , + , , - + + + List + + {filteredClaimants.length} + + +
+ {rankFilterComponent} + {statusFilterComponent} +
+
+ + { + return { + label: upperFirst(value), + value, + }; + }), + ]; + + const [status, setStatus] = useState(options[0].value); + + const component = ( +
+
Status
+