From f0ae541eb22a35849e89b5fd4a137d557c76e027 Mon Sep 17 00:00:00 2001 From: Zoe Roux Date: Wed, 30 Oct 2024 22:25:06 +0100 Subject: [PATCH] Use expo image on mobile --- front/apps/mobile/package.json | 3 +- front/bun.lockb | Bin 488744 -> 487616 bytes front/packages/primitives/package.json | 2 - .../primitives/src/image/base-image.tsx | 2 - front/packages/primitives/src/image/image.tsx | 70 ++++-------------- .../primitives/src/image/image.web.tsx | 10 +-- .../packages/primitives/src/image/sprite.tsx | 30 ++++---- 7 files changed, 31 insertions(+), 86 deletions(-) diff --git a/front/apps/mobile/package.json b/front/apps/mobile/package.json index 39082e60..c93edd14 100644 --- a/front/apps/mobile/package.json +++ b/front/apps/mobile/package.json @@ -33,6 +33,7 @@ "expo-dev-client": "~5.0.0-preview.4", "expo-file-system": "~18.0.0", "expo-font": "~13.0.0", + "expo-image": "^1.13.0", "expo-image-picker": "~16.0.0", "expo-linear-gradient": "~14.0.1", "expo-linking": "~7.0.2", @@ -49,8 +50,6 @@ "react": "18.3.1", "react-i18next": "^15.1.0", "react-native": "0.76.1", - "react-native-blurhash": "^2.0.3", - "react-native-fast-image": "^8.6.3", "react-native-mmkv": "^3.1.0", "react-native-reanimated": "~3.16.1", "react-native-safe-area-context": "4.12.0", diff --git a/front/bun.lockb b/front/bun.lockb index 63da1771c20e9c180e1fd53e676afaafd9cc8500..8bbdaaae0a2c093948578ca75029baa99b3d1078 100755 GIT binary patch delta 21303 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 delta 21773 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 G+y4cdk#y_; diff --git a/front/packages/primitives/package.json b/front/packages/primitives/package.json index 045ffd98..ec8bf0ba 100644 --- a/front/packages/primitives/package.json +++ b/front/packages/primitives/package.json @@ -17,8 +17,6 @@ "moti": "*", "react": "*", "react-native": "*", - "react-native-blurhash": "*", - "react-native-fast-image": "*", "react-native-reanimated": "*", "react-native-safe-area-context": "*", "react-native-svg": "*", diff --git a/front/packages/primitives/src/image/base-image.tsx b/front/packages/primitives/src/image/base-image.tsx index 33f4b251..430979df 100644 --- a/front/packages/primitives/src/image/base-image.tsx +++ b/front/packages/primitives/src/image/base-image.tsx @@ -19,7 +19,6 @@ */ import type { KyooImage } from "@kyoo/models"; -import type { ReactElement } from "react"; import type { ImageStyle } from "react-native"; import type { YoshikiStyle } from "yoshiki/src/type"; @@ -33,7 +32,6 @@ export type Props = { src?: KyooImage | null; quality: "low" | "medium" | "high"; alt?: string; - Err?: ReactElement | null; forcedLoading?: boolean; }; diff --git a/front/packages/primitives/src/image/image.tsx b/front/packages/primitives/src/image/image.tsx index cfa14c69..a2bdcf8f 100644 --- a/front/packages/primitives/src/image/image.tsx +++ b/front/packages/primitives/src/image/image.tsx @@ -18,12 +18,10 @@ * along with Kyoo. If not, see . */ -import { getCurrentToken } from "@kyoo/models"; -import { type ReactElement, useState } from "react"; -import { type FlexStyle, type ImageStyle, View, type ViewStyle } from "react-native"; -import { Blurhash } from "react-native-blurhash"; -import FastImage from "react-native-fast-image"; -import { percent, useYoshiki } from "yoshiki/native"; +import { type ReactElement } from "react"; +import { type ImageStyle, View, type ViewStyle } from "react-native"; +import { Image as ExpoImage } from "expo-image"; +import { useYoshiki } from "yoshiki/native"; import { Skeleton } from "../skeleton"; import type { ImageLayout, Props } from "./base-image"; @@ -33,64 +31,24 @@ export const Image = ({ alt, forcedLoading = false, layout, - Err, ...props }: Props & { style?: ImageStyle } & { layout: ImageLayout }) => { const { css } = useYoshiki(); - const [state, setState] = useState<"loading" | "errored" | "finished">( - src ? "loading" : "errored", - ); - - // This could be done with a key but this makes the API easier to use. - // This unsures that the state is resetted when the source change (useful for recycler lists.) - const [oldSource, setOldSource] = useState(src); - if (oldSource !== src) { - setState("loading"); - setOldSource(src); - } const border = { borderRadius: 6, overflow: "hidden" } satisfies ViewStyle; if (forcedLoading) return ; - if (!src || state === "errored") { - return Err !== undefined ? ( - Err - ) : ( - theme.overlay0 }, layout, border], props)} /> - ); - } - - quality ??= "high"; - const token = getCurrentToken(); + if (!src) return theme.overlay0 }, layout, border], props)} />; return ( - - {state !== "finished" && ( - - )} - setState("finished")} - onError={() => setState("errored")} - resizeMode={FastImage.resizeMode.cover} - {...(css({ - width: percent(100), - height: percent(100), - }) as { style: FlexStyle })} - /> - + ); }; diff --git a/front/packages/primitives/src/image/image.web.tsx b/front/packages/primitives/src/image/image.web.tsx index 9f26e178..ef85ffea 100644 --- a/front/packages/primitives/src/image/image.web.tsx +++ b/front/packages/primitives/src/image/image.web.tsx @@ -18,14 +18,13 @@ * along with Kyoo. If not, see . */ -import NextImage from "next/image"; import { type ReactElement, useState } from "react"; import { type ImageStyle, View, type ViewStyle } from "react-native"; import { useYoshiki } from "yoshiki/native"; import { imageBorderRadius } from "../constants"; import { Skeleton } from "../skeleton"; import type { ImageLayout, Props } from "./base-image"; -import { BlurhashContainer, useRenderType } from "./blurhash.web"; +import { BlurhashContainer } from "./blurhash.web"; export const Image = ({ src, @@ -33,7 +32,6 @@ export const Image = ({ alt, forcedLoading = false, layout, - Err, ...props }: Props & { style?: ImageStyle } & { layout: ImageLayout }) => { const { css } = useYoshiki(); @@ -45,11 +43,7 @@ export const Image = ({ if (forcedLoading) return ; if (!src || state === "errored") { - return Err !== undefined ? ( - Err - ) : ( - theme.overlay0 }, layout, border], props)} /> - ); + return theme.overlay0 }, layout, border], props)} />; } return ( diff --git a/front/packages/primitives/src/image/sprite.tsx b/front/packages/primitives/src/image/sprite.tsx index 047cd06e..45235387 100644 --- a/front/packages/primitives/src/image/sprite.tsx +++ b/front/packages/primitives/src/image/sprite.tsx @@ -18,18 +18,14 @@ * along with Kyoo. If not, see . */ -import { Image, View } from "react-native"; +import { Image as ExpoImage } from "expo-image"; export const Sprite = ({ src, alt, - width, - height, + style, x, y, - rows, - columns, - style, ...props }: { src: string; @@ -43,15 +39,17 @@ export const Sprite = ({ style?: object; }) => { return ( - - {alt} - + ); };