fix
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
import { createAssetView, resolveAssetExpiresAt } from '../asset_manager';
|
||||
import { resolveAssetExpiresAt, resolveAssetUrl } from '../asset_manager';
|
||||
|
||||
export const ASSET_PRESIGN_TTL_MS = 240 * 1000; // backend issues 5 min tokens; refresh slightly early
|
||||
export const DEFAULT_FOLDER_NAME = 'Documents';
|
||||
@@ -41,15 +41,13 @@ export const hasFiles = (event) =>
|
||||
|
||||
const isAssetEquivalent = (lhs, rhs) => {
|
||||
if (!lhs || !rhs) return false;
|
||||
const lhsView = createAssetView(lhs);
|
||||
const rhsView = createAssetView(rhs);
|
||||
const lhsPrimaryMetadata = lhsView.getPrimaryMetadata() || lhs?.metadata;
|
||||
const rhsPrimaryMetadata = rhsView.getPrimaryMetadata() || rhs?.metadata;
|
||||
const lhsPrimaryMetadata = lhs?.metadata;
|
||||
const rhsPrimaryMetadata = rhs?.metadata;
|
||||
const lhsExpiresAt = resolveAssetExpiresAt(lhs);
|
||||
const rhsExpiresAt = resolveAssetExpiresAt(rhs);
|
||||
return (
|
||||
lhs.id === rhs.id
|
||||
&& lhs.url === rhs.url
|
||||
&& resolveAssetUrl(lhs) === resolveAssetUrl(rhs)
|
||||
&& lhsExpiresAt === rhsExpiresAt
|
||||
&& lhsPrimaryMetadata?.width === rhsPrimaryMetadata?.width
|
||||
&& lhsPrimaryMetadata?.height === rhsPrimaryMetadata?.height
|
||||
|
||||
@@ -1,6 +1,4 @@
|
||||
import { useEffect, useState } from 'react';
|
||||
import { createAssetView } from '../../asset_manager';
|
||||
|
||||
interface DocumentLike {
|
||||
id?: string | number;
|
||||
current_version?: unknown;
|
||||
@@ -47,8 +45,7 @@ const usePreviewMetadata = (
|
||||
const resolveAsset = (type: string) => getDocumentAsset?.(doc, type) ?? null;
|
||||
|
||||
let asset = resolveAsset('preview') || resolveAsset('thumbnail');
|
||||
let view = createAssetView(asset);
|
||||
let metadata = view.getPrimaryMetadata();
|
||||
let metadata = (asset?.metadata as { width?: number; height?: number } | null) || null;
|
||||
|
||||
const hasDimensions = (meta: { width?: number | string; height?: number | string } | null) =>
|
||||
Number.isFinite(Number(meta?.width)) &&
|
||||
@@ -58,11 +55,10 @@ const usePreviewMetadata = (
|
||||
|
||||
if (!hasDimensions(metadata) && ensureAssetUrl && docId && asset?.id) {
|
||||
try {
|
||||
const ensured = await ensureAssetUrl(doc.id, asset, { force: true });
|
||||
const ensured = await ensureAssetUrl(doc.id, asset);
|
||||
if (ensured) {
|
||||
asset = ensured;
|
||||
view = createAssetView(asset);
|
||||
metadata = view.getPrimaryMetadata();
|
||||
metadata = (asset?.metadata as { width?: number; height?: number } | null) || null;
|
||||
}
|
||||
} catch (error) {
|
||||
console.warn('[desk] ensureDocumentSize metadata fetch failed', error);
|
||||
|
||||
@@ -3,7 +3,7 @@ import type { CSSProperties, JSX, MutableRefObject } from 'react';
|
||||
import {
|
||||
getAssetFromVersion,
|
||||
resolveDocumentAssetUrl,
|
||||
createAssetView,
|
||||
resolveAssetUrl,
|
||||
} from '../asset_manager';
|
||||
import type {
|
||||
DocumentLike as AssetManagerDocumentLike,
|
||||
@@ -101,13 +101,13 @@ const DocumentThumbnailImage = ({
|
||||
() => getAssetFromVersion(document?.current_version, 'thumbnail'),
|
||||
[document?.current_version],
|
||||
);
|
||||
const thumbnailView = useMemo(() => createAssetView(thumbnailAsset), [thumbnailAsset]);
|
||||
const primaryMetadata = thumbnailView.getPrimaryMetadata() || {};
|
||||
const assetWidth = Number(primaryMetadata?.width);
|
||||
const assetHeight = Number(primaryMetadata?.height);
|
||||
const thumbnailMetadata = (thumbnailAsset?.metadata as { width?: number; height?: number } | null) || null;
|
||||
const assetWidth = thumbnailMetadata?.width;
|
||||
const assetHeight = thumbnailMetadata?.height;
|
||||
|
||||
const dimensions = useMemo(() => {
|
||||
if (!Number.isFinite(assetWidth) || assetWidth <= 0 || !Number.isFinite(assetHeight) || assetHeight <= 0) {
|
||||
const hasDimensions = typeof assetWidth === 'number' && assetWidth > 0 && typeof assetHeight === 'number' && assetHeight > 0;
|
||||
if (!hasDimensions) {
|
||||
return { width: resolvedMaxSize, height: resolvedMaxSize };
|
||||
}
|
||||
const scale = Math.min(1, resolvedMaxSize / assetWidth, resolvedMaxSize / assetHeight);
|
||||
@@ -136,8 +136,8 @@ const DocumentThumbnailImage = ({
|
||||
if (getDocumentAsset) {
|
||||
options.getAsset = getDocumentAsset;
|
||||
}
|
||||
return resolveDocumentAssetUrl(document, 'thumbnail', options);
|
||||
}, [document, ensureAssetUrl, getDocumentAsset, isVisible]);
|
||||
return resolveDocumentAssetUrl(document, 'thumbnail', options) || resolveAssetUrl(thumbnailAsset);
|
||||
}, [document, ensureAssetUrl, getDocumentAsset, isVisible, thumbnailAsset]);
|
||||
|
||||
const pageCount = getPageCount(document);
|
||||
const showMultiPageBadge = Number.isFinite(pageCount) && pageCount > 1;
|
||||
@@ -147,11 +147,11 @@ const DocumentThumbnailImage = ({
|
||||
}
|
||||
|
||||
const aspectRatio = useMemo(() => {
|
||||
if (Number.isFinite(assetWidth) && Number.isFinite(assetHeight) && assetWidth > 0 && assetHeight > 0) {
|
||||
return assetWidth / assetHeight;
|
||||
if (dimensions.width > 0 && dimensions.height > 0) {
|
||||
return dimensions.width / dimensions.height;
|
||||
}
|
||||
return null;
|
||||
}, [assetWidth, assetHeight]);
|
||||
}, [dimensions.height, dimensions.width]);
|
||||
|
||||
useEffect(() => {
|
||||
const node = visibilityRef.current;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { useEffect, useMemo, useState } from 'react';
|
||||
import { createAssetView } from '../asset_manager';
|
||||
import { resolveAssetUrl } from '../asset_manager';
|
||||
|
||||
type Identifier = string | number;
|
||||
|
||||
@@ -33,10 +33,8 @@ type EnsureAssetUrl = (
|
||||
type GetAsset = (document: DocumentLike, assetType: string) => AssetLike | null;
|
||||
|
||||
type AssetViewLike = {
|
||||
getObject: (ordinal?: number) => AssetObject | null;
|
||||
getObjects: () => AssetObject[];
|
||||
getPrimaryUrl: () => string | null;
|
||||
getPrimaryMetadata: () => Record<string, unknown> | null;
|
||||
url: string | null;
|
||||
metadata: Record<string, unknown> | null;
|
||||
};
|
||||
|
||||
interface UseAssetNavigatorOptions {
|
||||
@@ -72,13 +70,15 @@ export const useAssetNavigator = ({
|
||||
}, [document, assetType, getAsset]);
|
||||
|
||||
const view = useMemo<AssetViewLike>(
|
||||
() => createAssetView(asset) as unknown as AssetViewLike,
|
||||
() => ({
|
||||
url: resolveAssetUrl(asset),
|
||||
metadata: (asset?.metadata as Record<string, unknown> | null) || null,
|
||||
}),
|
||||
[asset],
|
||||
);
|
||||
|
||||
const currentObject = view.getObject(1) || view.getObjects()[0] || null;
|
||||
const currentUrl = currentObject?.url ?? view.getPrimaryUrl() ?? null;
|
||||
const currentMetadata = (currentObject?.metadata ?? view.getPrimaryMetadata()) || null;
|
||||
const currentUrl = view.url || null;
|
||||
const currentMetadata = view.metadata || null;
|
||||
|
||||
const [isLoading, setIsLoading] = useState(false);
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { createAssetView, resolveDocumentAssetUrl } from '../asset_manager';
|
||||
import { resolveDocumentAssetUrl, resolveAssetUrl } from '../asset_manager';
|
||||
import type {
|
||||
DocumentLike as AssetManagerDocumentLike,
|
||||
DocumentVersionLike,
|
||||
@@ -59,8 +59,8 @@ export async function resolveOcrTextUrl({
|
||||
return null;
|
||||
}
|
||||
|
||||
const baseView = createAssetView(asset);
|
||||
const hasUrl = Boolean(baseView.getPrimaryUrl());
|
||||
const baseUrl = resolveAssetUrl(asset);
|
||||
const hasUrl = Boolean(baseUrl);
|
||||
|
||||
let entry: AssetLike = asset;
|
||||
if (ensureAssetUrl) {
|
||||
@@ -71,8 +71,7 @@ export async function resolveOcrTextUrl({
|
||||
}
|
||||
}
|
||||
|
||||
const ensuredView = createAssetView(entry);
|
||||
const directUrl = ensuredView.getPrimaryUrl();
|
||||
const directUrl = resolveAssetUrl(entry);
|
||||
if (directUrl) {
|
||||
return directUrl;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user