@flightctl/ui-components 0.5.1 → 0.6.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 +3 -2
- package/dist/src/components/DetailsPage/DetailsPage.d.ts.map +1 -1
- package/dist/src/components/DetailsPage/DetailsPage.js +2 -2
- package/dist/src/components/DetailsPage/DetailsPage.js.map +1 -1
- package/dist/src/components/DetailsPage/Tables/ApplicationsTable.d.ts.map +1 -1
- package/dist/src/components/DetailsPage/Tables/ApplicationsTable.js +5 -3
- 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 +4 -5
- package/dist/src/components/Device/AddDeviceModal/AddDeviceModal.js.map +1 -1
- package/dist/src/components/Device/DeviceDetails/DeviceAliasEdit.d.ts +10 -0
- package/dist/src/components/Device/DeviceDetails/DeviceAliasEdit.d.ts.map +1 -0
- package/dist/src/components/Device/DeviceDetails/DeviceAliasEdit.js +110 -0
- package/dist/src/components/Device/DeviceDetails/DeviceAliasEdit.js.map +1 -0
- package/dist/src/components/Device/DeviceDetails/DeviceApplications.d.ts.map +1 -1
- package/dist/src/components/Device/DeviceDetails/DeviceApplications.js +7 -1
- package/dist/src/components/Device/DeviceDetails/DeviceApplications.js.map +1 -1
- package/dist/src/components/Device/DeviceDetails/DeviceDetailsPage.d.ts.map +1 -1
- package/dist/src/components/Device/DeviceDetails/DeviceDetailsPage.js +9 -6
- 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 +1 -1
- 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 +3 -3
- package/dist/src/components/Device/DeviceDetails/DeviceDetailsTabContent/StatusContent.js.map +1 -1
- package/dist/src/components/Device/DeviceDetails/DeviceDetailsTabContent/SystemResourcesContent.js +3 -3
- package/dist/src/components/Device/DeviceDetails/TerminalTab.d.ts.map +1 -1
- package/dist/src/components/Device/DeviceDetails/TerminalTab.js +34 -3
- package/dist/src/components/Device/DeviceDetails/TerminalTab.js.map +1 -1
- package/dist/src/components/Device/DevicesPage/DecommissionedDevicesTable.d.ts.map +1 -1
- package/dist/src/components/Device/DevicesPage/DecommissionedDevicesTable.js +1 -1
- 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 +35 -30
- 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 +11 -2
- package/dist/src/components/Device/DevicesPage/DevicesPage.js.map +1 -1
- package/dist/src/components/Device/DevicesPage/EnrolledDevicesTable.d.ts.map +1 -1
- package/dist/src/components/Device/DevicesPage/EnrolledDevicesTable.js +14 -11
- package/dist/src/components/Device/DevicesPage/EnrolledDevicesTable.js.map +1 -1
- package/dist/src/components/Device/EditDeviceWizard/EditDeviceWizard.d.ts.map +1 -1
- package/dist/src/components/Device/EditDeviceWizard/EditDeviceWizard.js +9 -2
- package/dist/src/components/Device/EditDeviceWizard/EditDeviceWizard.js.map +1 -1
- package/dist/src/components/Device/EditDeviceWizard/EditDeviceWizardFooter.d.ts.map +1 -1
- package/dist/src/components/Device/EditDeviceWizard/EditDeviceWizardFooter.js +21 -6
- package/dist/src/components/Device/EditDeviceWizard/EditDeviceWizardFooter.js.map +1 -1
- package/dist/src/components/Device/EditDeviceWizard/EditDeviceWizardNav.d.ts.map +1 -1
- package/dist/src/components/Device/EditDeviceWizard/EditDeviceWizardNav.js +11 -4
- package/dist/src/components/Device/EditDeviceWizard/EditDeviceWizardNav.js.map +1 -1
- package/dist/src/components/Device/EditDeviceWizard/deviceSpecUtils.d.ts +6 -5
- package/dist/src/components/Device/EditDeviceWizard/deviceSpecUtils.d.ts.map +1 -1
- package/dist/src/components/Device/EditDeviceWizard/deviceSpecUtils.js +123 -10
- package/dist/src/components/Device/EditDeviceWizard/deviceSpecUtils.js.map +1 -1
- package/dist/src/components/Device/EditDeviceWizard/steps/ApplicationImageForm.d.ts +8 -0
- package/dist/src/components/Device/EditDeviceWizard/steps/ApplicationImageForm.d.ts.map +1 -0
- package/dist/src/components/Device/EditDeviceWizard/steps/ApplicationImageForm.js +19 -0
- package/dist/src/components/Device/EditDeviceWizard/steps/ApplicationImageForm.js.map +1 -0
- package/dist/src/components/Device/EditDeviceWizard/steps/ApplicationInlineForm.d.ts +8 -0
- package/dist/src/components/Device/EditDeviceWizard/steps/ApplicationInlineForm.d.ts.map +1 -0
- package/dist/src/components/Device/EditDeviceWizard/steps/ApplicationInlineForm.js +49 -0
- package/dist/src/components/Device/EditDeviceWizard/steps/ApplicationInlineForm.js.map +1 -0
- package/dist/src/components/Device/EditDeviceWizard/steps/ApplicationTemplates.d.ts.map +1 -1
- package/dist/src/components/Device/EditDeviceWizard/steps/ApplicationTemplates.js +52 -19
- package/dist/src/components/Device/EditDeviceWizard/steps/ApplicationTemplates.js.map +1 -1
- package/dist/src/components/Device/EditDeviceWizard/steps/ConfigInlineTemplateForm.d.ts.map +1 -1
- package/dist/src/components/Device/EditDeviceWizard/steps/ConfigInlineTemplateForm.js +13 -16
- package/dist/src/components/Device/EditDeviceWizard/steps/ConfigInlineTemplateForm.js.map +1 -1
- package/dist/src/components/Device/EditDeviceWizard/steps/ConfigK8sSecretTemplateForm.d.ts.map +1 -1
- package/dist/src/components/Device/EditDeviceWizard/steps/ConfigK8sSecretTemplateForm.js.map +1 -1
- package/dist/src/components/Device/EditDeviceWizard/steps/ConfigWithRepositoryTemplateForm.d.ts.map +1 -1
- package/dist/src/components/Device/EditDeviceWizard/steps/ConfigWithRepositoryTemplateForm.js +5 -5
- package/dist/src/components/Device/EditDeviceWizard/steps/ConfigWithRepositoryTemplateForm.js.map +1 -1
- package/dist/src/components/Device/EditDeviceWizard/steps/ConfigurationTemplates.d.ts.map +1 -1
- package/dist/src/components/Device/EditDeviceWizard/steps/ConfigurationTemplates.js +2 -2
- package/dist/src/components/Device/EditDeviceWizard/steps/ConfigurationTemplates.js.map +1 -1
- package/dist/src/components/Device/EditDeviceWizard/steps/DeviceTemplateStep.d.ts +1 -1
- package/dist/src/components/Device/EditDeviceWizard/steps/DeviceTemplateStep.d.ts.map +1 -1
- package/dist/src/components/Device/EditDeviceWizard/steps/DeviceTemplateStep.js +16 -16
- package/dist/src/components/Device/EditDeviceWizard/steps/DeviceTemplateStep.js.map +1 -1
- package/dist/src/components/Device/EditDeviceWizard/steps/DeviceUpdateStep.d.ts +8 -0
- package/dist/src/components/Device/EditDeviceWizard/steps/DeviceUpdateStep.d.ts.map +1 -0
- package/dist/src/components/Device/EditDeviceWizard/steps/DeviceUpdateStep.js +58 -0
- package/dist/src/components/Device/EditDeviceWizard/steps/DeviceUpdateStep.js.map +1 -0
- package/dist/src/components/Device/EditDeviceWizard/steps/GeneralInfoStep.d.ts +1 -1
- package/dist/src/components/Device/EditDeviceWizard/steps/GeneralInfoStep.d.ts.map +1 -1
- package/dist/src/components/Device/EditDeviceWizard/steps/ReviewApplications.d.ts +2 -2
- package/dist/src/components/Device/EditDeviceWizard/steps/ReviewApplications.d.ts.map +1 -1
- package/dist/src/components/Device/EditDeviceWizard/steps/ReviewApplications.js +17 -12
- package/dist/src/components/Device/EditDeviceWizard/steps/ReviewApplications.js.map +1 -1
- package/dist/src/components/Device/EditDeviceWizard/steps/ReviewDeviceStep.js +1 -1
- package/dist/src/components/Device/EditDeviceWizard/steps/ReviewTrackedSystemdServices.d.ts +2 -4
- package/dist/src/components/Device/EditDeviceWizard/steps/ReviewTrackedSystemdServices.d.ts.map +1 -1
- package/dist/src/components/Device/EditDeviceWizard/steps/ReviewTrackedSystemdServices.js.map +1 -1
- package/dist/src/components/Device/EditDeviceWizard/steps/ReviewUpdatePolicy.d.ts +1 -1
- package/dist/src/components/Device/EditDeviceWizard/steps/ReviewUpdatePolicy.d.ts.map +1 -1
- package/dist/src/components/Device/EditDeviceWizard/steps/ReviewUpdatePolicy.js.map +1 -1
- package/dist/src/components/Device/EditDeviceWizard/utils.d.ts +29 -3
- package/dist/src/components/Device/EditDeviceWizard/utils.d.ts.map +1 -1
- package/dist/src/components/Device/EditDeviceWizard/utils.js +8 -7
- package/dist/src/components/Device/EditDeviceWizard/utils.js.map +1 -1
- package/dist/src/components/Device/SystemdUnitsModal/SystemdUnitsModal.d.ts.map +1 -1
- package/dist/src/components/Device/SystemdUnitsModal/SystemdUnitsModal.js.map +1 -1
- package/dist/src/components/Device/SystemdUnitsModal/TrackSystemdUnitsForm.d.ts +1 -4
- package/dist/src/components/Device/SystemdUnitsModal/TrackSystemdUnitsForm.d.ts.map +1 -1
- package/dist/src/components/Device/SystemdUnitsModal/TrackSystemdUnitsForm.js.map +1 -1
- package/dist/src/components/EnrollmentRequest/EnrollmentRequestDetails/EnrollmentRequestDetails.d.ts.map +1 -1
- package/dist/src/components/EnrollmentRequest/EnrollmentRequestDetails/EnrollmentRequestDetails.js +5 -5
- package/dist/src/components/EnrollmentRequest/EnrollmentRequestDetails/EnrollmentRequestDetails.js.map +1 -1
- package/dist/src/components/EnrollmentRequest/EnrollmentRequestList.d.ts +2 -1
- package/dist/src/components/EnrollmentRequest/EnrollmentRequestList.d.ts.map +1 -1
- package/dist/src/components/EnrollmentRequest/EnrollmentRequestList.js +19 -11
- package/dist/src/components/EnrollmentRequest/EnrollmentRequestList.js.map +1 -1
- package/dist/src/components/EnrollmentRequest/EnrollmentRequestTableRow.d.ts.map +1 -1
- package/dist/src/components/EnrollmentRequest/EnrollmentRequestTableRow.js +5 -1
- package/dist/src/components/EnrollmentRequest/EnrollmentRequestTableRow.js.map +1 -1
- package/dist/src/components/EnrollmentRequest/useEnrollmentRequests.d.ts +2 -1
- package/dist/src/components/EnrollmentRequest/useEnrollmentRequests.d.ts.map +1 -1
- package/dist/src/components/EnrollmentRequest/useEnrollmentRequests.js +8 -4
- package/dist/src/components/EnrollmentRequest/useEnrollmentRequests.js.map +1 -1
- package/dist/src/components/Fleet/CreateFleet/CreateFleetWizard.d.ts.map +1 -1
- package/dist/src/components/Fleet/CreateFleet/CreateFleetWizard.js +2 -2
- package/dist/src/components/Fleet/CreateFleet/CreateFleetWizard.js.map +1 -1
- package/dist/src/components/Fleet/CreateFleet/CreateFleetWizardFooter.d.ts.map +1 -1
- package/dist/src/components/Fleet/CreateFleet/CreateFleetWizardFooter.js +8 -1
- package/dist/src/components/Fleet/CreateFleet/CreateFleetWizardFooter.js.map +1 -1
- package/dist/src/components/Fleet/CreateFleet/fleetSpecUtils.d.ts +19 -2
- package/dist/src/components/Fleet/CreateFleet/fleetSpecUtils.d.ts.map +1 -1
- package/dist/src/components/Fleet/CreateFleet/fleetSpecUtils.js +53 -18
- package/dist/src/components/Fleet/CreateFleet/fleetSpecUtils.js.map +1 -1
- package/dist/src/components/Fleet/CreateFleet/steps/DeviceLabelSelector.js +1 -1
- package/dist/src/components/Fleet/CreateFleet/steps/DeviceLabelSelector.js.map +1 -1
- package/dist/src/components/Fleet/CreateFleet/steps/GeneralInfoStep.d.ts +1 -1
- package/dist/src/components/Fleet/CreateFleet/steps/GeneralInfoStep.d.ts.map +1 -1
- package/dist/src/components/Fleet/CreateFleet/steps/GeneralInfoStep.js +1 -2
- package/dist/src/components/Fleet/CreateFleet/steps/GeneralInfoStep.js.map +1 -1
- package/dist/src/components/Fleet/CreateFleet/steps/ReviewStep.js +1 -1
- package/dist/src/components/Fleet/CreateFleet/steps/UpdateConfirmChangesModal.d.ts +1 -1
- package/dist/src/components/Fleet/CreateFleet/steps/UpdateConfirmChangesModal.d.ts.map +1 -1
- package/dist/src/components/Fleet/CreateFleet/steps/UpdateConfirmChangesModal.js +9 -0
- package/dist/src/components/Fleet/CreateFleet/steps/UpdateConfirmChangesModal.js.map +1 -1
- package/dist/src/components/Fleet/CreateFleet/steps/UpdatePolicyStep.d.ts +1 -1
- package/dist/src/components/Fleet/CreateFleet/steps/UpdatePolicyStep.d.ts.map +1 -1
- package/dist/src/components/Fleet/CreateFleet/steps/UpdatePolicyStep.js +22 -9
- package/dist/src/components/Fleet/CreateFleet/steps/UpdatePolicyStep.js.map +1 -1
- package/dist/src/components/Fleet/CreateFleet/steps/UpdateStepDisruptionBudget.d.ts.map +1 -1
- package/dist/src/components/Fleet/CreateFleet/steps/UpdateStepDisruptionBudget.js +4 -4
- package/dist/src/components/Fleet/CreateFleet/steps/UpdateStepDisruptionBudget.js.map +1 -1
- package/dist/src/components/Fleet/CreateFleet/steps/UpdateStepRolloutPolicy.d.ts.map +1 -1
- package/dist/src/components/Fleet/CreateFleet/steps/UpdateStepRolloutPolicy.js +5 -5
- package/dist/src/components/Fleet/CreateFleet/steps/UpdateStepRolloutPolicy.js.map +1 -1
- package/dist/src/components/Fleet/CreateFleet/steps/UpdateStepUpdatePolicy.css +3 -0
- package/dist/src/components/Fleet/CreateFleet/steps/UpdateStepUpdatePolicy.d.ts +9 -0
- package/dist/src/components/Fleet/CreateFleet/steps/UpdateStepUpdatePolicy.d.ts.map +1 -0
- package/dist/src/components/Fleet/CreateFleet/steps/UpdateStepUpdatePolicy.js +127 -0
- package/dist/src/components/Fleet/CreateFleet/steps/UpdateStepUpdatePolicy.js.map +1 -0
- package/dist/src/components/Fleet/CreateFleet/utils.d.ts +1 -1
- package/dist/src/components/Fleet/CreateFleet/utils.d.ts.map +1 -1
- package/dist/src/components/Fleet/CreateFleet/utils.js +13 -4
- package/dist/src/components/Fleet/CreateFleet/utils.js.map +1 -1
- package/dist/src/components/Fleet/FleetsPage.d.ts.map +1 -1
- package/dist/src/components/Fleet/FleetsPage.js +8 -12
- package/dist/src/components/Fleet/FleetsPage.js.map +1 -1
- package/dist/src/components/Fleet/ImportFleetWizard/steps/ResourceSyncStep.js +1 -1
- package/dist/src/components/Fleet/ImportFleetWizard/steps/ResourceSyncStep.js.map +1 -1
- package/dist/src/components/ListPage/ListPage.d.ts +1 -0
- package/dist/src/components/ListPage/ListPage.d.ts.map +1 -1
- package/dist/src/components/ListPage/ListPage.js +3 -3
- package/dist/src/components/ListPage/ListPage.js.map +1 -1
- package/dist/src/components/Masthead/CommandLineToolsPage.d.ts +4 -0
- package/dist/src/components/Masthead/CommandLineToolsPage.d.ts.map +1 -0
- package/dist/src/components/Masthead/CommandLineToolsPage.js +90 -0
- package/dist/src/components/Masthead/CommandLineToolsPage.js.map +1 -0
- package/dist/src/components/Masthead/UserPreferencesModal.d.ts.map +1 -0
- package/dist/src/components/Masthead/UserPreferencesModal.js.map +1 -0
- package/dist/src/components/Masthead/UserPreferencesProvider.d.ts.map +1 -0
- package/dist/src/components/Masthead/UserPreferencesProvider.js.map +1 -0
- package/dist/src/components/OverviewPage/Cards/Status/StatusCard.js +3 -3
- package/dist/src/components/OverviewPage/Cards/Status/StatusCard.js.map +1 -1
- package/dist/src/components/OverviewPage/Cards/Tasks/TasksCard.d.ts +4 -0
- package/dist/src/components/OverviewPage/Cards/Tasks/TasksCard.d.ts.map +1 -0
- package/dist/src/components/OverviewPage/Cards/{ToDo/ToDoCard.js → Tasks/TasksCard.js} +4 -4
- package/dist/src/components/OverviewPage/Cards/Tasks/TasksCard.js.map +1 -0
- package/dist/src/components/OverviewPage/Overview.js +2 -2
- package/dist/src/components/OverviewPage/Overview.js.map +1 -1
- package/dist/src/components/Repository/CreateRepository/CreateRepositoryForm.d.ts.map +1 -1
- package/dist/src/components/Repository/CreateRepository/CreateRepositoryForm.js +6 -5
- package/dist/src/components/Repository/CreateRepository/CreateRepositoryForm.js.map +1 -1
- package/dist/src/components/Repository/CreateRepository/CreateResourceSyncsForm.d.ts.map +1 -1
- package/dist/src/components/Repository/CreateRepository/CreateResourceSyncsForm.js +3 -3
- package/dist/src/components/Repository/CreateRepository/CreateResourceSyncsForm.js.map +1 -1
- package/dist/src/components/Repository/CreateRepository/utils.d.ts.map +1 -1
- package/dist/src/components/Repository/CreateRepository/utils.js +4 -1
- package/dist/src/components/Repository/CreateRepository/utils.js.map +1 -1
- package/dist/src/components/Repository/RepositoryDetails/RepositoryResourceSyncsCard.d.ts.map +1 -1
- package/dist/src/components/Repository/RepositoryDetails/RepositoryResourceSyncsCard.js +1 -1
- package/dist/src/components/Repository/RepositoryDetails/RepositoryResourceSyncsCard.js.map +1 -1
- package/dist/src/components/Repository/RepositoryList.d.ts.map +1 -1
- package/dist/src/components/Repository/RepositoryList.js +3 -11
- package/dist/src/components/Repository/RepositoryList.js.map +1 -1
- package/dist/src/components/ResourceSync/RepositoryResourceSyncList.d.ts.map +1 -1
- package/dist/src/components/ResourceSync/RepositoryResourceSyncList.js +3 -6
- package/dist/src/components/ResourceSync/RepositoryResourceSyncList.js.map +1 -1
- package/dist/src/components/Status/DeviceResourceStatus.js +3 -3
- package/dist/src/components/Status/utils.d.ts.map +1 -1
- package/dist/src/components/Status/utils.js +3 -3
- package/dist/src/components/Status/utils.js.map +1 -1
- package/dist/src/components/Table/Table.d.ts +2 -1
- package/dist/src/components/Table/Table.d.ts.map +1 -1
- package/dist/src/components/Table/Table.js +9 -5
- package/dist/src/components/Table/Table.js.map +1 -1
- package/dist/src/components/Table/TablePagination.d.ts.map +1 -1
- package/dist/src/components/Table/TablePagination.js +1 -1
- package/dist/src/components/Table/TablePagination.js.map +1 -1
- package/dist/src/components/Terminal/Terminal.d.ts +1 -1
- package/dist/src/components/Terminal/Terminal.d.ts.map +1 -1
- package/dist/src/components/Terminal/Terminal.js +10 -3
- package/dist/src/components/Terminal/Terminal.js.map +1 -1
- package/dist/src/components/charts/DonutChart.js +1 -1
- package/dist/src/components/charts/DonutChart.js.map +1 -1
- package/dist/src/components/common/LeaveFormConfirmation.js +1 -1
- package/dist/src/components/common/LeaveFormConfirmation.js.map +1 -1
- package/dist/src/components/common/WithHelperText.d.ts +10 -5
- package/dist/src/components/common/WithHelperText.d.ts.map +1 -1
- package/dist/src/components/common/WithHelperText.js +13 -8
- package/dist/src/components/common/WithHelperText.js.map +1 -1
- package/dist/src/components/form/CheckboxField.d.ts +6 -3
- package/dist/src/components/form/CheckboxField.d.ts.map +1 -1
- package/dist/src/components/form/CheckboxField.js +20 -1
- package/dist/src/components/form/CheckboxField.js.map +1 -1
- package/dist/src/components/form/FormSelectTypeahead.d.ts +3 -3
- package/dist/src/components/form/FormSelectTypeahead.d.ts.map +1 -1
- package/dist/src/components/form/FormSelectTypeahead.js +43 -53
- package/dist/src/components/form/FormSelectTypeahead.js.map +1 -1
- package/dist/src/components/form/RichValidationTextField.d.ts +1 -1
- package/dist/src/components/form/RichValidationTextField.d.ts.map +1 -1
- package/dist/src/components/form/RichValidationTextField.js +8 -4
- package/dist/src/components/form/RichValidationTextField.js.map +1 -1
- package/dist/src/components/form/validations.d.ts +44 -4
- package/dist/src/components/form/validations.d.ts.map +1 -1
- package/dist/src/components/form/validations.js +148 -25
- package/dist/src/components/form/validations.js.map +1 -1
- package/dist/src/components/modals/ApproveDeviceModal/ApproveDeviceForm.js +5 -3
- package/dist/src/components/modals/ApproveDeviceModal/ApproveDeviceForm.js.map +1 -1
- package/dist/src/components/modals/ApproveDeviceModal/ApproveDeviceModal.d.ts.map +1 -1
- package/dist/src/components/modals/ApproveDeviceModal/ApproveDeviceModal.js +3 -2
- package/dist/src/components/modals/ApproveDeviceModal/ApproveDeviceModal.js.map +1 -1
- package/dist/src/components/modals/EditLabelsModal/EditLabelsForm.d.ts.map +1 -1
- package/dist/src/components/modals/EditLabelsModal/EditLabelsForm.js +7 -12
- package/dist/src/components/modals/EditLabelsModal/EditLabelsForm.js.map +1 -1
- package/dist/src/components/modals/massModals/MassDecommissionDeviceModal/MassDecommissionDeviceModal.js +4 -4
- package/dist/src/components/modals/massModals/MassDecommissionDeviceModal/MassDecommissionDeviceModal.js.map +1 -1
- package/dist/src/components/modals/massModals/MassDeleteDeviceModal/MassDeleteDeviceModal.js +4 -4
- package/dist/src/components/modals/massModals/MassDeleteDeviceModal/MassDeleteDeviceModal.js.map +1 -1
- package/dist/src/components/modals/massModals/MassDeleteFleetModal/MassDeleteFleetModal.js +2 -2
- package/dist/src/components/modals/massModals/MassDeleteFleetModal/MassDeleteFleetModal.js.map +1 -1
- package/dist/src/components/modals/massModals/MassDeleteRepositoryModal/MassDeleteRepositoryModal.js +2 -2
- package/dist/src/components/modals/massModals/MassDeleteRepositoryModal/MassDeleteRepositoryModal.js.map +1 -1
- package/dist/src/hooks/timeZones.d.ts +3 -0
- package/dist/src/hooks/timeZones.d.ts.map +1 -0
- package/dist/src/hooks/timeZones.js +607 -0
- package/dist/src/hooks/timeZones.js.map +1 -0
- package/dist/src/hooks/useAppContext.d.ts +14 -8
- package/dist/src/hooks/useAppContext.d.ts.map +1 -1
- package/dist/src/hooks/useAppContext.js +13 -6
- package/dist/src/hooks/useAppContext.js.map +1 -1
- package/dist/src/hooks/useFetch.d.ts +3 -5
- package/dist/src/hooks/useFetch.d.ts.map +1 -1
- package/dist/src/hooks/useFetch.js +3 -2
- package/dist/src/hooks/useFetch.js.map +1 -1
- package/dist/src/hooks/useNavigate.d.ts +2 -1
- package/dist/src/hooks/useNavigate.d.ts.map +1 -1
- package/dist/src/hooks/useNavigate.js +1 -0
- package/dist/src/hooks/useNavigate.js.map +1 -1
- package/dist/src/hooks/useTimeZones.d.ts +4 -0
- package/dist/src/hooks/useTimeZones.d.ts.map +1 -0
- package/dist/src/hooks/useTimeZones.js +22 -0
- package/dist/src/hooks/useTimeZones.js.map +1 -0
- package/dist/src/hooks/useWebSocket.d.ts +6 -2
- package/dist/src/hooks/useWebSocket.d.ts.map +1 -1
- package/dist/src/hooks/useWebSocket.js +22 -7
- 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 -1
- package/dist/src/links.js +10 -3
- package/dist/src/links.js.map +1 -1
- package/dist/src/types/deviceSpec.d.ts +93 -5
- package/dist/src/types/deviceSpec.d.ts.map +1 -1
- package/dist/src/types/deviceSpec.js +28 -2
- package/dist/src/types/deviceSpec.js.map +1 -1
- package/dist/src/types/extraTypes.d.ts +19 -1
- package/dist/src/types/extraTypes.d.ts.map +1 -1
- package/dist/src/types/extraTypes.js.map +1 -1
- package/dist/src/utils/labels.d.ts +1 -0
- package/dist/src/utils/labels.d.ts.map +1 -1
- package/dist/src/utils/labels.js +9 -2
- package/dist/src/utils/labels.js.map +1 -1
- package/dist/src/utils/patch.d.ts +13 -5
- package/dist/src/utils/patch.d.ts.map +1 -1
- package/dist/src/utils/patch.js +115 -71
- package/dist/src/utils/patch.js.map +1 -1
- package/dist/src/utils/query.d.ts +1 -0
- package/dist/src/utils/query.d.ts.map +1 -1
- package/dist/src/utils/query.js +10 -3
- package/dist/src/utils/query.js.map +1 -1
- package/dist/src/utils/search.d.ts +6 -0
- package/dist/src/utils/search.d.ts.map +1 -1
- package/dist/src/utils/search.js +9 -1
- package/dist/src/utils/search.js.map +1 -1
- package/dist/src/utils/time.d.ts +31 -0
- package/dist/src/utils/time.d.ts.map +1 -0
- package/dist/src/utils/time.js +134 -0
- package/dist/src/utils/time.js.map +1 -0
- package/package.json +1 -4
- package/src/components/DetailsPage/DetailsPage.tsx +6 -4
- package/src/components/DetailsPage/Tables/ApplicationsTable.tsx +6 -3
- package/src/components/Device/AddDeviceModal/AddDeviceModal.tsx +4 -13
- package/src/components/Device/DeviceDetails/DeviceAliasEdit.tsx +180 -0
- package/src/components/Device/DeviceDetails/DeviceApplications.tsx +8 -1
- package/src/components/Device/DeviceDetails/DeviceDetailsPage.tsx +21 -5
- package/src/components/Device/DeviceDetails/DeviceDetailsTab.tsx +3 -4
- package/src/components/Device/DeviceDetails/DeviceDetailsTabContent/StatusContent.tsx +7 -10
- package/src/components/Device/DeviceDetails/DeviceDetailsTabContent/SystemResourcesContent.tsx +3 -3
- package/src/components/Device/DeviceDetails/TerminalTab.tsx +43 -5
- package/src/components/Device/DevicesPage/DecommissionedDevicesTable.tsx +2 -1
- package/src/components/Device/DevicesPage/DeviceToolbarFilters.tsx +66 -38
- package/src/components/Device/DevicesPage/DevicesPage.tsx +11 -2
- package/src/components/Device/DevicesPage/EnrolledDevicesTable.tsx +16 -11
- package/src/components/Device/EditDeviceWizard/EditDeviceWizard.tsx +11 -2
- package/src/components/Device/EditDeviceWizard/EditDeviceWizardFooter.tsx +22 -6
- package/src/components/Device/EditDeviceWizard/EditDeviceWizardNav.tsx +15 -2
- package/src/components/Device/EditDeviceWizard/deviceSpecUtils.ts +147 -14
- package/src/components/Device/EditDeviceWizard/steps/ApplicationImageForm.tsx +28 -0
- package/src/components/Device/EditDeviceWizard/steps/ApplicationInlineForm.tsx +94 -0
- package/src/components/Device/EditDeviceWizard/steps/ApplicationTemplates.tsx +81 -50
- package/src/components/Device/EditDeviceWizard/steps/ConfigInlineTemplateForm.tsx +23 -28
- package/src/components/Device/EditDeviceWizard/steps/ConfigK8sSecretTemplateForm.tsx +1 -2
- package/src/components/Device/EditDeviceWizard/steps/ConfigWithRepositoryTemplateForm.tsx +18 -39
- package/src/components/Device/EditDeviceWizard/steps/ConfigurationTemplates.tsx +8 -14
- package/src/components/Device/EditDeviceWizard/steps/DeviceTemplateStep.tsx +26 -39
- package/src/components/Device/EditDeviceWizard/steps/DeviceUpdateStep.tsx +88 -0
- package/src/components/Device/EditDeviceWizard/steps/GeneralInfoStep.tsx +1 -1
- package/src/components/Device/EditDeviceWizard/steps/ReviewApplications.tsx +18 -19
- package/src/components/Device/EditDeviceWizard/steps/ReviewDeviceStep.tsx +3 -3
- package/src/components/Device/EditDeviceWizard/steps/ReviewTrackedSystemdServices.tsx +2 -2
- package/src/components/Device/EditDeviceWizard/steps/ReviewUpdatePolicy.tsx +2 -1
- package/src/components/Device/EditDeviceWizard/steps/SystemdUnitsForm.tsx +1 -1
- package/src/components/Device/EditDeviceWizard/utils.ts +16 -9
- package/src/components/Device/SystemdUnitsModal/SystemdUnitsModal.tsx +7 -6
- package/src/components/Device/SystemdUnitsModal/TrackSystemdUnitsForm.tsx +1 -5
- package/src/components/EnrollmentRequest/EnrollmentRequestDetails/EnrollmentRequestDetails.tsx +7 -9
- package/src/components/EnrollmentRequest/EnrollmentRequestList.tsx +30 -17
- package/src/components/EnrollmentRequest/EnrollmentRequestTableRow.tsx +5 -1
- package/src/components/EnrollmentRequest/useEnrollmentRequests.ts +12 -4
- package/src/components/Fleet/CreateFleet/CreateFleetWizard.tsx +4 -3
- package/src/components/Fleet/CreateFleet/CreateFleetWizardFooter.tsx +9 -2
- package/src/components/Fleet/CreateFleet/fleetSpecUtils.ts +51 -17
- package/src/components/Fleet/CreateFleet/steps/DeviceLabelSelector.tsx +1 -1
- package/src/components/Fleet/CreateFleet/steps/GeneralInfoStep.tsx +2 -13
- package/src/components/Fleet/CreateFleet/steps/ReviewStep.tsx +3 -3
- package/src/components/Fleet/CreateFleet/steps/UpdateConfirmChangesModal.tsx +10 -1
- package/src/components/Fleet/CreateFleet/steps/UpdatePolicyStep.tsx +49 -16
- package/src/components/Fleet/CreateFleet/steps/UpdateStepDisruptionBudget.tsx +18 -33
- package/src/components/Fleet/CreateFleet/steps/UpdateStepRolloutPolicy.tsx +14 -24
- package/src/components/Fleet/CreateFleet/steps/UpdateStepUpdatePolicy.css +3 -0
- package/src/components/Fleet/CreateFleet/steps/UpdateStepUpdatePolicy.tsx +246 -0
- package/src/components/Fleet/CreateFleet/utils.ts +23 -7
- package/src/components/Fleet/FleetsPage.tsx +15 -17
- package/src/components/Fleet/ImportFleetWizard/steps/ResourceSyncStep.tsx +1 -1
- package/src/components/ListPage/ListPage.tsx +7 -4
- package/src/components/Masthead/CommandLineToolsPage.tsx +179 -0
- package/src/components/OverviewPage/Cards/Status/StatusCard.tsx +6 -6
- package/src/components/OverviewPage/Cards/{ToDo/ToDoCard.tsx → Tasks/TasksCard.tsx} +3 -3
- package/src/components/OverviewPage/Overview.tsx +2 -2
- package/src/components/Repository/CreateRepository/CreateRepositoryForm.tsx +11 -26
- package/src/components/Repository/CreateRepository/CreateResourceSyncsForm.tsx +8 -17
- package/src/components/Repository/CreateRepository/utils.ts +4 -1
- package/src/components/Repository/RepositoryDetails/RepositoryResourceSyncsCard.tsx +3 -4
- package/src/components/Repository/RepositoryList.tsx +9 -16
- package/src/components/ResourceSync/RepositoryResourceSyncList.tsx +7 -11
- package/src/components/Status/DeviceResourceStatus.tsx +4 -4
- package/src/components/Status/utils.ts +3 -5
- package/src/components/Table/Table.tsx +32 -9
- package/src/components/Table/TablePagination.tsx +0 -1
- package/src/components/Terminal/Terminal.tsx +10 -4
- package/src/components/charts/DonutChart.tsx +2 -2
- package/src/components/common/LeaveFormConfirmation.tsx +2 -2
- package/src/components/common/WithHelperText.tsx +53 -21
- package/src/components/form/CheckboxField.tsx +28 -3
- package/src/components/form/FormSelectTypeahead.tsx +53 -80
- package/src/components/form/RichValidationTextField.tsx +73 -62
- package/src/components/form/validations.ts +207 -28
- package/src/components/modals/ApproveDeviceModal/ApproveDeviceForm.tsx +5 -5
- package/src/components/modals/ApproveDeviceModal/ApproveDeviceModal.tsx +3 -2
- package/src/components/modals/EditLabelsModal/EditLabelsForm.tsx +9 -20
- package/src/components/modals/massModals/MassDecommissionDeviceModal/MassDecommissionDeviceModal.tsx +2 -2
- package/src/components/modals/massModals/MassDeleteDeviceModal/MassDeleteDeviceModal.tsx +2 -2
- package/src/components/modals/massModals/MassDeleteFleetModal/MassDeleteFleetModal.tsx +2 -2
- package/src/components/modals/massModals/MassDeleteRepositoryModal/MassDeleteRepositoryModal.tsx +2 -2
- package/src/hooks/timeZones.ts +606 -0
- package/src/hooks/useAppContext.tsx +20 -10
- package/src/hooks/useFetch.ts +3 -2
- package/src/hooks/useNavigate.tsx +1 -0
- package/src/hooks/useTimeZones.ts +26 -0
- package/src/hooks/useWebSocket.ts +29 -7
- package/src/links.ts +13 -4
- package/src/types/deviceSpec.ts +118 -2
- package/src/types/extraTypes.ts +33 -1
- package/src/utils/labels.ts +7 -1
- package/src/utils/patch.ts +126 -72
- package/src/utils/query.ts +13 -4
- package/src/utils/search.ts +8 -0
- package/src/utils/time.ts +147 -0
- package/dist/jest.config.d.ts +0 -12
- package/dist/jest.config.d.ts.map +0 -1
- package/dist/jest.config.js +0 -24
- package/dist/jest.config.js.map +0 -1
- package/dist/src/components/DetailsPage/DetailsPage.spec.d.ts +0 -2
- package/dist/src/components/DetailsPage/DetailsPage.spec.d.ts.map +0 -1
- package/dist/src/components/DetailsPage/DetailsPage.spec.js +0 -81
- package/dist/src/components/DetailsPage/DetailsPage.spec.js.map +0 -1
- package/dist/src/components/Device/EditDeviceWizard/types.d.ts +0 -23
- package/dist/src/components/Device/EditDeviceWizard/types.d.ts.map +0 -1
- package/dist/src/components/Device/EditDeviceWizard/types.js +0 -3
- package/dist/src/components/Device/EditDeviceWizard/types.js.map +0 -1
- package/dist/src/components/Fleet/CreateFleet/types.d.ts +0 -29
- package/dist/src/components/Fleet/CreateFleet/types.d.ts.map +0 -1
- package/dist/src/components/Fleet/CreateFleet/types.js +0 -9
- package/dist/src/components/Fleet/CreateFleet/types.js.map +0 -1
- package/dist/src/components/OverviewPage/Cards/ToDo/ToDoCard.d.ts +0 -4
- package/dist/src/components/OverviewPage/Cards/ToDo/ToDoCard.d.ts.map +0 -1
- package/dist/src/components/OverviewPage/Cards/ToDo/ToDoCard.js.map +0 -1
- package/dist/src/components/UserPreferences/UserPreferencesModal.d.ts.map +0 -1
- package/dist/src/components/UserPreferences/UserPreferencesModal.js.map +0 -1
- package/dist/src/components/UserPreferences/UserPreferencesProvider.d.ts.map +0 -1
- package/dist/src/components/UserPreferences/UserPreferencesProvider.js.map +0 -1
- package/dist/src/setupTests.d.ts +0 -2
- package/dist/src/setupTests.d.ts.map +0 -1
- package/dist/src/setupTests.js +0 -24
- package/dist/src/setupTests.js.map +0 -1
- package/dist/src/tests/test-utils.d.ts +0 -7
- package/dist/src/tests/test-utils.d.ts.map +0 -1
- package/dist/src/tests/test-utils.js +0 -21
- package/dist/src/tests/test-utils.js.map +0 -1
- package/src/components/DetailsPage/DetailsPage.spec.tsx +0 -128
- package/src/components/Device/EditDeviceWizard/types.ts +0 -22
- package/src/components/Fleet/CreateFleet/types.ts +0 -33
- package/src/setupTests.ts +0 -21
- package/src/tests/test-utils.tsx +0 -21
- /package/dist/src/components/{UserPreferences → Masthead}/UserPreferencesModal.d.ts +0 -0
- /package/dist/src/components/{UserPreferences → Masthead}/UserPreferencesModal.js +0 -0
- /package/dist/src/components/{UserPreferences → Masthead}/UserPreferencesProvider.d.ts +0 -0
- /package/dist/src/components/{UserPreferences → Masthead}/UserPreferencesProvider.js +0 -0
- /package/src/components/{UserPreferences → Masthead}/UserPreferencesModal.tsx +0 -0
- /package/src/components/{UserPreferences → Masthead}/UserPreferencesProvider.tsx +0 -0
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import { Alert, AlertActionLink, Stack, StackItem } from '@patternfly/react-core';
|
|
2
|
+
import { Alert, AlertActionLink, Bullseye, Spinner, Stack, StackItem } from '@patternfly/react-core';
|
|
3
3
|
import { Device } from '@flightctl/types';
|
|
4
4
|
|
|
5
|
-
import { useWebSocket } from '../../../hooks/useWebSocket';
|
|
5
|
+
import { WsMetadata, useWebSocket } from '../../../hooks/useWebSocket';
|
|
6
6
|
import ErrorAlert from '../../ErrorAlert/ErrorAlert';
|
|
7
7
|
import { useTranslation } from '../../../hooks/useTranslation';
|
|
8
8
|
import Terminal, { ImperativeTerminalType } from '../../Terminal/Terminal';
|
|
@@ -14,16 +14,54 @@ type TerminalTabProps = {
|
|
|
14
14
|
device: Device;
|
|
15
15
|
};
|
|
16
16
|
|
|
17
|
+
const wsMeta: WsMetadata = {
|
|
18
|
+
tty: true,
|
|
19
|
+
term: 'xterm-256color',
|
|
20
|
+
};
|
|
21
|
+
|
|
17
22
|
const TerminalTab = ({ device }: TerminalTabProps) => {
|
|
18
23
|
const { t } = useTranslation();
|
|
19
24
|
const terminal = React.useRef<ImperativeTerminalType>(null);
|
|
20
25
|
|
|
21
26
|
const onMsgReceived = React.useCallback(async (message: Blob) => {
|
|
22
|
-
|
|
23
|
-
|
|
27
|
+
try {
|
|
28
|
+
const bytes = new Uint8Array(await message.arrayBuffer());
|
|
29
|
+
const msgType = bytes[0];
|
|
30
|
+
const decoder = new TextDecoder();
|
|
31
|
+
let str = decoder.decode(bytes.slice(1));
|
|
32
|
+
|
|
33
|
+
if (msgType === 3) {
|
|
34
|
+
try {
|
|
35
|
+
const err = JSON.parse(str) as { code: number; status: string };
|
|
36
|
+
if (err.status === 'Failure') {
|
|
37
|
+
str = `command terminated with non-zero exit code: exit status ${err.code}`;
|
|
38
|
+
} else {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
} catch {
|
|
42
|
+
// Nothing to do
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
terminal.current?.onDataReceived(str);
|
|
46
|
+
} catch (err) {
|
|
47
|
+
// eslint-disable-next-line
|
|
48
|
+
console.error(err);
|
|
49
|
+
}
|
|
24
50
|
}, []);
|
|
25
51
|
|
|
26
|
-
const { sendMessage, isClosed, error, reconnect } = useWebSocket(
|
|
52
|
+
const { sendMessage, isClosed, error, reconnect, isConnecting } = useWebSocket(
|
|
53
|
+
device.metadata.name || '',
|
|
54
|
+
onMsgReceived,
|
|
55
|
+
wsMeta,
|
|
56
|
+
);
|
|
57
|
+
|
|
58
|
+
if (isConnecting) {
|
|
59
|
+
return (
|
|
60
|
+
<Bullseye>
|
|
61
|
+
<Spinner />
|
|
62
|
+
</Bullseye>
|
|
63
|
+
);
|
|
64
|
+
}
|
|
27
65
|
|
|
28
66
|
if (error) {
|
|
29
67
|
return <ErrorAlert error={error} />;
|
|
@@ -115,7 +115,8 @@ const DecommissionedDevicesTable = ({
|
|
|
115
115
|
aria-label={t('Devices table')}
|
|
116
116
|
loading={isFilterUpdating}
|
|
117
117
|
columns={deviceColumns}
|
|
118
|
-
|
|
118
|
+
hasFilters={hasFiltersEnabled}
|
|
119
|
+
clearFilters={() => setNameOrAlias('')}
|
|
119
120
|
emptyData={devices.length === 0}
|
|
120
121
|
isAllSelected={isAllSelected}
|
|
121
122
|
onSelectAll={setAllSelected}
|
|
@@ -17,7 +17,7 @@ import {
|
|
|
17
17
|
import { TimesIcon } from '@patternfly/react-icons/dist/js/icons/times-icon';
|
|
18
18
|
import { SearchIcon } from '@patternfly/react-icons/dist/js/icons/search-icon';
|
|
19
19
|
|
|
20
|
-
import {
|
|
20
|
+
import { Fleet, FleetList, LabelList } from '@flightctl/types';
|
|
21
21
|
import { FlightCtlLabel } from '../../../types/extraTypes';
|
|
22
22
|
import { isPromiseFulfilled } from '../../../types/typeUtils';
|
|
23
23
|
|
|
@@ -25,7 +25,7 @@ import TableTextSearch, { TableTextSearchProps } from '../../Table/TableTextSear
|
|
|
25
25
|
import { useTranslation } from '../../../hooks/useTranslation';
|
|
26
26
|
import { useFetch } from '../../../hooks/useFetch';
|
|
27
27
|
import { commonQueries as queries } from '../../../utils/query';
|
|
28
|
-
import { MAX_TOTAL_SEARCH_RESULTS, getSearchResultsCount } from '../../../utils/search';
|
|
28
|
+
import { MAX_TOTAL_SEARCH_RESULTS, getEmptyFleetSearch, getSearchResultsCount } from '../../../utils/search';
|
|
29
29
|
import { labelToString, stringToLabel } from '../../../utils/labels';
|
|
30
30
|
|
|
31
31
|
import './DeviceToolbarFilters.css';
|
|
@@ -41,15 +41,32 @@ type LabelFleetSelectorProps = {
|
|
|
41
41
|
};
|
|
42
42
|
|
|
43
43
|
const LabelFleetResults = ({
|
|
44
|
+
filterText,
|
|
44
45
|
allLabels,
|
|
45
46
|
fleetNames,
|
|
46
47
|
isUpdating,
|
|
48
|
+
selectedFleetNames,
|
|
49
|
+
selectedLabels,
|
|
47
50
|
}: {
|
|
51
|
+
filterText: string;
|
|
48
52
|
isUpdating: boolean;
|
|
49
53
|
fleetNames: string[];
|
|
54
|
+
selectedLabels: FlightCtlLabel[];
|
|
55
|
+
selectedFleetNames: string[];
|
|
50
56
|
allLabels: FlightCtlLabel[];
|
|
51
57
|
}) => {
|
|
52
58
|
const { t } = useTranslation();
|
|
59
|
+
const regexp = React.useMemo(() => new RegExp(`(${filterText})`, 'g'), [filterText]);
|
|
60
|
+
|
|
61
|
+
const searchHighlighter = React.useCallback(
|
|
62
|
+
(text: string) => {
|
|
63
|
+
return text
|
|
64
|
+
.split(regexp)
|
|
65
|
+
.filter(Boolean)
|
|
66
|
+
.map((part, index) => (part.trim() === filterText ? <strong key={`part-${index}`}>{part}</strong> : part));
|
|
67
|
+
},
|
|
68
|
+
[filterText, regexp],
|
|
69
|
+
);
|
|
53
70
|
|
|
54
71
|
if (isUpdating) {
|
|
55
72
|
return (
|
|
@@ -74,9 +91,16 @@ const LabelFleetResults = ({
|
|
|
74
91
|
.filter((_, index) => index < visibleLabels)
|
|
75
92
|
.map((label) => {
|
|
76
93
|
const labelStr = labelToString(label);
|
|
94
|
+
const labelStrParts = searchHighlighter(labelStr);
|
|
95
|
+
const isSelected = selectedLabels.map(labelToString).includes(labelStr);
|
|
77
96
|
return (
|
|
78
|
-
<SelectOption
|
|
79
|
-
{labelStr}
|
|
97
|
+
<SelectOption
|
|
98
|
+
key={`label@@${labelStr}`}
|
|
99
|
+
value={`label@@${labelStr}`}
|
|
100
|
+
hasCheckbox
|
|
101
|
+
isSelected={isSelected}
|
|
102
|
+
>
|
|
103
|
+
<span>{labelStrParts}</span>
|
|
80
104
|
</SelectOption>
|
|
81
105
|
);
|
|
82
106
|
})}
|
|
@@ -88,11 +112,19 @@ const LabelFleetResults = ({
|
|
|
88
112
|
<SelectList id="select-typeahead-fleets-listbox">
|
|
89
113
|
{fleetNames
|
|
90
114
|
.filter((_, index) => index < visibleFleets)
|
|
91
|
-
.map((fleetName) =>
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
115
|
+
.map((fleetName) => {
|
|
116
|
+
const fleetNameParts = searchHighlighter(fleetName);
|
|
117
|
+
return (
|
|
118
|
+
<SelectOption
|
|
119
|
+
key={`fleet@@${fleetName}`}
|
|
120
|
+
value={`fleet@@${fleetName}`}
|
|
121
|
+
hasCheckbox
|
|
122
|
+
isSelected={selectedFleetNames.includes(fleetName)}
|
|
123
|
+
>
|
|
124
|
+
<span>{fleetNameParts}</span>
|
|
125
|
+
</SelectOption>
|
|
126
|
+
);
|
|
127
|
+
})}
|
|
96
128
|
</SelectList>
|
|
97
129
|
</SelectGroup>
|
|
98
130
|
)}
|
|
@@ -127,6 +159,7 @@ const LabelFleetSelector = ({ selectedFleetNames, selectedLabels, onSelect, plac
|
|
|
127
159
|
|
|
128
160
|
const closeMenu = () => {
|
|
129
161
|
setIsOpen(false);
|
|
162
|
+
setFilterText('');
|
|
130
163
|
};
|
|
131
164
|
|
|
132
165
|
const onInputClick = () => {
|
|
@@ -138,30 +171,20 @@ const LabelFleetSelector = ({ selectedFleetNames, selectedLabels, onSelect, plac
|
|
|
138
171
|
};
|
|
139
172
|
|
|
140
173
|
const fetchTextMatches = async (val: string) => {
|
|
141
|
-
const
|
|
142
|
-
|
|
143
|
-
queries.
|
|
174
|
+
const searchOnlyLabels = val.includes('=');
|
|
175
|
+
const labelMatches = get<LabelList>(
|
|
176
|
+
queries.getDevicesWithPartialLabelMatching(val, { limit: MAX_TOTAL_SEARCH_RESULTS }),
|
|
144
177
|
);
|
|
145
178
|
|
|
146
|
-
const fleetMatches =
|
|
179
|
+
const fleetMatches = searchOnlyLabels
|
|
180
|
+
? Promise.resolve(getEmptyFleetSearch())
|
|
181
|
+
: get<FleetList>(queries.getFleetsWithNameMatching(val, { limit: MAX_TOTAL_SEARCH_RESULTS }));
|
|
147
182
|
|
|
148
183
|
const [labelMatchResult, fleetMatchResult] = await Promise.allSettled([labelMatches, fleetMatches]);
|
|
149
184
|
|
|
150
185
|
let newLabels: FlightCtlLabel[] = [];
|
|
151
186
|
if (isPromiseFulfilled(labelMatchResult)) {
|
|
152
|
-
|
|
153
|
-
const matchingLabels = labelMatchResult.value.items.reduce((prevLabels, newDevice) => {
|
|
154
|
-
const deviceLabels = newDevice.metadata.labels || {};
|
|
155
|
-
Object.entries(deviceLabels).forEach(([key, value]) => {
|
|
156
|
-
const labelText = labelToString({ key, value });
|
|
157
|
-
if (labelText.includes(val) && !prevLabels.includes(labelText)) {
|
|
158
|
-
prevLabels.push(labelText);
|
|
159
|
-
}
|
|
160
|
-
});
|
|
161
|
-
return prevLabels;
|
|
162
|
-
}, [] as string[]);
|
|
163
|
-
|
|
164
|
-
newLabels = matchingLabels.map(stringToLabel).sort();
|
|
187
|
+
newLabels = labelMatchResult.value.map(stringToLabel);
|
|
165
188
|
}
|
|
166
189
|
|
|
167
190
|
let newFleets: string[] = [];
|
|
@@ -194,10 +217,6 @@ const LabelFleetSelector = ({ selectedFleetNames, selectedLabels, onSelect, plac
|
|
|
194
217
|
}
|
|
195
218
|
};
|
|
196
219
|
|
|
197
|
-
const selectedIds = selectedFleetNames
|
|
198
|
-
.map((fleetName) => `fleet@@${fleetName}`)
|
|
199
|
-
.concat(selectedLabels.map((label) => `label@@${labelToString(label)}`));
|
|
200
|
-
|
|
201
220
|
const toggle = (toggleRef: React.Ref<MenuToggleElement>) => (
|
|
202
221
|
<MenuToggle
|
|
203
222
|
className="fctl-device-toolbar-filters__toggle"
|
|
@@ -240,7 +259,6 @@ const LabelFleetSelector = ({ selectedFleetNames, selectedLabels, onSelect, plac
|
|
|
240
259
|
<Select
|
|
241
260
|
id="fleet-label-typeahead-select-listbox"
|
|
242
261
|
isOpen={isOpen}
|
|
243
|
-
selected={selectedIds}
|
|
244
262
|
onSelect={(_event, value) => {
|
|
245
263
|
const valStr = value as string;
|
|
246
264
|
const id = valStr.split('@@')[1];
|
|
@@ -249,8 +267,6 @@ const LabelFleetSelector = ({ selectedFleetNames, selectedLabels, onSelect, plac
|
|
|
249
267
|
} else {
|
|
250
268
|
onSelect('label', id);
|
|
251
269
|
}
|
|
252
|
-
setIsOpen(false);
|
|
253
|
-
setFilterText('');
|
|
254
270
|
}}
|
|
255
271
|
onOpenChange={(isOpen) => {
|
|
256
272
|
!isOpen && closeMenu();
|
|
@@ -258,7 +274,14 @@ const LabelFleetSelector = ({ selectedFleetNames, selectedLabels, onSelect, plac
|
|
|
258
274
|
toggle={toggle}
|
|
259
275
|
>
|
|
260
276
|
{filterText && (
|
|
261
|
-
<LabelFleetResults
|
|
277
|
+
<LabelFleetResults
|
|
278
|
+
isUpdating={isUpdating}
|
|
279
|
+
filterText={filterText}
|
|
280
|
+
fleetNames={fleetNameResults}
|
|
281
|
+
selectedFleetNames={selectedFleetNames}
|
|
282
|
+
allLabels={labelResults}
|
|
283
|
+
selectedLabels={selectedLabels}
|
|
284
|
+
/>
|
|
262
285
|
)}
|
|
263
286
|
</Select>
|
|
264
287
|
);
|
|
@@ -324,16 +347,21 @@ const DeviceToolbarFilter = ({
|
|
|
324
347
|
};
|
|
325
348
|
|
|
326
349
|
const onSelectFleetOrLabel = (type: 'fleet' | 'label', id: string) => {
|
|
327
|
-
// Selecting a previously selected label does nothing. Labels can only be removed from the chips.
|
|
328
350
|
if (type === 'fleet') {
|
|
329
351
|
const isSelected = selectedFleetNames.includes(id);
|
|
330
|
-
|
|
352
|
+
|
|
353
|
+
if (isSelected) {
|
|
354
|
+
setSelectedFleets(selectedFleetNames.filter((name) => name !== id));
|
|
355
|
+
} else {
|
|
331
356
|
setSelectedFleets(selectedFleetNames.concat([id]));
|
|
332
357
|
}
|
|
333
358
|
} else {
|
|
334
359
|
const isSelected = selectedLabels.some((label) => labelToString(label) === id);
|
|
335
|
-
|
|
336
|
-
|
|
360
|
+
const [key, val] = id.split('=');
|
|
361
|
+
|
|
362
|
+
if (isSelected) {
|
|
363
|
+
setSelectedLabels(selectedLabels.filter((label) => label.key !== key || label.value !== val));
|
|
364
|
+
} else {
|
|
337
365
|
setSelectedLabels(selectedLabels.concat([{ key, value: val }]));
|
|
338
366
|
}
|
|
339
367
|
}
|
|
@@ -36,6 +36,15 @@ const DevicesPage = ({ canListER }: { canListER: boolean }) => {
|
|
|
36
36
|
setSelectedLabels,
|
|
37
37
|
} = useDeviceBackendFilters();
|
|
38
38
|
const [onlyDecommissioned, setOnlyDecommissioned] = React.useState<boolean>(false);
|
|
39
|
+
const [showDeviceListBadge, setShowDeviceListBadge] = React.useState<boolean>(true);
|
|
40
|
+
|
|
41
|
+
const onEmptyErChanged = React.useCallback((isEmpty: boolean) => {
|
|
42
|
+
if (isEmpty) {
|
|
43
|
+
setShowDeviceListBadge(true);
|
|
44
|
+
} else {
|
|
45
|
+
setShowDeviceListBadge(false);
|
|
46
|
+
}
|
|
47
|
+
}, []);
|
|
39
48
|
|
|
40
49
|
const { currentPage, setCurrentPage, onPageFetched, nextContinue, itemCount } = useTablePagination<DeviceList>(
|
|
41
50
|
onlyDecommissioned ? undefined : removeDecommissionedDevices,
|
|
@@ -62,9 +71,9 @@ const DevicesPage = ({ canListER }: { canListER: boolean }) => {
|
|
|
62
71
|
|
|
63
72
|
return (
|
|
64
73
|
<>
|
|
65
|
-
{canListER && <EnrollmentRequestList refetchDevices={refetch} />}
|
|
74
|
+
{canListER && <EnrollmentRequestList onEmptyListChanged={onEmptyErChanged} refetchDevices={refetch} />}
|
|
66
75
|
|
|
67
|
-
<ListPage title={t('Devices')}>
|
|
76
|
+
<ListPage title={t('Devices')} withBadge={showDeviceListBadge}>
|
|
68
77
|
{/* When searching for decommissioned devices we want to avoid showing the enrolled devices */}
|
|
69
78
|
<ListPageBody error={error} loading={loading || (onlyDecommissioned && updating && !hasFiltersEnabled)}>
|
|
70
79
|
{onlyDecommissioned ? (
|
|
@@ -110,6 +110,19 @@ const EnrolledDevicesTable = ({
|
|
|
110
110
|
const [canEdit] = useAccessReview(RESOURCE.DEVICE, VERB.PATCH);
|
|
111
111
|
const [canDecommission] = useAccessReview(RESOURCE.DEVICE_DECOMMISSION, VERB.UPDATE);
|
|
112
112
|
|
|
113
|
+
const clearAllFilters = () => {
|
|
114
|
+
if (hasFiltersEnabled) {
|
|
115
|
+
setActiveStatuses({
|
|
116
|
+
[FilterSearchParams.AppStatus]: [],
|
|
117
|
+
[FilterSearchParams.DeviceStatus]: [],
|
|
118
|
+
[FilterSearchParams.UpdatedStatus]: [],
|
|
119
|
+
});
|
|
120
|
+
setOwnerFleets([]);
|
|
121
|
+
setNameOrAlias('');
|
|
122
|
+
setSelectedLabels([]);
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
|
|
113
126
|
return (
|
|
114
127
|
<>
|
|
115
128
|
<DeviceTableToolbar
|
|
@@ -145,16 +158,7 @@ const EnrolledDevicesTable = ({
|
|
|
145
158
|
label={t('Show only decommissioned devices')}
|
|
146
159
|
isChecked={false}
|
|
147
160
|
onChange={() => {
|
|
148
|
-
|
|
149
|
-
setActiveStatuses({
|
|
150
|
-
[FilterSearchParams.AppStatus]: [],
|
|
151
|
-
[FilterSearchParams.DeviceStatus]: [],
|
|
152
|
-
[FilterSearchParams.UpdatedStatus]: [],
|
|
153
|
-
});
|
|
154
|
-
setOwnerFleets([]);
|
|
155
|
-
setNameOrAlias('');
|
|
156
|
-
setSelectedLabels([]);
|
|
157
|
-
}
|
|
161
|
+
clearAllFilters();
|
|
158
162
|
setOnlyDecommissioned(true);
|
|
159
163
|
}}
|
|
160
164
|
ouiaId={t('Show only decommissioned devices')}
|
|
@@ -165,7 +169,8 @@ const EnrolledDevicesTable = ({
|
|
|
165
169
|
aria-label={t('Enrolled devices table')}
|
|
166
170
|
loading={isFilterUpdating}
|
|
167
171
|
columns={deviceColumns}
|
|
168
|
-
|
|
172
|
+
hasFilters={hasFiltersEnabled}
|
|
173
|
+
clearFilters={clearAllFilters}
|
|
169
174
|
emptyData={devices.length === 0}
|
|
170
175
|
isAllSelected={isAllSelected}
|
|
171
176
|
onSelectAll={setAllSelected}
|
|
@@ -14,7 +14,8 @@ import {
|
|
|
14
14
|
} from '@patternfly/react-core';
|
|
15
15
|
|
|
16
16
|
import { Device } from '@flightctl/types';
|
|
17
|
-
import {
|
|
17
|
+
import { getUpdatePolicyValues } from '../../Fleet/CreateFleet/fleetSpecUtils';
|
|
18
|
+
import { EditDeviceFormValues } from './../../../types/deviceSpec';
|
|
18
19
|
import { getErrorMessage } from '../../../utils/error';
|
|
19
20
|
import { fromAPILabel } from '../../../utils/labels';
|
|
20
21
|
import { getEditDisabledReason } from '../../../utils/devices';
|
|
@@ -24,6 +25,7 @@ import LeaveFormConfirmation from '../../common/LeaveFormConfirmation';
|
|
|
24
25
|
import ErrorBoundary from '../../common/ErrorBoundary';
|
|
25
26
|
import GeneralInfoStep, { generalInfoStepId, isGeneralInfoStepValid } from './steps/GeneralInfoStep';
|
|
26
27
|
import DeviceTemplateStep, { deviceTemplateStepId, isDeviceTemplateStepValid } from './steps/DeviceTemplateStep';
|
|
28
|
+
import DeviceUpdateStep, { deviceUpdatePolicyStepId, isUpdatePolicyStepValid } from './steps/DeviceUpdateStep';
|
|
27
29
|
import ReviewDeviceStep, { reviewDeviceStepId } from './steps/ReviewDeviceStep';
|
|
28
30
|
import { getDevicePatches, getValidationSchema } from './utils';
|
|
29
31
|
import { getApplicationValues, getConfigTemplatesValues, hasMicroshiftRegistrationConfig } from './deviceSpecUtils';
|
|
@@ -82,6 +84,7 @@ const EditDeviceWizard = () => {
|
|
|
82
84
|
applications: getApplicationValues(device.spec),
|
|
83
85
|
systemdUnits: [],
|
|
84
86
|
registerMicroShift,
|
|
87
|
+
updatePolicy: getUpdatePolicyValues(device.spec?.updatePolicy),
|
|
85
88
|
}}
|
|
86
89
|
validationSchema={getValidationSchema(t)}
|
|
87
90
|
validateOnMount
|
|
@@ -101,9 +104,12 @@ const EditDeviceWizard = () => {
|
|
|
101
104
|
{({ values, errors: formikErrors }) => {
|
|
102
105
|
const generalStepValid = isGeneralInfoStepValid(formikErrors);
|
|
103
106
|
const templateStepValid = isDeviceTemplateStepValid(formikErrors);
|
|
107
|
+
const updateStepValid = isUpdatePolicyStepValid(formikErrors);
|
|
104
108
|
|
|
105
109
|
const canEditTemplate = !values.fleetMatch;
|
|
106
110
|
const isTemplateStepDisabled = !(generalStepValid && canEditTemplate);
|
|
111
|
+
const isUpdateStepDisabled = !templateStepValid;
|
|
112
|
+
|
|
107
113
|
return (
|
|
108
114
|
<>
|
|
109
115
|
<LeaveFormConfirmation />
|
|
@@ -123,7 +129,10 @@ const EditDeviceWizard = () => {
|
|
|
123
129
|
<WizardStep name={t('Device template')} id={deviceTemplateStepId} isDisabled={isTemplateStepDisabled}>
|
|
124
130
|
<DeviceTemplateStep isFleet={false} />
|
|
125
131
|
</WizardStep>
|
|
126
|
-
<WizardStep name={t('
|
|
132
|
+
<WizardStep name={t('Updates')} id={deviceUpdatePolicyStepId} isDisabled={isUpdateStepDisabled}>
|
|
133
|
+
<DeviceUpdateStep />
|
|
134
|
+
</WizardStep>
|
|
135
|
+
<WizardStep name={t('Review and save')} id={reviewDeviceStepId} isDisabled={!updateStepValid}>
|
|
127
136
|
<ReviewDeviceStep error={submitError} />
|
|
128
137
|
</WizardStep>
|
|
129
138
|
</Wizard>
|
|
@@ -2,34 +2,50 @@ import * as React from 'react';
|
|
|
2
2
|
import { useFormikContext } from 'formik';
|
|
3
3
|
import { Button, WizardFooterWrapper, useWizardContext } from '@patternfly/react-core';
|
|
4
4
|
|
|
5
|
-
import { EditDeviceFormValues } from '
|
|
5
|
+
import { EditDeviceFormValues } from '../../../types/deviceSpec';
|
|
6
6
|
import { useTranslation } from '../../../hooks/useTranslation';
|
|
7
7
|
import { useNavigate } from '../../../hooks/useNavigate';
|
|
8
8
|
import { generalInfoStepId, isGeneralInfoStepValid } from './steps/GeneralInfoStep';
|
|
9
9
|
import { deviceTemplateStepId, isDeviceTemplateStepValid } from './steps/DeviceTemplateStep';
|
|
10
10
|
import { reviewDeviceStepId } from './steps/ReviewDeviceStep';
|
|
11
|
+
import { deviceUpdatePolicyStepId, isUpdatePolicyStepValid } from './steps/DeviceUpdateStep';
|
|
11
12
|
|
|
12
13
|
const EditDeviceWizardFooter = () => {
|
|
13
14
|
const { t } = useTranslation();
|
|
14
15
|
const { goToNextStep, goToPrevStep, activeStep } = useWizardContext();
|
|
15
16
|
const { submitForm, isSubmitting, errors } = useFormikContext<EditDeviceFormValues>();
|
|
16
17
|
const navigate = useNavigate();
|
|
18
|
+
const buttonRef = React.useRef<HTMLButtonElement>();
|
|
17
19
|
|
|
18
20
|
const isSubmitStep = activeStep.id === reviewDeviceStepId;
|
|
19
21
|
|
|
20
22
|
let isStepValid = true;
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
23
|
+
switch (activeStep.id) {
|
|
24
|
+
case generalInfoStepId:
|
|
25
|
+
isStepValid = isGeneralInfoStepValid(errors);
|
|
26
|
+
break;
|
|
27
|
+
case deviceTemplateStepId:
|
|
28
|
+
isStepValid = isDeviceTemplateStepValid(errors);
|
|
29
|
+
break;
|
|
30
|
+
case deviceUpdatePolicyStepId:
|
|
31
|
+
isStepValid = isUpdatePolicyStepValid(errors);
|
|
32
|
+
break;
|
|
33
|
+
default:
|
|
34
|
+
break;
|
|
25
35
|
}
|
|
26
36
|
|
|
37
|
+
const onMoveNext = () => {
|
|
38
|
+
goToNextStep();
|
|
39
|
+
// Blur the button, otherwise it keeps the focus from the previous click
|
|
40
|
+
buttonRef.current?.blur();
|
|
41
|
+
};
|
|
42
|
+
|
|
27
43
|
const primaryBtn = isSubmitStep ? (
|
|
28
44
|
<Button variant="primary" onClick={submitForm} isDisabled={isSubmitting} isLoading={isSubmitting}>
|
|
29
45
|
{t('Save')}
|
|
30
46
|
</Button>
|
|
31
47
|
) : (
|
|
32
|
-
<Button variant="primary" onClick={
|
|
48
|
+
<Button variant="primary" onClick={onMoveNext} isDisabled={!isStepValid} ref={buttonRef}>
|
|
33
49
|
{t('Next')}
|
|
34
50
|
</Button>
|
|
35
51
|
);
|
|
@@ -7,7 +7,8 @@ import { TFunction } from 'react-i18next';
|
|
|
7
7
|
|
|
8
8
|
const generalInfoStepIndex = 0;
|
|
9
9
|
const deviceTemplateStepIndex = 1;
|
|
10
|
-
const
|
|
10
|
+
const deviceUpdatesStepIndex = 2;
|
|
11
|
+
const reviewDeviceStepIndex = 3;
|
|
11
12
|
|
|
12
13
|
const disabledTemplateReason = (t: TFunction) =>
|
|
13
14
|
t('The device will be bound to a fleet. As a result, its configurations cannot be edited directly.');
|
|
@@ -17,6 +18,7 @@ const EditDeviceWizardNav = () => {
|
|
|
17
18
|
const { activeStep, steps, goToStepByIndex } = useWizardContext();
|
|
18
19
|
|
|
19
20
|
const isEditTemplateDisabled = steps[deviceTemplateStepIndex]?.isDisabled;
|
|
21
|
+
const isDeviceUpdatesDisabled = steps[deviceUpdatesStepIndex]?.isDisabled;
|
|
20
22
|
const isReviewDeviceDisabled = steps[reviewDeviceStepIndex]?.isDisabled;
|
|
21
23
|
|
|
22
24
|
return (
|
|
@@ -39,8 +41,19 @@ const EditDeviceWizardNav = () => {
|
|
|
39
41
|
goToStepByIndex(deviceTemplateStepIndex + 1);
|
|
40
42
|
}
|
|
41
43
|
}}
|
|
44
|
+
/>
|
|
45
|
+
<WizardNavItem
|
|
46
|
+
stepIndex={deviceUpdatesStepIndex}
|
|
47
|
+
content={t('Updates')}
|
|
48
|
+
isCurrent={activeStep?.index === deviceUpdatesStepIndex + 1}
|
|
49
|
+
isDisabled={isDeviceUpdatesDisabled}
|
|
50
|
+
onClick={() => {
|
|
51
|
+
if (!isDeviceUpdatesDisabled) {
|
|
52
|
+
goToStepByIndex(deviceUpdatesStepIndex + 1);
|
|
53
|
+
}
|
|
54
|
+
}}
|
|
42
55
|
>
|
|
43
|
-
{
|
|
56
|
+
{isDeviceUpdatesDisabled && (
|
|
44
57
|
<Tooltip content={disabledTemplateReason(t)}>
|
|
45
58
|
<Icon status="info" size="sm">
|
|
46
59
|
<InfoCircleIcon />
|