From b3cf6d909b18491b55cd7ede9ce588f96f2cf89b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89mile=20R=C3=A9?= Date: Wed, 29 Jul 2026 10:22:32 +0200 Subject: [PATCH] Improve people list filters and invite state MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace the cramped status checkboxes with a multi-select dropdown (new DropdownCheckboxItem), and update the Relay store to PENDING when an activation email is sent so the row reflects the server-side state change immediately. Signed-off-by: Émile Ré --- .../people/_components/PeopleList.tsx | 43 +++++++++++++------ .../people/_components/PeopleListItem.tsx | 5 +++ packages/ui/src/Atoms/Dropdown/Dropdown.tsx | 39 ++++++++++++++++- packages/ui/src/index.ts | 1 + 4 files changed, 73 insertions(+), 15 deletions(-) diff --git a/apps/console/src/pages/iam/organizations/people/_components/PeopleList.tsx b/apps/console/src/pages/iam/organizations/people/_components/PeopleList.tsx index ca64a7dc9..573f665c8 100644 --- a/apps/console/src/pages/iam/organizations/people/_components/PeopleList.tsx +++ b/apps/console/src/pages/iam/organizations/people/_components/PeopleList.tsx @@ -20,7 +20,10 @@ import { getAssignableRoles, getMembershipRoles, peopleRoles } from "@probo/helpers"; import { - Checkbox, + Button, + Dropdown, + DropdownCheckboxItem, + IconChevronDown, IconMagnifyingGlass, Input, Option, @@ -192,15 +195,21 @@ export function PeopleList(props: { debouncedRefetchQuery(value); }; - const handleStateFilterToggle = (state: ProfileState) => { + const handleStateFilterChange = (state: ProfileState, checked: boolean) => { debouncedRefetchQuery.cancel(); - const newStates = statesFilter.includes(state) - ? statesFilter.filter(s => s !== state) - : [...statesFilter, state]; + const newStates = checked + ? [...statesFilter, state] + : statesFilter.filter(s => s !== state); setStatesFilter(newStates); refetchPeople({ states: newStates }); }; + const statusFilterLabel = statesFilter.length === 0 + ? t("peopleList.filters.allStatuses") + : statesFilter + .map(state => t(`peopleList.filters.${state.toLowerCase()}`)) + .join(", "); + const handleRoleFilterChange = (value: string) => { debouncedRefetchQuery.cancel(); const newRole = value === "ALL" ? null : (value as MembershipRole); @@ -234,18 +243,24 @@ export function PeopleList(props: { value={queryFilter ?? ""} onValueChange={handleQueryFilterChange} /> -
- {t("peopleList.filters.status")} + + {statusFilterLabel} + + + )} + > {PROFILE_STATES.map(state => ( - + ))} -
+