@lvxiaowu/antd4
Version:
antd4-components
228 lines (191 loc) • 10.4 kB
JavaScript
var _excluded = ["store", "rowKey", "selectable", "columns", "onEditorSave", "draggable", "onDragSort", "dataSource", "editor", "searchbar", "onEditorChange"];
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
import React from "react";
import { observer } from 'mobx-react-lite';
import { useRef, useEffect } from 'react';
import { Table, Form } from 'antd';
import arrayMove from 'array-move';
import EditableCell from './EditableCell';
import { CustomRow, CustomWrap, CustomCell, CustomDragHandle } from './Custom';
import { TableContext, transformEditorValues } from './Context';
import { DataType, Device } from '@lvxiaowu/utils';
import './style.less';
import { TABLE_STORE } from '../utils';
var isM = Device.touch;
/**
* 表格:支持拖拽排序、编辑
*/
function MyTable(props) {
// 手机端表格的props,不可编辑,不可拖拽,scroll固定位max-content
var mProps = isM ? {
draggable: false,
size: 'small',
scroll: {
x: 1000
}
} : null;
var _props$mProps = _objectSpread(_objectSpread({}, props), mProps),
_props$mProps$store = _props$mProps.store,
store = _props$mProps$store === void 0 ? {} : _props$mProps$store,
_props$mProps$rowKey = _props$mProps.rowKey,
rowKey = _props$mProps$rowKey === void 0 ? 'id' : _props$mProps$rowKey,
selectable = _props$mProps.selectable,
columns = _props$mProps.columns,
onEditorSave = _props$mProps.onEditorSave,
draggable = _props$mProps.draggable,
onDragSort = _props$mProps.onDragSort,
dataSource = _props$mProps.dataSource,
editor = _props$mProps.editor,
searchbar = _props$mProps.searchbar,
onEditorChange = _props$mProps.onEditorChange,
restProps = _objectWithoutProperties(_props$mProps, _excluded);
var tableStore = (store === null || store === void 0 ? void 0 : store.$table) || store;
if (tableStore && tableStore.$storeName !== TABLE_STORE) {
console.error('store属性必须为TableStore的实例');
return null;
}
if (!DataType.isStr(rowKey)) {
console.error('为了方便 Table 组件的 rowKey 属性必须是一个字符串');
}
var _Form$useForm = Form.useForm(),
_Form$useForm2 = _slicedToArray(_Form$useForm, 1),
form = _Form$useForm2[0]; // tableStore中的属性
var list = tableStore.list,
loading = tableStore.loading,
pagination = tableStore.pagination,
selectedRowKeys = tableStore.selectedRowKeys,
setSelected = tableStore.setSelected,
paging = tableStore.paging;
var resList = dataSource || list;
var _columns = columns.map(function (columnItem, columnIndex) {
var editable = columnItem.editable,
dataIndex = columnItem.dataIndex,
rules = columnItem.rules,
key = columnItem.key,
width = columnItem.width,
keepEditing = columnItem.keepEditing;
var columnKey = key ? key : typeof dataIndex === 'string' ? dataIndex : null; // 手机端columns的属性,不固定列,宽度去掉,onCell去掉
var mColumnProps = isM ? {
fixed: false,
width: undefined,
onCell: undefined
} : null;
return _objectSpread(_objectSpread({}, columnItem), {}, {
key: columnKey || "column_".concat(columnIndex),
onCell: function onCell(record, rowIndex) {
return {
columnKey: columnKey,
record: record,
editable: editable,
rowKey: rowKey,
rules: rules,
rowIndex: rowIndex,
width: width,
keepEditing: keepEditing
};
}
}, mColumnProps);
});
useEffect(function () {
var _tableStore$setEditor;
(_tableStore$setEditor = tableStore.setEditor) === null || _tableStore$setEditor === void 0 ? void 0 : _tableStore$setEditor.call(tableStore, form);
}, [form, tableStore]);
function handleSaveEditor(values) {
if (onEditorSave) {
var editedObj = transformEditorValues(values, {// filter: (key) => form.isFieldTouched(key),
});
onEditorSave === null || onEditorSave === void 0 ? void 0 : onEditorSave(editedObj);
}
}
/*
Form的onFieldsChange在设置了rules后会触发两次
一次修改filed,一次是去触发校验规则,所以这里判断一下,
避免每一次都去调用设置错误信息
*/
var fieldChangeRef = useRef();
function handleFieldsChange(changedFields) {
var _changedFields = _slicedToArray(changedFields, 1),
field = _changedFields[0];
if (field) {
var name = field.name,
errors = field.errors;
var errorMsg = errors[0];
if (fieldChangeRef.current !== errorMsg) {
var _form$name$;
fieldChangeRef.current = errorMsg;
(_form$name$ = form[name[0]]) === null || _form$name$ === void 0 ? void 0 : _form$name$.setFieldError(errorMsg);
}
}
}
function handleValuesChange(changedValue) {
if (onEditorChange) {
var res = transformEditorValues(changedValue, {
mode: 'array'
});
onEditorChange === null || onEditorChange === void 0 ? void 0 : onEditorChange(res[0]);
}
}
function onSortEnd(sortRes) {
var oldIndex = sortRes.oldIndex,
newIndex = sortRes.newIndex;
if (oldIndex !== newIndex) {
var sortedList = arrayMove(resList, oldIndex, newIndex);
tableStore === null || tableStore === void 0 ? void 0 : tableStore.dragSortList(sortedList, sortRes);
onDragSort === null || onDragSort === void 0 ? void 0 : onDragSort(sortedList, sortRes);
}
}
return /*#__PURE__*/React.createElement(Form, {
form: form,
component: false,
onFinish: handleSaveEditor,
onFieldsChange: handleFieldsChange,
onValuesChange: handleValuesChange
}, /*#__PURE__*/React.createElement(TableContext.Provider, {
value: {
draggable: draggable,
onSortEnd: onSortEnd,
form: form,
store: tableStore
}
}, searchbar, /*#__PURE__*/React.createElement(Table, _extends({
bordered: true,
rowKey: rowKey,
columns: _columns,
dataSource: resList,
loading: loading,
onChange: paging,
pagination: pagination,
onRow: function onRow(record, index) {
return {
index: index,
draggable: draggable
};
},
components: {
body: {
wrapper: CustomWrap,
row: CustomRow,
cell: CustomCell
}
},
rowSelection: selectable ? _objectSpread({
selectedRowKeys: selectedRowKeys,
onChange: setSelected
}, selectable) : undefined
}, restProps, mProps))));
}
var SdTable = observer(MyTable);
SdTable.EditableCell = EditableCell;
SdTable.DragHandle = CustomDragHandle;
export default SdTable;