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

72 lines
2.2 KiB
TypeScript
Raw Normal View History

2023-08-27 15:39:49 +03:00
import { useCallback } from 'react';
import Dropdown from '../../components/common/Dropdown';
import DropdownCheckbox from '../../components/common/DropdownCheckbox';
import SelectorButton from '../../components/common/SelectorButton';
2023-10-16 02:17:31 +03:00
import { FilterIcon } from '../../components/Icons';
import { useAuth } from '../../context/AuthContext';
2023-08-27 15:39:49 +03:00
import useDropdown from '../../hooks/useDropdown';
2023-09-11 20:31:54 +03:00
import { LibraryFilterStrategy } from '../../models/miscelanious';
2023-10-06 14:39:32 +03:00
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
tooltip='Список фильтров'
2023-10-06 15:09:23 +03:00
dimensions='w-fit h-full'
2023-10-06 14:39:32 +03:00
transparent
2023-10-16 02:17:31 +03:00
icon={<FilterIcon size={5} />}
2023-10-06 14:39:32 +03:00
text={labelLibraryFilter(value)}
tabIndex={-1}
onClick={strategyMenu.toggle}
2023-08-27 15:39:49 +03:00
/>
2023-10-06 14:39:32 +03:00
{ strategyMenu.isActive &&
2023-08-27 15:39:49 +03:00
<Dropdown>
2023-10-06 14:39:32 +03:00
{ Object.values(LibraryFilterStrategy).map(
(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-08-27 15:39:49 +03:00
</Dropdown>}
</div>
);
}
export default PickerStrategy;