Portal/rsconcept/frontend/src/dialogs/DlgEditReference/SelectWordForm.tsx

41 lines
1.2 KiB
TypeScript
Raw Normal View History

2024-06-07 20:17:03 +03:00
'use client';
import { useCallback } from 'react';
import { Grammeme } from '@/models/language';
import { prefixes } from '@/utils/constants';
import { DefaultWordForms, IGrammemeOption, SelectorGrammemes } from '@/utils/selectors';
import WordformButton from './WordformButton';
interface SelectWordFormProps {
selected: IGrammemeOption[];
setSelected: React.Dispatch<React.SetStateAction<IGrammemeOption[]>>;
}
function SelectWordForm({ selected, setSelected }: SelectWordFormProps) {
const handleSelect = useCallback(
(grams: Grammeme[]) => {
setSelected(SelectorGrammemes.filter(({ value }) => grams.includes(value as Grammeme)));
},
[setSelected]
);
return (
2024-06-09 20:40:41 +03:00
<div className='text-xs sm:text-sm'>
2024-06-07 20:17:03 +03:00
{DefaultWordForms.slice(0, 12).map((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>
);
}
export default SelectWordForm;