@flightctl/ui-components 0.0.10 → 0.4.0-rc2
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 -4
- package/dist/src/components/Device/DeviceDetails/DeviceDetailsPage.d.ts.map +1 -1
- package/dist/src/components/Device/DeviceDetails/DeviceDetailsPage.js +18 -9
- 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 +0 -3
- package/dist/src/components/Device/DevicesPage/DeviceTableToolbar.d.ts.map +1 -1
- package/dist/src/components/Device/DevicesPage/DeviceTableToolbar.js +2 -2
- package/dist/src/components/Device/DevicesPage/DeviceTableToolbar.js.map +1 -1
- package/dist/src/components/Device/DevicesPage/DeviceToolbarFilters.d.ts +1 -4
- package/dist/src/components/Device/DevicesPage/DeviceToolbarFilters.d.ts.map +1 -1
- package/dist/src/components/Device/DevicesPage/DeviceToolbarFilters.js +70 -16
- package/dist/src/components/Device/DevicesPage/DeviceToolbarFilters.js.map +1 -1
- package/dist/src/components/Device/DevicesPage/DevicesPage.d.ts +6 -8
- package/dist/src/components/Device/DevicesPage/DevicesPage.d.ts.map +1 -1
- package/dist/src/components/Device/DevicesPage/DevicesPage.js +41 -37
- 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/useDevices.d.ts +9 -10
- package/dist/src/components/Device/DevicesPage/useDevices.d.ts.map +1 -1
- package/dist/src/components/Device/DevicesPage/useDevices.js +9 -29
- 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/{Device/DevicesPage → EnrollmentRequest}/EnrollmentRequestList.js +40 -38
- 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/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/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 +34 -24
- 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 +11 -3
- package/dist/src/components/Fleet/useFleets.d.ts.map +1 -1
- package/dist/src/components/Fleet/useFleets.js +22 -12
- package/dist/src/components/Fleet/useFleets.js.map +1 -1
- package/dist/src/components/OverviewPage/Cards/Status/StatusCard.d.ts.map +1 -1
- package/dist/src/components/OverviewPage/Cards/Status/StatusCard.js +5 -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/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 +0 -1
- package/dist/src/components/Table/Table.d.ts.map +1 -1
- package/dist/src/components/Table/Table.js +2 -2
- 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/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/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 +4 -3
- 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/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 +9 -0
- package/dist/src/utils/query.d.ts.map +1 -1
- package/dist/src/utils/query.js +33 -1
- package/dist/src/utils/query.js.map +1 -1
- 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/package.json +5 -5
- 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 +0 -7
- package/src/components/Device/DevicesPage/DeviceToolbarFilters.tsx +93 -40
- package/src/components/Device/DevicesPage/DevicesPage.tsx +64 -58
- package/src/components/Device/DevicesPage/types.ts +1 -13
- package/src/components/Device/DevicesPage/useDevices.ts +19 -38
- 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/{Device/DevicesPage → EnrollmentRequest}/EnrollmentRequestList.tsx +57 -48
- package/src/components/EnrollmentRequest/EnrollmentRequestTableRow.tsx +28 -17
- package/src/components/{Device/DevicesPage → EnrollmentRequest}/EnrollmentRequestTableToolbar.tsx +3 -2
- 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/FleetResourceSyncs.tsx +53 -41
- package/src/components/Fleet/FleetRow.tsx +28 -16
- package/src/components/Fleet/FleetsPage.tsx +63 -53
- 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 +40 -22
- package/src/components/OverviewPage/Cards/Status/StatusCard.tsx +5 -18
- package/src/components/OverviewPage/Cards/Status/StatusCardFilters.tsx +0 -7
- 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 -71
- package/src/components/Repository/useRepositories.ts +59 -0
- package/src/components/ResourceSync/RepositoryResourceSyncList.tsx +41 -40
- package/src/components/Table/Table.tsx +3 -4
- package/src/components/Table/TablePagination.tsx +74 -0
- package/src/components/Terminal/Terminal.tsx +1 -0
- 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 +8 -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/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 +41 -0
- package/src/utils/search.ts +1 -1
- 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 -6
- package/dist/src/components/Device/DevicesPage/EnrollmentRequestList.d.ts.map +0 -1
- 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/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/useApiTableSort.d.ts +0 -8
- package/dist/src/hooks/useApiTableSort.d.ts.map +0 -1
- package/dist/src/hooks/useApiTableSort.js +0 -44
- package/dist/src/hooks/useApiTableSort.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/generic.d.ts +0 -5
- package/dist/src/utils/sort/generic.d.ts.map +0 -1
- package/dist/src/utils/sort/generic.js +0 -10
- 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/MatchPatternsModal/MatchPatternsForm.tsx +0 -92
- package/src/components/common/HelperTextItems.tsx +0 -25
- package/src/hooks/useApiTableSort.ts +0 -49
- package/src/hooks/useTableSort.ts +0 -42
- package/src/utils/sort/generic.ts +0 -8
- package/src/utils/sort/repository.ts +0 -28
- package/src/utils/sort/resourceSync.ts +0 -30
|
@@ -21,7 +21,7 @@ import { DeviceSpecConfigFormValues } from '../types';
|
|
|
21
21
|
import { useTranslation } from '../../../../hooks/useTranslation';
|
|
22
22
|
import { useFetchPeriodically } from '../../../../hooks/useFetchPeriodically';
|
|
23
23
|
import { getErrorMessage } from '../../../../utils/error';
|
|
24
|
-
import
|
|
24
|
+
import WithHelperText from '../../../common/WithHelperText';
|
|
25
25
|
import { getDnsSubdomainValidations } from '../../../form/validations';
|
|
26
26
|
import ErrorHelperText from '../../../form/FieldHelperText';
|
|
27
27
|
import FormSelect from '../../../form/FormSelect';
|
|
@@ -30,6 +30,8 @@ import ConfigWithRepositoryTemplateForm from './ConfigWithRepositoryTemplateForm
|
|
|
30
30
|
import ConfigK8sSecretTemplateForm from './ConfigK8sSecretTemplateForm';
|
|
31
31
|
import ConfigInlineTemplateForm from './ConfigInlineTemplateForm';
|
|
32
32
|
import ExpandableFormSection from '../../../form/ExpandableFormSection';
|
|
33
|
+
import { useAccessReview } from '../../../../hooks/useAccessReview';
|
|
34
|
+
import { RESOURCE, VERB } from '../../../../types/rbac';
|
|
33
35
|
|
|
34
36
|
const useValidateOnMount = () => {
|
|
35
37
|
const { validateForm } = useFormikContext<DeviceSpecConfigFormValues>();
|
|
@@ -42,12 +44,19 @@ const useValidateOnMount = () => {
|
|
|
42
44
|
};
|
|
43
45
|
|
|
44
46
|
type ConfigSectionProps = {
|
|
45
|
-
index: number;
|
|
46
47
|
repositories: Repository[];
|
|
47
48
|
repoRefetch: VoidFunction;
|
|
49
|
+
canCreateRepo: boolean;
|
|
50
|
+
canListRepo: boolean;
|
|
48
51
|
};
|
|
49
52
|
|
|
50
|
-
const ConfigSection = ({
|
|
53
|
+
const ConfigSection = ({
|
|
54
|
+
index,
|
|
55
|
+
repositories,
|
|
56
|
+
repoRefetch,
|
|
57
|
+
canCreateRepo,
|
|
58
|
+
canListRepo,
|
|
59
|
+
}: ConfigSectionProps & { index: number }) => {
|
|
51
60
|
const { t } = useTranslation();
|
|
52
61
|
const fieldName = `configTemplates[${index}]`;
|
|
53
62
|
const [
|
|
@@ -60,20 +69,26 @@ const ConfigSection = ({ index, repositories, repoRefetch }: ConfigSectionProps)
|
|
|
60
69
|
|
|
61
70
|
const items = React.useMemo(() => {
|
|
62
71
|
const options = {
|
|
63
|
-
[ConfigType.GIT]: { label: t('Git configuration') },
|
|
64
|
-
[ConfigType.HTTP]: { label: t('Http configuration') },
|
|
65
72
|
[ConfigType.INLINE]: { label: t('Inline configuration') },
|
|
66
73
|
};
|
|
74
|
+
if (canListRepo && (canCreateRepo || repositories.length > 0)) {
|
|
75
|
+
options[ConfigType.GIT] = { label: t('Git configuration') };
|
|
76
|
+
options[ConfigType.HTTP] = { label: t('Http configuration') };
|
|
77
|
+
}
|
|
67
78
|
if (type === ConfigType.K8S_SECRET) {
|
|
68
79
|
options[ConfigType.K8S_SECRET] = { label: t('Kubernetes secret provider') };
|
|
69
80
|
}
|
|
70
81
|
return options;
|
|
71
82
|
// The k8s secret option must remain active for this config even when the users switch the configType to a different one
|
|
72
83
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
73
|
-
}, [t]);
|
|
84
|
+
}, [t, canListRepo]);
|
|
74
85
|
|
|
75
86
|
return (
|
|
76
|
-
<ExpandableFormSection
|
|
87
|
+
<ExpandableFormSection
|
|
88
|
+
title={t('Configuration {{ configNum }}', { configNum: index + 1 })}
|
|
89
|
+
fieldName={fieldName}
|
|
90
|
+
description={name}
|
|
91
|
+
>
|
|
77
92
|
<Grid hasGutter>
|
|
78
93
|
<RichValidationTextField
|
|
79
94
|
fieldName={`${fieldName}.name`}
|
|
@@ -92,6 +107,7 @@ const ConfigSection = ({ index, repositories, repoRefetch }: ConfigSectionProps)
|
|
|
92
107
|
<ConfigWithRepositoryTemplateForm
|
|
93
108
|
repoType={type === ConfigType.HTTP ? RepoSpecType.HTTP : RepoSpecType.GIT}
|
|
94
109
|
index={index}
|
|
110
|
+
canCreateRepo={canCreateRepo}
|
|
95
111
|
repositories={repositories}
|
|
96
112
|
repoRefetch={repoRefetch}
|
|
97
113
|
/>
|
|
@@ -101,16 +117,84 @@ const ConfigSection = ({ index, repositories, repoRefetch }: ConfigSectionProps)
|
|
|
101
117
|
);
|
|
102
118
|
};
|
|
103
119
|
|
|
104
|
-
const
|
|
120
|
+
const ConfigurationTemplatesForm = ({ repositories, repoRefetch, canCreateRepo, canListRepo }: ConfigSectionProps) => {
|
|
105
121
|
const { t } = useTranslation();
|
|
106
122
|
const { values, errors } = useFormikContext<DeviceSpecConfigFormValues>();
|
|
123
|
+
|
|
124
|
+
const generalError = typeof errors.configTemplates === 'string' ? errors.configTemplates : undefined;
|
|
125
|
+
|
|
126
|
+
return (
|
|
127
|
+
<FormGroup
|
|
128
|
+
label={
|
|
129
|
+
<WithHelperText
|
|
130
|
+
ariaLabel={t('Host configurations (files)')}
|
|
131
|
+
content={t(
|
|
132
|
+
"Define configuration files that shall be present on the device's file system. For example: systemd service config, network config, firewall config, etc.",
|
|
133
|
+
)}
|
|
134
|
+
showLabel
|
|
135
|
+
/>
|
|
136
|
+
}
|
|
137
|
+
>
|
|
138
|
+
<FieldArray name="configTemplates">
|
|
139
|
+
{({ push, remove }) => (
|
|
140
|
+
<>
|
|
141
|
+
{values.configTemplates.map((_, index) => (
|
|
142
|
+
<FormSection key={index}>
|
|
143
|
+
<Split hasGutter>
|
|
144
|
+
<SplitItem isFilled>
|
|
145
|
+
<ConfigSection
|
|
146
|
+
index={index}
|
|
147
|
+
canCreateRepo={canCreateRepo}
|
|
148
|
+
repositories={repositories}
|
|
149
|
+
repoRefetch={repoRefetch}
|
|
150
|
+
canListRepo={canListRepo}
|
|
151
|
+
/>
|
|
152
|
+
</SplitItem>
|
|
153
|
+
<SplitItem>
|
|
154
|
+
<Button
|
|
155
|
+
variant="link"
|
|
156
|
+
icon={<MinusCircleIcon />}
|
|
157
|
+
iconPosition="start"
|
|
158
|
+
onClick={() => remove(index)}
|
|
159
|
+
/>
|
|
160
|
+
</SplitItem>
|
|
161
|
+
</Split>
|
|
162
|
+
</FormSection>
|
|
163
|
+
))}
|
|
164
|
+
<FormSection>
|
|
165
|
+
<FormGroup>
|
|
166
|
+
<Button
|
|
167
|
+
variant="link"
|
|
168
|
+
icon={<PlusCircleIcon />}
|
|
169
|
+
iconPosition="start"
|
|
170
|
+
onClick={() => {
|
|
171
|
+
push({
|
|
172
|
+
name: '',
|
|
173
|
+
type: '',
|
|
174
|
+
});
|
|
175
|
+
}}
|
|
176
|
+
>
|
|
177
|
+
{t('Add configuration')}
|
|
178
|
+
</Button>
|
|
179
|
+
</FormGroup>
|
|
180
|
+
</FormSection>
|
|
181
|
+
<ErrorHelperText error={generalError} />
|
|
182
|
+
</>
|
|
183
|
+
)}
|
|
184
|
+
</FieldArray>
|
|
185
|
+
</FormGroup>
|
|
186
|
+
);
|
|
187
|
+
};
|
|
188
|
+
|
|
189
|
+
const ConfigurationTemplates = () => {
|
|
190
|
+
const [canCreateRepo] = useAccessReview(RESOURCE.REPOSITORY, VERB.CREATE);
|
|
107
191
|
const [repositoryList, isLoading, error, refetch] = useFetchPeriodically<RepositoryList>({
|
|
108
192
|
endpoint: 'repositories',
|
|
109
193
|
});
|
|
110
194
|
|
|
111
|
-
const repositories =
|
|
195
|
+
const repositories = repositoryList?.items || [];
|
|
112
196
|
|
|
113
|
-
const
|
|
197
|
+
const { t } = useTranslation();
|
|
114
198
|
|
|
115
199
|
if (error) {
|
|
116
200
|
return (
|
|
@@ -127,48 +211,22 @@ const ConfigTemplateForm = () => {
|
|
|
127
211
|
}
|
|
128
212
|
|
|
129
213
|
return (
|
|
130
|
-
<
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
/>
|
|
146
|
-
</SplitItem>
|
|
147
|
-
</Split>
|
|
148
|
-
</FormSection>
|
|
149
|
-
))}
|
|
150
|
-
<FormSection>
|
|
151
|
-
<FormGroup>
|
|
152
|
-
<Button
|
|
153
|
-
variant="link"
|
|
154
|
-
icon={<PlusCircleIcon />}
|
|
155
|
-
iconPosition="start"
|
|
156
|
-
onClick={() => {
|
|
157
|
-
push({
|
|
158
|
-
name: '',
|
|
159
|
-
type: '',
|
|
160
|
-
});
|
|
161
|
-
}}
|
|
162
|
-
>
|
|
163
|
-
{t('Add configuration')}
|
|
164
|
-
</Button>
|
|
165
|
-
</FormGroup>
|
|
166
|
-
</FormSection>
|
|
167
|
-
<ErrorHelperText error={generalError} />
|
|
168
|
-
</>
|
|
169
|
-
)}
|
|
170
|
-
</FieldArray>
|
|
214
|
+
<ConfigurationTemplatesForm
|
|
215
|
+
canListRepo
|
|
216
|
+
canCreateRepo={canCreateRepo}
|
|
217
|
+
repositories={repositories}
|
|
218
|
+
repoRefetch={refetch}
|
|
219
|
+
/>
|
|
220
|
+
);
|
|
221
|
+
};
|
|
222
|
+
|
|
223
|
+
const ConfigurationTemplatesWithPermissions = () => {
|
|
224
|
+
const [canListRepo] = useAccessReview(RESOURCE.REPOSITORY, VERB.LIST);
|
|
225
|
+
return canListRepo ? (
|
|
226
|
+
<ConfigurationTemplates />
|
|
227
|
+
) : (
|
|
228
|
+
<ConfigurationTemplatesForm canListRepo={false} canCreateRepo={false} repositories={[]} repoRefetch={() => {}} />
|
|
171
229
|
);
|
|
172
230
|
};
|
|
173
231
|
|
|
174
|
-
export default
|
|
232
|
+
export default ConfigurationTemplatesWithPermissions;
|
|
@@ -1,27 +1,117 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import { Alert, CodeBlock, CodeBlockCode, FormGroup, Grid } from '@patternfly/react-core';
|
|
2
|
+
import { Alert, Button, CodeBlock, CodeBlockCode, FormGroup, Grid, Spinner } from '@patternfly/react-core';
|
|
3
3
|
import { FormikErrors, useFormikContext } from 'formik';
|
|
4
4
|
import { Trans } from 'react-i18next';
|
|
5
|
+
import { Repository } from '@flightctl/types';
|
|
6
|
+
import { ExternalLinkAltIcon } from '@patternfly/react-icons/dist/js/icons/external-link-alt-icon';
|
|
5
7
|
|
|
8
|
+
import { USING_TEMPLATE_VARIABLES_LINK } from '../../../../links';
|
|
6
9
|
import { useTranslation } from '../../../../hooks/useTranslation';
|
|
7
10
|
import WithHelperText from '../../../common/WithHelperText';
|
|
11
|
+
import LearnMoreLink from '../../../common/LearnMoreLink';
|
|
8
12
|
import TextField from '../../../form/TextField';
|
|
9
13
|
import FlightCtlForm from '../../../form/FlightCtlForm';
|
|
10
14
|
import { DeviceSpecConfigFormValues } from '../types';
|
|
11
|
-
import
|
|
12
|
-
import ApplicationsForm from './
|
|
15
|
+
import ConfigurationTemplates from './ConfigurationTemplates';
|
|
16
|
+
import ApplicationsForm from './ApplicationTemplates';
|
|
17
|
+
import SystemdUnitsForm from './SystemdUnitsForm';
|
|
18
|
+
import CheckboxField from '../../../form/CheckboxField';
|
|
19
|
+
import { useFetchPeriodically } from '../../../../hooks/useFetchPeriodically';
|
|
20
|
+
import { useAppContext } from '../../../../hooks/useAppContext';
|
|
21
|
+
import { ACM_REPO_NAME } from '../deviceSpecUtils';
|
|
13
22
|
|
|
14
23
|
export const deviceTemplateStepId = 'device-template';
|
|
15
24
|
|
|
16
|
-
export const isDeviceTemplateStepValid = (errors: FormikErrors<DeviceSpecConfigFormValues>) =>
|
|
17
|
-
|
|
18
|
-
|
|
25
|
+
export const isDeviceTemplateStepValid = (errors: FormikErrors<DeviceSpecConfigFormValues>) =>
|
|
26
|
+
!errors.osImage && !errors.configTemplates && !errors.applications && !errors.systemdUnits;
|
|
27
|
+
|
|
28
|
+
const templateOption1 = '{{ .metadata.labels.key }}';
|
|
29
|
+
const templateOption2 = '{{ .metadata.name }}';
|
|
30
|
+
const exampleCode = `/device-configs/deployment-sites/site-{{ .metadata.labels.site }}`;
|
|
19
31
|
|
|
20
|
-
const
|
|
21
|
-
const
|
|
22
|
-
const
|
|
32
|
+
const MicroShiftCheckbox = ({ isFleet }: { isFleet: boolean }) => {
|
|
33
|
+
const { initialValues } = useFormikContext<DeviceSpecConfigFormValues>();
|
|
34
|
+
const { t } = useTranslation();
|
|
35
|
+
|
|
36
|
+
const [repo, loading, error] = useFetchPeriodically<Required<Repository>>({
|
|
37
|
+
endpoint: `repositories/${ACM_REPO_NAME}`,
|
|
38
|
+
});
|
|
39
|
+
if (loading) {
|
|
40
|
+
return <Spinner size="sm" />;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
const isDisabled = !initialValues.registerMicroShift && (!repo || !!error);
|
|
44
|
+
return (
|
|
45
|
+
<>
|
|
46
|
+
<FormGroup>
|
|
47
|
+
<CheckboxField
|
|
48
|
+
name="registerMicroShift"
|
|
49
|
+
label={
|
|
50
|
+
isFleet ? (
|
|
51
|
+
<>
|
|
52
|
+
{t('Register all MicroShift devices to ACM')}
|
|
53
|
+
<WithHelperText
|
|
54
|
+
ariaLabel="MicroShift registration"
|
|
55
|
+
content={
|
|
56
|
+
<>
|
|
57
|
+
{t(
|
|
58
|
+
'Select this when all the devices in the fleet are running MicroShift and you want to register them to ACM.',
|
|
59
|
+
)}
|
|
60
|
+
<br />
|
|
61
|
+
{t(
|
|
62
|
+
"To remove registration, you'll need to uncheck this option and also remove the clusters from ACM's clusters list",
|
|
63
|
+
)}
|
|
64
|
+
</>
|
|
65
|
+
}
|
|
66
|
+
/>
|
|
67
|
+
</>
|
|
68
|
+
) : (
|
|
69
|
+
<>
|
|
70
|
+
{t('Register this MicroShift device to ACM')}
|
|
71
|
+
<WithHelperText
|
|
72
|
+
ariaLabel="MicroShift registration"
|
|
73
|
+
content={
|
|
74
|
+
<>
|
|
75
|
+
{t('Select this when the device is running MicroShift and you want to register it to ACM.')}
|
|
76
|
+
<br />
|
|
77
|
+
{t(
|
|
78
|
+
"To remove registration, you'll need to uncheck this option and also remove the cluster from ACM's clusters list",
|
|
79
|
+
)}
|
|
80
|
+
</>
|
|
81
|
+
}
|
|
82
|
+
/>
|
|
83
|
+
</>
|
|
84
|
+
)
|
|
85
|
+
}
|
|
86
|
+
isDisabled={isDisabled}
|
|
87
|
+
/>
|
|
88
|
+
</FormGroup>
|
|
89
|
+
{isDisabled && (
|
|
90
|
+
<FormGroup>
|
|
91
|
+
<Alert variant="warning" title={t(`'${ACM_REPO_NAME}' repository not found.`)} isInline>
|
|
92
|
+
<Trans t={t}>
|
|
93
|
+
To re-create the repository,{' '}
|
|
94
|
+
<Button
|
|
95
|
+
component="a"
|
|
96
|
+
variant="link"
|
|
97
|
+
isInline
|
|
98
|
+
href="https://github.com/flightctl/flightctl/blob/main/docs/user/registering-microshift-devices-acm.md#creating-repositories-in-flight-control"
|
|
99
|
+
target="_blank"
|
|
100
|
+
icon={<ExternalLinkAltIcon />}
|
|
101
|
+
iconPosition="end"
|
|
102
|
+
>
|
|
103
|
+
View documentation
|
|
104
|
+
</Button>
|
|
105
|
+
</Trans>
|
|
106
|
+
</Alert>
|
|
107
|
+
</FormGroup>
|
|
108
|
+
)}
|
|
109
|
+
</>
|
|
110
|
+
);
|
|
111
|
+
};
|
|
23
112
|
|
|
24
113
|
const DeviceTemplateStep = ({ isFleet }: { isFleet: boolean }) => {
|
|
114
|
+
const { appType } = useAppContext();
|
|
25
115
|
const { t } = useTranslation();
|
|
26
116
|
const { values } = useFormikContext<DeviceSpecConfigFormValues>();
|
|
27
117
|
return (
|
|
@@ -37,6 +127,7 @@ const DeviceTemplateStep = ({ isFleet }: { isFleet: boolean }) => {
|
|
|
37
127
|
<CodeBlock className="pf-v5-u-mt-md">
|
|
38
128
|
<CodeBlockCode>{exampleCode}</CodeBlockCode>
|
|
39
129
|
</CodeBlock>
|
|
130
|
+
<LearnMoreLink link={USING_TEMPLATE_VARIABLES_LINK} />
|
|
40
131
|
</Alert>
|
|
41
132
|
)}
|
|
42
133
|
<FormGroup
|
|
@@ -57,16 +148,22 @@ const DeviceTemplateStep = ({ isFleet }: { isFleet: boolean }) => {
|
|
|
57
148
|
aria-label={t('System image')}
|
|
58
149
|
value={values.osImage}
|
|
59
150
|
helperText={t(
|
|
60
|
-
'Must be
|
|
151
|
+
'Must be a reference to a bootable container image (e.g. "quay.io/<my-org>/my-rhel-with-fc-agent:<version>"). When left empty, the device\'s existing OS will be kept unchanged.',
|
|
61
152
|
)}
|
|
62
153
|
/>
|
|
63
154
|
</FormGroup>
|
|
64
155
|
<FormGroup>
|
|
65
|
-
<
|
|
156
|
+
<ConfigurationTemplates />
|
|
66
157
|
</FormGroup>
|
|
67
158
|
<FormGroup>
|
|
68
159
|
<ApplicationsForm />
|
|
69
160
|
</FormGroup>
|
|
161
|
+
{isFleet && (
|
|
162
|
+
<FormGroup label={t('Tracked systemd services')}>
|
|
163
|
+
<SystemdUnitsForm />
|
|
164
|
+
</FormGroup>
|
|
165
|
+
)}
|
|
166
|
+
{appType === 'ocp' && <MicroShiftCheckbox isFleet={isFleet} />}
|
|
70
167
|
</FlightCtlForm>
|
|
71
168
|
</Grid>
|
|
72
169
|
);
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Label, LabelGroup } from '@patternfly/react-core';
|
|
3
|
+
import { SystemdUnitFormValue } from '../../SystemdUnitsModal/TrackSystemdUnitsForm';
|
|
4
|
+
|
|
5
|
+
const ReviewTrackedSystemdServices = ({ systemdUnits }: { systemdUnits: SystemdUnitFormValue[] }) => {
|
|
6
|
+
if (systemdUnits.length === 0) {
|
|
7
|
+
return '-';
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
return (
|
|
11
|
+
<LabelGroup>
|
|
12
|
+
{systemdUnits.map((systemD, index) => (
|
|
13
|
+
<Label key={`${systemD.pattern}_${index}`}>{systemD.pattern}</Label>
|
|
14
|
+
))}
|
|
15
|
+
</LabelGroup>
|
|
16
|
+
);
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
export default ReviewTrackedSystemdServices;
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { Label, LabelGroup } from '@patternfly/react-core';
|
|
3
|
+
import { useFormikContext } from 'formik';
|
|
4
|
+
|
|
5
|
+
import { DeviceSpecConfigFormValues } from '../types';
|
|
6
|
+
import { useTranslation } from '../../../../hooks/useTranslation';
|
|
7
|
+
|
|
8
|
+
import ErrorHelperText from '../../../form/FieldHelperText';
|
|
9
|
+
import EditableLabelControl from '../../../common/EditableLabelControl';
|
|
10
|
+
|
|
11
|
+
const SystemdUnitsForm = () => {
|
|
12
|
+
const { t } = useTranslation();
|
|
13
|
+
const { values, setFieldValue, errors } = useFormikContext<DeviceSpecConfigFormValues>();
|
|
14
|
+
|
|
15
|
+
const onAdd = (text: string) => {
|
|
16
|
+
void setFieldValue(
|
|
17
|
+
'systemdUnits',
|
|
18
|
+
values.systemdUnits.concat({
|
|
19
|
+
pattern: text,
|
|
20
|
+
exists: false,
|
|
21
|
+
}),
|
|
22
|
+
);
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
const onEdit = (editIndex: number, text: string) => {
|
|
26
|
+
void setFieldValue(
|
|
27
|
+
'systemdUnits',
|
|
28
|
+
values.systemdUnits.map((systemdUnit, index) => {
|
|
29
|
+
if (index === editIndex) {
|
|
30
|
+
return { pattern: text, exists: systemdUnit.exists };
|
|
31
|
+
} else {
|
|
32
|
+
return systemdUnit;
|
|
33
|
+
}
|
|
34
|
+
}),
|
|
35
|
+
);
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
const removeLabel = (removeIndex: number) => {
|
|
39
|
+
void setFieldValue(
|
|
40
|
+
'systemdUnits',
|
|
41
|
+
values.systemdUnits.filter((_, index) => index !== removeIndex),
|
|
42
|
+
);
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
const textError = typeof errors.systemdUnits === 'string' ? errors.systemdUnits : undefined;
|
|
46
|
+
return (
|
|
47
|
+
<>
|
|
48
|
+
<LabelGroup
|
|
49
|
+
isEditable
|
|
50
|
+
addLabelControl={
|
|
51
|
+
<EditableLabelControl
|
|
52
|
+
defaultLabel="name.service"
|
|
53
|
+
addButtonText={t('Add service')}
|
|
54
|
+
onAddLabel={onAdd}
|
|
55
|
+
isEditable
|
|
56
|
+
/>
|
|
57
|
+
}
|
|
58
|
+
>
|
|
59
|
+
{values.systemdUnits.map((systemD, index) => (
|
|
60
|
+
<Label
|
|
61
|
+
key={`${systemD.pattern}-${index}`}
|
|
62
|
+
isEditable
|
|
63
|
+
onEditComplete={(_, newText) => onEdit(index, newText)}
|
|
64
|
+
onClose={() => removeLabel(index)}
|
|
65
|
+
>
|
|
66
|
+
{systemD.pattern}
|
|
67
|
+
</Label>
|
|
68
|
+
))}
|
|
69
|
+
</LabelGroup>
|
|
70
|
+
<ErrorHelperText error={textError} />
|
|
71
|
+
</>
|
|
72
|
+
);
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
export default SystemdUnitsForm;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { ApplicationSpec } from '@flightctl/types';
|
|
2
2
|
import { FlightCtlLabel } from '../../../types/extraTypes';
|
|
3
3
|
import { SpecConfigTemplate } from '../../../types/deviceSpec';
|
|
4
|
+
import { SystemdUnitFormValue } from '../SystemdUnitsModal/TrackSystemdUnitsForm';
|
|
4
5
|
|
|
5
6
|
export type ApplicationFormSpec = Omit<ApplicationSpec, 'envVars'> & {
|
|
6
7
|
variables: { name: string; value: string }[];
|
|
@@ -10,6 +11,8 @@ export type DeviceSpecConfigFormValues = {
|
|
|
10
11
|
osImage?: string;
|
|
11
12
|
configTemplates: SpecConfigTemplate[];
|
|
12
13
|
applications: ApplicationFormSpec[];
|
|
14
|
+
systemdUnits: SystemdUnitFormValue[];
|
|
15
|
+
registerMicroShift: boolean;
|
|
13
16
|
};
|
|
14
17
|
|
|
15
18
|
export type EditDeviceFormValues = DeviceSpecConfigFormValues & {
|
|
@@ -2,22 +2,28 @@ import { TFunction } from 'i18next';
|
|
|
2
2
|
import * as Yup from 'yup';
|
|
3
3
|
|
|
4
4
|
import {
|
|
5
|
-
maxLengthString,
|
|
6
5
|
validApplicationsSchema,
|
|
7
6
|
validConfigTemplatesSchema,
|
|
8
7
|
validKubernetesLabelValue,
|
|
9
8
|
validLabelsSchema,
|
|
9
|
+
validOsImage,
|
|
10
10
|
} from '../../form/validations';
|
|
11
11
|
import { appendJSONPatch, getApplicationPatches, getLabelPatches } from '../../../utils/patch';
|
|
12
12
|
import { Device, PatchRequest } from '@flightctl/types';
|
|
13
13
|
import { EditDeviceFormValues } from './types';
|
|
14
|
-
import {
|
|
14
|
+
import {
|
|
15
|
+
ACMCrdConfig,
|
|
16
|
+
ACMImportConfig,
|
|
17
|
+
MicroshiftRegistrationHook,
|
|
18
|
+
getAPIConfig,
|
|
19
|
+
getDeviceSpecConfigPatches,
|
|
20
|
+
} from './deviceSpecUtils';
|
|
15
21
|
|
|
16
22
|
export const getValidationSchema = (t: TFunction) =>
|
|
17
23
|
Yup.lazy(() =>
|
|
18
24
|
Yup.object({
|
|
19
25
|
deviceAlias: validKubernetesLabelValue(t, { isRequired: false, fieldName: t('Alias') }),
|
|
20
|
-
osImage:
|
|
26
|
+
osImage: validOsImage(t, { isFleet: false }),
|
|
21
27
|
labels: validLabelsSchema(t),
|
|
22
28
|
configTemplates: validConfigTemplatesSchema(t),
|
|
23
29
|
applications: validApplicationsSchema(t),
|
|
@@ -29,7 +35,8 @@ export const getDevicePatches = (currentDevice: Device, updatedDevice: EditDevic
|
|
|
29
35
|
|
|
30
36
|
// Device labels
|
|
31
37
|
const currentLabels = currentDevice.metadata.labels || {};
|
|
32
|
-
const updatedLabels = updatedDevice.labels
|
|
38
|
+
const updatedLabels = [...updatedDevice.labels];
|
|
39
|
+
|
|
33
40
|
if (updatedDevice.deviceAlias) {
|
|
34
41
|
updatedLabels.push({ key: 'alias', value: updatedDevice.deviceAlias });
|
|
35
42
|
}
|
|
@@ -68,6 +75,9 @@ export const getDevicePatches = (currentDevice: Device, updatedDevice: EditDevic
|
|
|
68
75
|
// Configurations
|
|
69
76
|
const currentConfigs = currentDevice.spec?.config || [];
|
|
70
77
|
const newConfigs = updatedDevice.configTemplates.map(getAPIConfig);
|
|
78
|
+
if (updatedDevice.registerMicroShift) {
|
|
79
|
+
newConfigs.push(ACMCrdConfig, ACMImportConfig, MicroshiftRegistrationHook);
|
|
80
|
+
}
|
|
71
81
|
const configPatches = getDeviceSpecConfigPatches(currentConfigs, newConfigs, '/spec/config');
|
|
72
82
|
allPatches = allPatches.concat(configPatches);
|
|
73
83
|
|
|
@@ -1,16 +1,17 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { Formik } from 'formik';
|
|
1
3
|
import { Modal } from '@patternfly/react-core';
|
|
2
4
|
import { Device } from '@flightctl/types';
|
|
3
|
-
|
|
4
|
-
import * as React from 'react';
|
|
5
|
-
import MatchPatternsForm, { MatchPatternsFormValues } from './MatchPatternsForm';
|
|
5
|
+
|
|
6
6
|
import { useFetch } from '../../../hooks/useFetch';
|
|
7
|
+
import { useTranslation } from '../../../hooks/useTranslation';
|
|
7
8
|
import { getErrorMessage } from '../../../utils/error';
|
|
8
9
|
import { getStringListPatches } from '../../../utils/patch';
|
|
9
|
-
import { useTranslation } from '../../../hooks/useTranslation';
|
|
10
10
|
import { deviceSystemdUnitsValidationSchema } from '../../form/validations';
|
|
11
|
+
import TrackSystemdUnitsForm, { SystemdUnitFormValue, SystemdUnitsFormValues } from './TrackSystemdUnitsForm';
|
|
11
12
|
|
|
12
|
-
type
|
|
13
|
-
onClose: (
|
|
13
|
+
type SystemdUnitsModalProps = {
|
|
14
|
+
onClose: (hasChanges?: boolean, addedSystemdUnits?: string[]) => void;
|
|
14
15
|
device: Device;
|
|
15
16
|
};
|
|
16
17
|
|
|
@@ -22,41 +23,57 @@ type MatchPatternsModalProps = {
|
|
|
22
23
|
* @param device FlightCtl device
|
|
23
24
|
* @param onClose on close callback
|
|
24
25
|
*/
|
|
25
|
-
const
|
|
26
|
+
const SystemdUnitsModal: React.FC<SystemdUnitsModalProps> = ({ onClose, device }) => {
|
|
26
27
|
const { t } = useTranslation();
|
|
27
28
|
const { patch } = useFetch();
|
|
28
29
|
const [error, setError] = React.useState<string>();
|
|
29
30
|
|
|
30
|
-
const
|
|
31
|
+
const currentSystemdUnits: SystemdUnitFormValue[] = (device.spec?.systemd?.matchPatterns || []).map((p) => ({
|
|
32
|
+
pattern: p,
|
|
33
|
+
exists: true,
|
|
34
|
+
}));
|
|
35
|
+
|
|
31
36
|
return (
|
|
32
|
-
<Modal title={t('
|
|
33
|
-
<Formik<
|
|
37
|
+
<Modal title={t('Track systemd services')} isOpen onClose={() => onClose()} variant="small">
|
|
38
|
+
<Formik<SystemdUnitsFormValues>
|
|
34
39
|
validationSchema={deviceSystemdUnitsValidationSchema(t)}
|
|
35
|
-
initialValues={{
|
|
36
|
-
onSubmit={async ({
|
|
40
|
+
initialValues={{ systemdUnits: currentSystemdUnits }}
|
|
41
|
+
onSubmit={async ({ systemdUnits: updatedSystemdUnits }) => {
|
|
37
42
|
try {
|
|
38
|
-
const
|
|
39
|
-
|
|
40
|
-
|
|
43
|
+
const currentPatterns = currentSystemdUnits.map((p) => p.pattern);
|
|
44
|
+
const updatedPatterns = updatedSystemdUnits.map((p) => p.pattern);
|
|
45
|
+
|
|
41
46
|
const patches = getStringListPatches(
|
|
42
47
|
'/spec/systemd',
|
|
43
48
|
currentPatterns,
|
|
44
49
|
updatedPatterns,
|
|
45
|
-
|
|
50
|
+
(value: string[]) => ({
|
|
51
|
+
matchPatterns: value,
|
|
52
|
+
}),
|
|
46
53
|
);
|
|
47
54
|
if (patches.length > 0) {
|
|
48
55
|
await patch(`devices/${device.metadata.name}`, patches);
|
|
56
|
+
|
|
57
|
+
const addedServices: string[] = [];
|
|
58
|
+
updatedPatterns.forEach((newSystemd) => {
|
|
59
|
+
if (!currentPatterns.includes(newSystemd)) {
|
|
60
|
+
addedServices.push(newSystemd);
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
onClose(true, addedServices);
|
|
65
|
+
} else {
|
|
66
|
+
onClose();
|
|
49
67
|
}
|
|
50
|
-
onClose(true);
|
|
51
68
|
} catch (err) {
|
|
52
69
|
setError(getErrorMessage(err));
|
|
53
70
|
}
|
|
54
71
|
}}
|
|
55
72
|
>
|
|
56
|
-
<
|
|
73
|
+
<TrackSystemdUnitsForm onClose={onClose} error={error} />
|
|
57
74
|
</Formik>
|
|
58
75
|
</Modal>
|
|
59
76
|
);
|
|
60
77
|
};
|
|
61
78
|
|
|
62
|
-
export default
|
|
79
|
+
export default SystemdUnitsModal;
|