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' && (
)}
{
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 (
)
}