feat: add regex-based fileId extraction to AuthenticatedImage to support direct backend preview URLs
This commit is contained in:
parent
d36c34aa9f
commit
f87f552d52
@ -29,7 +29,15 @@ export const AuthenticatedImage = ({
|
|||||||
alt = "Image",
|
alt = "Image",
|
||||||
...props
|
...props
|
||||||
}: AuthenticatedImageProps): ReactElement => {
|
}: AuthenticatedImageProps): ReactElement => {
|
||||||
const cacheKey = fileId || src;
|
// Helper to extract fileId from backend preview URL
|
||||||
|
const extractFileIdFromUrl = (url: string | null | undefined): string | null => {
|
||||||
|
if (!url) return null;
|
||||||
|
const match = url.match(/\/files\/([a-f0-9-]{36})\/preview/i);
|
||||||
|
return match ? match[1] : null;
|
||||||
|
};
|
||||||
|
|
||||||
|
const extractedFileId = fileId || extractFileIdFromUrl(src);
|
||||||
|
const cacheKey = extractedFileId || src;
|
||||||
|
|
||||||
// 1. Initialize state from cache immediately to prevent blank flash or redundant requests on remount
|
// 1. Initialize state from cache immediately to prevent blank flash or redundant requests on remount
|
||||||
const [blobUrl, setBlobUrl] = useState<string | null>(() => {
|
const [blobUrl, setBlobUrl] = useState<string | null>(() => {
|
||||||
@ -65,7 +73,7 @@ export const AuthenticatedImage = ({
|
|||||||
};
|
};
|
||||||
|
|
||||||
const isBackendUrl = getIsBackendUrl(src);
|
const isBackendUrl = getIsBackendUrl(src);
|
||||||
const isAuthRequired = !!(fileId || isBackendUrl);
|
const isAuthRequired = !!(extractedFileId || isBackendUrl);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
// If it's already a blob URL (local preview) or a data URL, use it directly
|
// If it's already a blob URL (local preview) or a data URL, use it directly
|
||||||
@ -100,8 +108,8 @@ export const AuthenticatedImage = ({
|
|||||||
try {
|
try {
|
||||||
const fetchPromise = (async () => {
|
const fetchPromise = (async () => {
|
||||||
let url: string;
|
let url: string;
|
||||||
if (fileId) {
|
if (extractedFileId) {
|
||||||
url = await fileService.getPreview(fileId);
|
url = await fileService.getPreview(extractedFileId);
|
||||||
} else {
|
} else {
|
||||||
// If useBackendUrl is true, src is guaranteed to be non-null
|
// If useBackendUrl is true, src is guaranteed to be non-null
|
||||||
const response = await apiClient.get(src!, {
|
const response = await apiClient.get(src!, {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user