diff --git a/ui/src/app/applications/components/application-create-panel/application-create-panel.scss b/ui/src/app/applications/components/application-create-panel/application-create-panel.scss index 17bfeb0bae..1cd7e8ed8d 100644 --- a/ui/src/app/applications/components/application-create-panel/application-create-panel.scss +++ b/ui/src/app/applications/components/application-create-panel/application-create-panel.scss @@ -1,16 +1,14 @@ @import 'node_modules/argo-ui/src/app/shared/styles/config'; .application-create-panel { - .argo-form-row i { - position: absolute; - right: 0; - bottom: 1em; - cursor: pointer; - } &__yaml-button { position: absolute; right: 1em; top: 1em; } + + &__sync-params { + padding-top: 5px; + } } diff --git a/ui/src/app/applications/components/application-create-panel/application-create-panel.tsx b/ui/src/app/applications/components/application-create-panel/application-create-panel.tsx index b43ff4d65c..13c1f62c85 100644 --- a/ui/src/app/applications/components/application-create-panel/application-create-panel.tsx +++ b/ui/src/app/applications/components/application-create-panel/application-create-panel.tsx @@ -1,4 +1,4 @@ -import { DataLoader, DropDownMenu, FormField, Select } from 'argo-ui'; +import { Checkbox, DataLoader, DropDownMenu, FormField, Select } from 'argo-ui'; import * as deepMerge from 'deepmerge'; import * as React from 'react'; import { FieldApi, Form, FormApi, FormField as ReactFormField, Text } from 'react-form'; @@ -40,30 +40,28 @@ const DEFAULT_APP: Partial = { const AutoSyncFormField = ReactFormField((props: {fieldApi: FieldApi, className: string }) => { const manual = 'Manual'; - const auto = 'Automatic, but do not automatically prune resources'; - const autoWithPrune = 'Automatic with automatic pruning'; + const auto = 'Automatic'; const { fieldApi: {getValue, setValue}} = props; - const value = getValue() as models.SyncPolicy; - - let selectedOption = manual; - if (value && value.automated) { - selectedOption = value.automated.prune && autoWithPrune || auto; - } + const policy = getValue() as models.SyncPolicy; return ( - { + setValue( opt.value === auto ? {automated: { prune: false, selfHeal: false }} : null ); + }} /> + {policy && policy.automated && ( +
+ setValue({ automated: {...policy.automated, prune: val} })} + checked={policy.automated.prune} id='policyPrune' /> setValue({ automated: {...policy.automated, selfHeal: val} })} + checked={policy.automated.selfHeal} id='policySelfHeal' /> +
+ )} + + ); }); export const ApplicationCreatePanel = (props: { @@ -131,7 +129,7 @@ export const ApplicationCreatePanel = (props: {
- +
); diff --git a/ui/src/app/applications/components/application-summary/application-summary.tsx b/ui/src/app/applications/components/application-summary/application-summary.tsx index 992fdd56ef..4fcb7c0272 100644 --- a/ui/src/app/applications/components/application-summary/application-summary.tsx +++ b/ui/src/app/applications/components/application-summary/application-summary.tsx @@ -99,11 +99,11 @@ export const ApplicationSummary = (props: { ) }); } - async function setAutoSync(ctx: { popup: PopupApi }, confirmationTitle: string, confirmationText: string, prune: boolean) { + async function setAutoSync(ctx: { popup: PopupApi }, confirmationTitle: string, confirmationText: string, prune: boolean, selfHeal: boolean) { const confirmed = await ctx.popup.confirm(confirmationTitle, confirmationText); if (confirmed) { const updatedApp = JSON.parse(JSON.stringify(props.app)) as models.Application; - updatedApp.spec.syncPolicy = { automated: { prune } }; + updatedApp.spec.syncPolicy = { automated: { prune, selfHeal } }; props.updateApp(updatedApp); } } @@ -190,29 +190,51 @@ export const ApplicationSummary = (props: { ) || ( )} {app.spec.syncPolicy && app.spec.syncPolicy.automated && ( -
-
- Prune Resources + +
+
+ Prune Resources +
+
+ {app.spec.syncPolicy.automated.prune && ( + + ) || ( + + )} +
-
- {app.spec.syncPolicy.automated.prune && ( - - ) || ( - - )} +
+
+ Self Heal +
+
+ {app.spec.syncPolicy.automated.selfHeal && ( + + ) || ( + + )} +
-
+
)}
diff --git a/ui/src/app/shared/models.ts b/ui/src/app/shared/models.ts index 78ff48659b..5f62c5d9a7 100644 --- a/ui/src/app/shared/models.ts +++ b/ui/src/app/shared/models.ts @@ -173,7 +173,7 @@ export interface ApplicationSourceDirectory { } export interface SyncPolicy { - automated?: { prune: boolean }; + automated?: { prune: boolean; selfHeal: boolean; }; } export interface Info {