@solidxai/core-ui 0.1.14-beta.4 → 0.1.14-beta.9

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 (176) hide show
  1. package/dist/components/auth/AuthLayout.js +1 -1
  2. package/dist/components/auth/AuthLayout.js.map +1 -1
  3. package/dist/components/auth/AuthLayout.tsx +2 -2
  4. package/dist/components/common/SettingsComponent.module.css +4 -1
  5. package/dist/components/common/SolidFieldTooltip.d.ts.map +1 -1
  6. package/dist/components/common/SolidFieldTooltip.js +1 -1
  7. package/dist/components/common/SolidFieldTooltip.js.map +1 -1
  8. package/dist/components/common/SolidFieldTooltip.tsx +1 -0
  9. package/dist/components/common/SolidFormStepper.d.ts.map +1 -1
  10. package/dist/components/common/SolidFormStepper.js +7 -6
  11. package/dist/components/common/SolidFormStepper.js.map +1 -1
  12. package/dist/components/common/SolidFormStepper.tsx +7 -1
  13. package/dist/components/common/SolidThemeProvider.d.ts.map +1 -1
  14. package/dist/components/common/SolidThemeProvider.js +127 -11
  15. package/dist/components/common/SolidThemeProvider.js.map +1 -1
  16. package/dist/components/common/SolidThemeProvider.tsx +104 -22
  17. package/dist/components/core/card/CardGrid.d.ts +1 -1
  18. package/dist/components/core/card/CardGrid.d.ts.map +1 -1
  19. package/dist/components/core/card/CardGrid.js +2 -2
  20. package/dist/components/core/card/CardGrid.js.map +1 -1
  21. package/dist/components/core/card/CardGrid.tsx +4 -0
  22. package/dist/components/core/card/CardItem.d.ts +2 -0
  23. package/dist/components/core/card/CardItem.d.ts.map +1 -1
  24. package/dist/components/core/card/CardItem.js +4 -3
  25. package/dist/components/core/card/CardItem.js.map +1 -1
  26. package/dist/components/core/card/CardItem.tsx +15 -0
  27. package/dist/components/core/card/SolidCardView.d.ts +28 -1
  28. package/dist/components/core/card/SolidCardView.d.ts.map +1 -1
  29. package/dist/components/core/card/SolidCardView.js +99 -44
  30. package/dist/components/core/card/SolidCardView.js.map +1 -1
  31. package/dist/components/core/card/SolidCardView.tsx +124 -7
  32. package/dist/components/core/card/SolidCardViewConfigure.d.ts +1 -1
  33. package/dist/components/core/card/SolidCardViewConfigure.d.ts.map +1 -1
  34. package/dist/components/core/card/SolidCardViewConfigure.js +15 -6
  35. package/dist/components/core/card/SolidCardViewConfigure.js.map +1 -1
  36. package/dist/components/core/card/SolidCardViewConfigure.tsx +34 -0
  37. package/dist/components/core/card/cardViewRegistry.d.ts +7 -0
  38. package/dist/components/core/card/cardViewRegistry.d.ts.map +1 -0
  39. package/dist/components/core/card/cardViewRegistry.js +17 -0
  40. package/dist/components/core/card/cardViewRegistry.js.map +1 -0
  41. package/dist/components/core/card/cardViewRegistry.ts +23 -0
  42. package/dist/components/core/common/PDFViewer.d.ts +9 -5
  43. package/dist/components/core/common/PDFViewer.d.ts.map +1 -1
  44. package/dist/components/core/common/PDFViewer.js +10 -102
  45. package/dist/components/core/common/PDFViewer.js.map +1 -1
  46. package/dist/components/core/common/PDFViewer.tsx +29 -88
  47. package/dist/components/core/common/SolidCollectionRowActionMenuItems.d.ts +12 -0
  48. package/dist/components/core/common/SolidCollectionRowActionMenuItems.d.ts.map +1 -0
  49. package/dist/components/core/common/SolidCollectionRowActionMenuItems.js +50 -0
  50. package/dist/components/core/common/SolidCollectionRowActionMenuItems.js.map +1 -0
  51. package/dist/components/core/common/SolidCollectionRowActionMenuItems.tsx +91 -0
  52. package/dist/components/core/common/SolidCreateButton.d.ts.map +1 -1
  53. package/dist/components/core/common/SolidCreateButton.js +2 -2
  54. package/dist/components/core/common/SolidCreateButton.js.map +1 -1
  55. package/dist/components/core/common/SolidCreateButton.tsx +22 -2
  56. package/dist/components/core/common/SolidGlobalSearchElement.d.ts.map +1 -1
  57. package/dist/components/core/common/SolidGlobalSearchElement.js +137 -134
  58. package/dist/components/core/common/SolidGlobalSearchElement.js.map +1 -1
  59. package/dist/components/core/common/SolidGlobalSearchElement.tsx +127 -119
  60. package/dist/components/core/form/SolidFormActionHeader.d.ts.map +1 -1
  61. package/dist/components/core/form/SolidFormActionHeader.js +21 -21
  62. package/dist/components/core/form/SolidFormActionHeader.js.map +1 -1
  63. package/dist/components/core/form/SolidFormActionHeader.tsx +62 -53
  64. package/dist/components/core/form/SolidFormView.d.ts.map +1 -1
  65. package/dist/components/core/form/SolidFormView.js +5 -2
  66. package/dist/components/core/form/SolidFormView.js.map +1 -1
  67. package/dist/components/core/form/SolidFormView.tsx +7 -2
  68. package/dist/components/core/kanban/KanbanBoard.d.ts +1 -1
  69. package/dist/components/core/kanban/KanbanBoard.d.ts.map +1 -1
  70. package/dist/components/core/kanban/KanbanBoard.js +2 -2
  71. package/dist/components/core/kanban/KanbanBoard.js.map +1 -1
  72. package/dist/components/core/kanban/KanbanBoard.tsx +3 -1
  73. package/dist/components/core/kanban/KanbanCard.d.ts +2 -0
  74. package/dist/components/core/kanban/KanbanCard.d.ts.map +1 -1
  75. package/dist/components/core/kanban/KanbanCard.js +4 -2
  76. package/dist/components/core/kanban/KanbanCard.js.map +1 -1
  77. package/dist/components/core/kanban/KanbanCard.tsx +14 -1
  78. package/dist/components/core/kanban/KanbanColumn.d.ts +3 -1
  79. package/dist/components/core/kanban/KanbanColumn.d.ts.map +1 -1
  80. package/dist/components/core/kanban/KanbanColumn.js +2 -2
  81. package/dist/components/core/kanban/KanbanColumn.js.map +1 -1
  82. package/dist/components/core/kanban/KanbanColumn.tsx +4 -2
  83. package/dist/components/core/kanban/SolidKanbanView.d.ts +25 -1
  84. package/dist/components/core/kanban/SolidKanbanView.d.ts.map +1 -1
  85. package/dist/components/core/kanban/SolidKanbanView.js +89 -50
  86. package/dist/components/core/kanban/SolidKanbanView.js.map +1 -1
  87. package/dist/components/core/kanban/SolidKanbanView.tsx +82 -9
  88. package/dist/components/core/kanban/kanbanViewRegistry.d.ts +7 -0
  89. package/dist/components/core/kanban/kanbanViewRegistry.d.ts.map +1 -0
  90. package/dist/components/core/kanban/kanbanViewRegistry.js +17 -0
  91. package/dist/components/core/kanban/kanbanViewRegistry.js.map +1 -0
  92. package/dist/components/core/kanban/kanbanViewRegistry.ts +23 -0
  93. package/dist/components/core/list/PLAN.md +1 -1
  94. package/dist/components/core/list/SolidListView.d.ts +11 -0
  95. package/dist/components/core/list/SolidListView.d.ts.map +1 -1
  96. package/dist/components/core/list/SolidListView.js +11 -6
  97. package/dist/components/core/list/SolidListView.js.map +1 -1
  98. package/dist/components/core/list/SolidListView.tsx +88 -45
  99. package/dist/components/core/list/SolidListViewConfigure.js +1 -1
  100. package/dist/components/core/list/SolidListViewConfigure.js.map +1 -1
  101. package/dist/components/core/list/SolidListViewConfigure.tsx +1 -1
  102. package/dist/components/core/list/columns/relations/SolidRelationManyToOneColumn.d.ts.map +1 -1
  103. package/dist/components/core/list/columns/relations/SolidRelationManyToOneColumn.js +2 -1
  104. package/dist/components/core/list/columns/relations/SolidRelationManyToOneColumn.js.map +1 -1
  105. package/dist/components/core/list/columns/relations/SolidRelationManyToOneColumn.tsx +2 -1
  106. package/dist/components/core/model/CreateModel.d.ts.map +1 -1
  107. package/dist/components/core/model/CreateModel.js +2 -1
  108. package/dist/components/core/model/CreateModel.js.map +1 -1
  109. package/dist/components/core/model/CreateModel.tsx +2 -0
  110. package/dist/components/core/model/FieldMetaData.d.ts +1 -1
  111. package/dist/components/core/model/FieldMetaData.d.ts.map +1 -1
  112. package/dist/components/core/model/FieldMetaData.js +8 -8
  113. package/dist/components/core/model/FieldMetaData.js.map +1 -1
  114. package/dist/components/core/model/FieldMetaData.tsx +2 -2
  115. package/dist/components/core/model/FieldMetaDataForm.css +119 -0
  116. package/dist/components/core/model/FieldMetaDataForm.js +1 -1
  117. package/dist/components/core/model/FieldMetaDataForm.js.map +1 -1
  118. package/dist/components/core/model/FieldMetaDataForm.tsx +1 -1
  119. package/dist/components/core/module/ModuleMetadataExplorer.css +64 -0
  120. package/dist/components/core/module/ModulePackageDialog.css +117 -12
  121. package/dist/components/core/tree/SolidTreeView.d.ts.map +1 -1
  122. package/dist/components/core/tree/SolidTreeView.js +6 -3
  123. package/dist/components/core/tree/SolidTreeView.js.map +1 -1
  124. package/dist/components/core/tree/SolidTreeView.tsx +35 -13
  125. package/dist/components/layout/AdminHeaderActions.d.ts.map +1 -1
  126. package/dist/components/layout/AdminHeaderActions.js +15 -10
  127. package/dist/components/layout/AdminHeaderActions.js.map +1 -1
  128. package/dist/components/layout/AdminHeaderActions.tsx +15 -8
  129. package/dist/components/layout/AdminTopHeader.d.ts.map +1 -1
  130. package/dist/components/layout/AdminTopHeader.js +1 -18
  131. package/dist/components/layout/AdminTopHeader.js.map +1 -1
  132. package/dist/components/layout/AdminTopHeader.tsx +3 -21
  133. package/dist/helpers/resolveActiveUserId.d.ts +13 -0
  134. package/dist/helpers/resolveActiveUserId.d.ts.map +1 -0
  135. package/dist/helpers/resolveActiveUserId.js +86 -0
  136. package/dist/helpers/resolveActiveUserId.js.map +1 -0
  137. package/dist/helpers/resolveActiveUserId.ts +90 -0
  138. package/dist/index.d.ts +5 -0
  139. package/dist/index.d.ts.map +1 -1
  140. package/dist/index.js +3 -0
  141. package/dist/index.js.map +1 -1
  142. package/dist/index.ts +5 -0
  143. package/dist/resources/globals.css +15 -0
  144. package/dist/resources/solid-custom.css +18 -1
  145. package/dist/resources/solid-tailwind-generated.css +1 -1
  146. package/dist/resources/themes/solid-dark-enterprise/theme-variables.css +28 -0
  147. package/dist/resources/themes/solid-dark-enterprise/theme.css +926 -0
  148. package/dist/resources/themes/solid-dark-modern/theme-variables.css +27 -0
  149. package/dist/resources/themes/solid-dark-modern/theme.css +600 -0
  150. package/dist/resources/themes/solid-light-enterprise/theme-variables.css +28 -0
  151. package/dist/resources/themes/solid-light-enterprise/theme.css +930 -0
  152. package/dist/resources/themes/solid-light-modern/theme-variables.css +31 -0
  153. package/dist/resources/themes/solid-light-modern/theme.css +1041 -0
  154. package/dist/routes/pages/admin/core/CardPage.d.ts.map +1 -1
  155. package/dist/routes/pages/admin/core/CardPage.js +15 -2
  156. package/dist/routes/pages/admin/core/CardPage.js.map +1 -1
  157. package/dist/routes/pages/admin/core/CardPage.tsx +17 -2
  158. package/dist/routes/pages/admin/core/DashboardPage.d.ts.map +1 -1
  159. package/dist/routes/pages/admin/core/DashboardPage.js +31 -3
  160. package/dist/routes/pages/admin/core/DashboardPage.js.map +1 -1
  161. package/dist/routes/pages/admin/core/DashboardPage.tsx +39 -11
  162. package/dist/routes/pages/admin/core/KanbanPage.d.ts.map +1 -1
  163. package/dist/routes/pages/admin/core/KanbanPage.js +15 -2
  164. package/dist/routes/pages/admin/core/KanbanPage.js.map +1 -1
  165. package/dist/routes/pages/admin/core/KanbanPage.tsx +17 -2
  166. package/dist/routes/pages/admin/core/ListPage.d.ts.map +1 -1
  167. package/dist/routes/pages/admin/core/ListPage.js +5 -13
  168. package/dist/routes/pages/admin/core/ListPage.js.map +1 -1
  169. package/dist/routes/pages/admin/core/ListPage.tsx +5 -15
  170. package/dist/theme/theme-registry.d.ts +6 -0
  171. package/dist/theme/theme-registry.d.ts.map +1 -0
  172. package/dist/theme/theme-registry.js +65 -0
  173. package/dist/theme/theme-registry.js.map +1 -0
  174. package/dist/theme/theme-registry.ts +78 -0
  175. package/dist/types/solid-core.d.ts +8 -0
  176. package/package.json +1 -1
@@ -4,7 +4,9 @@ import { useGetSolidViewLayoutQuery } from "../../../redux/api/solidViewApi";
4
4
  import { useLazyCheckIfPermissionExistsQuery } from "../../../redux/api/userApi";
5
5
  import { DropResult } from "@hello-pangea/dnd";
6
6
  import qs from "qs";
7
- import { useEffect, useRef, useState } from "react";
7
+ import { forwardRef, useEffect, useImperativeHandle, useRef, useState } from "react";
8
+ import { useSession } from "../../../hooks/useSession";
9
+ import { resolveActiveUserId, resolveSavedFilterVariables } from "../../../helpers/resolveActiveUserId";
8
10
  import { SolidCreateButton } from "../common/SolidCreateButton";
9
11
  import { SolidGlobalSearchElement } from "../common/SolidGlobalSearchElement";
10
12
  import KanbanBoard from "./KanbanBoard";
@@ -50,6 +52,31 @@ type SolidKanbanViewParams = {
50
52
  moduleName: string;
51
53
  modelName: string;
52
54
  embeded: boolean;
55
+ customFilter?: any;
56
+ };
57
+
58
+ type SolidKanbanFilterInput = {
59
+ custom_filter_predicate?: any;
60
+ search_predicate?: any;
61
+ saved_filter_predicate?: any;
62
+ predefined_search_predicate?: any;
63
+ };
64
+
65
+ export type SolidKanbanViewHandle = {
66
+ refresh: () => void;
67
+ clearFilters: () => void;
68
+ applyFilter: (filter: SolidKanbanFilterInput) => void;
69
+ getSavedFilters: () => any[];
70
+ applySavedFilter: (name: string, variables?: Record<string, any>) => boolean;
71
+ setShowArchived: (value: boolean) => void;
72
+ getState: () => {
73
+ groupByFieldName: string;
74
+ showArchived: boolean;
75
+ filters: any;
76
+ filterPredicates: any;
77
+ kanbanData: any[];
78
+ loading: boolean;
79
+ };
53
80
  };
54
81
 
55
82
  type KanbanSwimlaneDefinition = {
@@ -119,12 +146,14 @@ const mergeKanbanGroupsWithDefinitions = (
119
146
  };
120
147
 
121
148
 
122
- export const SolidKanbanView = (params: SolidKanbanViewParams) => {
149
+ export const SolidKanbanView = forwardRef<SolidKanbanViewHandle, SolidKanbanViewParams>((params, ref) => {
150
+ const session = useSession();
151
+ const user = session?.data?.user;
123
152
 
124
153
  const visibleNavbar = useSelector((state: any) => state.navbarState?.visibleNavbar);
125
154
  const dispatch = useDispatch()
126
155
 
127
- const solidGlobalSearchElementRef = useRef();
156
+ const solidGlobalSearchElementRef = useRef<any>(null);
128
157
  const router = useRouter();
129
158
  const searchParams = useSearchParams();
130
159
  // TODO: The initial filter state will be created based on the fields which are present on this kanban view.
@@ -542,7 +571,11 @@ export const SolidKanbanView = (params: SolidKanbanViewParams) => {
542
571
  }
543
572
  if (queryObject.saved_filter_predicate) {
544
573
  // @ts-ignore
545
- filters.$and.push(queryObject.saved_filter_predicate);
574
+ filters.$and.push(resolveSavedFilterVariables(
575
+ queryObject.saved_filter_predicate,
576
+ user?.id,
577
+ queryObject.saved_filter_variables || {}
578
+ ).value);
546
579
  }
547
580
  if (queryObject.predefined_search_predicate) {
548
581
  // @ts-ignore
@@ -976,7 +1009,8 @@ export const SolidKanbanView = (params: SolidKanbanViewParams) => {
976
1009
  }
977
1010
  if (filterPredicates.saved_filter_predicate) {
978
1011
  // @ts-ignore
979
- queryfilter.$and.push(filterPredicates.saved_filter_predicate);
1012
+ queryfilter.$and.push(filterPredicates.resolved_saved_filter_predicate ||
1013
+ resolveActiveUserId(filterPredicates.saved_filter_predicate, user?.id));
980
1014
  }
981
1015
  if (filterPredicates.predefined_search_predicate) {
982
1016
  // @ts-ignore
@@ -1031,6 +1065,8 @@ export const SolidKanbanView = (params: SolidKanbanViewParams) => {
1031
1065
  // @ts-ignore
1032
1066
  urlData.saved_filter_predicate = customFilter.saved_filter_predicate || {};
1033
1067
  // @ts-ignore
1068
+ urlData.saved_filter_variables = customFilter.saved_filter_variables || {};
1069
+ // @ts-ignore
1034
1070
  urlData.predefined_search_predicate = customFilter.predefined_search_predicate || {};
1035
1071
  // @ts-ignore
1036
1072
  urlData.predefined_search_chip = customFilter.predefined_search_chip || null;
@@ -1088,6 +1124,39 @@ export const SolidKanbanView = (params: SolidKanbanViewParams) => {
1088
1124
  loadKanbanBoard(filters);
1089
1125
  };
1090
1126
 
1127
+ const cloneKanbanData = () => {
1128
+ if (typeof structuredClone === "function") return structuredClone(kanbanViewData);
1129
+ return JSON.parse(JSON.stringify(kanbanViewData));
1130
+ };
1131
+
1132
+ useImperativeHandle(ref, () => ({
1133
+ refresh: () => {
1134
+ void loadKanbanBoard(filters);
1135
+ },
1136
+ clearFilters: () => {
1137
+ setFilters(params.customFilter || { $and: [] });
1138
+ setFilterPredicates(null);
1139
+ solidGlobalSearchElementRef.current?.clearFilter?.();
1140
+ },
1141
+ applyFilter: (filter) => {
1142
+ void handleApplyCustomFilter(filter);
1143
+ },
1144
+ getSavedFilters: () => solidGlobalSearchElementRef.current?.getSavedFilters?.() ?? [],
1145
+ applySavedFilter: (name, variables) =>
1146
+ solidGlobalSearchElementRef.current?.applySavedFilterByName?.(name, variables) ?? false,
1147
+ setShowArchived: (value) => {
1148
+ setShowArchived(value);
1149
+ },
1150
+ getState: () => ({
1151
+ groupByFieldName,
1152
+ showArchived,
1153
+ filters,
1154
+ filterPredicates,
1155
+ kanbanData: cloneKanbanData(),
1156
+ loading,
1157
+ }),
1158
+ }), [groupByFieldName, showArchived, filters, filterPredicates, kanbanViewData, loading]);
1159
+
1091
1160
  const toggleBothSidebars = () => {
1092
1161
  if (visibleNavbar) {
1093
1162
  dispatch(toggleNavbar()); // close both
@@ -1113,7 +1182,11 @@ export const SolidKanbanView = (params: SolidKanbanViewParams) => {
1113
1182
  */}
1114
1183
 
1115
1184
  {/* <p className="m-0 view-title solid-text-wrapper">{kanbanViewTitle}</p> */}
1116
- <div className={`${showGlobalSearchElement ? "flex" : "hidden lg:flex"} mt-3 lg:mt-0 w-full lg:flex lg:min-w-0`}>
1185
+ <div className="max-[576px]:hidden sm:hidden lg:flex w-full mt-3 lg:mt-0 lg:min-w-0">
1186
+ {/* Keep global search mounted for now because kanban bootstrap/filter hydration still flows through this element. */}
1187
+ <SolidGlobalSearchElement viewType="kanban" showSaveFilterPopup={showSaveFilterPopup} setShowSaveFilterPopup={setShowSaveFilterPopup} ref={solidGlobalSearchElementRef} viewData={solidKanbanViewMetaData} handleApplyCustomFilter={handleApplyCustomFilter} filterPredicates={filterPredicates} ></SolidGlobalSearchElement>
1188
+ </div>
1189
+ <div className={`${showGlobalSearchElement ? "lg:flex" : "hidden"} lg:hidden mt-3 lg:mt-0 w-full lg:min-w-0`}>
1117
1190
  {/* Keep global search mounted for now because kanban bootstrap/filter hydration still flows through this element. */}
1118
1191
  <SolidGlobalSearchElement viewType="kanban" showSaveFilterPopup={showSaveFilterPopup} setShowSaveFilterPopup={setShowSaveFilterPopup} ref={solidGlobalSearchElementRef} viewData={solidKanbanViewMetaData} handleApplyCustomFilter={handleApplyCustomFilter} filterPredicates={filterPredicates} ></SolidGlobalSearchElement>
1119
1192
  </div>
@@ -1121,7 +1194,7 @@ export const SolidKanbanView = (params: SolidKanbanViewParams) => {
1121
1194
 
1122
1195
  <div className="flex items-center solid-header-buttons-wrapper solid-list-toolbar-actions lg:ml-auto">
1123
1196
  <SolidHeaderRequestStatus label={headerRequestStatusLabel} />
1124
- <div className="flex lg:hidden">
1197
+ <div className="solid-list-search-toggle">
1125
1198
  <SolidButton
1126
1199
  type="button"
1127
1200
  variant="outline"
@@ -1192,7 +1265,7 @@ export const SolidKanbanView = (params: SolidKanbanViewParams) => {
1192
1265
 
1193
1266
  <style>{`.p-datatable .p-datatable-loading-overlay {background-color: rgba(0, 0, 0, 0.0);}`}</style>
1194
1267
  {solidKanbanViewMetaData && kanbanViewData &&
1195
- <KanbanBoard groupByFieldName={groupByFieldName} kanbanViewData={kanbanViewData} maxSwimLanesCount={maxSwimLanesCount} solidKanbanViewMetaData={solidKanbanViewMetaData?.data} setKanbanViewData={setKanbanViewData} handleLoadMore={handleLoadMore} onDragEnd={onDragEnd} handleSwimLanePagination={handleSwimLanePagination} onDelete={actionsAllowed.includes(`${permissionExpression(params.modelName, 'delete')}`) && solidKanbanViewMetaData?.data?.solidView?.layout?.attrs.delete !== false ? openDeleteDialogForRecord : undefined} onRecover={handleRecoverRecord} setLightboxUrls={setLightboxUrls} setOpenLightbox={setOpenLightbox} editButtonUrl={editBaseUrl} recordClickAction={recordClickAction} showArchived={showArchived}></KanbanBoard>
1268
+ <KanbanBoard groupByFieldName={groupByFieldName} kanbanViewData={kanbanViewData} maxSwimLanesCount={maxSwimLanesCount} solidKanbanViewMetaData={solidKanbanViewMetaData?.data} setKanbanViewData={setKanbanViewData} handleLoadMore={handleLoadMore} onDragEnd={onDragEnd} handleSwimLanePagination={handleSwimLanePagination} onDelete={actionsAllowed.includes(`${permissionExpression(params.modelName, 'delete')}`) && solidKanbanViewMetaData?.data?.solidView?.layout?.attrs.delete !== false ? openDeleteDialogForRecord : undefined} onRecover={handleRecoverRecord} setLightboxUrls={setLightboxUrls} setOpenLightbox={setOpenLightbox} editButtonUrl={editBaseUrl} recordClickAction={recordClickAction} showArchived={showArchived} params={params} handleCustomButtonClick={handleCustomButtonClick}></KanbanBoard>
1196
1269
  }
1197
1270
  </div>
1198
1271
  </div>
@@ -1242,4 +1315,4 @@ export const SolidKanbanView = (params: SolidKanbanViewParams) => {
1242
1315
  </SolidDialog>
1243
1316
  </div>
1244
1317
  );
1245
- };
1318
+ });
@@ -0,0 +1,7 @@
1
+ import type { SolidKanbanViewHandle } from "./SolidKanbanView";
2
+ export declare const registerKanbanView: (kanbanId: string, handle: SolidKanbanViewHandle) => void;
3
+ export declare const unregisterKanbanView: (kanbanId: string) => void;
4
+ export declare const getKanbanView: (kanbanId: string) => SolidKanbanViewHandle | undefined;
5
+ export declare const hasKanbanView: (kanbanId: string) => boolean;
6
+ export declare const getRegisteredKanbanViewIds: () => string[];
7
+ //# sourceMappingURL=kanbanViewRegistry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kanbanViewRegistry.d.ts","sourceRoot":"","sources":["../../../../src/components/core/kanban/kanbanViewRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAI/D,eAAO,MAAM,kBAAkB,aAAc,MAAM,UAAU,qBAAqB,KAAG,IAEpF,CAAC;AAEF,eAAO,MAAM,oBAAoB,aAAc,MAAM,KAAG,IAEvD,CAAC;AAEF,eAAO,MAAM,aAAa,aAAc,MAAM,KAAG,qBAAqB,GAAG,SAExE,CAAC;AAEF,eAAO,MAAM,aAAa,aAAc,MAAM,KAAG,OAEhD,CAAC;AAEF,eAAO,MAAM,0BAA0B,QAAO,MAAM,EAEnD,CAAC"}
@@ -0,0 +1,17 @@
1
+ var kanbanViewRegistry = new Map();
2
+ export var registerKanbanView = function (kanbanId, handle) {
3
+ kanbanViewRegistry.set(kanbanId, handle);
4
+ };
5
+ export var unregisterKanbanView = function (kanbanId) {
6
+ kanbanViewRegistry.delete(kanbanId);
7
+ };
8
+ export var getKanbanView = function (kanbanId) {
9
+ return kanbanViewRegistry.get(kanbanId);
10
+ };
11
+ export var hasKanbanView = function (kanbanId) {
12
+ return kanbanViewRegistry.has(kanbanId);
13
+ };
14
+ export var getRegisteredKanbanViewIds = function () {
15
+ return Array.from(kanbanViewRegistry.keys());
16
+ };
17
+ //# sourceMappingURL=kanbanViewRegistry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kanbanViewRegistry.js","sourceRoot":"","sources":["../../../../src/components/core/kanban/kanbanViewRegistry.ts"],"names":[],"mappings":"AAEA,IAAM,kBAAkB,GAAG,IAAI,GAAG,EAAiC,CAAC;AAEpE,MAAM,CAAC,IAAM,kBAAkB,GAAG,UAAC,QAAgB,EAAE,MAA6B;IAChF,kBAAkB,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AAC3C,CAAC,CAAC;AAEF,MAAM,CAAC,IAAM,oBAAoB,GAAG,UAAC,QAAgB;IACnD,kBAAkB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AACtC,CAAC,CAAC;AAEF,MAAM,CAAC,IAAM,aAAa,GAAG,UAAC,QAAgB;IAC5C,OAAO,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC1C,CAAC,CAAC;AAEF,MAAM,CAAC,IAAM,aAAa,GAAG,UAAC,QAAgB;IAC5C,OAAO,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC1C,CAAC,CAAC;AAEF,MAAM,CAAC,IAAM,0BAA0B,GAAG;IACxC,OAAO,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC,CAAC;AAC/C,CAAC,CAAC","sourcesContent":["import type { SolidKanbanViewHandle } from \"./SolidKanbanView\";\n\nconst kanbanViewRegistry = new Map<string, SolidKanbanViewHandle>();\n\nexport const registerKanbanView = (kanbanId: string, handle: SolidKanbanViewHandle): void => {\n kanbanViewRegistry.set(kanbanId, handle);\n};\n\nexport const unregisterKanbanView = (kanbanId: string): void => {\n kanbanViewRegistry.delete(kanbanId);\n};\n\nexport const getKanbanView = (kanbanId: string): SolidKanbanViewHandle | undefined => {\n return kanbanViewRegistry.get(kanbanId);\n};\n\nexport const hasKanbanView = (kanbanId: string): boolean => {\n return kanbanViewRegistry.has(kanbanId);\n};\n\nexport const getRegisteredKanbanViewIds = (): string[] => {\n return Array.from(kanbanViewRegistry.keys());\n};\n"]}
@@ -0,0 +1,23 @@
1
+ import type { SolidKanbanViewHandle } from "./SolidKanbanView";
2
+
3
+ const kanbanViewRegistry = new Map<string, SolidKanbanViewHandle>();
4
+
5
+ export const registerKanbanView = (kanbanId: string, handle: SolidKanbanViewHandle): void => {
6
+ kanbanViewRegistry.set(kanbanId, handle);
7
+ };
8
+
9
+ export const unregisterKanbanView = (kanbanId: string): void => {
10
+ kanbanViewRegistry.delete(kanbanId);
11
+ };
12
+
13
+ export const getKanbanView = (kanbanId: string): SolidKanbanViewHandle | undefined => {
14
+ return kanbanViewRegistry.get(kanbanId);
15
+ };
16
+
17
+ export const hasKanbanView = (kanbanId: string): boolean => {
18
+ return kanbanViewRegistry.has(kanbanId);
19
+ };
20
+
21
+ export const getRegisteredKanbanViewIds = (): string[] => {
22
+ return Array.from(kanbanViewRegistry.keys());
23
+ };
@@ -57,7 +57,7 @@
57
57
  Keep existing predicate/rule state shape and `transformFilterRules(...)` contract unchanged.
58
58
  - [ ] Replace remaining Prime icon class usage in filter flow with non-Prime icons.
59
59
  - [ ] Audit `SolidFilterFields` and list filter input widgets for hidden Prime event-shape coupling.
60
- - [ ] Preserve saved filter URL behavior (`savedQuery`) and local cache behavior.
60
+ - [ ] Preserve local-storage saved-filter application and rehydration behavior without URL state.
61
61
  - [ ] Confirm relation filter hydration still works.
62
62
  - [ ] Preserve `clearFilter()` and imperative `SolidListViewHandle.applyFilter(...)` behavior unchanged.
63
63
 
@@ -38,6 +38,17 @@ export type SolidListViewHandle = {
38
38
  saved_filter_predicate?: any;
39
39
  predefined_search_predicate?: any;
40
40
  }) => void;
41
+ /**
42
+ * Returns the saved filters currently available in the list view, including
43
+ * any seeded/system filters supplied by the view.
44
+ */
45
+ getSavedFilters: () => any[];
46
+ /**
47
+ * Applies the currently available saved filter with the given name using the
48
+ * same selection path as clicking that filter in the search UI.
49
+ * Returns false when no saved filter with that name is available.
50
+ */
51
+ applySavedFilter: (name: string, variables?: Record<string, any>) => boolean;
41
52
  /**
42
53
  * Updates pagination state directly.
43
54
  * Use this when a caller needs to jump to a specific page window
@@ -1 +1 @@
1
- {"version":3,"file":"SolidListView.d.ts","sourceRoot":"","sources":["../../../../src/components/core/list/SolidListView.tsx"],"names":[],"mappings":";AAoEA,KAAK,mBAAmB,GAAG;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,6BAA6B,CAAC,EAAE,GAAG,CAAC;IACpC,8BAA8B,CAAC,EAAE,GAAG,CAAC;IACrC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,YAAY,CAAC,EAAE,GAAG,CAAC;IACnB,YAAY,CAAC,EAAE,GAAG,CAAC;IACnB,iBAAiB,CAAC,EAAE,GAAG,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC;;;;;OAKG;IACH,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB;;;;OAIG;IACH,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB;;;;;;OAMG;IACH,WAAW,EAAE,CAAC,MAAM,EAAE;QACpB,uBAAuB,CAAC,EAAE,GAAG,CAAC;QAC9B,gBAAgB,CAAC,EAAE,GAAG,CAAC;QACvB,sBAAsB,CAAC,EAAE,GAAG,CAAC;QAC7B,2BAA2B,CAAC,EAAE,GAAG,CAAC;KACnC,KAAK,IAAI,CAAC;IACX;;;;OAIG;IACH,aAAa,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7D;;;OAGG;IACH,OAAO,EAAE,CAAC,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC;IACpE;;;OAGG;IACH,eAAe,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAC1C;;;OAGG;IACH,QAAQ,EAAE,MAAM;QACd,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QACtB,YAAY,EAAE,OAAO,CAAC;QACtB,OAAO,EAAE,GAAG,CAAC;QACb,gBAAgB,EAAE,GAAG,CAAC;QACtB,QAAQ,EAAE,GAAG,EAAE,CAAC;QAChB,YAAY,EAAE,MAAM,CAAC;QACrB,OAAO,EAAE,OAAO,CAAC;KAClB,CAAC;CACH,CAAC;AAEF,eAAO,MAAM,aAAa,qHAgzDxB,CAAC"}
1
+ {"version":3,"file":"SolidListView.d.ts","sourceRoot":"","sources":["../../../../src/components/core/list/SolidListView.tsx"],"names":[],"mappings":";AAqEA,KAAK,mBAAmB,GAAG;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,6BAA6B,CAAC,EAAE,GAAG,CAAC;IACpC,8BAA8B,CAAC,EAAE,GAAG,CAAC;IACrC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,YAAY,CAAC,EAAE,GAAG,CAAC;IACnB,YAAY,CAAC,EAAE,GAAG,CAAC;IACnB,iBAAiB,CAAC,EAAE,GAAG,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC;;;;;OAKG;IACH,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB;;;;OAIG;IACH,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB;;;;;;OAMG;IACH,WAAW,EAAE,CAAC,MAAM,EAAE;QACpB,uBAAuB,CAAC,EAAE,GAAG,CAAC;QAC9B,gBAAgB,CAAC,EAAE,GAAG,CAAC;QACvB,sBAAsB,CAAC,EAAE,GAAG,CAAC;QAC7B,2BAA2B,CAAC,EAAE,GAAG,CAAC;KACnC,KAAK,IAAI,CAAC;IACX;;;OAGG;IACH,eAAe,EAAE,MAAM,GAAG,EAAE,CAAC;IAC7B;;;;OAIG;IACH,gBAAgB,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,OAAO,CAAC;IAC7E;;;;OAIG;IACH,aAAa,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7D;;;OAGG;IACH,OAAO,EAAE,CAAC,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC;IACpE;;;OAGG;IACH,eAAe,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAC1C;;;OAGG;IACH,QAAQ,EAAE,MAAM;QACd,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QACtB,YAAY,EAAE,OAAO,CAAC;QACtB,OAAO,EAAE,GAAG,CAAC;QACb,gBAAgB,EAAE,GAAG,CAAC;QACtB,QAAQ,EAAE,GAAG,EAAE,CAAC;QAChB,YAAY,EAAE,MAAM,CAAC;QACrB,OAAO,EAAE,OAAO,CAAC;KAClB,CAAC;CACH,CAAC;AAEF,eAAO,MAAM,aAAa,qHA+0DxB,CAAC"}
@@ -54,7 +54,7 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
54
54
  }
55
55
  return to.concat(ar || Array.prototype.slice.call(from));
56
56
  };
57
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
57
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
58
58
  import { forwardRef, useState, useEffect, useRef, useMemo, useImperativeHandle } from "react";
59
59
  import { SolidDataTable as DataTable, Column } from "./SolidDataTable";
60
60
  import qs from "qs";
@@ -87,6 +87,7 @@ import styles from "./SolidListViewWrapper.module.css";
87
87
  import { isArchivedListRow } from "./columns/PublishStatusColumnDefaults";
88
88
  import { getExtensionFunction } from "../../../helpers/registry";
89
89
  import { useSession } from "../../../hooks/useSession";
90
+ import { resolveActiveUserId } from "../../../helpers/resolveActiveUserId";
90
91
  import { ERROR_MESSAGES } from "../../../constants/error-messages";
91
92
  import { getSettingsMap, resolveRecordClickAction } from "../../../helpers/settingsPayload";
92
93
  import { useGetSolidSettingsQuery } from "../../../redux/api/solidSettingsApi";
@@ -735,6 +736,7 @@ export var SolidListView = forwardRef(function (params, ref) {
735
736
  fileterTobeStored.custom_filter_predicate = latestFilterPredicatesRef.current.custom_filter_predicate || null;
736
737
  fileterTobeStored.search_predicate = latestFilterPredicatesRef.current.search_predicate || null;
737
738
  fileterTobeStored.saved_filter_predicate = latestFilterPredicatesRef.current.saved_filter_predicate || null;
739
+ fileterTobeStored.saved_filter_variables = latestFilterPredicatesRef.current.saved_filter_variables || {};
738
740
  fileterTobeStored.saved_filter_id = latestFilterPredicatesRef.current.saved_filter_id || null;
739
741
  fileterTobeStored.saved_filter_system_key = latestFilterPredicatesRef.current.saved_filter_system_key || null;
740
742
  fileterTobeStored.saved_filter_name = latestFilterPredicatesRef.current.saved_filter_name || null;
@@ -759,7 +761,8 @@ export var SolidListView = forwardRef(function (params, ref) {
759
761
  queryfilter.$and.push(filterPredicates.search_predicate);
760
762
  }
761
763
  if (filterPredicates.saved_filter_predicate) {
762
- queryfilter.$and.push(filterPredicates.saved_filter_predicate);
764
+ queryfilter.$and.push(filterPredicates.resolved_saved_filter_predicate ||
765
+ resolveActiveUserId(filterPredicates.saved_filter_predicate, user === null || user === void 0 ? void 0 : user.id));
763
766
  }
764
767
  if (filterPredicates.predefined_search_predicate) {
765
768
  queryfilter.$and.push(filterPredicates.predefined_search_predicate);
@@ -888,6 +891,8 @@ export var SolidListView = forwardRef(function (params, ref) {
888
891
  applyFilter: function (filter) {
889
892
  handleApplyCustomFilter(filter);
890
893
  },
894
+ getSavedFilters: function () { var _a, _b, _c; return (_c = (_b = (_a = solidGlobalSearchElementRef.current) === null || _a === void 0 ? void 0 : _a.getSavedFilters) === null || _b === void 0 ? void 0 : _b.call(_a)) !== null && _c !== void 0 ? _c : []; },
895
+ applySavedFilter: function (name, variables) { var _a, _b, _c; return (_c = (_b = (_a = solidGlobalSearchElementRef.current) === null || _a === void 0 ? void 0 : _a.applySavedFilterByName) === null || _b === void 0 ? void 0 : _b.call(_a, name, variables)) !== null && _c !== void 0 ? _c : false; },
891
896
  setPagination: function (nextFirst, nextRows) {
892
897
  setFirst(nextFirst);
893
898
  setRows(nextRows);
@@ -1240,7 +1245,7 @@ export var SolidListView = forwardRef(function (params, ref) {
1240
1245
  // }
1241
1246
  // };
1242
1247
  return (_jsxs("div", { className: "page-parent-wrapper ".concat(isEmbeddedList ? "solid-list-page-wrapper-embedded" : "solid-list-page-wrapper", " flex ").concat(isEmbeddedList ? "min-h-0 overflow-visible" : "h-full min-h-0 overflow-hidden"), children: [_jsx("div", { className: "solid-list-content flex flex-col ".concat(isEmbeddedList ? "min-h-0" : "flex-grow-1", " ").concat(styles.ListContentWrapper), children: _jsxs("div", { className: "solid-list-surface flex flex-col min-h-0 ".concat(isEmbeddedList ? "" : "flex-1"), children: [solidListViewInitialMetaData &&
1243
- _jsx("div", { className: "page-header solid-list-toolbar flex-col lg:flex-row", children: _jsxs("div", { className: "flex w-full flex-col-reverse lg:flex-row lg:items-center items-end", children: [_jsx("div", { className: "solid-list-toolbar-left flex w-full items-center gap-3 lg:min-w-0 lg:flex-1", children: params.embeded === false && (_jsx("div", { className: "".concat(showGlobalSearchElement ? "flex" : "hidden lg:flex", " mt-3 lg:mt-0 w-full lg:flex lg:min-w-0"), children: _jsx(SolidGlobalSearchElement, { viewType: "list", showSaveFilterPopup: showSaveFilterPopup, setShowSaveFilterPopup: setShowSaveFilterPopup, ref: solidGlobalSearchElementRef, viewData: solidListViewMetaData, handleApplyCustomFilter: handleApplyCustomFilter, filterPredicates: filterPredicates, definedFilters: definedFilters, onRemoveDefinedFilter: removeDefinedFilter, onApplyDefinedFilter: applyDefinedFilter }, params.modelName) })) }), _jsxs("div", { className: "flex items-center solid-header-buttons-wrapper solid-list-toolbar-actions lg:ml-auto", children: [_jsx(SolidHeaderRequestStatus, { label: headerRequestStatusLabel }), params.embeded === false && (_jsx("div", { className: "flex lg:hidden", children: _jsx(SolidButton, { type: "button", size: "small", variant: "outline", className: "solid-icon-button", onClick: function () { return setShowGlobalSearchElement(!showGlobalSearchElement); }, leftIcon: _jsx(Search, { size: 14 }) }) })), _jsx("div", { className: "solid-header-buttons-wrapper hidden items-center lg:flex", children: (_0 = visibleHeaderButtons === null || visibleHeaderButtons === void 0 ? void 0 : visibleHeaderButtons.filter(function (rb) { return rb.attrs.actionInContextMenu != true; })) === null || _0 === void 0 ? void 0 : _0.map(function (button, index) { return (_jsx(SolidListViewHeaderButton, { button: button, params: params, solidListViewMetaData: solidListViewMetaData, handleCustomButtonClick: handleCustomButtonClick, selectedRecords: selectedRecords, filters: filters }, index)); }) }), actionsAllowed.includes("".concat(permissionExpression(params.modelName, 'create'))) &&
1248
+ _jsx("div", { className: "page-header solid-list-toolbar flex-col lg:flex-row", children: _jsxs("div", { className: "flex w-full flex-col-reverse lg:flex-row lg:items-center items-end", children: [_jsx("div", { className: "solid-list-toolbar-left flex w-full items-center gap-3 lg:min-w-0 lg:flex-1", children: params.embeded === false && (_jsxs(_Fragment, { children: [_jsx("div", { className: "max-[576px]:hidden sm:hidden lg:flex w-full mt-3 lg:mt-0 lg:min-w-0", children: _jsx(SolidGlobalSearchElement, { viewType: "list", showSaveFilterPopup: showSaveFilterPopup, setShowSaveFilterPopup: setShowSaveFilterPopup, ref: solidGlobalSearchElementRef, viewData: solidListViewMetaData, handleApplyCustomFilter: handleApplyCustomFilter, filterPredicates: filterPredicates, definedFilters: definedFilters, onRemoveDefinedFilter: removeDefinedFilter, onApplyDefinedFilter: applyDefinedFilter }, params.modelName) }), _jsx("div", { className: "".concat(showGlobalSearchElement ? "lg:flex" : "hidden", " lg:hidden mt-3 lg:mt-0 w-full lg:min-w-0"), children: _jsx(SolidGlobalSearchElement, { viewType: "list", showSaveFilterPopup: showSaveFilterPopup, setShowSaveFilterPopup: setShowSaveFilterPopup, ref: solidGlobalSearchElementRef, viewData: solidListViewMetaData, handleApplyCustomFilter: handleApplyCustomFilter, filterPredicates: filterPredicates, definedFilters: definedFilters, onRemoveDefinedFilter: removeDefinedFilter, onApplyDefinedFilter: applyDefinedFilter }, params.modelName) })] })) }), _jsxs("div", { className: "flex items-center solid-header-buttons-wrapper solid-list-toolbar-actions lg:ml-auto", children: [_jsx(SolidHeaderRequestStatus, { label: headerRequestStatusLabel }), params.embeded === false && (_jsx("div", { className: "solid-list-search-toggle", children: _jsx(SolidButton, { type: "button", size: "small", variant: "outline", className: "solid-icon-button", onClick: function () { return setShowGlobalSearchElement(!showGlobalSearchElement); }, leftIcon: _jsx(Search, { size: 14 }) }) })), _jsx("div", { className: "solid-header-buttons-wrapper hidden items-center lg:flex", children: (_0 = visibleHeaderButtons === null || visibleHeaderButtons === void 0 ? void 0 : visibleHeaderButtons.filter(function (rb) { return rb.attrs.actionInContextMenu != true; })) === null || _0 === void 0 ? void 0 : _0.map(function (button, index) { return (_jsx(SolidListViewHeaderButton, { button: button, params: params, solidListViewMetaData: solidListViewMetaData, handleCustomButtonClick: handleCustomButtonClick, selectedRecords: selectedRecords, filters: filters }, index)); }) }), actionsAllowed.includes("".concat(permissionExpression(params.modelName, 'create'))) &&
1244
1249
  ((_1 = solidListViewLayout === null || solidListViewLayout === void 0 ? void 0 : solidListViewLayout.attrs) === null || _1 === void 0 ? void 0 : _1.create) !== false &&
1245
1250
  params.embeded !== true &&
1246
1251
  ((_4 = (_3 = (_2 = solidListViewMetaData === null || solidListViewMetaData === void 0 ? void 0 : solidListViewMetaData.data) === null || _2 === void 0 ? void 0 : _2.solidView) === null || _3 === void 0 ? void 0 : _3.layout) === null || _4 === void 0 ? void 0 : _4.attrs.showDefaultAddButton) !== false && (_jsx(SolidCreateButton, { createButtonUrl: createButtonUrl, createActionQueryParams: createActionQueryParams, solidListViewLayout: solidListViewLayout, responsiveIconOnly: true })), actionsAllowed.includes("".concat(permissionExpression(params.modelName, 'create'))) &&
@@ -1340,12 +1345,12 @@ export var SolidListView = forwardRef(function (params, ref) {
1340
1345
  setDeleteEntity(true);
1341
1346
  }
1342
1347
  } })) }));
1343
- } })), hasAnyContextMenuActions && (_jsx(Column, { frozen: true, alignFrozen: "right", body: function (rowData) {
1348
+ } })), hasAnyContextMenuActions && (_jsx(Column, { frozen: true, alignFrozen: "right", className: "solid-data-table-row-action-cell", body: function (rowData) {
1344
1349
  var _a;
1345
- return (rowData === null || rowData === void 0 ? void 0 : rowData.deletedAt) ? (_jsx("div", { className: "flex justify-content-center align-items-center", "data-no-row-click": "true", children: _jsx("a", { onClick: function (event) {
1350
+ return (rowData === null || rowData === void 0 ? void 0 : rowData.deletedAt) ? (_jsx("div", { className: "flex justify-content-center align-items-center", "data-no-row-click": "true", children: _jsx("button", { type: "button", onClick: function (event) {
1346
1351
  event.stopPropagation();
1347
1352
  recoverById(rowData.id);
1348
- }, className: "retrieve-button solid-row-menu-trigger", children: _jsx(RotateCcw, { size: 14, className: styles.retrieveIcon }) }) })) : (_jsx(_Fragment, { children: ((_a = solidListViewLayout === null || solidListViewLayout === void 0 ? void 0 : solidListViewLayout.attrs) === null || _a === void 0 ? void 0 : _a.showRowContextMenu) !== false &&
1353
+ }, className: "retrieve-button solid-row-menu-trigger", "aria-label": "Recover record", title: "Recover", children: _jsx(RotateCcw, { size: 14, className: styles.retrieveIcon }) }) })) : (_jsx(_Fragment, { children: ((_a = solidListViewLayout === null || solidListViewLayout === void 0 ? void 0 : solidListViewLayout.attrs) === null || _a === void 0 ? void 0 : _a.showRowContextMenu) !== false &&
1349
1354
  !isArchivedListRow(isDraftPublishWorkflowEnabled, rowData) && (_jsx("div", { className: "flex justify-end", "data-no-row-click": "true", children: _jsx(SolidListViewRowActionsMenu, { rowData: rowData, hasEditInContextMenu: hasEditInContextMenu, hasDeleteInContextMenu: hasDeleteInContextMenu, hasCustomContextMenuButtons: hasCustomContextMenuButtons, solidListViewLayout: solidListViewLayout, solidListViewMetaData: solidListViewMetaData, params: params, handleCustomButtonClick: handleCustomButtonClick, contentClassName: styles.rowActionsOverlay, onSelectRow: function (selectedRow) {
1350
1355
  setSelectedSolidViewData(selectedRow);
1351
1356
  }, onEdit: function (selectedRow) {