smart-grid-g
Version:
gantd smart-grid-g
457 lines (456 loc) • 22.2 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _typeof = require("@babel/runtime/helpers/typeof");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.setProps = exports.default = void 0;
require("antd/es/button/style/css");
var _button = _interopRequireDefault(require("antd/es/button"));
require("antd/es/tooltip/style/css");
var _tooltip = _interopRequireDefault(require("antd/es/tooltip"));
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _react = _interopRequireWildcard(require("react"));
var _moment = _interopRequireDefault(require("moment"));
var _lodash = require("lodash");
var _grid = _interopRequireDefault(require("grid-g"));
var _config = _interopRequireDefault(require("./config"));
var _formatschema = _interopRequireWildcard(require("./formatschema"));
var _viewpicker = _interopRequireDefault(require("./viewpicker"));
var _hooks = require("./hooks");
var _keyevent = _interopRequireDefault(require("keyevent-g"));
var _header = _interopRequireDefault(require("header-g"));
var _util = require("util-g");
var _Receiver = _interopRequireDefault(require("./locale/Receiver"));
var _utils = require("./utils");
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
var __rest = void 0 && (void 0).__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 viewVersionFormat = 'YYYY-MM-DD HH:mm:SSSS';
var GlobalProps = {};
var setProps = exports.setProps = function setProps(extraProps) {
Object.assign(GlobalProps, extraProps);
};
var GetLocale = function GetLocale(_ref) {
var setLocale = _ref.setLocale;
return /*#__PURE__*/_react.default.createElement(_Receiver.default, null, function (locale) {
setLocale(locale);
return null;
});
};
function SmartGrid(smartGridProps) {
var globalConfig = (0, _utils.getGlobalConfig)();
var props = Object.assign(Object.assign({}, globalConfig), smartGridProps);
var _a = Object.assign({}, GlobalProps, props),
originGridKey = _a.gridKey,
title = _a.title,
schema = _a.schema,
viewSchema = _a.viewSchema,
bindKeys = _a.bindKeys,
headerRight = _a.headerRight,
onReload = _a.onReload,
dataSource = _a.dataSource,
_a$withoutAnimation = _a.withoutAnimation,
withoutAnimation = _a$withoutAnimation === void 0 ? false : _a$withoutAnimation,
_a$headerProps = _a.headerProps,
headerProps = _a$headerProps === void 0 ? {} : _a$headerProps,
onViewChange = _a.onViewChange,
customViewsProp = _a.customViews,
companyViewsProp = _a.companyViews,
lastViewKeyProp = _a.lastViewKey,
onCustomViewsChange = _a.onCustomViewsChange,
onCompanyViewsChange = _a.onCompanyViewsChange,
companyViewAuth = _a.companyViewAuth,
userId = _a.userId,
getCustomViews = _a.getCustomViews,
getCompanyViews = _a.getCompanyViews,
setCustomViewsProp = _a.setCustomViews,
setCompanyViewsProp = _a.setCompanyViews,
initView = _a.initView,
_a$showDisplayConfig = _a.showDisplayConfig,
showDisplayConfig = _a$showDisplayConfig === void 0 ? false : _a$showDisplayConfig,
customizePrefixCls = _a.prefixCls,
height = _a.height,
style = _a.style,
_a$hideHeader = _a.hideHeader,
hideHeader = _a$hideHeader === void 0 ? false : _a$hideHeader,
onReady = _a.onReady,
_a$rowkey = _a.rowkey,
rowkey = _a$rowkey === void 0 ? 'key' : _a$rowkey,
_a$headerHeight = _a.headerHeight,
headerHeight = _a$headerHeight === void 0 ? 30 : _a$headerHeight,
smartGridViewName = _a.smartGridViewName,
restProps = __rest(_a, ["gridKey", "title", "schema", "viewSchema", "bindKeys", "headerRight", "onReload", "dataSource", "withoutAnimation", "headerProps", "onViewChange", "customViews", "companyViews", "lastViewKey", "onCustomViewsChange", "onCompanyViewsChange", "companyViewAuth", "userId", "getCustomViews", "getCompanyViews", "setCustomViews", "setCompanyViews", "initView", "showDisplayConfig", "prefixCls", "height", "style", "hideHeader", "onReady", "rowkey", "headerHeight", "smartGridViewName"]);
var _useState = (0, _react.useState)(null),
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
locale = _useState2[0],
setLocale = _useState2[1];
var _useMemo = (0, _react.useMemo)(function () {
return (0, _formatschema.default)(schema, originGridKey, locale, smartGridViewName);
}, [schema, locale]),
columns = _useMemo.columns,
systemViews = _useMemo.systemViews;
var _systemViews = (0, _slicedToArray2.default)(systemViews, 1),
baseView = _systemViews[0];
var _useState3 = (0, _react.useState)(originGridKey),
_useState4 = (0, _slicedToArray2.default)(_useState3, 2),
gridKey = _useState4[0],
setGridKey = _useState4[1];
var _useState5 = (0, _react.useState)(false),
_useState6 = (0, _slicedToArray2.default)(_useState5, 2),
configModalVisible = _useState6[0],
setConfigModalVisible = _useState6[1];
var _useState7 = (0, _react.useState)(baseView),
_useState8 = (0, _slicedToArray2.default)(_useState7, 2),
activeView = _useState8[0],
setActiveView = _useState8[1];
var panelConfig = activeView.panelConfig;
var _useLocalStorage = (0, _hooks.useLocalStorage)("grid-last-view-key:".concat(originGridKey, ":").concat(userId), ''),
_useLocalStorage2 = (0, _slicedToArray2.default)(_useLocalStorage, 2),
lastViewKey = _useLocalStorage2[0],
setLastViewKey = _useLocalStorage2[1];
var _useLocalStorage3 = (0, _hooks.useLocalStorage)("grid-custom-views:".concat(originGridKey, ":").concat(userId), []),
_useLocalStorage4 = (0, _slicedToArray2.default)(_useLocalStorage3, 2),
customViews = _useLocalStorage4[0],
setCustomViews = _useLocalStorage4[1];
var _useLocalStorage5 = (0, _hooks.useLocalStorage)("grid-company-views:".concat(originGridKey), []),
_useLocalStorage6 = (0, _slicedToArray2.default)(_useLocalStorage5, 2),
companyViews = _useLocalStorage6[0],
setCompanyViews = _useLocalStorage6[1];
var apiRef = (0, _react.useRef)(null);
var managerRef = (0, _react.useRef)(null);
//Grid渲染完成之后的回调方法
var handleReady = (0, _react.useCallback)(function (params, manager) {
apiRef.current = params;
managerRef.current = manager;
onReady && onReady(params, manager);
}, [onReady]);
(0, _react.useEffect)(function () {
customViewsProp && setCustomViews(customViewsProp);
}, [customViewsProp]);
(0, _react.useEffect)(function () {
companyViewsProp && setCompanyViews(companyViewsProp);
}, [companyViewsProp]);
var originCustomViewsRef = (0, _react.useRef)(null);
var originCompanyViewsRef = (0, _react.useRef)(null);
(0, _react.useEffect)(function () {
if (getCustomViews) {
getCustomViews("grid-custom-views:".concat(originGridKey, ":").concat(userId)).then(function (views) {
originCustomViewsRef.current = (0, _util.deepCopy4JSON)(views);
setCustomViews(views);
});
}
}, [originGridKey, getCustomViews]);
(0, _react.useEffect)(function () {
if (getCompanyViews) {
getCompanyViews("grid-company-views:".concat(originGridKey)).then(function (views) {
originCompanyViewsRef.current = (0, _util.deepCopy4JSON)(views);
setCompanyViews(views);
});
}
}, [originGridKey, getCompanyViews]);
/** 直接设置视图配置 */
(0, _react.useEffect)(function () {
if (viewSchema) {
setActiveView(Object.assign(Object.assign({}, activeView), viewSchema));
}
}, [viewSchema]);
/** 切换初始视图 */
(0, _react.useEffect)(function () {
var usedView;
var _systemViews2 = (0, _slicedToArray2.default)(systemViews, 1),
baseView = _systemViews2[0];
var viewKey = lastViewKeyProp || lastViewKey;
if (!originGridKey) {
usedView = initView;
} else {
usedView = initView || [].concat((0, _toConsumableArray2.default)(systemViews), (0, _toConsumableArray2.default)(companyViews), (0, _toConsumableArray2.default)(customViews)).find(function (sV) {
return sV.viewId === viewKey;
});
}
if (!usedView) {
usedView = baseView;
}
setActiveView((0, _lodash.cloneDeep)(usedView));
if (viewKey !== usedView.viewId) setLastViewKey(usedView.viewId);
// onViewChange && onViewChange(usedView); 接口自定义视图,customViewsProp属性冲突
}, [systemViews, customViews, companyViews, lastViewKey, lastViewKeyProp]);
/** 手动切换视图 */
var handlerChangeView = (0, _react.useCallback)(function (view) {
if (view.viewId === lastViewKey) return;
managerRef.current && managerRef.current.clearLocalStorageColumns();
onViewChange && onViewChange(view);
setLastViewKey(view.viewId);
}, [originGridKey, lastViewKey, onViewChange]);
/** 保存自定义、共享视图 */
var handlerSaveViews = (0, _react.useCallback)(function (params) {
var views = params.views,
operateView = params.operateView,
hideModal = params.hideModal;
if (operateView.viewId.startsWith('company')) {
onCompanyViewsChange && onCompanyViewsChange(views);
setCompanyViewsProp && setCompanyViewsProp("grid-company-views:".concat(originGridKey), views);
setCompanyViews(views);
} else {
onCustomViewsChange && onCustomViewsChange(views);
setCustomViewsProp && setCustomViewsProp("grid-custom-views:".concat(originGridKey, ":").concat(userId), views);
setCustomViews(views);
}
hideModal && hideModal();
}, []);
/** 修改视图 */
var handlerSaveConfig = (0, _react.useCallback)(function (config) {
var newView = Object.assign({}, config);
newView.version = (0, _moment.default)().format(viewVersionFormat);
setLastViewKey(newView.viewId);
var viewList = newView.viewId.startsWith('company') ? companyViews : customViews;
var curViewIndex = viewList.findIndex(function (cV) {
return cV.viewId === newView.viewId;
});
if (~curViewIndex) {
viewList[curViewIndex] = newView;
}
handlerSaveViews({
operateView: newView,
type: 'edit',
views: (0, _toConsumableArray2.default)(viewList)
});
setConfigModalVisible(false);
}, [customViews, companyViews]);
/** 另存视图 */
var onViewSaveAs = (0, _react.useCallback)(function (vals, hideModal) {
var type = vals.type,
name = vals.name,
panelConfig = vals.panelConfig;
var newView = {
viewId: "".concat(type, "-").concat(userId, "-").concat((0, _util.generateUuid)(8)),
name: name,
version: (0, _moment.default)().format(viewVersionFormat),
panelConfig: panelConfig
};
var oldViews = type === 'company' ? companyViews : customViews;
handlerSaveViews({
operateView: newView,
type: 'add',
views: [].concat((0, _toConsumableArray2.default)(oldViews), [newView])
});
setLastViewKey(newView.viewId);
hideModal && hideModal();
setConfigModalVisible(false);
}, [customViews, companyViews, userId]);
var handleSync = (0, _react.useCallback)((0, _lodash.debounce)(function () {
var columnFieldsMap = {};
var mapFieldsToObj = function mapFieldsToObj(fields, parentId) {
fields.forEach(function (field) {
if (field.children) {
mapFieldsToObj(field.children, field.fieldName);
delete field.children;
columnFieldsMap[field.fieldName] = field;
} else {
field.parentColId = parentId;
columnFieldsMap[field.fieldName] = field;
}
});
};
mapFieldsToObj(activeView.panelConfig.columnFields);
var columnDefs = managerRef.current.agGridColumnApi.getColumnState().filter(function (def) {
return def.colId !== 'defalutSelection' && def.colId !== 'g-index';
});
columnDefs.sort(function (prev, next) {
if (prev.pinned === 'left' && next.pinned !== 'left' || prev.pinned !== 'right' && next.pinned === 'right') {
return -1;
}
});
var columnFields = [];
columnDefs.forEach(function (colDef) {
var _a;
var parentColId = (_a = columnFieldsMap[colDef.colId]) === null || _a === void 0 ? void 0 : _a.parentColId;
var cf = Object.assign({}, columnFieldsMap[colDef.colId], {
fixed: colDef.pinned,
sort: colDef.sort,
sortIndex: colDef.sortIndex,
hide: colDef.hide,
width: colDef.width
});
if (parentColId) {
var groupField = columnFields.find(function (field) {
return field.fieldName === parentColId;
});
if (groupField) {
groupField.children.push(cf);
} else {
columnFieldsMap[parentColId].children = [cf];
columnFields.push(columnFieldsMap[parentColId]);
}
} else {
columnFields.push(cf);
}
});
activeView.panelConfig.columnFields = columnFields;
handlerSaveConfig(activeView);
}, 250), [activeView]);
var _useMemo2 = (0, _react.useMemo)(function () {
return (0, _hooks.useTableConfig)({
tableConfig: panelConfig,
columns: columns,
tableKey: originGridKey
});
}, [originGridKey, panelConfig, columns]),
_useMemo3 = (0, _slicedToArray2.default)(_useMemo2, 1),
finalColumns = _useMemo3[0];
// 动态列修改用户自定义视图
(0, _react.useEffect)(function () {
setCustomViews(function (_customViews) {
var _iterator = _createForOfIteratorHelper(_customViews),
_step;
try {
for (_iterator.s(); !(_step = _iterator.n()).done;) {
var _customView = _step.value;
var __columnFields = _customView.panelConfig.columnFields;
_customView.panelConfig.columnFields = (0, _formatschema.formatColumnFields)(__columnFields, columns);
}
} catch (err) {
_iterator.e(err);
} finally {
_iterator.f();
}
if (setCustomViewsProp && originCustomViewsRef.current && !(0, _util.JSONisEqual)(originCustomViewsRef.current, _customViews)) {
setCustomViewsProp("grid-custom-views:".concat(originGridKey, ":").concat(userId), _customViews);
}
return (0, _toConsumableArray2.default)(_customViews);
});
setCompanyViews(function (_companyViews) {
var _iterator2 = _createForOfIteratorHelper(_companyViews),
_step2;
try {
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
var _companyView = _step2.value;
var __columnFields = _companyView.panelConfig.columnFields;
_companyView.panelConfig.columnFields = (0, _formatschema.formatColumnFields)(__columnFields, columns);
}
} catch (err) {
_iterator2.e(err);
} finally {
_iterator2.f();
}
if (setCompanyViewsProp && originCompanyViewsRef.current && !(0, _util.JSONisEqual)(originCompanyViewsRef.current, _companyViews)) {
setCompanyViewsProp("grid-company-views:".concat(originGridKey), _companyViews);
}
return (0, _toConsumableArray2.default)(_companyViews);
});
}, [columns, originGridKey, setCustomViewsProp, setCompanyViewsProp]);
(0, _react.useEffect)(function () {
setGridKey('gridKey:' + originGridKey + ':' + activeView.viewId + ':' + activeView.version);
}, [finalColumns, originGridKey, activeView]);
var titleRef = (0, _react.useRef)(null);
var TableTitle = (0, _react.useMemo)(function () {
return /*#__PURE__*/_react.default.createElement(_Receiver.default, null, function (locale) {
return /*#__PURE__*/_react.default.createElement(_viewpicker.default, {
viewName: activeView.name,
viewId: activeView.viewId,
userId: userId,
customViews: customViews,
companyViews: companyViews,
systemViews: systemViews,
switchActiveView: handlerChangeView,
updateView: handlerSaveViews,
withoutAnimation: withoutAnimation,
splitLine: !!title,
config: /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_tooltip.default, {
title: locale.sync
}, /*#__PURE__*/_react.default.createElement(_button.default, {
size: "small",
icon: "sync",
style: {
marginRight: 5
},
onClick: handleSync,
disabled: activeView.viewId.startsWith('system')
})), /*#__PURE__*/_react.default.createElement(_tooltip.default, {
title: locale.config
}, /*#__PURE__*/_react.default.createElement(_button.default, {
size: "small",
icon: "setting",
style: {
marginRight: 0
},
onClick: setConfigModalVisible.bind(null, true)
}))),
getPopupContainer: function getPopupContainer() {
return titleRef.current || document.body;
}
});
});
}, [activeView, customViews, companyViews, systemViews, titleRef, title, userId]);
var HeaderRightElem = (0, _react.useMemo)(function () {
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, headerRight, onReload && ( /*#__PURE__*/_react.default.createElement(_Receiver.default, null, function (locale) {
return /*#__PURE__*/_react.default.createElement(_tooltip.default, {
title: locale.reload
}, /*#__PURE__*/_react.default.createElement(_button.default, {
size: "small",
icon: "reload",
className: "",
onClick: function onClick() {
return onReload();
}
}));
})));
}, [headerRight, onReload]);
var gridHeight = (0, _react.useMemo)(function () {
if (!height) return;
if (hideHeader) return height;
return typeof height !== 'number' ? "calc(".concat(height, " - ").concat(headerHeight, "px)") : height - headerHeight;
}, [height, hideHeader, headerHeight]);
return /*#__PURE__*/_react.default.createElement("div", {
className: "gant-smart-table-wrapper",
style: Object.assign(Object.assign({}, style), {
height: height
})
}, /*#__PURE__*/_react.default.createElement(GetLocale, {
setLocale: setLocale
}), !hideHeader && ( /*#__PURE__*/_react.default.createElement(_header.default, Object.assign({
title: /*#__PURE__*/_react.default.createElement("div", {
ref: titleRef
}, title, TableTitle),
extra: HeaderRightElem
}, headerProps))), (0, _keyevent.default)(bindKeys, true)( /*#__PURE__*/_react.default.createElement(_grid.default, Object.assign({
rowkey: rowkey,
dataSource: dataSource,
columns: finalColumns,
height: gridHeight,
onReady: handleReady,
key: originGridKey ? gridKey : undefined
}, restProps))), /*#__PURE__*/_react.default.createElement(_config.default, {
visible: configModalVisible,
originColumns: columns,
withoutAnimation: withoutAnimation,
userId: userId,
companyViewAuth: companyViewAuth,
showDisplayConfig: showDisplayConfig,
dataSource: activeView,
gridKey: originGridKey,
customViews: customViews,
companyViews: companyViews,
systemViews: systemViews,
onSaveViews: handlerSaveViews,
onSaveAs: onViewSaveAs,
onOk: handlerSaveConfig,
onCancel: function onCancel() {
return setConfigModalVisible(false);
},
onViewChange: onViewChange
}));
}
var SmartGridFn = SmartGrid;
var _default = exports.default = SmartGridFn;