feat(preview): disable previews when storage is unavailable

Signed-off-by: Sebastian Krupinski <krupinski01@gmail.com>
This commit is contained in:
2026-08-31 22:40:41 -04:00
parent c5a6461f5c
commit cf0d90ffa7
+14 -8
View File
@@ -1,7 +1,7 @@
<script setup lang="ts">
import { ref, computed, onMounted, watch, nextTick, defineAsyncComponent } from 'vue'
import { useDisplay } from 'vuetify'
import { useModuleStore, useIntegrationStore } from '@KTXC'
import { useModuleStore, useIntegrationStore, usePreviewStore } from '@KTXC'
import { useDocumentManager, useDocumentSelection, useFileUpload, useFileEditor } from '@/composables'
import type { ViewMode, SortField, SortOrder, BreadcrumbItem } from '@/types'
import { CollectionObject } from '@DocumentsManager/models/collection'
@@ -31,6 +31,8 @@ const isMobile = computed(() => display.mdAndDown.value)
const moduleStore = useModuleStore()
const integrationStore = useIntegrationStore()
const previewStore = usePreviewStore()
const previewsAvailable = computed(() => previewStore.availability.storage)
const isFileManagerAvailable = computed(() => {
return moduleStore.has('documents_manager') || moduleStore.has('DocumentsManager')
})
@@ -128,7 +130,10 @@ function entityToViewerItem(entity: EntityObject): ViewerItem {
}
}
function resolveViewerSource(item: ViewerItem): string {
function resolveViewerSource(item: ViewerItem): string | Promise<string> {
if (!previewsAvailable.value) {
return Promise.reject(new Error('Preview storage is unavailable'))
}
return documentManager.getEntityPreviewUrl(
item.id,
(item.meta?.collection as string | null) ?? null,
@@ -154,6 +159,7 @@ function resolveThumbnailSource(item: ViewerItem): string {
// Preview shown in the info panel sidebar for the current single selection
const infoPanelPreviewUrl = computed<string | null>(() => {
if (!previewsAvailable.value) return null
const items = selection.selectedNodeArray.value
if (items.length !== 1) return null
const item = items[0]
@@ -815,8 +821,8 @@ onMounted(async () => {
:collections="sortedItems.collections"
:entities="sortedItems.entities"
:selected-ids="selectedIds"
:preview-source="resolvePreviewSource"
:thumbnail-source="resolveThumbnailSource"
:preview-source="previewsAvailable ? resolvePreviewSource : undefined"
:thumbnail-source="previewsAvailable ? resolveThumbnailSource : undefined"
@item-click="handleItemClick"
@open="handleOpenItem"
@edit="handleEditItem"
@@ -832,8 +838,8 @@ onMounted(async () => {
:collections="sortedItems.collections"
:entities="sortedItems.entities"
:selected-ids="selectedIds"
:preview-source="resolvePreviewSource"
:thumbnail-source="resolveThumbnailSource"
:preview-source="previewsAvailable ? resolvePreviewSource : undefined"
:thumbnail-source="previewsAvailable ? resolveThumbnailSource : undefined"
@item-click="handleItemClick"
@open="handleOpenItem"
@edit="handleEditItem"
@@ -849,8 +855,8 @@ onMounted(async () => {
:collections="sortedItems.collections"
:entities="sortedItems.entities"
:selected-ids="selectedIds"
:preview-source="resolvePreviewSource"
:thumbnail-source="resolveThumbnailSource"
:preview-source="previewsAvailable ? resolvePreviewSource : undefined"
:thumbnail-source="previewsAvailable ? resolveThumbnailSource : undefined"
@item-click="handleItemClick"
@open="handleOpenItem"
@edit="handleEditItem"