import { useEffect, useLayoutEffect, useMemo, useState } from 'react'; import Divider from '../../components/Common/Divider'; import MiniButton from '../../components/Common/MiniButton'; import Modal from '../../components/Common/Modal'; import SelectMulti from '../../components/Common/SelectMulti'; import TextArea from '../../components/Common/TextArea'; import DataTable, { createColumnHelper } from '../../components/DataTable'; import { CheckIcon, ChevronDoubleUpIcon, ChevronUpIcon, CrossIcon } from '../../components/Icons'; import { Grammeme, GrammemeGroups, IWordForm, NounGrams, parseGrammemes,VerbGrams } from '../../models/language'; import { IConstituenta, TermForm } from '../../models/rsform'; import { labelGrammeme } from '../../utils/labels'; import { IGrammemeOption, SelectorGrammems } from '../../utils/selectors'; interface DlgEditTermProps { hideWindow: () => void target: IConstituenta onSave: (data: TermForm[]) => void } const columnHelper = createColumnHelper(); function DlgEditTerm({ hideWindow, target, onSave }: DlgEditTermProps) { const [term, setTerm] = useState(''); const [inputText, setInputText] = useState(''); const [inputGrams, setInputGrams] = useState([]); const [options, setOptions] = useState([]); const [forms, setForms] = useState([]); function getData(): TermForm[] { const result: TermForm[] = []; forms.forEach( ({text, grams}) => result.push({ text: text, tags: grams.join(',') })); return result; } // Initialization useLayoutEffect( () => { const initForms: IWordForm[] = []; target.term_forms.forEach( term => initForms.push({ text: term.text, grams: parseGrammemes(term.tags), })); setForms(initForms); setTerm(target.term_resolved); }, [target]); // Filter grammemes when input changes useEffect( () => { let newFilter: Grammeme[] = []; inputGrams.forEach(({value: gram}) => { if (!newFilter.includes(gram)) { if (NounGrams.includes(gram)) { newFilter.push(...NounGrams); } if (VerbGrams.includes(gram)) { newFilter.push(...NounGrams); } } }); inputGrams.forEach(({value: gram}) => GrammemeGroups.forEach(group => { if (group.includes(gram)) { newFilter = newFilter.filter(item => !group.includes(item) || item === gram); } })); newFilter.push(...inputGrams.map(({value: gram}) => gram)); if (newFilter.length === 0) { newFilter = [...VerbGrams, ...NounGrams]; } newFilter = [... new Set(newFilter)]; setOptions(SelectorGrammems.filter(({value: gram}) => newFilter.includes(gram))); }, [inputGrams]); const handleSubmit = () => onSave(getData()); function handleAddForm() { setForms(forms => [ ...forms, { text: inputText, grams: inputGrams.map(item => ({ type: item.value, data: item.value as string })) } ]); } function handleResetForm() { } function handleGenerateSelected() { } function handleGenerateBasics() { } const columns = useMemo( () => [ columnHelper.accessor('text', { id: 'text', header: 'Текст', size: 350, minSize: 350, maxSize: 350 }), columnHelper.accessor('grams', { id: 'grams', header: 'Граммемы', size: 250, minSize: 250, maxSize: 250, cell: props => { return (
{ props.getValue().map( data => (<>
{labelGrammeme(data)}
{/* */} ))}
); } // cell: props => //
// {props.getValue()} //
}), // columnHelper.accessor(, { // }) ], []); return (