form-builder-pro 1.0.9 → 1.0.11

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.
package/dist/index.d.mts CHANGED
@@ -39,6 +39,7 @@ interface FormField {
39
39
  id: string;
40
40
  name: string;
41
41
  };
42
+ masterTypeName?: string;
42
43
  enabled?: boolean;
43
44
  visible?: boolean;
44
45
  }
@@ -234,8 +235,8 @@ declare class FormRenderer {
234
235
  /**
235
236
  * Cleans a form schema by removing invalid properties and normalizing field types
236
237
  * - Converts "decimal" type to "number"
237
- * - Removes invalid properties like "masterTypeName"
238
238
  * - Removes empty options arrays from non-select/radio fields
239
+ * - Preserves masterTypeName for select fields with groupName
239
240
  * @param schema
240
241
  * @returns Cleaned schema
241
242
  */
package/dist/index.d.ts CHANGED
@@ -39,6 +39,7 @@ interface FormField {
39
39
  id: string;
40
40
  name: string;
41
41
  };
42
+ masterTypeName?: string;
42
43
  enabled?: boolean;
43
44
  visible?: boolean;
44
45
  }
@@ -234,8 +235,8 @@ declare class FormRenderer {
234
235
  /**
235
236
  * Cleans a form schema by removing invalid properties and normalizing field types
236
237
  * - Converts "decimal" type to "number"
237
- * - Removes invalid properties like "masterTypeName"
238
238
  * - Removes empty options arrays from non-select/radio fields
239
+ * - Preserves masterTypeName for select fields with groupName
239
240
  * @param schema
240
241
  * @returns Cleaned schema
241
242
  */
package/dist/index.js CHANGED
@@ -4188,6 +4188,9 @@ var cleanFormSchema = (schema) => {
4188
4188
  if (field.type === "select" && field.groupName) {
4189
4189
  cleaned.groupName = field.groupName;
4190
4190
  }
4191
+ if (field.type === "select" && field.masterTypeName !== void 0) {
4192
+ cleaned.masterTypeName = field.masterTypeName;
4193
+ }
4191
4194
  return cleaned;
4192
4195
  };
4193
4196
  return {
@@ -4257,32 +4260,99 @@ var formStore = createStore((set, get) => ({
4257
4260
  const updatedSections = cleanedSchema.sections.map((section) => ({
4258
4261
  ...section,
4259
4262
  fields: section.fields.map((field) => {
4260
- if (field.type === "select" && field.groupName) {
4261
- const masterType = state.masterTypes.find(
4262
- (mt) => mt.active === true && (mt.id === field.groupName?.id || mt.name === field.groupName?.name)
4263
- );
4263
+ if (field.type === "select") {
4264
+ let masterType;
4265
+ let updatedField = { ...field };
4266
+ if (field.masterTypeName && !field.groupName) {
4267
+ masterType = state.masterTypes.find(
4268
+ (mt) => mt.active === true && mt.enumName === field.masterTypeName
4269
+ );
4270
+ if (masterType) {
4271
+ updatedField = {
4272
+ ...updatedField,
4273
+ groupName: {
4274
+ id: masterType.id,
4275
+ name: masterType.name
4276
+ }
4277
+ };
4278
+ if (process.env.NODE_ENV === "development") {
4279
+ console.log(`[FormBuilder] Hydrating dropdown field "${field.id}": Resolved groupName from masterTypeName "${field.masterTypeName}"`, {
4280
+ fieldId: field.id,
4281
+ masterTypeName: field.masterTypeName,
4282
+ groupName: updatedField.groupName
4283
+ });
4284
+ }
4285
+ } else {
4286
+ console.warn(`[FormBuilder] Master type not found for masterTypeName: "${field.masterTypeName}"`, {
4287
+ fieldId: field.id,
4288
+ masterTypeName: field.masterTypeName
4289
+ });
4290
+ }
4291
+ } else if (field.groupName) {
4292
+ masterType = state.masterTypes.find(
4293
+ (mt) => mt.active === true && (mt.id === field.groupName?.id || mt.name === field.groupName?.name)
4294
+ );
4295
+ if (masterType && !field.masterTypeName && masterType.enumName) {
4296
+ updatedField = {
4297
+ ...updatedField,
4298
+ masterTypeName: masterType.enumName
4299
+ };
4300
+ }
4301
+ } else if (field.masterTypeName && field.groupName) {
4302
+ masterType = state.masterTypes.find(
4303
+ (mt) => mt.active === true && mt.enumName === field.masterTypeName && (mt.id === field.groupName?.id || mt.name === field.groupName?.name)
4304
+ );
4305
+ if (!masterType) {
4306
+ masterType = state.masterTypes.find(
4307
+ (mt) => mt.active === true && mt.enumName === field.masterTypeName
4308
+ );
4309
+ if (masterType) {
4310
+ updatedField = {
4311
+ ...updatedField,
4312
+ groupName: {
4313
+ id: masterType.id,
4314
+ name: masterType.name
4315
+ }
4316
+ };
4317
+ }
4318
+ }
4319
+ }
4264
4320
  if (masterType) {
4321
+ let options = [];
4265
4322
  if (masterType.enumName && state.dropdownOptionsMap && state.dropdownOptionsMap[masterType.enumName]) {
4266
- return { ...field, options: state.dropdownOptionsMap[masterType.enumName] };
4267
- }
4268
- if (!masterType.indexes || masterType.indexes.length === 0) {
4269
- console.warn(`[FormBuilder] Master type "${masterType.displayName}" (${masterType.name}) has empty indexes array. Dropdown will have no options. Please ensure the API returns populated indexes.`, {
4323
+ options = state.dropdownOptionsMap[masterType.enumName];
4324
+ if (process.env.NODE_ENV === "development") {
4325
+ console.log(`[FormBuilder] Hydrating dropdown field "${field.id}": Loaded ${options.length} options from dropdownOptionsMap for "${masterType.enumName}"`);
4326
+ }
4327
+ } else if (masterType.indexes && masterType.indexes.length > 0) {
4328
+ options = convertIndexesToOptions(masterType.indexes);
4329
+ if (process.env.NODE_ENV === "development") {
4330
+ console.log(`[FormBuilder] Hydrating dropdown field "${field.id}": Loaded ${options.length} options from master type indexes for "${masterType.displayName}"`);
4331
+ }
4332
+ } else {
4333
+ console.warn(`[FormBuilder] Master type "${masterType.displayName}" (${masterType.name}) has empty indexes array and no dropdownOptionsMap entry. Dropdown will have no options. Please ensure the API returns populated indexes or provide dropdownOptionsMap.`, {
4270
4334
  masterTypeId: masterType.id,
4271
4335
  masterTypeName: masterType.name,
4272
4336
  enumName: masterType.enumName,
4273
- indexes: masterType.indexes
4337
+ indexes: masterType.indexes,
4338
+ fieldId: field.id
4274
4339
  });
4275
4340
  }
4276
- if (masterType.indexes && masterType.indexes.length > 0) {
4277
- if (!field.options || field.options.length === 0 || areDefaultOptions(field.options)) {
4278
- const options = convertIndexesToOptions(masterType.indexes);
4279
- console.log(`[FormBuilder] Populating ${options.length} options from master type "${masterType.displayName}"`);
4280
- return { ...field, options };
4341
+ if (options.length > 0) {
4342
+ if (!updatedField.options || updatedField.options.length === 0 || areDefaultOptions(updatedField.options)) {
4343
+ updatedField = {
4344
+ ...updatedField,
4345
+ options
4346
+ };
4281
4347
  }
4282
4348
  }
4283
- } else {
4284
- console.warn("[FormBuilder] Master type not found for groupName:", field.groupName);
4349
+ } else if (field.groupName) {
4350
+ console.warn("[FormBuilder] Master type not found for groupName:", field.groupName, {
4351
+ fieldId: field.id,
4352
+ groupName: field.groupName
4353
+ });
4285
4354
  }
4355
+ return updatedField;
4286
4356
  }
4287
4357
  return field;
4288
4358
  })
@@ -4321,10 +4391,17 @@ var formStore = createStore((set, get) => ({
4321
4391
  const updatedSections = state.schema.sections.map((section) => ({
4322
4392
  ...section,
4323
4393
  fields: section.fields.map((field) => {
4324
- if (field.type === "select" && field.groupName) {
4325
- const masterType = state.masterTypes.find(
4326
- (mt) => mt.active === true && (mt.id === field.groupName?.id || mt.name === field.groupName?.name)
4327
- );
4394
+ if (field.type === "select") {
4395
+ let masterType;
4396
+ if (field.masterTypeName) {
4397
+ masterType = state.masterTypes.find(
4398
+ (mt) => mt.active === true && mt.enumName === field.masterTypeName
4399
+ );
4400
+ } else if (field.groupName) {
4401
+ masterType = state.masterTypes.find(
4402
+ (mt) => mt.active === true && (mt.id === field.groupName?.id || mt.name === field.groupName?.name)
4403
+ );
4404
+ }
4328
4405
  if (masterType && masterType.indexes && masterType.indexes.length > 0) {
4329
4406
  if (!field.options || field.options.length === 0 || areDefaultOptions(field.options)) {
4330
4407
  const options = convertIndexesToOptions(masterType.indexes);
@@ -4362,10 +4439,17 @@ var formStore = createStore((set, get) => ({
4362
4439
  const updatedSections = state.schema.sections.map((section) => ({
4363
4440
  ...section,
4364
4441
  fields: section.fields.map((field) => {
4365
- if (field.type === "select" && field.groupName) {
4366
- const masterType = state.masterTypes.find(
4367
- (mt) => mt.active === true && (mt.id === field.groupName?.id || mt.name === field.groupName?.name)
4368
- );
4442
+ if (field.type === "select") {
4443
+ let masterType;
4444
+ if (field.masterTypeName) {
4445
+ masterType = state.masterTypes.find(
4446
+ (mt) => mt.active === true && mt.enumName === field.masterTypeName
4447
+ );
4448
+ } else if (field.groupName) {
4449
+ masterType = state.masterTypes.find(
4450
+ (mt) => mt.active === true && (mt.id === field.groupName?.id || mt.name === field.groupName?.name)
4451
+ );
4452
+ }
4369
4453
  if (masterType && masterType.enumName && map[masterType.enumName]) {
4370
4454
  return { ...field, options: map[masterType.enumName] };
4371
4455
  }
@@ -4406,16 +4490,40 @@ var formStore = createStore((set, get) => ({
4406
4490
  const updatedSections = state.schema.sections.map((section) => ({
4407
4491
  ...section,
4408
4492
  fields: section.fields.map((field) => {
4409
- if (field.type === "select" && field.groupName) {
4410
- const masterType = masterTypes.find(
4411
- (mt) => mt.active === true && (mt.id === field.groupName?.id || mt.name === field.groupName?.name)
4412
- );
4493
+ if (field.type === "select") {
4494
+ let masterType;
4495
+ let updatedField = { ...field };
4496
+ if (field.masterTypeName) {
4497
+ masterType = masterTypes.find(
4498
+ (mt) => mt.active === true && mt.enumName === field.masterTypeName
4499
+ );
4500
+ if (masterType && !field.groupName) {
4501
+ updatedField = {
4502
+ ...updatedField,
4503
+ groupName: {
4504
+ id: masterType.id,
4505
+ name: masterType.name
4506
+ }
4507
+ };
4508
+ }
4509
+ } else if (field.groupName) {
4510
+ masterType = masterTypes.find(
4511
+ (mt) => mt.active === true && (mt.id === field.groupName?.id || mt.name === field.groupName?.name)
4512
+ );
4513
+ if (masterType && !field.masterTypeName && masterType.enumName) {
4514
+ updatedField = {
4515
+ ...updatedField,
4516
+ masterTypeName: masterType.enumName
4517
+ };
4518
+ }
4519
+ }
4413
4520
  if (masterType && masterType.indexes && masterType.indexes.length > 0) {
4414
- if (!field.options || field.options.length === 0 || areDefaultOptions(field.options)) {
4521
+ if (!updatedField.options || updatedField.options.length === 0 || areDefaultOptions(updatedField.options)) {
4415
4522
  const options = convertIndexesToOptions(masterType.indexes);
4416
- return { ...field, options };
4523
+ return { ...updatedField, options };
4417
4524
  }
4418
4525
  }
4526
+ return updatedField;
4419
4527
  }
4420
4528
  return field;
4421
4529
  })
@@ -8001,6 +8109,7 @@ var FormBuilder = class {
8001
8109
  id: selectedMasterType.id,
8002
8110
  name: selectedMasterType.name
8003
8111
  },
8112
+ masterTypeName: selectedEnumName,
8004
8113
  options: options.length > 0 ? options : void 0
8005
8114
  });
8006
8115
  if (this.options.onGroupSelectionChange) {
@@ -8013,19 +8122,28 @@ var FormBuilder = class {
8013
8122
  } else {
8014
8123
  formStore.getState().updateField(selectedField.id, {
8015
8124
  groupName: void 0,
8125
+ masterTypeName: void 0,
8016
8126
  options: void 0
8017
8127
  // Clear options when groupName is cleared
8018
8128
  });
8019
8129
  }
8020
8130
  }
8021
8131
  });
8132
+ let currentMasterType;
8133
+ if (selectedField.masterTypeName) {
8134
+ currentMasterType = activeMasterTypes.find((mt) => mt.enumName === selectedField.masterTypeName);
8135
+ } else if (selectedField.groupName) {
8136
+ currentMasterType = activeMasterTypes.find(
8137
+ (mt) => mt.id === selectedField.groupName?.id || mt.name === selectedField.groupName?.name
8138
+ );
8139
+ }
8022
8140
  groupNameSelect.appendChild(createElement("option", {
8023
8141
  value: "",
8024
8142
  text: "None",
8025
- selected: !selectedField.groupName
8143
+ selected: !currentMasterType
8026
8144
  }));
8027
8145
  activeMasterTypes.forEach((mt) => {
8028
- const isSelected = selectedField.groupName && (selectedField.groupName.id === mt.id || selectedField.groupName.name === mt.name);
8146
+ const isSelected = currentMasterType && (selectedField.masterTypeName && mt.enumName === selectedField.masterTypeName || selectedField.groupName && (mt.id === selectedField.groupName?.id || mt.name === selectedField.groupName?.name));
8029
8147
  const optionValue = mt.enumName || mt.id || mt.name;
8030
8148
  groupNameSelect.appendChild(createElement("option", {
8031
8149
  value: optionValue,
@@ -8035,20 +8153,23 @@ var FormBuilder = class {
8035
8153
  });
8036
8154
  groupNameGroup.appendChild(groupNameSelect);
8037
8155
  body.appendChild(groupNameGroup);
8038
- if (selectedField.groupName && (!selectedField.options || selectedField.options.length === 0)) {
8039
- const currentMasterType = activeMasterTypes.find(
8040
- (mt) => mt.id === selectedField.groupName?.id || mt.name === selectedField.groupName?.name
8041
- );
8042
- if (currentMasterType) {
8043
- let options = [];
8044
- if (currentMasterType.enumName && dropdownOptionsMap && dropdownOptionsMap[currentMasterType.enumName]) {
8045
- options = dropdownOptionsMap[currentMasterType.enumName];
8046
- } else if (currentMasterType.indexes && currentMasterType.indexes.length > 0) {
8047
- options = convertIndexesToOptions(currentMasterType.indexes);
8048
- }
8049
- if (options.length > 0) {
8050
- formStore.getState().updateField(selectedField.id, { options });
8051
- }
8156
+ if (currentMasterType && (!selectedField.options || selectedField.options.length === 0)) {
8157
+ let options = [];
8158
+ if (currentMasterType.enumName && dropdownOptionsMap && dropdownOptionsMap[currentMasterType.enumName]) {
8159
+ options = dropdownOptionsMap[currentMasterType.enumName];
8160
+ } else if (currentMasterType.indexes && currentMasterType.indexes.length > 0) {
8161
+ options = convertIndexesToOptions(currentMasterType.indexes);
8162
+ }
8163
+ if (options.length > 0) {
8164
+ formStore.getState().updateField(selectedField.id, { options });
8165
+ }
8166
+ if (selectedField.masterTypeName && !selectedField.groupName) {
8167
+ formStore.getState().updateField(selectedField.id, {
8168
+ groupName: {
8169
+ id: currentMasterType.id,
8170
+ name: currentMasterType.name
8171
+ }
8172
+ });
8052
8173
  }
8053
8174
  }
8054
8175
  }