diff --git a/packages/app/src/components/DBRowSidePanel.tsx b/packages/app/src/components/DBRowSidePanel.tsx index 5c60b4f7..57b3a167 100644 --- a/packages/app/src/components/DBRowSidePanel.tsx +++ b/packages/app/src/components/DBRowSidePanel.tsx @@ -1,5 +1,6 @@ import { createContext, + MouseEventHandler, useCallback, useContext, useId, @@ -80,6 +81,25 @@ export default function DBRowSidePanel({ parseAsStringEnum(Object.values(Tab)).withDefault(Tab.Parsed), ); + const [panelWidth, setPanelWidth] = useState( + Math.round(window.innerWidth * 0.8), + ); + const handleResize = useCallback((e: MouseEvent) => { + const offsetRight = + document.body.offsetWidth - (e.clientX - document.body.offsetLeft); + const maxWidth = document.body.offsetWidth - 25; + setPanelWidth(Math.min(offsetRight + 3, maxWidth)); // ensure we bury the cursor in the panel + }, []); + const startResize: MouseEventHandler = useCallback(e => { + e.preventDefault(); + document.addEventListener('mousemove', handleResize); + document.addEventListener('mouseup', endResize); + }, []); + const endResize = useCallback(() => { + document.removeEventListener('mousemove', handleResize); + document.removeEventListener('mouseup', endResize); + }, []); + // const [queryTab, setQueryTab] = useQueryParam( // 'tb', // withDefault(StringParam, undefined), @@ -162,12 +182,13 @@ export default function DBRowSidePanel({ } }} direction="right" - size={'80vw'} + size={panelWidth} zIndex={drawerZIndex} enableOverlay={subDrawerOpen} >
+ {isRowLoading && (
Loading...
)} diff --git a/packages/app/styles/LogSidePanel.module.scss b/packages/app/styles/LogSidePanel.module.scss index 04e15aa2..3e000c43 100644 --- a/packages/app/styles/LogSidePanel.module.scss +++ b/packages/app/styles/LogSidePanel.module.scss @@ -13,6 +13,19 @@ $padding-x: 24px; border-left: 1px solid $slate-900; } +.panelDragBar { + position: absolute; + width: 3px; + height: 100%; + cursor: col-resize; + background-color: transparent; + + &:hover { + background-color: $slate-900; + transition: background-color 0.2s ease-in-out; + } +} + .panelHeader { display: flex; justify-content: space-between;