@solidxai/core-ui 0.1.4-beta.0 → 0.1.4-beta.2

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 (162) hide show
  1. package/dist/components/core/common/SolidAccountSettings/SolidAccountSettings.d.ts.map +1 -1
  2. package/dist/components/core/common/SolidAccountSettings/SolidAccountSettings.js +8 -0
  3. package/dist/components/core/common/SolidAccountSettings/SolidAccountSettings.js.map +1 -1
  4. package/dist/components/core/common/SolidAccountSettings/SolidAccountSettings.tsx +8 -0
  5. package/dist/components/core/common/SolidAccountSettings/SolidVersionInfo.d.ts +2 -0
  6. package/dist/components/core/common/SolidAccountSettings/SolidVersionInfo.d.ts.map +1 -0
  7. package/dist/components/core/common/SolidAccountSettings/SolidVersionInfo.js +34 -0
  8. package/dist/components/core/common/SolidAccountSettings/SolidVersionInfo.js.map +1 -0
  9. package/dist/components/core/common/SolidAccountSettings/SolidVersionInfo.tsx +83 -0
  10. package/dist/components/core/common/SolidGlobalSearchElement.d.ts.map +1 -1
  11. package/dist/components/core/common/SolidGlobalSearchElement.js +6 -8
  12. package/dist/components/core/common/SolidGlobalSearchElement.js.map +1 -1
  13. package/dist/components/core/common/SolidGlobalSearchElement.tsx +21 -21
  14. package/dist/components/core/dashboard/SolidDashboard.d.ts +1 -1
  15. package/dist/components/core/dashboard/SolidDashboard.d.ts.map +1 -1
  16. package/dist/components/core/dashboard/SolidDashboard.js.map +1 -1
  17. package/dist/components/core/dashboard/SolidDashboard.tsx +1 -1
  18. package/dist/components/core/dashboard/SolidDashboardVariable.js +1 -1
  19. package/dist/components/core/dashboard/SolidDashboardVariable.js.map +1 -1
  20. package/dist/components/core/dashboard/SolidDashboardVariable.tsx +1 -1
  21. package/dist/components/core/extension/solid-core/roleMetadata/RolePermissionsManyToManyFieldWidget.d.ts.map +1 -1
  22. package/dist/components/core/extension/solid-core/roleMetadata/RolePermissionsManyToManyFieldWidget.js +15 -30
  23. package/dist/components/core/extension/solid-core/roleMetadata/RolePermissionsManyToManyFieldWidget.js.map +1 -1
  24. package/dist/components/core/extension/solid-core/roleMetadata/RolePermissionsManyToManyFieldWidget.tsx +46 -36
  25. package/dist/components/core/form/fields/relations/SolidRelationManyToManyField.d.ts +40 -0
  26. package/dist/components/core/form/fields/relations/SolidRelationManyToManyField.d.ts.map +1 -1
  27. package/dist/components/core/form/fields/relations/SolidRelationManyToManyField.js +315 -160
  28. package/dist/components/core/form/fields/relations/SolidRelationManyToManyField.js.map +1 -1
  29. package/dist/components/core/form/fields/relations/SolidRelationManyToManyField.tsx +459 -249
  30. package/dist/components/core/form/fields/relations/SolidRelationOneToManyField.d.ts.map +1 -1
  31. package/dist/components/core/form/fields/relations/SolidRelationOneToManyField.js +46 -95
  32. package/dist/components/core/form/fields/relations/SolidRelationOneToManyField.js.map +1 -1
  33. package/dist/components/core/form/fields/relations/SolidRelationOneToManyField.tsx +57 -113
  34. package/dist/components/core/form/fields/relations/widgets/helpers/useRelationEntityHandler.d.ts +15 -5
  35. package/dist/components/core/form/fields/relations/widgets/helpers/useRelationEntityHandler.d.ts.map +1 -1
  36. package/dist/components/core/form/fields/relations/widgets/helpers/useRelationEntityHandler.js +203 -67
  37. package/dist/components/core/form/fields/relations/widgets/helpers/useRelationEntityHandler.js.map +1 -1
  38. package/dist/components/core/form/fields/relations/widgets/helpers/useRelationEntityHandler.ts +147 -67
  39. package/dist/components/core/kanban/SolidKanbanView.d.ts.map +1 -1
  40. package/dist/components/core/kanban/SolidKanbanView.js +8 -7
  41. package/dist/components/core/kanban/SolidKanbanView.js.map +1 -1
  42. package/dist/components/core/kanban/SolidKanbanView.tsx +3 -2
  43. package/dist/components/core/list/SolidListView.d.ts +8 -5
  44. package/dist/components/core/list/SolidListView.d.ts.map +1 -1
  45. package/dist/components/core/list/SolidListView.js +95 -84
  46. package/dist/components/core/list/SolidListView.js.map +1 -1
  47. package/dist/components/core/list/SolidListView.tsx +55 -62
  48. package/dist/components/core/list/SolidListViewConfigure.d.ts +7 -0
  49. package/dist/components/core/list/SolidListViewConfigure.d.ts.map +1 -1
  50. package/dist/components/core/list/SolidListViewConfigure.js +6 -5
  51. package/dist/components/core/list/SolidListViewConfigure.js.map +1 -1
  52. package/dist/components/core/list/SolidListViewConfigure.tsx +21 -12
  53. package/dist/components/core/list/columns/SolidBooleanColumn.d.ts.map +1 -1
  54. package/dist/components/core/list/columns/SolidBooleanColumn.js +1 -24
  55. package/dist/components/core/list/columns/SolidBooleanColumn.js.map +1 -1
  56. package/dist/components/core/list/columns/SolidBooleanColumn.tsx +1 -35
  57. package/dist/components/core/list/columns/SolidDateColumn.d.ts +0 -5
  58. package/dist/components/core/list/columns/SolidDateColumn.d.ts.map +1 -1
  59. package/dist/components/core/list/columns/SolidDateColumn.js +1 -31
  60. package/dist/components/core/list/columns/SolidDateColumn.js.map +1 -1
  61. package/dist/components/core/list/columns/SolidDateColumn.tsx +2 -49
  62. package/dist/components/core/list/columns/SolidDatetimeColumn.d.ts.map +1 -1
  63. package/dist/components/core/list/columns/SolidDatetimeColumn.js +1 -20
  64. package/dist/components/core/list/columns/SolidDatetimeColumn.js.map +1 -1
  65. package/dist/components/core/list/columns/SolidDatetimeColumn.tsx +2 -37
  66. package/dist/components/core/list/columns/SolidExternalIdColumn.d.ts.map +1 -1
  67. package/dist/components/core/list/columns/SolidExternalIdColumn.js +1 -21
  68. package/dist/components/core/list/columns/SolidExternalIdColumn.js.map +1 -1
  69. package/dist/components/core/list/columns/SolidExternalIdColumn.tsx +1 -38
  70. package/dist/components/core/list/columns/SolidIdColumn.d.ts.map +1 -1
  71. package/dist/components/core/list/columns/SolidIdColumn.js +1 -21
  72. package/dist/components/core/list/columns/SolidIdColumn.js.map +1 -1
  73. package/dist/components/core/list/columns/SolidIdColumn.tsx +1 -36
  74. package/dist/components/core/list/columns/SolidIntColumn.d.ts.map +1 -1
  75. package/dist/components/core/list/columns/SolidIntColumn.js +1 -30
  76. package/dist/components/core/list/columns/SolidIntColumn.js.map +1 -1
  77. package/dist/components/core/list/columns/SolidIntColumn.tsx +2 -46
  78. package/dist/components/core/list/columns/SolidMediaMultipleColumn.d.ts.map +1 -1
  79. package/dist/components/core/list/columns/SolidMediaMultipleColumn.js +1 -5
  80. package/dist/components/core/list/columns/SolidMediaMultipleColumn.js.map +1 -1
  81. package/dist/components/core/list/columns/SolidMediaMultipleColumn.tsx +0 -7
  82. package/dist/components/core/list/columns/SolidMediaSingleColumn.d.ts.map +1 -1
  83. package/dist/components/core/list/columns/SolidMediaSingleColumn.js +1 -1
  84. package/dist/components/core/list/columns/SolidMediaSingleColumn.js.map +1 -1
  85. package/dist/components/core/list/columns/SolidMediaSingleColumn.tsx +0 -1
  86. package/dist/components/core/list/columns/SolidSelectionDynamicColumn.d.ts.map +1 -1
  87. package/dist/components/core/list/columns/SolidSelectionDynamicColumn.js +1 -21
  88. package/dist/components/core/list/columns/SolidSelectionDynamicColumn.js.map +1 -1
  89. package/dist/components/core/list/columns/SolidSelectionDynamicColumn.tsx +1 -37
  90. package/dist/components/core/list/columns/SolidSelectionStaticColumn.d.ts.map +1 -1
  91. package/dist/components/core/list/columns/SolidSelectionStaticColumn.js +1 -21
  92. package/dist/components/core/list/columns/SolidSelectionStaticColumn.js.map +1 -1
  93. package/dist/components/core/list/columns/SolidSelectionStaticColumn.tsx +1 -38
  94. package/dist/components/core/list/columns/SolidShortTextColumn.d.ts.map +1 -1
  95. package/dist/components/core/list/columns/SolidShortTextColumn.js +2 -66
  96. package/dist/components/core/list/columns/SolidShortTextColumn.js.map +1 -1
  97. package/dist/components/core/list/columns/SolidShortTextColumn.tsx +3 -86
  98. package/dist/components/core/list/columns/SolidTimeColumn.d.ts.map +1 -1
  99. package/dist/components/core/list/columns/SolidTimeColumn.js +1 -20
  100. package/dist/components/core/list/columns/SolidTimeColumn.js.map +1 -1
  101. package/dist/components/core/list/columns/SolidTimeColumn.tsx +2 -37
  102. package/dist/components/core/list/columns/SolidUuidColumn.d.ts.map +1 -1
  103. package/dist/components/core/list/columns/SolidUuidColumn.js +1 -21
  104. package/dist/components/core/list/columns/SolidUuidColumn.js.map +1 -1
  105. package/dist/components/core/list/columns/SolidUuidColumn.tsx +1 -37
  106. package/dist/components/core/list/columns/relations/SolidRelationManyToManyColumn.d.ts.map +1 -1
  107. package/dist/components/core/list/columns/relations/SolidRelationManyToManyColumn.js +1 -17
  108. package/dist/components/core/list/columns/relations/SolidRelationManyToManyColumn.js.map +1 -1
  109. package/dist/components/core/list/columns/relations/SolidRelationManyToManyColumn.tsx +2 -35
  110. package/dist/components/core/list/columns/relations/SolidRelationManyToOneColumn.d.ts.map +1 -1
  111. package/dist/components/core/list/columns/relations/SolidRelationManyToOneColumn.js +10 -20
  112. package/dist/components/core/list/columns/relations/SolidRelationManyToOneColumn.js.map +1 -1
  113. package/dist/components/core/list/columns/relations/SolidRelationManyToOneColumn.tsx +15 -36
  114. package/dist/components/core/list/columns/relations/SolidRelationOneToManyColumn.d.ts.map +1 -1
  115. package/dist/components/core/list/columns/relations/SolidRelationOneToManyColumn.js +1 -15
  116. package/dist/components/core/list/columns/relations/SolidRelationOneToManyColumn.js.map +1 -1
  117. package/dist/components/core/list/columns/relations/SolidRelationOneToManyColumn.tsx +1 -31
  118. package/dist/components/core/tree/SolidTreeView.d.ts.map +1 -1
  119. package/dist/components/core/tree/SolidTreeView.js +23 -14
  120. package/dist/components/core/tree/SolidTreeView.js.map +1 -1
  121. package/dist/components/core/tree/SolidTreeView.tsx +50 -16
  122. package/dist/helpers/registry.js +3 -1
  123. package/dist/helpers/registry.js.map +1 -1
  124. package/dist/helpers/registry.ts +4 -1
  125. package/dist/index.d.ts +3 -2
  126. package/dist/index.d.ts.map +1 -1
  127. package/dist/index.js +3 -2
  128. package/dist/index.js.map +1 -1
  129. package/dist/index.ts +5 -2
  130. package/dist/redux/api/fetchBaseQuery.js +4 -5
  131. package/dist/redux/api/fetchBaseQuery.js.map +1 -1
  132. package/dist/redux/api/fetchBaseQuery.tsx +4 -4
  133. package/dist/redux/api/solidSettingsApi.d.ts +2 -1
  134. package/dist/redux/api/solidSettingsApi.d.ts.map +1 -1
  135. package/dist/redux/api/solidSettingsApi.js +4 -1
  136. package/dist/redux/api/solidSettingsApi.js.map +1 -1
  137. package/dist/redux/api/solidSettingsApi.tsx +6 -1
  138. package/dist/redux/store/defaultStoreConfig.d.ts +1 -0
  139. package/dist/redux/store/defaultStoreConfig.d.ts.map +1 -1
  140. package/dist/resources/globals.css +14 -0
  141. package/dist/routes/pages/admin/core/DashboardPage.d.ts +2 -0
  142. package/dist/routes/pages/admin/core/DashboardPage.d.ts.map +1 -0
  143. package/dist/routes/pages/admin/core/DashboardPage.js +14 -0
  144. package/dist/routes/pages/admin/core/DashboardPage.js.map +1 -0
  145. package/dist/routes/pages/admin/core/DashboardPage.tsx +17 -0
  146. package/dist/routes/pages/admin/core/ListPage.js +1 -1
  147. package/dist/routes/pages/admin/core/ListPage.js.map +1 -1
  148. package/dist/routes/pages/admin/core/ListPage.tsx +1 -1
  149. package/dist/routes/pages/admin/core/ModuleHomePage.d.ts.map +1 -1
  150. package/dist/routes/pages/admin/core/ModuleHomePage.js +4 -15
  151. package/dist/routes/pages/admin/core/ModuleHomePage.js.map +1 -1
  152. package/dist/routes/pages/admin/core/ModuleHomePage.tsx +4 -3
  153. package/dist/routes/solidRoutes.d.ts.map +1 -1
  154. package/dist/routes/solidRoutes.js +2 -0
  155. package/dist/routes/solidRoutes.js.map +1 -1
  156. package/dist/routes/solidRoutes.tsx +2 -0
  157. package/dist/routes/types.d.ts +1 -1
  158. package/dist/routes/types.d.ts.map +1 -1
  159. package/dist/routes/types.js.map +1 -1
  160. package/dist/routes/types.ts +1 -0
  161. package/dist/types/solid-core.d.ts +1 -1
  162. package/package.json +1 -1
@@ -414,24 +414,28 @@ const SavedFilterList = ({ savedfilter, activeSavedFilter, applySavedFilter, ope
414
414
  {/* {savedfilter?.description && <p className="text-xs pl-3">{savedfilter?.description}</p>} */}
415
415
  </div>
416
416
  <div className="flex align-items-center gap-2">
417
- <Button
418
- icon="pi pi-pencil"
419
- style={{ fontSize: 10 }}
420
- severity="secondary"
421
- outlined size="small"
422
- onClick={() => openSavedCustomFilter(savedfilter)}
423
- />
424
- <Button
425
- icon="pi pi-trash"
426
- style={{ fontSize: 10 }}
427
- severity="secondary"
428
- outlined size="small"
429
- onClick={() => {
430
- setSavedFilterTobeDeleted(savedfilter.id),
431
- setIsDeleteSQDialogVisible(true);
417
+ {savedfilter.isSeeded !== true &&
418
+ <>
419
+ <Button
420
+ icon="pi pi-pencil"
421
+ style={{ fontSize: 10 }}
422
+ severity="secondary"
423
+ outlined size="small"
424
+ onClick={() => openSavedCustomFilter(savedfilter)}
425
+ />
426
+ <Button
427
+ icon="pi pi-trash"
428
+ style={{ fontSize: 10 }}
429
+ severity="secondary"
430
+ outlined size="small"
431
+ onClick={() => {
432
+ setSavedFilterTobeDeleted(savedfilter.id),
433
+ setIsDeleteSQDialogVisible(true);
434
+ }}
435
+ />
436
+ </>
437
+ }
432
438
 
433
- }}
434
- />
435
439
  </div>
436
440
  </div>
437
441
  )
@@ -802,11 +806,7 @@ export const SolidGlobalSearchElement = forwardRef(({ viewData, viewType, handle
802
806
 
803
807
  useEffect(() => {
804
808
  const fn = async () => {
805
- console.log("Effect fired");
806
- console.log("filterPredicates:", filterPredicates);
807
809
  if (filterPredicates) {
808
- console.log("inside filterPredicates");
809
-
810
810
  if (filterPredicates?.custom_filter_predicate && filterPredicates?.custom_filter_predicate !== customFilter) {
811
811
  setCustomFilter(filterPredicates?.custom_filter_predicate);
812
812
  const rules: FilterRule = transformFiltersToRules(filterPredicates.custom_filter_predicate);
@@ -11,7 +11,7 @@ export interface DashboardVariableRecord {
11
11
  id: number;
12
12
  variableName: string;
13
13
  variableType: DashboardVariableType;
14
- selectionStaticValues?: string[];
14
+ selectionStaticValues?: string;
15
15
  selectionDynamicSourceType?: SOURCE_TYPE;
16
16
  selectionDynamicProviderName?: string;
17
17
  selectionDynamicSQL?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"SolidDashboard.d.ts","sourceRoot":"","sources":["../../../../src/components/core/dashboard/SolidDashboard.tsx"],"names":[],"mappings":"AAoBA,oBAAY,qBAAqB;IAC/B,IAAI,SAAS;IACb,gBAAgB,oBAAoB;IACpC,iBAAiB,qBAAqB;CACvC;AAED,aAAK,WAAW;IACd,GAAG,QAAQ;IACX,QAAQ,aAAa;CACtB;AAED,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,qBAAqB,CAAC;IACpC,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;IACjC,0BAA0B,CAAC,EAAE,WAAW,CAAC;IACzC,4BAA4B,CAAC,EAAE,MAAM,CAAC;IACtC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAwED,KAAK,uBAAuB,GAAG;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,QAAA,MAAM,cAAc,WAAY,uBAAuB,4CAiNtD,CAAA;AAED,eAAe,cAAc,CAAC"}
1
+ {"version":3,"file":"SolidDashboard.d.ts","sourceRoot":"","sources":["../../../../src/components/core/dashboard/SolidDashboard.tsx"],"names":[],"mappings":"AAoBA,oBAAY,qBAAqB;IAC/B,IAAI,SAAS;IACb,gBAAgB,oBAAoB;IACpC,iBAAiB,qBAAqB;CACvC;AAED,aAAK,WAAW;IACd,GAAG,QAAQ;IACX,QAAQ,aAAa;CACtB;AAED,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,qBAAqB,CAAC;IACpC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,0BAA0B,CAAC,EAAE,WAAW,CAAC;IACzC,4BAA4B,CAAC,EAAE,MAAM,CAAC;IACtC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAwED,KAAK,uBAAuB,GAAG;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,QAAA,MAAM,cAAc,WAAY,uBAAuB,4CAiNtD,CAAA;AAED,eAAe,cAAc,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"SolidDashboard.js","sourceRoot":"","sources":["../../../../src/components/core/dashboard/SolidDashboard.tsx"],"names":[],"mappings":"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","sourcesContent":["\nimport { DashboardResponse, useGetDashboardQuery } from '../../../redux/api/dashboardApi';\nimport { SqlExpression } from '../../../types/solid-core';\nimport { Button } from 'primereact/button';\nimport { Tooltip } from \"primereact/tooltip\";\nimport qs from 'qs';\nimport { Dispatch, SetStateAction, useEffect, useState } from 'react';\nimport { SolidXAIIcon } from '../solid-ai/SolidXAIIcon';\nimport styles from './SolidDashboard.module.css';\nimport SolidDashboardBody from './SolidDashboardBody';\nimport SolidDashboardVariable from './SolidDashboardVariable';\nimport { SolidAiMainWrapper } from '../solid-ai/SolidAiMainWrapper';\nimport { SolidDashboardFilterRequired } from './SolidDashboardFilterRequired';\nimport { SolidDashboardLoading } from './SolidDashboardLoading';\nimport { SolidDashboardRenderError } from './SolidDashboardRenderError';\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { showNavbar, toggleNavbar } from \"../../../redux/features/navbarSlice\";\nimport SolidDashboardNotAvailable from './SolidDashboardNotAvailable';\nimport { useLazyGetMcpUrlQuery, useLazyGetSolidSettingsQuery } from '../../../redux/api/solidSettingsApi';\n\nexport enum DashboardVariableType {\n DATE = 'date',\n SELECTION_STATIC = 'selectionStatic',\n SELECTION_DYNAMIC = 'selectionDynamic',\n}\n\nenum SOURCE_TYPE {\n SQL = 'sql',\n PROVIDER = 'provider',\n}\n\nexport interface DashboardVariableRecord {\n id: number;\n variableName: string;\n variableType: DashboardVariableType;\n selectionStaticValues?: string[];\n selectionDynamicSourceType?: SOURCE_TYPE;\n selectionDynamicProviderName?: string;\n selectionDynamicSQL?: string;\n isMultiSelect?: boolean;\n defaultValue?: string;\n defaultOperator?: string;\n}\n\nfunction handleDashboardData(\n data: DashboardResponse,\n setDashboardVariables: Dispatch<SetStateAction<DashboardVariableRecord[]>>,\n setQuestions: Dispatch<SetStateAction<any[]>>,\n) {\n const { records, meta } = data;\n if (records && records.length > 0) {\n // Set the layout options for the dashboard body\n const dashboardData = records[0]; // Assuming we want the first dashboard\n\n // Set the dashboard variables\n setDashboardVariables(dashboardData.dashboardVariables || []);\n\n // Set the dashboard questions\n setQuestions(dashboardData.questions)\n\n }\n}\n\nfunction getQueryParams(moduleName: string, dashboardId?: number, dashboardName?: string) {\n const filters: any = {\n module: {\n name: {\n $eq: moduleName\n }\n }\n };\n\n if (dashboardId !== undefined) {\n filters.id = { $eq: dashboardId };\n } else if (dashboardName !== undefined) {\n filters.name = { $eq: dashboardName };\n }\n\n const query = {\n filters,\n populate: ['dashboardVariables', 'questions']\n };\n const urlQuery = qs.stringify(query, {\n encodeValuesOnly: true,\n });\n return urlQuery;\n}\n\n// Render the dashboard body only if:\n// 1. There are dashboard questions\n// AND\n// (\n// 1. There are dashboard variables and all dashboard variable filter rules have been applied i.e (all dashboard variables have been selected)\n//. OR\n// 2. There are no dashboard variables\n// )\n// \nfunction isRenderDashboardBody(questions: any[], dashboardVariables: DashboardVariableRecord[], filters: SqlExpression[]) {\n if (questions.length === 0) {\n return false;\n }\n\n if (dashboardVariables.length === 0) {\n return true;\n }\n\n // Check if all dashboard variables have corresponding filters applied\n const allVariablesFiltered = dashboardVariables.every(variable =>\n filters.some(filter => filter.variableName === variable.variableName)\n );\n\n return allVariablesFiltered;\n}\n\ntype SolidDashboardViewProps = {\n moduleName: string;\n dashboardId?: number;\n dashboardName?: string;\n};\n\nconst SolidDashboard = (params: SolidDashboardViewProps) => {\n const { data, isLoading, error } = useGetDashboardQuery(getQueryParams(params.moduleName, params.dashboardId, params.dashboardName)) // FIXME : error handling should be done properly\n // Define a state called layoutOption and pass it after destructing the widgetOptions and dashboardOptions from layoutOption\n // TODO [HP]: Shouldn't the type of this state variable be something different? Why are we muddling this with layout but calling it body props? \n // TODO [HP]: Body props should be clearly made up of Gridstack layout options, the questions that make up the body & the filter[] which is an array of SqlExpressions\n // TODO [HP]: This is fully CONFUSED\n // const [layoutOption, setLayoutOption] = useState<SolidDashboardBodyProps>({\n // filters: [],\n // questions: [],\n // });\n\n // TODO [HP]: replace dashboardVariableFilterRules with filters everywhere...\n // const [dashboardVariableFilterRules, setDashboardVariableFilterRules] = useState<ISolidDashboardVariableFilterRule[]>([]);\n const dispatch = useDispatch();\n const visibleNavbar = useSelector((state: any) => state.navbarState?.visibleNavbar);\n const [filters, setFilters] = useState<SqlExpression[]>([]);\n const [isOpenSolidXAiPanel, setIsOpenSolidXAiPanel] = useState(false);\n const [chatterWidth, setChatterWidth] = useState(380);\n const [isResizing, setIsResizing] = useState(false);\n const [questions, setQuestions] = useState<any[]>([]);\n const [dashboardVariables, setDashboardVariables] = useState<DashboardVariableRecord[]>([]);\n\n\n useEffect(() => {\n // Invoke the dashboard api to fetch the dashboard data\n // console.log('Dashboard Data testing:', isLoading, data, error);\n if (!isLoading && data) {\n // Assuming data contains the layout options\n handleDashboardData(data, setDashboardVariables, setQuestions);\n }\n }, [isLoading, data]);\n\n useEffect(() => {\n const storedOpen = localStorage.getItem('d_solidxai_open');\n const storedWidth = localStorage.getItem('d_solidxai_width');\n\n if (storedOpen !== null) {\n setIsOpenSolidXAiPanel(storedOpen === 'true');\n }\n\n if (storedWidth !== null) {\n const width = parseInt(storedWidth, 10);\n if (!isNaN(width)) {\n setChatterWidth(width);\n }\n }\n }, []);\n\n\n useEffect(() => {\n if (isResizing) {\n const handleMouseMove = (e: MouseEvent) => {\n const newWidth = window.innerWidth - e.clientX;\n const clampedWidth = Math.max(280, Math.min(newWidth, 700));\n setChatterWidth(clampedWidth);\n localStorage.setItem('d_solidxai_width', clampedWidth.toString());\n };\n\n const handleMouseUp = () => {\n setIsResizing(false);\n };\n\n window.addEventListener('mousemove', handleMouseMove);\n window.addEventListener('mouseup', handleMouseUp);\n\n return () => {\n window.removeEventListener('mousemove', handleMouseMove);\n window.removeEventListener('mouseup', handleMouseUp);\n };\n }\n }, [isResizing]);\n\n\n const handleOpen = () => {\n setIsOpenSolidXAiPanel(true);\n localStorage.setItem('d_solidxai_open', 'true');\n };\n\n const handleClose = () => {\n setIsOpenSolidXAiPanel(false);\n localStorage.setItem('d_solidxai_open', 'false');\n };\n\n const toggleBothSidebars = () => {\n if (visibleNavbar) {\n dispatch(toggleNavbar()); // close both\n } else {\n dispatch(showNavbar()); // open both\n }\n };\n\n\n\n const [mcpUrl, setMcpUrl] = useState<string | null>(null);\n const [getMcpUrl] = useLazyGetMcpUrlQuery();\n\n const [trigger, { data: solidSettingsData }] = useLazyGetSolidSettingsQuery();\n useEffect(() => {\n trigger(\"\") // Fetch settings on mount\n }, [])\n\n useEffect(() => {\n if (solidSettingsData?.data?.mcpEnabled && solidSettingsData?.data?.mcpServerUrl) {\n enableSolidXAiPanel();\n }\n }, [solidSettingsData]);\n\n const enableSolidXAiPanel = async () => {\n try {\n const queryData = {\n showHeader: \"true\",\n inListView: \"true\"\n };\n const queryString = qs.stringify({ ...queryData }, { encodeValuesOnly: true });\n const response = await getMcpUrl(queryString).unwrap();\n console.log(\"response\", response);\n if (response && response?.data?.mcpUrl) {\n setMcpUrl(response?.data?.mcpUrl);\n }\n } catch (error) {\n\n }\n }\n\n\n return (\n <div className={`h-screen surface-0 flex`}>\n <div className={`h-full flex-grow-1 ${styles.SolidDashboardPageContentWrapper}`}>\n {isLoading && <SolidDashboardLoading />}\n {error && <SolidDashboardRenderError />}\n {!isLoading && !error && data && data.records.length === 0 && (\n <SolidDashboardNotAvailable />\n )}\n {!isLoading && !error && data && data.records.length > 0 && (\n <>\n <div className=\"page-header\" style={{ borderBottom: '1px solid var(--primary-light-color)' }}>\n <div className='flex align-items-center gap-2'>\n <div className=\"apps-icon block md:hidden cursor-pointer\" onClick={toggleBothSidebars}>\n <i className=\"pi pi-th-large\"></i>\n </div>\n <p className={`view-title solid-text-wrapper flex align-items-center gap-1 ${styles.SolidDashboardTitle}`}>\n {data?.records[0]?.displayName ? data?.records[0]?.displayName : data?.records[0]?.name}\n {data?.records[0]?.description &&\n <>\n <Tooltip className='solid-field-tooltip' target=\".solid-field-tooltip-icon\" />\n <i className=\"pi pi-info-circle solid-field-tooltip-icon\"\n data-pr-tooltip={data?.records[0]?.description}\n data-pr-position={'right'}\n />\n </>\n }\n </p>\n </div>\n {dashboardVariables && dashboardVariables.length > 0 && <SolidDashboardVariable dashboardVariables={dashboardVariables} filters={filters} setFilters={setFilters} />}\n </div>\n {!isRenderDashboardBody(questions, dashboardVariables, filters) && <SolidDashboardFilterRequired />}\n {isRenderDashboardBody(questions, dashboardVariables, filters) && <SolidDashboardBody questions={questions} filters={filters} />}\n </>\n )}\n </div>\n {mcpUrl && (\n <div className={`chatter-section ${isOpenSolidXAiPanel === false ? 'collapsed' : 'open'}`} style={{ width: chatterWidth }}>\n {isOpenSolidXAiPanel && (\n <div\n style={{\n width: 5,\n cursor: 'col-resize',\n position: 'absolute',\n left: 0,\n top: 0,\n bottom: 0,\n height: '100%',\n zIndex: 9,\n }}\n onMouseDown={() => setIsResizing(true)}\n />\n )}\n {isOpenSolidXAiPanel &&\n <Button\n icon=\"pi pi-angle-double-right\"\n size=\"small\"\n text\n className=\"chatter-collapse-btn\"\n style={{ width: 30, height: 30, aspectRatio: '1/1' }}\n onClick={handleClose}\n />\n }\n\n {isOpenSolidXAiPanel === false ?\n <div className=\"flex flex-column gap-2 justify-content-center p-2\">\n <div className=\"chatter-collapsed-content\" onClick={handleOpen}>\n <div className=\"flex gap-2\"> <SolidXAIIcon /> SolidX AI </div>\n </div>\n <Button\n icon=\"pi pi-chevron-left\"\n size=\"small\"\n className=\"px-0\"\n style={{ width: 30 }}\n onClick={handleOpen}\n />\n </div>\n :\n <SolidAiMainWrapper mcpUrl={mcpUrl} />\n }\n </div>\n )}\n\n </div>\n );\n}\n\nexport default SolidDashboard;\n"]}
1
+ {"version":3,"file":"SolidDashboard.js","sourceRoot":"","sources":["../../../../src/components/core/dashboard/SolidDashboard.tsx"],"names":[],"mappings":"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","sourcesContent":["\nimport { DashboardResponse, useGetDashboardQuery } from '../../../redux/api/dashboardApi';\nimport { SqlExpression } from '../../../types/solid-core';\nimport { Button } from 'primereact/button';\nimport { Tooltip } from \"primereact/tooltip\";\nimport qs from 'qs';\nimport { Dispatch, SetStateAction, useEffect, useState } from 'react';\nimport { SolidXAIIcon } from '../solid-ai/SolidXAIIcon';\nimport styles from './SolidDashboard.module.css';\nimport SolidDashboardBody from './SolidDashboardBody';\nimport SolidDashboardVariable from './SolidDashboardVariable';\nimport { SolidAiMainWrapper } from '../solid-ai/SolidAiMainWrapper';\nimport { SolidDashboardFilterRequired } from './SolidDashboardFilterRequired';\nimport { SolidDashboardLoading } from './SolidDashboardLoading';\nimport { SolidDashboardRenderError } from './SolidDashboardRenderError';\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { showNavbar, toggleNavbar } from \"../../../redux/features/navbarSlice\";\nimport SolidDashboardNotAvailable from './SolidDashboardNotAvailable';\nimport { useLazyGetMcpUrlQuery, useLazyGetSolidSettingsQuery } from '../../../redux/api/solidSettingsApi';\n\nexport enum DashboardVariableType {\n DATE = 'date',\n SELECTION_STATIC = 'selectionStatic',\n SELECTION_DYNAMIC = 'selectionDynamic',\n}\n\nenum SOURCE_TYPE {\n SQL = 'sql',\n PROVIDER = 'provider',\n}\n\nexport interface DashboardVariableRecord {\n id: number;\n variableName: string;\n variableType: DashboardVariableType;\n selectionStaticValues?: string;\n selectionDynamicSourceType?: SOURCE_TYPE;\n selectionDynamicProviderName?: string;\n selectionDynamicSQL?: string;\n isMultiSelect?: boolean;\n defaultValue?: string;\n defaultOperator?: string;\n}\n\nfunction handleDashboardData(\n data: DashboardResponse,\n setDashboardVariables: Dispatch<SetStateAction<DashboardVariableRecord[]>>,\n setQuestions: Dispatch<SetStateAction<any[]>>,\n) {\n const { records, meta } = data;\n if (records && records.length > 0) {\n // Set the layout options for the dashboard body\n const dashboardData = records[0]; // Assuming we want the first dashboard\n\n // Set the dashboard variables\n setDashboardVariables(dashboardData.dashboardVariables || []);\n\n // Set the dashboard questions\n setQuestions(dashboardData.questions)\n\n }\n}\n\nfunction getQueryParams(moduleName: string, dashboardId?: number, dashboardName?: string) {\n const filters: any = {\n module: {\n name: {\n $eq: moduleName\n }\n }\n };\n\n if (dashboardId !== undefined) {\n filters.id = { $eq: dashboardId };\n } else if (dashboardName !== undefined) {\n filters.name = { $eq: dashboardName };\n }\n\n const query = {\n filters,\n populate: ['dashboardVariables', 'questions']\n };\n const urlQuery = qs.stringify(query, {\n encodeValuesOnly: true,\n });\n return urlQuery;\n}\n\n// Render the dashboard body only if:\n// 1. There are dashboard questions\n// AND\n// (\n// 1. There are dashboard variables and all dashboard variable filter rules have been applied i.e (all dashboard variables have been selected)\n//. OR\n// 2. There are no dashboard variables\n// )\n// \nfunction isRenderDashboardBody(questions: any[], dashboardVariables: DashboardVariableRecord[], filters: SqlExpression[]) {\n if (questions.length === 0) {\n return false;\n }\n\n if (dashboardVariables.length === 0) {\n return true;\n }\n\n // Check if all dashboard variables have corresponding filters applied\n const allVariablesFiltered = dashboardVariables.every(variable =>\n filters.some(filter => filter.variableName === variable.variableName)\n );\n\n return allVariablesFiltered;\n}\n\ntype SolidDashboardViewProps = {\n moduleName: string;\n dashboardId?: number;\n dashboardName?: string;\n};\n\nconst SolidDashboard = (params: SolidDashboardViewProps) => {\n const { data, isLoading, error } = useGetDashboardQuery(getQueryParams(params.moduleName, params.dashboardId, params.dashboardName)) // FIXME : error handling should be done properly\n // Define a state called layoutOption and pass it after destructing the widgetOptions and dashboardOptions from layoutOption\n // TODO [HP]: Shouldn't the type of this state variable be something different? Why are we muddling this with layout but calling it body props? \n // TODO [HP]: Body props should be clearly made up of Gridstack layout options, the questions that make up the body & the filter[] which is an array of SqlExpressions\n // TODO [HP]: This is fully CONFUSED\n // const [layoutOption, setLayoutOption] = useState<SolidDashboardBodyProps>({\n // filters: [],\n // questions: [],\n // });\n\n // TODO [HP]: replace dashboardVariableFilterRules with filters everywhere...\n // const [dashboardVariableFilterRules, setDashboardVariableFilterRules] = useState<ISolidDashboardVariableFilterRule[]>([]);\n const dispatch = useDispatch();\n const visibleNavbar = useSelector((state: any) => state.navbarState?.visibleNavbar);\n const [filters, setFilters] = useState<SqlExpression[]>([]);\n const [isOpenSolidXAiPanel, setIsOpenSolidXAiPanel] = useState(false);\n const [chatterWidth, setChatterWidth] = useState(380);\n const [isResizing, setIsResizing] = useState(false);\n const [questions, setQuestions] = useState<any[]>([]);\n const [dashboardVariables, setDashboardVariables] = useState<DashboardVariableRecord[]>([]);\n\n\n useEffect(() => {\n // Invoke the dashboard api to fetch the dashboard data\n // console.log('Dashboard Data testing:', isLoading, data, error);\n if (!isLoading && data) {\n // Assuming data contains the layout options\n handleDashboardData(data, setDashboardVariables, setQuestions);\n }\n }, [isLoading, data]);\n\n useEffect(() => {\n const storedOpen = localStorage.getItem('d_solidxai_open');\n const storedWidth = localStorage.getItem('d_solidxai_width');\n\n if (storedOpen !== null) {\n setIsOpenSolidXAiPanel(storedOpen === 'true');\n }\n\n if (storedWidth !== null) {\n const width = parseInt(storedWidth, 10);\n if (!isNaN(width)) {\n setChatterWidth(width);\n }\n }\n }, []);\n\n\n useEffect(() => {\n if (isResizing) {\n const handleMouseMove = (e: MouseEvent) => {\n const newWidth = window.innerWidth - e.clientX;\n const clampedWidth = Math.max(280, Math.min(newWidth, 700));\n setChatterWidth(clampedWidth);\n localStorage.setItem('d_solidxai_width', clampedWidth.toString());\n };\n\n const handleMouseUp = () => {\n setIsResizing(false);\n };\n\n window.addEventListener('mousemove', handleMouseMove);\n window.addEventListener('mouseup', handleMouseUp);\n\n return () => {\n window.removeEventListener('mousemove', handleMouseMove);\n window.removeEventListener('mouseup', handleMouseUp);\n };\n }\n }, [isResizing]);\n\n\n const handleOpen = () => {\n setIsOpenSolidXAiPanel(true);\n localStorage.setItem('d_solidxai_open', 'true');\n };\n\n const handleClose = () => {\n setIsOpenSolidXAiPanel(false);\n localStorage.setItem('d_solidxai_open', 'false');\n };\n\n const toggleBothSidebars = () => {\n if (visibleNavbar) {\n dispatch(toggleNavbar()); // close both\n } else {\n dispatch(showNavbar()); // open both\n }\n };\n\n\n\n const [mcpUrl, setMcpUrl] = useState<string | null>(null);\n const [getMcpUrl] = useLazyGetMcpUrlQuery();\n\n const [trigger, { data: solidSettingsData }] = useLazyGetSolidSettingsQuery();\n useEffect(() => {\n trigger(\"\") // Fetch settings on mount\n }, [])\n\n useEffect(() => {\n if (solidSettingsData?.data?.mcpEnabled && solidSettingsData?.data?.mcpServerUrl) {\n enableSolidXAiPanel();\n }\n }, [solidSettingsData]);\n\n const enableSolidXAiPanel = async () => {\n try {\n const queryData = {\n showHeader: \"true\",\n inListView: \"true\"\n };\n const queryString = qs.stringify({ ...queryData }, { encodeValuesOnly: true });\n const response = await getMcpUrl(queryString).unwrap();\n console.log(\"response\", response);\n if (response && response?.data?.mcpUrl) {\n setMcpUrl(response?.data?.mcpUrl);\n }\n } catch (error) {\n\n }\n }\n\n\n return (\n <div className={`h-screen surface-0 flex`}>\n <div className={`h-full flex-grow-1 ${styles.SolidDashboardPageContentWrapper}`}>\n {isLoading && <SolidDashboardLoading />}\n {error && <SolidDashboardRenderError />}\n {!isLoading && !error && data && data.records.length === 0 && (\n <SolidDashboardNotAvailable />\n )}\n {!isLoading && !error && data && data.records.length > 0 && (\n <>\n <div className=\"page-header\" style={{ borderBottom: '1px solid var(--primary-light-color)' }}>\n <div className='flex align-items-center gap-2'>\n <div className=\"apps-icon block md:hidden cursor-pointer\" onClick={toggleBothSidebars}>\n <i className=\"pi pi-th-large\"></i>\n </div>\n <p className={`view-title solid-text-wrapper flex align-items-center gap-1 ${styles.SolidDashboardTitle}`}>\n {data?.records[0]?.displayName ? data?.records[0]?.displayName : data?.records[0]?.name}\n {data?.records[0]?.description &&\n <>\n <Tooltip className='solid-field-tooltip' target=\".solid-field-tooltip-icon\" />\n <i className=\"pi pi-info-circle solid-field-tooltip-icon\"\n data-pr-tooltip={data?.records[0]?.description}\n data-pr-position={'right'}\n />\n </>\n }\n </p>\n </div>\n {dashboardVariables && dashboardVariables.length > 0 && <SolidDashboardVariable dashboardVariables={dashboardVariables} filters={filters} setFilters={setFilters} />}\n </div>\n {!isRenderDashboardBody(questions, dashboardVariables, filters) && <SolidDashboardFilterRequired />}\n {isRenderDashboardBody(questions, dashboardVariables, filters) && <SolidDashboardBody questions={questions} filters={filters} />}\n </>\n )}\n </div>\n {mcpUrl && (\n <div className={`chatter-section ${isOpenSolidXAiPanel === false ? 'collapsed' : 'open'}`} style={{ width: chatterWidth }}>\n {isOpenSolidXAiPanel && (\n <div\n style={{\n width: 5,\n cursor: 'col-resize',\n position: 'absolute',\n left: 0,\n top: 0,\n bottom: 0,\n height: '100%',\n zIndex: 9,\n }}\n onMouseDown={() => setIsResizing(true)}\n />\n )}\n {isOpenSolidXAiPanel &&\n <Button\n icon=\"pi pi-angle-double-right\"\n size=\"small\"\n text\n className=\"chatter-collapse-btn\"\n style={{ width: 30, height: 30, aspectRatio: '1/1' }}\n onClick={handleClose}\n />\n }\n\n {isOpenSolidXAiPanel === false ?\n <div className=\"flex flex-column gap-2 justify-content-center p-2\">\n <div className=\"chatter-collapsed-content\" onClick={handleOpen}>\n <div className=\"flex gap-2\"> <SolidXAIIcon /> SolidX AI </div>\n </div>\n <Button\n icon=\"pi pi-chevron-left\"\n size=\"small\"\n className=\"px-0\"\n style={{ width: 30 }}\n onClick={handleOpen}\n />\n </div>\n :\n <SolidAiMainWrapper mcpUrl={mcpUrl} />\n }\n </div>\n )}\n\n </div>\n );\n}\n\nexport default SolidDashboard;\n"]}
@@ -33,7 +33,7 @@ export interface DashboardVariableRecord {
33
33
  id: number;
34
34
  variableName: string;
35
35
  variableType: DashboardVariableType;
36
- selectionStaticValues?: string[];
36
+ selectionStaticValues?: string;
37
37
  selectionDynamicSourceType?: SOURCE_TYPE;
38
38
  selectionDynamicProviderName?: string;
39
39
  selectionDynamicSQL?: string;
@@ -115,7 +115,7 @@ export var SelectionStaticVariableFilterComponent = function (_a) {
115
115
  // Selection Static Values
116
116
  var _b = useState(defaultStaticValues), selectionStaticValues = _b[0], setSelectionStaticValues = _b[1];
117
117
  var _c = useState([]), filteredStaticItems = _c[0], setFilteredStaticItems = _c[1];
118
- var staticValues = dashboardVariable.selectionStaticValues || [];
118
+ var staticValues = JSON.parse(dashboardVariable.selectionStaticValues || '[]') || [];
119
119
  // The values are in the format val:label, we need to extract the labels
120
120
  var staticValueItems = staticValues.map(function (val) { return ({ value: val.split(':')[0], label: val.split(':')[1] }); });
121
121
  // Static search
@@ -1 +1 @@
1
- {"version":3,"file":"SolidDashboardVariable.js","sourceRoot":"","sources":["../../../../src/components/core/dashboard/SolidDashboardVariable.tsx"],"names":[],"mappings":"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","sourcesContent":["\nimport { SqlExpression } from \"../../../types/solid-core\";\nimport { AutoComplete, AutoCompleteChangeEvent, AutoCompleteCompleteEvent } from \"primereact/autocomplete\";\nimport { Calendar } from \"primereact/calendar\";\nimport { Nullable } from \"primereact/ts-helpers\";\nimport React, { Dispatch, SetStateAction, useEffect, useState } from \"react\";\nimport styles from './SolidDashboard.module.css';\nimport { useGetDashboardVariableSelectionDynamicValuesQuery } from \"../../../redux/api/dashboardApi\";\nimport { ProgressSpinner } from \"primereact/progressspinner\";\nimport { DashboardVariableRecord } from \"./SolidDashboard\";\nimport { Button } from \"primereact/button\";\n\n\nexport interface DashboardVariableFilterProps {\n setFilters: Dispatch<SetStateAction<SqlExpression[]>>;\n clearSignal: number;\n dashboardVariable: DashboardVariableRecord;\n}\n\nexport const DateVariableFilterComponent: React.FC<DashboardVariableFilterProps> = ({ setFilters, clearSignal, dashboardVariable }) => {\n // Initialize the default dates state\n // If the dashboardVariable has a defaultOperator as Between and a defaultValue as two dates, we can set those as the initial values, otherwise null\n const defaultDatesString = dashboardVariable.defaultOperator === '$between' && dashboardVariable.defaultValue\n const defaultDatesArray = JSON.parse(defaultDatesString || '[]');\n // Map the defaultDatesArray to Date objects\n const defaultDates: Nullable<(Date | null)[]> = defaultDatesArray.length === 2 ? [\n new Date(defaultDatesArray[0]),\n new Date(defaultDatesArray[1])\n ] : null;\n const [dates, setDates] = useState<Nullable<(Date | null)[]>>(defaultDates);\n\n useEffect(() => {\n setDates(null); // reset UI\n }, [clearSignal]);\n \n return (\n <div className={`flex align-items-center ${styles.SolidDashboardDateRangeFilterWrapper}`}>\n <Calendar value={dates} onChange={(e) => {\n console.log(`Calendar changed values are: `);\n console.log(e.value);\n const newDates = e.value as Date[] | null;\n setDates(newDates);\n\n if (newDates && newDates.length === 2 && newDates[0] && newDates[1]) {\n const filter: SqlExpression = {\n variableName: dashboardVariable.variableName,\n // @ts-ignore\n operator: '$between',\n value: [\n newDates[0].toISOString().split('T')[0],\n newDates[1].toISOString().split('T')[0]\n ]\n };\n setFilters(prev => {\n // Remove any existing dashboardDate filter and replace with the new one\n // const filtered = prev.filter(f => f.variableName !== 'dashboardDate');\n return [filter];\n });\n }\n\n }} selectionMode=\"range\" readOnlyInput hideOnRangeSelection inputStyle={{ height: 36.38 }} className={styles.SolidDashboardDateRangeFilter} />\n <div className=\"px-2\">\n <i className=\"pi pi-calendar opacity-50\"></i>\n </div>\n </div>\n )\n}\n\nexport const SelectionDynamicVariableFilterComponent: React.FC<DashboardVariableFilterProps> = ({ setFilters, clearSignal, dashboardVariable }) => {\n // Initialize the selection dynamic values state\n // Pick the values from defaultValue if present, for default operator $in\n const defaultDynamicValuesString = dashboardVariable.defaultOperator === '$in' && dashboardVariable.defaultValue;\n const defaultDynamicValues = JSON.parse(defaultDynamicValuesString || '[]');\n\n // Selection Dynamic Values\n const [selectionDynamicValues, setSelectionDynamicValues] = useState<string[]>(defaultDynamicValues);\n const [filteredItems, setFilteredItems] = useState<string[]>([]);\n\n // Using rtk query to fetch dynamic values based on variableId\n const variableId = dashboardVariable.id;\n const queryString = `variableId=${variableId}`;\n const { data: dynamicValues, isLoading, isError } = useGetDashboardVariableSelectionDynamicValuesQuery(queryString);\n\n const allItems = dynamicValues ? dynamicValues : [];\n\n // Dynamic search\n const searchDynamic = (event: AutoCompleteCompleteEvent) => {\n const query = event.query.toLowerCase();\n const filtered = allItems.map(item => item.label).filter(item =>\n item.toLowerCase().includes(query)\n );\n setFilteredItems(filtered);\n };\n\n // Set the filters whenever selectionDynamicValues change\n useEffect(() => {\n console.log(`Selection Dynamic Values changed:`, selectionDynamicValues);\n if (selectionDynamicValues.length > 0) {\n const filter: SqlExpression = {\n variableName: dashboardVariable.variableName,\n // @ts-ignore\n operator: '$in',\n value: selectionDynamicValues\n };\n setFilters(prev => {\n // Remove any existing filter for this variable and replace with the new one\n const filtered = prev.filter(f => f.variableName !== dashboardVariable.variableName);\n return [...filtered, filter];\n });\n }\n // else {\n // // If no values selected, remove the filter for this variable\n // setFilters(prev => prev.filter(f => f.variableName !== dashboardVariable.variableName));\n // }\n }, [selectionDynamicValues]);\n\n useEffect(() => {\n setSelectionDynamicValues([]);\n }, [clearSignal]);\n\n return (\n <>\n {isLoading && <ProgressSpinner></ProgressSpinner>}\n {isError && <div>Error loading values</div>}\n {!isLoading && !isError &&\n <AutoComplete\n value={selectionDynamicValues}\n suggestions={filteredItems}\n completeMethod={searchDynamic}\n onChange={(e: AutoCompleteChangeEvent) => {\n console.log('AutoComplete changed values are:');\n console.log(e);\n setSelectionDynamicValues(e.value)\n }}\n multiple\n dropdown\n placeholder={dashboardVariable.variableName}\n className=\"solid-standard-autocomplete\"\n style={{ minHeight: 38 }}\n />\n }\n </>\n );\n}\n\nexport const SelectionStaticVariableFilterComponent: React.FC<DashboardVariableFilterProps> = ({ setFilters, clearSignal, dashboardVariable }) => {\n // Initialize the selection static values state\n // Pick the values from defaultValue if present, for default operator $in\n const defaultStaticValuesString = dashboardVariable.defaultOperator === '$in' && dashboardVariable.defaultValue;\n const defaultStaticValues = JSON.parse(defaultStaticValuesString || '[]');\n\n // Selection Static Values\n const [selectionStaticValues, setSelectionStaticValues] = useState<string[]>(defaultStaticValues);\n const [filteredStaticItems, setFilteredStaticItems] = useState<string[]>([]);\n const staticValues = dashboardVariable.selectionStaticValues || [];\n\n // The values are in the format val:label, we need to extract the labels\n const staticValueItems = staticValues.map((val: any) => ({ value: val.split(':')[0], label: val.split(':')[1] }));\n\n // Static search\n const searchStatic = (event: AutoCompleteCompleteEvent) => {\n const query = event.query.toLowerCase();\n const filtered = staticValueItems.map(\n (item: { label: any; }) => item.label\n ).filter((item: string) =>\n item.toLowerCase().includes(query)\n );\n setFilteredStaticItems(filtered);\n };\n\n // Set the filters whenever selectionStaticValues change\n useEffect(() => {\n // console.log(`Selection Static Values changed:`, selectionStaticValues);\n if (selectionStaticValues.length > 0) {\n const filter: SqlExpression = {\n variableName: dashboardVariable.variableName,\n // @ts-ignore\n operator: '$in',\n value: selectionStaticValues\n };\n setFilters(prev => {\n // Remove any existing filter for this variable and replace with the new one\n const filtered = prev.filter(f => f.variableName !== dashboardVariable.variableName);\n return [...filtered, filter];\n });\n }\n // else {\n // // If no values selected, remove the filter for this variable\n // setFilters(prev => prev.filter(f => f.variableName !== dashboardVariable.variableName));\n // }\n }, [selectionStaticValues]);\n\n useEffect(() => {\n setSelectionStaticValues([]);\n }, [clearSignal]);\n\n return (\n <AutoComplete\n value={selectionStaticValues}\n suggestions={filteredStaticItems}\n completeMethod={searchStatic}\n onChange={(e: AutoCompleteChangeEvent) => setSelectionStaticValues(e.value)}\n multiple\n dropdown\n placeholder={dashboardVariable.variableName}\n className=\"solid-standard-autocomplete\"\n style={{ minHeight: 38 }}\n />\n );\n}\n\nexport interface SolidDashboardVariableProps {\n dashboardVariables: any;\n filters: SqlExpression[];\n setFilters: Dispatch<SetStateAction<SqlExpression[]>>;\n}\n\nconst SolidDashboardVariable: React.FC<SolidDashboardVariableProps> = ({ dashboardVariables, filters, setFilters }) => {\n const [clearSignal, setClearSignal] = useState(0);\n const dashboardVariableComponents = dashboardVariables.map((dashboardVariable: any, index: number) => {\n switch (dashboardVariable.variableType) {\n case 'date':\n return <DateVariableFilterComponent key={index} setFilters={setFilters} clearSignal={clearSignal} dashboardVariable={dashboardVariable} />;\n case 'selectionStatic':\n return <SelectionStaticVariableFilterComponent key={index} setFilters={setFilters} clearSignal={clearSignal} dashboardVariable={dashboardVariable} />;\n case 'selectionDynamic':\n return <SelectionDynamicVariableFilterComponent key={index} setFilters={setFilters} clearSignal={clearSignal} dashboardVariable={dashboardVariable} />;\n default:\n return null;\n }\n });\n\n const clearAllFilters = () => {\n setFilters([]);\n setClearSignal(prev => prev + 1); // triggers children to reset\n };\n\n // TODO [HP]: Currently this is static, we need this to be dynamic how we are invoking setFilters below has to be fully dynamic...\n return (\n <div className=\"flex align-items-center gap-3\">\n {dashboardVariableComponents}\n {filters.length > 0 && (\n <Button\n onClick={clearAllFilters}\n size=\"small\"\n outlined\n // severity=\"info\"\n icon=\"pi pi-filter-slash\"\n />\n )}\n </div>\n );\n}\n\nexport default SolidDashboardVariable;\n\n"]}
1
+ {"version":3,"file":"SolidDashboardVariable.js","sourceRoot":"","sources":["../../../../src/components/core/dashboard/SolidDashboardVariable.tsx"],"names":[],"mappings":"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","sourcesContent":["\nimport { SqlExpression } from \"../../../types/solid-core\";\nimport { AutoComplete, AutoCompleteChangeEvent, AutoCompleteCompleteEvent } from \"primereact/autocomplete\";\nimport { Calendar } from \"primereact/calendar\";\nimport { Nullable } from \"primereact/ts-helpers\";\nimport React, { Dispatch, SetStateAction, useEffect, useState } from \"react\";\nimport styles from './SolidDashboard.module.css';\nimport { useGetDashboardVariableSelectionDynamicValuesQuery } from \"../../../redux/api/dashboardApi\";\nimport { ProgressSpinner } from \"primereact/progressspinner\";\nimport { DashboardVariableRecord } from \"./SolidDashboard\";\nimport { Button } from \"primereact/button\";\n\n\nexport interface DashboardVariableFilterProps {\n setFilters: Dispatch<SetStateAction<SqlExpression[]>>;\n clearSignal: number;\n dashboardVariable: DashboardVariableRecord;\n}\n\nexport const DateVariableFilterComponent: React.FC<DashboardVariableFilterProps> = ({ setFilters, clearSignal, dashboardVariable }) => {\n // Initialize the default dates state\n // If the dashboardVariable has a defaultOperator as Between and a defaultValue as two dates, we can set those as the initial values, otherwise null\n const defaultDatesString = dashboardVariable.defaultOperator === '$between' && dashboardVariable.defaultValue\n const defaultDatesArray = JSON.parse(defaultDatesString || '[]');\n // Map the defaultDatesArray to Date objects\n const defaultDates: Nullable<(Date | null)[]> = defaultDatesArray.length === 2 ? [\n new Date(defaultDatesArray[0]),\n new Date(defaultDatesArray[1])\n ] : null;\n const [dates, setDates] = useState<Nullable<(Date | null)[]>>(defaultDates);\n\n useEffect(() => {\n setDates(null); // reset UI\n }, [clearSignal]);\n \n return (\n <div className={`flex align-items-center ${styles.SolidDashboardDateRangeFilterWrapper}`}>\n <Calendar value={dates} onChange={(e) => {\n console.log(`Calendar changed values are: `);\n console.log(e.value);\n const newDates = e.value as Date[] | null;\n setDates(newDates);\n\n if (newDates && newDates.length === 2 && newDates[0] && newDates[1]) {\n const filter: SqlExpression = {\n variableName: dashboardVariable.variableName,\n // @ts-ignore\n operator: '$between',\n value: [\n newDates[0].toISOString().split('T')[0],\n newDates[1].toISOString().split('T')[0]\n ]\n };\n setFilters(prev => {\n // Remove any existing dashboardDate filter and replace with the new one\n // const filtered = prev.filter(f => f.variableName !== 'dashboardDate');\n return [filter];\n });\n }\n\n }} selectionMode=\"range\" readOnlyInput hideOnRangeSelection inputStyle={{ height: 36.38 }} className={styles.SolidDashboardDateRangeFilter} />\n <div className=\"px-2\">\n <i className=\"pi pi-calendar opacity-50\"></i>\n </div>\n </div>\n )\n}\n\nexport const SelectionDynamicVariableFilterComponent: React.FC<DashboardVariableFilterProps> = ({ setFilters, clearSignal, dashboardVariable }) => {\n // Initialize the selection dynamic values state\n // Pick the values from defaultValue if present, for default operator $in\n const defaultDynamicValuesString = dashboardVariable.defaultOperator === '$in' && dashboardVariable.defaultValue;\n const defaultDynamicValues = JSON.parse(defaultDynamicValuesString || '[]');\n\n // Selection Dynamic Values\n const [selectionDynamicValues, setSelectionDynamicValues] = useState<string[]>(defaultDynamicValues);\n const [filteredItems, setFilteredItems] = useState<string[]>([]);\n\n // Using rtk query to fetch dynamic values based on variableId\n const variableId = dashboardVariable.id;\n const queryString = `variableId=${variableId}`;\n const { data: dynamicValues, isLoading, isError } = useGetDashboardVariableSelectionDynamicValuesQuery(queryString);\n\n const allItems = dynamicValues ? dynamicValues : [];\n\n // Dynamic search\n const searchDynamic = (event: AutoCompleteCompleteEvent) => {\n const query = event.query.toLowerCase();\n const filtered = allItems.map(item => item.label).filter(item =>\n item.toLowerCase().includes(query)\n );\n setFilteredItems(filtered);\n };\n\n // Set the filters whenever selectionDynamicValues change\n useEffect(() => {\n console.log(`Selection Dynamic Values changed:`, selectionDynamicValues);\n if (selectionDynamicValues.length > 0) {\n const filter: SqlExpression = {\n variableName: dashboardVariable.variableName,\n // @ts-ignore\n operator: '$in',\n value: selectionDynamicValues\n };\n setFilters(prev => {\n // Remove any existing filter for this variable and replace with the new one\n const filtered = prev.filter(f => f.variableName !== dashboardVariable.variableName);\n return [...filtered, filter];\n });\n }\n // else {\n // // If no values selected, remove the filter for this variable\n // setFilters(prev => prev.filter(f => f.variableName !== dashboardVariable.variableName));\n // }\n }, [selectionDynamicValues]);\n\n useEffect(() => {\n setSelectionDynamicValues([]);\n }, [clearSignal]);\n\n return (\n <>\n {isLoading && <ProgressSpinner></ProgressSpinner>}\n {isError && <div>Error loading values</div>}\n {!isLoading && !isError &&\n <AutoComplete\n value={selectionDynamicValues}\n suggestions={filteredItems}\n completeMethod={searchDynamic}\n onChange={(e: AutoCompleteChangeEvent) => {\n console.log('AutoComplete changed values are:');\n console.log(e);\n setSelectionDynamicValues(e.value)\n }}\n multiple\n dropdown\n placeholder={dashboardVariable.variableName}\n className=\"solid-standard-autocomplete\"\n style={{ minHeight: 38 }}\n />\n }\n </>\n );\n}\n\nexport const SelectionStaticVariableFilterComponent: React.FC<DashboardVariableFilterProps> = ({ setFilters, clearSignal, dashboardVariable }) => {\n // Initialize the selection static values state\n // Pick the values from defaultValue if present, for default operator $in\n const defaultStaticValuesString = dashboardVariable.defaultOperator === '$in' && dashboardVariable.defaultValue;\n const defaultStaticValues = JSON.parse(defaultStaticValuesString || '[]');\n\n // Selection Static Values\n const [selectionStaticValues, setSelectionStaticValues] = useState<string[]>(defaultStaticValues);\n const [filteredStaticItems, setFilteredStaticItems] = useState<string[]>([]);\n const staticValues = JSON.parse(dashboardVariable.selectionStaticValues || '[]') || [];\n\n // The values are in the format val:label, we need to extract the labels\n const staticValueItems = staticValues.map((val: any) => ({ value: val.split(':')[0], label: val.split(':')[1] }));\n\n // Static search\n const searchStatic = (event: AutoCompleteCompleteEvent) => {\n const query = event.query.toLowerCase();\n const filtered = staticValueItems.map(\n (item: { label: any; }) => item.label\n ).filter((item: string) =>\n item.toLowerCase().includes(query)\n );\n setFilteredStaticItems(filtered);\n };\n\n // Set the filters whenever selectionStaticValues change\n useEffect(() => {\n // console.log(`Selection Static Values changed:`, selectionStaticValues);\n if (selectionStaticValues.length > 0) {\n const filter: SqlExpression = {\n variableName: dashboardVariable.variableName,\n // @ts-ignore\n operator: '$in',\n value: selectionStaticValues\n };\n setFilters(prev => {\n // Remove any existing filter for this variable and replace with the new one\n const filtered = prev.filter(f => f.variableName !== dashboardVariable.variableName);\n return [...filtered, filter];\n });\n }\n // else {\n // // If no values selected, remove the filter for this variable\n // setFilters(prev => prev.filter(f => f.variableName !== dashboardVariable.variableName));\n // }\n }, [selectionStaticValues]);\n\n useEffect(() => {\n setSelectionStaticValues([]);\n }, [clearSignal]);\n\n return (\n <AutoComplete\n value={selectionStaticValues}\n suggestions={filteredStaticItems}\n completeMethod={searchStatic}\n onChange={(e: AutoCompleteChangeEvent) => setSelectionStaticValues(e.value)}\n multiple\n dropdown\n placeholder={dashboardVariable.variableName}\n className=\"solid-standard-autocomplete\"\n style={{ minHeight: 38 }}\n />\n );\n}\n\nexport interface SolidDashboardVariableProps {\n dashboardVariables: any;\n filters: SqlExpression[];\n setFilters: Dispatch<SetStateAction<SqlExpression[]>>;\n}\n\nconst SolidDashboardVariable: React.FC<SolidDashboardVariableProps> = ({ dashboardVariables, filters, setFilters }) => {\n const [clearSignal, setClearSignal] = useState(0);\n const dashboardVariableComponents = dashboardVariables.map((dashboardVariable: any, index: number) => {\n switch (dashboardVariable.variableType) {\n case 'date':\n return <DateVariableFilterComponent key={index} setFilters={setFilters} clearSignal={clearSignal} dashboardVariable={dashboardVariable} />;\n case 'selectionStatic':\n return <SelectionStaticVariableFilterComponent key={index} setFilters={setFilters} clearSignal={clearSignal} dashboardVariable={dashboardVariable} />;\n case 'selectionDynamic':\n return <SelectionDynamicVariableFilterComponent key={index} setFilters={setFilters} clearSignal={clearSignal} dashboardVariable={dashboardVariable} />;\n default:\n return null;\n }\n });\n\n const clearAllFilters = () => {\n setFilters([]);\n setClearSignal(prev => prev + 1); // triggers children to reset\n };\n\n // TODO [HP]: Currently this is static, we need this to be dynamic how we are invoking setFilters below has to be fully dynamic...\n return (\n <div className=\"flex align-items-center gap-3\">\n {dashboardVariableComponents}\n {filters.length > 0 && (\n <Button\n onClick={clearAllFilters}\n size=\"small\"\n outlined\n // severity=\"info\"\n icon=\"pi pi-filter-slash\"\n />\n )}\n </div>\n );\n}\n\nexport default SolidDashboardVariable;\n\n"]}
@@ -152,7 +152,7 @@ export const SelectionStaticVariableFilterComponent: React.FC<DashboardVariableF
152
152
  // Selection Static Values
153
153
  const [selectionStaticValues, setSelectionStaticValues] = useState<string[]>(defaultStaticValues);
154
154
  const [filteredStaticItems, setFilteredStaticItems] = useState<string[]>([]);
155
- const staticValues = dashboardVariable.selectionStaticValues || [];
155
+ const staticValues = JSON.parse(dashboardVariable.selectionStaticValues || '[]') || [];
156
156
 
157
157
  // The values are in the format val:label, we need to extract the labels
158
158
  const staticValueItems = staticValues.map((val: any) => ({ value: val.split(':')[0], label: val.split(':')[1] }));
@@ -1 +1 @@
1
- {"version":3,"file":"RolePermissionsManyToManyFieldWidget.d.ts","sourceRoot":"","sources":["../../../../../../src/components/core/extension/solid-core/roleMetadata/RolePermissionsManyToManyFieldWidget.tsx"],"names":[],"mappings":"AASA,OAAO,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AAe5E,eAAO,MAAM,oCAAoC,6BAA8B,yBAAyB,4CA+GvG,CAAC"}
1
+ {"version":3,"file":"RolePermissionsManyToManyFieldWidget.d.ts","sourceRoot":"","sources":["../../../../../../src/components/core/extension/solid-core/roleMetadata/RolePermissionsManyToManyFieldWidget.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AAe5E,eAAO,MAAM,oCAAoC,6BAA8B,yBAAyB,4CA2HvG,CAAC"}
@@ -9,15 +9,6 @@ var __assign = (this && this.__assign) || function () {
9
9
  };
10
10
  return __assign.apply(this, arguments);
11
11
  };
12
- var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
13
- if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
14
- if (ar || !(i in from)) {
15
- if (!ar) ar = Array.prototype.slice.call(from, 0, i);
16
- ar[i] = from[i];
17
- }
18
- }
19
- return to.concat(ar || Array.prototype.slice.call(from));
20
- };
21
12
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
22
13
  import { Panel } from "primereact/panel";
23
14
  import { useEffect, useState } from "react";
@@ -43,27 +34,24 @@ export var RolePermissionsManyToManyFieldWidget = function (_a) {
43
34
  var fieldLayoutInfo = fieldContext.field;
44
35
  var readOnlyPermission = fieldContext.readOnly;
45
36
  var _c = useState(false), visibleCreateDialog = _c[0], setVisibleCreateDialog = _c[1];
46
- var _d = useRelationEntityHandler({ fieldContext: fieldContext, formik: formik }), autoCompleteItems = _d.autoCompleteItems, fetchRelationEntities = _d.fetchRelationEntities, populateFormikWithRelatedEntities = _d.populateFormikWithRelatedEntities, addNewRelation = _d.addNewRelation;
47
- var _e = useState({}), visibleDialogs = _e[0], setVisibleDialogs = _e[1];
37
+ var _d = useState({}), visibleDialogs = _d[0], setVisibleDialogs = _d[1];
38
+ var _e = useRelationEntityHandler({ fieldContext: fieldContext }), allOptions = _e.allOptions, currentValues = _e.currentValues, fetchAllOptions = _e.fetchAllOptions, fetchCurrentValues = _e.fetchCurrentValues, linkItem = _e.linkItem, unlinkItem = _e.unlinkItem, addNewRelation = _e.addNewRelation;
39
+ // On mount: load already-linked permissions into currentValues
48
40
  useEffect(function () {
49
- populateFormikWithRelatedEntities();
50
- }, [(_b = formik.values) === null || _b === void 0 ? void 0 : _b.id]);
41
+ fetchCurrentValues();
42
+ }, [(_b = fieldContext.data) === null || _b === void 0 ? void 0 : _b.id]);
43
+ // On mount: load all available permissions into allOptions
51
44
  useEffect(function () {
52
- var queryData = {
53
- offset: 0,
54
- limit: 1000
55
- };
56
- var autocompleteQs = qs.stringify(queryData, {
57
- encodeValuesOnly: true,
58
- });
59
- fetchRelationEntities(autocompleteQs);
45
+ var queryData = { offset: 0, limit: 1000 };
46
+ fetchAllOptions(qs.stringify(queryData, { encodeValuesOnly: true }));
60
47
  }, []);
61
- var handleCheckboxChange = function (e) {
62
- if (formik.values[fieldLayoutInfo.attrs.name].some(function (item) { return item.value === e.value; })) {
63
- formik.setFieldValue(fieldLayoutInfo.attrs.name, formik.values[fieldLayoutInfo.attrs.name].filter(function (s) { return s.value !== e.value; }));
48
+ var handleCheckboxChange = function (item) {
49
+ var isCurrentlyLinked = currentValues.some(function (s) { return s.value === item.value; });
50
+ if (isCurrentlyLinked) {
51
+ unlinkItem(item);
64
52
  }
65
53
  else {
66
- formik.setFieldValue(fieldLayoutInfo.attrs.name, __spreadArray(__spreadArray([], formik.values[fieldLayoutInfo.attrs.name], true), [e], false));
54
+ linkItem(item);
67
55
  }
68
56
  };
69
57
  var getHeaderTemplate = function (controllerName) { return function (options) {
@@ -75,11 +63,8 @@ export var RolePermissionsManyToManyFieldWidget = function (_a) {
75
63
  });
76
64
  }, className: "custom-add-button" }), _jsx(InlineRelationEntityDialog, { visible: visibleCreateDialog, setVisible: setVisibleCreateDialog, fieldContext: fieldContext, onCreate: addNewRelation })] }))] }), _jsx("div", { children: options.togglerElement })] }));
77
65
  }; };
78
- var groupedEntities = groupByController(autoCompleteItems || []);
79
- return (_jsxs("div", { children: [Object.keys(groupedEntities).map(function (controllerName) { return (_jsx(Panel, { toggleable: true, headerTemplate: getHeaderTemplate(controllerName), className: "mt-3 lg:mt-4", children: _jsx("div", { className: "formgrid grid gap-3 lg:gap-0 ", children: groupedEntities[controllerName].map(function (entity, i) {
80
- var isChecked = formik.values[fieldLayoutInfo.attrs.name].some(function (item) { return item.value === entity.value; });
81
- return (_jsxs("div", { className: "field col-12 lg:col-6 flex gap-2 ".concat(i >= 2 ? 'lg:mt-3' : ''), children: [_jsx(Checkbox, { readOnly: readOnlyPermission, inputId: entity.label, checked: isChecked, onChange: function () { return handleCheckboxChange(entity); } }), _jsxs("label", { htmlFor: entity.label, className: "form-field-label m-0 solid-permisson-form-label", children: [" ", entity.label] })] }, entity.label));
82
- }) }) }, controllerName)); }), Object.keys(groupedEntities).map(function (controllerName) { return (_jsx(InlineRelationEntityDialog, { visible: visibleDialogs[controllerName] || false, setVisible: function (visible) {
66
+ var groupedEntities = groupByController(allOptions || []);
67
+ return (_jsxs("div", { children: [Object.keys(groupedEntities).map(function (controllerName) { return (_jsx(Panel, { toggleable: true, headerTemplate: getHeaderTemplate(controllerName), className: "mt-3 lg:mt-4", children: _jsx("div", { className: "formgrid grid gap-3 lg:gap-0", children: groupedEntities[controllerName].map(function (entity, i) { return (_jsxs("div", { className: "field col-12 lg:col-6 flex gap-2 ".concat(i >= 2 ? 'lg:mt-3' : ''), children: [_jsx(Checkbox, { readOnly: readOnlyPermission, inputId: entity.label, checked: currentValues.some(function (s) { return s.value === entity.value; }), onChange: function () { return handleCheckboxChange(entity); } }), _jsx("label", { htmlFor: entity.label, className: "form-field-label m-0 solid-permisson-form-label", children: entity.label })] }, entity.value)); }) }) }, controllerName)); }), Object.keys(groupedEntities).map(function (controllerName) { return (_jsx(InlineRelationEntityDialog, { visible: visibleDialogs[controllerName] || false, setVisible: function (visible) {
83
68
  return setVisibleDialogs(function (prev) {
84
69
  var _a;
85
70
  return (__assign(__assign({}, prev), (_a = {}, _a[controllerName] = visible, _a)));
@@ -1 +1 @@
1
- {"version":3,"file":"RolePermissionsManyToManyFieldWidget.js","sourceRoot":"","sources":["../../../../../../src/components/core/extension/solid-core/roleMetadata/RolePermissionsManyToManyFieldWidget.tsx"],"names":[],"mappings":"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","sourcesContent":["\nimport { capitalize } from \"lodash\";\nimport { Panel } from \"primereact/panel\";\nimport { useEffect, useState } from \"react\";\nimport { Button } from \"primereact/button\";\nimport { InputSwitch } from \"primereact/inputswitch\";\nimport { useRelationEntityHandler } from \"../../../../../components/core/form/fields/relations/widgets/helpers/useRelationEntityHandler\";\nimport { InlineRelationEntityDialog } from \"../../../../../components/core/form/fields/relations/widgets/helpers/InlineRelationEntityDialog\";\nimport { Checkbox } from \"primereact/checkbox\";\nimport { SolidFormFieldWidgetProps } from \"../../../../../types/solid-core\";\nimport qs from 'qs';\n\nconst groupByController = (items: any[]) => {\n const grouped: { [key: string]: any[] } = {};\n items.forEach((item) => {\n const controllerName = item.label.split(\".\")[0];\n if (!grouped[controllerName]) {\n grouped[controllerName] = [];\n }\n grouped[controllerName].push(item);\n });\n return grouped;\n};\n\nexport const RolePermissionsManyToManyFieldWidget = ({ formik, fieldContext }: SolidFormFieldWidgetProps) => {\n const fieldLayoutInfo = fieldContext.field;\n\n const readOnlyPermission = fieldContext.readOnly;\n const [visibleCreateDialog, setVisibleCreateDialog] = useState(false);\n const { autoCompleteItems, fetchRelationEntities, populateFormikWithRelatedEntities, addNewRelation } = useRelationEntityHandler({ fieldContext, formik });\n const [visibleDialogs, setVisibleDialogs] = useState<{ [key: string]: boolean }>({});\n\n\n useEffect(() => {\n populateFormikWithRelatedEntities();\n }, [formik.values?.id]);\n\n useEffect(() => {\n const queryData: any = {\n offset: 0,\n limit: 1000\n };\n const autocompleteQs = qs.stringify(queryData, {\n encodeValuesOnly: true,\n });\n fetchRelationEntities(autocompleteQs);\n }, []);\n\n const handleCheckboxChange = (e: any) => {\n if (formik.values[fieldLayoutInfo.attrs.name].some((item: any) => item.value === e.value)) {\n formik.setFieldValue(fieldLayoutInfo.attrs.name, formik.values[fieldLayoutInfo.attrs.name].filter((s: any) => s.value !== e.value));\n } else {\n formik.setFieldValue(fieldLayoutInfo.attrs.name, [...formik.values[fieldLayoutInfo.attrs.name], e]);\n }\n };\n\n const getHeaderTemplate = (controllerName: string) => (options: any) => {\n const className = `${options.className} justify-content-space-between`;\n\n return (\n <div className={className}>\n <div className=\"flex align-items-center gap-3\">\n <label className=\"form-field-label text-base lg:text-lg font-bold\">\n {controllerName}\n </label>\n {fieldContext.field.attrs.inlineCreate && (\n <>\n <Button\n icon=\"pi pi-plus\"\n rounded\n outlined\n aria-label=\"Add\"\n type=\"button\"\n size=\"small\"\n onClick={() =>\n setVisibleDialogs((prev) => ({\n ...prev,\n [controllerName]: true,\n }))\n }\n className=\"custom-add-button\"\n />\n <InlineRelationEntityDialog\n visible={visibleCreateDialog}\n setVisible={setVisibleCreateDialog}\n fieldContext={fieldContext}\n onCreate={addNewRelation}\n />\n </>\n )}\n </div>\n <div>{options.togglerElement}</div>\n </div>\n );\n };\n\n const groupedEntities = groupByController(autoCompleteItems || []);\n return (\n <div>\n {Object.keys(groupedEntities).map((controllerName) => (\n <Panel toggleable headerTemplate={getHeaderTemplate(controllerName)} key={controllerName} className=\"mt-3 lg:mt-4\">\n <div className=\"formgrid grid gap-3 lg:gap-0 \">\n {groupedEntities[controllerName].map((entity: any, i: number) => {\n const isChecked = formik.values[fieldLayoutInfo.attrs.name].some((item: any) => item.value === entity.value);\n return (\n <div key={entity.label} className={`field col-12 lg:col-6 flex gap-2 ${i >= 2 ? 'lg:mt-3' : ''}`}>\n <Checkbox\n readOnly={readOnlyPermission}\n inputId={entity.label}\n checked={isChecked}\n onChange={() => handleCheckboxChange(entity)}\n />\n <label htmlFor={entity.label} className=\"form-field-label m-0 solid-permisson-form-label\"> {entity.label}</label>\n </div>\n )\n })}\n </div>\n </Panel>\n ))}\n {Object.keys(groupedEntities).map((controllerName) => (\n <InlineRelationEntityDialog\n key={`dialog-${controllerName}`}\n visible={visibleDialogs[controllerName] || false}\n setVisible={(visible: any) =>\n setVisibleDialogs((prev) => ({\n ...prev,\n [controllerName]: visible,\n }))\n }\n fieldContext={fieldContext}\n onCreate={addNewRelation}\n />\n ))}\n </div>\n )\n};"]}
1
+ {"version":3,"file":"RolePermissionsManyToManyFieldWidget.js","sourceRoot":"","sources":["../../../../../../src/components/core/extension/solid-core/roleMetadata/RolePermissionsManyToManyFieldWidget.tsx"],"names":[],"mappings":"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","sourcesContent":["import { capitalize } from \"lodash\";\nimport { Panel } from \"primereact/panel\";\nimport { useEffect, useState } from \"react\";\nimport { Button } from \"primereact/button\";\nimport { useRelationEntityHandler } from \"../../../../../components/core/form/fields/relations/widgets/helpers/useRelationEntityHandler\";\nimport { InlineRelationEntityDialog } from \"../../../../../components/core/form/fields/relations/widgets/helpers/InlineRelationEntityDialog\";\nimport { Checkbox } from \"primereact/checkbox\";\nimport { SolidFormFieldWidgetProps } from \"../../../../../types/solid-core\";\nimport qs from 'qs';\n\nconst groupByController = (items: any[]) => {\n const grouped: { [key: string]: any[] } = {};\n items.forEach((item) => {\n const controllerName = item.label.split(\".\")[0];\n if (!grouped[controllerName]) {\n grouped[controllerName] = [];\n }\n grouped[controllerName].push(item);\n });\n return grouped;\n};\n\nexport const RolePermissionsManyToManyFieldWidget = ({ formik, fieldContext }: SolidFormFieldWidgetProps) => {\n const fieldLayoutInfo = fieldContext.field;\n const readOnlyPermission = fieldContext.readOnly;\n const [visibleCreateDialog, setVisibleCreateDialog] = useState(false);\n\n const [visibleDialogs, setVisibleDialogs] = useState<{ [key: string]: boolean }>({});\n\n const {\n allOptions,\n currentValues,\n fetchAllOptions,\n fetchCurrentValues,\n linkItem,\n unlinkItem,\n addNewRelation,\n } = useRelationEntityHandler({ fieldContext });\n\n // On mount: load already-linked permissions into currentValues\n useEffect(() => {\n fetchCurrentValues();\n }, [fieldContext.data?.id]);\n\n // On mount: load all available permissions into allOptions\n useEffect(() => {\n const queryData = { offset: 0, limit: 1000 };\n fetchAllOptions(qs.stringify(queryData, { encodeValuesOnly: true }));\n }, []);\n\n const handleCheckboxChange = (item: any) => {\n const isCurrentlyLinked = currentValues.some((s) => s.value === item.value);\n if (isCurrentlyLinked) {\n unlinkItem(item);\n } else {\n linkItem(item);\n }\n };\n\n const getHeaderTemplate = (controllerName: string) => (options: any) => {\n const className = `${options.className} justify-content-space-between`;\n\n return (\n <div className={className}>\n <div className=\"flex align-items-center gap-3\">\n <label className=\"form-field-label text-base lg:text-lg font-bold\">\n {controllerName}\n </label>\n {fieldContext.field.attrs.inlineCreate && (\n <>\n <Button\n icon=\"pi pi-plus\"\n rounded\n outlined\n aria-label=\"Add\"\n type=\"button\"\n size=\"small\"\n onClick={() =>\n setVisibleDialogs((prev) => ({\n ...prev,\n [controllerName]: true,\n }))\n }\n className=\"custom-add-button\"\n />\n <InlineRelationEntityDialog\n visible={visibleCreateDialog}\n setVisible={setVisibleCreateDialog}\n fieldContext={fieldContext}\n onCreate={addNewRelation}\n />\n </>\n )}\n </div>\n <div>{options.togglerElement}</div>\n </div>\n );\n };\n\n const groupedEntities = groupByController(allOptions || []);\n return (\n <div>\n {Object.keys(groupedEntities).map((controllerName) => (\n <Panel\n key={controllerName}\n toggleable\n headerTemplate={getHeaderTemplate(controllerName)}\n className=\"mt-3 lg:mt-4\"\n >\n <div className=\"formgrid grid gap-3 lg:gap-0\">\n {groupedEntities[controllerName].map((entity: any, i: number) => (\n <div\n key={entity.value}\n className={`field col-12 lg:col-6 flex gap-2 ${i >= 2 ? 'lg:mt-3' : ''}`}\n >\n <Checkbox\n readOnly={readOnlyPermission}\n inputId={entity.label}\n checked={currentValues.some((s) => s.value === entity.value)}\n onChange={() => handleCheckboxChange(entity)}\n />\n <label htmlFor={entity.label} className=\"form-field-label m-0 solid-permisson-form-label\">\n {entity.label}\n </label>\n </div>\n ))}\n </div>\n </Panel>\n ))}\n {Object.keys(groupedEntities).map((controllerName) => (\n <InlineRelationEntityDialog\n key={`dialog-${controllerName}`}\n visible={visibleDialogs[controllerName] || false}\n setVisible={(visible: any) =>\n setVisibleDialogs((prev) => ({\n ...prev,\n [controllerName]: visible,\n }))\n }\n fieldContext={fieldContext}\n onCreate={addNewRelation}\n />\n ))}\n </div>\n );\n};"]}
@@ -1,9 +1,7 @@
1
-
2
1
  import { capitalize } from "lodash";
3
2
  import { Panel } from "primereact/panel";
4
3
  import { useEffect, useState } from "react";
5
4
  import { Button } from "primereact/button";
6
- import { InputSwitch } from "primereact/inputswitch";
7
5
  import { useRelationEntityHandler } from "../../../../../components/core/form/fields/relations/widgets/helpers/useRelationEntityHandler";
8
6
  import { InlineRelationEntityDialog } from "../../../../../components/core/form/fields/relations/widgets/helpers/InlineRelationEntityDialog";
9
7
  import { Checkbox } from "primereact/checkbox";
@@ -24,33 +22,38 @@ const groupByController = (items: any[]) => {
24
22
 
25
23
  export const RolePermissionsManyToManyFieldWidget = ({ formik, fieldContext }: SolidFormFieldWidgetProps) => {
26
24
  const fieldLayoutInfo = fieldContext.field;
27
-
28
25
  const readOnlyPermission = fieldContext.readOnly;
29
26
  const [visibleCreateDialog, setVisibleCreateDialog] = useState(false);
30
- const { autoCompleteItems, fetchRelationEntities, populateFormikWithRelatedEntities, addNewRelation } = useRelationEntityHandler({ fieldContext, formik });
27
+
31
28
  const [visibleDialogs, setVisibleDialogs] = useState<{ [key: string]: boolean }>({});
32
29
 
30
+ const {
31
+ allOptions,
32
+ currentValues,
33
+ fetchAllOptions,
34
+ fetchCurrentValues,
35
+ linkItem,
36
+ unlinkItem,
37
+ addNewRelation,
38
+ } = useRelationEntityHandler({ fieldContext });
33
39
 
40
+ // On mount: load already-linked permissions into currentValues
34
41
  useEffect(() => {
35
- populateFormikWithRelatedEntities();
36
- }, [formik.values?.id]);
42
+ fetchCurrentValues();
43
+ }, [fieldContext.data?.id]);
37
44
 
45
+ // On mount: load all available permissions into allOptions
38
46
  useEffect(() => {
39
- const queryData: any = {
40
- offset: 0,
41
- limit: 1000
42
- };
43
- const autocompleteQs = qs.stringify(queryData, {
44
- encodeValuesOnly: true,
45
- });
46
- fetchRelationEntities(autocompleteQs);
47
+ const queryData = { offset: 0, limit: 1000 };
48
+ fetchAllOptions(qs.stringify(queryData, { encodeValuesOnly: true }));
47
49
  }, []);
48
50
 
49
- const handleCheckboxChange = (e: any) => {
50
- if (formik.values[fieldLayoutInfo.attrs.name].some((item: any) => item.value === e.value)) {
51
- formik.setFieldValue(fieldLayoutInfo.attrs.name, formik.values[fieldLayoutInfo.attrs.name].filter((s: any) => s.value !== e.value));
51
+ const handleCheckboxChange = (item: any) => {
52
+ const isCurrentlyLinked = currentValues.some((s) => s.value === item.value);
53
+ if (isCurrentlyLinked) {
54
+ unlinkItem(item);
52
55
  } else {
53
- formik.setFieldValue(fieldLayoutInfo.attrs.name, [...formik.values[fieldLayoutInfo.attrs.name], e]);
56
+ linkItem(item);
54
57
  }
55
58
  };
56
59
 
@@ -94,26 +97,33 @@ export const RolePermissionsManyToManyFieldWidget = ({ formik, fieldContext }: S
94
97
  );
95
98
  };
96
99
 
97
- const groupedEntities = groupByController(autoCompleteItems || []);
100
+ const groupedEntities = groupByController(allOptions || []);
98
101
  return (
99
102
  <div>
100
103
  {Object.keys(groupedEntities).map((controllerName) => (
101
- <Panel toggleable headerTemplate={getHeaderTemplate(controllerName)} key={controllerName} className="mt-3 lg:mt-4">
102
- <div className="formgrid grid gap-3 lg:gap-0 ">
103
- {groupedEntities[controllerName].map((entity: any, i: number) => {
104
- const isChecked = formik.values[fieldLayoutInfo.attrs.name].some((item: any) => item.value === entity.value);
105
- return (
106
- <div key={entity.label} className={`field col-12 lg:col-6 flex gap-2 ${i >= 2 ? 'lg:mt-3' : ''}`}>
107
- <Checkbox
108
- readOnly={readOnlyPermission}
109
- inputId={entity.label}
110
- checked={isChecked}
111
- onChange={() => handleCheckboxChange(entity)}
112
- />
113
- <label htmlFor={entity.label} className="form-field-label m-0 solid-permisson-form-label"> {entity.label}</label>
114
- </div>
115
- )
116
- })}
104
+ <Panel
105
+ key={controllerName}
106
+ toggleable
107
+ headerTemplate={getHeaderTemplate(controllerName)}
108
+ className="mt-3 lg:mt-4"
109
+ >
110
+ <div className="formgrid grid gap-3 lg:gap-0">
111
+ {groupedEntities[controllerName].map((entity: any, i: number) => (
112
+ <div
113
+ key={entity.value}
114
+ className={`field col-12 lg:col-6 flex gap-2 ${i >= 2 ? 'lg:mt-3' : ''}`}
115
+ >
116
+ <Checkbox
117
+ readOnly={readOnlyPermission}
118
+ inputId={entity.label}
119
+ checked={currentValues.some((s) => s.value === entity.value)}
120
+ onChange={() => handleCheckboxChange(entity)}
121
+ />
122
+ <label htmlFor={entity.label} className="form-field-label m-0 solid-permisson-form-label">
123
+ {entity.label}
124
+ </label>
125
+ </div>
126
+ ))}
117
127
  </div>
118
128
  </Panel>
119
129
  ))}
@@ -132,5 +142,5 @@ export const RolePermissionsManyToManyFieldWidget = ({ formik, fieldContext }: S
132
142
  />
133
143
  ))}
134
144
  </div>
135
- )
145
+ );
136
146
  };