From ce33cee03dbb495f8eefb575974363ee47ecbb62 Mon Sep 17 00:00:00 2001 From: Pooja Date: Tue, 23 Dec 2025 19:21:56 +0530 Subject: [PATCH] fix: autosave (#6392) * fix: autosave * rm: console --- packages/bruno-app/src/components/CodeEditor/index.js | 2 ++ .../bruno-app/src/components/MultiLineEditor/index.js | 2 ++ .../bruno-app/src/components/SingleLineEditor/index.js | 2 ++ .../ReduxStore/middlewares/autosave/middleware.js | 8 ++++++++ .../providers/ReduxStore/middlewares/draft/middleware.js | 8 ++++++++ .../src/providers/ReduxStore/slices/collections/index.js | 7 ++++++- 6 files changed, 28 insertions(+), 1 deletion(-) diff --git a/packages/bruno-app/src/components/CodeEditor/index.js b/packages/bruno-app/src/components/CodeEditor/index.js index 27307a0fa..0c2d9b759 100644 --- a/packages/bruno-app/src/components/CodeEditor/index.js +++ b/packages/bruno-app/src/components/CodeEditor/index.js @@ -228,8 +228,10 @@ export default class CodeEditor extends React.Component { CodeMirror.signal(this.editor, 'change', this.editor); } if (this.props.value !== prevProps.value && this.props.value !== this.cachedValue && this.editor) { + const cursor = this.editor.getCursor(); this.cachedValue = this.props.value; this.editor.setValue(this.props.value); + this.editor.setCursor(cursor); } if (this.editor) { diff --git a/packages/bruno-app/src/components/MultiLineEditor/index.js b/packages/bruno-app/src/components/MultiLineEditor/index.js index 8651e39d9..f078a131d 100644 --- a/packages/bruno-app/src/components/MultiLineEditor/index.js +++ b/packages/bruno-app/src/components/MultiLineEditor/index.js @@ -154,8 +154,10 @@ class MultiLineEditor extends Component { this.editor.setOption('readOnly', this.props.readOnly); } if (this.props.value !== prevProps.value && this.props.value !== this.cachedValue && this.editor) { + const cursor = this.editor.getCursor(); this.cachedValue = String(this.props.value); this.editor.setValue(String(this.props.value) || ''); + this.editor.setCursor(cursor); } if (!isEqual(this.props.isSecret, prevProps.isSecret)) { // If the secret flag has changed, update the editor to reflect the change diff --git a/packages/bruno-app/src/components/SingleLineEditor/index.js b/packages/bruno-app/src/components/SingleLineEditor/index.js index aa37b6ed9..c24338992 100644 --- a/packages/bruno-app/src/components/SingleLineEditor/index.js +++ b/packages/bruno-app/src/components/SingleLineEditor/index.js @@ -169,8 +169,10 @@ class SingleLineEditor extends Component { this.editor.setOption('theme', this.props.theme === 'dark' ? 'monokai' : 'default'); } if (this.props.value !== prevProps.value && this.props.value !== this.cachedValue && this.editor) { + const cursor = this.editor.getCursor(); this.cachedValue = String(this.props.value); this.editor.setValue(String(this.props.value ?? '')); + this.editor.setCursor(cursor); // Update newline markers after value change if (this.props.showNewlineArrow) { diff --git a/packages/bruno-app/src/providers/ReduxStore/middlewares/autosave/middleware.js b/packages/bruno-app/src/providers/ReduxStore/middlewares/autosave/middleware.js index e4e4122fa..ad3312b54 100644 --- a/packages/bruno-app/src/providers/ReduxStore/middlewares/autosave/middleware.js +++ b/packages/bruno-app/src/providers/ReduxStore/middlewares/autosave/middleware.js @@ -9,19 +9,23 @@ const actionsToIntercept = [ 'collections/moveQueryParam', 'collections/updateQueryParam', 'collections/deleteQueryParam', + 'collections/setQueryParams', 'collections/updatePathParam', 'collections/addRequestHeader', 'collections/updateRequestHeader', 'collections/deleteRequestHeader', 'collections/moveRequestHeader', + 'collections/setRequestHeaders', 'collections/addFormUrlEncodedParam', 'collections/updateFormUrlEncodedParam', 'collections/deleteFormUrlEncodedParam', 'collections/moveFormUrlEncodedParam', + 'collections/setFormUrlEncodedParams', 'collections/addMultipartFormParam', 'collections/updateMultipartFormParam', 'collections/deleteMultipartFormParam', 'collections/moveMultipartFormParam', + 'collections/setMultipartFormParams', 'collections/updateRequestAuthMode', 'collections/updateRequestBodyMode', 'collections/updateRequestBody', @@ -47,9 +51,11 @@ const actionsToIntercept = [ 'collections/addFolderHeader', 'collections/updateFolderHeader', 'collections/deleteFolderHeader', + 'collections/setFolderHeaders', 'collections/addFolderVar', 'collections/updateFolderVar', 'collections/deleteFolderVar', + 'collections/setFolderVars', 'collections/updateFolderRequestScript', 'collections/updateFolderResponseScript', 'collections/updateFolderTests', @@ -61,9 +67,11 @@ const actionsToIntercept = [ 'collections/addCollectionHeader', 'collections/updateCollectionHeader', 'collections/deleteCollectionHeader', + 'collections/setCollectionHeaders', 'collections/addCollectionVar', 'collections/updateCollectionVar', 'collections/deleteCollectionVar', + 'collections/setCollectionVars', 'collections/updateCollectionAuth', 'collections/updateCollectionAuthMode', 'collections/updateCollectionRequestScript', diff --git a/packages/bruno-app/src/providers/ReduxStore/middlewares/draft/middleware.js b/packages/bruno-app/src/providers/ReduxStore/middlewares/draft/middleware.js index a0f8b185c..2ee601716 100644 --- a/packages/bruno-app/src/providers/ReduxStore/middlewares/draft/middleware.js +++ b/packages/bruno-app/src/providers/ReduxStore/middlewares/draft/middleware.js @@ -8,19 +8,23 @@ const actionsToIntercept = [ 'collections/moveQueryParam', 'collections/updateQueryParam', 'collections/deleteQueryParam', + 'collections/setQueryParams', 'collections/updatePathParam', 'collections/addRequestHeader', 'collections/updateRequestHeader', 'collections/deleteRequestHeader', 'collections/moveRequestHeader', + 'collections/setRequestHeaders', 'collections/addFormUrlEncodedParam', 'collections/updateFormUrlEncodedParam', 'collections/deleteFormUrlEncodedParam', 'collections/moveFormUrlEncodedParam', + 'collections/setFormUrlEncodedParams', 'collections/addMultipartFormParam', 'collections/updateMultipartFormParam', 'collections/deleteMultipartFormParam', 'collections/moveMultipartFormParam', + 'collections/setMultipartFormParams', 'collections/updateRequestAuthMode', 'collections/updateRequestBodyMode', 'collections/updateRequestBody', @@ -45,9 +49,11 @@ const actionsToIntercept = [ 'collections/addFolderHeader', 'collections/updateFolderHeader', 'collections/deleteFolderHeader', + 'collections/setFolderHeaders', 'collections/addFolderVar', 'collections/updateFolderVar', 'collections/deleteFolderVar', + 'collections/setFolderVars', 'collections/updateFolderRequestScript', 'collections/updateFolderResponseScript', 'collections/updateFolderTests', @@ -59,9 +65,11 @@ const actionsToIntercept = [ 'collections/addCollectionHeader', 'collections/updateCollectionHeader', 'collections/deleteCollectionHeader', + 'collections/setCollectionHeaders', 'collections/addCollectionVar', 'collections/updateCollectionVar', 'collections/deleteCollectionVar', + 'collections/setCollectionVars', 'collections/updateCollectionAuth', 'collections/updateCollectionAuthMode', 'collections/updateCollectionRequestScript', diff --git a/packages/bruno-app/src/providers/ReduxStore/slices/collections/index.js b/packages/bruno-app/src/providers/ReduxStore/slices/collections/index.js index f07d17f28..f741b957b 100644 --- a/packages/bruno-app/src/providers/ReduxStore/slices/collections/index.js +++ b/packages/bruno-app/src/providers/ReduxStore/slices/collections/index.js @@ -2683,7 +2683,12 @@ export const collectionsSlice = createSlice({ item.examples = file.data.examples; item.filename = file.meta.name; item.pathname = file.meta.pathname; - item.draft = null; + + // Only clear draft if it matches the file content + // This preserves characters typed during autosave + if (item.draft && areItemsTheSameExceptSeqUpdate(item.draft, file.data)) { + item.draft = null; + } } } }