UNPKG

fastlion-amis

Version:

一种MIS页面生成工具

1,183 lines (1,182 loc) 48.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.TableStore = exports.Row = exports.Column = void 0; var tslib_1 = require("tslib"); var mobx_state_tree_1 = require("mobx-state-tree"); var iRenderer_1 = require("./iRenderer"); var tpl_builtin_1 = require("../utils/tpl-builtin"); var isEqual_1 = (0, tslib_1.__importDefault)(require("lodash/isEqual")); var find_1 = (0, tslib_1.__importDefault)(require("lodash/find")); var helper_1 = require("../utils/helper"); var tpl_1 = require("../utils/tpl"); var manager_1 = require("./manager"); exports.Column = mobx_state_tree_1.types .model('Column', { label: mobx_state_tree_1.types.optional(mobx_state_tree_1.types.frozen(), undefined), type: mobx_state_tree_1.types.optional(mobx_state_tree_1.types.string, 'plain'), name: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.string), value: mobx_state_tree_1.types.frozen(), groupName: '', toggled: false, toggable: true, expandable: false, checkdisable: false, isPrimary: false, searchable: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.frozen()), enableSearch: true, sortable: false, filterable: mobx_state_tree_1.types.optional(mobx_state_tree_1.types.frozen(), undefined), fixed: '', index: 0, rawIndex: 0, breakpoint: mobx_state_tree_1.types.optional(mobx_state_tree_1.types.frozen(), undefined), pristine: mobx_state_tree_1.types.optional(mobx_state_tree_1.types.frozen(), undefined), remark: mobx_state_tree_1.types.optional(mobx_state_tree_1.types.frozen(), undefined), className: '' }) .actions(function (self) { return ({ toggleToggle: function () { self.toggled = !self.toggled; var table = (0, mobx_state_tree_1.getParent)(self, 2); if (!table.activeToggaleColumns.length) { self.toggled = true; } table.persistSaveToggledColumns(); }, setToggled: function (value) { self.toggled = value; }, setEnableSearch: function (value) { self.enableSearch = value; } }); }); exports.Row = mobx_state_tree_1.types .model('Row', { storeType: 'Row', id: mobx_state_tree_1.types.identifier, parentId: '', key: mobx_state_tree_1.types.string, pristine: mobx_state_tree_1.types.frozen({}), data: mobx_state_tree_1.types.frozen({}), rowSpans: mobx_state_tree_1.types.frozen({}), index: mobx_state_tree_1.types.number, newIndex: mobx_state_tree_1.types.number, path: '', expandable: false, checkdisable: false, isHover: false, children: mobx_state_tree_1.types.optional(mobx_state_tree_1.types.array(mobx_state_tree_1.types.late(function () { return exports.Row; })), []), depth: mobx_state_tree_1.types.number, // 当前children位于第几层,便于使用getParent获取最顶层TableStore }) .views(function (self) { return ({ get checked() { return (0, mobx_state_tree_1.getParent)(self, self.depth * 2).isSelected(self); }, get modified() { if (!self.data) { return false; } return Object.keys(self.data).some(function (key) { return !(0, isEqual_1.default)(self.data[key], self.pristine[key]); }); }, getDataWithModifiedChilden: function () { var data = (0, tslib_1.__assign)({}, self.data); if (data.children && self.children) { data.children = self.children.map(function (item) { return item.getDataWithModifiedChilden(); }); } return data; }, get collapsed() { var table = (0, mobx_state_tree_1.getParent)(self, self.depth * 2); if (table.dragging) { return true; } var from = self; while (from && from !== table) { if (!table.isExpanded(from)) { return true; } from = (0, mobx_state_tree_1.getParent)(from, 2); } return false; }, get expanded() { return !this.collapsed; }, get moved() { return self.index !== self.newIndex; }, get locals() { var children = null; if (self.children.length) { children = self.children.map(function (item) { return item.locals; }); } var parent = (0, mobx_state_tree_1.getParent)(self, 2); return (0, helper_1.createObject)((0, helper_1.extendObject)((0, mobx_state_tree_1.getParent)(self, self.depth * 2).data, { index: self.index, // todo 以后再支持多层,目前先一层 parent: parent.storeType === exports.Row.name ? parent.data : undefined }), children ? (0, tslib_1.__assign)((0, tslib_1.__assign)({}, self.data), { children: children }) : self.data); }, get checkable() { var table = (0, mobx_state_tree_1.getParent)(self, self.depth * 2); return table && table.itemCheckableOn ? (0, tpl_1.evalExpression)(table.itemCheckableOn, self.locals) : true; }, get draggable() { var table = (0, mobx_state_tree_1.getParent)(self, self.depth * 2); return table && table.itemDraggableOn ? (0, tpl_1.evalExpression)(table.itemDraggableOn, self.locals) : true; } }); }) .actions(function (self) { return ({ toggle: function () { (0, mobx_state_tree_1.getParent)(self, self.depth * 2).toggle(self); }, toggleExpanded: function () { (0, mobx_state_tree_1.getParent)(self, self.depth * 2).toggleExpanded(self); }, change: function (values, savePristine) { self.data = (0, helper_1.immutableExtends)(self.data, values); savePristine && (self.pristine = self.data); }, reset: function () { self.newIndex = self.index; self.data = self.pristine; }, setCheckdisable: function (bool) { self.checkdisable = bool; }, setIsHover: function (value) { self.isHover = value; }, replaceWith: function (data) { Object.keys(data).forEach(function (key) { if (key !== 'id') { self[key] = data[key]; } }); if (Array.isArray(data.children)) { var arr = data.children; var pool = arr.concat(); // 把多的删了先 if (self.children.length > arr.length) { self.children.splice(arr.length, self.children.length - arr.length); } var index = 0; var len = self.children.length; while (pool.length) { // 因为父级id未更新,所以需要将子级的parentId正确指向父级id var item = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, pool.shift()), { parentId: self.id }); if (index < len) { self.children[index].replaceWith(item); } else { var row = exports.Row.create(item); self.children.push(row); } index++; } } } }); }); exports.TableStore = iRenderer_1.iRendererStore .named('TableStore') .props({ columns: mobx_state_tree_1.types.array(exports.Column), rawColumns: mobx_state_tree_1.types.array(exports.Column), rows: mobx_state_tree_1.types.array(exports.Row), selectedRows: mobx_state_tree_1.types.array(mobx_state_tree_1.types.reference(exports.Row)), expandedRows: mobx_state_tree_1.types.array(mobx_state_tree_1.types.string), primaryField: 'id', orderBy: '', orderDir: mobx_state_tree_1.types.optional(mobx_state_tree_1.types.union(mobx_state_tree_1.types.literal('asc'), mobx_state_tree_1.types.literal('desc')), 'asc'), draggable: false, dragging: false, selectable: false, multiple: true, footable: mobx_state_tree_1.types.frozen(), expandConfig: mobx_state_tree_1.types.frozen(), isNested: false, columnsTogglable: mobx_state_tree_1.types.optional(mobx_state_tree_1.types.union(mobx_state_tree_1.types.boolean, mobx_state_tree_1.types.literal('auto')), 'auto'), itemCheckableOn: '', itemDraggableOn: '', hideCheckToggler: false, combineNum: 0, combineFromIndex: 0, formsRef: mobx_state_tree_1.types.optional(mobx_state_tree_1.types.array(mobx_state_tree_1.types.frozen()), []), maxKeepItemSelectionLength: 0, keepItemSelectionOnPageChange: false, // Jay stickyWidths: mobx_state_tree_1.types.optional(mobx_state_tree_1.types.frozen(), {}), mobileUI: false, orderColumns: mobx_state_tree_1.types.optional(mobx_state_tree_1.types.frozen(), new Map()), originColumns: mobx_state_tree_1.types.optional(mobx_state_tree_1.types.array(mobx_state_tree_1.types.frozen()), []), isItemSort: false, mobileLayout: '', }) .views(function (self) { function getColumnsExceptBuiltinTypes() { return self.columns.filter(function (item) { return !/^__/.test(item.type); }); } // Jay function getRawColumnsExceptBuiltinTypes() { return self.rawColumns.filter(function (item) { return !/^__/.test(item.type); }); } function getForms() { return self.formsRef.map(function (item) { return ({ store: (0, manager_1.getStoreById)(item.id), rowIndex: item.rowIndex }); }); } function getFilteredColumns() { return self.columns.filter(function (item) { return item && (0, helper_1.isVisible)(item.pristine, (0, helper_1.hasVisibleExpression)(item.pristine) ? self.data : {}) && (item.type === '__checkme' ? self.selectable && !self.dragging && !self.hideCheckToggler && self.rows.length : item.type === '__dragme' ? self.dragging : item.type === '__expandme' ? (getFootableColumns().length || self.isNested) && !self.dragging : (item.toggled || !item.toggable) && (!self.footable || !item.breakpoint || !(0, helper_1.isBreakpoint)(item.breakpoint))); }); } function getFootableColumns() { return self.columns.filter(function (item) { return item.type === '__checkme' || item.type === '__dragme' || item.type === '__expandme' ? false : (item.toggled || !item.toggable) && self.footable && item.breakpoint && (0, helper_1.isBreakpoint)(item.breakpoint); }); } function getLeftFixedColumns() { if (self.dragging) { return []; } var columns = getFilteredColumns().filter(function (item) { return item.fixed === 'left'; }); // 有才带过去,没有就不带了 if (columns.length) { columns = getFilteredColumns().filter(function (item) { return item.fixed === 'left' || /^__/.test(item.type); }); } return columns; } function getRightFixedColumns() { if (self.dragging) { return []; } return getFilteredColumns().filter(function (item) { return item.fixed === 'right'; }); } function isSelected(row) { return !!~self.selectedRows.indexOf(row); } function isExpanded(row) { return self.expandedRows.includes(row.id); } function getTogglable() { if (self.columnsTogglable === 'auto') { return self.columns.filter(function (item) { return !/^__/.test(item.type); }).length > 5; } return self.columnsTogglable; } function getToggableColumns() { return self.columns.filter(function (item) { return (0, helper_1.isVisible)(item.pristine, self.data) && item.toggable !== false; }); } function getActiveToggableColumns() { return getToggableColumns().filter(function (item) { return item.toggled; }); } function getModifiedRows(rows, modifiedRows) { if (rows === void 0) { rows = []; } if (modifiedRows === void 0) { modifiedRows = []; } rows = rows && rows.length ? rows : self.rows; rows.forEach(function (item) { if (item.children && item.children.length) { getModifiedRows(item.children, modifiedRows); } var diff = (0, helper_1.difference)(item.data, item.pristine); var hasDifference = Object.keys(diff).length; if (hasDifference) { modifiedRows.push(item); } }); return modifiedRows; } function getModified() { return getModifiedRows().length; } function getMovedRows() { return (0, helper_1.flattenTree)(self.rows).filter(function (item) { return item.moved; }); } function getMoved() { return getMovedRows().length; } function getHovedRow() { return (0, helper_1.flattenTree)(self.rows).find(function (item) { return item.isHover; }); } function getUnSelectedRows() { return (0, helper_1.flattenTree)(self.rows).filter(function (item) { return !item.checked; }); } function getData(superData) { return (0, helper_1.createObject)(superData, { items: self.rows.map(function (item) { return item.data; }), selectedItems: self.selectedRows.map(function (item) { return item.data; }), unSelectedItems: getUnSelectedRows().map(function (item) { return item.data; }) }); } function hasColumnHidden() { return self.columns.findIndex(function (column) { return !column.toggled; }) !== -1; } function getColumnGroup() { var columns = getFilteredColumns(); var len = columns.length; if (!len) { return []; } var groups = [ { label: columns[0].groupName, colSpan: 1, rowSpan: 1, index: columns[0].index, has: [columns[0]] } ]; var needGroup = columns.find(function (item) { return !!item.groupName; }); if (needGroup) { for (var i = 1; i < len; i++) { var prev = groups[groups.length - 1]; var current = columns[i]; if (current.groupName && current.groupName === prev.label) { prev.colSpan++; prev.has.push(current); } else { groups.push({ label: current.groupName, colSpan: 1, rowSpan: 1, index: current.index, has: [current] }); } } } if (groups.length === 1 && !groups[0].label) { groups.pop(); } return groups.map(function (item) { var rowSpan = !item.label || (item.has.length === 1 && item.label === item.has[0].label) ? 2 : 1; return (0, tslib_1.__assign)((0, tslib_1.__assign)({}, item), { rowSpan: rowSpan, label: rowSpan === 2 ? item.label || item.has[0].label : item.label }); }); } function getFirstToggledColumnIndex() { var column = self.columns.find(function (column) { return !/^__/.test(column.type) && column.toggled; }); return column == null ? null : column.index; } function getSearchableColumns() { return self.columns.filter(function (column) { return column.searchable && (0, helper_1.isObject)(column.searchable); }); } function getActivedSearchableColumns() { return self.columns.filter(function (column) { return column.searchable && (0, helper_1.isObject)(column.searchable) && column.enableSearch; }); } return { get columnsData() { return getColumnsExceptBuiltinTypes(); }, get rawColumnsData() { return getRawColumnsExceptBuiltinTypes(); }, get forms() { return getForms(); }, get searchableColumns() { return getSearchableColumns(); }, get activedSearchableColumns() { return getSearchableColumns().filter(function (column) { return column.enableSearch; }); }, get filteredColumns() { return getFilteredColumns(); }, get footableColumns() { return getFootableColumns(); }, get leftFixedColumns() { return getLeftFixedColumns(); }, get rightFixedColumns() { return getRightFixedColumns(); }, get toggableColumns() { return getToggableColumns(); }, get activeToggaleColumns() { return getActiveToggableColumns(); }, get someChecked() { return !!self.selectedRows.length; }, get allChecked() { return !!(self.selectedRows.length === self.checkableRows.length && self.checkableRows.length); }, isSelected: isSelected, get allExpanded() { return !!(self.expandedRows.length === this.expandableRows.length && this.expandableRows.length); }, isExpanded: isExpanded, get toggable() { return getTogglable(); }, get modified() { return getModified(); }, get modifiedRows() { return getModifiedRows(); }, get unSelectedRows() { return getUnSelectedRows(); }, get checkableRows() { return (0, helper_1.flattenTree)(self.rows).filter(function (item) { return item.checkable; }); }, get expandableRows() { return self.rows.filter(function (item) { return item.expandable; }); }, get moved() { return getMoved(); }, get movedRows() { return getMovedRows(); }, get hoverRow() { return getHovedRow(); }, get disabledHeadCheckbox() { var _a; var selectedLength = (_a = self.data) === null || _a === void 0 ? void 0 : _a.selectedItems.length; var maxLength = self.maxKeepItemSelectionLength; if (!self.data || !self.keepItemSelectionOnPageChange || !maxLength) { return false; } return maxLength === selectedLength; }, get firstToggledColumnIndex() { return getFirstToggledColumnIndex(); }, getData: getData, get columnGroup() { return getColumnGroup(); }, getRowById: function (id) { return (0, helper_1.findTree)(self.rows, function (item) { return item.id === id; }); }, getItemsByName: function (name) { return this.forms .filter(function (form) { return form.rowIndex === parseInt(name, 10); }) .map(function (item) { return item.store; }); }, // 是否隐藏了某列 hasColumnHidden: function () { return hasColumnHidden(); }, getExpandedRows: function () { var list = []; (0, helper_1.eachTree)(self.rows, function (i) { if (self.expandedRows.includes(i.id)) { list.push(i); } }); return list; } }; }) .actions(function (self) { function update(config) { config.primaryField !== void 0 && (self.primaryField = config.primaryField); config.selectable !== void 0 && (self.selectable = config.selectable); config.columnsTogglable !== void 0 && (self.columnsTogglable = config.columnsTogglable); config.draggable !== void 0 && (self.draggable = config.draggable); if (typeof config.orderBy === 'string') { setOrderByInfo(config.orderBy, config.orderDir === 'desc' ? 'desc' : 'asc'); } config.orderColumns !== void 0 && (self.orderColumns = config.orderColumns); config.multiple !== void 0 && (self.multiple = config.multiple); config.footable !== void 0 && (self.footable = config.footable); config.expandConfig !== void 0 && (self.expandConfig = config.expandConfig); config.itemCheckableOn !== void 0 && (self.itemCheckableOn = config.itemCheckableOn); config.itemDraggableOn !== void 0 && (self.itemDraggableOn = config.itemDraggableOn); config.hideCheckToggler !== void 0 && (self.hideCheckToggler = !!config.hideCheckToggler); config.combineNum !== void 0 && (self.combineNum = parseInt(config.combineNum, 10) || 0); config.combineFromIndex !== void 0 && (self.combineFromIndex = parseInt(config.combineFromIndex, 10) || 0); config.maxKeepItemSelectionLength !== void 0 && (self.maxKeepItemSelectionLength = config.maxKeepItemSelectionLength); config.keepItemSelectionOnPageChange !== void 0 && (self.keepItemSelectionOnPageChange = config.keepItemSelectionOnPageChange); // Aug config.mobileUI !== void 0 && (self.mobileUI = !!config.mobileUI); config.mobileLayout && (self.mobileLayout = config.mobileLayout); if (config.columns && Array.isArray(config.columns)) { var columns = config.columns .filter(function (column) { return column; }) .concat(); if (!columns.length) { columns.push({ type: 'text', label: '空' }); } //Aug columns[self.mobileUI ? 'push' : 'unshift']({ type: '__expandme', toggable: false, className: 'Table-expandCell', label: self.mobileUI ? false : undefined, }); columns.unshift({ type: '__checkme', // fixed: 'left', fixed: self.mobileUI ? undefined : 'left', toggable: false, className: 'Table-checkCell', label: self.mobileUI ? false : undefined, //Aug }); columns.unshift({ type: '__dragme', toggable: false, className: 'Table-dragCell' }); columns = columns.map(function (item, index) { return ((0, tslib_1.__assign)((0, tslib_1.__assign)({}, item), { index: index, rawIndex: index - 3, type: item.type || 'plain', pristine: item, toggled: item.toggled !== false, breakpoint: item.breakpoint, isPrimary: index === 3, className: item.className || '' })); }); self.columns.replace(columns); } // Jay if (config.rawColumns && Array.isArray(config.rawColumns)) { var columns = config.rawColumns .filter(function (column) { return column; }) .concat(); if (!columns.length) { columns.push({ type: 'text', label: '空' }); } //Aug columns[self.mobileUI ? 'push' : 'unshift']({ type: '__expandme', toggable: false, className: 'Table-expandCell', label: self.mobileUI ? false : undefined, }); columns.unshift({ type: '__checkme', // fixed: 'left', fixed: self.mobileUI ? undefined : 'left', toggable: false, className: 'Table-checkCell', label: self.mobileUI ? false : undefined, //Aug }); columns.unshift({ type: '__dragme', toggable: false, className: 'Table-dragCell' }); columns = columns.map(function (item, index) { return ((0, tslib_1.__assign)((0, tslib_1.__assign)({}, item), { index: index, rawIndex: index - 3, type: item.type || 'plain', pristine: item, toggled: item.toggled !== false, breakpoint: item.breakpoint, isPrimary: index === 3, className: item.className || '' })); }); self.rawColumns.replace(columns); } } function updateColumns(columns) { if (columns && Array.isArray(columns)) { columns = columns.filter(function (column) { return column; }).concat(); if (!columns.length) { columns.push({ type: 'text', label: '空' }); } columns.unshift({ type: '__expandme', toggable: false, // Jay fixed: 'left', className: 'Table-expandCell' }); columns.unshift({ type: '__checkme', fixed: 'left', toggable: false, className: 'Table-checkCell' }); columns.unshift({ type: '__dragme', toggable: false, // Jay fixed: 'left', className: 'Table-dragCell' }); columns = columns.map(function (item, index) { return ((0, tslib_1.__assign)((0, tslib_1.__assign)({}, item), { index: index, rawIndex: index - 3, type: item.type || 'plain', pristine: item.pristine || item, toggled: item.toggled !== false, breakpoint: item.breakpoint, isPrimary: index === 3 })); }); self.columns.replace(columns); } } // 更新折叠操作列 function updateOperation(foldColumns) { var temp = self.columns.map(function (col) { var item = col.pristine; if ((item === null || item === void 0 ? void 0 : item.type) === 'operation') { var props = { style: { overFlow: 'hidden' }, label: [ { type: 'button', label: '', size: 'xs', level: 'link', icon: (foldColumns === null || foldColumns === void 0 ? void 0 : foldColumns.includes('scale' + item.name)) ? 'fa fa-step-backward' : 'fa fa-step-forward', actionType: 'scale' + item.name }, item.label[1] ] }; return (0, tslib_1.__assign)((0, tslib_1.__assign)((0, tslib_1.__assign)({}, col), props), { pristine: (0, tslib_1.__assign)((0, tslib_1.__assign)({}, item), props) }); } return col; }); self.columns.replace(temp); } function combineCell(arr, keys) { if (!keys.length || !arr.length) { return arr; } var key = keys.shift(); var rowIndex = 0; var row = arr[rowIndex]; row.rowSpans[key] = 1; var value = (0, tpl_builtin_1.resolveVariable)(key, row.data); for (var i = 1, len = arr.length; i < len; i++) { var current = arr[i]; if ((0, isEqual_1.default)((0, tpl_builtin_1.resolveVariable)(key, current.data), value)) { row.rowSpans[key] += 1; current.rowSpans[key] = 0; } else { if (row.rowSpans[key] > 1) { combineCell(arr.slice(rowIndex, i), keys.concat()); } rowIndex = i; row = current; row.rowSpans[key] = 1; value = (0, tpl_builtin_1.resolveVariable)(key, row.data); } } if (row.rowSpans[key] > 1 && keys.length) { combineCell(arr.slice(rowIndex, arr.length), keys.concat()); } return arr; } function autoCombineCell(arr, columns, maxCount, fromIndex) { if (fromIndex === void 0) { fromIndex = 0; } if (!columns.length || !maxCount || !arr.length) { return arr; } // 如果是嵌套模式,通常第一列都是存在差异的,所以从第二列开始。 fromIndex = fromIndex || (arr.some(function (item) { return Array.isArray(item.children) && item.children.length; }) ? 1 : 0); var keys = []; var len = columns.length; for (var i = 0; i < len; i++) { var column = columns[i]; // maxCount 可能比实际配置的 columns 还有多。 if (!column) { break; } if ('__' === column.type.substring(0, 2)) { maxCount++; continue; } var key = column.name; if (!key) { break; } keys.push(key); } while (fromIndex--) { keys.shift(); } while (keys.length > maxCount) { keys.pop(); } return combineCell(arr, keys); } function initChildren(children, depth, pindex, parentId, path) { if (path === void 0) { path = ''; } depth += 1; return children.map(function (item, index) { item = (0, helper_1.isObject)(item) ? item : { item: item }; var id = (0, helper_1.guid)(); return { // id: String(item && (item as any)[self.primaryField] || `${pindex}-${depth}-${key}`), id: id, parentId: parentId, key: String(pindex + "-" + depth + "-" + index), path: "" + path + index, depth: depth, index: index, newIndex: index, pristine: item, data: item, rowSpans: {}, children: item && Array.isArray(item.children) ? initChildren(item.children, depth, index, id, "" + path + index + ".") : [], expandable: !!((item && Array.isArray(item.children) && item.children.length) || (self.footable && self.footableColumns.length)) }; }); } function initRows(rows, getEntryId, reUseRow) { self.selectedRows.clear(); // self.expandedRows.clear(); var arr = rows.map(function (item, index) { var id = getEntryId ? getEntryId(item, index) : (0, helper_1.guid)(); return { // id: getEntryId ? getEntryId(item, key) : String(item && (item as any)[self.primaryField] || `${key}-1-${key}`), id: id, key: String(index + "-1-" + index), depth: 1, index: index, newIndex: index, pristine: item, path: "" + index, data: item, rowSpans: {}, children: item && Array.isArray(item.children) ? initChildren(item.children, 1, index, id, index + ".") : [], expandable: !!((item && Array.isArray(item.children) && item.children.length) || (self.footable && self.footableColumns.length)) }; }); if (self.combineNum) { arr = autoCombineCell(arr, self.columns, self.combineNum, self.combineFromIndex); } replaceRow(arr, reUseRow); self.isNested = self.rows.some(function (item) { return item.children.length; }); var expand = self.footable && self.footable.expand; if (expand === 'first' || (self.expandConfig && self.expandConfig.expand === 'first')) { self.rows.length && self.expandedRows.push(self.rows[0].id); } else if ((expand === 'all' && !self.footable.accordion) || (self.expandConfig && self.expandConfig.expand === 'all' && !self.expandConfig.accordion)) { self.expandedRows.replace(self.rows.map(function (item) { return item.id; })); } self.dragging = false; } // 尽可能的复用 row function replaceRow(arr, reUseRow) { if (reUseRow === false) { self.rows.replace(arr.map(function (item) { return exports.Row.create(item); })); return; } var pool = arr.concat(); // 把多的删了先 if (self.rows.length > arr.length) { self.rows.splice(arr.length, self.rows.length - arr.length); } var index = 0; var len = self.rows.length; while (pool.length) { var item = pool.shift(); if (index < len) { self.rows[index].replaceWith(item); } else { var row = exports.Row.create(item); self.rows.push(row); } index++; } } function updateSelected(selected, valueField) { self.selectedRows.clear(); self.rows.forEach(function (item) { if (~selected.indexOf(item.pristine)) { self.selectedRows.push(item); } else if ((0, find_1.default)(selected, function (a) { return a[valueField || 'value'] && a[valueField || 'value'] == item.pristine[valueField || 'value']; })) { self.selectedRows.push(item); } }); updateCheckDisable(); } function toggleAll() { var _a; var maxLength = self.maxKeepItemSelectionLength; var keep = self.keepItemSelectionOnPageChange; if (self.allChecked) { self.selectedRows.clear(); } else { var selectedItems_1 = (_a = self.data) === null || _a === void 0 ? void 0 : _a.selectedItems; if (keep && maxLength && selectedItems_1 && maxLength >= selectedItems_1.length) { var restCheckableRows = self.checkableRows.filter(function (item) { return !item.checked; }); var checkableRows = restCheckableRows.filter(function (item, i) { return i < maxLength - selectedItems_1.length; }); self.selectedRows.replace((0, tslib_1.__spreadArray)((0, tslib_1.__spreadArray)([], self.selectedRows, true), checkableRows, true)); } else { self.selectedRows.replace(self.checkableRows); } } } function checkReverse() { self.selectedRows.replace((0, tslib_1.__spreadArray)([], self.unSelectedRows, true)); } function checkAll() { var _a; if (!self.allChecked) { var maxLength_1 = self.maxKeepItemSelectionLength; var keep = self.keepItemSelectionOnPageChange; var selectedItems_2 = (_a = self.data) === null || _a === void 0 ? void 0 : _a.selectedItems; if (keep && maxLength_1 && selectedItems_2 && maxLength_1 >= selectedItems_2.length) { var restCheckableRows = self.checkableRows.filter(function (item) { return !item.checked; }); var checkableRows = restCheckableRows.filter(function (item, i) { return i < maxLength_1 - selectedItems_2.length; }); self.selectedRows.replace((0, tslib_1.__spreadArray)((0, tslib_1.__spreadArray)([], self.selectedRows, true), checkableRows, true)); } else { self.selectedRows.replace(self.checkableRows); } } } function getCopyRowValue(columnFields, isSelected, rowIndex, primaryField, hasHead) { if (hasHead === void 0) { hasHead = false; } var data = self.getData(undefined); var items = data.items; var headValue = self.columnsData.map(function (v) { if (!v.pristine.hidden) { if (!(v.label instanceof Array)) { return v.label; } } return undefined; }).filter(function (v) { return v !== undefined; }).join('\t'); var copyRowValue = columnFields.map(function (key) { return items[rowIndex][key]; }).join('\t'); if (isSelected) { var selectedItems_3 = data.selectedItems; if (primaryField) { if (columnFields.includes(primaryField)) { selectedItems_3 = items.filter(function (item) { return selectedItems_3.some(function (v) { return v[primaryField] === item[primaryField]; }); }); } } copyRowValue = selectedItems_3.map(function (item) { return columnFields.map(function (key) { return item[key]; }).join('\t'); }).join('\n'); } if (hasHead) { return headValue + '\n' + copyRowValue; } return copyRowValue; } function getCopyColumnValue(isSelected, name, primaryField) { var items = self.getData(undefined).items; var copyColumnValue = items.map(function (item) { return item[name]; }).join('\n'); if (isSelected) { var selectedItems_4 = self.getData(undefined).selectedItems; if (primaryField) { selectedItems_4 = items.filter(function (item) { return selectedItems_4.some(function (v) { return v[primaryField] === item[primaryField]; }); }); } copyColumnValue = selectedItems_4.map(function (item) { return item[name]; }).join('\n'); } return copyColumnValue; } // 记录最近一次点击的多选框,主要用于 shift 多选时判断上一个选的是什么 var lastCheckedRow = null; function toggle(row) { if (!row.checkable) { return; } lastCheckedRow = row; var idx = self.selectedRows.indexOf(row); if (self.multiple) { ~idx ? self.selectedRows.splice(idx, 1) : self.selectedRows.push(row); } else { ~idx ? self.selectedRows.splice(idx, 1) : self.selectedRows.replace([row]); } } // 按住 shift 的时候点击选项 function toggleShift(row) { // 如果是同一个或非 multiple 模式下就和不用 shift 一样 if (!lastCheckedRow || row === lastCheckedRow || !self.multiple) { toggle(row); return; } var maxLength = self.maxKeepItemSelectionLength; var checkableRows = self.checkableRows; var lastCheckedRowIndex = checkableRows.findIndex(function (row) { return row === lastCheckedRow; }); var rowIndex = checkableRows.findIndex(function (rowItem) { return row === rowItem; }); var minIndex = lastCheckedRowIndex > rowIndex ? rowIndex : lastCheckedRowIndex; var maxIndex = lastCheckedRowIndex > rowIndex ? lastCheckedRowIndex : rowIndex; var rows = checkableRows.slice(minIndex, maxIndex); rows.push(row); // 将当前行也加入进行判断 for (var _i = 0, rows_1 = rows; _i < rows_1.length; _i++) { var rowItem = rows_1[_i]; var idx = self.selectedRows.indexOf(rowItem); if (idx === -1) { // 如果上一个是选中状态,则将之间的所有 check 都变成可选 if (lastCheckedRow.checked) { if (maxLength) { if (self.selectedRows.length < maxLength) { self.selectedRows.push(rowItem); } } else { self.selectedRows.push(rowItem); } } } else { if (!lastCheckedRow.checked) { self.selectedRows.splice(idx, 1); } } } lastCheckedRow = row; } function updateCheckDisable() { if (!self.data) { return; } var maxLength = self.maxKeepItemSelectionLength; var selectedItems = self.data.selectedItems; self.selectedRows.map(function (item) { return item.setCheckdisable(false); }); if (maxLength && maxLength <= selectedItems.length) { self.unSelectedRows.map(function (item) { return !item.checked && item.setCheckdisable(true); }); } else { self.unSelectedRows.map(function (item) { return item.checkdisable && item.setCheckdisable(false); }); } } function clear() { self.selectedRows.clear(); } function toggleExpandAll() { if (self.allExpanded) { self.expandedRows.clear(); } else { self.expandedRows.replace(self.rows.filter(function (item) { return item.expandable; }).map(function (item) { return item.id; })); } } function toggleExpanded(row) { var idx = self.expandedRows.indexOf(row.id); if (~idx) { self.expandedRows.splice(idx, 1); } else if (self.footable && self.footable.accordion) { self.expandedRows.replace([row.id]); } else if (self.expandConfig && self.expandConfig.accordion) { var rows = self .getExpandedRows() .filter(function (item) { return item.depth !== row.depth; }); rows.push(row); self.expandedRows.replace(rows.map(function (item) { return item.id; })); } else { self.expandedRows.push(row.id); } } function collapseAllAtDepth(depth) { var rows = self.getExpandedRows().filter(function (item) { return item.depth !== depth; }); self.expandedRows.replace(rows.map(function (item) { return item.id; })); } function setOrderByInfo(key, direction) { self.orderBy = key; self.orderDir = direction; } function reset() { self.rows.forEach(function (item) { return item.reset(); }); var rows = self.rows.concat(); (0, helper_1.eachTree)(rows, function (item) { if (item.children) { var rows_2 = item.children.concat().sort(function (a, b) { return a.index - b.index; }); rows_2.forEach(function (item) { return item.reset(); }); item.children.replace(rows_2); } }); rows.forEach(function (item) { return item.reset(); }); rows = rows.sort(function (a, b) { return a.index - b.index; }); self.rows.replace(rows); self.dragging = false; } function toggleDragging() { self.dragging = !self.dragging; } function stopDragging() { self.dragging = false; } function exchange(fromIndex, toIndex, item) { item = item || self.rows[fromIndex]; if (item.parentId) { var parent = self.getRowById(item.parentId); var offset = parent.children.indexOf(item) - fromIndex; toIndex += offset; fromIndex += offset; var newRows_1 = parent.children.concat(); newRows_1.splice(fromIndex, 1); newRows_1.splice(toIndex, 0, item); newRows_1.forEach(function (item, index) { return (item.newIndex = index); }); parent.children.replace(newRows_1); return; } var newRows = self.rows.concat(); newRows.splice(fromIndex, 1); newRows.splice(toIndex, 0, item); newRows.forEach(function (item, index) { return (item.newIndex = index); }); self.rows.replace(newRows); } function persistSaveToggledColumns() { var key = location.pathname + self.path + self.toggableColumns.map(function (item) { return item.name || item.index; }).join('-'); localStorage.setItem(key, JSON.stringify(self.activeToggaleColumns.map(function (item) { return item.index; }))); } function addForm(form, rowIndex) { self.formsRef.push({ id: form.id, rowIndex: rowIndex }); } // Aug function toggableHideCheck() { self.hideCheckToggler = !self.hideCheckToggler; } function setOrderColumn(key, value) { self.orderColumns.set(key, value); self.isItemSort = !self.isItemSort; } function getOrderColumn(key) { return self.orderColumns.get(key); } function deleteOrderColumn(key) { self.orderColumns.delete(key); self.isItemSort = !self.isItemSort; } function clearOrderColumn() { self.orderColumns.clear(); } function orderColumnsParam() { var params = ""; self.orderColumns.forEach(function (key, value, Map) { params += value + "," + key + ";"; }); return params.slice(0, -1); } return { update: update, updateColumns: updateColumns, initRows: initRows, updateSelected: updateSelected, checkAll: checkAll, checkReverse: checkReverse, getCopyRowValue: getCopyRowValue, getCopyColumnValue: getCopyColumnValue, toggleAll: toggleAll, toggle: toggle, toggleShift: toggleShift, toggleExpandAll: toggleExpandAll, toggleExpanded: toggleExpanded, collapseAllAtDepth: collapseAllAtDepth, clear: clear, setOrderByInfo: setOrderByInfo, reset: reset, toggleDragging: toggleDragging, stopDragging: stopDragging, exchange: exchange, addForm: addForm, setOrderColumn: setOrderColumn, getOrderColumn: getOrderColumn, deleteOrderColumn: deleteOrderColumn, orderColumnsParam: orderColumnsParam, clearOrderColumn: clearOrderColumn, persistSaveToggledColumns: persistSaveToggledColumns, updateOperation: updateOperation, // events afterCreate: function () { setTimeout(function () { if (!(0, mobx_state_tree_1.isAlive)(self)) { return; } var key = location.pathname + self.path + self.toggableColumns.map(function (item) { return item.name || item.index; }).join('-'); var data = localStorage.getItem(key); if (data) { var selectedColumns_1 = JSON.parse(data); self.toggableColumns.forEach(function (item) { return item.setToggled(!!~selectedColumns_1.indexOf(item.index)); }); } }, 200); }, toggableHideCheck: toggableHideCheck, // Jay setStickyWidths: function (value) { self.stickyWidths = value; } }; }); //# sourceMappingURL=./store/table.js.map