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,636 @@
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 React = require('react');
12
+ var hoistNonReactStatic = require('hoist-non-react-statics');
13
+ var mobx = require('mobx');
14
+ var factory = require('../factory.js');
15
+ var helper = require('../utils/helper.js');
16
+ var mobxReact = require('mobx-react');
17
+ var tpl = require('../utils/tpl.js');
18
+ var WithStore = require('../WithStore.js');
19
+ var wrapControl = require('./wrapControl.js');
20
+ var debouce = require('lodash/debounce');
21
+ var api = require('../utils/api.js');
22
+ var getVariable = require('../utils/getVariable.js');
23
+ var object = require('../utils/object.js');
24
+
25
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
26
+
27
+ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
28
+ var hoistNonReactStatic__default = /*#__PURE__*/_interopDefaultLegacy(hoistNonReactStatic);
29
+ var debouce__default = /*#__PURE__*/_interopDefaultLegacy(debouce);
30
+
31
+ var FormItemWrap = /** @class */ (function (_super) {
32
+ tslib.__extends(FormItemWrap, _super);
33
+ function FormItemWrap(props) {
34
+ var _this = _super.call(this, props) || this;
35
+ _this.reaction = [];
36
+ _this.syncAutoFill = debouce__default["default"](function (term) {
37
+ (function (term) { return tslib.__awaiter(_this, void 0, void 0, function () {
38
+ var _a, autoFillApi, onBulkChange, formItem, data, itemName, ctx, result;
39
+ var _b;
40
+ var _c;
41
+ return tslib.__generator(this, function (_d) {
42
+ switch (_d.label) {
43
+ case 0:
44
+ _a = this.props, autoFillApi = _a.autoFillApi, onBulkChange = _a.onBulkChange, formItem = _a.formItem, data = _a.data;
45
+ if (!autoFillApi) {
46
+ return [2 /*return*/];
47
+ }
48
+ itemName = formItem === null || formItem === void 0 ? void 0 : formItem.name;
49
+ ctx = object.createObject(data, (_b = {},
50
+ _b[itemName || ''] = term,
51
+ _b));
52
+ if (!(onBulkChange &&
53
+ api.isEffectiveApi(autoFillApi, ctx) &&
54
+ this.lastSearchTerm !== term)) return [3 /*break*/, 2];
55
+ return [4 /*yield*/, (formItem === null || formItem === void 0 ? void 0 : formItem.loadAutoUpdateData(autoFillApi, ctx, !!(autoFillApi === null || autoFillApi === void 0 ? void 0 : autoFillApi.silent)))];
56
+ case 1:
57
+ result = _d.sent();
58
+ if (!result)
59
+ return [2 /*return*/];
60
+ this.lastSearchTerm = (_c = getVariable.getVariable(result, itemName)) !== null && _c !== void 0 ? _c : term;
61
+ onBulkChange(result);
62
+ _d.label = 2;
63
+ case 2: return [2 /*return*/];
64
+ }
65
+ });
66
+ }); })(term).catch(function (e) { return console.error(e); });
67
+ }, 250, {
68
+ trailing: true,
69
+ leading: false
70
+ });
71
+ var model = props.formItem;
72
+ if (model) {
73
+ _this.reaction.push(mobx.reaction(function () { return "".concat(model.errors.join('')).concat(model.isFocused).concat(model.dialogOpen); }, function () { return _this.forceUpdate(); }));
74
+ _this.reaction.push(mobx.reaction(function () { return JSON.stringify(model.tmpValue); }, function () { return _this.syncAutoFill(model.tmpValue); }));
75
+ }
76
+ return _this;
77
+ }
78
+ FormItemWrap.prototype.componentWillUnmount = function () {
79
+ this.reaction.forEach(function (fn) { return fn(); });
80
+ this.reaction = [];
81
+ this.syncAutoFill.cancel();
82
+ };
83
+ FormItemWrap.prototype.handleFocus = function (e) {
84
+ var model = this.props.formItem;
85
+ model && model.focus();
86
+ this.props.onFocus && this.props.onFocus(e);
87
+ };
88
+ FormItemWrap.prototype.handleBlur = function (e) {
89
+ var model = this.props.formItem;
90
+ model && model.blur();
91
+ this.props.onBlur && this.props.onBlur(e);
92
+ };
93
+ FormItemWrap.prototype.handleOpenDialog = function (schema, data) {
94
+ return tslib.__awaiter(this, void 0, void 0, function () {
95
+ var model;
96
+ return tslib.__generator(this, function (_a) {
97
+ model = this.props.formItem;
98
+ if (!model) {
99
+ return [2 /*return*/];
100
+ }
101
+ return [2 /*return*/, new Promise(function (resolve) {
102
+ return model.openDialog(schema, data, function (result) { return resolve(result); });
103
+ })];
104
+ });
105
+ });
106
+ };
107
+ FormItemWrap.prototype.handleDialogConfirm = function (_a) {
108
+ var values = _a[0];
109
+ var model = this.props.formItem;
110
+ if (!model) {
111
+ return;
112
+ }
113
+ model.closeDialog(values);
114
+ };
115
+ FormItemWrap.prototype.handleDialogClose = function (confirmed) {
116
+ if (confirmed === void 0) { confirmed = false; }
117
+ var model = this.props.formItem;
118
+ if (!model) {
119
+ return;
120
+ }
121
+ model.closeDialog(confirmed);
122
+ };
123
+ FormItemWrap.prototype.renderControl = function () {
124
+ var _a;
125
+ var _b = this.props, inputClassName = _b.inputClassName, model = _b.formItem, cx = _b.classnames; _b.children; var type = _b.type, renderControl = _b.renderControl; _b.formItemConfig; var sizeMutable = _b.sizeMutable, size = _b.size, defaultSize = _b.defaultSize, useMobileUI = _b.useMobileUI, rest = tslib.__rest(_b, ["inputClassName", "formItem", "classnames", "children", "type", "renderControl", "formItemConfig", "sizeMutable", "size", "defaultSize", "useMobileUI"]);
126
+ var mobileUI = useMobileUI && helper.isMobile();
127
+ if (renderControl) {
128
+ var controlSize = size || defaultSize;
129
+ return renderControl(tslib.__assign(tslib.__assign({}, rest), { onOpenDialog: this.handleOpenDialog, type: type, classnames: cx, formItem: model, className: cx("Form-control", (_a = {
130
+ 'is-inline': !!rest.inline && !mobileUI,
131
+ 'is-error': model && !model.valid
132
+ },
133
+ _a["Form-control--withSize Form-control--size".concat(helper.ucFirst(controlSize))] = sizeMutable !== false &&
134
+ typeof controlSize === 'string' &&
135
+ !!controlSize &&
136
+ controlSize !== 'full',
137
+ _a), model === null || model === void 0 ? void 0 : model.errClassNames, inputClassName) }));
138
+ }
139
+ return null;
140
+ };
141
+ FormItemWrap.prototype.render = function () {
142
+ var _a = this.props, formMode = _a.formMode, inputOnly = _a.inputOnly, wrap = _a.wrap, render = _a.render, model = _a.formItem;
143
+ var mode = this.props.mode || formMode;
144
+ if (wrap === false || inputOnly) {
145
+ return this.renderControl();
146
+ }
147
+ var renderLayout = FormItemWrap.layoutRenderers[mode] ||
148
+ FormItemWrap.layoutRenderers['normal'];
149
+ return (React__default["default"].createElement(React__default["default"].Fragment, null,
150
+ renderLayout(this.props, this.renderControl.bind(this)),
151
+ model
152
+ ? render('modal', tslib.__assign({ type: 'dialog' }, model.dialogSchema), {
153
+ show: model.dialogOpen,
154
+ onClose: this.handleDialogClose,
155
+ onConfirm: this.handleDialogConfirm,
156
+ data: model.dialogData,
157
+ formStore: undefined
158
+ })
159
+ : null));
160
+ };
161
+ /**
162
+ * 布局扩充点,可以自己扩充表单项的布局方式
163
+ */
164
+ FormItemWrap.layoutRenderers = {
165
+ horizontal: function (props, renderControl) {
166
+ var _a, _b, _c;
167
+ var className = props.className, cx = props.classnames, description = props.description, descriptionClassName = props.descriptionClassName, captionClassName = props.captionClassName, desc = props.desc, label = props.label, labelClassName = props.labelClassName, render = props.render, required = props.required, caption = props.caption, remark = props.remark, labelRemark = props.labelRemark, env = props.env, model = props.formItem, renderLabel = props.renderLabel, renderDescription = props.renderDescription, hint = props.hint, data = props.data, showErrorMsg = props.showErrorMsg, useMobileUI = props.useMobileUI;
168
+ // 强制不渲染 label 的话
169
+ if (renderLabel === false) {
170
+ label = label === false ? false : '';
171
+ }
172
+ description = description || desc;
173
+ var horizontal = props.horizontal || props.formHorizontal || {};
174
+ var left = helper.getWidthRate(horizontal.left);
175
+ var right = helper.getWidthRate(horizontal.right);
176
+ var labelAlign = props.labelAlign || props.formLabelAlign;
177
+ return (React__default["default"].createElement("div", { "data-role": "form-item", className: cx("Form-item Form-item--horizontal", className, (_a = {
178
+ 'Form-item--horizontal-justify': horizontal.justify
179
+ },
180
+ _a["is-error"] = model && !model.valid,
181
+ _a["is-required"] = required,
182
+ _a), model === null || model === void 0 ? void 0 : model.errClassNames) },
183
+ label !== false ? (React__default["default"].createElement("label", { className: cx("Form-label", (_b = {},
184
+ _b["Form-itemColumn--".concat(typeof horizontal.leftFixed === 'string'
185
+ ? horizontal.leftFixed
186
+ : 'normal')] = horizontal.leftFixed,
187
+ _b["Form-itemColumn--".concat(left)] = !horizontal.leftFixed,
188
+ _b['Form-label--left'] = labelAlign === 'left',
189
+ _b), labelClassName) },
190
+ React__default["default"].createElement("span", null,
191
+ label
192
+ ? render('label', typeof label === 'string' ? tpl.filter(label, data) : label)
193
+ : null,
194
+ required && (label || labelRemark) ? (React__default["default"].createElement("span", { className: cx("Form-star") }, "*")) : null,
195
+ labelRemark
196
+ ? render('label-remark', {
197
+ type: 'remark',
198
+ icon: labelRemark.icon || 'warning-mark',
199
+ tooltip: labelRemark,
200
+ useMobileUI: useMobileUI,
201
+ className: cx("Form-labelRemark"),
202
+ container: props.popOverContainer
203
+ ? props.popOverContainer
204
+ : env && env.getModalContainer
205
+ ? env.getModalContainer
206
+ : undefined
207
+ })
208
+ : null))) : null,
209
+ React__default["default"].createElement("div", { className: cx("Form-value", (_c = {},
210
+ // [`Form-itemColumn--offset${getWidthRate(horizontal.offset)}`]: !label && label !== false,
211
+ _c["Form-itemColumn--".concat(right)] = !horizontal.leftFixed && !!right && right !== 12 - left,
212
+ _c)) },
213
+ renderControl(),
214
+ caption
215
+ ? render('caption', caption, {
216
+ className: cx("Form-caption", captionClassName)
217
+ })
218
+ : null,
219
+ remark
220
+ ? render('remark', {
221
+ type: 'remark',
222
+ icon: remark.icon || 'warning-mark',
223
+ tooltip: remark,
224
+ className: cx("Form-remark"),
225
+ useMobileUI: useMobileUI,
226
+ container: props.popOverContainer
227
+ ? props.popOverContainer
228
+ : env && env.getModalContainer
229
+ ? env.getModalContainer
230
+ : undefined
231
+ })
232
+ : null,
233
+ hint && model && model.isFocused
234
+ ? render('hint', hint, {
235
+ className: cx("Form-hint")
236
+ })
237
+ : null,
238
+ model &&
239
+ !model.valid &&
240
+ showErrorMsg !== false &&
241
+ Array.isArray(model.errors) ? (React__default["default"].createElement("ul", { className: cx("Form-feedback") }, model.errors.map(function (msg, key) { return (React__default["default"].createElement("li", { key: key }, msg)); }))) : null,
242
+ renderDescription !== false && description
243
+ ? render('description', description, {
244
+ className: cx("Form-description", descriptionClassName)
245
+ })
246
+ : null)));
247
+ },
248
+ normal: function (props, renderControl) {
249
+ var _a;
250
+ var className = props.className, cx = props.classnames, desc = props.desc, description = props.description, label = props.label, labelClassName = props.labelClassName, render = props.render, required = props.required, caption = props.caption, remark = props.remark, labelRemark = props.labelRemark, env = props.env, descriptionClassName = props.descriptionClassName, captionClassName = props.captionClassName, model = props.formItem, renderLabel = props.renderLabel, renderDescription = props.renderDescription, hint = props.hint, data = props.data, showErrorMsg = props.showErrorMsg, useMobileUI = props.useMobileUI;
251
+ description = description || desc;
252
+ return (React__default["default"].createElement("div", { "data-role": "form-item", className: cx("Form-item Form-item--normal", className, (_a = {
253
+ 'is-error': model && !model.valid
254
+ },
255
+ _a["is-required"] = required,
256
+ _a), model === null || model === void 0 ? void 0 : model.errClassNames) },
257
+ label && renderLabel !== false ? (React__default["default"].createElement("label", { className: cx("Form-label", labelClassName) },
258
+ React__default["default"].createElement("span", null,
259
+ label
260
+ ? render('label', typeof label === 'string' ? tpl.filter(label, data) : label)
261
+ : null,
262
+ required && (label || labelRemark) ? (React__default["default"].createElement("span", { className: cx("Form-star") }, "*")) : null,
263
+ labelRemark
264
+ ? render('label-remark', {
265
+ type: 'remark',
266
+ icon: labelRemark.icon || 'warning-mark',
267
+ tooltip: labelRemark,
268
+ className: cx("Form-lableRemark"),
269
+ useMobileUI: useMobileUI,
270
+ container: props.popOverContainer
271
+ ? props.popOverContainer
272
+ : env && env.getModalContainer
273
+ ? env.getModalContainer
274
+ : undefined
275
+ })
276
+ : null))) : null,
277
+ renderControl(),
278
+ caption
279
+ ? render('caption', caption, {
280
+ className: cx("Form-caption", captionClassName)
281
+ })
282
+ : null,
283
+ remark
284
+ ? render('remark', {
285
+ type: 'remark',
286
+ icon: remark.icon || 'warning-mark',
287
+ className: cx("Form-remark"),
288
+ tooltip: remark,
289
+ useMobileUI: useMobileUI,
290
+ container: env && env.getModalContainer
291
+ ? env.getModalContainer
292
+ : undefined
293
+ })
294
+ : null,
295
+ hint && model && model.isFocused
296
+ ? render('hint', hint, {
297
+ className: cx("Form-hint")
298
+ })
299
+ : null,
300
+ model &&
301
+ !model.valid &&
302
+ showErrorMsg !== false &&
303
+ Array.isArray(model.errors) ? (React__default["default"].createElement("ul", { className: cx("Form-feedback") }, model.errors.map(function (msg, key) { return (React__default["default"].createElement("li", { key: key }, msg)); }))) : null,
304
+ renderDescription !== false && description
305
+ ? render('description', description, {
306
+ className: cx("Form-description", descriptionClassName)
307
+ })
308
+ : null));
309
+ },
310
+ inline: function (props, renderControl) {
311
+ var _a;
312
+ var className = props.className, cx = props.classnames, desc = props.desc, description = props.description, label = props.label, labelClassName = props.labelClassName, render = props.render, required = props.required, caption = props.caption, descriptionClassName = props.descriptionClassName, captionClassName = props.captionClassName, model = props.formItem, remark = props.remark, labelRemark = props.labelRemark, env = props.env, hint = props.hint, renderLabel = props.renderLabel, renderDescription = props.renderDescription, data = props.data, showErrorMsg = props.showErrorMsg, useMobileUI = props.useMobileUI;
313
+ description = description || desc;
314
+ return (React__default["default"].createElement("div", { "data-role": "form-item", className: cx("Form-item Form-item--inline", className, (_a = {
315
+ 'is-error': model && !model.valid
316
+ },
317
+ _a["is-required"] = required,
318
+ _a), model === null || model === void 0 ? void 0 : model.errClassNames) },
319
+ label && renderLabel !== false ? (React__default["default"].createElement("label", { className: cx("Form-label", labelClassName) },
320
+ React__default["default"].createElement("span", null,
321
+ label
322
+ ? render('label', typeof label === 'string' ? tpl.filter(label, data) : label)
323
+ : label,
324
+ required && (label || labelRemark) ? (React__default["default"].createElement("span", { className: cx("Form-star") }, "*")) : null,
325
+ labelRemark
326
+ ? render('label-remark', {
327
+ type: 'remark',
328
+ icon: labelRemark.icon || 'warning-mark',
329
+ tooltip: labelRemark,
330
+ className: cx("Form-lableRemark"),
331
+ useMobileUI: useMobileUI,
332
+ container: props.popOverContainer
333
+ ? props.popOverContainer
334
+ : env && env.getModalContainer
335
+ ? env.getModalContainer
336
+ : undefined
337
+ })
338
+ : null))) : null,
339
+ React__default["default"].createElement("div", { className: cx("Form-value") },
340
+ renderControl(),
341
+ caption
342
+ ? render('caption', caption, {
343
+ className: cx("Form-caption", captionClassName)
344
+ })
345
+ : null,
346
+ remark
347
+ ? render('remark', {
348
+ type: 'remark',
349
+ icon: remark.icon || 'warning-mark',
350
+ className: cx("Form-remark"),
351
+ tooltip: remark,
352
+ useMobileUI: useMobileUI,
353
+ container: props.popOverContainer
354
+ ? props.popOverContainer
355
+ : env && env.getModalContainer
356
+ ? env.getModalContainer
357
+ : undefined
358
+ })
359
+ : null,
360
+ hint && model && model.isFocused
361
+ ? render('hint', hint, {
362
+ className: cx("Form-hint")
363
+ })
364
+ : null,
365
+ model &&
366
+ !model.valid &&
367
+ showErrorMsg !== false &&
368
+ Array.isArray(model.errors) ? (React__default["default"].createElement("ul", { className: cx("Form-feedback") }, model.errors.map(function (msg, key) { return (React__default["default"].createElement("li", { key: key }, msg)); }))) : null,
369
+ renderDescription !== false && description
370
+ ? render('description', description, {
371
+ className: cx("Form-description", descriptionClassName)
372
+ })
373
+ : null)));
374
+ },
375
+ row: function (props, renderControl) {
376
+ var _a;
377
+ var className = props.className, cx = props.classnames, desc = props.desc, description = props.description, label = props.label, labelClassName = props.labelClassName, render = props.render, required = props.required, caption = props.caption, remark = props.remark, labelRemark = props.labelRemark, env = props.env, descriptionClassName = props.descriptionClassName, captionClassName = props.captionClassName, model = props.formItem, renderLabel = props.renderLabel, renderDescription = props.renderDescription, hint = props.hint, data = props.data, showErrorMsg = props.showErrorMsg, useMobileUI = props.useMobileUI;
378
+ description = description || desc;
379
+ return (React__default["default"].createElement("div", { "data-role": "form-item", className: cx("Form-item Form-item--row", className, (_a = {
380
+ 'is-error': model && !model.valid
381
+ },
382
+ _a["is-required"] = required,
383
+ _a), model === null || model === void 0 ? void 0 : model.errClassNames) },
384
+ React__default["default"].createElement("div", { className: cx('Form-rowInner') },
385
+ label && renderLabel !== false ? (React__default["default"].createElement("label", { className: cx("Form-label", labelClassName) },
386
+ React__default["default"].createElement("span", null,
387
+ render('label', typeof label === 'string' ? tpl.filter(label, data) : label),
388
+ required && (label || labelRemark) ? (React__default["default"].createElement("span", { className: cx("Form-star") }, "*")) : null,
389
+ labelRemark
390
+ ? render('label-remark', {
391
+ type: 'remark',
392
+ icon: labelRemark.icon || 'warning-mark',
393
+ tooltip: labelRemark,
394
+ className: cx("Form-lableRemark"),
395
+ useMobileUI: useMobileUI,
396
+ container: props.popOverContainer
397
+ ? props.popOverContainer
398
+ : env && env.getModalContainer
399
+ ? env.getModalContainer
400
+ : undefined
401
+ })
402
+ : null))) : null,
403
+ renderControl(),
404
+ caption
405
+ ? render('caption', caption, {
406
+ className: cx("Form-caption", captionClassName)
407
+ })
408
+ : null,
409
+ remark
410
+ ? render('remark', {
411
+ type: 'remark',
412
+ icon: remark.icon || 'warning-mark',
413
+ className: cx("Form-remark"),
414
+ tooltip: remark,
415
+ container: env && env.getModalContainer
416
+ ? env.getModalContainer
417
+ : undefined
418
+ })
419
+ : null),
420
+ hint && model && model.isFocused
421
+ ? render('hint', hint, {
422
+ className: cx("Form-hint")
423
+ })
424
+ : null,
425
+ model &&
426
+ !model.valid &&
427
+ showErrorMsg !== false &&
428
+ Array.isArray(model.errors) ? (React__default["default"].createElement("ul", { className: cx('Form-feedback') }, model.errors.map(function (msg, key) { return (React__default["default"].createElement("li", { key: key }, msg)); }))) : null,
429
+ description && renderDescription !== false
430
+ ? render('description', description, {
431
+ className: cx("Form-description", descriptionClassName)
432
+ })
433
+ : null));
434
+ }
435
+ };
436
+ tslib.__decorate([
437
+ helper.autobind,
438
+ tslib.__metadata("design:type", Function),
439
+ tslib.__metadata("design:paramtypes", [Object]),
440
+ tslib.__metadata("design:returntype", void 0)
441
+ ], FormItemWrap.prototype, "handleFocus", null);
442
+ tslib.__decorate([
443
+ helper.autobind,
444
+ tslib.__metadata("design:type", Function),
445
+ tslib.__metadata("design:paramtypes", [Object]),
446
+ tslib.__metadata("design:returntype", void 0)
447
+ ], FormItemWrap.prototype, "handleBlur", null);
448
+ tslib.__decorate([
449
+ helper.autobind,
450
+ tslib.__metadata("design:type", Function),
451
+ tslib.__metadata("design:paramtypes", [Object, Object]),
452
+ tslib.__metadata("design:returntype", Promise)
453
+ ], FormItemWrap.prototype, "handleOpenDialog", null);
454
+ tslib.__decorate([
455
+ helper.autobind,
456
+ tslib.__metadata("design:type", Function),
457
+ tslib.__metadata("design:paramtypes", [Array]),
458
+ tslib.__metadata("design:returntype", void 0)
459
+ ], FormItemWrap.prototype, "handleDialogConfirm", null);
460
+ tslib.__decorate([
461
+ helper.autobind,
462
+ tslib.__metadata("design:type", Function),
463
+ tslib.__metadata("design:paramtypes", [Object]),
464
+ tslib.__metadata("design:returntype", void 0)
465
+ ], FormItemWrap.prototype, "handleDialogClose", null);
466
+ return FormItemWrap;
467
+ }(React__default["default"].Component));
468
+ // 白名单形式,只有这些属性发生变化,才会往下更新。
469
+ // 除非配置 strictMode
470
+ var detectProps = [
471
+ 'formPristine',
472
+ 'formInited',
473
+ 'addable',
474
+ 'addButtonClassName',
475
+ 'addButtonText',
476
+ 'addOn',
477
+ 'btnClassName',
478
+ 'btnLabel',
479
+ 'btnDisabled',
480
+ 'className',
481
+ 'clearable',
482
+ 'columns',
483
+ 'columnsCount',
484
+ 'controls',
485
+ 'desc',
486
+ 'description',
487
+ 'disabled',
488
+ 'draggable',
489
+ 'editable',
490
+ 'editButtonClassName',
491
+ 'formHorizontal',
492
+ 'formMode',
493
+ 'hideRoot',
494
+ 'horizontal',
495
+ 'icon',
496
+ 'inline',
497
+ 'inputClassName',
498
+ 'label',
499
+ 'labelClassName',
500
+ 'labelField',
501
+ 'language',
502
+ 'level',
503
+ 'max',
504
+ 'maxRows',
505
+ 'min',
506
+ 'minRows',
507
+ 'multiLine',
508
+ 'multiple',
509
+ 'option',
510
+ 'placeholder',
511
+ 'removable',
512
+ 'required',
513
+ 'remark',
514
+ 'hint',
515
+ 'rows',
516
+ 'searchable',
517
+ 'showCompressOptions',
518
+ 'size',
519
+ 'step',
520
+ 'showInput',
521
+ 'unit',
522
+ 'value',
523
+ 'diffValue',
524
+ 'borderMode',
525
+ 'items',
526
+ 'showCounter',
527
+ 'minLength',
528
+ 'maxLength',
529
+ 'embed',
530
+ 'displayMode'
531
+ ];
532
+ function asFormItem(config) {
533
+ return function (Control) {
534
+ var _a;
535
+ var isSFC = !(Control.prototype instanceof React__default["default"].Component);
536
+ // 兼容老的 FormItem 用法。
537
+ if (config.validate && !Control.prototype.validate) {
538
+ var fn_1 = config.validate;
539
+ Control.prototype.validate = function () {
540
+ var host = {
541
+ input: this
542
+ };
543
+ return fn_1.apply(host, arguments);
544
+ };
545
+ }
546
+ else if (config.validate) {
547
+ console.error('FormItem配置中的 validate 将不起作用,因为类的成员函数中已经定义了 validate 方法,将优先使用类里面的实现。');
548
+ }
549
+ if (config.storeType) {
550
+ Control = WithStore.HocStoreFactory({
551
+ storeType: config.storeType,
552
+ extendsData: config.extendsData
553
+ })(mobxReact.observer(Control));
554
+ delete config.storeType;
555
+ }
556
+ return wrapControl.wrapControl(hoistNonReactStatic__default["default"]((_a = /** @class */ (function (_super) {
557
+ tslib.__extends(class_1, _super);
558
+ function class_1(props) {
559
+ var _this = _super.call(this, props) || this;
560
+ _this.refFn = _this.refFn.bind(_this);
561
+ var validations = props.validations, model = props.formItem;
562
+ // 组件注册的时候可能默认指定验证器类型
563
+ if (model && !validations && config.validations) {
564
+ model.config({
565
+ rules: config.validations
566
+ });
567
+ }
568
+ return _this;
569
+ }
570
+ class_1.prototype.shouldComponentUpdate = function (nextProps) {
571
+ var _a;
572
+ if (((_a = config.shouldComponentUpdate) === null || _a === void 0 ? void 0 : _a.call(config, this.props, nextProps)) ||
573
+ nextProps.strictMode === false ||
574
+ config.strictMode === false) {
575
+ return true;
576
+ }
577
+ // 把可能会影响视图的白名单弄出来,减少重新渲染次数。
578
+ if (helper.anyChanged(detectProps, this.props, nextProps)) {
579
+ return true;
580
+ }
581
+ return false;
582
+ };
583
+ class_1.prototype.getWrappedInstance = function () {
584
+ return this.ref;
585
+ };
586
+ class_1.prototype.refFn = function (ref) {
587
+ this.ref = ref;
588
+ };
589
+ class_1.prototype.renderControl = function () {
590
+ var _a;
591
+ var _b = this.props, inputClassName = _b.inputClassName, model = _b.formItem, cx = _b.classnames; _b.children; var type = _b.type, size = _b.size, defaultSize = _b.defaultSize, useMobileUI = _b.useMobileUI, rest = tslib.__rest(_b, ["inputClassName", "formItem", "classnames", "children", "type", "size", "defaultSize", "useMobileUI"]);
592
+ var controlSize = size || defaultSize;
593
+ var mobileUI = useMobileUI && helper.isMobile();
594
+ return (React__default["default"].createElement(Control, tslib.__assign({}, rest, { useMobileUI: useMobileUI, onOpenDialog: this.handleOpenDialog, size: config.sizeMutable !== false ? undefined : size, onFocus: this.handleFocus, onBlur: this.handleBlur, type: type, classnames: cx, ref: isSFC ? undefined : this.refFn, forwardedRef: isSFC ? this.refFn : undefined, formItem: model, className: cx("Form-control", (_a = {
595
+ 'is-inline': !!rest.inline && !mobileUI,
596
+ 'is-error': model && !model.valid
597
+ },
598
+ _a["Form-control--withSize Form-control--size".concat(helper.ucFirst(controlSize))] = config.sizeMutable !== false &&
599
+ typeof controlSize === 'string' &&
600
+ !!controlSize &&
601
+ controlSize !== 'full',
602
+ _a), model === null || model === void 0 ? void 0 : model.errClassNames, inputClassName) })));
603
+ };
604
+ return class_1;
605
+ }(FormItemWrap)),
606
+ _a.defaultProps = tslib.__assign({ className: '', renderLabel: config.renderLabel, renderDescription: config.renderDescription, sizeMutable: config.sizeMutable, wrap: config.wrap, showErrorMsg: config.showErrorMsg }, Control.defaultProps),
607
+ _a.propsList = tslib.__spreadArray([
608
+ 'value',
609
+ 'defaultValue',
610
+ 'onChange',
611
+ 'setPrinstineValue',
612
+ 'readOnly',
613
+ 'strictMode'
614
+ ], (Control.propsList || []), true),
615
+ _a.displayName = "FormItem".concat(config.type ? "(".concat(config.type, ")") : ''),
616
+ _a.ComposedComponent = Control,
617
+ _a), Control));
618
+ };
619
+ }
620
+ function registerFormItem(config) {
621
+ var Control = asFormItem(config)(config.component);
622
+ return factory.registerRenderer(tslib.__assign(tslib.__assign({}, config), { weight: typeof config.weight !== 'undefined' ? config.weight : -100, component: Control, isFormItem: true }));
623
+ }
624
+ function FormItem(config) {
625
+ return function (component) {
626
+ var renderer = registerFormItem(tslib.__assign(tslib.__assign({}, config), { component: component }));
627
+ return renderer.component;
628
+ };
629
+ }
630
+
631
+ exports.FormItem = FormItem;
632
+ exports.FormItemWrap = FormItemWrap;
633
+ exports.asFormItem = asFormItem;
634
+ exports["default"] = FormItem;
635
+ exports.detectProps = detectProps;
636
+ exports.registerFormItem = registerFormItem;