fastlion-amis
Version:
一种MIS页面生成工具
440 lines (439 loc) • 21.2 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.ServiceStore = void 0;
var tslib_1 = require("tslib");
var mobx_state_tree_1 = require("mobx-state-tree");
var iRenderer_1 = require("./iRenderer");
var helper_1 = require("../utils/helper");
var errors_1 = require("../utils/errors");
var api_1 = require("../utils/api");
exports.ServiceStore = iRenderer_1.iRendererStore
.named('ServiceStore')
.props({
msg: '',
error: false,
fetching: false,
saving: false,
busying: false,
checking: false,
initializing: false,
schema: mobx_state_tree_1.types.optional(mobx_state_tree_1.types.frozen(), null),
schemaKey: ''
})
.views(function (self) { return ({
get loading() {
return self.fetching || self.saving || self.busying || self.initializing;
}
}); })
.actions(function (self) {
var fetchCancel;
var fetchSchemaCancel;
function markFetching(fetching) {
if (fetching === void 0) { fetching = true; }
self.fetching = fetching;
}
function markSaving(saving) {
if (saving === void 0) { saving = true; }
self.saving = saving;
}
function markBusying(busying) {
if (busying === void 0) { busying = true; }
self.busying = busying;
}
function reInitData(data, replace) {
if (replace === void 0) { replace = false; }
var newData = (0, helper_1.extendObject)(self.pristine, data, !replace);
self.data = self.pristine = newData;
}
function updateMessage(msg, error) {
if (error === void 0) { error = false; }
self.msg = (msg && String(msg)) || '';
self.error = error;
}
function clearMessage() {
updateMessage('');
}
var fetchInitData = (0, mobx_state_tree_1.flow)(function getInitData(api, data, options) {
var json, replace, data_1, ret, e_1, env, message;
var _a, _b, _c, _d;
return (0, tslib_1.__generator)(this, function (_e) {
switch (_e.label) {
case 0:
_e.trys.push([0, 6, , 7]);
if (fetchCancel) {
fetchCancel();
fetchCancel = null;
self.fetching = false;
}
if (self.fetching) {
return [2 /*return*/];
}
// if (!!(options?.markFetching && options?.setFormLoading)) {
// options?.setFormLoading?.(true)
// }
// Jay
// options?.markFetching:表单下多个tab页的service组件一起发起请求时loading的控制
// (options && options.silent) || markFetching(true);
(options && options.silent) || markFetching((_a = options === null || options === void 0 ? void 0 : options.markFetching) !== null && _a !== void 0 ? _a : true);
return [4 /*yield*/, (0, mobx_state_tree_1.getEnv)(self).fetcher(api, data, (0, tslib_1.__assign)((0, tslib_1.__assign)({}, options), { cancelExecutor: function (executor) { return (fetchCancel = executor); } }))];
case 1:
json = _e.sent();
fetchCancel = null;
if (!!json.ok) return [3 /*break*/, 2];
updateMessage((_b = json.msg) !== null && _b !== void 0 ? _b : (options && options.errorMessage), true);
(0, mobx_state_tree_1.getEnv)(self).notify('error', json.msg, json.msgTimeout !== undefined
? {
closeButton: true,
timeout: json.msgTimeout
}
: undefined);
return [3 /*break*/, 5];
case 2:
self.updatedAt = Date.now();
replace = !!api.replaceData;
data_1 = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, (replace ? {} : self.data)), (0, api_1.normalizeApiResponseData)(json.data));
reInitData(data_1, replace);
self.hasRemoteData = true;
// Jay
(options === null || options === void 0 ? void 0 : options.markFetching) &&
((_c = options === null || options === void 0 ? void 0 : options.setFormLoading) === null || _c === void 0 ? void 0 : _c.call(options, false));
if (!(options && options.onSuccess)) return [3 /*break*/, 4];
ret = options.onSuccess(json);
if (!(ret && ret.then)) return [3 /*break*/, 4];
return [4 /*yield*/, ret];
case 3:
_e.sent();
_e.label = 4;
case 4:
updateMessage((_d = json.msg) !== null && _d !== void 0 ? _d : (options && options.successMessage));
// 配置了获取成功提示后提示,默认是空不会提示。
options &&
options.successMessage &&
(0, mobx_state_tree_1.getEnv)(self).notify('success', self.msg);
_e.label = 5;
case 5:
markFetching(false);
// if (!!(options?.markFetching && options?.setFormLoading)) {
// options?.setFormLoading?.(false)
// }
return [2 /*return*/, json];
case 6:
e_1 = _e.sent();
env = (0, mobx_state_tree_1.getEnv)(self);
// if (!!(options?.markFetching && options?.setFormLoading)) {
// options?.setFormLoading?.(false)
// }
if (!(0, mobx_state_tree_1.isAlive)(self) || self.disposed) {
return [2 /*return*/];
}
if (env.isCancel(e_1)) {
return [2 /*return*/];
}
markFetching(false);
e_1.stack && console.error(e_1.stack);
message = e_1.message || e_1;
if (e_1 && e_1.message === 'Network Error') {
message = self.__('networkError');
}
env.notify('error', message);
return [2 /*return*/];
case 7: return [2 /*return*/];
}
});
});
var fetchWSData = function (ws, afterDataFetch) {
var env = (0, mobx_state_tree_1.getEnv)(self);
env.wsFetcher(ws, function (data) {
self.updateData(data, undefined, false);
setHasRemoteData();
// 因为 WebSocket 只会获取纯数据,所以没有 msg 之类的
afterDataFetch({ ok: true, data: data });
}, function (error) {
updateMessage(error, true);
env.notify('error', error);
});
};
var setHasRemoteData = function () {
self.hasRemoteData = true;
};
var fetchData = (0, mobx_state_tree_1.flow)(function getInitData(api, data, options) {
var json, ret, e_2, env, message;
var _a, _b;
return (0, tslib_1.__generator)(this, function (_c) {
switch (_c.label) {
case 0:
_c.trys.push([0, 6, , 7]);
if (fetchCancel) {
fetchCancel();
fetchCancel = null;
self.fetching = false;
}
if (self.fetching) {
return [2 /*return*/];
}
(options && options.silent) || markFetching(true);
return [4 /*yield*/, (0, mobx_state_tree_1.getEnv)(self).fetcher(api, data, (0, tslib_1.__assign)((0, tslib_1.__assign)({}, options), { cancelExecutor: function (executor) { return (fetchCancel = executor); } }))];
case 1:
json = _c.sent();
fetchCancel = null;
if (!(0, helper_1.isEmpty)(json.data) || json.ok) {
self.updatedAt = Date.now();
json.data &&
self.updateData((0, api_1.normalizeApiResponseData)(json.data), undefined, !!api.replaceData);
self.hasRemoteData = true;
}
if (!!json.ok) return [3 /*break*/, 2];
updateMessage((_a = json.msg) !== null && _a !== void 0 ? _a : (options && options.errorMessage), true);
(0, mobx_state_tree_1.getEnv)(self).notify('error', self.msg, json.msgTimeout !== undefined
? {
closeButton: true,
timeout: json.msgTimeout
}
: undefined);
return [3 /*break*/, 5];
case 2:
if (!(options && options.onSuccess)) return [3 /*break*/, 4];
ret = options.onSuccess(json);
if (!(ret && ret.then)) return [3 /*break*/, 4];
return [4 /*yield*/, ret];
case 3:
_c.sent();
_c.label = 4;
case 4:
updateMessage((_b = json.msg) !== null && _b !== void 0 ? _b : (options && options.successMessage));
// 配置了获取成功提示后提示,默认是空不会提示。
options &&
options.successMessage &&
(0, mobx_state_tree_1.getEnv)(self).notify('success', self.msg);
_c.label = 5;
case 5:
markFetching(false);
return [2 /*return*/, json];
case 6:
e_2 = _c.sent();
env = (0, mobx_state_tree_1.getEnv)(self);
if (!(0, mobx_state_tree_1.isAlive)(self) || self.disposed) {
return [2 /*return*/];
}
if (env.isCancel(e_2)) {
return [2 /*return*/];
}
markFetching(false);
e_2.stack && console.error(e_2.stack);
message = e_2.message || e_2;
if (e_2 && e_2.message === 'Network Error') {
message = self.__('networkError');
}
env.notify('error', message);
return [2 /*return*/];
case 7: return [2 /*return*/];
}
});
});
var saveRemote = (0, mobx_state_tree_1.flow)(function saveRemote(api, data, options) {
var json, ret, ret, e_3, result;
var _a, _b, _c;
if (options === void 0) { options = {}; }
return (0, tslib_1.__generator)(this, function (_d) {
switch (_d.label) {
case 0:
_d.trys.push([0, 8, , 9]);
options = (0, tslib_1.__assign)({ method: 'post' }, options);
if (!self.saving) {
return [2 /*return*/];
}
markSaving(true);
return [4 /*yield*/, (0, mobx_state_tree_1.getEnv)(self).fetcher(api, data, options)];
case 1:
json = _d.sent();
if (!(0, helper_1.isEmpty)(json.data) || json.ok) {
self.updatedAt = Date.now();
json.data &&
self.updateData((0, api_1.normalizeApiResponseData)(json.data), undefined, !!api.replaceData);
}
if (!!json.ok) return [3 /*break*/, 4];
if (!(options && options.onFailed)) return [3 /*break*/, 3];
ret = options.onFailed(json);
if (!(ret && ret.then)) return [3 /*break*/, 3];
return [4 /*yield*/, ret];
case 2:
_d.sent();
_d.label = 3;
case 3:
updateMessage((_b = (_a = json.msg) !== null && _a !== void 0 ? _a : (options && options.errorMessage)) !== null && _b !== void 0 ? _b : self.__('saveFailed'), true);
throw new errors_1.ServerError(self.msg, json);
case 4:
if (!(options && options.onSuccess)) return [3 /*break*/, 6];
ret = options.onSuccess(json);
if (!(ret && ret.then)) return [3 /*break*/, 6];
return [4 /*yield*/, ret];
case 5:
_d.sent();
_d.label = 6;
case 6:
updateMessage((_c = json.msg) !== null && _c !== void 0 ? _c : (options && options.successMessage));
self.msg &&
(0, mobx_state_tree_1.getEnv)(self).notify('success', self.msg, json.msgTimeout !== undefined
? {
closeButton: true,
timeout: json.msgTimeout
}
: undefined);
_d.label = 7;
case 7:
markSaving(false);
return [2 /*return*/, json.data];
case 8:
e_3 = _d.sent();
self.saving = false;
if (!(0, mobx_state_tree_1.isAlive)(self) || self.disposed) {
return [2 /*return*/];
}
if (e_3.type === 'ServerError') {
result = e_3.response;
(0, mobx_state_tree_1.getEnv)(self).notify('error', e_3.message, result.msgTimeout !== undefined
? {
closeButton: true,
timeout: result.msgTimeout
}
: undefined);
}
else {
(0, mobx_state_tree_1.getEnv)(self).notify('error', e_3.message);
}
throw e_3;
case 9: return [2 /*return*/];
}
});
});
var fetchSchema = (0, mobx_state_tree_1.flow)(function fetchSchema(api, data, options, notify) {
var json, e_4, env, message;
var _a, _b, _c;
if (options === void 0) { options = {}; }
return (0, tslib_1.__generator)(this, function (_d) {
switch (_d.label) {
case 0:
_d.trys.push([0, 2, , 3]);
options = (0, tslib_1.__assign)((0, tslib_1.__assign)({ method: 'post' }, options), { cancelExecutor: function (executor) { return (fetchSchemaCancel = executor); } });
if (fetchSchemaCancel) {
fetchSchemaCancel();
fetchSchemaCancel = null;
self.initializing = false;
}
if (self.initializing) {
return [2 /*return*/];
}
// if (!!( options?.setFormLoading)) {
// options?.setFormLoading?.(true)
// }
self.initializing = true;
if (typeof api === 'string') {
api += (~api.indexOf('?') ? '&' : '?') + '_replace=1';
}
else {
api = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, api), { url: api.url +
(~api.url.indexOf('?') ? '&' : '?') +
'_replace=1' });
}
return [4 /*yield*/, (0, mobx_state_tree_1.getEnv)(self).fetcher(api, data, options)];
case 1:
json = _d.sent();
fetchSchemaCancel = null;
if (!json.ok) {
updateMessage((_b = (_a = json.msg) !== null && _a !== void 0 ? _a : (options && options.errorMessage)) !== null && _b !== void 0 ? _b : self.__('fetchFailed'), true);
(0, mobx_state_tree_1.getEnv)(self).notify('error', self.msg, json.msgTimeout !== undefined
? {
closeButton: true,
timeout: json.msgTimeout
}
: undefined);
}
else {
if (json.data) {
self.schema = Array.isArray(json.data)
? json.data
: (0, tslib_1.__assign)({ type: 'wrapper', wrap: false }, (0, api_1.normalizeApiResponseData)(json.data));
self.schemaKey = '' + Date.now();
(0, helper_1.isObject)(json.data.data) &&
self.updateData(json.data.data, undefined, !!api.replaceData);
}
updateMessage((_c = json.msg) !== null && _c !== void 0 ? _c : (options && options.successMessage));
// 配置了获取成功提示后提示,默认是空不会提示。
!notify && options &&
options.successMessage &&
(0, mobx_state_tree_1.getEnv)(self).notify('success', self.msg);
}
self.initializing = false;
// if (!!(options?.setFormLoading)) {
// options?.setFormLoading?.(false)
// }
return [2 /*return*/, json.data];
case 2:
e_4 = _d.sent();
env = (0, mobx_state_tree_1.getEnv)(self);
// if (!!(options?.setFormLoading)) {
// options?.setFormLoading?.(false)
// }
self.initializing = false;
if (!(0, mobx_state_tree_1.isAlive)(self) || self.disposed) {
return [2 /*return*/];
}
if (env.isCancel(e_4)) {
return [2 /*return*/];
}
e_4.stack && console.error(e_4.stack);
message = e_4.message || e_4;
if (e_4 && e_4.message === 'Network Error') {
message = self.__('networkError');
}
env.notify('error', message);
return [3 /*break*/, 3];
case 3: return [2 /*return*/];
}
});
});
var checkRemote = (0, mobx_state_tree_1.flow)(function checkRemote(api, data, options) {
var json;
return (0, tslib_1.__generator)(this, function (_a) {
switch (_a.label) {
case 0:
if (self.checking) {
return [2 /*return*/];
}
_a.label = 1;
case 1:
_a.trys.push([1, , 3, 4]);
self.checking = true;
return [4 /*yield*/, (0, mobx_state_tree_1.getEnv)(self).fetcher(api, data, options)];
case 2:
json = _a.sent();
json.ok &&
self.updateData(json.data, undefined, !!api.replaceData);
if (!json.ok) {
throw new Error(json.msg);
}
return [2 /*return*/, json.data];
case 3:
self.checking = false;
return [7 /*endfinally*/];
case 4: return [2 /*return*/];
}
});
});
return {
markFetching: markFetching,
markSaving: markSaving,
markBusying: markBusying,
fetchInitData: fetchInitData,
fetchData: fetchData,
fetchWSData: fetchWSData,
reInitData: reInitData,
updateMessage: updateMessage,
clearMessage: clearMessage,
setHasRemoteData: setHasRemoteData,
saveRemote: saveRemote,
fetchSchema: fetchSchema,
checkRemote: checkRemote
};
});
//# sourceMappingURL=./store/service.js.map