"use strict"; const React = require("react"); const throttleit = require("throttleit"); const classnames = require("classnames"); const Window = require("../window"); module.exports = function Sidebar({elementRef, side, windows, onMouseOver, onMouseOut, highlight, onStartMove, onStartBottomResize, onClose, onFocus, onRecalculateWindowPosition, onWindowRef}) { let [onScroll, setOnScroll] = React.useState(null); React.useEffect(() => { onScroll = throttleit(() => { windows.forEach((window_) => { onRecalculateWindowPosition(window_.id); }); }, 100); /* NOTE: Lazy initializer */ setOnScroll(() => { return onScroll; }); }, [windows]); function onMouseOverHandler(event) { onMouseOver(event, side); } function onMouseOutHandler(event) { onMouseOut(event, side); } function trackRef(windowId) { return function (ref) { onWindowRef(windowId, ref); if (ref != null) { onRecalculateWindowPosition(windowId); } }; } return (
{windows.map((window_) => { let windowStyle = { width: window_.width, height: window_.height, /* The below is a bit of a hack to ensure that a being-dragged window always displays with coordinates absolute to the page, not relative to the sidebar. */ position: (window_.isMoving) ? "fixed" : "static" }; let handlers = { onTitleMouseDown: (event) => { onStartMove(window_, event); }, onResizerMouseDown: (event) => { onStartBottomResize(window_, event); }, onMouseDown: () => { onFocus(window_); }, onClose: () => { onClose(window_); } }; return ( ); })}
); };