import type { Rock } from "@ruiapp/move-style"; import meta from "./EditableTableMeta"; import { EditableTableColumn, EditableTableRockConfig } from "./editable-table-types"; import { get, set } from "lodash"; import { Button, DatePicker, Input, InputNumber, Select, Table, TableProps } from "antd"; import { MinusCircleOutlined, PlusOutlined } from "@ant-design/icons"; export default { Renderer(context, props: EditableTableRockConfig) { const { columns, value, disableAdd, disableRemove } = props; const onFieldChange = (record: any, column: EditableTableColumn, index: number, value: any) => { const r = set({ ...record }, column.name, value); const data = (props.value || []).map((item, idx) => (idx === index ? r : item)); props.onChange?.(data); }; let removeColumns: EditableTableColumn[] = [ { name: "remove_btn", width: 36, fixed: "right", control: (record, index) => { return ( { const filteredValue = props.value?.filter((item, idx) => idx !== index); props.onChange?.(filteredValue || []); }} > ); }, }, ]; if (disableRemove) { removeColumns = []; } let tableWidthSum = 0; let tableColumns: TableProps["columns"] = []; [...(columns || []), ...removeColumns].forEach((col) => { const width = col.width || 100; tableWidthSum += width; tableColumns.push({ dataIndex: col.name, title: col.title, width, fixed: col.fixed, render: (_, record, index) => { const current = get(record, col.name); switch (col.control) { case "input": return ( { const v = e.target.value; onFieldChange(record, col, index, v); }} /> ); case "number": return ( { onFieldChange(record, col, index, v); }} /> ); case "select": return (