UNPKG

fastlion-amis

Version:

一种MIS页面生成工具

822 lines (821 loc) 41.3 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.WizardRenderer = void 0; var tslib_1 = require("tslib"); var react_1 = (0, tslib_1.__importDefault)(require("react")); var Scoped_1 = require("../Scoped"); var factory_1 = require("../factory"); var service_1 = require("../store/service"); var types_1 = require("../types"); var tpl_1 = require("../utils/tpl"); var helper_1 = require("../utils/helper"); var api_1 = require("../utils/api"); var components_1 = require("../components"); var icons_1 = require("../components/icons"); var react_dom_1 = require("react-dom"); var resize_sensor_1 = require("../utils/resize-sensor"); var tpl_builtin_1 = require("../utils/tpl-builtin"); var Wizard = /** @class */ (function (_super) { (0, tslib_1.__extends)(Wizard, _super); function Wizard() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.affixDom = react_1.default.createRef(); _this.footerDom = react_1.default.createRef(); _this.initalValues = {}; _this.state = { currentStep: -1, completeStep: -1 }; return _this; } Wizard.prototype.componentDidMount = function () { var _this = this; var _a = this.props, initApi = _a.initApi, initFetch = _a.initFetch, initAsyncApi = _a.initAsyncApi, initFinishedField = _a.initFinishedField, store = _a.store, _b = _a.messages, fetchSuccess = _b.fetchSuccess, fetchFailed = _b.fetchFailed, onInit = _a.onInit; if ((0, api_1.isEffectiveApi)(initApi, store.data, initFetch)) { store .fetchInitData(initApi, store.data, { successMessage: fetchSuccess, errorMessage: fetchFailed, onSuccess: function () { if (!(0, api_1.isEffectiveApi)(initAsyncApi, store.data) || store.data[initFinishedField || 'finished']) { return; } return (0, helper_1.until)(function () { return store.checkRemote(initAsyncApi, store.data); }, function (ret) { return ret && ret[initFinishedField || 'finished']; }, function (cancel) { return (_this.asyncCancel = cancel); }); } }) .then(function (value) { onInit && onInit(store.data); var state = { currentStep: typeof _this.props.startStep === 'string' ? parseInt((0, tpl_builtin_1.tokenize)(_this.props.startStep, _this.props.data)) : 1 }; if (value && value.data && (typeof value.data.step === 'number' || (typeof value.data.step === 'string' && /^\d+$/.test(value.data.step)))) { state.currentStep = parseInt(value.data.step, 10); } _this.setState(state, function () { // 如果 initApi 返回的状态是正在提交,则进入轮顺状态。 if (value && value.data && (value.data.submiting || value.data.submited)) { _this.checkSubmit(); } }); return value; }); } else { this.setState({ currentStep: typeof this.props.startStep === 'string' ? parseInt((0, tpl_builtin_1.tokenize)(this.props.startStep, this.props.data)) : 1 }, function () { return onInit && onInit(store.data); }); } var dom = (0, react_dom_1.findDOMNode)(this); if (!(dom instanceof Element)) { return; } var parent = dom ? (0, helper_1.getScrollParent)(dom) : null; if (!parent || parent === document.body) { parent = window; } this.parentNode = parent; parent.addEventListener('scroll', this.affixDetect); this.unSensor = (0, resize_sensor_1.resizeSensor)(dom, this.affixDetect); this.affixDetect(); }; Wizard.prototype.componentDidUpdate = function (prevProps, prevState) { var props = this.props; var store = props.store, fetchSuccess = props.fetchSuccess, fetchFailed = props.fetchFailed, mode = props.mode; if ((0, api_1.isApiOutdated)(prevProps.initApi, props.initApi, prevProps.data, props.data)) { store.fetchData(props.initApi, store.data, { successMessage: fetchSuccess, errorMessage: fetchFailed }); } if (prevState.currentStep !== this.state.currentStep && prevState.currentStep !== -1 && (0, helper_1.isMobile)() && mode === 'horizontal') { var ul = this.dom.querySelector('.step-ul'); ul === null || ul === void 0 ? void 0 : ul.scrollTo({ left: 90 * (this.state.currentStep - 1) }); } }; Wizard.prototype.componentWillUnmount = function () { this.asyncCancel && this.asyncCancel(); var parent = this.parentNode; parent && parent.removeEventListener('scroll', this.affixDetect); this.unSensor && this.unSensor(); }; Wizard.prototype.affixDetect = function () { if (!this.props.affixFooter || !this.affixDom.current || !this.footerDom.current) { return; } var affixDom = this.affixDom.current; var footerDom = this.footerDom.current; var affixed = false; footerDom.offsetWidth && (affixDom.style.cssText = "width: " + footerDom.offsetWidth + "px;"); if (this.props.affixFooter === 'always') { affixed = true; footerDom.classList.add('invisible2'); } else { var clip = footerDom.getBoundingClientRect(); var clientHeight = window.innerHeight; affixed = clip.top + clip.height / 2 > clientHeight; } affixed ? affixDom.classList.add('in') : affixDom.classList.remove('in'); }; Wizard.prototype.gotoStep = function (index) { var steps = this.props.steps || []; index = Math.max(Math.min(steps.length, index), 1); if (index != this.state.currentStep) { this.setState({ currentStep: index, completeStep: Math.max(this.state.completeStep, index - 1) }); } }; Wizard.prototype.formRef = function (ref) { if (ref) { while (ref && ref.getWrappedInstance) { ref = ref.getWrappedInstance(); } this.form = ref; } else { this.form = undefined; } }; Wizard.prototype.submitToTarget = function (target, values) { throw new Error('Please implements this!'); }; Wizard.prototype.reloadTarget = function (target, data) { throw new Error('Please implements this!'); }; Wizard.prototype.reload = function (subPath, query, ctx) { var _this = this; if (query) { return this.receive(query); } var _a = this.props, initApi = _a.initApi, initAsyncApi = _a.initAsyncApi, initFinishedField = _a.initFinishedField, store = _a.store, _b = _a.messages, fetchSuccess = _b.fetchSuccess, fetchFailed = _b.fetchFailed; if ((0, api_1.isEffectiveApi)(initApi, store.data) && this.state.currentStep === 1) { store .fetchInitData(initApi, store.data, { successMessage: fetchSuccess, errorMessage: fetchFailed, onSuccess: function () { if (!(0, api_1.isEffectiveApi)(initAsyncApi, store.data) || store.data[initFinishedField || 'finished']) { return; } return (0, helper_1.until)(function () { return store.checkRemote(initAsyncApi, store.data); }, function (ret) { return ret && ret[initFinishedField || 'finished']; }, function (cancel) { return (_this.asyncCancel = cancel); }); } }) .then(function (value) { var state = { currentStep: 1 }; if (value && value.data && (typeof value.data.step === 'number' || (typeof value.data.step === 'string' && /^\d+$/.test(value.data.step)))) { state.currentStep = parseInt(value.data.step, 10); } _this.setState(state, function () { // 如果 initApi 返回的状态是正在提交,则进入轮顺状态。 if (value && value.data && (value.data.submiting || value.data.submited)) { _this.checkSubmit(); } }); return value; }); } }; Wizard.prototype.receive = function (values) { var store = this.props.store; store.updateData(values); this.reload(); }; Wizard.prototype.domRef = function (ref) { this.dom = ref; }; Wizard.prototype.getPopOverContainer = function () { return this.dom; }; // 用来还原异步提交状态。 Wizard.prototype.checkSubmit = function () { var _a; var _this = this; var _b = this.props, store = _b.store, steps = _b.steps, asyncApi = _b.asyncApi, finishedField = _b.finishedField, env = _b.env; var step = steps[this.state.currentStep - 1]; var finnalAsyncApi = (step && step.asyncApi) || (this.state.currentStep === steps.length && asyncApi); if (!step || !(0, api_1.isEffectiveApi)(finnalAsyncApi, store.data)) { return; } store.markSaving(true); store.updateData((_a = {}, _a[finishedField || 'finished'] = false, _a)); (0, helper_1.until)(function () { return store.checkRemote(finnalAsyncApi, store.data); }, function (ret) { return ret && ret[finishedField || 'finished']; }, function (cancel) { return (_this.asyncCancel = cancel); }) .then(function () { store.markSaving(false); _this.gotoStep(_this.state.currentStep + 1); }) .catch(function (e) { env.notify('error', e.message); store.markSaving(false); }); }; Wizard.prototype.handleAction = function (e, action, data, throwErrors, delegate) { var _this = this; if (throwErrors === void 0) { throwErrors = false; } var _a = this.props, onAction = _a.onAction, store = _a.store, env = _a.env; if (action.actionType === 'next' || action.type === 'submit') { if (action.actionType == 'flow_save_drat') { this.form.doAction((0, tslib_1.__assign)({}, action), data); } else this.form.doAction((0, tslib_1.__assign)((0, tslib_1.__assign)({}, action), { actionType: 'submit' }), data); } else if (action.actionType === 'prev') { this.gotoStep(this.state.currentStep - 1); } else if (action.type === 'reset') { this.form.reset(); } else if (action.actionType === 'dialog') { store.setCurrentAction(action); store.openDialog(data); } else if (action.actionType === 'ajax') { if (!action.api) { return env.alert("\u5F53 actionType \u4E3A ajax \u65F6\uFF0C\u8BF7\u8BBE\u7F6E api \u5C5E\u6027"); } store.markSaving(true); return store .saveRemote(action.api, data, { successMessage: action.messages && action.messages.success, errorMessage: action.messages && action.messages.failed }) .then(function () { return (0, tslib_1.__awaiter)(_this, void 0, void 0, function () { var feedback, confirmed, reidrect, _a, onDialogClose, reload; return (0, tslib_1.__generator)(this, function (_b) { switch (_b.label) { case 0: this.form && this.form.isValidated() && this.form.validate(true); feedback = action.feedback; if (!(feedback && (0, helper_1.isVisible)(feedback, store.data))) return [3 /*break*/, 2]; return [4 /*yield*/, this.openFeedback(feedback, store.data)]; case 1: confirmed = _b.sent(); // 如果 feedback 配置了,取消就跳过原有逻辑。 if (feedback.skipRestOnCancel && !confirmed) { throw new helper_1.SkipOperation(); } else if (feedback.skipRestOnConfirm && confirmed) { throw new helper_1.SkipOperation(); } _b.label = 2; case 2: reidrect = action.redirect && (0, tpl_1.filter)(action.redirect, store.data); reidrect && env.jumpTo(reidrect, action); action.reload && this.reloadTarget(action.reload, store.data); if (action.close) { _a = this.props, onDialogClose = _a.onDialogClose, reload = _a.reload; onDialogClose(); reload && this.reloadTarget(reload, store.data); } return [2 /*return*/]; } }); }); }) .catch(function (reason) { if (reason instanceof helper_1.SkipOperation) { return; } }); } else if (action.actionType === 'reload') { action.target && this.reloadTarget(action.target, data); } else if (onAction) { onAction(e, action, data, throwErrors, delegate || this.context); } }; Wizard.prototype.handleQuery = function (query) { var _a, _b; if (this.props.initApi) { this.receive(query); } else { (_b = (_a = this.props).onQuery) === null || _b === void 0 ? void 0 : _b.call(_a, query); } }; Wizard.prototype.openFeedback = function (dialog, ctx) { var _this = this; return new Promise(function (resolve) { var store = _this.props.store; store.setCurrentAction({ type: 'button', actionType: 'dialog', dialog: dialog }); store.openDialog(ctx, undefined, function (confirmed) { resolve(confirmed); }); }); }; Wizard.prototype.handleChange = function (values) { var store = this.props.store; store.updateData(values); }; Wizard.prototype.handleInit = function (values) { var step = this.state.currentStep; this.initalValues[step] = this.initalValues[step] || values; var store = this.props.store; store.updateData(values); }; Wizard.prototype.handleReset = function (values) { var store = this.props.store; var initalValue = this.initalValues[this.state.currentStep]; var reseted = {}; Object.keys(values).forEach(function (key) { reseted[key] = initalValue.hasOwnProperty(key) ? initalValue[key] : undefined; }); store.updateData(reseted); }; // 接管里面 form 的提交,不能直接让 form 提交,因为 wizard 自己需要知道进度。 Wizard.prototype.handleSubmit = function (values, action) { var _a, _b; var _this = this; var _c = this.props, store = _c.store, steps = _c.steps, api = _c.api, asyncApi = _c.asyncApi, finishedField = _c.finishedField, target = _c.target, redirect = _c.redirect, reload = _c.reload, env = _c.env, onFinished = _c.onFinished; var step = steps[this.state.currentStep - 1]; store.updateData(values); if (this.state.currentStep < steps.length) { var finnalAsyncApi_1 = action.asyncApi || step.asyncApi; (0, api_1.isEffectiveApi)(finnalAsyncApi_1, store.data) && store.updateData((_a = {}, _a[finishedField || 'finished'] = false, _a)); if ((0, api_1.isEffectiveApi)(action.api || step.api, store.data)) { // const formStore = this.form // ? (this.form.props.store as IFormStore) // : store; store.markSaving(true); store .saveRemote(action.api || step.api, store.data, { onSuccess: function () { if (!(0, api_1.isEffectiveApi)(finnalAsyncApi_1, store.data) || store.data[finishedField || 'finished']) { return; } return (0, helper_1.until)(function () { return store.checkRemote(finnalAsyncApi_1, store.data); }, function (ret) { return ret && ret[finishedField || 'finished']; }, function (cancel) { return (_this.asyncCancel = cancel); }); }, onFailed: function (json) { if (json.status === 422 && json.errors && _this.form) { _this.form.props.store.handleRemoteError(json.errors); } } }) .then(function (value) { return (0, tslib_1.__awaiter)(_this, void 0, void 0, function () { var feedback, confirmed; return (0, tslib_1.__generator)(this, function (_a) { switch (_a.label) { case 0: feedback = action.feedback; if (!(feedback && (0, helper_1.isVisible)(feedback, value))) return [3 /*break*/, 2]; return [4 /*yield*/, this.openFeedback(feedback, value)]; case 1: confirmed = _a.sent(); // 如果 feedback 配置了,取消就跳过原有逻辑。 if (feedback.skipRestOnCancel && !confirmed) { throw new helper_1.SkipOperation(); } else if (feedback.skipRestOnConfirm && confirmed) { throw new helper_1.SkipOperation(); } _a.label = 2; case 2: this.gotoStep(value && typeof value.step === 'number' ? value.step : this.state.currentStep + 1); return [2 /*return*/]; } }); }); }) .catch(function (reason) { if (reason instanceof helper_1.SkipOperation) { return; } // do nothing }); } else { this.gotoStep(this.state.currentStep + 1); } } else { // 最后一步 if (target) { this.submitToTarget(target, store.data); this.setState({ completeStep: steps.length }); } else if (action.api || step.api || api) { var finnalAsyncApi_2 = action.asyncApi || step.asyncApi || asyncApi; (0, api_1.isEffectiveApi)(finnalAsyncApi_2, store.data) && store.updateData((_b = {}, _b[finishedField || 'finished'] = false, _b)); var formStore = this.form ? this.form.props.store : store; store.markSaving(true); formStore .saveRemote(action.api || step.api || api, store.data, { onSuccess: function () { if (!(0, api_1.isEffectiveApi)(finnalAsyncApi_2, store.data) || store.data[finishedField || 'finished']) { return; } return (0, helper_1.until)(function () { return store.checkRemote(finnalAsyncApi_2, store.data); }, function (ret) { return ret && ret[finishedField || 'finished']; }, function (cancel) { return (_this.asyncCancel = cancel); }); } }) .then(function (value) { return (0, tslib_1.__awaiter)(_this, void 0, void 0, function () { var feedback, confirmed, finalRedirect; return (0, tslib_1.__generator)(this, function (_a) { switch (_a.label) { case 0: feedback = action.feedback; if (!(feedback && (0, helper_1.isVisible)(feedback, value))) return [3 /*break*/, 2]; return [4 /*yield*/, this.openFeedback(feedback, value)]; case 1: confirmed = _a.sent(); // 如果 feedback 配置了,取消就跳过原有逻辑。 if (feedback.skipRestOnCancel && !confirmed) { throw new helper_1.SkipOperation(); } else if (feedback.skipRestOnConfirm && confirmed) { throw new helper_1.SkipOperation(); } _a.label = 2; case 2: this.setState({ completeStep: steps.length }); store.updateData((0, tslib_1.__assign)((0, tslib_1.__assign)({}, store.data), value)); store.markSaving(false); if (value && typeof value.step === 'number') { this.gotoStep(value.step); } else if (onFinished && onFinished(value, action) === false) { // 如果是 false 后面的操作就不执行 return [2 /*return*/, value]; } finalRedirect = (action.redirect || step.redirect || redirect) && (0, tpl_1.filter)(action.redirect || step.redirect || redirect, store.data); if (finalRedirect) { env.jumpTo(finalRedirect, action); } else if (action.reload || step.reload || reload) { this.reloadTarget(action.reload || step.reload || reload, store.data); } return [2 /*return*/, value]; } }); }); }) .catch(function (e) { store.markSaving(false); console.error(e); }); } else { if (reload) { this.reloadTarget(reload, store.data); } onFinished && onFinished(store.data, action); this.setState({ completeStep: steps.length }); } } return false; }; Wizard.prototype.handleDialogConfirm = function (values, action, targets) { var store = this.props.store; if (action.mergeData && values.length === 1 && values[0] && targets[0].props.type === 'form') { store.updateData(values[0]); } store.closeDialog(true); }; Wizard.prototype.handleDialogClose = function (confirmed) { if (confirmed === void 0) { confirmed = false; } var store = this.props.store; store.closeDialog(confirmed); }; Wizard.prototype.renderSteps = function () { var _this = this; var _a = this.props, steps = _a.steps, store = _a.store, mode = _a.mode, ns = _a.classPrefix, cx = _a.classnames; var _b = this.state, currentStep = _b.currentStep, completeStep = _b.completeStep; return (react_1.default.createElement("div", { className: ns + "Wizard-steps", id: "form-wizard" }, Array.isArray(steps) && steps.length ? (react_1.default.createElement("ul", { className: 'step-ul' }, steps.map(function (step, key) { var canJump = isJumpable(step, key, currentStep, store.data); var isComplete = canJump || key < completeStep; var isActive = currentStep === key + 1; return (react_1.default.createElement("li", { key: key, className: cx({ 'is-complete': isComplete, 'is-active': isActive }), onClick: function () { return (canJump ? _this.gotoStep(key + 1) : completeStep > key ? _this.gotoStep(key + 1) : null); } }, react_1.default.createElement("span", { className: cx('Badge', { // 'Badge--success': canJump && currentStep != key + 1, 'is-complete': isComplete, 'is-active': isActive || (canJump && currentStep != key + 1) }) }, isComplete && !isActive ? (react_1.default.createElement(icons_1.Icon, { icon: "check", className: "icon" })) : (key + 1)), react_1.default.createElement("span", null, step.title || step.label || "\u7B2C " + (key + 1) + " \u6B65"))); }))) : null)); }; Wizard.prototype.renderActions = function () { var _this = this; var _a = this.props, steps = _a.steps, store = _a.store, readOnly = _a.readOnly, disabled = _a.disabled, actionClassName = _a.actionClassName, actionPrevLabel = _a.actionPrevLabel, actionNextLabel = _a.actionNextLabel, actionNextSaveLabel = _a.actionNextSaveLabel, actionFinishLabel = _a.actionFinishLabel, render = _a.render, __ = _a.translate; if (!Array.isArray(steps)) { return null; } var currentStepIndex = this.state.currentStep; var nextStep = steps[currentStepIndex]; var prevStep = steps[currentStepIndex - 2]; var waiting = store.loading; var step = steps[currentStepIndex - 1]; if (!step) { return null; } var prevCanJump = prevStep ? isJumpable(prevStep, currentStepIndex - 2, currentStepIndex, store.data) : false; if (step.actions && Array.isArray(step.actions)) { return step.actions.length ? (react_1.default.createElement(react_1.default.Fragment, null, step.actions.map(function (action, index) { return render("action/" + index, action, { key: index, onAction: _this.handleAction, disabled: action.disabled || waiting || disabled || (action.actionType === 'prev' && !prevCanJump) || (action.actionType === 'next' && readOnly && (!!step.api || !nextStep)) }); }))) : null; } return (react_1.default.createElement(react_1.default.Fragment, null, render("prev-btn", { type: 'button', label: __(actionPrevLabel), actionType: 'prev', className: actionClassName }, { disabled: waiting || !prevCanJump || disabled, onAction: this.handleAction }), render("next-btn", { type: 'button', label: !nextStep ? __(actionFinishLabel) : !step.api ? __(actionNextLabel) : __(actionNextSaveLabel), actionType: 'next', primary: !nextStep || !!step.api, className: actionClassName }, { disabled: waiting || disabled || (readOnly && (!!step.api || !nextStep)), onAction: this.handleAction }))); }; Wizard.prototype.renderFooter = function () { var actions = this.renderActions(); if (!actions) { return actions; } var _a = this.props, cx = _a.classnames, affixFooter = _a.affixFooter; return (react_1.default.createElement(react_1.default.Fragment, null, react_1.default.createElement("div", { role: "wizard-footer", ref: this.footerDom, className: cx('Panel-footer Wizard-footer') }, actions), affixFooter ? (react_1.default.createElement("div", { ref: this.affixDom, className: cx('Panel-fixedBottom Wizard-footer') }, react_1.default.createElement("div", { className: cx('Panel-footer') }, actions))) : null)); }; Wizard.prototype.renderWizard = function () { var _a = this.props, className = _a.className, steps = _a.steps, render = _a.render, store = _a.store, ns = _a.classPrefix, cx = _a.classnames, popOverContainer = _a.popOverContainer, mode = _a.mode, __ = _a.translate; var currentStep = this.state.currentStep; var step = Array.isArray(steps) ? steps[currentStep - 1] : null; return (react_1.default.createElement(react_1.default.Fragment, null, react_1.default.createElement("div", { ref: this.domRef, className: cx(ns + "Panel " + ns + "Panel--default " + ns + "Wizard " + ns + "Wizard--" + mode + " " + ns + "Combination", className), id: 'Wizard-Panel' }, react_1.default.createElement("div", { className: ns + "Wizard-step" }, this.renderSteps(), react_1.default.createElement("div", { role: "wizard-body", className: ns + "Wizard-stepContent clearfix" }, step ? (render('body', (0, tslib_1.__assign)((0, tslib_1.__assign)({}, step), { type: 'form', wrapWithPanel: false, // 接口相关需要外部来接管 api: null }), { key: this.state.currentStep, ref: this.formRef, onInit: this.handleInit, onReset: this.handleReset, onSubmit: this.handleSubmit, onAction: this.handleAction, onQuery: this.handleQuery, disabled: store.loading, popOverContainer: popOverContainer || this.getPopOverContainer, onChange: this.handleChange, formStore: undefined })) : currentStep === -1 ? (__('loading')) : (react_1.default.createElement("p", { className: "text-danger" }, __('Wizard.configError'))))), render('dialog', (0, tslib_1.__assign)((0, tslib_1.__assign)({}, (store.action && store.action.dialog)), { type: 'dialog' }), { key: 'dialog', data: store.dialogData, onConfirm: this.handleDialogConfirm, onClose: this.handleDialogClose, show: store.dialogOpen }), react_1.default.createElement(components_1.Spinner, { size: "lg", overlay: true, key: "info", show: store.loading })), this.renderFooter())); }; Wizard.prototype.render = function () { return this.renderWizard(); }; var _a, _b, _c, _d, _e, _f; Wizard.defaultProps = { mode: 'horizontal', readOnly: false, messages: {}, actionClassName: '', actionPrevLabel: 'Wizard.prev', actionNextLabel: 'Wizard.next', actionNextSaveLabel: 'Wizard.saveAndNext', actionFinishLabel: 'Wizard.finish', startStep: '1' }; Wizard.propsList = [ 'steps', 'mode', 'messages', 'actionClassName', 'actionPrevLabel', 'actionNextLabel', 'actionNextSaveLabel', 'actionFinishLabel', 'onFinished', 'affixFooter', 'startStep' ]; (0, tslib_1.__decorate)([ helper_1.autobind, (0, tslib_1.__metadata)("design:type", Function), (0, tslib_1.__metadata)("design:paramtypes", []), (0, tslib_1.__metadata)("design:returntype", void 0) ], Wizard.prototype, "affixDetect", null); (0, tslib_1.__decorate)([ helper_1.autobind, (0, tslib_1.__metadata)("design:type", Function), (0, tslib_1.__metadata)("design:paramtypes", [Object]), (0, tslib_1.__metadata)("design:returntype", void 0) ], Wizard.prototype, "formRef", null); (0, tslib_1.__decorate)([ helper_1.autobind, (0, tslib_1.__metadata)("design:type", Function), (0, tslib_1.__metadata)("design:paramtypes", [Object]), (0, tslib_1.__metadata)("design:returntype", void 0) ], Wizard.prototype, "domRef", null); (0, tslib_1.__decorate)([ helper_1.autobind, (0, tslib_1.__metadata)("design:type", Function), (0, tslib_1.__metadata)("design:paramtypes", []), (0, tslib_1.__metadata)("design:returntype", void 0) ], Wizard.prototype, "getPopOverContainer", null); (0, tslib_1.__decorate)([ helper_1.autobind, (0, tslib_1.__metadata)("design:type", Function), (0, tslib_1.__metadata)("design:paramtypes", [Object, typeof (_b = typeof types_1.Action !== "undefined" && types_1.Action) === "function" ? _b : Object, Object, Boolean, typeof (_c = typeof Scoped_1.IScopedContext !== "undefined" && Scoped_1.IScopedContext) === "function" ? _c : Object]), (0, tslib_1.__metadata)("design:returntype", void 0) ], Wizard.prototype, "handleAction", null); (0, tslib_1.__decorate)([ helper_1.autobind, (0, tslib_1.__metadata)("design:type", Function), (0, tslib_1.__metadata)("design:paramtypes", [Object]), (0, tslib_1.__metadata)("design:returntype", void 0) ], Wizard.prototype, "handleQuery", null); (0, tslib_1.__decorate)([ helper_1.autobind, (0, tslib_1.__metadata)("design:type", Function), (0, tslib_1.__metadata)("design:paramtypes", [Object]), (0, tslib_1.__metadata)("design:returntype", void 0) ], Wizard.prototype, "handleChange", null); (0, tslib_1.__decorate)([ helper_1.autobind, (0, tslib_1.__metadata)("design:type", Function), (0, tslib_1.__metadata)("design:paramtypes", [Object]), (0, tslib_1.__metadata)("design:returntype", void 0) ], Wizard.prototype, "handleInit", null); (0, tslib_1.__decorate)([ helper_1.autobind, (0, tslib_1.__metadata)("design:type", Function), (0, tslib_1.__metadata)("design:paramtypes", [Object]), (0, tslib_1.__metadata)("design:returntype", void 0) ], Wizard.prototype, "handleReset", null); (0, tslib_1.__decorate)([ helper_1.autobind, (0, tslib_1.__metadata)("design:type", Function), (0, tslib_1.__metadata)("design:paramtypes", [Object, typeof (_d = typeof types_1.Action !== "undefined" && types_1.Action) === "function" ? _d : Object]), (0, tslib_1.__metadata)("design:returntype", void 0) ], Wizard.prototype, "handleSubmit", null); (0, tslib_1.__decorate)([ helper_1.autobind, (0, tslib_1.__metadata)("design:type", Function), (0, tslib_1.__metadata)("design:paramtypes", [Array, typeof (_e = typeof types_1.Action !== "undefined" && types_1.Action) === "function" ? _e : Object, typeof (_f = typeof Array !== "undefined" && Array) === "function" ? _f : Object]), (0, tslib_1.__metadata)("design:returntype", void 0) ], Wizard.prototype, "handleDialogConfirm", null); (0, tslib_1.__decorate)([ helper_1.autobind, (0, tslib_1.__metadata)("design:type", Function), (0, tslib_1.__metadata)("design:paramtypes", [Object]), (0, tslib_1.__metadata)("design:returntype", void 0) ], Wizard.prototype, "handleDialogClose", null); return Wizard; }(react_1.default.Component)); exports.default = Wizard; function isJumpable(step, index, currentStep, data) { var canJump = false; if (step && step.hasOwnProperty('jumpable')) { canJump = step.jumpable; } else if (step && step.jumpableOn) { canJump = (0, tpl_1.evalExpression)(step.jumpableOn, (0, helper_1.createObject)(data, { currentStep: currentStep })); } else { canJump = index + 1 < currentStep; } return canJump; } var WizardRenderer = /** @class */ (function (_super) { (0, tslib_1.__extends)(WizardRenderer, _super); function WizardRenderer(props, context) { var _this = _super.call(this, props) || this; var scoped = context; scoped.registerComponent(_this); return _this; } WizardRenderer.prototype.componentWillUnmount = function () { var scoped = this.context; scoped.unRegisterComponent(this); _super.prototype.componentWillUnmount.call(this); }; WizardRenderer.prototype.doAction = function (action, data, throwErrors) { if (throwErrors === void 0) { throwErrors = false; } return this.handleAction(undefined, action, data); }; WizardRenderer.prototype.submitToTarget = function (target, values) { var scoped = this.context; scoped.send(target, values); }; WizardRenderer.prototype.reloadTarget = function (target, data) { var scoped = this.context; scoped.reload(target, data); }; WizardRenderer.prototype.handleDialogConfirm = function (values, action, targets) { _super.prototype.handleDialogConfirm.call(this, values, action, targets); var store = this.props.store; var scoped = this.context; if (action.reload) { scoped.reload(action.reload, store.data); } else if (store.action && store.action.reload) { scoped.reload(store.action.reload, store.data); } }; var _g, _h, _j; WizardRenderer.contextType = Scoped_1.ScopedContext; (0, tslib_1.__decorate)([ helper_1.autobind, (0, tslib_1.__metadata)("design:type", Function), (0, tslib_1.__metadata)("design:paramtypes", [Array, typeof (_g = typeof types_1.Action !== "undefined" && types_1.Action) === "function" ? _g : Object, typeof (_h = typeof Array !== "undefined" && Array) === "function" ? _h : Object]), (0, tslib_1.__metadata)("design:returntype", void 0) ], WizardRenderer.prototype, "handleDialogConfirm", null); WizardRenderer = (0, tslib_1.__decorate)([ (0, factory_1.Renderer)({ type: 'wizard', storeType: service_1.ServiceStore.name, isolateScope: true }), (0, tslib_1.__metadata)("design:paramtypes", [Object, typeof (_j = typeof Scoped_1.IScopedContext !== "undefined" && Scoped_1.IScopedContext) === "function" ? _j : Object]) ], WizardRenderer); return WizardRenderer; }(Wizard)); exports.WizardRenderer = WizardRenderer; //# sourceMappingURL=./renderers/Wizard.js.map