MCPcopy Create free account
hub / github.com/GCWing/BitFun / WorkspaceBody

Function WorkspaceBody

src/web-ui/src/app/layout/WorkspaceBody.tsx:38–151  ·  view source on GitHub ↗
({
  className = '',
  isEntering = false,
  isExiting = false,
  onMinimize,
  onMaximize,
  onClose,
  isMaximized = false,
  sceneOverlay,
})

Source from the content-addressed store, hash-verified

36}
37
38const WorkspaceBody: React.FC<WorkspaceBodyProps> = ({
39 className = '',
40 isEntering = false,
41 isExiting = false,
42 onMinimize,
43 onMaximize,
44 onClose,
45 isMaximized = false,
46 sceneOverlay,
47}) => {
48 const { workspace: currentWorkspace } = useCurrentWorkspace();
49 const { state, toggleLeftPanel } = useApp();
50 const isNavCollapsed = state.layout.leftPanelCollapsed;
51 const [navWidth, setNavWidth] = useState(NAV_DEFAULT_WIDTH);
52 const [isDividerHovered, setIsDividerHovered] = useState(false);
53
54 const handleDividerMouseEnter = useCallback(() => {
55 setIsDividerHovered(true);
56 document.body.classList.add('bitfun-divider-hovered');
57 }, []);
58
59 const handleDividerMouseLeave = useCallback(() => {
60 setIsDividerHovered(false);
61 document.body.classList.remove('bitfun-divider-hovered');
62 }, []);
63
64 const handleNavCollapseDragStart = useCallback((event: React.MouseEvent<HTMLDivElement>) => {
65 if (event.button !== 0 || isNavCollapsed) return;
66 event.preventDefault();
67
68 const startX = event.clientX;
69 const startWidth = navWidth;
70 let hasCollapsed = false;
71
72 document.body.classList.add('bitfun-is-dragging-nav-collapse');
73 document.body.classList.add('bitfun-is-resizing-nav');
74
75 const handleMouseMove = (moveEvent: MouseEvent) => {
76 if (hasCollapsed) return;
77 const deltaX = moveEvent.clientX - startX;
78 const rawWidth = startWidth + deltaX;
79
80 // Collapse only after the width hits minimum AND continues left by COLLAPSE_THRESHOLD
81 if (rawWidth <= NAV_MIN_WIDTH - COLLAPSE_THRESHOLD) {
82 hasCollapsed = true;
83 toggleLeftPanel();
84 cleanup();
85 return;
86 }
87 const newWidth = Math.min(NAV_MAX_WIDTH, Math.max(NAV_MIN_WIDTH, rawWidth));
88 setNavWidth(newWidth);
89 };
90
91 const handleMouseUp = () => cleanup();
92
93 function cleanup() {
94 document.body.classList.remove('bitfun-is-dragging-nav-collapse');
95 document.body.classList.remove('bitfun-is-resizing-nav');

Callers

nothing calls this directly

Calls 5

useCurrentWorkspaceFunction · 0.90
useAppFunction · 0.90
addEventListenerMethod · 0.65
addMethod · 0.45
removeMethod · 0.45

Tested by

no test coverage detected