@flightctl/ui-components 0.7.2 → 0.8.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 (410) hide show
  1. package/dist/src/components/DetailsPage/DetailsPageActions.d.ts +1 -1
  2. package/dist/src/components/DetailsPage/DetailsPageActions.d.ts.map +1 -1
  3. package/dist/src/components/DetailsPage/DetailsPageActions.js +1 -1
  4. package/dist/src/components/DetailsPage/DetailsPageActions.js.map +1 -1
  5. package/dist/src/components/Device/AddDeviceModal/AddDeviceModal.d.ts.map +1 -1
  6. package/dist/src/components/Device/AddDeviceModal/AddDeviceModal.js +18 -14
  7. package/dist/src/components/Device/AddDeviceModal/AddDeviceModal.js.map +1 -1
  8. package/dist/src/components/Device/DeviceDetails/DeviceDetailsPage.d.ts.map +1 -1
  9. package/dist/src/components/Device/DeviceDetails/DeviceDetailsPage.js +10 -11
  10. package/dist/src/components/Device/DeviceDetails/DeviceDetailsPage.js.map +1 -1
  11. package/dist/src/components/Device/DeviceDetails/DeviceDetailsTab.d.ts.map +1 -1
  12. package/dist/src/components/Device/DeviceDetails/DeviceDetailsTab.js +31 -10
  13. package/dist/src/components/Device/DeviceDetails/DeviceDetailsTab.js.map +1 -1
  14. package/dist/src/components/Device/DevicesPage/DecommissionedDevicesTable.js +2 -2
  15. package/dist/src/components/Device/DevicesPage/DecommissionedDevicesTable.js.map +1 -1
  16. package/dist/src/components/Device/DevicesPage/EnrolledDevicesTable.js +2 -2
  17. package/dist/src/components/Device/DevicesPage/EnrolledDevicesTable.js.map +1 -1
  18. package/dist/src/components/Device/EditDeviceWizard/EditDeviceWizard.d.ts.map +1 -1
  19. package/dist/src/components/Device/EditDeviceWizard/EditDeviceWizard.js +4 -2
  20. package/dist/src/components/Device/EditDeviceWizard/EditDeviceWizard.js.map +1 -1
  21. package/dist/src/components/Device/EditDeviceWizard/deviceSpecUtils.d.ts.map +1 -1
  22. package/dist/src/components/Device/EditDeviceWizard/deviceSpecUtils.js +30 -5
  23. package/dist/src/components/Device/EditDeviceWizard/deviceSpecUtils.js.map +1 -1
  24. package/dist/src/components/Device/EditDeviceWizard/steps/ApplicationImageForm.d.ts +2 -1
  25. package/dist/src/components/Device/EditDeviceWizard/steps/ApplicationImageForm.d.ts.map +1 -1
  26. package/dist/src/components/Device/EditDeviceWizard/steps/ApplicationImageForm.js +6 -5
  27. package/dist/src/components/Device/EditDeviceWizard/steps/ApplicationImageForm.js.map +1 -1
  28. package/dist/src/components/Device/EditDeviceWizard/steps/ApplicationInlineForm.d.ts +3 -2
  29. package/dist/src/components/Device/EditDeviceWizard/steps/ApplicationInlineForm.d.ts.map +1 -1
  30. package/dist/src/components/Device/EditDeviceWizard/steps/ApplicationInlineForm.js +13 -9
  31. package/dist/src/components/Device/EditDeviceWizard/steps/ApplicationInlineForm.js.map +1 -1
  32. package/dist/src/components/Device/EditDeviceWizard/steps/ApplicationTemplates.d.ts +3 -1
  33. package/dist/src/components/Device/EditDeviceWizard/steps/ApplicationTemplates.d.ts.map +1 -1
  34. package/dist/src/components/Device/EditDeviceWizard/steps/ApplicationTemplates.js +20 -17
  35. package/dist/src/components/Device/EditDeviceWizard/steps/ApplicationTemplates.js.map +1 -1
  36. package/dist/src/components/Device/EditDeviceWizard/steps/ConfigInlineTemplateForm.d.ts +2 -1
  37. package/dist/src/components/Device/EditDeviceWizard/steps/ConfigInlineTemplateForm.d.ts.map +1 -1
  38. package/dist/src/components/Device/EditDeviceWizard/steps/ConfigInlineTemplateForm.js +18 -14
  39. package/dist/src/components/Device/EditDeviceWizard/steps/ConfigInlineTemplateForm.js.map +1 -1
  40. package/dist/src/components/Device/EditDeviceWizard/steps/ConfigWithRepositoryTemplateForm.d.ts +2 -1
  41. package/dist/src/components/Device/EditDeviceWizard/steps/ConfigWithRepositoryTemplateForm.d.ts.map +1 -1
  42. package/dist/src/components/Device/EditDeviceWizard/steps/ConfigWithRepositoryTemplateForm.js +20 -15
  43. package/dist/src/components/Device/EditDeviceWizard/steps/ConfigWithRepositoryTemplateForm.js.map +1 -1
  44. package/dist/src/components/Device/EditDeviceWizard/steps/ConfigurationTemplates.d.ts +3 -1
  45. package/dist/src/components/Device/EditDeviceWizard/steps/ConfigurationTemplates.d.ts.map +1 -1
  46. package/dist/src/components/Device/EditDeviceWizard/steps/ConfigurationTemplates.js +34 -20
  47. package/dist/src/components/Device/EditDeviceWizard/steps/ConfigurationTemplates.js.map +1 -1
  48. package/dist/src/components/Device/EditDeviceWizard/steps/DeviceTemplateStep.d.ts +2 -1
  49. package/dist/src/components/Device/EditDeviceWizard/steps/DeviceTemplateStep.d.ts.map +1 -1
  50. package/dist/src/components/Device/EditDeviceWizard/steps/DeviceTemplateStep.js +14 -15
  51. package/dist/src/components/Device/EditDeviceWizard/steps/DeviceTemplateStep.js.map +1 -1
  52. package/dist/src/components/Device/EditDeviceWizard/steps/DeviceUpdateStep.d.ts +3 -1
  53. package/dist/src/components/Device/EditDeviceWizard/steps/DeviceUpdateStep.d.ts.map +1 -1
  54. package/dist/src/components/Device/EditDeviceWizard/steps/DeviceUpdateStep.js +6 -36
  55. package/dist/src/components/Device/EditDeviceWizard/steps/DeviceUpdateStep.js.map +1 -1
  56. package/dist/src/components/Device/EditDeviceWizard/steps/GeneralInfoStep.js +1 -1
  57. package/dist/src/components/Device/EditDeviceWizard/steps/GeneralInfoStep.js.map +1 -1
  58. package/dist/src/components/Device/EditDeviceWizard/steps/ReviewDeviceStep.js +1 -1
  59. package/dist/src/components/Device/EditDeviceWizard/steps/ReviewDeviceStep.js.map +1 -1
  60. package/dist/src/components/Device/EditDeviceWizard/steps/ReviewUpdatePolicy.js +2 -2
  61. package/dist/src/components/Device/EditDeviceWizard/steps/ReviewUpdatePolicy.js.map +1 -1
  62. package/dist/src/components/Device/EditDeviceWizard/steps/SystemdUnitsForm.d.ts +4 -2
  63. package/dist/src/components/Device/EditDeviceWizard/steps/SystemdUnitsForm.d.ts.map +1 -1
  64. package/dist/src/components/Device/EditDeviceWizard/steps/SystemdUnitsForm.js +19 -1
  65. package/dist/src/components/Device/EditDeviceWizard/steps/SystemdUnitsForm.js.map +1 -1
  66. package/dist/src/components/Device/EditDeviceWizard/utils.d.ts +2 -16
  67. package/dist/src/components/Device/EditDeviceWizard/utils.d.ts.map +1 -1
  68. package/dist/src/components/Device/EditDeviceWizard/utils.js +3 -3
  69. package/dist/src/components/Device/EditDeviceWizard/utils.js.map +1 -1
  70. package/dist/src/components/Device/SystemdUnitsModal/SystemdUnitsModal.d.ts.map +1 -1
  71. package/dist/src/components/Device/SystemdUnitsModal/SystemdUnitsModal.js +28 -26
  72. package/dist/src/components/Device/SystemdUnitsModal/SystemdUnitsModal.js.map +1 -1
  73. package/dist/src/components/EnrollmentRequest/EnrollmentRequestDetails/EnrollmentRequestDetails.d.ts.map +1 -1
  74. package/dist/src/components/EnrollmentRequest/EnrollmentRequestDetails/EnrollmentRequestDetails.js +11 -16
  75. package/dist/src/components/EnrollmentRequest/EnrollmentRequestDetails/EnrollmentRequestDetails.js.map +1 -1
  76. package/dist/src/components/Events/EventItem.d.ts +7 -0
  77. package/dist/src/components/Events/EventItem.d.ts.map +1 -0
  78. package/dist/src/components/Events/EventItem.js +25 -0
  79. package/dist/src/components/Events/EventItem.js.map +1 -0
  80. package/dist/src/components/Events/EventsCard.css +5 -0
  81. package/dist/src/components/Events/EventsCard.d.ts +11 -0
  82. package/dist/src/components/Events/EventsCard.d.ts.map +1 -0
  83. package/dist/src/components/Events/EventsCard.js +81 -0
  84. package/dist/src/components/Events/EventsCard.js.map +1 -0
  85. package/dist/src/components/Events/useEvents.d.ts +21 -0
  86. package/dist/src/components/Events/useEvents.d.ts.map +1 -0
  87. package/dist/src/components/Events/useEvents.js +105 -0
  88. package/dist/src/components/Events/useEvents.js.map +1 -0
  89. package/dist/src/components/Fleet/CreateFleet/CreateFleetWizard.d.ts.map +1 -1
  90. package/dist/src/components/Fleet/CreateFleet/CreateFleetWizard.js +27 -9
  91. package/dist/src/components/Fleet/CreateFleet/CreateFleetWizard.js.map +1 -1
  92. package/dist/src/components/Fleet/CreateFleet/CreateFleetWizardFooter.d.ts +2 -1
  93. package/dist/src/components/Fleet/CreateFleet/CreateFleetWizardFooter.d.ts.map +1 -1
  94. package/dist/src/components/Fleet/CreateFleet/CreateFleetWizardFooter.js +13 -2
  95. package/dist/src/components/Fleet/CreateFleet/CreateFleetWizardFooter.js.map +1 -1
  96. package/dist/src/components/Fleet/CreateFleet/fleetSpecUtils.d.ts +3 -33
  97. package/dist/src/components/Fleet/CreateFleet/fleetSpecUtils.d.ts.map +1 -1
  98. package/dist/src/components/Fleet/CreateFleet/fleetSpecUtils.js +7 -21
  99. package/dist/src/components/Fleet/CreateFleet/fleetSpecUtils.js.map +1 -1
  100. package/dist/src/components/Fleet/CreateFleet/steps/DeviceLabelSelector.d.ts +4 -2
  101. package/dist/src/components/Fleet/CreateFleet/steps/DeviceLabelSelector.d.ts.map +1 -1
  102. package/dist/src/components/Fleet/CreateFleet/steps/DeviceLabelSelector.js +10 -1
  103. package/dist/src/components/Fleet/CreateFleet/steps/DeviceLabelSelector.js.map +1 -1
  104. package/dist/src/components/Fleet/CreateFleet/steps/GeneralInfoStep.d.ts +5 -3
  105. package/dist/src/components/Fleet/CreateFleet/steps/GeneralInfoStep.d.ts.map +1 -1
  106. package/dist/src/components/Fleet/CreateFleet/steps/GeneralInfoStep.js +4 -4
  107. package/dist/src/components/Fleet/CreateFleet/steps/GeneralInfoStep.js.map +1 -1
  108. package/dist/src/components/Fleet/CreateFleet/steps/ReviewStep.d.ts.map +1 -1
  109. package/dist/src/components/Fleet/CreateFleet/steps/ReviewStep.js +10 -9
  110. package/dist/src/components/Fleet/CreateFleet/steps/ReviewStep.js.map +1 -1
  111. package/dist/src/components/Fleet/CreateFleet/steps/UpdatePolicyStep.d.ts +3 -1
  112. package/dist/src/components/Fleet/CreateFleet/steps/UpdatePolicyStep.d.ts.map +1 -1
  113. package/dist/src/components/Fleet/CreateFleet/steps/UpdatePolicyStep.js +8 -86
  114. package/dist/src/components/Fleet/CreateFleet/steps/UpdatePolicyStep.js.map +1 -1
  115. package/dist/src/components/Fleet/CreateFleet/steps/UpdateStepDisruptionBudget.d.ts +3 -1
  116. package/dist/src/components/Fleet/CreateFleet/steps/UpdateStepDisruptionBudget.d.ts.map +1 -1
  117. package/dist/src/components/Fleet/CreateFleet/steps/UpdateStepDisruptionBudget.js +4 -4
  118. package/dist/src/components/Fleet/CreateFleet/steps/UpdateStepDisruptionBudget.js.map +1 -1
  119. package/dist/src/components/Fleet/CreateFleet/steps/UpdateStepRolloutPolicy.d.ts +3 -1
  120. package/dist/src/components/Fleet/CreateFleet/steps/UpdateStepRolloutPolicy.d.ts.map +1 -1
  121. package/dist/src/components/Fleet/CreateFleet/steps/UpdateStepRolloutPolicy.js +16 -13
  122. package/dist/src/components/Fleet/CreateFleet/steps/UpdateStepRolloutPolicy.js.map +1 -1
  123. package/dist/src/components/Fleet/CreateFleet/steps/UpdateStepUpdatePolicy.d.ts +3 -1
  124. package/dist/src/components/Fleet/CreateFleet/steps/UpdateStepUpdatePolicy.d.ts.map +1 -1
  125. package/dist/src/components/Fleet/CreateFleet/steps/UpdateStepUpdatePolicy.js +20 -20
  126. package/dist/src/components/Fleet/CreateFleet/steps/UpdateStepUpdatePolicy.js.map +1 -1
  127. package/dist/src/components/Fleet/CreateFleet/utils.d.ts +1 -1
  128. package/dist/src/components/Fleet/CreateFleet/utils.d.ts.map +1 -1
  129. package/dist/src/components/Fleet/CreateFleet/utils.js +37 -23
  130. package/dist/src/components/Fleet/CreateFleet/utils.js.map +1 -1
  131. package/dist/src/components/Fleet/DeleteFleetModal/DeleteFleetModal.d.ts.map +1 -1
  132. package/dist/src/components/Fleet/DeleteFleetModal/DeleteFleetModal.js +20 -16
  133. package/dist/src/components/Fleet/DeleteFleetModal/DeleteFleetModal.js.map +1 -1
  134. package/dist/src/components/Fleet/FleetDetails/FleetDetailsContent.d.ts.map +1 -1
  135. package/dist/src/components/Fleet/FleetDetails/FleetDetailsContent.js +8 -5
  136. package/dist/src/components/Fleet/FleetDetails/FleetDetailsContent.js.map +1 -1
  137. package/dist/src/components/Fleet/FleetDetails/{FleetDetails.d.ts → FleetDetailsPage.d.ts} +1 -1
  138. package/dist/src/components/Fleet/FleetDetails/FleetDetailsPage.d.ts.map +1 -0
  139. package/dist/src/components/Fleet/FleetDetails/{FleetDetails.js → FleetDetailsPage.js} +23 -17
  140. package/dist/src/components/Fleet/FleetDetails/FleetDetailsPage.js.map +1 -0
  141. package/dist/src/components/Fleet/FleetRow.d.ts.map +1 -1
  142. package/dist/src/components/Fleet/FleetRow.js +9 -12
  143. package/dist/src/components/Fleet/FleetRow.js.map +1 -1
  144. package/dist/src/components/Masthead/UserPreferencesModal.d.ts.map +1 -1
  145. package/dist/src/components/Masthead/UserPreferencesModal.js +14 -15
  146. package/dist/src/components/Masthead/UserPreferencesModal.js.map +1 -1
  147. package/dist/src/components/Masthead/UserPreferencesProvider.d.ts +8 -5
  148. package/dist/src/components/Masthead/UserPreferencesProvider.d.ts.map +1 -1
  149. package/dist/src/components/Masthead/UserPreferencesProvider.js +7 -5
  150. package/dist/src/components/Masthead/UserPreferencesProvider.js.map +1 -1
  151. package/dist/src/components/Repository/CreateRepository/CreateRepositoryForm.d.ts.map +1 -1
  152. package/dist/src/components/Repository/CreateRepository/CreateRepositoryForm.js +11 -7
  153. package/dist/src/components/Repository/CreateRepository/CreateRepositoryForm.js.map +1 -1
  154. package/dist/src/components/Repository/CreateRepository/utils.d.ts.map +1 -1
  155. package/dist/src/components/Repository/CreateRepository/utils.js +2 -3
  156. package/dist/src/components/Repository/CreateRepository/utils.js.map +1 -1
  157. package/dist/src/components/Repository/RepositoryDetails/DeleteRepositoryModal.d.ts.map +1 -1
  158. package/dist/src/components/Repository/RepositoryDetails/DeleteRepositoryModal.js +25 -24
  159. package/dist/src/components/Repository/RepositoryDetails/DeleteRepositoryModal.js.map +1 -1
  160. package/dist/src/components/Repository/RepositoryDetails/RepositoryDetails.d.ts.map +1 -1
  161. package/dist/src/components/Repository/RepositoryDetails/RepositoryDetails.js +22 -8
  162. package/dist/src/components/Repository/RepositoryDetails/RepositoryDetails.js.map +1 -1
  163. package/dist/src/components/ResourceSync/RepositoryResourceSyncList.d.ts.map +1 -1
  164. package/dist/src/components/ResourceSync/RepositoryResourceSyncList.js +18 -15
  165. package/dist/src/components/ResourceSync/RepositoryResourceSyncList.js.map +1 -1
  166. package/dist/src/components/common/CodeEditor/CodeEditorTheme.d.ts +5 -0
  167. package/dist/src/components/common/CodeEditor/CodeEditorTheme.d.ts.map +1 -0
  168. package/dist/src/components/common/CodeEditor/CodeEditorTheme.js +52 -0
  169. package/dist/src/components/common/CodeEditor/CodeEditorTheme.js.map +1 -0
  170. package/dist/src/components/common/CodeEditor/Shortcut.css +22 -0
  171. package/dist/src/components/common/CodeEditor/Shortcut.d.ts +20 -0
  172. package/dist/src/components/common/CodeEditor/Shortcut.d.ts.map +1 -0
  173. package/dist/src/components/common/CodeEditor/Shortcut.js +46 -0
  174. package/dist/src/components/common/CodeEditor/Shortcut.js.map +1 -0
  175. package/dist/src/components/common/CodeEditor/YamlEditor.css +12 -0
  176. package/dist/src/components/common/CodeEditor/YamlEditor.d.ts +16 -0
  177. package/dist/src/components/common/CodeEditor/YamlEditor.d.ts.map +1 -0
  178. package/dist/src/components/common/CodeEditor/YamlEditor.js +48 -0
  179. package/dist/src/components/common/CodeEditor/YamlEditor.js.map +1 -0
  180. package/dist/src/components/common/CodeEditor/YamlEditorBase.css +3 -0
  181. package/dist/src/components/common/CodeEditor/YamlEditorBase.d.ts +11 -0
  182. package/dist/src/components/common/CodeEditor/YamlEditorBase.d.ts.map +1 -0
  183. package/dist/src/components/common/CodeEditor/YamlEditorBase.js +75 -0
  184. package/dist/src/components/common/CodeEditor/YamlEditorBase.js.map +1 -0
  185. package/dist/src/components/common/CodeEditor/useShortcutPopover.d.ts +3 -0
  186. package/dist/src/components/common/CodeEditor/useShortcutPopover.d.ts.map +1 -0
  187. package/dist/src/components/common/CodeEditor/useShortcutPopover.js +26 -0
  188. package/dist/src/components/common/CodeEditor/useShortcutPopover.js.map +1 -0
  189. package/dist/src/components/common/LabelsView.d.ts +1 -3
  190. package/dist/src/components/common/LabelsView.d.ts.map +1 -1
  191. package/dist/src/components/common/LabelsView.js +2 -4
  192. package/dist/src/components/common/LabelsView.js.map +1 -1
  193. package/dist/src/components/common/LeaveFormConfirmation.d.ts.map +1 -1
  194. package/dist/src/components/common/LeaveFormConfirmation.js +8 -7
  195. package/dist/src/components/common/LeaveFormConfirmation.js.map +1 -1
  196. package/dist/src/components/common/TechPreviewBadge.d.ts.map +1 -1
  197. package/dist/src/components/common/TechPreviewBadge.js +3 -2
  198. package/dist/src/components/common/TechPreviewBadge.js.map +1 -1
  199. package/dist/src/components/form/FlightCtlActionGroup.d.ts +1 -1
  200. package/dist/src/components/form/FlightCtlActionGroup.d.ts.map +1 -1
  201. package/dist/src/components/form/FlightCtlActionGroup.js.map +1 -1
  202. package/dist/src/components/form/FormSelect.d.ts +4 -2
  203. package/dist/src/components/form/FormSelect.d.ts.map +1 -1
  204. package/dist/src/components/form/FormSelect.js +12 -1
  205. package/dist/src/components/form/FormSelect.js.map +1 -1
  206. package/dist/src/components/form/FormSelectTypeahead.d.ts +4 -3
  207. package/dist/src/components/form/FormSelectTypeahead.d.ts.map +1 -1
  208. package/dist/src/components/form/FormSelectTypeahead.js +18 -1
  209. package/dist/src/components/form/FormSelectTypeahead.js.map +1 -1
  210. package/dist/src/components/form/LabelsField.d.ts +4 -3
  211. package/dist/src/components/form/LabelsField.d.ts.map +1 -1
  212. package/dist/src/components/form/LabelsField.js +15 -5
  213. package/dist/src/components/form/LabelsField.js.map +1 -1
  214. package/dist/src/components/form/NameField.d.ts +2 -2
  215. package/dist/src/components/form/NameField.d.ts.map +1 -1
  216. package/dist/src/components/form/NameField.js +14 -4
  217. package/dist/src/components/form/NameField.js.map +1 -1
  218. package/dist/src/components/form/RichValidationTextField.d.ts +2 -2
  219. package/dist/src/components/form/RichValidationTextField.d.ts.map +1 -1
  220. package/dist/src/components/form/RichValidationTextField.js +13 -1
  221. package/dist/src/components/form/RichValidationTextField.js.map +1 -1
  222. package/dist/src/components/form/TextListField.d.ts +4 -2
  223. package/dist/src/components/form/TextListField.d.ts.map +1 -1
  224. package/dist/src/components/form/TextListField.js +13 -3
  225. package/dist/src/components/form/TextListField.js.map +1 -1
  226. package/dist/src/components/form/UploadField.d.ts +3 -2
  227. package/dist/src/components/form/UploadField.d.ts.map +1 -1
  228. package/dist/src/components/form/UploadField.js +10 -1
  229. package/dist/src/components/form/UploadField.js.map +1 -1
  230. package/dist/src/components/form/validations.d.ts +1 -2
  231. package/dist/src/components/form/validations.d.ts.map +1 -1
  232. package/dist/src/components/form/validations.js +1 -4
  233. package/dist/src/components/form/validations.js.map +1 -1
  234. package/dist/src/components/modals/ApproveDeviceModal/ApproveDeviceModal.d.ts.map +1 -1
  235. package/dist/src/components/modals/ApproveDeviceModal/ApproveDeviceModal.js +4 -1
  236. package/dist/src/components/modals/ApproveDeviceModal/ApproveDeviceModal.js.map +1 -1
  237. package/dist/src/components/modals/CreateRepositoryModal/CreateRepositoryModal.d.ts.map +1 -1
  238. package/dist/src/components/modals/CreateRepositoryModal/CreateRepositoryModal.js +5 -3
  239. package/dist/src/components/modals/CreateRepositoryModal/CreateRepositoryModal.js.map +1 -1
  240. package/dist/src/components/modals/DecommissionModal/DecommissionModal.d.ts.map +1 -1
  241. package/dist/src/components/modals/DecommissionModal/DecommissionModal.js +32 -29
  242. package/dist/src/components/modals/DecommissionModal/DecommissionModal.js.map +1 -1
  243. package/dist/src/components/modals/DeleteModal/DeleteModal.d.ts.map +1 -1
  244. package/dist/src/components/modals/DeleteModal/DeleteModal.js +18 -15
  245. package/dist/src/components/modals/DeleteModal/DeleteModal.js.map +1 -1
  246. package/dist/src/components/modals/massModals/MassApproveDeviceModal/MassApproveDeviceModal.d.ts.map +1 -1
  247. package/dist/src/components/modals/massModals/MassApproveDeviceModal/MassApproveDeviceModal.js +33 -30
  248. package/dist/src/components/modals/massModals/MassApproveDeviceModal/MassApproveDeviceModal.js.map +1 -1
  249. package/dist/src/components/modals/massModals/MassDecommissionDeviceModal/MassDecommissionDeviceModal.d.ts.map +1 -1
  250. package/dist/src/components/modals/massModals/MassDecommissionDeviceModal/MassDecommissionDeviceModal.js +27 -24
  251. package/dist/src/components/modals/massModals/MassDecommissionDeviceModal/MassDecommissionDeviceModal.js.map +1 -1
  252. package/dist/src/components/modals/massModals/MassDeleteDeviceModal/MassDeleteDeviceModal.d.ts.map +1 -1
  253. package/dist/src/components/modals/massModals/MassDeleteDeviceModal/MassDeleteDeviceModal.js +26 -23
  254. package/dist/src/components/modals/massModals/MassDeleteDeviceModal/MassDeleteDeviceModal.js.map +1 -1
  255. package/dist/src/components/modals/massModals/MassDeleteFleetModal/MassDeleteFleetModal.d.ts.map +1 -1
  256. package/dist/src/components/modals/massModals/MassDeleteFleetModal/MassDeleteFleetModal.js +30 -25
  257. package/dist/src/components/modals/massModals/MassDeleteFleetModal/MassDeleteFleetModal.js.map +1 -1
  258. package/dist/src/components/modals/massModals/MassDeleteRepositoryModal/MassDeleteRepositoryModal.d.ts.map +1 -1
  259. package/dist/src/components/modals/massModals/MassDeleteRepositoryModal/MassDeleteRepositoryModal.js +29 -26
  260. package/dist/src/components/modals/massModals/MassDeleteRepositoryModal/MassDeleteRepositoryModal.js.map +1 -1
  261. package/dist/src/components/modals/massModals/MassDeleteResourceSyncModal/MassDeleteResourceSyncModal.d.ts +1 -1
  262. package/dist/src/components/modals/massModals/MassDeleteResourceSyncModal/MassDeleteResourceSyncModal.d.ts.map +1 -1
  263. package/dist/src/components/modals/massModals/MassDeleteResourceSyncModal/MassDeleteResourceSyncModal.js +28 -25
  264. package/dist/src/components/modals/massModals/MassDeleteResourceSyncModal/MassDeleteResourceSyncModal.js.map +1 -1
  265. package/dist/src/constants.d.ts +2 -1
  266. package/dist/src/constants.d.ts.map +1 -1
  267. package/dist/src/constants.js +3 -1
  268. package/dist/src/constants.js.map +1 -1
  269. package/dist/src/hooks/useAppLinks.d.ts +5 -0
  270. package/dist/src/hooks/useAppLinks.d.ts.map +1 -0
  271. package/dist/src/hooks/useAppLinks.js +45 -0
  272. package/dist/src/hooks/useAppLinks.js.map +1 -0
  273. package/dist/src/{components/EnrollmentRequest/EnrollmentRequestDetails/useEnrollmentRequestSystemInfo.d.ts → hooks/useDeviceSpecSystemInfo.d.ts} +2 -2
  274. package/dist/src/hooks/useDeviceSpecSystemInfo.d.ts.map +1 -0
  275. package/dist/src/{components/EnrollmentRequest/EnrollmentRequestDetails/useEnrollmentRequestSystemInfo.js → hooks/useDeviceSpecSystemInfo.js} +18 -10
  276. package/dist/src/hooks/useDeviceSpecSystemInfo.js.map +1 -0
  277. package/dist/src/hooks/useFetchPeriodically.d.ts +2 -2
  278. package/dist/src/hooks/useFetchPeriodically.d.ts.map +1 -1
  279. package/dist/src/hooks/useFetchPeriodically.js +1 -1
  280. package/dist/src/hooks/useFetchPeriodically.js.map +1 -1
  281. package/dist/src/hooks/useThemePreferences.d.ts +6 -3
  282. package/dist/src/hooks/useThemePreferences.d.ts.map +1 -1
  283. package/dist/src/hooks/useThemePreferences.js +46 -23
  284. package/dist/src/hooks/useThemePreferences.js.map +1 -1
  285. package/dist/src/types/deviceSpec.d.ts +7 -2
  286. package/dist/src/types/deviceSpec.d.ts.map +1 -1
  287. package/dist/src/types/deviceSpec.js +16 -12
  288. package/dist/src/types/deviceSpec.js.map +1 -1
  289. package/dist/src/types/extraTypes.d.ts +3 -2
  290. package/dist/src/types/extraTypes.d.ts.map +1 -1
  291. package/dist/src/types/extraTypes.js.map +1 -1
  292. package/dist/src/utils/dates.d.ts +2 -1
  293. package/dist/src/utils/dates.d.ts.map +1 -1
  294. package/dist/src/utils/dates.js +20 -20
  295. package/dist/src/utils/dates.js.map +1 -1
  296. package/dist/src/utils/patch.d.ts.map +1 -1
  297. package/dist/src/utils/patch.js +2 -1
  298. package/dist/src/utils/patch.js.map +1 -1
  299. package/package.json +6 -2
  300. package/src/components/DetailsPage/DetailsPageActions.tsx +2 -1
  301. package/src/components/Device/AddDeviceModal/AddDeviceModal.tsx +27 -22
  302. package/src/components/Device/DeviceDetails/DeviceDetailsPage.tsx +10 -19
  303. package/src/components/Device/DeviceDetails/DeviceDetailsTab.tsx +65 -21
  304. package/src/components/Device/DevicesPage/DecommissionedDevicesTable.tsx +2 -2
  305. package/src/components/Device/DevicesPage/EnrolledDevicesTable.tsx +2 -2
  306. package/src/components/Device/EditDeviceWizard/EditDeviceWizard.tsx +6 -1
  307. package/src/components/Device/EditDeviceWizard/deviceSpecUtils.ts +29 -5
  308. package/src/components/Device/EditDeviceWizard/steps/ApplicationImageForm.tsx +19 -5
  309. package/src/components/Device/EditDeviceWizard/steps/ApplicationInlineForm.tsx +53 -23
  310. package/src/components/Device/EditDeviceWizard/steps/ApplicationTemplates.tsx +68 -53
  311. package/src/components/Device/EditDeviceWizard/steps/ConfigInlineTemplateForm.tsx +40 -25
  312. package/src/components/Device/EditDeviceWizard/steps/ConfigWithRepositoryTemplateForm.tsx +38 -17
  313. package/src/components/Device/EditDeviceWizard/steps/ConfigurationTemplates.tsx +81 -38
  314. package/src/components/Device/EditDeviceWizard/steps/DeviceTemplateStep.tsx +15 -19
  315. package/src/components/Device/EditDeviceWizard/steps/DeviceUpdateStep.tsx +7 -47
  316. package/src/components/Device/EditDeviceWizard/steps/GeneralInfoStep.tsx +1 -1
  317. package/src/components/Device/EditDeviceWizard/steps/ReviewDeviceStep.tsx +1 -1
  318. package/src/components/Device/EditDeviceWizard/steps/ReviewUpdatePolicy.tsx +2 -2
  319. package/src/components/Device/EditDeviceWizard/steps/SystemdUnitsForm.tsx +30 -2
  320. package/src/components/Device/EditDeviceWizard/utils.ts +6 -7
  321. package/src/components/Device/SystemdUnitsModal/SystemdUnitsModal.tsx +38 -35
  322. package/src/components/EnrollmentRequest/EnrollmentRequestDetails/EnrollmentRequestDetails.tsx +8 -19
  323. package/src/components/Events/EventItem.tsx +38 -0
  324. package/src/components/Events/EventsCard.css +5 -0
  325. package/src/components/Events/EventsCard.tsx +157 -0
  326. package/src/components/Events/useEvents.ts +136 -0
  327. package/src/components/Fleet/CreateFleet/CreateFleetWizard.tsx +29 -13
  328. package/src/components/Fleet/CreateFleet/CreateFleetWizardFooter.tsx +25 -10
  329. package/src/components/Fleet/CreateFleet/fleetSpecUtils.ts +9 -23
  330. package/src/components/Fleet/CreateFleet/steps/DeviceLabelSelector.tsx +12 -1
  331. package/src/components/Fleet/CreateFleet/steps/GeneralInfoStep.tsx +10 -5
  332. package/src/components/Fleet/CreateFleet/steps/ReviewStep.tsx +20 -17
  333. package/src/components/Fleet/CreateFleet/steps/UpdatePolicyStep.tsx +18 -122
  334. package/src/components/Fleet/CreateFleet/steps/UpdateStepDisruptionBudget.tsx +4 -1
  335. package/src/components/Fleet/CreateFleet/steps/UpdateStepRolloutPolicy.tsx +50 -31
  336. package/src/components/Fleet/CreateFleet/steps/UpdateStepUpdatePolicy.tsx +57 -12
  337. package/src/components/Fleet/CreateFleet/utils.ts +40 -22
  338. package/src/components/Fleet/DeleteFleetModal/DeleteFleetModal.tsx +28 -28
  339. package/src/components/Fleet/FleetDetails/FleetDetailsContent.tsx +10 -9
  340. package/src/components/Fleet/FleetDetails/{FleetDetails.tsx → FleetDetailsPage.tsx} +40 -25
  341. package/src/components/Fleet/FleetRow.tsx +10 -11
  342. package/src/components/Masthead/UserPreferencesModal.tsx +43 -56
  343. package/src/components/Masthead/UserPreferencesProvider.tsx +15 -10
  344. package/src/components/Repository/CreateRepository/CreateRepositoryForm.tsx +14 -15
  345. package/src/components/Repository/CreateRepository/utils.ts +2 -3
  346. package/src/components/Repository/RepositoryDetails/DeleteRepositoryModal.tsx +54 -55
  347. package/src/components/Repository/RepositoryDetails/RepositoryDetails.tsx +47 -14
  348. package/src/components/ResourceSync/RepositoryResourceSyncList.tsx +28 -25
  349. package/src/components/common/CodeEditor/CodeEditorTheme.ts +53 -0
  350. package/src/components/common/CodeEditor/Shortcut.css +22 -0
  351. package/src/components/common/CodeEditor/Shortcut.tsx +90 -0
  352. package/src/components/common/CodeEditor/YamlEditor.css +12 -0
  353. package/src/components/common/CodeEditor/YamlEditor.tsx +81 -0
  354. package/src/components/common/CodeEditor/YamlEditorBase.css +3 -0
  355. package/src/components/common/CodeEditor/YamlEditorBase.tsx +124 -0
  356. package/src/components/common/CodeEditor/useShortcutPopover.tsx +39 -0
  357. package/src/components/common/LabelsView.tsx +2 -11
  358. package/src/components/common/LeaveFormConfirmation.tsx +14 -18
  359. package/src/components/common/TechPreviewBadge.tsx +3 -1
  360. package/src/components/form/FlightCtlActionGroup.tsx +1 -1
  361. package/src/components/form/FormSelect.tsx +14 -3
  362. package/src/components/form/FormSelectTypeahead.tsx +24 -3
  363. package/src/components/form/LabelsField.tsx +20 -20
  364. package/src/components/form/NameField.tsx +18 -4
  365. package/src/components/form/RichValidationTextField.tsx +20 -1
  366. package/src/components/form/TextListField.tsx +19 -3
  367. package/src/components/form/UploadField.tsx +16 -2
  368. package/src/components/form/validations.ts +1 -4
  369. package/src/components/modals/ApproveDeviceModal/ApproveDeviceModal.tsx +12 -7
  370. package/src/components/modals/CreateRepositoryModal/CreateRepositoryModal.tsx +6 -3
  371. package/src/components/modals/DecommissionModal/DecommissionModal.tsx +60 -56
  372. package/src/components/modals/DeleteModal/DeleteModal.tsx +25 -27
  373. package/src/components/modals/massModals/MassApproveDeviceModal/MassApproveDeviceModal.tsx +81 -92
  374. package/src/components/modals/massModals/MassDecommissionDeviceModal/MassDecommissionDeviceModal.tsx +64 -67
  375. package/src/components/modals/massModals/MassDeleteDeviceModal/MassDeleteDeviceModal.tsx +60 -62
  376. package/src/components/modals/massModals/MassDeleteFleetModal/MassDeleteFleetModal.tsx +80 -87
  377. package/src/components/modals/massModals/MassDeleteRepositoryModal/MassDeleteRepositoryModal.tsx +70 -73
  378. package/src/components/modals/massModals/MassDeleteResourceSyncModal/MassDeleteResourceSyncModal.tsx +62 -63
  379. package/src/constants.ts +2 -1
  380. package/src/hooks/useAppLinks.ts +49 -0
  381. package/src/{components/EnrollmentRequest/EnrollmentRequestDetails/useEnrollmentRequestSystemInfo.tsx → hooks/useDeviceSpecSystemInfo.tsx} +15 -7
  382. package/src/hooks/useFetchPeriodically.ts +3 -3
  383. package/src/hooks/useThemePreferences.ts +48 -21
  384. package/src/types/deviceSpec.ts +25 -13
  385. package/src/types/extraTypes.ts +7 -4
  386. package/src/utils/dates.ts +23 -24
  387. package/src/utils/patch.ts +3 -1
  388. package/dist/src/components/Device/DeviceDetails/DeviceStatusDebugModal.css +0 -3
  389. package/dist/src/components/Device/DeviceDetails/DeviceStatusDebugModal.d.ts +0 -9
  390. package/dist/src/components/Device/DeviceDetails/DeviceStatusDebugModal.d.ts.map +0 -1
  391. package/dist/src/components/Device/DeviceDetails/DeviceStatusDebugModal.js +0 -34
  392. package/dist/src/components/Device/DeviceDetails/DeviceStatusDebugModal.js.map +0 -1
  393. package/dist/src/components/EnrollmentRequest/EnrollmentRequestDetails/useEnrollmentRequestSystemInfo.d.ts.map +0 -1
  394. package/dist/src/components/EnrollmentRequest/EnrollmentRequestDetails/useEnrollmentRequestSystemInfo.js.map +0 -1
  395. package/dist/src/components/Fleet/CreateFleet/steps/UpdateConfirmChangesModal.d.ts +0 -9
  396. package/dist/src/components/Fleet/CreateFleet/steps/UpdateConfirmChangesModal.d.ts.map +0 -1
  397. package/dist/src/components/Fleet/CreateFleet/steps/UpdateConfirmChangesModal.js +0 -61
  398. package/dist/src/components/Fleet/CreateFleet/steps/UpdateConfirmChangesModal.js.map +0 -1
  399. package/dist/src/components/Fleet/FleetDetails/FleetDetails.d.ts.map +0 -1
  400. package/dist/src/components/Fleet/FleetDetails/FleetDetails.js.map +0 -1
  401. package/dist/src/components/common/LabelsView.css +0 -9
  402. package/dist/src/links.d.ts +0 -7
  403. package/dist/src/links.d.ts.map +0 -1
  404. package/dist/src/links.js +0 -14
  405. package/dist/src/links.js.map +0 -1
  406. package/src/components/Device/DeviceDetails/DeviceStatusDebugModal.css +0 -3
  407. package/src/components/Device/DeviceDetails/DeviceStatusDebugModal.tsx +0 -60
  408. package/src/components/Fleet/CreateFleet/steps/UpdateConfirmChangesModal.tsx +0 -96
  409. package/src/components/common/LabelsView.css +0 -9
  410. package/src/links.ts +0 -16
@@ -1,6 +1,6 @@
1
1
  import { type DeviceUpdatePolicySpec, FleetSpec, Percentage } from '@flightctl/types';
2
2
 
3
- import { BatchLimitType, UpdatePolicyForm } from './../../../types/deviceSpec';
3
+ import { BatchForm, BatchLimitType, RolloutPolicyForm, UpdatePolicyForm } from './../../../types/deviceSpec';
4
4
  import { fromAPILabel } from '../../../utils/labels';
5
5
  import * as timeUtils from '../../../utils/time';
6
6
  import { schedulesAreEqual } from '../../../utils/patch';
@@ -15,32 +15,14 @@ const numberValue = (value: Percentage | number | undefined) => {
15
15
  return Number(value.replace(/[%]/, ''));
16
16
  };
17
17
 
18
- export const getEmptyInitializedBatch = () => ({
19
- limit: '',
18
+ export const getEmptyInitializedBatch = (): BatchForm => ({
19
+ limit: undefined,
20
20
  limitType: BatchLimitType.BatchLimitPercent,
21
21
  successThreshold: numberValue(DEFAULT_BACKEND_SUCCESS_THRESHOLD_PERCENTAGE),
22
22
  selector: [],
23
23
  });
24
24
 
25
- export const getEmptyUpdateFormParams = () => ({
26
- isEditable: true,
27
- isAdvanced: false,
28
- downloadAndInstallDiffer: false,
29
- // Download schedule
30
- downloadStartsAt: timeUtils.defaultStartTime,
31
- downloadEndsAt: timeUtils.defaultEndTime,
32
- downloadScheduleMode: timeUtils.UpdateScheduleMode.Daily,
33
- downloadWeekDays: [false, false, false, false, false, false, false],
34
- downloadTimeZone: timeUtils.localDeviceTimezone,
35
- // Install schedule (updateSchedule in the API)
36
- installStartsAt: timeUtils.defaultStartTime,
37
- installEndsAt: timeUtils.defaultEndTime,
38
- installScheduleMode: timeUtils.UpdateScheduleMode.Daily,
39
- installWeekDays: [false, false, false, false, false, false, false],
40
- installTimeZone: timeUtils.localDeviceTimezone,
41
- });
42
-
43
- export const getRolloutPolicyValues = (fleetSpec?: FleetSpec) => {
25
+ export const getRolloutPolicyValues = (fleetSpec?: FleetSpec): RolloutPolicyForm => {
44
26
  const batches = (fleetSpec?.rolloutPolicy?.deviceSelection?.sequence || []).map((batch) => ({
45
27
  selector: fromAPILabel(batch.selector?.matchLabels || {}),
46
28
  limit: numberValue(batch.limit),
@@ -52,7 +34,11 @@ export const getRolloutPolicyValues = (fleetSpec?: FleetSpec) => {
52
34
 
53
35
  // If the policy does not specify the timeout, we set the backend's default as the field is required in the UI
54
36
  const updateTimeout = fleetSpec?.rolloutPolicy?.defaultUpdateTimeout || `${DEFAULT_BACKEND_UPDATE_TIMEOUT_MINUTES}m`;
55
- return { isAdvanced: batches.length > 0, batches, updateTimeout: timeUtils.durationToMinutes(updateTimeout) };
37
+ return {
38
+ isAdvanced: batches.length > 0,
39
+ batches: batches.length ? batches : [getEmptyInitializedBatch()],
40
+ updateTimeout: timeUtils.durationToMinutes(updateTimeout),
41
+ };
56
42
  };
57
43
 
58
44
  export const getDisruptionBudgetValues = (fleetSpec?: FleetSpec) => {
@@ -13,6 +13,8 @@ import { FlightCtlLabel } from '../../../../types/extraTypes';
13
13
  import { getApiListCount } from '../../../../utils/api';
14
14
  import { getErrorMessage } from '../../../../utils/error';
15
15
  import { commonQueries } from '../../../../utils/query';
16
+ import LabelsView from '../../../common/LabelsView';
17
+ import { toAPILabel } from '../../../../utils/labels';
16
18
 
17
19
  const validateLabels = (labels: FlightCtlLabel[]) =>
18
20
  hasUniqueLabelKeys(labels) && getInvalidKubernetesLabels(labels).length === 0;
@@ -108,4 +110,13 @@ const DeviceLabelSelector = () => {
108
110
  );
109
111
  };
110
112
 
111
- export default DeviceLabelSelector;
113
+ const DeviceLabelSelectorWrapper = ({ isReadOnly }: { isReadOnly: boolean }) => {
114
+ const [{ value: labels }] = useField<FlightCtlLabel[]>('labels');
115
+
116
+ if (isReadOnly) {
117
+ return <LabelsView prefix="device-selector" labels={toAPILabel(labels)} />;
118
+ }
119
+ return <DeviceLabelSelector />;
120
+ };
121
+
122
+ export default DeviceLabelSelectorWrapper;
@@ -10,13 +10,18 @@ import FlightCtlForm from '../../../form/FlightCtlForm';
10
10
  import { getDnsSubdomainValidations } from '../../../form/validations';
11
11
  import DeviceLabelSelector from './DeviceLabelSelector';
12
12
 
13
+ type GeneralInfoStepProps = {
14
+ isReadOnly: boolean;
15
+ isEdit: boolean;
16
+ };
17
+
13
18
  export const generalInfoStepId = 'general-info';
14
19
 
15
20
  export const isGeneralInfoStepValid = (errors: FormikErrors<FleetFormValues>) => {
16
21
  return !errors.name && !errors.labels && !errors.fleetLabels;
17
22
  };
18
23
 
19
- const GeneralInfoStep = ({ isEdit }: { isEdit: boolean }) => {
24
+ const GeneralInfoStep = ({ isEdit, isReadOnly }: GeneralInfoStepProps) => {
20
25
  const { t } = useTranslation();
21
26
 
22
27
  return (
@@ -24,17 +29,17 @@ const GeneralInfoStep = ({ isEdit }: { isEdit: boolean }) => {
24
29
  <FlightCtlForm>
25
30
  <NameField
26
31
  name="name"
27
- aria-label={t('Name')}
32
+ aria-label={t('Fleet name')}
28
33
  isRequired
29
- isDisabled={isEdit}
34
+ isDisabled={isEdit || isReadOnly}
30
35
  resourceType="fleets"
31
36
  validations={getDnsSubdomainValidations(t)}
32
37
  />
33
38
  <FormGroup label={t('Fleet labels')}>
34
- <LabelsField name="fleetLabels" />
39
+ <LabelsField name="fleetLabels" isDisabled={isReadOnly} />
35
40
  </FormGroup>
36
41
  <FormGroup label={t('Device selector')}>
37
- <DeviceLabelSelector />
42
+ <DeviceLabelSelector isReadOnly={isReadOnly} />
38
43
  </FormGroup>
39
44
  </FlightCtlForm>
40
45
  </Grid>
@@ -40,7 +40,7 @@ const ReviewStep = ({ error }: { error?: unknown }) => {
40
40
  }}
41
41
  >
42
42
  <DescriptionListGroup>
43
- <DescriptionListTerm>{t('Name')}</DescriptionListTerm>
43
+ <DescriptionListTerm>{t('Fleet name')}</DescriptionListTerm>
44
44
  <DescriptionListDescription>{values.name}</DescriptionListDescription>
45
45
  </DescriptionListGroup>
46
46
  {values.fleetLabels.length > 0 && (
@@ -92,22 +92,25 @@ const ReviewStep = ({ error }: { error?: unknown }) => {
92
92
  </DescriptionListDescription>
93
93
  </DescriptionListGroup>
94
94
  )}
95
-
96
- {values.rolloutPolicy.isAdvanced && (
97
- <DescriptionListGroup>
98
- <DescriptionListTerm>{t('Rollout policy')}</DescriptionListTerm>
99
- <DescriptionListDescription>
100
- <ReviewUpdateRolloutPolicy rolloutPolicy={values.rolloutPolicy} />
101
- </DescriptionListDescription>
102
- </DescriptionListGroup>
103
- )}
104
- {values.disruptionBudget.isAdvanced && (
105
- <DescriptionListGroup>
106
- <DescriptionListTerm>{t('Disruption budget')}</DescriptionListTerm>
107
- <DescriptionListDescription>
108
- <ReviewUpdateDisruptionBudget disruptionBudget={values.disruptionBudget} />
109
- </DescriptionListDescription>
110
- </DescriptionListGroup>
95
+ {!values.useBasicUpdateConfig && (
96
+ <>
97
+ {values.rolloutPolicy.isAdvanced && (
98
+ <DescriptionListGroup>
99
+ <DescriptionListTerm>{t('Rollout policy')}</DescriptionListTerm>
100
+ <DescriptionListDescription>
101
+ <ReviewUpdateRolloutPolicy rolloutPolicy={values.rolloutPolicy} />
102
+ </DescriptionListDescription>
103
+ </DescriptionListGroup>
104
+ )}
105
+ {values.disruptionBudget.isAdvanced && (
106
+ <DescriptionListGroup>
107
+ <DescriptionListTerm>{t('Disruption budget')}</DescriptionListTerm>
108
+ <DescriptionListDescription>
109
+ <ReviewUpdateDisruptionBudget disruptionBudget={values.disruptionBudget} />
110
+ </DescriptionListDescription>
111
+ </DescriptionListGroup>
112
+ )}
113
+ </>
111
114
  )}
112
115
  </FlightControlDescriptionList>
113
116
  </StackItem>
@@ -1,12 +1,7 @@
1
1
  import * as React from 'react';
2
- import { Alert, Checkbox, FormGroup, FormSection, Grid } from '@patternfly/react-core';
2
+ import { Alert, FormSection, Grid } from '@patternfly/react-core';
3
3
  import { FormikErrors, useFormikContext } from 'formik';
4
4
 
5
- import {
6
- DEFAULT_BACKEND_UPDATE_TIMEOUT_MINUTES,
7
- getEmptyInitializedBatch,
8
- getEmptyUpdateFormParams,
9
- } from '../fleetSpecUtils';
10
5
  import { useTranslation } from '../../../../hooks/useTranslation';
11
6
  import LabelWithHelperText from '../../../common/WithHelperText';
12
7
  import { FleetFormValues } from '../../../../types/deviceSpec';
@@ -15,133 +10,42 @@ import FlightCtlForm from '../../../form/FlightCtlForm';
15
10
  import UpdateStepRolloutPolicy from './UpdateStepRolloutPolicy';
16
11
  import UpdateStepDisruptionBudget from './UpdateStepDisruptionBudget';
17
12
  import UpdateStepUpdatePolicy from './UpdateStepUpdatePolicy';
18
- import UpdateConfirmChangesModal, { StepSetting } from './UpdateConfirmChangesModal';
13
+ import CheckboxField from '../../../form/CheckboxField';
19
14
 
20
15
  export const updatePolicyStepId = 'update-policy';
21
16
 
22
17
  export const isUpdatePolicyStepValid = (errors: FormikErrors<FleetFormValues>) =>
23
18
  !errors.rolloutPolicy && !errors.disruptionBudget && !errors.updatePolicy;
24
19
 
25
- const UpdatePolicyStep = () => {
20
+ const UpdatePolicyStep = ({ isReadOnly }: { isReadOnly: boolean }) => {
26
21
  const { t } = useTranslation();
27
22
 
28
23
  const {
29
- values: { rolloutPolicy, disruptionBudget, updatePolicy },
30
- setFieldValue,
24
+ values: { useBasicUpdateConfig, rolloutPolicy, disruptionBudget, updatePolicy },
31
25
  } = useFormikContext<FleetFormValues>();
32
26
 
33
- const [forceShowAdvancedMode, setForceShowAdvancedMode] = React.useState<boolean>(false);
34
- const [alertSwitchToBasic, setAlertSwitchToBasic] = React.useState<StepSetting>();
35
- const hasAdvancedMode = rolloutPolicy.isAdvanced || disruptionBudget.isAdvanced || updatePolicy.isAdvanced;
36
-
37
- const onSettingsChange = (setting: StepSetting, toAdvanced: boolean) => {
38
- if (toAdvanced) {
39
- switch (setting) {
40
- case 'all-settings':
41
- setForceShowAdvancedMode(true);
42
- break;
43
- case 'rollout-policies':
44
- setFieldValue('rolloutPolicy.isAdvanced', true);
45
- void onChangePolicyType(true);
46
- break;
47
- case 'disruption-budget':
48
- setFieldValue('disruptionBudget.isAdvanced', true);
49
- void onChangeDisruptionBudget(true);
50
- break;
51
- case 'update-policies':
52
- setFieldValue('updatePolicy.isAdvanced', true);
53
- void onChangeUpdatePolicy(true);
54
- break;
55
- }
56
- } else {
57
- setAlertSwitchToBasic(setting);
58
- }
59
- };
60
-
61
- const onChangePolicyType = async (toAdvanced: boolean) => {
62
- await setFieldValue('rolloutPolicy', {
63
- isAdvanced: toAdvanced,
64
- batches: toAdvanced ? [getEmptyInitializedBatch()] : [],
65
- updateTimeout: DEFAULT_BACKEND_UPDATE_TIMEOUT_MINUTES,
66
- });
67
- };
68
-
69
- const onChangeDisruptionBudget = async (toAdvanced: boolean) => {
70
- if (!toAdvanced) {
71
- await setFieldValue('disruptionBudget', {
72
- isAdvanced: false,
73
- groupBy: [],
74
- minAvailable: '',
75
- maxUnavailable: '',
76
- });
77
- }
78
- };
79
-
80
- const onChangeUpdatePolicy = async (toAdvanced: boolean) => {
81
- if (!toAdvanced) {
82
- await setFieldValue('updatePolicy', getEmptyUpdateFormParams());
83
- }
84
- };
85
-
86
- const onModalClose = async (doSwitch: boolean) => {
87
- setAlertSwitchToBasic(undefined);
88
- if (!doSwitch) {
89
- return;
90
- }
91
-
92
- // When the user confirms switching a setting to its basic mode
93
- switch (alertSwitchToBasic) {
94
- case 'all-settings':
95
- await onChangePolicyType(false);
96
- await onChangeDisruptionBudget(false);
97
- await onChangeUpdatePolicy(false);
98
- break;
99
- case 'rollout-policies':
100
- void onChangePolicyType(false);
101
- break;
102
- case 'disruption-budget':
103
- void onChangeDisruptionBudget(false);
104
- break;
105
- case 'update-policies':
106
- void onChangeUpdatePolicy(false);
107
- break;
108
- }
109
- setForceShowAdvancedMode(false);
110
- };
111
-
112
27
  return (
113
28
  <Grid lg={8}>
114
29
  <FlightCtlForm>
115
- <FormGroup>
116
- <Checkbox
117
- label={t('Use basic configurations')}
118
- isChecked={!hasAdvancedMode && !forceShowAdvancedMode}
119
- id="all-settings"
120
- onChange={(_ev: React.FormEvent<HTMLInputElement>, toBasic: boolean) => {
121
- onSettingsChange('all-settings', !toBasic);
122
- }}
123
- />
124
- </FormGroup>
125
- {hasAdvancedMode || forceShowAdvancedMode ? (
30
+ <CheckboxField name="useBasicUpdateConfig" label={t('Use basic configurations')} />
31
+ {!useBasicUpdateConfig ? (
126
32
  <FormSection title={t('Advanced configurations')} titleElement="h1" className="pf-v5-u-mt-sm">
127
33
  {/* Rollout policies */}
128
- <Checkbox
34
+ <CheckboxField
35
+ name="rolloutPolicy.isAdvanced"
129
36
  label={
130
37
  <LabelWithHelperText
131
38
  label={t('Set rollout policies')}
132
39
  content={t('Rollout policies allow you to control the order of updates for the fleet devices.')}
133
40
  />
134
41
  }
135
- isChecked={rolloutPolicy.isAdvanced}
136
- id="advRolloutPolicy"
137
- onChange={(_ev: React.FormEvent<HTMLInputElement>, toAdvanced: boolean) =>
138
- onSettingsChange('rollout-policies', toAdvanced)
139
- }
140
- body={rolloutPolicy.isAdvanced && <UpdateStepRolloutPolicy />}
42
+ isDisabled={isReadOnly}
43
+ body={rolloutPolicy.isAdvanced && <UpdateStepRolloutPolicy isReadOnly={isReadOnly} />}
141
44
  />
142
45
 
143
46
  {/* Disruption budget */}
144
- <Checkbox
47
+ <CheckboxField
48
+ name="disruptionBudget.isAdvanced"
145
49
  label={
146
50
  <LabelWithHelperText
147
51
  label={t('Set disruption budget')}
@@ -150,28 +54,21 @@ const UpdatePolicyStep = () => {
150
54
  )}
151
55
  />
152
56
  }
153
- isChecked={disruptionBudget.isAdvanced}
154
- id="advDisruptionBudget"
155
- onChange={(_ev: React.FormEvent<HTMLInputElement>, toAdvanced: boolean) =>
156
- onSettingsChange('disruption-budget', toAdvanced)
157
- }
158
- body={disruptionBudget.isAdvanced && <UpdateStepDisruptionBudget />}
57
+ isDisabled={isReadOnly}
58
+ body={disruptionBudget.isAdvanced && <UpdateStepDisruptionBudget isReadOnly={isReadOnly} />}
159
59
  />
160
60
 
161
61
  {/* Update (and download) policies */}
162
- <Checkbox
62
+ <CheckboxField
63
+ name="updatePolicy.isAdvanced"
163
64
  label={
164
65
  <LabelWithHelperText
165
66
  label={t('Set update policies')}
166
67
  content={t('Update policies allow you to control when updates should be downloaded and applied.')}
167
68
  />
168
69
  }
169
- isChecked={updatePolicy.isAdvanced}
170
- id="advUpdatePolicy"
171
- onChange={(_ev: React.FormEvent<HTMLInputElement>, toAdvanced: boolean) =>
172
- onSettingsChange('update-policies', toAdvanced)
173
- }
174
- body={updatePolicy.isAdvanced && <UpdateStepUpdatePolicy />}
70
+ isDisabled={isReadOnly}
71
+ body={updatePolicy.isAdvanced && <UpdateStepUpdatePolicy isReadOnly={isReadOnly} />}
175
72
  />
176
73
  </FormSection>
177
74
  ) : (
@@ -179,7 +76,6 @@ const UpdatePolicyStep = () => {
179
76
  {t('All the devices that are part of this fleet will receive updates as soon as they are available.')}
180
77
  </Alert>
181
78
  )}
182
- {alertSwitchToBasic && <UpdateConfirmChangesModal setting={alertSwitchToBasic} onClose={onModalClose} />}
183
79
  </FlightCtlForm>
184
80
  </Grid>
185
81
  );
@@ -9,7 +9,7 @@ import ErrorHelperText from '../../../form/FieldHelperText';
9
9
  import { FormGroupWithHelperText } from '../../../common/WithHelperText';
10
10
  import { DisruptionBudgetForm } from '../../../../types/deviceSpec';
11
11
 
12
- const UpdateStepDisruptionBudget = () => {
12
+ const UpdateStepDisruptionBudget = ({ isReadOnly }: { isReadOnly: boolean }) => {
13
13
  const { t } = useTranslation();
14
14
 
15
15
  const [, meta] = useField<DisruptionBudgetForm>('disruptionBudget');
@@ -29,6 +29,7 @@ const UpdateStepDisruptionBudget = () => {
29
29
  <StackItem>{t("Leaving this empty will apply the disruption budget to all fleet's devices.")}</StackItem>
30
30
  </Stack>
31
31
  }
32
+ isReadOnly={isReadOnly}
32
33
  />
33
34
  </FormGroupWithHelperText>
34
35
  <FormGroup>
@@ -44,6 +45,7 @@ const UpdateStepDisruptionBudget = () => {
44
45
  aria-label={t('Minimum number of available devices')}
45
46
  name="disruptionBudget.minAvailable"
46
47
  min={1}
48
+ isDisabled={isReadOnly}
47
49
  />
48
50
  </FormGroupWithHelperText>
49
51
  </FlexItem>
@@ -58,6 +60,7 @@ const UpdateStepDisruptionBudget = () => {
58
60
  aria-label={t('Maximum number of unavailable devices')}
59
61
  name="disruptionBudget.maxUnavailable"
60
62
  min={1}
63
+ isDisabled={isReadOnly}
61
64
  />
62
65
  </FormGroupWithHelperText>
63
66
  </FlexItem>
@@ -24,7 +24,7 @@ import { FormGroupWithHelperText } from '../../../common/WithHelperText';
24
24
  import { useTranslation } from '../../../../hooks/useTranslation';
25
25
  import { getEmptyInitializedBatch } from '../fleetSpecUtils';
26
26
 
27
- const RolloutPolicyBatch = ({ index }: { index: number }) => {
27
+ const RolloutPolicyBatch = ({ index, isReadOnly }: { index: number; isReadOnly: boolean }) => {
28
28
  const { t } = useTranslation();
29
29
 
30
30
  const items = React.useMemo(
@@ -47,16 +47,20 @@ const RolloutPolicyBatch = ({ index }: { index: number }) => {
47
47
  {/* Show errors not related to an individual field */}
48
48
  {typeof meta.error === 'string' && (
49
49
  <GridItem>
50
- <ErrorHelperText meta={meta} />
50
+ <ErrorHelperText meta={meta} touchRequired={false} />
51
51
  </GridItem>
52
52
  )}
53
53
  <FormGroup label={t('Select devices using labels')}>
54
- <LabelsField aria-label={t('Label selector')} name={`rolloutPolicy.batches.${index}.selector`} />
54
+ <LabelsField
55
+ aria-label={t('Label selector')}
56
+ name={`rolloutPolicy.batches.${index}.selector`}
57
+ isDisabled={isReadOnly}
58
+ />
55
59
  </FormGroup>
56
60
  <FormGroup label={t('Select a subset using')}>
57
61
  <Split hasGutter>
58
62
  <SplitItem>
59
- <FormSelect items={items} name={`rolloutPolicy.batches.${index}.limitType`} />
63
+ <FormSelect items={items} name={`rolloutPolicy.batches.${index}.limitType`} isDisabled={isReadOnly} />
60
64
  </SplitItem>
61
65
  <SplitItem>
62
66
  <NumberField
@@ -66,6 +70,7 @@ const RolloutPolicyBatch = ({ index }: { index: number }) => {
66
70
  max={isPercent ? 100 : undefined}
67
71
  widthChars={isPercent ? 3 : 8}
68
72
  unit={isPercent ? '%' : undefined}
73
+ isDisabled={isReadOnly}
69
74
  />
70
75
  </SplitItem>
71
76
  </Split>
@@ -86,6 +91,7 @@ const RolloutPolicyBatch = ({ index }: { index: number }) => {
86
91
  min={1}
87
92
  max={100}
88
93
  isRequired
94
+ isDisabled={isReadOnly}
89
95
  />
90
96
  </FlexItem>
91
97
  <FlexItem flex={{ lg: 'flex_1' }} style={{ minWidth: 200 }}>
@@ -100,7 +106,7 @@ const RolloutPolicyBatch = ({ index }: { index: number }) => {
100
106
  );
101
107
  };
102
108
 
103
- const UpdateStepRolloutPolicy = () => {
109
+ const UpdateStepRolloutPolicy = ({ isReadOnly }: { isReadOnly: boolean }) => {
104
110
  const { t } = useTranslation();
105
111
 
106
112
  const {
@@ -108,6 +114,9 @@ const UpdateStepRolloutPolicy = () => {
108
114
  } = useFormikContext<FleetFormValues>();
109
115
 
110
116
  const batches = rolloutPolicy.batches || [];
117
+ if (isReadOnly && batches.length === 0) {
118
+ return null;
119
+ }
111
120
 
112
121
  return (
113
122
  <>
@@ -126,7 +135,13 @@ const UpdateStepRolloutPolicy = () => {
126
135
  <Flex>
127
136
  <FlexItem>{t('Timeout devices that fail to update after')}</FlexItem>
128
137
  <FlexItem>
129
- <NumberField aria-label={t('Update timeout')} name="rolloutPolicy.updateTimeout" min={1} isRequired />
138
+ <NumberField
139
+ aria-label={t('Update timeout')}
140
+ name="rolloutPolicy.updateTimeout"
141
+ min={1}
142
+ isRequired
143
+ isDisabled={isReadOnly}
144
+ />
130
145
  </FlexItem>
131
146
  <FlexItem>{t('minutes')}.</FlexItem>
132
147
  </Flex>
@@ -140,35 +155,39 @@ const UpdateStepRolloutPolicy = () => {
140
155
  <FormSection key={index}>
141
156
  <Split hasGutter>
142
157
  <SplitItem isFilled>
143
- <RolloutPolicyBatch index={index} />
144
- </SplitItem>
145
- <SplitItem>
146
- <Button
147
- aria-label={t('Delete batch')}
148
- variant="link"
149
- icon={<MinusCircleIcon />}
150
- iconPosition="start"
151
- onClick={() => remove(index)}
152
- isDisabled={batches.length === 1}
153
- />
158
+ <RolloutPolicyBatch index={index} isReadOnly={isReadOnly} />
154
159
  </SplitItem>
160
+ {!isReadOnly && (
161
+ <SplitItem>
162
+ <Button
163
+ aria-label={t('Delete batch')}
164
+ variant="link"
165
+ icon={<MinusCircleIcon />}
166
+ iconPosition="start"
167
+ onClick={() => remove(index)}
168
+ isDisabled={batches.length === 1}
169
+ />
170
+ </SplitItem>
171
+ )}
155
172
  </Split>
156
173
  </FormSection>
157
174
  ))}
158
- <FormSection>
159
- <FormGroup>
160
- <Button
161
- variant="link"
162
- icon={<PlusCircleIcon />}
163
- iconPosition="start"
164
- onClick={() => {
165
- push(getEmptyInitializedBatch());
166
- }}
167
- >
168
- {t('Add batch')}
169
- </Button>
170
- </FormGroup>
171
- </FormSection>
175
+ {!isReadOnly && (
176
+ <FormSection>
177
+ <FormGroup>
178
+ <Button
179
+ variant="link"
180
+ icon={<PlusCircleIcon />}
181
+ iconPosition="start"
182
+ onClick={() => {
183
+ push(getEmptyInitializedBatch());
184
+ }}
185
+ >
186
+ {t('Add batch')}
187
+ </Button>
188
+ </FormGroup>
189
+ </FormSection>
190
+ )}
172
191
  </>
173
192
  )}
174
193
  </FieldArray>