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

71 lines
2.2 KiB
TypeScript
Raw Normal View History

'use client';
2023-08-27 15:39:49 +03:00
import { useCallback } from 'react';
2023-12-16 19:20:26 +03:00
import { BiFilterAlt } from 'react-icons/bi';
2023-08-27 15:39:49 +03:00
import Dropdown from '@/components/Common/Dropdown';
import DropdownCheckbox from '@/components/Common/DropdownCheckbox';
import SelectorButton from '@/components/Common/SelectorButton';
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();
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'>
<SelectorButton transparent tabIndex={-1}
title='Список фильтров'
className='h-full'
2023-12-16 19:20:26 +03:00
icon={<BiFilterAlt size='1.25rem' />}
2023-10-06 14:39:32 +03:00
text={labelLibraryFilter(value)}
onClick={strategyMenu.toggle}
2023-08-27 15:39:49 +03:00
/>
{strategyMenu.isActive ?
2023-08-27 15:39:49 +03:00
<Dropdown>
{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)}
title={describeLibraryFilter(strategy)}
2023-10-06 14:39:32 +03:00
disabled={isStrategyDisabled(strategy)}
/>);
})}
</Dropdown> : null}
2023-08-27 15:39:49 +03:00
</div>
);
}
export default PickerStrategy;