@etsoo/react 1.7.10 → 1.7.12

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.
@@ -10,12 +10,26 @@ export declare namespace ReactUtils {
10
10
  * @returns Formatted value
11
11
  */
12
12
  function formatInputValue(value: unknown): string | number | any[] | undefined;
13
+ /**
14
+ * Get nested value
15
+ * @param data Data
16
+ * @param name Field name, support property chain like 'jsonData.logSize'
17
+ * @returns Result
18
+ */
19
+ function getNestedValue(data: object, name: string): any;
13
20
  /**
14
21
  * Is safe click
15
22
  * @param event Mouse event
16
23
  * @returns Result
17
24
  */
18
25
  function isSafeClick(event: React.MouseEvent<HTMLElement>): boolean;
26
+ /**
27
+ * Set nested value
28
+ * @param data Data
29
+ * @param name Field name, support property chain like 'jsonData.logSize'
30
+ * @param value Value
31
+ */
32
+ function setNestedValue(data: object, name: string, value: unknown): void;
19
33
  /**
20
34
  * Trigger input change event
21
35
  * @param input Form input
@@ -29,12 +43,12 @@ export declare namespace ReactUtils {
29
43
  * @param data Data
30
44
  * @param callback Callback to update refs' value, return false continue to process
31
45
  */
32
- function updateRefs<D, T = HTMLInputElement>(refs: Partial<DataTypes.DI<ReadonlyArray<keyof D & string>, React.MutableRefObject<T | undefined>>>, data: D, callback?: ((item: T, value: D[keyof D & string]) => void | boolean) | keyof T): void;
46
+ function updateRefs<D extends object, T = HTMLInputElement>(refs: Partial<DataTypes.DI<ReadonlyArray<keyof D & string>, React.MutableRefObject<T | undefined>>>, data: D, callback?: ((item: T, value: D[keyof D & string]) => void | boolean) | keyof T): void;
33
47
  /**
34
48
  * Update data with refs
35
49
  * @param refs Refs
36
50
  * @param data Data
37
51
  * @param callback Callback to return new value
38
52
  */
39
- function updateRefValues<D, T = HTMLInputElement>(refs: Partial<DataTypes.DI<ReadonlyArray<keyof D & string>, React.MutableRefObject<T | undefined>>>, data: D, callback?: ((item: T) => any) | keyof T): void;
53
+ function updateRefValues<D extends object, T = HTMLInputElement>(refs: Partial<DataTypes.DI<ReadonlyArray<keyof D & string>, React.MutableRefObject<T | undefined>>>, data: D, callback?: ((item: T) => any) | keyof T): void;
40
54
  }
@@ -21,6 +21,36 @@ export var ReactUtils;
21
21
  return String(value);
22
22
  }
23
23
  ReactUtils.formatInputValue = formatInputValue;
24
+ /**
25
+ * Get nested value
26
+ * @param data Data
27
+ * @param name Field name, support property chain like 'jsonData.logSize'
28
+ * @returns Result
29
+ */
30
+ function getNestedValue(data, name) {
31
+ const properties = name.split('.');
32
+ const len = properties.length;
33
+ if (len === 1) {
34
+ return Reflect.get(data, name);
35
+ }
36
+ else {
37
+ let curr = data;
38
+ for (let i = 0; i < len; i++) {
39
+ const property = properties[i];
40
+ if (i + 1 === len) {
41
+ return Reflect.get(curr, property);
42
+ }
43
+ else {
44
+ let p = Reflect.get(curr, property);
45
+ if (p == null) {
46
+ return undefined;
47
+ }
48
+ curr = p;
49
+ }
50
+ }
51
+ }
52
+ }
53
+ ReactUtils.getNestedValue = getNestedValue;
24
54
  /**
25
55
  * Is safe click
26
56
  * @param event Mouse event
@@ -47,6 +77,36 @@ export var ReactUtils;
47
77
  return true;
48
78
  }
49
79
  ReactUtils.isSafeClick = isSafeClick;
80
+ /**
81
+ * Set nested value
82
+ * @param data Data
83
+ * @param name Field name, support property chain like 'jsonData.logSize'
84
+ * @param value Value
85
+ */
86
+ function setNestedValue(data, name, value) {
87
+ const properties = name.split('.');
88
+ const len = properties.length;
89
+ if (len === 1)
90
+ Reflect.set(data, name, value);
91
+ else {
92
+ let curr = data;
93
+ for (let i = 0; i < len; i++) {
94
+ const property = properties[i];
95
+ if (i + 1 === len) {
96
+ Reflect.set(curr, property, value);
97
+ }
98
+ else {
99
+ let p = Reflect.get(curr, property);
100
+ if (p == null) {
101
+ p = {};
102
+ Reflect.set(curr, property, p);
103
+ }
104
+ curr = p;
105
+ }
106
+ }
107
+ }
108
+ }
109
+ ReactUtils.setNestedValue = setNestedValue;
50
110
  /**
51
111
  * Trigger input change event
52
112
  * @param input Form input
@@ -92,6 +152,7 @@ export var ReactUtils;
92
152
  * @param callback Callback to update refs' value, return false continue to process
93
153
  */
94
154
  function updateRefs(refs, data, callback) {
155
+ var _a;
95
156
  const local = callback == null
96
157
  ? undefined
97
158
  : typeof callback === 'function'
@@ -105,15 +166,16 @@ export var ReactUtils;
105
166
  const item = ref === null || ref === void 0 ? void 0 : ref.current;
106
167
  if (item == null)
107
168
  continue;
108
- const value = data[k];
109
- if (local && local(item, value) !== false) {
169
+ if (local && local(item, data[k]) !== false) {
110
170
  continue;
111
171
  }
112
- else if (item instanceof HTMLInputElement) {
113
- item.value = `${value !== null && value !== void 0 ? value : ''}`;
172
+ else if (item instanceof HTMLInputElement ||
173
+ item instanceof HTMLTextAreaElement ||
174
+ item instanceof HTMLSelectElement) {
175
+ item.value = `${(_a = getNestedValue(data, item.name || k)) !== null && _a !== void 0 ? _a : ''}`;
114
176
  }
115
177
  else {
116
- item.value = value;
178
+ item.value = data[k];
117
179
  }
118
180
  }
119
181
  }
@@ -140,7 +202,11 @@ export var ReactUtils;
140
202
  data[k] = local(item);
141
203
  }
142
204
  else if (item instanceof HTMLInputElement) {
143
- data[k] = DomUtils.getInputValue(item);
205
+ setNestedValue(data, item.name || k, DomUtils.getInputValue(item));
206
+ }
207
+ else if (item instanceof HTMLTextAreaElement ||
208
+ item instanceof HTMLSelectElement) {
209
+ setNestedValue(data, item.name || k, item.value);
144
210
  }
145
211
  else {
146
212
  data[k] = item.value;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@etsoo/react",
3
- "version": "1.7.10",
3
+ "version": "1.7.12",
4
4
  "description": "TypeScript ReactJs UI Independent Framework",
5
5
  "main": "lib/index.js",
6
6
  "types": "lib/index.d.ts",
@@ -50,10 +50,10 @@
50
50
  "@emotion/css": "^11.11.2",
51
51
  "@emotion/react": "^11.11.1",
52
52
  "@emotion/styled": "^11.11.0",
53
- "@etsoo/appscript": "^1.4.53",
53
+ "@etsoo/appscript": "^1.4.55",
54
54
  "@etsoo/notificationbase": "^1.1.28",
55
- "@etsoo/shared": "^1.2.12",
56
- "@types/react": "^18.2.21",
55
+ "@etsoo/shared": "^1.2.13",
56
+ "@types/react": "^18.2.22",
57
57
  "@types/react-dom": "^18.2.7",
58
58
  "@types/react-window": "^1.8.5",
59
59
  "react": "^18.2.0",
@@ -63,13 +63,13 @@
63
63
  },
64
64
  "devDependencies": {
65
65
  "@babel/cli": "^7.22.15",
66
- "@babel/core": "^7.22.19",
66
+ "@babel/core": "^7.22.20",
67
67
  "@babel/plugin-transform-runtime": "^7.22.15",
68
- "@babel/preset-env": "^7.22.15",
68
+ "@babel/preset-env": "^7.22.20",
69
69
  "@babel/runtime-corejs3": "^7.22.15",
70
70
  "@testing-library/jest-dom": "^6.1.3",
71
71
  "@testing-library/react": "^14.0.0",
72
- "@types/jest": "^29.5.4",
72
+ "@types/jest": "^29.5.5",
73
73
  "jest": "^29.7.0",
74
74
  "jest-environment-jsdom": "^29.7.0",
75
75
  "ts-jest": "^29.1.1",
@@ -22,6 +22,36 @@ export namespace ReactUtils {
22
22
  return String(value);
23
23
  }
24
24
 
25
+ /**
26
+ * Get nested value
27
+ * @param data Data
28
+ * @param name Field name, support property chain like 'jsonData.logSize'
29
+ * @returns Result
30
+ */
31
+ export function getNestedValue(data: object, name: string) {
32
+ const properties = name.split('.');
33
+ const len = properties.length;
34
+ if (len === 1) {
35
+ return Reflect.get(data, name);
36
+ } else {
37
+ let curr = data;
38
+ for (let i = 0; i < len; i++) {
39
+ const property = properties[i];
40
+
41
+ if (i + 1 === len) {
42
+ return Reflect.get(curr, property);
43
+ } else {
44
+ let p = Reflect.get(curr, property);
45
+ if (p == null) {
46
+ return undefined;
47
+ }
48
+
49
+ curr = p;
50
+ }
51
+ }
52
+ }
53
+ }
54
+
25
55
  /**
26
56
  * Is safe click
27
57
  * @param event Mouse event
@@ -52,6 +82,36 @@ export namespace ReactUtils {
52
82
  return true;
53
83
  }
54
84
 
85
+ /**
86
+ * Set nested value
87
+ * @param data Data
88
+ * @param name Field name, support property chain like 'jsonData.logSize'
89
+ * @param value Value
90
+ */
91
+ export function setNestedValue(data: object, name: string, value: unknown) {
92
+ const properties = name.split('.');
93
+ const len = properties.length;
94
+ if (len === 1) Reflect.set(data, name, value);
95
+ else {
96
+ let curr = data;
97
+ for (let i = 0; i < len; i++) {
98
+ const property = properties[i];
99
+
100
+ if (i + 1 === len) {
101
+ Reflect.set(curr, property, value);
102
+ } else {
103
+ let p = Reflect.get(curr, property);
104
+ if (p == null) {
105
+ p = {};
106
+ Reflect.set(curr, property, p);
107
+ }
108
+
109
+ curr = p;
110
+ }
111
+ }
112
+ }
113
+ }
114
+
55
115
  /**
56
116
  * Trigger input change event
57
117
  * @param input Form input
@@ -106,7 +166,7 @@ export namespace ReactUtils {
106
166
  * @param data Data
107
167
  * @param callback Callback to update refs' value, return false continue to process
108
168
  */
109
- export function updateRefs<D, T = HTMLInputElement>(
169
+ export function updateRefs<D extends object, T = HTMLInputElement>(
110
170
  refs: Partial<
111
171
  DataTypes.DI<
112
172
  ReadonlyArray<keyof D & string>,
@@ -132,14 +192,17 @@ export namespace ReactUtils {
132
192
  const ref = refs[k];
133
193
  const item = ref?.current;
134
194
  if (item == null) continue;
135
- const value = data[k];
136
195
 
137
- if (local && local(item, value) !== false) {
196
+ if (local && local(item, data[k]) !== false) {
138
197
  continue;
139
- } else if (item instanceof HTMLInputElement) {
140
- item.value = `${value ?? ''}`;
198
+ } else if (
199
+ item instanceof HTMLInputElement ||
200
+ item instanceof HTMLTextAreaElement ||
201
+ item instanceof HTMLSelectElement
202
+ ) {
203
+ item.value = `${getNestedValue(data, item.name || k) ?? ''}`;
141
204
  } else {
142
- (item as any).value = value;
205
+ (item as any).value = data[k];
143
206
  }
144
207
  }
145
208
  }
@@ -150,7 +213,7 @@ export namespace ReactUtils {
150
213
  * @param data Data
151
214
  * @param callback Callback to return new value
152
215
  */
153
- export function updateRefValues<D, T = HTMLInputElement>(
216
+ export function updateRefValues<D extends object, T = HTMLInputElement>(
154
217
  refs: Partial<
155
218
  DataTypes.DI<
156
219
  ReadonlyArray<keyof D & string>,
@@ -176,7 +239,16 @@ export namespace ReactUtils {
176
239
  if (local) {
177
240
  data[k] = local(item);
178
241
  } else if (item instanceof HTMLInputElement) {
179
- data[k] = DomUtils.getInputValue(item) as any;
242
+ setNestedValue(
243
+ data,
244
+ item.name || k,
245
+ DomUtils.getInputValue(item)
246
+ );
247
+ } else if (
248
+ item instanceof HTMLTextAreaElement ||
249
+ item instanceof HTMLSelectElement
250
+ ) {
251
+ setNestedValue(data, item.name || k, item.value);
180
252
  } else {
181
253
  data[k] = (item as any).value;
182
254
  }