import React, { useEffect, useState } from 'react';
import { Checkbox, message } from 'antd';
import _ from 'lodash';
import { config } from './base/config';
import { getEditComponent } from './base';
import s from './Cell.less';
import { CellProps, CellDataProps } from './interface';
import FormHelper from '../utils/formHelper';
import firstIcon from '../assets/first.png';
import secondIcon from '../assets/second.png';
import thirdIcon from '../assets/third.png';
import { transferAttr } from './base/_utils/transferAttr';
const Cell = (props: CellProps) => {
const {
columnConfig,
cellClassName,
cellStyle,
record,
value: cellData,
emitChangeCell,
columnIndex,
rowIndex,
paginationConfig,
showIndex,
emptyPlaceholder,
cellEditable,
rowSelection,
columns,
} = props;
const {
columnType,
columnName,
requiredFlag,
renderDetailCell,
renderEditCell,
cellRenderProps,
readOnlyFlag,
} = columnConfig;
const [status, setStatus] = useState('detail');
useEffect(() => {
setStatus('detail');
}, [cellData]);
const changeCellData = (changedValue: any) => {};
const emitChangeCellData = (changedValue: any, optionValue: any) => {
const temp: CellDataProps[] = [];
cellData.map((item: CellDataProps) => {
temp.push({ text: item.text, value: item.value });
});
if (_.isEqual(temp, changedValue)) {
setStatus('detail');
return;
}
changeValue(changedValue, optionValue);
};
const changeValue = async (changedValue: any, optionValue: any) => {
// 校验必填项
if (requiredFlag) {
if (!changedValue || changedValue.length === 0) {
message.error('该字段为必填项');
return;
}
if (changedValue.length === 1) {
const data = changedValue[0];
if (!data.value && !data.text) {
message.error('该字段为必填项');
return;
}
}
}
const extraData = FormHelper.changeTableData({
item: columnConfig,
changedKey: columnName,
changedValue,
originValue: optionValue,
});
extraData.push({
columnCode: columnName,
cellValueList: changedValue,
});
if (typeof emitChangeCell === 'function') {
emitChangeCell({
rowId: record.id,
value: extraData,
});
}
setStatus('detail');
};
const selfRenderDetailCell = () => {
let empty = !cellData || cellData.length === 0 || (cellData.length === 1 && !cellData[0].text && !cellData[0].value);
let detailConfig;
if (typeof renderDetailCell === 'function') {
detailConfig = renderDetailCell({ cellData, rowData: record, columnConfig });
empty = false;
} else {
detailConfig = config[String(columnType)] || config['1'];
}
const DetailComp: any = detailConfig.detailComp;
const newProps = {
...(detailConfig.componentAttr || {}),
...(columnConfig.columnAttrObj || {}),
};
const transferColumn = transferAttr(columnType, newProps);
const style: any = {};
const { current = 1, pageSize = 20 } = paginationConfig || {};
const getIndex = () => {
if (current === 1) {
let src = '';
switch (rowIndex) {
case 0:
src = firstIcon;
break;
case 1:
src = secondIcon;
break;
case 2:
src = thirdIcon;
break;
default:
return rowIndex + 1;
}
return ;
}
return (current - 1) * pageSize + rowIndex + 1;
};
const getCheckbox = () => {
const { selectedRows, onChange } = rowSelection;
const index = selectedRows.findIndex((item: any) => {
return item.id === record.id;
});
const checked = index > -1;
const onToggle = () => {
if (typeof onChange === 'function') {
const data = _.cloneDeep(selectedRows);
if (checked) {
data.splice(index, 1);
} else {
data.push(record);
}
onChange(data);
}
};
return