UNPKG

amis

Version:

一种MIS页面生成工具

158 lines (157 loc) 7.07 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); var react_1 = tslib_1.__importDefault(require("react")); var factory_1 = require("../factory"); var service_1 = require("../store/service"); var tpl_1 = require("../utils/tpl"); var Scoped_1 = require("../Scoped"); var api_1 = require("../utils/api"); var components_1 = require("../components"); var Service = /** @class */ (function (_super) { tslib_1.__extends(Service, _super); function Service(props) { var _this = _super.call(this, props) || this; _this.handleQuery = _this.handleQuery.bind(_this); _this.reload = _this.reload.bind(_this); _this.silentReload = _this.silentReload.bind(_this); _this.initInterval = _this.initInterval.bind(_this); return _this; } Service.prototype.componentDidMount = function () { var _a = this.props, schemaApi = _a.schemaApi, initFetchSchema = _a.initFetchSchema, api = _a.api, initFetch = _a.initFetch, initFetchOn = _a.initFetchOn, store = _a.store, _b = _a.messages, fetchSuccess = _b.fetchSuccess, fetchFailed = _b.fetchFailed; this.mounted = true; if (api_1.isEffectiveApi(schemaApi, store.data, initFetchSchema)) { store.fetchSchema(schemaApi, store.data, { successMessage: fetchSuccess, errorMessage: fetchFailed }); } if (api_1.isEffectiveApi(api, store.data, initFetch, initFetchOn)) { store .fetchInitData(api, store.data, { successMessage: fetchSuccess, errorMessage: fetchFailed }) .then(this.initInterval); } }; Service.prototype.componentDidUpdate = function (prevProps) { var props = this.props; var store = props.store; var _a = props.messages, fetchSuccess = _a.fetchSuccess, fetchFailed = _a.fetchFailed; api_1.isApiOutdated(prevProps.api, props.api, prevProps.data, props.data) && store .fetchData(props.api, store.data, { successMessage: fetchSuccess, errorMessage: fetchFailed }) .then(this.initInterval); api_1.isApiOutdated(prevProps.schemaApi, props.schemaApi, prevProps.data, props.data) && store .fetchSchema(props.schemaApi, store.data, { successMessage: fetchSuccess, errorMessage: fetchFailed }) .then(this.initInterval); }; Service.prototype.componentWillUnmount = function () { this.mounted = false; clearTimeout(this.timer); }; Service.prototype.initInterval = function (value) { var _a = this.props, interval = _a.interval, silentPolling = _a.silentPolling, stopAutoRefreshWhen = _a.stopAutoRefreshWhen, data = _a.data; interval && this.mounted && (!stopAutoRefreshWhen || !tpl_1.evalExpression(stopAutoRefreshWhen, data)) && (this.timer = setTimeout(silentPolling ? this.silentReload : this.reload, Math.max(interval, 3000))); return value; }; Service.prototype.reload = function (subpath, query, ctx, silent) { if (query) { return this.receive(query); } var _a = this.props, schemaApi = _a.schemaApi, initFetchSchema = _a.initFetchSchema, api = _a.api, initFetch = _a.initFetch, initFetchOn = _a.initFetchOn, store = _a.store, _b = _a.messages, fetchSuccess = _b.fetchSuccess, fetchFailed = _b.fetchFailed; clearTimeout(this.timer); if (api_1.isEffectiveApi(schemaApi, store.data)) { store .fetchSchema(schemaApi, store.data, { successMessage: fetchSuccess, errorMessage: fetchFailed }) .then(this.initInterval); } if (api_1.isEffectiveApi(api, store.data)) { store .fetchData(api, store.data, { silent: silent, successMessage: fetchSuccess, errorMessage: fetchFailed }) .then(this.initInterval); } }; Service.prototype.silentReload = function (target, query) { this.reload(target, query, undefined, true); }; Service.prototype.receive = function (values) { var store = this.props.store; store.updateData(values); this.reload(); }; Service.prototype.handleQuery = function (query) { this.receive(query); }; Service.prototype.renderBody = function () { var _a = this.props, render = _a.render, store = _a.store, schema = _a.body, cx = _a.classnames; return (react_1.default.createElement("div", { className: cx('Service-body') }, render('body', store.schema || schema, { key: store.schemaKey || 'body', onQuery: this.handleQuery }))); }; Service.prototype.render = function () { var _a = this.props, className = _a.className, store = _a.store, render = _a.render, ns = _a.classPrefix, cx = _a.classnames; return (react_1.default.createElement("div", { className: cx(ns + "Service", className) }, store.error ? (react_1.default.createElement("div", { className: cx("Alert Alert--danger") }, react_1.default.createElement("button", { className: cx('Alert-close'), onClick: function () { return store.updateMessage(''); }, type: "button" }, react_1.default.createElement("span", null, "\u00D7")), store.msg)) : null, this.renderBody(), react_1.default.createElement(components_1.Spinner, { size: "lg", overlay: true, key: "info", show: store.loading }))); }; Service.defaultProps = { messages: { fetchFailed: '初始化失败' } }; Service.propsList = []; return Service; }(react_1.default.Component)); exports.default = Service; var ServiceRenderer = /** @class */ (function (_super) { tslib_1.__extends(ServiceRenderer, _super); function ServiceRenderer() { return _super !== null && _super.apply(this, arguments) || this; } ServiceRenderer.prototype.componentWillMount = function () { // super.componentWillMount(); var scoped = this.context; scoped.registerComponent(this); }; ServiceRenderer.prototype.componentWillUnmount = function () { _super.prototype.componentWillUnmount.call(this); var scoped = this.context; scoped.unRegisterComponent(this); }; ServiceRenderer.contextType = Scoped_1.ScopedContext; ServiceRenderer = tslib_1.__decorate([ factory_1.Renderer({ test: /(^|\/)service$/, storeType: service_1.ServiceStore.name, name: 'service' }) ], ServiceRenderer); return ServiceRenderer; }(Service)); exports.ServiceRenderer = ServiceRenderer; //# sourceMappingURL=./renderers/Service.js.map