mirror of
https://github.com/Tria-plc/edr-platform.git
synced 2026-08-30 13:28:11 +00:00
130 lines
4.3 KiB
TypeScript
130 lines
4.3 KiB
TypeScript
import { ExternalUserDto } from "@/super-admin/dto/ExternalUsersDto";
|
|
import { format } from "date-fns";
|
|
import { ColumnDef } from "@tanstack/react-table";
|
|
import { Badge } from "@/shared/common/ui/badge";
|
|
import { UserStatusToggleConfirm } from "./UserStatusToggleConfirm";
|
|
import { t } from "i18next";
|
|
import { useNavigate } from "react-router-dom";
|
|
|
|
export const ExternalUsersColumnDefn = (
|
|
localizedName: (name?: { am: string; en: string }) => string,
|
|
navigate: ReturnType<typeof useNavigate>
|
|
): ColumnDef<ExternalUserDto>[] => {
|
|
return [
|
|
{
|
|
accessorKey: "name.en",
|
|
header: () => t("organization.username"),
|
|
cell: ({ row }) => (
|
|
<div className="font-medium">{localizedName(row.original.name)}</div>
|
|
),
|
|
},
|
|
{
|
|
accessorKey: "updatedAt",
|
|
header: () => t("organization.updatedOn"),
|
|
cell: ({ row }) => (
|
|
<div className="font-medium">
|
|
{format(new Date(row.original.updatedAt), "MMM dd, yyyy")}
|
|
</div>
|
|
),
|
|
},
|
|
{
|
|
accessorKey: "userType",
|
|
header: () => "User Type",
|
|
cell: ({ row }) => {
|
|
const userType = row.original.userType;
|
|
const displayText =
|
|
userType === "external_organization"
|
|
? "External Organization"
|
|
: "Employee";
|
|
|
|
return (
|
|
<div className="font-medium">
|
|
<span
|
|
className={`px-2 py-1 rounded-full text-xs font-medium ${
|
|
userType === "external_organization"
|
|
? "bg-purple-100 text-purple-800 dark:bg-purple-900/40 dark:text-purple-300"
|
|
: "bg-blue-100 text-blue-800 dark:bg-blue-900/40 dark:text-blue-300"
|
|
}`}
|
|
>
|
|
{displayText}
|
|
</span>
|
|
</div>
|
|
);
|
|
},
|
|
},
|
|
{
|
|
id: "status",
|
|
header: () => t("dashboard.Status"),
|
|
cell: ({ row }) => {
|
|
const { status } = row.original;
|
|
const getStatusColor = (status: string) => {
|
|
switch (status) {
|
|
case "accepted":
|
|
return "bg-primary-100 text-primary-600 hover:bg-primary-100 dark:bg-primary-900/40 dark:text-primary-300 dark:hover:bg-primary-900/50";
|
|
case "rejected":
|
|
return "bg-red-100 text-red-600 hover:bg-red-100 dark:bg-red-900/40 dark:text-red-300 dark:hover:bg-red-900/50";
|
|
case "pending":
|
|
default:
|
|
return "bg-blue-100 text-blue-600 hover:bg-blue-100 dark:bg-blue-900/40 dark:text-blue-300 dark:hover:bg-blue-900/50";
|
|
}
|
|
};
|
|
|
|
const getStatusText = (status: string) => {
|
|
switch (status) {
|
|
case "accepted":
|
|
return "Accepted";
|
|
case "rejected":
|
|
return "Rejected";
|
|
case "pending":
|
|
default:
|
|
return t("statusBar.Pending");
|
|
}
|
|
};
|
|
|
|
return (
|
|
<div>
|
|
<Badge
|
|
className={`${getStatusColor(
|
|
status
|
|
)} rounded-full px-6 py-1 font-medium`}
|
|
>
|
|
{getStatusText(status)}
|
|
</Badge>
|
|
</div>
|
|
);
|
|
},
|
|
},
|
|
{
|
|
id: "actions",
|
|
header: () => t("userRecord.Actions"),
|
|
cell: ({ row }) => {
|
|
const { id, status } = row.original;
|
|
const handleViewUploads = () => {
|
|
navigate(`/user-management/external_users/view/${id}`);
|
|
};
|
|
// const handleEdit = () => {
|
|
// navigate(`/user-management/external_users/edit/${id}`);
|
|
// };
|
|
|
|
return (
|
|
<div className="flex items-center gap-2">
|
|
<UserStatusToggleConfirm userId={id} userStatus={status} />
|
|
<button
|
|
onClick={handleViewUploads}
|
|
className="px-2 py-1 bg-gray-100 dark:bg-gray-800 rounded hover:bg-gray-200 dark:hover:bg-gray-700 text-sm font-medium text-gray-800 dark:text-gray-200"
|
|
>
|
|
{t("View")}
|
|
</button>
|
|
{/* <button
|
|
onClick={handleEdit}
|
|
className="px-2 py-1 bg-blue-100 rounded hover:bg-blue-200 text-sm font-medium"
|
|
>
|
|
{t("Edit")}
|
|
</button> */}
|
|
</div>
|
|
);
|
|
},
|
|
},
|
|
];
|
|
};
|