fix
This commit is contained in:
@@ -49,6 +49,7 @@ const PreviewStack = ({
|
|||||||
items = [],
|
items = [],
|
||||||
maxItems = MAX_PREVIEW_STACK_ITEMS,
|
maxItems = MAX_PREVIEW_STACK_ITEMS,
|
||||||
emptyMessage = 'Preview unavailable',
|
emptyMessage = 'Preview unavailable',
|
||||||
|
emptyContent = null,
|
||||||
onItemActivate,
|
onItemActivate,
|
||||||
onOpenPreview,
|
onOpenPreview,
|
||||||
onZoomPreview,
|
onZoomPreview,
|
||||||
@@ -65,7 +66,11 @@ const PreviewStack = ({
|
|||||||
);
|
);
|
||||||
|
|
||||||
if (!limited.length) {
|
if (!limited.length) {
|
||||||
return <span className="meta">{emptyMessage}</span>;
|
return (
|
||||||
|
<div className="preview-stack preview-stack--empty">
|
||||||
|
{emptyContent || <span className="meta">{emptyMessage}</span>}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@@ -684,6 +689,30 @@ const DetailPanel = ({
|
|||||||
const canGoPrev = singlePreviewNavigator.canGoPrev;
|
const canGoPrev = singlePreviewNavigator.canGoPrev;
|
||||||
const canGoNext = singlePreviewNavigator.canGoNext;
|
const canGoNext = singlePreviewNavigator.canGoNext;
|
||||||
const hasPreviewImage = Boolean(singlePreviewNavigator.currentUrl);
|
const hasPreviewImage = Boolean(singlePreviewNavigator.currentUrl);
|
||||||
|
const previewMissingAsset = !singleNavigatorAsset;
|
||||||
|
const displayContentType = singleDoc.content_type || 'this file type';
|
||||||
|
const displayFilename =
|
||||||
|
singleDoc.filename || singleDoc.original_name || singleDoc.title || 'download';
|
||||||
|
const previewFallback = previewMissingAsset ? (
|
||||||
|
<div className="preview-pane__unsupported">
|
||||||
|
<div className="preview-pane__unsupported-message">
|
||||||
|
Preview not available for {displayContentType} files.
|
||||||
|
</div>
|
||||||
|
<div className="preview-pane__unsupported-filename">{displayFilename}</div>
|
||||||
|
{singleDownloadHref ? (
|
||||||
|
<a
|
||||||
|
className="button-link preview-pane__unsupported-download"
|
||||||
|
href={singleDownloadHref}
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
>
|
||||||
|
<DownloadIcon />
|
||||||
|
<span>Download</span>
|
||||||
|
</a>
|
||||||
|
) : null}
|
||||||
|
</div>
|
||||||
|
) : null;
|
||||||
|
const emptyMessage = previewMissingAsset ? 'Preview unavailable' : 'Preview loading…';
|
||||||
const interceptNavPointer = (event) => {
|
const interceptNavPointer = (event) => {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
@@ -695,7 +724,8 @@ const DetailPanel = ({
|
|||||||
<PreviewStack
|
<PreviewStack
|
||||||
items={singlePreviewItems}
|
items={singlePreviewItems}
|
||||||
maxItems={1}
|
maxItems={1}
|
||||||
emptyMessage="Preview loading…"
|
emptyMessage={emptyMessage}
|
||||||
|
emptyContent={previewFallback}
|
||||||
onItemActivate={handlePreviewActivate}
|
onItemActivate={handlePreviewActivate}
|
||||||
onOpenPreview={onOpenPreview}
|
onOpenPreview={onOpenPreview}
|
||||||
onZoomPreview={handleSingleZoom}
|
onZoomPreview={handleSingleZoom}
|
||||||
|
|||||||
@@ -2910,6 +2910,12 @@ button.danger:hover:not([disabled]) {
|
|||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.preview-stack--empty {
|
||||||
|
width: 100%;
|
||||||
|
min-height: 420px;
|
||||||
|
flex-shrink: 0;
|
||||||
|
}
|
||||||
|
|
||||||
.preview-stack__item {
|
.preview-stack__item {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 50%;
|
top: 50%;
|
||||||
@@ -2963,6 +2969,40 @@ button.danger:hover:not([disabled]) {
|
|||||||
0 6px 18px var(--accent-elevated-strong);
|
0 6px 18px var(--accent-elevated-strong);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.preview-pane__unsupported {
|
||||||
|
width: 100%;
|
||||||
|
max-width: 320px;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 0.6rem;
|
||||||
|
align-items: center;
|
||||||
|
text-align: center;
|
||||||
|
padding: 1.5rem;
|
||||||
|
border-radius: 8px;
|
||||||
|
background: var(--surface-subtle);
|
||||||
|
color: var(--fg);
|
||||||
|
}
|
||||||
|
|
||||||
|
.preview-pane__unsupported-message {
|
||||||
|
font-size: 0.95rem;
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
|
||||||
|
.preview-pane__unsupported-filename {
|
||||||
|
font-size: 0.85rem;
|
||||||
|
color: var(--muted);
|
||||||
|
word-break: break-word;
|
||||||
|
}
|
||||||
|
|
||||||
|
.preview-pane__unsupported-download {
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
.preview-pane__unsupported-download svg {
|
||||||
|
width: 1rem;
|
||||||
|
height: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
.preview-pane--stack {
|
.preview-pane--stack {
|
||||||
min-height: 460px;
|
min-height: 460px;
|
||||||
position: relative;
|
position: relative;
|
||||||
|
|||||||
Reference in New Issue
Block a user