- {controller.isContentEditable || (controller.isMutable && controller.isProcessing) ? (
+ {controller.isContentEditable ? (
) : null}
- {controller.isContentEditable || (controller.isMutable && controller.isProcessing) ? (
-
- ) : null}
+ {controller.isContentEditable ?
: null}
}
- disabled={!controller.isMutable || nothingSelected}
+ disabled={controller.isProcessing || nothingSelected}
onClick={controller.moveUp}
/>
}
- disabled={!controller.isMutable || nothingSelected}
+ disabled={controller.isProcessing || nothingSelected}
onClick={controller.moveDown}
/>
}
- disabled={!controller.isMutable || selectedCount !== 1}
+ disabled={controller.isProcessing || selectedCount !== 1}
onClick={controller.cloneCst}
/>
}
- disabled={!controller.isMutable}
+ disabled={controller.isProcessing}
onClick={() => controller.createCst(undefined, false)}
/>
@@ -57,7 +57,7 @@ function RSListToolbar({ selectedCount }: RSListToolbarProps) {
title='Добавить пустую конституенту'
hideTitle={insertMenu.isOpen}
icon={}
- disabled={!controller.isMutable}
+ disabled={controller.isProcessing}
onClick={insertMenu.toggle}
/>
@@ -74,7 +74,7 @@ function RSListToolbar({ selectedCount }: RSListToolbarProps) {
}
- disabled={!controller.isMutable || nothingSelected}
+ disabled={controller.isProcessing || nothingSelected}
onClick={controller.deleteCst}
/>
diff --git a/rsconcept/frontend/src/pages/RSFormPage/EditorTermGraph/EditorTermGraph.tsx b/rsconcept/frontend/src/pages/RSFormPage/EditorTermGraph/EditorTermGraph.tsx
index 8759a1bc..9bb4a9ed 100644
--- a/rsconcept/frontend/src/pages/RSFormPage/EditorTermGraph/EditorTermGraph.tsx
+++ b/rsconcept/frontend/src/pages/RSFormPage/EditorTermGraph/EditorTermGraph.tsx
@@ -169,7 +169,7 @@ function EditorTermGraph({ selected, setSelected, onOpenEdit }: EditorTermGraphP
function handleKeyDown(event: React.KeyboardEvent) {
// Hotkeys implementation
- if (!controller.isMutable) {
+ if (!controller.isContentEditable || controller.isProcessing) {
return;
}
if (event.key === 'Delete') {
diff --git a/rsconcept/frontend/src/pages/RSFormPage/EditorTermGraph/GraphToolbar.tsx b/rsconcept/frontend/src/pages/RSFormPage/EditorTermGraph/GraphToolbar.tsx
index fbd8b6c9..48c74cf3 100644
--- a/rsconcept/frontend/src/pages/RSFormPage/EditorTermGraph/GraphToolbar.tsx
+++ b/rsconcept/frontend/src/pages/RSFormPage/EditorTermGraph/GraphToolbar.tsx
@@ -68,19 +68,19 @@ function GraphToolbar({
disabled={!is3D}
onClick={toggleOrbit}
/>
- {controller.isMutable || controller.isProcessing ? (
+ {controller.isContentEditable ? (
}
- disabled={!controller.isMutable}
+ disabled={controller.isProcessing}
onClick={onCreate}
/>
) : null}
- {controller.isMutable || controller.isProcessing ? (
+ {controller.isContentEditable ? (
}
- disabled={nothingSelected || !controller.isMutable}
+ disabled={nothingSelected || controller.isProcessing}
onClick={onDelete}
/>
) : null}
diff --git a/rsconcept/frontend/src/pages/RSFormPage/RSEditContext.tsx b/rsconcept/frontend/src/pages/RSFormPage/RSEditContext.tsx
index bd6b1180..229c1ef7 100644
--- a/rsconcept/frontend/src/pages/RSFormPage/RSEditContext.tsx
+++ b/rsconcept/frontend/src/pages/RSFormPage/RSEditContext.tsx
@@ -114,13 +114,9 @@ export const RSEditState = ({
const isMutable = useMemo(() => {
return (
- !model.loading &&
- !model.processing &&
- mode !== UserAccessMode.READER &&
- ((model.isOwned || (mode === UserAccessMode.ADMIN && user?.is_staff)) ?? false)
+ mode !== UserAccessMode.READER && ((model.isOwned || (mode === UserAccessMode.ADMIN && user?.is_staff)) ?? false)
);
- }, [user?.is_staff, mode, model.isOwned, model.loading, model.processing]);
-
+ }, [user?.is_staff, mode, model.isOwned]);
const isContentEditable = useMemo(() => isMutable && !model.isArchive, [isMutable, model.isArchive]);
const [showUpload, setShowUpload] = useState(false);
diff --git a/rsconcept/frontend/src/pages/RSFormPage/RSTabsMenu.tsx b/rsconcept/frontend/src/pages/RSFormPage/RSTabsMenu.tsx
index ed502aba..8b7fd60d 100644
--- a/rsconcept/frontend/src/pages/RSFormPage/RSTabsMenu.tsx
+++ b/rsconcept/frontend/src/pages/RSFormPage/RSTabsMenu.tsx
@@ -138,9 +138,9 @@ function RSTabsMenu({ onDestroy }: RSTabsMenuProps) {
{user ? (
}
+ disabled={!model.isClaimable && !model.isOwned}
onClick={!model.isOwned && model.isClaimable ? handleClaimOwner : undefined}
/>
) : null}
@@ -151,9 +151,9 @@ function RSTabsMenu({ onDestroy }: RSTabsMenuProps) {
/>
{user ? (
}
+ disabled={model.isArchive}
onClick={handleClone}
/>
) : null}
@@ -162,11 +162,11 @@ function RSTabsMenu({ onDestroy }: RSTabsMenuProps) {
icon={}
onClick={handleDownload}
/>
- {user ? (
+ {controller.isContentEditable ? (
}
+ disabled={controller.isProcessing}
onClick={handleUpload}
/>
) : null}
@@ -174,6 +174,7 @@ function RSTabsMenu({ onDestroy }: RSTabsMenuProps) {
}
+ disabled={controller.isProcessing}
onClick={handleDelete}
/>
) : null}
@@ -208,40 +209,40 @@ function RSTabsMenu({ onDestroy }: RSTabsMenuProps) {
/>
}
+ disabled={!controller.isContentEditable || controller.isProcessing}
onClick={handleTemplates}
/>
}
+ disabled={!controller.isContentEditable || controller.isProcessing}
onClick={handleInlineSynthesis}
/>
}
+ disabled={!controller.isContentEditable || controller.isProcessing}
onClick={handleReindex}
/>
}
+ disabled={!controller.isContentEditable || !controller.canProduceStructure}
onClick={handleProduceStructure}
/>
}
onClick={handleSubstituteCst}
+ disabled={!controller.isContentEditable || controller.isProcessing}
/>
@@ -289,17 +290,17 @@ function RSTabsMenu({ onDestroy }: RSTabsMenuProps) {
onClick={() => handleChangeMode(UserAccessMode.READER)}
/>
}
+ disabled={!model.isOwned}
onClick={() => handleChangeMode(UserAccessMode.OWNER)}
/>
}
+ disabled={!user?.is_staff}
onClick={() => handleChangeMode(UserAccessMode.ADMIN)}
/>