import clsx from "clsx"; import { ComponentChildren, RefObject } from "preact"; import { useContext, useState } from "preact/hooks"; import contextMenu, { MenuItem } from "../../menus/context_menu"; import ActionButton from "../react/ActionButton"; import { useSyncedRef, useTriliumOptionJson } from "../react/hooks"; import { ParentComponent } from "../react/react_utils"; interface RightPanelWidgetProps { id: string; title: string; children: ComponentChildren; buttons?: ComponentChildren; containerRef?: RefObject; contextMenuItems?: MenuItem[]; grow?: boolean; } export default function RightPanelWidget({ id, title, buttons, children, containerRef: externalContainerRef, contextMenuItems, grow }: RightPanelWidgetProps) { const [ rightPaneCollapsedItems, setRightPaneCollapsedItems ] = useTriliumOptionJson("rightPaneCollapsedItems"); const [ expanded, setExpanded ] = useState(!rightPaneCollapsedItems.includes(id)); const containerRef = useSyncedRef(externalContainerRef, null); const parentComponent = useContext(ParentComponent); if (parentComponent) { parentComponent.initialized = Promise.resolve(); } return (
{ const newExpanded = !expanded; setExpanded(newExpanded); const rightPaneCollapsedItemsSet = new Set(rightPaneCollapsedItems); if (newExpanded) { rightPaneCollapsedItemsSet.delete(id); } else { rightPaneCollapsedItemsSet.add(id); } setRightPaneCollapsedItems(Array.from(rightPaneCollapsedItemsSet)); }} >
{title}
{buttons} {contextMenuItems && ( { e.stopPropagation(); contextMenu.show({ x: e.pageX, y: e.pageY, items: contextMenuItems, selectMenuItemHandler: () => {} }); }} /> )}
{expanded &&
{children}
}
); }