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 (