From 6d7183620ef1a61b8330deeb5cc9ed693e8cf539 Mon Sep 17 00:00:00 2001 From: Ivan <8611739+IRBorisov@users.noreply.github.com> Date: Mon, 19 Aug 2024 22:03:08 +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 'система типов в
    родоструктурной экспликации';