diff --git a/packages/bruno-app/src/components/Preferences/General/index.js b/packages/bruno-app/src/components/Preferences/General/index.js index 14eff0709..8e603a091 100644 --- a/packages/bruno-app/src/components/Preferences/General/index.js +++ b/packages/bruno-app/src/components/Preferences/General/index.js @@ -37,6 +37,25 @@ const General = ({ close }) => { .test('isValidTimeout', 'Request Timeout must be equal or greater than 0', (value) => { return value === undefined || Number(value) >= 0; }), + autoSave: Yup.object({ + enabled: Yup.boolean(), + interval: Yup.mixed() + .transform((value, originalValue) => { + return originalValue === '' ? undefined : value; + }) + .test('isNumber', 'Save Delay must be a number', (value) => { + return value === undefined || !isNaN(value); + }) + .test('isValidInterval', 'Save Delay must be at least 100ms', (value) => { + return value === undefined || Number(value) >= 100; + }) + }).test('intervalRequired', 'Save Delay is required when Auto Save is enabled', (value) => { + // If autosave is enabled, interval must be provided + if (value.enabled && (value.interval === undefined || value.interval === '')) { + return false; + } + return true; + }), defaultCollectionLocation: Yup.string().max(1024) }); @@ -53,6 +72,10 @@ const General = ({ close }) => { timeout: preferences.request.timeout, storeCookies: get(preferences, 'request.storeCookies', true), sendCookies: get(preferences, 'request.sendCookies', true), + autoSave: { + enabled: get(preferences, 'autoSave.enabled', false), + interval: get(preferences, 'autoSave.interval', 1000) + }, defaultCollectionLocation: get(preferences, 'general.defaultCollectionLocation', '') }, validationSchema: preferencesSchema, @@ -83,12 +106,16 @@ const General = ({ close }) => { storeCookies: newPreferences.storeCookies, sendCookies: newPreferences.sendCookies }, + autoSave: { + enabled: newPreferences.autoSave.enabled, + interval: newPreferences.autoSave.interval + }, general: { defaultCollectionLocation: newPreferences.defaultCollectionLocation } })) .then(() => { - toast.success('Preferences saved successfully') + toast.success('Preferences saved successfully'); close(); }) .catch((err) => console.log(err) && toast.error('Failed to update preferences')); @@ -250,6 +277,43 @@ const General = ({ close }) => { {formik.touched.timeout && formik.errors.timeout ? (
{formik.errors.timeout}
) : null} +
+ + +
+
+ + +
+ {formik.touched.autoSave && formik.errors.autoSave && typeof formik.errors.autoSave === 'string' && ( +
{formik.errors.autoSave}
+ )} + {formik.touched.autoSave?.interval && formik.errors.autoSave?.interval && ( +
{formik.errors.autoSave.interval}
+ )}