Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import React, { useEffect, useState } from 'react';
- import Diamond from './images/diamond.png';
- import Script from './images/script.png';
- import Calendar from './images/calendar.png';
- import Takeoutbag from './images/takeout-bag.png';
- import Glowimg from './images/glowimage.png';
- import Glowimg1 from './images/glowimg3.png';
- import Glowimg2 from './images/glowimage2.png';
- import { BrowserPersistence } from '@magento/peregrine/lib/util';
- import { storeListBasedOnPincode } from '../../../../reducers/CustomReducer';
- import { useDispatch, useSelector } from 'react-redux';
- import { useQuery, gql } from '@apollo/client';
- import { useWindowSize } from '@magento/peregrine';
- import { Link, useHistory } from 'react-router-dom';
- import try_at_store from './images/try_our_store_mob.jpg';
- const storage = new BrowserPersistence();
- import apiClient from '../../../../api';
- const GET_PRODUCT_AVAILABLE_STORE = gql`
- query getProducts($key: String!, $sku: String!) {
- products(
- {/* filter: { is_outlet_available: { in: [$key] }, sku: { in: [$sku] } } */}
- filter: { is_outlet_available: { in: [3||5] }, sku: { in: [$sku] } }
- ) {
- items {
- sku
- uid
- name
- }
- }
- }
- `;
- const TryAtHome = ({ sku, pincode, handlePincode }) => {
- const items = storage.getItem('try_at_store') || [];
- const [isAdded, setIsAdded] = useState(items?.includes(sku) || false);
- const dispatch = useDispatch();
- const [isGetStores, setIsGetStores] = useState(false);
- const history = useHistory();
- const { storesList, storeUserInfo } = useSelector(state => state.custom);
- const windowSize = useWindowSize();
- const isMobile = windowSize.innerWidth <= 640;
- const handleAdd = () => {
- storage.setItem('try_at_home', items.concat([sku]), null);
- setIsAdded(storage.getItem('try_at_home').includes(sku));
- history.push('/try-at-home/cart');
- };
- useEffect(() => {
- if (pincode) {
- dispatch(storeListBasedOnPincode(pincode));
- }
- }, [pincode]);
- const [banners, setBanners] = useState([]);
- useEffect(() => {
- getBanners();
- }, []);
- const getBanners = async () => {
- try {
- const response = await apiClient.get(apiClient.Urls.getSlider, {
- identifier: 'try_at_store_pdp'
- });
- if (response.success) {
- setBanners(response.data[0]);
- }
- } catch (error) {
- console.log('error', error);
- }
- };
- var ids = '';
- storesList &&
- storesList.forEach(i => {
- ids =
- ids && ids.length > 0
- ? i.outlet_filter_id + ',' + ids
- : i.outlet_filter_id;
- });
- const { error, loading, data, refetch } = useQuery(
- GET_PRODUCT_AVAILABLE_STORE,
- {
- fetchPolicy: 'cache-and-network',
- nextFetchPolicy: 'cache-first',
- skip: !ids,
- variables: {
- key: ids,
- sku: sku
- }
- }
- );
- const [available, setAvailable] = useState(
- data?.products?.items?.length > 0 ? true : false
- );
- const handleCheck = () => {
- dispatch(storeListBasedOnPincode(pincode));
- storesList &&
- storesList.forEach(i => {
- ids = i.outlet_filter_id + ',' + ids;
- });
- refetch();
- if (data?.products?.items?.length > 0) {
- setAvailable(true);
- } else {
- setAvailable(false);
- }
- };
- if (isMobile) {
- return (
- <div class="rounded-lg m-[1rem] flex flex-col items-center bg-[#9D8D7A] p-[1rem] mt-[4rem]">
- <div class="flex flex-col m-2 px-8 py-2 items-center text-center">
- <h1 class="text-2xl text-[#FFF] font-ivyModeRegular"
- dangerouslySetInnerHTML={{
- __html: banners && banners.slide_title
- }} />
- {/* <p class="text-sm text-[#FFF] font-lato">
- Lorem ipsum dolor sit amet, consetetur sadipscing elitr,
- sed diam nonumy eirmod Lorem ipsum dolor sit amet
- </p> */}
- </div>
- <div class="flex items-center flex-col pb-4">
- <img src={banners.slide_image_mobile} alt="Glowimg1" className="w-[85%]" />
- <div className="mb-[15px]">
- <div className="flex flex-col mt-4"
- dangerouslySetInnerHTML={{
- __html: banners && banners.slide_text
- }}
- />
- {/* <div class=" flex flex-col mt-4 items-center">
- <h1 class=" text-2xl text-3xl text-[#FFFFFF] font-ivyModeRegular">
- Try At Store
- </h1>
- <p class=" text-sm text-sm mt-2 text-[#FFFFFF] font-lato">
- Experience our jewellery before you buy it. Try
- it at the nearest store.
- </p>
- </div> */}
- {/* <div class=" flex flex-row flex flex-row items-center mt-4">
- <img src={Diamond} alt="Diamond" className='w-1/4' />
- <div class=" flex flex-col">
- <h1 class=" text-sm text-base text-[#FFFFFF]">Try This Jewellery At Your Home.</h1>
- <p class=" text-sm mt-2 text-[#FFFFFF] font-lato">
- Lorem ipsum dolor sit amet, consetetur
- </p>
- </div>
- </div> */}
- {/* <div class=" flex flex-row flex flex-row items-center mt-4">
- <img src={Script} alt="Diamond" className='w-1/4' />
- <div class=" flex flex-col">
- <h1 class=" text-sm text-base text-[#FFFFFF]">Visit a store to put on your glow{' '}</h1>
- <p class=" text-sm mt-2 text-[#FFFFFF] font-lato">
- Lorem ipsum dolor sit amet, consetetur
- </p>
- </div>
- </div> */}
- <div class="mt-[15px] flex flex-col items-center justify-center">
- <div className="bg-[#fff] pr-2 rounded mt-[20px] w-full">
- <input
- autoComplete="pincode"
- field="pincode"
- id="pincode"
- className="h-[40px] px-[10px] text-[16px] rounded h-[50px] w-[100%]"
- value={pincode}
- placeholder="Enter Pin Code"
- onChange={e => {
- handlePincode(e.target.value);
- storage.setItem(
- 'pin_code',
- e.target.value,
- null
- );
- }}
- />
- </div>
- <div onClick={() => {
- dispatch(storeListBasedOnPincode(pincode));
- setIsGetStores(true);
- }} class="mt-[15px] w-full cursor-pointer flex items-center justify-center py-[12px] text-[#FFFFFF] border-[1px] border-[#fff] rounded tracking-[2.4px]">
- FIND STORE
- </div>
- {
- isGetStores && storesList && storesList.length == 0 ?
- <div className='mt-2'><span className='text-[16px]'>Try at store is not available near you.</span></div> : null
- }
- </div>
- {storesList && storesList.length > 0 ? (
- <div className="w-[100%] flex flex-row p-[20px] rounded justify-center items-center gap flex-wrap">
- {storesList.map((store, index) => {
- return (
- <OutletItem
- key={index}
- store={store}
- sku={sku}
- isMobile={true}
- isGetStores={isGetStores}
- isAdded={isAdded}
- setIsAdded={setIsAdded}
- />
- );
- })}
- </div>
- ) : null}
- </div>
- </div>
- <div class="flex items-center flex-col mt-12 pb-4">
- <div className='relative flex justify-center items-center'>
- <img src={Glowimg} alt="Diamond" className='w-[80%]' />
- </div>
- <div className='mt-[15px]'>
- <div class=" flex flex-col mt-4 flex flex-col mt-4">
- <h1 class="text-2xl text-[#FFFFFF] font-ivyModeRegular">Try It On At Home</h1>
- <p class=" text-sm text-sm mt-2 text-[#FFFFFF] font-lato"><br /> </p>
- </div>
- <div class=" flex flex-row flex flex-row items-center mt-4">
- <img src={Diamond} alt="Diamond" className='w-1/4' />
- <div class=" flex flex-col ml-2">
- <h1 class=" text-sm text-base text-[#FFFFFF]">Choose your favorite design.</h1>
- <p class=" text-sm mt-2 text-[#FFFFFF] font-lato">Add minimum 1 Design.</p>
- </div>
- </div>
- <div class=" flex flex-row flex flex-row items-center mt-4">
- <img src={Calendar} alt="Diamond" className='w-1/4' />
- <div class=" flex flex-col ml-2">
- <h1 class=" text-sm text-base text-[#FFFFFF]">Book an appointment.</h1>
- <p class=" text-sm mt-2 text-[#FFFFFF] font-lato">Its Free, Select a date and time.</p>
- </div>
- </div>
- <div class=" flex flex-row flex flex-row items-center mt-4">
- <img src={Script} alt="Diamond" className='w-1/4' />
- <div class=" flex flex-col ml-2">
- <h1 class=" text-sm text-base text-[#FFFFFF]">Try the design.</h1>
- <p class=" text-sm mt-2 text-[#FFFFFF] font-lato">Our executive will bring the selected design to your home.</p>
- </div>
- </div>
- <div class=" flex flex-row flex flex-row items-center mt-4">
- <img src={Takeoutbag} alt="Diamond" className='w-1/4' />
- <div class=" flex flex-col ml-2">
- <h1 class=" text-sm text-base text-[#FFFFFF]">Buy the jewellery if you like.</h1>
- <p class=" text-sm mt-2 text-[#FFFFFF] font-lato">Buy on the spot! And if you don't like it, there's no obligation to buy.</p>
- </div>
- </div>
- <div className="bg-[#fff] pr-2 rounded mt-[20px] w-full flex">
- <input
- autoComplete="pincode"
- field="pincode"
- id="pincode"
- className="h-[40px] px-[10px] text-[16px] rounded h-[50px] w-[100%]"
- value={pincode}
- placeholder="Enter Pin Code"
- onChange={e => {
- handlePincode(e.target.value);
- storage.setItem('pin_code', e.target.value, null);
- }}
- />
- <button
- className="uppercase text-[#c7a46f]"
- onClick={() => {
- handleCheck();
- }}
- >
- check
- </button>
- </div>
- {available ? (
- isAdded ? (
- <Link
- to={'/try-at-home/cart'}
- class="cursor-pointer mt-[15px] flex items-center justify-center py-[12px] text-[#FFFFFF] border-[1px] border-[#fff] rounded w-96 tracking-[2.4px]"
- >
- TRY AT HOME
- </Link>
- ) : (
- <div
- onClick={() =>
- available
- ? handleAdd()
- : alert(
- 'This product is not available for try at home.'
- )
- }
- disabled={!available}
- class="cursor-pointer mt-[15px] flex items-center justify-center py-[12px] text-[#FFFFFF] border-[1px] border-[#fff] rounded w-96 tracking-[2.4px]"
- >
- TRY AT HOME
- </div>
- )
- ) : storesList && storesList.length == 0 ? (
- <div className="mt-[10px]">
- <span className="text-[#e9c58f]">
- This product is not available for try at home.
- </span>
- </div>
- ) : null}
- </div>
- </div>
- </div>
- );
- }
- return (
- <div class="flex justify-center bg-[#9D8D7A] rounded-lg mt-4">
- <div class="rounded mt-4 flex flex-col items-center bg-[#9D8D7A]">
- <div class="flex flex-col mt-12 pb-8 items-center text-center">
- <h1 class="text-3xl text-[#FFF] font-ivyModeRegular"
- dangerouslySetInnerHTML={{
- __html: banners && banners.slide_title
- }} />
- {/* <p class="text-sm text-[#FFF] font-lato">
- Lorem ipsum dolor sit amet, consetetur sadipscing elitr,
- sed diam nonumy eirmod Lorem ipsum dolor sit amet
- </p> */}
- </div>
- <div class="flex items-center py-[40px]">
- <img src={banners && banners.slide_image} alt="Glowimg1" class="h-96 mr-16" />
- <div class="mr-0">
- <div className="flex flex-col mt-4"
- dangerouslySetInnerHTML={{
- __html: banners && banners.slide_text
- }}
- />
- {/* <div class="flex flex-col mt-2">
- <h1 class="text-2xl text-[#FFFFFF] font-ivyModeRegular">
- Try At Store
- </h1>
- <p class="text-sm text-[#FFFFFF] font-lato">
- Experience our jewellery before you buy it. Try
- it at the nearest store.
- </p>
- </div> */}
- {/* <div class="flex flex-row items-center">
- <img src={Diamond} alt="Diamond" class="w-14 h-14 mt-3 p-2" />
- <div class=" mt-6 flex flex-col mt-6">
- <h1 class=" text-sm text-base text-[#FFFFFF]">
- Try This Jewellery At Nearby Store.
- </h1>
- <p class=" text-sm text-xs mt-2 text-[#FFFFFF] font-lato">
- Lorem ipsum dolor sit amet, consetetur
- </p>
- </div>
- </div> */}
- {/* <div class="flex flex-row flex flex-row items-center">
- <img src={Script} alt="Diamond" class=" w-14 h-14 mt-3 p-2 w-14 h-14 mt-3 p-2" />
- <div class="flex flex-col mt-6">
- <h1 class=" text-sm text-base text-[#FFFFFF]">
- Visit a store to put on your glow
- </h1>
- <p class=" text-sm text-xs mt-2 text-[#FFFFFF] font-lato">
- Lorem ipsum dolor sit amet, consetetur
- </p>
- </div>
- </div> */}
- <div className="bg-[#fff] pr-2 rounded mt-[20px]">
- <input
- autoComplete="pincode"
- field="pincode"
- id="pincode"
- className="h-[40px] px-[10px] text-[16px] rounded h-[50px] w-[100%]"
- value={pincode}
- placeholder="Enter Pin Code"
- onChange={e => {
- handlePincode(e.target.value);
- storage.setItem(
- 'pin_code',
- e.target.value,
- null
- );
- }}
- />
- </div>
- <div onClick={() => {
- dispatch(storeListBasedOnPincode(pincode));
- setIsGetStores(true)
- }} class="mt-[15px] cursor-pointer flex items-center justify-center py-[12px] text-[#FFFFFF] border-[1px] border-[#fff] rounded tracking-[2.4px]">
- FIND STORE
- </div>
- {
- isGetStores && storesList && storesList.length == 0 ?
- <div className='mt-2'>
- <span className='text-[16px]'>Try at store is not available near you.</span></div>
- : null
- }
- </div>
- </div>
- {storesList && storesList.length > 0 ? (
- <div className="w-[100%] flex flex-row p-[20px] rounded justify-center items-center gap flex-wrap">
- {storesList.map((store, index) => {
- return (
- <OutletItem
- key={index}
- store={store}
- sku={sku}
- isMobile={false}
- isGetStores={isGetStores}
- isAdded={isAdded}
- setIsAdded={setIsAdded}
- />
- );
- })}
- </div>
- ) : null}
- <div class="flex items-center py-[40px]">
- <div class="mr-0">
- <div class="flex flex-col mt-2">
- <h1 class="text-2xl text-[#FFFFFF] font-ivyModeRegular">
- Try It On At Home
- </h1>
- <p class="text-sm text-[#FFFFFF] font-lato">
- <br />
- </p>
- </div>
- <div class="flex flex-row items-center">
- <img
- src={Diamond}
- alt="Diamond"
- class="w-14 h-14 mt-3 p-2"
- />
- <div class=" mt-6 flex flex-col mt-6">
- <h1 class=" text-sm text-base text-[#FFFFFF]">
- Choose your favorite design.
- </h1>
- <p class=" text-sm text-xs mt-2 text-[#FFFFFF] font-lato">
- Add minimum 1 Design
- </p>
- </div>
- </div>
- <div class="flex flex-row flex flex-row items-center">
- <img
- src={Calendar}
- alt="Diamond"
- class=" w-14 h-14 mt-3 p-2 w-14 h-14 mt-3 p-2"
- />
- <div class="flex flex-col mt-6">
- <h1 class=" text-sm text-base text-[#FFFFFF]">
- Book an appointment.
- </h1>
- <p class=" text-sm text-xs mt-2 text-[#FFFFFF] font-lato">
- Its Free, Select a date and time
- </p>
- </div>
- </div>
- <div class="flex flex-row flex flex-row items-center">
- <img
- src={Script}
- alt="Diamond"
- class=" w-14 h-14 mt-3 p-2 w-14 h-14 mt-3 p-2"
- />
- <div class="flex flex-col mt-6">
- <h1 class=" text-sm text-base text-[#FFFFFF]">
- Try the design.
- </h1>
- <p class=" text-sm text-xs mt-2 text-[#FFFFFF] font-lato">
- Our executive will bring the selected design to your home
- </p>
- </div>
- </div>
- <div class="flex flex-row flex flex-row items-center">
- <img
- src={Takeoutbag}
- alt="Diamond"
- class=" w-14 h-14 mt-3 p-2 w-14 h-14 mt-3 p-2"
- />
- <div class="flex flex-col mt-6">
- <h1 class=" text-sm text-base text-[#FFFFFF]">
- Buy the jewellery if you like.
- </h1>
- <p class=" text-sm text-xs mt-2 text-[#FFFFFF] font-lato">
- Buy on the spot! And if you don't like it, there's no obligation to buy.
- </p>
- </div>
- </div>
- <HomeSection
- sku={sku}
- pincode={pincode}
- handlePincode={handlePincode}
- storeListBasedOnPincode={
- storeListBasedOnPincode
- }
- storesList={storesList}
- handleCheck={handleCheck}
- error={error}
- loading={loading}
- data={data}
- refetch={refetch}
- available={available}
- handleAdd={handleAdd}
- />
- </div>
- <img src={Glowimg1} alt="Glowimg1" class="h-96 ml-16" />
- </div>
- {/* <div class="flex items-center py-[40px]">
- <img src={Glowimg2} alt="Glowimg1" class="h-96 mr-16" />
- <div class="mr-0">
- <div class="flex flex-col mt-2">
- <h1 class="text-2xl text-[#FFFFFF] font-ivyModeRegular">Want A Closer Look?</h1>
- <p class="text-sm text-[#FFFFFF] font-lato">Lorem ipsum dolor sit amet, consetetur sadipscing elitr,<br /> sed diam nonumy eirmod Lorem ipsum dolor sit amet</p>
- </div>
- <div class="flex flex-row items-center">
- <img src={Script} alt="Diamond" class="w-14 h-14 mt-3 p-2" />
- <div class=" mt-6 flex flex-col mt-6">
- <h1 class=" text-sm text-base text-[#FFFFFF]">Live Video Call With Our Designer</h1>
- <p class=" text-sm text-xs mt-2 text-[#FFFFFF] font-lato">Lorem ipsum dolor sit amet, consetetur</p>
- </div>
- </div>
- <div class="flex flex-row flex flex-row items-center">
- <img src={Script} alt="Diamond" class=" w-14 h-14 mt-3 p-2 w-14 h-14 mt-3 p-2" />
- <div class="flex flex-col mt-6">
- <h1 class=" text-sm text-base text-[#FFFFFF]">Lorem Ipsum Dolor Sit Amet</h1>
- <p class=" text-sm text-xs mt-2 text-[#FFFFFF] font-lato">Lorem ipsum dolor sit amet, consetetur</p>
- </div>
- </div>
- <div class="pointer mt-[15px] flex items-center justify-center py-[12px] text-[#FFFFFF] border-[1px] border-[#fff] rounded w-96 tracking-[2.4px]">
- SCHEDULE A VIDEO CALL
- </div>
- </div>
- </div> */}
- </div>
- </div>
- );
- };
- const OutletItem = ({ store, sku, isMobile, isGetStores, isAdded, setIsAdded }) => {
- const { error, loading, data } = useQuery(GET_PRODUCT_AVAILABLE_STORE, {
- fetchPolicy: 'cache-and-network',
- nextFetchPolicy: 'cache-first',
- skip: !sku,
- variables: {
- key: '277',
- sku: sku
- }
- });
- const items = storage.getItem('try_at_store') || [];
- const available = data?.products?.items?.length > 0 ? true : false;
- const handleAdd = () => {
- storage.setItem('try_at_store', items.concat([sku]), null);
- storage.setItem('selected_store', store, null);
- setIsAdded(storage.getItem('try_at_store').includes(sku));
- };
- const mainClass = isMobile
- ? 'flex flex-col bg-[#F1F5EB] border-[1px] border-[#D7E0C9] rounded-[10px]'
- : 'flex flex-col bg-[#F1F5EB] border-[1px] border-[#D7E0C9] w-[30%] rounded-[10px]';
- return (<>
- {isGetStores &&
- <div className={mainClass}>
- <div className="px-[20px] py-[15px]">
- <h1 className="text-[20px] font-semibold text-[#774E4F] font-ivyModeRegular capitalize">
- {store.name}
- </h1>
- <p className="text-[12px] text-[#3B444D]">
- {store.street_2},{store.street_1}, {store?.city},
- {store?.state}, {store?.pin} .
- </p>
- </div>
- <div className="px-[20px] py-[15px] h-[50px]">
- {available ? (
- <span className="uppercase tracking-[2.1px] text-[#509707]">
- Available
- </span>
- ) : (
- <span className="uppercase tracking-[2.1px] text-[#dd2525]">
- unavailable
- </span>
- )}
- </div>
- <div className="px-[20px] py-[15px]">
- <p className="text-[12px] text-[#3B444D]">
- Timings : {store?.timing}
- </p>
- <p className="text-[12px] text-[#3B444D] mb-[10px]">
- Contact :{' '}
- <a
- href={`tel:${store.phone_number}`}
- className="text-[12px] text-[#3B444D] mb-[10px]"
- >
- {store.phone_number}
- </a>
- </p>
- {isAdded ? (
- <Link to={'/try-at-store/cart'}>
- <button
- className={
- available
- ? `bg-[#181A1D] rounded py-[10px] w-[100%]`
- : `bg-[#ddd] rounded py-[10px] w-[100%]`
- }
- >
- <span className="text-[#fff] uppercase tracking-[2.1px]">
- go to cart
- </span>
- </button>
- </Link>
- ) : (
- <button
- disabled={!available}
- onClick={() =>
- isAdded
- ? alert('Alredy added to try at store cart!')
- : handleAdd()
- }
- className={
- available
- ? `bg-[#181A1D] rounded py-[10px] w-[100%]`
- : `bg-[#ddd] rounded py-[10px] w-[100%]`
- }
- >
- <span className="text-[#fff] uppercase tracking-[2.1px]">
- Try at store
- </span>
- </button>
- )}
- </div>
- </div>
- }
- </>);
- };
- const HomeSection = ({
- sku,
- pincode,
- handlePincode,
- storesList,
- storeListBasedOnPincode,
- handleCheck,
- error,
- loading,
- data,
- refetch,
- available,
- isAdded,
- handleAdd
- }) => {
- const dispatch = useDispatch();
- console.log('available',available)
- console.log('isAdded',isAdded)
- return (
- <div>
- <div className="bg-[#fff] pr-2 rounded mt-[20px] flex flex-row">
- <input
- autoComplete="pincode"
- field="pincode"
- id="pincode"
- className="h-[40px] px-[10px] text-[16px] rounded h-[50px] w-[100%]"
- value={pincode}
- placeholder="Enter Pin Code"
- onChange={e => {
- handlePincode(e.target.value);
- storage.setItem('pin_code', e.target.value, null);
- }}
- />
- <button
- className="uppercase text-[#c7a46f]"
- onClick={() => {
- handleCheck();
- }}
- >
- check
- </button>
- </div>
- {
- available ? (
- isAdded ? (
- <Link
- to={'/try-at-home/cart'}
- class="cursor-pointer mt-[15px] flex items-center justify-center py-[12px] text-[#FFFFFF] border-[1px] border-[#fff] rounded w-96 tracking-[2.4px]"
- >
- TRY AT HOME
- </Link>
- ) : (
- <div
- onClick={() =>
- available
- ? handleAdd()
- : alert(
- 'This product is not available for try at home.'
- )
- }
- disabled={!available}
- class="cursor-pointer mt-[15px] flex items-center justify-center py-[12px] text-[#FFFFFF] border-[1px] border-[#fff] rounded w-96 tracking-[2.4px]"
- >
- TRY AT HOME
- </div>
- )
- ) : storesList && storesList.length == 0 ? (
- <div className="mt-[10px]">
- <span className="text-[#e9c58f]">
- This product is not available for try at home.
- </span>
- </div>
- ) : null}
- </div>
- );
- };
- export default TryAtHome;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement