summaryrefslogtreecommitdiff
path: root/src/frontend/components/ProductCard/ProductCard.tsx
diff options
context:
space:
mode:
authorSaumit <justsaumit@protonmail.com>2025-09-27 02:14:26 +0530
committerSaumit <justsaumit@protonmail.com>2025-09-27 02:14:26 +0530
commit82e03978b89938219958032efb1448cc76baa181 (patch)
tree626f3e54d52ecd49be0ed3bee30abacc0453d081 /src/frontend/components/ProductCard/ProductCard.tsx
Initial snapshot - OpenTelemetry demo 2.1.3 -f
Diffstat (limited to 'src/frontend/components/ProductCard/ProductCard.tsx')
-rw-r--r--src/frontend/components/ProductCard/ProductCard.tsx65
1 files changed, 65 insertions, 0 deletions
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;