From ee01623bf13aecb37942a40a75058954acbad008 Mon Sep 17 00:00:00 2001 From: Martti Malmi Date: Thu, 11 Jan 2024 11:19:16 +0200 Subject: [PATCH] memoize proxyimg --- packages/app/src/Components/ProxyImg.tsx | 23 ++++++++++++--------- packages/app/src/Components/User/Avatar.tsx | 2 -- packages/app/src/lang.json | 3 --- packages/app/src/translations/en.json | 1 - 4 files changed, 13 insertions(+), 16 deletions(-) diff --git a/packages/app/src/Components/ProxyImg.tsx b/packages/app/src/Components/ProxyImg.tsx index 0e659d50..a645d545 100644 --- a/packages/app/src/Components/ProxyImg.tsx +++ b/packages/app/src/Components/ProxyImg.tsx @@ -1,6 +1,7 @@ -import { forwardRef, HTMLProps, ReactNode, useEffect, useState } from "react"; +import { forwardRef, HTMLProps, memo, ReactNode, useEffect, useState } from "react"; import { FormattedMessage } from "react-intl"; +import Icon from "@/Components/Icons/Icon"; import useImgProxy from "@/Hooks/useImgProxy"; import { getUrlHostname } from "@/Utils"; @@ -12,7 +13,9 @@ type ProxyImgProps = HTMLProps & { missingImageElement?: ReactNode; }; -export const ProxyImg = forwardRef(function ProxyImg( +const defaultMissingImageElement = ; + +const ProxyImgComponent = forwardRef(function ProxyImg( { src, size, className, promptToLoadDirectly, missingImageElement, sha256, ...props }: ProxyImgProps, ref, ) { @@ -60,14 +63,9 @@ export const ProxyImg = forwardRef(function Pro } }; - if (!imgSrc || loadFailed) - return ( - missingImageElement ?? ( -
- -
- ) - ); + if (!imgSrc || loadFailed) { + return missingImageElement ?? defaultMissingImageElement; + } return ( (function Pro /> ); }); + +const ProxyImg = memo(ProxyImgComponent); +ProxyImg.displayName = "ProxyImg"; + +export { ProxyImg }; diff --git a/packages/app/src/Components/User/Avatar.tsx b/packages/app/src/Components/User/Avatar.tsx index af4b2346..10b9cb35 100644 --- a/packages/app/src/Components/User/Avatar.tsx +++ b/packages/app/src/Components/User/Avatar.tsx @@ -4,7 +4,6 @@ import type { UserMetadata } from "@snort/system"; import classNames from "classnames"; import { ReactNode, useMemo } from "react"; -import Icon from "@/Components/Icons/Icon"; import { ProxyImg } from "@/Components/ProxyImg"; import { defaultAvatar, getDisplayName } from "@/Utils"; @@ -60,7 +59,6 @@ const Avatar = ({ size={s} alt={getDisplayName(user, "")} promptToLoadDirectly={false} - missingImageElement={} /> {icons &&
{icons}
} {imageOverlay &&
{imageOverlay}
} diff --git a/packages/app/src/lang.json b/packages/app/src/lang.json index 264f0fd2..bfba0e94 100644 --- a/packages/app/src/lang.json +++ b/packages/app/src/lang.json @@ -1033,9 +1033,6 @@ "defaultMessage": "Redeem", "description": "Button: Redeem Cashu token" }, - "Y7FG5M": { - "defaultMessage": "Image not available" - }, "YDURw6": { "defaultMessage": "Service URL" }, diff --git a/packages/app/src/translations/en.json b/packages/app/src/translations/en.json index 5a3b8ebb..732b89cb 100644 --- a/packages/app/src/translations/en.json +++ b/packages/app/src/translations/en.json @@ -340,7 +340,6 @@ "Xnimz0": "Sending from {wallet}", "Xopqkl": "Your default zap amount is {number} sats, example values are calculated from this.", "XrSk2j": "Redeem", - "Y7FG5M": "Image not available", "YDURw6": "Service URL", "YR2I9M": "No keys, no {app}, There is no way to reset it if you don't back up. It only takes a minute.", "YXA3AH": "Enable reactions",