diff --git a/.hintrc b/.hintrc new file mode 100644 index 0000000..aa8de6b --- /dev/null +++ b/.hintrc @@ -0,0 +1,5 @@ +{ + "extends": [ + "development" + ] +} \ No newline at end of file diff --git a/package.json b/package.json index d93f31d..b228de2 100644 --- a/package.json +++ b/package.json @@ -66,5 +66,6 @@ "resolutions": { "@types/react": "18.0.31", "@types/react-dom": "18.0.11" - } + }, + "packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e" } diff --git a/src/app/ ProductsListPage.tsx b/src/app/ ProductsListPage.tsx new file mode 100644 index 0000000..198348f --- /dev/null +++ b/src/app/ ProductsListPage.tsx @@ -0,0 +1,55 @@ +import React, { FC } from "react"; +import Image from "next/image"; +import { GetServerSideProps } from "next"; + +type Product = { + id: number; + title: string; + price: number; + image: string; +}; + +type ProductsProps = { + products: Product[]; +}; + +export const getServerSideProps: GetServerSideProps = async () => { + try { + const res = await fetch("https://fakestoreapi.com/products"); + if (!res.ok) throw new Error("Failed to fetch products"); + const products: Product[] = await res.json(); + return { props: { products } }; + } catch (error) { + console.error("Fetch error:", error); + return { props: { products: [] } }; + } +}; + +const Products: FC = ({ products }) => { + if (!products || products.length === 0) { + return

No products available.

; + } + + return ( +
+

Product List

+
+ {products.map((product) => ( +
+ {product.title} +

{product.title}

+

${product.price}

+
+ ))} +
+
+ ); +}; + +export default Products;