import { useEffect, useRef, useState } from 'react' import { Box, HStack, SpanBox, VStack } from '../../elements/LayoutPrimitives' import { theme } from '../../tokens/stitches.config' import { FormInput } from '../../elements/FormElements' import { searchBarCommands } from '../../../lib/keyboardShortcuts/navigationShortcuts' import { useKeyboardShortcuts } from '../../../lib/keyboardShortcuts/useKeyboardShortcuts' import { Button } from '../../elements/Button' import { FunnelSimple, X } from '@phosphor-icons/react' import { LayoutType } from '../homeFeed/HomeFeedContainer' import { OmnivoreSmallLogo } from '../../elements/images/OmnivoreNameLogo' import { LIBRARY_LEFT_MENU_WIDTH } from '../navMenu/LibraryMenu' import { BulkAction } from '../../../lib/networking/library_items/useLibraryItems' import { HeaderToggleGridIcon } from '../../elements/icons/HeaderToggleGridIcon' import { HeaderToggleListIcon } from '../../elements/icons/HeaderToggleListIcon' import { UserBasicData } from '../../../lib/networking/queries/useGetViewerQuery' import { MultiSelectControls, CheckBoxButton, } from '../homeFeed/MultiSelectControls' export type MultiSelectMode = 'off' | 'none' | 'some' | 'visible' | 'search' export type LibraryHeaderProps = { viewer: UserBasicData | undefined layout: LayoutType updateLayout: (layout: LayoutType) => void folder: string | undefined searchTerm: string | undefined applySearchQuery: (searchQuery: string) => void showFilterMenu: boolean numItemsSelected: number multiSelectMode: MultiSelectMode setMultiSelectMode: (mode: MultiSelectMode) => void performMultiSelectAction: (action: BulkAction, labelIds?: string[]) => void } export function LibraryHeader(props: LibraryHeaderProps): JSX.Element { const [small, setSmall] = useState(false) useEffect(() => { const handleScroll = () => { setSmall(window.scrollY > 40) } if (typeof window !== 'undefined') { window.addEventListener('scroll', handleScroll) } return () => { window.removeEventListener('scroll', handleScroll) } }, []) return ( <> ) } function LargeHeaderLayout(props: LibraryHeaderProps): JSX.Element { return ( {props.multiSelectMode !== 'off' ? ( <> ) : ( )} ) } const HeaderControls = (props: LibraryHeaderProps): JSX.Element => { const [searchBoxFocused, setSearchBoxFocused] = useState(false) return ( <> {/* {userHasFeature(props.viewer, 'ai-summaries') && ( )} */} ) } type MenuHeaderButtonProps = { showFilterMenu: boolean setShowFilterMenu: (show: boolean) => void } export function MenuHeaderButton(props: MenuHeaderButtonProps): JSX.Element { return ( { props.setShowFilterMenu(!props.showFilterMenu) }} > ) } type SearchBoxProps = LibraryHeaderProps & { searchBoxFocused: boolean setSearchBoxFocused: (show: boolean) => void } export function SearchBox(props: SearchBoxProps): JSX.Element { const inputRef = useRef(null) const [searchTerm, setSearchTerm] = useState(props.searchTerm ?? '') useEffect(() => { setSearchTerm(props.searchTerm ?? '') }, [props.searchTerm]) useKeyboardShortcuts( searchBarCommands((action) => { if (action === 'focusSearchBar' && inputRef.current) { inputRef.current.select() } if (action == 'clearSearch' && inputRef.current) { setSearchTerm('') props.applySearchQuery('') } }) ) return ( {props.folder !== 'trash' && ( )}
{ event.preventDefault() props.applySearchQuery(searchTerm || '') inputRef.current?.blur() }} style={{ width: '100%' }} > { event.target.select() props.setSearchBoxFocused(true) }} onBlur={() => { props.setSearchBoxFocused(false) }} onChange={(event) => { setSearchTerm(event.target.value) }} onKeyDown={(event) => { const key = event.key.toLowerCase() if (key == 'escape') { event.currentTarget.blur() } }} /> { setSearchTerm('in:inbox') props.applySearchQuery('') inputRef.current?.blur() }} />
) } type CancelSearchButtonProps = { onClick: () => void } const CancelSearchButton = (props: CancelSearchButtonProps): JSX.Element => { const [color, setColor] = useState( theme.colors.thTextContrast2.toString() ) return ( ) }