@solidxai/core-ui 0.1.12-beta.3 → 0.1.12-beta.6

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/auth/AuthLayout.d.ts.map +1 -1
  2. package/dist/components/auth/AuthLayout.js +12 -5
  3. package/dist/components/auth/AuthLayout.js.map +1 -1
  4. package/dist/components/auth/AuthLayout.tsx +15 -4
  5. package/dist/components/auth/AuthSettingsContext.js +1 -1
  6. package/dist/components/auth/AuthSettingsContext.js.map +1 -1
  7. package/dist/components/auth/AuthSettingsContext.tsx +1 -1
  8. package/dist/components/core/chatter/SolidChatterHeader.d.ts.map +1 -1
  9. package/dist/components/core/chatter/SolidChatterHeader.js +18 -4
  10. package/dist/components/core/chatter/SolidChatterHeader.js.map +1 -1
  11. package/dist/components/core/chatter/SolidChatterHeader.tsx +17 -3
  12. package/dist/components/core/common/SolidGenericImport/SolidImportTransaction.d.ts.map +1 -1
  13. package/dist/components/core/common/SolidGenericImport/SolidImportTransaction.js +12 -2
  14. package/dist/components/core/common/SolidGenericImport/SolidImportTransaction.js.map +1 -1
  15. package/dist/components/core/common/SolidGenericImport/SolidImportTransaction.tsx +12 -1
  16. package/dist/components/core/extension/solid-core/metadata/MetadataExplorerFormWidget.d.ts +2 -0
  17. package/dist/components/core/extension/solid-core/metadata/MetadataExplorerFormWidget.d.ts.map +1 -1
  18. package/dist/components/core/extension/solid-core/metadata/MetadataExplorerFormWidget.js +4 -2
  19. package/dist/components/core/extension/solid-core/metadata/MetadataExplorerFormWidget.js.map +1 -1
  20. package/dist/components/core/extension/solid-core/metadata/MetadataExplorerFormWidget.tsx +11 -3
  21. package/dist/components/core/form/SolidFormView.js +1 -1
  22. package/dist/components/core/form/SolidFormView.js.map +1 -1
  23. package/dist/components/core/form/SolidFormView.tsx +1 -1
  24. package/dist/components/core/form/fields/relations/RolesGroupedByModuleWidget.d.ts.map +1 -1
  25. package/dist/components/core/form/fields/relations/RolesGroupedByModuleWidget.js +11 -1
  26. package/dist/components/core/form/fields/relations/RolesGroupedByModuleWidget.js.map +1 -1
  27. package/dist/components/core/form/fields/relations/RolesGroupedByModuleWidget.tsx +26 -19
  28. package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.d.ts.map +1 -1
  29. package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.js +13 -5
  30. package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.js.map +1 -1
  31. package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.tsx +16 -9
  32. package/dist/components/core/json/SolidJsonEditor.css +7 -0
  33. package/dist/components/core/list/SolidDataTable.d.ts.map +1 -1
  34. package/dist/components/core/list/SolidDataTable.js +2 -2
  35. package/dist/components/core/list/SolidDataTable.js.map +1 -1
  36. package/dist/components/core/list/SolidDataTable.tsx +2 -1
  37. package/dist/components/core/list/SolidListView.d.ts.map +1 -1
  38. package/dist/components/core/list/SolidListView.js +58 -58
  39. package/dist/components/core/list/SolidListView.js.map +1 -1
  40. package/dist/components/core/list/SolidListView.tsx +5 -4
  41. package/dist/components/core/model/FieldMetaDataForm.d.ts +1 -1
  42. package/dist/components/core/model/FieldMetaDataForm.d.ts.map +1 -1
  43. package/dist/components/core/model/FieldMetaDataForm.js +119 -102
  44. package/dist/components/core/model/FieldMetaDataForm.js.map +1 -1
  45. package/dist/components/core/model/FieldMetaDataForm.tsx +82 -39
  46. package/dist/components/core/model/FieldSelector.d.ts +5 -1
  47. package/dist/components/core/model/FieldSelector.d.ts.map +1 -1
  48. package/dist/components/core/model/FieldSelector.js +25 -6
  49. package/dist/components/core/model/FieldSelector.js.map +1 -1
  50. package/dist/components/core/model/FieldSelector.tsx +50 -5
  51. package/dist/components/core/module/CreateModule.css +60 -6
  52. package/dist/components/core/module/CreateModule.d.ts.map +1 -1
  53. package/dist/components/core/module/CreateModule.js +2 -2
  54. package/dist/components/core/module/CreateModule.js.map +1 -1
  55. package/dist/components/core/module/CreateModule.tsx +56 -37
  56. package/dist/components/layout/AdminTopHeader.js +1 -1
  57. package/dist/components/layout/AdminTopHeader.js.map +1 -1
  58. package/dist/components/layout/AdminTopHeader.tsx +2 -2
  59. package/dist/components/shad-cn-ui/SolidSelect.d.ts +2 -1
  60. package/dist/components/shad-cn-ui/SolidSelect.d.ts.map +1 -1
  61. package/dist/components/shad-cn-ui/SolidSelect.js +12 -4
  62. package/dist/components/shad-cn-ui/SolidSelect.js.map +1 -1
  63. package/dist/components/shad-cn-ui/SolidSelect.tsx +13 -1
  64. package/dist/helpers/modelViewPersistence.d.ts.map +1 -1
  65. package/dist/helpers/modelViewPersistence.js +3 -2
  66. package/dist/helpers/modelViewPersistence.js.map +1 -1
  67. package/dist/helpers/modelViewPersistence.ts +3 -2
  68. package/dist/redux/api/datasourceIntrospectionApi.d.ts +43 -1
  69. package/dist/redux/api/datasourceIntrospectionApi.d.ts.map +1 -1
  70. package/dist/redux/api/datasourceIntrospectionApi.js +34 -1
  71. package/dist/redux/api/datasourceIntrospectionApi.js.map +1 -1
  72. package/dist/redux/api/datasourceIntrospectionApi.ts +61 -0
  73. package/dist/redux/store/defaultStoreConfig.d.ts +11 -0
  74. package/dist/redux/store/defaultStoreConfig.d.ts.map +1 -1
  75. package/dist/resources/solid-custom.css +3 -86
  76. package/dist/resources/solid-tailwind-generated.css +1 -1
  77. package/dist/resources/themes/solid-dark-purple/theme-variables.css +226 -0
  78. package/dist/resources/themes/solid-dark-purple/theme.css +1 -185
  79. package/dist/resources/themes/solid-light-purple/theme-variables.css +237 -0
  80. package/dist/resources/themes/solid-light-purple/theme.css +1 -206
  81. package/dist/routes/pages/admin/core/DatasourceIntrospectionPage.css +396 -31
  82. package/dist/routes/pages/admin/core/DatasourceIntrospectionPage.d.ts.map +1 -1
  83. package/dist/routes/pages/admin/core/DatasourceIntrospectionPage.js +680 -152
  84. package/dist/routes/pages/admin/core/DatasourceIntrospectionPage.js.map +1 -1
  85. package/dist/routes/pages/admin/core/DatasourceIntrospectionPage.tsx +1358 -441
  86. package/package.json +1 -1
@@ -341,7 +341,7 @@ const SolidGroup = ({ children, attrs }: any) => {
341
341
 
342
342
  const SolidRow = ({ children, attrs }: any) => {
343
343
  const className = [
344
- "row",
344
+ "flex-row w-full",
345
345
  "solid-form-layout-row",
346
346
  "px-2",
347
347
  "pt-2",
@@ -1 +1 @@
1
- {"version":3,"file":"RolesGroupedByModuleWidget.d.ts","sourceRoot":"","sources":["../../../../../../src/components/core/form/fields/relations/RolesGroupedByModuleWidget.tsx"],"names":[],"mappings":"AAaA,UAAU,+BAA+B;IACrC,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,eAAO,MAAM,0BAA0B,2CAIpC,+BAA+B,4CAoHjC,CAAC"}
1
+ {"version":3,"file":"RolesGroupedByModuleWidget.d.ts","sourceRoot":"","sources":["../../../../../../src/components/core/form/fields/relations/RolesGroupedByModuleWidget.tsx"],"names":[],"mappings":"AAaA,UAAU,+BAA+B;IACrC,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AAMD,eAAO,MAAM,0BAA0B,2CAIpC,+BAA+B,4CAuHjC,CAAC"}
@@ -41,6 +41,13 @@ import { SolidAccordion, SolidAccordionItem, SolidAccordionTrigger, SolidAccordi
41
41
  import { SolidCheckbox } from '../../../../shad-cn-ui/SolidCheckbox';
42
42
  import { SolidPanel } from '../../../../shad-cn-ui/SolidPanel';
43
43
  import { solidGet } from '../../../../../http/solidHttp';
44
+ function cx() {
45
+ var parts = [];
46
+ for (var _i = 0; _i < arguments.length; _i++) {
47
+ parts[_i] = arguments[_i];
48
+ }
49
+ return parts.filter(Boolean).join(' ');
50
+ }
44
51
  export var RolesGroupedByModuleWidget = function (_a) {
45
52
  var selectedRoles = _a.selectedRoles, onToggle = _a.onToggle, _b = _a.readOnly, readOnly = _b === void 0 ? false : _b;
46
53
  var _c = useState([]), allRoles = _c[0], setAllRoles = _c[1];
@@ -117,7 +124,10 @@ export var RolesGroupedByModuleWidget = function (_a) {
117
124
  var title = group.moduleId === null
118
125
  ? 'Default Roles'
119
126
  : "".concat(group.moduleDisplayName, " Roles");
120
- return (_jsxs(SolidAccordionItem, { value: key, children: [_jsx(SolidAccordionTrigger, { children: title }), _jsx(SolidAccordionContent, { children: _jsx("div", { className: "flex flex-wrap -mx-2 -mt-2 pt-1", children: group.roles.map(function (item, i) { return (_jsxs("div", { className: "field flex w-1/2 gap-2 ".concat(i >= 2 ? 'mt-3' : ''), children: [_jsx(SolidCheckbox, { disabled: readOnly, id: "role-".concat(item.value), checked: selectedRoles.includes(item.label), onChange: function () { return onToggle(item.label); } }), _jsx("label", { htmlFor: "role-".concat(item.value), className: "form-field-label m-0", children: item.label })] }, item.value)); }) }) })] }, key));
127
+ return (_jsxs(SolidAccordionItem, { value: key, children: [_jsx(SolidAccordionTrigger, { children: title }), _jsx(SolidAccordionContent, { children: _jsx("div", { className: "solid-user-role-grid pt-1", children: group.roles.map(function (item) {
128
+ var isSelected = selectedRoles.includes(item.label);
129
+ return (_jsx("div", { className: cx('solid-user-role-card', isSelected && 'is-selected'), children: _jsx(SolidCheckbox, { className: "solid-user-role-control", disabled: readOnly, id: "role-".concat(item.value), checked: isSelected, onChange: function () { return onToggle(item.label); }, label: item.label }) }, item.value));
130
+ }) }) })] }, key));
121
131
  }) }));
122
132
  };
123
133
  //# sourceMappingURL=RolesGroupedByModuleWidget.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"RolesGroupedByModuleWidget.js","sourceRoot":"","sources":["../../../../../../src/components/core/form/fields/relations/RolesGroupedByModuleWidget.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useEffect, useState } from 'react';\nimport qs from 'qs';\nimport { SolidAccordion, SolidAccordionItem, SolidAccordionTrigger, SolidAccordionContent } from '../../../../shad-cn-ui/SolidAccordion';\nimport { SolidCheckbox } from '../../../../shad-cn-ui/SolidCheckbox';\nimport { SolidPanel } from '../../../../shad-cn-ui/SolidPanel';\nimport { solidGet } from '../../../../../http/solidHttp';\n\ntype RoleGroup = {\n moduleId: number | null;\n moduleDisplayName: string;\n roles: { label: string; value: any }[];\n};\n\ninterface RolesGroupedByModuleWidgetProps {\n selectedRoles: string[];\n onToggle: (roleName: string) => void;\n readOnly?: boolean;\n}\n\nexport const RolesGroupedByModuleWidget = ({\n selectedRoles,\n onToggle,\n readOnly = false,\n}: RolesGroupedByModuleWidgetProps) => {\n const [allRoles, setAllRoles] = useState<any[]>([]);\n const [groups, setGroups] = useState<RoleGroup[]>([]);\n const [openItems, setOpenItems] = useState<string[]>([]);\n\n useEffect(() => {\n const fetchRoles = async () => {\n try {\n const qsStr = qs.stringify(\n { offset: 0, limit: 1000, populate: ['module'] },\n { encodeValuesOnly: true }\n );\n const response = await solidGet(`/role-metadata?${qsStr}`);\n const records = response?.data?.data?.records ?? [];\n setAllRoles(records);\n } catch (e) {\n console.error('RolesGroupedByModuleWidget: failed to fetch roles', e);\n }\n };\n fetchRoles();\n }, []);\n\n useEffect(() => {\n if (!allRoles.length) return;\n\n const groupMap = new Map<number | null, { displayName: string; roles: { label: string; value: any }[] }>();\n groupMap.set(null, { displayName: 'Default', roles: [] });\n\n allRoles.forEach((role: any) => {\n const moduleId: number | null = role.moduleId ?? role.module?.id ?? null;\n const moduleDisplayName: string = role.module?.displayName ?? 'Default';\n const item = { label: role.name, value: role.id };\n\n if (moduleId === null || moduleId === undefined) {\n groupMap.get(null)!.roles.push(item);\n } else {\n if (!groupMap.has(moduleId)) {\n groupMap.set(moduleId, { displayName: moduleDisplayName, roles: [] });\n }\n groupMap.get(moduleId)!.roles.push(item);\n }\n });\n\n const built: RoleGroup[] = [];\n built.push({ moduleId: null, moduleDisplayName: 'Default', roles: groupMap.get(null)!.roles });\n\n const moduleKeys = Array.from(groupMap.keys())\n .filter((k) => k !== null)\n .sort((a, b) => {\n const dA = groupMap.get(a as number)!.displayName;\n const dB = groupMap.get(b as number)!.displayName;\n return dA.localeCompare(dB);\n });\n\n moduleKeys.forEach((moduleId) => {\n const g = groupMap.get(moduleId as number)!;\n built.push({ moduleId: moduleId as number, moduleDisplayName: g.displayName, roles: g.roles });\n });\n\n const nonEmpty = built.filter((g) => g.roles.length > 0);\n setGroups(nonEmpty);\n setOpenItems(nonEmpty.map((g) => String(g.moduleId ?? 'default')));\n }, [allRoles]);\n\n if (groups.length === 0) {\n return (\n <SolidPanel>\n <p className=\"text-sm text-muted-foreground m-0\">No roles defined.</p>\n </SolidPanel>\n );\n }\n\n return (\n <SolidAccordion\n type=\"multiple\"\n value={openItems}\n onValueChange={setOpenItems}\n className=\"w-full\"\n >\n {groups.map((group) => {\n const key = String(group.moduleId ?? 'default');\n const title =\n group.moduleId === null\n ? 'Default Roles'\n : `${group.moduleDisplayName} Roles`;\n return (\n <SolidAccordionItem key={key} value={key}>\n <SolidAccordionTrigger>{title}</SolidAccordionTrigger>\n <SolidAccordionContent>\n <div className=\"flex flex-wrap -mx-2 -mt-2 pt-1\">\n {group.roles.map((item, i) => (\n <div\n key={item.value}\n className={`field flex w-1/2 gap-2 ${i >= 2 ? 'mt-3' : ''}`}\n >\n <SolidCheckbox\n disabled={readOnly}\n id={`role-${item.value}`}\n checked={selectedRoles.includes(item.label)}\n onChange={() => onToggle(item.label)}\n />\n <label\n htmlFor={`role-${item.value}`}\n className=\"form-field-label m-0\"\n >\n {item.label}\n </label>\n </div>\n ))}\n </div>\n </SolidAccordionContent>\n </SolidAccordionItem>\n );\n })}\n </SolidAccordion>\n );\n};\n"]}
1
+ {"version":3,"file":"RolesGroupedByModuleWidget.js","sourceRoot":"","sources":["../../../../../../src/components/core/form/fields/relations/RolesGroupedByModuleWidget.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useEffect, useState } from 'react';\nimport qs from 'qs';\nimport { SolidAccordion, SolidAccordionItem, SolidAccordionTrigger, SolidAccordionContent } from '../../../../shad-cn-ui/SolidAccordion';\nimport { SolidCheckbox } from '../../../../shad-cn-ui/SolidCheckbox';\nimport { SolidPanel } from '../../../../shad-cn-ui/SolidPanel';\nimport { solidGet } from '../../../../../http/solidHttp';\n\ntype RoleGroup = {\n moduleId: number | null;\n moduleDisplayName: string;\n roles: { label: string; value: any }[];\n};\n\ninterface RolesGroupedByModuleWidgetProps {\n selectedRoles: string[];\n onToggle: (roleName: string) => void;\n readOnly?: boolean;\n}\n\nfunction cx(...parts: Array<string | false | undefined>) {\n return parts.filter(Boolean).join(' ');\n}\n\nexport const RolesGroupedByModuleWidget = ({\n selectedRoles,\n onToggle,\n readOnly = false,\n}: RolesGroupedByModuleWidgetProps) => {\n const [allRoles, setAllRoles] = useState<any[]>([]);\n const [groups, setGroups] = useState<RoleGroup[]>([]);\n const [openItems, setOpenItems] = useState<string[]>([]);\n\n useEffect(() => {\n const fetchRoles = async () => {\n try {\n const qsStr = qs.stringify(\n { offset: 0, limit: 1000, populate: ['module'] },\n { encodeValuesOnly: true }\n );\n const response = await solidGet(`/role-metadata?${qsStr}`);\n const records = response?.data?.data?.records ?? [];\n setAllRoles(records);\n } catch (e) {\n console.error('RolesGroupedByModuleWidget: failed to fetch roles', e);\n }\n };\n fetchRoles();\n }, []);\n\n useEffect(() => {\n if (!allRoles.length) return;\n\n const groupMap = new Map<number | null, { displayName: string; roles: { label: string; value: any }[] }>();\n groupMap.set(null, { displayName: 'Default', roles: [] });\n\n allRoles.forEach((role: any) => {\n const moduleId: number | null = role.moduleId ?? role.module?.id ?? null;\n const moduleDisplayName: string = role.module?.displayName ?? 'Default';\n const item = { label: role.name, value: role.id };\n\n if (moduleId === null || moduleId === undefined) {\n groupMap.get(null)!.roles.push(item);\n } else {\n if (!groupMap.has(moduleId)) {\n groupMap.set(moduleId, { displayName: moduleDisplayName, roles: [] });\n }\n groupMap.get(moduleId)!.roles.push(item);\n }\n });\n\n const built: RoleGroup[] = [];\n built.push({ moduleId: null, moduleDisplayName: 'Default', roles: groupMap.get(null)!.roles });\n\n const moduleKeys = Array.from(groupMap.keys())\n .filter((k) => k !== null)\n .sort((a, b) => {\n const dA = groupMap.get(a as number)!.displayName;\n const dB = groupMap.get(b as number)!.displayName;\n return dA.localeCompare(dB);\n });\n\n moduleKeys.forEach((moduleId) => {\n const g = groupMap.get(moduleId as number)!;\n built.push({ moduleId: moduleId as number, moduleDisplayName: g.displayName, roles: g.roles });\n });\n\n const nonEmpty = built.filter((g) => g.roles.length > 0);\n setGroups(nonEmpty);\n setOpenItems(nonEmpty.map((g) => String(g.moduleId ?? 'default')));\n }, [allRoles]);\n\n if (groups.length === 0) {\n return (\n <SolidPanel>\n <p className=\"text-sm text-muted-foreground m-0\">No roles defined.</p>\n </SolidPanel>\n );\n }\n\n return (\n <SolidAccordion\n type=\"multiple\"\n value={openItems}\n onValueChange={setOpenItems}\n className=\"w-full\"\n >\n {groups.map((group) => {\n const key = String(group.moduleId ?? 'default');\n const title =\n group.moduleId === null\n ? 'Default Roles'\n : `${group.moduleDisplayName} Roles`;\n return (\n <SolidAccordionItem key={key} value={key}>\n <SolidAccordionTrigger>{title}</SolidAccordionTrigger>\n <SolidAccordionContent>\n <div className=\"solid-user-role-grid pt-1\">\n {group.roles.map((item) => {\n const isSelected = selectedRoles.includes(item.label);\n\n return (\n <div\n key={item.value}\n className={cx(\n 'solid-user-role-card',\n isSelected && 'is-selected'\n )}\n >\n <SolidCheckbox\n className=\"solid-user-role-control\"\n disabled={readOnly}\n id={`role-${item.value}`}\n checked={isSelected}\n onChange={() => onToggle(item.label)}\n label={item.label}\n />\n </div>\n );\n })}\n </div>\n </SolidAccordionContent>\n </SolidAccordionItem>\n );\n })}\n </SolidAccordion>\n );\n};\n"]}
@@ -17,6 +17,10 @@ interface RolesGroupedByModuleWidgetProps {
17
17
  readOnly?: boolean;
18
18
  }
19
19
 
20
+ function cx(...parts: Array<string | false | undefined>) {
21
+ return parts.filter(Boolean).join(' ');
22
+ }
23
+
20
24
  export const RolesGroupedByModuleWidget = ({
21
25
  selectedRoles,
22
26
  onToggle,
@@ -110,26 +114,29 @@ export const RolesGroupedByModuleWidget = ({
110
114
  <SolidAccordionItem key={key} value={key}>
111
115
  <SolidAccordionTrigger>{title}</SolidAccordionTrigger>
112
116
  <SolidAccordionContent>
113
- <div className="flex flex-wrap -mx-2 -mt-2 pt-1">
114
- {group.roles.map((item, i) => (
115
- <div
116
- key={item.value}
117
- className={`field flex w-1/2 gap-2 ${i >= 2 ? 'mt-3' : ''}`}
118
- >
119
- <SolidCheckbox
120
- disabled={readOnly}
121
- id={`role-${item.value}`}
122
- checked={selectedRoles.includes(item.label)}
123
- onChange={() => onToggle(item.label)}
124
- />
125
- <label
126
- htmlFor={`role-${item.value}`}
127
- className="form-field-label m-0"
117
+ <div className="solid-user-role-grid pt-1">
118
+ {group.roles.map((item) => {
119
+ const isSelected = selectedRoles.includes(item.label);
120
+
121
+ return (
122
+ <div
123
+ key={item.value}
124
+ className={cx(
125
+ 'solid-user-role-card',
126
+ isSelected && 'is-selected'
127
+ )}
128
128
  >
129
- {item.label}
130
- </label>
131
- </div>
132
- ))}
129
+ <SolidCheckbox
130
+ className="solid-user-role-control"
131
+ disabled={readOnly}
132
+ id={`role-${item.value}`}
133
+ checked={isSelected}
134
+ onChange={() => onToggle(item.label)}
135
+ label={item.label}
136
+ />
137
+ </div>
138
+ );
139
+ })}
133
140
  </div>
134
141
  </SolidAccordionContent>
135
142
  </SolidAccordionItem>
@@ -1 +1 @@
1
- {"version":3,"file":"SolidRelationManyToOneField.d.ts","sourceRoot":"","sources":["../../../../../../src/components/core/form/fields/relations/SolidRelationManyToOneField.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,GAAG,MAAM,KAAK,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAI5E,OAAO,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AAc5E,MAAM,MAAM,cAAc,GAAG;IACzB,UAAU,EAAE,GAAG,CAAC;IAChB,SAAS,EAAE,GAAG,CAAC;IACf,EAAE,EAAE,GAAG,CAAC;IACR,OAAO,EAAE,GAAG,CAAC;IACb,oBAAoB,EAAE,GAAG,CAAC;IAC1B,MAAM,EAAE,GAAG,CAAC;CACf,CAAA;AAED,qBAAa,2BAA4B,YAAW,WAAW;IAE3D,OAAO,CAAC,YAAY,CAAkB;gBAE1B,YAAY,EAAE,eAAe;IAIzC,YAAY,IAAI,GAAG;IAmBnB,cAAc,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,GAAG,GAAG;IAOnD,gBAAgB,IAAI,GAAG,CAAC,MAAM;IA2D9B,MAAM,CAAC,MAAM,EAAE,YAAY;IAoC3B,yBAAyB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY;CAYjE;AAED,eAAO,MAAM,sCAAsC,6BAA8B,yBAAyB,4CAgTzG,CAAA;AAED,eAAO,MAAM,0BAA0B,+HAAgI,GAAG,4CA8DzK,CAAA;AAGD,eAAO,MAAM,sCAAsC,6BAA8B,yBAAyB,4CAiBzG,CAAA;AAMD,eAAO,MAAM,iCAAiC,6BAA8B,yBAAyB,4CA0cpG,CAAA"}
1
+ {"version":3,"file":"SolidRelationManyToOneField.d.ts","sourceRoot":"","sources":["../../../../../../src/components/core/form/fields/relations/SolidRelationManyToOneField.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,GAAG,MAAM,KAAK,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAI5E,OAAO,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AAc5E,MAAM,MAAM,cAAc,GAAG;IACzB,UAAU,EAAE,GAAG,CAAC;IAChB,SAAS,EAAE,GAAG,CAAC;IACf,EAAE,EAAE,GAAG,CAAC;IACR,OAAO,EAAE,GAAG,CAAC;IACb,oBAAoB,EAAE,GAAG,CAAC;IAC1B,MAAM,EAAE,GAAG,CAAC;CACf,CAAA;AAED,qBAAa,2BAA4B,YAAW,WAAW;IAE3D,OAAO,CAAC,YAAY,CAAkB;gBAE1B,YAAY,EAAE,eAAe;IAIzC,YAAY,IAAI,GAAG;IAmBnB,cAAc,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,GAAG,GAAG;IAUnD,gBAAgB,IAAI,GAAG,CAAC,MAAM;IA4D9B,MAAM,CAAC,MAAM,EAAE,YAAY;IAoC3B,yBAAyB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY;CAYjE;AAED,eAAO,MAAM,sCAAsC,6BAA8B,yBAAyB,4CAkTzG,CAAA;AAED,eAAO,MAAM,0BAA0B,+HAAgI,GAAG,4CA8DzK,CAAA;AAGD,eAAO,MAAM,sCAAsC,6BAA8B,yBAAyB,4CAiBzG,CAAA;AAMD,eAAO,MAAM,iCAAiC,6BAA8B,yBAAyB,4CA2cpG,CAAA"}
@@ -117,6 +117,10 @@ var SolidRelationManyToOneField = /** @class */ (function () {
117
117
  if (value === null || value === void 0 ? void 0 : value.solidManyToOneValue) {
118
118
  formData.append("".concat(fieldLayoutInfo.attrs.name, "Id"), value.solidManyToOneValue);
119
119
  }
120
+ else {
121
+ // Explicitly tell backend the field is cleared
122
+ formData.append("".concat(fieldLayoutInfo.attrs.name, "Id"), '');
123
+ }
120
124
  }
121
125
  });
122
126
  Object.defineProperty(SolidRelationManyToOneField.prototype, "validationSchema", {
@@ -129,13 +133,14 @@ var SolidRelationManyToOneField = /** @class */ (function () {
129
133
  var fieldLayoutInfo = this.fieldContext.field;
130
134
  var fieldLabel = (_a = fieldLayoutInfo.attrs.label) !== null && _a !== void 0 ? _a : fieldMetadata.displayName;
131
135
  var schema = Yup.mixed();
132
- // Custom validation for relation field
133
136
  if (fieldMetadata.required) {
134
137
  schema = schema.test(ERROR_MESSAGES.REQUIRED_REALTION, ERROR_MESSAGES.FIELD_REUQIRED(fieldLabel), function (value) {
135
138
  // Handle empty values
136
139
  if (!value)
137
140
  return false;
138
141
  // If it's an object with solidManyToOneValue, check if it's valid
142
+ if (typeof value === 'object' && Object.keys(value).length === 0)
143
+ return false;
139
144
  if (typeof value === 'object' && value !== null && value.solidManyToOneValue) {
140
145
  return true;
141
146
  }
@@ -149,7 +154,7 @@ var SolidRelationManyToOneField = /** @class */ (function () {
149
154
  // Add validation to ensure valid selection
150
155
  schema = schema.test(ERROR_MESSAGES.VALIDATE_SELECTION, ERROR_MESSAGES.SELECT_VALID_FROM_DROPDOWN(fieldLabel), function (value) {
151
156
  // If not required and empty, it's valid
152
- if (!fieldMetadata.required && (!value || value === '')) {
157
+ if (!value || value === '' || (typeof value === 'object' && Object.keys(value).length === 0)) {
153
158
  return true;
154
159
  }
155
160
  // If it's an object with solidManyToOneValue, it's a valid selection
@@ -161,7 +166,7 @@ var SolidRelationManyToOneField = /** @class */ (function () {
161
166
  return false;
162
167
  }
163
168
  // Empty value for non-required field
164
- return !fieldMetadata.required;
169
+ return true;
165
170
  });
166
171
  return schema;
167
172
  }
@@ -452,7 +457,9 @@ export var DefaultRelationManyToOneFormEditWidget = function (_a) {
452
457
  return (_jsxs("div", { className: "relative", children: [_jsxs("div", { className: styles.fieldWrapper, children: [showFieldLabel != false &&
453
458
  _jsxs("label", { htmlFor: fieldLayoutInfo.attrs.name, className: "".concat(styles.fieldLabel, " form-field-label"), children: [fieldLabel, fieldMetadata.required && _jsx("span", { className: "text-red-500", children: " *" }), _jsx(SolidFieldTooltip, { fieldContext: fieldContext })] }), _jsxs("div", { className: "flex items-center gap-4", children: [_jsx(SolidAutocomplete, { readOnly: formReadonly || fieldReadonly || readOnlyPermission, disabled: formDisabled || fieldDisabled || readOnlyPermission, id: fieldLayoutInfo.attrs.name, field: "solidManyToOneLabel", value: formik.values[fieldLayoutInfo.attrs.name] || '', dropdown: !readOnlyPermission, suggestions: autoCompleteItems, completeMethod: autoCompleteSearch, onChange: function (_a) {
454
459
  var value = _a.value;
455
- return fieldContext.onChange(buildSyntheticChangeEvent(fieldLayoutInfo.attrs.name, value, "text"), 'onFieldChange');
460
+ // When user clears the field, set to empty object so validation catches it
461
+ var newValue = (value === '' || value === null || value === undefined) ? {} : value;
462
+ fieldContext.onChange(buildSyntheticChangeEvent(fieldLayoutInfo.attrs.name, newValue, "text"), 'onFieldChange');
456
463
  }, onSelect: function (_a) {
457
464
  var value = _a.value;
458
465
  return fieldContext.onChange(buildSyntheticChangeEvent(fieldLayoutInfo.attrs.name, value, "text"), 'onFieldChange');
@@ -889,7 +896,8 @@ export var PseudoRelationManyToOneFormWidget = function (_a) {
889
896
  return (_jsxs("div", { className: "relative", children: [_jsxs("div", { className: styles.fieldWrapper, children: [showFieldLabel != false &&
890
897
  _jsxs("label", { htmlFor: fieldLayoutInfo.attrs.name, className: "".concat(styles.fieldLabel, " form-field-label"), children: [fieldLabel, fieldMetadata.required && _jsx("span", { className: "text-red-500", children: " *" }), _jsx(SolidFieldTooltip, { fieldContext: fieldContext })] }), _jsxs("div", { className: "flex items-center gap-4", children: [_jsx(SolidAutocomplete, { readOnly: formReadonly || fieldReadonly || readOnlyPermission, disabled: formDisabled || fieldDisabled || readOnlyPermission || viewMode === "view", field: "solidManyToOneLabel", id: fieldLayoutInfo.attrs.name, value: resolvedValue || null, dropdown: !readOnlyPermission, suggestions: autoCompleteItems, completeMethod: autoCompleteSearch, onChange: function (_a) {
891
898
  var value = _a.value;
892
- return fieldContext.onChange(buildSyntheticChangeEvent(fieldLayoutInfo.attrs.name, value, "text"), 'onFieldChange');
899
+ var newValue = (value === '' || value === null || value === undefined) ? {} : value;
900
+ fieldContext.onChange(buildSyntheticChangeEvent(fieldLayoutInfo.attrs.name, newValue, "text"), 'onFieldChange');
893
901
  }, onSelect: function (_a) {
894
902
  var value = _a.value;
895
903
  return fieldContext.onChange(buildSyntheticChangeEvent(fieldLayoutInfo.attrs.name, value, "text"), 'onFieldChange');