2024-06-07 20:17:03 +03:00
|
|
|
'use client';
|
|
|
|
|
2024-10-29 12:44:51 +03:00
|
|
|
import clsx from 'clsx';
|
2024-06-07 20:17:03 +03:00
|
|
|
import { useCallback } from 'react';
|
|
|
|
|
|
|
|
import { Grammeme } from '@/models/language';
|
|
|
|
import { prefixes } from '@/utils/constants';
|
|
|
|
import { DefaultWordForms, IGrammemeOption, SelectorGrammemes } from '@/utils/selectors';
|
|
|
|
|
2024-06-26 19:47:05 +03:00
|
|
|
import WordformButton from '../../dialogs/DlgEditReference/WordformButton';
|
2024-10-29 12:44:51 +03:00
|
|
|
import { CProps } from '../props';
|
2024-06-07 20:17:03 +03:00
|
|
|
|
2024-10-29 12:44:51 +03:00
|
|
|
interface SelectWordFormProps extends CProps.Styling {
|
2024-06-07 20:17:03 +03:00
|
|
|
selected: IGrammemeOption[];
|
|
|
|
setSelected: React.Dispatch<React.SetStateAction<IGrammemeOption[]>>;
|
|
|
|
}
|
|
|
|
|
2024-10-29 12:44:51 +03:00
|
|
|
function SelectWordForm({ selected, setSelected, className, ...restProps }: SelectWordFormProps) {
|
2024-06-07 20:17:03 +03:00
|
|
|
const handleSelect = useCallback(
|
|
|
|
(grams: Grammeme[]) => {
|
|
|
|
setSelected(SelectorGrammemes.filter(({ value }) => grams.includes(value as Grammeme)));
|
|
|
|
},
|
|
|
|
[setSelected]
|
|
|
|
);
|
|
|
|
|
|
|
|
return (
|
2024-10-29 12:44:51 +03:00
|
|
|
<div className={clsx('text-xs sm:text-sm', className)} {...restProps}>
|
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;
|