@skalfa/skalfa-component 1.0.38 → 1.0.39

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.
@@ -65,7 +65,7 @@ export interface FormType<T extends TypeKeys = keyof ConstructionMap> {
65
65
  className?: string;
66
66
  construction?: ConstructionMap[T];
67
67
  type?: T;
68
- onHide?: (values: Record<string, any>) => boolean;
68
+ onHide?: (values: Record<string, any>, prefix?: string) => boolean;
69
69
  onWatch?: (ctx: WatchContext) => WatchAction | undefined;
70
70
  }
71
71
  export interface formSupervisionProps {
@@ -106,15 +106,18 @@ function FormSupervisionComponent({ title, fields, submitControl, confirmation,
106
106
  const GroupsFromDefaults = (defaults) => {
107
107
  const groups = {};
108
108
  Object.keys(defaults).forEach((key) => {
109
- const match = key.match(/^(.+?)\[(\d+)\]/);
110
- if (!match)
111
- return;
112
- const [, groupKey, indexStr] = match;
113
- const index = Number(indexStr);
114
- if (!groups[groupKey]) {
115
- groups[groupKey] = new Set();
109
+ const regex = /([a-zA-Z0-9_]+)\[(\d+)\]/g;
110
+ let match;
111
+ let currentPrefix = "";
112
+ while ((match = regex.exec(key)) !== null) {
113
+ const groupKey = currentPrefix ? `${currentPrefix}.${match[1]}` : match[1];
114
+ const index = parseInt(match[2], 10);
115
+ if (!groups[groupKey]) {
116
+ groups[groupKey] = new Set();
117
+ }
118
+ groups[groupKey].add(index);
119
+ currentPrefix = `${groupKey}[${index}]`;
116
120
  }
117
- groups[groupKey].add(index);
118
121
  });
119
122
  return Object.fromEntries(Object.entries(groups).map(([key, indexSet]) => [
120
123
  key,
@@ -191,7 +194,7 @@ function FormSupervisionComponent({ title, fields, submitControl, confirmation,
191
194
  const name = prefix ? `${prefix}.${form.construction?.name}` : form.construction?.name || "input_name";
192
195
  const valMap = {};
193
196
  values.forEach((v) => { valMap[v.name] = v.value; });
194
- if (form?.onHide?.(valMap))
197
+ if (form?.onHide?.(valMap, prefix))
195
198
  return null;
196
199
  const ws = watchState[name];
197
200
  if (ws?.hidden)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@skalfa/skalfa-component",
3
- "version": "1.0.38",
3
+ "version": "1.0.39",
4
4
  "description": "Reusable UI components for Skalfa App.",
5
5
  "license": "MIT",
6
6
  "keywords": [
@@ -116,7 +116,7 @@ export interface FormType<T extends TypeKeys = keyof ConstructionMap> {
116
116
  className ?: string;
117
117
  construction ?: ConstructionMap[T];
118
118
  type ?: T;
119
- onHide ?: (values: Record<string, any>) => boolean;
119
+ onHide ?: (values: Record<string, any>, prefix?: string) => boolean;
120
120
  onWatch ?: (ctx: WatchContext) => WatchAction | undefined;
121
121
  }
122
122
 
@@ -283,17 +283,18 @@ export function FormSupervisionComponent({
283
283
  const groups: Record<string, Set<number>> = {};
284
284
 
285
285
  Object.keys(defaults).forEach((key) => {
286
- const match = key.match(/^(.+?)\[(\d+)\]/);
287
- if (!match) return;
288
-
289
- const [, groupKey, indexStr] = match;
290
- const index = Number(indexStr);
291
-
292
- if (!groups[groupKey]) {
293
- groups[groupKey] = new Set();
286
+ const regex = /([a-zA-Z0-9_]+)\[(\d+)\]/g;
287
+ let match;
288
+ let currentPrefix = "";
289
+ while ((match = regex.exec(key)) !== null) {
290
+ const groupKey = currentPrefix ? `${currentPrefix}.${match[1]}` : match[1];
291
+ const index = parseInt(match[2], 10);
292
+ if (!groups[groupKey]) {
293
+ groups[groupKey] = new Set();
294
+ }
295
+ groups[groupKey].add(index);
296
+ currentPrefix = `${groupKey}[${index}]`;
294
297
  }
295
-
296
- groups[groupKey].add(index);
297
298
  });
298
299
 
299
300
  return Object.fromEntries(
@@ -385,7 +386,7 @@ export function FormSupervisionComponent({
385
386
  const valMap: Record<string, any> = {};
386
387
  values.forEach((v) => { valMap[v.name] = v.value; });
387
388
 
388
- if (form?.onHide?.(valMap)) return null;
389
+ if (form?.onHide?.(valMap, prefix)) return null;
389
390
 
390
391
  const ws = watchState[name];
391
392
  if (ws?.hidden) return null;