import React, { useState, useEffect } from 'react'; import find from 'lodash/find'; import toast from 'react-hot-toast'; import { useSelector, useDispatch } from 'react-redux'; import GraphQLRequestPane from 'components/RequestPane/GraphQLRequestPane'; import HttpRequestPane from 'components/RequestPane/HttpRequestPane'; import ResponsePane from 'components/ResponsePane'; import Welcome from 'components/Welcome'; import { findItemInCollection } from 'utils/collections'; import { updateRequestPaneTabWidth } from 'providers/ReduxStore/slices/tabs'; import { sendRequest } from 'providers/ReduxStore/slices/collections/actions'; import RequestNotFound from './RequestNotFound'; import QueryUrl from 'components/RequestPane/QueryUrl'; import NetworkError from 'components/ResponsePane/NetworkError'; import StyledWrapper from './StyledWrapper'; const MIN_LEFT_PANE_WIDTH = 300; const DEFAULT_PADDING = 5; const RequestTabPanel = () => { if (typeof window == 'undefined') { return
; } const dispatch = useDispatch(); const tabs = useSelector((state) => state.tabs.tabs); const activeTabUid = useSelector((state) => state.tabs.activeTabUid); const collections = useSelector((state) => state.collections.collections); const screenWidth = useSelector((state) => state.app.screenWidth); let asideWidth = useSelector((state) => state.app.leftSidebarWidth); const focusedTab = find(tabs, (t) => t.uid === activeTabUid); const [leftPaneWidth, setLeftPaneWidth] = useState(focusedTab && focusedTab.requestPaneWidth ? focusedTab.requestPaneWidth : (screenWidth - asideWidth) / 2.2); // 2.2 so that request pane is relatively smaller const [rightPaneWidth, setRightPaneWidth] = useState(screenWidth - asideWidth - leftPaneWidth - DEFAULT_PADDING); const [dragging, setDragging] = useState(false); useEffect(() => { const leftPaneWidth = (screenWidth - asideWidth) / 2.2; setLeftPaneWidth(leftPaneWidth); }, [screenWidth]); useEffect(() => { setRightPaneWidth(screenWidth - asideWidth - leftPaneWidth - DEFAULT_PADDING); }, [screenWidth, asideWidth, leftPaneWidth]); const handleMouseMove = (e) => { if (dragging) { e.preventDefault(); setLeftPaneWidth(Math.max((e.clientX - asideWidth - DEFAULT_PADDING), MIN_LEFT_PANE_WIDTH)); setRightPaneWidth(screenWidth - e.clientX - DEFAULT_PADDING); } }; const handleMouseUp = (e) => { if (dragging) { e.preventDefault(); setDragging(false); dispatch( updateRequestPaneTabWidth({ uid: activeTabUid, requestPaneWidth: e.clientX - asideWidth - DEFAULT_PADDING }) ); } }; const handleDragbarMouseDown = (e) => { e.preventDefault(); setDragging(true); }; useEffect(() => { document.addEventListener('mouseup', handleMouseUp); document.addEventListener('mousemove', handleMouseMove); return () => { document.removeEventListener('mouseup', handleMouseUp); document.removeEventListener('mousemove', handleMouseMove); }; }, [dragging, asideWidth]); if (!activeTabUid) { return