choerodon-ui
Version:
An enterprise-class UI design language and React-based implementation
479 lines (411 loc) • 20.7 kB
JavaScript
"use strict";
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard")["default"];
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
var _react = _interopRequireWildcard(require("react"));
var _mobxReactLite = require("mobx-react-lite");
var _mobx = require("mobx");
var _noop = _interopRequireDefault(require("lodash/noop"));
var _defaultTo = _interopRequireDefault(require("lodash/defaultTo"));
var _collapse = _interopRequireDefault(require("../../../../lib/collapse"));
var _CollapsePanel = _interopRequireDefault(require("../../../../lib/collapse/CollapsePanel"));
var _UnitConvertor = require("../../../../lib/_util/UnitConvertor");
var _utils = require("../utils");
var _columnGroups = _interopRequireDefault(require("./column-groups"));
var _DataSet = _interopRequireDefault(require("../../data-set/DataSet"));
var _treeUtils = require("../../_util/treeUtils");
var _TableContext = _interopRequireDefault(require("../TableContext"));
var _localeContext = require("../../locale-context");
var _Button = _interopRequireDefault(require("../../button/Button"));
var _enum = require("../../button/enum");
var _enum2 = require("../../core/enum");
var _TableStore = require("../TableStore");
var _Form = _interopRequireDefault(require("../../form/Form"));
var _NumberField = _interopRequireDefault(require("../../number-field/NumberField"));
var _SelectBox = _interopRequireDefault(require("../../select-box/SelectBox"));
var _Option = _interopRequireDefault(require("../../option/Option"));
var _enum3 = require("../enum");
var _enum4 = require("../../form/enum");
var _enum5 = require("../../field/enum");
var _enum6 = require("../../radio/enum");
var _icon = _interopRequireDefault(require("../../icon"));
var _Tooltip = _interopRequireDefault(require("../../tooltip/Tooltip"));
function normalizeColumnsToTreeData(columns) {
return (0, _toConsumableArray2["default"])((0, _treeUtils.treeReduce)(columns, function (map, column, _sort, parentColumn) {
if (!column.__tableGroup || !column.children && column.__group) {
var key = column.__originalKey || (0, _utils.getColumnKey)(column);
map.set(key, {
key: key,
parentKey: parentColumn && (parentColumn.__originalKey || (0, _utils.getColumnKey)(parentColumn)),
lock: (0, _utils.getColumnLock)(column.lock),
width: column.width,
header: column.header,
title: column.title,
hidden: column.hidden,
name: column.name,
sort: column.sort,
titleEditable: column.titleEditable,
hideable: column.hideable,
draggable: column.draggable
});
}
return map;
}, new Map()).values());
}
function diff() {
var height = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
if (typeof document !== 'undefined') {
return document.documentElement.clientHeight - height;
}
return 0;
}
var HEIGHT_CHANGE_KEY = '__heightChange__';
var CustomizationSettings = function CustomizationSettings(props) {
var modal = props.modal;
var _ref = modal || {
update: _noop["default"],
handleOk: _noop["default"]
},
handleOk = _ref.handleOk,
handleCancel = _ref.handleCancel;
var _useContext = (0, _react.useContext)(_TableContext["default"]),
prefixCls = _useContext.prefixCls,
tableStore = _useContext.tableStore;
var leftOriginalColumns = tableStore.leftOriginalColumns,
originalColumns = tableStore.originalColumns,
rightOriginalColumns = tableStore.rightOriginalColumns,
customized = tableStore.customized;
var _useState = (0, _react.useState)(function () {
return [].concat((0, _toConsumableArray2["default"])(leftOriginalColumns), (0, _toConsumableArray2["default"])(originalColumns), (0, _toConsumableArray2["default"])(rightOriginalColumns));
}),
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
customizedColumns = _useState2[0],
setCustomizedColumns = _useState2[1];
var tableRecord = (0, _react.useMemo)(function () {
return new _DataSet["default"]({
data: [{
heightType: tableStore.heightType,
height: tableStore.totalHeight,
heightDiff: diff(tableStore.totalHeight),
aggregation: tableStore.aggregation,
size: tableStore.size,
parityRow: tableStore.parityRow,
aggregationExpandType: tableStore.aggregationExpandType
}],
events: {
update: function update(_ref2) {
var record = _ref2.record,
name = _ref2.name,
value = _ref2.value;
record.setState(HEIGHT_CHANGE_KEY, (record.getState(HEIGHT_CHANGE_KEY) || 0) + 1);
var tempCustomized = tableStore.tempCustomized,
_tableStore$props = tableStore.props,
columns = _tableStore$props.columns,
children = _tableStore$props.children;
if (tempCustomized) {
(0, _mobx.set)(tempCustomized, name, value);
if (name === 'heightType') {
if (value === _enum3.TableHeightType.fixed) {
(0, _mobx.set)(tempCustomized, 'height', record.get('height'));
} else if (value === _enum3.TableHeightType.flex) {
(0, _mobx.set)(tempCustomized, 'heightDiff', record.get('heightDiff'));
}
} else if (name === 'height' && record.get('heightType') === _enum3.TableHeightType.fixed) {
record.set('heightDiff', diff(value));
(0, _mobx.set)(tempCustomized, 'heightType', _enum3.TableHeightType.fixed);
} else if (name === 'heightDiff' && record.get('heightType') === _enum3.TableHeightType.flex) {
record.set('height', diff(value));
(0, _mobx.set)(tempCustomized, 'heightType', _enum3.TableHeightType.flex);
} else if (name === 'aggregation') {
var _normalizeGroupColumn = (0, _TableStore.normalizeGroupColumns)(tableStore, columns, children, value, tempCustomized.columns),
_normalizeGroupColumn2 = (0, _slicedToArray2["default"])(_normalizeGroupColumn, 3),
left = _normalizeGroupColumn2[0],
center = _normalizeGroupColumn2[1],
right = _normalizeGroupColumn2[2];
setCustomizedColumns([].concat((0, _toConsumableArray2["default"])(left), (0, _toConsumableArray2["default"])(center), (0, _toConsumableArray2["default"])(right)));
}
}
record.setState(HEIGHT_CHANGE_KEY, record.getState(HEIGHT_CHANGE_KEY) - 1);
if (record.getState(HEIGHT_CHANGE_KEY) === 0) {
tableStore.node.handleHeightTypeChange();
record.setState(HEIGHT_CHANGE_KEY, undefined);
}
}
}
}).current;
}, [tableStore]);
var columnDataSet = (0, _react.useMemo)(function () {
return new _DataSet["default"]({
data: normalizeColumnsToTreeData(customizedColumns),
paging: false,
primaryKey: 'key',
idField: 'key',
parentField: 'parentKey',
fields: [{
name: 'lock',
group: true
}],
events: {
update: function update(_ref3) {
var record = _ref3.record,
name = _ref3.name,
value = _ref3.value;
if (name === 'hidden') {
var records = record.children;
if (records) {
records.forEach(function (child) {
return child.set(name, value);
});
}
}
var tempCustomized = tableStore.tempCustomized;
if (tempCustomized) {
var key = record.key;
if (!tempCustomized.columns[key]) {
tempCustomized.columns[key] = {};
}
tempCustomized.columns[key][name] = value;
}
}
}
});
}, [customizedColumns, tableStore]);
var handleRestoreTable = (0, _react.useCallback)((0, _mobx.action)(function (e) {
e.stopPropagation();
var originalHeightType = tableStore.originalHeightType,
style = tableStore.props.style;
var defaultHeight = (0, _defaultTo["default"])((0, _UnitConvertor.toPx)(style && style.height), tableStore.totalHeight);
tableStore.node.handleHeightTypeChange(true);
tableRecord.init({
heightType: originalHeightType,
height: defaultHeight,
heightDiff: diff(defaultHeight)
});
}), [tableRecord, tableStore]);
var handleRestoreColumns = (0, _react.useCallback)((0, _mobx.action)(function (e) {
e.stopPropagation();
var _tableStore$props2 = tableStore.props,
columns = _tableStore$props2.columns,
children = _tableStore$props2.children;
var aggregation = tableRecord.get('aggregation');
var _normalizeGroupColumn3 = (0, _TableStore.normalizeGroupColumns)(tableStore, columns, children, aggregation),
_normalizeGroupColumn4 = (0, _slicedToArray2["default"])(_normalizeGroupColumn3, 3),
left = _normalizeGroupColumn4[0],
center = _normalizeGroupColumn4[1],
right = _normalizeGroupColumn4[2];
setCustomizedColumns([].concat((0, _toConsumableArray2["default"])(left), (0, _toConsumableArray2["default"])(center), (0, _toConsumableArray2["default"])(right)));
tableStore.tempCustomized.columns = {};
}), [tableRecord, tableStore]);
var handleOption = (0, _react.useCallback)(function () {
return {
className: "".concat(prefixCls, "-customization-option")
};
}, [prefixCls]);
var handleCollapseChange = (0, _react.useCallback)((0, _mobx.action)(function (key) {
tableStore.customizedActiveKey = [].concat(key);
}), [tableStore]);
(0, _react.useEffect)((0, _mobx.action)(function () {
tableStore.tempCustomized = (0, _objectSpread2["default"])({
height: tableStore.totalHeight,
heightDiff: diff(tableStore.totalHeight)
}, (0, _mobx.toJS)(customized));
}), [tableStore]);
(0, _react.useEffect)(function () {
if (handleOk) {
handleOk((0, _mobx.action)(function () {
var tempCustomized = tableStore.tempCustomized,
aggregation = tableStore.aggregation,
onAggregationChange = tableStore.props.onAggregationChange;
tableStore.tempCustomized = {
columns: {}
};
tableStore.saveCustomized(tempCustomized);
tableStore.initColumns();
tableStore.node.handleHeightTypeChange();
var customAggregation = tempCustomized.aggregation;
if (onAggregationChange && customAggregation !== undefined && customAggregation !== aggregation) {
onAggregationChange(customAggregation);
}
}));
}
if (handleCancel) {
handleCancel((0, _mobx.action)(function () {
tableStore.tempCustomized = {
columns: {}
};
tableStore.node.handleHeightTypeChange();
}));
}
}, [handleOk, handleCancel, columnDataSet, tableStore]);
var renderIcon = (0, _react.useCallback)(function (_ref4) {
var isActive = _ref4.isActive;
return /*#__PURE__*/_react["default"].createElement(_icon["default"], {
type: isActive ? 'expand_more' : 'navigate_next'
});
}, []);
var tableSettings = [];
if (tableStore.heightChangeable) {
var tableHeightType = tableRecord.get('heightType');
tableSettings.push( /*#__PURE__*/_react["default"].createElement(_SelectBox["default"], {
key: "heightType",
vertical: true,
name: "heightType",
label: (0, _localeContext.$l)('Table', 'height_settings'),
onOption: handleOption
}, /*#__PURE__*/_react["default"].createElement(_Option["default"], {
value: _enum3.TableHeightType.auto
}, (0, _localeContext.$l)('Table', 'auto_height')), /*#__PURE__*/_react["default"].createElement(_Option["default"], {
value: _enum3.TableHeightType.fixed
}, /*#__PURE__*/_react["default"].createElement("span", {
className: "".concat(prefixCls, "-customization-option-label")
}, (0, _localeContext.$l)('Table', 'fixed_height')), /*#__PURE__*/_react["default"].createElement(_NumberField["default"], {
className: "".concat(prefixCls, "-customization-option-input"),
labelLayout: _enum4.LabelLayout.none,
name: "height",
disabled: tableHeightType !== _enum3.TableHeightType.fixed,
step: 1
})), /*#__PURE__*/_react["default"].createElement(_Option["default"], {
value: _enum3.TableHeightType.flex
}, /*#__PURE__*/_react["default"].createElement("span", {
className: "".concat(prefixCls, "-customization-option-label")
}, (0, _localeContext.$l)('Table', 'flex_height')), /*#__PURE__*/_react["default"].createElement(_NumberField["default"], {
groupClassName: "".concat(prefixCls, "-customization-option-input"),
labelLayout: _enum4.LabelLayout.none,
name: "heightDiff",
disabled: tableHeightType !== _enum3.TableHeightType.flex,
showHelp: _enum5.ShowHelp.tooltip,
help: (0, _localeContext.$l)('Table', 'flex_height_help'),
step: 1
}))));
}
if (tableRecord.get('aggregation')) {
tableSettings.push( /*#__PURE__*/_react["default"].createElement(_SelectBox["default"], {
key: "aggregationExpandType",
name: "aggregationExpandType",
label: (0, _localeContext.$l)('Table', 'row_expand_settings')
}, /*#__PURE__*/_react["default"].createElement(_Option["default"], {
value: "cell"
}, (0, _localeContext.$l)('Table', 'expand_cell')), /*#__PURE__*/_react["default"].createElement(_Option["default"], {
value: "row"
}, (0, _localeContext.$l)('Table', 'expand_row')), /*#__PURE__*/_react["default"].createElement(_Option["default"], {
value: "column"
}, (0, _localeContext.$l)('Table', 'expand_column'))));
}
return /*#__PURE__*/_react["default"].createElement(_collapse["default"], {
activeKey: tableStore.customizedActiveKey.slice(),
onChange: handleCollapseChange,
expandIcon: renderIcon,
expandIconPosition: "text-right",
className: "".concat(prefixCls, "-customization"),
ghost: true
}, /*#__PURE__*/_react["default"].createElement(_CollapsePanel["default"], {
header: /*#__PURE__*/_react["default"].createElement("span", {
className: "".concat(prefixCls, "-customization-panel-title")
}, (0, _localeContext.$l)('Table', 'display_settings')),
key: "display"
}, /*#__PURE__*/_react["default"].createElement(_Form["default"], {
className: "".concat(prefixCls, "-customization-form"),
record: tableRecord,
labelLayout: _enum4.LabelLayout["float"]
}, tableStore.hasAggregationColumn && (tableStore.props.onAggregationChange || tableStore.props.aggregation === undefined) && /*#__PURE__*/_react["default"].createElement(_SelectBox["default"], {
name: "aggregation",
label: (0, _localeContext.$l)('Table', 'view_display'),
mode: _enum6.ViewMode.button
}, /*#__PURE__*/_react["default"].createElement(_Option["default"], {
value: false,
className: "".concat(prefixCls, "-customization-select-view-option")
}, /*#__PURE__*/_react["default"].createElement(_Tooltip["default"], {
title: (0, _localeContext.$l)('Table', 'tiled_view'),
placement: "top"
}, /*#__PURE__*/_react["default"].createElement("div", {
className: "".concat(prefixCls, "-customization-select-view-option-inner ").concat(prefixCls, "-customization-not-aggregation")
}))), /*#__PURE__*/_react["default"].createElement(_Option["default"], {
value: true,
className: "".concat(prefixCls, "-customization-select-view-option")
}, /*#__PURE__*/_react["default"].createElement(_Tooltip["default"], {
title: (0, _localeContext.$l)('Table', 'aggregation_view'),
placement: "top"
}, /*#__PURE__*/_react["default"].createElement("div", {
className: "".concat(prefixCls, "-customization-select-view-option-inner ").concat(prefixCls, "-customization-aggregation")
})))), /*#__PURE__*/_react["default"].createElement(_SelectBox["default"], {
name: "size",
label: (0, _localeContext.$l)('Table', 'density_display'),
mode: _enum6.ViewMode.button
}, /*#__PURE__*/_react["default"].createElement(_Option["default"], {
value: _enum2.Size["default"],
className: "".concat(prefixCls, "-customization-select-view-option")
}, /*#__PURE__*/_react["default"].createElement(_Tooltip["default"], {
title: (0, _localeContext.$l)('Table', 'normal'),
placement: "top"
}, /*#__PURE__*/_react["default"].createElement("div", {
className: "".concat(prefixCls, "-customization-select-view-option-inner ").concat(prefixCls, "-customization-size-default")
}))), /*#__PURE__*/_react["default"].createElement(_Option["default"], {
value: _enum2.Size.small,
className: "".concat(prefixCls, "-customization-select-view-option")
}, /*#__PURE__*/_react["default"].createElement(_Tooltip["default"], {
title: (0, _localeContext.$l)('Table', 'compact'),
placement: "top"
}, /*#__PURE__*/_react["default"].createElement("div", {
className: "".concat(prefixCls, "-customization-select-view-option-inner ").concat(prefixCls, "-customization-size-small")
})))), /*#__PURE__*/_react["default"].createElement(_SelectBox["default"], {
name: "parityRow",
label: (0, _localeContext.$l)('Table', 'parity_row'),
mode: _enum6.ViewMode.button
}, /*#__PURE__*/_react["default"].createElement(_Option["default"], {
value: false,
className: "".concat(prefixCls, "-customization-select-view-option")
}, /*#__PURE__*/_react["default"].createElement(_Tooltip["default"], {
title: (0, _localeContext.$l)('Table', 'normal'),
placement: "top"
}, /*#__PURE__*/_react["default"].createElement("div", {
className: "".concat(prefixCls, "-customization-select-view-option-inner ").concat(prefixCls, "-customization-no-parity-row")
}))), /*#__PURE__*/_react["default"].createElement(_Option["default"], {
value: true,
className: "".concat(prefixCls, "-customization-select-view-option")
}, /*#__PURE__*/_react["default"].createElement(_Tooltip["default"], {
title: (0, _localeContext.$l)('Table', 'parity_row'),
placement: "top"
}, /*#__PURE__*/_react["default"].createElement("div", {
className: "".concat(prefixCls, "-customization-select-view-option-inner ").concat(prefixCls, "-customization-parity-row")
})))))), tableSettings.length ? /*#__PURE__*/_react["default"].createElement(_CollapsePanel["default"], {
header: /*#__PURE__*/_react["default"].createElement("span", {
className: "".concat(prefixCls, "-customization-panel-title")
}, (0, _localeContext.$l)('Table', 'table_settings')),
key: "table",
extra: /*#__PURE__*/_react["default"].createElement(_Button["default"], {
className: "".concat(prefixCls, "-customization-header-button"),
color: _enum.ButtonColor.primary,
funcType: _enum.FuncType.flat,
size: _enum2.Size.small,
onClick: handleRestoreTable
}, (0, _localeContext.$l)('Table', 'restore_default'))
}, /*#__PURE__*/_react["default"].createElement(_Form["default"], {
className: "".concat(prefixCls, "-customization-form"),
record: tableRecord,
labelLayout: _enum4.LabelLayout["float"]
}, tableSettings)) : null, /*#__PURE__*/_react["default"].createElement(_CollapsePanel["default"], {
header: /*#__PURE__*/_react["default"].createElement("span", {
className: "".concat(prefixCls, "-customization-panel-title")
}, (0, _localeContext.$l)('Table', 'column_settings')),
key: "columns",
extra: /*#__PURE__*/_react["default"].createElement(_Button["default"], {
className: "".concat(prefixCls, "-customization-header-button"),
color: _enum.ButtonColor.primary,
funcType: _enum.FuncType.flat,
size: _enum2.Size.small,
onClick: handleRestoreColumns
}, (0, _localeContext.$l)('Table', 'restore_default'))
}, /*#__PURE__*/_react["default"].createElement(_columnGroups["default"], {
dataSet: columnDataSet
})));
};
CustomizationSettings.displayName = 'CustomizationSettings';
var _default = (0, _mobxReactLite.observer)(CustomizationSettings);
exports["default"] = _default;
//# sourceMappingURL=CustomizationSettings.js.map