import { useEffect, useState } from "react"; import { useTranslation } from "react-i18next"; import { useSearchParams } from "react-router-dom"; import { DeleteOutlined as DeleteOutlinedIcon, EditOutlined as EditOutlinedIcon, PlusOutlined as PlusOutlinedIcon, ReloadOutlined as ReloadOutlinedIcon, SnippetsOutlined as SnippetsOutlinedIcon, } from "@ant-design/icons"; import { PageHeader } from "@ant-design/pro-components"; import { useRequest } from "ahooks"; import { Avatar, Button, Card, Empty, Flex, Input, Modal, Space, Table, type TableProps, Tooltip, Typography, notification } from "antd"; import dayjs from "dayjs"; import { ClientResponseError } from "pocketbase"; import AccessEditDrawer, { type AccessEditDrawerProps } from "@/components/access/AccessEditDrawer"; import { type AccessModel } from "@/domain/access"; import { ACCESS_USAGES, accessProvidersMap } from "@/domain/provider"; import { useZustandShallowSelector } from "@/hooks"; import { useAccessesStore } from "@/stores/access"; import { getErrMsg } from "@/utils/error"; type AccessUsageProp = AccessEditDrawerProps["usage"]; const AccessList = () => { const [searchParams] = useSearchParams(); const { t } = useTranslation(); const [modalApi, ModelContextHolder] = Modal.useModal(); const [notificationApi, NotificationContextHolder] = notification.useNotification(); const { accesses, loadedAtOnce, fetchAccesses, deleteAccess } = useAccessesStore( useZustandShallowSelector(["accesses", "loadedAtOnce", "fetchAccesses", "deleteAccess"]) ); const tableColumns: TableProps["columns"] = [ { key: "$index", align: "center", fixed: "left", width: 50, render: (_, __, index) => (page - 1) * pageSize + index + 1, }, { key: "name", title: t("access.props.name"), ellipsis: true, render: (_, record) => <>{record.name}, }, { key: "provider", title: t("access.props.provider"), ellipsis: true, render: (_, record) => { return ( {t(accessProvidersMap.get(record.provider)?.name ?? "")} ); }, }, { key: "createdAt", title: t("access.props.created_at"), ellipsis: true, render: (_, record) => { return dayjs(record.created!).format("YYYY-MM-DD HH:mm:ss"); }, }, { key: "updatedAt", title: t("access.props.updated_at"), ellipsis: true, render: (_, record) => { return dayjs(record.updated!).format("YYYY-MM-DD HH:mm:ss"); }, }, { key: "$action", align: "end", fixed: "right", width: 120, render: (_, record) => ( } />, ]} /> handleTabChange(key)} />
columns={tableColumns} dataSource={tableData} loading={!loadedAtOnce || loading} locale={{ emptyText: , }} pagination={{ current: page, pageSize: pageSize, total: tableTotal, showSizeChanger: true, onChange: (page: number, pageSize: number) => { setPage(page); setPageSize(pageSize); }, onShowSizeChange: (page: number, pageSize: number) => { setPage(page); setPageSize(pageSize); }, }} rowKey={(record) => record.id} scroll={{ x: "max(100%, 960px)" }} />
); }; export default AccessList;