Myaddress page

 avatar
unknown
plain_text
2 years ago
59 kB
5
Indexable
import React, { useState, useEffect } from 'react';
import 'firebase/auth';
import firebase from 'firebase/compat/app';
import 'firebase/compat/auth';
// import Link from 'next/link';
import { Modal, Button, Form } from 'react-bootstrap';
import axios from 'axios';
import Header from 'no/components/buildingBlocks/Header';
import Footer from 'no/components/buildingBlocks/Footer';
// import Image from 'next/image';
// import payment_img from '../../assets/thank_you101.png';
// import cancelimg from '../../assets/cancel.png';
// import { toast } from 'react-toastify';
import { useRouter } from 'next/router';
import { setUserDetails } from 'no/redux/slices/UserSlice';
// import { setAmountDetails } from 'no/redux/slices/amountSlice';
import { useDispatch, useSelector } from 'react-redux';
// import { CartSliceData } from 'no/redux/slices/CartSlice';
// import { deleteUserAddress } from 'no/redux/slices/UserSlice';
// import { setUserDetails } from 'no/redux/slices/UserSlice';


import { Container, Row, Col } from 'react-bootstrap';
import Nav from 'react-bootstrap/Nav';
import Link from 'next/link';



function ShoppingCart() {
  const router = useRouter();
  const [showReviewModal, setReviewShowModal] = useState(false);
  const dispatch = useDispatch();

  const userSliceData: any = useSelector<any>((state) => state?.user);

  //   const amountSliceData: any = useSelector<any>((state) => state?.amount);

  const [states, setStates] = useState([]);

  const [selectedState, setSelectedState] = useState<any>('');


  const shippingAddressOption = userSliceData?.address?.filter(
    (item: any) => item?.type === 'shipping'
  );
  const billingAddressOption = userSliceData?.address?.filter(
    (item: any) => item?.type === 'billing'
  );



  const [charges, setCharges] = useState();

  const [headerKey, setHeaderKey] = useState(0);






  console.log(
    '🚀 ~ file: index.tsx:27 ~ ShoppingCart ~ userSliceData:',
    userSliceData
  );



  const [cardData, setCardData] = useState([]);

  const [quantities, setQuantities] = useState<number[]>([]);

  const [activeStep, setActiveStep] = useState(0);

  const [token, setToken] = useState('');
  console.log(token, 'token');

  const [email, setEmail] = useState('');
  const [password, setPassword] = useState('');

  const [carts, setCarts] = useState(null);
  console.log(setCarts)
  console.log('🚀 ~ file: index.tsx:50 ~ ShoppingCart ~ carts:', carts);


  const addressDeliveryData = localStorage.getItem('addressDeliveryData');
  const parsedAddressUser = addressDeliveryData && addressDeliveryData !== 'undefined' ? JSON.parse(addressDeliveryData) : null;
  const [addressUser, setAddressUser] = useState<any>(parsedAddressUser);

  const billingAddressData = localStorage.getItem('billingAddressData');
  const parsedBillingAddress = billingAddressData && billingAddressData !== 'undefined' ? JSON.parse(billingAddressData) : null;

  const [billingAddress, setBillingAddress] =
    useState<any>(parsedBillingAddress);

  const [useDeliveryAddress, setUseDeliveryAddress] = useState(false);
  const [addresserName, setAddresserName] = useState(null);




  console.log(addresserName, 'h');

  const [paymentMethod, setPaymentMethod] = useState('BANKWIRE_TRANSFER');
  const [orderData, setOrderData] = useState();
  console.log(orderData, 'o');

  // const [addressContact,setAddressContact]=useState()

  const [emailError, setEmailError] = useState('');
  const [passwordError, setPasswordError] = useState('');





  const [formErrors, setFormErrors] = useState<any>({});

  const [addressData, setAddressData] = useState<any>({
    type: 'shipping',
    zip: '',
    city: '',
    state: '',
    country: '',
    street_address: '',
    firstName: '',
    title: '',
    lastName: '',
    contactNumber: '',
    company: ''
  });

  console.log(addressData, "this is addressData")

  //   const handleAddressChange = (event: any) => {
  //     const { name, value } = event.target;
  //     if (name === 'type') {
  //       setAddressData((prevState: any) => ({
  //         ...prevState,
  //         type: value,
  //       }));
  //     } else {
  //       const updatedAddressData = { ...addressData };
  //       updatedAddressData[name] = value;
  //       setAddressData(updatedAddressData);
  //     }

  //     if (name === 'country') {
  //       const selectedCountry:any = filteredCountries.find(
  //         (country: any) => country.name === value
  //       );
  //       if (selectedCountry) {
  //         fetchStates(selectedCountry.id);

  //         setAddressData((prevState: any) => ({
  //           ...prevState,
  //           state: '',
  //         }));
  //         setSelectedState('');
  //         console.log(addressData?.state,"addressData?.state")
  //       } else {
  //         setStates([]);
  //         setSelectedState('');
  //         console.log(addressData?.state,"addressData?.state")

  //       }
  //     }

  //     console.log(addressData.state,"mya")
  //     setSelectedState(selectedState);
  //   };

  const handleAddressChange = (event: any) => {
    const { name, value } = event.target;
    console.log("checkaddress", name, value)
     debugger;
    if (name === 'type') {
      setAddressData((prevState: any) => ({
        ...prevState,
     
        type: value
      }))  ;
    } else {
      const updatedAddressData = { ...addressData };
      updatedAddressData[name] = value;
      setAddressData(updatedAddressData);
    }
    debugger;
    if (name === 'country') {
      const selectedCountry: any = filteredCountries.find(
        (country: any) => country.name === value
      );
      if (selectedCountry) {
        fetchStates(selectedCountry.id);
        setAddressData((prevState: any) => ({
          ...prevState,
          state: '',
        }));
        setSelectedState('');
      } else {
        setStates([]);
        setAddressData((prevState: any) => ({
          ...prevState,
          state: '',
        }));
        setSelectedState('');
      }
    } debugger;
  };

  useEffect(() => {
    if (addressData?.state && states.some((state: any) => state.name === addressData.state)) {
      console.log(addressData?.state, 'addy')
      setSelectedState(addressData.state);
    } else {
      setSelectedState('');
    } debugger;
  }, [addressData?.state, states]);



















  const handleAddressSubmit = async (event: any, token: any) => {
    event.preventDefault();
   
    const authToken = token || userSliceData?.token;

    console.log(authToken, "dma")


    if (addressData?.id) {


      setFormErrors({});

      let errors = {};
      if (!addressData?.firstName) {
        errors = { ...errors, firstName: 'First Name is required' };
      }
    /*   if (!addressData?.lastName) {
        errors = { ...errors, lastName: 'Last Name is required' };
      } */
      // if (!addressData?.company) {
      //   errors = { ...errors, company: 'Company Name is required' };
      // }
      if (!addressData?.street_address) {
        errors = { ...errors, street_address: 'Address is required' };
      }
      if (!addressData?.country) {
        errors = { ...errors, country: 'Country Name is required' };
      }
      if (!addressData?.city) {
        errors = { ...errors, city: 'City Name is required' };
      }
      if (!addressData?.zip) {
        errors = { ...errors, zip: 'Zip Code is required' };
      }
      if (!addressData?.title) {
        errors = { ...errors, title: 'Alias is required' };
      }
      if (!addressData?.contactNumber) {
        errors = { ...errors, contactNumber: 'Contact No. is required' };
      }


      const selectedCountry: any = filteredCountries.find(
        (country: any) => country.name === addressData.country
      );

      if (selectedCountry && selectedCountry.need_identification_number === 1 && !addressData.iossNumber) {
        setFormErrors((prevState: any) => ({
          ...prevState,
          iossNumber: 'IOSS Number is required for European country'
        }));
        return;
      }
      // if (!addressData?.state) {
      //   errors = { ...errors, state: 'State is required' };
      // }

      if (!addressData?.contactNumber) {
        errors = { ...errors, contactNumber: 'Contact No. is required' };
      }

      if (Object.keys(errors).length > 0) {
        setFormErrors(errors);
        return;
      }




      try {
        // const storedToken = JSON.parse(localStorage.getItem('tokenData') || 'null') as string | any;
        // const token = storedToken?.token?.token?.token;

        const addressApiPayload = {
          title: addressData?.title,
          type: addressData?.type,
          default: 1,
          address: {
            zip: addressData.zip,
            city: addressData.city,
            // state: addressData.state,
            state: selectedState || addressData?.state,
            country: addressData.country,
            street_address: addressData.street_address,
            firstName: addressData.firstName,
            lastName: addressData?.lastName,
            contactNumber: addressData?.contactNumber,
            company: addressData?.company
          }
        };

        const addressResponse = await axios.put(
          `https://ecomapi.foodnextdoor.shop/address/${addressData.id}`,
          addressApiPayload,
          {
            headers: {
              Accept: 'application/json',
              Authorization: `Bearer ${authToken}`,
              'Content-Type': 'application/json'
            }
          }
        );




        axios.get('https://ecomapi.foodnextdoor.shop/me', {
          headers: {
            Authorization: `Bearer ${authToken}`
          }
        })
          .then((res) => {
            console.log(res?.data, "This is result");

            if (addressData.type === 'shipping') {
              const userData = {
                ...userSliceData,
                shippingAddress: addressResponse.data,
                address: res?.data?.address
              };
              dispatch(setUserDetails(userData));
              localStorage.setItem('UserSliceData', JSON.stringify(userData));
            }
           if (addressData?.type === "billing") {
              const userData = {
                ...userSliceData,
                billingAddress: addressResponse.data,
                address: res?.data?.address
              };
              dispatch(setUserDetails(userData));
              localStorage.setItem('UserSliceData', JSON.stringify(userData));
            }
            // if (addressData.type === 'shipping') {
            //   setAddressUser(addressResponse.data.address);
            //   localStorage.setItem('addressDeliveryData', JSON.stringify(addressResponse.data.address));
            //   const userData = {
            //     ...userSliceData,
            //     shippingAddress: addressResponse.data,
            //     address:res?.data?.address
            //   };
            //   dispatch(setUserDetails(userData));
            //   localStorage.setItem('UserSliceData', JSON.stringify(userData));
            // } else if (addressData.type === 'billing') {
            //   setBillingAddress(addressResponse.data.address);
            //   const userData = {
            //     ...userSliceData,
            //     billingAddress: addressResponse.data,
            //     address:res?.data?.address
            //   };
            //   dispatch(setUserDetails(userData));
            //   localStorage.setItem('UserSliceData', JSON.stringify(userData));
            //   localStorage.setItem('billingAddressData', JSON.stringify(addressResponse.data.address));
            // }
          })
          .catch((error) => {
            console.error('Error:', error);
          });

        setSelectedState('');

        setAddressData({
          id: '',
          title: '',
          type: '',
          zip: '',
          city: '',
          state: '',
          country: '',
          street_address: '',
          firstName: '',
          lastName: '',
          company: '',
          iossNumber: ''
        });

        setReviewShowModal(false);
      } catch (error) {
        console.error('Error updating address:', error);
      }
    }
    else {
      setFormErrors({});

      let errors = {};
      if (!addressData?.firstName) {
        errors = { ...errors, firstName: 'First Name is required' };
      }
      // if (!addressData?.lastName) {
      //   errors = { ...errors, lastName: 'Last Name is required' };
      // }
      // if (!addressData?.company) {
      //   errors = { ...errors, company: 'Company Name is required' };
      // }
      if (!addressData?.street_address) {
        errors = { ...errors, street_address: 'Address is required' };
      }
      if (!addressData?.country) {
        errors = { ...errors, country: 'Country Name is required' };
      }
      if (!addressData?.city) {
        errors = { ...errors, city: 'City Name is required' };
      }
      if (!addressData?.zip) {
        errors = { ...errors, zip: 'Zip Code is required' };
      }
      if (!addressData?.title) {
        errors = { ...errors, title: 'Alias is required' };
      }
      // if (!addressData?.iossNumber) {
      //   errors = { ...errors, iossNumber: 'IOSS Number is required' };
      // }

      const selectedCountry: any = filteredCountries.find(
        (country: any) => country.name === addressData.country
      );

      if (selectedCountry && selectedCountry.need_identification_number === 1 && !addressData.iossNumber) {
        setFormErrors((prevState: any) => ({
          ...prevState,
          iossNumber: 'IOSS Number is required for European country'
        }));
        return;
      }
      // if (!addressData?.state) {
      //   errors = { ...errors, state: 'State is required' };
      // }

      if (!addressData?.contactNumber) {
        errors = { ...errors, contactNumber: 'Contact No. is required' };
      }

      if (Object.keys(errors).length > 0) {
        setFormErrors(errors);
        return;
      }

      const addressApiPayload = {
        title: addressData?.title,
        type: "shipping",
        default: 0,
        address: {
          zip: addressData.zip,
          city: addressData.city,
          // state: addressData.state,
          state: addressData.state || selectedState,
          country: addressData.country,
          street_address: addressData.street_address,
          firstName: addressData.firstName,
          lastName: addressData?.lastName,
          contactNumber: addressData?.contactNumber,
          company: addressData?.company

        }
      };

      try {
        // const storedToken = JSON.parse(
        //   localStorage.getItem('tokenData') || 'null'
        // ) as string | any;
        // const token = storedToken?.token?.token?.token;
        console.log(authToken, "pop")

        const addressResponse = await axios.post(
          'https://ecomapi.foodnextdoor.shop/address',
          addressApiPayload,
          {
            headers: {
              Accept: 'application/json',
              Authorization: `Bearer ${authToken}`,
              'Content-Type': 'application/json'
            }
          }
        );

        if (addressData.type === 'shipping') {
          setAddressUser(addressResponse.data.address);
          localStorage.setItem(
            'addressDeliveryData',
            JSON.stringify(addressResponse.data.address)
          );
          // const userData = {
          //   ...userSliceData,
          //   shippingAddress: addressResponse.data
          // };
          // dispatch(setUserDetails(userData));
          // localStorage.setItem('UserSliceData', JSON.stringify(userData));
        } else if (addressData.type === 'billing') {
          setBillingAddress(addressResponse.data.address);
          // const userData = {
          //   ...userSliceData,
          //   billingAddress: addressResponse.data
          // };
          // dispatch(setUserDetails(userData));
          // localStorage.setItem('UserSliceData', JSON.stringify(userData));
          localStorage.setItem(
            'billingAddressData',
            JSON.stringify(addressResponse.data.address)
          );
        }
 



        axios.get('https://ecomapi.foodnextdoor.shop/me', {
          headers: {
            Authorization: `Bearer ${authToken}`
          }
        })
          .then((res) => {
            console.log(res?.data, "This result");


            if (addressData.type === 'shipping') {
              const userData = {
                ...userSliceData,
                shippingAddress: addressResponse.data,
                address: res?.data?.address
              };
              dispatch(setUserDetails(userData));
              localStorage.setItem('UserSliceData', JSON.stringify(userData));
            }
            if (addressData?.type === "billing") {
              const userData = {
                ...userSliceData,
                billingAddress: addressResponse.data,
                address: res?.data?.address
              };
              dispatch(setUserDetails(userData));
              localStorage.setItem('UserSliceData', JSON.stringify(userData));
            }

          })
          .catch((error) => {
            console.error('Error:', error);
          });

        setSelectedState('')


        setAddressData({
          title: '',
          type: '',
          zip: '',
          city: '',
          state: '',
          country: '',
          street_address: '',
          firstName: '',
          lastName: '',
          company: '',
          iossNumber: '',
          contactNumber: ''
        });

        setReviewShowModal(false);
      } catch (error) {
        console.error('Error saving address:', error);
      }
    }
  };

  //   interface CardData {
  //     product?: {
  //       minimum_quantity?: number;
  //       isMinimumQuantity?:any
  //     };
  //   }

  useEffect(() => {
    localStorage.setItem('addressDeliveryData', JSON.stringify(addressUser));
    localStorage.setItem('billingAddressData', JSON.stringify(billingAddress));
  }, [addressUser, billingAddress]);

  firebase.initializeApp({
    apiKey: 'AIzaSyCxC-X442l27N7tIfwcj08Qj_YT6yEoDZY',
    authDomain: 'myearth-stone-f64f7.firebaseapp.com',
    projectId: 'myearth-stone-f64f7',
    storageBucket: 'myearth-stone-f64f7.appspot.com',
    messagingSenderId: '167097954619',
    appId: '1:167097954619:web:f3e8db90df38a65130c71e',
    measurementId: 'G-Y68DBBBP84'
  });

  const auth = firebase.auth();
  console.log(auth);

  const savedData: any = localStorage.getItem('cardData');



  useEffect(() => {
    if (savedData) {
      const parsedData = JSON.parse(savedData);
      setCardData(parsedData);
      const initialQuantities = parsedData.map(
        (item: any) => item.product?.minimum_quantity
      );


      setQuantities(initialQuantities);
    }
  }, [savedData]);















  useEffect(() => {
    const savedData = userSliceData?.token;
    if (savedData) {
      // const parsedData = JSON.parse(savedData);
      const storedToken = userSliceData?.token;
      if (storedToken) {
        setToken(storedToken);
        // setActiveStep(2);
        setActiveStep(0)
      }
    }
    console.log(savedData, 'tokenItems');
  }, []);





  const isUserSignedIn = () => {
    const tokenData = userSliceData?.token
    return tokenData !== null;
  };

  const storedToken = JSON.parse(
    localStorage.getItem('tokenData') || 'null'
  ) as string | any;

  console.log(storedToken, 'datacart');























  const handleShowdModal = (isUpdate: any) => {

    if (!isUpdate) {
      setAddressData({
        id: '',
        title: '',
        type: 'shipping',
        firstName: '',
        lastName: '',
        company: '',
        street_address: '',
        country: '',
        city: '',
        zip: '',
        iossNumber: '',
        state: '',
        contactNumber: ''
      });
    }

    setReviewShowModal(true);
  };


  const handleClosedModal = () => {
    setReviewShowModal(false);
  };



















  useEffect(() => {
    setSelectedState(addressData.state);
  }, [addressData.state]);


  console.log(addressData?.state, "addressData?.state")





  //   const fetchStates = async (countryId:any) => {
  //     try {
  //       const response = await axios.get(
  //         `https://ecomapi.foodnextdoor.shop/states?country_id=${countryId}`
  //       );
  //       setStates(response.data);



  //       setAddressData((prevState:any) => ({
  //         ...prevState,
  //         state: selectedState
  //       }));
  //     } catch (error) {
  //       console.error('Error fetching states:', error);
  //     }
  //   };

  const fetchStates = async (countryId: any) => {
    try {
      const response = await axios.get(
        `https://ecomapi.foodnextdoor.shop/states?country_id=${countryId}`
      );
      setStates(response.data);


      if (addressData?.state && response.data.some((state: any) => state.name === addressData.state)) {
        setSelectedState(addressData.state);
      } else {
        setSelectedState('');
      }



      // setAddressData((prevState:any) => ({
      //   ...prevState,
      //   state: selectedState
      // }));

    } catch (error) {
      console.error('Error fetching states:', error);
    }
  };



  const [countries, setCountries] = useState([]);
  const [filteredCountries, setFilteredCountries] = useState([]);


  useEffect(() => {
    const fetchCountries = async () => {
      try {
        const response = await axios.get('https://ecomapi.foodnextdoor.shop/countries');
        setCountries(response.data);
        setFilteredCountries(response.data);
        setHeaderKey(headerKey + 1)
      } catch (error) {
        console.error('Error fetching countries:', error);
      }
    };

    fetchCountries();
  }, []);


  const handleSearch = (event: any) => {
    const query = event.target.value.toLowerCase();
    const filtered = countries.filter((country: any) =>
      country.name.toLowerCase().includes(query)
    );
    setFilteredCountries(filtered);
  };

  console.log(handleSearch)

















  const isCartEmpty: any =
    cardData?.length === 0 || !cardData.some((item: any) => item.product);



  //   const updateAddressData = (type:any) => {
  //     console.log(userSliceData?.shippingAddress?.address, "userSliceDataaddress");







  //     let data:any = {};
  //     if (type === "shipping") {
  //       data = {
  //         ...userSliceData?.shippingAddress?.address,
  //         id: userSliceData?.shippingAddress?.id,
  //         type: userSliceData?.shippingAddress?.type,
  //         title: userSliceData?.shippingAddress?.title
  //       };
  //       if (data.country) {
  //         const selectedCountry:any = filteredCountries.find(
  //           (country:any) => country.name === data.country
  //         );
  //         if (selectedCountry) {
  //           if (selectedCountry.contains_states === 1) {
  //             fetchStates(selectedCountry.id);
  //           } else {
  //             setStates([]);
  //             if (!selectedCountry.contains_states) {
  //               data.state = "";
  //             }
  //           }
  //         } else {
  //           setStates([]);
  //           data.state = "";
  //         }
  //       }
  //     }

  //     if (type === "billing") {
  //       data = {
  //         ...userSliceData?.billingAddress?.address,
  //         id: userSliceData?.billingAddress?.id,
  //         type: userSliceData?.billingAddress?.type,
  //         title: userSliceData?.billingAddress?.title
  //       };
  //       if (data.country) {
  //         const selectedCountry:any = filteredCountries.find(
  //           (country:any) => country.name === data.country
  //         );
  //         if (selectedCountry) {
  //           if (selectedCountry.contains_states === 1) {
  //             fetchStates(selectedCountry.id);
  //           } else {
  //             setStates([]);
  //             if (!selectedCountry.contains_states) {
  //               data.state = "";
  //             }
  //           }
  //         } else {
  //           setStates([]);
  //           data.state = "";
  //         }
  //       }
  //     }

  //     setAddressData(data);


  //   };



  const updateAddressData = (type: any) => {
    console.log(userSliceData?.shippingAddress?.address, "userSliceDataaddress");
debugger;




    let data: any = {};
    if (type === "shipping") {
      data = {
        ...userSliceData?.shippingAddress?.address,
        id: userSliceData?.shippingAddress?.id,
        type: userSliceData?.shippingAddress?.type,
        title: userSliceData?.shippingAddress?.title,
        state: userSliceData?.shippingAddress?.address?.state || '',
      };
      if (data.country) {
        const selectedCountry: any = filteredCountries.find(
          (country: any) => country.name === data.country
        );
        if (selectedCountry) {
          if (selectedCountry.contains_states === 1) {
            fetchStates(selectedCountry.id);
          } else {
            setStates([]);
            if (!selectedCountry.contains_states) {
              data.state = "";
            }
          }
        } else {
          setStates([]);
          data.state = "";
        }
      }
    }

    if (type === "billing") {
      data = {
        ...userSliceData?.billingAddress?.address,
        id: userSliceData?.billingAddress?.id,
        type: userSliceData?.billingAddress?.type,
        title: userSliceData?.billingAddress?.title,
        state: userSliceData?.billingAddress?.address?.state || '',
      };
      if (data.country) {
        const selectedCountry: any = filteredCountries.find(
          (country: any) => country.name === data.country
        );
        if (selectedCountry) {
          if (selectedCountry.contains_states === 1) {
            fetchStates(selectedCountry.id);
          } else {
            setStates([]);
            if (!selectedCountry.contains_states) {
              data.state = "";
            }
          }
        } else {
          setStates([]);
          data.state = "";
        }
      }
    } 
    setAddressData(data);
    // setSelectedState(data.state);


  };


  const ordersShow = useSelector((state: any) => state.user?.token);


  useEffect(() => {
    const delay = 1000;

    const redirectTimeout = setTimeout(() => {
      if (!ordersShow) {
        router.push('/login');
      } else {
        router.push('/myaddress');
      }
    }, delay);


    return () => clearTimeout(redirectTimeout);
  }, [ordersShow]);



  //   const handleDeleteAddress = async (addressId:any, token:any) => {
  //     const token1 = userSliceData?.token || token;

  //     try {
  //       await axios.delete(`https://ecomapi.foodnextdoor.shop/address/${addressId}`, {
  //         headers: {
  //           Authorization: `Bearer ${token1}`,
  //           'Content-Type': 'application/json',
  //         },
  //       });

  //       const updatedShippingAddress =
  //         userSliceData.shippingAddress && userSliceData.shippingAddress.id === addressId
  //           ? null
  //           : userSliceData.shippingAddress;

  //       const updatedBillingAddress =
  //         userSliceData.billingAddress && userSliceData.billingAddress.id === addressId
  //           ? null
  //           : userSliceData.billingAddress;

  //       const updatedAddresses = userSliceData.address.filter((address:any) => address.id !== addressId);


  //       const updatedUserSliceData = {
  //         ...userSliceData,
  //         shippingAddress: updatedShippingAddress,
  //         billingAddress: updatedBillingAddress,
  //         address: updatedAddresses,
  //       };

  //       console.log(updatedUserSliceData,"updatedUserSliceData")

  //       dispatch(setUserDetails(updatedUserSliceData));

  //       console.log('Address deleted successfully', updatedUserSliceData);


  //       await axios.get('https://ecomapi.foodnextdoor.shop/me', {
  //         headers: {
  //           Authorization: `Bearer ${token1}`,
  //         },
  //       })
  //         .then(res => {
  //           console.log(res?.data, "This is result");


  //           let userData = { ...updatedUserSliceData };
  //           if (addressData.type === 'shipping') {
  //             userData = {
  //               ...userData,
  //               shippingAddress: res?.data?.address
  //             };
  //           } else if (addressData.type === 'billing') {
  //             userData = {
  //               ...userData,
  //               billingAddress: res?.data?.address
  //             };
  //           }

  //           dispatch(setUserDetails(userData));
  //           localStorage.setItem('UserSliceData', JSON.stringify(userData));
  //         })
  //         .catch(error => {
  //           console.error('Failed to fetch updated user data', error);
  //         });
  //     } catch (error) {
  //       console.error('Failed to delete address', error);
  //     }
  //   };



  const handleDeleteAddress = async (addressId: any, token: any) => {
    const token1 = userSliceData?.token || token;

    try {
      await axios.delete(`https://ecomapi.foodnextdoor.shop/address/${addressId}`, {
        headers: {
          Authorization: `Bearer ${token1}`,
          'Content-Type': 'application/json',
        },
      });

      let updatedUserSliceData = { ...userSliceData };


      if (
        updatedUserSliceData.shippingAddress &&
        updatedUserSliceData.shippingAddress.id === addressId
      ) {
        updatedUserSliceData.shippingAddress = null;
      }

/* 
      if (
        updatedUserSliceData.billingAddress &&
        updatedUserSliceData.billingAddress.id === addressId
      ) {
        updatedUserSliceData.billingAddress = null;
      }
 */
      updatedUserSliceData.address = updatedUserSliceData.address.filter(
        (address: any) => address.id !== addressId
      );

      console.log(updatedUserSliceData, "updatedUserSliceData");

      dispatch(setUserDetails(updatedUserSliceData));

      console.log('Address deleted successfully', updatedUserSliceData);


      await axios
        .get('https://ecomapi.foodnextdoor.shop/me', {
          headers: {
            Authorization: `Bearer ${token1}`,
          },
        })
        .then((res) => {
          console.log(res?.data, "This is result");

          const userData = { ...updatedUserSliceData };


          if (
            userSliceData.shippingAddress &&
            userSliceData.shippingAddress.id === addressId
          ) {
            userData.shippingAddress = res?.data?.address.find(
              (address: any) => address.type === 'shipping'
            );
          }

         /*  if (
            userSliceData.billingAddress &&
            userSliceData.billingAddress.id === addressId
          ) {
            userData.billingAddress = res?.data?.address.find(
              (address: any) => address.type === 'billing'
            );
          } */

          updatedUserSliceData = userData;

          dispatch(setUserDetails(userData));
          localStorage.setItem('UserSliceData', JSON.stringify(userData));
        })
        .catch((error) => {
          console.error('Failed to fetch updated user data', error);
        });


      console.log(updatedUserSliceData.address);

    } catch (error) {
      console.error('Failed to delete address', error);
    }
  };
















  const filterAddress = (event: any, type: any) => {
    console.log(event?.target?.value, "event")
  
    const id = event?.target?.value
    if (type === "shipping") {
      const filterShippingAddresByTitle = userSliceData?.address?.filter((item: any) => {
        console.log(item, "this is item")
        return item?.id == id && item?.type === "shipping"
      })
      dispatch(setUserDetails({
        ...userSliceData,
        shippingAddress: filterShippingAddresByTitle[0]
      }))


    }
   /*  if (type === "billing") {
      const filterBillingAddresByTitle = userSliceData?.address?.filter((item: any) => {
        console.log(item, "this is item")
        return item?.id == id && item?.type === "billing"
      })
      console.log(filterBillingAddresByTitle, "filterBillingAddresByTitle")
      dispatch(setUserDetails({
        ...userSliceData,
        billingAddress: filterBillingAddresByTitle[0]
      }))
    } */
  }

  console.log(charges, setCharges, quantities, activeStep, email, password, setEmail, setPassword, useDeliveryAddress, setUseDeliveryAddress, setAddresserName, paymentMethod);
  console.log(setPaymentMethod, setOrderData, emailError, setEmailError, passwordError, setPasswordError, cardData, isUserSignedIn, isCartEmpty)


  const handleLogout = () => {
    localStorage.clear();

    router.push('/');
  };


  return (
    <>
      <Header key={headerKey} />


      <Container>
        <Row className="justify-content-center mb-5">

          {showReviewModal && (
            <>
              <div></div>
              <Modal
                show={showReviewModal}
                onHide={handleClosedModal}
                size="lg"
                className="review-modal"
              >
                <Modal.Header closeButton>
                  <Modal.Title id="review-modal-title">
                    Your Address Details
                  </Modal.Title>
                </Modal.Header>
                <Modal.Body className='p-4 px-md-5 mt-2 modal-body'>
                  <Form onSubmit={(event) => handleAddressSubmit(event, token)} className='addaddress-popup row'>
                    <div className='col-12'>


{/* 
                      <select
                        name="type"
                        value={addressData?.type}
                        onChange={handleAddressChange}
                        className="cart-address-label form-control icon"

                      >
                        <option value="billing">Billing</option>
                        <option value="shipping">Shipping</option>
                      </select> */}
                    </div>





                    <Form.Group controlId="" className="form-group col-md-6">
                      <Form.Label>First Name*</Form.Label>
                      <Form.Control
                        type="text"
                        placeholder="Enter your first name"
                        value={addressData?.firstName}
                        onChange={handleAddressChange}
                        name="firstName"
                        isInvalid={formErrors?.firstName}
                      />
                      {formErrors.firstName && (
                        <Form.Control.Feedback type="invalid">
                          {formErrors?.firstName}
                        </Form.Control.Feedback>
                      )}
                    </Form.Group>
                    <Form.Group controlId="" className="form-group col-md-6">
                      <Form.Label>Last Name</Form.Label>
                      <Form.Control
                        type="text"
                        placeholder="Enter your last name"
                        value={addressData?.lastName}
                        onChange={handleAddressChange}
                        name="lastName"
                        isInvalid={formErrors?.lastName}
                      />
                      {formErrors.lastName && (
                        <Form.Control.Feedback type="invalid">
                          {formErrors?.lastName}
                        </Form.Control.Feedback>
                      )}
                    </Form.Group>

                    <Form.Group controlId="" className="form-group col-md-6">
                      <Form.Label>Company</Form.Label>
                      <Form.Control
                        type="text"
                        placeholder="Enter your company name"
                        value={addressData?.company}
                        onChange={handleAddressChange}
                        name="company"
                        // isInvalid={formErrors?.company}
                      />
                      {/* {formErrors.company && (
                        <Form.Control.Feedback type="invalid">
                          {formErrors?.company}
                        </Form.Control.Feedback>
                      )} */}
                    </Form.Group>

                    <Form.Group controlId="" className="form-group col-md-6">
                      <Form.Label>Address*</Form.Label>
                      <Form.Control
                        type="text"
                        placeholder="Enter your address"
                        value={addressData?.street_address}
                        onChange={handleAddressChange}
                        name="street_address"
                        isInvalid={formErrors?.street_address}
                      />
                      {formErrors.street_address && (
                        <Form.Control.Feedback type="invalid">
                          {formErrors?.street_address}
                        </Form.Control.Feedback>
                      )}
                    </Form.Group>



                    <Form.Group controlId="" className="form-group col-md-4">
                      <Form.Label>Country*</Form.Label>
                      <Form.Control
                        as="select"
                        value={addressData?.country}
                        onChange={handleAddressChange}
                        name="country"
                      // onKeyUp={handleSearch}
                      >
                        <option value="">Choose your country</option>
                        {filteredCountries
                          .slice()
                          .sort((a: any, b: any) => a.name.localeCompare(b.name))
                          .map((country: any) => (
                            <option key={country.id} value={country.name}>
                              {country.name}
                            </option>
                          ))}
                      </Form.Control>
                      {formErrors.country && (
                        <div className="error" style={{ color: 'red' }}>
                          {formErrors.country}
                        </div>
                      )}
                    </Form.Group>




                    {filteredCountries.some(
                      (country: any) =>
                        country.name === addressData.country && country.contains_states === 1
                    ) ? (
                      <Form.Group controlId="" className="form-group col-md-4">
                        <Form.Label>State</Form.Label>
                        <Form.Control
                          as="select"
                          value={selectedState}
                          onChange={(event) => {
                            setSelectedState(event.target.value);
                            setAddressData((prevState: any) => ({
                              ...prevState,
                              state: event.target.value,
                            }));
                          }}
                          name="state"
                        >
                          <option value="">Choose your state</option>
                          {/* {states.map((state: any) => (
        <option
          key={state.id}
          value={state.name}
          selected={state.name === addressData.state}
        >
          {state.name}
        </option>
      ))} */}


                          {states
                            .slice()
                            .sort((a: any, b: any) => a.name.localeCompare(b.name))
                            .map((state: any) => (
                              <option
                                key={state.id}
                                value={state.name}
                                selected={state.name === addressData.state}
                              >
                                {state.name}
                              </option>
                            ))}
                        </Form.Control>
                      </Form.Group>
                    ) : null}



                    <Form.Group controlId="" className="form-group col-md-4">
                      <Form.Label>City</Form.Label>
                      <Form.Control
                        type="text"
                        placeholder="Enter your city"
                        value={addressData?.city}
                        onChange={handleAddressChange}
                        name="city"
                        isInvalid={formErrors?.city}
                      />
                      {formErrors.city && (
                        <Form.Control.Feedback type="invalid">
                          {formErrors?.city}
                        </Form.Control.Feedback>
                      )}
                    </Form.Group>

                    <Form.Group controlId="" className="form-group col-md-4">
                      <Form.Label>Zip / Postal Code*</Form.Label>
                      <Form.Control
                        type="text"
                        placeholder="Enter your zip code"
                        value={addressData?.zip}
                        onChange={handleAddressChange}
                        name="zip"
                        isInvalid={formErrors?.zip}
                      />
                      {formErrors.zip && (
                        <Form.Control.Feedback type="invalid">
                          {formErrors?.zip}
                        </Form.Control.Feedback>
                      )}
                    </Form.Group>

                    <Form.Group controlId="" className="form-group col-md-6">
                      <Form.Label>IOSS Number <span className='text-14'>(*Required for European country)</span></Form.Label>
                      <Form.Control
                        type="text"
                        placeholder="Enter your IOSS number"
                        value={addressData?.iossNumber}
                        onChange={handleAddressChange}
                        name="iossNumber"
                        isInvalid={formErrors?.iossNumber}
                      />
                      {formErrors.iossNumber && (
                        <Form.Control.Feedback type="invalid">
                          {formErrors?.iossNumber}
                        </Form.Control.Feedback>
                      )}
                    </Form.Group>



                    <Form.Group controlId="" className="form-group col-md-6">
                      <Form.Label>Additional information</Form.Label>
                      <Form.Control type="text" placeholder="" />
                    </Form.Group>

                    <Form.Group controlId="" className="form-group col-md-6">
                      <Form.Label>Contact Number*</Form.Label>
                      <Form.Control
                        type="number"
                        placeholder="Enter your contact number"
                        value={addressData?.contactNumber}
                        onChange={handleAddressChange}
                        name="contactNumber"
                        isInvalid={formErrors?.contactNumber}
                      />
                      {formErrors.contactNumber && (
                        <Form.Control.Feedback type="invalid">
                          {formErrors.contactNumber}
                        </Form.Control.Feedback>
                      )}



                      {addressData?.contactNumber && addressData.contactNumber.length > 10 && !formErrors.contactNumber && (
                        <div className="error" style={{ color: 'red', fontSize: '.875em' }}>
                          Phone number cannot be greater than 10 digits.
                        </div>
                      )}
                    </Form.Group>
                    <Form.Group controlId="" className="form-group col-md-12">
                      <Form.Label>Assign an address alias for future reference *</Form.Label>
                      <Form.Control
                        type="text"
                        placeholder="Enter your alias"
                        value={addressData?.title}
                        onChange={handleAddressChange}
                        name="title"
                        isInvalid={formErrors?.title}
                      />
                      {formErrors.title && (
                        <Form.Control.Feedback type="invalid">
                          {formErrors?.title}
                        </Form.Control.Feedback>
                      )}

                    </Form.Group>

                    <Form.Group className="mb-3" style={{ marginTop: '20px' }}>
                      <Button type="submit" variant="theme">
                        Submit
                      </Button>
                      <Link href='/myaddress' onClick={()=>setReviewShowModal(false)}>
                      <Button
                        type="button"
                        variant="theme-outline"
                        className="ms-4"
                      >
                        Back
                      </Button>
                      </Link>
                    </Form.Group>
                  </Form>
                </Modal.Body>
              </Modal>
            </>
          )}
          <Col lg={11}>{
            ordersShow ? (
              <div className="myaccount-wrap mt-4 pt-2">
                <Row className="gx-0">
                  <Col className="myacc-sidebar">
                    <h2 className="myacc-heading">My Account</h2>
                    <Nav
                      defaultActiveKey="/myaddress"
                      className="flex-column"
                    >
                      <Nav.Link href="/myorders">
                        <i className="fa-light fa-receipt"></i>My Orders
                      </Nav.Link>
                      <Nav.Link href="/myaddress">
                        <i className="fa-light fa-address-book"></i>My Addresses
                      </Nav.Link>
                      <Nav.Link href="/personalInfo">
                        <i className="fa-light fa-circle-info"></i>My Personal
                        Information
                      </Nav.Link>
                      <Nav.Link href="/myvoucher">
                        <i className="fa-light fa-gift"></i>My Vouchers
                      </Nav.Link>
                      <Nav.Link href="/wishlist">
                        <i className="fa-light fa-heart"></i>My Wishlist
                      </Nav.Link>
                      {/* <Nav.Link href="/requestquote">
                        <i className="fa-sharp fa-light fa-message-quote"></i>
                        Request A Quote
                      </Nav.Link> */}
                      <Nav.Link href="/changepassword">
                        <i className="fa-light fa-key"></i>Change Password
                      </Nav.Link>
                      <Nav.Link href="/customerEnquiry">
                      <i className="fa-light fa-key"></i>Customer Enquiry
                    </Nav.Link>
                      <Nav.Link href="/" onClick={handleLogout}>
                        <i className="fa-light fa-power-off"></i>Logout
                      </Nav.Link>
                    </Nav>
                  </Col>

                  <Col className="myacc-rightside ps-5">
                    <h2 className="myacc-page-title">My Addresses</h2>
                    <div className="myaccount-content">
                      <p>
                        Please configure your default billing and delivery
                        addresses when placing an order. You may also add
                        additional addresses, which can be useful for sending
                        gifts or receiving an order at your office. Be sure to
                        update your personal information if it has changed.
                      </p>



                      {Object.keys(userSliceData || {}).length > 0 && (
                        <>

                      {/*     <div className="col-md-6">
                            <select
                              name=""
                              id=""
                              className="cart-address-label form-control icon"
                              onChange={(event: any) => filterAddress(event, "shipping")}
                              value={userSliceData?.shippingAddress?.id}
                            >
                          
                              {shippingAddressOption?.map((item: any) => {
                                return (
                                  <option key={item?.id} value={item?.id}>
                                    {item?.title}
                                  </option>
                                );
                              })}
                            </select>
                          </div> */}
                          {userSliceData?.address?.map((item: any) => {
                              console.log(item, "this us item")
                              return <div className="cart-address-item bg-light mt-4">
                          <Row className="gx-0">
                              <Col lg={8} className="">
                                <div className="col-md-6">
                                  <div className="">
                                    <h4>{item.title}</h4>
                                    <p>
                                      {item.address?.firstName} {item.address?.lastName}
                                    </p>
                                    <p>{item.address?.street_address}</p>
                                    <p>{item.address?.zip}</p>
                                    <p>
                                      {item.address?.state &&
                                        `${item.address?.state}, `}
                                      {item.address?.country}
                                    </p>
                                  </div>
                                </div>
                              </Col>
                              <Col lg={4} className="address-buttons text-end">
                                <a href="#" className="btn-theme-outline btn-sm position-static me-3" onClick={() => {
                                  updateAddressData("shipping");
                                  handleShowdModal('true');
                                }}>
                                  Update
                                </a>
                                <a
                                  href="#"
                                  className="btn-theme-outline outline-grey btn-sm position-static"
                                  onClick={() => handleDeleteAddress(userSliceData?.shippingAddress?.id, token)}
                                >
                                  Delete
                                </a>
                              </Col>
                            </Row>
                           
                             
                           
                              </div>
                               })}
                        </>
                      )}

                      {userSliceData?.billingAddress &&
                        <>
                          <div className="col-md-6">
                        {/*     {billingAddressOption?.length > 0 ? (
                              <select
                                name=""
                                id=""
                                className="cart-address-label form-control icon"
                                onChange={(event: any) => filterAddress(event, "billing")}
                                // value={userSliceData?.billingAddress?.id}
                                value={userSliceData?.billingAddress?.id}
                              >
                                {billingAddressOption?.map((item: any) => (
                                  <option key={item?.id} value={item?.id}>
                                    {item?.title}
                                  </option>
                                ))}
                              </select>
                            ) : null} */}
                        </div>
                        {Array.isArray(userSliceData?.billingAddress) &&userSliceData?.billingAddress?.map((item: any) => {
                          console.log(item, "this us itemmmmm")
                          return  <div className="cart-address-item bg-light mt-4">
                            <Row className="gx-0">
                              <Col lg={8} className="">
                                {userSliceData?.billingAddress && (
                                  <div className="">
                                    <h4>Billing Address</h4>
                                    <p>
                                      {userSliceData?.billingAddress?.address?.firstName} {userSliceData?.billingAddress?.address?.lastName}
                                    </p>
                                    <p>
                                      {
                                        userSliceData?.billingAddress?.address
                                          ?.street_address
                                      }
                                    </p>
                                    <p>{userSliceData?.billingAddress?.address?.zip}</p>
                                    {/* <p>
                              {userSliceData?.billingAddress?.address?.state},{' '}
                              {userSliceData?.billingAddress?.address?.country}
                            </p> */}
                                    <p>
                                      {userSliceData?.billingAddress?.address?.state &&
                                        `${userSliceData?.billingAddress?.address?.state}, `}
                                      {userSliceData?.billingAddress?.address?.country}
                                    </p>


                                  </div>
                                )}
                              </Col>
                              <Col lg={4} className="address-buttons text-end">
                                <a href="#" className="btn-theme-outline btn-sm position-static me-3" onClick={() => {
                                  updateAddressData("shipping")
                                  handleShowdModal('true')
                                }}>
                                  Update
                                </a>
                                <a
                                  href="#"
                                  className="btn-theme-outline outline-grey btn-sm position-static"
                                  onClick={() => handleDeleteAddress(userSliceData?.billingAddress?.id, token)}
                                >
                                  Delete
                                </a>
                              </Col>












                            </Row>
                          </div>
                        })
}
                        </>
                      }









                      <Form.Group className="form-group buttons mt-5">
                        <Button
                          onClick={() => {
                            handleShowdModal(false);
                          }}
                          type="submit"
                          variant="theme-outline"
                          className="me-4"
                        >
                          <i className="fa-sharp fa-solid fa-plus me-2 text-16"></i>
                          Add New Address
                        </Button>
                        <Link href='/home'>
                        <Button type="button" variant="theme-outline">
                          Home
                        </Button>
                        </Link>
                      </Form.Group>



                    </div>
                  </Col>
                </Row>
              </div>
            ) : (
              <p>No Address found</p>
            )
          }

          </Col>
        </Row>
      </Container>




















      <Footer />
    </>
  );
}

export default ShoppingCart;
Editor is loading...
Leave a Comment