/** * 因为无线的field和pc的field还不一样,所以这里要重写useFusionTable */ import useAntdTable from 'ahooks/es/useAntdTable'; import type { Data, Params, Service, AntdFormUtils } from 'ahooks/es/useAntdTable/types'; import type { FusionTableOptions, FusionTableResult, Field } from 'ahooks/es/useFusionTable/types'; interface IMeetField extends Omit { validate: (fields: any, callback: ({ errors, values }) => void) => void; } const fieldAdapter = (field: IMeetField) => ({ getFieldInstance: (name: string) => field.getNames().includes(name), setFieldsValue: field.setValues, getFieldsValue: field.getValues, resetFields: field.resetToDefault, validateFields: (fields, callback) => { // meet-react的 field,validate参数和pc的field不一致,统一的方式是用validateCallback field.validate(fields, ({ errors, values }) => { callback(errors, values); }); }, } as AntdFormUtils); const resultAdapter = (result: any) => { const tableProps = { dataSource: result.tableProps.dataSource, loading: result.tableProps.loading, onSort: (dataIndex: string, order: string) => { result.tableProps.onChange( { current: result.pagination.current, pageSize: result.pagination.pageSize }, result.params[0]?.filters, { field: dataIndex, order, }, ); }, onFilter: (filterParams: Object) => { result.tableProps.onChange( { current: result.pagination.current, pageSize: result.pagination.pageSize }, filterParams, result.params[0]?.sorter, ); }, }; const paginationProps = { onChange: result.pagination.changeCurrent, onPageSizeChange: result.pagination.changePageSize, current: result.pagination.current, pageSize: result.pagination.pageSize, total: result.pagination.total, }; return { ...result, tableProps, paginationProps, }; }; const useFusionTable = ( service: Service, options: FusionTableOptions = {}, ): FusionTableResult => { const ret = useAntdTable(service, { ...options, form: options.field ? fieldAdapter(options.field) : undefined, }); return resultAdapter(ret); }; export default useFusionTable;