From 97a2585185703dace59585ccba89fffbf574ba6f Mon Sep 17 00:00:00 2001 From: IRBorisov <8611739+IRBorisov@users.noreply.github.com> Date: Wed, 1 Nov 2023 14:09:44 +0300 Subject: [PATCH] Decouple dialogs and pages --- .../Help}/ConstituentaTooltip.tsx | 6 +-- .../DlgEditReference}/ReferenceTypeButton.tsx | 2 +- .../DlgEditReference}/WordformButton.tsx | 0 .../index.tsx} | 36 +++++++++--------- .../frontend/src/dialogs/DlgGraphOptions.tsx | 2 +- rsconcept/frontend/src/models/miscelanious.ts | 38 +++++++++++++++++-- .../src/pages/RSFormPage/EditorTermGraph.tsx | 19 +--------- .../elements/ViewSideConstituents.tsx | 2 +- 8 files changed, 60 insertions(+), 45 deletions(-) rename rsconcept/frontend/src/{pages/RSFormPage/elements => components/Help}/ConstituentaTooltip.tsx (64%) rename rsconcept/frontend/src/{components/RefsInput => dialogs/DlgEditReference}/ReferenceTypeButton.tsx (89%) rename rsconcept/frontend/src/{components/RefsInput => dialogs/DlgEditReference}/WordformButton.tsx (100%) rename rsconcept/frontend/src/dialogs/{DlgEditReference.tsx => DlgEditReference/index.tsx} (90%) diff --git a/rsconcept/frontend/src/pages/RSFormPage/elements/ConstituentaTooltip.tsx b/rsconcept/frontend/src/components/Help/ConstituentaTooltip.tsx similarity index 64% rename from rsconcept/frontend/src/pages/RSFormPage/elements/ConstituentaTooltip.tsx rename to rsconcept/frontend/src/components/Help/ConstituentaTooltip.tsx index b2851125..f9d529ae 100644 --- a/rsconcept/frontend/src/pages/RSFormPage/elements/ConstituentaTooltip.tsx +++ b/rsconcept/frontend/src/components/Help/ConstituentaTooltip.tsx @@ -1,6 +1,6 @@ -import ConceptTooltip from '../../../components/Common/ConceptTooltip'; -import InfoConstituenta from '../../../components/Help/InfoConstituenta'; -import { IConstituenta } from '../../../models/rsform'; +import { IConstituenta } from '../../models/rsform'; +import ConceptTooltip from '../Common/ConceptTooltip'; +import InfoConstituenta from './InfoConstituenta'; interface ConstituentaTooltipProps { data: IConstituenta diff --git a/rsconcept/frontend/src/components/RefsInput/ReferenceTypeButton.tsx b/rsconcept/frontend/src/dialogs/DlgEditReference/ReferenceTypeButton.tsx similarity index 89% rename from rsconcept/frontend/src/components/RefsInput/ReferenceTypeButton.tsx rename to rsconcept/frontend/src/dialogs/DlgEditReference/ReferenceTypeButton.tsx index 3a1e9b73..e85da381 100644 --- a/rsconcept/frontend/src/components/RefsInput/ReferenceTypeButton.tsx +++ b/rsconcept/frontend/src/dialogs/DlgEditReference/ReferenceTypeButton.tsx @@ -1,6 +1,6 @@ +import SwitchButton from '../../components/Common/SwitchButton'; import { ReferenceType } from '../../models/language'; import { labelReferenceType } from '../../utils/labels'; -import SwitchButton from '../Common/SwitchButton'; interface ReferenceTypeButtonProps { type: ReferenceType diff --git a/rsconcept/frontend/src/components/RefsInput/WordformButton.tsx b/rsconcept/frontend/src/dialogs/DlgEditReference/WordformButton.tsx similarity index 100% rename from rsconcept/frontend/src/components/RefsInput/WordformButton.tsx rename to rsconcept/frontend/src/dialogs/DlgEditReference/WordformButton.tsx diff --git a/rsconcept/frontend/src/dialogs/DlgEditReference.tsx b/rsconcept/frontend/src/dialogs/DlgEditReference/index.tsx similarity index 90% rename from rsconcept/frontend/src/dialogs/DlgEditReference.tsx rename to rsconcept/frontend/src/dialogs/DlgEditReference/index.tsx index d396ffb1..43b04b33 100644 --- a/rsconcept/frontend/src/dialogs/DlgEditReference.tsx +++ b/rsconcept/frontend/src/dialogs/DlgEditReference/index.tsx @@ -1,28 +1,28 @@ import { createColumnHelper } from '@tanstack/react-table'; import { useCallback, useEffect, useLayoutEffect, useMemo, useState } from 'react'; -import ConceptTooltip from '../components/Common/ConceptTooltip'; -import Label from '../components/Common/Label'; -import Modal from '../components/Common/Modal'; -import SelectMulti from '../components/Common/SelectMulti'; -import TextInput from '../components/Common/TextInput'; -import DataTable, { IConditionalStyle } from '../components/DataTable'; -import HelpTerminologyControl from '../components/Help/HelpTerminologyControl'; -import { HelpIcon, MagnifyingGlassIcon } from '../components/Icons'; -import ReferenceTypeButton from '../components/RefsInput/ReferenceTypeButton'; -import WordformButton from '../components/RefsInput/WordformButton'; -import { useConceptTheme } from '../context/ThemeContext'; +import ConceptTooltip from '../../components/Common/ConceptTooltip'; +import Label from '../../components/Common/Label'; +import Modal from '../../components/Common/Modal'; +import SelectMulti from '../../components/Common/SelectMulti'; +import TextInput from '../../components/Common/TextInput'; +import DataTable, { IConditionalStyle } from '../../components/DataTable'; +import ConstituentaTooltip from '../../components/Help/ConstituentaTooltip'; +import HelpTerminologyControl from '../../components/Help/HelpTerminologyControl'; +import { HelpIcon, MagnifyingGlassIcon } from '../../components/Icons'; +import { useConceptTheme } from '../../context/ThemeContext'; import { getCompatibleGrams, Grammeme, parseEntityReference, parseGrammemes, parseSyntacticReference, ReferenceType -} from '../models/language'; -import { CstMatchMode } from '../models/miscelanious'; -import { IConstituenta, matchConstituenta } from '../models/rsform'; -import ConstituentaTooltip from '../pages/RSFormPage/elements/ConstituentaTooltip'; -import { colorfgCstStatus } from '../utils/color'; -import { prefixes } from '../utils/constants'; -import { compareGrammemeOptions, IGrammemeOption, PremadeWordForms, SelectorGrammems } from '../utils/selectors'; +} from '../../models/language'; +import { CstMatchMode } from '../../models/miscelanious'; +import { IConstituenta, matchConstituenta } from '../../models/rsform'; +import { colorfgCstStatus } from '../../utils/color'; +import { prefixes } from '../../utils/constants'; +import { compareGrammemeOptions, IGrammemeOption, PremadeWordForms, SelectorGrammems } from '../../utils/selectors'; +import ReferenceTypeButton from './ReferenceTypeButton'; +import WordformButton from './WordformButton'; export interface IReferenceInputState { type: ReferenceType diff --git a/rsconcept/frontend/src/dialogs/DlgGraphOptions.tsx b/rsconcept/frontend/src/dialogs/DlgGraphOptions.tsx index 026ab6c4..69abf63d 100644 --- a/rsconcept/frontend/src/dialogs/DlgGraphOptions.tsx +++ b/rsconcept/frontend/src/dialogs/DlgGraphOptions.tsx @@ -2,8 +2,8 @@ import { useLayoutEffect, useState } from 'react'; import Checkbox from '../components/Common/Checkbox'; import Modal, { ModalProps } from '../components/Common/Modal'; +import { GraphEditorParams } from '../models/miscelanious'; import { CstType } from '../models/rsform'; -import { GraphEditorParams } from '../pages/RSFormPage/EditorTermGraph'; import { labelCstType } from '../utils/labels'; interface DlgGraphOptionsProps diff --git a/rsconcept/frontend/src/models/miscelanious.ts b/rsconcept/frontend/src/models/miscelanious.ts index f2b3b769..a2d668d6 100644 --- a/rsconcept/frontend/src/models/miscelanious.ts +++ b/rsconcept/frontend/src/models/miscelanious.ts @@ -2,7 +2,9 @@ import { IConstituenta, IRSForm } from './rsform' -// Dependency mode for schema analysis +/** + * Represents graph dependency mode. +*/ export enum DependencyMode { ALL = 0, EXPRESSION, @@ -12,7 +14,9 @@ export enum DependencyMode { EXPAND_INPUTS } -// Help manual topic compare mode +/** + * Represents manuals topic. +*/ export enum HelpTopic { MAIN = 'main', LIBRARY = 'library', @@ -27,7 +31,9 @@ export enum HelpTopic { API = 'api' } -// Constituent compare mode +/** + * Represents {@link IConstituenta} matching mode. +*/ export enum CstMatchMode { ALL = 1, EXPR, @@ -36,6 +42,9 @@ export enum CstMatchMode { NAME } +/** + * Represents Library filter parameters. +*/ export interface ILibraryFilter { query?: string is_personal?: boolean @@ -45,7 +54,9 @@ export interface ILibraryFilter { is_subscribed?: boolean } -// Library premade filters +/** + * Represents filtering strategy for Library. +*/ export enum LibraryFilterStrategy { MANUAL = 'manual', PERSONAL = 'personal', @@ -55,6 +66,25 @@ export enum LibraryFilterStrategy { OWNED = 'owned' } +/** + * Represents parameters for GraphEditor. +*/ +export interface GraphEditorParams { + noHermits: boolean + noTransitive: boolean + noTemplates: boolean + noTerms: boolean + + allowBase: boolean + allowStruct: boolean + allowTerm: boolean + allowAxiom: boolean + allowFunction: boolean + allowPredicate: boolean + allowConstant: boolean + allowTheorem: boolean +} + // ================== API ==================== export function applyGraphFilter(schema: IRSForm, start: number, mode: DependencyMode): IConstituenta[] { if (mode === DependencyMode.ALL) { diff --git a/rsconcept/frontend/src/pages/RSFormPage/EditorTermGraph.tsx b/rsconcept/frontend/src/pages/RSFormPage/EditorTermGraph.tsx index 2ca8ca3a..9c3c4921 100644 --- a/rsconcept/frontend/src/pages/RSFormPage/EditorTermGraph.tsx +++ b/rsconcept/frontend/src/pages/RSFormPage/EditorTermGraph.tsx @@ -6,6 +6,7 @@ import { GraphCanvas, GraphCanvasRef, GraphEdge, import ConceptTooltip from '../../components/Common/ConceptTooltip'; import MiniButton from '../../components/Common/MiniButton'; import SelectSingle from '../../components/Common/SelectSingle'; +import ConstituentaTooltip from '../../components/Help/ConstituentaTooltip'; import HelpTermGraph from '../../components/Help/HelpTermGraph'; import InfoConstituenta from '../../components/Help/InfoConstituenta'; import { ArrowsFocusIcon, DumpBinIcon, FilterIcon, HelpIcon, LetterAIcon, LetterALinesIcon, PlanetIcon, SmallPlusIcon } from '../../components/Icons'; @@ -13,6 +14,7 @@ import { useRSForm } from '../../context/RSFormContext'; import { useConceptTheme } from '../../context/ThemeContext'; import DlgGraphOptions from '../../dialogs/DlgGraphOptions'; import useLocalStorage from '../../hooks/useLocalStorage'; +import { GraphEditorParams } from '../../models/miscelanious'; import { CstType, IConstituenta, ICstCreateData } from '../../models/rsform'; import { graphDarkT, graphLightT, IColorTheme } from '../../utils/color'; import { colorbgCstClass } from '../../utils/color'; @@ -23,7 +25,6 @@ import { mapLabelColoring } from '../../utils/labels'; import { mapLableLayout } from '../../utils/labels'; import { SelectorGraphLayout } from '../../utils/selectors'; import { SelectorGraphColoring } from '../../utils/selectors'; -import ConstituentaTooltip from './elements/ConstituentaTooltip'; export type ColoringScheme = 'none' | 'status' | 'type'; const TREE_SIZE_MILESTONE = 50; @@ -38,22 +39,6 @@ function getCstNodeColor(cst: IConstituenta, coloringScheme: ColoringScheme, col return ''; } -export interface GraphEditorParams { - noHermits: boolean - noTransitive: boolean - noTemplates: boolean - noTerms: boolean - - allowBase: boolean - allowStruct: boolean - allowTerm: boolean - allowAxiom: boolean - allowFunction: boolean - allowPredicate: boolean - allowConstant: boolean - allowTheorem: boolean -} - interface EditorTermGraphProps { onOpenEdit: (cstID: number) => void onCreateCst: (initial: ICstCreateData, skipDialog?: boolean) => void diff --git a/rsconcept/frontend/src/pages/RSFormPage/elements/ViewSideConstituents.tsx b/rsconcept/frontend/src/pages/RSFormPage/elements/ViewSideConstituents.tsx index d744767b..05b5082e 100644 --- a/rsconcept/frontend/src/pages/RSFormPage/elements/ViewSideConstituents.tsx +++ b/rsconcept/frontend/src/pages/RSFormPage/elements/ViewSideConstituents.tsx @@ -22,7 +22,7 @@ import { describeCstSource, labelCstMathchMode, labelCstSource } from '../../../utils/labels'; -import ConstituentaTooltip from './ConstituentaTooltip'; +import ConstituentaTooltip from '../../../components/Help/ConstituentaTooltip'; // Height that should be left to accomodate navigation panel + bottom margin const LOCAL_NAVIGATION_H = '2.1rem';