From 72f7be32474947407ea1254866768ea24bf15d41 Mon Sep 17 00:00:00 2001 From: Ivan <8611739+IRBorisov@users.noreply.github.com> Date: Fri, 25 Jul 2025 16:02:43 +0300 Subject: [PATCH] F: Improve graph filtering for CstList --- rsconcept/frontend/src/components/icons.tsx | 1 + .../features/help/items/ui/help-rseditor.tsx | 8 ++-- .../dlg-show-term-graph/tg-readonly-flow.tsx | 4 +- .../components/icon-dependency-mode.tsx | 4 +- .../term-graph/toolbar-focused-cst.tsx | 6 +-- .../view-constituents/select-graph-filter.tsx | 37 +++++++++---------- .../view-constituents/select-match-mode.tsx | 37 +++++++++---------- .../frontend/src/features/rsform/labels.ts | 18 ++++----- .../editor-constituenta.tsx | 2 +- .../rsform-page/editor-term-graph/tg-flow.tsx | 10 +++-- 10 files changed, 65 insertions(+), 62 deletions(-) diff --git a/rsconcept/frontend/src/components/icons.tsx b/rsconcept/frontend/src/components/icons.tsx index 8d7a2d2a..f242cc80 100644 --- a/rsconcept/frontend/src/components/icons.tsx +++ b/rsconcept/frontend/src/components/icons.tsx @@ -106,6 +106,7 @@ export { LuDatabase as IconDatabase } from 'react-icons/lu'; export { LuView as IconDBStructure } from 'react-icons/lu'; export { LuPlaneTakeoff as IconRESTapi } from 'react-icons/lu'; export { LuImage as IconImage } from 'react-icons/lu'; +export { PiFediverseLogo as IconGraphSelection } from 'react-icons/pi'; export { GoVersions as IconVersions } from 'react-icons/go'; export { LuAtSign as IconTerm } from 'react-icons/lu'; export { LuSubscript as IconAlias } from 'react-icons/lu'; diff --git a/rsconcept/frontend/src/features/help/items/ui/help-rseditor.tsx b/rsconcept/frontend/src/features/help/items/ui/help-rseditor.tsx index 5347a348..f142f02c 100644 --- a/rsconcept/frontend/src/features/help/items/ui/help-rseditor.tsx +++ b/rsconcept/frontend/src/features/help/items/ui/help-rseditor.tsx @@ -4,6 +4,7 @@ import { IconDestroy, IconEdit, IconFilter, + IconGraphSelection, IconKeyboard, IconLeftOpen, IconMoveDown, @@ -13,7 +14,6 @@ import { IconPredecessor, IconReset, IconSave, - IconSettings, IconStatusOK, IconTree, IconTypeGraph @@ -66,8 +66,10 @@ export function HelpRSEditor() { Alt + вверх/вниз
  • - - фильтрация по графу термов + фильтрация по атрибутам +
  • +
  • + фильтрация по графу термов
  • отображение наследованных diff --git a/rsconcept/frontend/src/features/oss/dialogs/dlg-show-term-graph/tg-readonly-flow.tsx b/rsconcept/frontend/src/features/oss/dialogs/dlg-show-term-graph/tg-readonly-flow.tsx index 7bc7c9a9..9b858922 100644 --- a/rsconcept/frontend/src/features/oss/dialogs/dlg-show-term-graph/tg-readonly-flow.tsx +++ b/rsconcept/frontend/src/features/oss/dialogs/dlg-show-term-graph/tg-readonly-flow.tsx @@ -97,7 +97,9 @@ export function TGReadonlyFlow({ schema }: TGReadonlyFlowProps) {
    - setFocusCst(null)} /> + {focusCst ? ( + setFocusCst(null)} /> + ) : null}
    diff --git a/rsconcept/frontend/src/features/rsform/components/icon-dependency-mode.tsx b/rsconcept/frontend/src/features/rsform/components/icon-dependency-mode.tsx index d6417c3a..85095af9 100644 --- a/rsconcept/frontend/src/features/rsform/components/icon-dependency-mode.tsx +++ b/rsconcept/frontend/src/features/rsform/components/icon-dependency-mode.tsx @@ -4,7 +4,7 @@ import { IconGraphExpand, IconGraphInputs, IconGraphOutputs, - IconSettings + IconGraphSelection } from '@/components/icons'; import { DependencyMode } from '../stores/cst-search'; @@ -13,7 +13,7 @@ import { DependencyMode } from '../stores/cst-search'; export function IconDependencyMode({ value, size = '1.25rem', className }: DomIconProps) { switch (value) { case DependencyMode.ALL: - return ; + return ; case DependencyMode.OUTPUTS: return ; case DependencyMode.INPUTS: diff --git a/rsconcept/frontend/src/features/rsform/components/term-graph/toolbar-focused-cst.tsx b/rsconcept/frontend/src/features/rsform/components/term-graph/toolbar-focused-cst.tsx index 94d94ed0..dfd938d8 100644 --- a/rsconcept/frontend/src/features/rsform/components/term-graph/toolbar-focused-cst.tsx +++ b/rsconcept/frontend/src/features/rsform/components/term-graph/toolbar-focused-cst.tsx @@ -8,7 +8,7 @@ import { useTermGraphStore } from '../../stores/term-graph'; interface ToolbarFocusedCstProps { className?: string; - focus: IConstituenta | null; + focus: IConstituenta; resetFocus: () => void; } @@ -17,10 +17,6 @@ export function ToolbarFocusedCst({ focus, resetFocus, className }: ToolbarFocus const toggleFocusInputs = useTermGraphStore(state => state.toggleFocusInputs); const toggleFocusOutputs = useTermGraphStore(state => state.toggleFocusOutputs); - if (!focus) { - return null; - } - return (
    diff --git a/rsconcept/frontend/src/features/rsform/components/view-constituents/select-graph-filter.tsx b/rsconcept/frontend/src/features/rsform/components/view-constituents/select-graph-filter.tsx index 75b126b7..ad577a35 100644 --- a/rsconcept/frontend/src/features/rsform/components/view-constituents/select-graph-filter.tsx +++ b/rsconcept/frontend/src/features/rsform/components/view-constituents/select-graph-filter.tsx @@ -36,25 +36,24 @@ export function SelectGraphFilter({ value, dense, className, onChange, ...restPr onClick={menu.toggle} /> - {Object.values(DependencyMode) - .filter(value => !isNaN(Number(value))) - .map((value, index) => { - const source = value as DependencyMode; - return ( - } - onClick={() => handleChange(source)} - > - {!dense ? ( - - {labelCstSource(source)}: {describeCstSource(source)} - - ) : null} - - ); - })} + {Object.values(DependencyMode).map((value, index) => { + const source = value as DependencyMode; + return ( + } + onClick={() => handleChange(source)} + > + {!dense ? ( + + {labelCstSource(source)}: {describeCstSource(source)} + + ) : null} + + ); + })}
    ); diff --git a/rsconcept/frontend/src/features/rsform/components/view-constituents/select-match-mode.tsx b/rsconcept/frontend/src/features/rsform/components/view-constituents/select-match-mode.tsx index 136f2332..b106cafa 100644 --- a/rsconcept/frontend/src/features/rsform/components/view-constituents/select-match-mode.tsx +++ b/rsconcept/frontend/src/features/rsform/components/view-constituents/select-match-mode.tsx @@ -35,25 +35,24 @@ export function SelectMatchMode({ value, dense, className, onChange, ...restProp onClick={menu.toggle} /> - {Object.values(CstMatchMode) - .filter(value => !isNaN(Number(value))) - .map((value, index) => { - const matchMode = value as CstMatchMode; - return ( - } - onClick={() => handleChange(matchMode)} - > - {!dense ? ( - - {labelCstMatchMode(matchMode)}: {describeCstMatchMode(matchMode)} - - ) : null} - - ); - })} + {Object.values(CstMatchMode).map((value, index) => { + const matchMode = value as CstMatchMode; + return ( + } + onClick={() => handleChange(matchMode)} + > + {!dense ? ( + + {labelCstMatchMode(matchMode)}: {describeCstMatchMode(matchMode)} + + ) : null} + + ); + })}
    ); diff --git a/rsconcept/frontend/src/features/rsform/labels.ts b/rsconcept/frontend/src/features/rsform/labels.ts index 362c81eb..e79f44a2 100644 --- a/rsconcept/frontend/src/features/rsform/labels.ts +++ b/rsconcept/frontend/src/features/rsform/labels.ts @@ -55,7 +55,7 @@ const labelColoringRecord: Record = { }; const labelCstMatchModeRecord: Record = { - [CstMatchMode.ALL]: 'общий', + [CstMatchMode.ALL]: 'фильтр', [CstMatchMode.EXPR]: 'выражение', [CstMatchMode.TERM]: 'термин', [CstMatchMode.TEXT]: 'текст', @@ -70,6 +70,14 @@ const describeCstMatchModeRecord: Record = { [CstMatchMode.NAME]: 'только имена' }; +const labelCstSourceRecord: Record = { + [DependencyMode.ALL]: 'граф', + [DependencyMode.OUTPUTS]: 'потребители', + [DependencyMode.INPUTS]: 'поставщики', + [DependencyMode.EXPAND_OUTPUTS]: 'зависимые', + [DependencyMode.EXPAND_INPUTS]: 'влияющие' +}; + const describeCstSourceRecord: Record = { [DependencyMode.ALL]: 'все конституенты', [DependencyMode.OUTPUTS]: 'прямые исходящие', @@ -256,14 +264,6 @@ const describeTokenRecord: Partial> = { [TokenID.ITERATE]: prepareTooltip('Перебор элементов множества', 'Alt + 6') }; -const labelCstSourceRecord: Record = { - [DependencyMode.ALL]: 'не ограничен', - [DependencyMode.OUTPUTS]: 'потребители', - [DependencyMode.INPUTS]: 'поставщики', - [DependencyMode.EXPAND_OUTPUTS]: 'зависимые', - [DependencyMode.EXPAND_INPUTS]: 'влияющие' -}; - /** * Generates description for {@link IConstituenta}. */ diff --git a/rsconcept/frontend/src/features/rsform/pages/rsform-page/editor-constituenta/editor-constituenta.tsx b/rsconcept/frontend/src/features/rsform/pages/rsform-page/editor-constituenta/editor-constituenta.tsx index 9e2295e7..0d9a255d 100644 --- a/rsconcept/frontend/src/features/rsform/pages/rsform-page/editor-constituenta/editor-constituenta.tsx +++ b/rsconcept/frontend/src/features/rsform/pages/rsform-page/editor-constituenta/editor-constituenta.tsx @@ -107,7 +107,7 @@ export function EditorConstituenta() { isNarrow={isNarrow} /> -
    +
    {activeCst ? (
    - setFocus(null)} /> - {!focusCst ? ( + {focusCst ? ( + setFocus(null)} + /> + ) : ( { @@ -180,7 +184,7 @@ export function TGFlow() { value={selected} onChange={handleSetSelected} /> - ) : null} + )}