From 82e03978b89938219958032efb1448cc76baa181 Mon Sep 17 00:00:00 2001
From: Saumit <justsaumit@protonmail.com>
Date: Sat, 27 Sep 2025 02:14:26 +0530
Subject: Initial snapshot - OpenTelemetry demo 2.1.3 -f

---
 .../components/ProductCard/ProductCard.tsx         | 65 ++++++++++++++++++++++
 1 file changed, 65 insertions(+)
 create mode 100644 src/frontend/components/ProductCard/ProductCard.tsx

(limited to 'src/frontend/components/ProductCard/ProductCard.tsx')

diff --git a/src/frontend/components/ProductCard/ProductCard.tsx b/src/frontend/components/ProductCard/ProductCard.tsx
new file mode 100644
index 0000000..0744e21
--- /dev/null
+++ b/src/frontend/components/ProductCard/ProductCard.tsx
@@ -0,0 +1,65 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+import { CypressFields } from '../../utils/enums/CypressFields';
+import { Product } from '../../protos/demo';
+import ProductPrice from '../ProductPrice';
+import * as S from './ProductCard.styled';
+import { useState, useEffect } from 'react';
+import { useNumberFlagValue } from '@openfeature/react-sdk';
+
+interface IProps {
+  product: Product;
+}
+
+async function getImageWithHeaders(requestInfo: Request) {
+  const res = await fetch(requestInfo);
+  return await res.blob();
+}
+
+const ProductCard = ({
+  product: {
+    id,
+    picture,
+    name,
+    priceUsd = {
+      currencyCode: 'USD',
+      units: 0,
+      nanos: 0,
+    },
+  },
+}: IProps) => {
+  const imageSlowLoad = useNumberFlagValue('imageSlowLoad', 0);
+  const [imageSrc, setImageSrc] = useState<string>('');
+
+  useEffect(() => {
+    const headers = new Headers();
+    headers.append('x-envoy-fault-delay-request', imageSlowLoad.toString());
+    headers.append('Cache-Control', 'no-cache')
+    const requestInit = {
+      method: "GET",
+      headers: headers
+    };
+    const image_url ='/images/products/' + picture
+    const requestInfo = new Request(image_url, requestInit);
+    getImageWithHeaders(requestInfo).then(blob => {
+      setImageSrc(URL.createObjectURL(blob));
+    });
+  }, [imageSlowLoad, picture]);
+
+  return (
+    <S.Link href={`/product/${id}`}>
+      <S.ProductCard data-cy={CypressFields.ProductCard}>
+        <S.Image $src={imageSrc} />
+        <div>
+          <S.ProductName>{name}</S.ProductName>
+          <S.ProductPrice>
+            <ProductPrice price={priceUsd} />
+          </S.ProductPrice>
+        </div>
+      </S.ProductCard>
+    </S.Link>
+  );
+};
+
+export default ProductCard;
-- 
cgit v1.2.3

