UNPKG

fastlion-amis

Version:

一种MIS页面生成工具

151 lines (150 loc) 12 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.fakeQuickEdit = exports.SimpleSpanType = void 0; var tslib_1 = require("tslib"); var react_1 = tslib_1.__importStar(require("react")); var antd_1 = require("antd"); var components_1 = require("../../../components"); var lodash_1 = require("lodash"); var tpl_1 = require("../../../utils/tpl"); var sub_1 = require("../../../utils/sub"); var icons_1 = require("../../../components/icons"); var setting_1 = require("../../../utils/setting"); var Switch_1 = (0, tslib_1.__importDefault)(require("../../Form/Switch")); var InputDate_1 = (0, tslib_1.__importDefault)(require("../../Form/InputDate")); var InputText_1 = (0, tslib_1.__importDefault)(require("../../Form/InputText")); var InputNumber_1 = (0, tslib_1.__importDefault)(require("../../Form/InputNumber")); var locale_1 = require("../../../locale"); var helper_1 = require("../../../utils/helper"); var SimpleSpanType; (function (SimpleSpanType) { SimpleSpanType["Switch"] = "switch"; SimpleSpanType["InputDate"] = "input-date"; SimpleSpanType["InputDateTime"] = "input-datetime"; SimpleSpanType["Mapping"] = "mapping"; SimpleSpanType["InputText"] = "input-text"; SimpleSpanType["InputNumber"] = "input-number"; SimpleSpanType["LionFormula"] = "lion-formula"; SimpleSpanType["LionUpload"] = "lion-upload"; })(SimpleSpanType = exports.SimpleSpanType || (exports.SimpleSpanType = {})); var ClassCache = {}; var createClass = function (classNames, classFn) { var key = classNames.join(' '); return ClassCache[key] || (ClassCache[key] = classFn.apply(void 0, classNames)); }; exports.fakeQuickEdit = [ SimpleSpanType.Switch, SimpleSpanType.InputText, SimpleSpanType.InputNumber, SimpleSpanType.InputDateTime, SimpleSpanType.InputDate ]; var SimpleSpan = function (_a) { var _b, _c; var value = _a.value, column = _a.column, item = _a.item, render = _a.render, cx = _a.cx, multiple = _a.multiple, _d = _a.tableId, tableId = _d === void 0 ? '' : _d, _e = _a.itemIndex, itemIndex = _e === void 0 ? 0 : _e, _f = _a.ns, ns = _f === void 0 ? '' : _f, _g = _a.classPrefix, classPrefix = _g === void 0 ? '' : _g, _h = _a.env, env = _h === void 0 ? {} : _h, _j = _a.primaryField, primaryField = _j === void 0 ? '' : _j, _k = _a.prefixContent, prefixContent = _k === void 0 ? null : _k, _l = _a.className, className = _l === void 0 ? '' : _l; var pristine = column.pristine; var prefix = pristine.prefix, suffix = pristine.suffix, kilobitSeparator = pristine.kilobitSeparator, precision = pristine.precision, _m = pristine.showUppercase, showUppercase = _m === void 0 ? 0 : _m; var simpleTextRef = (0, react_1.useRef)(null); var _o = (0, react_1.useState)(false), overFlowVisible = _o[0], setOverFlowVisible = _o[1]; var baseParam = { classnames: cx, value: value, classPrefix: ns || 'cxd-' }; var editCellParam = (0, tslib_1.__assign)((0, tslib_1.__assign)((0, tslib_1.__assign)((0, tslib_1.__assign)({}, item), pristine), pristine.quickEdit), baseParam); var disabled = pristine.disabledOn && (0, tpl_1.evalExpression)(pristine.disabledOn, item.data); var canEdit = !disabled && (!pristine.quickEditEnabledOn || (0, tpl_1.evalExpression)(pristine.quickEditEnabledOn, item.data)); var _p = (0, react_1.useState)(false), isOverflowing = _p[0], setIsOverFlowing = _p[1]; (0, react_1.useEffect)(function () { // 渲染10次后,计算是否溢出 // let renderCount = 10 // let renderFnId: number // 增加一个定时器 刚开始先不计算,scrollWidth 与 clientWidth 会引起页面重绘,导致性能问题。刚开始几帧不计算, if (simpleTextRef.current) { var renderFn = function () { // renderFnId = requestAnimationFrame(() => { // if (renderCount) { // renderCount-- // renderFn() // } else if (simpleTextRef.current) { if (simpleTextRef.current.scrollWidth > simpleTextRef.current.clientWidth) { setIsOverFlowing(true); } } // }) }; renderFn(); } return function () { // cancelAnimationFrame(renderFnId) }; }, [simpleTextRef.current, value]); if (pristine.quickEdit && canEdit && exports.fakeQuickEdit.includes(editCellParam.type)) { var commonProps = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, editCellParam), { className: createClass(['Form-control'], cx), translate: (0, locale_1.makeTranslator)() }); switch (editCellParam.type) { case SimpleSpanType.Switch: return (react_1.default.createElement("div", { className: createClass(['Form', 'Form--normal', 'Form--quickEdit'], cx) }, react_1.default.createElement("div", { className: createClass(['Form-item', 'Form-item--normal', 'ReadOnly-item'], cx) }, react_1.default.createElement(Switch_1.default, (0, tslib_1.__assign)({}, commonProps))))); case SimpleSpanType.InputText: return (react_1.default.createElement("div", { className: createClass(['Form', 'Form--normal', 'Form--quickEdit'], cx) }, react_1.default.createElement("div", { className: createClass(['Form-item', 'Form-item--normal', 'ReadOnly-item'], cx) }, react_1.default.createElement(InputText_1.default, (0, tslib_1.__assign)({ onChange: function () { var _a; sub_1.EventSub.emit(tableId + "/" + sub_1.EventEnum.ShowVistiMap, itemIndex + 1, (_a = item.data) === null || _a === void 0 ? void 0 : _a.colIndex, true); }, selectedOptions: [], className: createClass(['Form-control'], cx), translate: (0, locale_1.makeTranslator)() }, editCellParam))))); case SimpleSpanType.InputNumber: return (react_1.default.createElement("div", { className: createClass(['Form', 'Form--normal', 'Form--quickEdit'], cx) }, react_1.default.createElement("div", { className: createClass(['Form-item', 'Form-item--normal', 'ReadOnly-item'], cx) }, react_1.default.createElement(InputNumber_1.default, (0, tslib_1.__assign)({}, commonProps, { onChange: function () { var _a; return tableId && sub_1.EventSub.emit(tableId + "/" + sub_1.EventEnum.ShowVistiMap, itemIndex + 1, (_a = item.data) === null || _a === void 0 ? void 0 : _a.colIndex, true); } }))))); case SimpleSpanType.InputDate: return (react_1.default.createElement("div", { className: createClass(['Form', 'Form--normal', 'Form--quickEdit'], cx) }, react_1.default.createElement("div", { className: createClass(['Form-item', 'Form-item--normal', 'ReadOnly-item'], cx) }, react_1.default.createElement(InputDate_1.default, (0, tslib_1.__assign)({}, commonProps))))); } } switch (column.type) { case '__checkme': return (react_1.default.createElement(components_1.Checkbox, { classPrefix: ns, type: multiple ? 'checkbox' : 'radio', checked: item === null || item === void 0 ? void 0 : item.checked, disabled: !!!(item === null || item === void 0 ? void 0 : item.checkable) })); case SimpleSpanType.Mapping: { var values_1 = (value + '').split(pristine.delimiter); return (react_1.default.createElement("span", { className: createClass(['MappingField'], cx) }, prefixContent, (0, lodash_1.isNil)(value) ? setting_1.UserSetting.tableEmptyValueSetting : values_1.map(function (v, i) { var _a, _b; return (react_1.default.createElement(react_1.default.Fragment, { key: i }, react_1.default.createElement("span", { className: createClass(['TplField'], cx) }, react_1.default.createElement("span", { title: ((_a = column === null || column === void 0 ? void 0 : column.map) === null || _a === void 0 ? void 0 : _a[v]) || v, dangerouslySetInnerHTML: { __html: ((_b = column === null || column === void 0 ? void 0 : column.map) === null || _b === void 0 ? void 0 : _b[v]) || v } })), i < values_1.length - 1 ? pristine.delimiter : '')); }))); } case SimpleSpanType.LionUpload: return react_1.default.createElement(react_1.default.Fragment, null, setting_1.UserSetting.tableEmptyValueSetting); } if (typeof value === 'object') { return (0, lodash_1.isNil)(value) ? (react_1.default.createElement("div", { style: { width: '100%', display: 'contents' } }, react_1.default.createElement("span", null, prefixContent, " ", setting_1.UserSetting.tableEmptyValueSetting))) : (react_1.default.createElement("span", null, prefixContent, "\u590D\u6742\u7C7B\u578B")); } var displayValue = !(0, lodash_1.isNil)(value) ? (0, helper_1.standardValueText)(value, { prefix: prefix, suffix: suffix, kilobitSeparator: kilobitSeparator, precision: precision, showUppercase: showUppercase }) : setting_1.UserSetting.tableEmptyValueSetting; return (react_1.default.createElement("div", { className: createClass(['Tpltab'], cx), style: { width: '100%' } }, react_1.default.createElement("span", { ref: simpleTextRef, title: displayValue, className: createClass(['PlainField'], cx) }, prefixContent, displayValue), isOverflowing ? react_1.default.createElement(react_1.default.Fragment, null, react_1.default.createElement(antd_1.Popover, { content: react_1.default.createElement("span", { className: createClass(['PlainField'], cx) }, displayValue), trigger: 'click', visible: overFlowVisible, overlayClassName: cx('TplPop'), getPopupContainer: env.getModalContainer, autoAdjustOverflow: true, destroyTooltipOnHide: true, placement: 'rightTop', onVisibleChange: function (visible) { return setOverFlowVisible(visible); }, title: react_1.default.createElement("div", { className: cx('Title-tplPop'), onClick: function (e) { return e.stopPropagation(); } }, react_1.default.createElement("div", null, (column === null || column === void 0 ? void 0 : column.label) + ": " + (primaryField ? ((0, lodash_1.isNil)((_b = item === null || item === void 0 ? void 0 : item.data) === null || _b === void 0 ? void 0 : _b[primaryField]) ? setting_1.UserSetting.tableEmptyValueSetting : (_c = item === null || item === void 0 ? void 0 : item.data) === null || _c === void 0 ? void 0 : _c[primaryField]) : setting_1.UserSetting.tableEmptyValueSetting)), react_1.default.createElement("div", null, " ", react_1.default.createElement(icons_1.Icon, { icon: "close", className: "icon", style: { cursor: 'pointer' }, onClick: function () { return setOverFlowVisible(false); } }))) }, react_1.default.createElement(icons_1.Icon, { onClick: function (e) { return e.stopPropagation(); }, icon: "provincial", className: [cx('TplSaving'), 'icon'] }))) : react_1.default.createElement(react_1.default.Fragment, null))); }; var arePropsEqual = function (prev, next) { return (prev.value === next.value) && (next.column.type === '_checkme' && prev.checked === next.checked); }; exports.default = (0, react_1.memo)(SimpleSpan, arePropsEqual); //# sourceMappingURL=./renderers/Table/simpleTableCell/SimpleSpan.js.map