From 8a19189dcd997d72f28f8d63d04eba493f46783d Mon Sep 17 00:00:00 2001 From: Its-treason <39559178+Its-treason@users.noreply.github.com> Date: Thu, 5 Oct 2023 17:43:17 +0200 Subject: [PATCH] feat(#111): Use existing last actions for auto open tabs --- .../providers/App/useCollectionTreeSync.js | 37 ++++++++++--------- .../ReduxStore/slices/collections/actions.js | 4 +- .../ReduxStore/slices/collections/index.js | 7 +--- 3 files changed, 23 insertions(+), 25 deletions(-) diff --git a/packages/bruno-app/src/providers/App/useCollectionTreeSync.js b/packages/bruno-app/src/providers/App/useCollectionTreeSync.js index 89fdaabb5..ba7193f31 100644 --- a/packages/bruno-app/src/providers/App/useCollectionTreeSync.js +++ b/packages/bruno-app/src/providers/App/useCollectionTreeSync.js @@ -17,15 +17,15 @@ import { import toast from 'react-hot-toast'; import { openCollectionEvent, collectionAddEnvFileEvent } from 'providers/ReduxStore/slices/collections/actions'; import { isElectron } from 'utils/common/platform'; -import { updateNewRequest } from 'providers/ReduxStore/slices/collections/index'; import { addTab } from 'providers/ReduxStore/slices/tabs'; -import { getDefaultRequestPaneTab } from 'utils/collections/index'; +import { findCollectionByUid, getDefaultRequestPaneTab } from 'utils/collections/index'; import { hideHomePage } from 'providers/ReduxStore/slices/app'; +import { updateLastAction } from 'providers/ReduxStore/slices/collections/index'; const useCollectionTreeSync = () => { const dispatch = useDispatch(); const tabs = useSelector((state) => state.tabs.tabs); - const newRequestName = useSelector((state) => state.collections.newRequestName); + const collections = useSelector((state) => state.collections.collections); useEffect(() => { if (!isElectron()) { @@ -57,20 +57,23 @@ const useCollectionTreeSync = () => { }) ); - // Remove the newRequestName so no random stuff happens - dispatch( - updateNewRequest({ newRequestName: null }) - ); + const collectionUid = val.meta.collectionUid; + const lastAction = findCollectionByUid(collections, collectionUid)?.lastAction; + // When the request was just created open it in a new tab - if (newRequestName === val.data.name) { - dispatch( - addTab({ - uid: val.data.uid, - collectionUid: val.meta.collectionUid, - requestPaneTab: getDefaultRequestPaneTab(val.data) - }) - ); - dispatch(hideHomePage()); + if (lastAction && lastAction.type === 'ADD_REQUEST') { + dispatch(updateLastAction({ lastAction: null, collectionUid })); + + if (lastAction.payload === val.data.name) { + dispatch( + addTab({ + uid: val.data.uid, + collectionUid: collectionUid, + requestPaneTab: getDefaultRequestPaneTab(val.data) + }) + ); + dispatch(hideHomePage()); + } } } if (type === 'change') { @@ -164,7 +167,7 @@ const useCollectionTreeSync = () => { removeListener10(); removeListener11(); }; - }, [isElectron, tabs, newRequestName]); + }, [isElectron, tabs, collections]); useEffect(() => { if (!isElectron()) { diff --git a/packages/bruno-app/src/providers/ReduxStore/slices/collections/actions.js b/packages/bruno-app/src/providers/ReduxStore/slices/collections/actions.js index 3ad39e676..eecb75263 100644 --- a/packages/bruno-app/src/providers/ReduxStore/slices/collections/actions.js +++ b/packages/bruno-app/src/providers/ReduxStore/slices/collections/actions.js @@ -597,7 +597,7 @@ export const newHttpRequest = (params) => (dispatch, getState) => { ipcRenderer.invoke('renderer:new-request', fullName, item).then(resolve).catch(reject); // Add the new request name here so it can be opened in a new tab in useCollectionTreeSync.js - dispatch(updateNewRequest({ newRequestName: item.name })) + dispatch(updateLastAction({ lastAction: { type: 'ADD_REQUEST', payload: item.name }, collectionUid })); } else { return reject(new Error('Duplicate request names are not allowed under the same folder')); } @@ -616,7 +616,7 @@ export const newHttpRequest = (params) => (dispatch, getState) => { ipcRenderer.invoke('renderer:new-request', fullName, item).then(resolve).catch(reject); // Add the new request name here so it can be opened in a new tab in useCollectionTreeSync.js - dispatch(updateNewRequest({ newRequestName: item.name })) + dispatch(updateLastAction({ lastAction: { type: 'ADD_REQUEST', payload: item.name }, collectionUid })); } else { return reject(new Error('Duplicate request names are not allowed under the same folder')); } 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 d7ff34391..ec89bb85d 100644 --- a/packages/bruno-app/src/providers/ReduxStore/slices/collections/index.js +++ b/packages/bruno-app/src/providers/ReduxStore/slices/collections/index.js @@ -29,8 +29,7 @@ const PATH_SEPARATOR = path.sep; const initialState = { collections: [], - collectionSortOrder: 'default', - newRequestName: null + collectionSortOrder: 'default' }; export const collectionsSlice = createSlice({ @@ -130,10 +129,6 @@ export const collectionsSlice = createSlice({ } } }, - updateNewRequest: (state, action) => { - const { newRequestName } = action.payload; - state.newRequestName = newRequestName; - }, newItem: (state, action) => { const collection = findCollectionByUid(state.collections, action.payload.collectionUid);