@flightctl/ui-components 0.9.2 → 0.10.0-rc1

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 (242) hide show
  1. package/dist/src/components/DetailsPage/DetailsPage.d.ts +2 -1
  2. package/dist/src/components/DetailsPage/DetailsPage.d.ts.map +1 -1
  3. package/dist/src/components/DetailsPage/DetailsPage.js +2 -1
  4. package/dist/src/components/DetailsPage/DetailsPage.js.map +1 -1
  5. package/dist/src/components/DetailsPage/DetailsPageActions.d.ts +10 -0
  6. package/dist/src/components/DetailsPage/DetailsPageActions.d.ts.map +1 -1
  7. package/dist/src/components/DetailsPage/DetailsPageActions.js +23 -1
  8. package/dist/src/components/DetailsPage/DetailsPageActions.js.map +1 -1
  9. package/dist/src/components/Device/DeviceDetails/DeviceDetailsPage.d.ts.map +1 -1
  10. package/dist/src/components/Device/DeviceDetails/DeviceDetailsPage.js +29 -3
  11. package/dist/src/components/Device/DeviceDetails/DeviceDetailsPage.js.map +1 -1
  12. package/dist/src/components/Device/DeviceDetails/DeviceDetailsTab.d.ts.map +1 -1
  13. package/dist/src/components/Device/DeviceDetails/DeviceDetailsTab.js +0 -4
  14. package/dist/src/components/Device/DeviceDetails/DeviceDetailsTab.js.map +1 -1
  15. package/dist/src/components/Device/DeviceDetails/DeviceDetailsTabContent/StatusContent.d.ts.map +1 -1
  16. package/dist/src/components/Device/DeviceDetails/DeviceDetailsTabContent/StatusContent.js +8 -2
  17. package/dist/src/components/Device/DeviceDetails/DeviceDetailsTabContent/StatusContent.js.map +1 -1
  18. package/dist/src/components/Device/DevicesPage/DecommissionedDeviceTableRow.d.ts.map +1 -1
  19. package/dist/src/components/Device/DevicesPage/DecommissionedDeviceTableRow.js +1 -3
  20. package/dist/src/components/Device/DevicesPage/DecommissionedDeviceTableRow.js.map +1 -1
  21. package/dist/src/components/Device/DevicesPage/DecommissionedDevicesTable.d.ts.map +1 -1
  22. package/dist/src/components/Device/DevicesPage/DecommissionedDevicesTable.js +0 -3
  23. package/dist/src/components/Device/DevicesPage/DecommissionedDevicesTable.js.map +1 -1
  24. package/dist/src/components/Device/DevicesPage/DeviceToolbarFilters.d.ts.map +1 -1
  25. package/dist/src/components/Device/DevicesPage/DeviceToolbarFilters.js +3 -1
  26. package/dist/src/components/Device/DevicesPage/DeviceToolbarFilters.js.map +1 -1
  27. package/dist/src/components/Device/DevicesPage/DevicesPage.d.ts.map +1 -1
  28. package/dist/src/components/Device/DevicesPage/DevicesPage.js +1 -1
  29. package/dist/src/components/Device/DevicesPage/DevicesPage.js.map +1 -1
  30. package/dist/src/components/Device/DevicesPage/EnrolledDeviceTableRow.d.ts +3 -1
  31. package/dist/src/components/Device/DevicesPage/EnrolledDeviceTableRow.d.ts.map +1 -1
  32. package/dist/src/components/Device/DevicesPage/EnrolledDeviceTableRow.js +12 -4
  33. package/dist/src/components/Device/DevicesPage/EnrolledDeviceTableRow.js.map +1 -1
  34. package/dist/src/components/Device/DevicesPage/EnrolledDevicesTable.d.ts +2 -1
  35. package/dist/src/components/Device/DevicesPage/EnrolledDevicesTable.d.ts.map +1 -1
  36. package/dist/src/components/Device/DevicesPage/EnrolledDevicesTable.js +7 -6
  37. package/dist/src/components/Device/DevicesPage/EnrolledDevicesTable.js.map +1 -1
  38. package/dist/src/components/Device/SystemdUnitsModal/TrackSystemdUnitsForm.js +1 -1
  39. package/dist/src/components/Device/SystemdUnitsModal/TrackSystemdUnitsForm.js.map +1 -1
  40. package/dist/src/components/Events/useEvents.d.ts.map +1 -1
  41. package/dist/src/components/Events/useEvents.js +12 -0
  42. package/dist/src/components/Events/useEvents.js.map +1 -1
  43. package/dist/src/components/Fleet/CreateFleet/steps/UpdatePolicyStep.js +1 -1
  44. package/dist/src/components/Fleet/CreateFleet/steps/UpdatePolicyStep.js.map +1 -1
  45. package/dist/src/components/Fleet/FleetDetails/FleetDetailsPage.d.ts.map +1 -1
  46. package/dist/src/components/Fleet/FleetDetails/FleetDetailsPage.js +4 -3
  47. package/dist/src/components/Fleet/FleetDetails/FleetDetailsPage.js.map +1 -1
  48. package/dist/src/components/Fleet/FleetDetails/FleetDevicesCharts.d.ts.map +1 -1
  49. package/dist/src/components/Fleet/FleetDetails/FleetDevicesCharts.js +7 -1
  50. package/dist/src/components/Fleet/FleetDetails/FleetDevicesCharts.js.map +1 -1
  51. package/dist/src/components/Fleet/FleetDetails/FleetRestoreBanner.d.ts +8 -0
  52. package/dist/src/components/Fleet/FleetDetails/FleetRestoreBanner.d.ts.map +1 -0
  53. package/dist/src/components/Fleet/FleetDetails/FleetRestoreBanner.js +36 -0
  54. package/dist/src/components/Fleet/FleetDetails/FleetRestoreBanner.js.map +1 -0
  55. package/dist/src/components/Fleet/FleetsPage.d.ts.map +1 -1
  56. package/dist/src/components/Fleet/FleetsPage.js +2 -0
  57. package/dist/src/components/Fleet/FleetsPage.js.map +1 -1
  58. package/dist/src/components/ListPage/ListPageActions.d.ts +3 -2
  59. package/dist/src/components/ListPage/ListPageActions.d.ts.map +1 -1
  60. package/dist/src/components/ListPage/ListPageActions.js +27 -1
  61. package/dist/src/components/ListPage/ListPageActions.js.map +1 -1
  62. package/dist/src/components/Masthead/CommandLineToolsPage.d.ts.map +1 -1
  63. package/dist/src/components/Masthead/CommandLineToolsPage.js +18 -14
  64. package/dist/src/components/Masthead/CommandLineToolsPage.js.map +1 -1
  65. package/dist/src/components/OverviewPage/Cards/Alerts/AlertsCard.d.ts.map +1 -1
  66. package/dist/src/components/OverviewPage/Cards/Alerts/AlertsCard.js +15 -5
  67. package/dist/src/components/OverviewPage/Cards/Alerts/AlertsCard.js.map +1 -1
  68. package/dist/src/components/OverviewPage/Cards/Status/DeviceStatusChart.d.ts.map +1 -1
  69. package/dist/src/components/OverviewPage/Cards/Status/DeviceStatusChart.js +7 -1
  70. package/dist/src/components/OverviewPage/Cards/Status/DeviceStatusChart.js.map +1 -1
  71. package/dist/src/components/OverviewPage/Overview.d.ts.map +1 -1
  72. package/dist/src/components/OverviewPage/Overview.js +4 -2
  73. package/dist/src/components/OverviewPage/Overview.js.map +1 -1
  74. package/dist/src/components/Status/StatusDisplay.d.ts +3 -1
  75. package/dist/src/components/Status/StatusDisplay.d.ts.map +1 -1
  76. package/dist/src/components/Status/StatusDisplay.js +8 -8
  77. package/dist/src/components/Status/StatusDisplay.js.map +1 -1
  78. package/dist/src/components/SystemRestore/PendingSyncDevicesAlert.d.ts +7 -0
  79. package/dist/src/components/SystemRestore/PendingSyncDevicesAlert.d.ts.map +1 -0
  80. package/dist/src/components/SystemRestore/PendingSyncDevicesAlert.js +22 -0
  81. package/dist/src/components/SystemRestore/PendingSyncDevicesAlert.js.map +1 -0
  82. package/dist/src/components/SystemRestore/SuspendedDevicesAlert.d.ts +16 -0
  83. package/dist/src/components/SystemRestore/SuspendedDevicesAlert.d.ts.map +1 -0
  84. package/dist/src/components/SystemRestore/SuspendedDevicesAlert.js +75 -0
  85. package/dist/src/components/SystemRestore/SuspendedDevicesAlert.js.map +1 -0
  86. package/dist/src/components/SystemRestore/SystemRestoreBanners.css +6 -0
  87. package/dist/src/components/SystemRestore/SystemRestoreBanners.d.ts +28 -0
  88. package/dist/src/components/SystemRestore/SystemRestoreBanners.d.ts.map +1 -0
  89. package/dist/src/components/SystemRestore/SystemRestoreBanners.js +38 -0
  90. package/dist/src/components/SystemRestore/SystemRestoreBanners.js.map +1 -0
  91. package/dist/src/components/charts/utils.js +1 -1
  92. package/dist/src/components/charts/utils.js.map +1 -1
  93. package/dist/src/components/common/OrganizationGuard.d.ts +13 -0
  94. package/dist/src/components/common/OrganizationGuard.d.ts.map +1 -0
  95. package/dist/src/components/common/OrganizationGuard.js +106 -0
  96. package/dist/src/components/common/OrganizationGuard.js.map +1 -0
  97. package/dist/src/components/common/OrganizationSelector.d.ts +8 -0
  98. package/dist/src/components/common/OrganizationSelector.d.ts.map +1 -0
  99. package/dist/src/components/common/OrganizationSelector.js +92 -0
  100. package/dist/src/components/common/OrganizationSelector.js.map +1 -0
  101. package/dist/src/components/common/PageNavigation.d.ts +4 -0
  102. package/dist/src/components/common/PageNavigation.d.ts.map +1 -0
  103. package/dist/src/components/common/PageNavigation.js +46 -0
  104. package/dist/src/components/common/PageNavigation.js.map +1 -0
  105. package/dist/src/components/form/FilterSelect.css +3 -4
  106. package/dist/src/components/form/validations.d.ts +9 -0
  107. package/dist/src/components/form/validations.d.ts.map +1 -1
  108. package/dist/src/components/form/validations.js +12 -1
  109. package/dist/src/components/form/validations.js.map +1 -1
  110. package/dist/src/components/modals/ResumeDevicesModal/ResumeDevicesModal.d.ts +15 -0
  111. package/dist/src/components/modals/ResumeDevicesModal/ResumeDevicesModal.d.ts.map +1 -0
  112. package/dist/src/components/modals/ResumeDevicesModal/ResumeDevicesModal.js +56 -0
  113. package/dist/src/components/modals/ResumeDevicesModal/ResumeDevicesModal.js.map +1 -0
  114. package/dist/src/components/modals/massModals/ResumeDevicesModal/MassResumeDevicesModal.d.ts +7 -0
  115. package/dist/src/components/modals/massModals/ResumeDevicesModal/MassResumeDevicesModal.d.ts.map +1 -0
  116. package/dist/src/components/modals/massModals/ResumeDevicesModal/MassResumeDevicesModal.js +265 -0
  117. package/dist/src/components/modals/massModals/ResumeDevicesModal/MassResumeDevicesModal.js.map +1 -0
  118. package/dist/src/components/modals/massModals/ResumeDevicesModal/ResumeAllDevicesConfirmationDialog.d.ts +9 -0
  119. package/dist/src/components/modals/massModals/ResumeDevicesModal/ResumeAllDevicesConfirmationDialog.d.ts.map +1 -0
  120. package/dist/src/components/modals/massModals/ResumeDevicesModal/ResumeAllDevicesConfirmationDialog.js +27 -0
  121. package/dist/src/components/modals/massModals/ResumeDevicesModal/ResumeAllDevicesConfirmationDialog.js.map +1 -0
  122. package/dist/src/hooks/useAccessReview.d.ts.map +1 -1
  123. package/dist/src/hooks/useAccessReview.js +17 -4
  124. package/dist/src/hooks/useAccessReview.js.map +1 -1
  125. package/dist/src/hooks/useAlertsEnabled.d.ts +2 -0
  126. package/dist/src/hooks/useAlertsEnabled.d.ts.map +1 -0
  127. package/dist/src/hooks/useAlertsEnabled.js +50 -0
  128. package/dist/src/hooks/useAlertsEnabled.js.map +1 -0
  129. package/dist/src/hooks/useAppContext.d.ts +3 -6
  130. package/dist/src/hooks/useAppContext.d.ts.map +1 -1
  131. package/dist/src/hooks/useAppContext.js +1 -0
  132. package/dist/src/hooks/useAppContext.js.map +1 -1
  133. package/dist/src/hooks/useFetch.d.ts +6 -7
  134. package/dist/src/hooks/useFetch.d.ts.map +1 -1
  135. package/dist/src/hooks/useFetch.js +2 -3
  136. package/dist/src/hooks/useFetch.js.map +1 -1
  137. package/dist/src/hooks/useFetchPeriodically.d.ts.map +1 -1
  138. package/dist/src/hooks/useFetchPeriodically.js +4 -9
  139. package/dist/src/hooks/useFetchPeriodically.js.map +1 -1
  140. package/dist/src/hooks/useSystemRestoreContext.d.ts +16 -0
  141. package/dist/src/hooks/useSystemRestoreContext.d.ts.map +1 -0
  142. package/dist/src/hooks/useSystemRestoreContext.js +45 -0
  143. package/dist/src/hooks/useSystemRestoreContext.js.map +1 -0
  144. package/dist/src/types/extraTypes.d.ts +17 -18
  145. package/dist/src/types/extraTypes.d.ts.map +1 -1
  146. package/dist/src/types/extraTypes.js +1 -6
  147. package/dist/src/types/extraTypes.js.map +1 -1
  148. package/dist/src/types/rbac.d.ts +1 -0
  149. package/dist/src/types/rbac.d.ts.map +1 -1
  150. package/dist/src/types/rbac.js +1 -0
  151. package/dist/src/types/rbac.js.map +1 -1
  152. package/dist/src/utils/api.d.ts +2 -15
  153. package/dist/src/utils/api.d.ts.map +1 -1
  154. package/dist/src/utils/api.js +1 -40
  155. package/dist/src/utils/api.js.map +1 -1
  156. package/dist/src/utils/devices.d.ts +2 -0
  157. package/dist/src/utils/devices.d.ts.map +1 -1
  158. package/dist/src/utils/devices.js +11 -1
  159. package/dist/src/utils/devices.js.map +1 -1
  160. package/dist/src/utils/organizationStorage.d.ts +4 -0
  161. package/dist/src/utils/organizationStorage.d.ts.map +1 -0
  162. package/dist/src/utils/organizationStorage.js +18 -0
  163. package/dist/src/utils/organizationStorage.js.map +1 -0
  164. package/dist/src/utils/query.d.ts +2 -0
  165. package/dist/src/utils/query.d.ts.map +1 -1
  166. package/dist/src/utils/query.js +16 -0
  167. package/dist/src/utils/query.js.map +1 -1
  168. package/dist/src/utils/status/common.d.ts +1 -0
  169. package/dist/src/utils/status/common.d.ts.map +1 -1
  170. package/dist/src/utils/status/common.js.map +1 -1
  171. package/dist/src/utils/status/devices.d.ts +5 -0
  172. package/dist/src/utils/status/devices.d.ts.map +1 -1
  173. package/dist/src/utils/status/devices.js +44 -5
  174. package/dist/src/utils/status/devices.js.map +1 -1
  175. package/dist/src/utils/status/fleet.js +1 -1
  176. package/dist/src/utils/status/fleet.js.map +1 -1
  177. package/dist/src/utils/status/repository.js +1 -1
  178. package/dist/src/utils/status/repository.js.map +1 -1
  179. package/package.json +1 -1
  180. package/src/components/DetailsPage/DetailsPage.tsx +3 -0
  181. package/src/components/DetailsPage/DetailsPageActions.tsx +45 -0
  182. package/src/components/Device/DeviceDetails/DeviceDetailsPage.tsx +57 -5
  183. package/src/components/Device/DeviceDetails/DeviceDetailsTab.tsx +0 -5
  184. package/src/components/Device/DeviceDetails/DeviceDetailsTabContent/StatusContent.tsx +11 -3
  185. package/src/components/Device/DevicesPage/DecommissionedDeviceTableRow.tsx +0 -2
  186. package/src/components/Device/DevicesPage/DecommissionedDevicesTable.tsx +0 -3
  187. package/src/components/Device/DevicesPage/DeviceToolbarFilters.tsx +5 -1
  188. package/src/components/Device/DevicesPage/DevicesPage.tsx +1 -0
  189. package/src/components/Device/DevicesPage/EnrolledDeviceTableRow.tsx +15 -3
  190. package/src/components/Device/DevicesPage/EnrolledDevicesTable.tsx +11 -5
  191. package/src/components/Device/SystemdUnitsModal/TrackSystemdUnitsForm.tsx +1 -1
  192. package/src/components/Events/useEvents.ts +12 -0
  193. package/src/components/Fleet/CreateFleet/steps/UpdatePolicyStep.tsx +1 -1
  194. package/src/components/Fleet/FleetDetails/FleetDetailsPage.tsx +4 -5
  195. package/src/components/Fleet/FleetDetails/FleetDevicesCharts.tsx +9 -3
  196. package/src/components/Fleet/FleetDetails/FleetRestoreBanner.tsx +46 -0
  197. package/src/components/Fleet/FleetsPage.tsx +2 -0
  198. package/src/components/ListPage/ListPageActions.tsx +46 -3
  199. package/src/components/Masthead/CommandLineToolsPage.tsx +17 -14
  200. package/src/components/OverviewPage/Cards/Alerts/AlertsCard.tsx +19 -5
  201. package/src/components/OverviewPage/Cards/Status/DeviceStatusChart.tsx +8 -2
  202. package/src/components/OverviewPage/Overview.tsx +5 -2
  203. package/src/components/Status/StatusDisplay.tsx +32 -23
  204. package/src/components/SystemRestore/PendingSyncDevicesAlert.tsx +36 -0
  205. package/src/components/SystemRestore/SuspendedDevicesAlert.tsx +144 -0
  206. package/src/components/SystemRestore/SystemRestoreBanners.css +6 -0
  207. package/src/components/SystemRestore/SystemRestoreBanners.tsx +82 -0
  208. package/src/components/charts/utils.ts +1 -1
  209. package/src/components/common/OrganizationGuard.tsx +124 -0
  210. package/src/components/common/OrganizationSelector.tsx +192 -0
  211. package/src/components/common/PageNavigation.tsx +103 -0
  212. package/src/components/form/FilterSelect.css +3 -4
  213. package/src/components/form/validations.ts +14 -0
  214. package/src/components/modals/ResumeDevicesModal/ResumeDevicesModal.tsx +114 -0
  215. package/src/components/modals/massModals/ResumeDevicesModal/MassResumeDevicesModal.tsx +465 -0
  216. package/src/components/modals/massModals/ResumeDevicesModal/ResumeAllDevicesConfirmationDialog.tsx +55 -0
  217. package/src/hooks/useAccessReview.ts +20 -4
  218. package/src/hooks/useAlertsEnabled.ts +50 -0
  219. package/src/hooks/useAppContext.tsx +9 -7
  220. package/src/hooks/useFetch.ts +1 -3
  221. package/src/hooks/useFetchPeriodically.ts +4 -11
  222. package/src/hooks/useSystemRestoreContext.tsx +54 -0
  223. package/src/types/extraTypes.ts +17 -23
  224. package/src/types/rbac.ts +1 -0
  225. package/src/utils/api.ts +2 -51
  226. package/src/utils/devices.ts +11 -1
  227. package/src/utils/organizationStorage.ts +13 -0
  228. package/src/utils/query.ts +22 -0
  229. package/src/utils/status/common.ts +1 -0
  230. package/src/utils/status/devices.ts +49 -2
  231. package/src/utils/status/fleet.ts +1 -1
  232. package/src/utils/status/repository.ts +1 -1
  233. package/dist/src/hooks/useAlerts.d.ts +0 -26
  234. package/dist/src/hooks/useAlerts.d.ts.map +0 -1
  235. package/dist/src/hooks/useAlerts.js +0 -114
  236. package/dist/src/hooks/useAlerts.js.map +0 -1
  237. package/dist/src/utils/metrics.d.ts +0 -9
  238. package/dist/src/utils/metrics.d.ts.map +0 -1
  239. package/dist/src/utils/metrics.js +0 -48
  240. package/dist/src/utils/metrics.js.map +0 -1
  241. package/src/hooks/useAlerts.ts +0 -147
  242. package/src/utils/metrics.ts +0 -49
@@ -1 +1 @@
1
- {"version":3,"file":"devices.js","sourceRoot":"","sources":["../../../../src/utils/status/devices.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"devices.js","sourceRoot":"","sources":["../../../../src/utils/status/devices.ts"],"names":[],"mappings":"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"}
@@ -23,7 +23,7 @@ const getFleetSyncStatus = (fleet, t) => {
23
23
  }
24
24
  return {
25
25
  status: 'SyncPending',
26
- message: t('Waiting for first sync'),
26
+ message: t('Awaiting first sync'),
27
27
  };
28
28
  };
29
29
  exports.getFleetSyncStatus = getFleetSyncStatus;
@@ -1 +1 @@
1
- {"version":3,"file":"fleet.js","sourceRoot":"","sources":["../../../../src/utils/status/fleet.ts"],"names":[],"mappings":";;;AAEA,4CAAoF;AAEpF,oCAA+C;AAE/C,MAAM,2BAA2B,GAAG,WAAW,CAAC;AAEzC,MAAM,iBAAiB,GAAG,CAAC,CAAY,EAAE,EAAE,CAAC,CAAC;IAClD,CAAC,qBAAa,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC;IACtC,OAAO,EAAE,CAAC,CAAC,SAAS,CAAC;IACrB,WAAW,EAAE,CAAC,CAAC,cAAc,CAAC;CAC/B,CAAC,CAAC;AAJU,QAAA,iBAAiB,qBAI3B;AAEI,MAAM,kBAAkB,GAAG,CAChC,KAAY,EACZ,CAAY,EAIZ,EAAE;;IACF,MAAM,cAAc,GAAG,CAAC,CAAA,MAAA,KAAK,CAAC,MAAM,0CAAE,UAAU,KAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,qBAAa,CAAC,UAAU,CAAC,CAAC;IACzG,IAAI,cAAc,EAAE,CAAC;QACnB,MAAM,IAAI,GAAG,cAAc,CAAC,MAAM,KAAK,uBAAe,CAAC,mBAAmB,CAAC;QAC3E,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAA,2BAAmB,EAAC,cAAc,CAAC,CAAC;QAChE,OAAO;YACL,OAAO;YACP,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,qBAAa,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;SACpD,CAAC;IACJ,CAAC;IACD,OAAO;QACL,MAAM,EAAE,aAAa;QACrB,OAAO,EAAE,CAAC,CAAC,wBAAwB,CAAC;KACrC,CAAC;AACJ,CAAC,CAAC;AApBW,QAAA,kBAAkB,sBAoB7B;AAEF,MAAM,6BAA6B,GAAG,CAAC,SAAoB,EAAE,EAAE,CAC7D,SAAS,CAAC,IAAI,KAAK,qBAAa,CAAC,sBAAsB;IACvD,SAAS,CAAC,MAAM,KAAK,uBAAe,CAAC,oBAAoB;IACzD,SAAS,CAAC,MAAM,KAAK,2BAA2B,CAAC;AAE5C,MAAM,4BAA4B,GAAG,CAAC,KAAY,EAAE,CAAY,EAAE,EAAE;;IACzE,MAAM,sBAAsB,GAAG,MAAA,MAAA,KAAK,CAAC,MAAM,0CAAE,UAAU,0CAAE,IAAI,CAAC,6BAA6B,CAAC,CAAC;IAE7F,IAAI,sBAAsB,EAAE,CAAC;QAC3B,OAAO,IAAA,2BAAmB,EAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,4CAA4C,CAAC,CAAC;IACxG,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAPW,QAAA,4BAA4B,gCAOvC"}
1
+ {"version":3,"file":"fleet.js","sourceRoot":"","sources":["../../../../src/utils/status/fleet.ts"],"names":[],"mappings":";;;AAEA,4CAAoF;AAEpF,oCAA+C;AAE/C,MAAM,2BAA2B,GAAG,WAAW,CAAC;AAEzC,MAAM,iBAAiB,GAAG,CAAC,CAAY,EAAE,EAAE,CAAC,CAAC;IAClD,CAAC,qBAAa,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC;IACtC,OAAO,EAAE,CAAC,CAAC,SAAS,CAAC;IACrB,WAAW,EAAE,CAAC,CAAC,cAAc,CAAC;CAC/B,CAAC,CAAC;AAJU,QAAA,iBAAiB,qBAI3B;AAEI,MAAM,kBAAkB,GAAG,CAChC,KAAY,EACZ,CAAY,EAIZ,EAAE;;IACF,MAAM,cAAc,GAAG,CAAC,CAAA,MAAA,KAAK,CAAC,MAAM,0CAAE,UAAU,KAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,qBAAa,CAAC,UAAU,CAAC,CAAC;IACzG,IAAI,cAAc,EAAE,CAAC;QACnB,MAAM,IAAI,GAAG,cAAc,CAAC,MAAM,KAAK,uBAAe,CAAC,mBAAmB,CAAC;QAC3E,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAA,2BAAmB,EAAC,cAAc,CAAC,CAAC;QAChE,OAAO;YACL,OAAO;YACP,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,qBAAa,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;SACpD,CAAC;IACJ,CAAC;IACD,OAAO;QACL,MAAM,EAAE,aAAa;QACrB,OAAO,EAAE,CAAC,CAAC,qBAAqB,CAAC;KAClC,CAAC;AACJ,CAAC,CAAC;AApBW,QAAA,kBAAkB,sBAoB7B;AAEF,MAAM,6BAA6B,GAAG,CAAC,SAAoB,EAAE,EAAE,CAC7D,SAAS,CAAC,IAAI,KAAK,qBAAa,CAAC,sBAAsB;IACvD,SAAS,CAAC,MAAM,KAAK,uBAAe,CAAC,oBAAoB;IACzD,SAAS,CAAC,MAAM,KAAK,2BAA2B,CAAC;AAE5C,MAAM,4BAA4B,GAAG,CAAC,KAAY,EAAE,CAAY,EAAE,EAAE;;IACzE,MAAM,sBAAsB,GAAG,MAAA,MAAA,KAAK,CAAC,MAAM,0CAAE,UAAU,0CAAE,IAAI,CAAC,6BAA6B,CAAC,CAAC;IAE7F,IAAI,sBAAsB,EAAE,CAAC;QAC3B,OAAO,IAAA,2BAAmB,EAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,4CAA4C,CAAC,CAAC;IACxG,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAPW,QAAA,4BAA4B,gCAOvC"}
@@ -60,7 +60,7 @@ const getRepositorySyncStatus = (repository, t = (s) => s) => {
60
60
  // As a fallback, we indicate the repository is waiting for sync
61
61
  return {
62
62
  status: 'Sync pending',
63
- message: t('Waiting for first sync'),
63
+ message: t('Awaiting first sync'),
64
64
  };
65
65
  };
66
66
  exports.getRepositorySyncStatus = getRepositorySyncStatus;
@@ -1 +1 @@
1
- {"version":3,"file":"repository.js","sourceRoot":"","sources":["../../../../src/utils/status/repository.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"repository.js","sourceRoot":"","sources":["../../../../src/utils/status/repository.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flightctl/ui-components",
3
- "version": "0.9.2",
3
+ "version": "0.10.0-rc1",
4
4
  "description": "Components for Flightctl UI",
5
5
  "repository": "https://github.com/flightctl/flightctl-ui.git",
6
6
  "homepage": "https://github.com/flightctl/flightctl-ui.git",
@@ -31,6 +31,7 @@ export type DetailsPageProps = {
31
31
  resourceLink: Route;
32
32
  actions?: React.ReactNode;
33
33
  nav?: React.ReactNode;
34
+ banner?: React.ReactNode;
34
35
  };
35
36
 
36
37
  const DetailsPage = ({
@@ -45,6 +46,7 @@ const DetailsPage = ({
45
46
  resourceTypeLabel,
46
47
  actions,
47
48
  nav,
49
+ banner,
48
50
  }: DetailsPageProps) => {
49
51
  const { t } = useTranslation();
50
52
  let content = children;
@@ -86,6 +88,7 @@ const DetailsPage = ({
86
88
  <SplitItem>{actions}</SplitItem>
87
89
  </Split>
88
90
  </PageSection>
91
+ {banner}
89
92
  {nav && (
90
93
  <PageSection variant="light" type="nav" className="fctl-details-page__nav">
91
94
  {nav}
@@ -1,5 +1,6 @@
1
1
  import * as React from 'react';
2
2
  import { Dropdown, DropdownItem, MenuToggle } from '@patternfly/react-core';
3
+ import { Trans } from 'react-i18next';
3
4
 
4
5
  import { DeviceDecommissionTargetType } from '@flightctl/types';
5
6
 
@@ -7,6 +8,7 @@ import { useTranslation } from '../../hooks/useTranslation';
7
8
  import { getDisabledTooltipProps } from '../../utils/tooltip';
8
9
  import DeleteModal from '../modals/DeleteModal/DeleteModal';
9
10
  import DecommissionModal from '../modals/DecommissionModal/DecommissionModal';
11
+ import ResumeDevicesModal from '../modals/ResumeDevicesModal/ResumeDevicesModal';
10
12
 
11
13
  type DeleteActionProps = {
12
14
  onDelete: () => Promise<unknown>;
@@ -21,6 +23,13 @@ type DecommissionActionProps = {
21
23
  disabledReason?: string;
22
24
  };
23
25
 
26
+ type ResumeActionProps = {
27
+ deviceId: string;
28
+ alias?: string;
29
+ disabledReason?: string;
30
+ onResumeComplete?: () => void;
31
+ };
32
+
24
33
  export const useDeleteAction = ({
25
34
  resourceType,
26
35
  resourceName,
@@ -73,6 +82,42 @@ export const useDecommissionAction = ({ onDecommission, disabledReason }: Decomm
73
82
  return { decommissionAction, decommissionModal };
74
83
  };
75
84
 
85
+ export const useResumeAction = ({ disabledReason, deviceId, alias, onResumeComplete }: ResumeActionProps) => {
86
+ const { t } = useTranslation();
87
+ const [isResumeModalOpen, setIsResumeModalOpen] = React.useState(false);
88
+ const resumeProps = getDisabledTooltipProps(disabledReason);
89
+ const deviceNameOrAlias = alias || deviceId;
90
+ const resumeAction = (
91
+ <DropdownItem onClick={() => setIsResumeModalOpen(true)} {...resumeProps}>
92
+ {t('Resume device')}
93
+ </DropdownItem>
94
+ );
95
+
96
+ const resumeSelector = {
97
+ fieldSelector: `metadata.name=${deviceId}`,
98
+ };
99
+ const resumeModal = isResumeModalOpen && (
100
+ <ResumeDevicesModal
101
+ mode="device"
102
+ title={
103
+ <Trans t={t}>
104
+ You are about to resume device <strong>{deviceNameOrAlias}</strong>
105
+ </Trans>
106
+ }
107
+ selector={resumeSelector}
108
+ expectedCount={1}
109
+ onClose={(hasResumed) => {
110
+ setIsResumeModalOpen(false);
111
+ if (hasResumed) {
112
+ onResumeComplete?.();
113
+ }
114
+ }}
115
+ />
116
+ );
117
+
118
+ return { resumeAction, resumeModal };
119
+ };
120
+
76
121
  const DetailsPageActions = ({ children }: React.PropsWithChildren) => {
77
122
  const { t } = useTranslation();
78
123
  const [actionsOpen, setActionsOpen] = React.useState(false);
@@ -1,25 +1,37 @@
1
1
  import * as React from 'react';
2
+ import { Trans } from 'react-i18next';
2
3
  import { Button, DropdownItem, DropdownList, Nav, NavList } from '@patternfly/react-core';
3
4
 
4
- import { Device, DeviceDecommission, DeviceDecommissionTargetType, ResourceKind } from '@flightctl/types';
5
+ import {
6
+ Device,
7
+ DeviceDecommission,
8
+ DeviceDecommissionTargetType,
9
+ DeviceSummaryStatusType,
10
+ ResourceKind,
11
+ } from '@flightctl/types';
5
12
  import { useFetchPeriodically } from '../../../hooks/useFetchPeriodically';
6
13
  import { useFetch } from '../../../hooks/useFetch';
7
14
  import { getDisabledTooltipProps } from '../../../utils/tooltip';
8
15
  import DetailsPage from '../../DetailsPage/DetailsPage';
9
- import DetailsPageActions, { useDecommissionAction, useDeleteAction } from '../../DetailsPage/DetailsPageActions';
16
+ import DetailsPageActions, {
17
+ useDecommissionAction,
18
+ useDeleteAction,
19
+ useResumeAction,
20
+ } from '../../DetailsPage/DetailsPageActions';
10
21
  import { useTranslation } from '../../../hooks/useTranslation';
11
22
  import { ROUTE, useNavigate } from '../../../hooks/useNavigate';
12
23
  import { useAppContext } from '../../../hooks/useAppContext';
13
24
  import DeviceDetailsTab from './DeviceDetailsTab';
14
25
  import TerminalTab from './TerminalTab';
15
26
  import NavItem from '../../NavItem/NavItem';
16
- import { getEditDisabledReason, isDeviceEnrolled } from '../../../utils/devices';
27
+ import { getEditDisabledReason, getResumeDisabledReason, isDeviceEnrolled } from '../../../utils/devices';
17
28
  import { RESOURCE, VERB } from '../../../types/rbac';
18
29
  import { useAccessReview } from '../../../hooks/useAccessReview';
19
30
  import EventsCard from '../../Events/EventsCard';
20
31
  import PageWithPermissions from '../../common/PageWithPermissions';
21
32
  import YamlEditor from '../../common/CodeEditor/YamlEditor';
22
33
  import DeviceAliasEdit from './DeviceAliasEdit';
34
+ import { SystemRestoreBanners } from '../../SystemRestore/SystemRestoreBanners';
23
35
 
24
36
  type DeviceDetailsPageProps = React.PropsWithChildren<{ hideTerminal?: boolean }>;
25
37
 
@@ -35,12 +47,14 @@ const DeviceDetailsPage = ({ children, hideTerminal }: DeviceDetailsPageProps) =
35
47
 
36
48
  const deviceLabels = device?.metadata.labels;
37
49
  const deviceAlias = deviceLabels?.alias;
50
+ const deviceNameOrAlias = deviceAlias || deviceId;
38
51
  const isEnrolled = !device || isDeviceEnrolled(device);
39
52
 
40
53
  const [hasTerminalAccess] = useAccessReview(RESOURCE.DEVICE_CONSOLE, VERB.GET);
41
54
  const [canDelete] = useAccessReview(RESOURCE.DEVICE, VERB.DELETE);
42
55
  const [canEdit] = useAccessReview(RESOURCE.DEVICE, VERB.PATCH);
43
56
  const [canDecommission] = useAccessReview(RESOURCE.DEVICE_DECOMMISSION, VERB.UPDATE);
57
+ const [canResume] = useAccessReview(RESOURCE.DEVICE_RESUME, VERB.UPDATE);
44
58
 
45
59
  const canOpenTerminal = hasTerminalAccess && isEnrolled;
46
60
 
@@ -49,7 +63,7 @@ const DeviceDetailsPage = ({ children, hideTerminal }: DeviceDetailsPageProps) =
49
63
  await remove(`devices/${deviceId}`);
50
64
  navigate(ROUTE.DEVICES);
51
65
  },
52
- resourceName: deviceAlias || deviceId,
66
+ resourceName: deviceNameOrAlias,
53
67
  resourceType: 'device',
54
68
  buttonLabel: isEnrolled ? undefined : t('Delete forever'),
55
69
  });
@@ -64,7 +78,33 @@ const DeviceDetailsPage = ({ children, hideTerminal }: DeviceDetailsPageProps) =
64
78
  },
65
79
  });
66
80
 
81
+ const { resumeAction, resumeModal } = useResumeAction({
82
+ deviceId,
83
+ alias: deviceAlias,
84
+ disabledReason: device ? getResumeDisabledReason(device, t) : undefined,
85
+ onResumeComplete: refetch,
86
+ });
87
+
67
88
  const editActionProps = device ? getDisabledTooltipProps(getEditDisabledReason(device, t)) : undefined;
89
+ const resumeDevice = {
90
+ actionText: t('Resume device'),
91
+ title: (
92
+ <Trans t={t}>
93
+ You are about to resume <strong>{deviceNameOrAlias}</strong>
94
+ </Trans>
95
+ ),
96
+ requestSelector: {
97
+ fieldSelector: `metadata.name=${deviceId}`,
98
+ },
99
+ };
100
+
101
+ const deviceSummaryStatus = device?.status?.summary.status;
102
+ const deviceSummary = {
103
+ [DeviceSummaryStatusType.DeviceSummaryStatusConflictPaused]:
104
+ deviceSummaryStatus === DeviceSummaryStatusType.DeviceSummaryStatusConflictPaused ? 1 : 0,
105
+ [DeviceSummaryStatusType.DeviceSummaryStatusAwaitingReconnect]:
106
+ deviceSummaryStatus === DeviceSummaryStatusType.DeviceSummaryStatusAwaitingReconnect ? 1 : 0,
107
+ };
68
108
 
69
109
  return (
70
110
  <DetailsPage
@@ -86,6 +126,17 @@ const DeviceDetailsPage = ({ children, hideTerminal }: DeviceDetailsPageProps) =
86
126
  deviceAlias
87
127
  )
88
128
  }
129
+ banner={
130
+ device && (
131
+ <SystemRestoreBanners
132
+ mode="device"
133
+ resumeAction={resumeDevice}
134
+ summaryStatus={deviceSummary}
135
+ onResumeComplete={refetch}
136
+ className="pf-v5-u-pt-0 pf-v5-u-px-lg"
137
+ />
138
+ )
139
+ }
89
140
  resourceLink={ROUTE.DEVICES}
90
141
  resourceType="Devices"
91
142
  resourceTypeLabel={t('Devices')}
@@ -111,6 +162,7 @@ const DeviceDetailsPage = ({ children, hideTerminal }: DeviceDetailsPageProps) =
111
162
  {t('Edit device configurations')}
112
163
  </DropdownItem>
113
164
  )}
165
+ {canResume && resumeAction}
114
166
  {canDecommission && decommissionAction}
115
167
  </DropdownList>
116
168
  </DetailsPageActions>
@@ -143,7 +195,7 @@ const DeviceDetailsPage = ({ children, hideTerminal }: DeviceDetailsPageProps) =
143
195
  </Routes>
144
196
  )}
145
197
 
146
- {deleteModal || decommissionModal}
198
+ {deleteModal || decommissionModal || resumeModal}
147
199
  </DetailsPage>
148
200
  );
149
201
  };
@@ -13,7 +13,6 @@ import {
13
13
 
14
14
  import { Device } from '@flightctl/types';
15
15
  import { isDeviceEnrolled } from '../../../utils/devices';
16
- import { timeSinceText } from '../../../utils/dates';
17
16
 
18
17
  import { useTranslation } from '../../../hooks/useTranslation';
19
18
  import { useDeviceSpecSystemInfo } from '../../../hooks/useDeviceSpecSystemInfo';
@@ -192,10 +191,6 @@ const DecommissionedDeviceDetails = ({ device, children }: React.PropsWithChildr
192
191
  <DeviceLifecycleStatus device={device} />
193
192
  </DescriptionListDescription>
194
193
  </DescriptionListGroup>
195
- <DescriptionListGroup>
196
- <DescriptionListTerm>{t('Last seen')}</DescriptionListTerm>
197
- <DescriptionListDescription>{timeSinceText(t, device.status.lastSeen)}</DescriptionListDescription>
198
- </DescriptionListGroup>
199
194
  {children}
200
195
  </FlightControlDescriptionList>
201
196
  </DetailsPageCardBody>
@@ -6,9 +6,9 @@ import {
6
6
  DescriptionListTerm,
7
7
  } from '@patternfly/react-core';
8
8
 
9
- import { Device } from '@flightctl/types';
10
- import { timeSinceText } from '../../../../utils/dates';
9
+ import { Device, DeviceLastSeen } from '@flightctl/types';
11
10
  import { useTranslation } from '../../../../hooks/useTranslation';
11
+ import { useFetchPeriodically } from '../../../../hooks/useFetchPeriodically';
12
12
  import DetailsPageCard, { DetailsPageCardBody } from '../../../DetailsPage/DetailsPageCard';
13
13
  import FlightControlDescriptionList from '../../../common/FlightCtlDescriptionList';
14
14
  import LabelWithHelperText from '../../../common/WithHelperText';
@@ -16,10 +16,18 @@ import ApplicationSummaryStatus from '../../../Status/ApplicationSummaryStatus';
16
16
  import DeviceStatus from '../../../Status/DeviceStatus';
17
17
  import SystemUpdateStatus from '../../../Status/SystemUpdateStatus';
18
18
  import IntegrityStatus from '../../../Status/IntegrityStatus';
19
+ import { timeSinceText } from '../../../../utils/dates';
20
+
21
+ const LAST_SEEN_REFRESH_INTERVAL = 60 * 1000; // 1 minute
19
22
 
20
23
  const StatusContent = ({ device }: { device: Required<Device> }) => {
21
24
  const { t } = useTranslation();
22
25
 
26
+ const [lastSeenResponse] = useFetchPeriodically<DeviceLastSeen>({
27
+ endpoint: `devices/${device.metadata.name}/lastseen`,
28
+ timeout: LAST_SEEN_REFRESH_INTERVAL,
29
+ });
30
+
23
31
  return (
24
32
  <DetailsPageCard>
25
33
  <CardTitle>{t('System status')}</CardTitle>
@@ -73,7 +81,7 @@ const StatusContent = ({ device }: { device: Required<Device> }) => {
73
81
  </DescriptionListGroup>
74
82
  <DescriptionListGroup>
75
83
  <DescriptionListTerm>{t('Last seen')}</DescriptionListTerm>
76
- <DescriptionListDescription>{timeSinceText(t, device.status.lastSeen)}</DescriptionListDescription>
84
+ <DescriptionListDescription>{timeSinceText(t, lastSeenResponse?.lastSeen)}</DescriptionListDescription>
77
85
  </DescriptionListGroup>
78
86
  </FlightControlDescriptionList>
79
87
  </DetailsPageCardBody>
@@ -2,7 +2,6 @@ import * as React from 'react';
2
2
  import { ActionsColumn, OnSelect, Td, Tr } from '@patternfly/react-table';
3
3
 
4
4
  import { Device } from '@flightctl/types';
5
- import { timeSinceText } from '../../../utils/dates';
6
5
  import { ListAction } from '../../ListPage/types';
7
6
  import { useTranslation } from '../../../hooks/useTranslation';
8
7
  import { ROUTE, useNavigate } from '../../../hooks/useNavigate';
@@ -49,7 +48,6 @@ const DecommissionedDeviceTableRow = ({
49
48
  <Td dataLabel={t('Device status')}>
50
49
  <DeviceLifecycleStatus device={device} />
51
50
  </Td>
52
- <Td dataLabel={t('Last seen')}>{timeSinceText(t, device.status?.lastSeen)}</Td>
53
51
  {canDelete && (
54
52
  <Td isActionCell>
55
53
  <ActionsColumn
@@ -39,9 +39,6 @@ const getDeviceColumns = (t: TFunction): ApiSortTableColumn[] => [
39
39
  {
40
40
  name: t('Status'),
41
41
  },
42
- {
43
- name: t('Last seen'),
44
- },
45
42
  ];
46
43
 
47
44
  const DecommissionedDevicesTable = ({
@@ -40,6 +40,9 @@ type LabelFleetSelectorProps = {
40
40
  placeholder?: string;
41
41
  };
42
42
 
43
+ // Escapes special characters (eg. 'hello.world' becomes 'hello\\.world')
44
+ const escapeRegExp = (text: string) => text.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
45
+
43
46
  const LabelFleetResults = ({
44
47
  filterText,
45
48
  allLabels,
@@ -56,7 +59,8 @@ const LabelFleetResults = ({
56
59
  allLabels: FlightCtlLabel[];
57
60
  }) => {
58
61
  const { t } = useTranslation();
59
- const regexp = React.useMemo(() => new RegExp(`(${filterText})`, 'g'), [filterText]);
62
+
63
+ const regexp = React.useMemo(() => new RegExp(`(${escapeRegExp(filterText)})`, 'g'), [filterText]);
60
64
 
61
65
  const searchHighlighter = React.useCallback(
62
66
  (text: string) => {
@@ -102,6 +102,7 @@ const DevicesPage = ({ canListER }: { canListER: boolean }) => {
102
102
  setSelectedLabels={setSelectedLabels}
103
103
  isFilterUpdating={updating}
104
104
  pagination={pagination}
105
+ refetchDevices={refetch}
105
106
  />
106
107
  )}
107
108
  </ListPageBody>
@@ -3,8 +3,7 @@ import { ActionsColumn, OnSelect, Td, Tr } from '@patternfly/react-table';
3
3
 
4
4
  import { Device } from '@flightctl/types';
5
5
  import DeviceFleet from '../DeviceDetails/DeviceFleet';
6
- import { timeSinceText } from '../../../utils/dates';
7
- import { getDecommissionDisabledReason, getEditDisabledReason } from '../../../utils/devices';
6
+ import { getDecommissionDisabledReason, getEditDisabledReason, getResumeDisabledReason } from '../../../utils/devices';
8
7
  import { getDisabledTooltipProps } from '../../../utils/tooltip';
9
8
  import { ListAction } from '../../ListPage/types';
10
9
  import ApplicationSummaryStatus from '../../Status/ApplicationSummaryStatus';
@@ -22,6 +21,8 @@ type EnrolledDeviceTableRowProps = {
22
21
  canEdit: boolean;
23
22
  canDecommission: boolean;
24
23
  decommissionAction: ListAction;
24
+ canResume: boolean;
25
+ resumeAction: ListAction;
25
26
  };
26
27
 
27
28
  const EnrolledDeviceTableRow = ({
@@ -32,6 +33,8 @@ const EnrolledDeviceTableRow = ({
32
33
  canEdit,
33
34
  canDecommission,
34
35
  decommissionAction,
36
+ canResume,
37
+ resumeAction,
35
38
  }: EnrolledDeviceTableRowProps) => {
36
39
  const { t } = useTranslation();
37
40
  const navigate = useNavigate();
@@ -39,6 +42,7 @@ const EnrolledDeviceTableRow = ({
39
42
  const deviceAlias = device.metadata.labels?.alias;
40
43
  const editActionProps = getDisabledTooltipProps(getEditDisabledReason(device, t));
41
44
  const decommissionDisabledReason = getDecommissionDisabledReason(device, t);
45
+ const resumeDisabledReason = getResumeDisabledReason(device, t);
42
46
 
43
47
  return (
44
48
  <Tr>
@@ -67,7 +71,6 @@ const EnrolledDeviceTableRow = ({
67
71
  <Td dataLabel={t('System update status')}>
68
72
  <SystemUpdateStatus deviceStatus={device.status} />
69
73
  </Td>
70
- <Td dataLabel={t('Last seen')}>{timeSinceText(t, device.status?.lastSeen)}</Td>
71
74
  <Td isActionCell>
72
75
  <ActionsColumn
73
76
  items={[
@@ -84,6 +87,15 @@ const EnrolledDeviceTableRow = ({
84
87
  title: t('View device details'),
85
88
  onClick: () => navigate({ route: ROUTE.DEVICE_DETAILS, postfix: deviceName }),
86
89
  },
90
+ ...(canResume
91
+ ? [
92
+ resumeAction({
93
+ resourceId: deviceName,
94
+ resourceName: deviceAlias,
95
+ disabledReason: resumeDisabledReason,
96
+ }),
97
+ ]
98
+ : []),
87
99
  ...(canDecommission
88
100
  ? [
89
101
  decommissionAction({
@@ -20,7 +20,7 @@ import {
20
20
  } from '../../Status/utils';
21
21
 
22
22
  import Table, { ApiSortTableColumn } from '../../Table/Table';
23
- import { useDecommissionListAction } from '../../ListPage/ListPageActions';
23
+ import { useDecommissionListAction, useResumeListAction } from '../../ListPage/ListPageActions';
24
24
  import TablePagination from '../../Table/TablePagination';
25
25
  import MassDecommissionDeviceModal from '../../modals/massModals/MassDecommissionDeviceModal/MassDecommissionDeviceModal';
26
26
  import AddDeviceModal from '../AddDeviceModal/AddDeviceModal';
@@ -28,6 +28,7 @@ import { EnrolledDevicesEmptyState } from './DevicesEmptyStates';
28
28
  import DeviceTableToolbar from './DeviceTableToolbar';
29
29
  import EnrolledDeviceTableRow from './EnrolledDeviceTableRow';
30
30
  import { FilterSearchParams } from '../../../utils/status/devices';
31
+ import { GlobalSystemRestoreBanners } from '../../SystemRestore/SystemRestoreBanners';
31
32
 
32
33
  interface EnrolledDeviceTableProps {
33
34
  devices: Array<Device>;
@@ -43,6 +44,7 @@ interface EnrolledDeviceTableProps {
43
44
  setSelectedLabels: (labels: FlightCtlLabel[]) => void;
44
45
  isFilterUpdating: boolean;
45
46
  pagination: Pick<PaginationDetails<DeviceList>, 'currentPage' | 'setCurrentPage' | 'itemCount'>;
47
+ refetchDevices: VoidFunction;
46
48
  // getSortParams: (columnIndex: number) => ThProps['sort'];
47
49
  }
48
50
 
@@ -68,9 +70,6 @@ const getDeviceColumns = (t: TFunction): ApiSortTableColumn[] => [
68
70
  name: t('Update status'),
69
71
  helperText: getUpdateStatusHelperText(t),
70
72
  },
71
- {
72
- name: t('Last seen'),
73
- },
74
73
  ];
75
74
 
76
75
  const EnrolledDevicesTable = ({
@@ -87,6 +86,7 @@ const EnrolledDevicesTable = ({
87
86
  hasFiltersEnabled,
88
87
  isFilterUpdating,
89
88
  pagination,
89
+ refetchDevices,
90
90
  }: EnrolledDeviceTableProps) => {
91
91
  const { t } = useTranslation();
92
92
  const { put } = useFetch();
@@ -97,6 +97,7 @@ const EnrolledDevicesTable = ({
97
97
 
98
98
  const { onRowSelect, hasSelectedRows, isAllSelected, isRowSelected, setAllSelected } = useTableSelect();
99
99
 
100
+ const { action: resumeDeviceAction, modal: resumeDeviceModal } = useResumeListAction(refetchDevices);
100
101
  const { action: decommissionDeviceAction, modal: decommissionDeviceModal } = useDecommissionListAction({
101
102
  resourceType: 'Device',
102
103
  onConfirm: async (deviceId: string, params) => {
@@ -109,6 +110,7 @@ const EnrolledDevicesTable = ({
109
110
 
110
111
  const [canEdit] = useAccessReview(RESOURCE.DEVICE, VERB.PATCH);
111
112
  const [canDecommission] = useAccessReview(RESOURCE.DEVICE_DECOMMISSION, VERB.UPDATE);
113
+ const [canResume] = useAccessReview(RESOURCE.DEVICE_RESUME, VERB.UPDATE);
112
114
 
113
115
  const clearAllFilters = () => {
114
116
  if (hasFiltersEnabled) {
@@ -125,6 +127,8 @@ const EnrolledDevicesTable = ({
125
127
 
126
128
  return (
127
129
  <>
130
+ <GlobalSystemRestoreBanners onResumeComplete={refetchDevices} />
131
+
128
132
  <DeviceTableToolbar
129
133
  nameOrAlias={nameOrAlias}
130
134
  setNameOrAlias={setNameOrAlias}
@@ -186,6 +190,8 @@ const EnrolledDevicesTable = ({
186
190
  canEdit={canEdit}
187
191
  canDecommission={canDecommission}
188
192
  decommissionAction={decommissionDeviceAction}
193
+ canResume={canResume}
194
+ resumeAction={resumeDeviceAction}
189
195
  />
190
196
  ))}
191
197
  </Tbody>
@@ -194,7 +200,7 @@ const EnrolledDevicesTable = ({
194
200
  {!hasFiltersEnabled && devices.length === 0 && (
195
201
  <EnrolledDevicesEmptyState onAddDevice={() => setAddDeviceModal(true)} />
196
202
  )}
197
- {decommissionDeviceModal}
203
+ {decommissionDeviceModal || resumeDeviceModal}
198
204
  {addDeviceModal && <AddDeviceModal onClose={() => setAddDeviceModal(false)} />}
199
205
  {isMassDecommissionModalOpen && (
200
206
  <MassDecommissionDeviceModal
@@ -56,7 +56,7 @@ const TrackSystemdUnitsForm: React.FC<TrackSystemdUnitsFormProps> = ({ onClose,
56
56
  <FlightCtlForm>
57
57
  <TextInput
58
58
  aria-label={t('Systemd service name')}
59
- placeholder={t('Type here')}
59
+ placeholder="name.service"
60
60
  value={currentText}
61
61
  onBlur={onAdd}
62
62
  onKeyDown={(ev) => {
@@ -50,6 +50,7 @@ const getEventReasonTitles = (t: TFunction, kindType: string): Record<Event.reas
50
50
  [Event.reason.RESOURCE_DELETION_FAILED]: t('{{ resourceType }} could not be deleted', params),
51
51
  [Event.reason.RESOURCE_UPDATED]: t('{{ resourceType }} was updated successfully', params),
52
52
  [Event.reason.RESOURCE_UPDATE_FAILED]: t('{{ resourceType }} could not be updated', params),
53
+ [Event.reason.SYSTEM_RESTORED]: t('The system was restored from a backup'),
53
54
  // Device events
54
55
  [Event.reason.DEVICE_DECOMMISSIONED]: t('Device decommissioned successfully'),
55
56
  [Event.reason.DEVICE_DECOMMISSION_FAILED]: t('Device could not be decommissioned'),
@@ -71,21 +72,32 @@ const getEventReasonTitles = (t: TFunction, kindType: string): Record<Event.reas
71
72
  [Event.reason.DEVICE_CONTENT_UP_TO_DATE]: t('Device returned to being up-to-date'),
72
73
  [Event.reason.DEVICE_CONTENT_UPDATING]: t('Device is updating'),
73
74
  [Event.reason.DEVICE_CONTENT_OUT_OF_DATE]: t('Device is out-of-date'),
75
+ [Event.reason.DEVICE_UPDATE_FAILED]: t('Device update failed'),
74
76
  [Event.reason.DEVICE_MULTIPLE_OWNERS_DETECTED]: t('Detected device ownership conflict'),
75
77
  [Event.reason.DEVICE_MULTIPLE_OWNERS_RESOLVED]: t('Device ownership conflict has been resolved'),
76
78
  [Event.reason.DEVICE_SPEC_VALID]: t('Device specification has returned to a valid state'),
77
79
  [Event.reason.DEVICE_SPEC_INVALID]: t('Device specification is invalid'),
80
+ [Event.reason.DEVICE_CONFLICT_PAUSED]: t('Device is paused after database restore'),
81
+ [Event.reason.DEVICE_CONFLICT_RESOLVED]: t('Device conflict has been resolved'),
78
82
  // Enrollment request events
79
83
  [Event.reason.ENROLLMENT_REQUEST_APPROVED]: t('Enrollment request was approved'),
80
84
  [Event.reason.ENROLLMENT_REQUEST_APPROVAL_FAILED]: t('Enrollment request approval failed'),
81
85
  // Internal task events
82
86
  [Event.reason.INTERNAL_TASK_FAILED]: t('Internal task failed'),
87
+ [Event.reason.INTERNAL_TASK_PERMANENTLY_FAILED]: t('Internal task permanently failed'),
83
88
  // Repository events
84
89
  [Event.reason.REPOSITORY_ACCESSIBLE]: t('Repository is accessible'),
85
90
  [Event.reason.REPOSITORY_INACCESSIBLE]: t('Repository is inaccessible'),
91
+ [Event.reason.REFERENCED_REPOSITORY_UPDATED]: t('Referenced repository was updated'),
86
92
  // Fleet events
93
+ [Event.reason.FLEET_VALID]: t('Fleet specification is valid'),
94
+ [Event.reason.FLEET_INVALID]: t('Fleet specification is invalid'),
87
95
  [Event.reason.FLEET_ROLLOUT_STARTED]: t('Fleet rollout started'),
88
96
  [Event.reason.FLEET_ROLLOUT_CREATED]: t('Fleet rollout created'),
97
+ [Event.reason.FLEET_ROLLOUT_FAILED]: t('Fleet rollout failed'),
98
+ [Event.reason.FLEET_ROLLOUT_COMPLETED]: t('Fleet rollout completed'),
99
+ [Event.reason.FLEET_ROLLOUT_BATCH_DISPATCHED]: t('Fleet rollout batch dispatched'),
100
+ [Event.reason.FLEET_ROLLOUT_DEVICE_SELECTED]: t('Fleet rollout device selected'),
89
101
  [Event.reason.FLEET_ROLLOUT_BATCH_COMPLETED]: t('Fleet rollout batch completed'),
90
102
  // Resource sync events
91
103
  [Event.reason.RESOURCE_SYNC_SYNCED]: t('Resourcesync synchronization completed', params),
@@ -27,7 +27,7 @@ const UpdatePolicyStep = ({ isReadOnly }: { isReadOnly: boolean }) => {
27
27
  return (
28
28
  <Grid lg={8}>
29
29
  <FlightCtlForm>
30
- <CheckboxField name="useBasicUpdateConfig" label={t('Use basic configurations')} />
30
+ <CheckboxField name="useBasicUpdateConfig" label={t('Use basic configurations')} isDisabled={isReadOnly} />
31
31
  {!useBasicUpdateConfig ? (
32
32
  <FormSection title={t('Advanced configurations')} titleElement="h1" className="pf-v5-u-mt-sm">
33
33
  {/* Rollout policies */}