"use client" import { KeyRoundIcon, RouteIcon, SearchIcon } from "lucide-react" import { DashboardListPage } from "@/components/dashboard/list" import { Badge } from "@/components/ui/badge" import { fetchPermissions, type AdminPermission } from "@/lib/api/admin" import { Status } from "@/lib/generated/enums" import { useAppLocale, useI18n } from "@/i18n/provider" import { getPermissionDisplayName, getPermissionGroupName } from "@/lib/permission-i18n" export default function DashboardPermissionsPage() { const t = useI18n() const { locale } = useAppLocale() const listStatusOptions = [ { value: "all", label: t("status.all") }, { value: String(Status.Ok), label: t("status.ok") }, { value: String(Status.Disabled), label: t("status.disabled") }, { value: String(Status.Deleted), label: t("status.deleted") }, ] return ( filters={[ { name: "keyword", label: t("permission.filterKeyword"), placeholder: t("permission.filterKeyword"), defaultValue: "", trim: true, className: "w-full sm:w-72", inputClassName: "pl-9", icon: , }, { name: "groupName", label: t("permission.filterGroup"), placeholder: t("permission.filterGroup"), defaultValue: "", trim: true, className: "w-full sm:w-44", }, { name: "status", label: t("status.all"), type: "select", defaultValue: "all", allValue: "all", options: listStatusOptions, className: "w-full sm:w-36", }, ]} fetchList={fetchPermissions} getItemId={(item) => item.id} columns={[ { key: "permission", label: t("permission.columnPermission"), render: (item) => (
{getPermissionDisplayName(item.code, item.name, locale)}
{item.type}
), }, { key: "code", label: t("permission.columnCode"), render: (item) => {item.code}, }, { key: "group", label: t("permission.columnGroup"), render: (item) => getPermissionGroupName(item.groupName, locale), }, { key: "api", label: t("permission.columnApi"), render: (item) => (
{item.method || "ANY"}
{item.apiPath || "-"}
), }, { key: "status", label: t("permission.columnStatus"), render: (item) => ( {getStatusLabel(item.status, t)} ), }, ]} labels={{ refresh: t("permission.refresh"), query: t("permission.query"), loading: t("permission.loading"), empty: t("permission.empty"), loadFailed: t("permission.loadFailed"), }} /> ) } function getStatusLabel( status: number, t: (key: string, values?: Record) => string ) { if (status === Status.Ok) { return t("status.ok") } if (status === Status.Disabled) { return t("status.disabled") } if (status === Status.Deleted) { return t("status.deleted") } return String(status) }