ConceptPortal-public/rsconcept/frontend/src/dialogs/DlgEditReference/SelectWordForm.tsx

35 lines
1.1 KiB
TypeScript
Raw Normal View History

'use client';
2023-12-01 22:50:43 +03:00
import { useCallback } from 'react';
import { Grammeme } from '@/models/language';
import { prefixes } from '@/utils/constants';
import { IGrammemeOption, PremadeWordForms, SelectorGrammems } from '@/utils/selectors';
2023-12-01 22:50:43 +03:00
import WordformButton from './WordformButton';
2023-12-08 19:24:08 +03:00
interface SelectWordFormProps {
2023-12-01 22:50:43 +03:00
selected: IGrammemeOption[]
setSelected: React.Dispatch<React.SetStateAction<IGrammemeOption[]>>
}
2023-12-08 19:24:08 +03:00
function SelectWordForm({ selected, setSelected }: SelectWordFormProps) {
2023-12-01 22:50:43 +03:00
const handleSelect = useCallback(
(grams: Grammeme[]) => {
setSelected(SelectorGrammems.filter(({value}) => grams.includes(value as Grammeme)));
}, [setSelected]);
return (
<div className='text-sm'>
{PremadeWordForms.slice(0, 12).map(
2023-12-01 22:50:43 +03:00
(data, index) =>
<WordformButton key={`${prefixes.wordform_list}${index}`}
text={data.text} example={data.example} grams={data.grams}
isSelected={data.grams.every(gram => selected.find(item => item.value as Grammeme === gram))}
onSelectGrams={handleSelect}
/>
)}
</div>);
}
2023-12-08 19:24:08 +03:00
export default SelectWordForm;