import React, { useContext, useEffect, useRef, useState } from 'react' import { Toolbar } from './Toolbar' import { TagBar } from './TagBar' import { Note } from './Note' import { Button, Slide, VStack, Flex, Heading, Box, IconButton, Tooltip, HStack, TagLabel, Tag, TagRightIcon, } from '@chakra-ui/react' import { Collapse } from './Collapse' import { Scrollbars } from 'react-custom-scrollbars-2' import { ChevronLeftIcon, ChevronRightIcon, CloseIcon, HamburgerIcon, ViewIcon, ViewOffIcon, } from '@chakra-ui/icons' import { BiDotsVerticalRounded, BiFile, BiNetworkChart } from 'react-icons/bi' import { BsReverseLayoutSidebarInsetReverse } from 'react-icons/bs' import { GraphData, NodeObject, LinkObject } from 'force-graph' import { OrgRoamNode } from '../../api' import { ThemeContext } from '../../util/themecontext' import { LinksByNodeId, NodeByCite, NodeById, Scope } from '../../pages/index' import { Resizable } from 're-resizable' import { usePersistantState } from '../../util/persistant-state' import { initialFilter, TagColors } from '../config' export interface SidebarProps { isOpen: boolean onClose: any onOpen: any nodeById: NodeById previewNode: NodeObject setPreviewNode: any linksByNodeId: LinksByNodeId nodeByCite: NodeByCite setSidebarHighlightedNode: any canUndo: any canRedo: any resetPreviewNode: any previousPreviewNode: any nextPreviewNode: any openContextMenu: any scope: Scope setScope: any windowWidth: number filter: typeof initialFilter setFilter: any tagColors: TagColors setTagColors: any } const Sidebar = (props: SidebarProps) => { const { isOpen, onOpen, onClose, previewNode, setPreviewNode, nodeById, linksByNodeId, nodeByCite, setSidebarHighlightedNode, canUndo, canRedo, resetPreviewNode, previousPreviewNode, nextPreviewNode, openContextMenu, scope, setScope, windowWidth, filter, setFilter, tagColors, setTagColors, } = props const { highlightColor } = useContext(ThemeContext) const [previewRoamNode, setPreviewRoamNode] = useState() const [sidebarWidth, setSidebarWidth] = usePersistantState('sidebarWidth', 400) useEffect(() => { if (!previewNode?.id) { onClose() return } onOpen() setPreviewRoamNode(previewNode as OrgRoamNode) }, [previewNode?.id]) const [justification, setJustification] = useState(1) const justificationList = ['justify', 'start', 'end', 'center'] const [font, setFont] = useState('sans serif') const [indent, setIndent] = useState(0) //maybe want to close it when clicking outside, but not sure //const outsideClickRef = useRef(); return ( { setSidebarWidth((curr: number) => curr + d.width) }} enable={{ top: false, right: false, bottom: false, left: true, topRight: false, bottomRight: false, bottomLeft: false, topLeft: false, }} minWidth="220px" maxWidth={windowWidth - 200} > { e.preventDefault() openContextMenu(previewNode, e) }} /> { e.preventDefault() openContextMenu(previewNode, e) }} > {previewRoamNode?.title} } aria-label="Options" variant="subtle" onClick={(e) => { openContextMenu(previewNode, e, { left: undefined, top: 12, right: -windowWidth + 20, bottom: undefined, }) }} /> ( )} > ) } export default Sidebar