@solidxai/core-ui 0.1.3 → 0.1.4-beta.1

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 (150) hide show
  1. package/dist/components/auth/SolidInitialLoginOtp.d.ts.map +1 -1
  2. package/dist/components/auth/SolidInitialLoginOtp.js +0 -5
  3. package/dist/components/auth/SolidInitialLoginOtp.js.map +1 -1
  4. package/dist/components/auth/SolidInitialLoginOtp.tsx +0 -5
  5. package/dist/components/auth/SolidLogin.d.ts.map +1 -1
  6. package/dist/components/auth/SolidLogin.js +7 -5
  7. package/dist/components/auth/SolidLogin.js.map +1 -1
  8. package/dist/components/auth/SolidLogin.tsx +10 -8
  9. package/dist/components/common/GeneralSettings.d.ts.map +1 -1
  10. package/dist/components/common/GeneralSettings.js +48 -47
  11. package/dist/components/common/GeneralSettings.js.map +1 -1
  12. package/dist/components/common/GeneralSettings.tsx +41 -10
  13. package/dist/components/core/common/FilterComponent.js.map +1 -1
  14. package/dist/components/core/common/FilterComponent.tsx +1 -1
  15. package/dist/components/core/common/GroupingComponent.d.ts +54 -0
  16. package/dist/components/core/common/GroupingComponent.d.ts.map +1 -0
  17. package/dist/components/core/common/GroupingComponent.js +196 -0
  18. package/dist/components/core/common/GroupingComponent.js.map +1 -0
  19. package/dist/components/core/common/GroupingComponent.tsx +452 -0
  20. package/dist/components/core/common/SolidGlobalSearchElement.d.ts +18 -1
  21. package/dist/components/core/common/SolidGlobalSearchElement.d.ts.map +1 -1
  22. package/dist/components/core/common/SolidGlobalSearchElement.js +152 -52
  23. package/dist/components/core/common/SolidGlobalSearchElement.js.map +1 -1
  24. package/dist/components/core/common/SolidGlobalSearchElement.tsx +212 -35
  25. package/dist/components/core/extension/solid-core/modelSequence/modelSequenceFormViewChangeHandler.d.ts +19 -0
  26. package/dist/components/core/extension/solid-core/modelSequence/modelSequenceFormViewChangeHandler.d.ts.map +1 -0
  27. package/dist/components/core/extension/solid-core/modelSequence/modelSequenceFormViewChangeHandler.js +90 -0
  28. package/dist/components/core/extension/solid-core/modelSequence/modelSequenceFormViewChangeHandler.js.map +1 -0
  29. package/dist/components/core/extension/solid-core/modelSequence/modelSequenceFormViewChangeHandler.tsx +59 -0
  30. package/dist/components/core/extension/solid-core/roleMetadata/RolePermissionsManyToManyFieldWidget.d.ts.map +1 -1
  31. package/dist/components/core/extension/solid-core/roleMetadata/RolePermissionsManyToManyFieldWidget.js +17 -28
  32. package/dist/components/core/extension/solid-core/roleMetadata/RolePermissionsManyToManyFieldWidget.js.map +1 -1
  33. package/dist/components/core/extension/solid-core/roleMetadata/RolePermissionsManyToManyFieldWidget.tsx +71 -56
  34. package/dist/components/core/filter/SolidOneToManyFilterElement.d.ts +2 -0
  35. package/dist/components/core/filter/SolidOneToManyFilterElement.d.ts.map +1 -0
  36. package/dist/components/core/filter/SolidOneToManyFilterElement.js +86 -0
  37. package/dist/components/core/filter/SolidOneToManyFilterElement.js.map +1 -0
  38. package/dist/components/core/filter/SolidOneToManyFilterElement.tsx +62 -0
  39. package/dist/components/core/filter/SolidVarInputsFilterElement.d.ts +1 -0
  40. package/dist/components/core/filter/SolidVarInputsFilterElement.d.ts.map +1 -1
  41. package/dist/components/core/filter/SolidVarInputsFilterElement.js +4 -1
  42. package/dist/components/core/filter/SolidVarInputsFilterElement.js.map +1 -1
  43. package/dist/components/core/filter/SolidVarInputsFilterElement.tsx +10 -0
  44. package/dist/components/core/filter/fields/SolidRelationField.d.ts.map +1 -1
  45. package/dist/components/core/filter/fields/SolidRelationField.js +4 -2
  46. package/dist/components/core/filter/fields/SolidRelationField.js.map +1 -1
  47. package/dist/components/core/filter/fields/SolidRelationField.tsx +4 -2
  48. package/dist/components/core/filter/fields/relations/SolidRelationOneToManyField.d.ts +4 -0
  49. package/dist/components/core/filter/fields/relations/SolidRelationOneToManyField.d.ts.map +1 -0
  50. package/dist/components/core/filter/fields/relations/SolidRelationOneToManyField.js +25 -0
  51. package/dist/components/core/filter/fields/relations/SolidRelationOneToManyField.js.map +1 -0
  52. package/dist/components/core/filter/fields/relations/SolidRelationOneToManyField.tsx +60 -0
  53. package/dist/components/core/form/SolidFormFooter.js +4 -4
  54. package/dist/components/core/form/SolidFormFooter.js.map +1 -1
  55. package/dist/components/core/form/SolidFormFooter.tsx +4 -4
  56. package/dist/components/core/form/fields/SolidBooleanField.d.ts.map +1 -1
  57. package/dist/components/core/form/fields/SolidBooleanField.js +11 -8
  58. package/dist/components/core/form/fields/SolidBooleanField.js.map +1 -1
  59. package/dist/components/core/form/fields/SolidBooleanField.tsx +20 -8
  60. package/dist/components/core/form/fields/relations/SolidRelationManyToManyField.d.ts +40 -0
  61. package/dist/components/core/form/fields/relations/SolidRelationManyToManyField.d.ts.map +1 -1
  62. package/dist/components/core/form/fields/relations/SolidRelationManyToManyField.js +317 -157
  63. package/dist/components/core/form/fields/relations/SolidRelationManyToManyField.js.map +1 -1
  64. package/dist/components/core/form/fields/relations/SolidRelationManyToManyField.tsx +463 -243
  65. package/dist/components/core/form/fields/relations/SolidRelationOneToManyField.d.ts.map +1 -1
  66. package/dist/components/core/form/fields/relations/SolidRelationOneToManyField.js +46 -95
  67. package/dist/components/core/form/fields/relations/SolidRelationOneToManyField.js.map +1 -1
  68. package/dist/components/core/form/fields/relations/SolidRelationOneToManyField.tsx +57 -113
  69. package/dist/components/core/form/fields/relations/widgets/helpers/useRelationEntityHandler.d.ts +15 -4
  70. package/dist/components/core/form/fields/relations/widgets/helpers/useRelationEntityHandler.d.ts.map +1 -1
  71. package/dist/components/core/form/fields/relations/widgets/helpers/useRelationEntityHandler.js +220 -33
  72. package/dist/components/core/form/fields/relations/widgets/helpers/useRelationEntityHandler.js.map +1 -1
  73. package/dist/components/core/form/fields/relations/widgets/helpers/useRelationEntityHandler.ts +167 -36
  74. package/dist/components/core/kanban/SolidKanbanView.d.ts.map +1 -1
  75. package/dist/components/core/kanban/SolidKanbanView.js +13 -12
  76. package/dist/components/core/kanban/SolidKanbanView.js.map +1 -1
  77. package/dist/components/core/kanban/SolidKanbanView.tsx +8 -7
  78. package/dist/components/core/list/SolidListView.d.ts +18 -10
  79. package/dist/components/core/list/SolidListView.d.ts.map +1 -1
  80. package/dist/components/core/list/SolidListView.js +176 -177
  81. package/dist/components/core/list/SolidListView.js.map +1 -1
  82. package/dist/components/core/list/SolidListView.tsx +130 -143
  83. package/dist/components/core/list/SolidListViewConfigure.d.ts +7 -0
  84. package/dist/components/core/list/SolidListViewConfigure.d.ts.map +1 -1
  85. package/dist/components/core/list/SolidListViewConfigure.js +6 -5
  86. package/dist/components/core/list/SolidListViewConfigure.js.map +1 -1
  87. package/dist/components/core/list/SolidListViewConfigure.tsx +21 -12
  88. package/dist/components/core/list/columns/SolidShortTextColumn.d.ts.map +1 -1
  89. package/dist/components/core/list/columns/SolidShortTextColumn.js +1 -37
  90. package/dist/components/core/list/columns/SolidShortTextColumn.js.map +1 -1
  91. package/dist/components/core/list/columns/SolidShortTextColumn.tsx +0 -41
  92. package/dist/components/core/list/columns/relations/SolidRelationManyToOneColumn.d.ts.map +1 -1
  93. package/dist/components/core/list/columns/relations/SolidRelationManyToOneColumn.js +9 -5
  94. package/dist/components/core/list/columns/relations/SolidRelationManyToOneColumn.js.map +1 -1
  95. package/dist/components/core/list/columns/relations/SolidRelationManyToOneColumn.tsx +14 -3
  96. package/dist/components/core/list/listViewRegistry.js.map +1 -1
  97. package/dist/components/core/list/listViewRegistry.ts +1 -2
  98. package/dist/components/core/tree/SolidTreeView.d.ts +38 -0
  99. package/dist/components/core/tree/SolidTreeView.d.ts.map +1 -0
  100. package/dist/components/core/tree/SolidTreeView.js +1179 -0
  101. package/dist/components/core/tree/SolidTreeView.js.map +1 -0
  102. package/dist/components/core/tree/SolidTreeView.tsx +1637 -0
  103. package/dist/components/core/tree/treeViewRegistry.d.ts +7 -0
  104. package/dist/components/core/tree/treeViewRegistry.d.ts.map +1 -0
  105. package/dist/components/core/tree/treeViewRegistry.js +17 -0
  106. package/dist/components/core/tree/treeViewRegistry.js.map +1 -0
  107. package/dist/components/core/tree/treeViewRegistry.ts +23 -0
  108. package/dist/components/core/users/CreateUser.d.ts.map +1 -1
  109. package/dist/components/core/users/CreateUser.js +19 -6
  110. package/dist/components/core/users/CreateUser.js.map +1 -1
  111. package/dist/components/core/users/CreateUser.tsx +39 -0
  112. package/dist/helpers/helpers.d.ts +2 -0
  113. package/dist/helpers/helpers.d.ts.map +1 -1
  114. package/dist/helpers/helpers.js +3 -1
  115. package/dist/helpers/helpers.js.map +1 -1
  116. package/dist/helpers/helpers.ts +4 -1
  117. package/dist/helpers/registry.d.ts.map +1 -1
  118. package/dist/helpers/registry.js +5 -1
  119. package/dist/helpers/registry.js.map +1 -1
  120. package/dist/helpers/registry.ts +7 -2
  121. package/dist/index.d.ts +3 -1
  122. package/dist/index.d.ts.map +1 -1
  123. package/dist/index.js +2 -0
  124. package/dist/index.js.map +1 -1
  125. package/dist/index.ts +6 -1
  126. package/dist/resources/globals.css +32 -4
  127. package/dist/routes/pages/admin/core/ListPage.d.ts.map +1 -1
  128. package/dist/routes/pages/admin/core/ListPage.js +2 -2
  129. package/dist/routes/pages/admin/core/ListPage.js.map +1 -1
  130. package/dist/routes/pages/admin/core/ListPage.tsx +3 -2
  131. package/dist/routes/pages/admin/core/ModuleHomePage.d.ts.map +1 -1
  132. package/dist/routes/pages/admin/core/ModuleHomePage.js +4 -15
  133. package/dist/routes/pages/admin/core/ModuleHomePage.js.map +1 -1
  134. package/dist/routes/pages/admin/core/ModuleHomePage.tsx +4 -3
  135. package/dist/routes/pages/admin/core/TreePage.d.ts +2 -0
  136. package/dist/routes/pages/admin/core/TreePage.d.ts.map +1 -0
  137. package/dist/routes/pages/admin/core/TreePage.js +37 -0
  138. package/dist/routes/pages/admin/core/TreePage.js.map +1 -0
  139. package/dist/routes/pages/admin/core/TreePage.tsx +30 -0
  140. package/dist/routes/solidRoutes.d.ts.map +1 -1
  141. package/dist/routes/solidRoutes.js +2 -0
  142. package/dist/routes/solidRoutes.js.map +1 -1
  143. package/dist/routes/solidRoutes.tsx +3 -1
  144. package/dist/routes/types.d.ts +1 -1
  145. package/dist/routes/types.d.ts.map +1 -1
  146. package/dist/routes/types.js.map +1 -1
  147. package/dist/routes/types.ts +1 -0
  148. package/dist/types/index.d.ts +8 -2
  149. package/dist/types/solid-core.d.ts +40 -0
  150. package/package.json +1 -1
@@ -0,0 +1,1179 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
13
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
14
+ return new (P || (P = Promise))(function (resolve, reject) {
15
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
16
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
17
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
18
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
19
+ });
20
+ };
21
+ var __generator = (this && this.__generator) || function (thisArg, body) {
22
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
23
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
24
+ function verb(n) { return function (v) { return step([n, v]); }; }
25
+ function step(op) {
26
+ if (f) throw new TypeError("Generator is already executing.");
27
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
28
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
29
+ if (y = 0, t) op = [op[0] & 2, t.value];
30
+ switch (op[0]) {
31
+ case 0: case 1: t = op; break;
32
+ case 4: _.label++; return { value: op[1], done: false };
33
+ case 5: _.label++; y = op[1]; op = [0]; continue;
34
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
35
+ default:
36
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
37
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
38
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
39
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
40
+ if (t[2]) _.ops.pop();
41
+ _.trys.pop(); continue;
42
+ }
43
+ op = body.call(thisArg, _);
44
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
45
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
46
+ }
47
+ };
48
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
49
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
50
+ if (ar || !(i in from)) {
51
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
52
+ ar[i] = from[i];
53
+ }
54
+ }
55
+ return to.concat(ar || Array.prototype.slice.call(from));
56
+ };
57
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
58
+ import React, { forwardRef, useEffect, useImperativeHandle, useMemo, useRef, useState, } from "react";
59
+ import { Toast } from "primereact/toast";
60
+ import { useDispatch, useSelector } from "react-redux";
61
+ import { showNavbar, toggleNavbar } from "../../../redux/features/navbarSlice";
62
+ import { useGetSolidViewLayoutQuery } from "../../../redux/api/solidViewApi";
63
+ import qs from "qs";
64
+ import { useSearchParams } from "../../../hooks/useSearchParams";
65
+ import { SolidGlobalSearchElement } from "../common/SolidGlobalSearchElement";
66
+ import { Button } from "primereact/button";
67
+ import { permissionExpression } from "../../../helpers/permissions";
68
+ import { SolidCreateButton } from "../common/SolidCreateButton";
69
+ import { Dialog } from "primereact/dialog";
70
+ import { createSolidEntityApi } from "../../../redux/api/solidEntityApi";
71
+ import { TreeTable } from "primereact/treetable";
72
+ import { Dropdown } from "primereact/dropdown";
73
+ import { Column } from "primereact/column";
74
+ import { SolidListViewColumn } from "../list/SolidListViewColumn";
75
+ import { hasAnyRole } from "../../../helpers/rolesHelper";
76
+ import { useSession } from "../../../hooks/useSession";
77
+ import { useLazyCheckIfPermissionExistsQuery } from "../../../redux/api/userApi";
78
+ import { SolidListViewConfigure } from "../list/SolidListViewConfigure";
79
+ import CompactImage from '../../../resources/images/layout/images/compact.png';
80
+ import CozyImage from '../../../resources/images/layout/images/cozy.png';
81
+ import ComfortableImage from '../../../resources/images/layout/images/comfortable.png';
82
+ import { Divider } from "primereact/divider";
83
+ import { ERROR_MESSAGES } from "../../../constants/error-messages";
84
+ import { getFilterObjectFromLocalStorage, setFilterObjectToLocalStorage } from "../list/SolidListView";
85
+ import { HomePageModuleSvg } from "../../Svg/HomePageModuleSvg";
86
+ import { getExtensionFunction } from "../../../helpers/registry";
87
+ import { Tooltip } from "primereact/tooltip";
88
+ var DEFAULT_PAGE_SIZE = 25;
89
+ // ─── Component ────────────────────────────────────────────────────────────────
90
+ export var SolidTreeView = forwardRef(function (params, ref) {
91
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w;
92
+ var toast = useRef(null);
93
+ var dispatch = useDispatch();
94
+ var visibleNavbar = useSelector(function (state) { var _a; return (_a = state.navbarState) === null || _a === void 0 ? void 0 : _a.visibleNavbar; });
95
+ var searchParams = useSearchParams();
96
+ var session = useSession();
97
+ var user = (_a = session === null || session === void 0 ? void 0 : session.data) === null || _a === void 0 ? void 0 : _a.user;
98
+ var solidGlobalSearchElementRef = useRef(null);
99
+ var _x = useState(false), showSaveFilterPopup = _x[0], setShowSaveFilterPopup = _x[1];
100
+ var _y = useState(false), showGlobalSearchElement = _y[0], setShowGlobalSearchElement = _y[1];
101
+ var _z = useState([]), toPopulate = _z[0], setToPopulate = _z[1];
102
+ var _0 = useState([]), toPopulateMedia = _0[0], setToPopulateMedia = _0[1];
103
+ var _1 = useState([]), actionsAllowed = _1[0], setActionsAllowed = _1[1];
104
+ var _2 = useState(), createButtonUrl = _2[0], setCreateButtonUrl = _2[1];
105
+ var _3 = useState({}), createActionQueryParams = _3[0], setCreateActionQueryParams = _3[1];
106
+ var _4 = useState([]), selectedRecords = _4[0], setSelectedRecords = _4[1];
107
+ var _5 = useState([]), selectedRecoverRecords = _5[0], setSelectedRecoverRecords = _5[1];
108
+ var _6 = useState([]), groupingRules = _6[0], setGroupingRules = _6[1];
109
+ var _7 = useState([]), aggregationRules = _7[0], setAggregationRules = _7[1];
110
+ var _8 = useState([]), treeNodes = _8[0], setTreeNodes = _8[1];
111
+ var _9 = useState({}), selectedNodeKeys = _9[0], setSelectedNodeKeys = _9[1];
112
+ var _10 = useState({}), expandedKeys = _10[0], setExpandedKeys = _10[1];
113
+ var _11 = useState(false), treeLoading = _11[0], setTreeLoading = _11[1];
114
+ var _12 = useState(""), sortField = _12[0], setSortField = _12[1];
115
+ var _13 = useState(0), sortOrder = _13[0], setSortOrder = _13[1];
116
+ var _14 = useState([10, 25, 50]), pageSizeOptions = _14[0], setPageSizeOptions = _14[1];
117
+ var _15 = useState(25), globalLimit = _15[0], setGlobalLimit = _15[1];
118
+ var _16 = useState(false), isDeleteRecordsDialogVisible = _16[0], setDeleteRecordsDialogVisible = _16[1];
119
+ var _17 = useState(false), isRecoverDialogVisible = _17[0], setRecoverDialogVisible = _17[1];
120
+ var _18 = useState(false), showArchived = _18[0], setShowArchived = _18[1];
121
+ var sizeOptions = [
122
+ { label: "Compact", value: "small", image: CompactImage },
123
+ { label: "Cozy", value: "normal", image: CozyImage },
124
+ { label: "Comfortable", value: "large", image: ComfortableImage },
125
+ ];
126
+ var _19 = useState(sizeOptions[1].value), size = _19[0], setSize = _19[1];
127
+ var _20 = useState([]), viewModes = _20[0], setViewModes = _20[1];
128
+ // ── Pagination state ──────────────────────────────────────────────────────
129
+ /**
130
+ * Key: "root" for top-level group list; node.key (string) for any other node.
131
+ * Value: { offset, limit, total }
132
+ */
133
+ var _21 = useState({}), paginationMap = _21[0], setPaginationMap = _21[1];
134
+ var getPagination = function (key) { var _a; return (_a = paginationMap[key]) !== null && _a !== void 0 ? _a : { offset: 0, limit: globalLimit, total: 0 }; };
135
+ var setPagination = function (key, entry) {
136
+ return setPaginationMap(function (prev) {
137
+ var _a;
138
+ return (__assign(__assign({}, prev), (_a = {}, _a[key] = __assign(__assign({}, getPagination(key)), entry), _a)));
139
+ });
140
+ };
141
+ // ── Pagination helpers ────────────────────────────────────────────────────
142
+ var hasPrev = function (key) { return getPagination(key).offset > 0; };
143
+ var hasNext = function (key) {
144
+ var _a = getPagination(key), offset = _a.offset, limit = _a.limit, total = _a.total;
145
+ // total here is the count of records returned by the last fetch for that node.
146
+ // We consider "has next" when we received a full page (i.e. there might be more).
147
+ return offset + limit < total;
148
+ };
149
+ // ─────────────────────────────────────────────────────────────────────────
150
+ var menuItemId = searchParams.get("menuItemId");
151
+ var menuItemName = searchParams.get("menuItemName");
152
+ var actionId = searchParams.get("actionId");
153
+ var actionName = searchParams.get("actionName");
154
+ var entityApi = createSolidEntityApi(params.modelName);
155
+ var useCreateSolidEntityMutation = entityApi.useCreateSolidEntityMutation, useDeleteMultipleSolidEntitiesMutation = entityApi.useDeleteMultipleSolidEntitiesMutation, useDeleteSolidEntityMutation = entityApi.useDeleteSolidEntityMutation, useGetSolidEntitiesQuery = entityApi.useGetSolidEntitiesQuery, useGetSolidEntityByIdQuery = entityApi.useGetSolidEntityByIdQuery, useLazyGetSolidEntitiesQuery = entityApi.useLazyGetSolidEntitiesQuery, useLazyGetSolidEntityByIdQuery = entityApi.useLazyGetSolidEntityByIdQuery, usePrefetch = entityApi.usePrefetch, useUpdateSolidEntityMutation = entityApi.useUpdateSolidEntityMutation, useRecoverSolidEntityByIdQuery = entityApi.useRecoverSolidEntityByIdQuery, useLazyRecoverSolidEntityByIdQuery = entityApi.useLazyRecoverSolidEntityByIdQuery, useRecoverSolidEntityMutation = entityApi.useRecoverSolidEntityMutation;
156
+ var triggerGetSolidEntities = useLazyGetSolidEntitiesQuery()[0];
157
+ var _22 = useLazyRecoverSolidEntityByIdQuery(), triggerRecoverSolidEntitiesById = _22[0], _23 = _22[1], recoverByIdData = _23.data, recoverByIdIsLoading = _23.isLoading, recoverByIdError = _23.error, recoverByIdIsError = _23.isError, recoverByIdIsSuccess = _23.isSuccess;
158
+ var _24 = useRecoverSolidEntityMutation(), triggerRecoverSolidEntities = _24[0], _25 = _24[1], recoverByData = _25.data, recoverByIsLoading = _25.isLoading, recoverError = _25.error, recoverIsError = _25.isError, recoverByIsSuccess = _25.isSuccess;
159
+ var treeViewMetaDataQs = qs.stringify({
160
+ modelName: params.modelName,
161
+ moduleName: params.moduleName,
162
+ viewType: "list",
163
+ menuItemId: menuItemId,
164
+ menuItemName: menuItemName,
165
+ actionId: actionId,
166
+ actionName: actionName,
167
+ }, { encodeValuesOnly: true });
168
+ var solidTreeViewMetaData = useGetSolidViewLayoutQuery(treeViewMetaDataQs).data;
169
+ var solidTreeViewLayout = params.customLayout || ((_c = (_b = solidTreeViewMetaData === null || solidTreeViewMetaData === void 0 ? void 0 : solidTreeViewMetaData.data) === null || _b === void 0 ? void 0 : _b.solidView) === null || _c === void 0 ? void 0 : _c.layout);
170
+ var triggerCheckIfPermissionExists = useLazyCheckIfPermissionExistsQuery()[0];
171
+ useEffect(function () {
172
+ var fetchPermissions = function () { return __awaiter(void 0, void 0, void 0, function () {
173
+ var permissionNames, queryData, queryString, response;
174
+ return __generator(this, function (_a) {
175
+ switch (_a.label) {
176
+ case 0:
177
+ if (!params.modelName) return [3 /*break*/, 2];
178
+ permissionNames = [
179
+ permissionExpression(params.modelName, 'create'),
180
+ permissionExpression(params.modelName, 'delete'),
181
+ permissionExpression(params.modelName, 'update'),
182
+ permissionExpression(params.modelName, 'deleteMany'),
183
+ permissionExpression(params.modelName, 'findOne'),
184
+ permissionExpression(params.modelName, 'findMany'),
185
+ permissionExpression(params.modelName, 'insertMany'),
186
+ permissionExpression('importTransaction', 'create'),
187
+ permissionExpression('exportTransaction', 'create'),
188
+ permissionExpression('userViewMetadata', 'create'),
189
+ permissionExpression('savedFilters', 'create')
190
+ ];
191
+ queryData = {
192
+ permissionNames: permissionNames,
193
+ };
194
+ queryString = qs.stringify(queryData, {
195
+ encodeValuesOnly: true,
196
+ });
197
+ return [4 /*yield*/, triggerCheckIfPermissionExists(queryString)];
198
+ case 1:
199
+ response = _a.sent();
200
+ setActionsAllowed(response.data.data);
201
+ _a.label = 2;
202
+ case 2: return [2 /*return*/];
203
+ }
204
+ });
205
+ }); };
206
+ fetchPermissions();
207
+ }, [params.modelName]);
208
+ var deleteManySolidEntities = useDeleteMultipleSolidEntitiesMutation()[0];
209
+ var treeViewTitle = (_e = (_d = solidTreeViewMetaData === null || solidTreeViewMetaData === void 0 ? void 0 : solidTreeViewMetaData.data) === null || _d === void 0 ? void 0 : _d.solidView) === null || _e === void 0 ? void 0 : _e.displayName;
210
+ var toggleBothSidebars = function () {
211
+ if (visibleNavbar) {
212
+ dispatch(toggleNavbar());
213
+ }
214
+ else {
215
+ dispatch(showNavbar());
216
+ }
217
+ };
218
+ var _26 = useState(null), filters = _26[0], setFilters = _26[1];
219
+ var _27 = useState(null), filterPredicates = _27[0], setFilterPredicates = _27[1];
220
+ var latestFiltersRef = useRef(filters);
221
+ var latestFilterPredicatesRef = useRef(filterPredicates);
222
+ var activeGroupingRules = useMemo(function () { return (groupingRules || []).filter(function (rule) { return !!(rule === null || rule === void 0 ? void 0 : rule.fieldName); }); }, [groupingRules]);
223
+ useEffect(function () { latestFiltersRef.current = filters; }, [filters]);
224
+ useEffect(function () { latestFilterPredicatesRef.current = filterPredicates; }, [filterPredicates]);
225
+ useEffect(function () {
226
+ var _a;
227
+ if (solidTreeViewMetaData) {
228
+ setViewModes((_a = solidTreeViewMetaData === null || solidTreeViewMetaData === void 0 ? void 0 : solidTreeViewMetaData.data) === null || _a === void 0 ? void 0 : _a.viewModes);
229
+ }
230
+ }, [solidTreeViewMetaData]);
231
+ useEffect(function () {
232
+ var _a, _b, _c, _d, _e, _f;
233
+ var solidFieldsMetadata = (_a = solidTreeViewMetaData === null || solidTreeViewMetaData === void 0 ? void 0 : solidTreeViewMetaData.data) === null || _a === void 0 ? void 0 : _a.solidFieldsMetadata;
234
+ var queryObject = getFilterObjectFromLocalStorage();
235
+ var layoutPageSizeOptions = (_e = (_d = (_c = (_b = solidTreeViewMetaData === null || solidTreeViewMetaData === void 0 ? void 0 : solidTreeViewMetaData.data) === null || _b === void 0 ? void 0 : _b.solidView) === null || _c === void 0 ? void 0 : _c.layout) === null || _d === void 0 ? void 0 : _d.attrs) === null || _e === void 0 ? void 0 : _e.pageSizeOptions;
236
+ var currentOptions = (Array.isArray(layoutPageSizeOptions) && layoutPageSizeOptions.length > 0)
237
+ ? layoutPageSizeOptions
238
+ : [15, 25, 50];
239
+ setPageSizeOptions(currentOptions);
240
+ if (queryObject) {
241
+ setToPopulate(queryObject.populate || []);
242
+ setToPopulateMedia(queryObject.populateMedia || []);
243
+ setSortField(queryObject.sortField || "");
244
+ setSortOrder(queryObject.sortOrder || 0);
245
+ var savedLimit = queryObject.limit;
246
+ if (savedLimit && currentOptions.includes(savedLimit)) {
247
+ setGlobalLimit(savedLimit);
248
+ }
249
+ else {
250
+ setGlobalLimit(currentOptions[0]);
251
+ }
252
+ }
253
+ else {
254
+ if (!solidTreeViewLayout || !solidFieldsMetadata) {
255
+ setToPopulate([]);
256
+ setToPopulateMedia([]);
257
+ setGlobalLimit(currentOptions[0]);
258
+ return;
259
+ }
260
+ var nextPopulate = [];
261
+ var nextPopulateMedia = [];
262
+ for (var _i = 0, _g = (solidTreeViewLayout === null || solidTreeViewLayout === void 0 ? void 0 : solidTreeViewLayout.children) || []; _i < _g.length; _i++) {
263
+ var column = _g[_i];
264
+ var fieldMetadata = solidFieldsMetadata === null || solidFieldsMetadata === void 0 ? void 0 : solidFieldsMetadata[(_f = column === null || column === void 0 ? void 0 : column.attrs) === null || _f === void 0 ? void 0 : _f.name];
265
+ if (!fieldMetadata)
266
+ continue;
267
+ if (fieldMetadata.type === "relation" && fieldMetadata.relationType === "many-to-one") {
268
+ if (!nextPopulate.includes(fieldMetadata.name))
269
+ nextPopulate.push(fieldMetadata.name);
270
+ }
271
+ if (fieldMetadata.type === "mediaSingle" || fieldMetadata.type === "mediaMultiple") {
272
+ if (!nextPopulateMedia.includes(fieldMetadata.name))
273
+ nextPopulateMedia.push(fieldMetadata.name);
274
+ }
275
+ }
276
+ setToPopulate(nextPopulate);
277
+ setToPopulateMedia(nextPopulateMedia);
278
+ setGlobalLimit(currentOptions[0]);
279
+ }
280
+ }, [solidTreeViewLayout, solidTreeViewMetaData]);
281
+ useEffect(function () {
282
+ // event invocation is not tested
283
+ if (solidTreeViewMetaData && (solidTreeViewMetaData === null || solidTreeViewMetaData === void 0 ? void 0 : solidTreeViewMetaData.data)) {
284
+ var handleDynamicFunction = function () { return __awaiter(void 0, void 0, void 0, function () {
285
+ var dynamicHeader, dynamicExtensionFunction, treeLayout, treeViewNodes, event, updatedListData;
286
+ var _a, _b, _c, _d, _e, _f, _g;
287
+ return __generator(this, function (_h) {
288
+ switch (_h.label) {
289
+ case 0:
290
+ dynamicHeader = (_c = (_b = (_a = solidTreeViewMetaData === null || solidTreeViewMetaData === void 0 ? void 0 : solidTreeViewMetaData.data) === null || _a === void 0 ? void 0 : _a.solidView) === null || _b === void 0 ? void 0 : _b.layout) === null || _c === void 0 ? void 0 : _c.onTreeLoad;
291
+ dynamicExtensionFunction = null;
292
+ treeLayout = (_e = (_d = solidTreeViewMetaData === null || solidTreeViewMetaData === void 0 ? void 0 : solidTreeViewMetaData.data) === null || _d === void 0 ? void 0 : _d.solidView) === null || _e === void 0 ? void 0 : _e.layout;
293
+ treeViewNodes = treeNodes;
294
+ if (params.customLayout) {
295
+ treeLayout = params.customLayout;
296
+ }
297
+ event = {
298
+ fieldsMetadata: (_f = solidTreeViewMetaData === null || solidTreeViewMetaData === void 0 ? void 0 : solidTreeViewMetaData.data) === null || _f === void 0 ? void 0 : _f.solidFieldsMetadata,
299
+ type: "onTreeLoad",
300
+ nodes: treeViewNodes,
301
+ viewMetadata: (_g = solidTreeViewMetaData === null || solidTreeViewMetaData === void 0 ? void 0 : solidTreeViewMetaData.data) === null || _g === void 0 ? void 0 : _g.solidView,
302
+ treeViewLayout: treeLayout,
303
+ queryParams: {
304
+ menuItemId: menuItemId,
305
+ menuItemName: menuItemName,
306
+ actionId: actionId,
307
+ actionName: actionName,
308
+ },
309
+ user: user,
310
+ session: session.data,
311
+ params: params
312
+ };
313
+ if (!dynamicHeader) return [3 /*break*/, 3];
314
+ dynamicExtensionFunction = getExtensionFunction(dynamicHeader);
315
+ if (!dynamicExtensionFunction) return [3 /*break*/, 2];
316
+ return [4 /*yield*/, dynamicExtensionFunction(event)];
317
+ case 1:
318
+ updatedListData = _h.sent();
319
+ if (updatedListData && (updatedListData === null || updatedListData === void 0 ? void 0 : updatedListData.dataChanged) && (updatedListData === null || updatedListData === void 0 ? void 0 : updatedListData.newNodes)) {
320
+ treeViewNodes = updatedListData.newNodes;
321
+ }
322
+ if (updatedListData && (updatedListData === null || updatedListData === void 0 ? void 0 : updatedListData.layoutChanged) && (updatedListData === null || updatedListData === void 0 ? void 0 : updatedListData.newLayout)) {
323
+ treeLayout = updatedListData.newLayout;
324
+ }
325
+ _h.label = 2;
326
+ case 2:
327
+ if (treeViewNodes) {
328
+ setTreeNodes(treeViewNodes);
329
+ }
330
+ if (treeLayout) {
331
+ solidTreeViewLayout(treeLayout);
332
+ }
333
+ _h.label = 3;
334
+ case 3: return [2 /*return*/];
335
+ }
336
+ });
337
+ }); };
338
+ handleDynamicFunction();
339
+ }
340
+ }, [treeNodes]);
341
+ // ─── Field / filter helpers ───────────────────────────────────────────────
342
+ var getFieldMetadata = function (fieldName) { var _a, _b; return (_b = (_a = solidTreeViewMetaData === null || solidTreeViewMetaData === void 0 ? void 0 : solidTreeViewMetaData.data) === null || _a === void 0 ? void 0 : _a.solidFieldsMetadata) === null || _b === void 0 ? void 0 : _b[fieldName]; };
343
+ var getResolvedGroupField = function (fieldName) {
344
+ var _a, _b;
345
+ var fieldMetadata = getFieldMetadata(fieldName);
346
+ if ((fieldMetadata === null || fieldMetadata === void 0 ? void 0 : fieldMetadata.type) === "relation" &&
347
+ (fieldMetadata === null || fieldMetadata === void 0 ? void 0 : fieldMetadata.relationType) === "many-to-one" &&
348
+ ((_b = (_a = fieldMetadata === null || fieldMetadata === void 0 ? void 0 : fieldMetadata.relationModel) === null || _a === void 0 ? void 0 : _a.userKeyField) === null || _b === void 0 ? void 0 : _b.name)) {
349
+ return "".concat(fieldName, ".").concat(fieldMetadata.relationModel.userKeyField.name);
350
+ }
351
+ return fieldName;
352
+ };
353
+ var toGroupByParam = function (rule) {
354
+ var fieldName = String(rule.fieldName);
355
+ var resolvedField = getResolvedGroupField(fieldName);
356
+ if (!rule.dateGrouping)
357
+ return resolvedField;
358
+ if (rule.dateGrouping === "YYYY")
359
+ return "".concat(resolvedField, ":year:YYYY");
360
+ if (rule.dateGrouping === "MMM")
361
+ return "".concat(resolvedField, ":month:MMM");
362
+ if (rule.dateGrouping === "YYYY-MM")
363
+ return "".concat(resolvedField, ":month:YYYY-MM");
364
+ if (rule.dateGrouping === "YYYY-MM-DD")
365
+ return "".concat(resolvedField, ":day:YYYY-MM-DD");
366
+ return resolvedField;
367
+ };
368
+ // const dateTimeImplicitFilter = (rule: GroupingRule) => {
369
+ // const fieldMetadata = getFieldMetadata(String(rule.fieldName));
370
+ // return !!rule.dateGrouping && ["date", "datetime"].includes(fieldMetadata?.type);
371
+ // };
372
+ var getDateGranularity = function (rule) {
373
+ var fieldMetadata = getFieldMetadata(String(rule.fieldName));
374
+ if (rule.dateGrouping && ["date", "datetime"].includes(fieldMetadata === null || fieldMetadata === void 0 ? void 0 : fieldMetadata.type)) {
375
+ switch (rule.dateGrouping) {
376
+ case "YYYY":
377
+ return "year";
378
+ case "MMM":
379
+ return "month";
380
+ case "YYYY-MM":
381
+ return "month";
382
+ case "YYYY-MM-DD":
383
+ return "day";
384
+ }
385
+ }
386
+ return null;
387
+ };
388
+ var buildNestedEqCondition = function (fieldPath, value, dateGranularity) {
389
+ var _a;
390
+ var parts = fieldPath.split(".").filter(Boolean);
391
+ if (parts.length === 0)
392
+ return {};
393
+ if (dateGranularity) {
394
+ return _a = {}, _a["".concat(parts[0], ":").concat(dateGranularity)] = { $eq: value }, _a;
395
+ }
396
+ return parts.reduceRight(function (acc, part) {
397
+ var _a;
398
+ return (_a = {}, _a[part] = acc, _a);
399
+ }, { $eq: value });
400
+ };
401
+ var buildImplicitFiltersFromPath = function (groupPath) {
402
+ return groupPath
403
+ // .filter((item) => !item.skipImplicitFilter)
404
+ .map(function (item) { return buildNestedEqCondition(item.filterField, item.value, item.dateGranularity); });
405
+ };
406
+ var mergeFiltersWithImplicit = function (implicitFilters) {
407
+ var _a;
408
+ var baseFilters = latestFiltersRef.current;
409
+ var hasBaseFilters = baseFilters && Object.keys(baseFilters).length > 0;
410
+ if (!hasBaseFilters && implicitFilters.length === 0)
411
+ return null;
412
+ var merged = hasBaseFilters ? structuredClone(baseFilters) : { $and: [] };
413
+ if (implicitFilters.length === 0)
414
+ return merged;
415
+ if (Array.isArray(merged.$and)) {
416
+ (_a = merged.$and).push.apply(_a, implicitFilters);
417
+ return merged;
418
+ }
419
+ return { $and: __spreadArray([merged], implicitFilters, true) };
420
+ };
421
+ var buildAggregates = function () {
422
+ var derivedAggregates = (aggregationRules || [])
423
+ .filter(function (rule) { return !!(rule === null || rule === void 0 ? void 0 : rule.fieldName) && !!(rule === null || rule === void 0 ? void 0 : rule.operator); })
424
+ .map(function (rule) { return "".concat(rule.fieldName, ":").concat(rule.operator); });
425
+ return derivedAggregates.length > 0 ? derivedAggregates : ["id:count"];
426
+ };
427
+ var extractGroupCount = function (groupMeta) {
428
+ if ((groupMeta === null || groupMeta === void 0 ? void 0 : groupMeta.id_count) !== undefined)
429
+ return groupMeta.id_count;
430
+ var countKey = Object.keys(groupMeta || {}).find(function (key) { return key.endsWith("_count"); });
431
+ if (countKey)
432
+ return groupMeta[countKey];
433
+ return undefined;
434
+ };
435
+ var normalizeRecord = function (record) {
436
+ var newRecord = __assign({}, record);
437
+ Object.entries(newRecord).forEach(function (_a) {
438
+ var key = _a[0], value = _a[1];
439
+ if (typeof value === "string") {
440
+ try {
441
+ var parsed = JSON.parse(value);
442
+ if (Array.isArray(parsed))
443
+ newRecord[key] = parsed.join(", ");
444
+ }
445
+ catch (_b) {
446
+ if (/^\[.*\]$/.test(value))
447
+ newRecord[key] = value.replace(/[\[\]"]+/g, "");
448
+ }
449
+ }
450
+ });
451
+ return newRecord;
452
+ };
453
+ var formatHeader = function (key) {
454
+ return key
455
+ .split("_")
456
+ .map(function (word) { return word.charAt(0).toUpperCase() + word.slice(1).toLowerCase(); })
457
+ .join(" ");
458
+ };
459
+ var getSortParam = function (ruleIndex) {
460
+ if (!sortField || !sortOrder)
461
+ return null;
462
+ var dir = sortOrder === 1 ? "ASC" : "DESC";
463
+ // 1. Sorting by the "Group" column
464
+ if (sortField === "__group") {
465
+ var rule = activeGroupingRules[ruleIndex];
466
+ if (!rule)
467
+ return null;
468
+ // At this level, sort by the field we are grouping by
469
+ return "".concat(toGroupByParam(rule), ":").concat(dir);
470
+ }
471
+ // 2. Sorting by an aggregate column
472
+ var isAggregate = aggregationRules.some(function (rule) {
473
+ var responseKey = "".concat(rule.fieldName, ":").concat(rule.operator);
474
+ return responseKey === sortField || "".concat(rule.fieldName, "_").concat(rule.operator) === sortField;
475
+ });
476
+ if (isAggregate) {
477
+ var _a = sortField.includes(":") ? sortField.split(":") : sortField.split("_"), field = _a[0], op = _a[1];
478
+ // For leaf level: only field:DIR
479
+ if (ruleIndex >= activeGroupingRules.length) {
480
+ return "".concat(field, ":").concat(dir);
481
+ }
482
+ // For group levels: field:operator:DIR
483
+ return "".concat(field, ":").concat(op, ":").concat(dir);
484
+ }
485
+ // 3. Sorting by a leaf column (regular record field)
486
+ return "".concat(sortField, ":").concat(dir);
487
+ };
488
+ // ─── API fetch helpers (now accept offset + limit) ────────────────────────
489
+ var runGroupedQuery = function (ruleIndex, groupPath, offset, limit) { return __awaiter(void 0, void 0, void 0, function () {
490
+ var rule, queryData, sortParam, implicitFilters, mergedFilters, dynamicHeader, dynamicExtensionFunction, event, updatedListData, err_1, queryString, response;
491
+ var _a, _b, _c, _d, _e;
492
+ return __generator(this, function (_f) {
493
+ switch (_f.label) {
494
+ case 0:
495
+ rule = activeGroupingRules[ruleIndex];
496
+ if (!(rule === null || rule === void 0 ? void 0 : rule.fieldName))
497
+ return [2 /*return*/, { response: null }];
498
+ queryData = {
499
+ offset: offset,
500
+ limit: limit,
501
+ groupBy: [toGroupByParam(rule)],
502
+ aggregates: buildAggregates(),
503
+ };
504
+ sortParam = getSortParam(ruleIndex);
505
+ if (sortParam)
506
+ queryData.sort = [sortParam];
507
+ implicitFilters = buildImplicitFiltersFromPath(groupPath);
508
+ mergedFilters = mergeFiltersWithImplicit(implicitFilters);
509
+ if (mergedFilters)
510
+ queryData.filters = mergedFilters;
511
+ dynamicHeader = (_c = (_b = (_a = solidTreeViewMetaData === null || solidTreeViewMetaData === void 0 ? void 0 : solidTreeViewMetaData.data) === null || _a === void 0 ? void 0 : _a.solidView) === null || _b === void 0 ? void 0 : _b.layout) === null || _c === void 0 ? void 0 : _c.onBeforeTreeDataLoad;
512
+ dynamicExtensionFunction = null;
513
+ event = {
514
+ type: "onBeforeTreeDataLoad",
515
+ level: ruleIndex,
516
+ levelFieldName: rule.fieldName,
517
+ fieldsMetadata: (_d = solidTreeViewMetaData === null || solidTreeViewMetaData === void 0 ? void 0 : solidTreeViewMetaData.data) === null || _d === void 0 ? void 0 : _d.solidFieldsMetadata,
518
+ viewMetadata: (_e = solidTreeViewMetaData === null || solidTreeViewMetaData === void 0 ? void 0 : solidTreeViewMetaData.data) === null || _e === void 0 ? void 0 : _e.solidView,
519
+ treeViewLayout: solidTreeViewMetaData === null || solidTreeViewMetaData === void 0 ? void 0 : solidTreeViewMetaData.data.solidView.layout,
520
+ filter: structuredClone(queryData),
521
+ queryParams: {
522
+ menuItemId: menuItemId,
523
+ menuItemName: menuItemName,
524
+ actionId: actionId,
525
+ actionName: actionName,
526
+ },
527
+ user: user,
528
+ session: session.data,
529
+ params: params
530
+ };
531
+ if (!dynamicHeader) return [3 /*break*/, 4];
532
+ dynamicExtensionFunction = getExtensionFunction(dynamicHeader);
533
+ if (!dynamicExtensionFunction) return [3 /*break*/, 4];
534
+ _f.label = 1;
535
+ case 1:
536
+ _f.trys.push([1, 3, , 4]);
537
+ return [4 /*yield*/, dynamicExtensionFunction(event)];
538
+ case 2:
539
+ updatedListData = _f.sent();
540
+ if (updatedListData && (updatedListData === null || updatedListData === void 0 ? void 0 : updatedListData.filterApplied) && (updatedListData === null || updatedListData === void 0 ? void 0 : updatedListData.newFilter)) {
541
+ queryData = updatedListData === null || updatedListData === void 0 ? void 0 : updatedListData.newFilter;
542
+ }
543
+ return [3 /*break*/, 4];
544
+ case 3:
545
+ err_1 = _f.sent();
546
+ console.error("Error executing onBeforeTreeDataLoad extension:", err_1);
547
+ return [3 /*break*/, 4];
548
+ case 4:
549
+ queryString = qs.stringify(queryData, { encodeValuesOnly: true });
550
+ return [4 /*yield*/, triggerGetSolidEntities(queryString).unwrap()];
551
+ case 5:
552
+ response = _f.sent();
553
+ return [2 /*return*/, { queryData: queryData, queryString: queryString, response: response }];
554
+ }
555
+ });
556
+ }); };
557
+ var runLeafQuery = function (groupPath, offset, limit) { return __awaiter(void 0, void 0, void 0, function () {
558
+ var queryData, implicitFilters, mergedFilters, dynamicHeader, dynamicExtensionFunction, event, updatedListData, err_2, queryString, response;
559
+ var _a, _b, _c, _d, _e;
560
+ return __generator(this, function (_f) {
561
+ switch (_f.label) {
562
+ case 0:
563
+ queryData = {
564
+ offset: offset,
565
+ limit: limit,
566
+ sort: getSortParam(groupPath.length) ? [getSortParam(groupPath.length)] : ["id:desc"],
567
+ populate: toPopulate,
568
+ populateMedia: toPopulateMedia,
569
+ };
570
+ implicitFilters = buildImplicitFiltersFromPath(groupPath);
571
+ mergedFilters = mergeFiltersWithImplicit(implicitFilters);
572
+ if (mergedFilters)
573
+ queryData.filters = mergedFilters;
574
+ dynamicHeader = (_c = (_b = (_a = solidTreeViewMetaData === null || solidTreeViewMetaData === void 0 ? void 0 : solidTreeViewMetaData.data) === null || _a === void 0 ? void 0 : _a.solidView) === null || _b === void 0 ? void 0 : _b.layout) === null || _c === void 0 ? void 0 : _c.onBeforeTreeDataLoad;
575
+ dynamicExtensionFunction = null;
576
+ event = {
577
+ type: "onBeforeTreeDataLoad",
578
+ level: groupPath.length,
579
+ levelFieldName: groupPath[groupPath.length - 1].fieldName,
580
+ fieldsMetadata: (_d = solidTreeViewMetaData === null || solidTreeViewMetaData === void 0 ? void 0 : solidTreeViewMetaData.data) === null || _d === void 0 ? void 0 : _d.solidFieldsMetadata,
581
+ viewMetadata: (_e = solidTreeViewMetaData === null || solidTreeViewMetaData === void 0 ? void 0 : solidTreeViewMetaData.data) === null || _e === void 0 ? void 0 : _e.solidView,
582
+ treeViewLayout: solidTreeViewMetaData === null || solidTreeViewMetaData === void 0 ? void 0 : solidTreeViewMetaData.data.solidView.layout,
583
+ filter: structuredClone(queryData),
584
+ queryParams: {
585
+ menuItemId: menuItemId,
586
+ menuItemName: menuItemName,
587
+ actionId: actionId,
588
+ actionName: actionName,
589
+ },
590
+ user: user,
591
+ session: session.data,
592
+ params: params
593
+ };
594
+ if (!dynamicHeader) return [3 /*break*/, 4];
595
+ dynamicExtensionFunction = getExtensionFunction(dynamicHeader);
596
+ if (!dynamicExtensionFunction) return [3 /*break*/, 4];
597
+ _f.label = 1;
598
+ case 1:
599
+ _f.trys.push([1, 3, , 4]);
600
+ return [4 /*yield*/, dynamicExtensionFunction(event)];
601
+ case 2:
602
+ updatedListData = _f.sent();
603
+ if (updatedListData && (updatedListData === null || updatedListData === void 0 ? void 0 : updatedListData.filterApplied) && (updatedListData === null || updatedListData === void 0 ? void 0 : updatedListData.newFilter)) {
604
+ queryData = updatedListData === null || updatedListData === void 0 ? void 0 : updatedListData.newFilter;
605
+ }
606
+ return [3 /*break*/, 4];
607
+ case 3:
608
+ err_2 = _f.sent();
609
+ console.error("Error executing onBeforeTreeDataLoad extension:", err_2);
610
+ return [3 /*break*/, 4];
611
+ case 4:
612
+ queryString = qs.stringify(queryData, { encodeValuesOnly: true });
613
+ return [4 /*yield*/, triggerGetSolidEntities(queryString).unwrap()];
614
+ case 5:
615
+ response = _f.sent();
616
+ return [2 /*return*/, { queryData: queryData, queryString: queryString, response: response }];
617
+ }
618
+ });
619
+ }); };
620
+ // ─── Node builders ────────────────────────────────────────────────────────
621
+ var buildGroupNodes = function (groupMetaRows, ruleIndex, parentPath, parentKey) {
622
+ var rule = activeGroupingRules[ruleIndex];
623
+ if (!(rule === null || rule === void 0 ? void 0 : rule.fieldName))
624
+ return [];
625
+ var fieldName = String(rule.fieldName);
626
+ var filterField = getResolvedGroupField(fieldName);
627
+ // const dateGranularity = dateTimeImplicitFilter(rule);
628
+ var dateGranularity = getDateGranularity(rule);
629
+ return (groupMetaRows || []).map(function (groupMeta, index) {
630
+ var _a, _b;
631
+ var groupLabel = (_a = groupMeta === null || groupMeta === void 0 ? void 0 : groupMeta.groupName) !== null && _a !== void 0 ? _a : "(empty)";
632
+ var groupValue = (_b = groupMeta === null || groupMeta === void 0 ? void 0 : groupMeta.groupValue) !== null && _b !== void 0 ? _b : "(empty)";
633
+ var idCount = extractGroupCount(groupMeta);
634
+ var groupPath = __spreadArray(__spreadArray([], parentPath, true), [
635
+ { ruleIndex: ruleIndex, fieldName: fieldName, filterField: filterField, value: groupValue, dateGranularity: dateGranularity },
636
+ ], false);
637
+ return {
638
+ key: "".concat(parentKey, "-g-").concat(ruleIndex, "-").concat(index),
639
+ data: {
640
+ __treeMeta: {
641
+ nodeType: "group",
642
+ ruleIndex: ruleIndex,
643
+ groupLabel: groupLabel,
644
+ idCount: idCount,
645
+ aggregates: groupMeta,
646
+ groupPath: groupPath,
647
+ },
648
+ },
649
+ children: [],
650
+ leaf: false,
651
+ };
652
+ });
653
+ };
654
+ var buildRecordNodes = function (records, parentKey, groupPath) {
655
+ return (records || []).map(function (record, index) {
656
+ var _a;
657
+ var normalizedRecord = normalizeRecord(record);
658
+ return {
659
+ key: "".concat(parentKey, "-r-").concat((_a = record === null || record === void 0 ? void 0 : record.id) !== null && _a !== void 0 ? _a : index),
660
+ data: __assign(__assign({}, normalizedRecord), { __treeMeta: {
661
+ nodeType: "record",
662
+ ruleIndex: groupPath.length,
663
+ groupPath: groupPath,
664
+ } }),
665
+ leaf: true,
666
+ };
667
+ });
668
+ };
669
+ var updateNodeChildren = function (nodes, targetKey, children) {
670
+ return nodes.map(function (node) {
671
+ if (node.key === targetKey) {
672
+ return __assign(__assign({}, node), { children: children, leaf: children.length === 0 });
673
+ }
674
+ if (node.children && node.children.length > 0) {
675
+ return __assign(__assign({}, node), { children: updateNodeChildren(node.children, targetKey, children) });
676
+ }
677
+ return node;
678
+ });
679
+ };
680
+ // ─── Root group load / paginate ───────────────────────────────────────────
681
+ var loadRootGroups = function (offset) {
682
+ if (offset === void 0) { offset = 0; }
683
+ return __awaiter(void 0, void 0, void 0, function () {
684
+ var queryObject, limit, response, rootNodes, total, queryData, error_1;
685
+ var _a, _b, _c;
686
+ return __generator(this, function (_d) {
687
+ switch (_d.label) {
688
+ case 0:
689
+ if (!solidTreeViewMetaData || activeGroupingRules.length === 0) {
690
+ setTreeNodes([]);
691
+ setExpandedKeys({});
692
+ queryObject = getFilterObjectFromLocalStorage();
693
+ if (queryObject) {
694
+ delete queryObject.grouping_rules;
695
+ delete queryObject.aggregation_rules;
696
+ setFilterObjectToLocalStorage(queryObject);
697
+ }
698
+ return [2 /*return*/];
699
+ }
700
+ limit = globalLimit || DEFAULT_PAGE_SIZE;
701
+ setTreeLoading(true);
702
+ _d.label = 1;
703
+ case 1:
704
+ _d.trys.push([1, 3, 4, 5]);
705
+ return [4 /*yield*/, runGroupedQuery(0, [], offset, limit)];
706
+ case 2:
707
+ response = (_d.sent()).response;
708
+ rootNodes = buildGroupNodes((response === null || response === void 0 ? void 0 : response.groupMeta) || [], 0, [], "root");
709
+ setTreeNodes(rootNodes);
710
+ setExpandedKeys({});
711
+ total = (_a = response === null || response === void 0 ? void 0 : response.meta.totalRecords) !== null && _a !== void 0 ? _a : 0;
712
+ setPagination("root", { offset: offset, total: total });
713
+ if (latestFilterPredicatesRef.current && latestFilterPredicatesRef.current.persistFilter) {
714
+ queryData = {
715
+ offset: offset,
716
+ limit: limit,
717
+ populate: toPopulate,
718
+ populateMedia: toPopulateMedia,
719
+ sortField: sortField,
720
+ sortOrder: sortOrder,
721
+ custom_filter_predicate: latestFilterPredicatesRef.current.custom_filter_predicate || null,
722
+ search_predicate: latestFilterPredicatesRef.current.search_predicate || null,
723
+ saved_filter_predicate: latestFilterPredicatesRef.current.saved_filter_predicate || null,
724
+ predefined_search_predicate: latestFilterPredicatesRef.current.predefined_search_predicate || null,
725
+ grouping_rules: latestFilterPredicatesRef.current.grouping_rules || null,
726
+ aggregation_rules: latestFilterPredicatesRef.current.aggregation_rules || null,
727
+ };
728
+ setFilterObjectToLocalStorage(queryData);
729
+ }
730
+ return [3 /*break*/, 5];
731
+ case 3:
732
+ error_1 = _d.sent();
733
+ setTreeNodes([]);
734
+ (_b = toast.current) === null || _b === void 0 ? void 0 : _b.show({
735
+ severity: "error",
736
+ summary: "Failed to load tree",
737
+ detail: ((_c = error_1 === null || error_1 === void 0 ? void 0 : error_1.data) === null || _c === void 0 ? void 0 : _c.message) || (error_1 === null || error_1 === void 0 ? void 0 : error_1.message) || "Unable to load grouped data",
738
+ life: 4000,
739
+ });
740
+ return [3 /*break*/, 5];
741
+ case 4:
742
+ setTreeLoading(false);
743
+ return [7 /*endfinally*/];
744
+ case 5: return [2 /*return*/];
745
+ }
746
+ });
747
+ });
748
+ };
749
+ useEffect(function () {
750
+ // Reset root pagination on data dependencies change
751
+ setPaginationMap({});
752
+ if (filters && filterPredicates) {
753
+ loadRootGroups(0);
754
+ }
755
+ // eslint-disable-next-line react-hooks/exhaustive-deps
756
+ }, [solidTreeViewMetaData, params.modelName, activeGroupingRules, aggregationRules, filters, sortField, sortOrder, globalLimit]);
757
+ // ─── Expand handler ───────────────────────────────────────────────────────
758
+ var loadNodeChildren = function (node, offset) { return __awaiter(void 0, void 0, void 0, function () {
759
+ var meta, nodeKey, limit, nextRuleIndex, children_1, total, response, response, error_2;
760
+ var _a, _b, _c, _d, _e;
761
+ return __generator(this, function (_f) {
762
+ switch (_f.label) {
763
+ case 0:
764
+ meta = (_a = node.data) === null || _a === void 0 ? void 0 : _a.__treeMeta;
765
+ if (!meta || meta.nodeType !== "group")
766
+ return [2 /*return*/];
767
+ nodeKey = String(node.key);
768
+ limit = getPagination(nodeKey).limit || DEFAULT_PAGE_SIZE;
769
+ nextRuleIndex = meta.ruleIndex + 1;
770
+ setTreeLoading(true);
771
+ _f.label = 1;
772
+ case 1:
773
+ _f.trys.push([1, 6, 7, 8]);
774
+ children_1 = [];
775
+ total = 0;
776
+ if (!(nextRuleIndex < activeGroupingRules.length)) return [3 /*break*/, 3];
777
+ return [4 /*yield*/, runGroupedQuery(nextRuleIndex, meta.groupPath || [], offset, limit)];
778
+ case 2:
779
+ response = (_f.sent()).response;
780
+ children_1 = buildGroupNodes((response === null || response === void 0 ? void 0 : response.groupMeta) || [], nextRuleIndex, meta.groupPath || [], nodeKey);
781
+ total = (_b = response === null || response === void 0 ? void 0 : response.meta.totalRecords) !== null && _b !== void 0 ? _b : 0;
782
+ return [3 /*break*/, 5];
783
+ case 3: return [4 /*yield*/, runLeafQuery(meta.groupPath || [], offset, limit)];
784
+ case 4:
785
+ response = (_f.sent()).response;
786
+ children_1 = buildRecordNodes((response === null || response === void 0 ? void 0 : response.records) || [], nodeKey, meta.groupPath || []);
787
+ total = (_c = response === null || response === void 0 ? void 0 : response.meta.totalRecords) !== null && _c !== void 0 ? _c : 0;
788
+ _f.label = 5;
789
+ case 5:
790
+ setTreeNodes(function (prev) { return updateNodeChildren(prev, nodeKey, children_1); });
791
+ setPagination(nodeKey, { offset: offset, total: total });
792
+ // Collapse all immediate children's expanded state so stale
793
+ // sub-trees don't appear open with no data after pagination.
794
+ if (offset !== 0 || children_1.length > 0) {
795
+ setExpandedKeys(function (prevKeys) {
796
+ var next = __assign({}, prevKeys);
797
+ Object.keys(next).forEach(function (k) {
798
+ if (k !== nodeKey && k.startsWith("".concat(nodeKey, "-"))) {
799
+ delete next[k];
800
+ }
801
+ });
802
+ return next;
803
+ });
804
+ // Also wipe pagination state for all descendant keys so page
805
+ // counters don't carry over to the newly loaded children.
806
+ setPaginationMap(function (prevMap) {
807
+ var next = __assign({}, prevMap);
808
+ Object.keys(next).forEach(function (k) {
809
+ if (k !== nodeKey && k.startsWith("".concat(nodeKey, "-"))) {
810
+ delete next[k];
811
+ }
812
+ });
813
+ return next;
814
+ });
815
+ }
816
+ return [3 /*break*/, 8];
817
+ case 6:
818
+ error_2 = _f.sent();
819
+ (_d = toast.current) === null || _d === void 0 ? void 0 : _d.show({
820
+ severity: "error",
821
+ summary: "Failed to expand node",
822
+ detail: ((_e = error_2 === null || error_2 === void 0 ? void 0 : error_2.data) === null || _e === void 0 ? void 0 : _e.message) || (error_2 === null || error_2 === void 0 ? void 0 : error_2.message) || "Unable to load children",
823
+ life: 4000,
824
+ });
825
+ setTreeNodes(function (prev) { return updateNodeChildren(prev, nodeKey, []); });
826
+ return [3 /*break*/, 8];
827
+ case 7:
828
+ setTreeLoading(false);
829
+ return [7 /*endfinally*/];
830
+ case 8: return [2 /*return*/];
831
+ }
832
+ });
833
+ }); };
834
+ var handleNodeExpand = function (event) { return __awaiter(void 0, void 0, void 0, function () {
835
+ var node, nodeKey, alreadyLoaded, isChecked;
836
+ var _a;
837
+ return __generator(this, function (_b) {
838
+ switch (_b.label) {
839
+ case 0:
840
+ node = event === null || event === void 0 ? void 0 : event.node;
841
+ if (!node)
842
+ return [2 /*return*/];
843
+ nodeKey = String(node.key);
844
+ alreadyLoaded = node.children && node.children.length > 0;
845
+ if (!!alreadyLoaded) return [3 /*break*/, 2];
846
+ return [4 /*yield*/, loadNodeChildren(node, 0)];
847
+ case 1:
848
+ _b.sent();
849
+ _b.label = 2;
850
+ case 2:
851
+ isChecked = ((_a = selectedNodeKeys === null || selectedNodeKeys === void 0 ? void 0 : selectedNodeKeys[nodeKey]) === null || _a === void 0 ? void 0 : _a.checked) === true;
852
+ if (!isChecked)
853
+ return [2 /*return*/];
854
+ // Use setTreeNodes callback to read the latest tree state after loadNodeChildren
855
+ // has updated it, then select all immediate children.
856
+ setTreeNodes(function (currentNodes) {
857
+ var _a;
858
+ var parentNode = findNodeByKey(currentNodes, nodeKey);
859
+ if (!((_a = parentNode === null || parentNode === void 0 ? void 0 : parentNode.children) === null || _a === void 0 ? void 0 : _a.length))
860
+ return currentNodes;
861
+ setSelectedNodeKeys(function (prevKeys) {
862
+ var next = __assign({}, prevKeys);
863
+ parentNode.children.forEach(function (child) {
864
+ var _a, _b;
865
+ next[String(child.key)] = {
866
+ checked: true,
867
+ partialChecked: false,
868
+ nodeType: (_b = (_a = child.data) === null || _a === void 0 ? void 0 : _a.__treeMeta) === null || _b === void 0 ? void 0 : _b.nodeType, // already on the node
869
+ };
870
+ });
871
+ return next;
872
+ });
873
+ return currentNodes; // tree shape unchanged, we only need the read
874
+ });
875
+ return [2 /*return*/];
876
+ }
877
+ });
878
+ }); };
879
+ // ─── Pagination click handlers ────────────────────────────────────────────
880
+ /**
881
+ * Navigate root-level groups to next/prev page.
882
+ */
883
+ var handleRootPageChange = function (direction) { return __awaiter(void 0, void 0, void 0, function () {
884
+ var _a, offset, limit, nextOffset;
885
+ return __generator(this, function (_b) {
886
+ switch (_b.label) {
887
+ case 0:
888
+ _a = getPagination("root"), offset = _a.offset, limit = _a.limit;
889
+ nextOffset = direction === "prev"
890
+ ? Math.max(0, offset - limit)
891
+ : offset + limit;
892
+ return [4 /*yield*/, loadRootGroups(nextOffset)];
893
+ case 1:
894
+ _b.sent();
895
+ return [2 /*return*/];
896
+ }
897
+ });
898
+ }); };
899
+ /**
900
+ * Navigate a node's children to next/prev page.
901
+ * We need to find the node in the tree by key to call loadNodeChildren.
902
+ */
903
+ var findNodeByKey = function (nodes, key) {
904
+ for (var _i = 0, nodes_1 = nodes; _i < nodes_1.length; _i++) {
905
+ var node = nodes_1[_i];
906
+ if (node.key === key)
907
+ return node;
908
+ if (node.children) {
909
+ var found = findNodeByKey(node.children, key);
910
+ if (found)
911
+ return found;
912
+ }
913
+ }
914
+ return null;
915
+ };
916
+ var handleNodePageChange = function (nodeKey, direction) { return __awaiter(void 0, void 0, void 0, function () {
917
+ var _a, offset, limit, nextOffset, node;
918
+ return __generator(this, function (_b) {
919
+ switch (_b.label) {
920
+ case 0:
921
+ _a = getPagination(nodeKey), offset = _a.offset, limit = _a.limit;
922
+ nextOffset = direction === "prev"
923
+ ? Math.max(0, offset - limit)
924
+ : offset + limit;
925
+ node = findNodeByKey(treeNodes, nodeKey);
926
+ if (!node)
927
+ return [2 /*return*/];
928
+ return [4 /*yield*/, loadNodeChildren(node, nextOffset)];
929
+ case 1:
930
+ _b.sent();
931
+ return [2 /*return*/];
932
+ }
933
+ });
934
+ }); };
935
+ // ─── Filter handler ───────────────────────────────────────────────────────
936
+ var handleApplyCustomFilter = function (nextFilterPredicates, persistFilter) {
937
+ if (persistFilter === void 0) { persistFilter = false; }
938
+ var queryfilter = structuredClone(params.customFilter) || { $and: [] };
939
+ if (nextFilterPredicates === null || nextFilterPredicates === void 0 ? void 0 : nextFilterPredicates.custom_filter_predicate)
940
+ queryfilter.$and.push(nextFilterPredicates.custom_filter_predicate);
941
+ if (nextFilterPredicates === null || nextFilterPredicates === void 0 ? void 0 : nextFilterPredicates.search_predicate)
942
+ queryfilter.$and.push(nextFilterPredicates.search_predicate);
943
+ if (nextFilterPredicates === null || nextFilterPredicates === void 0 ? void 0 : nextFilterPredicates.saved_filter_predicate)
944
+ queryfilter.$and.push(nextFilterPredicates.saved_filter_predicate);
945
+ if (nextFilterPredicates === null || nextFilterPredicates === void 0 ? void 0 : nextFilterPredicates.predefined_search_predicate)
946
+ queryfilter.$and.push(nextFilterPredicates.predefined_search_predicate);
947
+ latestFiltersRef.current = queryfilter;
948
+ var updatedFilterPredicates = structuredClone(nextFilterPredicates || {});
949
+ updatedFilterPredicates.persistFilter = persistFilter;
950
+ latestFilterPredicatesRef.current = updatedFilterPredicates;
951
+ setFilters(queryfilter);
952
+ setFilterPredicates(updatedFilterPredicates);
953
+ var grouping_rules = updatedFilterPredicates.grouping_rules;
954
+ var aggregation_rules = updatedFilterPredicates.aggregation_rules;
955
+ setGroupingRules(Array.isArray(grouping_rules) ? grouping_rules : []);
956
+ setAggregationRules(Array.isArray(aggregation_rules) ? aggregation_rules : []);
957
+ };
958
+ // ─── Bulk delete ──────────────────────────────────────────────────────────
959
+ // handle bulk deletion
960
+ var deleteBulk = function () {
961
+ var deleteList = [];
962
+ selectedRecords.forEach(function (element) {
963
+ deleteList.push(element.id);
964
+ });
965
+ deleteManySolidEntities(deleteList)
966
+ .unwrap()
967
+ .then(function () {
968
+ var _a;
969
+ (_a = toast.current) === null || _a === void 0 ? void 0 : _a.show({
970
+ severity: 'success',
971
+ summary: 'Deleted',
972
+ detail: ERROR_MESSAGES.RECORD_DELETE,
973
+ life: 3000
974
+ });
975
+ setDeleteRecordsDialogVisible(false);
976
+ })
977
+ .catch(function (error) {
978
+ var _a, _b;
979
+ (_a = toast.current) === null || _a === void 0 ? void 0 : _a.show({
980
+ severity: 'error',
981
+ summary: 'Delete Failed',
982
+ detail: (_b = error === null || error === void 0 ? void 0 : error.data) === null || _b === void 0 ? void 0 : _b.message,
983
+ life: 4000
984
+ });
985
+ });
986
+ };
987
+ // handle closing of the delete dialog...
988
+ var onDeleteClose = function () {
989
+ setDeleteRecordsDialogVisible(false);
990
+ setSelectedRecords([]);
991
+ setSelectedRecoverRecords([]);
992
+ };
993
+ var recoverAll = function () {
994
+ var recoverList = [];
995
+ selectedRecoverRecords.forEach(function (element) {
996
+ recoverList.push(element.id);
997
+ });
998
+ triggerRecoverSolidEntities(recoverList);
999
+ setRecoverDialogVisible(false);
1000
+ };
1001
+ var handleFetchUpdatedRecords = function () {
1002
+ // setQueryString();
1003
+ };
1004
+ // ─── Column rendering ─────────────────────────────────────────────────────
1005
+ var renderColumnsDynamically = function () {
1006
+ var _a;
1007
+ if (!(solidTreeViewMetaData === null || solidTreeViewMetaData === void 0 ? void 0 : solidTreeViewMetaData.data) || !solidTreeViewLayout)
1008
+ return null;
1009
+ var solidFieldsMetadata = solidTreeViewMetaData.data.solidFieldsMetadata;
1010
+ if (!solidFieldsMetadata)
1011
+ return null;
1012
+ return (_a = solidTreeViewLayout.children) === null || _a === void 0 ? void 0 : _a.map(function (column) {
1013
+ var _a, _b, _c;
1014
+ var fieldMetadata = solidFieldsMetadata[column.attrs.name];
1015
+ if (!fieldMetadata)
1016
+ return null;
1017
+ var visibleToRole = ((_a = column === null || column === void 0 ? void 0 : column.attrs) === null || _a === void 0 ? void 0 : _a.roles) || [];
1018
+ if (visibleToRole.length > 0 && !hasAnyRole(user === null || user === void 0 ? void 0 : user.roles, visibleToRole))
1019
+ return null;
1020
+ var listColumn = SolidListViewColumn({
1021
+ solidListViewMetaData: solidTreeViewMetaData,
1022
+ fieldMetadata: fieldMetadata,
1023
+ column: column,
1024
+ setLightboxUrls: function () { },
1025
+ setOpenLightbox: function () { },
1026
+ });
1027
+ if (!React.isValidElement(listColumn))
1028
+ return null;
1029
+ var originalBody = (_b = listColumn === null || listColumn === void 0 ? void 0 : listColumn.props) === null || _b === void 0 ? void 0 : _b.body;
1030
+ var originalProps = (listColumn === null || listColumn === void 0 ? void 0 : listColumn.props) || {};
1031
+ var mergedColumnStyle = __assign({ minWidth: "12rem" }, (originalProps.style || {}));
1032
+ return (_jsx(Column, { field: (_c = originalProps.field) !== null && _c !== void 0 ? _c : fieldMetadata.name, header: originalProps.header,
1033
+ // sortable
1034
+ style: mergedColumnStyle, className: originalProps.className, headerClassName: originalProps.headerClassName, bodyClassName: originalProps.bodyClassName, align: originalProps.align, alignHeader: originalProps.alignHeader, body: function (node, options) {
1035
+ var _a, _b;
1036
+ var rowData = (_a = node === null || node === void 0 ? void 0 : node.data) !== null && _a !== void 0 ? _a : node;
1037
+ var nodeMeta = rowData === null || rowData === void 0 ? void 0 : rowData.__treeMeta;
1038
+ if ((nodeMeta === null || nodeMeta === void 0 ? void 0 : nodeMeta.nodeType) === "group")
1039
+ return _jsx("span", { children: "\u00A0" });
1040
+ if (typeof originalBody === "function")
1041
+ return originalBody(rowData, options);
1042
+ return (_b = rowData === null || rowData === void 0 ? void 0 : rowData[fieldMetadata.name]) !== null && _b !== void 0 ? _b : _jsx("span", { children: "\u00A0" });
1043
+ } }, "tree-col-".concat(fieldMetadata.name)));
1044
+ });
1045
+ };
1046
+ var renderAggregateColumns = function () {
1047
+ if (activeGroupingRules.length === 0)
1048
+ return null;
1049
+ var derivedAggregates = buildAggregates();
1050
+ // derivedAggregates is an array like ["id:count", "price:sum"]
1051
+ // We want to render columns for each of these.
1052
+ return derivedAggregates.map(function (agg) {
1053
+ var _a = agg.split(":"), field = _a[0], operator = _a[1];
1054
+ var responseKey = "".concat(field, "_").concat(operator);
1055
+ var header = formatHeader(responseKey);
1056
+ return (_jsx(Column, { field: responseKey, header: header, sortable: true, style: { minWidth: "8rem" }, body: function (node) {
1057
+ var _a, _b;
1058
+ var rowData = (_a = node === null || node === void 0 ? void 0 : node.data) !== null && _a !== void 0 ? _a : node;
1059
+ var nodeMeta = rowData === null || rowData === void 0 ? void 0 : rowData.__treeMeta;
1060
+ if ((nodeMeta === null || nodeMeta === void 0 ? void 0 : nodeMeta.nodeType) !== "group")
1061
+ return _jsx("span", { children: "\u00A0" });
1062
+ var value = (_b = nodeMeta === null || nodeMeta === void 0 ? void 0 : nodeMeta.aggregates) === null || _b === void 0 ? void 0 : _b[responseKey];
1063
+ return _jsx("span", { children: value !== null && value !== void 0 ? value : 0 });
1064
+ } }, "agg-col-".concat(agg)));
1065
+ });
1066
+ };
1067
+ // ─── Group column body: label + child pagination controls ─────────────────
1068
+ var groupColumnBody = function (node) {
1069
+ var _a;
1070
+ var rowData = node === null || node === void 0 ? void 0 : node.data;
1071
+ var nodeMeta = rowData === null || rowData === void 0 ? void 0 : rowData.__treeMeta;
1072
+ if ((nodeMeta === null || nodeMeta === void 0 ? void 0 : nodeMeta.nodeType) !== "group")
1073
+ return _jsx("span", { children: "\u00A0" });
1074
+ var label = (_a = nodeMeta.groupLabel) !== null && _a !== void 0 ? _a : "";
1075
+ var truncateAfter = 30;
1076
+ return (_jsxs("div", { className: "flex align-items-center", children: [_jsx("div", { className: "solid-table-row", style: { maxWidth: "".concat(truncateAfter, "ch") }, children: _jsx("span", { className: "font-semibold", children: label }) }), truncateAfter && label.length > truncateAfter &&
1077
+ _jsxs(_Fragment, { children: [_jsx(Tooltip, { target: ".solid-field-tooltip-icon" }), _jsx("i", { className: "pi pi-info-circle solid-field-tooltip-icon", "data-pr-tooltip": label })] })] }));
1078
+ };
1079
+ // ─── Root pagination bar ──────────────────────────────────────────────────
1080
+ var RootPaginationBar = function () {
1081
+ if (activeGroupingRules.length === 0)
1082
+ return null;
1083
+ var _a = getPagination("root"), offset = _a.offset, total = _a.total;
1084
+ var currentPage = Math.floor(offset / globalLimit) + 1;
1085
+ var rootHasPrev = hasPrev("root");
1086
+ var rootHasNext = hasNext("root");
1087
+ if (!rootHasPrev && !rootHasNext)
1088
+ return null;
1089
+ return (_jsxs("div", { style: { width: "100%", display: "flex", alignItems: "center", justifyContent: "space-between", borderTop: "1px solid var(--surface-border)" }, children: [_jsxs("div", { style: { display: "flex", alignItems: "center", gap: "0.5rem", padding: "0.5rem 0.75rem" }, children: [_jsx("span", { className: "text-sm text-color-secondary", children: "Items per page" }), _jsx(Dropdown, { value: globalLimit, options: pageSizeOptions, onChange: function (e) {
1090
+ setGlobalLimit(e.value);
1091
+ }, className: "solid-page-size-dropdown", style: { height: '2rem', display: 'flex', alignItems: 'center' } })] }), _jsxs("div", { style: { display: "flex", alignItems: "center", gap: "0.5rem", padding: "0.5rem 0.75rem" }, children: [_jsxs("span", { className: "text-sm text-color-secondary", children: [offset + 1, "\u2013", Math.min(offset + globalLimit, total), " of ", total] }), _jsx(Button, { type: "button", icon: "pi pi-angle-left", size: "small", outlined: true, severity: "secondary", disabled: !rootHasPrev || treeLoading, onClick: function () { return handleRootPageChange("prev"); }, style: { padding: 0, border: "none", width: "2rem" }, className: "small-button" }), _jsx(Button, { type: "button", icon: "pi pi-angle-right", iconPos: "right", size: "small", outlined: true, severity: "secondary", disabled: !rootHasNext || treeLoading, onClick: function () { return handleRootPageChange("next"); }, style: { padding: 0, border: "none", width: "2rem" }, className: "small-button" })] })] }));
1092
+ };
1093
+ // ─── Imperative handle ────────────────────────────────────────────────────
1094
+ useImperativeHandle(ref, function () { return ({
1095
+ refresh: function () { void loadRootGroups(getPagination("root").offset); },
1096
+ clearFilters: function () {
1097
+ var _a, _b;
1098
+ setFilters(params.customFilter || { $and: [] });
1099
+ (_b = (_a = solidGlobalSearchElementRef.current) === null || _a === void 0 ? void 0 : _a.clearFilter) === null || _b === void 0 ? void 0 : _b.call(_a);
1100
+ },
1101
+ applyFilter: function (filter) { handleApplyCustomFilter(filter); },
1102
+ setPagination: function () { },
1103
+ setSort: function (nextSortField, nextSortOrder) {
1104
+ setSortField(nextSortField);
1105
+ setSortOrder(nextSortOrder);
1106
+ },
1107
+ setShowArchived: function () { },
1108
+ getState: function () { return ({
1109
+ first: getPagination("root").offset,
1110
+ rows: getPagination("root").limit,
1111
+ sortField: sortField,
1112
+ sortOrder: sortOrder,
1113
+ showArchived: false,
1114
+ filters: filters,
1115
+ filterPredicates: filterPredicates,
1116
+ listData: treeNodes,
1117
+ totalRecords: getPagination("root").total,
1118
+ loading: treeLoading,
1119
+ }); },
1120
+ }); }, [filters, filterPredicates, params.customFilter, treeLoading, treeNodes, paginationMap]);
1121
+ // ─── Render ───────────────────────────────────────────────────────────────
1122
+ return (_jsxs("div", { className: "page-parent-wrapper", children: [_jsx(Toast, { ref: toast }), _jsxs("div", { className: "page-header flex-column lg:flex-row", children: [_jsxs("div", { className: "flex justify-content-between w-full", children: [_jsxs("div", { className: "flex align-items-center solid-header-buttons-wrapper", children: [params.embeded !== true && (_jsx("div", { className: "apps-icon block md:hidden cursor-pointer", onClick: toggleBothSidebars, children: _jsx("i", { className: "pi pi-th-large" }) })), _jsx("p", { className: "m-0 view-title solid-text-wrapper", children: treeViewTitle }), ((_h = (_g = (_f = solidTreeViewMetaData === null || solidTreeViewMetaData === void 0 ? void 0 : solidTreeViewMetaData.data) === null || _f === void 0 ? void 0 : _f.solidView) === null || _g === void 0 ? void 0 : _g.layout) === null || _h === void 0 ? void 0 : _h.attrs.enableGlobalSearch) === true && (_jsx("div", { className: "hidden lg:flex", children: _jsx(SolidGlobalSearchElement, { viewType: "tree", showSaveFilterPopup: showSaveFilterPopup, setShowSaveFilterPopup: setShowSaveFilterPopup, ref: solidGlobalSearchElementRef, viewData: solidTreeViewMetaData, handleApplyCustomFilter: handleApplyCustomFilter }) }))] }), _jsxs("div", { className: "flex align-items-center solid-header-buttons-wrapper", children: [((_l = (_k = (_j = solidTreeViewMetaData === null || solidTreeViewMetaData === void 0 ? void 0 : solidTreeViewMetaData.data) === null || _j === void 0 ? void 0 : _j.solidView) === null || _k === void 0 ? void 0 : _k.layout) === null || _l === void 0 ? void 0 : _l.attrs.enableGlobalSearch) === true && (_jsx("div", { className: "flex lg:hidden", children: _jsx(Button, { type: "button", size: "small", icon: "pi pi-search", severity: "secondary", outlined: true, className: "solid-icon-button", onClick: function () { return setShowGlobalSearchElement(!showGlobalSearchElement); } }) })), actionsAllowed.includes("".concat(permissionExpression(params.modelName, "create"))) &&
1123
+ ((_p = (_o = (_m = solidTreeViewMetaData === null || solidTreeViewMetaData === void 0 ? void 0 : solidTreeViewMetaData.data) === null || _m === void 0 ? void 0 : _m.solidView) === null || _o === void 0 ? void 0 : _o.layout) === null || _p === void 0 ? void 0 : _p.attrs.create) !== false && (_jsx(SolidCreateButton, { createButtonUrl: createButtonUrl, createActionQueryParams: createActionQueryParams, responsiveIconOnly: true })), actionsAllowed.includes("".concat(permissionExpression(params.modelName, "delete"))) &&
1124
+ ((_s = (_r = (_q = solidTreeViewMetaData === null || solidTreeViewMetaData === void 0 ? void 0 : solidTreeViewMetaData.data) === null || _q === void 0 ? void 0 : _q.solidView) === null || _r === void 0 ? void 0 : _r.layout) === null || _s === void 0 ? void 0 : _s.attrs.delete) !== false &&
1125
+ selectedRecords.length > 0 && (_jsx(Button, { type: "button", label: "Delete", size: "small", onClick: function () { return setDeleteRecordsDialogVisible(true); }, className: "small-button", severity: "danger" })), _jsx(Button, { type: "button", size: "small", icon: "pi pi-refresh", severity: "secondary", className: "solid-icon-button", outlined: true, onClick: function () { void loadRootGroups(getPagination("root").offset); } }), showArchived && (_jsx(Button, { type: "button", icon: "pi pi-refresh", label: "Recover", size: "small", severity: "secondary", className: "hidden lg:flex solid-icon-button ", onClick: function () { return setRecoverDialogVisible(true); } })), params.embeded === false &&
1126
+ ((_t = solidTreeViewLayout === null || solidTreeViewLayout === void 0 ? void 0 : solidTreeViewLayout.attrs) === null || _t === void 0 ? void 0 : _t.configureView) !== false && (_jsx(SolidListViewConfigure, { listViewMetaData: solidTreeViewMetaData, solidListViewLayout: solidTreeViewLayout, setShowArchived: setShowArchived, showArchived: showArchived, viewData: solidTreeViewMetaData, sizeOptions: sizeOptions, setSize: setSize, size: size, viewModes: viewModes, params: params, actionsAllowed: actionsAllowed, selectedRecords: selectedRecords, setDialogVisible: setDeleteRecordsDialogVisible, setShowSaveFilterPopup: setShowSaveFilterPopup, filters: filters, handleFetchUpdatedRecords: handleFetchUpdatedRecords, setRecoverDialogVisible: setRecoverDialogVisible }))] })] }), ((_w = (_v = (_u = solidTreeViewMetaData === null || solidTreeViewMetaData === void 0 ? void 0 : solidTreeViewMetaData.data) === null || _u === void 0 ? void 0 : _u.solidView) === null || _v === void 0 ? void 0 : _v.layout) === null || _w === void 0 ? void 0 : _w.attrs.enableGlobalSearch) === true &&
1127
+ showGlobalSearchElement && (_jsx("div", { className: "flex lg:hidden", children: _jsx(SolidGlobalSearchElement, { viewType: "tree", showSaveFilterPopup: showSaveFilterPopup, setShowSaveFilterPopup: setShowSaveFilterPopup, ref: solidGlobalSearchElementRef, viewData: solidTreeViewMetaData, handleApplyCustomFilter: handleApplyCustomFilter }) }))] }), _jsx("style", { children: "\n \n " }), _jsx("div", { className: "solid-datatable-wrapper solid-treetable-wrapper flex-1 min-h-0 overflow-auto", children: activeGroupingRules.length === 0 ? (_jsxs("div", { className: "flex flex-column align-items-center justify-content-center h-full p-6 text-center", children: [_jsx("div", { className: "mb-4", style: { opacity: 0.1 }, children: _jsx(HomePageModuleSvg, {}) }), _jsx("h3", { className: "m-0 mb-2", style: { color: "var(--solid-dark-title)", fontWeight: 700, fontSize: '1.5rem' }, children: "Tree View" }), _jsxs("p", { className: "m-0 text-sl", style: { maxWidth: '35rem', lineHeight: '1.5', color: 'var(--text-color)' }, children: ["To visualize your data in a hierarchical structure, please apply a ", _jsx("strong", { children: "Grouping Rule" }), " from the Global Search bar above."] })] })) : (_jsxs(TreeTable, { value: treeNodes, lazy: true, loading: treeLoading, expandedKeys: expandedKeys, onToggle: function (event) { return setExpandedKeys(event.value); }, onExpand: handleNodeExpand, scrollable: true, tableStyle: { minWidth: "max-content" }, tableClassName: "solid-data-table", resizableColumns: true, columnResizeMode: "expand", selectionMode: "checkbox", selectionKeys: selectedNodeKeys, sortField: sortField, sortOrder: sortOrder, removableSort: true, onSort: function (e) {
1128
+ setSortField(e.sortField);
1129
+ setSortOrder(e.sortOrder);
1130
+ }, onSelectionChange: function (e) {
1131
+ var incoming = e.value;
1132
+ setSelectedNodeKeys(function (prev) {
1133
+ var next = {};
1134
+ Object.keys(incoming).forEach(function (key) {
1135
+ var _a, _b, _c, _d;
1136
+ // Find the node to get its type
1137
+ var node = findNodeByKey(treeNodes, key);
1138
+ next[key] = __assign(__assign({}, incoming[key]), { nodeType: (_c = (_b = (_a = node === null || node === void 0 ? void 0 : node.data) === null || _a === void 0 ? void 0 : _a.__treeMeta) === null || _b === void 0 ? void 0 : _b.nodeType // add type from tree
1139
+ ) !== null && _c !== void 0 ? _c : (_d = prev[key]) === null || _d === void 0 ? void 0 : _d.nodeType });
1140
+ });
1141
+ return next;
1142
+ });
1143
+ }, children: [_jsx(Column, { field: "__group", header: "Group", sortable: true, expander: function (node) { var _a, _b; return ((_b = (_a = node === null || node === void 0 ? void 0 : node.data) === null || _a === void 0 ? void 0 : _a.__treeMeta) === null || _b === void 0 ? void 0 : _b.nodeType) === "group"; }, body: groupColumnBody, style: { minWidth: "18rem", display: "flex", alignItems: "center" } }, "tree-group-column"), renderColumnsDynamically(), renderAggregateColumns(), _jsx(Column, { header: "", style: { width: "20rem" }, body: function (node) {
1144
+ var _a, _b, _c, _d;
1145
+ var rowData = node === null || node === void 0 ? void 0 : node.data;
1146
+ var nodeMeta = rowData === null || rowData === void 0 ? void 0 : rowData.__treeMeta;
1147
+ if ((nodeMeta === null || nodeMeta === void 0 ? void 0 : nodeMeta.nodeType) !== "group")
1148
+ return _jsx("span", { children: "\u00A0" });
1149
+ var nodeKey = String(node.key);
1150
+ var isExpanded = expandedKeys[nodeKey];
1151
+ var childrenLoaded = isExpanded && node.children && node.children.length > 0;
1152
+ if (!childrenLoaded)
1153
+ return _jsx("span", { children: "\u00A0" });
1154
+ var pagEntry = getPagination(nodeKey);
1155
+ var canPrev = hasPrev(nodeKey);
1156
+ var canNext = hasNext(nodeKey);
1157
+ // "in Jharkhand" — this node's own group label
1158
+ var inLabel = (_a = nodeMeta.groupLabel) !== null && _a !== void 0 ? _a : "";
1159
+ // "of cities" — what the children represent
1160
+ // nextRuleIndex = nodeMeta.ruleIndex + 1
1161
+ var nextRuleIndex = nodeMeta.ruleIndex + 1;
1162
+ var isLeafLevel = nextRuleIndex >= activeGroupingRules.length;
1163
+ var ofLabel = isLeafLevel
1164
+ ? (_d = (_c = (_b = solidTreeViewMetaData === null || solidTreeViewMetaData === void 0 ? void 0 : solidTreeViewMetaData.data) === null || _b === void 0 ? void 0 : _b.solidView) === null || _c === void 0 ? void 0 : _c.model) === null || _d === void 0 ? void 0 : _d.displayName // leaf → model name
1165
+ : (function () {
1166
+ var _a, _b, _c;
1167
+ var nextRule = activeGroupingRules[nextRuleIndex];
1168
+ var fieldName = String((_a = nextRule === null || nextRule === void 0 ? void 0 : nextRule.fieldName) !== null && _a !== void 0 ? _a : "");
1169
+ var fieldMeta = getFieldMetadata(fieldName);
1170
+ // Use displayName if available, fallback to fieldName
1171
+ return (_c = (_b = fieldMeta === null || fieldMeta === void 0 ? void 0 : fieldMeta.displayName) !== null && _b !== void 0 ? _b : fieldMeta === null || fieldMeta === void 0 ? void 0 : fieldMeta.name) !== null && _c !== void 0 ? _c : fieldName;
1172
+ })();
1173
+ return (_jsxs("div", { style: { display: "flex", alignItems: "center", gap: "0.2rem", justifyContent: "flex-end" }, onClick: function (e) { return e.stopPropagation(); }, children: [_jsx(Button, { type: "button", icon: "pi pi-angle-left", size: "small", rounded: true, outlined: true, disabled: !canPrev || treeLoading, style: { padding: 0, border: "none", width: "2rem" }, className: "small-button", onClick: function () { return handleNodePageChange(nodeKey, "prev"); } }), _jsx(Button, { type: "button", icon: "pi pi-angle-right", size: "small", rounded: true, outlined: true, disabled: !canNext || treeLoading, style: { padding: 0, border: "none", width: "2rem" }, className: "small-button", onClick: function () { return handleNodePageChange(nodeKey, "next"); } })] }));
1174
+ } }, "tree-last-frozen-column")] })) }), _jsx(RootPaginationBar, {}), _jsxs(Dialog, { visible: isDeleteRecordsDialogVisible, header: "Confirm Delete", onHide: function () { return setDeleteRecordsDialogVisible(false); }, headerClassName: "py-2", contentClassName: "px-0 pb-0",
1175
+ // style={{ width: '20vw' }}
1176
+ breakpoints: { '1199px': '30rem', '550px': '85vw' }, children: [_jsx(Divider, { className: "m-0" }), _jsxs("div", { className: "p-4", children: [_jsx("p", { className: "m-0 solid-primary-title", style: { fontSize: 16 }, children: "Are you sure you want to delete the selected records?" }), _jsxs("div", { className: "flex align-items-center gap-2 mt-3", children: [_jsx(Button, { label: "Delete", severity: "danger", size: "small", autoFocus: true, onClick: deleteBulk }), _jsx(Button, { label: "Cancel", size: "small", onClick: onDeleteClose, outlined: true, className: 'bg-primary-reverse' })] })] })] }), _jsx(Dialog, { visible: isRecoverDialogVisible, header: "Confirm Recover", modal: true, className: "solid-confirm-dialog", footer: function () { return (_jsxs("div", { className: "flex justify-content-center", children: [_jsx(Button, { label: "Yes", icon: "pi pi-check", severity: "danger", autoFocus: true, onClick: recoverAll }), _jsx(Button, { label: "No", icon: "pi pi-times", onClick: function () { return setRecoverDialogVisible(false); } })] })); }, onHide: function () { return setRecoverDialogVisible(false); }, children: _jsx("p", { children: "Are you sure you want to recover all records?" }) })] }));
1177
+ });
1178
+ SolidTreeView.displayName = "SolidTreeView";
1179
+ //# sourceMappingURL=SolidTreeView.js.map