Redux cart
user_1189170
plain_text
2 years ago
4.7 kB
4
Indexable
import React, { useEffect, useState } from "react"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import "./Cart.css"; import { Singlitem } from "./Singlitem"; import { Loader } from "./Loader"; import { Navigate, useNavigate } from "react-router-dom"; import { useDispatch, useSelector } from "react-redux"; import { getdata, Deletdata } from "../../Redux/cartReducer/action"; import axios from "axios"; import{DeleteIcon} from '@chakra-ui/icons' import { Box, Button, Flex, Grid, Image, Text, VStack, Heading, } from "@chakra-ui/react"; import { addProductQntyCart, addProductToCart } from "../../Redux/Cart/Cart.action"; const CartPage = () => { const AddressData = useSelector((store)=>store.addressReducer.address) const navigate = useNavigate(); const dispatch = useDispatch(); const [value, setValue] = useState(""); const [quantity, setquantity] = useState(0); const data = useSelector((store) => store.cartReducer.cart); const [total, settotal] = useState(0); const redirectToAddress = () =>{ navigate('/address') } const incrementQnty = (item) =>{ dispatch(addProductQntyCart(item)) } useEffect(() => { let sum = 0; let qnty = 0; data.map((item) => (sum += item.price * item.quantity)); data.map((item) => (qnty += item.quantity)); settotal(sum); setquantity(qnty) console.log(data); }, [data,total,quantity,incrementQnty]); return ( <> <VStack p='5' w='100%'> <Text as="b">My Cart({quantity} items)</Text> <hr /> <Grid w='100%' templateColumns={{base:'repeat(1,1fr)',md:'70% 30%'}}> <VStack p="5"> {data.map((item) => ( <> <Flex w='100%' justifyContent='space-between' boxShadow="rgba(99, 99, 99, 0.2) 0px 2px 8px 0px" borderRadius="0.5rem" flexDirection={{base:'column',md:'row'}} alignItems='center' p="5" > <Image boxSize="100px" objectFit="cover" src={item.image} alt="product image" /> <Text maxW='200px'>{item.name}</Text> <VStack justifyContent={'space-between'}> <Flex alignItems={"center"} gap="2"> <Button colorScheme="teal" size="md"> - </Button> <Heading as="h5" size="sm"> {item.quantity} </Heading> <Button colorScheme="teal" size="md" onClick={()=>{incrementQnty(item)}}> + </Button> </Flex> <Button colorScheme='red' size="sm"><DeleteIcon /></Button> </VStack> </Flex> </> ))} <Flex w='100%'> <VStack justifyContent='center'> <Text>Delivery To:</Text> { AddressData.length>0?( <Box bg='rgb(218, 218, 218)' w='150px' minHeight='150px' p='3' borderRadius='15px'> <Text>{AddressData[0].first}</Text> <Text fontSize='sm'>{AddressData[0].last}</Text> <Text fontSize='sm'>{AddressData[0].addr}</Text> <Text fontSize='sm'>{AddressData[0].mob}</Text> </Box> ):( <Button onClick={redirectToAddress} border="2px dashed grey" w='150px' h='150px' bg='transparent'>+ Add address</Button> ) } </VStack> </Flex> </VStack> <VStack pt="5"> <VStack justifyContent='center' bg='#902735' boxShadow="rgba(99, 99, 99, 0.2) 0px 2px 8px 0px" borderRadius="0.5rem" w='100%' p='5' gap='2'> <Heading color='white' size='md'>PRICE DETAILS</Heading> <Flex w='100%' alignItems='center' justifyContent='space-between'> <Text color='white'>Total quantity :</Text> <Button>{quantity}</Button> </Flex> <Flex w='100%' alignItems='center' justifyContent='space-between'> <Text color='white'>Total amount : </Text> <Button>{total}</Button> </Flex> <Button w='100%' style={{marginTop:'20px'}} colorScheme={'teal'}>Go to checkout</Button> </VStack> </VStack> </Grid> </VStack> </> ); }; export default CartPage;
Editor is loading...