UNPKG

fastlion-amis

Version:

一种MIS页面生成工具

247 lines (246 loc) 13.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.FieldRenderer = exports.TableCellRenderer = exports.SimpleTableCellRenderer = exports.TableCell = void 0; var tslib_1 = require("tslib"); var react_1 = tslib_1.__importDefault(require("react")); var factory_1 = require("../../factory"); var QuickEdit_1 = tslib_1.__importDefault(require("../QuickEdit")); var Copyable_1 = tslib_1.__importDefault(require("../Copyable")); var PopOver_1 = tslib_1.__importDefault(require("../PopOver")); var mobx_react_1 = require("mobx-react"); var omit = require("lodash/omit"); var tpl_1 = require("../../utils/tpl"); var Badge_1 = require("../../components/Badge"); var utils_1 = require("../../utils/utils"); var helper_1 = require("../../utils/helper"); var TableCell = /** @class */ (function (_super) { tslib_1.__extends(TableCell, _super); function TableCell(props) { var _this = _super.call(this, props) || this; _this.state = { tdVisialbe: false }; _this.tdRef = react_1.default.createRef(); _this.intersection = {}; // 元素可见性观察器 _this.state.tdVisialbe = false; return _this; } // componentDidMount() { // // 自动聚焦观察器 // // 如果需要保持focus状态 - 再元素第一次发生 不可见-> 可见状态时自动聚焦 // if (this.props.style?.position !== 'fixed') // this.intersection.observer = new IntersectionObserver(([entry]) => { // // this.intersection.preIntersectionRatio = this.intersection.curIntersectionRatio || 0 // 默认值适用 // // this.intersection.curIntersectionRatio = entry.intersectionRatio // // 意为出现了部分元素聚焦 并且没有定时器 适用自动聚焦 // console.log(this.tdRef, entry) // if (entry.isIntersecting) { // // 如果需要持续聚焦,只要没有值就取消聚焦-可见状态才适用聚焦 // this.setState({ tdVisialbe: true }) // } else { // this.setState({ tdVisialbe: false }) // } // }) // if (this.tdRef.current) // this.intersection.observer.observe(this.tdRef.current) // } // componentWillUnmount() { // // 用完销毁 // if (this.intersection.observer) this.intersection.observer?.disconnect?.() // } TableCell.prototype.render = function () { var _this = this; var _a, _b; var _c = this.props, cx = _c.classnames, className = _c.className, classNameExpr = _c.classNameExpr, render = _c.render, style = _c.style, Component = _c.wrapperComponent, column = _c.column, value = _c.value, data = _c.data, children = _c.children, align = _c.align, innerClassName = _c.innerClassName, label = _c.label, tabIndex = _c.tabIndex, onKeyUp = _c.onKeyUp, rowSpan = _c.rowSpan, _body = _c.body, tpl = _c.tpl, remark = _c.remark, prefixContent = _c.prefixContent, affix = _c.affix, isHead = _c.isHead, rowIndex = _c.rowIndex, colIndex = _c.colIndex, row = _c.row, showBadge = _c.showBadge, itemBadge = _c.itemBadge, $path = _c.$path, ellipsis = _c.ellipsis, fold = _c.fold, // showContextMenu, name = _c.name, setBorder = _c.setBorder, defaultOpen = _c.defaultOpen, linkUrl = _c.linkUrl, linkId = _c.linkId, quickEdit = _c.quickEdit, tableLayout = _c.tableLayout, tableCtxMenuStore = _c.tableCtxMenuStore, tableId = _c.tableId, // store, rest = tslib_1.__rest(_c, ["classnames", "className", "classNameExpr", "render", "style", "wrapperComponent", "column", "value", "data", "children", "align", "innerClassName", "label", "tabIndex", "onKeyUp", "rowSpan", "body", "tpl", "remark", "prefixContent", "affix", "isHead", "rowIndex", "colIndex", "row", "showBadge", "itemBadge", "$path", "ellipsis", "fold", "name", "setBorder", "defaultOpen", "linkUrl", "linkId", "quickEdit", "tableLayout", "tableCtxMenuStore", "tableId"]); // 宽度兼容取法, var width = this.props.width; var schema = tslib_1.__assign(tslib_1.__assign({}, column), { className: innerClassName, type: (column && column.type) || 'plain' }); // 如果本来就是 type 为 button,不要删除,其他情况下都应该删除。 if (schema.type !== 'button' && schema.type !== 'dropdown-button') { delete schema.label; } // Jay // 对于input-table-dynamic组件的原始数据做判断 var isInputTableDynamic = /(input-table-dynamic)/.test($path); var isOrigin = data.isOrigin && isInputTableDynamic; var domicile = { column: column, data: data, label: label, }; schema.className = ''; var body = children ? children : render('field', tslib_1.__assign(tslib_1.__assign({}, schema), { classNameExpr: '' }), tslib_1.__assign(tslib_1.__assign({ fold: fold }, omit(rest, Object.keys(schema))), { // inputOnly: true, style: {}, value: value, data: data, // Jay // data.isOrigin是针对于input-table-dynamic组件的原始数据不能修改 inputOnly: data.isOrigin ? !isOrigin : true, disabled: isOrigin, className: cx(innerClassName, { 'text-secondary': isOrigin }), domicile: domicile })); //字段分组 if ((_a = column.group) === null || _a === void 0 ? void 0 : _a.length) { body = react_1.default.createElement("div", { className: 'column-cell' }, column.group.map(function (item) { var _a, _b, _c, _d, _e, _f; var ass = (0, factory_1.render)({ type: (_a = item.type) !== null && _a !== void 0 ? _a : '', name: item.name, body: item === null || item === void 0 ? void 0 : item.body }, { data: data }); var showTitle = !!data[(_b = item.name) !== null && _b !== void 0 ? _b : ''] && typeof data[(_c = item.name) !== null && _c !== void 0 ? _c : ''] === ('string' || 'number'); var canJump = (0, utils_1.linkJump)((_d = item.linkId) !== null && _d !== void 0 ? _d : '', data, item.jumpDisabledOn); var textRowStyle = item.textRow ? { overflow: 'hidden', textOverflow: 'ellipsis', display: '-webkit-box', '-webkit-box-orient': 'vertical', 'WebkitLineClamp': item.textRow + '', } : {}; return (react_1.default.createElement("div", { key: item.name, className: "group-field-container ".concat(item.linkUrl && canJump ? 'is-linkUrl' : ''), title: showTitle ? data[(_e = item.name) !== null && _e !== void 0 ? _e : ''] : null, style: tslib_1.__assign({ textAlign: item.align, whiteSpace: item.format === 'autoHeight' ? 'pre-wrap' : undefined }, textRowStyle), onClick: function (e) { if (canJump) { e.stopPropagation(); (0, utils_1.ModleHandleClick)(tslib_1.__assign(tslib_1.__assign({}, _this.props), item), e.target); } } }, (item === null || item === void 0 ? void 0 : item.hideLabel) ? '' : item.label + ':', item.type ? ass : data[(_f = item.name) !== null && _f !== void 0 ? _f : ''])); })); } if (width) { style = tslib_1.__assign(tslib_1.__assign({}, style), { width: (style && style.width) || width }); if (!/%$/.test(String(style.width))) { body = (react_1.default.createElement("div", { className: "".concat(cx('Tpltab'), " ").concat(ellipsis ? 'ellipsis' : '') }, prefixContent, body, affix)); prefixContent = null; affix = null; // delete style.width; } } if ((!width || !column.type) && column.type !== 'operation') { style = tslib_1.__assign(tslib_1.__assign({}, style), { maxWidth: ((0, helper_1.isMobile)() && tableLayout && tableLayout == 'vertical') ? '' : width || 200 }); } else { // 把最大宽度一起设置了 style = tslib_1.__assign(tslib_1.__assign({}, style), { maxWidth: ((0, helper_1.isMobile)() && tableLayout && tableLayout == 'vertical') ? '' : width }); } if (align) { style = tslib_1.__assign(tslib_1.__assign({}, style), { textAlign: ((0, helper_1.isMobile)() && tableLayout && tableLayout == 'vertical') ? "left" : align }); } if (!Component) { return body; } if (isHead) { Component = 'th'; } var canJumpUrl = (0, utils_1.linkJump)(linkId, data, column.jumpDisabledOn); return (react_1.default.createElement(react_1.default.Fragment, null, react_1.default.createElement(Component // ref={this.tdRef} , { "table-name": (_b = this.props.tableName) !== null && _b !== void 0 ? _b : this.props.crudName, "column-name": name, "column-index": colIndex, onContextMenu: function (e) { e.preventDefault(); if (tableCtxMenuStore === null || tableCtxMenuStore === void 0 ? void 0 : tableCtxMenuStore.showContextMenu) { tableCtxMenuStore.showContextMenu(rowIndex, name || column.name, tableId); } else { _this.props.showContextMenu(rowIndex, name || column.name, tableId); } }, rowSpan: rowSpan > 1 ? rowSpan : undefined, style: style, className: cx(className, column.classNameExpr ? (0, tpl_1.filter)(column.classNameExpr, data) : null, setBorder ? 'td-border' : '', linkUrl && canJumpUrl ? 'is-linkUrl' : ''), // onMouseLeave={() => { // setTimeout(() => { (this.props.store as any)?.removeVisitMap?.(`${rowIndex}/${colIndex}`) }, 200) // }} tabIndex: tabIndex, onKeyUp: onKeyUp, // title={!defaultOpen ? null : (data[column.name || ''] || null)} onClick: function (e) { if (canJumpUrl) { e.stopPropagation(); !quickEdit && (0, utils_1.ModleHandleClick)(_this.props, e.target); } } }, showBadge ? (react_1.default.createElement(Badge_1.Badge, { classnames: cx, badge: tslib_1.__assign(tslib_1.__assign({}, itemBadge), { className: cx("Table-badge", itemBadge === null || itemBadge === void 0 ? void 0 : itemBadge.className) }), data: row.data })) : null, prefixContent, body, affix))); }; TableCell.defaultProps = { wrapperComponent: 'td' }; TableCell.propsList = [ 'type', 'label', 'column', 'body', 'tpl', 'rowSpan', 'remark' ]; return TableCell; }(react_1.default.Component)); exports.TableCell = TableCell; var SimpleTableCellRenderer = /** @class */ (function (_super) { tslib_1.__extends(SimpleTableCellRenderer, _super); function SimpleTableCellRenderer() { return _super !== null && _super.apply(this, arguments) || this; } SimpleTableCellRenderer.propsList = TableCell.propsList; SimpleTableCellRenderer = tslib_1.__decorate([ (0, factory_1.Renderer)({ type: 'simple-table-cell', name: 'simple-table-cell' }), (0, mobx_react_1.inject)('tableCtxMenuStore'), mobx_react_1.observer ], SimpleTableCellRenderer); return SimpleTableCellRenderer; }(TableCell)); exports.SimpleTableCellRenderer = SimpleTableCellRenderer; var TableCellRenderer = /** @class */ (function (_super) { tslib_1.__extends(TableCellRenderer, _super); function TableCellRenderer() { return _super !== null && _super.apply(this, arguments) || this; } TableCellRenderer.propsList = tslib_1.__spreadArray([ 'quickEdit', 'quickEditEnabledOn', 'popOver', 'copyable', 'inline' ], TableCell.propsList, true); TableCellRenderer = tslib_1.__decorate([ (0, factory_1.Renderer)({ test: /(^|\/)(table|cross|field-table-horizontal)\/(?:.*\/)?cell$/, name: 'table-cell' }), (0, QuickEdit_1.default)(), (0, PopOver_1.default)({ targetOutter: true }), (0, Copyable_1.default)(), mobx_react_1.observer ], TableCellRenderer); return TableCellRenderer; }(TableCell)); exports.TableCellRenderer = TableCellRenderer; var FieldRenderer = /** @class */ (function (_super) { tslib_1.__extends(FieldRenderer, _super); function FieldRenderer() { return _super !== null && _super.apply(this, arguments) || this; } FieldRenderer.defaultProps = tslib_1.__assign(tslib_1.__assign({}, TableCell.defaultProps), { wrapperComponent: 'div' }); FieldRenderer = tslib_1.__decorate([ (0, factory_1.Renderer)({ type: 'field', name: 'field' }), (0, PopOver_1.default)(), (0, Copyable_1.default)() ], FieldRenderer); return FieldRenderer; }(TableCell)); exports.FieldRenderer = FieldRenderer; //# sourceMappingURL=./renderers/Table/TableCell.js.map