@next-shared/form 0.0.1

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.
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ //# sourceMappingURL=Form.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Form.js","names":[],"sources":["../../src/Form.ts"],"sourcesContent":["import type { FormStore } from \"./FormStore.js\";\n\nexport interface AbstractForm extends HTMLElement {\n readonly isFormElement: true;\n formStore: FormStore;\n size?: \"large\" | \"medium\" | \"small\" | \"xs\";\n layout?: \"horizontal\" | \"vertical\" | \"inline\";\n validate(): boolean | Record<string, unknown>;\n validateField(name: string): void;\n resetValidateState(): void;\n}\n"],"mappings":""}
@@ -0,0 +1,116 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.FormItemElementBase = void 0;
8
+ var _classPrivateFieldInitSpec2 = _interopRequireDefault(require("@babel/runtime/helpers/classPrivateFieldInitSpec"));
9
+ var _classPrivateFieldSet2 = _interopRequireDefault(require("@babel/runtime/helpers/classPrivateFieldSet"));
10
+ var _classPrivateFieldGet2 = _interopRequireDefault(require("@babel/runtime/helpers/classPrivateFieldGet"));
11
+ var _applyDecs2203R2 = _interopRequireDefault(require("@babel/runtime/helpers/applyDecs2203R"));
12
+ var _element = require("@next-core/element");
13
+ var _reactElement = require("@next-core/react-element");
14
+ var _dec, _initProto;
15
+ const {
16
+ method
17
+ } = (0, _element.createDecorators)();
18
+ _dec = method();
19
+ var _A = /*#__PURE__*/new WeakMap();
20
+ var _notRender = /*#__PURE__*/new WeakMap();
21
+ var _B = /*#__PURE__*/new WeakMap();
22
+ var _validate = /*#__PURE__*/new WeakMap();
23
+ var _C = /*#__PURE__*/new WeakMap();
24
+ var _bindFormItem = /*#__PURE__*/new WeakMap();
25
+ class FormItemElementBase extends _reactElement.ReactNextElement {
26
+ constructor(...args) {
27
+ super(...args);
28
+ (0, _classPrivateFieldInitSpec2.default)(this, _bindFormItem, {
29
+ get: _get_bindFormItem,
30
+ set: _set_bindFormItem
31
+ });
32
+ (0, _classPrivateFieldInitSpec2.default)(this, _validate, {
33
+ get: _get_validate,
34
+ set: _set_validate
35
+ });
36
+ (0, _classPrivateFieldInitSpec2.default)(this, _notRender, {
37
+ get: _get__notRender,
38
+ set: _set__notRender
39
+ });
40
+ (0, _classPrivateFieldInitSpec2.default)(this, _A, {
41
+ writable: true,
42
+ value: false
43
+ });
44
+ (0, _classPrivateFieldInitSpec2.default)(this, _B, {
45
+ writable: true,
46
+ value: "normal"
47
+ });
48
+ (0, _classPrivateFieldInitSpec2.default)(this, _C, {
49
+ writable: true,
50
+ value: false
51
+ });
52
+ _initProto(this);
53
+ }
54
+ get isFormItemElement() {
55
+ return true;
56
+ }
57
+ set validateState(value) {
58
+ (0, _classPrivateFieldSet2.default)(this, _validate, value);
59
+ this._render();
60
+ }
61
+ get validateState() {
62
+ return (0, _classPrivateFieldGet2.default)(this, _validate);
63
+ }
64
+
65
+ /**
66
+ * 控制该表单项是否隐藏
67
+ * @default false
68
+ * @group ui
69
+ */
70
+ set notRender(value) {
71
+ this.hidden = value;
72
+ (0, _classPrivateFieldSet2.default)(this, _notRender, value);
73
+ this._render();
74
+ }
75
+ get notRender() {
76
+ return (0, _classPrivateFieldGet2.default)(this, _notRender);
77
+ }
78
+ get $bindFormItem() {
79
+ return (0, _classPrivateFieldGet2.default)(this, _bindFormItem);
80
+ }
81
+ set $bindFormItem(value) {
82
+ (0, _classPrivateFieldSet2.default)(this, _bindFormItem, value);
83
+ this._render();
84
+ }
85
+ getFormElement() {
86
+ // eslint-disable-next-line @typescript-eslint/no-this-alias
87
+ let element = this;
88
+ while (element = element.parentNode) {
89
+ if (!element || element.isFormElement) {
90
+ break;
91
+ }
92
+ }
93
+ return element;
94
+ }
95
+ }
96
+ exports.FormItemElementBase = FormItemElementBase;
97
+ function _get__notRender() {
98
+ return (0, _classPrivateFieldGet2.default)(this, _A);
99
+ }
100
+ function _set__notRender(v) {
101
+ (0, _classPrivateFieldSet2.default)(this, _A, v);
102
+ }
103
+ function _get_validate() {
104
+ return (0, _classPrivateFieldGet2.default)(this, _B);
105
+ }
106
+ function _set_validate(v) {
107
+ (0, _classPrivateFieldSet2.default)(this, _B, v);
108
+ }
109
+ function _get_bindFormItem() {
110
+ return (0, _classPrivateFieldGet2.default)(this, _C);
111
+ }
112
+ function _set_bindFormItem(v) {
113
+ (0, _classPrivateFieldSet2.default)(this, _C, v);
114
+ }
115
+ [_initProto] = (0, _applyDecs2203R2.default)(FormItemElementBase, [[_dec, 2, "getFormElement"]], []).e;
116
+ //# sourceMappingURL=FormItemElement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormItemElement.js","names":["_element","require","_reactElement","_dec","_initProto","method","createDecorators","_A","WeakMap","_notRender","_B","_validate","_C","_bindFormItem","FormItemElementBase","ReactNextElement","constructor","args","_classPrivateFieldInitSpec2","default","get","_get_bindFormItem","set","_set_bindFormItem","_get_validate","_set_validate","_get__notRender","_set__notRender","writable","value","isFormItemElement","validateState","_classPrivateFieldSet2","_render","_classPrivateFieldGet2","notRender","hidden","$bindFormItem","getFormElement","element","parentNode","isFormElement","exports","v","_applyDecs2203R2","e"],"sources":["../../src/FormItemElement.tsx"],"sourcesContent":["import { createDecorators } from \"@next-core/element\";\nimport { ReactNextElement } from \"@next-core/react-element\";\nimport type { AbstractForm } from \"./Form.js\";\n\nconst { method } = createDecorators();\n\nexport abstract class FormItemElementBase extends ReactNextElement {\n accessor #_notRender = false;\n accessor #validate = \"normal\";\n accessor #bindFormItem = false;\n\n get isFormItemElement(): true {\n return true;\n }\n\n set validateState(value: string) {\n this.#validate = value;\n this._render();\n }\n get validateState() {\n return this.#validate;\n }\n\n /**\n * 控制该表单项是否隐藏\n * @default false\n * @group ui\n */\n set notRender(value: boolean) {\n this.hidden = value;\n this.#_notRender = value;\n this._render();\n }\n get notRender(): boolean {\n return this.#_notRender;\n }\n\n get $bindFormItem() {\n return this.#bindFormItem;\n }\n set $bindFormItem(value: boolean) {\n this.#bindFormItem = value;\n this._render();\n }\n\n @method()\n getFormElement(): AbstractForm | null {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n let element: AbstractForm | null = this as unknown as AbstractForm;\n while ((element = element.parentNode as AbstractForm | null)) {\n if (!element || element.isFormElement) {\n break;\n }\n }\n return element as AbstractForm | null;\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,215 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.FormStore = void 0;
8
+ var _classPrivateMethodInitSpec2 = _interopRequireDefault(require("@babel/runtime/helpers/classPrivateMethodInitSpec"));
9
+ var _classPrivateFieldInitSpec2 = _interopRequireDefault(require("@babel/runtime/helpers/classPrivateFieldInitSpec"));
10
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
+ var _classPrivateMethodGet2 = _interopRequireDefault(require("@babel/runtime/helpers/classPrivateMethodGet"));
12
+ var _classPrivateFieldGet6 = _interopRequireDefault(require("@babel/runtime/helpers/classPrivateFieldGet"));
13
+ var _classPrivateFieldSet2 = _interopRequireDefault(require("@babel/runtime/helpers/classPrivateFieldSet"));
14
+ var _lodash = require("lodash");
15
+ var _PubSub = require("./PubSub.js");
16
+ let uid = 0;
17
+ class Field {
18
+ field;
19
+ detail;
20
+ constructor(name, detail) {
21
+ this.field = name;
22
+ this.detail = detail;
23
+ }
24
+ }
25
+ var _fields = /*#__PURE__*/new WeakMap();
26
+ var _options = /*#__PURE__*/new WeakMap();
27
+ var _formData = /*#__PURE__*/new WeakMap();
28
+ var _initData = /*#__PURE__*/new WeakMap();
29
+ var _getAllFields = /*#__PURE__*/new WeakSet();
30
+ class FormStore extends _PubSub.PubSub {
31
+ static getInstance(options) {
32
+ if (!this.instance.get(uid)) {
33
+ this.uid = uid;
34
+ this.instance.set(this.uid, new FormStore(options));
35
+ uid += 1;
36
+ }
37
+ return this.instance.get(this.uid);
38
+ }
39
+ constructor(options) {
40
+ super();
41
+ (0, _classPrivateMethodInitSpec2.default)(this, _getAllFields);
42
+ (0, _classPrivateFieldInitSpec2.default)(this, _fields, {
43
+ writable: true,
44
+ value: new Map()
45
+ });
46
+ (0, _classPrivateFieldInitSpec2.default)(this, _options, {
47
+ writable: true,
48
+ value: void 0
49
+ });
50
+ (0, _classPrivateFieldInitSpec2.default)(this, _formData, {
51
+ writable: true,
52
+ value: void 0
53
+ });
54
+ (0, _classPrivateFieldInitSpec2.default)(this, _initData, {
55
+ writable: true,
56
+ value: void 0
57
+ });
58
+ (0, _classPrivateFieldSet2.default)(this, _formData, {});
59
+ (0, _classPrivateFieldSet2.default)(this, _options, options);
60
+ }
61
+ setField(name, detail) {
62
+ (0, _classPrivateFieldGet6.default)(this, _fields).set(name, new Field(name, detail));
63
+ }
64
+ getAllValues() {
65
+ return (0, _classPrivateFieldGet6.default)(this, _formData);
66
+ }
67
+ setInitValue(values, isEmitValuseChange = true) {
68
+ (0, _classPrivateFieldSet2.default)(this, _initData, values);
69
+ this.setFieldsValue(values, isEmitValuseChange);
70
+ }
71
+ setFieldsValueByInitData(name) {
72
+ var _classPrivateFieldGet2;
73
+ const value = (_classPrivateFieldGet2 = (0, _classPrivateFieldGet6.default)(this, _initData)) === null || _classPrivateFieldGet2 === void 0 ? void 0 : _classPrivateFieldGet2[name];
74
+ if (value) {
75
+ (0, _classPrivateFieldGet6.default)(this, _formData)[name] = value;
76
+ this.publish(`${name}.init.value`, value);
77
+ }
78
+ }
79
+ setFieldsValue(values, isEmitValuseChange = true) {
80
+ const allFields = (0, _classPrivateMethodGet2.default)(this, _getAllFields, _getAllFields2).call(this);
81
+ const newFormData = {
82
+ ...(0, _classPrivateFieldGet6.default)(this, _formData)
83
+ };
84
+ Object.entries(values).forEach(([k, v]) => {
85
+ if (allFields.includes(k)) {
86
+ newFormData[k] = v;
87
+ (0, _classPrivateFieldGet6.default)(this, _initData) && ((0, _classPrivateFieldGet6.default)(this, _initData)[k] = v);
88
+ this.publish(`${k}.init.value`, v);
89
+ }
90
+ });
91
+ (0, _classPrivateFieldSet2.default)(this, _formData, newFormData);
92
+ if (isEmitValuseChange) {
93
+ var _classPrivateFieldGet3, _classPrivateFieldGet4;
94
+ (_classPrivateFieldGet3 = (0, _classPrivateFieldGet6.default)(this, _options)) === null || _classPrivateFieldGet3 === void 0 ? void 0 : (_classPrivateFieldGet4 = _classPrivateFieldGet3.onValuesChanged) === null || _classPrivateFieldGet4 === void 0 ? void 0 : _classPrivateFieldGet4.call(_classPrivateFieldGet3, {
95
+ changedValues: values,
96
+ allValues: this.getAllValues()
97
+ });
98
+ }
99
+ }
100
+ resetFields(name) {
101
+ if (name) {
102
+ (0, _classPrivateFieldGet6.default)(this, _formData)[name] = null;
103
+ this.publish(`${name}.reset.fields`, null);
104
+ } else {
105
+ (0, _classPrivateFieldSet2.default)(this, _formData, {});
106
+ this.publish("reset.fields", null);
107
+ }
108
+ }
109
+ getFieldsValue(name) {
110
+ if (name) {
111
+ return (0, _classPrivateFieldGet6.default)(this, _formData)[name];
112
+ }
113
+ return this.getAllValues();
114
+ }
115
+ validateFields(callback) {
116
+ const allFields = (0, _classPrivateMethodGet2.default)(this, _getAllFields, _getAllFields2).call(this);
117
+ const results = [];
118
+ allFields.forEach(name => {
119
+ const field = (0, _classPrivateFieldGet6.default)(this, _fields).get(name);
120
+ if (field) {
121
+ results.push(this.validateField(field.detail));
122
+ }
123
+ });
124
+ if (results.some(result => (result === null || result === void 0 ? void 0 : result.type) !== "normal")) {
125
+ callback(true, results);
126
+ return false;
127
+ } else {
128
+ callback(false, (0, _classPrivateFieldGet6.default)(this, _formData));
129
+ return (0, _classPrivateFieldGet6.default)(this, _formData);
130
+ }
131
+ }
132
+ validateField(field) {
133
+ var _classPrivateFieldGet5;
134
+ const fieldDetail = typeof field === "string" ? (_classPrivateFieldGet5 = (0, _classPrivateFieldGet6.default)(this, _fields).get(field)) === null || _classPrivateFieldGet5 === void 0 ? void 0 : _classPrivateFieldGet5.detail : field;
135
+ if (!fieldDetail) return;
136
+ const {
137
+ name,
138
+ label,
139
+ validate
140
+ } = fieldDetail;
141
+ const validateValue = (0, _classPrivateFieldGet6.default)(this, _formData)[name];
142
+ const messageBody = (message, type = "error") => {
143
+ return {
144
+ type,
145
+ message
146
+ };
147
+ };
148
+ const getName = () => label !== null && label !== void 0 ? label : name;
149
+ const valid = (validate, value) => {
150
+ const {
151
+ required,
152
+ pattern,
153
+ message,
154
+ min,
155
+ max,
156
+ validator
157
+ } = validate;
158
+ const label = getName();
159
+ if (required && (typeof value === "object" ? (0, _lodash.isEmpty)(value) : typeof value === "number" ? false : !value)) {
160
+ return messageBody((message === null || message === void 0 ? void 0 : message.required) || `${label}为必填项`);
161
+ }
162
+ if (pattern) {
163
+ const reg = new RegExp(pattern);
164
+ if (!reg.test(value)) {
165
+ return messageBody((message === null || message === void 0 ? void 0 : message.pattern) || `${label}没有匹配正则 ${pattern}`);
166
+ }
167
+ }
168
+ if (min && (!value || value.length < min)) {
169
+ return messageBody((message === null || message === void 0 ? void 0 : message.min) || `${label}至少包含 ${min} 个字符`);
170
+ }
171
+ if (max && value && value.length > max) {
172
+ return messageBody((message === null || message === void 0 ? void 0 : message.max) || `${label}不能超过 ${max} 个字符`);
173
+ }
174
+ if (validator) {
175
+ const result = validator(value);
176
+ if (result) return typeof result === "string" ? messageBody(result, result ? "error" : "normal") : result;
177
+ }
178
+ return messageBody("", "normal");
179
+ };
180
+ const result = valid(validate, validateValue);
181
+ this.publish(`${name}.validate`, result);
182
+ return result;
183
+ }
184
+ getValueFromEvent(e) {
185
+ if (!e || !e.target) {
186
+ return e;
187
+ }
188
+ const target = e.target;
189
+ return target.type === "checkbox" ? target.checked : target.value;
190
+ }
191
+ resetValidateState() {
192
+ this.publish(`reset.validate`, null);
193
+ }
194
+ onWatch(name, event, callback, options) {
195
+ const field = (0, _classPrivateFieldGet6.default)(this, _fields).get(name);
196
+ if (field) {
197
+ var _options$needValidate;
198
+ const value = this.getValueFromEvent(event);
199
+ this.setFieldsValue({
200
+ [name]: value
201
+ });
202
+ if ((_options$needValidate = options === null || options === void 0 ? void 0 : options.needValidate) !== null && _options$needValidate !== void 0 ? _options$needValidate : true) {
203
+ this.validateField(field.detail);
204
+ }
205
+ callback === null || callback === void 0 ? void 0 : callback(value);
206
+ }
207
+ }
208
+ }
209
+ exports.FormStore = FormStore;
210
+ function _getAllFields2() {
211
+ return [...(0, _classPrivateFieldGet6.default)(this, _fields).keys()];
212
+ }
213
+ (0, _defineProperty2.default)(FormStore, "uid", void 0);
214
+ (0, _defineProperty2.default)(FormStore, "instance", new Map());
215
+ //# sourceMappingURL=FormStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormStore.js","names":["_lodash","require","_PubSub","uid","Field","field","detail","constructor","name","_fields","WeakMap","_options","_formData","_initData","_getAllFields","WeakSet","FormStore","PubSub","getInstance","options","instance","get","set","_classPrivateMethodInitSpec2","default","_classPrivateFieldInitSpec2","writable","value","Map","_classPrivateFieldSet2","setField","_classPrivateFieldGet6","getAllValues","setInitValue","values","isEmitValuseChange","setFieldsValue","setFieldsValueByInitData","_classPrivateFieldGet2","publish","allFields","_classPrivateMethodGet2","_getAllFields2","call","newFormData","Object","entries","forEach","k","v","includes","_classPrivateFieldGet3","_classPrivateFieldGet4","onValuesChanged","changedValues","allValues","resetFields","getFieldsValue","validateFields","callback","results","push","validateField","some","result","type","_classPrivateFieldGet5","fieldDetail","label","validate","validateValue","messageBody","message","getName","valid","required","pattern","min","max","validator","isEmpty","reg","RegExp","test","length","getValueFromEvent","e","target","checked","resetValidateState","onWatch","event","_options$needValidate","needValidate","exports","keys","_defineProperty2"],"sources":["../../src/FormStore.ts"],"sourcesContent":["import { isEmpty } from \"lodash\";\nimport { PubSub } from \"./PubSub.js\";\n\ninterface FormStoreOptions {\n onValuesChanged?: (data: any) => void;\n}\n\ninterface FieldDetail {\n name: string;\n label?: string;\n originProps?: Record<string, any>;\n validate: Validate;\n [k: string]: any;\n}\n\nexport interface MessageBody {\n message: string;\n type: string;\n}\n\nexport interface WatchOptions {\n needValidate?: boolean;\n}\n\ninterface Validate {\n required?: boolean;\n pattern?: string;\n min?: number;\n max?: number;\n message?: {\n required?: string;\n pattern?: string;\n min?: string;\n max?: string;\n };\n validator?: (value: any) => MessageBody | string;\n}\n\nlet uid = 0;\n\nclass Field {\n field: string;\n detail: FieldDetail;\n constructor(name: string, detail: FieldDetail) {\n this.field = name;\n this.detail = detail;\n }\n}\n\nexport class FormStore extends PubSub {\n static uid: number;\n static instance: Map<number, FormStore> = new Map();\n static getInstance(options?: FormStoreOptions): FormStore {\n if (!this.instance.get(uid)) {\n this.uid = uid;\n this.instance.set(this.uid, new FormStore(options));\n uid += 1;\n }\n return this.instance.get(this.uid) as FormStore;\n }\n\n #fields: Map<string, Field> = new Map();\n #options: FormStoreOptions | undefined;\n #formData!: Record<string, unknown>;\n #initData: Record<string, unknown> | undefined;\n\n constructor(options?: FormStoreOptions) {\n super();\n this.#formData = {};\n this.#options = options;\n }\n\n setField(name: string, detail: FieldDetail) {\n this.#fields.set(name, new Field(name, detail));\n }\n #getAllFields() {\n return [...this.#fields.keys()];\n }\n\n getAllValues() {\n return this.#formData;\n }\n\n setInitValue(values: Record<string, unknown>, isEmitValuseChange = true) {\n this.#initData = values;\n this.setFieldsValue(values, isEmitValuseChange);\n }\n\n setFieldsValueByInitData(name: string) {\n const value = this.#initData?.[name];\n if (value) {\n this.#formData[name] = value;\n this.publish(`${name}.init.value`, value);\n }\n }\n\n setFieldsValue(values: Record<string, unknown>, isEmitValuseChange = true) {\n const allFields = this.#getAllFields();\n const newFormData: Record<string, unknown> = {\n ...this.#formData,\n };\n Object.entries(values).forEach(([k, v]) => {\n if (allFields.includes(k)) {\n newFormData[k] = v;\n this.#initData && (this.#initData[k] = v);\n this.publish(`${k}.init.value`, v);\n }\n });\n this.#formData = newFormData;\n\n if (isEmitValuseChange) {\n this.#options?.onValuesChanged?.({\n changedValues: values,\n allValues: this.getAllValues(),\n });\n }\n }\n\n resetFields(name?: string) {\n if (name) {\n this.#formData[name] = null;\n this.publish(`${name}.reset.fields`, null);\n } else {\n this.#formData = {};\n this.publish(\"reset.fields\", null);\n }\n }\n\n getFieldsValue(name?: string) {\n if (name) {\n return this.#formData[name];\n }\n return this.getAllValues();\n }\n\n validateFields(\n callback: (err: boolean, value: any) => void\n ): boolean | Record<string, unknown> {\n const allFields = this.#getAllFields();\n const results: Array<MessageBody | undefined> = [];\n allFields.forEach((name) => {\n const field = this.#fields.get(name);\n if (field) {\n results.push(this.validateField(field.detail));\n }\n });\n\n if (results.some((result) => result?.type !== \"normal\")) {\n callback(true, results);\n return false;\n } else {\n callback(false, this.#formData);\n return this.#formData;\n }\n }\n\n validateField(field: string | FieldDetail) {\n const fieldDetail =\n typeof field === \"string\" ? this.#fields.get(field)?.detail : field;\n if (!fieldDetail) return;\n const { name, label, validate } = fieldDetail;\n const validateValue = this.#formData[name];\n\n const messageBody = (message: string, type = \"error\") => {\n return {\n type,\n message,\n };\n };\n\n const getName = () => label ?? name;\n\n const valid = (validate: Validate, value: string): MessageBody => {\n const { required, pattern, message, min, max, validator } = validate;\n const label = getName();\n\n if (\n required &&\n (typeof value === \"object\"\n ? isEmpty(value)\n : typeof value === \"number\"\n ? false\n : !value)\n ) {\n return messageBody(message?.required || `${label}为必填项`);\n }\n\n if (pattern) {\n const reg = new RegExp(pattern);\n if (!reg.test(value)) {\n return messageBody(\n message?.pattern || `${label}没有匹配正则 ${pattern}`\n );\n }\n }\n\n if (min && (!value || value.length < min)) {\n return messageBody(message?.min || `${label}至少包含 ${min} 个字符`);\n }\n\n if (max && value && value.length > max) {\n return messageBody(message?.max || `${label}不能超过 ${max} 个字符`);\n }\n\n if (validator) {\n const result = validator(value);\n if (result)\n return typeof result === \"string\"\n ? messageBody(result, result ? \"error\" : \"normal\")\n : (result as MessageBody);\n }\n\n return messageBody(\"\", \"normal\");\n };\n\n const result = valid(validate, validateValue as string);\n this.publish(`${name}.validate`, result);\n return result;\n }\n\n getValueFromEvent(e: React.ChangeEvent): any {\n if (!e || !e.target) {\n return e;\n }\n const target = e.target as HTMLInputElement;\n return target.type === \"checkbox\" ? target.checked : target.value;\n }\n\n resetValidateState() {\n this.publish(`reset.validate`, null);\n }\n\n onWatch(\n name: string,\n event: React.ChangeEvent,\n callback?: (v: string) => void,\n options?: WatchOptions\n ) {\n const field = this.#fields.get(name);\n\n if (field) {\n const value = this.getValueFromEvent(event);\n\n this.setFieldsValue({\n [name]: value,\n });\n\n if (options?.needValidate ?? true) {\n this.validateField(field.detail);\n }\n callback?.(value);\n }\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.PubSub = void 0;
7
+ var _lodash = require("lodash");
8
+ class PubSub {
9
+ #topics = {};
10
+ #subUid = 0;
11
+ publish(topic, body) {
12
+ if (!this.#topics[topic]) {
13
+ return;
14
+ }
15
+ const subscribers = this.#topics[topic];
16
+ let len = subscribers ? subscribers.length : 0;
17
+ while (len--) {
18
+ subscribers[len].func(topic, body);
19
+ }
20
+ }
21
+ subscribe(topic, fn) {
22
+ if (!this.#topics[topic]) {
23
+ this.#topics[topic] = [];
24
+ }
25
+ const token = (++this.#subUid).toString();
26
+ this.#topics[topic].push({
27
+ token: token,
28
+ func: fn
29
+ });
30
+ return token;
31
+ }
32
+ unsubscribe(token) {
33
+ for (const m in this.#topics) {
34
+ if (this.#topics[m]) {
35
+ (0, _lodash.remove)(this.#topics[m], item => item.token === token);
36
+ }
37
+ }
38
+ }
39
+ }
40
+ exports.PubSub = PubSub;
41
+ //# sourceMappingURL=PubSub.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PubSub.js","names":["_lodash","require","PubSub","topics","subUid","publish","topic","body","subscribers","len","length","func","subscribe","fn","token","toString","push","unsubscribe","m","remove","item","exports"],"sources":["../../src/PubSub.ts"],"sourcesContent":["import { remove } from \"lodash\";\n\nexport class PubSub {\n #topics: Record<string, { token: string; func: Function }[]> = {};\n #subUid = 0;\n\n publish(topic: string, body: any): void {\n if (!this.#topics[topic]) {\n return;\n }\n const subscribers = this.#topics[topic];\n let len = subscribers ? subscribers.length : 0;\n while (len--) {\n subscribers[len].func(topic, body);\n }\n }\n\n subscribe(topic: string, fn: (topic: string, detail: any) => void): string {\n if (!this.#topics[topic]) {\n this.#topics[topic] = [];\n }\n const token = (++this.#subUid).toString();\n this.#topics[topic].push({\n token: token,\n func: fn,\n });\n return token;\n }\n\n unsubscribe(token: string): void {\n for (const m in this.#topics) {\n if (this.#topics[m]) {\n remove(this.#topics[m], (item) => item.token === token);\n }\n }\n }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AAEO,MAAMC,MAAM,CAAC;EAClB,CAACC,MAAM,GAAwD,CAAC,CAAC;EACjE,CAACC,MAAM,GAAG,CAAC;EAEXC,OAAOA,CAACC,KAAa,EAAEC,IAAS,EAAQ;IACtC,IAAI,CAAC,IAAI,CAAC,CAACJ,MAAM,CAACG,KAAK,CAAC,EAAE;MACxB;IACF;IACA,MAAME,WAAW,GAAG,IAAI,CAAC,CAACL,MAAM,CAACG,KAAK,CAAC;IACvC,IAAIG,GAAG,GAAGD,WAAW,GAAGA,WAAW,CAACE,MAAM,GAAG,CAAC;IAC9C,OAAOD,GAAG,EAAE,EAAE;MACZD,WAAW,CAACC,GAAG,CAAC,CAACE,IAAI,CAACL,KAAK,EAAEC,IAAI,CAAC;IACpC;EACF;EAEAK,SAASA,CAACN,KAAa,EAAEO,EAAwC,EAAU;IACzE,IAAI,CAAC,IAAI,CAAC,CAACV,MAAM,CAACG,KAAK,CAAC,EAAE;MACxB,IAAI,CAAC,CAACH,MAAM,CAACG,KAAK,CAAC,GAAG,EAAE;IAC1B;IACA,MAAMQ,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,CAACV,MAAM,EAAEW,QAAQ,CAAC,CAAC;IACzC,IAAI,CAAC,CAACZ,MAAM,CAACG,KAAK,CAAC,CAACU,IAAI,CAAC;MACvBF,KAAK,EAAEA,KAAK;MACZH,IAAI,EAAEE;IACR,CAAC,CAAC;IACF,OAAOC,KAAK;EACd;EAEAG,WAAWA,CAACH,KAAa,EAAQ;IAC/B,KAAK,MAAMI,CAAC,IAAI,IAAI,CAAC,CAACf,MAAM,EAAE;MAC5B,IAAI,IAAI,CAAC,CAACA,MAAM,CAACe,CAAC,CAAC,EAAE;QACnB,IAAAC,cAAM,EAAC,IAAI,CAAC,CAAChB,MAAM,CAACe,CAAC,CAAC,EAAGE,IAAI,IAAKA,IAAI,CAACN,KAAK,KAAKA,KAAK,CAAC;MACzD;IACF;EACF;AACF;AAACO,OAAA,CAAAnB,MAAA,GAAAA,MAAA"}
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ var _Form = require("./Form.js");
7
+ Object.keys(_Form).forEach(function (key) {
8
+ if (key === "default" || key === "__esModule") return;
9
+ if (key in exports && exports[key] === _Form[key]) return;
10
+ Object.defineProperty(exports, key, {
11
+ enumerable: true,
12
+ get: function () {
13
+ return _Form[key];
14
+ }
15
+ });
16
+ });
17
+ var _FormItemElement = require("./FormItemElement.js");
18
+ Object.keys(_FormItemElement).forEach(function (key) {
19
+ if (key === "default" || key === "__esModule") return;
20
+ if (key in exports && exports[key] === _FormItemElement[key]) return;
21
+ Object.defineProperty(exports, key, {
22
+ enumerable: true,
23
+ get: function () {
24
+ return _FormItemElement[key];
25
+ }
26
+ });
27
+ });
28
+ var _FormStore = require("./FormStore.js");
29
+ Object.keys(_FormStore).forEach(function (key) {
30
+ if (key === "default" || key === "__esModule") return;
31
+ if (key in exports && exports[key] === _FormStore[key]) return;
32
+ Object.defineProperty(exports, key, {
33
+ enumerable: true,
34
+ get: function () {
35
+ return _FormStore[key];
36
+ }
37
+ });
38
+ });
39
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["_Form","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_FormItemElement","_FormStore"],"sources":["../../src/index.ts"],"sourcesContent":["export * from \"./Form.js\";\nexport * from \"./FormItemElement.js\";\nexport * from \"./FormStore.js\";\n"],"mappings":";;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,KAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,KAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAT,KAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AACA,IAAAK,gBAAA,GAAAT,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAO,gBAAA,EAAAN,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAK,gBAAA,CAAAL,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAC,gBAAA,CAAAL,GAAA;IAAA;EAAA;AAAA;AACA,IAAAM,UAAA,GAAAV,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAQ,UAAA,EAAAP,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAM,UAAA,CAAAN,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAE,UAAA,CAAAN,GAAA;IAAA;EAAA;AAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=Form.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Form.js","names":[],"sources":["../../src/Form.ts"],"sourcesContent":["import type { FormStore } from \"./FormStore.js\";\n\nexport interface AbstractForm extends HTMLElement {\n readonly isFormElement: true;\n formStore: FormStore;\n size?: \"large\" | \"medium\" | \"small\" | \"xs\";\n layout?: \"horizontal\" | \"vertical\" | \"inline\";\n validate(): boolean | Record<string, unknown>;\n validateField(name: string): void;\n resetValidateState(): void;\n}\n"],"mappings":""}
@@ -0,0 +1,108 @@
1
+ import _classPrivateFieldInitSpec from "@babel/runtime/helpers/classPrivateFieldInitSpec";
2
+ import _classPrivateFieldSet from "@babel/runtime/helpers/classPrivateFieldSet";
3
+ import _classPrivateFieldGet from "@babel/runtime/helpers/classPrivateFieldGet";
4
+ import _applyDecs2203R from "@babel/runtime/helpers/applyDecs2203R";
5
+ var _dec, _initProto;
6
+ import { createDecorators } from "@next-core/element";
7
+ import { ReactNextElement } from "@next-core/react-element";
8
+ var {
9
+ method
10
+ } = createDecorators();
11
+ _dec = method();
12
+ var _A = /*#__PURE__*/new WeakMap();
13
+ var _notRender = /*#__PURE__*/new WeakMap();
14
+ var _B = /*#__PURE__*/new WeakMap();
15
+ var _validate = /*#__PURE__*/new WeakMap();
16
+ var _C = /*#__PURE__*/new WeakMap();
17
+ var _bindFormItem = /*#__PURE__*/new WeakMap();
18
+ export class FormItemElementBase extends ReactNextElement {
19
+ constructor() {
20
+ super(...arguments);
21
+ _classPrivateFieldInitSpec(this, _bindFormItem, {
22
+ get: _get_bindFormItem,
23
+ set: _set_bindFormItem
24
+ });
25
+ _classPrivateFieldInitSpec(this, _validate, {
26
+ get: _get_validate,
27
+ set: _set_validate
28
+ });
29
+ _classPrivateFieldInitSpec(this, _notRender, {
30
+ get: _get__notRender,
31
+ set: _set__notRender
32
+ });
33
+ _classPrivateFieldInitSpec(this, _A, {
34
+ writable: true,
35
+ value: false
36
+ });
37
+ _classPrivateFieldInitSpec(this, _B, {
38
+ writable: true,
39
+ value: "normal"
40
+ });
41
+ _classPrivateFieldInitSpec(this, _C, {
42
+ writable: true,
43
+ value: false
44
+ });
45
+ _initProto(this);
46
+ }
47
+ get isFormItemElement() {
48
+ return true;
49
+ }
50
+ set validateState(value) {
51
+ _classPrivateFieldSet(this, _validate, value);
52
+ this._render();
53
+ }
54
+ get validateState() {
55
+ return _classPrivateFieldGet(this, _validate);
56
+ }
57
+
58
+ /**
59
+ * 控制该表单项是否隐藏
60
+ * @default false
61
+ * @group ui
62
+ */
63
+ set notRender(value) {
64
+ this.hidden = value;
65
+ _classPrivateFieldSet(this, _notRender, value);
66
+ this._render();
67
+ }
68
+ get notRender() {
69
+ return _classPrivateFieldGet(this, _notRender);
70
+ }
71
+ get $bindFormItem() {
72
+ return _classPrivateFieldGet(this, _bindFormItem);
73
+ }
74
+ set $bindFormItem(value) {
75
+ _classPrivateFieldSet(this, _bindFormItem, value);
76
+ this._render();
77
+ }
78
+ getFormElement() {
79
+ // eslint-disable-next-line @typescript-eslint/no-this-alias
80
+ var element = this;
81
+ while (element = element.parentNode) {
82
+ if (!element || element.isFormElement) {
83
+ break;
84
+ }
85
+ }
86
+ return element;
87
+ }
88
+ }
89
+ function _get__notRender() {
90
+ return _classPrivateFieldGet(this, _A);
91
+ }
92
+ function _set__notRender(v) {
93
+ _classPrivateFieldSet(this, _A, v);
94
+ }
95
+ function _get_validate() {
96
+ return _classPrivateFieldGet(this, _B);
97
+ }
98
+ function _set_validate(v) {
99
+ _classPrivateFieldSet(this, _B, v);
100
+ }
101
+ function _get_bindFormItem() {
102
+ return _classPrivateFieldGet(this, _C);
103
+ }
104
+ function _set_bindFormItem(v) {
105
+ _classPrivateFieldSet(this, _C, v);
106
+ }
107
+ [_initProto] = _applyDecs2203R(FormItemElementBase, [[_dec, 2, "getFormElement"]], []).e;
108
+ //# sourceMappingURL=FormItemElement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormItemElement.js","names":["createDecorators","ReactNextElement","method","_dec","_A","WeakMap","_notRender","_B","_validate","_C","_bindFormItem","FormItemElementBase","constructor","arguments","_classPrivateFieldInitSpec","get","_get_bindFormItem","set","_set_bindFormItem","_get_validate","_set_validate","_get__notRender","_set__notRender","writable","value","_initProto","isFormItemElement","validateState","_classPrivateFieldSet","_render","_classPrivateFieldGet","notRender","hidden","$bindFormItem","getFormElement","element","parentNode","isFormElement","v","_applyDecs2203R","e"],"sources":["../../src/FormItemElement.tsx"],"sourcesContent":["import { createDecorators } from \"@next-core/element\";\nimport { ReactNextElement } from \"@next-core/react-element\";\nimport type { AbstractForm } from \"./Form.js\";\n\nconst { method } = createDecorators();\n\nexport abstract class FormItemElementBase extends ReactNextElement {\n accessor #_notRender = false;\n accessor #validate = \"normal\";\n accessor #bindFormItem = false;\n\n get isFormItemElement(): true {\n return true;\n }\n\n set validateState(value: string) {\n this.#validate = value;\n this._render();\n }\n get validateState() {\n return this.#validate;\n }\n\n /**\n * 控制该表单项是否隐藏\n * @default false\n * @group ui\n */\n set notRender(value: boolean) {\n this.hidden = value;\n this.#_notRender = value;\n this._render();\n }\n get notRender(): boolean {\n return this.#_notRender;\n }\n\n get $bindFormItem() {\n return this.#bindFormItem;\n }\n set $bindFormItem(value: boolean) {\n this.#bindFormItem = value;\n this._render();\n }\n\n @method()\n getFormElement(): AbstractForm | null {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n let element: AbstractForm | null = this as unknown as AbstractForm;\n while ((element = element.parentNode as AbstractForm | null)) {\n if (!element || element.isFormElement) {\n break;\n }\n }\n return element as AbstractForm | null;\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,210 @@
1
+ import _objectSpread from "@babel/runtime/helpers/objectSpread2";
2
+ import _classPrivateMethodInitSpec from "@babel/runtime/helpers/classPrivateMethodInitSpec";
3
+ import _classPrivateFieldInitSpec from "@babel/runtime/helpers/classPrivateFieldInitSpec";
4
+ import _classPrivateMethodGet from "@babel/runtime/helpers/classPrivateMethodGet";
5
+ import _classPrivateFieldGet from "@babel/runtime/helpers/classPrivateFieldGet";
6
+ import _classPrivateFieldSet from "@babel/runtime/helpers/classPrivateFieldSet";
7
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
8
+ import { isEmpty } from "lodash";
9
+ import { PubSub } from "./PubSub.js";
10
+ var uid = 0;
11
+ class Field {
12
+ constructor(name, detail) {
13
+ _defineProperty(this, "field", void 0);
14
+ _defineProperty(this, "detail", void 0);
15
+ this.field = name;
16
+ this.detail = detail;
17
+ }
18
+ }
19
+ var _fields = /*#__PURE__*/new WeakMap();
20
+ var _options = /*#__PURE__*/new WeakMap();
21
+ var _formData = /*#__PURE__*/new WeakMap();
22
+ var _initData = /*#__PURE__*/new WeakMap();
23
+ var _getAllFields = /*#__PURE__*/new WeakSet();
24
+ export class FormStore extends PubSub {
25
+ static getInstance(options) {
26
+ if (!this.instance.get(uid)) {
27
+ this.uid = uid;
28
+ this.instance.set(this.uid, new FormStore(options));
29
+ uid += 1;
30
+ }
31
+ return this.instance.get(this.uid);
32
+ }
33
+ constructor(options) {
34
+ super();
35
+ _classPrivateMethodInitSpec(this, _getAllFields);
36
+ _classPrivateFieldInitSpec(this, _fields, {
37
+ writable: true,
38
+ value: new Map()
39
+ });
40
+ _classPrivateFieldInitSpec(this, _options, {
41
+ writable: true,
42
+ value: void 0
43
+ });
44
+ _classPrivateFieldInitSpec(this, _formData, {
45
+ writable: true,
46
+ value: void 0
47
+ });
48
+ _classPrivateFieldInitSpec(this, _initData, {
49
+ writable: true,
50
+ value: void 0
51
+ });
52
+ _classPrivateFieldSet(this, _formData, {});
53
+ _classPrivateFieldSet(this, _options, options);
54
+ }
55
+ setField(name, detail) {
56
+ _classPrivateFieldGet(this, _fields).set(name, new Field(name, detail));
57
+ }
58
+ getAllValues() {
59
+ return _classPrivateFieldGet(this, _formData);
60
+ }
61
+ setInitValue(values) {
62
+ var isEmitValuseChange = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
63
+ _classPrivateFieldSet(this, _initData, values);
64
+ this.setFieldsValue(values, isEmitValuseChange);
65
+ }
66
+ setFieldsValueByInitData(name) {
67
+ var _classPrivateFieldGet2;
68
+ var value = (_classPrivateFieldGet2 = _classPrivateFieldGet(this, _initData)) === null || _classPrivateFieldGet2 === void 0 ? void 0 : _classPrivateFieldGet2[name];
69
+ if (value) {
70
+ _classPrivateFieldGet(this, _formData)[name] = value;
71
+ this.publish("".concat(name, ".init.value"), value);
72
+ }
73
+ }
74
+ setFieldsValue(values) {
75
+ var isEmitValuseChange = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
76
+ var allFields = _classPrivateMethodGet(this, _getAllFields, _getAllFields2).call(this);
77
+ var newFormData = _objectSpread({}, _classPrivateFieldGet(this, _formData));
78
+ Object.entries(values).forEach(_ref => {
79
+ var [k, v] = _ref;
80
+ if (allFields.includes(k)) {
81
+ newFormData[k] = v;
82
+ _classPrivateFieldGet(this, _initData) && (_classPrivateFieldGet(this, _initData)[k] = v);
83
+ this.publish("".concat(k, ".init.value"), v);
84
+ }
85
+ });
86
+ _classPrivateFieldSet(this, _formData, newFormData);
87
+ if (isEmitValuseChange) {
88
+ var _classPrivateFieldGet3, _classPrivateFieldGet4;
89
+ (_classPrivateFieldGet3 = _classPrivateFieldGet(this, _options)) === null || _classPrivateFieldGet3 === void 0 ? void 0 : (_classPrivateFieldGet4 = _classPrivateFieldGet3.onValuesChanged) === null || _classPrivateFieldGet4 === void 0 ? void 0 : _classPrivateFieldGet4.call(_classPrivateFieldGet3, {
90
+ changedValues: values,
91
+ allValues: this.getAllValues()
92
+ });
93
+ }
94
+ }
95
+ resetFields(name) {
96
+ if (name) {
97
+ _classPrivateFieldGet(this, _formData)[name] = null;
98
+ this.publish("".concat(name, ".reset.fields"), null);
99
+ } else {
100
+ _classPrivateFieldSet(this, _formData, {});
101
+ this.publish("reset.fields", null);
102
+ }
103
+ }
104
+ getFieldsValue(name) {
105
+ if (name) {
106
+ return _classPrivateFieldGet(this, _formData)[name];
107
+ }
108
+ return this.getAllValues();
109
+ }
110
+ validateFields(callback) {
111
+ var allFields = _classPrivateMethodGet(this, _getAllFields, _getAllFields2).call(this);
112
+ var results = [];
113
+ allFields.forEach(name => {
114
+ var field = _classPrivateFieldGet(this, _fields).get(name);
115
+ if (field) {
116
+ results.push(this.validateField(field.detail));
117
+ }
118
+ });
119
+ if (results.some(result => (result === null || result === void 0 ? void 0 : result.type) !== "normal")) {
120
+ callback(true, results);
121
+ return false;
122
+ } else {
123
+ callback(false, _classPrivateFieldGet(this, _formData));
124
+ return _classPrivateFieldGet(this, _formData);
125
+ }
126
+ }
127
+ validateField(field) {
128
+ var _classPrivateFieldGet5;
129
+ var fieldDetail = typeof field === "string" ? (_classPrivateFieldGet5 = _classPrivateFieldGet(this, _fields).get(field)) === null || _classPrivateFieldGet5 === void 0 ? void 0 : _classPrivateFieldGet5.detail : field;
130
+ if (!fieldDetail) return;
131
+ var {
132
+ name,
133
+ label,
134
+ validate
135
+ } = fieldDetail;
136
+ var validateValue = _classPrivateFieldGet(this, _formData)[name];
137
+ var messageBody = function (message) {
138
+ var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "error";
139
+ return {
140
+ type,
141
+ message
142
+ };
143
+ };
144
+ var getName = () => label !== null && label !== void 0 ? label : name;
145
+ var valid = (validate, value) => {
146
+ var {
147
+ required,
148
+ pattern,
149
+ message,
150
+ min,
151
+ max,
152
+ validator
153
+ } = validate;
154
+ var label = getName();
155
+ if (required && (typeof value === "object" ? isEmpty(value) : typeof value === "number" ? false : !value)) {
156
+ return messageBody((message === null || message === void 0 ? void 0 : message.required) || "".concat(label, "\u4E3A\u5FC5\u586B\u9879"));
157
+ }
158
+ if (pattern) {
159
+ var reg = new RegExp(pattern);
160
+ if (!reg.test(value)) {
161
+ return messageBody((message === null || message === void 0 ? void 0 : message.pattern) || "".concat(label, "\u6CA1\u6709\u5339\u914D\u6B63\u5219 ").concat(pattern));
162
+ }
163
+ }
164
+ if (min && (!value || value.length < min)) {
165
+ return messageBody((message === null || message === void 0 ? void 0 : message.min) || "".concat(label, "\u81F3\u5C11\u5305\u542B ").concat(min, " \u4E2A\u5B57\u7B26"));
166
+ }
167
+ if (max && value && value.length > max) {
168
+ return messageBody((message === null || message === void 0 ? void 0 : message.max) || "".concat(label, "\u4E0D\u80FD\u8D85\u8FC7 ").concat(max, " \u4E2A\u5B57\u7B26"));
169
+ }
170
+ if (validator) {
171
+ var _result = validator(value);
172
+ if (_result) return typeof _result === "string" ? messageBody(_result, _result ? "error" : "normal") : _result;
173
+ }
174
+ return messageBody("", "normal");
175
+ };
176
+ var result = valid(validate, validateValue);
177
+ this.publish("".concat(name, ".validate"), result);
178
+ return result;
179
+ }
180
+ getValueFromEvent(e) {
181
+ if (!e || !e.target) {
182
+ return e;
183
+ }
184
+ var target = e.target;
185
+ return target.type === "checkbox" ? target.checked : target.value;
186
+ }
187
+ resetValidateState() {
188
+ this.publish("reset.validate", null);
189
+ }
190
+ onWatch(name, event, callback, options) {
191
+ var field = _classPrivateFieldGet(this, _fields).get(name);
192
+ if (field) {
193
+ var _options$needValidate;
194
+ var _value = this.getValueFromEvent(event);
195
+ this.setFieldsValue({
196
+ [name]: _value
197
+ });
198
+ if ((_options$needValidate = options === null || options === void 0 ? void 0 : options.needValidate) !== null && _options$needValidate !== void 0 ? _options$needValidate : true) {
199
+ this.validateField(field.detail);
200
+ }
201
+ callback === null || callback === void 0 ? void 0 : callback(_value);
202
+ }
203
+ }
204
+ }
205
+ function _getAllFields2() {
206
+ return [..._classPrivateFieldGet(this, _fields).keys()];
207
+ }
208
+ _defineProperty(FormStore, "uid", void 0);
209
+ _defineProperty(FormStore, "instance", new Map());
210
+ //# sourceMappingURL=FormStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormStore.js","names":["isEmpty","PubSub","uid","Field","constructor","name","detail","_defineProperty","field","_fields","WeakMap","_options","_formData","_initData","_getAllFields","WeakSet","FormStore","getInstance","options","instance","get","set","_classPrivateMethodInitSpec","_classPrivateFieldInitSpec","writable","value","Map","_classPrivateFieldSet","setField","_classPrivateFieldGet","getAllValues","setInitValue","values","isEmitValuseChange","arguments","length","undefined","setFieldsValue","setFieldsValueByInitData","_classPrivateFieldGet2","publish","concat","allFields","_classPrivateMethodGet","_getAllFields2","call","newFormData","_objectSpread","Object","entries","forEach","_ref","k","v","includes","_classPrivateFieldGet3","_classPrivateFieldGet4","onValuesChanged","changedValues","allValues","resetFields","getFieldsValue","validateFields","callback","results","push","validateField","some","result","type","_classPrivateFieldGet5","fieldDetail","label","validate","validateValue","messageBody","message","getName","valid","required","pattern","min","max","validator","reg","RegExp","test","getValueFromEvent","e","target","checked","resetValidateState","onWatch","event","_options$needValidate","needValidate","keys"],"sources":["../../src/FormStore.ts"],"sourcesContent":["import { isEmpty } from \"lodash\";\nimport { PubSub } from \"./PubSub.js\";\n\ninterface FormStoreOptions {\n onValuesChanged?: (data: any) => void;\n}\n\ninterface FieldDetail {\n name: string;\n label?: string;\n originProps?: Record<string, any>;\n validate: Validate;\n [k: string]: any;\n}\n\nexport interface MessageBody {\n message: string;\n type: string;\n}\n\nexport interface WatchOptions {\n needValidate?: boolean;\n}\n\ninterface Validate {\n required?: boolean;\n pattern?: string;\n min?: number;\n max?: number;\n message?: {\n required?: string;\n pattern?: string;\n min?: string;\n max?: string;\n };\n validator?: (value: any) => MessageBody | string;\n}\n\nlet uid = 0;\n\nclass Field {\n field: string;\n detail: FieldDetail;\n constructor(name: string, detail: FieldDetail) {\n this.field = name;\n this.detail = detail;\n }\n}\n\nexport class FormStore extends PubSub {\n static uid: number;\n static instance: Map<number, FormStore> = new Map();\n static getInstance(options?: FormStoreOptions): FormStore {\n if (!this.instance.get(uid)) {\n this.uid = uid;\n this.instance.set(this.uid, new FormStore(options));\n uid += 1;\n }\n return this.instance.get(this.uid) as FormStore;\n }\n\n #fields: Map<string, Field> = new Map();\n #options: FormStoreOptions | undefined;\n #formData!: Record<string, unknown>;\n #initData: Record<string, unknown> | undefined;\n\n constructor(options?: FormStoreOptions) {\n super();\n this.#formData = {};\n this.#options = options;\n }\n\n setField(name: string, detail: FieldDetail) {\n this.#fields.set(name, new Field(name, detail));\n }\n #getAllFields() {\n return [...this.#fields.keys()];\n }\n\n getAllValues() {\n return this.#formData;\n }\n\n setInitValue(values: Record<string, unknown>, isEmitValuseChange = true) {\n this.#initData = values;\n this.setFieldsValue(values, isEmitValuseChange);\n }\n\n setFieldsValueByInitData(name: string) {\n const value = this.#initData?.[name];\n if (value) {\n this.#formData[name] = value;\n this.publish(`${name}.init.value`, value);\n }\n }\n\n setFieldsValue(values: Record<string, unknown>, isEmitValuseChange = true) {\n const allFields = this.#getAllFields();\n const newFormData: Record<string, unknown> = {\n ...this.#formData,\n };\n Object.entries(values).forEach(([k, v]) => {\n if (allFields.includes(k)) {\n newFormData[k] = v;\n this.#initData && (this.#initData[k] = v);\n this.publish(`${k}.init.value`, v);\n }\n });\n this.#formData = newFormData;\n\n if (isEmitValuseChange) {\n this.#options?.onValuesChanged?.({\n changedValues: values,\n allValues: this.getAllValues(),\n });\n }\n }\n\n resetFields(name?: string) {\n if (name) {\n this.#formData[name] = null;\n this.publish(`${name}.reset.fields`, null);\n } else {\n this.#formData = {};\n this.publish(\"reset.fields\", null);\n }\n }\n\n getFieldsValue(name?: string) {\n if (name) {\n return this.#formData[name];\n }\n return this.getAllValues();\n }\n\n validateFields(\n callback: (err: boolean, value: any) => void\n ): boolean | Record<string, unknown> {\n const allFields = this.#getAllFields();\n const results: Array<MessageBody | undefined> = [];\n allFields.forEach((name) => {\n const field = this.#fields.get(name);\n if (field) {\n results.push(this.validateField(field.detail));\n }\n });\n\n if (results.some((result) => result?.type !== \"normal\")) {\n callback(true, results);\n return false;\n } else {\n callback(false, this.#formData);\n return this.#formData;\n }\n }\n\n validateField(field: string | FieldDetail) {\n const fieldDetail =\n typeof field === \"string\" ? this.#fields.get(field)?.detail : field;\n if (!fieldDetail) return;\n const { name, label, validate } = fieldDetail;\n const validateValue = this.#formData[name];\n\n const messageBody = (message: string, type = \"error\") => {\n return {\n type,\n message,\n };\n };\n\n const getName = () => label ?? name;\n\n const valid = (validate: Validate, value: string): MessageBody => {\n const { required, pattern, message, min, max, validator } = validate;\n const label = getName();\n\n if (\n required &&\n (typeof value === \"object\"\n ? isEmpty(value)\n : typeof value === \"number\"\n ? false\n : !value)\n ) {\n return messageBody(message?.required || `${label}为必填项`);\n }\n\n if (pattern) {\n const reg = new RegExp(pattern);\n if (!reg.test(value)) {\n return messageBody(\n message?.pattern || `${label}没有匹配正则 ${pattern}`\n );\n }\n }\n\n if (min && (!value || value.length < min)) {\n return messageBody(message?.min || `${label}至少包含 ${min} 个字符`);\n }\n\n if (max && value && value.length > max) {\n return messageBody(message?.max || `${label}不能超过 ${max} 个字符`);\n }\n\n if (validator) {\n const result = validator(value);\n if (result)\n return typeof result === \"string\"\n ? messageBody(result, result ? \"error\" : \"normal\")\n : (result as MessageBody);\n }\n\n return messageBody(\"\", \"normal\");\n };\n\n const result = valid(validate, validateValue as string);\n this.publish(`${name}.validate`, result);\n return result;\n }\n\n getValueFromEvent(e: React.ChangeEvent): any {\n if (!e || !e.target) {\n return e;\n }\n const target = e.target as HTMLInputElement;\n return target.type === \"checkbox\" ? target.checked : target.value;\n }\n\n resetValidateState() {\n this.publish(`reset.validate`, null);\n }\n\n onWatch(\n name: string,\n event: React.ChangeEvent,\n callback?: (v: string) => void,\n options?: WatchOptions\n ) {\n const field = this.#fields.get(name);\n\n if (field) {\n const value = this.getValueFromEvent(event);\n\n this.setFieldsValue({\n [name]: value,\n });\n\n if (options?.needValidate ?? true) {\n this.validateField(field.detail);\n }\n callback?.(value);\n }\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ import _classPrivateFieldInitSpec from "@babel/runtime/helpers/classPrivateFieldInitSpec";
2
+ import _classPrivateFieldSet from "@babel/runtime/helpers/classPrivateFieldSet";
3
+ import _classPrivateFieldGet from "@babel/runtime/helpers/classPrivateFieldGet";
4
+ import { remove } from "lodash";
5
+ var _topics = /*#__PURE__*/new WeakMap();
6
+ var _subUid = /*#__PURE__*/new WeakMap();
7
+ export class PubSub {
8
+ constructor() {
9
+ _classPrivateFieldInitSpec(this, _topics, {
10
+ writable: true,
11
+ value: {}
12
+ });
13
+ _classPrivateFieldInitSpec(this, _subUid, {
14
+ writable: true,
15
+ value: 0
16
+ });
17
+ }
18
+ publish(topic, body) {
19
+ if (!_classPrivateFieldGet(this, _topics)[topic]) {
20
+ return;
21
+ }
22
+ var subscribers = _classPrivateFieldGet(this, _topics)[topic];
23
+ var len = subscribers ? subscribers.length : 0;
24
+ while (len--) {
25
+ subscribers[len].func(topic, body);
26
+ }
27
+ }
28
+ subscribe(topic, fn) {
29
+ var _this$subUid;
30
+ if (!_classPrivateFieldGet(this, _topics)[topic]) {
31
+ _classPrivateFieldGet(this, _topics)[topic] = [];
32
+ }
33
+ var token = _classPrivateFieldSet(this, _subUid, (_this$subUid = _classPrivateFieldGet(this, _subUid), ++_this$subUid)).toString();
34
+ _classPrivateFieldGet(this, _topics)[topic].push({
35
+ token: token,
36
+ func: fn
37
+ });
38
+ return token;
39
+ }
40
+ unsubscribe(token) {
41
+ for (var m in _classPrivateFieldGet(this, _topics)) {
42
+ if (_classPrivateFieldGet(this, _topics)[m]) {
43
+ remove(_classPrivateFieldGet(this, _topics)[m], item => item.token === token);
44
+ }
45
+ }
46
+ }
47
+ }
48
+ //# sourceMappingURL=PubSub.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PubSub.js","names":["remove","_topics","WeakMap","_subUid","PubSub","constructor","_classPrivateFieldInitSpec","writable","value","publish","topic","body","_classPrivateFieldGet","subscribers","len","length","func","subscribe","fn","_this$subUid","token","_classPrivateFieldSet","toString","push","unsubscribe","m","item"],"sources":["../../src/PubSub.ts"],"sourcesContent":["import { remove } from \"lodash\";\n\nexport class PubSub {\n #topics: Record<string, { token: string; func: Function }[]> = {};\n #subUid = 0;\n\n publish(topic: string, body: any): void {\n if (!this.#topics[topic]) {\n return;\n }\n const subscribers = this.#topics[topic];\n let len = subscribers ? subscribers.length : 0;\n while (len--) {\n subscribers[len].func(topic, body);\n }\n }\n\n subscribe(topic: string, fn: (topic: string, detail: any) => void): string {\n if (!this.#topics[topic]) {\n this.#topics[topic] = [];\n }\n const token = (++this.#subUid).toString();\n this.#topics[topic].push({\n token: token,\n func: fn,\n });\n return token;\n }\n\n unsubscribe(token: string): void {\n for (const m in this.#topics) {\n if (this.#topics[m]) {\n remove(this.#topics[m], (item) => item.token === token);\n }\n }\n }\n}\n"],"mappings":";;;AAAA,SAASA,MAAM,QAAQ,QAAQ;AAAC,IAAAC,OAAA,oBAAAC,OAAA;AAAA,IAAAC,OAAA,oBAAAD,OAAA;AAEhC,OAAO,MAAME,MAAM,CAAC;EAAAC,YAAA;IAAAC,0BAAA,OAAAL,OAAA;MAAAM,QAAA;MAAAC,KAAA,EAC6C,CAAC;IAAC;IAAAF,0BAAA,OAAAH,OAAA;MAAAI,QAAA;MAAAC,KAAA,EACvD;IAAC;EAAA;EAEXC,OAAOA,CAACC,KAAa,EAAEC,IAAS,EAAQ;IACtC,IAAI,CAACC,qBAAA,KAAI,EAAAX,OAAA,EAASS,KAAK,CAAC,EAAE;MACxB;IACF;IACA,IAAMG,WAAW,GAAGD,qBAAA,KAAI,EAAAX,OAAA,EAASS,KAAK,CAAC;IACvC,IAAII,GAAG,GAAGD,WAAW,GAAGA,WAAW,CAACE,MAAM,GAAG,CAAC;IAC9C,OAAOD,GAAG,EAAE,EAAE;MACZD,WAAW,CAACC,GAAG,CAAC,CAACE,IAAI,CAACN,KAAK,EAAEC,IAAI,CAAC;IACpC;EACF;EAEAM,SAASA,CAACP,KAAa,EAAEQ,EAAwC,EAAU;IAAA,IAAAC,YAAA;IACzE,IAAI,CAACP,qBAAA,KAAI,EAAAX,OAAA,EAASS,KAAK,CAAC,EAAE;MACxBE,qBAAA,KAAI,EAAAX,OAAA,EAASS,KAAK,CAAC,GAAG,EAAE;IAC1B;IACA,IAAMU,KAAK,GAAGC,qBAAA,CAAG,IAAI,EAAAlB,OAAA,GAAAgB,YAAA,GAAAP,qBAAA,CAAJ,IAAI,EAAAT,OAAA,KAAAgB,YAAA,GAAUG,QAAQ,CAAC,CAAC;IACzCV,qBAAA,KAAI,EAAAX,OAAA,EAASS,KAAK,CAAC,CAACa,IAAI,CAAC;MACvBH,KAAK,EAAEA,KAAK;MACZJ,IAAI,EAAEE;IACR,CAAC,CAAC;IACF,OAAOE,KAAK;EACd;EAEAI,WAAWA,CAACJ,KAAa,EAAQ;IAC/B,KAAK,IAAMK,CAAC,IAAAb,qBAAA,CAAI,IAAI,EAAAX,OAAA,GAAU;MAC5B,IAAIW,qBAAA,KAAI,EAAAX,OAAA,EAASwB,CAAC,CAAC,EAAE;QACnBzB,MAAM,CAACY,qBAAA,KAAI,EAAAX,OAAA,EAASwB,CAAC,CAAC,EAAGC,IAAI,IAAKA,IAAI,CAACN,KAAK,KAAKA,KAAK,CAAC;MACzD;IACF;EACF;AACF"}
@@ -0,0 +1,4 @@
1
+ export * from "./Form.js";
2
+ export * from "./FormItemElement.js";
3
+ export * from "./FormStore.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/index.ts"],"sourcesContent":["export * from \"./Form.js\";\nexport * from \"./FormItemElement.js\";\nexport * from \"./FormStore.js\";\n"],"mappings":"AAAA,cAAc,WAAW;AACzB,cAAc,sBAAsB;AACpC,cAAc,gBAAgB"}
@@ -0,0 +1,10 @@
1
+ import type { FormStore } from "./FormStore.js";
2
+ export interface AbstractForm extends HTMLElement {
3
+ readonly isFormElement: true;
4
+ formStore: FormStore;
5
+ size?: "large" | "medium" | "small" | "xs";
6
+ layout?: "horizontal" | "vertical" | "inline";
7
+ validate(): boolean | Record<string, unknown>;
8
+ validateField(name: string): void;
9
+ resetValidateState(): void;
10
+ }
@@ -0,0 +1,18 @@
1
+ import { ReactNextElement } from "@next-core/react-element";
2
+ import type { AbstractForm } from "./Form.js";
3
+ export declare abstract class FormItemElementBase extends ReactNextElement {
4
+ #private;
5
+ get isFormItemElement(): true;
6
+ set validateState(value: string);
7
+ get validateState(): string;
8
+ /**
9
+ * 控制该表单项是否隐藏
10
+ * @default false
11
+ * @group ui
12
+ */
13
+ set notRender(value: boolean);
14
+ get notRender(): boolean;
15
+ get $bindFormItem(): boolean;
16
+ set $bindFormItem(value: boolean);
17
+ getFormElement(): AbstractForm | null;
18
+ }
@@ -0,0 +1,52 @@
1
+ /// <reference types="react" />
2
+ import { PubSub } from "./PubSub.js";
3
+ interface FormStoreOptions {
4
+ onValuesChanged?: (data: any) => void;
5
+ }
6
+ interface FieldDetail {
7
+ name: string;
8
+ label?: string;
9
+ originProps?: Record<string, any>;
10
+ validate: Validate;
11
+ [k: string]: any;
12
+ }
13
+ export interface MessageBody {
14
+ message: string;
15
+ type: string;
16
+ }
17
+ export interface WatchOptions {
18
+ needValidate?: boolean;
19
+ }
20
+ interface Validate {
21
+ required?: boolean;
22
+ pattern?: string;
23
+ min?: number;
24
+ max?: number;
25
+ message?: {
26
+ required?: string;
27
+ pattern?: string;
28
+ min?: string;
29
+ max?: string;
30
+ };
31
+ validator?: (value: any) => MessageBody | string;
32
+ }
33
+ export declare class FormStore extends PubSub {
34
+ #private;
35
+ static uid: number;
36
+ static instance: Map<number, FormStore>;
37
+ static getInstance(options?: FormStoreOptions): FormStore;
38
+ constructor(options?: FormStoreOptions);
39
+ setField(name: string, detail: FieldDetail): void;
40
+ getAllValues(): Record<string, unknown>;
41
+ setInitValue(values: Record<string, unknown>, isEmitValuseChange?: boolean): void;
42
+ setFieldsValueByInitData(name: string): void;
43
+ setFieldsValue(values: Record<string, unknown>, isEmitValuseChange?: boolean): void;
44
+ resetFields(name?: string): void;
45
+ getFieldsValue(name?: string): unknown;
46
+ validateFields(callback: (err: boolean, value: any) => void): boolean | Record<string, unknown>;
47
+ validateField(field: string | FieldDetail): MessageBody | undefined;
48
+ getValueFromEvent(e: React.ChangeEvent): any;
49
+ resetValidateState(): void;
50
+ onWatch(name: string, event: React.ChangeEvent, callback?: (v: string) => void, options?: WatchOptions): void;
51
+ }
52
+ export {};
@@ -0,0 +1,6 @@
1
+ export declare class PubSub {
2
+ #private;
3
+ publish(topic: string, body: any): void;
4
+ subscribe(topic: string, fn: (topic: string, detail: any) => void): string;
5
+ unsubscribe(token: string): void;
6
+ }
@@ -0,0 +1,3 @@
1
+ export * from "./Form.js";
2
+ export * from "./FormItemElement.js";
3
+ export * from "./FormStore.js";
package/package.json ADDED
@@ -0,0 +1,45 @@
1
+ {
2
+ "name": "@next-shared/form",
3
+ "version": "0.0.1",
4
+ "homepage": "https://github.com/easyops-cn/next-bricks/tree/master/shared/form",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "git@github.com:easyops-cn/next-bricks.git"
8
+ },
9
+ "license": "GPL-3.0",
10
+ "sideEffects": false,
11
+ "type": "module",
12
+ "files": [
13
+ "dist"
14
+ ],
15
+ "exports": {
16
+ ".": {
17
+ "types": "./dist/types/index.d.ts",
18
+ "import": "./dist/esm/index.js",
19
+ "require": "./dist/cjs/index.js"
20
+ },
21
+ "./package.json": "./package.json"
22
+ },
23
+ "scripts": {
24
+ "clean": "rimraf dist",
25
+ "prestart": "npm run clean",
26
+ "start": "concurrently -k -n types,main \"npm run start:types\" \"npm run start:main\"",
27
+ "start:main": "cross-env NODE_ENV=development build-next-libs --watch",
28
+ "start:types": "tsc --emitDeclarationOnly --declaration --declarationDir dist/types --project tsconfig.build.json --watch",
29
+ "prebuild": "npm run clean",
30
+ "build": "npm run build:types && npm run build:main",
31
+ "build:main": "cross-env NODE_ENV=production build-next-libs",
32
+ "build:types": "tsc --emitDeclarationOnly --declaration --declarationDir dist/types --project tsconfig.build.json"
33
+ },
34
+ "dependencies": {
35
+ "@next-core/element": "^1.0.6",
36
+ "@next-core/react-element": "^1.0.7",
37
+ "lodash": "^4.17.21"
38
+ },
39
+ "devDependencies": {
40
+ "@next-core/build-next-libs": "^1.0.5",
41
+ "@next-core/test-next": "^1.0.6",
42
+ "concurrently": "^8.0.1"
43
+ },
44
+ "gitHead": "e0b6af107201669c9582d59553d8ef4316ce64f0"
45
+ }