From e23a71a217d69f76736f9d58e44f145ea01987ba Mon Sep 17 00:00:00 2001 From: IRBorisov <8611739+IRBorisov@users.noreply.github.com> Date: Tue, 19 Sep 2023 17:55:17 +0300 Subject: [PATCH] Prepare termform UI --- .../src/components/Common/TextArea.tsx | 2 +- rsconcept/frontend/src/components/Icons.tsx | 40 ++++++ rsconcept/frontend/src/models/language.ts | 97 +++++++------- .../src/pages/RSFormPage/DlgEditTerm.tsx | 118 +++++++++++++----- rsconcept/frontend/src/utils/selectors.ts | 51 +++++++- 5 files changed, 226 insertions(+), 82 deletions(-) diff --git a/rsconcept/frontend/src/components/Common/TextArea.tsx b/rsconcept/frontend/src/components/Common/TextArea.tsx index 8c617b5b..9c0e27e1 100644 --- a/rsconcept/frontend/src/components/Common/TextArea.tsx +++ b/rsconcept/frontend/src/components/Common/TextArea.tsx @@ -4,7 +4,7 @@ import Label from './Label'; export interface TextAreaProps extends Omit, 'className' | 'title'> { - label: string + label?: string tooltip?: string dimensions?: string colorClass?: string diff --git a/rsconcept/frontend/src/components/Icons.tsx b/rsconcept/frontend/src/components/Icons.tsx index 70c8f9f7..7534ca70 100644 --- a/rsconcept/frontend/src/components/Icons.tsx +++ b/rsconcept/frontend/src/components/Icons.tsx @@ -389,3 +389,43 @@ export function CheckboxNullIcon() { ); } + +export function ChevronUpIcon(props: IconProps) { + return ( + + + + ); +} + +export function ChevronDoubleUpIcon(props: IconProps) { + return ( + + + + + ); +} + +export function CheckIcon(props: IconProps) { + return ( + + + + ); +} + +export function CrossIcon(props: IconProps) { + return ( + + + + + + ); +} diff --git a/rsconcept/frontend/src/models/language.ts b/rsconcept/frontend/src/models/language.ts index c577efce..f30a498c 100644 --- a/rsconcept/frontend/src/models/language.ts +++ b/rsconcept/frontend/src/models/language.ts @@ -1,44 +1,8 @@ // Module: Natural language model declarations. -// ====== Reference resolution ===== -export interface IRefsText { - text: string -} - -export enum ReferenceType { - ENTITY = 'entity', - SYNTACTIC = 'syntax' -} -export interface IEntityReference { - entity: string - form: string -} - -export interface ISyntacticReference { - offset: number - nominal: string -} - -export interface ITextPosition { - start: number - finish: number -} - -export interface IResolvedReference { - type: ReferenceType - data: IEntityReference | ISyntacticReference - pos_input: ITextPosition - pos_output: ITextPosition -} - -export interface IReferenceData { - input: string - output: string - refs: IResolvedReference[] -} // ====== Morphology ======== -export enum Morpheme { +export enum Grammeme { // Части речи NOUN = 'NOUN', ADJF = 'ADJF', @@ -121,18 +85,55 @@ export enum Morpheme { } export const PartOfSpeech = [ - Morpheme.NOUN, Morpheme.ADJF, Morpheme.ADJS, Morpheme.COMP, - Morpheme.VERB, Morpheme.INFN, Morpheme.PRTF, Morpheme.PRTS, - Morpheme.GRND, Morpheme.ADVB, Morpheme.NPRO, Morpheme.PRED, - Morpheme.PREP, Morpheme.CONJ, Morpheme.PRCL, Morpheme.INTJ, - Morpheme.PNCT -] + Grammeme.NOUN, Grammeme.ADJF, Grammeme.ADJS, Grammeme.COMP, + Grammeme.VERB, Grammeme.INFN, Grammeme.PRTF, Grammeme.PRTS, + Grammeme.GRND, Grammeme.ADVB, Grammeme.NPRO, Grammeme.PRED, + Grammeme.PREP, Grammeme.CONJ, Grammeme.PRCL, Grammeme.INTJ, + Grammeme.PNCT +]; export const Gender = [ - Morpheme.masc, Morpheme.femn, Morpheme.neut -] + Grammeme.masc, Grammeme.femn, Grammeme.neut +]; export const Case = [ - Morpheme.nomn, Morpheme.gent, Morpheme.datv, - Morpheme.accs, Morpheme.ablt, Morpheme.loct -] + Grammeme.nomn, Grammeme.gent, Grammeme.datv, + Grammeme.accs, Grammeme.ablt, Grammeme.loct +]; + +// ====== Reference resolution ===== +export interface IRefsText { + text: string +} + +export enum ReferenceType { + ENTITY = 'entity', + SYNTACTIC = 'syntax' +} +export interface IEntityReference { + entity: string + form: string +} + +export interface ISyntacticReference { + offset: number + nominal: string +} + +export interface ITextPosition { + start: number + finish: number +} + +export interface IResolvedReference { + type: ReferenceType + data: IEntityReference | ISyntacticReference + pos_input: ITextPosition + pos_output: ITextPosition +} + +export interface IReferenceData { + input: string + output: string + refs: IResolvedReference[] +} diff --git a/rsconcept/frontend/src/pages/RSFormPage/DlgEditTerm.tsx b/rsconcept/frontend/src/pages/RSFormPage/DlgEditTerm.tsx index 1d6b6670..05c0840d 100644 --- a/rsconcept/frontend/src/pages/RSFormPage/DlgEditTerm.tsx +++ b/rsconcept/frontend/src/pages/RSFormPage/DlgEditTerm.tsx @@ -1,12 +1,14 @@ import { useLayoutEffect, 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 TextInput from '../../components/Common/TextInput'; +import { CheckIcon, ChevronDoubleUpIcon, ChevronUpIcon, CrossIcon } from '../../components/Icons'; +import { Grammeme } from '../../models/language'; import { IConstituenta } from '../../models/rsform'; -import { SelectorGraphLayout } from '../../utils/selectors'; +import { SelectorGrammems } from '../../utils/selectors'; interface DlgEditTermProps { hideWindow: () => void @@ -17,6 +19,11 @@ interface DlgEditTermProps { function DlgEditTerm({ hideWindow, target, onSave }: DlgEditTermProps) { const [term, setTerm] = useState(''); + const [inputText, setInputText] = useState(''); + const [inputTags, setInputTags] = useState<{ value: Grammeme, label: string }[]>([]); + + + // function getData() { // return { @@ -25,45 +32,94 @@ function DlgEditTerm({ hideWindow, target, onSave }: DlgEditTermProps) { const handleSubmit = () => onSave(); // getData() + function handleAddForm() { + + } + + function handleResetForm() { + + } + + function handleGenerateSelected() { + + } + + function handleGenerateBasics() { + + } + useLayoutEffect( () => { setTerm(target.term_resolved); }, [target]); return ( - -
-