import { ArrayField } from '@formily/core'; import { observer, RecursionField, Schema, useField, useFieldSchema } from '@formily/react'; import { Table, TableColumnProps } from 'antd'; import React from 'react'; import { useComponent } from '../../hooks'; const isColumnComponent = (schema: Schema) => { return schema['x-component']?.endsWith('.Column') > -1; }; const useTableColumns = () => { const field = useField(); const schema = useFieldSchema(); const Initializer = useComponent(schema['x-initializer']); const columns = schema .reduceProperties((buf, s) => { if (isColumnComponent(s)) { return buf.concat([s]); } }, []) .map((s: Schema) => { return { title: , dataIndex: s.name, render: (v, record) => { const index = field.value?.indexOf(record); return ; }, } as TableColumnProps; }); console.log(columns); if (!Initializer) { return columns; } return columns.concat({ title: , dataIndex: 'TableColumnInitializer', key: 'TableColumnInitializer', }); }; type ArrayTableType = React.FC & { Column?: React.FC; mixin?: (T: any) => void; }; export const ArrayTable: ArrayTableType = observer((props) => { const field = useField(); const columns = useTableColumns(); const { onChange, ...others } = props; return (
); }); ArrayTable.Column = (props) => { const field = useField(); return
{field.title}
; }; ArrayTable.mixin = (Table: any) => { Table.Column = ArrayTable.Column; };