'use client'; import clsx from 'clsx'; import { useCallback, useMemo } from 'react'; import { LocationIcon, VisibilityIcon } from '@/components/DomainIcons'; import { IconEditor, IconFilterReset, IconFolder, IconFolderSearch, IconFolderTree, IconOwner, IconUserSearch } from '@/components/Icons'; import { CProps } from '@/components/props'; import SelectUser from '@/components/select/SelectUser'; import Dropdown from '@/components/ui/Dropdown'; import DropdownButton from '@/components/ui/DropdownButton'; import MiniButton from '@/components/ui/MiniButton'; import SearchBar from '@/components/ui/SearchBar'; import SelectorButton from '@/components/ui/SelectorButton'; import { useUsers } from '@/context/UsersContext'; import useDropdown from '@/hooks/useDropdown'; import { LocationHead } from '@/models/library'; import { UserID } from '@/models/user'; import { prefixes } from '@/utils/constants'; import { describeLocationHead, labelLocationHead } from '@/utils/labels'; import { tripleToggleColor } from '@/utils/utils'; interface ToolbarSearchProps { total: number; filtered: number; hasCustomFilter: boolean; query: string; onChangeQuery: (newValue: string) => void; path: string; onChangePath: (newValue: string) => void; head: LocationHead | undefined; onChangeHead: (newValue: LocationHead | undefined) => void; folderMode: boolean; toggleFolderMode: () => void; isVisible: boolean | undefined; toggleVisible: () => void; isOwned: boolean | undefined; toggleOwned: () => void; isEditor: boolean | undefined; toggleEditor: () => void; filterUser: UserID | undefined; onChangeFilterUser: (newValue: UserID | undefined) => void; resetFilter: () => void; } function ToolbarSearch({ total, filtered, hasCustomFilter, query, onChangeQuery, path, onChangePath, head, onChangeHead, folderMode, toggleFolderMode, isVisible, toggleVisible, isOwned, toggleOwned, isEditor, toggleEditor, filterUser, onChangeFilterUser, resetFilter }: ToolbarSearchProps) { const headMenu = useDropdown(); const userMenu = useDropdown(); const { users } = useUsers(); const userActive = useMemo( () => isOwned !== undefined || isEditor !== undefined || filterUser !== undefined, [isOwned, isEditor, filterUser] ); const handleChange = useCallback( (newValue: LocationHead | undefined) => { headMenu.hide(); onChangeHead(newValue); }, [headMenu, onChangeHead] ); const handleToggleFolder = useCallback(() => { headMenu.hide(); toggleFolderMode(); }, [headMenu, toggleFolderMode]); const handleFolderClick = useCallback( (event: CProps.EventMouse) => { if (event.ctrlKey || event.metaKey) { toggleFolderMode(); } else { headMenu.toggle(); } }, [headMenu, toggleFolderMode] ); return (
{filtered} из {total}
} onClick={toggleVisible} />
} onClick={userMenu.toggle} /> } onClick={toggleOwned} /> } onClick={toggleEditor} />
} onClick={resetFilter} disabled={!hasCustomFilter} />
{!folderMode ? (
Ctrl + клик - Проводник'} hideTitle={headMenu.isOpen} icon={ head ? ( ) : ( ) } onClick={handleFolderClick} text={head ?? '//'} />
проводник...
handleChange(undefined)}>
отображать все
{Object.values(LocationHead).map((head, index) => { return ( handleChange(head)} title={describeLocationHead(head)} >
{labelLocationHead(head)}
); })}
) : null} {!folderMode ? ( ) : null}
); } export default ToolbarSearch;