2023-08-27 15:39:49 +03:00
|
|
|
import { useCallback } from 'react';
|
|
|
|
|
|
|
|
import Button from '../../components/Common/Button';
|
|
|
|
import Checkbox from '../../components/Common/Checkbox';
|
|
|
|
import Dropdown from '../../components/Common/Dropdown';
|
|
|
|
import DropdownButton from '../../components/Common/DropdownButton';
|
|
|
|
import { FilterCogIcon } from '../../components/Icons';
|
2023-08-29 15:17:16 +03:00
|
|
|
import { useAuth } from '../../context/AuthContext';
|
2023-08-27 15:39:49 +03:00
|
|
|
import useDropdown from '../../hooks/useDropdown';
|
|
|
|
import { LibraryFilterStrategy } from '../../utils/models';
|
|
|
|
|
|
|
|
interface PickerStrategyProps {
|
|
|
|
value: LibraryFilterStrategy
|
|
|
|
onChange: (value: LibraryFilterStrategy) => void
|
|
|
|
}
|
|
|
|
|
|
|
|
function PickerStrategy({ value, onChange }: PickerStrategyProps) {
|
|
|
|
const pickerMenu = useDropdown();
|
2023-08-29 15:17:16 +03:00
|
|
|
const { user } = useAuth();
|
2023-08-27 15:39:49 +03:00
|
|
|
|
|
|
|
const handleChange = useCallback(
|
|
|
|
(newValue: LibraryFilterStrategy) => {
|
|
|
|
pickerMenu.hide();
|
|
|
|
onChange(newValue);
|
|
|
|
}, [pickerMenu, onChange]);
|
|
|
|
|
|
|
|
return (
|
|
|
|
<div ref={pickerMenu.ref} className='h-full text-right'>
|
|
|
|
<Button
|
|
|
|
icon={<FilterCogIcon size={6} />}
|
|
|
|
dense
|
|
|
|
tooltip='Фильтры'
|
|
|
|
colorClass='clr-input clr-hover text-btn'
|
|
|
|
widthClass='h-full py-1 px-2 border-none'
|
|
|
|
onClick={pickerMenu.toggle}
|
|
|
|
/>
|
|
|
|
{ pickerMenu.isActive &&
|
|
|
|
<Dropdown>
|
|
|
|
<DropdownButton onClick={() => handleChange(LibraryFilterStrategy.MANUAL)}>
|
|
|
|
<Checkbox
|
|
|
|
value={value === LibraryFilterStrategy.MANUAL}
|
|
|
|
label='Отображать все'
|
2023-08-27 16:35:17 +03:00
|
|
|
widthClass='w-fit px-2'
|
2023-08-27 15:39:49 +03:00
|
|
|
/>
|
|
|
|
</DropdownButton>
|
|
|
|
<DropdownButton onClick={() => handleChange(LibraryFilterStrategy.COMMON)}>
|
|
|
|
<Checkbox
|
|
|
|
value={value === LibraryFilterStrategy.COMMON}
|
|
|
|
label='Общедоступные'
|
2023-08-27 16:35:17 +03:00
|
|
|
widthClass='w-fit px-2'
|
2023-08-27 15:39:49 +03:00
|
|
|
tooltip='Отображать только общедоступные схемы'
|
|
|
|
/>
|
|
|
|
</DropdownButton>
|
|
|
|
<DropdownButton onClick={() => handleChange(LibraryFilterStrategy.CANONICAL)}>
|
|
|
|
<Checkbox
|
|
|
|
value={value === LibraryFilterStrategy.CANONICAL}
|
|
|
|
label='Библиотечные'
|
2023-08-27 16:35:17 +03:00
|
|
|
widthClass='w-fit px-2'
|
2023-08-27 15:39:49 +03:00
|
|
|
tooltip='Отображать только библиотечные схемы'
|
|
|
|
/>
|
|
|
|
</DropdownButton>
|
|
|
|
<DropdownButton onClick={() => handleChange(LibraryFilterStrategy.PERSONAL)}>
|
|
|
|
<Checkbox
|
|
|
|
value={value === LibraryFilterStrategy.PERSONAL}
|
|
|
|
label='Личные'
|
2023-08-29 15:17:16 +03:00
|
|
|
disabled={!user}
|
2023-08-27 16:35:17 +03:00
|
|
|
widthClass='w-fit px-2'
|
2023-08-27 15:39:49 +03:00
|
|
|
tooltip='Отображать только подписки и владеемые схемы'
|
|
|
|
/>
|
|
|
|
</DropdownButton>
|
|
|
|
<DropdownButton onClick={() => handleChange(LibraryFilterStrategy.SUBSCRIBE)}>
|
|
|
|
<Checkbox
|
|
|
|
value={value === LibraryFilterStrategy.SUBSCRIBE}
|
|
|
|
label='Подписки'
|
2023-08-29 15:17:16 +03:00
|
|
|
disabled={!user}
|
2023-08-27 16:35:17 +03:00
|
|
|
widthClass='w-fit px-2'
|
2023-08-27 15:39:49 +03:00
|
|
|
tooltip='Отображать только подписки'
|
|
|
|
/>
|
|
|
|
</DropdownButton>
|
|
|
|
<DropdownButton onClick={() => handleChange(LibraryFilterStrategy.OWNED)}>
|
|
|
|
<Checkbox
|
|
|
|
value={value === LibraryFilterStrategy.OWNED}
|
2023-08-29 15:17:16 +03:00
|
|
|
disabled={!user}
|
2023-08-27 15:39:49 +03:00
|
|
|
label='Я - Владелец!'
|
2023-08-27 16:35:17 +03:00
|
|
|
widthClass='w-fit px-2'
|
2023-08-27 15:39:49 +03:00
|
|
|
tooltip='Отображать только владеемые схемы'
|
|
|
|
/>
|
|
|
|
</DropdownButton>
|
|
|
|
</Dropdown>}
|
|
|
|
</div>
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
export default PickerStrategy;
|