UNPKG

ze-react-component-library

Version:
1,317 lines (1,105 loc) 41.5 kB
import "antd/es/space/style"; import _Space from "antd/es/space"; import "antd/es/drawer/style"; import _Drawer from "antd/es/drawer"; import "antd/es/message/style"; import _message from "antd/es/message"; import "antd/es/button/style"; import _Button from "antd/es/button"; import "antd/es/tooltip/style"; import _Tooltip from "antd/es/tooltip"; import "antd/es/result/style"; import _Result from "antd/es/result"; import "antd/es/popconfirm/style"; import _Popconfirm from "antd/es/popconfirm"; function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } var __assign = this && this.__assign || function () { __assign = Object.assign || function (t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) { if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } } return t; }; return __assign.apply(this, arguments); }; var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __generator = this && this.__generator || function (thisArg, body) { var _ = { label: 0, sent: function sent() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function () { return this; }), g; function verb(n) { return function (v) { return step([n, v]); }; } function step(op) { if (f) throw new TypeError("Generator is already executing."); while (_) { try { if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; if (y = 0, t) op = [op[0] & 2, t.value]; switch (op[0]) { case 0: case 1: t = op; break; case 4: _.label++; return { value: op[1], done: false }; case 5: _.label++; y = op[1]; op = [0]; continue; case 7: op = _.ops.pop(); _.trys.pop(); continue; default: if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) { _.label = op[1]; break; } if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } if (t[2]) _.ops.pop(); _.trys.pop(); continue; } op = body.call(thisArg, _); } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } } if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; var __rest = this && this.__rest || function (s, e) { var t = {}; for (var p in s) { if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p]; } if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]]; } return t; }; var __spreadArray = this && this.__spreadArray || function (to, from) { for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) { to[j] = from[i]; } return to; }; import React, { useContext, useState, useRef, useEffect, useMemo } from "react"; import _ from "underscore"; import ProTable from "@ant-design/pro-table"; import { useRequest, useSize } from "@umijs/hooks"; var useMobileDetect = require("use-mobile-detect-hook"); import ProProvider from "@ant-design/pro-provider"; import { DeleteOutlined, DownloadOutlined, PlusOutlined, EditOutlined } from "@ant-design/icons"; import { normaliseGroupby, createData, getNameProperty, removeDataByID, updateDataByID, commonRequest, findPropByName, isSimpleQuery, removeData, getIDProperty } from "zeroetp-api-sdk"; import { requestLogicform, request as requestAPI } from "../../request"; import Entity from "../Entity"; import { customValueTypes, getFormatter, getColumnPublicProps, exportTableToExcel, getHierarchyListDrillDownLogicform, getHierarchyDrillDownLevel, logicformValueToColumnFilter } from "../../util"; import ZESchemaForm from "../../ZESchemaForm"; import "./Table.less"; import { getColumnFilterProps } from "../PropertyFilter/FilterComponents"; import { canUseCrossTable, crossResult } from "../../crossTableGen"; import { transposeResult } from "./transposeGen"; import { useTableParams } from "./useTableParams"; import TableSummary from "../TableSummary"; import useLocale from "../../hooks/useLocale"; import { drilldownLogicformInSDK } from "../../ZECard/util"; import { DraggableContainer, DraggableBodyRow, DragHandle, SortContext } from "../DragSortEditableTable"; import useSort from "../../hooks/useSort"; var mapColumnItem = function mapColumnItem(logicform, predItem, customColumn, properties, config) { var _a, _b; var property = properties.find(function (p) { return p.name === predItem; }); // 前端的predChain,要获取正确的property // 后端不会出现有.的情况。 if (predItem.indexOf(".") > 0) { var chain = predItem.split("."); var currentSchema = { properties: properties }; var _loop_1 = function _loop_1(chainItem) { property = currentSchema.properties.find(function (p) { return p.name === chainItem; }); if (property) { currentSchema = property.schema; if (!currentSchema) return "break"; } }; for (var _i = 0, chain_1 = chain; _i < chain_1.length; _i++) { var chainItem = chain_1[_i]; var state_1 = _loop_1(chainItem); if (state_1 === "break") break; } if (property) { // 记得要改个名字 property = __assign(__assign({}, property), { name: predItem }); } } if (!property) { // fake property property = { name: predItem, type: "string", primal_type: "string", constraints: {}, is_fake: true }; } var _c = getColumnPublicProps(property), valueEnum = _c.valueEnum, valueType = _c.valueType, fieldProps = _c.fieldProps; var additionalProps = {}; // Filters if (!property.is_fake && config.showFilter) { var filterProps_1 = getColumnFilterProps(property, customColumn, valueEnum); if (fieldProps) additionalProps = __assign(__assign({}, additionalProps), { filterIcon: filterProps_1.filterIcon, filterDropdown: filterProps_1.filterDropdown ? function (args) { return filterProps_1.filterDropdown(__assign(__assign({}, args), { t: config.t })); } : undefined }); } // Alignment if (property.primal_type === "number" || property.primal_type === "boolean") { additionalProps.align = "right"; } // Sorter // 去掉数字的sorter,改成filter // if (showSorter && property.primal_type === "number") { // additionalProps.sorter = true; // } var sortOrder = (_a = logicform.sort) === null || _a === void 0 ? void 0 : _a[predItem]; switch (sortOrder) { case 1: sortOrder = "ascend"; break; case -1: sortOrder = "descend"; break; default: break; } var filters = {}; Object.keys((logicform === null || logicform === void 0 ? void 0 : logicform.query) || {}).forEach(function (k) { var _a; var p = properties.find(function (d) { return d.name === k; }); var nameProp = p && p.type === "object" ? getNameProperty(p.schema) : undefined; filters[k] = logicformValueToColumnFilter((_a = logicform === null || logicform === void 0 ? void 0 : logicform.query) === null || _a === void 0 ? void 0 : _a[k], p, nameProp); }); var filterKey = predItem; var filteredValue = filters[filterKey]; filteredValue = filteredValue ? filteredValue instanceof Array ? filteredValue : [filteredValue] : []; var width = (customColumn === null || customColumn === void 0 ? void 0 : customColumn.width) || config.defaultColWidth; var defaultColumnType = __assign(__assign({ title: property.name, filteredValue: filteredValue, filtered: (filteredValue === null || filteredValue === void 0 ? void 0 : filteredValue.length) > 0, sortOrder: sortOrder, dataIndex: property.name.split("."), ellipsis: ((_b = property.ui) === null || _b === void 0 ? void 0 : _b.ellipsis) || property.primal_type === "string" && !property.constraints.enum, // 前端默认的ellipsis逻辑 valueType: valueType, filters: valueEnum !== undefined && config.showFilter, onFilter: false, valueEnum: valueEnum, fieldProps: fieldProps }, additionalProps), { width: width }); // unit if (config.showUnit && property.unit) { var unit = property.unit; var formatter = getFormatter(property); if (formatter) { unit = "" + formatter.prefix + unit + formatter.postfix; } defaultColumnType.title = defaultColumnType.title + "(" + unit + ")"; } // 以下是用来给createMode=list用的 // formItemProps if (!defaultColumnType.formItemProps) defaultColumnType.formItemProps = {}; if (!defaultColumnType.formItemProps.rules) defaultColumnType.formItemProps.rules = []; if (property.constraints.required && !property.udf) { // 这个rules会在EditableProTable里面起作用 defaultColumnType.formItemProps.rules.push({ required: true, message: "此项为必填项" }); } if (property.name.indexOf(".") > 0 || property.udf) { // 在creation模式里面,这样的情况不可能需要edit defaultColumnType.editable = false; } var formattedColumn = __assign(__assign({}, defaultColumnType), customColumn || {}); // object类型会走自定义的render,里面有ellipsis逻辑,需要把Column的ellipsis关掉,否则会嵌套两层受到影响 if (property.primal_type === "object") { formattedColumn.ellipsis = false; var colFieldProps = formattedColumn.fieldProps || {}; // 给object自定义的render提供width formattedColumn.fieldProps = __assign(__assign({}, colFieldProps), { width: width }); } return formattedColumn; }; var renderDeleteBtn = function renderDeleteBtn(onConfirm) { return /*#__PURE__*/React.createElement(_Popconfirm, { title: "\u786E\u5B9A\u5220\u9664\uFF1F\u5220\u9664\u540E\u5C06\u4E0D\u53EF\u6062\u590D\u3002", key: "delete", onConfirm: onConfirm, okText: "\u786E\u5B9A", cancelText: "\u53D6\u6D88" }, /*#__PURE__*/React.createElement("a", { datatype: "danger" }, "\u5220\u9664")); }; var Table = function Table(_a) { var _b; var _logicform = _a.logicform, // 默认为400,auto时自适应,在dashboard里时即为auto _c = _a.height, // 默认为400,auto时自适应,在dashboard里时即为auto defaultHeight = _c === void 0 ? 400 : _c, setLogicform = _a.setLogicform, _d = _a.options, _options = _d === void 0 ? false : _d, preds = _a.preds, search = _a.search, size = _a.size, _e = _a.rowKey, rowKey = _e === void 0 ? "_id" : _e, _f = _a.customColumns, customColumns = _f === void 0 ? {} : _f, className = _a.className, scroll = _a.scroll, exportToExcel = _a.exportToExcel, xlsx = _a.xlsx, _g = _a.refLFs, refLFs = _g === void 0 ? [] : _g, creationMode = _a.creationMode, creationColumns = _a.creationColumns, _h = _a.canRemoveData, canRemoveData = _h === void 0 ? false : _h, _j = _a.canEditData, canEditData = _j === void 0 ? false : _j, _k = _a.defaultColWidth, defaultColWidthOfProps = _k === void 0 ? 200 : _k, horizontalColumns = _a.horizontalColumns, transpose = _a.transpose, _l = _a.showUnit, showUnit = _l === void 0 ? true : _l, _m = _a.showSorter, showSorter = _m === void 0 ? true : _m, _o = _a.showFilter, showFilter = _o === void 0 ? true : _o, _p = _a.showSummary, showSummary = _p === void 0 ? true : _p, _expandFirstCol = _a.expandFirstCol, expandFirstColNextLevel = _a.expandFirstColNextLevel, ret = _a.result, reload = _a.reload, _showViewBtn = _a.showViewBtn, formatExpandResult = _a.formatExpandResult, entityTooltipCardProps = _a.entityTooltipCardProps, _q = _a.additionalToolBarRenders, additionalToolBarRenders = _q === void 0 ? [] : _q, _r = _a.additionalColumns, additionalColumns = _r === void 0 ? [] : _r, isHierarchyList = _a.isHierarchyList, simplyValue = _a.simplyValue, initialValues = _a.initialValues, title = _a.title, propertyConfig = _a.propertyConfig, dragSortable = _a.dragSortable, restProps = __rest(_a, ["logicform", "height", "setLogicform", "options", "preds", "search", "size", "rowKey", "customColumns", "className", "scroll", "exportToExcel", "xlsx", "refLFs", "creationMode", "creationColumns", "canRemoveData", "canEditData", "defaultColWidth", "horizontalColumns", "transpose", "showUnit", "showSorter", "showFilter", "showSummary", "expandFirstCol", "expandFirstColNextLevel", "result", "reload", "showViewBtn", "formatExpandResult", "entityTooltipCardProps", "additionalToolBarRenders", "additionalColumns", "isHierarchyList", "simplyValue", "initialValues", "title", "propertyConfig", "dragSortable"]); var expandFirstCol = _expandFirstCol || isHierarchyList; var isMobile = (_b = useMobileDetect()) === null || _b === void 0 ? void 0 : _b.isMobile(); var _s = useState(false), expandLoading = _s[0], setExpandLoading = _s[1]; var _t = useState(false), editable = _t[0], setEditable = _t[1]; var _u = useState([]), editableKeys = _u[0], setEditableKeys = _u[1]; var _v = useState([]), dataSource = _v[0], setDataSource = _v[1]; var rootDivRef = useRef(); var tableRect = useSize(rootDivRef.current)[0]; var formRef = useRef(); var height = defaultHeight === "auto" ? tableRect.height : defaultHeight; var t = useLocale().t; if (ret === null || ret === void 0 ? void 0 : ret.error) return /*#__PURE__*/React.createElement(_Result, { status: "error", title: ret.error, subTitle: "\u8BF7\u8054\u7CFB\u670D\u52A1\u63D0\u4F9B\u5546\u83B7\u53D6\u6280\u672F\u652F\u6301" }); var _w = useTableParams({ logicform: _logicform, setLogicform: setLogicform, data: ret }), tableParams = _w.tableParams, onTableChange = _w.onTableChange; var paginationParams = (tableParams || [])[0]; var logicform = JSON.parse(JSON.stringify(_logicform)); if (ret === null || ret === void 0 ? void 0 : ret.logicform) { logicform.sort = ret.logicform.sort; logicform.limit = ret.logicform.limit; } // 关闭滚动时,不应该给column设置默认宽度 var defaultColWidth = scroll === null && !isMobile ? undefined : defaultColWidthOfProps; var values = useContext(ProProvider); // 用来自定义ValueType var _x = useState(undefined), selectedRecord = _x[0], setSelectedRecord = _x[1]; var _y = useState(false), isSubmitting = _y[0], setIsSubmitting = _y[1]; var _z = useState(false), creationFormVisible = _z[0], setCreationFormVisible = _z[1]; var _0 = useState({}), rowChildrenMap = _0[0], setRowChildrenMap = _0[1]; var _1 = useRequest(function () { return Promise.all(refLFs.map(function (r) { return requestLogicform(r.logicform); })); }).data, refResults = _1 === void 0 ? [] : _1; var result = useMemo(function () { var result; if (ret) { result = __assign({}, ret); if (refResults.length > 0) { var arr_1 = __spreadArray([], ret.result); refLFs.forEach(function (r, index) { arr_1 = r.merge(arr_1, refResults[index].result); }); result.result = arr_1; } if (transpose) { result = transposeResult(result, transpose, horizontalColumns); } else if (canUseCrossTable(logicform)) { result = crossResult(result, horizontalColumns); } } return result; }, [ret, JSON.stringify(refResults), transpose]); var options = useMemo(function () { var o = typeof _options === "boolean" ? {} : _options; var defaultOptions = __assign(__assign({ setting: false, density: false }, o), { reload: o.reload ? reload : false }); if (_options === false) { return false; } return defaultOptions; }, [_options]); // 判断要展示的properties var predsToShow = preds; if (!predsToShow) { predsToShow = ((result === null || result === void 0 ? void 0 : result.columnProperties) || []). // @ts-ignore filter(function (property) { var _a, _b; return !((_a = property.ui) === null || _a === void 0 ? void 0 : _a.show_in_detail_only) && !((_b = property.ui) === null || _b === void 0 ? void 0 : _b.hide); }).map(function (property) { return property.name; }); } var properties = (result === null || result === void 0 ? void 0 : result.columnProperties) || []; var columns = properties.length > 0 ? predsToShow.map(function (predItem) { if (_typeof(predItem) === "object" && "title" in predItem) { return { title: predItem.title, children: predItem.children.map(function (pred) { return mapColumnItem(ret.logicform, pred, customColumns[pred], properties, { showUnit: showUnit, showSorter: showSorter, showFilter: showFilter, defaultColWidth: defaultColWidth, t: t }); }) }; } return mapColumnItem(ret.logicform, predItem, customColumns[predItem], properties, { showUnit: showUnit, showSorter: showSorter, showFilter: showFilter, defaultColWidth: defaultColWidth, t: t }); }) : []; if (dragSortable) { columns = __spreadArray([{ title: "排序", dataIndex: "sort", width: 60, editable: false, className: "drag-visible", fixed: true, render: function render() { return /*#__PURE__*/React.createElement(DragHandle, null); } }], columns); } // Groupby的id columns需要fixed if (logicform.groupby && columns.length > 0) { var groupbyCount = Array.isArray(logicform.groupby) ? logicform.groupby.length : 1; for (var i = 0; i < groupbyCount; i++) { columns[i].fixed = "left"; // crosstable,只要第一个就行了 if (canUseCrossTable(logicform)) { break; } } } // Pagination,仅simple query支持 var pagination = false; if (isSimpleQuery(logicform)) { if (logicform.limit > 0) { pagination = { pageSize: logicform.limit || 20, total: result === null || result === void 0 ? void 0 : result.total }; } if (paginationParams && pagination) { pagination = __assign(__assign({}, pagination), paginationParams); } } if (creationMode === "list" && pagination) { pagination.pageSize = dataSource.length; } // total数量小于limit时,不展示分页 if (ret && typeof ret.logicform.limit === "number" && ret.total <= ret.logicform.limit) { pagination = false; } // Scroll var calcWidth = function calcWidth(col) { if (col.children) { return col.children.reduce(function (acc, c) { return acc + calcWidth(c); }, 0); } return "width" in col ? col.width : defaultColWidth; }; var x = columns.reduce(function (acc, c) { return acc + calcWidth(c); }, 0); var IDProp = result === null || result === void 0 ? void 0 : result.columnProperties.find(function (p) { return p.type === "ID"; }); var _toolBarRender = additionalToolBarRenders.map(function (r) { return r(result); }); // Export var exportFileName = title || "数据导出"; if (exportToExcel) { if (typeof exportToExcel === "string") { exportFileName = exportToExcel; } _toolBarRender.push( /*#__PURE__*/React.createElement(_Tooltip, { title: "\u5BFC\u51FAExcel" }, /*#__PURE__*/React.createElement(_Button, { type: "text", icon: /*#__PURE__*/React.createElement(DownloadOutlined, null), onClick: function onClick() { var _a, _b, _c, _d; if (isSimpleQuery(result.logicform)) { var lf = JSON.parse(JSON.stringify(result.logicform)); if (isHierarchyList && IDProp.name in lf.query && _typeof(lf.query[IDProp.name]) === "object" && lf.query[IDProp.name].$level) { delete lf.query[IDProp.name].$level; if (Object.keys(lf.query[IDProp.name]).length === 0) { delete lf.query[IDProp.name]; } } var preds_2 = []; for (var _i = 0, _e = result.columnProperties; _i < _e.length; _i++) { var property = _e[_i]; preds_2.push(property.name); } // 如果是object类型,加一个property name列 var populatedPreds = []; for (var _f = 0, preds_1 = preds_2; _f < preds_1.length; _f++) { var propertyName = preds_1[_f]; if (!propertyName) continue; // preds里面会有undefine的存在,因为show为false之后,order会跳跃 populatedPreds.push(propertyName); var property = findPropByName(result.schema, propertyName); if (property.schema && !property.isArray) { var nameProp = getNameProperty(property.schema); if (nameProp && nameProp.type !== "ID") { // 如果ID和is_name为同一个,那么没必要加 populatedPreds.push(property.name + "_" + nameProp.name); } } } // modality -> export if ((_d = (_c = (_b = (_a = result.schema) === null || _a === void 0 ? void 0 : _a.modality) === null || _b === void 0 ? void 0 : _b.list) === null || _c === void 0 ? void 0 : _c.config) === null || _d === void 0 ? void 0 : _d.additionalPreds) { populatedPreds = __spreadArray(__spreadArray([], populatedPreds), result.schema.modality.list.config.additionalPreds); } // 使用api导出 commonRequest("/dataexports", { method: "POST", data: __assign(__assign({}, lf), { preds: populatedPreds, limit: -1 }) }).then(function () { return _message.info("导出申请已提交,请在个人中心里面下载"); }).catch(function (e) { _message.error("导出申请发生错误,请稍后再试"); // console.log(e); }); } else { rootDivRef.current && exportTableToExcel(rootDivRef.current, exportFileName, xlsx); } } }))); } // 编辑 if (_typeof(options) === "object" && options.editable) { _toolBarRender.push( /*#__PURE__*/React.createElement(_Tooltip, { key: "edit", title: editable ? "取消编辑" : "编辑" }, /*#__PURE__*/React.createElement(EditOutlined, { onClick: function onClick() { var _a; setEditable(!editable); if (!editable) { setEditableKeys(((_a = tableProps === null || tableProps === void 0 ? void 0 : tableProps.dataSource) === null || _a === void 0 ? void 0 : _a.map(function (m) { return m[typeof rowKey === "string" ? rowKey : rowKey(m)]; })) || []); } else { setEditableKeys([]); } } }))); } if (creationMode === "form") { _toolBarRender.push( /*#__PURE__*/React.createElement(_Tooltip, { title: "\u6DFB\u52A0\u6570\u636E", key: "add" }, /*#__PURE__*/React.createElement(_Button, { type: "text", icon: /*#__PURE__*/React.createElement(PlusOutlined, null), onClick: function onClick() { setSelectedRecord(undefined); setCreationFormVisible(true); } }))); if (canRemoveData) { _toolBarRender.push( /*#__PURE__*/React.createElement(_Tooltip, { title: "\u5220\u9664\u6570\u636E", key: "remove" }, /*#__PURE__*/React.createElement(_Popconfirm, { title: "\u5220\u9664\u64CD\u4F5C\u4E0D\u53EF\u64A4\u9500\u3002\u662F\u5426\u786E\u5B9A\u5220\u9664\uFF1F", onConfirm: function onConfirm() { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/ , requestAPI(removeData(logicform.schema, logicform.query))]; case 1: _a.sent(); reload === null || reload === void 0 ? void 0 : reload(); return [2 /*return*/ ]; } }); }); } }, /*#__PURE__*/React.createElement(_Button, { type: "text", icon: /*#__PURE__*/React.createElement(DeleteOutlined, null) })))); } } var scrollY; if (typeof height === "number") { // 不同size的表头高度、分页高度不一致 var thHeight = 47; var pgHeight = 40; switch (size) { case "large": thHeight = 55; pgHeight = 48; break; case "small": thHeight = 39; break; default: break; } // 减去表头高 scrollY = height - thHeight; if (_toolBarRender.length > 0) { // 减去toolBar的高度 scrollY = scrollY - 32; } if (pagination !== false) { // 减去分页的高度 scrollY = scrollY - pgHeight; } } var onExpand = function onExpand(expanded, record) { return __awaiter(void 0, void 0, void 0, function () { var normedLF, theLogicForm, parentGroupByName, res, nameKeys_1, nameProp, idProp, level_1, nextLevelCanExpand_1; var _a; var _b, _c; return __generator(this, function (_d) { switch (_d.label) { case 0: if (!expanded || !record.children || record._id in rowChildrenMap) { return [2 /*return*/ ]; } if (expandLoading) { return [2 /*return*/ ]; } normedLF = JSON.parse(JSON.stringify(logicform)); normaliseGroupby(normedLF); if (isHierarchyList) { theLogicForm = getHierarchyListDrillDownLogicform(logicform, result, record); parentGroupByName = record === null || record === void 0 ? void 0 : record._id; } else { parentGroupByName = normedLF.groupby[0]._id; if (normedLF.groupby[0].level) { parentGroupByName = parentGroupByName + "(" + normedLF.groupby[0].level + ")"; } theLogicForm = drilldownLogicformInSDK(logicform, result.schema, record, expandFirstColNextLevel); } setExpandLoading(true); return [4 /*yield*/ , requestLogicform(theLogicForm)]; case 1: res = _d.sent(); if (res) { if (formatExpandResult) { formatExpandResult(res); } nameKeys_1 = [res.columnProperties[0].name]; if (res.columnProperties[0].schema) { nameProp = getNameProperty(res.columnProperties[0].schema); nameKeys_1.push(nameProp.name); } if (canUseCrossTable(logicform)) { res = crossResult(res, horizontalColumns, record); } idProp = getIDProperty(res.schema); if (idProp && ((_c = (_b = theLogicForm === null || theLogicForm === void 0 ? void 0 : theLogicForm.query) === null || _b === void 0 ? void 0 : _b[idProp.name]) === null || _c === void 0 ? void 0 : _c["$level"])) { level_1 = theLogicForm.query[idProp.name]["$level"]; } nextLevelCanExpand_1 = isHierarchyList && level_1 ? getHierarchyDrillDownLevel(level_1, result) !== undefined : false; setRowChildrenMap(__assign(__assign({}, rowChildrenMap), (_a = {}, _a[record._id] = res.result.map(function (d) { var _a; return __assign(__assign({}, d), (_a = { children: nextLevelCanExpand_1 ? [] : undefined }, _a[parentGroupByName] = _.get(d, nameKeys_1), _a.$level = level_1, _a)); }), _a))); } setExpandLoading(false); return [2 /*return*/ ]; } }); }); }; var _2 = useSort({ data: dataSource, reload: reload, schema: result === null || result === void 0 ? void 0 : result.schema }), onSortEnd = _2.onSortEnd, sort = _2.sort, onSortStart = _2.onSortStart, sortedData = _2.sortedData; // Creation var deleteRecord = function deleteRecord(record) { var newLine = ("" + (record === null || record === void 0 ? void 0 : record._id)).startsWith("@"); if (newLine) { setDataSource(function (pre) { return pre.filter(function (d) { return d._id !== (record === null || record === void 0 ? void 0 : record._id); }); }); return; } if (logicform.schema) { setIsSubmitting(true); requestAPI(removeDataByID(logicform.schema, record._id)).then(function () { reload === null || reload === void 0 ? void 0 : reload(); }).finally(function () { setIsSubmitting(false); }); } }; if (pagination) { pagination.itemRender = function (page, type, ele) { return /*#__PURE__*/React.createElement("span", { onClick: function onClick(e) { if (page > 1000) { _message.error(t("最多支持翻1000页")); e.preventDefault(); e.stopPropagation(); } } }, ele); }; } var tableProps = __assign(__assign({ cardProps: { bodyStyle: { padding: 0 } }, loading: isSubmitting || expandLoading }, restProps), { columns: columns, rowKey: rowKey, search: search === undefined ? false : search, tableClassName: exportFileName, dataSource: dataSource, size: size, scroll: // 手机模式下默认开启scroll scroll !== undefined && !isMobile ? __assign(__assign({}, scroll), { y: (scroll === null || scroll === void 0 ? void 0 : scroll.y) || scrollY }) : { x: x, y: scrollY }, options: options, pagination: pagination, toolBarRender: function toolBarRender() { return _toolBarRender; }, onChange: onTableChange, expandable: expandFirstCol ? { onExpand: onExpand, indentSize: 0 } : undefined, editable: { type: "multiple", editableKeys: editableKeys, onChange: function onChange(keys) { setEditableKeys(keys); }, onSave: function onSave(key, record) { return __awaiter(void 0, void 0, void 0, function () { var newLine; return __generator(this, function (_a) { newLine = ("" + key).startsWith("@"); setIsSubmitting(true); if (newLine) { // 用logicform.query里面的数据来设置默认的一些属性 // TODO: 目前只接受非chain的query requestAPI(createData(logicform.schema, __assign(__assign({}, logicform.query), record))).then(function () { reload === null || reload === void 0 ? void 0 : reload(); }).finally(function () { setIsSubmitting(false); }); } else { requestAPI(updateDataByID(logicform.schema, "" + key, record)).then(function () { reload === null || reload === void 0 ? void 0 : reload(); }).finally(function () { setIsSubmitting(false); }); } return [2 /*return*/ ]; }); }); }, actionRender: function actionRender(row, config, defaultDom) { var id = config.recordKey; var newLine = ("" + id).startsWith("@"); return [defaultDom.save, renderDeleteBtn(function () { deleteRecord(row); }), /*#__PURE__*/React.createElement("a", { key: "cancel", onClick: function onClick() { if (newLine) { deleteRecord(row); } else { setEditableKeys(function (pre) { return pre.filter(function (d) { return d !== id; }); }); } } }, "\u53D6\u6D88")]; } } }); /** * 操作列 */ var showViewBtn = IDProp && _showViewBtn && !(ret === null || ret === void 0 ? void 0 : ret.logicform.groupby); var canEdit = IDProp && canEditData && (ret === null || ret === void 0 ? void 0 : ret.schema.editable) !== false; var hasOperationColumn = showViewBtn || canEdit; if (hasOperationColumn) { columns.push({ title: "操作", width: 150, key: "_operation", valueType: "option", render: function render(_dom, record, _, action) { var operationColumns = []; // 1. 查看 if (showViewBtn) { var nameProp = getNameProperty(ret.schema); var idProp = getIDProperty(ret.schema); var entityProps = { property: { schema: ret.schema, ref: ret.schema._id, name: ret.schema.name, type: "object", primal_type: "object" }, entityNameProperty: nameProp, entityIDProperty: idProp, entityTooltipCardProps: entityTooltipCardProps, entity: record }; operationColumns.push( /*#__PURE__*/React.createElement(Entity, __assign({ key: "detail" }, entityProps), "\u67E5\u770B")); } if (canEdit) { // 2. 编辑 operationColumns.push( /*#__PURE__*/React.createElement("a", { key: "edit", onClick: function onClick(e) { e.preventDefault(); setSelectedRecord(record); setCreationFormVisible(true); } }, "\u7F16\u8F91")); // 3. 删除 operationColumns.push(renderDeleteBtn(function () { deleteRecord(record); })); } return operationColumns; } }); } // 对transpose的columns再处理一下,去掉搜索之类的 if (transpose) { tableProps.columns.forEach(function (col) { delete col.filterDropdown; delete col.filterIcon; delete col.sorter; }); } // Additional Columns tableProps.columns = __spreadArray(__spreadArray([], tableProps.columns), additionalColumns); useEffect(function () { var list = (result === null || result === void 0 ? void 0 : result.result) || []; if (!expandFirstCol) { setDataSource(list); } else { var loopChildren_1 = function loopChildren_1(arr, index) { return arr.map(function (d) { var children = rowChildrenMap[d._id] || d.children; if (children) { return __assign(__assign({}, d), { children: loopChildren_1(children, index + 1) }); } if (d._id && d._id.startsWith("__")) { // __开头的是自己增加的统计行,例如total return d; } return __assign(__assign({}, d), { children: index === 0 ? [] : undefined }); }); }; var newList = loopChildren_1(list, 0); setDataSource(newList); } }, [result, expandFirstCol, rowChildrenMap]); return /*#__PURE__*/React.createElement(React.Fragment, null, showSummary && /*#__PURE__*/React.createElement(TableSummary, { logicform: logicform, schema: result === null || result === void 0 ? void 0 : result.schema }), /*#__PURE__*/React.createElement("div", { "data-testid": "ZETable", className: ["ze-table", className, sort ? 'sorting' : ''].filter(function (f) { return f; }).join(" "), ref: rootDivRef, style: { flex: 1, minHeight: 0 } }, /*#__PURE__*/React.createElement(ProProvider.Provider, { value: __assign(__assign({}, values), { valueTypeMap: result ? customValueTypes(__assign(__assign({}, result.schema), { properties: result.columnProperties }), entityTooltipCardProps) : {} }) }, /*#__PURE__*/React.createElement(SortContext.Provider, { value: { datasource: sortedData, onSortEnd: onSortEnd, onSortStart: onSortStart } }, /*#__PURE__*/React.createElement(ProTable, __assign({}, tableProps, { dataSource: sortedData, components: dragSortable ? { body: { wrapper: DraggableContainer, row: DraggableBodyRow } } : undefined, key: JSON.stringify({ logicform: logicform, editable: editable }) }))), creationMode === "list" && /*#__PURE__*/React.createElement(_Button, { className: "ze-table-list-creation", type: "dashed", onClick: function onClick() { var id = "@" + new Date().valueOf(); setDataSource(function (pre) { return __spreadArray(__spreadArray([], pre), [{ _id: id }]); }); setEditableKeys(function (pre) { return __spreadArray(__spreadArray([], pre), [id]); }); } }, /*#__PURE__*/React.createElement(PlusOutlined, null), " \u6DFB\u52A0\u4E00\u884C\u6570\u636E"), /*#__PURE__*/React.createElement(_Drawer, { destroyOnClose: true, open: creationFormVisible, maskClosable: false, width: 500, onClose: function onClose() { return setCreationFormVisible(false); }, footer: /*#__PURE__*/React.createElement("div", { style: { display: "flex", flexDirection: "row-reverse" } }, /*#__PURE__*/React.createElement(_Space, null, /*#__PURE__*/React.createElement(_Button, { onClick: function onClick() { var _a; (_a = formRef.current) === null || _a === void 0 ? void 0 : _a.resetFields(); } }, "\u91CD\u7F6E"), /*#__PURE__*/React.createElement(_Button, { loading: isSubmitting, type: "primary", onClick: function onClick() { var _a; (_a = formRef.current) === null || _a === void 0 ? void 0 : _a.submit(); } }, "\u63D0\u4EA4"))) }, /*#__PURE__*/React.createElement(ZESchemaForm, { formRef: formRef, propertyConfig: propertyConfig, schemaID: logicform.schema, columns: creationColumns, initialValues: selectedRecord || initialValues, submitter: false, simplyValue: simplyValue, onFinish: function onFinish(values) { return __awaiter(void 0, void 0, void 0, function () { var promise; return __generator(this, function (_a) { setIsSubmitting(true); if (!selectedRecord) { promise = requestAPI(createData(logicform.schema, values)); } else { promise = requestAPI(updateDataByID(logicform.schema, selectedRecord._id, values)); } promise.then(function () { setCreationFormVisible(false); reload === null || reload === void 0 ? void 0 : reload(); }).finally(function () { setIsSubmitting(false); }); return [2 /*return*/ ]; }); }); } }))))); }; export default Table;