diff --git a/packages/bruno-app/src/components/CollectionSettings/Script/index.js b/packages/bruno-app/src/components/CollectionSettings/Script/index.js index 179286d63..a45375183 100644 --- a/packages/bruno-app/src/components/CollectionSettings/Script/index.js +++ b/packages/bruno-app/src/components/CollectionSettings/Script/index.js @@ -6,20 +6,38 @@ import { updateCollectionRequestScript, updateCollectionResponseScript } from 'p import { saveCollectionSettings } from 'providers/ReduxStore/slices/collections/actions'; import { useTheme } from 'providers/Theme'; import { Tabs, TabsList, TabsTrigger, TabsContent } from 'components/Tabs'; +import StatusDot from 'components/StatusDot'; import StyledWrapper from './StyledWrapper'; import Button from 'ui/Button'; const Script = ({ collection }) => { const dispatch = useDispatch(); - const [activeTab, setActiveTab] = useState('pre-request'); const preRequestEditorRef = useRef(null); const postResponseEditorRef = useRef(null); const requestScript = collection.draft?.root ? get(collection, 'draft.root.request.script.req', '') : get(collection, 'root.request.script.req', ''); const responseScript = collection.draft?.root ? get(collection, 'draft.root.request.script.res', '') : get(collection, 'root.request.script.res', ''); + // Default to post-response if pre-request script is empty + const getInitialTab = () => { + const hasPreRequestScript = requestScript && requestScript.trim().length > 0; + return hasPreRequestScript ? 'pre-request' : 'post-response'; + }; + + const [activeTab, setActiveTab] = useState(getInitialTab); + const prevCollectionUidRef = useRef(collection.uid); + const { displayedTheme } = useTheme(); const preferences = useSelector((state) => state.app.preferences); + // Update active tab only when switching to a different collection + useEffect(() => { + if (prevCollectionUidRef.current !== collection.uid) { + prevCollectionUidRef.current = collection.uid; + const hasPreRequestScript = requestScript && requestScript.trim().length > 0; + setActiveTab(hasPreRequestScript ? 'pre-request' : 'post-response'); + } + }, [collection.uid, requestScript]); + // Refresh CodeMirror when tab becomes visible useEffect(() => { const timer = setTimeout(() => { @@ -63,8 +81,14 @@ const Script = ({ collection }) => { - Pre Request - Post Response + + Pre Request + {requestScript && requestScript.trim().length > 0 && } + + + Post Response + {responseScript && responseScript.trim().length > 0 && } + diff --git a/packages/bruno-app/src/components/FolderSettings/Script/index.js b/packages/bruno-app/src/components/FolderSettings/Script/index.js index 768627e73..4bcddd199 100644 --- a/packages/bruno-app/src/components/FolderSettings/Script/index.js +++ b/packages/bruno-app/src/components/FolderSettings/Script/index.js @@ -6,20 +6,38 @@ import { updateFolderRequestScript, updateFolderResponseScript } from 'providers import { saveFolderRoot } from 'providers/ReduxStore/slices/collections/actions'; import { useTheme } from 'providers/Theme'; import { Tabs, TabsList, TabsTrigger, TabsContent } from 'components/Tabs'; +import StatusDot from 'components/StatusDot'; import StyledWrapper from './StyledWrapper'; import Button from 'ui/Button'; const Script = ({ collection, folder }) => { const dispatch = useDispatch(); - const [activeTab, setActiveTab] = useState('pre-request'); const preRequestEditorRef = useRef(null); const postResponseEditorRef = useRef(null); const requestScript = folder.draft ? get(folder, 'draft.request.script.req', '') : get(folder, 'root.request.script.req', ''); const responseScript = folder.draft ? get(folder, 'draft.request.script.res', '') : get(folder, 'root.request.script.res', ''); + // Default to post-response if pre-request script is empty + const getInitialTab = () => { + const hasPreRequestScript = requestScript && requestScript.trim().length > 0; + return hasPreRequestScript ? 'pre-request' : 'post-response'; + }; + + const [activeTab, setActiveTab] = useState(getInitialTab); + const prevFolderUidRef = useRef(folder.uid); + const { displayedTheme } = useTheme(); const preferences = useSelector((state) => state.app.preferences); + // Update active tab only when switching to a different folder + useEffect(() => { + if (prevFolderUidRef.current !== folder.uid) { + prevFolderUidRef.current = folder.uid; + const hasPreRequestScript = requestScript && requestScript.trim().length > 0; + setActiveTab(hasPreRequestScript ? 'pre-request' : 'post-response'); + } + }, [folder.uid, requestScript]); + // Refresh CodeMirror when tab becomes visible useEffect(() => { const timer = setTimeout(() => { @@ -65,8 +83,14 @@ const Script = ({ collection, folder }) => { - Pre Request - Post Response + + Pre Request + {requestScript && requestScript.trim().length > 0 && } + + + Post Response + {responseScript && responseScript.trim().length > 0 && } + diff --git a/packages/bruno-app/src/components/RequestPane/Script/index.js b/packages/bruno-app/src/components/RequestPane/Script/index.js index d753d4b62..1d49f394f 100644 --- a/packages/bruno-app/src/components/RequestPane/Script/index.js +++ b/packages/bruno-app/src/components/RequestPane/Script/index.js @@ -6,18 +6,36 @@ import { updateRequestScript, updateResponseScript } from 'providers/ReduxStore/ import { sendRequest, saveRequest } from 'providers/ReduxStore/slices/collections/actions'; import { useTheme } from 'providers/Theme'; import { Tabs, TabsList, TabsTrigger, TabsContent } from 'components/Tabs'; +import StatusDot from 'components/StatusDot'; const Script = ({ item, collection }) => { const dispatch = useDispatch(); - const [activeTab, setActiveTab] = useState('pre-request'); const preRequestEditorRef = useRef(null); const postResponseEditorRef = useRef(null); const requestScript = item.draft ? get(item, 'draft.request.script.req') : get(item, 'request.script.req'); const responseScript = item.draft ? get(item, 'draft.request.script.res') : get(item, 'request.script.res'); + // Default to post-response if pre-request script is empty + const getInitialTab = () => { + const hasPreRequestScript = requestScript && requestScript.trim().length > 0; + return hasPreRequestScript ? 'pre-request' : 'post-response'; + }; + + const [activeTab, setActiveTab] = useState(getInitialTab); + const prevItemUidRef = useRef(item.uid); + const { displayedTheme } = useTheme(); const preferences = useSelector((state) => state.app.preferences); + // Update active tab only when switching to a different item + useEffect(() => { + if (prevItemUidRef.current !== item.uid) { + prevItemUidRef.current = item.uid; + const hasPreRequestScript = requestScript && requestScript.trim().length > 0; + setActiveTab(hasPreRequestScript ? 'pre-request' : 'post-response'); + } + }, [item.uid, requestScript]); + // Refresh CodeMirror when tab becomes visible useEffect(() => { // Small delay to ensure DOM is updated @@ -55,12 +73,21 @@ const Script = ({ item, collection }) => { const onRun = () => dispatch(sendRequest(item, collection.uid)); const onSave = () => dispatch(saveRequest(item.uid, collection.uid)); + const hasPreRequestScript = requestScript && requestScript.trim().length > 0; + const hasPostResponseScript = responseScript && responseScript.trim().length > 0; + return (
- Pre Request - Post Response + + Pre Request + {hasPreRequestScript && } + + + Post Response + {hasPostResponseScript && } +