import React, { useState } from 'react'; import { useStoreSelector } from '../../App'; import Accordion from '../../components/Accordion/Accordion'; import { getActualAttributes, getActualpriceAdditional, } from '../../store/selectors/selectors'; import { actualAttributes as attributesTitle, AttributesT, } from '../../utils/constants'; import { ComponentControl } from '../ComponentControl/ComponentControl'; import s from './Interface.module.scss'; import { useThreekitInitStatus } from '@threekit-tools/treble'; import { DefaultBtn } from './../DefaultBtn/DefaultBtn'; import { ShopItem } from './../ShopItem/ShopItem'; import { useEffect } from 'react'; import { SavedConfig } from './../SavedConfig/SavedConfig'; import { useProductCache } from '@threekit-tools/treble/dist'; const { AccordionItem } = Accordion; export const Interface = ({ ...props }) => { const { returnCartInfo } = props; const hasLoaded = useThreekitInitStatus(); const activeCategory: any = attributesTitle; const actualAttributes: any = useStoreSelector(getActualAttributes); const actualpriceAdditional: any = useStoreSelector(getActualpriceAdditional); const [configActiveMenu, setConfigActiveMenu]: any = useState(true); const [actualPrice, setActualPrice]: any = useState(0); const [actualParameters, setActualParameters]: any = useState({ playerHeight: 0, windowWidth: window.innerWidth, }); function getActualPrice() { let price = 0; Object.keys(actualAttributes).map((name: any) => { const actualName: AttributesT = name; const quantity: number = actualAttributes[actualName].shopInfo.quantity; price += actualAttributes[actualName].price * quantity; }); setActualPrice(price.toFixed(2)); } { (function () { window.addEventListener('resize', resizeThrottler, false); let resizeTimeout: any; function resizeThrottler() { // ignore resize events as long as an actualResizeHandler execution is in the queue //@ts-ignore if (!resizeTimeout && window.innerWidth <= 992) { resizeTimeout = setTimeout(function () { resizeTimeout = null; actualResizeHandler(); // The actualResizeHandler will execute at a rate of 15fps }, 66); } } function actualResizeHandler() { // handle the resize event //@ts-ignore if (window.playerHeight) { //@ts-ignore let playerHeight = window.playerHeight; // height: calc(100vh - 138px - 592px); setActualParameters({ playerHeight: playerHeight, windowWidth: window.innerWidth, }); } } })(); } useEffect(() => { //@ts-ignore let playerHeight = window.playerHeight; setActualParameters({ playerHeight: playerHeight, windowWidth: window.innerWidth, }); //@ts-ignore }, [window.playerHeight]); useEffect(() => { getActualPrice(); }, [configActiveMenu]); useEffect(() => { if (hasLoaded) { getActualPrice(); } }, [actualAttributes]); function testFetch() { // const url = // 'https://quadratec-threekit-api.herokuapp.com/get-ar/Jeep 4 door JL/?Lift="2 inch"&Wheels=WHL Quad Rubicon Xtreme Silver'; // fetch(`/api/get_ar/$${url}`) // .then((resp) => resp.json()) // .then(function (data) { // console.log('data: ', data); // }) // .catch(function (error) { // console.log(error); // }); } function addToCart() { const arrayOfMetaData: any = []; const nameJeep = window.threekit.configurator.getMetadata().name; Object.keys(actualAttributes).forEach((key: any) => { if (actualAttributes[key].shopInfo.quantity >= 1) { let obg: any = { fcid: undefined, node_id: undefined, product_id: undefined, sku: undefined, }; if ( key === 'Lift' || key === 'Wrangler Model' || key === 'Shock Options' ) { if (key === 'Shock Options') { obg = { ...obg, label: 'Lift', id: actualAttributes[key].id, quantity: actualAttributes[key].shopInfo.quantity, category: key, }; if (actualAttributes[key].id) { obg = { ...obg, ...actualpriceAdditional[actualAttributes[key].id], }; } arrayOfMetaData.push(obg); } } else { if (actualAttributes[key].activeItemId) { obg = { ...obg, label: actualAttributes[key].activeItem, id: actualAttributes[key].activeItemId, quantity: actualAttributes[key].shopInfo.quantity, category: key, }; obg = { ...obg, ...actualpriceAdditional[actualAttributes[key].activeItemId], }; arrayOfMetaData.push(obg); } // else { // obg = { // ...obg, // label: actualAttributes[key].activeItem, // quantity: actualAttributes[key].shopInfo.quantity, // category: key, // }; // if (actualAttributes[key].activeItemId) { // obg = { // ...obg, // ...actualpriceAdditional[actualAttributes[key].activeItemId], // }; // } // arrayOfMetaData.push(obg); // } } } }); const jsonMessage = { type: 'ADD_TO_CART', jeepName: nameJeep, paintColor: actualAttributes['Paint color'].activeItem, data: arrayOfMetaData, }; console.log('jsonMessage: ', jsonMessage); if (returnCartInfo) { returnCartInfo(jsonMessage); } window.parent.postMessage( jsonMessage, '*' //or "www.parentpage.com" ); } return (
testFetch()}> Change Jeep appearance
Choose parts that fit your Jeep perfectly
{hasLoaded && actualAttributes && (
{Object.keys(actualAttributes).map((name: any) => { const actualName: AttributesT = name; let activeItem = actualAttributes[actualName].activeItem; if (actualName === 'Lift') { activeItem = actualAttributes['Shock Options'].activeItem; } // const quantity: number = // actualAttributes[actualName].shopInfo.quantity; if (activeCategory[name]) { return (
); } })}
)} {hasLoaded && actualAttributes && (
Total Summary Total
${actualPrice}
setConfigActiveMenu(false)} > Review your build Review build
)}
Review your build
{hasLoaded && actualAttributes && actualPrice != 0 ? ( <>
Accessories
{Object.keys(actualAttributes).map((name: any) => { const actualName: AttributesT = name; const quantity: number = actualAttributes[actualName].shopInfo.quantity; let activeCheck = actualAttributes[actualName].defaultItem === actualAttributes[actualName].activeItem; if ( !activeCheck && actualAttributes[actualName].activeItem && actualName != 'Paint color' ) { return ( ); } })}
) : ( <>
123
{} )} {hasLoaded && actualAttributes && (
Total Summary
${actualPrice}
setConfigActiveMenu(true)} > Back to Config
addToCart()} > Go to Checkout
)}
); };