From 5b5dc320d5cff16380bd0b9da432cdf3a5223d34 Mon Sep 17 00:00:00 2001 From: Chaim Lev-Ari Date: Sun, 22 Jan 2023 23:04:39 +0200 Subject: [PATCH] fix(settings): save only the existing values [EE-4903] (#8326) --- .../AutoEnvCreationSettingsForm.tsx | 3 +-- .../DeploymentSyncOptions.tsx | 9 +++++++-- .../EdgeComputeSettings/EdgeComputeSettings.tsx | 15 ++++++++++++--- .../EdgeComputeView/EdgeComputeSettings/types.ts | 4 ++++ .../portainer/settings/EdgeComputeView/types.ts | 7 ------- app/react/portainer/settings/settings.service.ts | 6 +++++- app/react/portainer/settings/types.ts | 1 + 7 files changed, 30 insertions(+), 15 deletions(-) delete mode 100644 app/react/portainer/settings/EdgeComputeView/types.ts diff --git a/app/react/portainer/settings/EdgeComputeView/AutomaticEdgeEnvCreation/AutoEnvCreationSettingsForm.tsx b/app/react/portainer/settings/EdgeComputeView/AutomaticEdgeEnvCreation/AutoEnvCreationSettingsForm.tsx index 32a50998b..25bcb4642 100644 --- a/app/react/portainer/settings/EdgeComputeView/AutomaticEdgeEnvCreation/AutoEnvCreationSettingsForm.tsx +++ b/app/react/portainer/settings/EdgeComputeView/AutomaticEdgeEnvCreation/AutoEnvCreationSettingsForm.tsx @@ -5,14 +5,13 @@ import { useCallback, useEffect } from 'react'; import { baseHref } from '@/portainer/helpers/pathHelper'; import { notifySuccess } from '@/portainer/services/notifications'; import { useUpdateSettingsMutation } from '@/react/portainer/settings/queries'; +import { Settings } from '@/react/portainer/settings/types'; import { LoadingButton } from '@@/buttons/LoadingButton'; import { FormControl } from '@@/form-components/FormControl'; import { FormSectionTitle } from '@@/form-components/FormSectionTitle'; import { Input } from '@@/form-components/Input'; -import { Settings } from '../types'; - import { EnabledWaitingRoomSwitch } from './EnableWaitingRoomSwitch'; interface FormValues { diff --git a/app/react/portainer/settings/EdgeComputeView/DeploymentSyncOptions/DeploymentSyncOptions.tsx b/app/react/portainer/settings/EdgeComputeView/DeploymentSyncOptions/DeploymentSyncOptions.tsx index 45c101c99..552cd7a03 100644 --- a/app/react/portainer/settings/EdgeComputeView/DeploymentSyncOptions/DeploymentSyncOptions.tsx +++ b/app/react/portainer/settings/EdgeComputeView/DeploymentSyncOptions/DeploymentSyncOptions.tsx @@ -43,8 +43,13 @@ export function DeploymentSyncOptions() { return null; } - const initialValues = { - Edge: settingsQuery.data.Edge, + const initialValues: FormValues = { + Edge: { + AsyncMode: settingsQuery.data.Edge.AsyncMode, + CommandInterval: settingsQuery.data.Edge.CommandInterval, + PingInterval: settingsQuery.data.Edge.PingInterval, + SnapshotInterval: settingsQuery.data.Edge.SnapshotInterval, + }, EdgeAgentCheckinInterval: settingsQuery.data.EdgeAgentCheckinInterval, }; diff --git a/app/react/portainer/settings/EdgeComputeView/EdgeComputeSettings/EdgeComputeSettings.tsx b/app/react/portainer/settings/EdgeComputeView/EdgeComputeSettings/EdgeComputeSettings.tsx index 33794c408..731fb98e8 100644 --- a/app/react/portainer/settings/EdgeComputeView/EdgeComputeSettings/EdgeComputeSettings.tsx +++ b/app/react/portainer/settings/EdgeComputeView/EdgeComputeSettings/EdgeComputeSettings.tsx @@ -2,6 +2,7 @@ import { Formik, Form } from 'formik'; import { Laptop } from 'lucide-react'; import { EdgeCheckinIntervalField } from '@/react/edge/components/EdgeCheckInIntervalField'; +import { Settings } from '@/react/portainer/settings/types'; import { Switch } from '@@/form-components/SwitchField/Switch'; import { FormControl } from '@@/form-components/FormControl'; @@ -10,8 +11,6 @@ import { LoadingButton } from '@@/buttons/LoadingButton'; import { TextTip } from '@@/Tip/TextTip'; import { FormSectionTitle } from '@@/form-components/FormSectionTitle'; -import { Settings } from '../types'; - import { validationSchema } from './EdgeComputeSettings.validation'; import { FormValues } from './types'; import { AddDeviceButton } from './AddDeviceButton'; @@ -26,6 +25,16 @@ export function EdgeComputeSettings({ settings, onSubmit }: Props) { return null; } + const initialValues: FormValues = { + EnableEdgeComputeFeatures: settings.EnableEdgeComputeFeatures, + EdgePortainerUrl: settings.EdgePortainerUrl, + Edge: { + TunnelServerAddress: settings.Edge.TunnelServerAddress, + }, + EdgeAgentCheckinInterval: settings.EdgeAgentCheckinInterval, + EnforceEdgeID: settings.EnforceEdgeID, + }; + return (
@@ -41,7 +50,7 @@ export function EdgeComputeSettings({ settings, onSubmit }: Props) { validationSchema()} onSubmit={onSubmit} diff --git a/app/react/portainer/settings/EdgeComputeView/EdgeComputeSettings/types.ts b/app/react/portainer/settings/EdgeComputeView/EdgeComputeSettings/types.ts index e7c76d213..d02b701af 100644 --- a/app/react/portainer/settings/EdgeComputeView/EdgeComputeSettings/types.ts +++ b/app/react/portainer/settings/EdgeComputeView/EdgeComputeSettings/types.ts @@ -1,5 +1,9 @@ export interface FormValues { EnableEdgeComputeFeatures: boolean; + EdgePortainerUrl: string; EnforceEdgeID: boolean; EdgeAgentCheckinInterval: number; + Edge: { + TunnelServerAddress: string; + }; } diff --git a/app/react/portainer/settings/EdgeComputeView/types.ts b/app/react/portainer/settings/EdgeComputeView/types.ts deleted file mode 100644 index a89b71acd..000000000 --- a/app/react/portainer/settings/EdgeComputeView/types.ts +++ /dev/null @@ -1,7 +0,0 @@ -export interface Settings { - EdgeAgentCheckinInterval: number; - EnableEdgeComputeFeatures: boolean; - TrustOnFirstConnect: boolean; - EnforceEdgeID: boolean; - EdgePortainerUrl: string; -} diff --git a/app/react/portainer/settings/settings.service.ts b/app/react/portainer/settings/settings.service.ts index 4b10f1ee5..0a0c8298f 100644 --- a/app/react/portainer/settings/settings.service.ts +++ b/app/react/portainer/settings/settings.service.ts @@ -28,7 +28,11 @@ export async function getSettings() { } } -export async function updateSettings(settings: Partial) { +type OptionalSettings = Omit, 'Edge'> & { + Edge?: Partial; +}; + +export async function updateSettings(settings: OptionalSettings) { try { await axios.put(buildUrl(), settings); } catch (e) { diff --git a/app/react/portainer/settings/types.ts b/app/react/portainer/settings/types.ts index d73152a8d..2fcffa6dc 100644 --- a/app/react/portainer/settings/types.ts +++ b/app/react/portainer/settings/types.ts @@ -134,6 +134,7 @@ export interface Settings { SnapshotInterval: number; CommandInterval: number; AsyncMode: boolean; + TunnelServerAddress: string; }; }