From bbe803cc29b3399fbfd6def7c4bd78ff815cfb5d Mon Sep 17 00:00:00 2001 From: medomy Date: Thu, 26 Jan 2023 18:12:13 +0200 Subject: [PATCH] finished product --- App.tsx | 37 +++++++------- assets/images/discountPic.png | Bin 0 -> 59405 bytes .../HomeComponents/categoriesList/index.tsx | 40 +++++++++++++++ .../HomeComponents/categoryBtn/index.tsx | 22 +++++++++ .../HomeComponents/categoryBtn/styles.ts | 18 +++++++ .../HomeComponents/discountSec/index.tsx | 15 ++++++ .../HomeComponents/discountSec/styles.ts | 17 +++++++ .../HomeComponents/header/index.tsx | 26 ++++++++++ .../HomeComponents/header/styles.ts | 24 +++++++++ .../HomeComponents/headerTitle/index.tsx | 18 +++++++ .../HomeComponents/headerTitle/style.ts | 18 +++++++ .../HomeComponents/productCard/index.tsx | 31 ++++++++++++ .../HomeComponents/productCard/styles.ts | 46 ++++++++++++++++++ .../HomeComponents/productsList/index.tsx | 22 +++++++++ src/constants/images.ts | 6 +++ src/constants/index.ts | 4 +- src/hooks/useCategories.ts | 7 +++ src/screens/home/index.tsx | 28 +++++++++-- src/store/slices/productSlice.ts | 30 ++++++++++++ src/store/store.ts | 6 ++- src/types/product.ts | 12 +++++ src/utils/filterProducts.ts | 6 +++ 22 files changed, 408 insertions(+), 25 deletions(-) create mode 100644 assets/images/discountPic.png create mode 100644 src/components/HomeComponents/categoriesList/index.tsx create mode 100644 src/components/HomeComponents/categoryBtn/index.tsx create mode 100644 src/components/HomeComponents/categoryBtn/styles.ts create mode 100644 src/components/HomeComponents/discountSec/index.tsx create mode 100644 src/components/HomeComponents/discountSec/styles.ts create mode 100644 src/components/HomeComponents/header/index.tsx create mode 100644 src/components/HomeComponents/header/styles.ts create mode 100644 src/components/HomeComponents/headerTitle/index.tsx create mode 100644 src/components/HomeComponents/headerTitle/style.ts create mode 100644 src/components/HomeComponents/productCard/index.tsx create mode 100644 src/components/HomeComponents/productCard/styles.ts create mode 100644 src/components/HomeComponents/productsList/index.tsx create mode 100644 src/constants/images.ts create mode 100644 src/hooks/useCategories.ts create mode 100644 src/store/slices/productSlice.ts create mode 100644 src/types/product.ts create mode 100644 src/utils/filterProducts.ts diff --git a/App.tsx b/App.tsx index b0393ee..ca6c787 100644 --- a/App.tsx +++ b/App.tsx @@ -28,6 +28,8 @@ import { import { Provider } from 'react-redux'; import { store } from './src/store/store'; import Navigation from './src/navigation'; +import { useIsDarkMode } from './src/hooks/useIsDarkMode'; +import { COLORS } from './src/constants'; // type SectionProps = PropsWithChildren<{ // title: string; @@ -61,6 +63,7 @@ import Navigation from './src/navigation'; function App(): JSX.Element { // const isDarkMode = useColorScheme() === 'dark'; + const isDark = useIsDarkMode(); // const backgroundStyle = { // backgroundColor: isDarkMode ? Colors.darker : Colors.lighter, @@ -102,7 +105,7 @@ function App(): JSX.Element { // // - + @@ -110,22 +113,22 @@ function App(): JSX.Element { } const styles = StyleSheet.create({ - sectionContainer: { - marginTop: 32, - paddingHorizontal: 24, - }, - sectionTitle: { - fontSize: 24, - fontWeight: '600', - }, - sectionDescription: { - marginTop: 8, - fontSize: 18, - fontWeight: '400', - }, - highlight: { - fontWeight: '700', - }, + // sectionContainer: { + // marginTop: 32, + // paddingHorizontal: 24, + // }, + // sectionTitle: { + // fontSize: 24, + // fontWeight: '600', + // }, + // sectionDescription: { + // marginTop: 8, + // fontSize: 18, + // fontWeight: '400', + // }, + // highlight: { + // fontWeight: '700', + // }, }); export default App; diff --git a/assets/images/discountPic.png b/assets/images/discountPic.png new file mode 100644 index 0000000000000000000000000000000000000000..8a4aaeb65aef8d3bd116ed4c63ecb02dad9cc17e GIT binary patch literal 59405 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 usK&q void +} +const CategoriesList = ({ selected, setSelected }: props) => { + const { data } = useGetAllCategoriesQuery(); + + const selectCategory = (cat: string) => { + setSelected(cat); + } + const listRenderer: ListRenderItem = ({ item }) => (); + return ( + + {data ? + item} + showsHorizontalScrollIndicator={false} + horizontal + /> : null} + + ) +} + +export default CategoriesList + +const styles = StyleSheet.create({ + container: { + marginVertical: SIZES.margin + } +}) \ No newline at end of file diff --git a/src/components/HomeComponents/categoryBtn/index.tsx b/src/components/HomeComponents/categoryBtn/index.tsx new file mode 100644 index 0000000..9a2d62e --- /dev/null +++ b/src/components/HomeComponents/categoryBtn/index.tsx @@ -0,0 +1,22 @@ +import { View, Text, TouchableOpacity } from 'react-native' +import React from 'react' +import { useIsDarkMode } from '../../../hooks/useIsDarkMode'; +import styles from './styles'; +import { COLORS } from '../../../constants'; + +interface props { + selectedCategory: string, + selectCategory: (category: string) => void, + category: string +} +export default function CategoryBtn({ selectCategory, selectedCategory, category }: props) { + const isSelected = category === selectedCategory; + const isDark = useIsDarkMode(); + return ( + selectCategory(category)}> + {category} + + ) +} \ No newline at end of file diff --git a/src/components/HomeComponents/categoryBtn/styles.ts b/src/components/HomeComponents/categoryBtn/styles.ts new file mode 100644 index 0000000..a0cf91e --- /dev/null +++ b/src/components/HomeComponents/categoryBtn/styles.ts @@ -0,0 +1,18 @@ +import { StyleSheet } from "react-native"; +import { FONTS, SIZES } from "../../../constants"; + +const styles = StyleSheet.create({ + btn: { + marginHorizontal: 1.5 * SIZES.padding2, + paddingVertical:1.5* SIZES.padding, + justifyContent: "center", + alignItems: "center", + borderRadius: SIZES.btnRadius, + paddingHorizontal:1.5* SIZES.padding2 + }, + txt: { + ...FONTS.body3 + } +}); + +export default styles; \ No newline at end of file diff --git a/src/components/HomeComponents/discountSec/index.tsx b/src/components/HomeComponents/discountSec/index.tsx new file mode 100644 index 0000000..62f2d00 --- /dev/null +++ b/src/components/HomeComponents/discountSec/index.tsx @@ -0,0 +1,15 @@ +import { View, Text, Image } from 'react-native' +import React from 'react' +import styles from './styles' +import { images } from '../../../constants' + +export default function DiscountSec() { + return ( + + + + ) +} \ No newline at end of file diff --git a/src/components/HomeComponents/discountSec/styles.ts b/src/components/HomeComponents/discountSec/styles.ts new file mode 100644 index 0000000..ed2f5c3 --- /dev/null +++ b/src/components/HomeComponents/discountSec/styles.ts @@ -0,0 +1,17 @@ +import { StyleSheet } from "react-native"; +import { SIZES } from "../../../constants"; + +const styles = StyleSheet.create({ + container : { + width : SIZES.fullWidth, + paddingHorizontal :1.5* SIZES.padding2, + marginVertical : SIZES.margin + }, + img : { + width : SIZES.fullWidth, + height : 0.25 * SIZES.fullScreenHeight, + borderRadius : SIZES.radius2 + } +}); + +export default styles; \ No newline at end of file diff --git a/src/components/HomeComponents/header/index.tsx b/src/components/HomeComponents/header/index.tsx new file mode 100644 index 0000000..13b7da5 --- /dev/null +++ b/src/components/HomeComponents/header/index.tsx @@ -0,0 +1,26 @@ +import { View, Text, TouchableOpacity } from 'react-native' +import React from 'react' +import styles from './styles' +import Icon from 'react-native-vector-icons/Ionicons' +import AnotherIcon from 'react-native-vector-icons/Feather' +import { useIsDarkMode } from '../../../hooks/useIsDarkMode' +import { COLORS, SIZES } from '../../../constants' + +export default function HomeHeader() { + const isDark = useIsDarkMode(); + return ( + + + + + + + + + + + + + + ) +} \ No newline at end of file diff --git a/src/components/HomeComponents/header/styles.ts b/src/components/HomeComponents/header/styles.ts new file mode 100644 index 0000000..f862c3f --- /dev/null +++ b/src/components/HomeComponents/header/styles.ts @@ -0,0 +1,24 @@ +import { StyleSheet } from "react-native"; +import { COLORS, SIZES } from "../../../constants"; + +const styles = StyleSheet.create({ + container : { + paddingVertical : SIZES.padding, + width : SIZES.fullWidth, + flexDirection : "row", + justifyContent : "space-between", + marginVertical : SIZES.margin, + backgroundColor : COLORS.transparent, + paddingHorizontal :1.5* SIZES.padding2, + alignItems : "center" + }, + iconMargin : { + marginHorizontal : 0.8 *SIZES.margin2 + }, + otherIcons : { + flexDirection : "row" + } +}); + + +export default styles \ No newline at end of file diff --git a/src/components/HomeComponents/headerTitle/index.tsx b/src/components/HomeComponents/headerTitle/index.tsx new file mode 100644 index 0000000..bd138c6 --- /dev/null +++ b/src/components/HomeComponents/headerTitle/index.tsx @@ -0,0 +1,18 @@ +import { View, Text } from 'react-native' +import React from 'react' +import styles from './style' +import { useIsDarkMode } from '../../../hooks/useIsDarkMode' +import { COLORS } from '../../../constants' + +interface props { + title : string +} + +export default function HeaderTitle({title} : props) { + const isDark = useIsDarkMode(); + return ( + + {title} + + ) +} \ No newline at end of file diff --git a/src/components/HomeComponents/headerTitle/style.ts b/src/components/HomeComponents/headerTitle/style.ts new file mode 100644 index 0000000..566ed99 --- /dev/null +++ b/src/components/HomeComponents/headerTitle/style.ts @@ -0,0 +1,18 @@ +import { StyleSheet } from "react-native"; +import { FONTS, SIZES } from "../../../constants"; + +const styles = StyleSheet.create({ + container : { + paddingHorizontal : 1.5 * SIZES.padding2, + paddingVertical : SIZES.padding, + marginVertical : SIZES.margin, + justifyContent : "center", + width : SIZES.fullWidth + }, + title : { + ...FONTS.h1, + fontWeight : "800" + } +}); + +export default styles; \ No newline at end of file diff --git a/src/components/HomeComponents/productCard/index.tsx b/src/components/HomeComponents/productCard/index.tsx new file mode 100644 index 0000000..c6432fb --- /dev/null +++ b/src/components/HomeComponents/productCard/index.tsx @@ -0,0 +1,31 @@ +import { View, Text, Pressable } from 'react-native' +import React from 'react' +import { Product } from '../../../types/product' +import styles from './styles' +import { IconButton } from '@react-native-material/core' +import Icon from 'react-native-vector-icons/FontAwesome' +import { Image } from 'react-native' +import { SIZES } from '../../../constants' + +interface props { + product: Product +} +export default function ProductCard({ product }: props) { + return ( + + + } style={styles.iconBtn} /> + + + + {product.title} + + + ${product.price} + + + ) +} \ No newline at end of file diff --git a/src/components/HomeComponents/productCard/styles.ts b/src/components/HomeComponents/productCard/styles.ts new file mode 100644 index 0000000..a028368 --- /dev/null +++ b/src/components/HomeComponents/productCard/styles.ts @@ -0,0 +1,46 @@ +import { StyleSheet } from "react-native"; +import { COLORS, FONTS, SIZES } from "../../../constants"; + +const styles = StyleSheet.create({ + procuctCard: { + position: "relative", + alignItems: "center", + marginHorizontal : 1.5 *SIZES.padding2 + }, + imgContainer: { + backgroundColor: COLORS.socendry, + width: 200, + height: 250, + borderRadius: SIZES.radius2, + alignItems: "center", + justifyContent: "flex-end" + }, + img: { + width: 150, + height: 200, + resizeMode: "contain" + }, + iconBtn: { + position: "absolute", + top: 10, + right: 15 + }, + favIcon: { + width: SIZES.iconSize, + height: SIZES.iconSize, + }, + name: { + color: COLORS.black, + ...FONTS.body4, + marginVertical: 2* SIZES.margin, + maxWidth : 150, + textAlign : "center" + }, + price: { + color: COLORS.primary, + ...FONTS.h3, + fontWeight: "800" + } +}); + +export default styles; \ No newline at end of file diff --git a/src/components/HomeComponents/productsList/index.tsx b/src/components/HomeComponents/productsList/index.tsx new file mode 100644 index 0000000..fc1c4b5 --- /dev/null +++ b/src/components/HomeComponents/productsList/index.tsx @@ -0,0 +1,22 @@ +import { View, Text, ListRenderItem, FlatList } from 'react-native' +import React from 'react' +import { Product } from '../../../types/product' +import ProductCard from '../productCard' +import { SIZES } from '../../../constants' + +interface props { + products: Product[] +} +export default function ProductsList({ products }: props) { + const renderItems: ListRenderItem = ({ item }) => () + return ( + + item.id.toString()} + horizontal + showsHorizontalScrollIndicator={false} /> + + ) +} \ No newline at end of file diff --git a/src/constants/images.ts b/src/constants/images.ts new file mode 100644 index 0000000..5584a25 --- /dev/null +++ b/src/constants/images.ts @@ -0,0 +1,6 @@ +export const discountImg = require('../../assets/images/discountPic.png'); + + +export default { + discountImg, +} \ No newline at end of file diff --git a/src/constants/index.ts b/src/constants/index.ts index 3d6c991..d07225a 100644 --- a/src/constants/index.ts +++ b/src/constants/index.ts @@ -1,4 +1,4 @@ import { COLORS, SIZES, FONTS } from "./themes"; - -export { COLORS, SIZES, FONTS }; \ No newline at end of file +import images from './images' +export { COLORS, SIZES, FONTS, images }; \ No newline at end of file diff --git a/src/hooks/useCategories.ts b/src/hooks/useCategories.ts new file mode 100644 index 0000000..feebd64 --- /dev/null +++ b/src/hooks/useCategories.ts @@ -0,0 +1,7 @@ +import { useGetAllCategoriesQuery } from "../store/slices/productSlice"; + +export function useCategories() { + const { data , isLoading , error} = useGetAllCategoriesQuery(); + const categories = ['All' , ...data!]; + return { categories, isLoading , error } +} \ No newline at end of file diff --git a/src/screens/home/index.tsx b/src/screens/home/index.tsx index a9f3204..85f18a2 100644 --- a/src/screens/home/index.tsx +++ b/src/screens/home/index.tsx @@ -1,10 +1,30 @@ -import { StyleSheet, Text, View } from 'react-native' -import React from 'react' +import { ScrollView, StyleSheet, Text, View } from 'react-native' +import React, { useState } from 'react' +import HomeHeader from '../../components/HomeComponents/header' +import HeaderTitle from '../../components/HomeComponents/headerTitle' +import DiscountSec from '../../components/HomeComponents/discountSec' +import CategoriesList from '../../components/HomeComponents/categoriesList' +import { useGetAllProductsQuery } from '../../store/slices/productSlice' +import ProductsList from '../../components/HomeComponents/productsList' +import { filterProducts } from '../../utils/filterProducts' const Home = () => { + const { data } = useGetAllProductsQuery(); + const [selectedCategory, setSelectedCategory] = useState("All"); + + const changeSelectedCategory = (category: string) => { + setSelectedCategory(category); + } return ( - - Home + + + + + + + {data && } + ) } diff --git a/src/store/slices/productSlice.ts b/src/store/slices/productSlice.ts new file mode 100644 index 0000000..241b629 --- /dev/null +++ b/src/store/slices/productSlice.ts @@ -0,0 +1,30 @@ +import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react' +import { Product } from '../../types/product' +import { networkConfig } from '../../network/networkConfig' + +// Define a service using a base URL and expected endpoints +export const productsApi = createApi({ + reducerPath: 'productsApi', + baseQuery: fetchBaseQuery({ baseUrl: networkConfig.baseUrl }), + endpoints: (builder) => ({ + getAllProductsCategory: builder.query({ + query: (category) => `/products/${category}`, + }), + getAllProducts: builder.query({ + query: () => `/products` + }), + getProductById: builder.query({ + query: (id) => `/products/${id}` + }), + getLimitedProducts: builder.query({ + query: (limit) => `/products?limit=${limit}` + }), + getAllCategories: builder.query({ + query: () => `/products/categories` + }) + }), +}) + +// Export hooks for usage in functional components, which are +// auto-generated based on the defined endpoints +export const { useGetAllProductsCategoryQuery, useGetAllProductsQuery, useGetLimitedProductsQuery, useGetProductByIdQuery, useGetAllCategoriesQuery } = productsApi \ No newline at end of file diff --git a/src/store/store.ts b/src/store/store.ts index 2d2ab5f..b10b3a9 100644 --- a/src/store/store.ts +++ b/src/store/store.ts @@ -1,12 +1,14 @@ import { configureStore } from '@reduxjs/toolkit' import { authApi } from './slices/authSlice' +import { productsApi } from './slices/productSlice' import { setupListeners } from '@reduxjs/toolkit/query' export const store = configureStore({ reducer: { - [authApi.reducerPath]: authApi.reducer + [authApi.reducerPath]: authApi.reducer, + [productsApi.reducerPath]: productsApi.reducer }, middleware: (getDefaultMiddleware) => - getDefaultMiddleware().concat(authApi.middleware), + getDefaultMiddleware().concat(authApi.middleware).concat(productsApi.middleware), }) setupListeners(store.dispatch) diff --git a/src/types/product.ts b/src/types/product.ts new file mode 100644 index 0000000..4821517 --- /dev/null +++ b/src/types/product.ts @@ -0,0 +1,12 @@ +export interface Product { + id: number, + title: string, + price: number, + description: string, + category: string, + image: string, + rating: { + rate: number, + count: number + } +} \ No newline at end of file diff --git a/src/utils/filterProducts.ts b/src/utils/filterProducts.ts new file mode 100644 index 0000000..962b576 --- /dev/null +++ b/src/utils/filterProducts.ts @@ -0,0 +1,6 @@ +import { Product } from "../types/product"; + +export function filterProducts(category: string, products: Product[]) { + if (category === "All") return products; + else return products.filter((product) => product.category === category); +} \ No newline at end of file