From d7cef7aa4e1e9c4fb14923329d6398cf320e84ba Mon Sep 17 00:00:00 2001 From: sanish chirayath Date: Tue, 30 Dec 2025 14:44:57 +0530 Subject: [PATCH] fix: example tab not closing post delete, tab not found issue when i delete intermediate example (#6561) --- .../DeleteResponseExampleModal/index.js | 5 +++- .../bruno-electron/src/cache/requestUids.js | 26 ++++++++++++++++++- packages/bruno-electron/src/ipc/collection.js | 5 +++- 3 files changed, 33 insertions(+), 3 deletions(-) diff --git a/packages/bruno-app/src/components/Sidebar/Collections/Collection/CollectionItem/ExampleItem/DeleteResponseExampleModal/index.js b/packages/bruno-app/src/components/Sidebar/Collections/Collection/CollectionItem/ExampleItem/DeleteResponseExampleModal/index.js index fffddc9a4..e5a1350f7 100644 --- a/packages/bruno-app/src/components/Sidebar/Collections/Collection/CollectionItem/ExampleItem/DeleteResponseExampleModal/index.js +++ b/packages/bruno-app/src/components/Sidebar/Collections/Collection/CollectionItem/ExampleItem/DeleteResponseExampleModal/index.js @@ -4,11 +4,14 @@ import Portal from 'components/Portal'; import { useDispatch } from 'react-redux'; import { deleteResponseExample } from 'providers/ReduxStore/slices/collections'; import { saveRequest } from 'providers/ReduxStore/slices/collections/actions'; +import { closeTabs } from 'providers/ReduxStore/slices/tabs'; const DeleteResponseExampleModal = ({ onClose, example, item, collection }) => { const dispatch = useDispatch(); - const onConfirm = () => { + const onConfirm = (e) => { + e.stopPropagation(); + dispatch(closeTabs({ tabUids: [example.uid] })); dispatch(deleteResponseExample({ itemUid: item.uid, collectionUid: collection.uid, diff --git a/packages/bruno-electron/src/cache/requestUids.js b/packages/bruno-electron/src/cache/requestUids.js index 2d47f027f..f2794b4f6 100644 --- a/packages/bruno-electron/src/cache/requestUids.js +++ b/packages/bruno-electron/src/cache/requestUids.js @@ -49,9 +49,33 @@ const getExampleUid = (pathname, index) => { return uid; }; +/** + * Syncs the example UID cache with the current state of examples being saved. + * This ensures the cache stays consistent when examples are added, deleted, or reordered. + * + * @param {string} pathname - The file path of the request + * @param {Array} examples - The examples array being saved (each with a uid property) + */ +const syncExampleUidsCache = (pathname, examples = []) => { + // Clear all existing cache entries for this pathname + for (const key of exampleUids.keys()) { + if (key.startsWith(`${pathname}-`)) { + exampleUids.delete(key); + } + } + + // Rebuild cache with current example UIDs at their new indices + examples.forEach((example, index) => { + if (example.uid) { + exampleUids.set(`${pathname}-${index}`, example.uid); + } + }); +}; + module.exports = { getRequestUid, moveRequestUid, deleteRequestUid, - getExampleUid + getExampleUid, + syncExampleUidsCache }; diff --git a/packages/bruno-electron/src/ipc/collection.js b/packages/bruno-electron/src/ipc/collection.js index e41ed3ead..8d5ce0f40 100644 --- a/packages/bruno-electron/src/ipc/collection.js +++ b/packages/bruno-electron/src/ipc/collection.js @@ -51,7 +51,7 @@ const { } = require('../utils/filesystem'); const { openCollectionDialog, openCollectionsByPathname } = require('../app/collections'); const { generateUidBasedOnHash, stringifyJson, safeStringifyJSON, safeParseJSON } = require('../utils/common'); -const { moveRequestUid, deleteRequestUid } = require('../cache/requestUids'); +const { moveRequestUid, deleteRequestUid, syncExampleUidsCache } = require('../cache/requestUids'); const { deleteCookiesForDomain, getDomainsWithCookies, addCookieForDomain, modifyCookieForDomain, parseCookieString, createCookieString, deleteCookie } = require('../utils/cookies'); const EnvironmentSecretsStore = require('../store/env-secrets'); const CollectionSecurityStore = require('../store/collection-security'); @@ -349,6 +349,9 @@ const registerRendererEventHandlers = (mainWindow, watcher) => { throw new Error(`path: ${pathname} does not exist`); } + // Sync example UIDs cache to maintain consistency when examples are added/deleted/reordered + syncExampleUidsCache(pathname, request.examples); + const content = await stringifyRequestViaWorker(request, { format }); await writeFile(pathname, content); } catch (error) {