fix(settings): save only the existing values [EE-4903] (#8326)

pull/8378/head
Chaim Lev-Ari 2023-01-22 23:04:39 +02:00 committed by GitHub
parent d04747b309
commit 5b5dc320d5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 30 additions and 15 deletions

View File

@ -5,14 +5,13 @@ import { useCallback, useEffect } from 'react';
import { baseHref } from '@/portainer/helpers/pathHelper'; import { baseHref } from '@/portainer/helpers/pathHelper';
import { notifySuccess } from '@/portainer/services/notifications'; import { notifySuccess } from '@/portainer/services/notifications';
import { useUpdateSettingsMutation } from '@/react/portainer/settings/queries'; import { useUpdateSettingsMutation } from '@/react/portainer/settings/queries';
import { Settings } from '@/react/portainer/settings/types';
import { LoadingButton } from '@@/buttons/LoadingButton'; import { LoadingButton } from '@@/buttons/LoadingButton';
import { FormControl } from '@@/form-components/FormControl'; import { FormControl } from '@@/form-components/FormControl';
import { FormSectionTitle } from '@@/form-components/FormSectionTitle'; import { FormSectionTitle } from '@@/form-components/FormSectionTitle';
import { Input } from '@@/form-components/Input'; import { Input } from '@@/form-components/Input';
import { Settings } from '../types';
import { EnabledWaitingRoomSwitch } from './EnableWaitingRoomSwitch'; import { EnabledWaitingRoomSwitch } from './EnableWaitingRoomSwitch';
interface FormValues { interface FormValues {

View File

@ -43,8 +43,13 @@ export function DeploymentSyncOptions() {
return null; return null;
} }
const initialValues = { const initialValues: FormValues = {
Edge: settingsQuery.data.Edge, 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, EdgeAgentCheckinInterval: settingsQuery.data.EdgeAgentCheckinInterval,
}; };

View File

@ -2,6 +2,7 @@ import { Formik, Form } from 'formik';
import { Laptop } from 'lucide-react'; import { Laptop } from 'lucide-react';
import { EdgeCheckinIntervalField } from '@/react/edge/components/EdgeCheckInIntervalField'; import { EdgeCheckinIntervalField } from '@/react/edge/components/EdgeCheckInIntervalField';
import { Settings } from '@/react/portainer/settings/types';
import { Switch } from '@@/form-components/SwitchField/Switch'; import { Switch } from '@@/form-components/SwitchField/Switch';
import { FormControl } from '@@/form-components/FormControl'; import { FormControl } from '@@/form-components/FormControl';
@ -10,8 +11,6 @@ import { LoadingButton } from '@@/buttons/LoadingButton';
import { TextTip } from '@@/Tip/TextTip'; import { TextTip } from '@@/Tip/TextTip';
import { FormSectionTitle } from '@@/form-components/FormSectionTitle'; import { FormSectionTitle } from '@@/form-components/FormSectionTitle';
import { Settings } from '../types';
import { validationSchema } from './EdgeComputeSettings.validation'; import { validationSchema } from './EdgeComputeSettings.validation';
import { FormValues } from './types'; import { FormValues } from './types';
import { AddDeviceButton } from './AddDeviceButton'; import { AddDeviceButton } from './AddDeviceButton';
@ -26,6 +25,16 @@ export function EdgeComputeSettings({ settings, onSubmit }: Props) {
return null; return null;
} }
const initialValues: FormValues = {
EnableEdgeComputeFeatures: settings.EnableEdgeComputeFeatures,
EdgePortainerUrl: settings.EdgePortainerUrl,
Edge: {
TunnelServerAddress: settings.Edge.TunnelServerAddress,
},
EdgeAgentCheckinInterval: settings.EdgeAgentCheckinInterval,
EnforceEdgeID: settings.EnforceEdgeID,
};
return ( return (
<div className="row"> <div className="row">
<Widget> <Widget>
@ -41,7 +50,7 @@ export function EdgeComputeSettings({ settings, onSubmit }: Props) {
<WidgetBody> <WidgetBody>
<Formik <Formik
initialValues={settings} initialValues={initialValues}
enableReinitialize enableReinitialize
validationSchema={() => validationSchema()} validationSchema={() => validationSchema()}
onSubmit={onSubmit} onSubmit={onSubmit}

View File

@ -1,5 +1,9 @@
export interface FormValues { export interface FormValues {
EnableEdgeComputeFeatures: boolean; EnableEdgeComputeFeatures: boolean;
EdgePortainerUrl: string;
EnforceEdgeID: boolean; EnforceEdgeID: boolean;
EdgeAgentCheckinInterval: number; EdgeAgentCheckinInterval: number;
Edge: {
TunnelServerAddress: string;
};
} }

View File

@ -1,7 +0,0 @@
export interface Settings {
EdgeAgentCheckinInterval: number;
EnableEdgeComputeFeatures: boolean;
TrustOnFirstConnect: boolean;
EnforceEdgeID: boolean;
EdgePortainerUrl: string;
}

View File

@ -28,7 +28,11 @@ export async function getSettings() {
} }
} }
export async function updateSettings(settings: Partial<Settings>) { type OptionalSettings = Omit<Partial<Settings>, 'Edge'> & {
Edge?: Partial<Settings['Edge']>;
};
export async function updateSettings(settings: OptionalSettings) {
try { try {
await axios.put(buildUrl(), settings); await axios.put(buildUrl(), settings);
} catch (e) { } catch (e) {

View File

@ -134,6 +134,7 @@ export interface Settings {
SnapshotInterval: number; SnapshotInterval: number;
CommandInterval: number; CommandInterval: number;
AsyncMode: boolean; AsyncMode: boolean;
TunnelServerAddress: string;
}; };
} }