UNPKG

fastlion-amis

Version:

一种MIS页面生成工具

167 lines (166 loc) 11.3 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.HocStoreFactory = void 0; var tslib_1 = require("tslib"); var hoist_non_react_statics_1 = (0, tslib_1.__importDefault)(require("hoist-non-react-statics")); var mobx_react_1 = require("mobx-react"); var react_1 = (0, tslib_1.__importDefault)(require("react")); var filter_schema_1 = (0, tslib_1.__importDefault)(require("./utils/filter-schema")); var helper_1 = require("./utils/helper"); var tpl_builtin_1 = require("./utils/tpl-builtin"); var WithRootStore_1 = require("./WithRootStore"); function HocStoreFactory(renderer) { return function (Component) { var StoreFactory = /** @class */ (function (_super) { (0, tslib_1.__extends)(StoreFactory, _super); function StoreFactory(props, context) { var _a, _b; var _this = _super.call(this, props) || this; var rootStore = context; _this.renderChild = _this.renderChild.bind(_this); _this.refFn = _this.refFn.bind(_this); var store = rootStore.addStore({ id: (0, helper_1.guid)(), path: _this.props.$path, storeType: renderer.storeType, parentId: _this.props.store ? _this.props.store.id : '' }); _this.store = store; var extendsData = typeof renderer.extendsData === 'function' ? renderer.extendsData(props) : renderer.extendsData; if (extendsData === false) { store.initData((0, helper_1.createObject)(_this.props.data ? _this.props.data.__super : null, (0, tslib_1.__assign)((0, tslib_1.__assign)({}, _this.formatData((0, tpl_builtin_1.dataMapping)(_this.props.defaultData, _this.props.data))), _this.formatData(_this.props.data)))); } else if (_this.props.scope || (_this.props.data && _this.props.data.__super)) { if (_this.props.store && _this.props.data === ((_a = _this.props.store) === null || _a === void 0 ? void 0 : _a.data)) { store.initData((0, helper_1.createObject)((_b = _this.props.store) === null || _b === void 0 ? void 0 : _b.data, (0, tslib_1.__assign)({}, _this.formatData((0, tpl_builtin_1.dataMapping)(_this.props.defaultData, _this.props.data))))); } else { store.initData((0, helper_1.createObject)(_this.props.data.__super || _this.props.scope, (0, tslib_1.__assign)((0, tslib_1.__assign)({}, _this.formatData((0, tpl_builtin_1.dataMapping)(_this.props.defaultData, _this.props.data))), _this.formatData(_this.props.data)))); } } else { store.initData((0, tslib_1.__assign)((0, tslib_1.__assign)({}, _this.formatData((0, tpl_builtin_1.dataMapping)(_this.props.defaultData, _this.props.data))), _this.formatData(_this.props.data))); } return _this; } StoreFactory.prototype.getWrappedInstance = function () { return this.ref; }; StoreFactory.prototype.refFn = function (ref) { this.ref = ref; }; StoreFactory.prototype.formatData = function (data) { if (Array.isArray(data)) { return { items: data }; } return data; }; StoreFactory.prototype.componentDidUpdate = function (prevProps) { var _a, _b, _c, _d, _e, _f, _g; var props = this.props; var store = this.store; var shouldSync = (_a = renderer.shouldSyncSuperStore) === null || _a === void 0 ? void 0 : _a.call(renderer, store, props, prevProps); if (shouldSync === false) { return; } var extendsData = typeof renderer.extendsData === 'function' ? renderer.extendsData(props) : renderer.extendsData; if (extendsData === false) { if (shouldSync === true || prevProps.defaultData !== props.defaultData || (0, helper_1.isObjectShallowModified)(prevProps.data, props.data) || // // 特殊处理 CRUD。 // CRUD 中 toolbar 里面的 data 是空对象,但是 __super 会不一样 (props.data && prevProps.data && props.data.__super !== prevProps.data.__super)) { store.initData((0, helper_1.extendObject)(props.data, (0, tslib_1.__assign)((0, tslib_1.__assign)((0, tslib_1.__assign)({}, (store.hasRemoteData ? store === null || store === void 0 ? void 0 : store.data : null)), this.formatData(props.defaultData)), this.formatData(props.data)))); } } else if (shouldSync === true || (0, helper_1.isObjectShallowModified)(prevProps.data, props.data) || (props.syncSuperStore !== false && (0, helper_1.isSuperDataModified)(props.data, prevProps.data, store))) { if (props.store && ((_b = props.store) === null || _b === void 0 ? void 0 : _b.data) === props.data) { store.initData((0, helper_1.createObject)((_c = props.store) === null || _c === void 0 ? void 0 : _c.data, props.syncSuperStore === false ? (0, tslib_1.__assign)({}, store === null || store === void 0 ? void 0 : store.data) : (0, helper_1.syncDataFromSuper)(store === null || store === void 0 ? void 0 : store.data, (_d = props.store) === null || _d === void 0 ? void 0 : _d.data, prevProps.scope, store, props.syncSuperStore === true))); } else if (props.data && props.data.__super) { store.initData((0, helper_1.extendObject)(props.data, (store === null || store === void 0 ? void 0 : store.hasRemoteData) ? (0, tslib_1.__assign)((0, tslib_1.__assign)({}, store === null || store === void 0 ? void 0 : store.data), props.data) : undefined)); } else { store.initData((0, helper_1.createObject)(props.scope, props.data)); } } else if ((shouldSync === true || !props.store || props.data !== ((_e = props.store) === null || _e === void 0 ? void 0 : _e.data)) && props.data && props.data.__super) { // 这个用法很少,当 data.__super 值发生变化时,更新 store.data if (!prevProps.data || (0, helper_1.isObjectShallowModified)(props.data.__super, prevProps.data.__super, false)) { store.initData((0, helper_1.createObject)(props.data.__super, (0, tslib_1.__assign)((0, tslib_1.__assign)({}, props.data), store === null || store === void 0 ? void 0 : store.data)), store.storeType === 'FormStore' && ((_f = prevProps.store) === null || _f === void 0 ? void 0 : _f.storeType) === 'CRUDStore'); } // nextProps.data.__super !== props.data.__super) && } else if (props.scope && props.data === ((_g = props.store) === null || _g === void 0 ? void 0 : _g.data) && (shouldSync === true || prevProps.data !== props.data)) { // 只有父级数据变动的时候才应该进来, // 目前看来这个 case 很少有情况下能进来 store.initData((0, helper_1.createObject)(props.scope, (0, tslib_1.__assign)({}, store === null || store === void 0 ? void 0 : store.data))); } }; StoreFactory.prototype.componentWillUnmount = function () { var rootStore = this.context; var store = this.store; rootStore.removeStore(store); // @ts-ignore delete this.store; }; StoreFactory.prototype.renderChild = function (region, node, subProps) { var _a, _b, _c; if (subProps === void 0) { subProps = {}; } var render = this.props.render; return render(region, node, (0, tslib_1.__assign)((0, tslib_1.__assign)({ data: (_a = this.store) === null || _a === void 0 ? void 0 : _a.data, dataUpdatedAt: (_b = this.store) === null || _b === void 0 ? void 0 : _b.updatedAt }, subProps), { scope: (_c = this.store) === null || _c === void 0 ? void 0 : _c.data, store: this.store })); }; StoreFactory.prototype.render = function () { var _a, _b, _c, _d; var _e = this.props, detectField = _e.detectField, rest = (0, tslib_1.__rest)(_e, ["detectField"]); var exprProps = {}; if (!detectField || detectField === 'data') { exprProps = (0, filter_schema_1.default)(rest, (_a = this.store) === null || _a === void 0 ? void 0 : _a.data, undefined, rest); if ((exprProps === null || exprProps === void 0 ? void 0 : exprProps.hidden) || (exprProps === null || exprProps === void 0 ? void 0 : exprProps.visible) === false) { return null; } } return (react_1.default.createElement(Component, (0, tslib_1.__assign)({}, rest /* todo */, exprProps, { ref: this.refFn, data: (_b = this.store) === null || _b === void 0 ? void 0 : _b.data, dataUpdatedAt: (_c = this.store) === null || _c === void 0 ? void 0 : _c.updatedAt, store: this.store, scope: (_d = this.store) === null || _d === void 0 ? void 0 : _d.data, render: this.renderChild }))); }; var _a; StoreFactory.displayName = "WithStore(" + (Component.displayName || Component.name) + ")"; StoreFactory.ComposedComponent = Component; StoreFactory.contextType = WithRootStore_1.RootStoreContext; StoreFactory = (0, tslib_1.__decorate)([ mobx_react_1.observer, (0, tslib_1.__metadata)("design:paramtypes", [Object, typeof (_a = typeof react_1.default !== "undefined" && react_1.default.ContextType) === "function" ? _a : Object]) ], StoreFactory); return StoreFactory; }(react_1.default.Component)); (0, hoist_non_react_statics_1.default)(StoreFactory, Component); return StoreFactory; }; } exports.HocStoreFactory = HocStoreFactory; //# sourceMappingURL=./WithStore.js.map