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}
+ )}