@solidxai/core-ui 0.1.12-beta.0 → 0.1.12-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 (241) hide show
  1. package/dist/components/auth/AuthLayout.d.ts.map +1 -1
  2. package/dist/components/auth/AuthLayout.js +15 -19
  3. package/dist/components/auth/AuthLayout.js.map +1 -1
  4. package/dist/components/auth/AuthLayout.tsx +26 -20
  5. package/dist/components/auth/SolidLogin.d.ts.map +1 -1
  6. package/dist/components/auth/SolidLogin.js +6 -3
  7. package/dist/components/auth/SolidLogin.js.map +1 -1
  8. package/dist/components/auth/SolidLogin.tsx +16 -2
  9. package/dist/components/auth/SolidRegister.d.ts.map +1 -1
  10. package/dist/components/auth/SolidRegister.js +7 -4
  11. package/dist/components/auth/SolidRegister.js.map +1 -1
  12. package/dist/components/auth/SolidRegister.tsx +16 -2
  13. package/dist/components/common/BackButton.js +1 -1
  14. package/dist/components/common/BackButton.js.map +1 -1
  15. package/dist/components/common/BackButton.tsx +1 -1
  16. package/dist/components/common/CancelButton.js +1 -1
  17. package/dist/components/common/CancelButton.js.map +1 -1
  18. package/dist/components/common/CancelButton.tsx +1 -1
  19. package/dist/components/common/GeneralSettings.d.ts.map +1 -1
  20. package/dist/components/common/GeneralSettings.js +6 -33
  21. package/dist/components/common/GeneralSettings.js.map +1 -1
  22. package/dist/components/common/GeneralSettings.tsx +20 -57
  23. package/dist/components/common/SettingsComponent.d.ts.map +1 -1
  24. package/dist/components/common/SettingsComponent.js +1 -9
  25. package/dist/components/common/SettingsComponent.js.map +1 -1
  26. package/dist/components/common/SettingsComponent.tsx +1 -8
  27. package/dist/components/common/SolidBreadcrumb.js +1 -1
  28. package/dist/components/common/SolidBreadcrumb.js.map +1 -1
  29. package/dist/components/common/SolidBreadcrumb.tsx +2 -2
  30. package/dist/components/common/SolidFaviconProvider.d.ts.map +1 -1
  31. package/dist/components/common/SolidFaviconProvider.js +1 -8
  32. package/dist/components/common/SolidFaviconProvider.js.map +1 -1
  33. package/dist/components/common/SolidFaviconProvider.tsx +1 -7
  34. package/dist/components/common/SolidLoadingState.d.ts +10 -0
  35. package/dist/components/common/SolidLoadingState.d.ts.map +1 -0
  36. package/dist/components/common/SolidLoadingState.js +8 -0
  37. package/dist/components/common/SolidLoadingState.js.map +1 -0
  38. package/dist/components/common/SolidLoadingState.module.css +56 -0
  39. package/dist/components/common/SolidLoadingState.tsx +28 -0
  40. package/dist/components/core/card/CardItem.d.ts.map +1 -1
  41. package/dist/components/core/card/CardItem.js +3 -4
  42. package/dist/components/core/card/CardItem.js.map +1 -1
  43. package/dist/components/core/card/CardItem.tsx +3 -4
  44. package/dist/components/core/card/SolidCardView.d.ts.map +1 -1
  45. package/dist/components/core/card/SolidCardView.js +6 -1
  46. package/dist/components/core/card/SolidCardView.js.map +1 -1
  47. package/dist/components/core/card/SolidCardView.tsx +6 -1
  48. package/dist/components/core/card/SolidCardViewConfigure.d.ts.map +1 -1
  49. package/dist/components/core/card/SolidCardViewConfigure.js +4 -1
  50. package/dist/components/core/card/SolidCardViewConfigure.js.map +1 -1
  51. package/dist/components/core/card/SolidCardViewConfigure.tsx +4 -1
  52. package/dist/components/core/common/SolidCreateButton.d.ts.map +1 -1
  53. package/dist/components/core/common/SolidCreateButton.js +2 -13
  54. package/dist/components/core/common/SolidCreateButton.js.map +1 -1
  55. package/dist/components/core/common/SolidCreateButton.tsx +2 -15
  56. package/dist/components/core/common/SolidGlobalSearchElement.d.ts.map +1 -1
  57. package/dist/components/core/common/SolidGlobalSearchElement.js +34 -15
  58. package/dist/components/core/common/SolidGlobalSearchElement.js.map +1 -1
  59. package/dist/components/core/common/SolidGlobalSearchElement.tsx +37 -17
  60. package/dist/components/core/extension/solid-core/modelMetadata/list/GenerateModelCodeRowAction.js +15 -13
  61. package/dist/components/core/extension/solid-core/modelMetadata/list/GenerateModelCodeRowAction.js.map +1 -1
  62. package/dist/components/core/extension/solid-core/modelMetadata/list/GenerateModelCodeRowAction.tsx +4 -4
  63. package/dist/components/core/extension/solid-core/moduleMetadata/list/GenerateModuleCodeRowAction.js +6 -5
  64. package/dist/components/core/extension/solid-core/moduleMetadata/list/GenerateModuleCodeRowAction.js.map +1 -1
  65. package/dist/components/core/extension/solid-core/moduleMetadata/list/GenerateModuleCodeRowAction.tsx +1 -1
  66. package/dist/components/core/form/SolidFormFooter.d.ts +2 -1
  67. package/dist/components/core/form/SolidFormFooter.d.ts.map +1 -1
  68. package/dist/components/core/form/SolidFormFooter.js +48 -14
  69. package/dist/components/core/form/SolidFormFooter.js.map +1 -1
  70. package/dist/components/core/form/SolidFormFooter.tsx +50 -4
  71. package/dist/components/core/form/SolidFormView.d.ts.map +1 -1
  72. package/dist/components/core/form/SolidFormView.js +52 -50
  73. package/dist/components/core/form/SolidFormView.js.map +1 -1
  74. package/dist/components/core/form/SolidFormView.tsx +16 -9
  75. package/dist/components/core/json/SolidJsonEditor.css +195 -0
  76. package/dist/components/core/json/SolidJsonEditor.d.ts +19 -0
  77. package/dist/components/core/json/SolidJsonEditor.d.ts.map +1 -0
  78. package/dist/components/core/json/SolidJsonEditor.js +109 -0
  79. package/dist/components/core/json/SolidJsonEditor.js.map +1 -0
  80. package/dist/components/core/json/SolidJsonEditor.tsx +150 -0
  81. package/dist/components/core/kanban/KanbanCard.d.ts.map +1 -1
  82. package/dist/components/core/kanban/KanbanCard.js +2 -10
  83. package/dist/components/core/kanban/KanbanCard.js.map +1 -1
  84. package/dist/components/core/kanban/KanbanCard.tsx +2 -10
  85. package/dist/components/core/kanban/SolidKanbanView.d.ts.map +1 -1
  86. package/dist/components/core/kanban/SolidKanbanView.js +11 -4
  87. package/dist/components/core/kanban/SolidKanbanView.js.map +1 -1
  88. package/dist/components/core/kanban/SolidKanbanView.tsx +13 -5
  89. package/dist/components/core/list/SolidListView.d.ts +2 -0
  90. package/dist/components/core/list/SolidListView.d.ts.map +1 -1
  91. package/dist/components/core/list/SolidListView.js +195 -111
  92. package/dist/components/core/list/SolidListView.js.map +1 -1
  93. package/dist/components/core/list/SolidListView.tsx +136 -39
  94. package/dist/components/core/list/SolidListViewConfigure.d.ts.map +1 -1
  95. package/dist/components/core/list/SolidListViewConfigure.js +2 -0
  96. package/dist/components/core/list/SolidListViewConfigure.js.map +1 -1
  97. package/dist/components/core/list/SolidListViewConfigure.tsx +2 -0
  98. package/dist/components/core/list/columns/relations/SolidRelationManyToOneColumn.d.ts.map +1 -1
  99. package/dist/components/core/list/columns/relations/SolidRelationManyToOneColumn.js +16 -19
  100. package/dist/components/core/list/columns/relations/SolidRelationManyToOneColumn.js.map +1 -1
  101. package/dist/components/core/list/columns/relations/SolidRelationManyToOneColumn.tsx +16 -22
  102. package/dist/components/core/locales/SolidChatterLocaleTabView.d.ts.map +1 -1
  103. package/dist/components/core/locales/SolidChatterLocaleTabView.js +9 -8
  104. package/dist/components/core/locales/SolidChatterLocaleTabView.js.map +1 -1
  105. package/dist/components/core/locales/SolidChatterLocaleTabView.tsx +4 -1
  106. package/dist/components/core/locales/SolidLocale.d.ts.map +1 -1
  107. package/dist/components/core/locales/SolidLocale.js +1 -2
  108. package/dist/components/core/locales/SolidLocale.js.map +1 -1
  109. package/dist/components/core/locales/SolidLocale.tsx +1 -2
  110. package/dist/components/core/model/CreateModel.d.ts.map +1 -1
  111. package/dist/components/core/model/CreateModel.js +1 -1
  112. package/dist/components/core/model/CreateModel.js.map +1 -1
  113. package/dist/components/core/model/CreateModel.tsx +0 -1
  114. package/dist/components/core/model/ModelMetaData.d.ts.map +1 -1
  115. package/dist/components/core/model/ModelMetaData.js +1 -2
  116. package/dist/components/core/model/ModelMetaData.js.map +1 -1
  117. package/dist/components/core/model/ModelMetaData.tsx +1 -3
  118. package/dist/components/core/module/CreateModule.css +70 -2
  119. package/dist/components/core/module/CreateModule.d.ts.map +1 -1
  120. package/dist/components/core/module/CreateModule.js +2 -2
  121. package/dist/components/core/module/CreateModule.js.map +1 -1
  122. package/dist/components/core/module/CreateModule.tsx +13 -1
  123. package/dist/components/core/tree/SolidTreeView.d.ts.map +1 -1
  124. package/dist/components/core/tree/SolidTreeView.js +47 -26
  125. package/dist/components/core/tree/SolidTreeView.js.map +1 -1
  126. package/dist/components/core/tree/SolidTreeView.tsx +55 -23
  127. package/dist/components/layout/AdminTopHeader.js +2 -3
  128. package/dist/components/layout/AdminTopHeader.js.map +1 -1
  129. package/dist/components/layout/AdminTopHeader.tsx +2 -2
  130. package/dist/components/layout/AppSidebar.d.ts.map +1 -1
  131. package/dist/components/layout/AppSidebar.js +5 -2
  132. package/dist/components/layout/AppSidebar.js.map +1 -1
  133. package/dist/components/layout/AppSidebar.tsx +7 -4
  134. package/dist/components/layout/navbar-two-menu.d.ts.map +1 -1
  135. package/dist/components/layout/navbar-two-menu.js +6 -4
  136. package/dist/components/layout/navbar-two-menu.js.map +1 -1
  137. package/dist/components/layout/navbar-two-menu.tsx +4 -2
  138. package/dist/components/shad-cn-ui/SolidTabs.d.ts.map +1 -1
  139. package/dist/components/shad-cn-ui/SolidTabs.js +1 -1
  140. package/dist/components/shad-cn-ui/SolidTabs.js.map +1 -1
  141. package/dist/components/shad-cn-ui/SolidTabs.tsx +1 -0
  142. package/dist/constants/error-messages.d.ts +1 -0
  143. package/dist/constants/error-messages.d.ts.map +1 -1
  144. package/dist/constants/error-messages.js +1 -0
  145. package/dist/constants/error-messages.js.map +1 -1
  146. package/dist/constants/error-messages.ts +1 -0
  147. package/dist/helpers/assetUrl.d.ts +3 -0
  148. package/dist/helpers/assetUrl.d.ts.map +1 -0
  149. package/dist/helpers/assetUrl.js +22 -0
  150. package/dist/helpers/assetUrl.js.map +1 -0
  151. package/dist/helpers/assetUrl.ts +26 -0
  152. package/dist/helpers/modelViewPersistence.d.ts +5 -0
  153. package/dist/helpers/modelViewPersistence.d.ts.map +1 -0
  154. package/dist/helpers/modelViewPersistence.js +168 -0
  155. package/dist/helpers/modelViewPersistence.js.map +1 -0
  156. package/dist/helpers/modelViewPersistence.ts +201 -0
  157. package/dist/helpers/routePaths.d.ts +6 -0
  158. package/dist/helpers/routePaths.d.ts.map +1 -1
  159. package/dist/helpers/routePaths.js +13 -0
  160. package/dist/helpers/routePaths.js.map +1 -1
  161. package/dist/helpers/routePaths.ts +25 -0
  162. package/dist/index.d.ts +3 -0
  163. package/dist/index.d.ts.map +1 -1
  164. package/dist/index.js +3 -0
  165. package/dist/index.js.map +1 -1
  166. package/dist/index.ts +14 -0
  167. package/dist/redux/api/datasourceIntrospectionApi.d.ts +203 -0
  168. package/dist/redux/api/datasourceIntrospectionApi.d.ts.map +1 -0
  169. package/dist/redux/api/datasourceIntrospectionApi.js +71 -0
  170. package/dist/redux/api/datasourceIntrospectionApi.js.map +1 -0
  171. package/dist/redux/api/datasourceIntrospectionApi.ts +261 -0
  172. package/dist/redux/api/datasourceManagementApi.d.ts +46 -0
  173. package/dist/redux/api/datasourceManagementApi.d.ts.map +1 -0
  174. package/dist/redux/api/datasourceManagementApi.js +35 -0
  175. package/dist/redux/api/datasourceManagementApi.js.map +1 -0
  176. package/dist/redux/api/datasourceManagementApi.ts +86 -0
  177. package/dist/redux/api/solidServiceApi.d.ts +10 -2
  178. package/dist/redux/api/solidServiceApi.d.ts.map +1 -1
  179. package/dist/redux/api/solidServiceApi.js +2 -4
  180. package/dist/redux/api/solidServiceApi.js.map +1 -1
  181. package/dist/redux/api/solidServiceApi.ts +4 -6
  182. package/dist/redux/store/StoreProvider.d.ts.map +1 -1
  183. package/dist/redux/store/StoreProvider.js +4 -2
  184. package/dist/redux/store/StoreProvider.js.map +1 -1
  185. package/dist/redux/store/StoreProvider.tsx +9 -1
  186. package/dist/redux/store/defaultStoreConfig.d.ts +28 -1
  187. package/dist/redux/store/defaultStoreConfig.d.ts.map +1 -1
  188. package/dist/redux/store/defaultStoreConfig.js +4 -0
  189. package/dist/redux/store/defaultStoreConfig.js.map +1 -1
  190. package/dist/redux/store/defaultStoreConfig.ts +4 -0
  191. package/dist/resources/solid-custom.css +73 -16
  192. package/dist/routes/guards/AdminGuard.d.ts.map +1 -1
  193. package/dist/routes/guards/AdminGuard.js +2 -1
  194. package/dist/routes/guards/AdminGuard.js.map +1 -1
  195. package/dist/routes/guards/AdminGuard.tsx +7 -1
  196. package/dist/routes/guards/AuthGuard.d.ts.map +1 -1
  197. package/dist/routes/guards/AuthGuard.js +2 -1
  198. package/dist/routes/guards/AuthGuard.js.map +1 -1
  199. package/dist/routes/guards/AuthGuard.tsx +8 -2
  200. package/dist/routes/guards/GuestGuard.d.ts.map +1 -1
  201. package/dist/routes/guards/GuestGuard.js +2 -1
  202. package/dist/routes/guards/GuestGuard.js.map +1 -1
  203. package/dist/routes/guards/GuestGuard.tsx +8 -2
  204. package/dist/routes/pages/admin/core/CardPage.d.ts.map +1 -1
  205. package/dist/routes/pages/admin/core/CardPage.js +11 -0
  206. package/dist/routes/pages/admin/core/CardPage.js.map +1 -1
  207. package/dist/routes/pages/admin/core/CardPage.tsx +13 -0
  208. package/dist/routes/pages/admin/core/DashboardPage.d.ts.map +1 -1
  209. package/dist/routes/pages/admin/core/DashboardPage.js +7 -5
  210. package/dist/routes/pages/admin/core/DashboardPage.js.map +1 -1
  211. package/dist/routes/pages/admin/core/DashboardPage.module.css +18 -0
  212. package/dist/routes/pages/admin/core/DashboardPage.tsx +50 -32
  213. package/dist/routes/pages/admin/core/DatasourceIntrospectionPage.css +828 -0
  214. package/dist/routes/pages/admin/core/DatasourceIntrospectionPage.d.ts +3 -0
  215. package/dist/routes/pages/admin/core/DatasourceIntrospectionPage.d.ts.map +1 -0
  216. package/dist/routes/pages/admin/core/DatasourceIntrospectionPage.js +947 -0
  217. package/dist/routes/pages/admin/core/DatasourceIntrospectionPage.js.map +1 -0
  218. package/dist/routes/pages/admin/core/DatasourceIntrospectionPage.tsx +1719 -0
  219. package/dist/routes/pages/admin/core/DatasourcesPage.css +337 -0
  220. package/dist/routes/pages/admin/core/DatasourcesPage.d.ts +3 -0
  221. package/dist/routes/pages/admin/core/DatasourcesPage.d.ts.map +1 -0
  222. package/dist/routes/pages/admin/core/DatasourcesPage.js +221 -0
  223. package/dist/routes/pages/admin/core/DatasourcesPage.js.map +1 -0
  224. package/dist/routes/pages/admin/core/DatasourcesPage.tsx +540 -0
  225. package/dist/routes/pages/admin/core/KanbanPage.d.ts.map +1 -1
  226. package/dist/routes/pages/admin/core/KanbanPage.js +11 -0
  227. package/dist/routes/pages/admin/core/KanbanPage.js.map +1 -1
  228. package/dist/routes/pages/admin/core/KanbanPage.tsx +13 -0
  229. package/dist/routes/pages/admin/core/ListPage.d.ts.map +1 -1
  230. package/dist/routes/pages/admin/core/ListPage.js +25 -2
  231. package/dist/routes/pages/admin/core/ListPage.js.map +1 -1
  232. package/dist/routes/pages/admin/core/ListPage.tsx +29 -2
  233. package/dist/routes/pages/admin/core/TreePage.d.ts.map +1 -1
  234. package/dist/routes/pages/admin/core/TreePage.js +10 -2
  235. package/dist/routes/pages/admin/core/TreePage.js.map +1 -1
  236. package/dist/routes/pages/admin/core/TreePage.tsx +11 -2
  237. package/dist/routes/solidRoutes.d.ts.map +1 -1
  238. package/dist/routes/solidRoutes.js +5 -1
  239. package/dist/routes/solidRoutes.js.map +1 -1
  240. package/dist/routes/solidRoutes.tsx +4 -0
  241. package/package.json +1 -1
@@ -793,9 +793,44 @@ export const SolidGlobalSearchElement = forwardRef(({ viewData, viewType, handle
793
793
  user?.id
794
794
  ])
795
795
 
796
+ const resetAppliedFilters = ({ preserveGrouping = false }: { preserveGrouping?: boolean } = {}) => {
797
+ setSearchChips([]);
798
+ setSearchFilter(null);
799
+ setFilterRules(initialState);
800
+ setCustomFilter(null);
801
+ setPredefinedSearchChip(null);
802
+ setPredefinedSearchBaseFilter(null);
803
+ setCurrentSavedFilterData(null);
804
+ setCurrentSavedFilterQuery(null);
805
+ setCurrentSavedFilterRules(null);
806
+ if (!preserveGrouping) {
807
+ setGroupingRules(defaultGroupingRules);
808
+ setAggregationRules(defaultAggregationRules);
809
+ }
810
+ setShowOverlay(false);
811
+ setShowChipManager(false);
812
+ setInputValue("");
813
+
814
+ const currentPageUrl = window.location.pathname;
815
+ localStorage.removeItem(currentPageUrl);
816
+
817
+ if (activeSavedFilter) {
818
+ const params = new URLSearchParams(searchParams.toString());
819
+ params.delete("savedQuery");
820
+ const nextUrl = params.toString() ? `${pathname}?${params.toString()}` : pathname;
821
+ router.replace(nextUrl);
822
+ }
823
+
824
+ setHasSearched(true);
825
+ setRefreshKey((prev) => prev + 1);
826
+ };
827
+
796
828
  useImperativeHandle(ref, () => ({
797
829
  clearFilter: () => {
798
- setFilterRules(initialState);
830
+ resetAppliedFilters();
831
+ },
832
+ clearAppliedFilters: (options?: { preserveGrouping?: boolean }) => {
833
+ resetAppliedFilters(options);
799
834
  },
800
835
  openGroupingDialog: () => {
801
836
  setShowOverlay(false);
@@ -1615,22 +1650,7 @@ export const SolidGlobalSearchElement = forwardRef(({ viewData, viewType, handle
1615
1650
 
1616
1651
  const clearAllAppliedChips = () => {
1617
1652
  if (managedChipItems.length === 0) return;
1618
-
1619
- if (activeSavedFilter || currentSavedFilterData) {
1620
- removeSavedFilter();
1621
- }
1622
-
1623
- setSearchChips([]);
1624
- setSearchFilter(null);
1625
- setPredefinedSearchChip(null);
1626
- setPredefinedSearchBaseFilter(null);
1627
- setCustomFilter(null);
1628
- setFilterRules(initialState);
1629
- setGroupingRules(defaultGroupingRules);
1630
- setAggregationRules(defaultAggregationRules);
1631
- setShowChipManager(false);
1632
- setHasSearched(true);
1633
- setRefreshKey((prev) => prev + 1);
1653
+ resetAppliedFilters();
1634
1654
  };
1635
1655
 
1636
1656
  useEffect(() => {
@@ -99,24 +99,25 @@ var GenerateModelCodeRowAction = function (event) {
99
99
  });
100
100
  };
101
101
  var generateCodeHandler = function () { return __awaiter(void 0, void 0, void 0, function () {
102
- var error_2;
103
- var _a;
104
- return __generator(this, function (_b) {
105
- switch (_b.label) {
102
+ var error_2, errorMessage;
103
+ var _a, _b, _c;
104
+ return __generator(this, function (_d) {
105
+ switch (_d.label) {
106
106
  case 0:
107
- _b.trys.push([0, 2, , 3]);
107
+ _d.trys.push([0, 2, , 3]);
108
108
  setIsGenerating(true);
109
109
  setStatusMessage("Submitting model generation request...");
110
110
  return [4 /*yield*/, generateCode({ id: (_a = event === null || event === void 0 ? void 0 : event.rowData) === null || _a === void 0 ? void 0 : _a.id }).unwrap()];
111
111
  case 1:
112
- _b.sent();
112
+ _d.sent();
113
113
  setStatusMessage("Waiting for backend to come back online...");
114
114
  return [3 /*break*/, 3];
115
115
  case 2:
116
- error_2 = _b.sent();
116
+ error_2 = _d.sent();
117
117
  setIsGenerating(false);
118
118
  dispatch(closePopup());
119
- dispatch(showToast({ severity: "error", summary: "Something went wrong", detail: ERROR_MESSAGES.API_ERROR }));
119
+ errorMessage = ((_b = error_2 === null || error_2 === void 0 ? void 0 : error_2.data) === null || _b === void 0 ? void 0 : _b.message) || ((_c = error_2 === null || error_2 === void 0 ? void 0 : error_2.data) === null || _c === void 0 ? void 0 : _c.error) || ERROR_MESSAGES.CODE_GENERATE_FAILED;
120
+ dispatch(showToast({ severity: "error", summary: "Failed to generate code", detail: errorMessage }));
120
121
  return [3 /*break*/, 3];
121
122
  case 3: return [2 /*return*/];
122
123
  }
@@ -127,20 +128,21 @@ var GenerateModelCodeRowAction = function (event) {
127
128
  return undefined;
128
129
  var timer = window.setTimeout(function () { return __awaiter(void 0, void 0, void 0, function () {
129
130
  var isAlive;
130
- return __generator(this, function (_a) {
131
- switch (_a.label) {
131
+ var _a, _b;
132
+ return __generator(this, function (_c) {
133
+ switch (_c.label) {
132
134
  case 0:
133
135
  setIsPinging(true);
134
136
  setStatusMessage("Checking backend availability before refreshing metadata...");
135
137
  return [4 /*yield*/, pingBackendWithRetry()];
136
138
  case 1:
137
- isAlive = _a.sent();
139
+ isAlive = _c.sent();
138
140
  setIsPinging(false);
139
141
  if (!isAlive) return [3 /*break*/, 3];
140
142
  setStatusMessage("Refreshing seeded metadata...");
141
- return [4 /*yield*/, triggerSeeder("ModuleMetadataSeederService")];
143
+ return [4 /*yield*/, triggerSeeder({ seeder: "ModuleMetadataSeederService", modulesToSeed: ((_b = (_a = event === null || event === void 0 ? void 0 : event.rowData) === null || _a === void 0 ? void 0 : _a.module) === null || _b === void 0 ? void 0 : _b.name) ? [event.rowData.module.name] : undefined })];
142
144
  case 2:
143
- _a.sent();
145
+ _c.sent();
144
146
  return [2 /*return*/];
145
147
  case 3:
146
148
  setIsGenerating(false);
@@ -1 +1 @@
1
- {"version":3,"file":"GenerateModelCodeRowAction.js","sourceRoot":"","sources":["../../../../../../../src/components/core/extension/solid-core/modelMetadata/list/GenerateModelCodeRowAction.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useEffect, useMemo, useState } from \"react\";\nimport { useDispatch } from \"react-redux\";\nimport { AlertTriangle, FileCode2, Sparkles } from \"lucide-react\";\nimport { SolidCircularLoader } from \"../../../../../../components/core/common/SolidLoaders/SolidCircularLoader\";\nimport { ERROR_MESSAGES } from \"../../../../../../constants/error-messages\";\nimport { env } from \"../../../../../../adapters/env\";\nimport { useGenerateCodeForModelMutation } from \"../../../../../../redux/api/modelApi\";\nimport { useSeederMutation } from \"../../../../../../redux/api/solidServiceApi\";\nimport { closePopup } from \"../../../../../../redux/features/popupSlice\";\nimport { showToast } from \"../../../../../../redux/features/toastSlice\";\nimport { SolidListRowdataDynamicFunctionProps } from \"../../../../../../types/solid-core\";\nimport { SolidButton } from \"../../../../../shad-cn-ui\";\n\nconst GenerateModelCodeRowAction = (event: SolidListRowdataDynamicFunctionProps) => {\n const dispatch = useDispatch();\n const [statusMessage, setStatusMessage] = useState(\"Preparing model generation...\");\n const [isPinging, setIsPinging] = useState(false);\n const [isGenerating, setIsGenerating] = useState(false);\n\n const [generateCode, { isLoading: isGenerateCodeUpdating, isSuccess: isGenerateCodeSuceess }] =\n useGenerateCodeForModelMutation();\n\n const [triggerSeeder, { data, isSuccess: isSeederSuccess, isError: isSeederError }] = useSeederMutation();\n\n const isSolidCoreModel = event?.rowData?.module?.name === \"solid-core\";\n const generatedFiles = useMemo(\n () => [\n \"Entity file\",\n \"Repository file\",\n \"Controller file\",\n \"Service file\",\n \"Create and update DTO files\",\n ],\n []\n );\n\n const pingBackendWithRetry = async (retries = 30, delay = 500): Promise<boolean> => {\n for (let i = 0; i < retries; i += 1) {\n try {\n const res = await fetch(`${env(\"NEXT_PUBLIC_BACKEND_API_URL\")}/api/ping`);\n if (res.ok) return true;\n } catch (error) {\n // ignore and retry\n }\n await new Promise((resolve) => setTimeout(resolve, delay));\n }\n return false;\n };\n\n const generateCodeHandler = async () => {\n try {\n setIsGenerating(true);\n setStatusMessage(\"Submitting model generation request...\");\n await generateCode({ id: event?.rowData?.id }).unwrap();\n setStatusMessage(\"Waiting for backend to come back online...\");\n } catch (error) {\n setIsGenerating(false);\n dispatch(closePopup());\n dispatch(showToast({ severity: \"error\", summary: \"Something went wrong\", detail: ERROR_MESSAGES.API_ERROR }));\n }\n };\n\n useEffect(() => {\n if (!isGenerateCodeSuceess) return undefined;\n\n const timer = window.setTimeout(async () => {\n setIsPinging(true);\n setStatusMessage(\"Checking backend availability before refreshing metadata...\");\n const isAlive = await pingBackendWithRetry();\n setIsPinging(false);\n\n if (isAlive) {\n setStatusMessage(\"Refreshing seeded metadata...\");\n await triggerSeeder(\"ModuleMetadataSeederService\");\n return;\n }\n\n setIsGenerating(false);\n dispatch(closePopup());\n dispatch(\n showToast({\n severity: \"error\",\n summary: ERROR_MESSAGES.BACKEND_UNAVAILABLE,\n detail: ERROR_MESSAGES.SEEDER_NOT_TRIGGERED,\n })\n );\n }, 5000);\n\n return () => window.clearTimeout(timer);\n }, [dispatch, isGenerateCodeSuceess, triggerSeeder]);\n\n useEffect(() => {\n if (isSeederSuccess) {\n dispatch(\n showToast({\n severity: \"success\",\n summary: ERROR_MESSAGES.CODE_GENERTAE_SUCCESSFULLY,\n detail: ERROR_MESSAGES.CODE_GENERTAE_SUCCESSFULLY,\n })\n );\n setIsGenerating(false);\n dispatch(closePopup());\n window.location.reload();\n }\n\n if (isSeederError) {\n dispatch(showToast({ severity: \"error\", summary: ERROR_MESSAGES.SEEDER_ERROR, detail: ERROR_MESSAGES.SEEDER_NOT_RUN }));\n setIsGenerating(false);\n }\n }, [data, dispatch, isSeederError, isSeederSuccess]);\n\n if (isGenerating) {\n return (\n <div className=\"solid-generate-code-popup\">\n <div className=\"solid-filter-dialog-head solid-generate-code-popup__head\">\n <div>\n <h3 className=\"solid-filter-dialog-title\">Generate Model</h3>\n <p className=\"solid-filter-dialog-subtitle m-0\">Applying the code generation pipeline and reseeding metadata.</p>\n </div>\n </div>\n <div className=\"solid-filter-dialog-sep\" />\n <div className=\"solid-filter-dialog-body solid-generate-code-popup__body solid-generate-code-popup__body--loading\">\n <SolidCircularLoader />\n <p className=\"solid-generate-code-popup__loading-title\">\n {isPinging ? \"Waiting for backend...\" : \"Generating model code...\"}\n </p>\n <p className=\"solid-generate-code-popup__loading-copy\">{statusMessage}</p>\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"solid-generate-code-popup\">\n <div className=\"solid-filter-dialog-head solid-generate-code-popup__head\">\n <div>\n <h3 className=\"solid-filter-dialog-title\">Generate Model</h3>\n <p className=\"solid-filter-dialog-subtitle m-0\">\n Generate or refresh the model code artifacts from the current metadata definition.\n </p>\n </div>\n </div>\n <div className=\"solid-filter-dialog-sep\" />\n <div className=\"solid-filter-dialog-body solid-generate-code-popup__body\">\n {isSolidCoreModel ? (\n <div className=\"solid-generate-code-popup__notice is-warning\">\n <AlertTriangle size={16} />\n <span>You cannot generate code for Solid Core models.</span>\n </div>\n ) : (\n <>\n <p className=\"solid-generate-code-popup__intro\">\n Proceed with model code generation. Existing generated files may be overwritten.\n </p>\n <div className=\"solid-generate-code-popup__panel\">\n <div className=\"solid-generate-code-popup__panel-title\">\n <FileCode2 size={15} />\n <span>Artifacts created</span>\n </div>\n <ul className=\"solid-generate-code-popup__list\">\n {generatedFiles.map((item) => (\n <li key={item}>{item}</li>\n ))}\n </ul>\n </div>\n </>\n )}\n\n <div className=\"solid-generate-code-popup__actions\">\n {!isSolidCoreModel ? (\n <SolidButton\n size=\"small\"\n autoFocus\n leftIcon={<Sparkles size={14} />}\n loading={isGenerateCodeUpdating}\n onClick={generateCodeHandler}\n >\n Generate\n </SolidButton>\n ) : null}\n <SolidButton size=\"small\" variant=\"outline\" onClick={() => dispatch(closePopup())}>\n {isSolidCoreModel ? \"Close\" : \"Cancel\"}\n </SolidButton>\n </div>\n </div>\n </div>\n );\n};\n\nexport default GenerateModelCodeRowAction;\n"]}
1
+ {"version":3,"file":"GenerateModelCodeRowAction.js","sourceRoot":"","sources":["../../../../../../../src/components/core/extension/solid-core/modelMetadata/list/GenerateModelCodeRowAction.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useEffect, useMemo, useState } from \"react\";\nimport { useDispatch } from \"react-redux\";\nimport { AlertTriangle, FileCode2, Sparkles } from \"lucide-react\";\nimport { SolidCircularLoader } from \"../../../../../../components/core/common/SolidLoaders/SolidCircularLoader\";\nimport { ERROR_MESSAGES } from \"../../../../../../constants/error-messages\";\nimport { env } from \"../../../../../../adapters/env\";\nimport { useGenerateCodeForModelMutation } from \"../../../../../../redux/api/modelApi\";\nimport { useSeederMutation } from \"../../../../../../redux/api/solidServiceApi\";\nimport { closePopup } from \"../../../../../../redux/features/popupSlice\";\nimport { showToast } from \"../../../../../../redux/features/toastSlice\";\nimport { SolidListRowdataDynamicFunctionProps } from \"../../../../../../types/solid-core\";\nimport { SolidButton } from \"../../../../../shad-cn-ui\";\n\nconst GenerateModelCodeRowAction = (event: SolidListRowdataDynamicFunctionProps) => {\n const dispatch = useDispatch();\n const [statusMessage, setStatusMessage] = useState(\"Preparing model generation...\");\n const [isPinging, setIsPinging] = useState(false);\n const [isGenerating, setIsGenerating] = useState(false);\n\n const [generateCode, { isLoading: isGenerateCodeUpdating, isSuccess: isGenerateCodeSuceess }] =\n useGenerateCodeForModelMutation();\n\n const [triggerSeeder, { data, isSuccess: isSeederSuccess, isError: isSeederError }] = useSeederMutation();\n\n const isSolidCoreModel = event?.rowData?.module?.name === \"solid-core\";\n const generatedFiles = useMemo(\n () => [\n \"Entity file\",\n \"Repository file\",\n \"Controller file\",\n \"Service file\",\n \"Create and update DTO files\",\n ],\n []\n );\n\n const pingBackendWithRetry = async (retries = 30, delay = 500): Promise<boolean> => {\n for (let i = 0; i < retries; i += 1) {\n try {\n const res = await fetch(`${env(\"NEXT_PUBLIC_BACKEND_API_URL\")}/api/ping`);\n if (res.ok) return true;\n } catch (error) {\n // ignore and retry\n }\n await new Promise((resolve) => setTimeout(resolve, delay));\n }\n return false;\n };\n\n const generateCodeHandler = async () => {\n try {\n setIsGenerating(true);\n setStatusMessage(\"Submitting model generation request...\");\n await generateCode({ id: event?.rowData?.id }).unwrap();\n setStatusMessage(\"Waiting for backend to come back online...\");\n } catch (error: any) {\n setIsGenerating(false);\n dispatch(closePopup());\n const errorMessage = error?.data?.message || error?.data?.error || ERROR_MESSAGES.CODE_GENERATE_FAILED;\n dispatch(showToast({ severity: \"error\", summary: \"Failed to generate code\", detail: errorMessage }));\n }\n };\n useEffect(() => {\n if (!isGenerateCodeSuceess) return undefined;\n\n const timer = window.setTimeout(async () => {\n setIsPinging(true);\n setStatusMessage(\"Checking backend availability before refreshing metadata...\");\n const isAlive = await pingBackendWithRetry();\n setIsPinging(false);\n\n if (isAlive) {\n setStatusMessage(\"Refreshing seeded metadata...\");\n await triggerSeeder({ seeder: \"ModuleMetadataSeederService\", modulesToSeed: event?.rowData?.module?.name ? [event.rowData.module.name] : undefined });\n return;\n }\n\n setIsGenerating(false);\n dispatch(closePopup());\n dispatch(\n showToast({\n severity: \"error\",\n summary: ERROR_MESSAGES.BACKEND_UNAVAILABLE,\n detail: ERROR_MESSAGES.SEEDER_NOT_TRIGGERED,\n })\n );\n }, 5000);\n\n return () => window.clearTimeout(timer);\n }, [dispatch, isGenerateCodeSuceess, triggerSeeder]);\n\n useEffect(() => {\n if (isSeederSuccess) {\n dispatch(\n showToast({\n severity: \"success\",\n summary: ERROR_MESSAGES.CODE_GENERTAE_SUCCESSFULLY,\n detail: ERROR_MESSAGES.CODE_GENERTAE_SUCCESSFULLY,\n })\n );\n setIsGenerating(false);\n dispatch(closePopup());\n window.location.reload();\n }\n\n if (isSeederError) {\n dispatch(showToast({ severity: \"error\", summary: ERROR_MESSAGES.SEEDER_ERROR, detail: ERROR_MESSAGES.SEEDER_NOT_RUN }));\n setIsGenerating(false);\n }\n }, [data, dispatch, isSeederError, isSeederSuccess]);\n\n if (isGenerating) {\n return (\n <div className=\"solid-generate-code-popup\">\n <div className=\"solid-filter-dialog-head solid-generate-code-popup__head\">\n <div>\n <h3 className=\"solid-filter-dialog-title\">Generate Model</h3>\n <p className=\"solid-filter-dialog-subtitle m-0\">Applying the code generation pipeline and reseeding metadata.</p>\n </div>\n </div>\n <div className=\"solid-filter-dialog-sep\" />\n <div className=\"solid-filter-dialog-body solid-generate-code-popup__body solid-generate-code-popup__body--loading\">\n <SolidCircularLoader />\n <p className=\"solid-generate-code-popup__loading-title\">\n {isPinging ? \"Waiting for backend...\" : \"Generating model code...\"}\n </p>\n <p className=\"solid-generate-code-popup__loading-copy\">{statusMessage}</p>\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"solid-generate-code-popup\">\n <div className=\"solid-filter-dialog-head solid-generate-code-popup__head\">\n <div>\n <h3 className=\"solid-filter-dialog-title\">Generate Model</h3>\n <p className=\"solid-filter-dialog-subtitle m-0\">\n Generate or refresh the model code artifacts from the current metadata definition.\n </p>\n </div>\n </div>\n <div className=\"solid-filter-dialog-sep\" />\n <div className=\"solid-filter-dialog-body solid-generate-code-popup__body\">\n {isSolidCoreModel ? (\n <div className=\"solid-generate-code-popup__notice is-warning\">\n <AlertTriangle size={16} />\n <span>You cannot generate code for Solid Core models.</span>\n </div>\n ) : (\n <>\n <p className=\"solid-generate-code-popup__intro\">\n Proceed with model code generation. Existing generated files may be overwritten.\n </p>\n <div className=\"solid-generate-code-popup__panel\">\n <div className=\"solid-generate-code-popup__panel-title\">\n <FileCode2 size={15} />\n <span>Artifacts created</span>\n </div>\n <ul className=\"solid-generate-code-popup__list\">\n {generatedFiles.map((item) => (\n <li key={item}>{item}</li>\n ))}\n </ul>\n </div>\n </>\n )}\n\n <div className=\"solid-generate-code-popup__actions\">\n {!isSolidCoreModel ? (\n <SolidButton\n size=\"small\"\n autoFocus\n leftIcon={<Sparkles size={14} />}\n loading={isGenerateCodeUpdating}\n onClick={generateCodeHandler}\n >\n Generate\n </SolidButton>\n ) : null}\n <SolidButton size=\"small\" variant=\"outline\" onClick={() => dispatch(closePopup())}>\n {isSolidCoreModel ? \"Close\" : \"Cancel\"}\n </SolidButton>\n </div>\n </div>\n </div>\n );\n};\n\nexport default GenerateModelCodeRowAction;\n"]}
@@ -53,13 +53,13 @@ const GenerateModelCodeRowAction = (event: SolidListRowdataDynamicFunctionProps)
53
53
  setStatusMessage("Submitting model generation request...");
54
54
  await generateCode({ id: event?.rowData?.id }).unwrap();
55
55
  setStatusMessage("Waiting for backend to come back online...");
56
- } catch (error) {
56
+ } catch (error: any) {
57
57
  setIsGenerating(false);
58
58
  dispatch(closePopup());
59
- dispatch(showToast({ severity: "error", summary: "Something went wrong", detail: ERROR_MESSAGES.API_ERROR }));
59
+ const errorMessage = error?.data?.message || error?.data?.error || ERROR_MESSAGES.CODE_GENERATE_FAILED;
60
+ dispatch(showToast({ severity: "error", summary: "Failed to generate code", detail: errorMessage }));
60
61
  }
61
62
  };
62
-
63
63
  useEffect(() => {
64
64
  if (!isGenerateCodeSuceess) return undefined;
65
65
 
@@ -71,7 +71,7 @@ const GenerateModelCodeRowAction = (event: SolidListRowdataDynamicFunctionProps)
71
71
 
72
72
  if (isAlive) {
73
73
  setStatusMessage("Refreshing seeded metadata...");
74
- await triggerSeeder("ModuleMetadataSeederService");
74
+ await triggerSeeder({ seeder: "ModuleMetadataSeederService", modulesToSeed: event?.rowData?.module?.name ? [event.rowData.module.name] : undefined });
75
75
  return;
76
76
  }
77
77
 
@@ -126,20 +126,21 @@ var GenerateModuleCodeRowAction = function (event) {
126
126
  return undefined;
127
127
  var timer = window.setTimeout(function () { return __awaiter(void 0, void 0, void 0, function () {
128
128
  var isAlive;
129
- return __generator(this, function (_a) {
130
- switch (_a.label) {
129
+ var _a;
130
+ return __generator(this, function (_b) {
131
+ switch (_b.label) {
131
132
  case 0:
132
133
  setIsPinging(true);
133
134
  setStatusMessage("Checking backend availability before refreshing metadata...");
134
135
  return [4 /*yield*/, pingBackendWithRetry(30, 500)];
135
136
  case 1:
136
- isAlive = _a.sent();
137
+ isAlive = _b.sent();
137
138
  setIsPinging(false);
138
139
  if (!isAlive) return [3 /*break*/, 3];
139
140
  setStatusMessage("Refreshing seeded metadata...");
140
- return [4 /*yield*/, triggerSeeder("ModuleMetadataSeederService")];
141
+ return [4 /*yield*/, triggerSeeder({ seeder: "ModuleMetadataSeederService", modulesToSeed: ((_a = event === null || event === void 0 ? void 0 : event.rowData) === null || _a === void 0 ? void 0 : _a.name) ? [event.rowData.name] : undefined })];
141
142
  case 2:
142
- _a.sent();
143
+ _b.sent();
143
144
  return [2 /*return*/];
144
145
  case 3:
145
146
  setIsGenerating(false);
@@ -1 +1 @@
1
- {"version":3,"file":"GenerateModuleCodeRowAction.js","sourceRoot":"","sources":["../../../../../../../src/components/core/extension/solid-core/moduleMetadata/list/GenerateModuleCodeRowAction.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useEffect, useMemo, useState } from \"react\";\nimport { useDispatch } from \"react-redux\";\nimport { AlertTriangle, FileCode2, Sparkles } from \"lucide-react\";\nimport { SolidCircularLoader } from \"../../../../../../components/core/common/SolidLoaders/SolidCircularLoader\";\nimport { ERROR_MESSAGES } from \"../../../../../../constants/error-messages\";\nimport { env } from \"../../../../../../adapters/env\";\nimport { useGenerateCodeFormoduleMutation } from \"../../../../../../redux/api/moduleApi\";\nimport { useSeederMutation } from \"../../../../../../redux/api/solidServiceApi\";\nimport { closePopup } from \"../../../../../../redux/features/popupSlice\";\nimport { showToast } from \"../../../../../../redux/features/toastSlice\";\nimport { SolidListRowdataDynamicFunctionProps } from \"../../../../../../types/solid-core\";\nimport { SolidButton } from \"../../../../../shad-cn-ui\";\n\nconst GenerateModuleCodeRowAction = (event: SolidListRowdataDynamicFunctionProps) => {\n const dispatch = useDispatch();\n const [statusMessage, setStatusMessage] = useState(\"Preparing module generation...\");\n const [isPinging, setIsPinging] = useState(false);\n const [isGenerating, setIsGenerating] = useState(false);\n\n const [generateCode, { isLoading: isGenerateCodeUpdating, isSuccess: isGenerateCodeSuceess }] =\n useGenerateCodeFormoduleMutation();\n\n const [triggerSeeder, { data, isSuccess: isSeederSuccess, isError: isSeederError }] = useSeederMutation();\n\n const isSolidCoreModule = event?.rowData?.name === \"solid-core\";\n const generatedFiles = useMemo(\n () => [\n \"Module file\",\n \"Metadata references\",\n \"Controller wiring\",\n \"Service and repository imports\",\n ],\n []\n );\n\n const pingBackendWithRetry = async (retries = 30, delay = 500): Promise<boolean> => {\n for (let i = 0; i < retries; i += 1) {\n try {\n const res = await fetch(`${env(\"NEXT_PUBLIC_BACKEND_API_URL\")}/api/ping`);\n if (res.ok) return true;\n } catch (error) {\n // ignore and retry\n }\n await new Promise((resolve) => setTimeout(resolve, delay));\n }\n return false;\n };\n\n const generateCodeHandler = async () => {\n try {\n setIsGenerating(true);\n setStatusMessage(\"Submitting module generation request...\");\n await generateCode({ id: event?.rowData?.id }).unwrap();\n setStatusMessage(\"Waiting for backend to come back online...\");\n } catch (error) {\n setIsGenerating(false);\n dispatch(closePopup());\n dispatch(showToast({ severity: \"error\", summary: \"Something went wrong\", detail: ERROR_MESSAGES.API_ERROR }));\n }\n };\n\n useEffect(() => {\n if (!isGenerateCodeSuceess) return undefined;\n\n const timer = window.setTimeout(async () => {\n setIsPinging(true);\n setStatusMessage(\"Checking backend availability before refreshing metadata...\");\n const isAlive = await pingBackendWithRetry(30, 500);\n setIsPinging(false);\n\n if (isAlive) {\n setStatusMessage(\"Refreshing seeded metadata...\");\n await triggerSeeder(\"ModuleMetadataSeederService\");\n return;\n }\n\n setIsGenerating(false);\n dispatch(closePopup());\n dispatch(\n showToast({\n severity: \"error\",\n summary: ERROR_MESSAGES.BACKEND_UNAVAILABLE,\n detail: ERROR_MESSAGES.SEEDER_NOT_TRIGGERED,\n })\n );\n }, 5000);\n\n return () => window.clearTimeout(timer);\n }, [dispatch, isGenerateCodeSuceess, triggerSeeder]);\n\n useEffect(() => {\n if (isSeederSuccess) {\n dispatch(\n showToast({\n severity: \"success\",\n summary: ERROR_MESSAGES.CODE_GENERTAE_SUCCESSFULLY,\n detail: ERROR_MESSAGES.CODE_GENERTAE_SUCCESSFULLY,\n })\n );\n setIsGenerating(false);\n dispatch(closePopup());\n window.location.reload();\n }\n\n if (isSeederError) {\n dispatch(showToast({ severity: \"error\", summary: ERROR_MESSAGES.SEEDER_ERROR, detail: ERROR_MESSAGES.SEEDER_NOT_RUN }));\n setIsGenerating(false);\n }\n }, [data, dispatch, isSeederError, isSeederSuccess]);\n\n if (isGenerating) {\n return (\n <div className=\"solid-generate-code-popup\">\n <div className=\"solid-filter-dialog-head solid-generate-code-popup__head\">\n <div>\n <h3 className=\"solid-filter-dialog-title\">Generate Module</h3>\n <p className=\"solid-filter-dialog-subtitle m-0\">Applying the code generation pipeline and reseeding metadata.</p>\n </div>\n </div>\n <div className=\"solid-filter-dialog-sep\" />\n <div className=\"solid-filter-dialog-body solid-generate-code-popup__body solid-generate-code-popup__body--loading\">\n <SolidCircularLoader />\n <p className=\"solid-generate-code-popup__loading-title\">\n {isPinging ? \"Waiting for backend...\" : \"Generating module code...\"}\n </p>\n <p className=\"solid-generate-code-popup__loading-copy\">{statusMessage}</p>\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"solid-generate-code-popup\">\n <div className=\"solid-filter-dialog-head solid-generate-code-popup__head\">\n <div>\n <h3 className=\"solid-filter-dialog-title\">Generate Module</h3>\n <p className=\"solid-filter-dialog-subtitle m-0\">\n Generate or refresh the module code artifacts from the current metadata definition.\n </p>\n </div>\n </div>\n <div className=\"solid-filter-dialog-sep\" />\n <div className=\"solid-filter-dialog-body solid-generate-code-popup__body\">\n {isSolidCoreModule ? (\n <div className=\"solid-generate-code-popup__notice is-warning\">\n <AlertTriangle size={16} />\n <span>You cannot generate code for Solid Core modules.</span>\n </div>\n ) : (\n <>\n <p className=\"solid-generate-code-popup__intro\">\n Proceed with module code generation. Existing generated files may be overwritten.\n </p>\n <div className=\"solid-generate-code-popup__panel\">\n <div className=\"solid-generate-code-popup__panel-title\">\n <FileCode2 size={15} />\n <span>Artifacts impacted</span>\n </div>\n <ul className=\"solid-generate-code-popup__list\">\n {generatedFiles.map((item) => (\n <li key={item}>{item}</li>\n ))}\n </ul>\n </div>\n </>\n )}\n\n <div className=\"solid-generate-code-popup__actions\">\n {!isSolidCoreModule ? (\n <SolidButton\n size=\"small\"\n autoFocus\n leftIcon={<Sparkles size={14} />}\n loading={isGenerateCodeUpdating}\n onClick={generateCodeHandler}\n >\n Generate\n </SolidButton>\n ) : null}\n <SolidButton size=\"small\" variant=\"outline\" onClick={() => dispatch(closePopup())}>\n {isSolidCoreModule ? \"Close\" : \"Cancel\"}\n </SolidButton>\n </div>\n </div>\n </div>\n );\n};\n\nexport default GenerateModuleCodeRowAction;\n"]}
1
+ {"version":3,"file":"GenerateModuleCodeRowAction.js","sourceRoot":"","sources":["../../../../../../../src/components/core/extension/solid-core/moduleMetadata/list/GenerateModuleCodeRowAction.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useEffect, useMemo, useState } from \"react\";\nimport { useDispatch } from \"react-redux\";\nimport { AlertTriangle, FileCode2, Sparkles } from \"lucide-react\";\nimport { SolidCircularLoader } from \"../../../../../../components/core/common/SolidLoaders/SolidCircularLoader\";\nimport { ERROR_MESSAGES } from \"../../../../../../constants/error-messages\";\nimport { env } from \"../../../../../../adapters/env\";\nimport { useGenerateCodeFormoduleMutation } from \"../../../../../../redux/api/moduleApi\";\nimport { useSeederMutation } from \"../../../../../../redux/api/solidServiceApi\";\nimport { closePopup } from \"../../../../../../redux/features/popupSlice\";\nimport { showToast } from \"../../../../../../redux/features/toastSlice\";\nimport { SolidListRowdataDynamicFunctionProps } from \"../../../../../../types/solid-core\";\nimport { SolidButton } from \"../../../../../shad-cn-ui\";\n\nconst GenerateModuleCodeRowAction = (event: SolidListRowdataDynamicFunctionProps) => {\n const dispatch = useDispatch();\n const [statusMessage, setStatusMessage] = useState(\"Preparing module generation...\");\n const [isPinging, setIsPinging] = useState(false);\n const [isGenerating, setIsGenerating] = useState(false);\n\n const [generateCode, { isLoading: isGenerateCodeUpdating, isSuccess: isGenerateCodeSuceess }] =\n useGenerateCodeFormoduleMutation();\n\n const [triggerSeeder, { data, isSuccess: isSeederSuccess, isError: isSeederError }] = useSeederMutation();\n\n const isSolidCoreModule = event?.rowData?.name === \"solid-core\";\n const generatedFiles = useMemo(\n () => [\n \"Module file\",\n \"Metadata references\",\n \"Controller wiring\",\n \"Service and repository imports\",\n ],\n []\n );\n\n const pingBackendWithRetry = async (retries = 30, delay = 500): Promise<boolean> => {\n for (let i = 0; i < retries; i += 1) {\n try {\n const res = await fetch(`${env(\"NEXT_PUBLIC_BACKEND_API_URL\")}/api/ping`);\n if (res.ok) return true;\n } catch (error) {\n // ignore and retry\n }\n await new Promise((resolve) => setTimeout(resolve, delay));\n }\n return false;\n };\n\n const generateCodeHandler = async () => {\n try {\n setIsGenerating(true);\n setStatusMessage(\"Submitting module generation request...\");\n await generateCode({ id: event?.rowData?.id }).unwrap();\n setStatusMessage(\"Waiting for backend to come back online...\");\n } catch (error) {\n setIsGenerating(false);\n dispatch(closePopup());\n dispatch(showToast({ severity: \"error\", summary: \"Something went wrong\", detail: ERROR_MESSAGES.API_ERROR }));\n }\n };\n\n useEffect(() => {\n if (!isGenerateCodeSuceess) return undefined;\n\n const timer = window.setTimeout(async () => {\n setIsPinging(true);\n setStatusMessage(\"Checking backend availability before refreshing metadata...\");\n const isAlive = await pingBackendWithRetry(30, 500);\n setIsPinging(false);\n\n if (isAlive) {\n setStatusMessage(\"Refreshing seeded metadata...\");\n await triggerSeeder({ seeder: \"ModuleMetadataSeederService\", modulesToSeed: event?.rowData?.name ? [event.rowData.name] : undefined });\n return;\n }\n\n setIsGenerating(false);\n dispatch(closePopup());\n dispatch(\n showToast({\n severity: \"error\",\n summary: ERROR_MESSAGES.BACKEND_UNAVAILABLE,\n detail: ERROR_MESSAGES.SEEDER_NOT_TRIGGERED,\n })\n );\n }, 5000);\n\n return () => window.clearTimeout(timer);\n }, [dispatch, isGenerateCodeSuceess, triggerSeeder]);\n\n useEffect(() => {\n if (isSeederSuccess) {\n dispatch(\n showToast({\n severity: \"success\",\n summary: ERROR_MESSAGES.CODE_GENERTAE_SUCCESSFULLY,\n detail: ERROR_MESSAGES.CODE_GENERTAE_SUCCESSFULLY,\n })\n );\n setIsGenerating(false);\n dispatch(closePopup());\n window.location.reload();\n }\n\n if (isSeederError) {\n dispatch(showToast({ severity: \"error\", summary: ERROR_MESSAGES.SEEDER_ERROR, detail: ERROR_MESSAGES.SEEDER_NOT_RUN }));\n setIsGenerating(false);\n }\n }, [data, dispatch, isSeederError, isSeederSuccess]);\n\n if (isGenerating) {\n return (\n <div className=\"solid-generate-code-popup\">\n <div className=\"solid-filter-dialog-head solid-generate-code-popup__head\">\n <div>\n <h3 className=\"solid-filter-dialog-title\">Generate Module</h3>\n <p className=\"solid-filter-dialog-subtitle m-0\">Applying the code generation pipeline and reseeding metadata.</p>\n </div>\n </div>\n <div className=\"solid-filter-dialog-sep\" />\n <div className=\"solid-filter-dialog-body solid-generate-code-popup__body solid-generate-code-popup__body--loading\">\n <SolidCircularLoader />\n <p className=\"solid-generate-code-popup__loading-title\">\n {isPinging ? \"Waiting for backend...\" : \"Generating module code...\"}\n </p>\n <p className=\"solid-generate-code-popup__loading-copy\">{statusMessage}</p>\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"solid-generate-code-popup\">\n <div className=\"solid-filter-dialog-head solid-generate-code-popup__head\">\n <div>\n <h3 className=\"solid-filter-dialog-title\">Generate Module</h3>\n <p className=\"solid-filter-dialog-subtitle m-0\">\n Generate or refresh the module code artifacts from the current metadata definition.\n </p>\n </div>\n </div>\n <div className=\"solid-filter-dialog-sep\" />\n <div className=\"solid-filter-dialog-body solid-generate-code-popup__body\">\n {isSolidCoreModule ? (\n <div className=\"solid-generate-code-popup__notice is-warning\">\n <AlertTriangle size={16} />\n <span>You cannot generate code for Solid Core modules.</span>\n </div>\n ) : (\n <>\n <p className=\"solid-generate-code-popup__intro\">\n Proceed with module code generation. Existing generated files may be overwritten.\n </p>\n <div className=\"solid-generate-code-popup__panel\">\n <div className=\"solid-generate-code-popup__panel-title\">\n <FileCode2 size={15} />\n <span>Artifacts impacted</span>\n </div>\n <ul className=\"solid-generate-code-popup__list\">\n {generatedFiles.map((item) => (\n <li key={item}>{item}</li>\n ))}\n </ul>\n </div>\n </>\n )}\n\n <div className=\"solid-generate-code-popup__actions\">\n {!isSolidCoreModule ? (\n <SolidButton\n size=\"small\"\n autoFocus\n leftIcon={<Sparkles size={14} />}\n loading={isGenerateCodeUpdating}\n onClick={generateCodeHandler}\n >\n Generate\n </SolidButton>\n ) : null}\n <SolidButton size=\"small\" variant=\"outline\" onClick={() => dispatch(closePopup())}>\n {isSolidCoreModule ? \"Close\" : \"Cancel\"}\n </SolidButton>\n </div>\n </div>\n </div>\n );\n};\n\nexport default GenerateModuleCodeRowAction;\n"]}
@@ -70,7 +70,7 @@ const GenerateModuleCodeRowAction = (event: SolidListRowdataDynamicFunctionProps
70
70
 
71
71
  if (isAlive) {
72
72
  setStatusMessage("Refreshing seeded metadata...");
73
- await triggerSeeder("ModuleMetadataSeederService");
73
+ await triggerSeeder({ seeder: "ModuleMetadataSeederService", modulesToSeed: event?.rowData?.name ? [event.rowData.name] : undefined });
74
74
  return;
75
75
  }
76
76
 
@@ -1,6 +1,7 @@
1
1
  import { SolidFormViewProps } from "./SolidFormView";
2
2
  export type SolidFormFooterProps = {
3
3
  params: SolidFormViewProps;
4
+ internationalisationEnabled?: boolean;
4
5
  };
5
- export declare const SolidFormFooter: ({ params }: SolidFormFooterProps) => import("react/jsx-runtime").JSX.Element;
6
+ export declare const SolidFormFooter: ({ params, internationalisationEnabled }: SolidFormFooterProps) => import("react/jsx-runtime").JSX.Element;
6
7
  //# sourceMappingURL=SolidFormFooter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SolidFormFooter.d.ts","sourceRoot":"","sources":["../../../../src/components/core/form/SolidFormFooter.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAMrD,MAAM,MAAM,oBAAoB,GAAG;IAC/B,MAAM,EAAE,kBAAkB,CAAC;CAC9B,CAAC;AAQF,eAAO,MAAM,eAAe,eAAgB,oBAAoB,4CAqK/D,CAAC"}
1
+ {"version":3,"file":"SolidFormFooter.d.ts","sourceRoot":"","sources":["../../../../src/components/core/form/SolidFormFooter.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAMrD,MAAM,MAAM,oBAAoB,GAAG;IAC/B,MAAM,EAAE,kBAAkB,CAAC;IAC3B,2BAA2B,CAAC,EAAE,OAAO,CAAC;CACzC,CAAC;AAQF,eAAO,MAAM,eAAe,4CAAqD,oBAAoB,4CAkNpG,CAAC"}
@@ -55,14 +55,47 @@ import { useSearchParams } from "../../../hooks/useSearchParams";
55
55
  import { useRouter } from "../../../hooks/useRouter";
56
56
  import { SolidButton, SolidTooltip, SolidTooltipContent, SolidTooltipTrigger } from "../../shad-cn-ui";
57
57
  export var SolidFormFooter = function (_a) {
58
- var params = _a.params;
58
+ var params = _a.params, _b = _a.internationalisationEnabled, internationalisationEnabled = _b === void 0 ? false : _b;
59
59
  var pathname = usePathname();
60
60
  var searchParams = useSearchParams();
61
61
  var router = useRouter();
62
- var _b = useState(null), prevNav = _b[0], setPrevNav = _b[1];
63
- var _c = useState(null), nextNav = _c[0], setNextNav = _c[1];
64
- var _d = useState(null), meta = _d[0], setMeta = _d[1];
65
- var _e = useLazyNavigationQuery(), triggerGetNavigation = _e[0], isLoading = _e[1].isLoading;
62
+ var _c = useState(null), prevNav = _c[0], setPrevNav = _c[1];
63
+ var _d = useState(null), nextNav = _d[0], setNextNav = _d[1];
64
+ var _e = useState(null), meta = _e[0], setMeta = _e[1];
65
+ var _f = useLazyNavigationQuery(), triggerGetNavigation = _f[0], isLoading = _f[1].isLoading;
66
+ var rewriteLocaleFilter = function (filterNode, locale) {
67
+ if (!filterNode || typeof filterNode !== "object")
68
+ return filterNode;
69
+ if (Array.isArray(filterNode)) {
70
+ return filterNode.map(function (item) { return rewriteLocaleFilter(item, locale); });
71
+ }
72
+ var nextNode = __assign({}, filterNode);
73
+ if (Object.prototype.hasOwnProperty.call(nextNode, "localeName")) {
74
+ var localeFilter = nextNode.localeName;
75
+ if (localeFilter && typeof localeFilter === "object" && !Array.isArray(localeFilter)) {
76
+ var updatedLocaleFilter_1 = __assign({}, localeFilter);
77
+ Object.keys(updatedLocaleFilter_1).forEach(function (operator) {
78
+ var operatorValue = updatedLocaleFilter_1[operator];
79
+ if (Array.isArray(operatorValue)) {
80
+ updatedLocaleFilter_1[operator] = [locale];
81
+ }
82
+ else {
83
+ updatedLocaleFilter_1[operator] = locale;
84
+ }
85
+ });
86
+ nextNode.localeName = updatedLocaleFilter_1;
87
+ }
88
+ else {
89
+ nextNode.localeName = locale;
90
+ }
91
+ }
92
+ Object.keys(nextNode).forEach(function (key) {
93
+ if (key === "localeName")
94
+ return;
95
+ nextNode[key] = rewriteLocaleFilter(nextNode[key], locale);
96
+ });
97
+ return nextNode;
98
+ };
66
99
  // -----------------------------
67
100
  // Helper: update local storage
68
101
  // -----------------------------
@@ -111,7 +144,7 @@ export var SolidFormFooter = function (_a) {
111
144
  }
112
145
  if (params.id !== "new") {
113
146
  var fetchNavigation = function () { return __awaiter(void 0, void 0, void 0, function () {
114
- var listPath, queryObject, defaultQueryObject, locale, defaultEntityLocaleId, queryData, queryString, response;
147
+ var listPath, queryObject, defaultQueryObject, locale, defaultEntityLocaleId, resolvedFilters, requiresPopulate, queryData, queryString, response;
115
148
  var _a, _b, _c, _d, _e, _f;
116
149
  return __generator(this, function (_g) {
117
150
  switch (_g.label) {
@@ -121,15 +154,16 @@ export var SolidFormFooter = function (_a) {
121
154
  defaultQueryObject = queryObject || {};
122
155
  locale = searchParams.get("locale");
123
156
  defaultEntityLocaleId = searchParams.get("defaultEntityLocaleId");
124
- queryData = {
125
- offset: defaultQueryObject.offset || 0,
126
- limit: defaultQueryObject.limit || 25,
127
- filters: defaultQueryObject.finalFullFilter || null,
157
+ resolvedFilters = internationalisationEnabled && locale
158
+ ? rewriteLocaleFilter(defaultQueryObject.finalFullFilter || null, locale)
159
+ : (defaultQueryObject.finalFullFilter || null);
160
+ requiresPopulate = Array.isArray(defaultQueryObject.sort) &&
161
+ defaultQueryObject.sort[0].split(":")[0].includes(".");
162
+ queryData = __assign({ offset: defaultQueryObject.offset || 0, limit: defaultQueryObject.limit || 25, filters: resolvedFilters,
128
163
  // fields: ["id"],
129
- modelName: params.modelName,
130
- recordId: params.id,
131
- sort: defaultQueryObject.sort,
132
- };
164
+ modelName: params.modelName, recordId: params.id, sort: defaultQueryObject.sort }, (requiresPopulate && {
165
+ populate: defaultQueryObject.populate,
166
+ }));
133
167
  if (locale) {
134
168
  queryData.locale = locale;
135
169
  }
@@ -1 +1 @@
1
- {"version":3,"file":"SolidFormFooter.js","sourceRoot":"","sources":["../../../../src/components/core/form/SolidFormFooter.tsx"],"names":[],"mappings":"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","sourcesContent":["\n\nimport { useLazyNavigationQuery } from \"../../../redux/api/modelApi\";\nimport { useEffect, useState } from \"react\";\nimport qs from \"qs\";\nimport { setFilterObjectToLocalStorageByUrl, getFilterObjectFromLocalStorageByUrl } from \"../list/SolidListView\";\nimport { SolidFormViewProps } from \"./SolidFormView\";\nimport { usePathname } from \"../../../hooks/usePathname\";\nimport { useSearchParams } from \"../../../hooks/useSearchParams\";\nimport { useRouter } from \"../../../hooks/useRouter\";\nimport { SolidButton, SolidTooltip, SolidTooltipContent, SolidTooltipTrigger } from \"../../shad-cn-ui\";\n\nexport type SolidFormFooterProps = {\n params: SolidFormViewProps;\n};\n\ntype NavItem = {\n recordId: number;\n offset: number;\n limit: number;\n};\n\nexport const SolidFormFooter = ({ params }: SolidFormFooterProps) => {\n const pathname = usePathname();\n const searchParams = useSearchParams();\n const router = useRouter();\n\n const [prevNav, setPrevNav] = useState<NavItem | null>(null);\n const [nextNav, setNextNav] = useState<NavItem | null>(null);\n const [meta, setMeta] = useState<any>(null);\n\n const [triggerGetNavigation, { isLoading }] =\n useLazyNavigationQuery();\n\n // -----------------------------\n // Helper: update local storage\n // -----------------------------\n const updatePaginationInLocalStorage = (offset: number, limit: number) => {\n const listPath = window.location.pathname.replace(\n /\\/form\\/[^/]+/,\n \"/list\",\n );\n const queryObject = getFilterObjectFromLocalStorageByUrl(listPath) || {};\n\n const updatedQueryObj = {\n ...queryObject,\n offset,\n limit,\n };\n setFilterObjectToLocalStorageByUrl(listPath, updatedQueryObj)\n };\n\n const getNewUrl = (recordId: number): string => {\n // Replace the id after /form/\n const newPathname = pathname.replace(\n /\\/form\\/[^/]+/,\n `/form/${recordId}`,\n );\n\n // Clone search params (immutable in Next.js)\n const params = new URLSearchParams(searchParams.toString());\n\n // Remove only userKeyField\n params.delete(\"userKeyField\");\n\n const query = params.toString();\n return query ? `${newPathname}?${query}` : newPathname;\n }\n\n\n // -----------------------------\n // Click handlers\n // -----------------------------\n const handlePrev = () => {\n\n if (!prevNav) return;\n\n updatePaginationInLocalStorage(prevNav.offset, prevNav.limit);\n const newUrl = getNewUrl(prevNav.recordId)\n router.push(newUrl);\n };\n\n const handleNext = () => {\n if (!nextNav) return;\n\n updatePaginationInLocalStorage(nextNav.offset, nextNav.limit);\n const newUrl = getNewUrl(nextNav.recordId)\n router.push(newUrl);\n };\n\n // -----------------------------\n // Fetch navigation data\n // -----------------------------\n useEffect(() => {\n if (params.embeded === true) {\n setPrevNav(null);\n setNextNav(null);\n setMeta(null);\n return;\n }\n\n if (params.id !== \"new\") {\n\n const fetchNavigation = async () => {\n const listPath = window.location.pathname.replace(\n /\\/form\\/[^/]+/,\n \"/list\",\n );\n\n const queryObject = getFilterObjectFromLocalStorageByUrl(listPath);\n const defaultQueryObject = queryObject || {};\n const locale = searchParams.get(\"locale\");\n const defaultEntityLocaleId = searchParams.get(\"defaultEntityLocaleId\");\n\n const queryData: Record<string, any> = {\n offset: defaultQueryObject.offset || 0,\n limit: defaultQueryObject.limit || 25,\n filters: defaultQueryObject.finalFullFilter || null,\n // fields: [\"id\"],\n modelName: params.modelName,\n recordId: params.id,\n sort: defaultQueryObject.sort,\n };\n\n if (locale) {\n queryData.locale = locale;\n }\n\n if (defaultEntityLocaleId && defaultEntityLocaleId !== \"new\") {\n queryData.defaultEntityLocaleId = defaultEntityLocaleId;\n }\n\n const queryString = qs.stringify(queryData, {\n encodeValuesOnly: true,\n });\n\n const response: any = await triggerGetNavigation(queryString).unwrap();\n if (response.statusCode == 200) {\n setPrevNav(response?.data?.prev ?? null);\n setNextNav(response?.data?.next ?? null);\n setMeta(response?.data?.meta ?? null);\n }\n };\n fetchNavigation();\n }\n }, [params.id, params.embeded, params.modelName, searchParams, triggerGetNavigation]);\n\n // -----------------------------\n // UI\n // -----------------------------\n return (\n <div\n className=\"flex justify-end items-center gap-2 p-1\"\n >{meta &&\n <span className=\"solid-form-footer-pagination-meta p-2\">{`${meta.currentIndexGlobal} of ${meta.totalRecords}`}</span>\n }\n {prevNav && (\n <SolidTooltip>\n <SolidTooltipTrigger asChild>\n <SolidButton\n icon=\"si si-angle-left\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => handlePrev()}\n disabled={isLoading}\n />\n </SolidTooltipTrigger>\n <SolidTooltipContent side=\"top\">Previous</SolidTooltipContent>\n </SolidTooltip>\n )}\n\n {nextNav && (\n <SolidTooltip>\n <SolidTooltipTrigger asChild>\n <SolidButton\n icon=\"si si-angle-right\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => handleNext()}\n disabled={isLoading}\n />\n </SolidTooltipTrigger>\n <SolidTooltipContent side=\"top\">Next</SolidTooltipContent>\n </SolidTooltip>\n )}\n </div>\n );\n};\n"]}
1
+ {"version":3,"file":"SolidFormFooter.js","sourceRoot":"","sources":["../../../../src/components/core/form/SolidFormFooter.tsx"],"names":[],"mappings":"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","sourcesContent":["\n\nimport { useLazyNavigationQuery } from \"../../../redux/api/modelApi\";\nimport { useEffect, useState } from \"react\";\nimport qs from \"qs\";\nimport { setFilterObjectToLocalStorageByUrl, getFilterObjectFromLocalStorageByUrl } from \"../list/SolidListView\";\nimport { SolidFormViewProps } from \"./SolidFormView\";\nimport { usePathname } from \"../../../hooks/usePathname\";\nimport { useSearchParams } from \"../../../hooks/useSearchParams\";\nimport { useRouter } from \"../../../hooks/useRouter\";\nimport { SolidButton, SolidTooltip, SolidTooltipContent, SolidTooltipTrigger } from \"../../shad-cn-ui\";\n\nexport type SolidFormFooterProps = {\n params: SolidFormViewProps;\n internationalisationEnabled?: boolean;\n};\n\ntype NavItem = {\n recordId: number;\n offset: number;\n limit: number;\n};\n\nexport const SolidFormFooter = ({ params, internationalisationEnabled = false }: SolidFormFooterProps) => {\n const pathname = usePathname();\n const searchParams = useSearchParams();\n const router = useRouter();\n\n const [prevNav, setPrevNav] = useState<NavItem | null>(null);\n const [nextNav, setNextNav] = useState<NavItem | null>(null);\n const [meta, setMeta] = useState<any>(null);\n\n const [triggerGetNavigation, { isLoading }] =\n useLazyNavigationQuery();\n\n const rewriteLocaleFilter = (filterNode: any, locale: string): any => {\n if (!filterNode || typeof filterNode !== \"object\") return filterNode;\n\n if (Array.isArray(filterNode)) {\n return filterNode.map((item) => rewriteLocaleFilter(item, locale));\n }\n\n const nextNode = { ...filterNode };\n\n if (Object.prototype.hasOwnProperty.call(nextNode, \"localeName\")) {\n const localeFilter = nextNode.localeName;\n\n if (localeFilter && typeof localeFilter === \"object\" && !Array.isArray(localeFilter)) {\n const updatedLocaleFilter: Record<string, any> = { ...localeFilter };\n Object.keys(updatedLocaleFilter).forEach((operator) => {\n const operatorValue = updatedLocaleFilter[operator];\n if (Array.isArray(operatorValue)) {\n updatedLocaleFilter[operator] = [locale];\n } else {\n updatedLocaleFilter[operator] = locale;\n }\n });\n nextNode.localeName = updatedLocaleFilter;\n } else {\n nextNode.localeName = locale;\n }\n }\n\n Object.keys(nextNode).forEach((key) => {\n if (key === \"localeName\") return;\n nextNode[key] = rewriteLocaleFilter(nextNode[key], locale);\n });\n\n return nextNode;\n };\n\n // -----------------------------\n // Helper: update local storage\n // -----------------------------\n const updatePaginationInLocalStorage = (offset: number, limit: number) => {\n const listPath = window.location.pathname.replace(\n /\\/form\\/[^/]+/,\n \"/list\",\n );\n const queryObject = getFilterObjectFromLocalStorageByUrl(listPath) || {};\n\n const updatedQueryObj = {\n ...queryObject,\n offset,\n limit,\n };\n setFilterObjectToLocalStorageByUrl(listPath, updatedQueryObj)\n };\n\n const getNewUrl = (recordId: number): string => {\n // Replace the id after /form/\n const newPathname = pathname.replace(\n /\\/form\\/[^/]+/,\n `/form/${recordId}`,\n );\n\n // Clone search params (immutable in Next.js)\n const params = new URLSearchParams(searchParams.toString());\n\n // Remove only userKeyField\n params.delete(\"userKeyField\");\n\n const query = params.toString();\n return query ? `${newPathname}?${query}` : newPathname;\n }\n\n\n // -----------------------------\n // Click handlers\n // -----------------------------\n const handlePrev = () => {\n\n if (!prevNav) return;\n\n updatePaginationInLocalStorage(prevNav.offset, prevNav.limit);\n const newUrl = getNewUrl(prevNav.recordId)\n router.push(newUrl);\n };\n\n const handleNext = () => {\n if (!nextNav) return;\n\n updatePaginationInLocalStorage(nextNav.offset, nextNav.limit);\n const newUrl = getNewUrl(nextNav.recordId)\n router.push(newUrl);\n };\n\n // -----------------------------\n // Fetch navigation data\n // -----------------------------\n useEffect(() => {\n if (params.embeded === true) {\n setPrevNav(null);\n setNextNav(null);\n setMeta(null);\n return;\n }\n\n if (params.id !== \"new\") {\n\n const fetchNavigation = async () => {\n const listPath = window.location.pathname.replace(\n /\\/form\\/[^/]+/,\n \"/list\",\n );\n\n const queryObject = getFilterObjectFromLocalStorageByUrl(listPath);\n const defaultQueryObject = queryObject || {};\n const locale = searchParams.get(\"locale\");\n const defaultEntityLocaleId = searchParams.get(\"defaultEntityLocaleId\");\n const resolvedFilters = internationalisationEnabled && locale\n ? rewriteLocaleFilter(defaultQueryObject.finalFullFilter || null, locale)\n : (defaultQueryObject.finalFullFilter || null);\n\n const requiresPopulate =\n Array.isArray(defaultQueryObject.sort) &&\n defaultQueryObject.sort[0].split(\":\")[0].includes(\".\");\n const queryData = {\n offset: defaultQueryObject.offset || 0,\n limit: defaultQueryObject.limit || 25,\n filters: resolvedFilters,\n // fields: [\"id\"],\n modelName: params.modelName,\n recordId: params.id,\n sort: defaultQueryObject.sort,\n ...(requiresPopulate && {\n populate: defaultQueryObject.populate,\n }),\n };\n\n if (locale) {\n queryData.locale = locale;\n }\n\n if (defaultEntityLocaleId && defaultEntityLocaleId !== \"new\") {\n queryData.defaultEntityLocaleId = defaultEntityLocaleId;\n }\n\n const queryString = qs.stringify(queryData, {\n encodeValuesOnly: true,\n });\n\n const response: any = await triggerGetNavigation(queryString).unwrap();\n if (response.statusCode == 200) {\n setPrevNav(response?.data?.prev ?? null);\n setNextNav(response?.data?.next ?? null);\n setMeta(response?.data?.meta ?? null);\n }\n };\n fetchNavigation();\n }\n }, [params.id, params.embeded, params.modelName, searchParams, triggerGetNavigation]);\n\n // -----------------------------\n // UI\n // -----------------------------\n return (\n <div\n className=\"flex justify-end items-center gap-2 p-1\"\n >{meta &&\n <span className=\"solid-form-footer-pagination-meta p-2\">{`${meta.currentIndexGlobal} of ${meta.totalRecords}`}</span>\n }\n {prevNav && (\n <SolidTooltip>\n <SolidTooltipTrigger asChild>\n <SolidButton\n icon=\"si si-angle-left\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => handlePrev()}\n disabled={isLoading}\n />\n </SolidTooltipTrigger>\n <SolidTooltipContent side=\"top\">Previous</SolidTooltipContent>\n </SolidTooltip>\n )}\n\n {nextNav && (\n <SolidTooltip>\n <SolidTooltipTrigger asChild>\n <SolidButton\n icon=\"si si-angle-right\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => handleNext()}\n disabled={isLoading}\n />\n </SolidTooltipTrigger>\n <SolidTooltipContent side=\"top\">Next</SolidTooltipContent>\n </SolidTooltip>\n )}\n </div>\n );\n};\n"]}
@@ -12,6 +12,7 @@ import { SolidButton, SolidTooltip, SolidTooltipContent, SolidTooltipTrigger } f
12
12
 
13
13
  export type SolidFormFooterProps = {
14
14
  params: SolidFormViewProps;
15
+ internationalisationEnabled?: boolean;
15
16
  };
16
17
 
17
18
  type NavItem = {
@@ -20,7 +21,7 @@ type NavItem = {
20
21
  limit: number;
21
22
  };
22
23
 
23
- export const SolidFormFooter = ({ params }: SolidFormFooterProps) => {
24
+ export const SolidFormFooter = ({ params, internationalisationEnabled = false }: SolidFormFooterProps) => {
24
25
  const pathname = usePathname();
25
26
  const searchParams = useSearchParams();
26
27
  const router = useRouter();
@@ -32,6 +33,42 @@ export const SolidFormFooter = ({ params }: SolidFormFooterProps) => {
32
33
  const [triggerGetNavigation, { isLoading }] =
33
34
  useLazyNavigationQuery();
34
35
 
36
+ const rewriteLocaleFilter = (filterNode: any, locale: string): any => {
37
+ if (!filterNode || typeof filterNode !== "object") return filterNode;
38
+
39
+ if (Array.isArray(filterNode)) {
40
+ return filterNode.map((item) => rewriteLocaleFilter(item, locale));
41
+ }
42
+
43
+ const nextNode = { ...filterNode };
44
+
45
+ if (Object.prototype.hasOwnProperty.call(nextNode, "localeName")) {
46
+ const localeFilter = nextNode.localeName;
47
+
48
+ if (localeFilter && typeof localeFilter === "object" && !Array.isArray(localeFilter)) {
49
+ const updatedLocaleFilter: Record<string, any> = { ...localeFilter };
50
+ Object.keys(updatedLocaleFilter).forEach((operator) => {
51
+ const operatorValue = updatedLocaleFilter[operator];
52
+ if (Array.isArray(operatorValue)) {
53
+ updatedLocaleFilter[operator] = [locale];
54
+ } else {
55
+ updatedLocaleFilter[operator] = locale;
56
+ }
57
+ });
58
+ nextNode.localeName = updatedLocaleFilter;
59
+ } else {
60
+ nextNode.localeName = locale;
61
+ }
62
+ }
63
+
64
+ Object.keys(nextNode).forEach((key) => {
65
+ if (key === "localeName") return;
66
+ nextNode[key] = rewriteLocaleFilter(nextNode[key], locale);
67
+ });
68
+
69
+ return nextNode;
70
+ };
71
+
35
72
  // -----------------------------
36
73
  // Helper: update local storage
37
74
  // -----------------------------
@@ -111,15 +148,24 @@ export const SolidFormFooter = ({ params }: SolidFormFooterProps) => {
111
148
  const defaultQueryObject = queryObject || {};
112
149
  const locale = searchParams.get("locale");
113
150
  const defaultEntityLocaleId = searchParams.get("defaultEntityLocaleId");
114
-
115
- const queryData: Record<string, any> = {
151
+ const resolvedFilters = internationalisationEnabled && locale
152
+ ? rewriteLocaleFilter(defaultQueryObject.finalFullFilter || null, locale)
153
+ : (defaultQueryObject.finalFullFilter || null);
154
+
155
+ const requiresPopulate =
156
+ Array.isArray(defaultQueryObject.sort) &&
157
+ defaultQueryObject.sort[0].split(":")[0].includes(".");
158
+ const queryData = {
116
159
  offset: defaultQueryObject.offset || 0,
117
160
  limit: defaultQueryObject.limit || 25,
118
- filters: defaultQueryObject.finalFullFilter || null,
161
+ filters: resolvedFilters,
119
162
  // fields: ["id"],
120
163
  modelName: params.modelName,
121
164
  recordId: params.id,
122
165
  sort: defaultQueryObject.sort,
166
+ ...(requiresPopulate && {
167
+ populate: defaultQueryObject.populate,
168
+ }),
123
169
  };
124
170
 
125
171
  if (locale) {
@@ -1 +1 @@
1
- {"version":3,"file":"SolidFormView.d.ts","sourceRoot":"","sources":["../../../../src/components/core/form/SolidFormView.tsx"],"names":[],"mappings":"AA4DA,MAAM,MAAM,kBAAkB,GAAG;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,OAAO,CAAC;IACjB,gBAAgB,CAAC,EAAE,GAAG,CAAC;IACvB,mBAAmB,CAAC,EAAE,GAAG,CAAA;IACzB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,YAAY,CAAC,EAAE,GAAG,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAC;CACnC,CAAC;AA8HF,eAAO,MAAM,uBAAuB,WAAY,GAAG,EAAE,KAAG,GAQvD,CAAA;AACD,eAAO,MAAM,sBAAsB,QAAS,MAAM,uBAAuB,OAAO,MAAM,EAAE,GAAG,CAAC,QAa3F,CAAC;AA0VF,QAAA,MAAM,aAAa,WAAY,kBAAkB,4CA88ChD,CAAC;AAEF,eAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"SolidFormView.d.ts","sourceRoot":"","sources":["../../../../src/components/core/form/SolidFormView.tsx"],"names":[],"mappings":"AA4DA,MAAM,MAAM,kBAAkB,GAAG;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,OAAO,CAAC;IACjB,gBAAgB,CAAC,EAAE,GAAG,CAAC;IACvB,mBAAmB,CAAC,EAAE,GAAG,CAAA;IACzB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,YAAY,CAAC,EAAE,GAAG,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAC;CACnC,CAAC;AA8HF,eAAO,MAAM,uBAAuB,WAAY,GAAG,EAAE,KAAG,GAQvD,CAAA;AACD,eAAO,MAAM,sBAAsB,QAAS,MAAM,uBAAuB,OAAO,MAAM,EAAE,GAAG,CAAC,QAa3F,CAAC;AA0VF,QAAA,MAAM,aAAa,WAAY,kBAAkB,4CAq9ChD,CAAC;AAEF,eAAe,aAAa,CAAC"}