ConceptPortal-public/rsconcept/frontend/src/pages/LibraryPage/SearchPanel.tsx

65 lines
1.9 KiB
TypeScript
Raw Normal View History

'use client';
2023-08-26 19:39:49 +03:00
import { useCallback } from 'react';
2023-08-27 15:39:49 +03:00
import ConceptSearch from '@/components/Common/ConceptSearch';
import { useConceptNavigation } from '@/context/NagivationContext';
import { ILibraryFilter } from '@/models/miscelanious';
import { LibraryFilterStrategy } from '@/models/miscelanious';
2023-08-27 15:39:49 +03:00
import PickerStrategy from './PickerStrategy';
2023-08-26 19:39:49 +03:00
interface SearchPanelProps {
2023-08-27 15:39:49 +03:00
total: number
filtered: number
2023-08-26 19:39:49 +03:00
setFilter: React.Dispatch<React.SetStateAction<ILibraryFilter>>
2023-09-11 21:06:51 +03:00
query: string
setQuery: React.Dispatch<React.SetStateAction<string>>
strategy: LibraryFilterStrategy
2023-08-26 19:39:49 +03:00
}
function SearchPanel({ total, filtered, query, setQuery, strategy, setFilter }: SearchPanelProps) {
const router = useConceptNavigation();
2023-08-26 19:39:49 +03:00
2023-12-08 19:24:08 +03:00
function handleChangeQuery(newQuery: string) {
2023-08-27 00:19:19 +03:00
setQuery(newQuery);
setFilter(prev => ({
query: newQuery,
is_owned: prev.is_owned,
is_common: prev.is_common,
is_canonical: prev.is_canonical,
is_subscribed: prev.is_subscribed,
is_personal: prev.is_personal
}));
2023-08-27 00:19:19 +03:00
}
2023-08-26 19:39:49 +03:00
2023-08-27 15:39:49 +03:00
const handleChangeStrategy = useCallback(
(value: LibraryFilterStrategy) => {
if (value !== strategy) {
router.push(`/library?filter=${value}`);
2023-08-27 15:39:49 +03:00
}
}, [strategy, router]);
2023-08-27 15:39:49 +03:00
2023-08-26 19:39:49 +03:00
return (
<div className='sticky top-0 left-0 right-0 flex items-stretch justify-start w-full border-b clr-input max-h-[2.3rem] pr-40'>
<div className='px-2 py-1 select-none whitespace-nowrap min-w-[10rem]'>
Фильтр
<span className='ml-2'>
{filtered} из {total}
</span>
</div>
<div className='flex items-center justify-center w-full gap-1'>
2023-12-08 19:24:08 +03:00
<ConceptSearch noBorder
value={query}
onChange={handleChangeQuery}
dimensions='min-w-[10rem] '
/>
<PickerStrategy
value={strategy}
onChange={handleChangeStrategy}
/>
2023-08-26 19:39:49 +03:00
</div>
</div>);
2023-08-26 19:39:49 +03:00
}
export default SearchPanel;