@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.
- package/dist/src/components/DetailsPage/DetailsPage.d.ts +2 -1
- package/dist/src/components/DetailsPage/DetailsPage.d.ts.map +1 -1
- package/dist/src/components/DetailsPage/DetailsPage.js +2 -1
- package/dist/src/components/DetailsPage/DetailsPage.js.map +1 -1
- package/dist/src/components/DetailsPage/DetailsPageActions.d.ts +10 -0
- package/dist/src/components/DetailsPage/DetailsPageActions.d.ts.map +1 -1
- package/dist/src/components/DetailsPage/DetailsPageActions.js +23 -1
- package/dist/src/components/DetailsPage/DetailsPageActions.js.map +1 -1
- package/dist/src/components/Device/DeviceDetails/DeviceDetailsPage.d.ts.map +1 -1
- package/dist/src/components/Device/DeviceDetails/DeviceDetailsPage.js +29 -3
- package/dist/src/components/Device/DeviceDetails/DeviceDetailsPage.js.map +1 -1
- package/dist/src/components/Device/DeviceDetails/DeviceDetailsTab.d.ts.map +1 -1
- package/dist/src/components/Device/DeviceDetails/DeviceDetailsTab.js +0 -4
- package/dist/src/components/Device/DeviceDetails/DeviceDetailsTab.js.map +1 -1
- package/dist/src/components/Device/DeviceDetails/DeviceDetailsTabContent/StatusContent.d.ts.map +1 -1
- package/dist/src/components/Device/DeviceDetails/DeviceDetailsTabContent/StatusContent.js +8 -2
- package/dist/src/components/Device/DeviceDetails/DeviceDetailsTabContent/StatusContent.js.map +1 -1
- package/dist/src/components/Device/DevicesPage/DecommissionedDeviceTableRow.d.ts.map +1 -1
- package/dist/src/components/Device/DevicesPage/DecommissionedDeviceTableRow.js +1 -3
- package/dist/src/components/Device/DevicesPage/DecommissionedDeviceTableRow.js.map +1 -1
- package/dist/src/components/Device/DevicesPage/DecommissionedDevicesTable.d.ts.map +1 -1
- package/dist/src/components/Device/DevicesPage/DecommissionedDevicesTable.js +0 -3
- package/dist/src/components/Device/DevicesPage/DecommissionedDevicesTable.js.map +1 -1
- package/dist/src/components/Device/DevicesPage/DeviceToolbarFilters.d.ts.map +1 -1
- package/dist/src/components/Device/DevicesPage/DeviceToolbarFilters.js +3 -1
- package/dist/src/components/Device/DevicesPage/DeviceToolbarFilters.js.map +1 -1
- package/dist/src/components/Device/DevicesPage/DevicesPage.d.ts.map +1 -1
- package/dist/src/components/Device/DevicesPage/DevicesPage.js +1 -1
- package/dist/src/components/Device/DevicesPage/DevicesPage.js.map +1 -1
- package/dist/src/components/Device/DevicesPage/EnrolledDeviceTableRow.d.ts +3 -1
- package/dist/src/components/Device/DevicesPage/EnrolledDeviceTableRow.d.ts.map +1 -1
- package/dist/src/components/Device/DevicesPage/EnrolledDeviceTableRow.js +12 -4
- package/dist/src/components/Device/DevicesPage/EnrolledDeviceTableRow.js.map +1 -1
- package/dist/src/components/Device/DevicesPage/EnrolledDevicesTable.d.ts +2 -1
- package/dist/src/components/Device/DevicesPage/EnrolledDevicesTable.d.ts.map +1 -1
- package/dist/src/components/Device/DevicesPage/EnrolledDevicesTable.js +7 -6
- package/dist/src/components/Device/DevicesPage/EnrolledDevicesTable.js.map +1 -1
- package/dist/src/components/Device/SystemdUnitsModal/TrackSystemdUnitsForm.js +1 -1
- package/dist/src/components/Device/SystemdUnitsModal/TrackSystemdUnitsForm.js.map +1 -1
- package/dist/src/components/Events/useEvents.d.ts.map +1 -1
- package/dist/src/components/Events/useEvents.js +12 -0
- package/dist/src/components/Events/useEvents.js.map +1 -1
- package/dist/src/components/Fleet/CreateFleet/steps/UpdatePolicyStep.js +1 -1
- package/dist/src/components/Fleet/CreateFleet/steps/UpdatePolicyStep.js.map +1 -1
- package/dist/src/components/Fleet/FleetDetails/FleetDetailsPage.d.ts.map +1 -1
- package/dist/src/components/Fleet/FleetDetails/FleetDetailsPage.js +4 -3
- package/dist/src/components/Fleet/FleetDetails/FleetDetailsPage.js.map +1 -1
- package/dist/src/components/Fleet/FleetDetails/FleetDevicesCharts.d.ts.map +1 -1
- package/dist/src/components/Fleet/FleetDetails/FleetDevicesCharts.js +7 -1
- package/dist/src/components/Fleet/FleetDetails/FleetDevicesCharts.js.map +1 -1
- package/dist/src/components/Fleet/FleetDetails/FleetRestoreBanner.d.ts +8 -0
- package/dist/src/components/Fleet/FleetDetails/FleetRestoreBanner.d.ts.map +1 -0
- package/dist/src/components/Fleet/FleetDetails/FleetRestoreBanner.js +36 -0
- package/dist/src/components/Fleet/FleetDetails/FleetRestoreBanner.js.map +1 -0
- package/dist/src/components/Fleet/FleetsPage.d.ts.map +1 -1
- package/dist/src/components/Fleet/FleetsPage.js +2 -0
- package/dist/src/components/Fleet/FleetsPage.js.map +1 -1
- package/dist/src/components/ListPage/ListPageActions.d.ts +3 -2
- package/dist/src/components/ListPage/ListPageActions.d.ts.map +1 -1
- package/dist/src/components/ListPage/ListPageActions.js +27 -1
- package/dist/src/components/ListPage/ListPageActions.js.map +1 -1
- package/dist/src/components/Masthead/CommandLineToolsPage.d.ts.map +1 -1
- package/dist/src/components/Masthead/CommandLineToolsPage.js +18 -14
- package/dist/src/components/Masthead/CommandLineToolsPage.js.map +1 -1
- package/dist/src/components/OverviewPage/Cards/Alerts/AlertsCard.d.ts.map +1 -1
- package/dist/src/components/OverviewPage/Cards/Alerts/AlertsCard.js +15 -5
- package/dist/src/components/OverviewPage/Cards/Alerts/AlertsCard.js.map +1 -1
- package/dist/src/components/OverviewPage/Cards/Status/DeviceStatusChart.d.ts.map +1 -1
- package/dist/src/components/OverviewPage/Cards/Status/DeviceStatusChart.js +7 -1
- package/dist/src/components/OverviewPage/Cards/Status/DeviceStatusChart.js.map +1 -1
- package/dist/src/components/OverviewPage/Overview.d.ts.map +1 -1
- package/dist/src/components/OverviewPage/Overview.js +4 -2
- package/dist/src/components/OverviewPage/Overview.js.map +1 -1
- package/dist/src/components/Status/StatusDisplay.d.ts +3 -1
- package/dist/src/components/Status/StatusDisplay.d.ts.map +1 -1
- package/dist/src/components/Status/StatusDisplay.js +8 -8
- package/dist/src/components/Status/StatusDisplay.js.map +1 -1
- package/dist/src/components/SystemRestore/PendingSyncDevicesAlert.d.ts +7 -0
- package/dist/src/components/SystemRestore/PendingSyncDevicesAlert.d.ts.map +1 -0
- package/dist/src/components/SystemRestore/PendingSyncDevicesAlert.js +22 -0
- package/dist/src/components/SystemRestore/PendingSyncDevicesAlert.js.map +1 -0
- package/dist/src/components/SystemRestore/SuspendedDevicesAlert.d.ts +16 -0
- package/dist/src/components/SystemRestore/SuspendedDevicesAlert.d.ts.map +1 -0
- package/dist/src/components/SystemRestore/SuspendedDevicesAlert.js +75 -0
- package/dist/src/components/SystemRestore/SuspendedDevicesAlert.js.map +1 -0
- package/dist/src/components/SystemRestore/SystemRestoreBanners.css +6 -0
- package/dist/src/components/SystemRestore/SystemRestoreBanners.d.ts +28 -0
- package/dist/src/components/SystemRestore/SystemRestoreBanners.d.ts.map +1 -0
- package/dist/src/components/SystemRestore/SystemRestoreBanners.js +38 -0
- package/dist/src/components/SystemRestore/SystemRestoreBanners.js.map +1 -0
- package/dist/src/components/charts/utils.js +1 -1
- package/dist/src/components/charts/utils.js.map +1 -1
- package/dist/src/components/common/OrganizationGuard.d.ts +13 -0
- package/dist/src/components/common/OrganizationGuard.d.ts.map +1 -0
- package/dist/src/components/common/OrganizationGuard.js +106 -0
- package/dist/src/components/common/OrganizationGuard.js.map +1 -0
- package/dist/src/components/common/OrganizationSelector.d.ts +8 -0
- package/dist/src/components/common/OrganizationSelector.d.ts.map +1 -0
- package/dist/src/components/common/OrganizationSelector.js +92 -0
- package/dist/src/components/common/OrganizationSelector.js.map +1 -0
- package/dist/src/components/common/PageNavigation.d.ts +4 -0
- package/dist/src/components/common/PageNavigation.d.ts.map +1 -0
- package/dist/src/components/common/PageNavigation.js +46 -0
- package/dist/src/components/common/PageNavigation.js.map +1 -0
- package/dist/src/components/form/FilterSelect.css +3 -4
- package/dist/src/components/form/validations.d.ts +9 -0
- package/dist/src/components/form/validations.d.ts.map +1 -1
- package/dist/src/components/form/validations.js +12 -1
- package/dist/src/components/form/validations.js.map +1 -1
- package/dist/src/components/modals/ResumeDevicesModal/ResumeDevicesModal.d.ts +15 -0
- package/dist/src/components/modals/ResumeDevicesModal/ResumeDevicesModal.d.ts.map +1 -0
- package/dist/src/components/modals/ResumeDevicesModal/ResumeDevicesModal.js +56 -0
- package/dist/src/components/modals/ResumeDevicesModal/ResumeDevicesModal.js.map +1 -0
- package/dist/src/components/modals/massModals/ResumeDevicesModal/MassResumeDevicesModal.d.ts +7 -0
- package/dist/src/components/modals/massModals/ResumeDevicesModal/MassResumeDevicesModal.d.ts.map +1 -0
- package/dist/src/components/modals/massModals/ResumeDevicesModal/MassResumeDevicesModal.js +265 -0
- package/dist/src/components/modals/massModals/ResumeDevicesModal/MassResumeDevicesModal.js.map +1 -0
- package/dist/src/components/modals/massModals/ResumeDevicesModal/ResumeAllDevicesConfirmationDialog.d.ts +9 -0
- package/dist/src/components/modals/massModals/ResumeDevicesModal/ResumeAllDevicesConfirmationDialog.d.ts.map +1 -0
- package/dist/src/components/modals/massModals/ResumeDevicesModal/ResumeAllDevicesConfirmationDialog.js +27 -0
- package/dist/src/components/modals/massModals/ResumeDevicesModal/ResumeAllDevicesConfirmationDialog.js.map +1 -0
- package/dist/src/hooks/useAccessReview.d.ts.map +1 -1
- package/dist/src/hooks/useAccessReview.js +17 -4
- package/dist/src/hooks/useAccessReview.js.map +1 -1
- package/dist/src/hooks/useAlertsEnabled.d.ts +2 -0
- package/dist/src/hooks/useAlertsEnabled.d.ts.map +1 -0
- package/dist/src/hooks/useAlertsEnabled.js +50 -0
- package/dist/src/hooks/useAlertsEnabled.js.map +1 -0
- package/dist/src/hooks/useAppContext.d.ts +3 -6
- package/dist/src/hooks/useAppContext.d.ts.map +1 -1
- package/dist/src/hooks/useAppContext.js +1 -0
- package/dist/src/hooks/useAppContext.js.map +1 -1
- package/dist/src/hooks/useFetch.d.ts +6 -7
- package/dist/src/hooks/useFetch.d.ts.map +1 -1
- package/dist/src/hooks/useFetch.js +2 -3
- package/dist/src/hooks/useFetch.js.map +1 -1
- package/dist/src/hooks/useFetchPeriodically.d.ts.map +1 -1
- package/dist/src/hooks/useFetchPeriodically.js +4 -9
- package/dist/src/hooks/useFetchPeriodically.js.map +1 -1
- package/dist/src/hooks/useSystemRestoreContext.d.ts +16 -0
- package/dist/src/hooks/useSystemRestoreContext.d.ts.map +1 -0
- package/dist/src/hooks/useSystemRestoreContext.js +45 -0
- package/dist/src/hooks/useSystemRestoreContext.js.map +1 -0
- package/dist/src/types/extraTypes.d.ts +17 -18
- package/dist/src/types/extraTypes.d.ts.map +1 -1
- package/dist/src/types/extraTypes.js +1 -6
- package/dist/src/types/extraTypes.js.map +1 -1
- package/dist/src/types/rbac.d.ts +1 -0
- package/dist/src/types/rbac.d.ts.map +1 -1
- package/dist/src/types/rbac.js +1 -0
- package/dist/src/types/rbac.js.map +1 -1
- package/dist/src/utils/api.d.ts +2 -15
- package/dist/src/utils/api.d.ts.map +1 -1
- package/dist/src/utils/api.js +1 -40
- package/dist/src/utils/api.js.map +1 -1
- package/dist/src/utils/devices.d.ts +2 -0
- package/dist/src/utils/devices.d.ts.map +1 -1
- package/dist/src/utils/devices.js +11 -1
- package/dist/src/utils/devices.js.map +1 -1
- package/dist/src/utils/organizationStorage.d.ts +4 -0
- package/dist/src/utils/organizationStorage.d.ts.map +1 -0
- package/dist/src/utils/organizationStorage.js +18 -0
- package/dist/src/utils/organizationStorage.js.map +1 -0
- package/dist/src/utils/query.d.ts +2 -0
- package/dist/src/utils/query.d.ts.map +1 -1
- package/dist/src/utils/query.js +16 -0
- package/dist/src/utils/query.js.map +1 -1
- package/dist/src/utils/status/common.d.ts +1 -0
- package/dist/src/utils/status/common.d.ts.map +1 -1
- package/dist/src/utils/status/common.js.map +1 -1
- package/dist/src/utils/status/devices.d.ts +5 -0
- package/dist/src/utils/status/devices.d.ts.map +1 -1
- package/dist/src/utils/status/devices.js +44 -5
- package/dist/src/utils/status/devices.js.map +1 -1
- package/dist/src/utils/status/fleet.js +1 -1
- package/dist/src/utils/status/fleet.js.map +1 -1
- package/dist/src/utils/status/repository.js +1 -1
- package/dist/src/utils/status/repository.js.map +1 -1
- package/package.json +1 -1
- package/src/components/DetailsPage/DetailsPage.tsx +3 -0
- package/src/components/DetailsPage/DetailsPageActions.tsx +45 -0
- package/src/components/Device/DeviceDetails/DeviceDetailsPage.tsx +57 -5
- package/src/components/Device/DeviceDetails/DeviceDetailsTab.tsx +0 -5
- package/src/components/Device/DeviceDetails/DeviceDetailsTabContent/StatusContent.tsx +11 -3
- package/src/components/Device/DevicesPage/DecommissionedDeviceTableRow.tsx +0 -2
- package/src/components/Device/DevicesPage/DecommissionedDevicesTable.tsx +0 -3
- package/src/components/Device/DevicesPage/DeviceToolbarFilters.tsx +5 -1
- package/src/components/Device/DevicesPage/DevicesPage.tsx +1 -0
- package/src/components/Device/DevicesPage/EnrolledDeviceTableRow.tsx +15 -3
- package/src/components/Device/DevicesPage/EnrolledDevicesTable.tsx +11 -5
- package/src/components/Device/SystemdUnitsModal/TrackSystemdUnitsForm.tsx +1 -1
- package/src/components/Events/useEvents.ts +12 -0
- package/src/components/Fleet/CreateFleet/steps/UpdatePolicyStep.tsx +1 -1
- package/src/components/Fleet/FleetDetails/FleetDetailsPage.tsx +4 -5
- package/src/components/Fleet/FleetDetails/FleetDevicesCharts.tsx +9 -3
- package/src/components/Fleet/FleetDetails/FleetRestoreBanner.tsx +46 -0
- package/src/components/Fleet/FleetsPage.tsx +2 -0
- package/src/components/ListPage/ListPageActions.tsx +46 -3
- package/src/components/Masthead/CommandLineToolsPage.tsx +17 -14
- package/src/components/OverviewPage/Cards/Alerts/AlertsCard.tsx +19 -5
- package/src/components/OverviewPage/Cards/Status/DeviceStatusChart.tsx +8 -2
- package/src/components/OverviewPage/Overview.tsx +5 -2
- package/src/components/Status/StatusDisplay.tsx +32 -23
- package/src/components/SystemRestore/PendingSyncDevicesAlert.tsx +36 -0
- package/src/components/SystemRestore/SuspendedDevicesAlert.tsx +144 -0
- package/src/components/SystemRestore/SystemRestoreBanners.css +6 -0
- package/src/components/SystemRestore/SystemRestoreBanners.tsx +82 -0
- package/src/components/charts/utils.ts +1 -1
- package/src/components/common/OrganizationGuard.tsx +124 -0
- package/src/components/common/OrganizationSelector.tsx +192 -0
- package/src/components/common/PageNavigation.tsx +103 -0
- package/src/components/form/FilterSelect.css +3 -4
- package/src/components/form/validations.ts +14 -0
- package/src/components/modals/ResumeDevicesModal/ResumeDevicesModal.tsx +114 -0
- package/src/components/modals/massModals/ResumeDevicesModal/MassResumeDevicesModal.tsx +465 -0
- package/src/components/modals/massModals/ResumeDevicesModal/ResumeAllDevicesConfirmationDialog.tsx +55 -0
- package/src/hooks/useAccessReview.ts +20 -4
- package/src/hooks/useAlertsEnabled.ts +50 -0
- package/src/hooks/useAppContext.tsx +9 -7
- package/src/hooks/useFetch.ts +1 -3
- package/src/hooks/useFetchPeriodically.ts +4 -11
- package/src/hooks/useSystemRestoreContext.tsx +54 -0
- package/src/types/extraTypes.ts +17 -23
- package/src/types/rbac.ts +1 -0
- package/src/utils/api.ts +2 -51
- package/src/utils/devices.ts +11 -1
- package/src/utils/organizationStorage.ts +13 -0
- package/src/utils/query.ts +22 -0
- package/src/utils/status/common.ts +1 -0
- package/src/utils/status/devices.ts +49 -2
- package/src/utils/status/fleet.ts +1 -1
- package/src/utils/status/repository.ts +1 -1
- package/dist/src/hooks/useAlerts.d.ts +0 -26
- package/dist/src/hooks/useAlerts.d.ts.map +0 -1
- package/dist/src/hooks/useAlerts.js +0 -114
- package/dist/src/hooks/useAlerts.js.map +0 -1
- package/dist/src/utils/metrics.d.ts +0 -9
- package/dist/src/utils/metrics.d.ts.map +0 -1
- package/dist/src/utils/metrics.js +0 -48
- package/dist/src/utils/metrics.js.map +0 -1
- package/src/hooks/useAlerts.ts +0 -147
- package/src/utils/metrics.ts +0 -49
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"devices.js","sourceRoot":"","sources":["../../../../src/utils/status/devices.ts"],"names":[],"mappings":";;;;AACA,
|
|
1
|
+
{"version":3,"file":"devices.js","sourceRoot":"","sources":["../../../../src/utils/status/devices.ts"],"names":[],"mappings":"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"}
|
|
@@ -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,
|
|
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('
|
|
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":";;;AACA,4CAAuG;AACvG,oCAAyC;AACzC,oCAA+C;AAW/C,MAAM,sBAAsB,GAAG,CAAC,CAAY,EAAE,EAAE,CAAC,CAAC;IAChD,CAAC,qBAAa,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC;IAC/C,YAAY,EAAE,CAAC,CAAC,YAAY,CAAC;IAC7B,CAAC,qBAAa,CAAC,0BAA0B,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC;IACvD,YAAY,EAAE,CAAC,CAAC,YAAY,CAAC;IAC7B,CAAC,qBAAa,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC;IACrD,gBAAgB,EAAE,CAAC,CAAC,gBAAgB,CAAC;IACrC,cAAc,EAAE,CAAC,CAAC,cAAc,CAAC;CAClC,CAAC,CAAC;AA8F2E,wDAAsB;AA5FpG,MAAM,uBAAuB,GAAG,CAC9B,UAAqC,EACrC,IAAe,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,EAI/B,EAAE;;IACF,MAAM,UAAU,GAAG,MAAA,UAAU,CAAC,MAAM,0CAAE,UAAU,CAAC;IAEjD,MAAM,mBAAmB,GAAG,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,qBAAa,CAAC,oBAAoB,CAAC,CAAC;IACnG,IAAI,CAAA,mBAAmB,aAAnB,mBAAmB,uBAAnB,mBAAmB,CAAE,MAAM,MAAK,uBAAe,CAAC,oBAAoB,EAAE,CAAC;QACzE,OAAO;YACL,MAAM,EAAE,gBAAgB;YACxB,OAAO,EAAE,IAAA,2BAAmB,EAAC,mBAAmB,CAAC;SAClD,CAAC;IACJ,CAAC;IAED,MAAM,eAAe,GAAG,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,qBAAa,CAAC,0BAA0B,CAAC,CAAC;IACrG,IAAI,CAAA,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,MAAM,MAAK,uBAAe,CAAC,oBAAoB,EAAE,CAAC;QACrE,OAAO;YACL,MAAM,EAAE,YAAY;YACpB,OAAO,EAAE,IAAA,2BAAmB,EAAC,eAAe,CAAC;SAC9C,CAAC;IACJ,CAAC;IAED,MAAM,eAAe,GAAG,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,qBAAa,CAAC,kBAAkB,CAAC,CAAC;IAC7F,IAAI,CAAA,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,MAAM,MAAK,uBAAe,CAAC,oBAAoB,EAAE,CAAC;QACrE,OAAO;YACL,MAAM,EAAE,YAAY;YACpB,OAAO,EAAE,IAAA,2BAAmB,EAAC,eAAe,CAAC;SAC9C,CAAC;IACJ,CAAC;IAED,wFAAwF;IACxF,IAAI,eAAe,EAAE,CAAC;QACpB,OAAO;YACL,MAAM,EAAE,qBAAa,CAAC,kBAAkB;YACxC,OAAO,EAAE,EAAE;SACZ,CAAC;IACJ,CAAC;IACD,IAAI,eAAe,EAAE,CAAC;QACpB,OAAO;YACL,MAAM,EAAE,qBAAa,CAAC,0BAA0B;YAChD,OAAO,EAAE,EAAE;SACZ,CAAC;IACJ,CAAC;IACD,IAAI,mBAAmB,EAAE,CAAC;QACxB,OAAO;YACL,MAAM,EAAE,qBAAa,CAAC,oBAAoB;YAC1C,OAAO,EAAE,EAAE;SACZ,CAAC;IACJ,CAAC;IAED,gEAAgE;IAChE,OAAO;QACL,MAAM,EAAE,cAAc;QACtB,OAAO,EAAE,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"repository.js","sourceRoot":"","sources":["../../../../src/utils/status/repository.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -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 {
|
|
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, {
|
|
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:
|
|
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,
|
|
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
|
|
@@ -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
|
-
|
|
62
|
+
|
|
63
|
+
const regexp = React.useMemo(() => new RegExp(`(${escapeRegExp(filterText)})`, 'g'), [filterText]);
|
|
60
64
|
|
|
61
65
|
const searchHighlighter = React.useCallback(
|
|
62
66
|
(text: string) => {
|
|
@@ -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 {
|
|
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=
|
|
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 */}
|