Some checks failed
Branch Build CE / Build Setup (push) Has been cancelled
Branch Build CE / Build-Push Admin Docker Image (push) Has been cancelled
Branch Build CE / Build-Push Web Docker Image (push) Has been cancelled
Branch Build CE / Build-Push Space Docker Image (push) Has been cancelled
Branch Build CE / Build-Push Live Collaboration Docker Image (push) Has been cancelled
Branch Build CE / Build-Push API Server Docker Image (push) Has been cancelled
Branch Build CE / Build-Push Proxy Docker Image (push) Has been cancelled
Branch Build CE / Build-Push AIO Docker Image (push) Has been cancelled
Branch Build CE / Upload Build Assets (push) Has been cancelled
Branch Build CE / Build Release (push) Has been cancelled
CodeQL / Analyze (javascript) (push) Has been cancelled
CodeQL / Analyze (python) (push) Has been cancelled
Codespell / Check for spelling errors (push) Has been cancelled
Sync Repositories / sync_changes (push) Has been cancelled
Synced from upstream: 8853637e981ed7d8a6cff32bd98e7afe20f54362
132 lines
4.3 KiB
TypeScript
132 lines
4.3 KiB
TypeScript
import { useState } from "react";
|
|
import { useParams } from "next/navigation";
|
|
import { EUserPermissions, EUserPermissionsLevel } from "@plane/constants";
|
|
import { useTranslation } from "@plane/i18n";
|
|
import { renderFormattedDate } from "@plane/utils";
|
|
import { MemberHeaderColumn } from "@/components/project/member-header-column";
|
|
import type { RowData } from "@/components/workspace/settings/member-columns";
|
|
import { AccountTypeColumn, NameColumn } from "@/components/workspace/settings/member-columns";
|
|
import { useMember } from "@/hooks/store/use-member";
|
|
import { useUser, useUserPermissions } from "@/hooks/store/user";
|
|
import type { IMemberFilters } from "@/store/member/utils";
|
|
|
|
export const useMemberColumns = () => {
|
|
// states
|
|
const [removeMemberModal, setRemoveMemberModal] = useState<RowData | null>(null);
|
|
|
|
const { workspaceSlug } = useParams();
|
|
|
|
const { data: currentUser } = useUser();
|
|
const { allowPermissions } = useUserPermissions();
|
|
const {
|
|
workspace: {
|
|
filtersStore: { filters, updateFilters },
|
|
},
|
|
} = useMember();
|
|
const { t } = useTranslation();
|
|
|
|
// derived values
|
|
const isAdmin = allowPermissions([EUserPermissions.ADMIN], EUserPermissionsLevel.WORKSPACE);
|
|
|
|
const isSuspended = (rowData: RowData) => rowData.is_active === false;
|
|
// handlers
|
|
const handleDisplayFilterUpdate = (filterUpdates: Partial<IMemberFilters>) => {
|
|
updateFilters(filterUpdates);
|
|
};
|
|
|
|
const columns = [
|
|
{
|
|
key: "Full name",
|
|
content: t("workspace_settings.settings.members.details.full_name"),
|
|
thClassName: "text-left",
|
|
thRender: () => (
|
|
<MemberHeaderColumn
|
|
property="full_name"
|
|
displayFilters={filters}
|
|
handleDisplayFilterUpdate={handleDisplayFilterUpdate}
|
|
/>
|
|
),
|
|
tdRender: (rowData: RowData) => (
|
|
<NameColumn
|
|
rowData={rowData}
|
|
workspaceSlug={workspaceSlug as string}
|
|
isAdmin={isAdmin}
|
|
currentUser={currentUser}
|
|
setRemoveMemberModal={setRemoveMemberModal}
|
|
/>
|
|
),
|
|
},
|
|
|
|
{
|
|
key: "Display name",
|
|
content: t("workspace_settings.settings.members.details.display_name"),
|
|
tdRender: (rowData: RowData) => (
|
|
<div className={`w-32 ${isSuspended(rowData) ? "text-custom-text-400" : ""}`}>
|
|
{rowData.member.display_name}
|
|
</div>
|
|
),
|
|
thRender: () => (
|
|
<MemberHeaderColumn
|
|
property="display_name"
|
|
displayFilters={filters}
|
|
handleDisplayFilterUpdate={handleDisplayFilterUpdate}
|
|
/>
|
|
),
|
|
},
|
|
|
|
{
|
|
key: "Email address",
|
|
content: t("workspace_settings.settings.members.details.email_address"),
|
|
tdRender: (rowData: RowData) => (
|
|
<div className={`w-48 truncate ${isSuspended(rowData) ? "text-custom-text-400" : ""}`}>
|
|
{rowData.member.email}
|
|
</div>
|
|
),
|
|
thRender: () => (
|
|
<MemberHeaderColumn
|
|
property="email"
|
|
displayFilters={filters}
|
|
handleDisplayFilterUpdate={handleDisplayFilterUpdate}
|
|
/>
|
|
),
|
|
},
|
|
|
|
{
|
|
key: "Account type",
|
|
content: t("workspace_settings.settings.members.details.account_type"),
|
|
thRender: () => (
|
|
<MemberHeaderColumn
|
|
property="role"
|
|
displayFilters={filters}
|
|
handleDisplayFilterUpdate={handleDisplayFilterUpdate}
|
|
/>
|
|
),
|
|
tdRender: (rowData: RowData) => <AccountTypeColumn rowData={rowData} workspaceSlug={workspaceSlug as string} />,
|
|
},
|
|
|
|
{
|
|
key: "Authentication",
|
|
content: t("workspace_settings.settings.members.details.authentication"),
|
|
tdRender: (rowData: RowData) =>
|
|
isSuspended(rowData) ? null : (
|
|
<div className="capitalize">{rowData.member.last_login_medium?.replace("-", " ")}</div>
|
|
),
|
|
},
|
|
|
|
{
|
|
key: "Joining date",
|
|
content: t("workspace_settings.settings.members.details.joining_date"),
|
|
tdRender: (rowData: RowData) =>
|
|
isSuspended(rowData) ? null : <div>{renderFormattedDate(rowData?.member?.joining_date)}</div>,
|
|
thRender: () => (
|
|
<MemberHeaderColumn
|
|
property="joining_date"
|
|
displayFilters={filters}
|
|
handleDisplayFilterUpdate={handleDisplayFilterUpdate}
|
|
/>
|
|
),
|
|
},
|
|
];
|
|
return { columns, workspaceSlug, removeMemberModal, setRemoveMemberModal };
|
|
};
|