From 586a7a48ba1320cbc927b30ebd45b574c828f476 Mon Sep 17 00:00:00 2001
From: Vamsi Krishna <46787868+vamsikrishnamathala@users.noreply.github.com>
Date: Wed, 24 Sep 2025 17:45:43 +0530
Subject: [PATCH] [WEB-4896]feat: filters to project and workspace members list
(#7786)
---
.../settings/(workspace)/members/page.tsx | 60 ++++---
.../projects/settings/useProjectColumns.tsx | 69 +++++++-
.../workspace/settings/useMemberColumns.tsx | 58 ++++++-
.../ce/store/member/project-member.store.ts | 2 +-
.../core/components/pages/version/editor.tsx | 2 +-
.../project/dropdowns/filters/member-list.tsx | 106 ++++++++++++
.../project/member-header-column.tsx | 114 ++++++++++++
.../components/project/member-list-item.tsx | 2 +-
.../core/components/project/member-list.tsx | 73 +++++---
.../workspace/settings/members-list.tsx | 4 +-
apps/web/core/store/issue/root.store.ts | 2 +-
apps/web/core/store/member/index.ts | 2 +-
.../base-project-member.store.ts | 71 ++++++--
.../project/project-member-filters.store.ts | 70 ++++++++
apps/web/core/store/member/utils.ts | 163 ++++++++++++++++++
.../workspace-member-filters.store.ts | 71 ++++++++
.../{ => workspace}/workspace-member.store.ts | 38 +++-
packages/constants/src/index.ts | 1 +
packages/constants/src/members.ts | 79 +++++++++
.../i18n/src/locales/en/translations.json | 7 +
20 files changed, 914 insertions(+), 80 deletions(-)
create mode 100644 apps/web/core/components/project/dropdowns/filters/member-list.tsx
create mode 100644 apps/web/core/components/project/member-header-column.tsx
rename apps/web/core/store/member/{ => project}/base-project-member.store.ts (84%)
create mode 100644 apps/web/core/store/member/project/project-member-filters.store.ts
create mode 100644 apps/web/core/store/member/utils.ts
create mode 100644 apps/web/core/store/member/workspace/workspace-member-filters.store.ts
rename apps/web/core/store/member/{ => workspace}/workspace-member.store.ts (89%)
create mode 100644 packages/constants/src/members.ts
diff --git a/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/members/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/members/page.tsx
index 065d8c5e7..d5f9de0af 100644
--- a/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/members/page.tsx
+++ b/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/(workspace)/members/page.tsx
@@ -20,6 +20,7 @@ import { cn } from "@plane/utils";
import { NotAuthorizedView } from "@/components/auth-screens/not-authorized-view";
import { CountChip } from "@/components/common/count-chip";
import { PageHead } from "@/components/core/page-title";
+import { MemberListFiltersDropdown } from "@/components/project/dropdowns/filters/member-list";
import { SettingsContentWrapper } from "@/components/settings/content-wrapper";
import { WorkspaceMembersList } from "@/components/workspace/settings/members-list";
// helpers
@@ -41,7 +42,7 @@ const WorkspaceMembersSettingsPage = observer(() => {
// store hooks
const { workspaceUserInfo, allowPermissions } = useUserPermissions();
const {
- workspace: { workspaceMemberIds, inviteMembersToWorkspace },
+ workspace: { workspaceMemberIds, inviteMembersToWorkspace, filtersStore },
} = useMember();
const { currentWorkspace } = useWorkspace();
const { t } = useTranslation();
@@ -88,8 +89,20 @@ const WorkspaceMembersSettingsPage = observer(() => {
});
};
+ // Handler for role filter updates
+ const handleRoleFilterUpdate = (role: string) => {
+ const currentFilters = filtersStore.filters;
+ const currentRoles = currentFilters?.roles || [];
+ const updatedRoles = currentRoles.includes(role) ? currentRoles.filter((r) => r !== role) : [...currentRoles, role];
+
+ filtersStore.updateFilters({
+ roles: updatedRoles.length > 0 ? updatedRoles : undefined,
+ });
+ };
+
// derived values
const pageTitle = currentWorkspace?.name ? `${currentWorkspace.name} - Members` : undefined;
+ const appliedRoleFilters = filtersStore.filters?.roles || [];
// if user is not authorized to view this page
if (workspaceUserInfo && !canPerformWorkspaceMemberActions) {
@@ -116,27 +129,34 @@ const WorkspaceMembersSettingsPage = observer(() => {