import AutoTooltip from '@/components/auto-tooltip'; import DeleteModal from '@/components/delete-modal'; import PageTools from '@/components/page-tools'; import { PageAction } from '@/config'; import HotKeys from '@/config/hotkeys'; import type { PageActionType } from '@/config/types'; import useTableRowSelection from '@/hooks/use-table-row-selection'; import useTableSort from '@/hooks/use-table-sort'; import { handleBatchRequest } from '@/utils'; import { DeleteOutlined, PlusOutlined, SyncOutlined } from '@ant-design/icons'; import { PageContainer } from '@ant-design/pro-components'; import { useIntl } from '@umijs/max'; import { Button, Input, Space, Table, Tooltip } from 'antd'; import dayjs from 'dayjs'; import _ from 'lodash'; import { useEffect, useRef, useState } from 'react'; import { useHotkeys } from 'react-hotkeys-hook'; import { deleteApisKey, queryApisKeysList } from './apis'; import AddAPIKeyModal from './components/add-apikey'; import { ListItem } from './config/types'; const { Column } = Table; const APIKeys: React.FC = () => { console.log('APIKeys========'); const rowSelection = useTableRowSelection(); const { sortOrder, setSortOrder } = useTableSort({ defaultSortOrder: 'descend' }); const intl = useIntl(); const modalRef = useRef(null); const [dataSource, setDataSource] = useState<{ dataList: ListItem[]; loading: boolean; total: number; }>({ dataList: [], loading: false, total: 0 }); const [openAddModal, setOpenAddModal] = useState(false); const [action, setAction] = useState(PageAction.CREATE); const [queryParams, setQueryParams] = useState({ page: 1, perPage: 10, search: '' }); const handlePageChange = (page: number, pageSize: number) => { console.log('handlePageChange====', page, pageSize); setQueryParams({ ...queryParams, page: page, perPage: pageSize || 10 }); }; const handleTableChange = (pagination: any, filters: any, sorter: any) => { console.log('handleTableChange=======', pagination, filters, sorter); setSortOrder(sorter.order); }; const fetchData = async () => { setDataSource((pre) => { pre.loading = true; return { ...pre }; }); try { const params = { ..._.pickBy(queryParams, (val: any) => !!val) }; const res = await queryApisKeysList(params); setDataSource({ dataList: res.items || [], loading: false, total: res.pagination.total }); } catch (error) { console.log('error', error); setDataSource({ dataList: [], loading: false, total: dataSource.total }); } }; const handleSearch = (e: any) => { fetchData(); }; const handleNameChange = (e: any) => { setQueryParams({ ...queryParams, page: 1, search: e.target.value }); }; const handleAddUser = () => { setOpenAddModal(true); setAction(PageAction.CREATE); }; const handleModalOk = async () => { try { await fetchData(); setOpenAddModal(false); } catch (error) { // do nothing } }; const handleModalCancel = () => { console.log('handleModalCancel'); setOpenAddModal(false); }; const handleDelete = (row: ListItem) => { modalRef.current.show({ content: 'apikeys.table.apikeys', operation: 'common.delete.single.confirm', name: row.name, async onOk() { console.log('OK'); await deleteApisKey(row.id); fetchData(); } }); }; const handleDeleteBatch = () => { modalRef.current.show({ content: 'apikeys.table.apikeys', operation: 'common.delete.confirm', selection: true, async onOk() { await handleBatchRequest(rowSelection.selectedRowKeys, deleteApisKey); rowSelection.clearSelections(); fetchData(); } }); }; useEffect(() => { fetchData(); }, [queryParams]); useHotkeys( HotKeys.CREATE, () => { handleAddUser(); }, { enabled: !openAddModal } ); return ( <> } right={ } > { return ( {text} ); }} /> { return ( {text ? dayjs(text).format('YYYY-MM-DD HH:mm:ss') : intl.formatMessage({ id: 'apikeys.form.expiration.never' })} ); }} /> { return {text}; }} /> { return ( {dayjs(text).format('YYYY-MM-DD HH:mm:ss')} ); }} /> { return ( ); }} />
); }; export default APIKeys;