amis-core 1.0.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (211) hide show
  1. package/dist/Root.js +94 -0
  2. package/dist/RootRenderer.js +288 -0
  3. package/dist/SchemaRenderer.js +323 -0
  4. package/dist/Scoped.js +252 -0
  5. package/dist/WithRootStore.js +44 -0
  6. package/dist/WithStore.js +179 -0
  7. package/dist/__tests__/compat.test.d.ts +1 -0
  8. package/dist/__tests__/factory.test.d.ts +1 -0
  9. package/dist/__tests__/filter.test.d.ts +1 -0
  10. package/dist/__tests__/helper.d.ts +13 -0
  11. package/dist/__tests__/tokenize.test.d.ts +1 -0
  12. package/dist/actions/Action.js +119 -0
  13. package/dist/actions/AjaxAction.js +96 -0
  14. package/dist/actions/BreakAction.js +35 -0
  15. package/dist/actions/BroadcastAction.js +49 -0
  16. package/dist/actions/CmptAction.js +60 -0
  17. package/dist/actions/ContinueAction.js +35 -0
  18. package/dist/actions/CopyAction.js +43 -0
  19. package/dist/actions/CustomAction.js +49 -0
  20. package/dist/actions/DialogAction.js +104 -0
  21. package/dist/actions/DrawerAction.js +66 -0
  22. package/dist/actions/EmailAction.js +48 -0
  23. package/dist/actions/LinkAction.js +52 -0
  24. package/dist/actions/LoopAction.js +107 -0
  25. package/dist/actions/PageAction.js +80 -0
  26. package/dist/actions/ParallelAction.js +40 -0
  27. package/dist/actions/SwitchAction.js +52 -0
  28. package/dist/actions/ToastAction.js +35 -0
  29. package/dist/components/LazyComponent.js +99 -0
  30. package/dist/env.js +20 -0
  31. package/dist/envOverwrite.js +43 -0
  32. package/dist/factory.js +308 -0
  33. package/dist/index.js +218 -0
  34. package/dist/index2.js +255 -0
  35. package/dist/locale.js +114 -0
  36. package/dist/renderers/Form.js +1162 -0
  37. package/dist/renderers/Item.js +636 -0
  38. package/dist/renderers/Options.js +881 -0
  39. package/dist/renderers/Placeholder.js +31 -0
  40. package/dist/renderers/builtin.js +27 -0
  41. package/dist/renderers/wrapControl.js +507 -0
  42. package/dist/src/Root.d.ts +37 -0
  43. package/dist/src/RootRenderer.d.ts +27 -0
  44. package/dist/src/SchemaRenderer.d.ts +37 -0
  45. package/dist/src/Scoped.d.ts +38 -0
  46. package/dist/src/WithRootStore.d.ts +737 -0
  47. package/dist/src/WithStore.d.ts +5 -0
  48. package/dist/src/actions/Action.d.ts +38 -0
  49. package/dist/src/actions/AjaxAction.d.ts +25 -0
  50. package/dist/src/actions/BreakAction.d.ts +15 -0
  51. package/dist/src/actions/BroadcastAction.d.ts +16 -0
  52. package/dist/src/actions/CmptAction.d.ts +20 -0
  53. package/dist/src/actions/ContinueAction.d.ts +15 -0
  54. package/dist/src/actions/CopyAction.d.ts +20 -0
  55. package/dist/src/actions/CustomAction.d.ts +17 -0
  56. package/dist/src/actions/Decorators.d.ts +25 -0
  57. package/dist/src/actions/DialogAction.d.ts +57 -0
  58. package/dist/src/actions/DrawerAction.d.ts +30 -0
  59. package/dist/src/actions/EmailAction.d.ts +23 -0
  60. package/dist/src/actions/LinkAction.d.ts +24 -0
  61. package/dist/src/actions/LoopAction.d.ts +19 -0
  62. package/dist/src/actions/PageAction.d.ts +39 -0
  63. package/dist/src/actions/ParallelAction.d.ts +8 -0
  64. package/dist/src/actions/SwitchAction.d.ts +11 -0
  65. package/dist/src/actions/ToastAction.d.ts +19 -0
  66. package/dist/src/actions/index.d.ts +21 -0
  67. package/dist/src/components/LazyComponent.d.ts +32 -0
  68. package/dist/src/env.d.ts +172 -0
  69. package/dist/src/envOverwrite.d.ts +4 -0
  70. package/dist/src/factory.d.ts +78 -0
  71. package/dist/src/index.d.ts +25 -0
  72. package/dist/src/locale.d.ts +82 -0
  73. package/dist/src/renderers/Form.d.ts +352 -0
  74. package/dist/src/renderers/Item.d.ts +795 -0
  75. package/dist/src/renderers/Options.d.ts +150 -0
  76. package/dist/src/renderers/Placeholder.d.ts +6 -0
  77. package/dist/src/renderers/builtin.d.ts +1 -0
  78. package/dist/src/renderers/wrapControl.d.ts +446 -0
  79. package/dist/src/schema.d.ts +369 -0
  80. package/dist/src/store/app.d.ts +89 -0
  81. package/dist/src/store/combo.d.ts +8504 -0
  82. package/dist/src/store/crud.d.ts +124 -0
  83. package/dist/src/store/form.d.ts +3394 -0
  84. package/dist/src/store/formItem.d.ts +130 -0
  85. package/dist/src/store/iRenderer.d.ts +46 -0
  86. package/dist/src/store/index.d.ts +105 -0
  87. package/dist/src/store/list.d.ts +270 -0
  88. package/dist/src/store/manager.d.ts +115 -0
  89. package/dist/src/store/modal.d.ts +84 -0
  90. package/dist/src/store/node.d.ts +22 -0
  91. package/dist/src/store/pagination.d.ts +58 -0
  92. package/dist/src/store/root.d.ts +79 -0
  93. package/dist/src/store/service.d.ts +71 -0
  94. package/dist/src/store/table-v2.d.ts +309 -0
  95. package/dist/src/store/table.d.ts +8334 -0
  96. package/dist/src/theme.d.ts +83 -0
  97. package/dist/src/types.d.ts +217 -0
  98. package/dist/src/utils/Animation.d.ts +22 -0
  99. package/dist/src/utils/ColorScale.d.ts +19 -0
  100. package/dist/src/utils/DataSchema.d.ts +25 -0
  101. package/dist/src/utils/DataScope.d.ts +23 -0
  102. package/dist/src/utils/RootClose.d.ts +4 -0
  103. package/dist/src/utils/SimpleMap.d.ts +8 -0
  104. package/dist/src/utils/api.d.ts +27 -0
  105. package/dist/src/utils/attachmentAdpator.d.ts +7 -0
  106. package/dist/src/utils/autobind.d.ts +7 -0
  107. package/dist/src/utils/columnsSplit.d.ts +1 -0
  108. package/dist/src/utils/dataMapping.d.ts +3 -0
  109. package/dist/src/utils/date.d.ts +4 -0
  110. package/dist/src/utils/debug.d.ts +26 -0
  111. package/dist/src/utils/dom.d.ts +13 -0
  112. package/dist/src/utils/errors.d.ts +6 -0
  113. package/dist/src/utils/escapeHtml.d.ts +1 -0
  114. package/dist/src/utils/filter-schema.d.ts +12 -0
  115. package/dist/src/utils/filter.d.ts +1 -0
  116. package/dist/src/utils/formatDuration.d.ts +1 -0
  117. package/dist/src/utils/formula.d.ts +16 -0
  118. package/dist/src/utils/getVariable.d.ts +3 -0
  119. package/dist/src/utils/grammar.d.ts +4 -0
  120. package/dist/src/utils/handleAction.d.ts +6 -0
  121. package/dist/src/utils/helper.d.ts +286 -0
  122. package/dist/src/utils/icon.d.ts +12 -0
  123. package/dist/src/utils/image.d.ts +17 -0
  124. package/dist/src/utils/index.d.ts +12 -0
  125. package/dist/src/utils/isPureVariable.d.ts +1 -0
  126. package/dist/src/utils/json-schema-2-amis-schema.d.ts +6 -0
  127. package/dist/src/utils/keyToPath.d.ts +6 -0
  128. package/dist/src/utils/makeSorter.d.ts +1 -0
  129. package/dist/src/utils/markdown.d.ts +5 -0
  130. package/dist/src/utils/normalizeLink.d.ts +1 -0
  131. package/dist/src/utils/normalizeOptions.d.ts +7 -0
  132. package/dist/src/utils/object.d.ts +15 -0
  133. package/dist/src/utils/offset.d.ts +14 -0
  134. package/dist/src/utils/offsetParent.d.ts +4 -0
  135. package/dist/src/utils/optionValueCompare.d.ts +3 -0
  136. package/dist/src/utils/position.d.ts +15 -0
  137. package/dist/src/utils/prettyBytes.d.ts +1 -0
  138. package/dist/src/utils/renderer-event.d.ts +44 -0
  139. package/dist/src/utils/replaceText.d.ts +6 -0
  140. package/dist/src/utils/resize-sensor.d.ts +6 -0
  141. package/dist/src/utils/resolveVariable.d.ts +1 -0
  142. package/dist/src/utils/resolveVariableAndFilter.d.ts +1 -0
  143. package/dist/src/utils/scrollPosition.d.ts +6 -0
  144. package/dist/src/utils/string2regExp.d.ts +1 -0
  145. package/dist/src/utils/stripNumber.d.ts +1 -0
  146. package/dist/src/utils/style.d.ts +10 -0
  147. package/dist/src/utils/tokenize.d.ts +1 -0
  148. package/dist/src/utils/tpl-builtin.d.ts +18 -0
  149. package/dist/src/utils/tpl-lodash.d.ts +4 -0
  150. package/dist/src/utils/tpl.d.ts +11 -0
  151. package/dist/src/utils/validations.d.ts +39 -0
  152. package/dist/store/app.js +190 -0
  153. package/dist/store/combo.js +154 -0
  154. package/dist/store/crud.js +413 -0
  155. package/dist/store/form.js +579 -0
  156. package/dist/store/formItem.js +846 -0
  157. package/dist/store/iRenderer.js +189 -0
  158. package/dist/store/index.js +103 -0
  159. package/dist/store/list.js +248 -0
  160. package/dist/store/manager.js +56 -0
  161. package/dist/store/modal.js +54 -0
  162. package/dist/store/node.js +93 -0
  163. package/dist/store/pagination.js +60 -0
  164. package/dist/store/root.js +45 -0
  165. package/dist/store/service.js +415 -0
  166. package/dist/store/table-v2.js +471 -0
  167. package/dist/store/table.js +1105 -0
  168. package/dist/theme.js +93 -0
  169. package/dist/tsconfig.tsbuildinfo +1 -0
  170. package/dist/utils/Animation.js +290 -0
  171. package/dist/utils/DataSchema.js +120 -0
  172. package/dist/utils/DataScope.js +151 -0
  173. package/dist/utils/SimpleMap.js +46 -0
  174. package/dist/utils/api.js +555 -0
  175. package/dist/utils/autobind.js +94 -0
  176. package/dist/utils/dataMapping.js +136 -0
  177. package/dist/utils/date.js +90 -0
  178. package/dist/utils/debug.js +343 -0
  179. package/dist/utils/errors.js +23 -0
  180. package/dist/utils/escapeHtml.js +24 -0
  181. package/dist/utils/filter-schema.js +75 -0
  182. package/dist/utils/filter.js +481 -0
  183. package/dist/utils/formatDuration.js +27 -0
  184. package/dist/utils/formula.js +165 -0
  185. package/dist/utils/getVariable.js +29 -0
  186. package/dist/utils/grammar.js +54 -0
  187. package/dist/utils/helper.js +1283 -0
  188. package/dist/utils/isPureVariable.js +16 -0
  189. package/dist/utils/keyToPath.js +34 -0
  190. package/dist/utils/makeSorter.js +30 -0
  191. package/dist/utils/normalizeLink.js +47 -0
  192. package/dist/utils/normalizeOptions.js +92 -0
  193. package/dist/utils/object.js +156 -0
  194. package/dist/utils/offset.js +36 -0
  195. package/dist/utils/offsetParent.js +27 -0
  196. package/dist/utils/optionValueCompare.js +25 -0
  197. package/dist/utils/position.js +50 -0
  198. package/dist/utils/prettyBytes.js +28 -0
  199. package/dist/utils/renderer-event.js +131 -0
  200. package/dist/utils/replaceText.js +35 -0
  201. package/dist/utils/resize-sensor.js +177 -0
  202. package/dist/utils/resolveVariable.js +39 -0
  203. package/dist/utils/resolveVariableAndFilter.js +37 -0
  204. package/dist/utils/string2regExp.js +18 -0
  205. package/dist/utils/stripNumber.js +20 -0
  206. package/dist/utils/tokenize.js +33 -0
  207. package/dist/utils/tpl-builtin.js +71 -0
  208. package/dist/utils/tpl-lodash.js +71 -0
  209. package/dist/utils/tpl.js +140 -0
  210. package/dist/utils/validations.js +377 -0
  211. package/package.json +121 -0
@@ -0,0 +1,579 @@
1
+ /**
2
+ * amis-core v1.0.0-beta.0
3
+ * Copyright 2018-2022 fex
4
+ */
5
+
6
+ 'use strict';
7
+
8
+ Object.defineProperty(exports, '__esModule', { value: true });
9
+
10
+ var tslib = require('tslib');
11
+ var mobxStateTree = require('mobx-state-tree');
12
+ var debouce = require('lodash/debounce');
13
+ var service = require('./service.js');
14
+ var errors = require('../utils/errors.js');
15
+ var helper = require('../utils/helper.js');
16
+ var isEqual = require('lodash/isEqual');
17
+ var flatten = require('lodash/flatten');
18
+ var tpl = require('../utils/tpl.js');
19
+ var api = require('../utils/api.js');
20
+ var getVariable = require('../utils/getVariable.js');
21
+ var keyToPath = require('../utils/keyToPath.js');
22
+ var object = require('../utils/object.js');
23
+
24
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
25
+
26
+ var debouce__default = /*#__PURE__*/_interopDefaultLegacy(debouce);
27
+ var isEqual__default = /*#__PURE__*/_interopDefaultLegacy(isEqual);
28
+ var flatten__default = /*#__PURE__*/_interopDefaultLegacy(flatten);
29
+
30
+ var FormStore = service.ServiceStore.named('FormStore')
31
+ .props({
32
+ inited: false,
33
+ validated: false,
34
+ submited: false,
35
+ submiting: false,
36
+ savedData: mobxStateTree.types.frozen(),
37
+ // items: types.optional(types.array(types.late(() => FormItemStore)), []),
38
+ canAccessSuperData: true,
39
+ persistData: mobxStateTree.types.optional(mobxStateTree.types.union(mobxStateTree.types.string, mobxStateTree.types.boolean), ''),
40
+ restError: mobxStateTree.types.optional(mobxStateTree.types.array(mobxStateTree.types.string), []) // 没有映射到表达项上的 errors
41
+ })
42
+ .views(function (self) {
43
+ function getItems() {
44
+ var formItems = [];
45
+ // 查找孩子节点中是 formItem 的表单项
46
+ var pool = self.children.concat();
47
+ while (pool.length) {
48
+ var current = pool.shift();
49
+ if (current.storeType === 'FormItemStore') {
50
+ formItems.push(current);
51
+ }
52
+ else {
53
+ pool.push.apply(pool, current.children);
54
+ }
55
+ }
56
+ return formItems;
57
+ }
58
+ return {
59
+ get loading() {
60
+ return self.saving || self.fetching;
61
+ },
62
+ get items() {
63
+ return getItems();
64
+ },
65
+ get errors() {
66
+ var errors = {};
67
+ getItems().forEach(function (item) {
68
+ if (!item.valid) {
69
+ errors[item.name] = Array.isArray(errors[item.name])
70
+ ? errors[item.name].concat(item.errors)
71
+ : item.errors.concat();
72
+ }
73
+ });
74
+ return errors;
75
+ },
76
+ getValueByName: function (name, canAccessSuperData) {
77
+ if (canAccessSuperData === void 0) { canAccessSuperData = self.canAccessSuperData; }
78
+ return getVariable.getVariable(self.data, name, canAccessSuperData);
79
+ },
80
+ getPristineValueByName: function (name) {
81
+ return getVariable.getVariable(self.pristine, name);
82
+ },
83
+ getItemById: function (id) {
84
+ return getItems().find(function (item) { return item.itemId === id; });
85
+ },
86
+ getItemByName: function (name) {
87
+ return getItems().find(function (item) { return item.name === name; });
88
+ },
89
+ getItemsByName: function (name) {
90
+ return getItems().filter(function (item) { return item.name === name; });
91
+ },
92
+ get valid() {
93
+ return (getItems().every(function (item) { return item.valid; }) &&
94
+ (!self.restError || !self.restError.length));
95
+ },
96
+ get validating() {
97
+ return getItems().some(function (item) { return item.validating; });
98
+ },
99
+ get isPristine() {
100
+ return isEqual__default["default"](self.pristine, self.data);
101
+ },
102
+ get modified() {
103
+ if (self.savedData) {
104
+ return self.savedData !== self.data;
105
+ }
106
+ return !this.isPristine;
107
+ },
108
+ get persistKey() {
109
+ return "".concat(location.pathname, "/").concat(self.path, "/").concat(typeof self.persistData === 'string'
110
+ ? tpl.filter(self.persistData, self.data)
111
+ : self.persistData);
112
+ }
113
+ };
114
+ })
115
+ .actions(function (self) {
116
+ function setValues(values, tag, replace) {
117
+ self.updateData(values, tag, replace);
118
+ // 如果数据域中有数据变化,就都reset一下,去掉之前残留的验证消息
119
+ self.items.forEach(function (item) { return item.reset(); });
120
+ // 同步 options
121
+ syncOptions();
122
+ }
123
+ function setValueByName(name, value, isPristine, force) {
124
+ if (isPristine === void 0) { isPristine = false; }
125
+ if (force === void 0) { force = false; }
126
+ // 没有变化就不跑了。
127
+ var origin = getVariable.getVariable(self.data, name, false);
128
+ var prev = self.data;
129
+ var data = object.cloneObject(self.data);
130
+ if (value !== origin) {
131
+ if (prev.__prev) {
132
+ // 基于之前的 __prev 改
133
+ var prevData = object.cloneObject(prev.__prev);
134
+ object.setVariable(prevData, name, origin);
135
+ Object.defineProperty(data, '__prev', {
136
+ value: prevData,
137
+ enumerable: false,
138
+ configurable: false,
139
+ writable: false
140
+ });
141
+ }
142
+ else {
143
+ Object.defineProperty(data, '__prev', {
144
+ value: tslib.__assign({}, prev),
145
+ enumerable: false,
146
+ configurable: false,
147
+ writable: false
148
+ });
149
+ }
150
+ }
151
+ else if (!force) {
152
+ return;
153
+ }
154
+ object.setVariable(data, name, value);
155
+ if (isPristine) {
156
+ var pristine = object.cloneObject(self.pristine);
157
+ object.setVariable(pristine, name, value);
158
+ self.pristine = pristine;
159
+ }
160
+ if (!data.__pristine) {
161
+ Object.defineProperty(data, '__pristine', {
162
+ value: self.pristine,
163
+ enumerable: false,
164
+ configurable: false,
165
+ writable: false
166
+ });
167
+ }
168
+ self.data = data;
169
+ // 同步 options
170
+ syncOptions();
171
+ }
172
+ function deleteValueByName(name) {
173
+ var prev = self.data;
174
+ var data = object.cloneObject(self.data);
175
+ if (prev.__prev) {
176
+ // 基于之前的 __prev 改
177
+ var prevData = object.cloneObject(prev.__prev);
178
+ object.setVariable(prevData, name, getVariable.getVariable(prev, name));
179
+ Object.defineProperty(data, '__prev', {
180
+ value: prevData,
181
+ enumerable: false,
182
+ configurable: false,
183
+ writable: false
184
+ });
185
+ }
186
+ else {
187
+ Object.defineProperty(data, '__prev', {
188
+ value: tslib.__assign({}, prev),
189
+ enumerable: false,
190
+ configurable: false,
191
+ writable: false
192
+ });
193
+ }
194
+ object.deleteVariable(data, name);
195
+ self.data = data;
196
+ }
197
+ function trimValues() {
198
+ var data = helper.mapObject(self.data, function (item) {
199
+ return typeof item === 'string' ? item.trim() : item;
200
+ });
201
+ self.updateData(data);
202
+ }
203
+ var syncOptions = debouce__default["default"](function () { return self.items.forEach(function (item) { return item.syncOptions(undefined, self.data); }); }, 250, {
204
+ trailing: true,
205
+ leading: false
206
+ });
207
+ function setRestError(errors) {
208
+ self.restError.replace(errors);
209
+ }
210
+ function addRestError(msg, name) {
211
+ var names = name
212
+ ? Array.isArray(name)
213
+ ? name.concat()
214
+ : [name]
215
+ : null;
216
+ if (Array.isArray(names)) {
217
+ var errors_1 = {};
218
+ names.forEach(function (name) { return (errors_1[name] = msg); });
219
+ setFormItemErrors(errors_1, 'rules');
220
+ }
221
+ else {
222
+ self.restError.push(msg);
223
+ }
224
+ }
225
+ function clearRestError() {
226
+ setRestError([]);
227
+ }
228
+ var saveRemote = mobxStateTree.flow(function saveRemote(api$1, data, options) {
229
+ var ret, json, ret, e_1, ret, result;
230
+ var _a, _b, _c, _d, _e, _f, _g;
231
+ if (options === void 0) { options = {}; }
232
+ return tslib.__generator(this, function (_h) {
233
+ switch (_h.label) {
234
+ case 0:
235
+ clearRestError();
236
+ _h.label = 1;
237
+ case 1:
238
+ _h.trys.push([1, 12, , 15]);
239
+ options = tslib.__assign({ method: 'post' }, options);
240
+ if (!(options && options.beforeSend)) return [3 /*break*/, 4];
241
+ ret = options.beforeSend(data);
242
+ if (!(ret && ret.then)) return [3 /*break*/, 3];
243
+ return [4 /*yield*/, ret];
244
+ case 2:
245
+ ret = _h.sent();
246
+ _h.label = 3;
247
+ case 3:
248
+ if (ret === false) {
249
+ return [2 /*return*/];
250
+ }
251
+ _h.label = 4;
252
+ case 4:
253
+ self.markSaving(true);
254
+ return [4 /*yield*/, mobxStateTree.getEnv(self).fetcher(api$1, data, options)];
255
+ case 5:
256
+ json = _h.sent();
257
+ // 失败也同样修改数据,如果有数据的话。
258
+ if (!helper.isEmpty(json.data) || json.ok) {
259
+ self.updatedAt = Date.now();
260
+ setValues(api.normalizeApiResponseData(json.data), json.ok
261
+ ? {
262
+ __saved: Date.now()
263
+ }
264
+ : undefined, !!api$1.replaceData);
265
+ }
266
+ if (!!json.ok) return [3 /*break*/, 6];
267
+ if (json.status === 422 && json.errors) {
268
+ setFormItemErrors(json.errors);
269
+ self.updateMessage((_b = (_a = json.msg) !== null && _a !== void 0 ? _a : self.__(options && options.errorMessage)) !== null && _b !== void 0 ? _b : self.__('Form.validateFailed'), true);
270
+ }
271
+ else {
272
+ self.updateMessage((_c = json.msg) !== null && _c !== void 0 ? _c : self.__(options && options.errorMessage), true);
273
+ }
274
+ throw new errors.ServerError(self.msg, json);
275
+ case 6:
276
+ updateSavedData();
277
+ ret = options && options.onSuccess && options.onSuccess(json);
278
+ if (!(ret === null || ret === void 0 ? void 0 : ret.then)) return [3 /*break*/, 8];
279
+ return [4 /*yield*/, ret];
280
+ case 7:
281
+ ret = _h.sent();
282
+ _h.label = 8;
283
+ case 8:
284
+ if (!((_d = ret === null || ret === void 0 ? void 0 : ret.cbResult) === null || _d === void 0 ? void 0 : _d.then)) return [3 /*break*/, 10];
285
+ return [4 /*yield*/, ret.cbResult];
286
+ case 9:
287
+ _h.sent();
288
+ _h.label = 10;
289
+ case 10:
290
+ self.markSaving(false);
291
+ self.updateMessage((_e = json.msg) !== null && _e !== void 0 ? _e : self.__(options && options.successMessage));
292
+ if (!((_f = ret === null || ret === void 0 ? void 0 : ret.dispatcher) === null || _f === void 0 ? void 0 : _f.prevented)) {
293
+ self.msg &&
294
+ mobxStateTree.getEnv(self).notify('success', self.msg, json.msgTimeout !== undefined
295
+ ? {
296
+ closeButton: true,
297
+ timeout: json.msgTimeout
298
+ }
299
+ : undefined);
300
+ }
301
+ return [2 /*return*/, json.data];
302
+ case 11: return [3 /*break*/, 15];
303
+ case 12:
304
+ e_1 = _h.sent();
305
+ self.markSaving(false);
306
+ ret = options && options.onFailed && options.onFailed(e_1.response || {});
307
+ if (!(ret === null || ret === void 0 ? void 0 : ret.then)) return [3 /*break*/, 14];
308
+ return [4 /*yield*/, ret];
309
+ case 13:
310
+ ret = _h.sent();
311
+ _h.label = 14;
312
+ case 14:
313
+ if (!mobxStateTree.isAlive(self) || self.disposed) {
314
+ return [2 /*return*/];
315
+ }
316
+ if ((_g = ret === null || ret === void 0 ? void 0 : ret.dispatcher) === null || _g === void 0 ? void 0 : _g.prevented) {
317
+ return [2 /*return*/];
318
+ }
319
+ if (e_1.type === 'ServerError') {
320
+ result = e_1.response;
321
+ mobxStateTree.getEnv(self).notify('error', e_1.message, result.msgTimeout !== undefined
322
+ ? {
323
+ closeButton: true,
324
+ timeout: result.msgTimeout
325
+ }
326
+ : undefined);
327
+ }
328
+ else {
329
+ mobxStateTree.getEnv(self).notify('error', e_1.message);
330
+ }
331
+ throw e_1;
332
+ case 15: return [2 /*return*/];
333
+ }
334
+ });
335
+ });
336
+ function setFormItemErrors(errors, tag) {
337
+ if (tag === void 0) { tag = 'remote'; }
338
+ Object.keys(errors).forEach(function (key) {
339
+ var item = self.getItemById(key);
340
+ var items = self.getItemsByName(key);
341
+ if (item) {
342
+ item.setError(errors[key], tag);
343
+ delete errors[key];
344
+ }
345
+ else if (items.length) {
346
+ // 通过 name 直接找到的
347
+ items.forEach(function (item) { return item.setError(errors[key], tag); });
348
+ delete errors[key];
349
+ }
350
+ else {
351
+ // 尝试通过path寻找
352
+ var items_1 = getItemsByPath(key);
353
+ if (Array.isArray(items_1) && items_1.length) {
354
+ items_1.forEach(function (item) { return item.setError("".concat(errors[key]), tag); });
355
+ delete errors[key];
356
+ }
357
+ }
358
+ });
359
+ // 没有映射上的error信息加在msg后显示出来
360
+ !helper.isEmpty(errors) &&
361
+ setRestError(Object.keys(errors).map(function (key) { return String(errors[key]); }));
362
+ }
363
+ var getItemsByPath = function (key) {
364
+ var paths = keyToPath.keyToPath(key);
365
+ var len = paths.length;
366
+ return paths.reduce(function (stores, path, idx) {
367
+ if (Array.isArray(stores) && stores.every(function (s) { return s.getItemsByName; })) {
368
+ var items = flatten__default["default"](stores.map(function (s) { return s.getItemsByName(path); })).filter(function (i) { return i; });
369
+ var subStores = items
370
+ .map(function (item) { var _a; return (_a = item === null || item === void 0 ? void 0 : item.getSubStore) === null || _a === void 0 ? void 0 : _a.call(item); })
371
+ .filter(function (i) { return i; });
372
+ return subStores.length && idx < len - 1 ? subStores : items;
373
+ }
374
+ return null;
375
+ }, [self]);
376
+ };
377
+ var submit = mobxStateTree.flow(function submit(fn, hooks, failedMessage, validateErrCb) {
378
+ var valid, msg, env, dispatcher, diff, result;
379
+ return tslib.__generator(this, function (_a) {
380
+ switch (_a.label) {
381
+ case 0:
382
+ self.submited = true;
383
+ self.submiting = true;
384
+ _a.label = 1;
385
+ case 1:
386
+ _a.trys.push([1, , 8, 9]);
387
+ return [4 /*yield*/, validate(hooks)];
388
+ case 2:
389
+ valid = _a.sent();
390
+ if (!((!valid &&
391
+ self.items.some(function (item) {
392
+ return item.errorData.some(function (e) { return e.tag !== 'remote'; });
393
+ })) ||
394
+ self.restError.length)) return [3 /*break*/, 5];
395
+ msg = failedMessage !== null && failedMessage !== void 0 ? failedMessage : self.__('Form.validateFailed');
396
+ env = mobxStateTree.getEnv(self);
397
+ dispatcher = validateErrCb && validateErrCb();
398
+ if (!(dispatcher === null || dispatcher === void 0 ? void 0 : dispatcher.then)) return [3 /*break*/, 4];
399
+ return [4 /*yield*/, dispatcher];
400
+ case 3:
401
+ dispatcher = _a.sent();
402
+ _a.label = 4;
403
+ case 4:
404
+ if (!(dispatcher === null || dispatcher === void 0 ? void 0 : dispatcher.prevented)) {
405
+ msg && env.notify('error', msg);
406
+ }
407
+ throw new Error(msg);
408
+ case 5:
409
+ if (!fn) return [3 /*break*/, 7];
410
+ diff = helper.difference(self.data, self.pristine);
411
+ return [4 /*yield*/, fn(object.createObject(object.createObject(self.data.__super, {
412
+ diff: diff,
413
+ __diff: diff,
414
+ pristine: self.pristine
415
+ }), self.data))];
416
+ case 6:
417
+ result = _a.sent();
418
+ return [2 /*return*/, result !== null && result !== void 0 ? result : self.data];
419
+ case 7: return [2 /*return*/, self.data];
420
+ case 8:
421
+ self.submiting = false;
422
+ return [7 /*endfinally*/];
423
+ case 9: return [2 /*return*/];
424
+ }
425
+ });
426
+ });
427
+ var validate = mobxStateTree.flow(function validate(hooks, forceValidate) {
428
+ var items, i, len, item, i, len;
429
+ return tslib.__generator(this, function (_a) {
430
+ switch (_a.label) {
431
+ case 0:
432
+ self.validated = true;
433
+ items = self.items.concat();
434
+ i = 0, len = items.length;
435
+ _a.label = 1;
436
+ case 1:
437
+ if (!(i < len)) return [3 /*break*/, 4];
438
+ item = items[i];
439
+ // 先清除组合校验的错误
440
+ item.clearError('rules');
441
+ if (!(!item.validated ||
442
+ item.unique ||
443
+ forceValidate ||
444
+ !!item.validateApi)) return [3 /*break*/, 3];
445
+ return [4 /*yield*/, item.validate(self.data)];
446
+ case 2:
447
+ _a.sent();
448
+ _a.label = 3;
449
+ case 3:
450
+ i++;
451
+ return [3 /*break*/, 1];
452
+ case 4:
453
+ if (!(hooks && hooks.length)) return [3 /*break*/, 8];
454
+ i = 0, len = hooks.length;
455
+ _a.label = 5;
456
+ case 5:
457
+ if (!(i < len)) return [3 /*break*/, 8];
458
+ return [4 /*yield*/, hooks[i]()];
459
+ case 6:
460
+ _a.sent();
461
+ _a.label = 7;
462
+ case 7:
463
+ i++;
464
+ return [3 /*break*/, 5];
465
+ case 8: return [2 /*return*/, self.valid];
466
+ }
467
+ });
468
+ });
469
+ var validateFields = mobxStateTree.flow(function validateFields(fields) {
470
+ var items, result, i, len, item, _a, _b;
471
+ return tslib.__generator(this, function (_c) {
472
+ switch (_c.label) {
473
+ case 0:
474
+ items = self.items.concat();
475
+ result = [];
476
+ i = 0, len = items.length;
477
+ _c.label = 1;
478
+ case 1:
479
+ if (!(i < len)) return [3 /*break*/, 4];
480
+ item = items[i];
481
+ if (!~fields.indexOf(item.name)) return [3 /*break*/, 3];
482
+ _b = (_a = result).push;
483
+ return [4 /*yield*/, item.validate(self.data)];
484
+ case 2:
485
+ _b.apply(_a, [_c.sent()]);
486
+ _c.label = 3;
487
+ case 3:
488
+ i++;
489
+ return [3 /*break*/, 1];
490
+ case 4: return [2 /*return*/, result.every(function (item) { return item; })];
491
+ }
492
+ });
493
+ });
494
+ function clearErrors() {
495
+ var items = self.items.concat();
496
+ items.forEach(function (item) { return item.reset(); });
497
+ }
498
+ function reset(cb, resetData) {
499
+ if (resetData === void 0) { resetData = true; }
500
+ if (resetData) {
501
+ self.data = self.pristine;
502
+ }
503
+ // 值可能变了,重新验证一次。
504
+ self.validated = false;
505
+ self.submited = false;
506
+ self.items.forEach(function (item) { return item.reset(); });
507
+ cb && cb(self.data);
508
+ }
509
+ function clear(cb) {
510
+ var toClear = {};
511
+ self.items.forEach(function (item) {
512
+ if (item.name && item.type !== 'hidden') {
513
+ object.setVariable(toClear, item.name, item.resetValue);
514
+ }
515
+ });
516
+ setValues(toClear);
517
+ self.validated = false;
518
+ self.submited = false;
519
+ self.items.forEach(function (item) { return item.reset(); });
520
+ cb && cb(self.data);
521
+ }
522
+ function setCanAccessSuperData(value) {
523
+ if (value === void 0) { value = true; }
524
+ self.canAccessSuperData = value;
525
+ }
526
+ function setInited(value) {
527
+ self.inited = value;
528
+ }
529
+ function setPersistData(value) {
530
+ if (value === void 0) { value = ''; }
531
+ self.persistData = value;
532
+ }
533
+ var setLocalPersistData = function () {
534
+ localStorage.setItem(self.persistKey, JSON.stringify(self.data));
535
+ };
536
+ function getLocalPersistData() {
537
+ var data = localStorage.getItem(self.persistKey);
538
+ if (data) {
539
+ self.updateData(JSON.parse(data));
540
+ }
541
+ }
542
+ function clearLocalPersistData() {
543
+ localStorage.removeItem(self.persistKey);
544
+ }
545
+ function updateSavedData() {
546
+ self.savedData = self.data;
547
+ }
548
+ return {
549
+ setInited: setInited,
550
+ setValues: setValues,
551
+ setValueByName: setValueByName,
552
+ trimValues: trimValues,
553
+ submit: submit,
554
+ validate: validate,
555
+ validateFields: validateFields,
556
+ clearErrors: clearErrors,
557
+ saveRemote: saveRemote,
558
+ reset: reset,
559
+ syncOptions: syncOptions,
560
+ setCanAccessSuperData: setCanAccessSuperData,
561
+ deleteValueByName: deleteValueByName,
562
+ getLocalPersistData: getLocalPersistData,
563
+ setLocalPersistData: setLocalPersistData,
564
+ clearLocalPersistData: clearLocalPersistData,
565
+ setPersistData: setPersistData,
566
+ clear: clear,
567
+ updateSavedData: updateSavedData,
568
+ setFormItemErrors: setFormItemErrors,
569
+ getItemsByPath: getItemsByPath,
570
+ setRestError: setRestError,
571
+ addRestError: addRestError,
572
+ clearRestError: clearRestError,
573
+ beforeDestroy: function () {
574
+ syncOptions.cancel();
575
+ }
576
+ };
577
+ });
578
+
579
+ exports.FormStore = FormStore;