@flightctl/ui-components 0.0.5 → 0.4.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/Tables/ApplicationsTable.css +7 -0
- package/dist/src/components/DetailsPage/Tables/ApplicationsTable.d.ts +8 -1
- package/dist/src/components/DetailsPage/Tables/ApplicationsTable.d.ts.map +1 -1
- package/dist/src/components/DetailsPage/Tables/ApplicationsTable.js +91 -9
- package/dist/src/components/DetailsPage/Tables/ApplicationsTable.js.map +1 -1
- package/dist/src/components/Device/AddDeviceModal/AddDeviceModal.d.ts.map +1 -1
- package/dist/src/components/Device/AddDeviceModal/AddDeviceModal.js +15 -51
- package/dist/src/components/Device/AddDeviceModal/AddDeviceModal.js.map +1 -1
- package/dist/src/components/Device/DeviceDetails/DeviceApplications.d.ts +10 -0
- package/dist/src/components/Device/DeviceDetails/DeviceApplications.d.ts.map +1 -0
- package/dist/src/components/Device/DeviceDetails/DeviceApplications.js +65 -0
- package/dist/src/components/Device/DeviceDetails/DeviceApplications.js.map +1 -0
- package/dist/src/components/Device/DeviceDetails/DeviceDetailsPage.d.ts +5 -2
- package/dist/src/components/Device/DeviceDetails/DeviceDetailsPage.d.ts.map +1 -1
- package/dist/src/components/Device/DeviceDetails/DeviceDetailsPage.js +19 -10
- package/dist/src/components/Device/DeviceDetails/DeviceDetailsPage.js.map +1 -1
- package/dist/src/components/Device/DeviceDetails/DeviceDetailsTab.d.ts +3 -4
- package/dist/src/components/Device/DeviceDetails/DeviceDetailsTab.d.ts.map +1 -1
- package/dist/src/components/Device/DeviceDetails/DeviceDetailsTab.js +6 -18
- package/dist/src/components/Device/DeviceDetails/DeviceDetailsTab.js.map +1 -1
- package/dist/src/components/Device/DeviceDetails/TerminalTab.d.ts +4 -3
- package/dist/src/components/Device/DeviceDetails/TerminalTab.d.ts.map +1 -1
- package/dist/src/components/Device/DeviceDetails/TerminalTab.js +13 -4
- package/dist/src/components/Device/DeviceDetails/TerminalTab.js.map +1 -1
- package/dist/src/components/Device/DevicesPage/DeviceFilterSelect.d.ts.map +1 -1
- package/dist/src/components/Device/DevicesPage/DeviceFilterSelect.js +4 -14
- package/dist/src/components/Device/DevicesPage/DeviceFilterSelect.js.map +1 -1
- package/dist/src/components/Device/DevicesPage/DeviceTableRow.d.ts +2 -0
- package/dist/src/components/Device/DevicesPage/DeviceTableRow.d.ts.map +1 -1
- package/dist/src/components/Device/DevicesPage/DeviceTableRow.js +14 -6
- package/dist/src/components/Device/DevicesPage/DeviceTableRow.js.map +1 -1
- package/dist/src/components/Device/DevicesPage/DeviceTableToolbar.d.ts +2 -5
- package/dist/src/components/Device/DevicesPage/DeviceTableToolbar.d.ts.map +1 -1
- package/dist/src/components/Device/DevicesPage/DeviceTableToolbar.js +8 -8
- package/dist/src/components/Device/DevicesPage/DeviceTableToolbar.js.map +1 -1
- package/dist/src/components/Device/DevicesPage/DeviceToolbarFilters.d.ts +3 -6
- package/dist/src/components/Device/DevicesPage/DeviceToolbarFilters.d.ts.map +1 -1
- package/dist/src/components/Device/DevicesPage/DeviceToolbarFilters.js +91 -17
- package/dist/src/components/Device/DevicesPage/DeviceToolbarFilters.js.map +1 -1
- package/dist/src/components/Device/DevicesPage/DevicesPage.d.ts +10 -6
- package/dist/src/components/Device/DevicesPage/DevicesPage.d.ts.map +1 -1
- package/dist/src/components/Device/DevicesPage/DevicesPage.js +46 -42
- package/dist/src/components/Device/DevicesPage/DevicesPage.js.map +1 -1
- package/dist/src/components/Device/DevicesPage/types.d.ts +1 -10
- package/dist/src/components/Device/DevicesPage/types.d.ts.map +1 -1
- package/dist/src/components/Device/DevicesPage/types.js.map +1 -1
- package/dist/src/components/Device/DevicesPage/useDeviceBackendFilters.d.ts +2 -0
- package/dist/src/components/Device/DevicesPage/useDeviceBackendFilters.d.ts.map +1 -1
- package/dist/src/components/Device/DevicesPage/useDeviceBackendFilters.js +10 -3
- package/dist/src/components/Device/DevicesPage/useDeviceBackendFilters.js.map +1 -1
- package/dist/src/components/Device/DevicesPage/useDevices.d.ts +8 -3
- package/dist/src/components/Device/DevicesPage/useDevices.d.ts.map +1 -1
- package/dist/src/components/Device/DevicesPage/useDevices.js +26 -47
- package/dist/src/components/Device/DevicesPage/useDevices.js.map +1 -1
- package/dist/src/components/Device/EditDeviceWizard/EditDeviceWizard.d.ts +2 -2
- package/dist/src/components/Device/EditDeviceWizard/EditDeviceWizard.d.ts.map +1 -1
- package/dist/src/components/Device/EditDeviceWizard/EditDeviceWizard.js +19 -4
- package/dist/src/components/Device/EditDeviceWizard/EditDeviceWizard.js.map +1 -1
- package/dist/src/components/Device/EditDeviceWizard/deviceSpecUtils.d.ts +7 -2
- package/dist/src/components/Device/EditDeviceWizard/deviceSpecUtils.d.ts.map +1 -1
- package/dist/src/components/Device/EditDeviceWizard/deviceSpecUtils.js +99 -7
- package/dist/src/components/Device/EditDeviceWizard/deviceSpecUtils.js.map +1 -1
- package/dist/src/components/Device/EditDeviceWizard/steps/ApplicationTemplates.d.ts +5 -0
- package/dist/src/components/Device/EditDeviceWizard/steps/ApplicationTemplates.d.ts.map +1 -0
- package/dist/src/components/Device/EditDeviceWizard/steps/{ApplicationsForm.js → ApplicationTemplates.js} +31 -24
- package/dist/src/components/Device/EditDeviceWizard/steps/ApplicationTemplates.js.map +1 -0
- package/dist/src/components/Device/EditDeviceWizard/steps/ConfigInlineTemplateForm.d.ts.map +1 -1
- package/dist/src/components/Device/EditDeviceWizard/steps/ConfigInlineTemplateForm.js +9 -10
- package/dist/src/components/Device/EditDeviceWizard/steps/ConfigInlineTemplateForm.js.map +1 -1
- package/dist/src/components/Device/EditDeviceWizard/steps/ConfigWithRepositoryTemplateForm.d.ts +2 -1
- package/dist/src/components/Device/EditDeviceWizard/steps/ConfigWithRepositoryTemplateForm.d.ts.map +1 -1
- package/dist/src/components/Device/EditDeviceWizard/steps/ConfigWithRepositoryTemplateForm.js +5 -6
- package/dist/src/components/Device/EditDeviceWizard/steps/ConfigWithRepositoryTemplateForm.js.map +1 -1
- package/dist/src/components/Device/EditDeviceWizard/steps/ConfigurationTemplates.d.ts +4 -0
- package/dist/src/components/Device/EditDeviceWizard/steps/ConfigurationTemplates.d.ts.map +1 -0
- package/dist/src/components/Device/EditDeviceWizard/steps/{ConfigTemplateForm.js → ConfigurationTemplates.js} +42 -28
- package/dist/src/components/Device/EditDeviceWizard/steps/ConfigurationTemplates.js.map +1 -0
- package/dist/src/components/Device/EditDeviceWizard/steps/DeviceTemplateStep.d.ts.map +1 -1
- package/dist/src/components/Device/EditDeviceWizard/steps/DeviceTemplateStep.js +53 -12
- package/dist/src/components/Device/EditDeviceWizard/steps/DeviceTemplateStep.js.map +1 -1
- package/dist/src/components/Device/EditDeviceWizard/steps/ReviewTrackedSystemdServices.d.ts +7 -0
- package/dist/src/components/Device/EditDeviceWizard/steps/ReviewTrackedSystemdServices.d.ts.map +1 -0
- package/dist/src/components/Device/EditDeviceWizard/steps/ReviewTrackedSystemdServices.js +13 -0
- package/dist/src/components/Device/EditDeviceWizard/steps/ReviewTrackedSystemdServices.js.map +1 -0
- package/dist/src/components/Device/EditDeviceWizard/steps/SystemdUnitsForm.d.ts +4 -0
- package/dist/src/components/Device/EditDeviceWizard/steps/SystemdUnitsForm.d.ts.map +1 -0
- package/dist/src/components/Device/EditDeviceWizard/steps/SystemdUnitsForm.js +38 -0
- package/dist/src/components/Device/EditDeviceWizard/steps/SystemdUnitsForm.js.map +1 -0
- package/dist/src/components/Device/EditDeviceWizard/types.d.ts +3 -0
- package/dist/src/components/Device/EditDeviceWizard/types.d.ts.map +1 -1
- package/dist/src/components/Device/EditDeviceWizard/utils.d.ts +1 -0
- package/dist/src/components/Device/EditDeviceWizard/utils.d.ts.map +1 -1
- package/dist/src/components/Device/EditDeviceWizard/utils.js +5 -2
- package/dist/src/components/Device/EditDeviceWizard/utils.js.map +1 -1
- package/dist/src/components/Device/{MatchPatternsModal/MatchPatternsModal.d.ts → SystemdUnitsModal/SystemdUnitsModal.d.ts} +6 -6
- package/dist/src/components/Device/SystemdUnitsModal/SystemdUnitsModal.d.ts.map +1 -0
- package/dist/src/components/Device/{MatchPatternsModal/MatchPatternsModal.js → SystemdUnitsModal/SystemdUnitsModal.js} +28 -15
- package/dist/src/components/Device/SystemdUnitsModal/SystemdUnitsModal.js.map +1 -0
- package/dist/src/components/Device/SystemdUnitsModal/TrackSystemdUnitsForm.d.ts +15 -0
- package/dist/src/components/Device/SystemdUnitsModal/TrackSystemdUnitsForm.d.ts.map +1 -0
- package/dist/src/components/Device/SystemdUnitsModal/TrackSystemdUnitsForm.js +57 -0
- package/dist/src/components/Device/SystemdUnitsModal/TrackSystemdUnitsForm.js.map +1 -0
- package/dist/src/components/EnrollmentRequest/EnrollmentRequestDetails/EnrollmentRequestDetails.d.ts +2 -2
- package/dist/src/components/EnrollmentRequest/EnrollmentRequestDetails/EnrollmentRequestDetails.d.ts.map +1 -1
- package/dist/src/components/EnrollmentRequest/EnrollmentRequestDetails/EnrollmentRequestDetails.js +14 -4
- package/dist/src/components/EnrollmentRequest/EnrollmentRequestDetails/EnrollmentRequestDetails.js.map +1 -1
- package/dist/src/components/EnrollmentRequest/EnrollmentRequestList.d.ts +9 -0
- package/dist/src/components/EnrollmentRequest/EnrollmentRequestList.d.ts.map +1 -0
- package/dist/src/components/EnrollmentRequest/EnrollmentRequestList.js +97 -0
- package/dist/src/components/EnrollmentRequest/EnrollmentRequestList.js.map +1 -0
- package/dist/src/components/EnrollmentRequest/EnrollmentRequestTableRow.d.ts +2 -0
- package/dist/src/components/EnrollmentRequest/EnrollmentRequestTableRow.d.ts.map +1 -1
- package/dist/src/components/EnrollmentRequest/EnrollmentRequestTableRow.js +15 -11
- package/dist/src/components/EnrollmentRequest/EnrollmentRequestTableRow.js.map +1 -1
- package/dist/src/components/{Device/DevicesPage → EnrollmentRequest}/EnrollmentRequestTableToolbar.d.ts +1 -1
- package/dist/src/components/EnrollmentRequest/EnrollmentRequestTableToolbar.d.ts.map +1 -0
- package/dist/src/components/{Device/DevicesPage → EnrollmentRequest}/EnrollmentRequestTableToolbar.js +2 -2
- package/dist/src/components/EnrollmentRequest/EnrollmentRequestTableToolbar.js.map +1 -0
- package/dist/src/components/EnrollmentRequest/PendingEnrollmentRequestsBadge.css +10 -0
- package/dist/src/components/EnrollmentRequest/PendingEnrollmentRequestsBadge.d.ts +5 -0
- package/dist/src/components/EnrollmentRequest/PendingEnrollmentRequestsBadge.d.ts.map +1 -0
- package/dist/src/components/EnrollmentRequest/PendingEnrollmentRequestsBadge.js +22 -0
- package/dist/src/components/EnrollmentRequest/PendingEnrollmentRequestsBadge.js.map +1 -0
- package/dist/src/components/EnrollmentRequest/useEnrollmentRequests.d.ts +9 -0
- package/dist/src/components/EnrollmentRequest/useEnrollmentRequests.d.ts.map +1 -0
- package/dist/src/components/EnrollmentRequest/useEnrollmentRequests.js +42 -0
- package/dist/src/components/EnrollmentRequest/useEnrollmentRequests.js.map +1 -0
- package/dist/src/components/Fleet/CreateFleet/CreateFleetWizard.d.ts +2 -2
- package/dist/src/components/Fleet/CreateFleet/CreateFleetWizard.d.ts.map +1 -1
- package/dist/src/components/Fleet/CreateFleet/CreateFleetWizard.js +19 -2
- package/dist/src/components/Fleet/CreateFleet/CreateFleetWizard.js.map +1 -1
- package/dist/src/components/Fleet/CreateFleet/steps/DeviceLabelSelector.d.ts.map +1 -1
- package/dist/src/components/Fleet/CreateFleet/steps/DeviceLabelSelector.js +2 -4
- package/dist/src/components/Fleet/CreateFleet/steps/DeviceLabelSelector.js.map +1 -1
- package/dist/src/components/Fleet/CreateFleet/steps/ReviewStep.d.ts.map +1 -1
- package/dist/src/components/Fleet/CreateFleet/steps/ReviewStep.js +6 -1
- package/dist/src/components/Fleet/CreateFleet/steps/ReviewStep.js.map +1 -1
- package/dist/src/components/Fleet/CreateFleet/utils.d.ts.map +1 -1
- package/dist/src/components/Fleet/CreateFleet/utils.js +61 -35
- package/dist/src/components/Fleet/CreateFleet/utils.js.map +1 -1
- package/dist/src/components/Fleet/FleetDetails/FleetDetails.d.ts +2 -2
- package/dist/src/components/Fleet/FleetDetails/FleetDetails.d.ts.map +1 -1
- package/dist/src/components/Fleet/FleetDetails/FleetDetails.js +16 -6
- package/dist/src/components/Fleet/FleetDetails/FleetDetails.js.map +1 -1
- package/dist/src/components/Fleet/FleetDetails/FleetDevices.d.ts.map +1 -1
- package/dist/src/components/Fleet/FleetDetails/FleetDevices.js +7 -7
- package/dist/src/components/Fleet/FleetDetails/FleetDevices.js.map +1 -1
- package/dist/src/components/Fleet/FleetResourceSyncs.d.ts +2 -5
- package/dist/src/components/Fleet/FleetResourceSyncs.d.ts.map +1 -1
- package/dist/src/components/Fleet/FleetResourceSyncs.js +38 -24
- package/dist/src/components/Fleet/FleetResourceSyncs.js.map +1 -1
- package/dist/src/components/Fleet/FleetRow.d.ts +2 -0
- package/dist/src/components/Fleet/FleetRow.d.ts.map +1 -1
- package/dist/src/components/Fleet/FleetRow.js +16 -14
- package/dist/src/components/Fleet/FleetRow.js.map +1 -1
- package/dist/src/components/Fleet/FleetsPage.d.ts +2 -2
- package/dist/src/components/Fleet/FleetsPage.d.ts.map +1 -1
- package/dist/src/components/Fleet/FleetsPage.js +37 -33
- package/dist/src/components/Fleet/FleetsPage.js.map +1 -1
- package/dist/src/components/Fleet/ImportFleetWizard/ImportFleetWizard.d.ts +2 -2
- package/dist/src/components/Fleet/ImportFleetWizard/ImportFleetWizard.d.ts.map +1 -1
- package/dist/src/components/Fleet/ImportFleetWizard/ImportFleetWizard.js +11 -2
- package/dist/src/components/Fleet/ImportFleetWizard/ImportFleetWizard.js.map +1 -1
- package/dist/src/components/Fleet/ImportFleetWizard/steps/RepositoryStep.d.ts.map +1 -1
- package/dist/src/components/Fleet/ImportFleetWizard/steps/RepositoryStep.js +5 -2
- package/dist/src/components/Fleet/ImportFleetWizard/steps/RepositoryStep.js.map +1 -1
- package/dist/src/components/Fleet/useFleets.d.ts +26 -0
- package/dist/src/components/Fleet/useFleets.d.ts.map +1 -0
- package/dist/src/components/Fleet/useFleets.js +71 -0
- package/dist/src/components/Fleet/useFleets.js.map +1 -0
- package/dist/src/components/OverviewPage/Cards/Status/StatusCard.d.ts.map +1 -1
- package/dist/src/components/OverviewPage/Cards/Status/StatusCard.js +6 -14
- package/dist/src/components/OverviewPage/Cards/Status/StatusCard.js.map +1 -1
- package/dist/src/components/OverviewPage/Cards/Status/StatusCardFilters.d.ts +0 -3
- package/dist/src/components/OverviewPage/Cards/Status/StatusCardFilters.d.ts.map +1 -1
- package/dist/src/components/OverviewPage/Cards/Status/StatusCardFilters.js +2 -2
- package/dist/src/components/OverviewPage/Cards/Status/StatusCardFilters.js.map +1 -1
- package/dist/src/components/OverviewPage/Cards/ToDo/ToDoCard.d.ts.map +1 -1
- package/dist/src/components/OverviewPage/Cards/ToDo/ToDoCard.js +5 -9
- package/dist/src/components/OverviewPage/Cards/ToDo/ToDoCard.js.map +1 -1
- package/dist/src/components/OverviewPage/Overview.d.ts.map +1 -1
- package/dist/src/components/OverviewPage/Overview.js +11 -5
- package/dist/src/components/OverviewPage/Overview.js.map +1 -1
- package/dist/src/components/Repository/CreateRepository/CreateRepository.d.ts +2 -2
- package/dist/src/components/Repository/CreateRepository/CreateRepository.d.ts.map +1 -1
- package/dist/src/components/Repository/CreateRepository/CreateRepository.js +15 -6
- package/dist/src/components/Repository/CreateRepository/CreateRepository.js.map +1 -1
- package/dist/src/components/Repository/CreateRepository/CreateRepositoryForm.d.ts.map +1 -1
- package/dist/src/components/Repository/CreateRepository/CreateRepositoryForm.js +4 -1
- package/dist/src/components/Repository/CreateRepository/CreateRepositoryForm.js.map +1 -1
- package/dist/src/components/Repository/CreateRepository/utils.d.ts.map +1 -1
- package/dist/src/components/Repository/CreateRepository/utils.js +22 -6
- package/dist/src/components/Repository/CreateRepository/utils.js.map +1 -1
- package/dist/src/components/Repository/RepositoryDetails/DeleteRepositoryModal.d.ts.map +1 -1
- package/dist/src/components/Repository/RepositoryDetails/DeleteRepositoryModal.js +3 -2
- package/dist/src/components/Repository/RepositoryDetails/DeleteRepositoryModal.js.map +1 -1
- package/dist/src/components/Repository/RepositoryDetails/RepositoryDetails.d.ts +2 -2
- package/dist/src/components/Repository/RepositoryDetails/RepositoryDetails.d.ts.map +1 -1
- package/dist/src/components/Repository/RepositoryDetails/RepositoryDetails.js +16 -5
- package/dist/src/components/Repository/RepositoryDetails/RepositoryDetails.js.map +1 -1
- package/dist/src/components/Repository/RepositoryList.d.ts +0 -1
- package/dist/src/components/Repository/RepositoryList.d.ts.map +1 -1
- package/dist/src/components/Repository/RepositoryList.js +55 -46
- package/dist/src/components/Repository/RepositoryList.js.map +1 -1
- package/dist/src/components/Repository/useRepositories.d.ts +16 -0
- package/dist/src/components/Repository/useRepositories.d.ts.map +1 -0
- package/dist/src/components/Repository/useRepositories.js +40 -0
- package/dist/src/components/Repository/useRepositories.js.map +1 -0
- package/dist/src/components/ResourceSync/RepositoryResourceSyncList.d.ts.map +1 -1
- package/dist/src/components/ResourceSync/RepositoryResourceSyncList.js +21 -23
- package/dist/src/components/ResourceSync/RepositoryResourceSyncList.js.map +1 -1
- package/dist/src/components/Table/Table.d.ts +12 -3
- package/dist/src/components/Table/Table.d.ts.map +1 -1
- package/dist/src/components/Table/Table.js +4 -4
- package/dist/src/components/Table/Table.js.map +1 -1
- package/dist/src/components/Table/TablePagination.d.ts +8 -0
- package/dist/src/components/Table/TablePagination.d.ts.map +1 -0
- package/dist/src/components/Table/TablePagination.js +38 -0
- package/dist/src/components/Table/TablePagination.js.map +1 -0
- package/dist/src/components/Terminal/Terminal.d.ts.map +1 -1
- package/dist/src/components/Terminal/Terminal.js +1 -0
- package/dist/src/components/Terminal/Terminal.js.map +1 -1
- package/dist/src/components/charts/DonutChart.css +5 -0
- package/dist/src/components/charts/DonutChart.js +1 -1
- package/dist/src/components/charts/DonutChart.js.map +1 -1
- package/dist/src/components/common/AccessDenied.d.ts +4 -0
- package/dist/src/components/common/AccessDenied.d.ts.map +1 -0
- package/dist/src/components/common/AccessDenied.js +15 -0
- package/dist/src/components/common/AccessDenied.js.map +1 -0
- package/dist/src/components/common/ButtonWithPermissions.d.ts +8 -0
- package/dist/src/components/common/ButtonWithPermissions.d.ts.map +1 -0
- package/dist/src/components/common/ButtonWithPermissions.js +12 -0
- package/dist/src/components/common/ButtonWithPermissions.js.map +1 -0
- package/dist/src/components/common/LearnMoreLink.d.ts +7 -0
- package/dist/src/components/common/LearnMoreLink.d.ts.map +1 -0
- package/dist/src/components/common/LearnMoreLink.js +13 -0
- package/dist/src/components/common/LearnMoreLink.js.map +1 -0
- package/dist/src/components/common/LeaveFormConfirmation.js +1 -1
- package/dist/src/components/common/LeaveFormConfirmation.js.map +1 -1
- package/dist/src/components/common/PageWithPermissions.d.ts +7 -0
- package/dist/src/components/common/PageWithPermissions.d.ts.map +1 -0
- package/dist/src/components/common/PageWithPermissions.js +17 -0
- package/dist/src/components/common/PageWithPermissions.js.map +1 -0
- package/dist/src/components/form/FilterSelect.d.ts +2 -4
- package/dist/src/components/form/FilterSelect.d.ts.map +1 -1
- package/dist/src/components/form/FilterSelect.js.map +1 -1
- package/dist/src/components/form/FlightCtlForm.css +3 -0
- package/dist/src/components/form/FlightCtlForm.d.ts +1 -0
- package/dist/src/components/form/FlightCtlForm.d.ts.map +1 -1
- package/dist/src/components/form/FlightCtlForm.js +2 -1
- package/dist/src/components/form/FlightCtlForm.js.map +1 -1
- package/dist/src/components/form/FormSelect.d.ts +1 -0
- package/dist/src/components/form/FormSelect.d.ts.map +1 -1
- package/dist/src/components/form/FormSelect.js +14 -2
- package/dist/src/components/form/FormSelect.js.map +1 -1
- package/dist/src/components/form/LabelsField.d.ts +2 -1
- package/dist/src/components/form/LabelsField.d.ts.map +1 -1
- package/dist/src/components/form/LabelsField.js +6 -6
- package/dist/src/components/form/LabelsField.js.map +1 -1
- package/dist/src/components/form/validations.d.ts +13 -2
- package/dist/src/components/form/validations.d.ts.map +1 -1
- package/dist/src/components/form/validations.js +39 -24
- package/dist/src/components/form/validations.js.map +1 -1
- package/dist/src/components/modals/ApproveDeviceModal/ApproveDeviceModal.d.ts.map +1 -1
- package/dist/src/components/modals/ApproveDeviceModal/ApproveDeviceModal.js +2 -5
- package/dist/src/components/modals/ApproveDeviceModal/ApproveDeviceModal.js.map +1 -1
- package/dist/src/components/modals/EditLabelsModal/EditLabelsForm.d.ts +2 -1
- package/dist/src/components/modals/EditLabelsModal/EditLabelsForm.d.ts.map +1 -1
- package/dist/src/components/modals/EditLabelsModal/EditLabelsForm.js +4 -4
- package/dist/src/components/modals/EditLabelsModal/EditLabelsForm.js.map +1 -1
- package/dist/src/components/modals/massModals/MassApproveDeviceModal/MassApproveDeviceModal.d.ts.map +1 -1
- package/dist/src/components/modals/massModals/MassApproveDeviceModal/MassApproveDeviceModal.js +2 -3
- package/dist/src/components/modals/massModals/MassApproveDeviceModal/MassApproveDeviceModal.js.map +1 -1
- package/dist/src/components/modals/massModals/MassDeleteRepositoryModal/MassDeleteRepositoryModal.d.ts +1 -1
- package/dist/src/components/modals/massModals/MassDeleteRepositoryModal/MassDeleteRepositoryModal.d.ts.map +1 -1
- package/dist/src/components/modals/massModals/MassDeleteRepositoryModal/MassDeleteRepositoryModal.js +6 -5
- package/dist/src/components/modals/massModals/MassDeleteRepositoryModal/MassDeleteRepositoryModal.js.map +1 -1
- package/dist/src/constants.d.ts +2 -1
- package/dist/src/constants.d.ts.map +1 -1
- package/dist/src/constants.js +3 -1
- package/dist/src/constants.js.map +1 -1
- package/dist/src/hooks/useAccessReview.d.ts +4 -0
- package/dist/src/hooks/useAccessReview.d.ts.map +1 -0
- package/dist/src/hooks/useAccessReview.js +33 -0
- package/dist/src/hooks/useAccessReview.js.map +1 -0
- package/dist/src/hooks/useAppContext.d.ts +8 -7
- package/dist/src/hooks/useAppContext.d.ts.map +1 -1
- package/dist/src/hooks/useAppContext.js +2 -2
- package/dist/src/hooks/useAppContext.js.map +1 -1
- package/dist/src/hooks/useFetch.d.ts +4 -2
- package/dist/src/hooks/useFetch.d.ts.map +1 -1
- package/dist/src/hooks/useFetchPeriodically.d.ts +1 -1
- package/dist/src/hooks/useFetchPeriodically.d.ts.map +1 -1
- package/dist/src/hooks/useFetchPeriodically.js +4 -1
- package/dist/src/hooks/useFetchPeriodically.js.map +1 -1
- package/dist/src/hooks/useFleetImportAccessReview.d.ts +3 -0
- package/dist/src/hooks/useFleetImportAccessReview.d.ts.map +1 -0
- package/dist/src/hooks/useFleetImportAccessReview.js +12 -0
- package/dist/src/hooks/useFleetImportAccessReview.js.map +1 -0
- package/dist/src/hooks/useNavigate.d.ts +3 -3
- package/dist/src/hooks/useNavigate.d.ts.map +1 -1
- package/dist/src/hooks/useNavigate.js +3 -3
- package/dist/src/hooks/useNavigate.js.map +1 -1
- package/dist/src/hooks/usePendingEnrollmentRequestsCount.d.ts +2 -0
- package/dist/src/hooks/usePendingEnrollmentRequestsCount.d.ts.map +1 -0
- package/dist/src/hooks/usePendingEnrollmentRequestsCount.js +13 -0
- package/dist/src/hooks/usePendingEnrollmentRequestsCount.js.map +1 -0
- package/dist/src/hooks/useTablePagination.d.ts +10 -0
- package/dist/src/hooks/useTablePagination.d.ts.map +1 -0
- package/dist/src/hooks/useTablePagination.js +33 -0
- package/dist/src/hooks/useTablePagination.js.map +1 -0
- package/dist/src/hooks/useWebSocket.d.ts +2 -2
- package/dist/src/hooks/useWebSocket.d.ts.map +1 -1
- package/dist/src/hooks/useWebSocket.js.map +1 -1
- package/dist/src/links.d.ts +3 -0
- package/dist/src/links.d.ts.map +1 -0
- package/dist/src/links.js +6 -0
- package/dist/src/links.js.map +1 -0
- package/dist/src/types/rbac.d.ts +18 -0
- package/dist/src/types/rbac.d.ts.map +1 -0
- package/dist/src/types/rbac.js +23 -0
- package/dist/src/types/rbac.js.map +1 -0
- package/dist/src/utils/api.d.ts +3 -3
- package/dist/src/utils/api.d.ts.map +1 -1
- package/dist/src/utils/api.js.map +1 -1
- package/dist/src/utils/labels.d.ts +1 -1
- package/dist/src/utils/labels.d.ts.map +1 -1
- package/dist/src/utils/labels.js +4 -8
- package/dist/src/utils/labels.js.map +1 -1
- package/dist/src/utils/query.d.ts +15 -0
- package/dist/src/utils/query.d.ts.map +1 -0
- package/dist/src/utils/query.js +64 -0
- package/dist/src/utils/query.js.map +1 -0
- package/dist/src/utils/search.d.ts +1 -0
- package/dist/src/utils/search.d.ts.map +1 -1
- package/dist/src/utils/search.js +7 -7
- package/dist/src/utils/search.js.map +1 -1
- package/dist/src/utils/status/devices.d.ts +2 -1
- package/dist/src/utils/status/devices.d.ts.map +1 -1
- package/dist/src/utils/status/devices.js +1 -0
- package/dist/src/utils/status/devices.js.map +1 -1
- package/package.json +10 -10
- package/src/components/DetailsPage/Tables/ApplicationsTable.css +7 -0
- package/src/components/DetailsPage/Tables/ApplicationsTable.tsx +150 -13
- package/src/components/Device/AddDeviceModal/AddDeviceModal.tsx +31 -132
- package/src/components/Device/DeviceDetails/DeviceApplications.tsx +102 -0
- package/src/components/Device/DeviceDetails/DeviceDetailsPage.tsx +33 -16
- package/src/components/Device/DeviceDetails/DeviceDetailsTab.tsx +8 -38
- package/src/components/Device/DeviceDetails/TerminalTab.tsx +21 -4
- package/src/components/Device/DevicesPage/DeviceFilterSelect.tsx +13 -34
- package/src/components/Device/DevicesPage/DeviceTableRow.tsx +21 -9
- package/src/components/Device/DevicesPage/DeviceTableToolbar.tsx +13 -20
- package/src/components/Device/DevicesPage/DeviceToolbarFilters.tsx +128 -48
- package/src/components/Device/DevicesPage/DevicesPage.tsx +86 -66
- package/src/components/Device/DevicesPage/types.ts +1 -13
- package/src/components/Device/DevicesPage/useDeviceBackendFilters.ts +14 -3
- package/src/components/Device/DevicesPage/useDevices.ts +49 -57
- package/src/components/Device/EditDeviceWizard/EditDeviceWizard.tsx +24 -4
- package/src/components/Device/EditDeviceWizard/deviceSpecUtils.ts +156 -47
- package/src/components/Device/EditDeviceWizard/steps/{ApplicationsForm.tsx → ApplicationTemplates.tsx} +89 -53
- package/src/components/Device/EditDeviceWizard/steps/ConfigInlineTemplateForm.tsx +22 -26
- package/src/components/Device/EditDeviceWizard/steps/ConfigWithRepositoryTemplateForm.tsx +17 -12
- package/src/components/Device/EditDeviceWizard/steps/{ConfigTemplateForm.tsx → ConfigurationTemplates.tsx} +110 -52
- package/src/components/Device/EditDeviceWizard/steps/DeviceTemplateStep.tsx +108 -11
- package/src/components/Device/EditDeviceWizard/steps/ReviewTrackedSystemdServices.tsx +19 -0
- package/src/components/Device/EditDeviceWizard/steps/SystemdUnitsForm.tsx +75 -0
- package/src/components/Device/EditDeviceWizard/types.ts +3 -0
- package/src/components/Device/EditDeviceWizard/utils.ts +14 -4
- package/src/components/Device/{MatchPatternsModal/MatchPatternsModal.tsx → SystemdUnitsModal/SystemdUnitsModal.tsx} +36 -19
- package/src/components/Device/SystemdUnitsModal/TrackSystemdUnitsForm.tsx +114 -0
- package/src/components/EnrollmentRequest/EnrollmentRequestDetails/EnrollmentRequestDetails.tsx +28 -9
- package/src/components/EnrollmentRequest/EnrollmentRequestList.tsx +167 -0
- package/src/components/EnrollmentRequest/EnrollmentRequestTableRow.tsx +28 -17
- package/src/components/{Device/DevicesPage → EnrollmentRequest}/EnrollmentRequestTableToolbar.tsx +3 -2
- package/src/components/EnrollmentRequest/PendingEnrollmentRequestsBadge.css +10 -0
- package/src/components/EnrollmentRequest/PendingEnrollmentRequestsBadge.tsx +27 -0
- package/src/components/EnrollmentRequest/useEnrollmentRequests.ts +63 -0
- package/src/components/Fleet/CreateFleet/CreateFleetWizard.tsx +28 -2
- package/src/components/Fleet/CreateFleet/steps/DeviceLabelSelector.tsx +2 -5
- package/src/components/Fleet/CreateFleet/steps/ReviewStep.tsx +7 -0
- package/src/components/Fleet/CreateFleet/utils.ts +101 -49
- package/src/components/Fleet/FleetDetails/FleetDetails.tsx +57 -36
- package/src/components/Fleet/FleetDetails/FleetDevices.tsx +12 -18
- package/src/components/Fleet/FleetResourceSyncs.tsx +53 -41
- package/src/components/Fleet/FleetRow.tsx +28 -16
- package/src/components/Fleet/FleetsPage.tsx +70 -49
- package/src/components/Fleet/ImportFleetWizard/ImportFleetWizard.tsx +16 -3
- package/src/components/Fleet/ImportFleetWizard/steps/RepositoryStep.tsx +25 -19
- package/src/components/Fleet/useFleets.ts +104 -0
- package/src/components/OverviewPage/Cards/Status/StatusCard.tsx +6 -18
- package/src/components/OverviewPage/Cards/Status/StatusCardFilters.tsx +0 -7
- package/src/components/OverviewPage/Cards/ToDo/ToDoCard.tsx +6 -10
- package/src/components/OverviewPage/Overview.tsx +20 -8
- package/src/components/Repository/CreateRepository/CreateRepository.tsx +25 -9
- package/src/components/Repository/CreateRepository/CreateRepositoryForm.tsx +5 -2
- package/src/components/Repository/CreateRepository/utils.ts +23 -7
- package/src/components/Repository/RepositoryDetails/DeleteRepositoryModal.tsx +5 -3
- package/src/components/Repository/RepositoryDetails/RepositoryDetails.tsx +32 -10
- package/src/components/Repository/RepositoryList.tsx +113 -70
- package/src/components/Repository/useRepositories.ts +59 -0
- package/src/components/ResourceSync/RepositoryResourceSyncList.tsx +42 -40
- package/src/components/Table/Table.tsx +22 -9
- package/src/components/Table/TablePagination.tsx +74 -0
- package/src/components/Terminal/Terminal.tsx +1 -0
- package/src/components/charts/DonutChart.css +5 -0
- package/src/components/charts/DonutChart.tsx +1 -1
- package/src/components/common/AccessDenied.tsx +17 -0
- package/src/components/common/ButtonWithPermissions.tsx +14 -0
- package/src/components/common/LearnMoreLink.tsx +26 -0
- package/src/components/common/PageWithPermissions.tsx +19 -0
- package/src/components/form/FilterSelect.tsx +2 -4
- package/src/components/form/FlightCtlForm.css +3 -0
- package/src/components/form/FlightCtlForm.tsx +3 -1
- package/src/components/form/FormSelect.tsx +22 -2
- package/src/components/form/LabelsField.tsx +17 -13
- package/src/components/form/validations.ts +53 -25
- package/src/components/modals/ApproveDeviceModal/ApproveDeviceModal.tsx +2 -5
- package/src/components/modals/EditLabelsModal/EditLabelsForm.tsx +9 -4
- package/src/components/modals/massModals/MassApproveDeviceModal/MassApproveDeviceModal.tsx +2 -4
- package/src/components/modals/massModals/MassDeleteRepositoryModal/MassDeleteRepositoryModal.tsx +10 -5
- package/src/constants.ts +2 -1
- package/src/hooks/useAccessReview.ts +33 -0
- package/src/hooks/useAppContext.tsx +6 -5
- package/src/hooks/useFetchPeriodically.ts +4 -0
- package/src/hooks/useFleetImportAccessReview.ts +8 -0
- package/src/hooks/useNavigate.tsx +3 -3
- package/src/hooks/usePendingEnrollmentRequestsCount.ts +12 -0
- package/src/hooks/useTablePagination.tsx +44 -0
- package/src/hooks/useWebSocket.ts +4 -4
- package/src/links.ts +5 -0
- package/src/types/rbac.ts +18 -0
- package/src/utils/api.ts +3 -3
- package/src/utils/labels.ts +3 -7
- package/src/utils/query.ts +70 -0
- package/src/utils/search.ts +1 -1
- package/src/utils/status/devices.ts +1 -0
- package/dist/src/components/DetailsPage/Tables/SystemdDetailsTable.d.ts +0 -12
- package/dist/src/components/DetailsPage/Tables/SystemdDetailsTable.d.ts.map +0 -1
- package/dist/src/components/DetailsPage/Tables/SystemdDetailsTable.js +0 -40
- package/dist/src/components/DetailsPage/Tables/SystemdDetailsTable.js.map +0 -1
- package/dist/src/components/Device/DeviceDetails/SystemdTable.d.ts +0 -10
- package/dist/src/components/Device/DeviceDetails/SystemdTable.d.ts.map +0 -1
- package/dist/src/components/Device/DeviceDetails/SystemdTable.js +0 -38
- package/dist/src/components/Device/DeviceDetails/SystemdTable.js.map +0 -1
- package/dist/src/components/Device/DevicesPage/EnrollmentRequestList.d.ts +0 -13
- package/dist/src/components/Device/DevicesPage/EnrollmentRequestList.d.ts.map +0 -1
- package/dist/src/components/Device/DevicesPage/EnrollmentRequestList.js +0 -104
- package/dist/src/components/Device/DevicesPage/EnrollmentRequestList.js.map +0 -1
- package/dist/src/components/Device/DevicesPage/EnrollmentRequestTableToolbar.d.ts.map +0 -1
- package/dist/src/components/Device/DevicesPage/EnrollmentRequestTableToolbar.js.map +0 -1
- package/dist/src/components/Device/DevicesPage/useDeviceFilters.d.ts +0 -8
- package/dist/src/components/Device/DevicesPage/useDeviceFilters.d.ts.map +0 -1
- package/dist/src/components/Device/DevicesPage/useDeviceFilters.js +0 -16
- package/dist/src/components/Device/DevicesPage/useDeviceFilters.js.map +0 -1
- package/dist/src/components/Device/EditDeviceWizard/steps/ApplicationsForm.d.ts +0 -5
- package/dist/src/components/Device/EditDeviceWizard/steps/ApplicationsForm.d.ts.map +0 -1
- package/dist/src/components/Device/EditDeviceWizard/steps/ApplicationsForm.js.map +0 -1
- package/dist/src/components/Device/EditDeviceWizard/steps/ConfigTemplateForm.d.ts +0 -4
- package/dist/src/components/Device/EditDeviceWizard/steps/ConfigTemplateForm.d.ts.map +0 -1
- package/dist/src/components/Device/EditDeviceWizard/steps/ConfigTemplateForm.js.map +0 -1
- package/dist/src/components/Device/MatchPatternsModal/MatchPatternsForm.d.ts +0 -11
- package/dist/src/components/Device/MatchPatternsModal/MatchPatternsForm.d.ts.map +0 -1
- package/dist/src/components/Device/MatchPatternsModal/MatchPatternsForm.js +0 -39
- package/dist/src/components/Device/MatchPatternsModal/MatchPatternsForm.js.map +0 -1
- package/dist/src/components/Device/MatchPatternsModal/MatchPatternsModal.d.ts.map +0 -1
- package/dist/src/components/Device/MatchPatternsModal/MatchPatternsModal.js.map +0 -1
- package/dist/src/components/common/HelperTextItems.d.ts +0 -3
- package/dist/src/components/common/HelperTextItems.d.ts.map +0 -1
- package/dist/src/components/common/HelperTextItems.js +0 -17
- package/dist/src/components/common/HelperTextItems.js.map +0 -1
- package/dist/src/hooks/useTableSort.d.ts +0 -7
- package/dist/src/hooks/useTableSort.d.ts.map +0 -1
- package/dist/src/hooks/useTableSort.js +0 -38
- package/dist/src/hooks/useTableSort.js.map +0 -1
- package/dist/src/utils/sort/device.d.ts +0 -4
- package/dist/src/utils/sort/device.d.ts.map +0 -1
- package/dist/src/utils/sort/device.js +0 -49
- package/dist/src/utils/sort/device.js.map +0 -1
- package/dist/src/utils/sort/fleet.d.ts +0 -4
- package/dist/src/utils/sort/fleet.d.ts.map +0 -1
- package/dist/src/utils/sort/fleet.js +0 -18
- package/dist/src/utils/sort/fleet.js.map +0 -1
- package/dist/src/utils/sort/generic.d.ts +0 -8
- package/dist/src/utils/sort/generic.d.ts.map +0 -1
- package/dist/src/utils/sort/generic.js +0 -37
- package/dist/src/utils/sort/generic.js.map +0 -1
- package/dist/src/utils/sort/repository.d.ts +0 -6
- package/dist/src/utils/sort/repository.d.ts.map +0 -1
- package/dist/src/utils/sort/repository.js +0 -28
- package/dist/src/utils/sort/repository.js.map +0 -1
- package/dist/src/utils/sort/resourceSync.d.ts +0 -6
- package/dist/src/utils/sort/resourceSync.d.ts.map +0 -1
- package/dist/src/utils/sort/resourceSync.js +0 -29
- package/dist/src/utils/sort/resourceSync.js.map +0 -1
- package/src/components/DetailsPage/Tables/SystemdDetailsTable.tsx +0 -63
- package/src/components/Device/DeviceDetails/SystemdTable.tsx +0 -65
- package/src/components/Device/DevicesPage/EnrollmentRequestList.tsx +0 -183
- package/src/components/Device/DevicesPage/useDeviceFilters.ts +0 -15
- package/src/components/Device/MatchPatternsModal/MatchPatternsForm.tsx +0 -92
- package/src/components/common/HelperTextItems.tsx +0 -25
- package/src/hooks/useTableSort.ts +0 -42
- package/src/utils/sort/device.ts +0 -60
- package/src/utils/sort/fleet.ts +0 -16
- package/src/utils/sort/generic.ts +0 -37
- package/src/utils/sort/repository.ts +0 -28
- package/src/utils/sort/resourceSync.ts +0 -30
|
@@ -1,38 +1,28 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import {
|
|
3
|
-
Button,
|
|
4
|
-
EmptyStateActions,
|
|
5
|
-
EmptyStateBody,
|
|
6
|
-
EmptyStateFooter,
|
|
7
|
-
PageSection,
|
|
8
|
-
PageSectionVariants,
|
|
9
|
-
ToolbarItem,
|
|
10
|
-
} from '@patternfly/react-core';
|
|
2
|
+
import { Button, EmptyStateActions, EmptyStateBody, EmptyStateFooter, ToolbarItem } from '@patternfly/react-core';
|
|
11
3
|
import { Tbody } from '@patternfly/react-table';
|
|
12
4
|
import { MicrochipIcon } from '@patternfly/react-icons/dist/js/icons/microchip-icon';
|
|
13
5
|
import { Trans } from 'react-i18next';
|
|
14
6
|
import { TFunction } from 'i18next';
|
|
15
7
|
|
|
16
8
|
import { useFetch } from '../../../hooks/useFetch';
|
|
17
|
-
import { Device
|
|
9
|
+
import { Device } from '@flightctl/types';
|
|
18
10
|
|
|
19
11
|
import ListPage from '../../ListPage/ListPage';
|
|
20
12
|
import ListPageBody from '../../ListPage/ListPageBody';
|
|
21
13
|
import { useDeleteListAction } from '../../ListPage/ListPageActions';
|
|
14
|
+
import TablePagination from '../../Table/TablePagination';
|
|
22
15
|
import AddDeviceModal from '../AddDeviceModal/AddDeviceModal';
|
|
23
|
-
import
|
|
24
|
-
import { sortDeviceStatus, sortDevicesByFleet } from '../../../utils/sort/device';
|
|
25
|
-
import Table, { TableColumn } from '../../Table/Table';
|
|
16
|
+
import Table, { ApiSortTableColumn } from '../../Table/Table';
|
|
26
17
|
import DeviceTableToolbar from './DeviceTableToolbar';
|
|
27
|
-
import { useDeviceFilters } from './useDeviceFilters';
|
|
28
18
|
import DeviceTableRow from './DeviceTableRow';
|
|
29
19
|
import { FlightCtlLabel } from '../../../types/extraTypes';
|
|
30
20
|
import MassDeleteDeviceModal from '../../modals/massModals/MassDeleteDeviceModal/MassDeleteDeviceModal';
|
|
31
21
|
import ResourceListEmptyState from '../../common/ResourceListEmptyState';
|
|
32
|
-
import { useTableSort } from '../../../hooks/useTableSort';
|
|
33
22
|
import { useTableSelect } from '../../../hooks/useTableSelect';
|
|
34
23
|
import { useTranslation } from '../../../hooks/useTranslation';
|
|
35
24
|
import { Link, ROUTE } from '../../../hooks/useNavigate';
|
|
25
|
+
import { PaginationDetails, useTablePagination } from '../../../hooks/useTablePagination';
|
|
36
26
|
import { useDevices } from './useDevices';
|
|
37
27
|
import { useDeviceBackendFilters } from './useDeviceBackendFilters';
|
|
38
28
|
import {
|
|
@@ -40,9 +30,11 @@ import {
|
|
|
40
30
|
getDeviceStatusHelperText,
|
|
41
31
|
getUpdateStatusHelperText,
|
|
42
32
|
} from '../../Status/utils';
|
|
33
|
+
import EnrollmentRequestList from '../../EnrollmentRequest/EnrollmentRequestList';
|
|
43
34
|
import { FilterStatusMap } from './types';
|
|
44
|
-
import
|
|
45
|
-
import
|
|
35
|
+
import PageWithPermissions from '../../common/PageWithPermissions';
|
|
36
|
+
import { RESOURCE, VERB } from '../../../types/rbac';
|
|
37
|
+
import { useAccessReview } from '../../../hooks/useAccessReview';
|
|
46
38
|
|
|
47
39
|
type DeviceEmptyStateProps = {
|
|
48
40
|
onAddDevice: VoidFunction;
|
|
@@ -50,13 +42,18 @@ type DeviceEmptyStateProps = {
|
|
|
50
42
|
|
|
51
43
|
const DeviceEmptyState: React.FC<DeviceEmptyStateProps> = ({ onAddDevice }) => {
|
|
52
44
|
const { t } = useTranslation();
|
|
45
|
+
const [canCreateFleet] = useAccessReview(RESOURCE.FLEET, VERB.CREATE);
|
|
53
46
|
return (
|
|
54
47
|
<ResourceListEmptyState icon={MicrochipIcon} titleText={t('No devices here!')}>
|
|
55
48
|
<EmptyStateBody>
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
49
|
+
{canCreateFleet ? (
|
|
50
|
+
<Trans t={t}>
|
|
51
|
+
You can add devices and label them to match fleets, or you can{' '}
|
|
52
|
+
<Link to={ROUTE.FLEET_CREATE}>start with a fleet</Link> and add devices into it.
|
|
53
|
+
</Trans>
|
|
54
|
+
) : (
|
|
55
|
+
t('You can add devices and label them to match fleets')
|
|
56
|
+
)}
|
|
60
57
|
</EmptyStateBody>
|
|
61
58
|
<EmptyStateFooter>
|
|
62
59
|
<EmptyStateActions>
|
|
@@ -67,38 +64,30 @@ const DeviceEmptyState: React.FC<DeviceEmptyStateProps> = ({ onAddDevice }) => {
|
|
|
67
64
|
);
|
|
68
65
|
};
|
|
69
66
|
|
|
70
|
-
const getDeviceColumns = (t: TFunction):
|
|
67
|
+
const getDeviceColumns = (t: TFunction): ApiSortTableColumn[] => [
|
|
71
68
|
{
|
|
72
69
|
name: t('Alias'),
|
|
73
|
-
onSort: sortByAlias,
|
|
74
70
|
},
|
|
75
71
|
{
|
|
76
72
|
name: t('Name'),
|
|
77
|
-
onSort: sortByName,
|
|
78
73
|
},
|
|
79
74
|
{
|
|
80
75
|
name: t('Fleet'),
|
|
81
|
-
onSort: sortDevicesByFleet,
|
|
82
76
|
},
|
|
83
77
|
{
|
|
84
78
|
name: t('Application status'),
|
|
85
79
|
helperText: getApplicationStatusHelperText(t),
|
|
86
|
-
onSort: (devices: Array<Device>) => sortDeviceStatus(devices, 'ApplicationStatus'),
|
|
87
80
|
},
|
|
88
81
|
{
|
|
89
82
|
name: t('Device status'),
|
|
90
83
|
helperText: getDeviceStatusHelperText(t),
|
|
91
|
-
onSort: (devices: Array<Device>) => sortDeviceStatus(devices, 'DeviceStatus'),
|
|
92
|
-
defaultSort: true,
|
|
93
84
|
},
|
|
94
85
|
{
|
|
95
86
|
name: t('Update status'),
|
|
96
87
|
helperText: getUpdateStatusHelperText(t),
|
|
97
|
-
onSort: (devices: Array<Device>) => sortDeviceStatus(devices, 'SystemUpdateStatus'),
|
|
98
88
|
},
|
|
99
89
|
{
|
|
100
90
|
name: t('Last seen'),
|
|
101
|
-
onSort: sortByLastSeenDate,
|
|
102
91
|
},
|
|
103
92
|
];
|
|
104
93
|
|
|
@@ -108,39 +97,39 @@ interface DeviceTableProps {
|
|
|
108
97
|
ownerFleets: string[];
|
|
109
98
|
activeStatuses: FilterStatusMap;
|
|
110
99
|
hasFiltersEnabled: boolean;
|
|
100
|
+
nameOrAlias: string | undefined;
|
|
101
|
+
setNameOrAlias: (text: string) => void;
|
|
111
102
|
setOwnerFleets: (ownerFleets: string[]) => void;
|
|
112
103
|
setActiveStatuses: (activeStatuses: FilterStatusMap) => void;
|
|
113
|
-
allLabels: FlightCtlLabel[];
|
|
114
104
|
selectedLabels: FlightCtlLabel[];
|
|
115
105
|
setSelectedLabels: (labels: FlightCtlLabel[]) => void;
|
|
116
|
-
fleets: Fleet[];
|
|
117
106
|
isFilterUpdating: boolean;
|
|
107
|
+
deviceColumns: ApiSortTableColumn[];
|
|
108
|
+
pagination: Pick<PaginationDetails, 'currentPage' | 'setCurrentPage' | 'itemCount'>;
|
|
109
|
+
// getSortParams: (columnIndex: number) => ThProps['sort'];
|
|
118
110
|
}
|
|
119
111
|
|
|
120
112
|
export const DeviceTable = ({
|
|
121
113
|
devices,
|
|
122
114
|
refetch,
|
|
115
|
+
nameOrAlias,
|
|
116
|
+
setNameOrAlias,
|
|
123
117
|
ownerFleets,
|
|
124
118
|
setOwnerFleets,
|
|
125
119
|
activeStatuses,
|
|
126
120
|
setActiveStatuses,
|
|
127
|
-
allLabels,
|
|
128
121
|
selectedLabels,
|
|
129
122
|
setSelectedLabels,
|
|
130
123
|
hasFiltersEnabled,
|
|
131
|
-
fleets,
|
|
132
124
|
isFilterUpdating,
|
|
125
|
+
deviceColumns,
|
|
126
|
+
pagination,
|
|
133
127
|
}: DeviceTableProps) => {
|
|
134
128
|
const { t } = useTranslation();
|
|
135
129
|
const [addDeviceModal, setAddDeviceModal] = React.useState(false);
|
|
136
130
|
const [isMassDeleteModalOpen, setIsMassDeleteModalOpen] = React.useState(false);
|
|
137
131
|
const { remove } = useFetch();
|
|
138
132
|
|
|
139
|
-
const deviceColumns = React.useMemo(() => getDeviceColumns(t), [t]);
|
|
140
|
-
|
|
141
|
-
const { filteredData, hasFiltersEnabled: hasUIFiltersEnabled, ...rest } = useDeviceFilters(devices);
|
|
142
|
-
const { getSortParams, sortedData } = useTableSort(filteredData, deviceColumns);
|
|
143
|
-
|
|
144
133
|
const { onRowSelect, hasSelectedRows, isAllSelected, isRowSelected, setAllSelected } = useTableSelect();
|
|
145
134
|
|
|
146
135
|
const { deleteAction: deleteDeviceAction, deleteModal: deleteDeviceModal } = useDeleteListAction({
|
|
@@ -151,40 +140,44 @@ export const DeviceTable = ({
|
|
|
151
140
|
},
|
|
152
141
|
});
|
|
153
142
|
|
|
143
|
+
const [canDelete] = useAccessReview(RESOURCE.DEVICE, VERB.DELETE);
|
|
144
|
+
const [canEdit] = useAccessReview(RESOURCE.DEVICE, VERB.PATCH);
|
|
145
|
+
|
|
154
146
|
return (
|
|
155
147
|
<>
|
|
156
148
|
<DeviceTableToolbar
|
|
157
|
-
{
|
|
149
|
+
nameOrAlias={nameOrAlias}
|
|
150
|
+
setNameOrAlias={setNameOrAlias}
|
|
158
151
|
ownerFleets={ownerFleets}
|
|
159
152
|
setOwnerFleets={setOwnerFleets}
|
|
160
153
|
activeStatuses={activeStatuses}
|
|
161
154
|
setActiveStatuses={setActiveStatuses}
|
|
162
|
-
allLabels={allLabels}
|
|
163
155
|
selectedLabels={selectedLabels}
|
|
164
156
|
setSelectedLabels={setSelectedLabels}
|
|
165
|
-
fleets={fleets}
|
|
166
157
|
isFilterUpdating={isFilterUpdating}
|
|
167
158
|
>
|
|
168
159
|
<ToolbarItem>
|
|
169
160
|
<Button onClick={() => setAddDeviceModal(true)}>{t('Add devices')}</Button>
|
|
170
161
|
</ToolbarItem>
|
|
171
|
-
|
|
172
|
-
<
|
|
173
|
-
{
|
|
174
|
-
|
|
175
|
-
|
|
162
|
+
{canDelete && (
|
|
163
|
+
<ToolbarItem>
|
|
164
|
+
<Button isDisabled={!hasSelectedRows} onClick={() => setIsMassDeleteModalOpen(true)} variant="secondary">
|
|
165
|
+
{t('Delete devices')}
|
|
166
|
+
</Button>
|
|
167
|
+
</ToolbarItem>
|
|
168
|
+
)}
|
|
176
169
|
</DeviceTableToolbar>
|
|
177
170
|
<Table
|
|
178
171
|
aria-label={t('Devices table')}
|
|
172
|
+
loading={isFilterUpdating}
|
|
179
173
|
columns={deviceColumns}
|
|
180
|
-
emptyFilters={
|
|
174
|
+
emptyFilters={!hasFiltersEnabled}
|
|
181
175
|
emptyData={devices.length === 0}
|
|
182
|
-
getSortParams={getSortParams}
|
|
183
176
|
isAllSelected={isAllSelected}
|
|
184
177
|
onSelectAll={setAllSelected}
|
|
185
178
|
>
|
|
186
179
|
<Tbody>
|
|
187
|
-
{
|
|
180
|
+
{devices.map((device, index) => (
|
|
188
181
|
<DeviceTableRow
|
|
189
182
|
key={device.metadata.name || ''}
|
|
190
183
|
device={device}
|
|
@@ -192,19 +185,20 @@ export const DeviceTable = ({
|
|
|
192
185
|
onRowSelect={onRowSelect}
|
|
193
186
|
isRowSelected={isRowSelected}
|
|
194
187
|
rowIndex={index}
|
|
188
|
+
canDelete={canDelete}
|
|
189
|
+
canEdit={canEdit}
|
|
195
190
|
/>
|
|
196
191
|
))}
|
|
197
192
|
</Tbody>
|
|
198
193
|
</Table>
|
|
199
|
-
{
|
|
200
|
-
|
|
201
|
-
)}
|
|
194
|
+
<TablePagination isUpdating={isFilterUpdating} pagination={pagination} />
|
|
195
|
+
{!hasFiltersEnabled && devices.length === 0 && <DeviceEmptyState onAddDevice={() => setAddDeviceModal(true)} />}
|
|
202
196
|
{deleteDeviceModal}
|
|
203
197
|
{addDeviceModal && <AddDeviceModal onClose={() => setAddDeviceModal(false)} />}
|
|
204
198
|
{isMassDeleteModalOpen && (
|
|
205
199
|
<MassDeleteDeviceModal
|
|
206
200
|
onClose={() => setIsMassDeleteModalOpen(false)}
|
|
207
|
-
resources={
|
|
201
|
+
resources={devices.filter(isRowSelected)}
|
|
208
202
|
onDeleteSuccess={() => {
|
|
209
203
|
setIsMassDeleteModalOpen(false);
|
|
210
204
|
refetch();
|
|
@@ -215,9 +209,13 @@ export const DeviceTable = ({
|
|
|
215
209
|
);
|
|
216
210
|
};
|
|
217
211
|
|
|
218
|
-
const DevicesPage = () => {
|
|
212
|
+
const DevicesPage = ({ canListER }: { canListER: boolean }) => {
|
|
219
213
|
const { t } = useTranslation();
|
|
214
|
+
const deviceColumns = React.useMemo(() => getDeviceColumns(t), [t]);
|
|
215
|
+
|
|
220
216
|
const {
|
|
217
|
+
nameOrAlias,
|
|
218
|
+
setNameOrAlias,
|
|
221
219
|
ownerFleets,
|
|
222
220
|
activeStatuses,
|
|
223
221
|
hasFiltersEnabled,
|
|
@@ -226,26 +224,36 @@ const DevicesPage = () => {
|
|
|
226
224
|
selectedLabels,
|
|
227
225
|
setSelectedLabels,
|
|
228
226
|
} = useDeviceBackendFilters();
|
|
229
|
-
const
|
|
227
|
+
const { currentPage, setCurrentPage, onPageFetched, nextContinue, itemCount } = useTablePagination();
|
|
228
|
+
const [data, loading, error, updating, refetch] = useDevices({
|
|
229
|
+
nameOrAlias,
|
|
230
230
|
ownerFleets,
|
|
231
231
|
activeStatuses,
|
|
232
232
|
labels: selectedLabels,
|
|
233
|
+
nextContinue,
|
|
234
|
+
onPageFetched,
|
|
233
235
|
});
|
|
234
236
|
|
|
235
|
-
const
|
|
236
|
-
|
|
237
|
-
|
|
237
|
+
const pagination = React.useMemo(
|
|
238
|
+
() => ({
|
|
239
|
+
currentPage,
|
|
240
|
+
setCurrentPage,
|
|
241
|
+
itemCount,
|
|
242
|
+
}),
|
|
243
|
+
[currentPage, setCurrentPage, itemCount],
|
|
244
|
+
);
|
|
238
245
|
|
|
239
246
|
return (
|
|
240
|
-
|
|
241
|
-
<EnrollmentRequestList refetchDevices={refetch} />
|
|
247
|
+
<>
|
|
248
|
+
{canListER && <EnrollmentRequestList refetchDevices={refetch} />}
|
|
242
249
|
|
|
243
250
|
<ListPage title={t('Devices')}>
|
|
244
|
-
<ListPageBody error={error
|
|
251
|
+
<ListPageBody error={error} loading={loading}>
|
|
245
252
|
<DeviceTable
|
|
246
253
|
devices={data}
|
|
247
|
-
allLabels={allLabels}
|
|
248
254
|
refetch={refetch}
|
|
255
|
+
nameOrAlias={nameOrAlias}
|
|
256
|
+
setNameOrAlias={setNameOrAlias}
|
|
249
257
|
hasFiltersEnabled={hasFiltersEnabled || updating}
|
|
250
258
|
ownerFleets={ownerFleets}
|
|
251
259
|
activeStatuses={activeStatuses}
|
|
@@ -253,13 +261,25 @@ const DevicesPage = () => {
|
|
|
253
261
|
setActiveStatuses={setActiveStatuses}
|
|
254
262
|
selectedLabels={selectedLabels}
|
|
255
263
|
setSelectedLabels={setSelectedLabels}
|
|
256
|
-
fleets={fleetsList?.items || []}
|
|
257
264
|
isFilterUpdating={updating}
|
|
265
|
+
deviceColumns={deviceColumns}
|
|
266
|
+
pagination={pagination}
|
|
258
267
|
/>
|
|
259
268
|
</ListPageBody>
|
|
260
269
|
</ListPage>
|
|
261
|
-
|
|
270
|
+
</>
|
|
271
|
+
);
|
|
272
|
+
};
|
|
273
|
+
|
|
274
|
+
const DevicesPageWithPermissions = () => {
|
|
275
|
+
const [canListDevice, deviceLoading] = useAccessReview(RESOURCE.DEVICE, VERB.LIST);
|
|
276
|
+
const [canListER, erLoading] = useAccessReview(RESOURCE.ENROLLMENT_REQUEST, VERB.LIST);
|
|
277
|
+
|
|
278
|
+
return (
|
|
279
|
+
<PageWithPermissions loading={deviceLoading || erLoading} allowed={canListDevice || canListER}>
|
|
280
|
+
{canListDevice ? <DevicesPage canListER={canListER} /> : <EnrollmentRequestList isStandalone />}
|
|
281
|
+
</PageWithPermissions>
|
|
262
282
|
);
|
|
263
283
|
};
|
|
264
284
|
|
|
265
|
-
export default
|
|
285
|
+
export default DevicesPageWithPermissions;
|
|
@@ -1,18 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { StatusItem } from '../../../utils/status/common';
|
|
1
|
+
import { FilterSearchParams } from '../../../utils/status/devices';
|
|
3
2
|
import { ApplicationsSummaryStatusType, DeviceSummaryStatusType, DeviceUpdatedStatusType } from '@flightctl/types';
|
|
4
3
|
|
|
5
|
-
type FilterOptionsProps<T extends DeviceSummaryStatus> = {
|
|
6
|
-
filter: string;
|
|
7
|
-
items: Array<StatusItem<T>>;
|
|
8
|
-
selectedFilters: Array<T>;
|
|
9
|
-
onClick: (value: string) => void;
|
|
10
|
-
};
|
|
11
|
-
|
|
12
|
-
export type FilterOptionsFC = <T extends DeviceSummaryStatus>(
|
|
13
|
-
props: FilterOptionsProps<T>,
|
|
14
|
-
) => JSX.Element | JSX.Element[];
|
|
15
|
-
|
|
16
4
|
export type FilterStatusMap = {
|
|
17
5
|
[FilterSearchParams.AppStatus]: ApplicationsSummaryStatusType[];
|
|
18
6
|
[FilterSearchParams.DeviceStatus]: DeviceSummaryStatusType[];
|
|
@@ -3,7 +3,6 @@ import { ApplicationsSummaryStatusType, DeviceSummaryStatusType, DeviceUpdatedSt
|
|
|
3
3
|
|
|
4
4
|
import { FilterSearchParams } from '../../../utils/status/devices';
|
|
5
5
|
import { useAppContext } from '../../../hooks/useAppContext';
|
|
6
|
-
import { EnrollmentRequestStatus } from '../../../utils/status/enrollmentRequest';
|
|
7
6
|
import { FilterStatusMap } from './types';
|
|
8
7
|
import { FlightCtlLabel } from '../../../types/extraTypes';
|
|
9
8
|
import { labelToString } from '../../../utils/labels';
|
|
@@ -11,7 +10,6 @@ import { labelToString } from '../../../utils/labels';
|
|
|
11
10
|
const validAppStatuses = Object.values(ApplicationsSummaryStatusType) as string[];
|
|
12
11
|
const validUpdatedStatuses = Object.values(DeviceUpdatedStatusType) as string[];
|
|
13
12
|
const validDeviceStatuses = Object.values(DeviceSummaryStatusType) as string[];
|
|
14
|
-
validDeviceStatuses.push(EnrollmentRequestStatus.Pending);
|
|
15
13
|
|
|
16
14
|
const getNewParams = (currentParams: URLSearchParams, newValues: { [key: string]: string[] }) => {
|
|
17
15
|
let newParams = [...currentParams.entries()];
|
|
@@ -30,6 +28,7 @@ export const useDeviceBackendFilters = () => {
|
|
|
30
28
|
const [searchParams, setSearchParams] = useSearchParams();
|
|
31
29
|
const paramsRef = React.useRef(searchParams);
|
|
32
30
|
const ownerFleets = searchParams.getAll(FilterSearchParams.Fleet) || undefined;
|
|
31
|
+
const nameOrAlias = searchParams.get(FilterSearchParams.NameOrAlias) || undefined;
|
|
33
32
|
|
|
34
33
|
const updateSearchParams = React.useCallback(
|
|
35
34
|
(params: [string, string][]) => {
|
|
@@ -104,10 +103,22 @@ export const useDeviceBackendFilters = () => {
|
|
|
104
103
|
[updateSearchParams],
|
|
105
104
|
);
|
|
106
105
|
|
|
106
|
+
const setNameOrAlias = React.useCallback(
|
|
107
|
+
(nameOrAlias: string) => {
|
|
108
|
+
updateSearchParams(getNewParams(paramsRef.current, { [FilterSearchParams.NameOrAlias]: [nameOrAlias] }));
|
|
109
|
+
},
|
|
110
|
+
[updateSearchParams],
|
|
111
|
+
);
|
|
112
|
+
|
|
107
113
|
const hasFiltersEnabled =
|
|
108
|
-
!!
|
|
114
|
+
!!nameOrAlias ||
|
|
115
|
+
!!selectedLabels.length ||
|
|
116
|
+
!!ownerFleets.length ||
|
|
117
|
+
Object.values(activeStatuses).some((s) => !!s.length);
|
|
109
118
|
|
|
110
119
|
return {
|
|
120
|
+
nameOrAlias,
|
|
121
|
+
setNameOrAlias,
|
|
111
122
|
activeStatuses,
|
|
112
123
|
setActiveStatuses,
|
|
113
124
|
ownerFleets,
|
|
@@ -1,53 +1,64 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
1
|
import { useDebounce } from 'use-debounce';
|
|
3
2
|
|
|
4
3
|
import { Device, DeviceList, DevicesSummary } from '@flightctl/types';
|
|
5
4
|
import { FilterSearchParams } from '../../../utils/status/devices';
|
|
5
|
+
import * as queryUtils from '../../../utils/query';
|
|
6
6
|
import { useFetchPeriodically } from '../../../hooks/useFetchPeriodically';
|
|
7
7
|
import { FlightCtlLabel } from '../../../types/extraTypes';
|
|
8
8
|
import { FilterStatusMap } from './types';
|
|
9
|
-
|
|
10
|
-
import { fromAPILabel } from '../../../utils/labels';
|
|
11
|
-
|
|
12
|
-
const setLabelParams = (params: URLSearchParams, labels?: FlightCtlLabel[]) => {
|
|
13
|
-
if (labels?.length) {
|
|
14
|
-
const labelSelector = labels.reduce((acc, curr) => {
|
|
15
|
-
if (!acc) {
|
|
16
|
-
acc = `${curr.key}=${curr.value || ''}`;
|
|
17
|
-
} else {
|
|
18
|
-
acc += `,${curr.key}=${curr.value || ''}`;
|
|
19
|
-
}
|
|
20
|
-
return acc;
|
|
21
|
-
}, '');
|
|
22
|
-
params.append('labelSelector', labelSelector);
|
|
23
|
-
}
|
|
24
|
-
};
|
|
9
|
+
import { PAGE_SIZE } from '../../../constants';
|
|
25
10
|
|
|
26
11
|
type DevicesEndpointArgs = {
|
|
12
|
+
nameOrAlias?: string;
|
|
27
13
|
ownerFleets?: string[];
|
|
28
14
|
activeStatuses?: FilterStatusMap;
|
|
29
15
|
labels?: FlightCtlLabel[];
|
|
30
16
|
summaryOnly?: boolean;
|
|
17
|
+
nextContinue?: string;
|
|
31
18
|
};
|
|
32
19
|
|
|
33
|
-
const getDevicesEndpoint = ({
|
|
20
|
+
const getDevicesEndpoint = ({
|
|
21
|
+
nameOrAlias,
|
|
22
|
+
ownerFleets,
|
|
23
|
+
activeStatuses,
|
|
24
|
+
labels,
|
|
25
|
+
nextContinue,
|
|
26
|
+
summaryOnly,
|
|
27
|
+
}: DevicesEndpointArgs) => {
|
|
34
28
|
const filterByAppStatus = activeStatuses?.[FilterSearchParams.AppStatus];
|
|
35
29
|
const filterByDevStatus = activeStatuses?.[FilterSearchParams.DeviceStatus];
|
|
36
30
|
const filterByUpdateStatus = activeStatuses?.[FilterSearchParams.UpdatedStatus];
|
|
37
31
|
|
|
38
|
-
const
|
|
32
|
+
const fieldSelectors: string[] = [];
|
|
33
|
+
queryUtils.addQueryConditions(fieldSelectors, 'status.applicationsSummary.status', filterByAppStatus);
|
|
34
|
+
queryUtils.addQueryConditions(fieldSelectors, 'status.summary.status', filterByDevStatus);
|
|
35
|
+
queryUtils.addQueryConditions(fieldSelectors, 'status.updated.status', filterByUpdateStatus);
|
|
36
|
+
|
|
37
|
+
if (nameOrAlias) {
|
|
38
|
+
queryUtils.addTextContainsCondition(fieldSelectors, 'metadata.nameoralias', nameOrAlias);
|
|
39
|
+
}
|
|
39
40
|
if (ownerFleets?.length) {
|
|
40
|
-
|
|
41
|
+
queryUtils.addQueryConditions(
|
|
42
|
+
fieldSelectors,
|
|
43
|
+
'metadata.owner',
|
|
44
|
+
ownerFleets.map((fleet) => `Fleet/${fleet}`),
|
|
45
|
+
);
|
|
41
46
|
}
|
|
42
|
-
filterByAppStatus?.forEach((appSt) => params.append('statusFilter', `applications.summary.status=${appSt}`));
|
|
43
|
-
filterByDevStatus?.forEach((devSt) => params.append('statusFilter', `summary.status=${devSt}`));
|
|
44
|
-
filterByUpdateStatus?.forEach((updSt) => params.append('statusFilter', `updated.status=${updSt}`));
|
|
45
|
-
|
|
46
|
-
setLabelParams(params, labels);
|
|
47
47
|
|
|
48
|
+
const params = new URLSearchParams();
|
|
49
|
+
if (fieldSelectors.length > 0) {
|
|
50
|
+
params.set('fieldSelector', fieldSelectors.join(','));
|
|
51
|
+
}
|
|
52
|
+
queryUtils.setLabelParams(params, labels);
|
|
48
53
|
if (summaryOnly) {
|
|
49
54
|
params.set('summaryOnly', 'true');
|
|
50
55
|
}
|
|
56
|
+
if (nextContinue !== undefined) {
|
|
57
|
+
params.set('limit', `${PAGE_SIZE}`);
|
|
58
|
+
}
|
|
59
|
+
if (nextContinue) {
|
|
60
|
+
params.set('continue', nextContinue);
|
|
61
|
+
}
|
|
51
62
|
return params.size ? `devices?${params.toString()}` : 'devices';
|
|
52
63
|
};
|
|
53
64
|
|
|
@@ -72,41 +83,22 @@ export const useDevicesSummary = ({
|
|
|
72
83
|
return [deviceList?.summary, listLoading];
|
|
73
84
|
};
|
|
74
85
|
|
|
75
|
-
export const useDevices = ({
|
|
76
|
-
|
|
77
|
-
activeStatuses,
|
|
78
|
-
labels,
|
|
79
|
-
}: {
|
|
86
|
+
export const useDevices = (args: {
|
|
87
|
+
nameOrAlias?: string;
|
|
80
88
|
ownerFleets?: string[];
|
|
81
89
|
activeStatuses?: FilterStatusMap;
|
|
82
90
|
labels?: FlightCtlLabel[];
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
const [devicesEndpoint, devicesDebouncing] = useDevicesEndpoint({ ownerFleets, activeStatuses, labels });
|
|
88
|
-
const [devicesList, devicesLoading, devicesError, devicesRefetch, updating] = useFetchPeriodically<DeviceList>({
|
|
89
|
-
endpoint: devicesEndpoint,
|
|
90
|
-
});
|
|
91
|
-
|
|
92
|
-
const allLabels = React.useMemo(() => {
|
|
93
|
-
const labelsSet = new Set<FlightCtlLabel>();
|
|
91
|
+
nextContinue?: string;
|
|
92
|
+
onPageFetched?: (data: DeviceList) => void;
|
|
93
|
+
}): [Device[], boolean, unknown, boolean, VoidFunction] => {
|
|
94
|
+
const [devicesEndpoint, devicesDebouncing] = useDevicesEndpoint(args);
|
|
94
95
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
return Array.from(labelsSet);
|
|
102
|
-
}, [deviceLabelList]);
|
|
96
|
+
const [devicesList, devicesLoading, devicesError, devicesRefetch, updating] = useFetchPeriodically<DeviceList>(
|
|
97
|
+
{
|
|
98
|
+
endpoint: devicesEndpoint,
|
|
99
|
+
},
|
|
100
|
+
args.onPageFetched,
|
|
101
|
+
);
|
|
103
102
|
|
|
104
|
-
return [
|
|
105
|
-
devicesList?.items || [],
|
|
106
|
-
devicesLoading,
|
|
107
|
-
devicesError,
|
|
108
|
-
updating || devicesDebouncing,
|
|
109
|
-
devicesRefetch,
|
|
110
|
-
allLabels || [],
|
|
111
|
-
];
|
|
103
|
+
return [devicesList?.items || [], devicesLoading, devicesError, updating || devicesDebouncing, devicesRefetch];
|
|
112
104
|
};
|
|
@@ -25,11 +25,14 @@ import GeneralInfoStep, { generalInfoStepId, isGeneralInfoStepValid } from './st
|
|
|
25
25
|
import DeviceTemplateStep, { deviceTemplateStepId, isDeviceTemplateStepValid } from './steps/DeviceTemplateStep';
|
|
26
26
|
import ReviewDeviceStep, { reviewDeviceStepId } from './steps/ReviewDeviceStep';
|
|
27
27
|
import { getDevicePatches, getValidationSchema } from './utils';
|
|
28
|
-
import { getApplicationValues, getConfigTemplatesValues } from './deviceSpecUtils';
|
|
28
|
+
import { getApplicationValues, getConfigTemplatesValues, hasMicroshiftRegistrationConfig } from './deviceSpecUtils';
|
|
29
29
|
import { useFetch } from '../../../hooks/useFetch';
|
|
30
30
|
import { useEditDevice } from './useEditDevice';
|
|
31
31
|
import EditDeviceWizardNav from './EditDeviceWizardNav';
|
|
32
32
|
import EditDeviceWizardFooter from './EditDeviceWizardFooter';
|
|
33
|
+
import PageWithPermissions from '../../common/PageWithPermissions';
|
|
34
|
+
import { RESOURCE, VERB } from '../../../types/rbac';
|
|
35
|
+
import { useAccessReview } from '../../../hooks/useAccessReview';
|
|
33
36
|
|
|
34
37
|
import './EditDeviceWizard.css';
|
|
35
38
|
|
|
@@ -64,15 +67,18 @@ const EditDeviceWizard = () => {
|
|
|
64
67
|
</Alert>
|
|
65
68
|
);
|
|
66
69
|
} else if (device) {
|
|
70
|
+
const registerMicroShift = hasMicroshiftRegistrationConfig(device.spec);
|
|
67
71
|
body = (
|
|
68
72
|
<Formik<EditDeviceFormValues>
|
|
69
73
|
initialValues={{
|
|
70
74
|
deviceAlias,
|
|
71
|
-
osImage: device.spec?.os?.image,
|
|
75
|
+
osImage: device.spec?.os?.image || '',
|
|
72
76
|
labels: fromAPILabel(device.metadata.labels || {}).filter((label) => label.key !== 'alias'),
|
|
73
|
-
configTemplates: getConfigTemplatesValues(device.spec),
|
|
77
|
+
configTemplates: getConfigTemplatesValues(device.spec, registerMicroShift),
|
|
74
78
|
fleetMatch: '', // Initially this is always a fleetless device
|
|
75
79
|
applications: getApplicationValues(device.spec),
|
|
80
|
+
systemdUnits: [],
|
|
81
|
+
registerMicroShift,
|
|
76
82
|
}}
|
|
77
83
|
validationSchema={getValidationSchema(t)}
|
|
78
84
|
validateOnMount
|
|
@@ -102,6 +108,11 @@ const EditDeviceWizard = () => {
|
|
|
102
108
|
className="fctl-edit-device__wizard"
|
|
103
109
|
footer={<EditDeviceWizardFooter />}
|
|
104
110
|
nav={<EditDeviceWizardNav />}
|
|
111
|
+
onStepChange={() => {
|
|
112
|
+
if (submitError) {
|
|
113
|
+
setSubmitError(undefined);
|
|
114
|
+
}
|
|
115
|
+
}}
|
|
105
116
|
>
|
|
106
117
|
<WizardStep name={t('General info')} id={generalInfoStepId}>
|
|
107
118
|
<GeneralInfoStep />
|
|
@@ -147,4 +158,13 @@ const EditDeviceWizard = () => {
|
|
|
147
158
|
);
|
|
148
159
|
};
|
|
149
160
|
|
|
150
|
-
|
|
161
|
+
const EditDeviceWizardWithPermissions = () => {
|
|
162
|
+
const [allowed, loading] = useAccessReview(RESOURCE.DEVICE, VERB.PATCH);
|
|
163
|
+
return (
|
|
164
|
+
<PageWithPermissions allowed={allowed} loading={loading}>
|
|
165
|
+
<EditDeviceWizard />
|
|
166
|
+
</PageWithPermissions>
|
|
167
|
+
);
|
|
168
|
+
};
|
|
169
|
+
|
|
170
|
+
export default EditDeviceWizardWithPermissions;
|