ze-react-component-library
Version:
ZeroETP React Component Library
1,317 lines (1,105 loc) • 41.5 kB
JavaScript
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;