impaktapps-ui-builder 1.0.105 → 1.0.106

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.
@@ -3,6 +3,11 @@ export declare let schema: {
3
3
  properties: {};
4
4
  required: any[];
5
5
  };
6
- export declare function buildSchema(config: any): any;
6
+ export declare function buildSchemaFromConfig(config: any, parentSchema: any): void;
7
+ export declare const buildSchema: (config: any) => {
8
+ type: string;
9
+ properties: {};
10
+ required: any[];
11
+ };
7
12
  declare const buildUiSchema: (config: any, store?: any) => any;
8
13
  export default buildUiSchema;
@@ -10,4 +10,5 @@ export interface handlersProps {
10
10
  parentEventOutput?: any;
11
11
  functionsProvider?: Record<string, any>;
12
12
  formDataHolder?: Record<string, any>;
13
+ pageLoad?: boolean;
13
14
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "impaktapps-ui-builder",
3
- "version": "1.0.105",
3
+ "version": "1.0.106",
4
4
  "scripts": {
5
5
  "dev": "vite",
6
6
  "build": "tsc && vite build",
@@ -132,30 +132,78 @@ function buildNode(config: any): any {
132
132
  };
133
133
  }
134
134
 
135
- export function buildSchema(config: any): any {
136
- const schema: any = {
137
- type: "object",
138
- properties: {},
139
- required: []
140
- };
135
+ export function buildSchemaFromConfig(config: any, parentSchema: any) {
136
+
137
+ if (config.elements) {
138
+ // 2️⃣ Handle Array component
139
+ if (config.type === "Array") {
140
+ parentSchema.properties ??= {};
141
+ parentSchema.properties[config.name] ??= {
142
+ type: "array",
143
+ items: {
144
+ type: "object",
145
+ properties: {},
146
+ required: [],
147
+ },
148
+ };
149
+
150
+ const arrayItemSchema = parentSchema.properties[config.name].items;
141
151
 
142
- config.elements?.forEach((element: any) => {
143
- const node = buildNode(element);
144
- if (!node) return;
152
+ config.elements?.forEach((child: any) =>
153
+ buildSchemaFromConfig(child, arrayItemSchema)
154
+ );
155
+ return;
156
+ } else {
157
+ config.elements?.forEach((child: any) =>
158
+ buildSchemaFromConfig(child, parentSchema)
159
+ );
160
+ return;
161
+ }
162
+ }
163
+ // 3️⃣ Handle normal field components
164
+ parentSchema.properties ??= {};
165
+ parentSchema.properties[config.name] ??= {};
145
166
 
146
- schema.properties[element.name] = node.schema;
167
+ const fieldSchema = parentSchema.properties[config.name];
147
168
 
148
- if (node.required?.length) {
149
- schema.required.push(element.name);
169
+ // Required validation
170
+ config.validation?.forEach((v: any) => {
171
+ if (v.validationType === "required") {
172
+ parentSchema.required ??= [];
173
+ parentSchema.required.push(config.name);
174
+ } else {
175
+ fieldSchema.type = "string";
176
+ fieldSchema[v.validationType] = isNaN(v.validationValue)
177
+ ? v.validationValue
178
+ : Number(v.validationValue);
150
179
  }
151
180
  });
152
181
 
153
- if (schema.required.length === 0) {
154
- delete schema.required;
182
+ // Select
183
+ if (config.type === "Select" && config.value?.length) {
184
+ fieldSchema.oneOf = config.value.map((v: any) => ({
185
+ const: v.value,
186
+ title: v.label,
187
+ }));
155
188
  }
156
189
 
190
+ // MultipleSelect
191
+ if (config.type === "MultipleSelect" && config.value?.length) {
192
+ fieldSchema.type = "array";
193
+ fieldSchema.items = {
194
+ oneOf: config.value.map((v: any) => ({
195
+ const: v.value,
196
+ title: v.label,
197
+ })),
198
+ };
199
+ }
200
+ }
201
+
202
+ export const buildSchema = (config) =>{
203
+ buildSchemaFromConfig(config,schema)
157
204
  return schema;
158
- };
205
+
206
+ }
159
207
 
160
208
  const buildUiSchema = (config: any, store?: any) => {
161
209
  let elements: any = {};
@@ -69,7 +69,8 @@ function executeEventsHandler(params: handlersProps) {
69
69
  params.config,
70
70
  params.store,
71
71
  params.service,
72
- params.formDataHolder
72
+ params.formDataHolder,
73
+ params.pageLoad
73
74
  );
74
75
  } else if (params.config.Handler === "onBackHandler") {
75
76
  return params.store.functionParameters?.handleBack();
@@ -144,8 +145,7 @@ function executeCustomHandler(params: handlersProps) {
144
145
  }
145
146
 
146
147
  }
147
-
148
- function mergeFormdata(handlerResponse: any, componentName: string, eventConfig: any, store: any, service: any, formDataHolder: any) {
148
+ function mergeFormdata(handlerResponse: any, componentName: string, eventConfig: any, store: any, service: any, formDataHolder: any, pageLoad: boolean) {
149
149
  if (eventConfig.type === "Select" && handlerResponse?.data) {
150
150
  if (!_.isEmpty(handlerResponse?.data)) {
151
151
  store.setSchema((pre) => {
@@ -183,23 +183,36 @@ function mergeFormdata(handlerResponse: any, componentName: string, eventConfig:
183
183
  ...store.newData,
184
184
  ...handlerResponse?.data
185
185
  }
186
- store.setFormdata((pre: any) => { return { ...pre, ...handlerResponse?.data } })
186
+ formDataHolder = { ...formDataHolder, ...handlerResponse?.data }
187
+ if (!pageLoad) {
188
+ store.setFormdata((pre: any) => { return { ...pre, ...handlerResponse?.data } })
189
+ }
187
190
  }
188
191
  }
189
192
  else if (eventConfig.type === "Table" && eventConfig.lazyLoading) {
190
193
  if (handlerResponse && handlerResponse?.data) {
191
194
  formDataHolder[componentName] = handlerResponse.data?.data
192
195
  formDataHolder[`${componentName}_RowCount`] = handlerResponse.data?.meta?.totalRowCount
193
- store.setFormdata((pre) => { return { ...pre, ...formDataHolder } });
196
+ if (!pageLoad) {
197
+ store.setFormdata((pre: any) => {
198
+ return {
199
+ ...pre,
200
+ [componentName]: handlerResponse.data?.data,
201
+ [`${componentName}_RowCount`]: handlerResponse.data?.meta?.totalRowCount
202
+ }
203
+ })
204
+ }
194
205
  }
195
206
  }
196
207
  else {
197
208
  if (handlerResponse) {
198
209
  formDataHolder[componentName] = handlerResponse.data
199
- store.setFormdata((pre) => { return { ...pre, ...formDataHolder } });
210
+ if (!pageLoad) {
211
+ store.setFormdata((pre) => { return { ...pre, [componentName]: handlerResponse.data } });
212
+ }
200
213
  }
201
214
  }
202
- }
215
+ };
203
216
 
204
217
  const buildBodyFormat = (body: any[], formData: any, userValue: any, store: any) => {
205
218
  let finalBody = { ...userValue?.payload };
@@ -10,4 +10,5 @@ export interface handlersProps {
10
10
  parentEventOutput?: any,
11
11
  functionsProvider?:Record<string,any>
12
12
  formDataHolder?:Record<string,any>
13
+ pageLoad?: boolean
13
14
  }
@@ -90,7 +90,7 @@ export default (funcParams: funcParamsProps) => {
90
90
  config: {}, componentName: "",
91
91
  store: funcParams.store, dynamicData: funcParams.dynamicData, userValue: funcParams.userValue, service: funcParams.service,
92
92
  functionsProvider: funcParams.functionsProvider,
93
- serviceHolder: this, eventGroups, formDataHolder
93
+ serviceHolder: this, eventGroups, formDataHolder,
94
94
  }
95
95
 
96
96
  funcParams.store.setSchema(
@@ -104,9 +104,9 @@ export default (funcParams: funcParamsProps) => {
104
104
  await executeRefreshHandler({
105
105
  config: {}, componentName: "",
106
106
  store: funcParams.store, dynamicData: funcParams.dynamicData, userValue: funcParams.userValue, service: funcParams.service,
107
- serviceHolder: this, eventGroups, formDataHolder: {}
107
+ serviceHolder: this, eventGroups, formDataHolder: formDataHolder, pageLoad: true
108
108
  })
109
-
109
+ funcParams.store.setFormdata((pre) => ({ ...pre, ...formDataHolder }))
110
110
  uiSchema.elements.push(notifyUiSchema);
111
111
  funcParams.store.setUiSchema(uiSchema);
112
112
  },