import { message } from 'antd'; import { debounce } from 'lodash'; import type { Key } from 'react'; import { useCallback, useMemo, useState } from 'react'; import { useIntl } from 'umi'; import { auditApproval, getAduiltList } from './api'; export type RowType = { feature?: Key[]; option?: Key[]; role?: Key[]; policy?: Key[]; city?: Key[]; }; export const useAuditDetail = (chainId: string | undefined) => { const [auditDetail, setAuditDetail] = useState(); const [loading, setLoading] = useState(true); const requestDetail = useCallback(async () => { try { if (chainId) { const { data } = await getAduiltList(chainId); setAuditDetail(data); } } catch (e) { } finally { setLoading(false); } }, [chainId, setLoading]); return { loading, auditDetail, requestDetail, setAuditDetail, setLoading, }; }; export const useProTableList = (chainId: string) => { const { formatMessage } = useIntl(); const [rowSelectionKeys, setSelectionKeys] = useState({}); const { auditDetail, setAuditDetail, requestDetail, loading, setLoading } = useAuditDetail(chainId); const approvalHandler = useMemo< (record: Key[], state: number, type: string) => Promise >(() => { return debounce(async (record, state, type) => { setLoading(true); try { const res = await auditApproval({ auditId: record, chainId, state, type, }); if (res) requestDetail(); message.success(formatMessage({ id: 'base.operation.success' })); } catch (e) { } finally { setSelectionKeys({}); } }, 1000) as any; }, [chainId, formatMessage, requestDetail, setLoading]); return { approvalHandler, requestDetail, auditDetail, setAuditDetail, loading, setLoading, rowSelectionKeys, setSelectionKeys, }; };