@solidstarters/solid-core-ui 1.1.22 → 1.1.23

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.
Files changed (86) hide show
  1. package/dist/components/common/SolidBreadcrumb.d.ts +2 -10
  2. package/dist/components/common/SolidBreadcrumb.d.ts.map +1 -1
  3. package/dist/components/common/SolidBreadcrumb.js +28 -8
  4. package/dist/components/common/SolidBreadcrumb.js.map +1 -1
  5. package/dist/components/core/common/SolidGlobalSearchElement.d.ts.map +1 -1
  6. package/dist/components/core/common/SolidGlobalSearchElement.js +1 -0
  7. package/dist/components/core/common/SolidGlobalSearchElement.js.map +1 -1
  8. package/dist/components/core/common/SolidViewLayoutManager.d.ts +13 -0
  9. package/dist/components/core/common/SolidViewLayoutManager.d.ts.map +1 -0
  10. package/dist/components/core/common/SolidViewLayoutManager.js +90 -0
  11. package/dist/components/core/common/SolidViewLayoutManager.js.map +1 -0
  12. package/dist/components/core/extension/solid-core/modelMetadata/list/GenerateModelCodeRowAction.d.ts.map +1 -1
  13. package/dist/components/core/extension/solid-core/modelMetadata/list/GenerateModelCodeRowAction.js +6 -4
  14. package/dist/components/core/extension/solid-core/modelMetadata/list/GenerateModelCodeRowAction.js.map +1 -1
  15. package/dist/components/core/extension/solid-core/moduleMetadata/list/GenerateModuleCodeRowAction.d.ts.map +1 -1
  16. package/dist/components/core/extension/solid-core/moduleMetadata/list/GenerateModuleCodeRowAction.js +5 -3
  17. package/dist/components/core/extension/solid-core/moduleMetadata/list/GenerateModuleCodeRowAction.js.map +1 -1
  18. package/dist/components/core/form/SolidFormLayouts.d.ts.map +1 -1
  19. package/dist/components/core/form/SolidFormLayouts.js +6 -2
  20. package/dist/components/core/form/SolidFormLayouts.js.map +1 -1
  21. package/dist/components/core/form/SolidFormView.d.ts.map +1 -1
  22. package/dist/components/core/form/SolidFormView.js +110 -46
  23. package/dist/components/core/form/SolidFormView.js.map +1 -1
  24. package/dist/components/core/form/fields/ISolidField.d.ts +2 -1
  25. package/dist/components/core/form/fields/ISolidField.d.ts.map +1 -1
  26. package/dist/components/core/form/fields/SolidSelectionStaticField.d.ts.map +1 -1
  27. package/dist/components/core/form/fields/SolidSelectionStaticField.js +3 -1
  28. package/dist/components/core/form/fields/SolidSelectionStaticField.js.map +1 -1
  29. package/dist/components/core/form/fields/SolidShortTextField.d.ts.map +1 -1
  30. package/dist/components/core/form/fields/SolidShortTextField.js +3 -2
  31. package/dist/components/core/form/fields/SolidShortTextField.js.map +1 -1
  32. package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.js +2 -2
  33. package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.js.map +1 -1
  34. package/dist/components/core/list/SolidListView.js +1 -1
  35. package/dist/components/core/model/CreateModel.d.ts.map +1 -1
  36. package/dist/components/core/model/CreateModel.js +3 -9
  37. package/dist/components/core/model/CreateModel.js.map +1 -1
  38. package/dist/components/core/model/FieldMetaData.d.ts +1 -1
  39. package/dist/components/core/model/FieldMetaData.d.ts.map +1 -1
  40. package/dist/components/core/model/FieldMetaData.js +2 -2
  41. package/dist/components/core/model/FieldMetaData.js.map +1 -1
  42. package/dist/components/core/model/FieldMetaDataForm.d.ts +1 -1
  43. package/dist/components/core/model/FieldMetaDataForm.d.ts.map +1 -1
  44. package/dist/components/core/model/FieldMetaDataForm.js +17 -9
  45. package/dist/components/core/model/FieldMetaDataForm.js.map +1 -1
  46. package/dist/components/core/model/ModelMetaData.js +5 -5
  47. package/dist/components/core/model/ModelMetaData.js.map +1 -1
  48. package/dist/components/core/module/CreateModule.d.ts.map +1 -1
  49. package/dist/components/core/module/CreateModule.js +1 -5
  50. package/dist/components/core/module/CreateModule.js.map +1 -1
  51. package/dist/components/core/users/CreateUser.d.ts.map +1 -1
  52. package/dist/components/core/users/CreateUser.js +1 -5
  53. package/dist/components/core/users/CreateUser.js.map +1 -1
  54. package/dist/components/layout/AppSidebar.d.ts.map +1 -1
  55. package/dist/components/layout/AppSidebar.js +21 -34
  56. package/dist/components/layout/AppSidebar.js.map +1 -1
  57. package/dist/helpers/registry.js +3 -3
  58. package/dist/helpers/registry.js.map +1 -1
  59. package/dist/index.d.ts +2 -1
  60. package/dist/index.d.ts.map +1 -1
  61. package/dist/index.js +1 -0
  62. package/dist/index.js.map +1 -1
  63. package/package.json +1 -1
  64. package/src/components/common/SolidBreadcrumb.tsx +38 -14
  65. package/src/components/core/common/SolidGlobalSearchElement.tsx +2 -0
  66. package/src/components/core/common/SolidViewLayoutManager.ts +85 -0
  67. package/src/components/core/extension/solid-core/modelMetadata/list/GenerateModelCodeRowAction.tsx +11 -1
  68. package/src/components/core/extension/solid-core/moduleMetadata/list/GenerateModuleCodeRowAction.tsx +16 -7
  69. package/src/components/core/form/SolidFormLayouts.tsx +6 -3
  70. package/src/components/core/form/SolidFormView.tsx +139 -63
  71. package/src/components/core/form/fields/ISolidField.tsx +2 -1
  72. package/src/components/core/form/fields/SolidSelectionStaticField.tsx +2 -1
  73. package/src/components/core/form/fields/SolidShortTextField.tsx +3 -1
  74. package/src/components/core/form/fields/relations/SolidRelationManyToOneField.tsx +6 -6
  75. package/src/components/core/list/SolidListView.tsx +1 -1
  76. package/src/components/core/model/CreateModel.tsx +8 -12
  77. package/src/components/core/model/FieldMetaData.tsx +2 -2
  78. package/src/components/core/model/FieldMetaDataForm.tsx +338 -332
  79. package/src/components/core/model/ModelMetaData.tsx +5 -5
  80. package/src/components/core/module/CreateModule.tsx +1 -6
  81. package/src/components/core/users/CreateUser.tsx +1 -6
  82. package/src/components/layout/AppSidebar.tsx +3 -21
  83. package/src/helpers/registry.ts +3 -3
  84. package/src/index.ts +15 -1
  85. package/src/types/index.d.ts +20 -0
  86. package/src/types/solid-core.d.ts +2 -1
@@ -132,7 +132,7 @@ const fieldFactory = (type: string, fieldContext: SolidFieldProps): ISolidField
132
132
  }
133
133
 
134
134
  // solidFieldsMetadata={solidFieldsMetadata} solidView={solidView}
135
- const SolidField = ({ formik, field, fieldMetadata, initialEntityData, solidFormViewMetaData, modelName, readOnly, changeHandler }: any) => {
135
+ const SolidField = ({ formik, field, fieldMetadata, initialEntityData, solidFormViewMetaData, modelName, readOnly, onChange, onBlur }: any) => {
136
136
  const fieldContext: SolidFieldProps = {
137
137
  // field metadata - coming from the field-metadata table.
138
138
  fieldMetadata: fieldMetadata,
@@ -144,7 +144,8 @@ const SolidField = ({ formik, field, fieldMetadata, initialEntityData, solidForm
144
144
  solidFormViewMetaData: solidFormViewMetaData,
145
145
  modelName: modelName,
146
146
  readOnly: readOnly,
147
- changeHandler: changeHandler
147
+ onChange: onChange,
148
+ onBlur: onBlur
148
149
  }
149
150
  const solidField = fieldFactory(fieldMetadata?.type, fieldContext);
150
151
 
@@ -472,9 +473,7 @@ const SolidFormView = (params: SolidFormViewProps) => {
472
473
  field: layoutFieldsObj[key],
473
474
  data: initialEntityData,
474
475
  solidFormViewMetaData: solidFormViewMetaData,
475
- modelName: params.modelName,
476
- // TODO: do we need to pass the change handler?
477
- changeHandler: null
476
+ modelName: params.modelName
478
477
  }
479
478
 
480
479
  let solidField = fieldFactory(fieldMetadata?.type, fieldContext);
@@ -598,9 +597,7 @@ const SolidFormView = (params: SolidFormViewProps) => {
598
597
  field: formLayoutField,
599
598
  data: initialEntityData,
600
599
  solidFormViewMetaData: solidFormViewMetaData,
601
- modelName: params.modelName,
602
- // TODO: do we need to pass the change handler?
603
- changeHandler: null,
600
+ modelName: params.modelName
604
601
  }
605
602
  let solidField = fieldFactory(fieldMetadata?.type, fieldContext);
606
603
  if (!fieldMetadata?.type) {
@@ -625,14 +622,20 @@ const SolidFormView = (params: SolidFormViewProps) => {
625
622
  onSubmit: onFormikSubmit,
626
623
  });
627
624
 
628
- const formChangeHandler = async (event: ChangeEvent<HTMLInputElement>) => {
625
+ const formFieldOnXXX = async (event: ChangeEvent<HTMLInputElement>, eventType: string) => {
626
+
627
+ // Invoke the formik change
628
+ if (eventType === 'onFieldChange') {
629
+ formik.handleChange(event);
630
+ }
631
+
629
632
  // get details from the form event
630
633
  const { name: fieldName, value, type, checked } = event.target;
631
- console.log(`formChangeHandler invoked for change in ${fieldName}, with updated value: ${value}`);
634
+ // console.log(`${eventType}: formFieldOnXXX ${fieldName} invoked for change with value:`, value);
632
635
 
633
636
  // TODO: check if there is a change handler registered with this form view, load it and fire it.
634
- const changeHandler = solidView.layout?.changeHandler;
635
- console.log(`changeHandler for this form is ${changeHandler}`);
637
+ const changeHandler = solidView.layout[eventType];
638
+ // console.log(`changeHandler for this form is ${changeHandler}`);
636
639
 
637
640
  if (changeHandler) {
638
641
  // Get hold of the dynamic module...
@@ -645,69 +648,148 @@ const SolidFormView = (params: SolidFormViewProps) => {
645
648
  fieldsMetadata: solidFieldsMetadata,
646
649
  formData: formik.values,
647
650
  modifiedField: fieldName,
648
- type: 'onFieldUpdate',
651
+ modifiedFieldValue: value,
652
+ // @ts-ignore
653
+ // TODO: HP & OR: This will be fixed once we figure out how to get types exported from solid-core-ui
654
+ type: eventType,
649
655
  viewMetadata: solidView
650
656
  }
651
657
  const updatedFormInfo = dynamicChangeHandler(event);
652
- console.log(`I have triggered on change hander: `, updatedFormInfo);
658
+ // console.log(`${eventType}: formFieldOnXXX response received: `, updatedFormInfo);
659
+
660
+ // If dataChanged is true, update Formik values
661
+ if (updatedFormInfo?.dataChanged && updatedFormInfo.newFormData) {
662
+ // This does one field at a time.
663
+ Object.entries(updatedFormInfo.newFormData).forEach(([key, newValue]) => {
664
+ formik.setFieldValue(key, newValue);
665
+ });
666
+
667
+ // This does all at once.
668
+ // if (updatedFormInfo?.dataChanged && updatedFormInfo.newData) {
669
+ // formik.setValues({
670
+ // ...formik.values,
671
+ // ...updatedFormInfo.newFormData
672
+ // });
673
+ // }
674
+ }
653
675
 
676
+ // if layout has changed then we need to re-render.
677
+ if (updatedFormInfo?.layoutChanged && updatedFormInfo.newLayout) {
678
+ // setFormViewMetaData({ ...formViewMetaData, layout: updatedFormInfo.newLayout });
679
+ // console.log(`Existing form view metadata is: `, formViewMetaData);
680
+
681
+ // TODO: this will trigger a useEffect dependent on formViewMetadata that invokes setFormViewLayout, which means that this will not work if custom layout has been injected as a prop.
682
+ setFormViewLayout(updatedFormInfo.newLayout);
683
+ setFormViewMetaData((prevMetaData: any) => {
684
+ const updatedFormViewMetadata = {
685
+ ...prevMetaData,
686
+ data: {
687
+ ...prevMetaData.data,
688
+ solidView: {
689
+ ...prevMetaData.data.solidView,
690
+ layout: updatedFormInfo.newLayout,
691
+ },
692
+ },
693
+ };
694
+ // console.log(`Updated form view metadata is: `, updatedFormViewMetadata);
695
+ return updatedFormViewMetadata;
696
+ });
697
+ }
654
698
  }
655
699
  else {
656
700
  console.log(`Unable to load dynamic module:`, changeHandler);
657
701
  }
658
-
659
702
  }
660
-
661
- // Invoke the formik change
662
- formik.handleChange(event);
663
703
  }
664
704
 
665
705
  // Now render the form dynamically...
666
706
  const renderFormElementDynamically: any = (element: any, solidFormViewMetaData: any) => {
667
- const { type, attrs, children } = element;
707
+ let { type, attrs, body, children } = element;
668
708
 
669
709
  // const key = attrs?.name ?? generateRandomKey();
670
710
  const key = attrs?.name;
711
+ let visible = attrs?.visible;
712
+ if (visible === undefined || visible === null) {
713
+ visible = true;
714
+ }
715
+ // console.log(`Resolved visibility of form element ${key} to ${visible}`);
716
+ // console.log(`Form element ${key}: `, attrs);
671
717
 
672
718
  switch (type) {
673
719
  case "form":
720
+ if (!children)
721
+ children = [];
674
722
  return <div key={key}>{children.map((element: any) => renderFormElementDynamically(element, solidFormViewMetaData))}</div>;
723
+ case "div":
724
+ if (!children)
725
+ children = [];
726
+ return <div key={key} {...attrs}>{children.map((element: any) => renderFormElementDynamically(element, solidFormViewMetaData))}</div>
727
+ case "span":
728
+ return <span key={key} {...attrs}>{body}</span>
729
+ case "p":
730
+ return <p key={key} {...attrs}>{body}</p>
731
+ case "h1":
732
+ return <h1 key={key} {...attrs}>{body}</h1>
733
+ case "h2":
734
+ return <h2 key={key} {...attrs}>{body}</h2>
735
+ case "ul":
736
+ if (!children)
737
+ children = [];
738
+ return <ul key={key} {...attrs}>{children.map((element: any) => renderFormElementDynamically(element, solidFormViewMetaData))}</ul>
739
+ case "li":
740
+ return <li key={key} {...attrs}>{body}</li>
675
741
  case "sheet":
676
742
  return <SolidSheet key={key}>{children.map((element: any) => renderFormElementDynamically(element, solidFormViewMetaData))}</SolidSheet>;
677
743
  case "group":
678
- return <SolidGroup key={key} attrs={attrs}>{children.map((element: any) => renderFormElementDynamically(element, solidFormViewMetaData))}</SolidGroup>;
744
+ if (visible === true) {
745
+ return <SolidGroup key={key} attrs={attrs}>{children.map((element: any) => renderFormElementDynamically(element, solidFormViewMetaData))}</SolidGroup>;
746
+ }
679
747
  case "row":
680
- return <SolidRow key={key} attrs={attrs}>{children.map((element: any) => renderFormElementDynamically(element, solidFormViewMetaData))}</SolidRow>;
748
+ if (visible === true) {
749
+ return <SolidRow key={key} attrs={attrs}>{children.map((element: any) => renderFormElementDynamically(element, solidFormViewMetaData))}</SolidRow>;
750
+ }
681
751
  case "column":
682
- return <SolidColumn key={key} attrs={attrs}>{children.map((element: any) => renderFormElementDynamically(element, solidFormViewMetaData))}</SolidColumn>;
752
+ if (visible === true) {
753
+ return <SolidColumn key={key} attrs={attrs}>{children.map((element: any) => renderFormElementDynamically(element, solidFormViewMetaData))}</SolidColumn>;
754
+ }
683
755
  case "field": {
684
- // const fieldMetadata = solidFieldsMetadata[attrs.name];
685
- const fieldMetadata = solidFormViewMetaData.data.solidFieldsMetadata[attrs.name];
686
- // Read only permission if there is no update permission on model and router doesnt contains new
687
- const readOnlyPermission = !actionsAllowed.includes(`${updatePermission(params.modelName)}`) && params.id !== "new"
688
- return <SolidField
689
- key={key}
690
- field={element}
691
- formik={formik}
692
- fieldMetadata={fieldMetadata}
693
- initialEntityData={solidFormViewData ? solidFormViewData.data : null}
694
- solidFormViewMetaData={solidFormViewMetaData}
695
- modelName={params.modelName}
696
- readOnly={readOnlyPermission}
697
- changeHandler={formChangeHandler}
698
- />;
756
+ if (visible === true) {
757
+
758
+ // const fieldMetadata = solidFieldsMetadata[attrs.name];
759
+ const fieldMetadata = solidFormViewMetaData.data.solidFieldsMetadata[attrs.name];
760
+ // Read only permission if there is no update permission on model and router doesnt contains new
761
+ const readOnlyPermission = !actionsAllowed.includes(`${updatePermission(params.modelName)}`) && params.id !== "new"
762
+ return <SolidField
763
+ key={key}
764
+ field={element}
765
+ formik={formik}
766
+ fieldMetadata={fieldMetadata}
767
+ initialEntityData={solidFormViewData ? solidFormViewData.data : null}
768
+ solidFormViewMetaData={solidFormViewMetaData}
769
+ modelName={params.modelName}
770
+ readOnly={readOnlyPermission}
771
+ onChange={formFieldOnXXX}
772
+ onBlur={formFieldOnXXX}
773
+ />;
774
+ }
699
775
  }
700
776
  case "notebook":
701
- return <SolidNotebook key={key}>{children.map((element: any) => renderFormElementDynamically(element, solidFormViewMetaData))}</SolidNotebook>;
777
+ if (visible === true) {
778
+ return <SolidNotebook key={key}>{children.map((element: any) => renderFormElementDynamically(element, solidFormViewMetaData))}</SolidNotebook>;
779
+ }
702
780
  case "page":
703
- const pageChildren = children.map((element: any) => renderFormElementDynamically(element, solidFormViewMetaData));
704
- return SolidPage({ children: pageChildren, attrs: attrs, key: key });
781
+ // console.log(`Resolved visibility of form element ${key} to ${visible}`);
782
+ if (visible === true) {
783
+ const pageChildren = children.map((element: any) => renderFormElementDynamically(element, solidFormViewMetaData));
784
+ return SolidPage({ children: pageChildren, attrs: attrs, key: key });
785
+ }
705
786
  default:
706
787
  return null;
707
788
  }
708
789
  };
709
790
 
710
791
  const renderFormDynamically = (solidFormViewMetaData: any) => {
792
+ // console.log(`renderFormDynamically invoked....`);
711
793
  if (!solidFormViewMetaData) {
712
794
  return;
713
795
  }
@@ -794,35 +876,16 @@ const SolidFormView = (params: SolidFormViewProps) => {
794
876
  onClick={() => setDeleteDialogVisible(true)}
795
877
  />
796
878
  }
797
- {params.embeded == true &&
798
- actionsAllowed.includes(`${deletePermission(params.modelName)}`) &&
799
- !formViewLayout.attrs.readonly &&
800
- <Button
801
- text
802
- type="button"
803
- className="w-8rem text-left gap-2"
804
- label="Delete"
805
- size="small"
806
- iconPos="left"
807
- severity="danger"
808
- icon={'pi pi-trash'}
809
- onClick={() => setDeleteDialogVisible(true)}
810
- />
811
- }
812
879
  </div>
813
880
  </OverlayPanel>
814
881
  </div>
815
882
  )
816
883
  }
817
884
 
818
- const breadcrumbData = [
819
- { label: 'Book', link: '/admin/core/library-management/book/list' },
820
- { label: params.id === "new" ? `Add ${params.modelName}` : `Edit ${params.modelName}` },
821
- ];
822
-
823
- // see if we have an injected dynamic component.s
885
+ // TODO: This was simply to demonstrate how we can use dynamic components, we will remove this and use it in a more sensible way in the layout.
886
+ // TODO: to demonstrated this you can simply add the below to the layout of the book form view.
887
+ // TODO: "header": "BookFormViewDynamicComponent",
824
888
  const dynamicHeader = solidView.layout?.header;
825
- // const dynamicHeader = "BookFormViewDynamicComponent";
826
889
  let DynamicHeaderComponent = null;
827
890
  if (dynamicHeader) {
828
891
  DynamicHeaderComponent = getExtensionComponent(dynamicHeader);
@@ -943,6 +1006,19 @@ const SolidFormView = (params: SolidFormViewProps) => {
943
1006
  />
944
1007
  </div>
945
1008
  } */}
1009
+ {params.embeded == true &&
1010
+ actionsAllowed.includes(`${deletePermission(params.modelName)}`) &&
1011
+ !formViewLayout.attrs.readonly &&
1012
+ <div>
1013
+ <Button
1014
+ size="small"
1015
+ type="button"
1016
+ label="Delete"
1017
+ severity="danger"
1018
+ onClick={() => setDeleteDialogVisible(true)}
1019
+ />
1020
+ </div>
1021
+ }
946
1022
  {params.embeded == true &&
947
1023
  <Button outlined size="small" type="button" label="Close" onClick={() => params.handlePopupClose()} className='bg-primary-reverse' />
948
1024
 
@@ -955,7 +1031,7 @@ const SolidFormView = (params: SolidFormViewProps) => {
955
1031
  </>
956
1032
  )}
957
1033
  </div>
958
- <SolidBreadcrumb breadcrumbItems={breadcrumbData} />
1034
+ <SolidBreadcrumb />
959
1035
  {/* {params.embeded !== true &&
960
1036
  <div className="solid-form-stepper">
961
1037
  <SolidFormStepper />
@@ -9,7 +9,8 @@ export type SolidFieldProps = {
9
9
  data: any,
10
10
  modelName?: any,
11
11
  readOnly?: any,
12
- changeHandler: any
12
+ onChange?: any,
13
+ onBlur?: any
13
14
  };
14
15
 
15
16
  export type FormikObject = {
@@ -117,7 +117,8 @@ export class SolidSelectionStaticField implements ISolidField {
117
117
  suggestions={selectionStaticItems}
118
118
  completeMethod={selectionStaticSearch}
119
119
  // onChange={(e) => updateInputs(index, e.value)} />
120
- onChange={formik.handleChange}
120
+ // onChange={formik.handleChange}
121
+ onChange={(e) => this.fieldContext.onChange(e, 'onFieldChange')}
121
122
  className="solid-standard-autocomplete"
122
123
  />
123
124
  </div>
@@ -92,9 +92,11 @@ export class SolidShortTextField implements ISolidField {
92
92
  readOnly={formReadonly || fieldReadonly || readOnlyPermission}
93
93
  disabled={formDisabled || fieldDisabled}
94
94
  id={fieldLayoutInfo.attrs.name}
95
+ name={fieldMetadata.name}
95
96
  aria-describedby={`${fieldLayoutInfo.attrs.name}-help`}
96
97
  // onChange={formik.handleChange}
97
- onChange={this.fieldContext.changeHandler}
98
+ onChange={(e) => this.fieldContext.onChange(e, 'onFieldChange')}
99
+ onBlur={(e) => this.fieldContext.onBlur(e, 'onFieldBlur')}
98
100
  value={formik.values[fieldLayoutInfo.attrs.name] || ''}
99
101
  />
100
102
  </div>
@@ -137,12 +137,12 @@ export class SolidRelationManyToOneField implements ISolidField {
137
137
  }
138
138
  return (
139
139
  <div className={className}>
140
- <div className="flex flex-column gap-2 mt-4">
141
- {showFieldLabel != false &&
142
- <label htmlFor={fieldLayoutInfo.attrs.name} className="form-field-label">
143
- {fieldLabel}
144
- </label>
145
- }
140
+ {showFieldLabel != false &&
141
+ <label htmlFor={fieldLayoutInfo.attrs.name} className="form-field-label">
142
+ {fieldLabel}
143
+ </label>
144
+ }
145
+ <div className="flex align-items-center gap-3">
146
146
  <AutoComplete
147
147
  readOnly={formReadonly || fieldReadonly || readOnlyPermission}
148
148
  disabled={formDisabled || fieldDisabled || readOnlyPermission}
@@ -702,7 +702,7 @@ export const SolidListView = (params: SolidListViewParams) => {
702
702
  loadingIcon="pi pi-spinner"
703
703
  selection={[...selectedRecords, ...selectedRecoverRecords]}
704
704
  onSelectionChange={onSelectionChange}
705
- selectionMode="multiple"
705
+ selectionMode="checkbox"
706
706
  removableSort
707
707
  filterIcon={<FilterIcon />}
708
708
  tableClassName="solid-data-table"
@@ -356,11 +356,6 @@ const CreateModel = ({ data, params }: any) => {
356
356
  )
357
357
  }
358
358
 
359
- const breadcrumbData = [
360
- { label: 'Model', link: '/admin/core/solid-core/model-metadata/list' },
361
- { label: params.id === "new" ? 'Create Model' : 'Edit Model' },
362
- ];
363
-
364
359
  const [isDirty, setIsDirty] = useState(false);
365
360
 
366
361
 
@@ -376,9 +371,9 @@ const CreateModel = ({ data, params }: any) => {
376
371
  <div className="form-wrapper-title">Create Model</div>
377
372
  </div>
378
373
  <div className="gap-3 flex">
379
- {isDirty &&
374
+ {/* {isDirty && */}
380
375
  <Button label="Save" size="small" onClick={handleSubmit} type="submit" />
381
- }
376
+ {/* } */}
382
377
  <CancelButton />
383
378
  </div>
384
379
  </>
@@ -392,13 +387,13 @@ const CreateModel = ({ data, params }: any) => {
392
387
  {data?.isSystem !== true &&
393
388
  <>
394
389
  <div>
395
- {isDirty &&
390
+ {/* {isDirty && */}
396
391
  <Button label="Save" size="small" type="submit" onClick={handleSubmit} />
397
- }
392
+ {/* } */}
398
393
  </div>
399
- <div>
394
+ {/* <div>
400
395
  <Button outlined label="Delete" size="small" severity="danger" type="button" onClick={() => setDeleteEntity(true)} />
401
- </div>
396
+ </div> */}
402
397
  </>
403
398
  }
404
399
  <CancelButton />
@@ -407,7 +402,7 @@ const CreateModel = ({ data, params }: any) => {
407
402
  </>
408
403
  }
409
404
  </div>
410
- <SolidBreadcrumb breadcrumbItems={breadcrumbData} />
405
+ <SolidBreadcrumb />
411
406
  {/* <div className="solid-form-stepper">
412
407
  <SolidFormStepper />
413
408
  </div> */}
@@ -450,6 +445,7 @@ const CreateModel = ({ data, params }: any) => {
450
445
  nextTab={nextTab}
451
446
  formikFieldsMetadataRef={formikFieldsMetadataRef}
452
447
  params={params}
448
+ setIsDirty={setIsDirty}
453
449
  ></FieldMetaData>
454
450
  </TabPanel>
455
451
  </TabView>
@@ -11,7 +11,7 @@ import { useRef, useState } from "react";
11
11
  import FieldMetaDataForm from "./FieldMetaDataForm";
12
12
 
13
13
 
14
- const FieldMetaData = ({ modelMetaData, fieldMetaData, setFieldMetaData, deleteModelFunction, nextTab, formikFieldsMetadataRef, params }: any) => {
14
+ const FieldMetaData = ({ setIsDirty, modelMetaData, fieldMetaData, setFieldMetaData, deleteModelFunction, nextTab, formikFieldsMetadataRef, params }: any) => {
15
15
  const pathname = usePathname();
16
16
  const msgs = useRef<Messages>(null);
17
17
 
@@ -156,7 +156,7 @@ const FieldMetaData = ({ modelMetaData, fieldMetaData, setFieldMetaData, deleteM
156
156
  }}
157
157
  showHeader={false}
158
158
  >
159
- <FieldMetaDataForm modelMetaData={modelMetaData} fieldMetaData={selectedFieldMetaData} allFields={fieldMetaData} setFieldMetaData={setFieldMetaData} deleteModelFunction={deleteModelFunction} setVisiblePopup={setVisiblePopup} formikFieldsMetadataRef={formikFieldsMetadataRef} params={params} setIsRequiredPopUp={setIsRequiredPopUp} showToaster={showToaster}></FieldMetaDataForm>
159
+ <FieldMetaDataForm setIsDirty={setIsDirty} modelMetaData={modelMetaData} fieldMetaData={selectedFieldMetaData} allFields={fieldMetaData} setFieldMetaData={setFieldMetaData} deleteModelFunction={deleteModelFunction} setVisiblePopup={setVisiblePopup} formikFieldsMetadataRef={formikFieldsMetadataRef} params={params} setIsRequiredPopUp={setIsRequiredPopUp} showToaster={showToaster}></FieldMetaDataForm>
160
160
  </Dialog>
161
161
  <Dialog
162
162
  visible={isRequiredPopUp}