UNPKG

@lvxiaowu/antd4

Version:

antd4-components

228 lines (191 loc) 10.4 kB
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;