{{ selectedDocument.title }}
-- {{ formatDocumentScope(selectedDocument.scope) }} · {{ selectedDocument.owner }} -
-{{ selectedDocument.summary }}
-From 2b72d42956df801a910f7dba4b90887899f2de39 Mon Sep 17 00:00:00 2001
From: Ruslan Bakiev <572431+veikab@users.noreply.github.com>
Date: Mon, 23 Feb 2026 11:22:05 +0700
Subject: [PATCH] refactor(frontend): split documents and review into workspace
components
---
.../components/workspace/CrmWorkspaceApp.vue | 227 ++++--------------
.../workspace/documents/CrmDocumentsPanel.vue | 133 ++++++++++
.../review/CrmChangeReviewOverlay.vue | 137 +++++++++++
3 files changed, 315 insertions(+), 182 deletions(-)
create mode 100644 frontend/app/components/workspace/documents/CrmDocumentsPanel.vue
create mode 100644 frontend/app/components/workspace/review/CrmChangeReviewOverlay.vue
diff --git a/frontend/app/components/workspace/CrmWorkspaceApp.vue b/frontend/app/components/workspace/CrmWorkspaceApp.vue
index 7ffdaf9..3c38d5b 100644
--- a/frontend/app/components/workspace/CrmWorkspaceApp.vue
+++ b/frontend/app/components/workspace/CrmWorkspaceApp.vue
@@ -2,7 +2,9 @@
import { nextTick, onBeforeUnmount, onMounted } from "vue";
import CrmAuthLoading from "~~/app/components/workspace/auth/CrmAuthLoading.vue";
import CrmAuthLoginForm from "~~/app/components/workspace/auth/CrmAuthLoginForm.vue";
+import CrmDocumentsPanel from "~~/app/components/workspace/documents/CrmDocumentsPanel.vue";
import CrmWorkspaceTopbar from "~~/app/components/workspace/header/CrmWorkspaceTopbar.vue";
+import CrmChangeReviewOverlay from "~~/app/components/workspace/review/CrmChangeReviewOverlay.vue";
import meQuery from "~~/graphql/operations/me.graphql?raw";
import chatMessagesQuery from "~~/graphql/operations/chat-messages.graphql?raw";
import dashboardQuery from "~~/graphql/operations/dashboard.graphql?raw";
@@ -3318,6 +3320,11 @@ watchEffect(() => {
const selectedDocument = computed(() => documents.value.find((item) => item.id === selectedDocumentId.value));
+function updateSelectedDocumentBody(value: string) {
+ if (!selectedDocument.value) return;
+ selectedDocument.value.body = value;
+}
+
function openDocumentsTab(push = false) {
selectedTab.value = "documents";
focusedCalendarEventId.value = "";
@@ -6323,189 +6330,45 @@ async function decideFeedCard(card: FeedCard, decision: "accepted" | "rejected")
- {{ selectedDocument.title }}
- {{ formatDocumentScope(selectedDocument.scope) }} · {{ selectedDocument.owner }}
- {{ selectedDocument.summary }}
- Review {{ activeChangeStepNumber }}/{{ activeChangeItems.length }} -
-- {{ activeChangeItem?.title || "Change step" }} -
-- {{ describeChangeEntity(activeChangeItem.entity) }} {{ describeChangeAction(activeChangeItem.action) }} -
- -- Rollback marked: {{ selectedRollbackCount }} -
-{{ props.selectedDocument.title }}
++ {{ props.formatDocumentScope(props.selectedDocument.scope) }} · {{ props.selectedDocument.owner }} +
+{{ props.selectedDocument.summary }}
++ Review {{ props.activeChangeStepNumber }}/{{ props.activeChangeItems.length }} +
++ {{ props.activeChangeItem?.title || "Change step" }} +
++ {{ props.describeChangeEntity(props.activeChangeItem.entity) }} + {{ props.describeChangeAction(props.activeChangeItem.action) }} +
+ ++ Rollback marked: {{ props.selectedRollbackCount }} +
+