import { ReactVisualEditorTableProp } from './../ReactVisualEditor.props';
import { Button, Input, Modal, Table, Tag } from 'antd';
import { PlusSquareOutlined } from '@ant-design/icons';
import ReactDOM from 'react-dom';
import { defer } from './../../utils/defer';
import React,{ useState } from 'react';
import deepcopy from 'deepcopy';
const nextKey = (() => {
let start = Date.now();
return () => start++;
})();
export const TablePropEditor: React.FC<{
value?: any[];
config: ReactVisualEditorTableProp;
onChange?: (val?: any[]) => void;
}> = (props) => {
const methods = {
openEdit: async () => {
const newVal = await TablePropEditService({
config: props.config,
value: props.value,
});
!!props.onChange && props.onChange(newVal);
},
};
let render: any;
if (!props.value || props.value.length === 0) {
render = (
);
} else {
render = props.value.map((item, index) => {
return (
{item.value}
);
});
}
return
{render}
;
};
interface TablePropEditServiceOption {
config: ReactVisualEditorTableProp;
value?: any[];
onConfirm?: (val?: any[]) => void;
}
const TablePropEditModal: React.FC<{
option: TablePropEditServiceOption;
onRef: (ins: { show: (opt: TablePropEditServiceOption) => void }) => void;
}> = (props) => {
const [option, setOption] = useState(props.option);
const [showFlag, setShowFlag] = useState(false);
const [editData, $setEditData] = useState([] as any[]);
const setEditData = (val: any[]) => {
$setEditData(
val.map((d) => {
!d.key && (d.key = nextKey());
return d;
}),
);
};
const methods = {
show: (opt: TablePropEditServiceOption) => {
setOption(opt);
setEditData(deepcopy(opt.value || []));
setShowFlag(true);
},
close: () => {
setShowFlag(false);
},
save: () => {
!!option.onConfirm && option.onConfirm(editData);
methods.close();
},
add: () => {
setEditData([ ...editData,{}]);
},
reset: () => {
setEditData(option.value || []);
},
};
props.onRef(methods);
return (
>
}
onCancel={methods.close}
width="800px"
>
);
};
export const TablePropEditService = (() => {
let ins: any;
return (option: Omit): Promise => {
const dfd = defer();
option = {
...option,
onConfirm: dfd.resolve,
} as TablePropEditServiceOption;
if (!ins) {
const el = document.createElement('div');
document.body.appendChild(el);
ReactDOM.render( (ins = i)} />, el);
}
ins.show(option);
return dfd.promise;
};
})();