@oneuptime/common 11.7.2 → 11.7.4

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 (414) hide show
  1. package/Models/AnalyticsModels/KubernetesCostAllocation.ts +103 -0
  2. package/Models/DatabaseModels/AlertEpisodeStateTimeline.ts +1 -0
  3. package/Models/DatabaseModels/AlertStateTimeline.ts +1 -0
  4. package/Models/DatabaseModels/IncidentEpisodeStateTimeline.ts +1 -0
  5. package/Models/DatabaseModels/IncidentStateTimeline.ts +1 -0
  6. package/Models/DatabaseModels/Index.ts +5 -0
  7. package/Models/DatabaseModels/LogDropFilter.ts +89 -0
  8. package/Models/DatabaseModels/NetworkDeviceDiscoveryScan.ts +13 -3
  9. package/Models/DatabaseModels/RecommendationDismissal.ts +463 -0
  10. package/Models/DatabaseModels/ScheduledMaintenanceStateTimeline.ts +1 -0
  11. package/Models/DatabaseModels/StatusPageGroup.ts +95 -0
  12. package/Models/DatabaseModels/TableView.ts +40 -0
  13. package/Models/DatabaseModels/TraceDropFilter.ts +89 -0
  14. package/Models/DatabaseModels/WorkflowVariable.ts +5 -1
  15. package/Server/API/AlertAPI.ts +32 -17
  16. package/Server/API/BaseAPI.ts +31 -2
  17. package/Server/API/BaseAnalyticsAPI.ts +36 -2
  18. package/Server/API/CommonAPI.ts +57 -0
  19. package/Server/API/IncidentAPI.ts +60 -33
  20. package/Server/API/IncidentEpisodeAPI.ts +31 -16
  21. package/Server/API/MonitorAPI.ts +30 -0
  22. package/Server/API/MonitorTemplateAPI.ts +8 -0
  23. package/Server/API/ProbeAPI.ts +196 -15
  24. package/Server/API/ProjectAPI.ts +79 -1
  25. package/Server/API/ScheduledMaintenanceAPI.ts +33 -18
  26. package/Server/API/StatusPageAPI.ts +74 -37
  27. package/Server/API/WorkspaceNotificationRuleAPI.ts +34 -4
  28. package/Server/Infrastructure/Postgres/SchemaMigrations/1785241000000-AddColumnsToTableView.ts +13 -0
  29. package/Server/Infrastructure/Postgres/SchemaMigrations/1785320000000-RepairCrossProjectIncidentReferences.ts +527 -0
  30. package/Server/Infrastructure/Postgres/SchemaMigrations/1785329453269-AddParentGroupToStatusPageGroup.ts +31 -0
  31. package/Server/Infrastructure/Postgres/SchemaMigrations/1785397674289-AddRecommendationDismissalTable.ts +55 -0
  32. package/Server/Infrastructure/Postgres/SchemaMigrations/1785405581596-AddDroppedCountersToDropFilters.ts +53 -0
  33. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +10 -0
  34. package/Server/Services/AlertEpisodeService.ts +47 -0
  35. package/Server/Services/AlertService.ts +125 -0
  36. package/Server/Services/BillingService.ts +98 -0
  37. package/Server/Services/DatabaseService.ts +184 -20
  38. package/Server/Services/IncidentEpisodeService.ts +47 -0
  39. package/Server/Services/IncidentService.ts +123 -0
  40. package/Server/Services/IncidentTemplateService.ts +123 -1
  41. package/Server/Services/Index.ts +2 -0
  42. package/Server/Services/LogDropFilterService.ts +133 -0
  43. package/Server/Services/MonitorProbeService.ts +94 -4
  44. package/Server/Services/MonitorService.ts +48 -43
  45. package/Server/Services/NetworkDeviceDiscoveryScanService.ts +70 -0
  46. package/Server/Services/ProbeService.ts +66 -0
  47. package/Server/Services/ProjectService.ts +131 -7
  48. package/Server/Services/RecommendationDismissalService.ts +52 -0
  49. package/Server/Services/RunbookAgentJobService.ts +68 -7
  50. package/Server/Services/ScheduledMaintenanceService.ts +103 -0
  51. package/Server/Services/ScheduledMaintenanceTemplateService.ts +90 -0
  52. package/Server/Services/StatusPageGroupService.ts +186 -0
  53. package/Server/Services/TraceDropFilterService.ts +133 -0
  54. package/Server/Types/Workflow/Components/API/Delete.ts +12 -0
  55. package/Server/Types/Workflow/Components/API/Get.ts +12 -0
  56. package/Server/Types/Workflow/Components/API/Patch.ts +12 -0
  57. package/Server/Types/Workflow/Components/API/Post.ts +12 -0
  58. package/Server/Types/Workflow/Components/API/Put.ts +13 -0
  59. package/Server/Utils/Database/ProjectScopedReferenceValidator.ts +212 -0
  60. package/Server/Utils/DropFilterValidation.ts +127 -0
  61. package/Server/Utils/Errors.ts +5 -0
  62. package/Server/Utils/Monitor/MonitorAlert.ts +28 -1
  63. package/Server/Utils/Monitor/MonitorIncident.ts +31 -2
  64. package/Server/Utils/Telemetry/AppMetrics.ts +31 -0
  65. package/Tests/Models/AnalyticsModels/KubernetesCostAllocation.test.ts +16 -0
  66. package/Tests/Models/DatabaseModels/MonitorProbeColumnAccessControl.test.ts +196 -0
  67. package/Tests/Models/RecommendationDismissalModel.test.ts +269 -0
  68. package/Tests/Server/API/BaseAPIUpdatePayloadValidation.test.ts +320 -0
  69. package/Tests/Server/API/BaseAnalyticsAPIUpdatePayloadValidation.test.ts +293 -0
  70. package/Tests/Server/API/CommonAPIAuthGuard.test.ts +164 -0
  71. package/Tests/Server/API/ProbeAPI.test.ts +422 -53
  72. package/Tests/Server/API/ProjectAPI.test.ts +180 -0
  73. package/Tests/Server/API/ProjectAPIExtendTrialBillingDisabled.test.ts +138 -0
  74. package/Tests/Server/API/ProjectScopedCustomRouteAuth.test.ts +458 -0
  75. package/Tests/Server/Infrastructure/ContainerBootConfiguration.test.ts +359 -0
  76. package/Tests/Server/Infrastructure/ProcessSignalDelivery.test.ts +427 -0
  77. package/Tests/Server/Services/BillingServiceExtendTrial.test.ts +439 -0
  78. package/Tests/Server/Services/CrossProjectReferenceWriteGuard.test.ts +810 -0
  79. package/Tests/Server/Services/DatabaseServiceAtomicAddToColumns.test.ts +269 -0
  80. package/Tests/Server/Services/DatabaseServiceEmptyUpdate.test.ts +277 -0
  81. package/Tests/Server/Services/DatabaseServiceSortColumnSelect.test.ts +201 -0
  82. package/Tests/Server/Services/DiscoveryScanClaimHookFreeSafety.test.ts +81 -23
  83. package/Tests/Server/Services/DropFilterSaveValidation.test.ts +398 -0
  84. package/Tests/Server/Services/MonitorProbeDeleteHooks.test.ts +280 -0
  85. package/Tests/Server/Services/MonitorProbeServiceProbeTenancy.test.ts +304 -0
  86. package/Tests/Server/Services/NetworkDeviceDiscoveryScanService.test.ts +262 -0
  87. package/Tests/Server/Services/ProjectServiceExtendTrial.test.ts +614 -0
  88. package/Tests/Server/Services/RecommendationDismissalService.test.ts +306 -0
  89. package/Tests/Server/Services/RepairCrossProjectIncidentReferencesMigration.test.ts +528 -0
  90. package/Tests/Server/Services/StatusPageGroupNesting.test.ts +395 -0
  91. package/Tests/Server/TestingUtils/Services/BillingServiceHelper.ts +26 -21
  92. package/Tests/Server/Types/Database/Permissions/WorkflowVariableColumnPermission.test.ts +227 -0
  93. package/Tests/Server/Types/Workflow/Components/ApiComponentErrorPort.test.ts +285 -0
  94. package/Tests/Server/Utils/Database/ProjectScopedReferenceValidator.test.ts +463 -0
  95. package/Tests/Server/Utils/DropFilterValidation.test.ts +269 -0
  96. package/Tests/Server/Utils/Telemetry/SpanUtil.test.ts +94 -0
  97. package/Tests/Types/DateUserTimezone.test.ts +52 -0
  98. package/Tests/Types/JSONFunctions.test.ts +103 -1
  99. package/Tests/Types/Monitor/KubernetesAlertTemplates.test.ts +177 -9
  100. package/Tests/Types/Monitor/MonitorStepDnsMonitor.test.ts +105 -0
  101. package/Tests/Types/Monitor/MonitorStepDnssecMonitor.test.ts +131 -0
  102. package/Tests/Types/Monitor/MonitorStepDomainMonitor.test.ts +60 -0
  103. package/Tests/Types/Monitor/MonitorStepExternalStatusPageMonitor.test.ts +82 -0
  104. package/Tests/Types/Monitor/MonitorStepInfrastructureMonitors.test.ts +268 -0
  105. package/Tests/Types/Monitor/MonitorStepMetricMonitor.test.ts +386 -0
  106. package/Tests/Types/Monitor/MonitorStepProfileMonitor.test.ts +185 -0
  107. package/Tests/Types/Monitor/MonitorStepSnmpMonitor.test.ts +156 -0
  108. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationCatalog.test.ts +371 -0
  109. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationCoverage.test.ts +901 -0
  110. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationNotificationMode.test.ts +607 -0
  111. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.test.ts +754 -0
  112. package/Tests/Types/Monitor/Recommendation/MonitorRecommendationUtil.test.ts +960 -0
  113. package/Tests/Types/RollingTime/RollingTimeUtil.test.ts +186 -0
  114. package/Tests/Types/Runbook/RunbookStepTimeout.test.ts +410 -0
  115. package/Tests/Types/Telemetry/DropFilterSampling.test.ts +241 -0
  116. package/Tests/Types/Workspace/NotificationRuleConditionUtil.test.ts +353 -0
  117. package/Tests/Types/Workspace/NotificationRuleUtil.test.ts +566 -0
  118. package/Tests/UI/Components/CodeEditor.test.tsx +174 -0
  119. package/Tests/UI/Components/ErrorBoundary.test.tsx +555 -24
  120. package/Tests/UI/Components/InfoCard.test.tsx +358 -0
  121. package/Tests/UI/Components/LogTimeRangePicker.test.tsx +138 -0
  122. package/Tests/UI/Components/Modal.test.tsx +43 -5
  123. package/Tests/UI/Components/ModelTable/BaseModelTableColumnCustomization.test.tsx +679 -0
  124. package/Tests/UI/Components/ModelTable/BaseModelTableSearchLabels.test.tsx +397 -0
  125. package/Tests/UI/Components/ModelTable/ColumnCustomizationModal.test.tsx +999 -0
  126. package/Tests/UI/Components/ModelTable/ColumnPreference.test.ts +1678 -0
  127. package/Tests/UI/Components/ModelTable/CustomFieldColumns.test.tsx +1094 -0
  128. package/Tests/UI/Components/Runbook/StepTimeoutInput.test.tsx +386 -0
  129. package/Tests/UI/Components/StatusPage/ResourceGroupSection.test.tsx +671 -0
  130. package/Tests/UI/Components/TelemetryTimeRangePicker.test.tsx +404 -0
  131. package/Tests/UI/Utils/DropdownAlignment.test.ts +306 -0
  132. package/Tests/UI/Utils/TableFilterUrlState.test.ts +292 -0
  133. package/Tests/Utils/Monitor/MonitorSummaryProbeUtil.test.ts +263 -0
  134. package/Tests/Utils/NetworkDiscovery/ScanTargetUtil.test.ts +583 -0
  135. package/Tests/Utils/StatusPage/GroupNestingLayout.test.ts +1072 -0
  136. package/Tests/Utils/StatusPage/GroupTree.test.ts +583 -0
  137. package/Tests/Utils/StatusPage/ResourceUptime.test.ts +411 -0
  138. package/Tests/Utils/UserPreferences.test.ts +563 -0
  139. package/Types/Date.ts +15 -6
  140. package/Types/JSONFunctions.ts +7 -2
  141. package/Types/Kubernetes/KubernetesCostIngest.ts +37 -1
  142. package/Types/Monitor/KubernetesAlertTemplates.ts +205 -0
  143. package/Types/Monitor/MonitorStep.ts +10 -1
  144. package/Types/Monitor/MonitorStepMetricMonitor.ts +46 -1
  145. package/Types/Monitor/Recommendation/MonitorRecommendationCatalog.ts +413 -0
  146. package/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.ts +168 -0
  147. package/Types/Monitor/Recommendation/MonitorRecommendationTypes.ts +175 -0
  148. package/Types/Monitor/Recommendation/MonitorRecommendationUtil.ts +743 -0
  149. package/Types/Permission.ts +45 -0
  150. package/Types/Recommendation/RecommendationType.ts +20 -0
  151. package/Types/Runbook/RunbookExecutionDeadline.ts +129 -0
  152. package/Types/Runbook/RunbookStepTimeout.ts +202 -0
  153. package/Types/Telemetry/DropFilterSampling.ts +92 -0
  154. package/UI/Components/AI/GenerateFromAIModal.tsx +0 -2
  155. package/UI/Components/Accordion/Accordion.tsx +10 -2
  156. package/UI/Components/BulkUpdate/BulkLabelActions.tsx +0 -1
  157. package/UI/Components/CodeEditor/CodeEditor.tsx +34 -20
  158. package/UI/Components/Date/RangeStartAndEndDateView.tsx +0 -1
  159. package/UI/Components/EditionLabel/EditionLabel.tsx +1 -27
  160. package/UI/Components/Error/PageError.tsx +0 -4
  161. package/UI/Components/ErrorBoundary.tsx +252 -15
  162. package/UI/Components/InfoCard/InfoCard.tsx +58 -1
  163. package/UI/Components/LogsViewer/components/LogTimeRangePicker.tsx +34 -1
  164. package/UI/Components/MasterPage/MasterPage.tsx +65 -0
  165. package/UI/Components/Modal/Modal.tsx +16 -60
  166. package/UI/Components/ModelFormModal/ModelFormModal.tsx +0 -8
  167. package/UI/Components/ModelTable/BaseModelTable.tsx +503 -71
  168. package/UI/Components/ModelTable/Column.ts +17 -0
  169. package/UI/Components/ModelTable/ColumnCustomizationModal.tsx +523 -0
  170. package/UI/Components/ModelTable/ColumnPreference.ts +482 -0
  171. package/UI/Components/ModelTable/CustomFieldColumns.tsx +326 -0
  172. package/UI/Components/ModelTable/TableView.tsx +24 -2
  173. package/UI/Components/ModelTable/useCustomFieldColumns.ts +150 -0
  174. package/UI/Components/Runbook/StepTimeoutInput.tsx +173 -0
  175. package/UI/Components/SideMenu/SideMenu.tsx +24 -4
  176. package/UI/Components/StatusPage/ResourceGroupSection.tsx +231 -0
  177. package/UI/Components/Table/Table.tsx +14 -1
  178. package/UI/Components/Table/TableRow.tsx +180 -175
  179. package/UI/Components/Table/Types/Column.ts +2 -0
  180. package/UI/Components/TelemetryViewer/components/TelemetryTimeRangePicker.tsx +34 -1
  181. package/UI/Utils/DropdownAlignment.ts +162 -0
  182. package/UI/Utils/TableFilterUrlState.ts +59 -20
  183. package/Utils/API.ts +106 -2
  184. package/Utils/Monitor/MonitorSummaryProbeUtil.ts +130 -0
  185. package/Utils/NetworkDiscovery/ScanTargetUtil.ts +434 -0
  186. package/Utils/StatusPage/GroupNestingLayout.ts +343 -0
  187. package/Utils/StatusPage/GroupTree.ts +307 -0
  188. package/Utils/StatusPage/ResourceUptime.ts +90 -17
  189. package/Utils/UserPreferences.ts +53 -0
  190. package/build/dist/Models/AnalyticsModels/KubernetesCostAllocation.js +86 -0
  191. package/build/dist/Models/AnalyticsModels/KubernetesCostAllocation.js.map +1 -1
  192. package/build/dist/Models/DatabaseModels/AlertEpisodeStateTimeline.js +1 -0
  193. package/build/dist/Models/DatabaseModels/AlertEpisodeStateTimeline.js.map +1 -1
  194. package/build/dist/Models/DatabaseModels/AlertStateTimeline.js +1 -0
  195. package/build/dist/Models/DatabaseModels/AlertStateTimeline.js.map +1 -1
  196. package/build/dist/Models/DatabaseModels/IncidentEpisodeStateTimeline.js +1 -0
  197. package/build/dist/Models/DatabaseModels/IncidentEpisodeStateTimeline.js.map +1 -1
  198. package/build/dist/Models/DatabaseModels/IncidentStateTimeline.js +1 -0
  199. package/build/dist/Models/DatabaseModels/IncidentStateTimeline.js.map +1 -1
  200. package/build/dist/Models/DatabaseModels/Index.js +2 -0
  201. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  202. package/build/dist/Models/DatabaseModels/LogDropFilter.js +91 -0
  203. package/build/dist/Models/DatabaseModels/LogDropFilter.js.map +1 -1
  204. package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js +14 -4
  205. package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js.map +1 -1
  206. package/build/dist/Models/DatabaseModels/RecommendationDismissal.js +484 -0
  207. package/build/dist/Models/DatabaseModels/RecommendationDismissal.js.map +1 -0
  208. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceStateTimeline.js +1 -0
  209. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceStateTimeline.js.map +1 -1
  210. package/build/dist/Models/DatabaseModels/StatusPageGroup.js +94 -0
  211. package/build/dist/Models/DatabaseModels/StatusPageGroup.js.map +1 -1
  212. package/build/dist/Models/DatabaseModels/TableView.js +40 -0
  213. package/build/dist/Models/DatabaseModels/TableView.js.map +1 -1
  214. package/build/dist/Models/DatabaseModels/TraceDropFilter.js +91 -0
  215. package/build/dist/Models/DatabaseModels/TraceDropFilter.js.map +1 -1
  216. package/build/dist/Models/DatabaseModels/WorkflowVariable.js +5 -1
  217. package/build/dist/Models/DatabaseModels/WorkflowVariable.js.map +1 -1
  218. package/build/dist/Server/API/AlertAPI.js +22 -13
  219. package/build/dist/Server/API/AlertAPI.js.map +1 -1
  220. package/build/dist/Server/API/BaseAPI.js +22 -1
  221. package/build/dist/Server/API/BaseAPI.js.map +1 -1
  222. package/build/dist/Server/API/BaseAnalyticsAPI.js +24 -1
  223. package/build/dist/Server/API/BaseAnalyticsAPI.js.map +1 -1
  224. package/build/dist/Server/API/CommonAPI.js +42 -0
  225. package/build/dist/Server/API/CommonAPI.js.map +1 -1
  226. package/build/dist/Server/API/IncidentAPI.js +43 -26
  227. package/build/dist/Server/API/IncidentAPI.js.map +1 -1
  228. package/build/dist/Server/API/IncidentEpisodeAPI.js +21 -12
  229. package/build/dist/Server/API/IncidentEpisodeAPI.js.map +1 -1
  230. package/build/dist/Server/API/MonitorAPI.js +23 -0
  231. package/build/dist/Server/API/MonitorAPI.js.map +1 -1
  232. package/build/dist/Server/API/MonitorTemplateAPI.js +4 -0
  233. package/build/dist/Server/API/MonitorTemplateAPI.js.map +1 -1
  234. package/build/dist/Server/API/ProbeAPI.js +131 -15
  235. package/build/dist/Server/API/ProbeAPI.js.map +1 -1
  236. package/build/dist/Server/API/ProjectAPI.js +62 -3
  237. package/build/dist/Server/API/ProjectAPI.js.map +1 -1
  238. package/build/dist/Server/API/ScheduledMaintenanceAPI.js +23 -14
  239. package/build/dist/Server/API/ScheduledMaintenanceAPI.js.map +1 -1
  240. package/build/dist/Server/API/StatusPageAPI.js +61 -33
  241. package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
  242. package/build/dist/Server/API/WorkspaceNotificationRuleAPI.js +26 -2
  243. package/build/dist/Server/API/WorkspaceNotificationRuleAPI.js.map +1 -1
  244. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785241000000-AddColumnsToTableView.js +12 -0
  245. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785241000000-AddColumnsToTableView.js.map +1 -0
  246. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785320000000-RepairCrossProjectIncidentReferences.js +397 -0
  247. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785320000000-RepairCrossProjectIncidentReferences.js.map +1 -0
  248. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785329453269-AddParentGroupToStatusPageGroup.js +16 -0
  249. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785329453269-AddParentGroupToStatusPageGroup.js.map +1 -0
  250. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785397674289-AddRecommendationDismissalTable.js +30 -0
  251. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785397674289-AddRecommendationDismissalTable.js.map +1 -0
  252. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785405581596-AddDroppedCountersToDropFilters.js +34 -0
  253. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1785405581596-AddDroppedCountersToDropFilters.js.map +1 -0
  254. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +10 -0
  255. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  256. package/build/dist/Server/Services/AlertEpisodeService.js +39 -0
  257. package/build/dist/Server/Services/AlertEpisodeService.js.map +1 -1
  258. package/build/dist/Server/Services/AlertService.js +95 -0
  259. package/build/dist/Server/Services/AlertService.js.map +1 -1
  260. package/build/dist/Server/Services/BillingService.js +71 -0
  261. package/build/dist/Server/Services/BillingService.js.map +1 -1
  262. package/build/dist/Server/Services/DatabaseService.js +140 -17
  263. package/build/dist/Server/Services/DatabaseService.js.map +1 -1
  264. package/build/dist/Server/Services/IncidentEpisodeService.js +39 -0
  265. package/build/dist/Server/Services/IncidentEpisodeService.js.map +1 -1
  266. package/build/dist/Server/Services/IncidentService.js +100 -0
  267. package/build/dist/Server/Services/IncidentService.js.map +1 -1
  268. package/build/dist/Server/Services/IncidentTemplateService.js +97 -0
  269. package/build/dist/Server/Services/IncidentTemplateService.js.map +1 -1
  270. package/build/dist/Server/Services/Index.js +2 -0
  271. package/build/dist/Server/Services/Index.js.map +1 -1
  272. package/build/dist/Server/Services/LogDropFilterService.js +93 -0
  273. package/build/dist/Server/Services/LogDropFilterService.js.map +1 -1
  274. package/build/dist/Server/Services/MonitorProbeService.js +73 -5
  275. package/build/dist/Server/Services/MonitorProbeService.js.map +1 -1
  276. package/build/dist/Server/Services/MonitorService.js +34 -39
  277. package/build/dist/Server/Services/MonitorService.js.map +1 -1
  278. package/build/dist/Server/Services/NetworkDeviceDiscoveryScanService.js +71 -0
  279. package/build/dist/Server/Services/NetworkDeviceDiscoveryScanService.js.map +1 -1
  280. package/build/dist/Server/Services/ProbeService.js +64 -0
  281. package/build/dist/Server/Services/ProbeService.js.map +1 -1
  282. package/build/dist/Server/Services/ProjectService.js +103 -7
  283. package/build/dist/Server/Services/ProjectService.js.map +1 -1
  284. package/build/dist/Server/Services/RecommendationDismissalService.js +50 -0
  285. package/build/dist/Server/Services/RecommendationDismissalService.js.map +1 -0
  286. package/build/dist/Server/Services/RunbookAgentJobService.js +63 -5
  287. package/build/dist/Server/Services/RunbookAgentJobService.js.map +1 -1
  288. package/build/dist/Server/Services/ScheduledMaintenanceService.js +83 -0
  289. package/build/dist/Server/Services/ScheduledMaintenanceService.js.map +1 -1
  290. package/build/dist/Server/Services/ScheduledMaintenanceTemplateService.js +65 -0
  291. package/build/dist/Server/Services/ScheduledMaintenanceTemplateService.js.map +1 -1
  292. package/build/dist/Server/Services/StatusPageGroupService.js +136 -0
  293. package/build/dist/Server/Services/StatusPageGroupService.js.map +1 -1
  294. package/build/dist/Server/Services/TraceDropFilterService.js +93 -0
  295. package/build/dist/Server/Services/TraceDropFilterService.js.map +1 -1
  296. package/build/dist/Server/Types/Workflow/Components/API/Delete.js +11 -0
  297. package/build/dist/Server/Types/Workflow/Components/API/Delete.js.map +1 -1
  298. package/build/dist/Server/Types/Workflow/Components/API/Get.js +11 -0
  299. package/build/dist/Server/Types/Workflow/Components/API/Get.js.map +1 -1
  300. package/build/dist/Server/Types/Workflow/Components/API/Patch.js +11 -0
  301. package/build/dist/Server/Types/Workflow/Components/API/Patch.js.map +1 -1
  302. package/build/dist/Server/Types/Workflow/Components/API/Post.js +11 -0
  303. package/build/dist/Server/Types/Workflow/Components/API/Post.js.map +1 -1
  304. package/build/dist/Server/Types/Workflow/Components/API/Put.js +12 -0
  305. package/build/dist/Server/Types/Workflow/Components/API/Put.js.map +1 -1
  306. package/build/dist/Server/Utils/Database/ProjectScopedReferenceValidator.js +132 -0
  307. package/build/dist/Server/Utils/Database/ProjectScopedReferenceValidator.js.map +1 -0
  308. package/build/dist/Server/Utils/DropFilterValidation.js +80 -0
  309. package/build/dist/Server/Utils/DropFilterValidation.js.map +1 -0
  310. package/build/dist/Server/Utils/Errors.js +3 -0
  311. package/build/dist/Server/Utils/Errors.js.map +1 -1
  312. package/build/dist/Server/Utils/Monitor/MonitorAlert.js +30 -12
  313. package/build/dist/Server/Utils/Monitor/MonitorAlert.js.map +1 -1
  314. package/build/dist/Server/Utils/Monitor/MonitorIncident.js +38 -18
  315. package/build/dist/Server/Utils/Monitor/MonitorIncident.js.map +1 -1
  316. package/build/dist/Server/Utils/Telemetry/AppMetrics.js +26 -0
  317. package/build/dist/Server/Utils/Telemetry/AppMetrics.js.map +1 -1
  318. package/build/dist/Types/Date.js +14 -4
  319. package/build/dist/Types/Date.js.map +1 -1
  320. package/build/dist/Types/JSONFunctions.js +8 -3
  321. package/build/dist/Types/JSONFunctions.js.map +1 -1
  322. package/build/dist/Types/Kubernetes/KubernetesCostIngest.js.map +1 -1
  323. package/build/dist/Types/Monitor/KubernetesAlertTemplates.js +192 -0
  324. package/build/dist/Types/Monitor/KubernetesAlertTemplates.js.map +1 -1
  325. package/build/dist/Types/Monitor/MonitorStep.js +6 -1
  326. package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
  327. package/build/dist/Types/Monitor/MonitorStepMetricMonitor.js +32 -1
  328. package/build/dist/Types/Monitor/MonitorStepMetricMonitor.js.map +1 -1
  329. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationCatalog.js +294 -0
  330. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationCatalog.js.map +1 -0
  331. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.js +110 -0
  332. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.js.map +1 -0
  333. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationTypes.js +58 -0
  334. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationTypes.js.map +1 -0
  335. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationUtil.js +451 -0
  336. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationUtil.js.map +1 -0
  337. package/build/dist/Types/Permission.js +40 -0
  338. package/build/dist/Types/Permission.js.map +1 -1
  339. package/build/dist/Types/Recommendation/RecommendationType.js +21 -0
  340. package/build/dist/Types/Recommendation/RecommendationType.js.map +1 -0
  341. package/build/dist/Types/Runbook/RunbookExecutionDeadline.js +93 -0
  342. package/build/dist/Types/Runbook/RunbookExecutionDeadline.js.map +1 -0
  343. package/build/dist/Types/Runbook/RunbookStepTimeout.js +142 -0
  344. package/build/dist/Types/Runbook/RunbookStepTimeout.js.map +1 -0
  345. package/build/dist/Types/Telemetry/DropFilterSampling.js +75 -0
  346. package/build/dist/Types/Telemetry/DropFilterSampling.js.map +1 -0
  347. package/build/dist/UI/Components/AI/GenerateFromAIModal.js +1 -2
  348. package/build/dist/UI/Components/AI/GenerateFromAIModal.js.map +1 -1
  349. package/build/dist/UI/Components/Accordion/Accordion.js +9 -2
  350. package/build/dist/UI/Components/Accordion/Accordion.js.map +1 -1
  351. package/build/dist/UI/Components/BulkUpdate/BulkLabelActions.js +1 -1
  352. package/build/dist/UI/Components/BulkUpdate/BulkLabelActions.js.map +1 -1
  353. package/build/dist/UI/Components/CodeEditor/CodeEditor.js +27 -14
  354. package/build/dist/UI/Components/CodeEditor/CodeEditor.js.map +1 -1
  355. package/build/dist/UI/Components/Date/RangeStartAndEndDateView.js +1 -1
  356. package/build/dist/UI/Components/Date/RangeStartAndEndDateView.js.map +1 -1
  357. package/build/dist/UI/Components/EditionLabel/EditionLabel.js +2 -20
  358. package/build/dist/UI/Components/EditionLabel/EditionLabel.js.map +1 -1
  359. package/build/dist/UI/Components/Error/PageError.js +1 -3
  360. package/build/dist/UI/Components/Error/PageError.js.map +1 -1
  361. package/build/dist/UI/Components/ErrorBoundary.js +145 -11
  362. package/build/dist/UI/Components/ErrorBoundary.js.map +1 -1
  363. package/build/dist/UI/Components/InfoCard/InfoCard.js +28 -1
  364. package/build/dist/UI/Components/InfoCard/InfoCard.js.map +1 -1
  365. package/build/dist/UI/Components/LogsViewer/components/LogTimeRangePicker.js +13 -2
  366. package/build/dist/UI/Components/LogsViewer/components/LogTimeRangePicker.js.map +1 -1
  367. package/build/dist/UI/Components/MasterPage/MasterPage.js +50 -1
  368. package/build/dist/UI/Components/MasterPage/MasterPage.js.map +1 -1
  369. package/build/dist/UI/Components/Modal/Modal.js +4 -32
  370. package/build/dist/UI/Components/Modal/Modal.js.map +1 -1
  371. package/build/dist/UI/Components/ModelFormModal/ModelFormModal.js.map +1 -1
  372. package/build/dist/UI/Components/ModelTable/BaseModelTable.js +308 -40
  373. package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
  374. package/build/dist/UI/Components/ModelTable/ColumnCustomizationModal.js +230 -0
  375. package/build/dist/UI/Components/ModelTable/ColumnCustomizationModal.js.map +1 -0
  376. package/build/dist/UI/Components/ModelTable/ColumnPreference.js +258 -0
  377. package/build/dist/UI/Components/ModelTable/ColumnPreference.js.map +1 -0
  378. package/build/dist/UI/Components/ModelTable/CustomFieldColumns.js +168 -0
  379. package/build/dist/UI/Components/ModelTable/CustomFieldColumns.js.map +1 -0
  380. package/build/dist/UI/Components/ModelTable/TableView.js +13 -2
  381. package/build/dist/UI/Components/ModelTable/TableView.js.map +1 -1
  382. package/build/dist/UI/Components/ModelTable/useCustomFieldColumns.js +84 -0
  383. package/build/dist/UI/Components/ModelTable/useCustomFieldColumns.js.map +1 -0
  384. package/build/dist/UI/Components/Runbook/StepTimeoutInput.js +101 -0
  385. package/build/dist/UI/Components/Runbook/StepTimeoutInput.js.map +1 -0
  386. package/build/dist/UI/Components/SideMenu/SideMenu.js +15 -5
  387. package/build/dist/UI/Components/SideMenu/SideMenu.js.map +1 -1
  388. package/build/dist/UI/Components/StatusPage/ResourceGroupSection.js +73 -0
  389. package/build/dist/UI/Components/StatusPage/ResourceGroupSection.js.map +1 -0
  390. package/build/dist/UI/Components/Table/Table.js +15 -2
  391. package/build/dist/UI/Components/Table/Table.js.map +1 -1
  392. package/build/dist/UI/Components/Table/TableRow.js +11 -6
  393. package/build/dist/UI/Components/Table/TableRow.js.map +1 -1
  394. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryTimeRangePicker.js +13 -2
  395. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryTimeRangePicker.js.map +1 -1
  396. package/build/dist/UI/Utils/DropdownAlignment.js +98 -0
  397. package/build/dist/UI/Utils/DropdownAlignment.js.map +1 -0
  398. package/build/dist/UI/Utils/TableFilterUrlState.js +48 -15
  399. package/build/dist/UI/Utils/TableFilterUrlState.js.map +1 -1
  400. package/build/dist/Utils/API.js +39 -2
  401. package/build/dist/Utils/API.js.map +1 -1
  402. package/build/dist/Utils/Monitor/MonitorSummaryProbeUtil.js +97 -0
  403. package/build/dist/Utils/Monitor/MonitorSummaryProbeUtil.js.map +1 -0
  404. package/build/dist/Utils/NetworkDiscovery/ScanTargetUtil.js +330 -0
  405. package/build/dist/Utils/NetworkDiscovery/ScanTargetUtil.js.map +1 -0
  406. package/build/dist/Utils/StatusPage/GroupNestingLayout.js +280 -0
  407. package/build/dist/Utils/StatusPage/GroupNestingLayout.js.map +1 -0
  408. package/build/dist/Utils/StatusPage/GroupTree.js +214 -0
  409. package/build/dist/Utils/StatusPage/GroupTree.js.map +1 -0
  410. package/build/dist/Utils/StatusPage/ResourceUptime.js +60 -16
  411. package/build/dist/Utils/StatusPage/ResourceUptime.js.map +1 -1
  412. package/build/dist/Utils/UserPreferences.js +33 -0
  413. package/build/dist/Utils/UserPreferences.js.map +1 -1
  414. package/package.json +1 -1
@@ -1,6 +1,6 @@
1
1
  import { ButtonStyleType } from "../Button/Button";
2
2
  import ButtonType from "../Button/ButtonTypes";
3
- import Icon, { IconType, SizeProp, ThickProp } from "../Icon/Icon";
3
+ import Icon from "../Icon/Icon";
4
4
  import Loader, { LoaderType } from "../Loader/Loader";
5
5
  import ModalBody from "./ModalBody";
6
6
  import ModalFooter from "./ModalFooter";
@@ -96,29 +96,6 @@ const Modal = (props) => {
96
96
  }
97
97
  };
98
98
  }, []);
99
- let iconBgColor = "bg-indigo-50";
100
- let iconColor = "text-indigo-600";
101
- let iconRingColor = "ring-indigo-100";
102
- if (props.iconType === IconType.Info) {
103
- iconBgColor = "bg-indigo-50";
104
- iconColor = "text-indigo-600";
105
- iconRingColor = "ring-indigo-100";
106
- }
107
- else if (props.iconType === IconType.Warning) {
108
- iconBgColor = "bg-yellow-50";
109
- iconColor = "text-yellow-700";
110
- iconRingColor = "ring-yellow-100";
111
- }
112
- else if (props.iconType === IconType.Success) {
113
- iconBgColor = "bg-green-50";
114
- iconColor = "text-green-600";
115
- iconRingColor = "ring-green-100";
116
- }
117
- else if (props.iconType === IconType.Danger) {
118
- iconBgColor = "bg-red-50";
119
- iconColor = "text-red-600";
120
- iconRingColor = "ring-red-100";
121
- }
122
99
  let modalWidthClassName = "sm:max-w-lg md:max-w-lg";
123
100
  if (props.modalWidth === ModalWidth.Medium) {
124
101
  modalWidthClassName = "sm:max-w-3xl md:max-w-3xl";
@@ -132,14 +109,9 @@ const Modal = (props) => {
132
109
  React.createElement("div", { className: "flex min-h-full items-end justify-center p-0 text-center sm:items-center sm:p-6" },
133
110
  React.createElement("div", { ref: modalRef, className: `relative flex max-h-[calc(100vh-1rem)] w-full flex-col rounded-t-2xl border border-gray-200/80 bg-white text-left shadow-2xl ring-1 ring-black/5 sm:my-8 sm:max-h-[calc(100vh-3rem)] sm:rounded-xl ${modalWidthClassName}`, "data-testid": "modal", "aria-labelledby": titleId, "aria-describedby": translatedDescription ? descriptionId : undefined, role: "dialog", "aria-modal": "true", tabIndex: -1 },
134
111
  React.createElement("div", { className: "relative flex shrink-0 flex-col gap-4 rounded-t-2xl border-b border-gray-100 bg-white px-5 py-4 sm:flex-row sm:items-start sm:justify-between sm:gap-6 sm:rounded-t-xl sm:px-6" },
135
- React.createElement("div", { className: `flex min-w-0 flex-1 items-start gap-3 ${props.onClose ? "pr-9 sm:pr-0" : ""}` },
136
- props.icon && (React.createElement("div", { className: `flex h-9 w-9 flex-shrink-0 items-center justify-center rounded-lg ${iconBgColor} ring-1 ring-inset ${iconRingColor}`, "data-testid": "icon" },
137
- React.createElement(Icon, { thick: ThickProp.Thick, type: props.iconType === undefined
138
- ? IconType.Info
139
- : props.iconType, className: `${iconColor} h-5 w-5`, icon: props.icon, size: SizeProp.Five }))),
140
- React.createElement("div", { className: "min-w-0 flex-1" },
141
- React.createElement("h3", { "data-testid": "modal-title", className: "text-base font-semibold leading-6 tracking-tight text-gray-900", id: titleId }, translatedTitle),
142
- translatedDescription && (React.createElement("p", { id: descriptionId, "data-testid": "modal-description", className: "mt-0.5 text-sm leading-5 text-gray-500" }, translatedDescription)))),
112
+ React.createElement("div", { className: `min-w-0 flex-1 ${props.onClose ? "pr-9 sm:pr-0" : ""}` },
113
+ React.createElement("h3", { "data-testid": "modal-title", className: "text-base font-semibold leading-6 tracking-tight text-gray-900", id: titleId }, translatedTitle),
114
+ translatedDescription && (React.createElement("p", { id: descriptionId, "data-testid": "modal-description", className: "mt-0.5 text-sm leading-5 text-gray-500" }, translatedDescription))),
143
115
  props.rightElement && (React.createElement("div", { "data-testid": "right-element", className: `flex-shrink-0 ${props.onClose ? "pr-9" : ""}` }, props.rightElement)),
144
116
  props.onClose && (React.createElement("button", { type: "button", title: translatedCloseLabel, "aria-label": translatedCloseLabel, "data-testid": "close-button", onClick: props.onClose, className: "absolute right-4 top-4 inline-flex h-8 w-8 items-center justify-center rounded-md text-gray-400 transition-colors hover:bg-gray-100 hover:text-gray-700 focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500 focus-visible:ring-offset-2" },
145
117
  React.createElement(Icon, { icon: IconProp.Close, className: "h-4 w-4" })))),
@@ -1 +1 @@
1
- {"version":3,"file":"Modal.js","sourceRoot":"","sources":["../../../../../UI/Components/Modal/Modal.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Modal.js","sourceRoot":"","sources":["../../../../../UI/Components/Modal/Modal.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,UAAU,MAAM,uBAAuB,CAAC;AAC/C,OAAO,IAAI,MAAM,cAAc,CAAC;AAChC,OAAO,MAAM,EAAE,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,SAAS,MAAM,aAAa,CAAC;AACpC,OAAO,WAAW,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,QAAQ,MAAM,8BAA8B,CAAC;AACpD,OAAO,iBAAiB,MAAM,yBAAyB,CAAC;AACxD,OAAO,KAAK,EAAE,EAGZ,SAAS,EACT,KAAK,EACL,MAAM,GACP,MAAM,OAAO,CAAC;AAEf,MAAM,CAAN,IAAY,UAIX;AAJD,WAAY,UAAU;IACpB,+CAAM,CAAA;IACN,+CAAM,CAAA;IACN,6CAAK,CAAA;AACP,CAAC,EAJW,UAAU,KAAV,UAAU,QAIrB;AAsBD,MAAM,KAAK,GAAsC,CAC/C,KAAqB,EACP,EAAE;IAChB,MAAM,EAAE,eAAe,EAAE,GAAG,iBAAiB,EAAE,CAAC;IAChD,MAAM,eAAe,GAAW,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC;IAC5E,MAAM,qBAAqB,GAAuB,eAAe,CAC/D,KAAK,CAAC,WAAW,CAClB,CAAC;IACF,MAAM,0BAA0B,GAAuB,eAAe,CACpE,KAAK,CAAC,gBAAgB,CACvB,CAAC;IACF,MAAM,yBAAyB,GAAuB,eAAe,CACnE,KAAK,CAAC,eAAe,CACtB,CAAC;IACF,MAAM,oBAAoB,GAAW,eAAe,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC;IACzE,MAAM,QAAQ,GACZ,MAAM,CAAiB,IAAI,CAAC,CAAC;IAC/B,MAAM,2BAA2B,GAC/B,MAAM,CACJ,OAAO,QAAQ,KAAK,WAAW;QAC7B,QAAQ,CAAC,aAAa,YAAY,WAAW;QAC7C,CAAC,CAAC,QAAQ,CAAC,aAAa;QACxB,CAAC,CAAC,IAAI,CACT,CAAC;IACJ,MAAM,UAAU,GAAqD,MAAM,CAEzE,KAAK,CAAC,OAAO,CAAC,CAAC;IACjB,MAAM,OAAO,GAAW,KAAK,EAAE,CAAC;IAChC,MAAM,aAAa,GAAW,KAAK,EAAE,CAAC;IAEtC,SAAS,CAAC,GAAG,EAAE;QACb,UAAU,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IACrC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IAEpB,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,KAAK,GAA0B,QAAQ,CAAC,OAAO,CAAC;QACtD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO;QACT,CAAC;QAED,MAAM,oBAAoB,GACxB,GAAuB,EAAE;YACvB,OAAO,KAAK,CAAC,IAAI,CACf,KAAK,CAAC,gBAAgB,CACpB,0EAA0E,CAC3E,CACF,CAAC,MAAM,CAAC,CAAC,OAAoB,EAAE,EAAE;gBAChC,OAAO,CACL,CAAC,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC;oBACjC,OAAO,CAAC,YAAY,CAAC,aAAa,CAAC,KAAK,MAAM,CAC/C,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QAEJ,MAAM,eAAe,GAAkB,GAAY,EAAE;YACnD,MAAM,WAAW,GAAmB,KAAK,CAAC,IAAI,CAC5C,QAAQ,CAAC,gBAAgB,CAAC,oCAAoC,CAAC,CAChE,CAAC;YAEF,OAAO,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,KAAK,CAAC;QACvD,CAAC,CAAC;QAEF,MAAM,mBAAmB,GACvB,oBAAoB,EAAE,CAAC,IAAI,CAAC,CAAC,OAAoB,EAAE,EAAE;YACnD,OAAO,OAAO,CAAC,YAAY,CAAC,aAAa,CAAC,KAAK,cAAc,CAAC;QAChE,CAAC,CAAC,CAAC;QAEL,IAAI,eAAe,EAAE,EAAE,CAAC;YACtB,CAAC,mBAAmB,IAAI,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;QACzC,CAAC;QAED,MAAM,aAAa,GAAmC,CACpD,KAAoB,EACd,EAAE;YACR,IAAI,KAAK,CAAC,gBAAgB,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC;gBACjD,OAAO;YACT,CAAC;YAED,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;gBACjD,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,UAAU,CAAC,OAAO,EAAE,CAAC;gBACrB,OAAO;YACT,CAAC;YAED,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,EAAE,CAAC;gBACxB,OAAO;YACT,CAAC;YAED,MAAM,iBAAiB,GAAuB,oBAAoB,EAAE,CAAC;YAErE,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACnC,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,KAAK,CAAC,KAAK,EAAE,CAAC;gBACd,OAAO;YACT,CAAC;YAED,MAAM,qBAAqB,GAAgB,iBAAiB,CAAC,CAAC,CAAE,CAAC;YACjE,MAAM,oBAAoB,GACxB,iBAAiB,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC;YACnD,MAAM,aAAa,GAAmB,QAAQ,CAAC,aAAa,CAAC;YAE7D,IACE,KAAK,CAAC,QAAQ;gBACd,CAAC,aAAa,KAAK,qBAAqB;oBACtC,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,EACjC,CAAC;gBACD,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,oBAAoB,CAAC,KAAK,EAAE,CAAC;YAC/B,CAAC;iBAAM,IACL,CAAC,KAAK,CAAC,QAAQ;gBACf,CAAC,aAAa,KAAK,oBAAoB;oBACrC,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,EACjC,CAAC;gBACD,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,qBAAqB,CAAC,KAAK,EAAE,CAAC;YAChC,CAAC;QACH,CAAC,CAAC;QAEF,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;QAEpD,OAAO,GAAG,EAAE;;YACV,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;YAEvD,IAAI,MAAA,2BAA2B,CAAC,OAAO,0CAAE,WAAW,EAAE,CAAC;gBACrD,2BAA2B,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YAC9C,CAAC;QACH,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,IAAI,mBAAmB,GAAW,yBAAyB,CAAC;IAE5D,IAAI,KAAK,CAAC,UAAU,KAAK,UAAU,CAAC,MAAM,EAAE,CAAC;QAC3C,mBAAmB,GAAG,2BAA2B,CAAC;IACpD,CAAC;SAAM,IAAI,KAAK,CAAC,UAAU,KAAK,UAAU,CAAC,KAAK,EAAE,CAAC;QACjD,mBAAmB,GAAG,2BAA2B,CAAC;IACpD,CAAC;IAED,OAAO,CACL,6BAAK,SAAS,EAAC,eAAe;QAC5B,6BACE,SAAS,EAAC,kDAAkD,iBAChD,gBAAgB,iBAChB,MAAM,GAClB;QAEF,6BAAK,SAAS,EAAC,oCAAoC;YACjD,6BAAK,SAAS,EAAC,iFAAiF;gBAC9F,6BACE,GAAG,EAAE,QAAQ,EACb,SAAS,EAAE,sMAAsM,mBAAmB,EAAE,iBAC1N,OAAO,qBACF,OAAO,sBACN,qBAAqB,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,EACnE,IAAI,EAAC,QAAQ,gBACF,MAAM,EACjB,QAAQ,EAAE,CAAC,CAAC;oBAEZ,6BAAK,SAAS,EAAC,gLAAgL;wBAC7L,6BACE,SAAS,EAAE,kBACT,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EACnC,EAAE;4BAEF,2CACc,aAAa,EACzB,SAAS,EAAC,gEAAgE,EAC1E,EAAE,EAAE,OAAO,IAEV,eAAe,CACb;4BACJ,qBAAqB,IAAI,CACxB,2BACE,EAAE,EAAE,aAAa,iBACL,mBAAmB,EAC/B,SAAS,EAAC,wCAAwC,IAEjD,qBAAqB,CACpB,CACL,CACG;wBACL,KAAK,CAAC,YAAY,IAAI,CACrB,4CACc,eAAe,EAC3B,SAAS,EAAE,iBAAiB,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,IAExD,KAAK,CAAC,YAAY,CACf,CACP;wBACA,KAAK,CAAC,OAAO,IAAI,CAChB,gCACE,IAAI,EAAC,QAAQ,EACb,KAAK,EAAE,oBAAoB,gBACf,oBAAoB,iBACpB,cAAc,EAC1B,OAAO,EAAE,KAAK,CAAC,OAAO,EACtB,SAAS,EAAC,2PAA2P;4BAErQ,oBAAC,IAAI,IAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,EAAE,SAAS,EAAC,SAAS,GAAG,CAC3C,CACV,CACG;oBAEN,6BACE,SAAS,EAAC,qEAAqE,iBACnE,eAAe;wBAE3B,oBAAC,SAAS,IAAC,KAAK,EAAE,KAAK,CAAC,KAAK,IAC1B,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CACtB,KAAK,CAAC,QAAQ,CACf,CAAC,CAAC,CAAC,CACF,6BAAK,SAAS,EAAC,sCAAsC;4BACnD,oBAAC,MAAM,IACL,UAAU,EAAE,UAAU,CAAC,GAAG,EAC1B,KAAK,EAAE,aAAa,EACpB,IAAI,EAAE,GAAG,GACT,CACE,CACP,CACS,CACR;oBACN,oBAAC,WAAW,IACV,gBAAgB,EACd,KAAK,CAAC,gBAAgB;4BACpB,CAAC,CAAC,KAAK,CAAC,gBAAgB;4BACxB,CAAC,CAAC,UAAU,CAAC,MAAM,EAEvB,qBAAqB,EACnB,KAAK,CAAC,qBAAqB;4BACzB,CAAC,CAAC,KAAK,CAAC,qBAAqB;4BAC7B,CAAC,CAAC,eAAe,CAAC,OAAO,EAE7B,oBAAoB,EAClB,KAAK,CAAC,oBAAoB;4BACxB,CAAC,CAAC,KAAK,CAAC,oBAAoB;4BAC5B,CAAC,CAAC,eAAe,CAAC,MAAM,EAE5B,gBAAgB,EACd,0BAA0B;4BACxB,CAAC,CAAC,0BAA0B;4BAC5B,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,MAAM,EAEvC,eAAe,EACb,yBAAyB;4BACvB,CAAC,CAAC,yBAAyB;4BAC3B,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,QAAQ,EAE3C,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAClD,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,KAAK,EACnC,mBAAmB,EACjB,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,mBAAmB,EAElD,iBAAiB,EAAE,KAAK,CAAC,iBAAiB,GAC1C,CACE,CACF,CACF,CACF,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,KAAK,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ModelFormModal.js","sourceRoot":"","sources":["../../../../../UI/Components/ModelFormModal/ModelFormModal.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ModelFormModal.js","sourceRoot":"","sources":["../../../../../UI/Components/ModelFormModal/ModelFormModal.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEnD,OAAO,UAAU,MAAM,uBAAuB,CAAC;AAE/C,OAAO,SAEN,MAAM,oBAAoB,CAAC;AAE5B,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,SAAS,MAAM,oEAAoE,CAAC;AAG3F,OAAO,KAAK,EAAE,EAAkC,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAuBhF,MAAM,cAAc,GAEA,CAClB,KAAiC,EACnB,EAAE;IAChB,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAU,KAAK,CAAC,CAAC;IAEnE,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,QAAQ,CACtD,KAAK,CAAC,gBAAgB,IAAI,MAAM,CACjC,CAAC;IAEF,MAAM,OAAO,GACX,KAAK,CAAC,OAAO;QACZ,MAAM,CAAoC,IAAI,CAE7C,CAAC;IAEL,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAS,EAAE,CAAC,CAAC;IAE/C,IAAI,UAAU,GAAe,KAAK,CAAC,UAAU,IAAI,UAAU,CAAC,MAAM,CAAC;IAEnE,IAAI,KAAK,CAAC,SAAS,CAAC,KAAK,IAAI,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9D,UAAU,GAAG,KAAK,CAAC,UAAU,IAAI,UAAU,CAAC,MAAM,CAAC;IACrD,CAAC;IAED,OAAO,CACL,oBAAC,KAAK,oBACA,KAAK,IACT,gBAAgB,EAAE,gBAAgB,EAClC,UAAU,EAAE,UAAU,EACtB,gBAAgB,EAAE,UAAU,CAAC,MAAM,EACnC,SAAS,EAAE,aAAa,EACxB,WAAW,EAAE,KAAK,CAAC,WAAW,EAC9B,mBAAmB,EAAE,aAAa,EAClC,QAAQ,EAAE,KAAK,IAAI,EAAE;;YACnB,MAAM,CAAA,MAAA,OAAO,CAAC,OAAO,0CAAE,UAAU,EAAE,CAAA,CAAC;QACtC,CAAC,EACD,KAAK,EAAE,KAAK;QAEX,CAAC,KAAK,CAAC,CAAC,CAAC,CACR;YACE,oBAAC,SAAS,oBACJ,KAAK,CAAC,SAAS,IACnB,IAAI,EAAE,KAAK,CAAC,IAAI,EAChB,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,SAAS,EAAE,KAAK,CAAC,SAAS,EAC1B,gBAAgB,EAAE,CAAC,cAAuB,EAAE,EAAE;oBAC5C,IAAI,cAAc,EAAE,CAAC;wBACnB,mBAAmB,CAAC,KAAK,CAAC,gBAAgB,IAAI,MAAM,CAAC,CAAC;oBACxD,CAAC;yBAAM,CAAC;wBACN,mBAAmB,CAAC,MAAM,CAAC,CAAC;oBAC9B,CAAC;gBACH,CAAC,EACD,aAAa,EAAE,KAAK,CAAC,aAAa,EAClC,gBAAgB,EAAE,IAAI,EACtB,OAAO,EAAE,OAAO,EAChB,eAAe,EAAE,CAAC,aAAsB,EAAE,EAAE;oBAC1C,gBAAgB,CAAC,aAAa,CAAC,CAAC;gBAClC,CAAC,EACD,aAAa,EAAE,KAAK,CAAC,aAAa,EAClC,SAAS,EAAE,CAAC,IAAgB,EAAE,EAAE;oBAC9B,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;wBACpB,KAAK,CAAC,SAAS,CACb,SAAS,CAAC,cAAc,CAAC,IAAkB,EAAE,KAAK,CAAC,SAAS,CAAC,CAC9D,CAAC;oBACJ,CAAC;gBACH,CAAC,EACD,OAAO,EAAE,CAAC,KAAa,EAAE,EAAE;oBACzB,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAClB,CAAC,EACD,cAAc,EAAE,KAAK,CAAC,cAAc,IACpC;YAED,KAAK,CAAC,MAAM,CACZ,CACJ,CAAC,CAAC,CAAC,CACF,yCAAK,CACN;QAEA,KAAK,CAAC,CAAC,CAAC,oBAAC,KAAK,IAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,CAAC,MAAM,GAAI,CAAC,CAAC,CAAC,yCAAK,CAC1D,CACT,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,cAAc,CAAC"}
@@ -25,6 +25,10 @@ import OrderedStatesList from "../OrderedStatesList/OrderedStatesList";
25
25
  import Pill from "../Pill/Pill";
26
26
  import Table from "../Table/Table";
27
27
  import FieldType from "../Types/FieldType";
28
+ import ColumnCustomizationModal from "./ColumnCustomizationModal";
29
+ import { applyColumnPreference, buildColumnPreference, fromJSON as columnPreferenceFromJSON, getCustomizableColumns, isEmptyColumnPreference, sanitizeColumnPreference, getColumnIds, toJSON as columnPreferenceToJSON, } from "./ColumnPreference";
30
+ import { CustomFieldsColumnKey } from "./CustomFieldColumns";
31
+ import useCustomFieldColumns from "./useCustomFieldColumns";
28
32
  import { getExportKeysFromColumn } from "./ExportFromColumns";
29
33
  import { getRelationSelectFromColumns, getSelectFromColumns, } from "./SelectFromColumns";
30
34
  import AnalyticsBaseModel from "../../../Models/AnalyticsModels/AnalyticsBaseModel/AnalyticsBaseModel";
@@ -110,6 +114,83 @@ const BaseModelTable = (props) => {
110
114
  const [showHelpModal, setShowHelpModal] = useState(false);
111
115
  const [viewId, setViewId] = useState(null);
112
116
  const [tableColumns, setColumns] = useState([]);
117
+ /*
118
+ * ---------------------------------------------------------------------
119
+ * Viewer-customizable columns
120
+ * ---------------------------------------------------------------------
121
+ *
122
+ * The viewer's layout (which columns are on, and in what order) is a
123
+ * personal, presentational preference, so it lives in localStorage next to
124
+ * the page size rather than on the server: saved views are named, explicit,
125
+ * plan-gated and need write permission, none of which should stand between
126
+ * someone and hiding a column they don't care about. A saved view can still
127
+ * carry a layout of its own, and when one is active it wins.
128
+ *
129
+ * Custom fields are appended to the declared columns as additional,
130
+ * off-by-default columns; from here on they are ordinary columns.
131
+ */
132
+ const customFieldColumns = useCustomFieldColumns({
133
+ customFieldsModelType: props.customFieldsModelType,
134
+ });
135
+ const isColumnCustomizationEnabled = Boolean(!props.disableColumnCustomization &&
136
+ props.userPreferencesKey &&
137
+ showAs !== ShowAs.OrderedStatesList);
138
+ const allColumns = useMemo(() => {
139
+ if (customFieldColumns.columns.length === 0) {
140
+ return props.columns || [];
141
+ }
142
+ return [...(props.columns || []), ...customFieldColumns.columns];
143
+ }, [props.columns, customFieldColumns.columns]);
144
+ const readStoredColumnPreference = () => {
145
+ if (!props.userPreferencesKey) {
146
+ return null;
147
+ }
148
+ return columnPreferenceFromJSON(UserPreferences.getUserPreferenceByTypeAsJSON({
149
+ key: props.userPreferencesKey,
150
+ userPreferenceType: UserPreferenceType.BaseModelTableColumns,
151
+ }));
152
+ };
153
+ const [columnPreference, setColumnPreference] = useState(readStoredColumnPreference);
154
+ const [showColumnCustomizationModal, setShowColumnCustomizationModal] = useState(false);
155
+ /*
156
+ * Ids are derived over the *whole* declared set, so a column dropping out
157
+ * for lack of permission can never renumber the ones that remain.
158
+ */
159
+ const allColumnIds = useMemo(() => {
160
+ return getColumnIds(allColumns);
161
+ }, [allColumns]);
162
+ const effectiveColumnPreference = useMemo(() => {
163
+ if (!isColumnCustomizationEnabled) {
164
+ return null;
165
+ }
166
+ /*
167
+ * A stored layout outlives the release that wrote it, so anything naming
168
+ * a column this table no longer has is dropped before it is applied.
169
+ */
170
+ return sanitizeColumnPreference({
171
+ preference: columnPreference,
172
+ knownColumnIds: allColumnIds,
173
+ });
174
+ }, [columnPreference, allColumnIds, isColumnCustomizationEnabled]);
175
+ const saveColumnPreference = (preference) => {
176
+ setColumnPreference(preference);
177
+ if (!props.userPreferencesKey) {
178
+ return;
179
+ }
180
+ const json = columnPreferenceToJSON(preference);
181
+ if (!json) {
182
+ UserPreferences.removeUserPreferenceByType({
183
+ key: props.userPreferencesKey,
184
+ userPreferenceType: UserPreferenceType.BaseModelTableColumns,
185
+ });
186
+ return;
187
+ }
188
+ UserPreferences.saveUserPreferenceByTypeAsJSON({
189
+ key: props.userPreferencesKey,
190
+ userPreferenceType: UserPreferenceType.BaseModelTableColumns,
191
+ value: json,
192
+ });
193
+ };
113
194
  const [classicTableFilters, setClassicTableFilters] = useState([]);
114
195
  const [cardButtons, setCardButtons] = useState([]);
115
196
  const [actionButtonSchema, setActionButtonSchema] = useState([]);
@@ -199,10 +280,48 @@ const BaseModelTable = (props) => {
199
280
  const [isLoading, setIsLoading] = useState(true);
200
281
  const [error, setError] = useState("");
201
282
  const [tableFilterError, setTableFilterError] = useState("");
283
+ const labelFilterConfig = useMemo(() => {
284
+ const filter = props.filters.find((f) => {
285
+ return (f.filterEntityType &&
286
+ f.filterEntityType.name === "Label" &&
287
+ f.field &&
288
+ f.filterDropdownField);
289
+ });
290
+ if (!filter || !filter.field || !filter.filterDropdownField) {
291
+ return null;
292
+ }
293
+ const fieldKey = Object.keys(filter.field)[0];
294
+ if (!fieldKey) {
295
+ return null;
296
+ }
297
+ return {
298
+ fieldKey,
299
+ entityType: filter.filterEntityType,
300
+ fetchQuery: filter.filterQuery || {},
301
+ labelField: filter.filterDropdownField.label,
302
+ };
303
+ }, [props.filters]);
304
+ /*
305
+ * The label chips are a feature of the in-search Label filter, so a table
306
+ * without one has to ignore the URL's `labels` slice entirely.
307
+ *
308
+ * Tables that have since moved Labels out to a facet chip (Monitors,
309
+ * Network Devices) still receive `labels` from older shared/bookmarked
310
+ * links. Seeding those ids anyway produced a chip the table could neither
311
+ * name (`availableLabels` is only fetched when there *is* a config) nor
312
+ * apply (`buildSearchQueryFragment` skips the constraint for the same
313
+ * reason): a force-expanded search box with a raw-UUID pill sitting above a
314
+ * completely unfiltered list, re-persisted on every write until the user
315
+ * clicked its ×. Dropping it here also means the next view write omits the
316
+ * key, so the URL heals itself.
317
+ */
318
+ const restoredLabelIds = labelFilterConfig
319
+ ? initialUrlState.view.labels || []
320
+ : [];
202
321
  const [searchText, setSearchText] = useState(initialUrlState.view.search || "");
203
322
  const [debouncedSearchText, setDebouncedSearchText] = useState(initialUrlState.view.search || "");
204
323
  const [isSearchFocused, setIsSearchFocused] = useState(false);
205
- const [isSearchExpanded, setIsSearchExpanded] = useState(Boolean(initialUrlState.view.search || (initialUrlState.view.labels || []).length));
324
+ const [isSearchExpanded, setIsSearchExpanded] = useState(Boolean(initialUrlState.view.search || restoredLabelIds.length));
206
325
  const searchInputRef = React.useRef(null);
207
326
  const [availableLabels, setAvailableLabels] = useState([]);
208
327
  /*
@@ -211,7 +330,7 @@ const BaseModelTable = (props) => {
211
330
  * are filled in by the hydration effect below once the label list loads.
212
331
  */
213
332
  const [selectedLabels, setSelectedLabels] = useState(() => {
214
- return (initialUrlState.view.labels || []).map((id) => {
333
+ return restoredLabelIds.map((id) => {
215
334
  return { id: id, name: id, color: "#94a3b8" };
216
335
  });
217
336
  });
@@ -294,27 +413,24 @@ const BaseModelTable = (props) => {
294
413
  // reset to first page whenever the active search term or labels change
295
414
  setCurrentPageNumber(1);
296
415
  }, [debouncedSearchText, selectedLabelIdsKey]);
297
- const labelFilterConfig = useMemo(() => {
298
- const filter = props.filters.find((f) => {
299
- return (f.filterEntityType &&
300
- f.filterEntityType.name === "Label" &&
301
- f.field &&
302
- f.filterDropdownField);
303
- });
304
- if (!filter || !filter.field || !filter.filterDropdownField) {
305
- return null;
306
- }
307
- const fieldKey = Object.keys(filter.field)[0];
308
- if (!fieldKey) {
309
- return null;
416
+ /*
417
+ * `props.filters` is not frozen — a page can rebuild it after mount, and
418
+ * that is exactly how a Labels filter leaves the popup for the facet bar.
419
+ * Chips left over from a config that no longer exists are unnameable and
420
+ * unappliable, so drop them here too rather than only at mount.
421
+ */
422
+ useEffect(() => {
423
+ if (labelFilterConfig) {
424
+ return;
310
425
  }
311
- return {
312
- fieldKey,
313
- entityType: filter.filterEntityType,
314
- fetchQuery: filter.filterQuery || {},
315
- labelField: filter.filterDropdownField.label,
316
- };
317
- }, [props.filters]);
426
+ setSelectedLabels((existing) => {
427
+ /*
428
+ * Same array when there is nothing to clear, so this costs an idle table
429
+ * no re-render.
430
+ */
431
+ return existing.length === 0 ? existing : [];
432
+ });
433
+ }, [labelFilterConfig]);
318
434
  // Fetch labels on first search expansion if this resource supports them.
319
435
  useEffect(() => {
320
436
  if (!isSearchExpanded || !labelFilterConfig || labelsFetched) {
@@ -496,8 +612,11 @@ const BaseModelTable = (props) => {
496
612
  }
497
613
  }, [tableColumns]);
498
614
  const getRelationSelect = () => {
615
+ /*
616
+ * Deliberately the *unfiltered* column set. See getSelect() below.
617
+ */
499
618
  return getRelationSelectFromColumns({
500
- columns: props.columns || [],
619
+ columns: allColumns,
501
620
  model: model,
502
621
  });
503
622
  };
@@ -530,7 +649,21 @@ const BaseModelTable = (props) => {
530
649
  selectFields = props.callbacks.addSlugToSelect(selectFields);
531
650
  const userPermissions = getUserPermissions();
532
651
  const accessControl = model.getColumnAccessControlForAllColumns();
533
- for (const column of props.columns || []) {
652
+ /*
653
+ * The viewer's layout is applied to the *input* of this loop, never to
654
+ * the finished array: the Actions column is appended below and has to
655
+ * stay last, and it is generated rather than declared, so it is not the
656
+ * viewer's to move or switch off.
657
+ */
658
+ const columnsToRender = applyColumnPreference({
659
+ columns: allColumns,
660
+ preference: effectiveColumnPreference,
661
+ });
662
+ const columnIdByColumn = new Map();
663
+ allColumns.forEach((column, index) => {
664
+ columnIdByColumn.set(column, allColumnIds[index]);
665
+ });
666
+ for (const column of columnsToRender) {
534
667
  const hasPermission = hasPermissionToReadColumn(column) || User.isMasterAdmin();
535
668
  const key = getColumnKey(column);
536
669
  if (hasPermission) {
@@ -550,7 +683,7 @@ const BaseModelTable = (props) => {
550
683
  "." +
551
684
  column.selectedProperty)
552
685
  : key;
553
- columns.push(Object.assign(Object.assign({}, column), { disableSort: column.disableSort || shouldDisableSort(key), key: columnKey,
686
+ columns.push(Object.assign(Object.assign({}, column), { id: columnIdByColumn.get(column), disableSort: column.disableSort || shouldDisableSort(key), key: columnKey,
554
687
  /*
555
688
  * `key` is only the first declared field, so a cell composed from
556
689
  * several of them would export just that one. Hand the exporter
@@ -1065,13 +1198,35 @@ const BaseModelTable = (props) => {
1065
1198
  });
1066
1199
  }, []);
1067
1200
  const getSelect = () => {
1201
+ /*
1202
+ * Every declared column, including the ones the viewer has switched off.
1203
+ *
1204
+ * Hiding must not narrow the request. A column's `getElement` is arbitrary
1205
+ * caller code that can read any field on the row — a "Status" cell that
1206
+ * also reads `currentMonitorStatus`, say — so dropping a hidden column's
1207
+ * fields from the select would silently blank a *different*, visible cell,
1208
+ * and there is no way to detect that statically. The sort field is
1209
+ * likewise independent of what is on screen. The cost is a few unused
1210
+ * fields on the wire.
1211
+ */
1068
1212
  const selectFields = getSelectFromColumns({
1069
- columns: props.columns || [],
1213
+ columns: allColumns,
1070
1214
  model: model,
1071
1215
  hasPermissionToReadField: (field) => {
1072
1216
  return hasPermissionToReadField(field);
1073
1217
  },
1074
1218
  });
1219
+ /*
1220
+ * Custom field columns arrive asynchronously, but the table does not
1221
+ * refetch when its column set changes — so the JSON column that backs
1222
+ * every one of them is selected up front, off the synchronous prop, and
1223
+ * the values are there the moment the definitions land.
1224
+ */
1225
+ if (props.customFieldsModelType &&
1226
+ model.hasColumn(CustomFieldsColumnKey) &&
1227
+ hasPermissionToReadField(CustomFieldsColumnKey)) {
1228
+ selectFields[CustomFieldsColumnKey] = true;
1229
+ }
1075
1230
  const selectMoreFields = props.selectMoreFields
1076
1231
  ? Object.keys(props.selectMoreFields)
1077
1232
  : [];
@@ -1102,7 +1257,7 @@ const BaseModelTable = (props) => {
1102
1257
  return React.createElement(React.Fragment, null);
1103
1258
  }
1104
1259
  if (props.saveFilterProps && props.saveFilterProps.tableId) {
1105
- return (React.createElement(TableViewElement, { tableId: props.saveFilterProps.tableId, tableView: tableView, currentQuery: query, currentSortBy: sortBy, currentItemsOnPage: itemsOnPage, currentSortOrder: sortOrder, currentFacetState: props.currentFacetState, onViewChange: async (tableView) => {
1260
+ return (React.createElement(TableViewElement, { tableId: props.saveFilterProps.tableId, tableView: tableView, currentQuery: query, currentSortBy: sortBy, currentItemsOnPage: itemsOnPage, currentSortOrder: sortOrder, currentFacetState: props.currentFacetState, currentColumns: columnPreferenceToJSON(effectiveColumnPreference) || undefined, onViewChange: async (tableView) => {
1106
1261
  var _a;
1107
1262
  setTableView(tableView);
1108
1263
  if (tableView) {
@@ -1128,6 +1283,15 @@ const BaseModelTable = (props) => {
1128
1283
  if (props.onFacetStateRestored) {
1129
1284
  props.onFacetStateRestored(tableView.facets || null);
1130
1285
  }
1286
+ /*
1287
+ * A saved view carries the columns it was saved with. Views
1288
+ * created before this existed have none, which restores the
1289
+ * table's default layout rather than leaving the previous
1290
+ * view's columns in place.
1291
+ */
1292
+ if (isColumnCustomizationEnabled) {
1293
+ saveColumnPreference(columnPreferenceFromJSON(tableView.columns || null));
1294
+ }
1131
1295
  }
1132
1296
  else {
1133
1297
  setQuery({});
@@ -1145,6 +1309,12 @@ const BaseModelTable = (props) => {
1145
1309
  if (props.onFacetStateRestored) {
1146
1310
  props.onFacetStateRestored(null);
1147
1311
  }
1312
+ /*
1313
+ * Columns are deliberately left alone here. Clearing a saved
1314
+ * view means "stop filtering like that", not "throw away the
1315
+ * column layout I built" - which the viewer may well have set
1316
+ * up long before this view existed.
1317
+ */
1148
1318
  }
1149
1319
  } }));
1150
1320
  }
@@ -1252,6 +1422,22 @@ const BaseModelTable = (props) => {
1252
1422
  icon: IconProp.Filter,
1253
1423
  });
1254
1424
  }
1425
+ /*
1426
+ * Only worth offering once there is a choice to make. A single-column
1427
+ * table has nothing to hide and nothing to reorder.
1428
+ */
1429
+ if (isColumnCustomizationEnabled && allColumns.length > 1) {
1430
+ headerbuttons.push({
1431
+ title: "",
1432
+ buttonStyle: ButtonStyleType.ICON,
1433
+ buttonSize: ButtonSize.Small,
1434
+ className: "",
1435
+ onClick: () => {
1436
+ setShowColumnCustomizationModal(true);
1437
+ },
1438
+ icon: IconProp.TableCells,
1439
+ });
1440
+ }
1255
1441
  setCardButtons(headerbuttons);
1256
1442
  };
1257
1443
  useEffect(() => {
@@ -1350,6 +1536,13 @@ const BaseModelTable = (props) => {
1350
1536
  useEffect(() => {
1351
1537
  serializeToTableColumns();
1352
1538
  }, [props.columns]);
1539
+ /*
1540
+ * The viewer changed their layout, or the project's custom field
1541
+ * definitions finally arrived.
1542
+ */
1543
+ useEffect(() => {
1544
+ serializeToTableColumns();
1545
+ }, [effectiveColumnPreference, customFieldColumns.columns]);
1353
1546
  const setActionSchema = () => {
1354
1547
  const permissions = PermissionUtil.getAllPermissions();
1355
1548
  const actionsSchema = [];
@@ -1892,17 +2085,18 @@ const BaseModelTable = (props) => {
1892
2085
  }, role: "presentation" },
1893
2086
  React.createElement(Icon, { icon: IconProp.Search, className: `h-4 w-4 flex-none transition-colors duration-200 ${iconColorClass}` }),
1894
2087
  React.createElement("div", { className: "flex min-w-0 flex-1 flex-wrap items-center gap-1.5" },
1895
- selectedLabels.map((label) => {
1896
- return (React.createElement("span", { key: label.id, className: "inline-flex items-center gap-1 rounded-full bg-gray-50 py-0.5 pl-2 pr-1 text-xs font-medium text-gray-700 ring-1 ring-inset ring-gray-200 transition-all hover:bg-gray-100", title: `Label: ${label.name}` },
1897
- React.createElement("span", { className: "h-2 w-2 flex-none rounded-full", style: { backgroundColor: label.color }, "aria-hidden": "true" }),
1898
- React.createElement("span", { className: "max-w-[8rem] truncate" }, label.name),
1899
- React.createElement("button", { type: "button", onMouseDown: (e) => {
1900
- e.preventDefault();
1901
- }, onClick: () => {
1902
- removeLabel(label.id);
1903
- }, title: "Remove label", "aria-label": `Remove ${label.name}`, className: "ml-0.5 flex-none rounded-full p-0.5 text-gray-400 transition-colors hover:bg-gray-200 hover:text-gray-700" },
1904
- React.createElement(Icon, { icon: IconProp.Close, className: "h-3 w-3" }))));
1905
- }),
2088
+ hasLabelSupport &&
2089
+ selectedLabels.map((label) => {
2090
+ return (React.createElement("span", { key: label.id, className: "inline-flex items-center gap-1 rounded-full bg-gray-50 py-0.5 pl-2 pr-1 text-xs font-medium text-gray-700 ring-1 ring-inset ring-gray-200 transition-all hover:bg-gray-100", title: `Label: ${label.name}` },
2091
+ React.createElement("span", { className: "h-2 w-2 flex-none rounded-full", style: { backgroundColor: label.color }, "aria-hidden": "true" }),
2092
+ React.createElement("span", { className: "max-w-[8rem] truncate" }, label.name),
2093
+ React.createElement("button", { type: "button", onMouseDown: (e) => {
2094
+ e.preventDefault();
2095
+ }, onClick: () => {
2096
+ removeLabel(label.id);
2097
+ }, title: "Remove label", "aria-label": `Remove ${label.name}`, className: "ml-0.5 flex-none rounded-full p-0.5 text-gray-400 transition-colors hover:bg-gray-200 hover:text-gray-700" },
2098
+ React.createElement(Icon, { icon: IconProp.Close, className: "h-3 w-3" }))));
2099
+ }),
1906
2100
  React.createElement("input", { ref: searchInputRef, type: "text", value: searchText, onChange: (e) => {
1907
2101
  setSearchText(e.target.value);
1908
2102
  setLabelDropdownIndex(0);
@@ -2091,6 +2285,8 @@ const BaseModelTable = (props) => {
2091
2285
  return "Watch Demo";
2092
2286
  case IconProp.Search:
2093
2287
  return "Search";
2288
+ case IconProp.TableCells:
2289
+ return "Columns";
2094
2290
  default:
2095
2291
  return "Action";
2096
2292
  }
@@ -2186,6 +2382,77 @@ const BaseModelTable = (props) => {
2186
2382
  const getCardHeaderTitle = (originalTitle) => {
2187
2383
  return originalTitle;
2188
2384
  };
2385
+ /*
2386
+ * A column the viewer cannot read is left out of the picker entirely.
2387
+ * Listing it would advertise a field they have no access to, and switching
2388
+ * it on would put that field in the select — which the API rejects for the
2389
+ * whole request, blanking the table.
2390
+ */
2391
+ const isPickableColumn = (column) => {
2392
+ if (column.isNotCustomizable) {
2393
+ return false;
2394
+ }
2395
+ return hasPermissionToReadColumn(column) || User.isMasterAdmin();
2396
+ };
2397
+ const getPickerEntries = (preference) => {
2398
+ return getCustomizableColumns({
2399
+ columns: allColumns,
2400
+ preference: preference,
2401
+ }).filter((entry) => {
2402
+ return isPickableColumn(entry.column);
2403
+ });
2404
+ };
2405
+ // Mirrors how serializeToTableColumns derives the key the header sorts on.
2406
+ const getColumnSortKey = (column) => {
2407
+ const key = getColumnKey(column);
2408
+ if (!key) {
2409
+ return null;
2410
+ }
2411
+ return column.selectedProperty
2412
+ ? `${String(key)}.${column.selectedProperty}`
2413
+ : String(key);
2414
+ };
2415
+ const onColumnCustomizationSave = (entries) => {
2416
+ const preference = buildColumnPreference(entries);
2417
+ /*
2418
+ * If the layout the viewer just saved matches what the table ships with,
2419
+ * store nothing. Otherwise every table anyone ever opened the picker on
2420
+ * would be pinned to the column set of the release they opened it in, and
2421
+ * columns added later would arrive already stale.
2422
+ */
2423
+ const defaultPreference = buildColumnPreference(getPickerEntries(null));
2424
+ const isBackToDefault = JSON.stringify(preference) === JSON.stringify(defaultPreference);
2425
+ /*
2426
+ * Sorting by a column that is no longer on screen leaves the viewer with
2427
+ * an ordering they can neither see nor undo — there is no header left to
2428
+ * click. Fall back to the table's own default sort.
2429
+ */
2430
+ if (sortBy) {
2431
+ const hiddenIds = new Set(preference.hidden);
2432
+ const isSortedColumnHidden = entries.some((entry) => {
2433
+ return (hiddenIds.has(entry.id) &&
2434
+ getColumnSortKey(entry.column) === String(sortBy));
2435
+ });
2436
+ if (isSortedColumnHidden) {
2437
+ setSortBy(props.sortBy || null);
2438
+ setSortOrder(props.sortOrder || SortOrder.Ascending);
2439
+ setCurrentPageNumber(1);
2440
+ }
2441
+ }
2442
+ saveColumnPreference(isBackToDefault ? null : preference);
2443
+ setShowColumnCustomizationModal(false);
2444
+ };
2445
+ const getColumnCustomizationModal = () => {
2446
+ if (!showColumnCustomizationModal || !isColumnCustomizationEnabled) {
2447
+ return null;
2448
+ }
2449
+ return (React.createElement(ColumnCustomizationModal, { columns: getPickerEntries(effectiveColumnPreference), isDefaultLayout: isEmptyColumnPreference(effectiveColumnPreference), title: tx("Customize Columns"), onSave: onColumnCustomizationSave, onReset: () => {
2450
+ saveColumnPreference(null);
2451
+ setShowColumnCustomizationModal(false);
2452
+ }, onClose: () => {
2453
+ setShowColumnCustomizationModal(false);
2454
+ } }));
2455
+ };
2189
2456
  const getCardComponent = () => {
2190
2457
  const headerButtons = getHeaderButtonsWithSearch();
2191
2458
  if (showAs === ShowAs.Table || showAs === ShowAs.List) {
@@ -2193,7 +2460,7 @@ const BaseModelTable = (props) => {
2193
2460
  props.cardProps && (React.createElement(Card, Object.assign({}, props.cardProps, { buttons: headerButtons, bodyClassName: showAs === ShowAs.List
2194
2461
  ? "-ml-6 -mr-6 bg-gray-50 border-top"
2195
2462
  : "", title: getCardHeaderTitle(getCardTitle(props.cardProps.title || "")) }),
2196
- tableColumns.length === 0 && props.columns.length > 0 ? (React.createElement(ErrorMessage, { message: `You are not authorized to view this table. You need any one of these permissions: ${PermissionHelper.getPermissionTitles(model.getReadPermissions()).join(", ")}` })) : (React.createElement(React.Fragment, null)),
2463
+ tableColumns.length === 0 && allColumns.length > 0 ? (React.createElement(ErrorMessage, { message: `You are not authorized to view this table. You need any one of these permissions: ${PermissionHelper.getPermissionTitles(model.getReadPermissions()).join(", ")}` })) : (React.createElement(React.Fragment, null)),
2197
2464
  props.topContent || React.createElement(React.Fragment, null),
2198
2465
  tableColumns.length > 0 && showAs === ShowAs.Table ? (getTable()) : (React.createElement(React.Fragment, null)),
2199
2466
  tableColumns.length > 0 && showAs === ShowAs.List ? (getList()) : (React.createElement(React.Fragment, null)))),
@@ -2279,7 +2546,8 @@ const BaseModelTable = (props) => {
2279
2546
  setShowHelpModal(false);
2280
2547
  } },
2281
2548
  React.createElement("div", { className: "p-2" },
2282
- React.createElement(MarkdownViewer, { text: props.helpContent.markdown }))))));
2549
+ React.createElement(MarkdownViewer, { text: props.helpContent.markdown })))),
2550
+ getColumnCustomizationModal()));
2283
2551
  };
2284
2552
  export default BaseModelTable;
2285
2553
  //# sourceMappingURL=BaseModelTable.js.map