diff --git a/rsconcept/frontend/src/pages/RSFormPage/EditorTermGraph.tsx b/rsconcept/frontend/src/pages/RSFormPage/EditorTermGraph.tsx
index 5c34b2b4..dc64f2a7 100644
--- a/rsconcept/frontend/src/pages/RSFormPage/EditorTermGraph.tsx
+++ b/rsconcept/frontend/src/pages/RSFormPage/EditorTermGraph.tsx
@@ -212,6 +212,11 @@ function EditorTermGraph({ onOpenEdit }: EditorTermGraphProps) {
focusOnSelect: false
});
+ const allSelected: string[] = useMemo(
+ () => {
+ return [ ... selectedDismissed.map(id => String(id)), ... selections];
+ }, [selectedDismissed, selections]);
+
const handleRecreate = useCallback(
() => {
graphRef.current?.resetControls();
@@ -239,6 +244,12 @@ function EditorTermGraph({ onOpenEdit }: EditorTermGraphProps) {
if (onNodeClick) onNodeClick(node);
}, [onNodeClick, selections, onOpenEdit]);
+ const handleCanvasClick = useCallback(
+ (event: MouseEvent) => {
+ setSelectedDismissed([]);
+ if (onCanvasClick) onCanvasClick(event);
+ }, [onCanvasClick]);
+
function getOptions() {
return {
noHermits: noHermits,
@@ -301,7 +312,7 @@ function EditorTermGraph({ onOpenEdit }: EditorTermGraphProps) {
initial={getOptions()}
onConfirm={handleChangeOptions}
/>}
-
+
{hoverCst &&
}
+
+
+ Выбраны
+
+ {allSelected.length} из {schema?.stats?.count_all ?? 0}
+
+
+
+
+
}
@@ -421,7 +442,7 @@ function EditorTermGraph({ onOpenEdit }: EditorTermGraphProps) {
selections={selections}
actives={actives}
onNodeClick={handleNodeClick}
- onCanvasClick={onCanvasClick}
+ onCanvasClick={handleCanvasClick}
onNodePointerOver={handleHoverIn}
onNodePointerOut={handleHoverOut}
cameraMode={ orbit ? 'orbit' : is3D ? 'rotate' : 'pan'}
diff --git a/rsconcept/frontend/src/pages/RSFormPage/RSTabs.tsx b/rsconcept/frontend/src/pages/RSFormPage/RSTabs.tsx
index 58ddc7c6..a6acdf50 100644
--- a/rsconcept/frontend/src/pages/RSFormPage/RSTabs.tsx
+++ b/rsconcept/frontend/src/pages/RSFormPage/RSTabs.tsx
@@ -223,7 +223,7 @@ function RSTabs() {
defaultFocus={true}
selectedTabClassName='font-bold'
>
-
+
setShowClone(true)}
diff --git a/rsconcept/frontend/src/pages/RSFormPage/elements/StatusBar.tsx b/rsconcept/frontend/src/pages/RSFormPage/elements/StatusBar.tsx
index 6769fc69..f2b49c72 100644
--- a/rsconcept/frontend/src/pages/RSFormPage/elements/StatusBar.tsx
+++ b/rsconcept/frontend/src/pages/RSFormPage/elements/StatusBar.tsx
@@ -24,7 +24,7 @@ function StatusBar({ isModified, constituenta, parseData }: StatusBarProps) {
const data = mapStatusInfo.get(status)!;
return (
+ className={`text-sm h-[1.6rem] w-[10rem] font-semibold inline-flex border items-center select-none justify-center align-middle ${data.color}`}>
Статус: [ {data.text} ]
)
diff --git a/rsconcept/frontend/src/pages/RSFormPage/elements/ViewSideConstituents.tsx b/rsconcept/frontend/src/pages/RSFormPage/elements/ViewSideConstituents.tsx
index 00e5727c..5c215574 100644
--- a/rsconcept/frontend/src/pages/RSFormPage/elements/ViewSideConstituents.tsx
+++ b/rsconcept/frontend/src/pages/RSFormPage/elements/ViewSideConstituents.tsx
@@ -158,7 +158,7 @@ function ViewSideConstituents({ expression, baseHeight, activeID, onOpenEdit }:
onChange={setFilterMatch}
/>
setFilterText(event.target.value)}