Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -302,6 +302,14 @@ export const PreviewMediaContent: FC<{
// This only to delay show
const [currentSlideIndex, setCurrentSlideIndex] = useState(initialIndex)

// fallbackMap use in download to fix the cors image
const [fallbackMap, setFallbackMap] = useState<Record<string, string>>({})
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why is it a record?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

我想记录原本url和回退的url的映射,但是我现在觉得下载功能是不是应该放在FallbackableImage 那个组件里,而不是在wrapper那个组件里,这样这个pr就可以关掉了,但是要修改一下FallbackableImage

const handleFallback = (original: string, fallback: string) => {
if (original && fallback) {
setFallbackMap((prev) => ({ ...prev, [original]: fallback }))
}
}

useEffect(() => {
if (emblaApi) {
emblaApi.on("select", () => {
Expand Down Expand Up @@ -333,7 +341,7 @@ export const PreviewMediaContent: FC<{
const { type } = media[0]!
const isVideo = type === "video"
return (
<Wrapper src={src} onZoomChange={onZoomChange} canDragClose>
<Wrapper src={fallbackMap[src] || src} onZoomChange={onZoomChange} canDragClose>
{(handleZoomChange) => [
<Fragment key={src}>
{isVideo ? (
Expand All @@ -355,6 +363,7 @@ export const PreviewMediaContent: FC<{
width={media[0]!.width}
blurhash={media[0]!.blurhash}
onZoomChange={handleZoomChange}
onFallback={handleFallback}
/>
)}
</Fragment>,
Expand All @@ -364,7 +373,11 @@ export const PreviewMediaContent: FC<{
)
}
return (
<Wrapper src={currentMedia!.url} onZoomChange={onZoomChange} canDragClose={false}>
<Wrapper
src={fallbackMap[currentMedia!.url] || currentMedia!.url}
onZoomChange={onZoomChange}
canDragClose={false}
>
{(handleZoomChange) => [
<div key={"left"} className="group size-full overflow-hidden" ref={emblaRef}>
<div className="flex size-full">
Expand All @@ -390,6 +403,7 @@ export const PreviewMediaContent: FC<{
width={med.width}
blurhash={med.blurhash}
onZoomChange={handleZoomChange}
onFallback={handleFallback}
/>
)}
</div>
Expand Down Expand Up @@ -431,8 +445,9 @@ const FallbackableImage: FC<
fallbackUrl?: string
blurhash?: string
onZoomChange?: (isZoomed: boolean) => void
onFallback?: (original: string, fallback: string) => void
}
> = ({ src, fallbackUrl, containerClassName, onZoomChange, loading }) => {
> = ({ src, fallbackUrl, containerClassName, onZoomChange, loading, onFallback }) => {
const [currentSrc, setCurrentSrc] = useState(() => replaceImgUrlIfNeed(src))
const [isAllError, setIsAllError] = useState(false)

Expand All @@ -442,6 +457,12 @@ const FallbackableImage: FC<
currentSrc === src ? "origin" : "proxy",
)

useEffect(() => {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This useEffect may cause some rendering issues; it should not be used here.

if (currentSrc && currentSrc !== src) {
onFallback?.(src, currentSrc)
}
}, [currentSrc])

const handleError = useCallback(() => {
switch (currentState) {
case "proxy": {
Expand Down
Loading