diff --git a/plugins/controlled-documents-resources/src/components/document/popups/ChangeCategoryPopup.svelte b/plugins/controlled-documents-resources/src/components/document/popups/ChangeCategoryPopup.svelte
new file mode 100644
index 0000000000..f8037f9467
--- /dev/null
+++ b/plugins/controlled-documents-resources/src/components/document/popups/ChangeCategoryPopup.svelte
@@ -0,0 +1,48 @@
+
+
+
+
+{#if object}
+ ({ id: cat._id, label: cat.title }))}
+ selected={object.category}
+ on:close={(e) => handleSubmit(e.detail)}
+ />
+{/if}
diff --git a/plugins/controlled-documents-resources/src/components/document/presenters/CategoryPresenter.svelte b/plugins/controlled-documents-resources/src/components/document/presenters/CategoryPresenter.svelte
index d5888a2512..920f17d156 100644
--- a/plugins/controlled-documents-resources/src/components/document/presenters/CategoryPresenter.svelte
+++ b/plugins/controlled-documents-resources/src/components/document/presenters/CategoryPresenter.svelte
@@ -5,21 +5,41 @@
import { getClient } from '@hcengineering/presentation'
import { Label } from '@hcengineering/ui'
import view from '@hcengineering/view'
+ import { createEventDispatcher } from 'svelte'
export let value: Ref | undefined
+ export let editable: boolean = false
let category: DocumentCategory | undefined = undefined
const client = getClient()
+ const dispatch = createEventDispatcher()
+
$: if (value) {
client.findOne(documents.class.DocumentCategory, { _id: value }).then((result) => {
category = result
})
}
+
+ function handleClick (event: MouseEvent): void {
+ if (!editable) {
+ return
+ }
+
+ dispatch('edit', event)
+ }
{#if category}
- {category.title}
+
+ {category.title}
+
{:else}
{/if}
diff --git a/plugins/controlled-documents-resources/src/components/document/right-panel/DocumentInfoTab.svelte b/plugins/controlled-documents-resources/src/components/document/right-panel/DocumentInfoTab.svelte
index 4c03c9714d..c0bbc67e82 100644
--- a/plugins/controlled-documents-resources/src/components/document/right-panel/DocumentInfoTab.svelte
+++ b/plugins/controlled-documents-resources/src/components/document/right-panel/DocumentInfoTab.svelte
@@ -22,6 +22,7 @@
import documentsRes from '../../../plugin'
import {
+ $documentAllVersionsDescSorted as documentAllVersions,
$controlledDocument as controlledDocument,
$isEditable as isEditable,
$projectRef as projectRef
@@ -41,6 +42,7 @@
import AbstractEditor from '../editors/AbstractEditor.svelte'
import DocumentFlatHierarchy from './info/DocumentFlatHierarchy.svelte'
import DocumentPrefixPresenter from '../presenters/DocumentPrefixPresenter.svelte'
+ import ChangeCategoryPopup from '../popups/ChangeCategoryPopup.svelte'
const client = getClient()
const hierarchy = client.getHierarchy()
@@ -58,9 +60,20 @@
)
}
- $: isDocCodeEditable =
- $isEditable && $controlledDocument != null && $controlledDocument.major === 0 && $controlledDocument.minor === 0
- $: isDocPrefixEditable = isDocCodeEditable
+ function handleCategoryEdit (event: MouseEvent): void {
+ event?.preventDefault()
+ event?.stopPropagation()
+
+ showPopup(
+ ChangeCategoryPopup,
+ {
+ object: $controlledDocument
+ },
+ eventToHTMLElement(event)
+ )
+ }
+
+ $: isEditableDraft = $isEditable && $controlledDocument != null && $documentAllVersions.length === 1
$: isTemplate =
$controlledDocument != null && hierarchy.hasMixin($controlledDocument, documents.mixin.DocumentTemplate)
@@ -81,7 +94,7 @@
value={$controlledDocument}
isRegular
disableLink
- editable={isDocCodeEditable}
+ editable={isEditableDraft}
on:edit={(e) => {
handleCodeEdit(e.detail)
}}
@@ -89,7 +102,13 @@
-
+ {
+ handleCategoryEdit(e.detail)
+ }}
+ />
{#if !isTemplate}
@@ -100,7 +119,7 @@
{#if isTemplate}
-
+
{/if}