2023-08-27 15:39:49 +03:00
|
|
|
import { useCallback } from 'react';
|
|
|
|
|
|
|
|
import Button from '../../components/Common/Button';
|
|
|
|
import Dropdown from '../../components/Common/Dropdown';
|
2023-09-02 01:11:27 +03:00
|
|
|
import DropdownCheckbox from '../../components/Common/DropdownCheckbox';
|
2023-08-27 15:39:49 +03:00
|
|
|
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
|
2023-09-09 20:36:55 +03:00
|
|
|
icon={<FilterCogIcon color='text-controls' size={6} />}
|
2023-08-27 15:39:49 +03:00
|
|
|
dense
|
|
|
|
tooltip='Фильтры'
|
|
|
|
colorClass='clr-input clr-hover text-btn'
|
|
|
|
widthClass='h-full py-1 px-2 border-none'
|
|
|
|
onClick={pickerMenu.toggle}
|
|
|
|
/>
|
|
|
|
{ pickerMenu.isActive &&
|
|
|
|
<Dropdown>
|
2023-09-02 01:11:27 +03:00
|
|
|
<DropdownCheckbox
|
2023-09-07 16:30:43 +03:00
|
|
|
setValue={() => handleChange(LibraryFilterStrategy.MANUAL)}
|
2023-09-02 01:11:27 +03:00
|
|
|
value={value === LibraryFilterStrategy.MANUAL}
|
|
|
|
label='Отображать все'
|
|
|
|
/>
|
|
|
|
<DropdownCheckbox
|
2023-09-07 16:30:43 +03:00
|
|
|
setValue={() => handleChange(LibraryFilterStrategy.COMMON)}
|
2023-09-02 01:11:27 +03:00
|
|
|
value={value === LibraryFilterStrategy.COMMON}
|
|
|
|
label='Общедоступные'
|
|
|
|
tooltip='Отображать только общедоступные схемы'
|
|
|
|
/>
|
|
|
|
<DropdownCheckbox
|
2023-09-07 16:30:43 +03:00
|
|
|
setValue={() => handleChange(LibraryFilterStrategy.CANONICAL)}
|
2023-09-02 01:11:27 +03:00
|
|
|
value={value === LibraryFilterStrategy.CANONICAL}
|
|
|
|
label='Неизменные'
|
2023-09-03 18:26:50 +03:00
|
|
|
tooltip='Отображать только стандартные схемы'
|
2023-09-02 01:11:27 +03:00
|
|
|
/>
|
|
|
|
<DropdownCheckbox
|
2023-09-07 16:30:43 +03:00
|
|
|
setValue={() => handleChange(LibraryFilterStrategy.PERSONAL)}
|
2023-09-02 01:11:27 +03:00
|
|
|
value={value === LibraryFilterStrategy.PERSONAL}
|
|
|
|
label='Личные'
|
|
|
|
disabled={!user}
|
|
|
|
tooltip='Отображать только подписки и владеемые схемы'
|
|
|
|
/>
|
|
|
|
<DropdownCheckbox
|
2023-09-07 16:30:43 +03:00
|
|
|
setValue={() => handleChange(LibraryFilterStrategy.SUBSCRIBE)}
|
2023-09-02 01:11:27 +03:00
|
|
|
value={value === LibraryFilterStrategy.SUBSCRIBE}
|
|
|
|
label='Подписки'
|
|
|
|
disabled={!user}
|
|
|
|
tooltip='Отображать только подписки'
|
|
|
|
/>
|
|
|
|
<DropdownCheckbox
|
2023-09-07 16:30:43 +03:00
|
|
|
setValue={() => handleChange(LibraryFilterStrategy.OWNED)}
|
2023-09-02 01:11:27 +03:00
|
|
|
value={value === LibraryFilterStrategy.OWNED}
|
|
|
|
disabled={!user}
|
|
|
|
label='Я - Владелец!'
|
|
|
|
tooltip='Отображать только владеемые схемы'
|
|
|
|
/>
|
2023-08-27 15:39:49 +03:00
|
|
|
</Dropdown>}
|
|
|
|
</div>
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
export default PickerStrategy;
|