-
Notifications
You must be signed in to change notification settings - Fork 2.3k
Expand file tree
/
Copy pathExpandedImagePreview.tsx
More file actions
40 lines (37 loc) · 1.2 KB
/
ExpandedImagePreview.tsx
File metadata and controls
40 lines (37 loc) · 1.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
export interface ExpandedImageItem {
src: string;
name: string;
}
export interface ExpandedImagePreview {
images: ExpandedImageItem[];
index: number;
}
export function getExpandedImagePreviewIdentityKey(preview: ExpandedImagePreview): string {
const selectedImage = preview.images[preview.index];
const selectedImageKey = selectedImage
? `${selectedImage.name.length}:${selectedImage.name}:${selectedImage.src.length}:${selectedImage.src}`
: "missing";
return `${preview.images.length}:${preview.index}:${selectedImageKey}`;
}
export function buildExpandedImagePreview(
images: ReadonlyArray<{ id: string; name: string; previewUrl?: string }>,
selectedImageId: string,
): ExpandedImagePreview | null {
const previewableImages = images.flatMap((image) =>
image.previewUrl ? [{ id: image.id, src: image.previewUrl, name: image.name }] : [],
);
if (previewableImages.length === 0) {
return null;
}
const selectedIndex = previewableImages.findIndex((image) => image.id === selectedImageId);
if (selectedIndex < 0) {
return null;
}
return {
images: previewableImages.map((image) => ({
src: image.src,
name: image.name,
})),
index: selectedIndex,
};
}