From 229d4aa039bf44ced34122c273254d8961a3ed0c Mon Sep 17 00:00:00 2001 From: Scott Dixon <59898611+scottdixon@users.noreply.github.com> Date: Thu, 3 Oct 2024 18:50:17 +1000 Subject: [PATCH] Image component: support local assets in development (#2573) --- .changeset/blue-ads-design.md | 5 +++++ packages/hydrogen-react/src/Image.test.tsx | 21 +++++++++++++++++++++ packages/hydrogen-react/src/Image.tsx | 5 +++-- 3 files changed, 29 insertions(+), 2 deletions(-) create mode 100644 .changeset/blue-ads-design.md diff --git a/.changeset/blue-ads-design.md b/.changeset/blue-ads-design.md new file mode 100644 index 0000000000..9447414d52 --- /dev/null +++ b/.changeset/blue-ads-design.md @@ -0,0 +1,5 @@ +--- +'@shopify/hydrogen-react': patch +--- + +Image component: support local assets in development diff --git a/packages/hydrogen-react/src/Image.test.tsx b/packages/hydrogen-react/src/Image.test.tsx index 9a15c52abb..4f4a3a1b84 100644 --- a/packages/hydrogen-react/src/Image.test.tsx +++ b/packages/hydrogen-react/src/Image.test.tsx @@ -78,6 +78,27 @@ describe('', () => { crop, }); }); + + it('handles remote assets', () => { + render(); + expect(screen.getByRole('img')).toHaveAttribute( + 'src', + 'https://cdn.shopify.com/s/files/1/0551/4566/0472/products/Main.jpg?width=100&crop=center', + ); + }); + + it('handles local assets', () => { + const props = { + ...defaultProps, + src: '/assets/image.png', + }; + + render(); + expect(screen.getByRole('img')).toHaveAttribute( + 'src', + '/assets/image.png?width=100&crop=center', + ); + }); }); describe('aspect-ratio', () => { diff --git a/packages/hydrogen-react/src/Image.tsx b/packages/hydrogen-react/src/Image.tsx index c2a06f0bc5..30276c2409 100644 --- a/packages/hydrogen-react/src/Image.tsx +++ b/packages/hydrogen-react/src/Image.tsx @@ -549,12 +549,13 @@ const FluidImage = React.forwardRef( * }) * ``` */ +const PLACEHOLDER_DOMAIN = 'https://placeholder.shopify.com'; export function shopifyLoader({src, width, height, crop}: LoaderParams) { if (!src) { return ''; } - const url = new URL(src); + const url = new URL(src, PLACEHOLDER_DOMAIN); if (width) { url.searchParams.append('width', Math.round(width).toString()); @@ -567,7 +568,7 @@ export function shopifyLoader({src, width, height, crop}: LoaderParams) { if (crop) { url.searchParams.append('crop', crop); } - return url.href; + return url.href.replace(PLACEHOLDER_DOMAIN, ''); } /**