diff --git a/src/components/filters/DropDownFilter.tsx b/src/components/filters/DropDownFilter.tsx index de16685..b206f11 100644 --- a/src/components/filters/DropDownFilter.tsx +++ b/src/components/filters/DropDownFilter.tsx @@ -9,8 +9,7 @@ interface DropDownFilterProps { genre: string; } -const DropDownFilter: React.FC = ({ onClick, isOpen, filterByGenre, genre }) => { - const categories: Category[] = [ +export const categories: Category[] = [ { id: 'All', name: 'All Categories' }, { id: "men's clothing", name: "Men's Clothing" }, { id: "women's clothing", name: "Women's Clothing" }, @@ -18,6 +17,8 @@ const DropDownFilter: React.FC = ({ onClick, isOpen, filter { id: 'jewelery', name: 'Jewelery' }, ]; +const DropDownFilter: React.FC = ({ onClick, isOpen, filterByGenre, genre }) => { + return (
= () => { +const Card: React.FC = (props: CardProps) => { + const maxRatings = 5 return (
- +
-

+

{props.product.title}

-

Price:

-

Rating:

-

Category:

+

{`Price: ${props.product.price}`}

+

{`Rating: ${props.product.rating.rate}/${maxRatings} (${props.product.rating.count} Reviews)`}

+

{`Category: ${categories.find((category) => category.id == props.product.category)?.name}`}

diff --git a/src/pages/Home.tsx b/src/pages/Home.tsx index 4eff3ea..96236b5 100644 --- a/src/pages/Home.tsx +++ b/src/pages/Home.tsx @@ -1,5 +1,5 @@ import React, { useState, useEffect } from 'react'; -import axios from 'axios'; +import axios, { all } from 'axios'; import '../assets/css/common.css'; import '../assets/css/main.css'; import Navbar from '../components/ui-elements/Navbar'; @@ -7,25 +7,39 @@ import DropDownFilter from '../components/filters/DropDownFilter'; import Loading from '../components/ui-elements/Loading'; import Card from '../components/product-components/Card'; import { Product } from '../types'; +import InputFilter from '../components/filters/InputFilter'; const Home: React.FC = () => { const [allProducts, setAllProducts] = useState([]); const [products, setProducts] = useState([]); const [isDropdownOpen, setIsDropdownOpen] = useState(false); - const [selectedCategory, setSelectedCategory] = useState('All'); + const allProductsCategory = "All"; + const [selectedCategory, setSelectedCategory] = useState(allProductsCategory); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); + const baseURL = "https://fakestoreapi.com/products"; -//TODO - useEffect + axios + useEffect(() => { + axios.get(baseURL) + .then((response) => { + setAllProducts(response.data) + setProducts(response.data) + setLoading(false) + }) + .catch((error) => { + setError(error) + setLoading(false) + }) + },[]) const showFilterByCategory = () => { setIsDropdownOpen(!isDropdownOpen); }; - // TODO - filter products by category - BONUS const filterByCategory = (category: string) => { setSelectedCategory(category); - //TODO - filter products by category + const filteredProducts = category === allProductsCategory? allProducts : allProducts.filter((product) => product.category === category) + setProducts(filteredProducts) }; if (loading) { @@ -57,7 +71,9 @@ const Home: React.FC = () => {
- {/* TODO - map products */} + {products.map((product) => { + return + })}
diff --git a/src/types.ts b/src/types.ts index 1e3d610..5d33eda 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,11 +1,20 @@ export interface Rating { -//TODO + rate: number, + count: number } export interface Product { -//TODO + id: number, + title: string, + price: number, + desctiption: string, + category: string, + image: string, + rating: Rating } export interface Category { -//TODO + id: string, + name: string } +