import { useLocation, useNavigate } from "react-router-dom"; import { useTranslation } from "react-i18next"; import { Key } from "lucide-react"; import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, AlertDialogTrigger, } from "@/components/ui/alert-dialog.tsx"; import { Button } from "@/components/ui/button"; import { Separator } from "@/components/ui/separator"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; import AccessEditDialog from "@/components/certimate/AccessEditDialog"; import AccessGroupEdit from "@/components/certimate/AccessGroupEdit"; import AccessGroupList from "@/components/certimate/AccessGroupList"; import XPagination from "@/components/certimate/XPagination"; import { convertZulu2Beijing } from "@/lib/time"; import { Access as AccessType, accessProvidersMap } from "@/domain/access"; import { remove } from "@/repository/access"; import { useConfigContext } from "@/providers/config"; const Access = () => { const { t } = useTranslation(); const { config, deleteAccess } = useConfigContext(); const { accesses } = config; const perPage = 10; const totalPages = Math.ceil(accesses.length / perPage); const navigate = useNavigate(); const location = useLocation(); const query = new URLSearchParams(location.search); const page = query.get("page"); const pageNumber = page ? Number(page) : 1; const tab = query.get("tab"); const accessGroupId = query.get("accessGroupId"); const startIndex = (pageNumber - 1) * perPage; const endIndex = startIndex + perPage; const handleDelete = async (data: AccessType) => { const rs = await remove(data); deleteAccess(rs.id); }; const handleTabItemClick = (tab: string) => { query.set("tab", tab); navigate({ search: query.toString() }); }; return (
{t("access.page.title")}
{tab != "access_group" ? ( {t("access.authorization.add")}} op="add" /> ) : ( {t("access.group.add")}} /> )}
{ handleTabItemClick("access"); }} > {t("access.authorization.tab")} { handleTabItemClick("access_group"); }} > {t("access.group.tab")} {accesses.length === 0 ? (
{t("access.authorization.nodata")}
{t("access.authorization.add")}} op="add" className="mt-3" />
) : ( <>
{t("common.text.name")}
{t("common.text.provider")}
{t("common.text.created_at")}
{t("common.text.updated_at")}
{t("common.text.operations")}
{accesses .filter((item) => { return accessGroupId ? item.group == accessGroupId : true; }) .slice(startIndex, endIndex) .map((access) => (
{access.name}
{t(accessProvidersMap.get(access.configType)?.name || "")}
{access.created && convertZulu2Beijing(access.created)}
{access.updated && convertZulu2Beijing(access.updated)}
{t("common.edit")} } op="edit" data={access} /> {t("common.copy")} } op="copy" data={access} /> {t("access.authorization.delete")} {t("access.authorization.delete.confirm")} {t("common.cancel")} { handleDelete(access); }} > {t("common.confirm")}
))} { query.set("page", page.toString()); navigate({ search: query.toString() }); }} /> )}
); }; export default Access;