From 3f8fab80aab016fadbc4ac983696c7b9fb8db8ac Mon Sep 17 00:00:00 2001
From: Ivan <8611739+IRBorisov@users.noreply.github.com>
Date: Mon, 19 Aug 2024 22:03:39 +0300
Subject: [PATCH] F: Improve OSS UI and Manuals
---
.../frontend/src/components/ui/Tooltip.tsx | 2 +-
.../src/dialogs/DlgDeleteOperation.tsx | 12 +++
.../frontend/src/models/miscellaneous.ts | 2 +
.../src/pages/ManualsPage/TopicPage.tsx | 2 +
.../ManualsPage/items/cc/HelpConceptOSS.tsx | 28 +++---
.../items/cc/HelpConceptPropagation.tsx | 43 ++++++++++
.../ManualsPage/items/ui/HelpOssGraph.tsx | 4 +
.../ManualsPage/items/ui/HelpRSGraphTerm.tsx | 6 +-
.../OssPage/EditorOssGraph/InputNode.tsx | 56 +-----------
.../pages/OssPage/EditorOssGraph/NodeCore.tsx | 85 +++++++++++++++++++
.../OssPage/EditorOssGraph/OperationNode.tsx | 67 +--------------
rsconcept/frontend/src/utils/labels.ts | 4 +-
12 files changed, 178 insertions(+), 133 deletions(-)
create mode 100644 rsconcept/frontend/src/pages/ManualsPage/items/cc/HelpConceptPropagation.tsx
create mode 100644 rsconcept/frontend/src/pages/OssPage/EditorOssGraph/NodeCore.tsx
diff --git a/rsconcept/frontend/src/components/ui/Tooltip.tsx b/rsconcept/frontend/src/components/ui/Tooltip.tsx
index f2c3307b..0f1e8702 100644
--- a/rsconcept/frontend/src/components/ui/Tooltip.tsx
+++ b/rsconcept/frontend/src/components/ui/Tooltip.tsx
@@ -31,7 +31,7 @@ function Tooltip({
{
target: IOperation;
@@ -31,6 +35,14 @@ function DlgDeleteOperation({ hideWindow, target, onSubmit }: DlgDeleteOperation
onSubmit={handleSubmit}
className={clsx('w-[35rem]', 'pb-3 px-6 cc-column', 'select-none')}
>
+
+
+
+
([
[HelpTopic.CC_RELATIONS, HelpTopic.CONCEPTUAL],
[HelpTopic.CC_SYNTHESIS, HelpTopic.CONCEPTUAL],
[HelpTopic.CC_OSS, HelpTopic.CONCEPTUAL],
+ [HelpTopic.CC_PROPAGATION, HelpTopic.CONCEPTUAL],
[HelpTopic.RSLANG, HelpTopic.RSLANG],
[HelpTopic.RSL_TYPES, HelpTopic.RSLANG],
diff --git a/rsconcept/frontend/src/pages/ManualsPage/TopicPage.tsx b/rsconcept/frontend/src/pages/ManualsPage/TopicPage.tsx
index 9a233985..6992a1a8 100644
--- a/rsconcept/frontend/src/pages/ManualsPage/TopicPage.tsx
+++ b/rsconcept/frontend/src/pages/ManualsPage/TopicPage.tsx
@@ -2,6 +2,7 @@ import useWindowSize from '@/hooks/useWindowSize';
import { HelpTopic } from '@/models/miscellaneous';
import HelpConceptOSS from './items/cc/HelpConceptOSS';
+import HelpConceptPropagation from './items/cc/HelpConceptPropagation';
import HelpConceptRelations from './items/cc/HelpConceptRelations';
import HelpConceptSynthesis from './items/cc/HelpConceptSynthesis';
import HelpConceptSystem from './items/cc/HelpConceptSystem';
@@ -69,6 +70,7 @@ function TopicPage({ topic }: TopicPageProps) {
if (topic === HelpTopic.CC_RELATIONS) return ;
if (topic === HelpTopic.CC_SYNTHESIS) return ;
if (topic === HelpTopic.CC_OSS) return ;
+ if (topic === HelpTopic.CC_PROPAGATION) return ;
if (topic === HelpTopic.RSLANG) return ;
if (topic === HelpTopic.RSL_TYPES) return ;
diff --git a/rsconcept/frontend/src/pages/ManualsPage/items/cc/HelpConceptOSS.tsx b/rsconcept/frontend/src/pages/ManualsPage/items/cc/HelpConceptOSS.tsx
index 5ea58e4d..bbfee9aa 100644
--- a/rsconcept/frontend/src/pages/ManualsPage/items/cc/HelpConceptOSS.tsx
+++ b/rsconcept/frontend/src/pages/ManualsPage/items/cc/HelpConceptOSS.tsx
@@ -1,4 +1,4 @@
-import { IconOSS, IconPredecessor } from '@/components/Icons';
+import { IconConsolidation, IconExecute, IconOSS } from '@/components/Icons';
import LinkTopic from '@/components/ui/LinkTopic';
import { HelpTopic } from '@/models/miscellaneous';
@@ -16,22 +16,30 @@ function HelpConceptOSS() {
и отображается в форме .
- Отдельные операции в рамках ОСС задаются таблицами отождествлений понятий из синтезируемых схем. Таким
- образом в каждой КС разделяются на исходные
+ Базовыми операциями ОСС являются загрузка и синтез. Схема может быть загружена из другой локации (
+ внешняя КС) или создана в ОСС (собственная КС). Загрузка схем, полученных синтезом в других ОСС не
+ допускается. Также запрещена повторная загрузка той же КС в рамках одной ОСС.
+
+
+ Операция синтеза в рамках ОСС задаются набором операций-аргументов и таблицей отождествлений понятий из
+ КС, привязанных к выбранным аргументам. Таким образом{' '}
+ в каждой КС разделяются на исходные
(дописанные), наследованные, отождествленные (удаляемые).
- Портал поддерживает сквозные изменения в рамках ОСС. Изменения, внесенные в исходные концептуальные схемы
- автоматически проносятся через граф синтеза (путем обновления наследованных конституент). Формальные определения
- наследованных конституент можно редактировать только путем изменения{' '}
+ После задания аргументов и таблицы отождествления необходимо единожды{' '}
- исходных конституент.
+ выполнить Синтез
+ , чтобы активировать .
- Ромбовидным синтезом называется операция, где используются КС, имеющие общих предков. При таком синтезе
- могут возникать дубликаты и неоднозначности в результате. Необходимо внимательно формировать таблицу
- отождествлений, добавляя дублирующиеся понятия из синтезируемых схем.
+
+ Ромбовидным синтезом
+ {' '}
+ называется операция, где используются КС, имеющие общих предков. При таком синтезе могут возникать дубликаты и
+ неоднозначности в результате. Необходимо внимательно формировать таблицу отождествлений, добавляя дублирующиеся
+ понятия из синтезируемых схем.
);
diff --git a/rsconcept/frontend/src/pages/ManualsPage/items/cc/HelpConceptPropagation.tsx b/rsconcept/frontend/src/pages/ManualsPage/items/cc/HelpConceptPropagation.tsx
new file mode 100644
index 00000000..0a08a8d9
--- /dev/null
+++ b/rsconcept/frontend/src/pages/ManualsPage/items/cc/HelpConceptPropagation.tsx
@@ -0,0 +1,43 @@
+import { IconPredecessor } from '@/components/Icons';
+import LinkTopic from '@/components/ui/LinkTopic';
+import { HelpTopic } from '@/models/miscellaneous';
+
+function HelpConceptPropagation() {
+ return (
+
+
Сквозные изменения
+
+ Портал поддерживает сквозные изменения в рамках .
+ Изменения, внесенные в исходные концептуальные схемы автоматически проносятся через граф синтеза (путем
+ обновления наследованных конституент). Формальные определения и конвенции наследованных конституент можно
+ редактировать только путем изменения{' '}
+
+ исходных конституент.
+
+
+
+ Изменения на уровне концептуальной схемы (добавление/удаление/изменение) конституенты приводят к автоматическому
+ созданию / удаление / обновлению наследованных конституент. Если удаляемые конституенты находятся в таблице
+ отождествлений одной из операций, то такие отождествления будут автоматические отменены.
+
+
+ Удаление концептуальной схемы, привязанной к операции приводит к автоматическому удалению всех наследованных
+ конституент. В дальнейшем можно повторно выполнить как операцию загрузки, так и синтез. Однако дописанные
+ конституенты и отмененные отождествления восстановлены не будут.
+
+
+ При изменении аргументов операции синтеза в случае наличия привязанной схемы соответствующие конституенты
+ аргументов будут автоматически добавлены / удалены. Таблицы отождествлений будут соответствующим образом
+ скорректированы так, чтобы не использовать удаленные конституенты.
+
+
+ Удаление операции возможно для операций Загрузка без ограничений и для Синтеза в случае, когда операция не
+ является аргументом другой операции. При удалении операции можно выбрать опцию "удалить схему", чтобы удалить
+ концептуальную схему из базы портала. Также можно выбрать опцию "сохранить конституенты", в результате которой
+ наследованные конституенты в операциях ниже по графу станут исходными.
+
+
+ );
+}
+
+export default HelpConceptPropagation;
diff --git a/rsconcept/frontend/src/pages/ManualsPage/items/ui/HelpOssGraph.tsx b/rsconcept/frontend/src/pages/ManualsPage/items/ui/HelpOssGraph.tsx
index 277de364..3f06e0b4 100644
--- a/rsconcept/frontend/src/pages/ManualsPage/items/ui/HelpOssGraph.tsx
+++ b/rsconcept/frontend/src/pages/ManualsPage/items/ui/HelpOssGraph.tsx
@@ -42,6 +42,10 @@ function HelpOssGraph() {
Анимация
+ черта сверху - Загрузка
+
+ черта слева - КС
+
diff --git a/rsconcept/frontend/src/pages/ManualsPage/items/ui/HelpRSGraphTerm.tsx b/rsconcept/frontend/src/pages/ManualsPage/items/ui/HelpRSGraphTerm.tsx
index acf84225..dd7d2fca 100644
--- a/rsconcept/frontend/src/pages/ManualsPage/items/ui/HelpRSGraphTerm.tsx
+++ b/rsconcept/frontend/src/pages/ManualsPage/items/ui/HelpRSGraphTerm.tsx
@@ -59,10 +59,10 @@ function HelpRSGraphTerm() {
Двойной клик – редактирование
- Delete – удалить выбранные
+ Delete – удалить выбранные
- Новая со ссылками на выделенные
+ Новая со ссылками на выделенные
@@ -85,7 +85,7 @@ function HelpRSGraphTerm() {
Сохранить в формат PNG
- * в ОСС
+ * в ОСС
diff --git a/rsconcept/frontend/src/pages/OssPage/EditorOssGraph/InputNode.tsx b/rsconcept/frontend/src/pages/OssPage/EditorOssGraph/InputNode.tsx
index 7b338af1..10a385a1 100644
--- a/rsconcept/frontend/src/pages/OssPage/EditorOssGraph/InputNode.tsx
+++ b/rsconcept/frontend/src/pages/OssPage/EditorOssGraph/InputNode.tsx
@@ -1,66 +1,14 @@
import { Handle, Position } from 'reactflow';
-import { IconRSForm } from '@/components/Icons';
-import TooltipOperation from '@/components/info/TooltipOperation';
-import MiniButton from '@/components/ui/MiniButton.tsx';
-import Overlay from '@/components/ui/Overlay';
import { OssNodeInternal } from '@/models/miscellaneous';
-import { PARAMETER, prefixes } from '@/utils/constants';
-import { truncateToLastWord } from '@/utils/utils';
-import { useOssEdit } from '../OssEditContext';
+import NodeCore from './NodeCore';
function InputNode(node: OssNodeInternal) {
- const controller = useOssEdit();
-
- const hasFile = !!node.data.operation.result;
- const longLabel = node.data.label.length > PARAMETER.ossLongLabel;
- const labelText = truncateToLastWord(node.data.label, PARAMETER.ossTruncateLabel);
-
- const handleOpenSchema = () => {
- controller.openOperationSchema(Number(node.id));
- };
-
return (
<>
+
-
-
- }
- noHover
- noPadding
- title={hasFile ? 'Связанная КС' : 'Нет связанной КС'}
- hideTitle={!controller.showTooltip}
- onClick={() => {
- handleOpenSchema();
- }}
- disabled={!hasFile}
- />
-
-
- {!node.data.operation.is_owned ? (
-
-
-
- ) : null}
-
-
-
- {labelText}
-
- {controller.showTooltip && !node.dragging ? (
-
- ) : null}
-
>
);
}
diff --git a/rsconcept/frontend/src/pages/OssPage/EditorOssGraph/NodeCore.tsx b/rsconcept/frontend/src/pages/OssPage/EditorOssGraph/NodeCore.tsx
new file mode 100644
index 00000000..158e8e88
--- /dev/null
+++ b/rsconcept/frontend/src/pages/OssPage/EditorOssGraph/NodeCore.tsx
@@ -0,0 +1,85 @@
+'use client';
+
+import { IconConsolidation, IconRSForm } from '@/components/Icons';
+import TooltipOperation from '@/components/info/TooltipOperation';
+import MiniButton from '@/components/ui/MiniButton.tsx';
+import Overlay from '@/components/ui/Overlay';
+import { OssNodeInternal } from '@/models/miscellaneous';
+import { OperationType } from '@/models/oss';
+import { PARAMETER, prefixes } from '@/utils/constants';
+import { truncateToLastWord } from '@/utils/utils';
+
+import { useOssEdit } from '../OssEditContext';
+
+interface NodeCoreProps {
+ node: OssNodeInternal;
+}
+
+function NodeCore({ node }: NodeCoreProps) {
+ const controller = useOssEdit();
+
+ const hasFile = !!node.data.operation.result;
+ const longLabel = node.data.label.length > PARAMETER.ossLongLabel;
+ const labelText = truncateToLastWord(node.data.label, PARAMETER.ossTruncateLabel);
+
+ const handleOpenSchema = () => {
+ controller.openOperationSchema(Number(node.id));
+ };
+
+ return (
+ <>
+
+ }
+ noHover
+ noPadding
+ title={hasFile ? 'Связанная КС' : 'Нет связанной КС'}
+ hideTitle={!controller.showTooltip}
+ onClick={handleOpenSchema}
+ disabled={!hasFile}
+ />
+ {node.data.operation.is_consolidation ? (
+ }
+ disabled
+ noPadding
+ noHover
+ titleHtml='Внимание!
Ромбовидный синтезВозможны дубликаты конституент'
+ hideTitle={!controller.showTooltip}
+ />
+ ) : null}
+
+
+ {node.data.operation.operation_type === OperationType.INPUT ? (
+
+
+
+ ) : null}
+
+ {!node.data.operation.is_owned ? (
+
+
+
+ ) : null}
+
+
+
+ {labelText}
+
+ {controller.showTooltip && !node.dragging ? (
+
+ ) : null}
+
+ >
+ );
+}
+
+export default NodeCore;
diff --git a/rsconcept/frontend/src/pages/OssPage/EditorOssGraph/OperationNode.tsx b/rsconcept/frontend/src/pages/OssPage/EditorOssGraph/OperationNode.tsx
index ce6272c2..02874cb0 100644
--- a/rsconcept/frontend/src/pages/OssPage/EditorOssGraph/OperationNode.tsx
+++ b/rsconcept/frontend/src/pages/OssPage/EditorOssGraph/OperationNode.tsx
@@ -2,78 +2,17 @@
import { Handle, Position } from 'reactflow';
-import { IconConsolidation, IconRSForm } from '@/components/Icons';
-import TooltipOperation from '@/components/info/TooltipOperation';
-import MiniButton from '@/components/ui/MiniButton.tsx';
-import Overlay from '@/components/ui/Overlay';
import { OssNodeInternal } from '@/models/miscellaneous';
-import { PARAMETER, prefixes } from '@/utils/constants';
-import { truncateToLastWord } from '@/utils/utils';
-import { useOssEdit } from '../OssEditContext';
+import NodeCore from './NodeCore';
function OperationNode(node: OssNodeInternal) {
- const controller = useOssEdit();
-
- const hasFile = !!node.data.operation.result;
- const longLabel = node.data.label.length > PARAMETER.ossLongLabel;
- const labelText = truncateToLastWord(node.data.label, PARAMETER.ossTruncateLabel);
-
- const handleOpenSchema = () => {
- controller.openOperationSchema(Number(node.id));
- };
-
return (
<>
-
-
-
- }
- noHover
- noPadding
- title={hasFile ? 'Связанная КС' : 'Нет связанной КС'}
- hideTitle={!controller.showTooltip}
- onClick={handleOpenSchema}
- disabled={!hasFile}
- />
- {node.data.operation.is_consolidation ? (
- }
- disabled
- noPadding
- noHover
- titleHtml='Внимание!
Ромбовидный синтезВозможны дубликаты конституент'
- hideTitle={!controller.showTooltip}
- />
- ) : null}
-
-
- {!node.data.operation.is_owned ? (
-
-
-
- ) : null}
-
-
-
- {labelText}
-
- {controller.showTooltip && !node.dragging ? (
-
- ) : null}
-
-
+
+
>
);
}
diff --git a/rsconcept/frontend/src/utils/labels.ts b/rsconcept/frontend/src/utils/labels.ts
index be208496..9acfa77a 100644
--- a/rsconcept/frontend/src/utils/labels.ts
+++ b/rsconcept/frontend/src/utils/labels.ts
@@ -383,6 +383,7 @@ export function labelHelpTopic(topic: HelpTopic): string {
case HelpTopic.CC_RELATIONS: return 'Связи понятий';
case HelpTopic.CC_SYNTHESIS: return 'Синтез схем';
case HelpTopic.CC_OSS: return 'Операционная схема';
+ case HelpTopic.CC_PROPAGATION: return 'Сквозные изменения';
case HelpTopic.RSLANG: return 'Экспликация';
case HelpTopic.RSL_TYPES: return 'Типизация';
@@ -430,7 +431,8 @@ export function describeHelpTopic(topic: HelpTopic): string {
case HelpTopic.CC_CONSTITUENTA: return 'понятия конституенты и ее атрибутов';
case HelpTopic.CC_RELATIONS: return 'отношения между конституентами';
case HelpTopic.CC_SYNTHESIS: return 'операция синтеза концептуальных схем';
- case HelpTopic.CC_OSS: return 'операционная схема синтеза
и протаскивание изменений';
+ case HelpTopic.CC_OSS: return 'операционная схема синтеза';
+ case HelpTopic.CC_PROPAGATION: return 'протаскивание изменений в ОСС';
case HelpTopic.RSLANG: return 'экспликация и язык родов структур';
case HelpTopic.RSL_TYPES: return 'система типов в
родоструктурной экспликации';