@flightctl/ui-components 0.5.1 → 0.6.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.
Files changed (456) hide show
  1. package/dist/src/components/DetailsPage/DetailsPage.d.ts +3 -2
  2. package/dist/src/components/DetailsPage/DetailsPage.d.ts.map +1 -1
  3. package/dist/src/components/DetailsPage/DetailsPage.js +2 -2
  4. package/dist/src/components/DetailsPage/DetailsPage.js.map +1 -1
  5. package/dist/src/components/DetailsPage/Tables/ApplicationsTable.d.ts.map +1 -1
  6. package/dist/src/components/DetailsPage/Tables/ApplicationsTable.js +5 -3
  7. package/dist/src/components/DetailsPage/Tables/ApplicationsTable.js.map +1 -1
  8. package/dist/src/components/Device/AddDeviceModal/AddDeviceModal.d.ts.map +1 -1
  9. package/dist/src/components/Device/AddDeviceModal/AddDeviceModal.js +4 -5
  10. package/dist/src/components/Device/AddDeviceModal/AddDeviceModal.js.map +1 -1
  11. package/dist/src/components/Device/DeviceDetails/DeviceAliasEdit.d.ts +10 -0
  12. package/dist/src/components/Device/DeviceDetails/DeviceAliasEdit.d.ts.map +1 -0
  13. package/dist/src/components/Device/DeviceDetails/DeviceAliasEdit.js +110 -0
  14. package/dist/src/components/Device/DeviceDetails/DeviceAliasEdit.js.map +1 -0
  15. package/dist/src/components/Device/DeviceDetails/DeviceApplications.d.ts.map +1 -1
  16. package/dist/src/components/Device/DeviceDetails/DeviceApplications.js +7 -1
  17. package/dist/src/components/Device/DeviceDetails/DeviceApplications.js.map +1 -1
  18. package/dist/src/components/Device/DeviceDetails/DeviceDetailsPage.d.ts.map +1 -1
  19. package/dist/src/components/Device/DeviceDetails/DeviceDetailsPage.js +9 -6
  20. package/dist/src/components/Device/DeviceDetails/DeviceDetailsPage.js.map +1 -1
  21. package/dist/src/components/Device/DeviceDetails/DeviceDetailsTab.d.ts.map +1 -1
  22. package/dist/src/components/Device/DeviceDetails/DeviceDetailsTab.js +1 -1
  23. package/dist/src/components/Device/DeviceDetails/DeviceDetailsTab.js.map +1 -1
  24. package/dist/src/components/Device/DeviceDetails/DeviceDetailsTabContent/StatusContent.d.ts.map +1 -1
  25. package/dist/src/components/Device/DeviceDetails/DeviceDetailsTabContent/StatusContent.js +3 -3
  26. package/dist/src/components/Device/DeviceDetails/DeviceDetailsTabContent/StatusContent.js.map +1 -1
  27. package/dist/src/components/Device/DeviceDetails/DeviceDetailsTabContent/SystemResourcesContent.js +3 -3
  28. package/dist/src/components/Device/DeviceDetails/TerminalTab.d.ts.map +1 -1
  29. package/dist/src/components/Device/DeviceDetails/TerminalTab.js +34 -3
  30. package/dist/src/components/Device/DeviceDetails/TerminalTab.js.map +1 -1
  31. package/dist/src/components/Device/DevicesPage/DecommissionedDevicesTable.d.ts.map +1 -1
  32. package/dist/src/components/Device/DevicesPage/DecommissionedDevicesTable.js +1 -1
  33. package/dist/src/components/Device/DevicesPage/DecommissionedDevicesTable.js.map +1 -1
  34. package/dist/src/components/Device/DevicesPage/DeviceToolbarFilters.d.ts.map +1 -1
  35. package/dist/src/components/Device/DevicesPage/DeviceToolbarFilters.js +35 -30
  36. package/dist/src/components/Device/DevicesPage/DeviceToolbarFilters.js.map +1 -1
  37. package/dist/src/components/Device/DevicesPage/DevicesPage.d.ts.map +1 -1
  38. package/dist/src/components/Device/DevicesPage/DevicesPage.js +11 -2
  39. package/dist/src/components/Device/DevicesPage/DevicesPage.js.map +1 -1
  40. package/dist/src/components/Device/DevicesPage/EnrolledDevicesTable.d.ts.map +1 -1
  41. package/dist/src/components/Device/DevicesPage/EnrolledDevicesTable.js +14 -11
  42. package/dist/src/components/Device/DevicesPage/EnrolledDevicesTable.js.map +1 -1
  43. package/dist/src/components/Device/EditDeviceWizard/EditDeviceWizard.d.ts.map +1 -1
  44. package/dist/src/components/Device/EditDeviceWizard/EditDeviceWizard.js +9 -2
  45. package/dist/src/components/Device/EditDeviceWizard/EditDeviceWizard.js.map +1 -1
  46. package/dist/src/components/Device/EditDeviceWizard/EditDeviceWizardFooter.d.ts.map +1 -1
  47. package/dist/src/components/Device/EditDeviceWizard/EditDeviceWizardFooter.js +21 -6
  48. package/dist/src/components/Device/EditDeviceWizard/EditDeviceWizardFooter.js.map +1 -1
  49. package/dist/src/components/Device/EditDeviceWizard/EditDeviceWizardNav.d.ts.map +1 -1
  50. package/dist/src/components/Device/EditDeviceWizard/EditDeviceWizardNav.js +11 -4
  51. package/dist/src/components/Device/EditDeviceWizard/EditDeviceWizardNav.js.map +1 -1
  52. package/dist/src/components/Device/EditDeviceWizard/deviceSpecUtils.d.ts +6 -5
  53. package/dist/src/components/Device/EditDeviceWizard/deviceSpecUtils.d.ts.map +1 -1
  54. package/dist/src/components/Device/EditDeviceWizard/deviceSpecUtils.js +123 -10
  55. package/dist/src/components/Device/EditDeviceWizard/deviceSpecUtils.js.map +1 -1
  56. package/dist/src/components/Device/EditDeviceWizard/steps/ApplicationImageForm.d.ts +8 -0
  57. package/dist/src/components/Device/EditDeviceWizard/steps/ApplicationImageForm.d.ts.map +1 -0
  58. package/dist/src/components/Device/EditDeviceWizard/steps/ApplicationImageForm.js +19 -0
  59. package/dist/src/components/Device/EditDeviceWizard/steps/ApplicationImageForm.js.map +1 -0
  60. package/dist/src/components/Device/EditDeviceWizard/steps/ApplicationInlineForm.d.ts +8 -0
  61. package/dist/src/components/Device/EditDeviceWizard/steps/ApplicationInlineForm.d.ts.map +1 -0
  62. package/dist/src/components/Device/EditDeviceWizard/steps/ApplicationInlineForm.js +49 -0
  63. package/dist/src/components/Device/EditDeviceWizard/steps/ApplicationInlineForm.js.map +1 -0
  64. package/dist/src/components/Device/EditDeviceWizard/steps/ApplicationTemplates.d.ts.map +1 -1
  65. package/dist/src/components/Device/EditDeviceWizard/steps/ApplicationTemplates.js +52 -19
  66. package/dist/src/components/Device/EditDeviceWizard/steps/ApplicationTemplates.js.map +1 -1
  67. package/dist/src/components/Device/EditDeviceWizard/steps/ConfigInlineTemplateForm.d.ts.map +1 -1
  68. package/dist/src/components/Device/EditDeviceWizard/steps/ConfigInlineTemplateForm.js +13 -16
  69. package/dist/src/components/Device/EditDeviceWizard/steps/ConfigInlineTemplateForm.js.map +1 -1
  70. package/dist/src/components/Device/EditDeviceWizard/steps/ConfigK8sSecretTemplateForm.d.ts.map +1 -1
  71. package/dist/src/components/Device/EditDeviceWizard/steps/ConfigK8sSecretTemplateForm.js.map +1 -1
  72. package/dist/src/components/Device/EditDeviceWizard/steps/ConfigWithRepositoryTemplateForm.d.ts.map +1 -1
  73. package/dist/src/components/Device/EditDeviceWizard/steps/ConfigWithRepositoryTemplateForm.js +5 -5
  74. package/dist/src/components/Device/EditDeviceWizard/steps/ConfigWithRepositoryTemplateForm.js.map +1 -1
  75. package/dist/src/components/Device/EditDeviceWizard/steps/ConfigurationTemplates.d.ts.map +1 -1
  76. package/dist/src/components/Device/EditDeviceWizard/steps/ConfigurationTemplates.js +2 -2
  77. package/dist/src/components/Device/EditDeviceWizard/steps/ConfigurationTemplates.js.map +1 -1
  78. package/dist/src/components/Device/EditDeviceWizard/steps/DeviceTemplateStep.d.ts +1 -1
  79. package/dist/src/components/Device/EditDeviceWizard/steps/DeviceTemplateStep.d.ts.map +1 -1
  80. package/dist/src/components/Device/EditDeviceWizard/steps/DeviceTemplateStep.js +16 -16
  81. package/dist/src/components/Device/EditDeviceWizard/steps/DeviceTemplateStep.js.map +1 -1
  82. package/dist/src/components/Device/EditDeviceWizard/steps/DeviceUpdateStep.d.ts +8 -0
  83. package/dist/src/components/Device/EditDeviceWizard/steps/DeviceUpdateStep.d.ts.map +1 -0
  84. package/dist/src/components/Device/EditDeviceWizard/steps/DeviceUpdateStep.js +58 -0
  85. package/dist/src/components/Device/EditDeviceWizard/steps/DeviceUpdateStep.js.map +1 -0
  86. package/dist/src/components/Device/EditDeviceWizard/steps/GeneralInfoStep.d.ts +1 -1
  87. package/dist/src/components/Device/EditDeviceWizard/steps/GeneralInfoStep.d.ts.map +1 -1
  88. package/dist/src/components/Device/EditDeviceWizard/steps/ReviewApplications.d.ts +2 -2
  89. package/dist/src/components/Device/EditDeviceWizard/steps/ReviewApplications.d.ts.map +1 -1
  90. package/dist/src/components/Device/EditDeviceWizard/steps/ReviewApplications.js +17 -12
  91. package/dist/src/components/Device/EditDeviceWizard/steps/ReviewApplications.js.map +1 -1
  92. package/dist/src/components/Device/EditDeviceWizard/steps/ReviewDeviceStep.js +1 -1
  93. package/dist/src/components/Device/EditDeviceWizard/steps/ReviewTrackedSystemdServices.d.ts +2 -4
  94. package/dist/src/components/Device/EditDeviceWizard/steps/ReviewTrackedSystemdServices.d.ts.map +1 -1
  95. package/dist/src/components/Device/EditDeviceWizard/steps/ReviewTrackedSystemdServices.js.map +1 -1
  96. package/dist/src/components/Device/EditDeviceWizard/steps/ReviewUpdatePolicy.d.ts +1 -1
  97. package/dist/src/components/Device/EditDeviceWizard/steps/ReviewUpdatePolicy.d.ts.map +1 -1
  98. package/dist/src/components/Device/EditDeviceWizard/steps/ReviewUpdatePolicy.js.map +1 -1
  99. package/dist/src/components/Device/EditDeviceWizard/utils.d.ts +29 -3
  100. package/dist/src/components/Device/EditDeviceWizard/utils.d.ts.map +1 -1
  101. package/dist/src/components/Device/EditDeviceWizard/utils.js +8 -7
  102. package/dist/src/components/Device/EditDeviceWizard/utils.js.map +1 -1
  103. package/dist/src/components/Device/SystemdUnitsModal/SystemdUnitsModal.d.ts.map +1 -1
  104. package/dist/src/components/Device/SystemdUnitsModal/SystemdUnitsModal.js.map +1 -1
  105. package/dist/src/components/Device/SystemdUnitsModal/TrackSystemdUnitsForm.d.ts +1 -4
  106. package/dist/src/components/Device/SystemdUnitsModal/TrackSystemdUnitsForm.d.ts.map +1 -1
  107. package/dist/src/components/Device/SystemdUnitsModal/TrackSystemdUnitsForm.js.map +1 -1
  108. package/dist/src/components/EnrollmentRequest/EnrollmentRequestDetails/EnrollmentRequestDetails.d.ts.map +1 -1
  109. package/dist/src/components/EnrollmentRequest/EnrollmentRequestDetails/EnrollmentRequestDetails.js +5 -5
  110. package/dist/src/components/EnrollmentRequest/EnrollmentRequestDetails/EnrollmentRequestDetails.js.map +1 -1
  111. package/dist/src/components/EnrollmentRequest/EnrollmentRequestList.d.ts +2 -1
  112. package/dist/src/components/EnrollmentRequest/EnrollmentRequestList.d.ts.map +1 -1
  113. package/dist/src/components/EnrollmentRequest/EnrollmentRequestList.js +19 -11
  114. package/dist/src/components/EnrollmentRequest/EnrollmentRequestList.js.map +1 -1
  115. package/dist/src/components/EnrollmentRequest/EnrollmentRequestTableRow.d.ts.map +1 -1
  116. package/dist/src/components/EnrollmentRequest/EnrollmentRequestTableRow.js +5 -1
  117. package/dist/src/components/EnrollmentRequest/EnrollmentRequestTableRow.js.map +1 -1
  118. package/dist/src/components/EnrollmentRequest/useEnrollmentRequests.d.ts +2 -1
  119. package/dist/src/components/EnrollmentRequest/useEnrollmentRequests.d.ts.map +1 -1
  120. package/dist/src/components/EnrollmentRequest/useEnrollmentRequests.js +8 -4
  121. package/dist/src/components/EnrollmentRequest/useEnrollmentRequests.js.map +1 -1
  122. package/dist/src/components/Fleet/CreateFleet/CreateFleetWizard.d.ts.map +1 -1
  123. package/dist/src/components/Fleet/CreateFleet/CreateFleetWizard.js +2 -2
  124. package/dist/src/components/Fleet/CreateFleet/CreateFleetWizard.js.map +1 -1
  125. package/dist/src/components/Fleet/CreateFleet/CreateFleetWizardFooter.d.ts.map +1 -1
  126. package/dist/src/components/Fleet/CreateFleet/CreateFleetWizardFooter.js +8 -1
  127. package/dist/src/components/Fleet/CreateFleet/CreateFleetWizardFooter.js.map +1 -1
  128. package/dist/src/components/Fleet/CreateFleet/fleetSpecUtils.d.ts +19 -2
  129. package/dist/src/components/Fleet/CreateFleet/fleetSpecUtils.d.ts.map +1 -1
  130. package/dist/src/components/Fleet/CreateFleet/fleetSpecUtils.js +53 -18
  131. package/dist/src/components/Fleet/CreateFleet/fleetSpecUtils.js.map +1 -1
  132. package/dist/src/components/Fleet/CreateFleet/steps/DeviceLabelSelector.js +1 -1
  133. package/dist/src/components/Fleet/CreateFleet/steps/DeviceLabelSelector.js.map +1 -1
  134. package/dist/src/components/Fleet/CreateFleet/steps/GeneralInfoStep.d.ts +1 -1
  135. package/dist/src/components/Fleet/CreateFleet/steps/GeneralInfoStep.d.ts.map +1 -1
  136. package/dist/src/components/Fleet/CreateFleet/steps/GeneralInfoStep.js +1 -2
  137. package/dist/src/components/Fleet/CreateFleet/steps/GeneralInfoStep.js.map +1 -1
  138. package/dist/src/components/Fleet/CreateFleet/steps/ReviewStep.js +1 -1
  139. package/dist/src/components/Fleet/CreateFleet/steps/UpdateConfirmChangesModal.d.ts +1 -1
  140. package/dist/src/components/Fleet/CreateFleet/steps/UpdateConfirmChangesModal.d.ts.map +1 -1
  141. package/dist/src/components/Fleet/CreateFleet/steps/UpdateConfirmChangesModal.js +9 -0
  142. package/dist/src/components/Fleet/CreateFleet/steps/UpdateConfirmChangesModal.js.map +1 -1
  143. package/dist/src/components/Fleet/CreateFleet/steps/UpdatePolicyStep.d.ts +1 -1
  144. package/dist/src/components/Fleet/CreateFleet/steps/UpdatePolicyStep.d.ts.map +1 -1
  145. package/dist/src/components/Fleet/CreateFleet/steps/UpdatePolicyStep.js +22 -9
  146. package/dist/src/components/Fleet/CreateFleet/steps/UpdatePolicyStep.js.map +1 -1
  147. package/dist/src/components/Fleet/CreateFleet/steps/UpdateStepDisruptionBudget.d.ts.map +1 -1
  148. package/dist/src/components/Fleet/CreateFleet/steps/UpdateStepDisruptionBudget.js +4 -4
  149. package/dist/src/components/Fleet/CreateFleet/steps/UpdateStepDisruptionBudget.js.map +1 -1
  150. package/dist/src/components/Fleet/CreateFleet/steps/UpdateStepRolloutPolicy.d.ts.map +1 -1
  151. package/dist/src/components/Fleet/CreateFleet/steps/UpdateStepRolloutPolicy.js +5 -5
  152. package/dist/src/components/Fleet/CreateFleet/steps/UpdateStepRolloutPolicy.js.map +1 -1
  153. package/dist/src/components/Fleet/CreateFleet/steps/UpdateStepUpdatePolicy.css +3 -0
  154. package/dist/src/components/Fleet/CreateFleet/steps/UpdateStepUpdatePolicy.d.ts +9 -0
  155. package/dist/src/components/Fleet/CreateFleet/steps/UpdateStepUpdatePolicy.d.ts.map +1 -0
  156. package/dist/src/components/Fleet/CreateFleet/steps/UpdateStepUpdatePolicy.js +127 -0
  157. package/dist/src/components/Fleet/CreateFleet/steps/UpdateStepUpdatePolicy.js.map +1 -0
  158. package/dist/src/components/Fleet/CreateFleet/utils.d.ts +1 -1
  159. package/dist/src/components/Fleet/CreateFleet/utils.d.ts.map +1 -1
  160. package/dist/src/components/Fleet/CreateFleet/utils.js +13 -4
  161. package/dist/src/components/Fleet/CreateFleet/utils.js.map +1 -1
  162. package/dist/src/components/Fleet/FleetsPage.d.ts.map +1 -1
  163. package/dist/src/components/Fleet/FleetsPage.js +8 -12
  164. package/dist/src/components/Fleet/FleetsPage.js.map +1 -1
  165. package/dist/src/components/Fleet/ImportFleetWizard/steps/ResourceSyncStep.js +1 -1
  166. package/dist/src/components/Fleet/ImportFleetWizard/steps/ResourceSyncStep.js.map +1 -1
  167. package/dist/src/components/ListPage/ListPage.d.ts +1 -0
  168. package/dist/src/components/ListPage/ListPage.d.ts.map +1 -1
  169. package/dist/src/components/ListPage/ListPage.js +3 -3
  170. package/dist/src/components/ListPage/ListPage.js.map +1 -1
  171. package/dist/src/components/Masthead/CommandLineToolsPage.d.ts +4 -0
  172. package/dist/src/components/Masthead/CommandLineToolsPage.d.ts.map +1 -0
  173. package/dist/src/components/Masthead/CommandLineToolsPage.js +90 -0
  174. package/dist/src/components/Masthead/CommandLineToolsPage.js.map +1 -0
  175. package/dist/src/components/Masthead/UserPreferencesModal.d.ts.map +1 -0
  176. package/dist/src/components/Masthead/UserPreferencesModal.js.map +1 -0
  177. package/dist/src/components/Masthead/UserPreferencesProvider.d.ts.map +1 -0
  178. package/dist/src/components/Masthead/UserPreferencesProvider.js.map +1 -0
  179. package/dist/src/components/OverviewPage/Cards/Status/StatusCard.js +3 -3
  180. package/dist/src/components/OverviewPage/Cards/Status/StatusCard.js.map +1 -1
  181. package/dist/src/components/OverviewPage/Cards/Tasks/TasksCard.d.ts +4 -0
  182. package/dist/src/components/OverviewPage/Cards/Tasks/TasksCard.d.ts.map +1 -0
  183. package/dist/src/components/OverviewPage/Cards/{ToDo/ToDoCard.js → Tasks/TasksCard.js} +4 -4
  184. package/dist/src/components/OverviewPage/Cards/Tasks/TasksCard.js.map +1 -0
  185. package/dist/src/components/OverviewPage/Overview.js +2 -2
  186. package/dist/src/components/OverviewPage/Overview.js.map +1 -1
  187. package/dist/src/components/Repository/CreateRepository/CreateRepositoryForm.d.ts.map +1 -1
  188. package/dist/src/components/Repository/CreateRepository/CreateRepositoryForm.js +6 -5
  189. package/dist/src/components/Repository/CreateRepository/CreateRepositoryForm.js.map +1 -1
  190. package/dist/src/components/Repository/CreateRepository/CreateResourceSyncsForm.d.ts.map +1 -1
  191. package/dist/src/components/Repository/CreateRepository/CreateResourceSyncsForm.js +3 -3
  192. package/dist/src/components/Repository/CreateRepository/CreateResourceSyncsForm.js.map +1 -1
  193. package/dist/src/components/Repository/CreateRepository/utils.d.ts.map +1 -1
  194. package/dist/src/components/Repository/CreateRepository/utils.js +4 -1
  195. package/dist/src/components/Repository/CreateRepository/utils.js.map +1 -1
  196. package/dist/src/components/Repository/RepositoryDetails/RepositoryResourceSyncsCard.d.ts.map +1 -1
  197. package/dist/src/components/Repository/RepositoryDetails/RepositoryResourceSyncsCard.js +1 -1
  198. package/dist/src/components/Repository/RepositoryDetails/RepositoryResourceSyncsCard.js.map +1 -1
  199. package/dist/src/components/Repository/RepositoryList.d.ts.map +1 -1
  200. package/dist/src/components/Repository/RepositoryList.js +3 -11
  201. package/dist/src/components/Repository/RepositoryList.js.map +1 -1
  202. package/dist/src/components/ResourceSync/RepositoryResourceSyncList.d.ts.map +1 -1
  203. package/dist/src/components/ResourceSync/RepositoryResourceSyncList.js +3 -6
  204. package/dist/src/components/ResourceSync/RepositoryResourceSyncList.js.map +1 -1
  205. package/dist/src/components/Status/DeviceResourceStatus.js +3 -3
  206. package/dist/src/components/Status/utils.d.ts.map +1 -1
  207. package/dist/src/components/Status/utils.js +3 -3
  208. package/dist/src/components/Status/utils.js.map +1 -1
  209. package/dist/src/components/Table/Table.d.ts +2 -1
  210. package/dist/src/components/Table/Table.d.ts.map +1 -1
  211. package/dist/src/components/Table/Table.js +9 -5
  212. package/dist/src/components/Table/Table.js.map +1 -1
  213. package/dist/src/components/Table/TablePagination.d.ts.map +1 -1
  214. package/dist/src/components/Table/TablePagination.js +1 -1
  215. package/dist/src/components/Table/TablePagination.js.map +1 -1
  216. package/dist/src/components/Terminal/Terminal.d.ts +1 -1
  217. package/dist/src/components/Terminal/Terminal.d.ts.map +1 -1
  218. package/dist/src/components/Terminal/Terminal.js +10 -3
  219. package/dist/src/components/Terminal/Terminal.js.map +1 -1
  220. package/dist/src/components/charts/DonutChart.js +1 -1
  221. package/dist/src/components/charts/DonutChart.js.map +1 -1
  222. package/dist/src/components/common/LeaveFormConfirmation.js +1 -1
  223. package/dist/src/components/common/LeaveFormConfirmation.js.map +1 -1
  224. package/dist/src/components/common/WithHelperText.d.ts +10 -5
  225. package/dist/src/components/common/WithHelperText.d.ts.map +1 -1
  226. package/dist/src/components/common/WithHelperText.js +13 -8
  227. package/dist/src/components/common/WithHelperText.js.map +1 -1
  228. package/dist/src/components/form/CheckboxField.d.ts +6 -3
  229. package/dist/src/components/form/CheckboxField.d.ts.map +1 -1
  230. package/dist/src/components/form/CheckboxField.js +20 -1
  231. package/dist/src/components/form/CheckboxField.js.map +1 -1
  232. package/dist/src/components/form/FormSelectTypeahead.d.ts +3 -3
  233. package/dist/src/components/form/FormSelectTypeahead.d.ts.map +1 -1
  234. package/dist/src/components/form/FormSelectTypeahead.js +43 -53
  235. package/dist/src/components/form/FormSelectTypeahead.js.map +1 -1
  236. package/dist/src/components/form/RichValidationTextField.d.ts +1 -1
  237. package/dist/src/components/form/RichValidationTextField.d.ts.map +1 -1
  238. package/dist/src/components/form/RichValidationTextField.js +8 -4
  239. package/dist/src/components/form/RichValidationTextField.js.map +1 -1
  240. package/dist/src/components/form/validations.d.ts +44 -4
  241. package/dist/src/components/form/validations.d.ts.map +1 -1
  242. package/dist/src/components/form/validations.js +148 -25
  243. package/dist/src/components/form/validations.js.map +1 -1
  244. package/dist/src/components/modals/ApproveDeviceModal/ApproveDeviceForm.js +5 -3
  245. package/dist/src/components/modals/ApproveDeviceModal/ApproveDeviceForm.js.map +1 -1
  246. package/dist/src/components/modals/ApproveDeviceModal/ApproveDeviceModal.d.ts.map +1 -1
  247. package/dist/src/components/modals/ApproveDeviceModal/ApproveDeviceModal.js +3 -2
  248. package/dist/src/components/modals/ApproveDeviceModal/ApproveDeviceModal.js.map +1 -1
  249. package/dist/src/components/modals/EditLabelsModal/EditLabelsForm.d.ts.map +1 -1
  250. package/dist/src/components/modals/EditLabelsModal/EditLabelsForm.js +7 -12
  251. package/dist/src/components/modals/EditLabelsModal/EditLabelsForm.js.map +1 -1
  252. package/dist/src/components/modals/massModals/MassDecommissionDeviceModal/MassDecommissionDeviceModal.js +4 -4
  253. package/dist/src/components/modals/massModals/MassDecommissionDeviceModal/MassDecommissionDeviceModal.js.map +1 -1
  254. package/dist/src/components/modals/massModals/MassDeleteDeviceModal/MassDeleteDeviceModal.js +4 -4
  255. package/dist/src/components/modals/massModals/MassDeleteDeviceModal/MassDeleteDeviceModal.js.map +1 -1
  256. package/dist/src/components/modals/massModals/MassDeleteFleetModal/MassDeleteFleetModal.js +2 -2
  257. package/dist/src/components/modals/massModals/MassDeleteFleetModal/MassDeleteFleetModal.js.map +1 -1
  258. package/dist/src/components/modals/massModals/MassDeleteRepositoryModal/MassDeleteRepositoryModal.js +2 -2
  259. package/dist/src/components/modals/massModals/MassDeleteRepositoryModal/MassDeleteRepositoryModal.js.map +1 -1
  260. package/dist/src/hooks/timeZones.d.ts +3 -0
  261. package/dist/src/hooks/timeZones.d.ts.map +1 -0
  262. package/dist/src/hooks/timeZones.js +607 -0
  263. package/dist/src/hooks/timeZones.js.map +1 -0
  264. package/dist/src/hooks/useAppContext.d.ts +14 -8
  265. package/dist/src/hooks/useAppContext.d.ts.map +1 -1
  266. package/dist/src/hooks/useAppContext.js +13 -6
  267. package/dist/src/hooks/useAppContext.js.map +1 -1
  268. package/dist/src/hooks/useFetch.d.ts +3 -5
  269. package/dist/src/hooks/useFetch.d.ts.map +1 -1
  270. package/dist/src/hooks/useFetch.js +3 -2
  271. package/dist/src/hooks/useFetch.js.map +1 -1
  272. package/dist/src/hooks/useNavigate.d.ts +2 -1
  273. package/dist/src/hooks/useNavigate.d.ts.map +1 -1
  274. package/dist/src/hooks/useNavigate.js +1 -0
  275. package/dist/src/hooks/useNavigate.js.map +1 -1
  276. package/dist/src/hooks/useTimeZones.d.ts +4 -0
  277. package/dist/src/hooks/useTimeZones.d.ts.map +1 -0
  278. package/dist/src/hooks/useTimeZones.js +22 -0
  279. package/dist/src/hooks/useTimeZones.js.map +1 -0
  280. package/dist/src/hooks/useWebSocket.d.ts +6 -2
  281. package/dist/src/hooks/useWebSocket.d.ts.map +1 -1
  282. package/dist/src/hooks/useWebSocket.js +22 -7
  283. package/dist/src/hooks/useWebSocket.js.map +1 -1
  284. package/dist/src/links.d.ts +3 -0
  285. package/dist/src/links.d.ts.map +1 -1
  286. package/dist/src/links.js +10 -3
  287. package/dist/src/links.js.map +1 -1
  288. package/dist/src/types/deviceSpec.d.ts +93 -5
  289. package/dist/src/types/deviceSpec.d.ts.map +1 -1
  290. package/dist/src/types/deviceSpec.js +28 -2
  291. package/dist/src/types/deviceSpec.js.map +1 -1
  292. package/dist/src/types/extraTypes.d.ts +19 -1
  293. package/dist/src/types/extraTypes.d.ts.map +1 -1
  294. package/dist/src/types/extraTypes.js.map +1 -1
  295. package/dist/src/utils/labels.d.ts +1 -0
  296. package/dist/src/utils/labels.d.ts.map +1 -1
  297. package/dist/src/utils/labels.js +9 -2
  298. package/dist/src/utils/labels.js.map +1 -1
  299. package/dist/src/utils/patch.d.ts +13 -5
  300. package/dist/src/utils/patch.d.ts.map +1 -1
  301. package/dist/src/utils/patch.js +115 -71
  302. package/dist/src/utils/patch.js.map +1 -1
  303. package/dist/src/utils/query.d.ts +1 -0
  304. package/dist/src/utils/query.d.ts.map +1 -1
  305. package/dist/src/utils/query.js +10 -3
  306. package/dist/src/utils/query.js.map +1 -1
  307. package/dist/src/utils/search.d.ts +6 -0
  308. package/dist/src/utils/search.d.ts.map +1 -1
  309. package/dist/src/utils/search.js +9 -1
  310. package/dist/src/utils/search.js.map +1 -1
  311. package/dist/src/utils/time.d.ts +31 -0
  312. package/dist/src/utils/time.d.ts.map +1 -0
  313. package/dist/src/utils/time.js +134 -0
  314. package/dist/src/utils/time.js.map +1 -0
  315. package/package.json +1 -4
  316. package/src/components/DetailsPage/DetailsPage.tsx +6 -4
  317. package/src/components/DetailsPage/Tables/ApplicationsTable.tsx +6 -3
  318. package/src/components/Device/AddDeviceModal/AddDeviceModal.tsx +4 -13
  319. package/src/components/Device/DeviceDetails/DeviceAliasEdit.tsx +180 -0
  320. package/src/components/Device/DeviceDetails/DeviceApplications.tsx +8 -1
  321. package/src/components/Device/DeviceDetails/DeviceDetailsPage.tsx +21 -5
  322. package/src/components/Device/DeviceDetails/DeviceDetailsTab.tsx +3 -4
  323. package/src/components/Device/DeviceDetails/DeviceDetailsTabContent/StatusContent.tsx +7 -10
  324. package/src/components/Device/DeviceDetails/DeviceDetailsTabContent/SystemResourcesContent.tsx +3 -3
  325. package/src/components/Device/DeviceDetails/TerminalTab.tsx +43 -5
  326. package/src/components/Device/DevicesPage/DecommissionedDevicesTable.tsx +2 -1
  327. package/src/components/Device/DevicesPage/DeviceToolbarFilters.tsx +66 -38
  328. package/src/components/Device/DevicesPage/DevicesPage.tsx +11 -2
  329. package/src/components/Device/DevicesPage/EnrolledDevicesTable.tsx +16 -11
  330. package/src/components/Device/EditDeviceWizard/EditDeviceWizard.tsx +11 -2
  331. package/src/components/Device/EditDeviceWizard/EditDeviceWizardFooter.tsx +22 -6
  332. package/src/components/Device/EditDeviceWizard/EditDeviceWizardNav.tsx +15 -2
  333. package/src/components/Device/EditDeviceWizard/deviceSpecUtils.ts +147 -14
  334. package/src/components/Device/EditDeviceWizard/steps/ApplicationImageForm.tsx +28 -0
  335. package/src/components/Device/EditDeviceWizard/steps/ApplicationInlineForm.tsx +94 -0
  336. package/src/components/Device/EditDeviceWizard/steps/ApplicationTemplates.tsx +81 -50
  337. package/src/components/Device/EditDeviceWizard/steps/ConfigInlineTemplateForm.tsx +23 -28
  338. package/src/components/Device/EditDeviceWizard/steps/ConfigK8sSecretTemplateForm.tsx +1 -2
  339. package/src/components/Device/EditDeviceWizard/steps/ConfigWithRepositoryTemplateForm.tsx +18 -39
  340. package/src/components/Device/EditDeviceWizard/steps/ConfigurationTemplates.tsx +8 -14
  341. package/src/components/Device/EditDeviceWizard/steps/DeviceTemplateStep.tsx +26 -39
  342. package/src/components/Device/EditDeviceWizard/steps/DeviceUpdateStep.tsx +88 -0
  343. package/src/components/Device/EditDeviceWizard/steps/GeneralInfoStep.tsx +1 -1
  344. package/src/components/Device/EditDeviceWizard/steps/ReviewApplications.tsx +18 -19
  345. package/src/components/Device/EditDeviceWizard/steps/ReviewDeviceStep.tsx +3 -3
  346. package/src/components/Device/EditDeviceWizard/steps/ReviewTrackedSystemdServices.tsx +2 -2
  347. package/src/components/Device/EditDeviceWizard/steps/ReviewUpdatePolicy.tsx +2 -1
  348. package/src/components/Device/EditDeviceWizard/steps/SystemdUnitsForm.tsx +1 -1
  349. package/src/components/Device/EditDeviceWizard/utils.ts +16 -9
  350. package/src/components/Device/SystemdUnitsModal/SystemdUnitsModal.tsx +7 -6
  351. package/src/components/Device/SystemdUnitsModal/TrackSystemdUnitsForm.tsx +1 -5
  352. package/src/components/EnrollmentRequest/EnrollmentRequestDetails/EnrollmentRequestDetails.tsx +7 -9
  353. package/src/components/EnrollmentRequest/EnrollmentRequestList.tsx +30 -17
  354. package/src/components/EnrollmentRequest/EnrollmentRequestTableRow.tsx +5 -1
  355. package/src/components/EnrollmentRequest/useEnrollmentRequests.ts +12 -4
  356. package/src/components/Fleet/CreateFleet/CreateFleetWizard.tsx +4 -3
  357. package/src/components/Fleet/CreateFleet/CreateFleetWizardFooter.tsx +9 -2
  358. package/src/components/Fleet/CreateFleet/fleetSpecUtils.ts +51 -17
  359. package/src/components/Fleet/CreateFleet/steps/DeviceLabelSelector.tsx +1 -1
  360. package/src/components/Fleet/CreateFleet/steps/GeneralInfoStep.tsx +2 -13
  361. package/src/components/Fleet/CreateFleet/steps/ReviewStep.tsx +3 -3
  362. package/src/components/Fleet/CreateFleet/steps/UpdateConfirmChangesModal.tsx +10 -1
  363. package/src/components/Fleet/CreateFleet/steps/UpdatePolicyStep.tsx +49 -16
  364. package/src/components/Fleet/CreateFleet/steps/UpdateStepDisruptionBudget.tsx +18 -33
  365. package/src/components/Fleet/CreateFleet/steps/UpdateStepRolloutPolicy.tsx +14 -24
  366. package/src/components/Fleet/CreateFleet/steps/UpdateStepUpdatePolicy.css +3 -0
  367. package/src/components/Fleet/CreateFleet/steps/UpdateStepUpdatePolicy.tsx +246 -0
  368. package/src/components/Fleet/CreateFleet/utils.ts +23 -7
  369. package/src/components/Fleet/FleetsPage.tsx +15 -17
  370. package/src/components/Fleet/ImportFleetWizard/steps/ResourceSyncStep.tsx +1 -1
  371. package/src/components/ListPage/ListPage.tsx +7 -4
  372. package/src/components/Masthead/CommandLineToolsPage.tsx +179 -0
  373. package/src/components/OverviewPage/Cards/Status/StatusCard.tsx +6 -6
  374. package/src/components/OverviewPage/Cards/{ToDo/ToDoCard.tsx → Tasks/TasksCard.tsx} +3 -3
  375. package/src/components/OverviewPage/Overview.tsx +2 -2
  376. package/src/components/Repository/CreateRepository/CreateRepositoryForm.tsx +11 -26
  377. package/src/components/Repository/CreateRepository/CreateResourceSyncsForm.tsx +8 -17
  378. package/src/components/Repository/CreateRepository/utils.ts +4 -1
  379. package/src/components/Repository/RepositoryDetails/RepositoryResourceSyncsCard.tsx +3 -4
  380. package/src/components/Repository/RepositoryList.tsx +9 -16
  381. package/src/components/ResourceSync/RepositoryResourceSyncList.tsx +7 -11
  382. package/src/components/Status/DeviceResourceStatus.tsx +4 -4
  383. package/src/components/Status/utils.ts +3 -5
  384. package/src/components/Table/Table.tsx +32 -9
  385. package/src/components/Table/TablePagination.tsx +0 -1
  386. package/src/components/Terminal/Terminal.tsx +10 -4
  387. package/src/components/charts/DonutChart.tsx +2 -2
  388. package/src/components/common/LeaveFormConfirmation.tsx +2 -2
  389. package/src/components/common/WithHelperText.tsx +53 -21
  390. package/src/components/form/CheckboxField.tsx +28 -3
  391. package/src/components/form/FormSelectTypeahead.tsx +53 -80
  392. package/src/components/form/RichValidationTextField.tsx +73 -62
  393. package/src/components/form/validations.ts +207 -28
  394. package/src/components/modals/ApproveDeviceModal/ApproveDeviceForm.tsx +5 -5
  395. package/src/components/modals/ApproveDeviceModal/ApproveDeviceModal.tsx +3 -2
  396. package/src/components/modals/EditLabelsModal/EditLabelsForm.tsx +9 -20
  397. package/src/components/modals/massModals/MassDecommissionDeviceModal/MassDecommissionDeviceModal.tsx +2 -2
  398. package/src/components/modals/massModals/MassDeleteDeviceModal/MassDeleteDeviceModal.tsx +2 -2
  399. package/src/components/modals/massModals/MassDeleteFleetModal/MassDeleteFleetModal.tsx +2 -2
  400. package/src/components/modals/massModals/MassDeleteRepositoryModal/MassDeleteRepositoryModal.tsx +2 -2
  401. package/src/hooks/timeZones.ts +606 -0
  402. package/src/hooks/useAppContext.tsx +20 -10
  403. package/src/hooks/useFetch.ts +3 -2
  404. package/src/hooks/useNavigate.tsx +1 -0
  405. package/src/hooks/useTimeZones.ts +26 -0
  406. package/src/hooks/useWebSocket.ts +29 -7
  407. package/src/links.ts +13 -4
  408. package/src/types/deviceSpec.ts +118 -2
  409. package/src/types/extraTypes.ts +33 -1
  410. package/src/utils/labels.ts +7 -1
  411. package/src/utils/patch.ts +126 -72
  412. package/src/utils/query.ts +13 -4
  413. package/src/utils/search.ts +8 -0
  414. package/src/utils/time.ts +147 -0
  415. package/dist/jest.config.d.ts +0 -12
  416. package/dist/jest.config.d.ts.map +0 -1
  417. package/dist/jest.config.js +0 -24
  418. package/dist/jest.config.js.map +0 -1
  419. package/dist/src/components/DetailsPage/DetailsPage.spec.d.ts +0 -2
  420. package/dist/src/components/DetailsPage/DetailsPage.spec.d.ts.map +0 -1
  421. package/dist/src/components/DetailsPage/DetailsPage.spec.js +0 -81
  422. package/dist/src/components/DetailsPage/DetailsPage.spec.js.map +0 -1
  423. package/dist/src/components/Device/EditDeviceWizard/types.d.ts +0 -23
  424. package/dist/src/components/Device/EditDeviceWizard/types.d.ts.map +0 -1
  425. package/dist/src/components/Device/EditDeviceWizard/types.js +0 -3
  426. package/dist/src/components/Device/EditDeviceWizard/types.js.map +0 -1
  427. package/dist/src/components/Fleet/CreateFleet/types.d.ts +0 -29
  428. package/dist/src/components/Fleet/CreateFleet/types.d.ts.map +0 -1
  429. package/dist/src/components/Fleet/CreateFleet/types.js +0 -9
  430. package/dist/src/components/Fleet/CreateFleet/types.js.map +0 -1
  431. package/dist/src/components/OverviewPage/Cards/ToDo/ToDoCard.d.ts +0 -4
  432. package/dist/src/components/OverviewPage/Cards/ToDo/ToDoCard.d.ts.map +0 -1
  433. package/dist/src/components/OverviewPage/Cards/ToDo/ToDoCard.js.map +0 -1
  434. package/dist/src/components/UserPreferences/UserPreferencesModal.d.ts.map +0 -1
  435. package/dist/src/components/UserPreferences/UserPreferencesModal.js.map +0 -1
  436. package/dist/src/components/UserPreferences/UserPreferencesProvider.d.ts.map +0 -1
  437. package/dist/src/components/UserPreferences/UserPreferencesProvider.js.map +0 -1
  438. package/dist/src/setupTests.d.ts +0 -2
  439. package/dist/src/setupTests.d.ts.map +0 -1
  440. package/dist/src/setupTests.js +0 -24
  441. package/dist/src/setupTests.js.map +0 -1
  442. package/dist/src/tests/test-utils.d.ts +0 -7
  443. package/dist/src/tests/test-utils.d.ts.map +0 -1
  444. package/dist/src/tests/test-utils.js +0 -21
  445. package/dist/src/tests/test-utils.js.map +0 -1
  446. package/src/components/DetailsPage/DetailsPage.spec.tsx +0 -128
  447. package/src/components/Device/EditDeviceWizard/types.ts +0 -22
  448. package/src/components/Fleet/CreateFleet/types.ts +0 -33
  449. package/src/setupTests.ts +0 -21
  450. package/src/tests/test-utils.tsx +0 -21
  451. /package/dist/src/components/{UserPreferences → Masthead}/UserPreferencesModal.d.ts +0 -0
  452. /package/dist/src/components/{UserPreferences → Masthead}/UserPreferencesModal.js +0 -0
  453. /package/dist/src/components/{UserPreferences → Masthead}/UserPreferencesProvider.d.ts +0 -0
  454. /package/dist/src/components/{UserPreferences → Masthead}/UserPreferencesProvider.js +0 -0
  455. /package/src/components/{UserPreferences → Masthead}/UserPreferencesModal.tsx +0 -0
  456. /package/src/components/{UserPreferences → Masthead}/UserPreferencesProvider.tsx +0 -0
@@ -6,8 +6,8 @@ import { useTranslation } from '../../../../hooks/useTranslation';
6
6
  import NumberField from '../../../form/NumberField';
7
7
  import TextListField from '../../../form/TextListField';
8
8
  import ErrorHelperText from '../../../form/FieldHelperText';
9
- import WithHelperText from '../../../common/WithHelperText';
10
- import { DisruptionBudgetForm } from '../types';
9
+ import { FormGroupWithHelperText } from '../../../common/WithHelperText';
10
+ import { DisruptionBudgetForm } from '../../../../types/deviceSpec';
11
11
 
12
12
  const UpdateStepDisruptionBudget = () => {
13
13
  const { t } = useTranslation();
@@ -16,14 +16,9 @@ const UpdateStepDisruptionBudget = () => {
16
16
 
17
17
  return (
18
18
  <>
19
- <FormGroup
20
- label={
21
- <WithHelperText
22
- ariaLabel={t('Group devices by label keys')}
23
- content={t('The disruption budget will be applied to all group combinations independently.')}
24
- showLabel
25
- />
26
- }
19
+ <FormGroupWithHelperText
20
+ label={t('Group devices by label keys')}
21
+ content={t('The disruption budget will be applied to all group combinations independently.')}
27
22
  >
28
23
  <TextListField
29
24
  name="disruptionBudget.groupBy"
@@ -35,46 +30,36 @@ const UpdateStepDisruptionBudget = () => {
35
30
  </Stack>
36
31
  }
37
32
  />
38
- </FormGroup>
33
+ </FormGroupWithHelperText>
39
34
  <FormGroup>
40
35
  <Flex>
41
36
  <FlexItem>
42
- <FormGroup
43
- label={
44
- <WithHelperText
45
- ariaLabel={t('Minimum number of available devices')}
46
- content={t(
47
- 'At least this number of devices will be available at any given moment, for each group defined above.',
48
- )}
49
- showLabel
50
- />
51
- }
37
+ <FormGroupWithHelperText
38
+ label={t('Minimum number of available devices')}
39
+ content={t(
40
+ 'At least this number of devices will be available at any given moment, for each group defined above.',
41
+ )}
52
42
  >
53
43
  <NumberField
54
44
  aria-label={t('Minimum number of available devices')}
55
45
  name="disruptionBudget.minAvailable"
56
46
  min={1}
57
47
  />
58
- </FormGroup>
48
+ </FormGroupWithHelperText>
59
49
  </FlexItem>
60
50
  <FlexItem>
61
- <FormGroup
62
- label={
63
- <WithHelperText
64
- ariaLabel={t('Maximum number of unavailable devices')}
65
- content={t(
66
- 'No more than this number of devices will be unavailable at any given moment, for each group defined above.',
67
- )}
68
- showLabel
69
- />
70
- }
51
+ <FormGroupWithHelperText
52
+ label={t('Maximum number of unavailable devices')}
53
+ content={t(
54
+ 'No more than this number of devices will be unavailable at any given moment, for each group defined above.',
55
+ )}
71
56
  >
72
57
  <NumberField
73
58
  aria-label={t('Maximum number of unavailable devices')}
74
59
  name="disruptionBudget.maxUnavailable"
75
60
  min={1}
76
61
  />
77
- </FormGroup>
62
+ </FormGroupWithHelperText>
78
63
  </FlexItem>
79
64
  {/* Show error when both numeric values are unset */}
80
65
  {typeof meta.error === 'string' && <ErrorHelperText meta={meta} />}
@@ -14,13 +14,13 @@ import {
14
14
  import { FieldArray, useField, useFormikContext } from 'formik';
15
15
  import { MinusCircleIcon, PlusCircleIcon } from '@patternfly/react-icons/dist/js/icons';
16
16
 
17
- import { BatchForm, BatchLimitType, FleetFormValues } from '../types';
17
+ import { BatchForm, BatchLimitType, FleetFormValues } from '../../../../types/deviceSpec';
18
18
  import ErrorHelperText from '../../../form/FieldHelperText';
19
19
  import ExpandableFormSection from '../../../form/ExpandableFormSection';
20
20
  import LabelsField from '../../../form/LabelsField';
21
21
  import FormSelect from '../../../form/FormSelect';
22
22
  import NumberField from '../../../form/NumberField';
23
- import WithHelperText from '../../../common/WithHelperText';
23
+ import { FormGroupWithHelperText } from '../../../common/WithHelperText';
24
24
  import { useTranslation } from '../../../../hooks/useTranslation';
25
25
  import { getEmptyInitializedBatch } from '../fleetSpecUtils';
26
26
 
@@ -70,17 +70,12 @@ const RolloutPolicyBatch = ({ index }: { index: number }) => {
70
70
  </SplitItem>
71
71
  </Split>
72
72
  </FormGroup>
73
- <FormGroup
73
+ <FormGroupWithHelperText
74
+ label={t('Success threshold')}
75
+ content={t(
76
+ 'The minimum percentage of devices that must be updated successfully in order to continue updating the next batch of devices.',
77
+ )}
74
78
  isRequired
75
- label={
76
- <WithHelperText
77
- ariaLabel={t('Success threshold')}
78
- content={t(
79
- 'The minimum percentage of devices that must be updated successfully in order to continue updating the next batch of devices.',
80
- )}
81
- showLabel
82
- />
83
- }
84
79
  >
85
80
  <Flex flexWrap={{ default: 'wrap' }}>
86
81
  <FlexItem>{t('If')} </FlexItem>
@@ -99,7 +94,7 @@ const RolloutPolicyBatch = ({ index }: { index: number }) => {
99
94
  )}
100
95
  </FlexItem>
101
96
  </Flex>
102
- </FormGroup>
97
+ </FormGroupWithHelperText>
103
98
  </Grid>
104
99
  </ExpandableFormSection>
105
100
  );
@@ -121,17 +116,12 @@ const UpdateStepRolloutPolicy = () => {
121
116
  <br />
122
117
  {t('Devices that are not part of any batch will be updated last.')}
123
118
  </Alert>
124
- <FormGroup
119
+ <FormGroupWithHelperText
120
+ label={t('Update timeout')}
121
+ content={t(
122
+ "The time-frame within which a device must be updated. If it exceeds it, device will be counted as a 'failed to update' in the batch success threshold.",
123
+ )}
125
124
  isRequired
126
- label={
127
- <WithHelperText
128
- ariaLabel={t('Update timeout')}
129
- content={t(
130
- "The time-frame within which a device must be updated. If it exceeds it, device will be counted as a 'failed to update' in the batch success threshold.",
131
- )}
132
- showLabel
133
- />
134
- }
135
125
  >
136
126
  <Flex>
137
127
  <FlexItem>{t('Timeout devices that fail to update after')}</FlexItem>
@@ -140,7 +130,7 @@ const UpdateStepRolloutPolicy = () => {
140
130
  </FlexItem>
141
131
  <FlexItem>{t('minutes')}.</FlexItem>
142
132
  </Flex>
143
- </FormGroup>
133
+ </FormGroupWithHelperText>
144
134
 
145
135
  <FormGroup>
146
136
  <FieldArray name="rolloutPolicy.batches">
@@ -0,0 +1,3 @@
1
+ .fctl-policy-timezone .pf-v5-c-form__helper-text {
2
+ margin-top: 0.5rem;
3
+ }
@@ -0,0 +1,246 @@
1
+ import * as React from 'react';
2
+ import { Checkbox, Flex, FlexItem, FormGroup, Stack, StackItem, Weekday } from '@patternfly/react-core';
3
+ import { FieldArray, useField, useFormikContext } from 'formik';
4
+
5
+ import { useTranslation } from '../../../../hooks/useTranslation';
6
+ import useTimeZones from '../../../../hooks/useTimeZones';
7
+ import * as timeUtils from '../../../../utils/time';
8
+ import { FleetFormValues, UpdatePolicyForm } from '../../../../types/deviceSpec';
9
+ import { FormGroupWithHelperText } from '../../../common/WithHelperText';
10
+ import CheckboxField, { CheckboxFieldGroupValidation } from '../../../form/CheckboxField';
11
+ import FormSelectTypeahead from '../../../form/FormSelectTypeahead';
12
+ import RadioField from '../../../form/RadioField';
13
+ import ErrorHelperText from '../../../form/FieldHelperText';
14
+
15
+ import './UpdateStepUpdatePolicy.css';
16
+
17
+ export enum ScheduleBlockType {
18
+ Download = 'download',
19
+ Install = 'install',
20
+ }
21
+
22
+ type ScheduleBlockProps = {
23
+ updatePolicy: UpdatePolicyForm;
24
+ blockType: ScheduleBlockType;
25
+ weekDayError?: string[] | string | Weekday;
26
+ onScheduleModeSwitch: (blockType: ScheduleBlockType) => void;
27
+ };
28
+
29
+ const ScheduleTimeZone = ({ blockType }: { blockType: ScheduleBlockType }) => {
30
+ const { t } = useTranslation();
31
+
32
+ const id = `updatePolicy.${blockType}TimeZone`;
33
+
34
+ const [{ value: timeZone, ...rest }, , { setValue }] = useField<string>({
35
+ name: id,
36
+ });
37
+
38
+ const zones = useTimeZones();
39
+
40
+ const onChangeTimezoneCheckbox = (_, isChecked: boolean) => {
41
+ setValue(isChecked ? timeUtils.localDeviceTimezone : '');
42
+ };
43
+
44
+ return (
45
+ <FormGroup id={`form-control__${id}`} fieldId={id} isStack className="fctl-policy-timezone">
46
+ <Checkbox
47
+ {...rest}
48
+ isChecked={timeZone === timeUtils.localDeviceTimezone}
49
+ id={id}
50
+ onChange={onChangeTimezoneCheckbox}
51
+ label={t("Use device's local timezone")}
52
+ />
53
+
54
+ {timeZone !== timeUtils.localDeviceTimezone && <FormSelectTypeahead name={id} defaultId="" items={zones} />}
55
+ </FormGroup>
56
+ );
57
+ };
58
+
59
+ const ScheduleBlock = ({ blockType, updatePolicy, onScheduleModeSwitch, weekDayError }: ScheduleBlockProps) => {
60
+ const { t } = useTranslation();
61
+
62
+ let ariaLabel: string;
63
+ let helperContent: string;
64
+
65
+ switch (blockType) {
66
+ case ScheduleBlockType.Download:
67
+ {
68
+ if (updatePolicy.downloadAndInstallDiffer) {
69
+ ariaLabel = t('Downloading schedule');
70
+ helperContent = t('Time frame during which devices can start downloading their new configurations.');
71
+ } else {
72
+ ariaLabel = t('Downloading and installing schedule');
73
+ helperContent = t(
74
+ 'Time frame during which devices can start downloading and installing their new configurations.',
75
+ );
76
+ }
77
+ }
78
+
79
+ break;
80
+ case ScheduleBlockType.Install:
81
+ ariaLabel = t('Installing schedule');
82
+ helperContent = t('Time frame during which devices can start installing their new configurations.');
83
+ break;
84
+ }
85
+
86
+ const selectableTimes = React.useMemo(() => timeUtils.getSelectableTimes(), []);
87
+
88
+ const isValidTypedItem = React.useCallback((value: string) => timeUtils.valid24HourClockRegExp.test(value), []);
89
+
90
+ const transformTypedItem = React.useCallback((time: string) => {
91
+ if (timeUtils.formatted24HourClockRegExp.test(time)) {
92
+ return time;
93
+ }
94
+
95
+ // We "fix" the value when it misses the optional leading 0, or the semicolon
96
+ // The value is known to be valid at this point, so there should always be a match.
97
+ const match = time.match(/^(\d{1,2})?:?(\d{2})?$/);
98
+ return match ? `${timeUtils.formatTimePart(match[1])}:${match[2]}` : timeUtils.defaultStartTime;
99
+ }, []);
100
+
101
+ const scheduleMode =
102
+ blockType === ScheduleBlockType.Download ? updatePolicy.downloadScheduleMode : updatePolicy.installScheduleMode;
103
+ const isWeekly = scheduleMode === timeUtils.UpdateScheduleMode.Weekly;
104
+
105
+ return (
106
+ <FormGroupWithHelperText isRequired label={ariaLabel} content={helperContent}>
107
+ <Stack hasGutter>
108
+ <StackItem>
109
+ <Flex>
110
+ <FlexItem>
111
+ <FormSelectTypeahead
112
+ name={`updatePolicy.${blockType}StartsAt`}
113
+ placeholderText={t('hh:mm', { nsSeparator: '|' })}
114
+ defaultId={timeUtils.defaultStartTime}
115
+ items={selectableTimes}
116
+ isValidTypedItem={isValidTypedItem}
117
+ transformTypedItem={transformTypedItem}
118
+ />
119
+ </FlexItem>
120
+ <FlexItem>
121
+ <FormSelectTypeahead
122
+ name={`updatePolicy.${blockType}EndsAt`}
123
+ placeholderText={t('hh:mm', { nsSeparator: '|' })}
124
+ defaultId={timeUtils.defaultEndTime}
125
+ items={selectableTimes}
126
+ isValidTypedItem={isValidTypedItem}
127
+ transformTypedItem={transformTypedItem}
128
+ />
129
+ </FlexItem>
130
+ <FlexItem>
131
+ <RadioField
132
+ id={`daily-${blockType}`}
133
+ name={`updatePolicy.${blockType}ScheduleMode`}
134
+ label={t('Daily')}
135
+ checkedValue={timeUtils.UpdateScheduleMode.Daily}
136
+ />
137
+ </FlexItem>
138
+ <FlexItem>
139
+ <RadioField
140
+ id={`weekly-${blockType}`}
141
+ name={`updatePolicy.${blockType}ScheduleMode`}
142
+ label={t('Weekly')}
143
+ checkedValue={timeUtils.UpdateScheduleMode.Weekly}
144
+ onChangeCustom={() => onScheduleModeSwitch(blockType)}
145
+ />
146
+ </FlexItem>
147
+ </Flex>
148
+ </StackItem>
149
+ {isWeekly && (
150
+ <FieldArray name={`updatePolicy.${blockType}WeekDays`}>
151
+ {() => (
152
+ <>
153
+ <StackItem>
154
+ <Flex>
155
+ <FlexItem>
156
+ <CheckboxFieldGroupValidation name={`updatePolicy.${blockType}WeekDays[0]`} label={t('Sun')} />
157
+ </FlexItem>
158
+ <FlexItem>
159
+ <CheckboxFieldGroupValidation name={`updatePolicy.${blockType}WeekDays[1]`} label={t('Mon')} />
160
+ </FlexItem>
161
+ <FlexItem>
162
+ <CheckboxFieldGroupValidation name={`updatePolicy.${blockType}WeekDays[2]`} label={t('Tue')} />
163
+ </FlexItem>
164
+ <FlexItem>
165
+ <CheckboxFieldGroupValidation name={`updatePolicy.${blockType}WeekDays[3]`} label={t('Wed')} />
166
+ </FlexItem>
167
+ <FlexItem>
168
+ <CheckboxFieldGroupValidation name={`updatePolicy.${blockType}WeekDays[4]`} label={t('Thu')} />
169
+ </FlexItem>
170
+ <FlexItem>
171
+ <CheckboxFieldGroupValidation name={`updatePolicy.${blockType}WeekDays[5]`} label={t('Fri')} />
172
+ </FlexItem>
173
+ <FlexItem>
174
+ <CheckboxFieldGroupValidation name={`updatePolicy.${blockType}WeekDays[6]`} label={t('Sat')} />
175
+ </FlexItem>
176
+ </Flex>
177
+ </StackItem>
178
+ <StackItem>
179
+ <ErrorHelperText error={weekDayError} />
180
+ </StackItem>
181
+ </>
182
+ )}
183
+ </FieldArray>
184
+ )}
185
+ <StackItem style={{ maxWidth: 500 }}>
186
+ <ScheduleTimeZone blockType={blockType} />
187
+ </StackItem>
188
+ </Stack>
189
+ </FormGroupWithHelperText>
190
+ );
191
+ };
192
+
193
+ const UpdateStepUpdatePolicy = () => {
194
+ const { t } = useTranslation();
195
+
196
+ const {
197
+ values: { updatePolicy },
198
+ errors,
199
+ setFieldValue,
200
+ } = useFormikContext<FleetFormValues>();
201
+
202
+ // When switching to "daily" mode, we keep the selected weekdays, as they will be ignored.
203
+ // By doing this, if users switch to "weekly" again, we can show the weekdays they selected previously instead of all/none
204
+ const onSwitchToWeeklyMode = (blockType: ScheduleBlockType) => {
205
+ const selectedDays =
206
+ blockType === ScheduleBlockType.Download ? updatePolicy.downloadWeekDays : updatePolicy.installWeekDays;
207
+
208
+ const isAllWeekSelected = selectedDays.every(Boolean);
209
+ if (isAllWeekSelected) {
210
+ setFieldValue(`updatePolicy.${blockType}WeekDays`, [false, false, false, false, false, false, false]);
211
+ }
212
+ };
213
+
214
+ return (
215
+ <Stack hasGutter>
216
+ <StackItem>
217
+ <CheckboxField
218
+ label={t('Use different update schedules for downloading and installing updates')}
219
+ name="updatePolicy.downloadAndInstallDiffer"
220
+ />
221
+ </StackItem>
222
+
223
+ <StackItem>
224
+ <ScheduleBlock
225
+ blockType={ScheduleBlockType.Download}
226
+ updatePolicy={updatePolicy}
227
+ weekDayError={errors.updatePolicy?.downloadWeekDays}
228
+ onScheduleModeSwitch={onSwitchToWeeklyMode}
229
+ />
230
+ </StackItem>
231
+
232
+ {updatePolicy.downloadAndInstallDiffer && (
233
+ <StackItem>
234
+ <ScheduleBlock
235
+ blockType={ScheduleBlockType.Install}
236
+ updatePolicy={updatePolicy}
237
+ weekDayError={errors.updatePolicy?.installWeekDays}
238
+ onScheduleModeSwitch={onSwitchToWeeklyMode}
239
+ />
240
+ </StackItem>
241
+ )}
242
+ </Stack>
243
+ );
244
+ };
245
+
246
+ export default UpdateStepUpdatePolicy;
@@ -1,7 +1,6 @@
1
1
  import { Fleet, PatchRequest } from '@flightctl/types';
2
2
  import { TFunction } from 'i18next';
3
3
  import * as Yup from 'yup';
4
- import { FleetFormValues } from './types';
5
4
  import { API_VERSION } from '../../../constants';
6
5
  import { toAPILabel } from '../../../utils/labels';
7
6
  import {
@@ -13,27 +12,31 @@ import {
13
12
  validKubernetesDnsSubdomain,
14
13
  validLabelsSchema,
15
14
  validOsImage,
15
+ validUpdatePolicySchema,
16
16
  } from '../../form/validations';
17
17
  import {
18
18
  appendJSONPatch,
19
- getApplicationPatches,
20
19
  getLabelPatches,
21
20
  getRolloutPolicyData,
22
21
  getRolloutPolicyPatches,
23
22
  getStringListPatches,
24
- toAPIApplication,
23
+ getUpdatePolicyPatches,
24
+ updatePolicyFormToApi,
25
25
  } from '../../../utils/patch';
26
26
  import {
27
27
  ACMCrdConfig,
28
28
  ACMImportConfig,
29
29
  MicroshiftRegistrationHook,
30
- getAPIConfig,
30
+ getApiConfig,
31
+ getApplicationPatches,
31
32
  getApplicationValues,
32
33
  getConfigTemplatesValues,
33
34
  getDeviceSpecConfigPatches,
34
35
  hasMicroshiftRegistrationConfig,
36
+ toAPIApplication,
35
37
  } from '../../Device/EditDeviceWizard/deviceSpecUtils';
36
- import { getDisruptionBudgetValues, getRolloutPolicyValues } from './fleetSpecUtils';
38
+ import { getDisruptionBudgetValues, getRolloutPolicyValues, getUpdatePolicyValues } from './fleetSpecUtils';
39
+ import { FleetFormValues, UpdatePolicyForm } from '../../../types/deviceSpec';
37
40
 
38
41
  export const getValidationSchema = (t: TFunction) => {
39
42
  return Yup.object<FleetFormValues>({
@@ -46,6 +49,7 @@ export const getValidationSchema = (t: TFunction) => {
46
49
  systemdUnits: systemdUnitListValidationSchema(t),
47
50
  rolloutPolicy: validFleetRolloutPolicySchema(t),
48
51
  disruptionBudget: validFleetDisruptionBudgetSchema(t),
52
+ updatePolicy: validUpdatePolicySchema(t),
49
53
  });
50
54
  };
51
55
 
@@ -113,7 +117,7 @@ export const getFleetPatches = (currentFleet: Fleet, updatedFleet: FleetFormValu
113
117
 
114
118
  // Configurations
115
119
  const currentConfigs = currentFleet.spec.template.spec.config || [];
116
- const newConfigs = updatedFleet.configTemplates.map(getAPIConfig);
120
+ const newConfigs = updatedFleet.configTemplates.map(getApiConfig);
117
121
  if (updatedFleet.registerMicroShift) {
118
122
  newConfigs.push(ACMCrdConfig, ACMImportConfig, MicroshiftRegistrationHook);
119
123
  }
@@ -141,6 +145,13 @@ export const getFleetPatches = (currentFleet: Fleet, updatedFleet: FleetFormValu
141
145
  const rolloutPolicyPatches = getRolloutPolicyPatches(currentFleet.spec.rolloutPolicy, updatedFleet);
142
146
  allPatches = allPatches.concat(rolloutPolicyPatches);
143
147
 
148
+ // Update policies
149
+ const updatePolicyPatches = getUpdatePolicyPatches(
150
+ '/spec/template/spec/updatePolicy',
151
+ currentFleet.spec.template.spec.updatePolicy,
152
+ updatedFleet.updatePolicy as Required<UpdatePolicyForm>,
153
+ );
154
+ allPatches = allPatches.concat(updatePolicyPatches);
144
155
  return allPatches;
145
156
  };
146
157
 
@@ -172,7 +183,7 @@ export const getFleetResource = (values: FleetFormValues): Fleet => {
172
183
  },
173
184
  spec: {
174
185
  os: values.osImage ? { image: values.osImage || '' } : undefined,
175
- config: values.configTemplates.map(getAPIConfig),
186
+ config: values.configTemplates.map(getApiConfig),
176
187
  applications: values.applications.map(toAPIApplication),
177
188
  ...systemdPatterns,
178
189
  },
@@ -186,6 +197,9 @@ export const getFleetResource = (values: FleetFormValues): Fleet => {
186
197
  if (values.rolloutPolicy.isAdvanced || values.disruptionBudget.isAdvanced) {
187
198
  fleet.spec.rolloutPolicy = getRolloutPolicyData(values);
188
199
  }
200
+ if (values.updatePolicy.isAdvanced) {
201
+ fleet.spec.template.spec.updatePolicy = updatePolicyFormToApi(values.updatePolicy as Required<UpdatePolicyForm>);
202
+ }
189
203
 
190
204
  return fleet;
191
205
  };
@@ -213,6 +227,7 @@ export const getInitialValues = (fleet?: Fleet): FleetFormValues => {
213
227
  registerMicroShift,
214
228
  rolloutPolicy: getRolloutPolicyValues(fleet.spec),
215
229
  disruptionBudget: getDisruptionBudgetValues(fleet.spec),
230
+ updatePolicy: getUpdatePolicyValues(fleet.spec.template?.spec?.updatePolicy),
216
231
  };
217
232
  }
218
233
 
@@ -227,5 +242,6 @@ export const getInitialValues = (fleet?: Fleet): FleetFormValues => {
227
242
  registerMicroShift: false,
228
243
  rolloutPolicy: getRolloutPolicyValues(undefined),
229
244
  disruptionBudget: getDisruptionBudgetValues(undefined),
245
+ updatePolicy: getUpdatePolicyValues(undefined),
230
246
  };
231
247
  };
@@ -1,12 +1,13 @@
1
1
  import * as React from 'react';
2
2
  import {
3
+ Button,
3
4
  EmptyStateActions,
4
5
  EmptyStateBody,
5
6
  EmptyStateFooter,
6
- SelectList,
7
- SelectOption,
8
7
  Split,
9
8
  SplitItem,
9
+ Stack,
10
+ StackItem,
10
11
  Toolbar,
11
12
  ToolbarContent,
12
13
  ToolbarGroup,
@@ -14,7 +15,6 @@ import {
14
15
  } from '@patternfly/react-core';
15
16
  import { Tbody } from '@patternfly/react-table';
16
17
  import { TopologyIcon } from '@patternfly/react-icons/dist/js/icons/topology-icon';
17
- import { Trans } from 'react-i18next';
18
18
  import { TFunction } from 'i18next';
19
19
 
20
20
  import ListPage from '../ListPage/ListPage';
@@ -23,7 +23,6 @@ import TablePagination from '../Table/TablePagination';
23
23
  import TableTextSearch from '../Table/TableTextSearch';
24
24
  import Table, { ApiSortTableColumn } from '../Table/Table';
25
25
  import { useTableSelect } from '../../hooks/useTableSelect';
26
- import TableActions from '../Table/TableActions';
27
26
  import { getResourceId } from '../../utils/resource';
28
27
  import MassDeleteFleetModal from '../modals/massModals/MassDeleteFleetModal/MassDeleteFleetModal';
29
28
  import FleetRow from './FleetRow';
@@ -72,13 +71,13 @@ const FleetPageActions = ({ createText }: { createText?: string }) => {
72
71
  const FleetEmptyState = () => {
73
72
  const { t } = useTranslation();
74
73
  return (
75
- <ResourceListEmptyState icon={TopologyIcon} titleText={t('No fleets here!')}>
74
+ <ResourceListEmptyState icon={TopologyIcon} titleText={t('No fleets yet')}>
76
75
  <EmptyStateBody>
77
- <Trans t={t}>
78
- Fleets are an easy way to manage multiple devices that share the same configurations.
79
- <br />
80
- With fleets you will be able to edit and update devices in mass.
81
- </Trans>
76
+ <Stack>
77
+ <StackItem>{t('Fleets make it easier to manage multiple devices with shared configurations.')}</StackItem>
78
+ <StackItem>{t('Fleets allow you to edit and update your devices at once.')}</StackItem>
79
+ <StackItem>{t('To get started, create a new fleet or import an existing configuration.')}</StackItem>
80
+ </Stack>
82
81
  </EmptyStateBody>
83
82
  <EmptyStateFooter>
84
83
  <EmptyStateActions>
@@ -137,11 +136,9 @@ const FleetTable = () => {
137
136
  )}
138
137
  {canDelete && (
139
138
  <ToolbarItem>
140
- <TableActions isDisabled={!hasSelectedRows}>
141
- <SelectList>
142
- <SelectOption onClick={() => setIsMassDeleteModalOpen(true)}>{t('Delete')}</SelectOption>
143
- </SelectList>
144
- </TableActions>
139
+ <Button isDisabled={!hasSelectedRows} onClick={() => setIsMassDeleteModalOpen(true)} variant="secondary">
140
+ {t('Delete fleets')}
141
+ </Button>
145
142
  </ToolbarItem>
146
143
  )}
147
144
  </ToolbarContent>
@@ -150,8 +147,9 @@ const FleetTable = () => {
150
147
  aria-label={t('Fleets table')}
151
148
  loading={isUpdating}
152
149
  columns={fleetColumns}
153
- emptyFilters={!hasFiltersEnabled}
150
+ hasFilters={hasFiltersEnabled}
154
151
  emptyData={fleets.length === 0}
152
+ clearFilters={() => setName('')}
155
153
  isAllSelected={isAllSelected}
156
154
  onSelectAll={setAllSelected}
157
155
  >
@@ -173,7 +171,7 @@ const FleetTable = () => {
173
171
  </Tbody>
174
172
  </Table>
175
173
  <TablePagination pagination={pagination} isUpdating={isUpdating} />
176
- {fleets.length === 0 && <FleetEmptyState />}
174
+ {!isUpdating && fleets.length === 0 && !name && <FleetEmptyState />}
177
175
  {fleetToDeleteId && (
178
176
  <DeleteFleetModal
179
177
  fleetId={fleetToDeleteId}
@@ -23,7 +23,7 @@ const ResourceSyncStep = () => {
23
23
  <TextContent>
24
24
  <Text>
25
25
  {t(
26
- "A resource sync is an automated Gitops way to manage imported fleets. The resource sync monitors changes made to the source repository and update the fleet's configurations accordingly.",
26
+ 'A resource sync is an automated Gitops method that helps manage your imported fleets by monitoring source repository changes and updating your fleet configuration accordingly.',
27
27
  )}
28
28
  </Text>
29
29
  </TextContent>
@@ -7,9 +7,10 @@ type ListPageProps = {
7
7
  title: string;
8
8
  headingLevel?: TitleProps['headingLevel'];
9
9
  children: React.ReactNode;
10
+ withBadge?: boolean;
10
11
  };
11
12
 
12
- const ListPage: React.FC<ListPageProps> = ({ title, headingLevel = 'h1', children }) => {
13
+ const ListPage: React.FC<ListPageProps> = ({ title, headingLevel = 'h1', withBadge = true, children }) => {
13
14
  return (
14
15
  <PageSection variant={PageSectionVariants.light}>
15
16
  <Flex gap={{ default: 'gapMd' }} alignItems={{ default: 'alignItemsCenter' }}>
@@ -18,9 +19,11 @@ const ListPage: React.FC<ListPageProps> = ({ title, headingLevel = 'h1', childre
18
19
  {title}
19
20
  </Title>
20
21
  </FlexItem>
21
- <FlexItem>
22
- <TechPreviewBadge />
23
- </FlexItem>
22
+ {withBadge && (
23
+ <FlexItem>
24
+ <TechPreviewBadge />
25
+ </FlexItem>
26
+ )}
24
27
  </Flex>
25
28
  {children}
26
29
  </PageSection>