@@ -2,10 +2,14 @@ import { useState } from "react";
22// plane imports
33import { EUserPermissions , EUserPermissionsLevel } from "@plane/constants" ;
44import { IWorkspaceMember , TProjectMembership } from "@plane/types" ;
5+ import { renderFormattedDate } from "@plane/utils" ;
56// components
7+ import { MemberHeaderColumn } from "@/components/project/member-header-column" ;
68import { AccountTypeColumn , NameColumn } from "@/components/project/settings/member-columns" ;
79// hooks
10+ import { useMember } from "@/hooks/store/use-member" ;
811import { useUser , useUserPermissions } from "@/hooks/store/user" ;
12+ import { IMemberFilters } from "@/store/member/utils" ;
913
1014export interface RowData extends Pick < TProjectMembership , "original_role" > {
1115 member : IWorkspaceMember ;
@@ -20,9 +24,15 @@ export const useProjectColumns = (props: TUseProjectColumnsProps) => {
2024 const { projectId, workspaceSlug } = props ;
2125 // states
2226 const [ removeMemberModal , setRemoveMemberModal ] = useState < RowData | null > ( null ) ;
27+
2328 // store hooks
2429 const { data : currentUser } = useUser ( ) ;
2530 const { allowPermissions, getProjectRoleByWorkspaceSlugAndProjectId } = useUserPermissions ( ) ;
31+ const {
32+ project : {
33+ filters : { getFilters, updateFilters } ,
34+ } ,
35+ } = useMember ( ) ;
2636 // derived values
2737 const isAdmin = allowPermissions (
2838 [ EUserPermissions . ADMIN ] ,
@@ -33,18 +43,25 @@ export const useProjectColumns = (props: TUseProjectColumnsProps) => {
3343 const currentProjectRole =
3444 getProjectRoleByWorkspaceSlugAndProjectId ( workspaceSlug . toString ( ) , projectId . toString ( ) ) ?? EUserPermissions . GUEST ;
3545
36- const getFormattedDate = ( dateStr : string ) => {
37- const date = new Date ( dateStr ) ;
46+ const displayFilters = getFilters ( projectId ) ;
3847
39- const options : Intl . DateTimeFormatOptions = { year : "numeric" , month : "long" , day : "numeric" } ;
40- return date . toLocaleDateString ( "en-US" , options ) ;
48+ // handlers
49+ const handleDisplayFilterUpdate = ( filters : Partial < IMemberFilters > ) => {
50+ updateFilters ( projectId , filters ) ;
4151 } ;
4252
4353 const columns = [
4454 {
4555 key : "Full Name" ,
4656 content : "Full name" ,
4757 thClassName : "text-left" ,
58+ thRender : ( ) => (
59+ < MemberHeaderColumn
60+ property = "full_name"
61+ displayFilters = { displayFilters }
62+ handleDisplayFilterUpdate = { handleDisplayFilterUpdate }
63+ />
64+ ) ,
4865 tdRender : ( rowData : RowData ) => (
4966 < NameColumn
5067 rowData = { rowData }
@@ -58,12 +75,37 @@ export const useProjectColumns = (props: TUseProjectColumnsProps) => {
5875 {
5976 key : "Display Name" ,
6077 content : "Display name" ,
78+ thRender : ( ) => (
79+ < MemberHeaderColumn
80+ property = "display_name"
81+ displayFilters = { displayFilters }
82+ handleDisplayFilterUpdate = { handleDisplayFilterUpdate }
83+ />
84+ ) ,
6185 tdRender : ( rowData : RowData ) => < div className = "w-32" > { rowData . member . display_name } </ div > ,
6286 } ,
63-
87+ {
88+ key : "Email" ,
89+ content : "Email" ,
90+ thRender : ( ) => (
91+ < MemberHeaderColumn
92+ property = "email"
93+ displayFilters = { displayFilters }
94+ handleDisplayFilterUpdate = { handleDisplayFilterUpdate }
95+ />
96+ ) ,
97+ tdRender : ( rowData : RowData ) => < div className = "w-48 text-custom-text-200" > { rowData . member . email } </ div > ,
98+ } ,
6499 {
65100 key : "Account Type" ,
66101 content : "Account type" ,
102+ thRender : ( ) => (
103+ < MemberHeaderColumn
104+ property = "role"
105+ displayFilters = { displayFilters }
106+ handleDisplayFilterUpdate = { handleDisplayFilterUpdate }
107+ />
108+ ) ,
67109 tdRender : ( rowData : RowData ) => (
68110 < AccountTypeColumn
69111 rowData = { rowData }
@@ -76,8 +118,21 @@ export const useProjectColumns = (props: TUseProjectColumnsProps) => {
76118 {
77119 key : "Joining Date" ,
78120 content : "Joining date" ,
79- tdRender : ( rowData : RowData ) => < div > { getFormattedDate ( rowData ?. member ?. joining_date || "" ) } </ div > ,
121+ thRender : ( ) => (
122+ < MemberHeaderColumn
123+ property = "joining_date"
124+ displayFilters = { displayFilters }
125+ handleDisplayFilterUpdate = { handleDisplayFilterUpdate }
126+ />
127+ ) ,
128+ tdRender : ( rowData : RowData ) => < div > { renderFormattedDate ( rowData ?. member ?. joining_date ) } </ div > ,
80129 } ,
81130 ] ;
82- return { columns, removeMemberModal, setRemoveMemberModal } ;
131+ return {
132+ columns,
133+ removeMemberModal,
134+ setRemoveMemberModal,
135+ displayFilters,
136+ handleDisplayFilterUpdate,
137+ } ;
83138} ;
0 commit comments