diff --git a/packages/bruno-app/src/components/Environments/EnvironmentSettings/EnvironmentList/EnvironmentDetails/index.js b/packages/bruno-app/src/components/Environments/EnvironmentSettings/EnvironmentList/EnvironmentDetails/index.js index d93983ace..b24d5f9f4 100644 --- a/packages/bruno-app/src/components/Environments/EnvironmentSettings/EnvironmentList/EnvironmentDetails/index.js +++ b/packages/bruno-app/src/components/Environments/EnvironmentSettings/EnvironmentList/EnvironmentDetails/index.js @@ -1,5 +1,5 @@ import { IconCopy, IconEdit, IconTrash, IconCheck, IconX, IconSearch, IconDeviceFloppy } from '@tabler/icons'; -import { useState, useRef } from 'react'; +import { useState, useRef, useEffect } from 'react'; import { useDispatch, useSelector } from 'react-redux'; import { renameEnvironment, updateEnvironmentColor } from 'providers/ReduxStore/slices/collections/actions'; import { validateName, validateNameError } from 'utils/common/regex'; @@ -30,6 +30,16 @@ const EnvironmentDetails = ({ environment, setIsModified, collection, searchQuer const activeTabUid = useSelector((state) => state.tabs.activeTabUid); const activeTab = useSelector((state) => state.tabs.tabs.find((t) => t.uid === activeTabUid)?.tabState?.envTab) || 'variables'; const setActiveTab = (tab) => dispatch(updateTabState({ uid: activeTabUid, tabState: { envTab: tab } })); + + // Use the immediate query on a tab switch (debounced value lags and briefly + // flashes the unfiltered table). + const prevTabRef = useRef(activeTab); + const tabJustChanged = prevTabRef.current !== activeTab; + useEffect(() => { + prevTabRef.current = activeTab; + }, [activeTab]); + const tableSearchQuery = tabJustChanged ? searchQuery : debouncedSearchQuery; + const inputRef = useRef(null); const rightContentRef = useRef(null); @@ -270,7 +280,7 @@ const EnvironmentDetails = ({ environment, setIsModified, collection, searchQuer environment={environment} setIsModified={setIsModified} collection={collection} - searchQuery={debouncedSearchQuery} + searchQuery={tableSearchQuery} variableType={activeTab} /> diff --git a/packages/bruno-app/src/components/Environments/EnvironmentSettings/EnvironmentList/index.js b/packages/bruno-app/src/components/Environments/EnvironmentSettings/EnvironmentList/index.js index 231a301c6..957124401 100644 --- a/packages/bruno-app/src/components/Environments/EnvironmentSettings/EnvironmentList/index.js +++ b/packages/bruno-app/src/components/Environments/EnvironmentSettings/EnvironmentList/index.js @@ -42,10 +42,12 @@ const EnvironmentList = ({ setShowExportModal }) => { const dispatch = useDispatch(); - const envSearchQuery = useSelector((state) => state.app.envVarSearch?.collection?.query ?? ''); - const isEnvSearchExpanded = useSelector((state) => state.app.envVarSearch?.collection?.expanded ?? false); - const setEnvSearchQuery = (q) => dispatch(setEnvVarSearchQuery({ context: 'collection', query: q })); - const setIsEnvSearchExpanded = (v) => dispatch(setEnvVarSearchExpanded({ context: 'collection', expanded: v })); + const activeTabUid = useSelector((state) => state.tabs.activeTabUid); + const activeEnvTab = useSelector((state) => state.tabs.tabs.find((t) => t.uid === activeTabUid)?.tabState?.envTab) || 'variables'; + const envSearchQuery = useSelector((state) => state.app.envVarSearch?.collection?.[activeEnvTab]?.query ?? ''); + const isEnvSearchExpanded = useSelector((state) => state.app.envVarSearch?.collection?.[activeEnvTab]?.expanded ?? false); + const setEnvSearchQuery = (q) => dispatch(setEnvVarSearchQuery({ context: 'collection', tab: activeEnvTab, query: q })); + const setIsEnvSearchExpanded = (v) => dispatch(setEnvVarSearchExpanded({ context: 'collection', tab: activeEnvTab, expanded: v })); const [openImportModal, setOpenImportModal] = useState(false); const [searchText, setSearchText] = useState(''); diff --git a/packages/bruno-app/src/components/WorkspaceHome/WorkspaceEnvironments/EnvironmentList/EnvironmentDetails/index.js b/packages/bruno-app/src/components/WorkspaceHome/WorkspaceEnvironments/EnvironmentList/EnvironmentDetails/index.js index c3afdc62a..0096c2ebb 100644 --- a/packages/bruno-app/src/components/WorkspaceHome/WorkspaceEnvironments/EnvironmentList/EnvironmentDetails/index.js +++ b/packages/bruno-app/src/components/WorkspaceHome/WorkspaceEnvironments/EnvironmentList/EnvironmentDetails/index.js @@ -1,5 +1,5 @@ import { IconCopy, IconEdit, IconTrash, IconCheck, IconX, IconSearch, IconDeviceFloppy } from '@tabler/icons'; -import { useState, useRef } from 'react'; +import { useState, useRef, useEffect } from 'react'; import { useDispatch, useSelector } from 'react-redux'; import { renameGlobalEnvironment, updateGlobalEnvironmentColor } from 'providers/ReduxStore/slices/global-environments'; import { updateTabState } from 'providers/ReduxStore/slices/tabs'; @@ -30,6 +30,16 @@ const EnvironmentDetails = ({ environment, setIsModified, collection, searchQuer const activeTabUid = useSelector((state) => state.tabs.activeTabUid); const activeTab = useSelector((state) => state.tabs.tabs.find((t) => t.uid === activeTabUid)?.tabState?.envTab) || 'variables'; const setActiveTab = (tab) => dispatch(updateTabState({ uid: activeTabUid, tabState: { envTab: tab } })); + + // Use the immediate query on a tab switch (debounced value lags and briefly + // flashes the unfiltered table). + const prevTabRef = useRef(activeTab); + const tabJustChanged = prevTabRef.current !== activeTab; + useEffect(() => { + prevTabRef.current = activeTab; + }, [activeTab]); + const tableSearchQuery = tabJustChanged ? searchQuery : debouncedSearchQuery; + const inputRef = useRef(null); const rightContentRef = useRef(null); @@ -205,6 +215,9 @@ const EnvironmentDetails = ({ environment, setIsModified, collection, searchQuer {nameError && isRenaming &&