2023-12-13 14:32:57 +03:00
|
|
|
'use client';
|
|
|
|
|
2023-08-27 15:39:49 +03:00
|
|
|
import { useCallback } from 'react';
|
|
|
|
|
2023-12-13 14:32:57 +03:00
|
|
|
import Dropdown from '@/components/Common/Dropdown';
|
|
|
|
import DropdownCheckbox from '@/components/Common/DropdownCheckbox';
|
|
|
|
import SelectorButton from '@/components/Common/SelectorButton';
|
|
|
|
import { FilterIcon } from '@/components/Icons';
|
|
|
|
import { useAuth } from '@/context/AuthContext';
|
|
|
|
import useDropdown from '@/hooks/useDropdown';
|
|
|
|
import { LibraryFilterStrategy } from '@/models/miscelanious';
|
|
|
|
import { prefixes } from '@/utils/constants';
|
|
|
|
import { describeLibraryFilter, labelLibraryFilter } from '@/utils/labels';
|
2023-08-27 15:39:49 +03:00
|
|
|
|
|
|
|
interface PickerStrategyProps {
|
|
|
|
value: LibraryFilterStrategy
|
|
|
|
onChange: (value: LibraryFilterStrategy) => void
|
|
|
|
}
|
|
|
|
|
|
|
|
function PickerStrategy({ value, onChange }: PickerStrategyProps) {
|
2023-10-06 14:39:32 +03:00
|
|
|
const strategyMenu = 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) => {
|
2023-10-06 14:39:32 +03:00
|
|
|
strategyMenu.hide();
|
2023-08-27 15:39:49 +03:00
|
|
|
onChange(newValue);
|
2023-10-06 14:39:32 +03:00
|
|
|
}, [strategyMenu, onChange]);
|
|
|
|
|
|
|
|
function isStrategyDisabled(strategy: LibraryFilterStrategy): boolean {
|
|
|
|
if (
|
|
|
|
strategy === LibraryFilterStrategy.PERSONAL ||
|
|
|
|
strategy === LibraryFilterStrategy.SUBSCRIBE ||
|
|
|
|
strategy === LibraryFilterStrategy.OWNED
|
|
|
|
) {
|
|
|
|
return !user;
|
|
|
|
} else {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
2023-08-27 15:39:49 +03:00
|
|
|
|
|
|
|
return (
|
2023-10-06 14:39:32 +03:00
|
|
|
<div ref={strategyMenu.ref} className='h-full text-right'>
|
2023-11-27 11:33:34 +03:00
|
|
|
<SelectorButton transparent tabIndex={-1}
|
2023-10-06 14:39:32 +03:00
|
|
|
tooltip='Список фильтров'
|
2023-10-06 15:09:23 +03:00
|
|
|
dimensions='w-fit h-full'
|
2023-10-16 02:17:31 +03:00
|
|
|
icon={<FilterIcon size={5} />}
|
2023-10-06 14:39:32 +03:00
|
|
|
text={labelLibraryFilter(value)}
|
|
|
|
onClick={strategyMenu.toggle}
|
2023-08-27 15:39:49 +03:00
|
|
|
/>
|
2023-11-27 11:33:34 +03:00
|
|
|
{strategyMenu.isActive ?
|
2023-08-27 15:39:49 +03:00
|
|
|
<Dropdown>
|
2023-11-27 11:33:34 +03:00
|
|
|
{Object.values(LibraryFilterStrategy).map(
|
2023-10-06 14:39:32 +03:00
|
|
|
(enumValue, index) => {
|
|
|
|
const strategy = enumValue as LibraryFilterStrategy;
|
|
|
|
return (
|
|
|
|
<DropdownCheckbox
|
|
|
|
key={`${prefixes.library_filters_list}${index}`}
|
|
|
|
value={value === strategy}
|
|
|
|
setValue={() => handleChange(strategy)}
|
|
|
|
label={labelLibraryFilter(strategy)}
|
|
|
|
tooltip={describeLibraryFilter(strategy)}
|
|
|
|
disabled={isStrategyDisabled(strategy)}
|
|
|
|
/>);
|
|
|
|
})}
|
2023-11-27 11:33:34 +03:00
|
|
|
</Dropdown> : null}
|
2023-08-27 15:39:49 +03:00
|
|
|
</div>
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2023-12-13 14:32:57 +03:00
|
|
|
export default PickerStrategy;
|