{"version":3,"sources":["images/icon-cluster-pin.png","images/icon-pin.png","components/locations/locationMap.js","components/locations/dealer.js","components/locations/contact.js","components/locations/location.js","components/calculators/hourlyTrucking.js","components/calculators/paving.js","components/calculators/truckCycleTimes.js","components/helpers/helpers.js","components/specifications/compare-table.js","components/svgs/svg.js","components/products/card.js","components/products/facets.js","components/products/skeletonCards.js","components/elasticProducts/elasticProducts.js","components/facilities/facility-map.js","components/facilities/facility-listing.js","App.js","index.js"],"names":["module","exports","LocationMap","props","useState","map","setMap","markerName","setMarkerName","locationRef","useRef","dealerRef","current","dealer","locations","isLoaded","useJsApiLoader","id","googleMapsApiKey","setMapBounds","bounds","window","google","maps","LatLngBounds","i","length","locationItem","Address","latLng","lat","Latitude","lng","Longitude","extend","dealerCoords","fitBounds","onLoad","React","useCallback","onUnmount","useEffect","mapContainerStyle","height","width","zoom","item","index","locationMarker","path","fillColor","fillOpacity","strokeColor","strokeWeight","origin","Point","anchor","markerId","Title","key","icon","position","onClick","onCloseClick","className","Street","City","StateCode","Zip","href","Phone","target","Name","Email","Dealer","info","Manager","Logo","src","alt","Link","rel","Position","Mobile","Locations","DistanceInMiles","aria-hidden","focusable","viewBox","xlinkHref","CountryCode","ProductIds","product","productLines","Contact","roles","astec","Contacts","RoleId","containerElement","document","getElementById","toggleStatus","setToggleStatus","parameterType","setParameterType","productType","setProductType","errorStatus","setErrorStatus","zipCode","setZipCode","province","setProvince","country","setCountry","setDealer","noResults","setNoResults","countries","setCountries","setProductLines","provinces","setProvinces","zipCodeInput","setDefaultProducType","productId","URLSearchParams","location","search","get","Object","keys","updateProductType","e","value","requestLocations","url","url2","url3","fetch","then","response","status","json","data","renderResults","catch","error","scrollIntoView","behavior","ReactDOM","createPortal","htmlFor","onChange","find","p","CountryName","Provinces","required","type","placeholder","maxLength","ref","aria-live","aria-pressed","name","checked","aria-label","focus","IsAstecDirect","HourlyTruckingCalculator","showResult","setShowResult","startTime","setStartTime","nearestStartTime","setNearestStartTime","endTime","setEndTime","nearestEndTime","setNearestEndTime","showDelay","setShowDelay","delayTimes","updateDelayTimes","timeError","setTimeError","inputsValid","setInputsValid","regexNumbersOnly","title","text","label","inputs","updateInputs","elementsRef","createRef","startTimeRef","endTimeRef","handleInputUpdate","test","handleTimeUpdate","values","split","minutes","Number","hour","nearestHour","handleDelayUpdate","times","departure","return","calculateTimeValue","plantProduction","filter","x","truckCapacity","departureTime","returnTime","timeSum","forEach","calculateTrucks","endTimeSecondary","isNaN","toFixed","range","push","indexOf","time","delayData","slice","trucks","aria-labelledby","aria-describedby","disabled","counter","PavingCalculator","super","pavingSpeed","setPavingSpeed","matLength","setMatLength","actualLength","setActualLength","percentYield","setPercentYield","expectedDistanceFeet","setExpectedDistanceFeet","expectedDistanceMiles","setExpectedDistanceMiles","getInputValue","class","totalPavingTime","productionRate","pavingThickness","pavingWidth","materialDensity","lengthOfMat","TruckCycleTimeCalculator","trucksNeeded","setTrucksNeeded","trucksNeededWithDelay","setTrucksNeededWithDelay","trucksNeededSecondary","setTrucksNeededSecondary","trucksNeededWithDelaySecondary","setTrucksNeededWithDelaySecondary","truckLoading","tarp","haulToSite","possibleDelay","possibleDelaySecondary","waitingToDump","waitingToDumpSecondary","engagedWithHopper","engagedWithHopperSecondary","totalNoDelay","totalNoDelaySecondary","trucksNeededDelay","trucksNeededDelaySecondary","formatUnitText","unit","ProductCompareTable","handler","getAttribute","localStorageUnit","localStorage","getItem","filterExpanded","setFilterExpanded","compareAll","setCompareAll","products","updateProducts","models","updateModels","specFields","updateSpecFields","unitSystem","setUnitSystem","showUnits","updateShowUnits","tableType","setTableType","indexName","queryString","parse","toggleRef","compareTableRef","listener","event","contains","addEventListener","removeEventListener","getRangeValue","field","lowestValue","MAX_SAFE_INTEGER","highestValue","units","model","specs","spec","specValue","imperial","metric","toLocaleString","addFilter","modelName","clearFilter","targetName","style","opacity","setTimeout","newFields","some","newModels","console","aria-expanded","sort","a","b","order","data-name","data-title","modelCount","specIndex","minValue","maxValue","textUnitType","getGeneralValue","getFieldValue","unitSystemText","data-units","Svgs","d","stroke","strokeWidth","fill","fillRule","transform","y","mask","ProductCard","facets","flatMap","m","reduce","r","includes","create","isComponentType","facet","s","imagePlaceholder","image","imageSrc","setImageSrc","onError","pop","metricText","imperialText","join","ProductFacets","params","setParams","liveFacets","setSelected","selected","filterStatus","setFilterStatus","changeValue","option","newParams","page","newFilter","isSpecFacet","specFilters","f","min","max","isRange","filters","isDisabled","total","optionKey","options","o","formatOptionKey","body","classList","add","remove","resetFilters","Array","subIndex","SkeletonCards","baseColor","count","poster","method","JSON","stringify","headers","accept","res","ElasticProducts","setUnits","config","paramsConfig","specFacets","suffix","setFacets","selectedFacets","setSelectedFacets","useSWR","revalidateOnFocus","shouldRetryOnError","totalPageCount","Math","ceil","perPage","totalPages","from","_","fa","results","result","goToPage","toggleUnits","setItem","productData","setProductData","defaultFetchStatus","setDefaultFetchStatus","defaultData","getDefaultResults","api","pageId","productPage","ProductPages","Id","UrlName","Image","Url","AlternativeText","dangerouslySetInnerHTML","description","Summary","__html","FacilityMap","activeMarkerId","setActiveMarkerId","markerImage","require","defaultBounds","north","south","west","east","clusterStyles","clusterIcon","textColor","handleMarkerClick","setActiveMarker","activeMarker","styles","imagePath","clusterer","markerIcon","scaledSize","Size","RelatedImage","street","city","state","zip","addressLine2","generateAddress","OfficePhone","PartsPhone","ServicePhone","FacilityListing","updateScreenSize","updateActiveMarker","getLocations","func","wait","immediate","timeout","context","this","args","arguments","later","apply","callNow","clearTimeout","debounce","isDesktop","matchMedia","matches","whereToBuy","elasticProducts","hourlyTruckingCalculator","pavingCalculator","cycleTimeCalculator","compareTable","facilityMap","App","render","StrictMode"],"mappings":"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","file":"static/js/main.d88f73aa.chunk.js","sourcesContent":["module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","import React, { useState, useRef, useEffect } from \"react\";\r\nimport { GoogleMap, useJsApiLoader, Marker, InfoWindow } from \"@react-google-maps/api\";\r\n\r\nconst LocationMap = (props) => {\r\n const [map, setMap] = useState(null);\r\n const [markerName, setMarkerName] = useState(null);\r\n const mapZoom = 4;\r\n const locationRef = useRef();\r\n const dealerRef = useRef();\r\n\r\n dealerRef.current = props.dealer;\r\n locationRef.current = props.locations;\r\n const mapStyles = {\r\n height: \"100%\",\r\n width: \"100%\",\r\n };\r\n\r\n const { isLoaded } = useJsApiLoader({\r\n id: \"google-map-script\",\r\n googleMapsApiKey: \"AIzaSyC1E9m76HVzmwOGsgMqEns4uBV9UOzzugY\",\r\n });\r\n\r\n const setMapBounds = (map) => {\r\n // Extend the map bounds for every location\r\n const bounds = new window.google.maps.LatLngBounds();\r\n for (let i = 0; i < locationRef.current.length; i++) {\r\n const locationItem = locationRef.current[i];\r\n if(locationItem.Address) {\r\n const latLng = {\r\n lat: locationItem.Address.Latitude || 0,\r\n lng: locationItem.Address.Longitude || 0,\r\n };\r\n bounds.extend(latLng);\r\n }\r\n }\r\n if(dealerRef.current.Address) {\r\n const dealerCoords = {\r\n lat: dealerRef.current.Address.Latitude || 0,\r\n lng: dealerRef.current.Address.Longitude || 0,\r\n };\r\n bounds.extend(dealerCoords);\r\n }\r\n map.fitBounds(bounds);\r\n setMap(map);\r\n };\r\n\r\n const onLoad = React.useCallback(function callback(map) {\r\n setMapBounds(map);\r\n }, []);\r\n\r\n const onUnmount = React.useCallback(function callback(map) {\r\n setMap(null);\r\n }, []);\r\n\r\n\r\n useEffect(() => {\r\n // Set map bounds again when users click search multiple times\r\n if(map) {\r\n setMapBounds(map);\r\n }\r\n },[props]);\r\n\r\n return isLoaded ? (\r\n \r\n {props.locations.map((item,index) => {\r\n const locationMarker = {\r\n path:\r\n \"M16,0C10.1,0,5.3,4.8,5.3,10.7c0,1.8,0.4,3.5,1.3,5.1l8.8,15.9c0.1,0.2,0.3,0.3,0.6,0.3 s0.5-0.1,0.6-0.3l8.8-15.9c0.8-1.5,1.3-3.3,1.3-5.1C26.7,4.8,21.9,0,16,0z M16,16c-2.9,0-5.3-2.4-5.3-5.3s2.4-5.3,5.3-5.3 s5.3,2.4,5.3,5.3S18.9,16,16,16z\",\r\n fillColor: \"#0058A5\",\r\n fillOpacity: 1,\r\n strokeColor: \"#000\",\r\n strokeWeight: 1,\r\n origin: new window.google.maps.Point(0, 0),\r\n anchor: new window.google.maps.Point(11, 32),\r\n }; \r\n if(item.Address) {\r\n const latLng = {\r\n lat: item.Address.Latitude || 0,\r\n lng: item.Address.Longitude || 0,\r\n };\r\n const markerId = item.Title + index;\r\n return (\r\n {\r\n setMarkerName(markerId)\r\n }}\r\n >\r\n {\r\n markerId === markerName &&\r\n {setMarkerName(null)}}>\r\n
\r\n

{item.Title}

\r\n

\r\n {item.Address?.Street && item.Address.Street + ' '}\r\n {item.Address?.City && item.Address.City + ', '}\r\n {item.Address?.StateCode && item.Address.StateCode + ' '}\r\n {item.Address?.Zip && item.Address.Zip}

\r\n

{item.Phone}

\r\n

Get Directions

\r\n
\r\n
\r\n }\r\n \r\n );\r\n }\r\n })}\r\n {props.dealer && props.dealer.Address && (\r\n {\r\n setMarkerName(props.dealer.Name)\r\n }}\r\n icon={{\r\n path:\r\n \"M16,0C10.1,0,5.3,4.8,5.3,10.7c0,1.8,0.4,3.5,1.3,5.1l8.8,15.9c0.1,0.2,0.3,0.3,0.6,0.3 s0.5-0.1,0.6-0.3l8.8-15.9c0.8-1.5,1.3-3.3,1.3-5.1C26.7,4.8,21.9,0,16,0z M16,16c-2.9,0-5.3-2.4-5.3-5.3s2.4-5.3,5.3-5.3 s5.3,2.4,5.3,5.3S18.9,16,16,16z\",\r\n fillColor: \"#0058A5\",\r\n fillOpacity: 1,\r\n strokeColor: \"#000\",\r\n strokeWeight: 1,\r\n origin: new window.google.maps.Point(0, 0),\r\n anchor: new window.google.maps.Point(11, 32),\r\n }}\r\n position={{lat: props.dealer.Address.Latitude || 0, lng: props.dealer.Address.Longitude || 0}}\r\n >\r\n {\r\n markerName === props.dealer.Name &&\r\n {setMarkerName(null)}}>\r\n
\r\n

{props.dealer.Name}

\r\n

\r\n {props.dealer.Address?.Street && props.dealer.Address.Street + ' '}\r\n {props.dealer.Address?.City && props.dealer.Address.City + ', '}\r\n {props.dealer.Address?.StateCode && props.dealer.Address.StateCode + ' '}\r\n {props.dealer.Address?.Zip && props.dealer.Address.Zip}

\r\n

{props.dealer.Email}

\r\n

{props.dealer.Phone}

\r\n

Get Directions

\r\n
\r\n
\r\n }\r\n \r\n )}\r\n \r\n ) : (\r\n <>\r\n );\r\n};\r\nexport default LocationMap;\r\n","import React from \"react\";\r\nimport LocationMap from \"./locationMap\";\r\n\r\nconst Dealer = (props) => {\r\n\treturn (\r\n\t\t
\r\n\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t{props.info.Logo ? (\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\"\"\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t

\r\n\t\t\t\t\t\t\t\t{props.info.Name}\r\n\t\t\t\t\t\t\t

\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tDealer Website\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t

Address:

\r\n\t\t\t\t\t\t\t\t

\r\n\t\t\t\t\t\t\t\t\t{props.info.Address?.Street &&\r\n\t\t\t\t\t\t\t\t\t\tprops.info.Address.Street + \" \"}\r\n\t\t\t\t\t\t\t\t\t{props.info.Address?.City &&\r\n\t\t\t\t\t\t\t\t\t\tprops.info.Address.City + \", \"}\r\n\t\t\t\t\t\t\t\t\t{props.info.Address?.StateCode &&\r\n\t\t\t\t\t\t\t\t\t\tprops.info.Address.StateCode + \" \"}\r\n\t\t\t\t\t\t\t\t\t{props.info.Address?.Zip &&\r\n\t\t\t\t\t\t\t\t\t\tprops.info.Address.Zip}\r\n\t\t\t\t\t\t\t\t

\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t{props.info.Phone ? (\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t

Phone:

\r\n\t\t\t\t\t\t\t\t\t

\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t{props.info.Phone}\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t

\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\"\"\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t{props.info.Email ? (\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t

Email:

\r\n\t\t\t\t\t\t\t\t\t

\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t{props.info.Email}\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t

\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\"\"\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t
\r\n {\r\n props.info.Manager &&\r\n
\r\n }\r\n\t\t\t\t\t
\r\n\r\n\t\t\t\t\t{props.info.Manager ? (\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t

\r\n\t\t\t\t\t\t\t\tAstec Contact\r\n\t\t\t\t\t\t\t

\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t

\r\n\t\t\t\t\t\t\t\t\t\t{props.info.Manager.Name}\r\n\t\t\t\t\t\t\t\t\t

\r\n\t\t\t\t\t\t\t\t\t

\r\n\t\t\t\t\t\t\t\t\t\t{props.info.Manager.Position}\r\n\t\t\t\t\t\t\t\t\t

\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t

\r\n\t\t\t\t\t\t\t\t\t\t{props.info.Manager.Mobile\r\n\t\t\t\t\t\t\t\t\t\t\t? \"Mobile:\"\r\n\t\t\t\t\t\t\t\t\t\t\t: \"\"}\r\n\t\t\t\t\t\t\t\t\t

\r\n\t\t\t\t\t\t\t\t\t

\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t{props.info.Manager.Mobile}\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t

\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t

\r\n\t\t\t\t\t\t\t\t\t\t{props.info.Manager.Email\r\n\t\t\t\t\t\t\t\t\t\t\t? \"Email:\"\r\n\t\t\t\t\t\t\t\t\t\t\t: \"\"}\r\n\t\t\t\t\t\t\t\t\t

\r\n\t\t\t\t\t\t\t\t\t

\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t{props.info.Manager.Email}\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t

\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\"\"\r\n\t\t\t\t\t)}\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t
\r\n\r\n\t\t\t
    \r\n\t\t\t\t{props.info.Locations.map((item, index) => {\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t\t

    \r\n\t\t\t\t\t\t\t\t\t\t{item.Title}\r\n\t\t\t\t\t\t\t\t\t

    \r\n\t\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t\t\t

    \r\n\t\t\t\t\t\t\t\t\t\t\t{item.DistanceInMiles\r\n\t\t\t\t\t\t\t\t\t\t\t\t? item.DistanceInMiles +\r\n\t\t\t\t\t\t\t\t\t\t\t\t \" miles\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t: \"\"}\r\n\t\t\t\t\t\t\t\t\t\t

    \r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\tGet Directions\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t\t\t

    \r\n\t\t\t\t\t\t\t\t\t\t\tAddress:\r\n\t\t\t\t\t\t\t\t\t\t

    \r\n\t\t\t\t\t\t\t\t\t\t

    \r\n\t\t\t\t\t\t\t\t\t\t\t{item.Address?.Street &&\r\n\t\t\t\t\t\t\t\t\t\t\t\titem.Address.Street + \" \"}\r\n\t\t\t\t\t\t\t\t\t\t\t{item.Address?.City &&\r\n\t\t\t\t\t\t\t\t\t\t\t\titem.Address.City + \", \"}\r\n\t\t\t\t\t\t\t\t\t\t\t{item.Address?.StateCode &&\r\n\t\t\t\t\t\t\t\t\t\t\t\titem.Address.StateCode + \" \"}\r\n\t\t\t\t\t\t\t\t\t\t\t{item.Address?.CountryCode}\r\n\t\t\t\t\t\t\t\t\t\t

    \r\n\t\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t\t\t

    Phone:

    \r\n\t\t\t\t\t\t\t\t\t\t

    \r\n\t\t\t\t\t\t\t\t\t\t\t{item.Phone}\r\n\t\t\t\t\t\t\t\t\t\t

    \r\n\t\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t\t\t

    \r\n\t\t\t\t\t\t\t\t\t\t\tProducts:\r\n\t\t\t\t\t\t\t\t\t\t

    \r\n\t\t\t\t\t\t\t\t\t\t

    \r\n\t\t\t\t\t\t\t\t\t\t\t{item.ProductIds.map(\r\n\t\t\t\t\t\t\t\t\t\t\t\t(product, index) => {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tprops\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.productLines[\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tproduct\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t]\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t

    \r\n\t\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t
  • \r\n\t\t\t\t\t);\r\n\t\t\t\t})}\r\n\t\t\t
\r\n\t\t
\r\n\t);\r\n};\r\nexport default Dealer;\r\n","import React from \"react\";\r\n\r\nconst Contact = (props) => {\r\n const roles = (window.astec)\r\n ? window.astec.roles\r\n : {\"52f2d631-4c9b-4d03-8879-939cab3722ec\": \"Concrete Specialist\",\r\n \"84be4532-b71c-45cd-9e01-63063ffe15dd\": \"Controls\",\r\n \"dea664d3-2a30-4281-9570-8990a8898c1c\": \"Capital Equipment\",\r\n \"f9804930-91a0-48eb-9260-e452bbe32414\": \"Parts\"};\r\n\r\n return (\r\n
\r\n
\r\n \r\n \r\n \r\n

Astec Contact

\r\n
\r\n
    \r\n {props.info.Contacts.map((item, index) => {\r\n return (\r\n
  • \r\n
    \r\n

    \r\n {roles[item.RoleId]}\r\n

    \r\n
    \r\n
    \r\n
    \r\n
    \r\n

    \r\n {item.Name}\r\n

    \r\n

    \r\n {item.Position}\r\n

    \r\n
    \r\n {\r\n item.Mobile \r\n ?\r\n
    \r\n

    Mobile:

    \r\n

    {item.Mobile}

    \r\n
    \r\n : ''\r\n }\r\n {\r\n item.Email \r\n ?\r\n
    \r\n

    Email:

    \r\n

    \r\n \r\n {item.Email}\r\n\t\t\t\t\t\t\t\t\t\t \r\n

    \r\n \r\n
    \r\n : ''\r\n }\r\n
    \r\n
    \r\n
  • \r\n );\r\n })}\r\n
\r\n
\r\n );\r\n};\r\nexport default Contact;\r\n","import React, { useState, useRef, useEffect } from \"react\";\r\nimport ReactDOM from \"react-dom\";\r\nimport Dealer from \"./dealer\";\r\nimport Contact from \"./contact\";\r\n\r\nconst Locations = (props) => {\r\n\tconst containerElement = document.getElementById(\"where-to-buy\");\r\n\tconst [toggleStatus, setToggleStatus] = useState(true);\r\n\tconst [parameterType, setParameterType] = useState(\"zipcode\");\r\n\tconst [productType, setProductType] = useState(\"\");\r\n\tconst [errorStatus, setErrorStatus] = useState(\"\");\r\n\tconst [zipCode, setZipCode] = useState(\"\");\r\n\tconst [province, setProvince] = useState(\"Quebec\");\r\n\tconst [country, setCountry] = useState(\"United States\");\r\n\tconst [dealer, setDealer] = useState({});\r\n\tconst [noResults, setNoResults] = useState(\"initial\");\r\n\tconst [countries, setCountries] = useState([\r\n\t\t\"United States\",\r\n\t\t\"Canada\",\r\n\t\t\"South Africa\",\r\n\t\t\"Australia\",\r\n\t\t\"Mexico\",\r\n\t\t\"Bulgaria\",\r\n\t]);\r\n\tconst [productLines, setProductLines] = useState({\r\n\t\t\"6ee5c2a9-3fd3-42f1-ad4f-e9b43c6e993b\": \"Drum Chippers\",\r\n\t\t\"7bffb082-23c0-47d0-b25c-1f667a4b3da3\": \"Mobile Crushing & Screening\",\r\n\t\t\"15a0008d-0b10-48c0-ab78-13b282888435\": \"Soil Stabilizers\",\r\n\t\t\"6026d30a-8023-45a9-b8fb-bedefb665c11\": \"Mobile Mining Equipment\",\r\n\t\t\"230123b5-2b95-476c-b950-6d46eb02e9c2\": \"Crushing & Screening [Osborn]\",\r\n\t\t\"fd27bcc1-a2ad-420e-a0d3-9ea5b0f88740\": \"Highway Class Pavers\",\r\n\t\t\"bfeab2ac-b2c8-46f2-9a07-83111c35c7ef\": \"Washing & Classifying\",\r\n\t});\r\n\tconst [provinces, setProvinces] = useState();\r\n\tconst zipCodeInput = useRef(null);\r\n\r\n\r\n\t// when coming from product detail page\r\n\t// the query param for id can be prepopulated\r\n\t// if the product has an aorproductline field value\r\n\tconst setDefaultProducType = () => {\r\n\t\tconst params = new URLSearchParams(window.location.search);\r\n\t\tconst productId = params.get('productType');\r\n\t\tif (productId) {\r\n\t\t\tsetProductType(productId);\r\n\t\t} else {\r\n\t\t\tsetProductType(Object.keys(productLines)[0]);\r\n\t\t}\r\n\t}\r\n\r\n\tconst toggleFilter = (e) => {\r\n\t\tsetToggleStatus((status) => !status);\r\n\t};\r\n\r\n\tconst handleCountryChange = (e) => {\r\n\t\tconst value = e.target.value;\r\n\t\tsetCountry(value);\r\n\t\tif (value === \"United States\") {\r\n\t\t\tsetParameterType(\"zipcode\");\r\n\t\t} else if (value === \"Canada\" || value === \"Mexico\" || value === \"South Africa\" || value === \"Australia\") {\r\n\t\t\tsetParameterType(\"province\");\r\n\t\t\tsetProvince(provinces.find(p => p.CountryName === value)?.Provinces[0]);\r\n\t\t} else {\r\n\t\t\tsetParameterType(\"default\");\r\n\t\t}\r\n\t};\r\n\r\n\tconst handleProvinceChange = (e) => {\r\n\t\tconst value = e.target.value;\r\n\t\tsetProvince(value);\r\n\t};\r\n\r\n\tconst handleZipCodeUpdate = (e) => {\r\n\t\tconst value = e.target.value;\r\n\t\tsetZipCode(value);\r\n\t};\r\n\r\n\tconst updateProductType = (e) => {\r\n\t\tconst value = e.target.value;\r\n\t\tsetProductType(value);\r\n\t};\r\n\r\n\tconst searchLocations = () => {\r\n\t\t// U.S. requires zip code and product selected\r\n\t\t// Canada requires province and product selected\r\n\t\t// Other countries require product select\r\n\t\tif (parameterType === \"zipcode\" && zipCode.length !== 5) {\r\n\t\t\tsetErrorStatus(parameterType);\r\n\t\t\tzipCodeInput.current.focus();\r\n\t\t} else {\r\n\t\t\tsetErrorStatus(\"\");\r\n\t\t\trequestLocations();\r\n\t\t}\r\n\t};\r\n\r\n\tconst requestLocations = () => {\r\n\t\t// Can send 3 different params\r\n\t\t// United States => Product and Zip\r\n\t\t// Canada => Product and Province\r\n\t\t// Any Other Country = > Product and Country Name\r\n\t\tconst url = `/api/dealers/find?productLineId=${productType}&zipCode=${zipCode}`;\r\n\t\tconst url2 = `/api/dealers/find?productLineId=${productType}&countryName=${country}&provinceName=${province}`;\r\n\t\tconst url3 = `/api/dealers/find?productLineId=${productType}&countryName=${country}`;\r\n\t\tconst urlToSend =\r\n\t\t\tcountry === \"United States\"\r\n\t\t\t\t? url\r\n\t\t\t\t: parameterType === \"province\" ? url2 :\r\n\t\t\t\t\turl3;\r\n\t\t\t\t\r\n\t\tfetch(urlToSend)\r\n\t\t\t.then((response) => {\r\n\t\t\t\tif (response.status === 200) {\r\n\t\t\t\t\treturn response.json();\r\n\t\t\t\t} else {\r\n\t\t\t\t\tsetNoResults(true);\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\t.then((data) => {\r\n\t\t\t\trenderResults(data);\r\n\t\t\t})\r\n\t\t\t.catch((error) => {\r\n\t\t\t\tsetNoResults(true);\r\n\t\t\t});\r\n\t};\r\n\r\n\tconst scrollToResults = () => {\r\n\t\tconst search = document.getElementById(\"dealer-search\");\r\n\t\tsearch.scrollIntoView({\r\n\t\t\tbehavior: \"smooth\",\r\n\t\t});\r\n\t};\r\n\r\n\tconst renderResults = (data) => {\r\n\t\tif (data) {\r\n\t\t\tsetDealer(data);\r\n\t\t\tsetNoResults(false);\r\n\t\t}\r\n\t\tscrollToResults();\r\n\t};\r\n\r\n\tuseEffect(() => {\r\n\t\t// Set country, province and products\r\n\t\tif (window.astec) {\r\n\t\t\tsetCountries(window.astec.countries);\r\n\t\t\tsetProductLines(window.astec.productLines);\r\n\t\t\tsetProvinces(window.astec.provinces);\r\n\t\t\tsetDefaultProducType();\r\n\t\t}\r\n\t}, []);\r\n\r\n\tuseEffect(() => {\r\n\t\tsetDefaultProducType();\r\n\t}, [productLines]);\r\n\r\n\treturn ReactDOM.createPortal(\r\n\t\t
\r\n\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tSelect a country\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t{countries.map((item, index) => {\r\n\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t})}\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\r\n\t\t\t\t{parameterType === \"province\" ? (\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tSelect a Province\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t{provinces.find(p => p.CountryName === country)?.Provinces?.map((item, index) => {\r\n\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t) : parameterType === \"zipcode\" ? (\r\n\t\t\t\t\t\r\n\t\t\t\t) : (\r\n\t\t\t\t\t\"\"\r\n\t\t\t\t)}\r\n\t\t\t
\r\n\t\t\t
\r\n\t\t\t\t

\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tProduct Type\r\n\t\t\t\t\t\r\n\t\t\t\t

\r\n\r\n\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tSelect a product type\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t{Object.keys(productLines).map((item, index) => {\r\n\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t{productLines[item]}\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t})}\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t\t\r\n\t\t\t\tSearch\r\n\t\t\t\r\n\r\n\t\t\t
\r\n\t\t\t\t{noResults === true ? (\r\n\t\t\t\t\t

No results found.

\r\n\t\t\t\t) : dealer.IsAstecDirect ? (\r\n\t\t\t\t\t\r\n\t\t\t\t) : noResults !== \"initial\" ? (\r\n\t\t\t\t\t\r\n\t\t\t\t) : (\r\n\t\t\t\t\t\"\"\r\n\t\t\t\t)}\r\n\t\t\t
\r\n\t\t
,\r\n\t\tcontainerElement\r\n\t);\r\n};\r\nexport default Locations;\r\n","import React, { useState, useRef, createRef, useEffect } from \"react\";\r\nimport ReactDOM from \"react-dom\";\r\n\r\nconst HourlyTruckingCalculator = (props) => {\r\n\tconst containerElement = document.getElementById(\r\n\t\t\"hourly-trucking-calculator\"\r\n\t);\r\n\tconst [showResult, setShowResult] = useState(false);\r\n\tconst [startTime, setStartTime] = useState(\"\");\r\n\tconst [nearestStartTime, setNearestStartTime] = useState(\"\");\r\n\tconst [endTime, setEndTime] = useState(\"\");\r\n\tconst [nearestEndTime, setNearestEndTime] = useState(\"\");\r\n\tconst [showDelay, setShowDelay] = useState(false);\r\n\tconst [delayTimes, updateDelayTimes] = useState([]);\r\n\tconst [timeError, setTimeError] = useState(false);\r\n\tconst [inputsValid, setInputsValid] = useState(false);\r\n\tconst regexNumbersOnly = /^[0-9\\b]+$/;\r\n\r\n\tconst [inputs, updateInputs] = useState([\r\n\t\t{\r\n\t\t\tid: 0,\r\n\t\t\ttitle: \"Plant Production\",\r\n\t\t\ttext: \"How much asphalt in tons per hour is going to be available for this project\",\r\n\t\t\tlabel: \"tons/hr\",\r\n\t\t\tplaceholder: \"0\",\r\n\t\t\tvalue: \"\",\r\n\t\t\tname: \"PlantProduction\",\r\n\t\t\terror: false,\r\n\t\t},\r\n\t\t{\r\n\t\t\tid: 1,\r\n\t\t\ttitle: \"Truck Capacity\",\r\n\t\t\ttext: \"Capacity of trucks used for this day\",\r\n\t\t\tlabel: \"tons\",\r\n\t\t\tplaceholder: \"0\",\r\n\t\t\tvalue: \"\",\r\n\t\t\tname: \"TruckCapacity\",\r\n\t\t\terror: false,\r\n\t\t},\r\n\t\t{\r\n\t\t\tid: 2,\r\n\t\t\ttitle: \"Load Time\",\r\n\t\t\ttext: \"Time taken to load a truck at the asphalt plant\",\r\n\t\t\tlabel: \"min\",\r\n\t\t\ttype: \"number\",\r\n\t\t\tlabel: \"min\",\r\n\t\t\tplaceholder: \"00\",\r\n\t\t\tvalue: \"\",\r\n\t\t\tname: \"LoadTime\",\r\n\t\t\terror: false,\r\n\t\t},\r\n\t\t{\r\n\t\t\tid: 3,\r\n\t\t\ttitle: \"Tarp\",\r\n\t\t\ttext: \"Time taken to tarp the load in the truck\",\r\n\t\t\tlabel: \"min\",\r\n\t\t\tplaceholder: \"00\",\r\n\t\t\tvalue: \"\",\r\n\t\t\tname: \"Tarp\",\r\n\t\t\terror: false,\r\n\t\t},\r\n\t\t{\r\n\t\t\tid: 4,\r\n\t\t\ttitle: \"Haul to Site\",\r\n\t\t\ttext: \"Best achievable haul time to project site, any possible delays are added below\",\r\n\t\t\tlabel: \"min\",\r\n\t\t\tplaceholder: \"00\",\r\n\t\t\tvalue: \"\",\r\n\t\t\tname: \"HaulToSite\",\r\n\t\t\terror: false,\r\n\t\t},\r\n\t\t{\r\n\t\t\tid: 5,\r\n\t\t\ttitle: \"Wait on Site\",\r\n\t\t\ttext: \"Time truck spends on site waiting to dump\",\r\n\t\t\tlabel: \"min\",\r\n\t\t\tplaceholder: \"00\",\r\n\t\t\tvalue: \"\",\r\n\t\t\tname: \"WaitOnSite\",\r\n\t\t\terror: false,\r\n\t\t},\r\n\t\t{\r\n\t\t\tid: 6,\r\n\t\t\ttitle: \"Engaged with Hopper\",\r\n\t\t\ttext: \"Time truck spends engaged with hopper of paver or MTV\",\r\n\t\t\tlabel: \"min\",\r\n\t\t\tplaceholder: \"00\",\r\n\t\t\tvalue: \"\",\r\n\t\t\tname: \"EngagedWithHopper\",\r\n\t\t\terror: false,\r\n\t\t},\r\n\t\t{\r\n\t\t\tid: 7,\r\n\t\t\ttitle: \"Clean\",\r\n\t\t\ttext: \"Time truck spends cleaning off after dumping\",\r\n\t\t\tlabel: \"min\",\r\n\t\t\tplaceholder: \"00\",\r\n\t\t\tvalue: \"\",\r\n\t\t\tname: \"Clean\",\r\n\t\t\terror: false,\r\n\t\t},\r\n\t\t{\r\n\t\t\tid: 8,\r\n\t\t\ttitle: \"Return Haul\",\r\n\t\t\ttext: \"Best achievable haul time back to plant, any possible delays are added below\",\r\n\t\t\tlabel: \"min\",\r\n\t\t\tplaceholder: \"00\",\r\n\t\t\tvalue: \"\",\r\n\t\t\tname: \"ReturnHaul\",\r\n\t\t\terror: false,\r\n\t\t},\r\n\t]);\r\n\r\n\tconst elementsRef = useRef(inputs.map(() => createRef()));\r\n\tconst startTimeRef = useRef();\r\n\tconst endTimeRef = useRef();\r\n\tconst handleInputUpdate = (index) => (e) => {\r\n\t\tconst target = e.target;\r\n\t\tconst value = target.value;\r\n\t\tif (regexNumbersOnly.test(value) || value === \"\") {\r\n\t\t\tupdateInputs((inputs) =>\r\n\t\t\t\tinputs.map((item) =>\r\n\t\t\t\t\titem.id === index ? { ...item, value: value, error: false } : item\r\n\t\t\t\t)\r\n\t\t\t);\r\n\t\t}\r\n\t};\r\n\r\n\tconst handleTimeUpdate = (e) => {\r\n\t\t// hours is returned in 0 - 23 format\r\n\t\tconst target = e.target;\r\n\t\tconst values = target.value.split(\":\");\r\n\t\tconst name = target.name;\r\n\t\tconst minutes = Number(values[1]);\r\n\t\tconst hour = Number(values[0]);\r\n\t\tconst nearestHour = minutes > 30 ? hour + 1 : hour;\r\n\t\tif (name === \"start\") {\r\n\t\t\tsetStartTime(target.value);\r\n\t\t\tsetNearestStartTime(nearestHour);\r\n\t\t} else if (name === \"end\") {\r\n\t\t\tsetEndTime(target.value);\r\n\t\t\tsetNearestEndTime(nearestHour);\r\n\t\t}\r\n\t};\r\n\r\n\tconst toggleDelays = (e) => {\r\n\t\tif (nearestStartTime !== \"\" && nearestEndTime !== \"\") {\r\n\t\t\tsetTimeError(false);\r\n\t\t\tsetShowDelay(!showDelay);\r\n\t\t} else {\r\n\t\t\tsetTimeError(true);\r\n\t\t\tif(nearestStartTime === \"\") {\r\n\t\t\t\tstartTimeRef.current.focus();\r\n\t\t\t} else if(nearestEndTime === \"\") {\r\n\t\t\t\tendTimeRef.current.focus();\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tconst handleDelayUpdate = (index) => (e) => {\r\n\t\tconst target = e.target;\r\n\t\tconst value = target.value;\r\n\t\tconst name = target.name;\r\n\t\tif (name === \"departure\") {\r\n\t\t\tupdateDelayTimes((times) =>\r\n\t\t\t\ttimes.map((item) =>\r\n\t\t\t\t\titem === times[index] ? { ...item, departure: value } : item\r\n\t\t\t\t)\r\n\t\t\t);\r\n\t\t} else {\r\n\t\t\tupdateDelayTimes((times) =>\r\n\t\t\t\ttimes.map((item) =>\r\n\t\t\t\t\titem === times[index] ? { ...item, return: value } : item\r\n\t\t\t\t)\r\n\t\t\t);\r\n\t\t}\r\n\t};\r\n\r\n\tconst calculateTimeValue = (hour) => {\r\n\t\t// get plant production and truck capacity values from the inputs state\r\n\t\tconst plantProduction = Number(\r\n\t\t\tinputs.filter((x) => x.title === \"Plant Production\")[0].value\r\n\t\t);\r\n\t\tconst truckCapacity = Number(\r\n\t\t\tinputs.filter((x) => x.title === \"Truck Capacity\")[0].value\r\n\t\t);\r\n\t\t// get departure and return times from the delaytimes state\r\n\t\tconst departureTime = Number(\r\n\t\t\tdelayTimes.filter((x) => x.id === hour)[0].departure\r\n\t\t);\r\n\t\tconst returnTime = Number(\r\n\t\t\tdelayTimes.filter((x) => x.id === hour)[0].return\r\n\t\t);\r\n\t\t// sum all the minute input values\r\n\t\tlet timeSum = 0;\r\n\t\tinputs.forEach((item) => {\r\n\t\t\tif (item.label === \"min\") {\r\n\t\t\t\ttimeSum += Number(item.value);\r\n\t\t\t}\r\n\t\t});\r\n\t\tconst sumTotal = timeSum + departureTime + returnTime;\r\n\t\tconst timeValue = plantProduction / 60 / (truckCapacity / sumTotal);\r\n\t\treturn timeValue;\r\n\t};\r\n\r\n\tconst calculateTrucks = (hour) => {\r\n\t\tconst endTimeSecondary =\r\n\t\t\tnearestStartTime <= nearestEndTime\r\n\t\t\t\t? nearestEndTime\r\n\t\t\t\t: nearestStartTime + 24;\r\n\t\tif (nearestEndTime === endTimeSecondary) {\r\n\t\t\tif (hour >= nearestStartTime && hour < endTimeSecondary) {\r\n\t\t\t\tconst value = calculateTimeValue(hour);\r\n\t\t\t\treturn isNaN(value) ? 0 : value.toFixed(1);\r\n\t\t\t} else {\r\n\t\t\t\treturn 0;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tif (hour >= nearestStartTime || hour < nearestEndTime) {\r\n\t\t\t\tconst value = calculateTimeValue(hour);\r\n\t\t\t\treturn isNaN(value) ? 0 : value.toFixed(1);\r\n\t\t\t} else {\r\n\t\t\t\treturn 0;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tconst calculate = () => {\r\n\t\t// all fields are required except delay times\r\n\t\tif (nearestStartTime !== \"\" && nearestEndTime != \"\") {\r\n\t\t\tsetTimeError(false);\r\n\t\t\tif (inputsValid) {\r\n\t\t\t\tupdateDelayTimes((times) =>\r\n\t\t\t\t\ttimes.map((item) => ({\r\n\t\t\t\t\t\t...item,\r\n\t\t\t\t\t\ttrucks: calculateTrucks(Number(item.id)),\r\n\t\t\t\t\t}))\r\n\t\t\t\t);\r\n\t\t\t\tsetShowResult(true);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tsetTimeError(true);\r\n\t\t}\r\n\t\tupdateInputs((inputs) =>\r\n\t\t\tinputs.map((item) =>\r\n\t\t\t\titem.value === \"\" || item.value === 0\r\n\t\t\t\t\t? { ...item, error: true }\r\n\t\t\t\t\t: { ...item, error: false }\r\n\t\t\t)\r\n\t\t);\r\n\t\tlet counter = 0;\r\n\t\tinputs.forEach((item) => {\r\n\t\t\tif (item.value === \"\") {\r\n\t\t\t\tcounter++;\r\n\t\t\t\tsetInputsValid(false);\r\n\t\t\t\tif(counter === 1) {\r\n\t\t\t\t\telementsRef.current[item.id].current.focus();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t\t// Formula\r\n\t\t// =IF(K21=L21,IF(AND(F26>=K20,F26=K20,F26= start time && current time hour < end time {\r\n\t\t\t\t\treturn plant production / 60 (trucky capacity / sum(load time to return haul, departure, return time))\r\n\t\t\t\t} else {\r\n\t\t\t\t\t0\r\n\t\t\t\t}\r\n\t\t\telse if they are not the same {\r\n\t\t\t\tif(current time hour >= start time || current time hour < end time) {\r\n\t\t\t\t\tif the current time hour >= start time && current time hour < end time {\r\n\t\t\t\t\t\treturn plant production / 60 (trucky capacity / sum(load time to return haul, departure, return time))\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t0\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t*/\r\n\t};\r\n\r\n\tconst resetCalculator = () => {\r\n\t\tsetShowResult(false);\r\n\t\tsetStartTime(\"\");\r\n\t\tsetNearestStartTime(\"\");\r\n\t\tsetEndTime(\"\");\r\n\t\tsetNearestEndTime(\"\");\r\n\t\tsetShowDelay(false);\r\n\t\tupdateDelayTimes([]);\r\n\t\tsetTimeError(false);\r\n\t\tsetInputsValid(false);\r\n\t\tupdateInputs((inputs) =>\r\n\t\t\tinputs.map((item) => ({\r\n\t\t\t\t...item,\r\n\t\t\t\tvalue: \"\",\r\n\t\t\t\terror: false,\r\n\t\t\t}))\r\n\t\t);\r\n\t};\r\n\r\n\tuseEffect(() => {\r\n\t\tsetInputsValid(true);\r\n\t\tinputs.forEach((item) => {\r\n\t\t\tif (item.value === \"\") {\r\n\t\t\t\tsetInputsValid(false);\r\n\t\t\t}\r\n\t\t});\r\n\t}, [inputs]);\r\n\r\n\tuseEffect(() => {\r\n\t\tif( nearestStartTime && nearestEndTime) {\r\n\t\t\tlet startTime = nearestStartTime;\r\n\t\t\tconst range = (nearestStartTime === nearestEndTime)\r\n\t\t\t\t? [nearestStartTime] : [];\r\n\t\t\tif(nearestStartTime !== nearestEndTime) {\r\n\t\t\t\tfor (let i = 0; i < 24; i++) {\r\n\t\t\t\t\trange.push(startTime);\r\n\t\t\t\t\tstartTime++;\r\n\t\t\t\t\tif (startTime === nearestEndTime) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t} else if (startTime === 25) {\r\n\t\t\t\t\t\tstartTime = 1;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tupdateDelayTimes((times) =>\r\n\t\t\t\ttimes.filter((x) => range.indexOf(x.time) > -1)\r\n\t\t\t);\r\n\t\t\tconst delayData = range.map((hour) => {\r\n\t\t\t\tconst formattedTime =\r\n\t\t\t\t\thour < 13\r\n\t\t\t\t\t\t? (\"0\" + hour).slice(-2) + \":00 AM\"\r\n\t\t\t\t\t\t: hour - 12 + \":00 PM\";\r\n\t\t\t\treturn {\r\n\t\t\t\t\tid: hour,\r\n\t\t\t\t\ttime: formattedTime,\r\n\t\t\t\t\tdeparture: \"\",\r\n\t\t\t\t\treturn: \"\",\r\n\t\t\t\t\ttrucks: 0,\r\n\t\t\t\t};\r\n\t\t\t});\r\n\t\t\tupdateDelayTimes((times) => [...times, ...delayData]);\r\n\t\t}\r\n\t}, [nearestStartTime, nearestEndTime]);\r\n\r\n\treturn ReactDOM.createPortal(\r\n\t\t
\r\n\t\t\t
\r\n\t\t\t\t{inputs.map((item, index) => {\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t 0}`}\r\n\t\t\t\t\t\t\tkey={index}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t

\r\n\t\t\t\t\t\t\t\t\t{item.title}\r\n\t\t\t\t\t\t\t\t

\r\n\t\t\t\t\t\t\t\t

\r\n\t\t\t\t\t\t\t\t\t{item.text}\r\n\t\t\t\t\t\t\t\t

\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t);\r\n\t\t\t\t})}\r\n\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t

\r\n\t\t\t\t\t\t\tStart & End Time\r\n\t\t\t\t\t\t

\r\n\t\t\t\t\t\t

Enter the time, to the closest hour, you are going to start and end paving

\r\n\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t{timeError && (\r\n\t\t\t\t\t\t\t\tStart and End times are required\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\r\n\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t

Delay Time

\r\n\t\t\t\t\t\t

Delay time allows you to enter the time in minutes that a truck will be delayed from its best haul time, either to the site or returning from the site.

\r\n\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tAdd Delay Time\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\t
    \r\n\t\t\t\t\t\t{delayTimes.map((item, index) => {\r\n\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t

    \r\n\t\t\t\t\t\t\t\t\t\t{item.time}\r\n\t\t\t\t\t\t\t\t\t

    \r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t})}\r\n\t\t\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t

\r\n\t\t\t\t\t\tTrucks Needed\r\n\t\t\t\t\t

\r\n\t\t\t\t
\r\n\t\t\t\t{!showResult ? (\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tCalculate\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t) : (\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t{delayTimes.map((item, index) => {\r\n\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\tTime\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\tTrucks\r\n\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t\t\t{item.time}\r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t{item.trucks}\r\n\t\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tReset Calculator\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t)}\r\n\t\t\t\t{\r\n\t\t\t\t\tshowResult &&


\r\n\t\t\t\t\tDue to changing operating and material conditions prevalent in any material processing, the shown figures should be considered as theoretical estimates only and are based on assumed input values provided by the customer. Astec, and its affiliate brands, make no guarantee of actual field results, and therefore, no production performance or warranty applies

\r\n\t\t\t\t}\r\n\t\t\t
\r\n\t\t,\r\n\t\tcontainerElement\r\n\t);\r\n};\r\nexport default HourlyTruckingCalculator;\r\n","import React, { useState, useRef, createRef, useEffect } from \"react\";\r\nimport ReactDOM from \"react-dom\";\r\n\r\nconst PavingCalculator = (props) => {\r\n\tconst containerElement = document.getElementById(\"paving-calculator\");\r\n\tconst [showResult, setShowResult] = useState(false);\r\n\tconst [inputsValid, setInputsValid] = useState(false);\r\n\tconst [inputs, updateInputs] = useState([\r\n\t\t{\r\n\t\t\tid: 0,\r\n\t\t\ttitle: \"Total Paving Time\",\r\n\t\t\ttext: \"\",\r\n\t\t\tlabel: \"hours\",\r\n\t\t\tplaceholder: \"0\",\r\n\t\t\tvalue: \"\",\r\n\t\t\tname: \"TotalPavingTime\",\r\n\t\t\terror: false,\r\n\t\t\trequired: true,\r\n\t\t},\r\n\t\t{\r\n\t\t\tid: 1,\r\n\t\t\ttitle: \"Production Rate of HMA Plant\",\r\n\t\t\ttext: \"\",\r\n\t\t\tlabel: \"tons/hr\",\r\n\t\t\tplaceholder: \"0\",\r\n\t\t\tvalue: \"\",\r\n\t\t\tname: \"ProductionRate\",\r\n\t\t\terror: false,\r\n\t\t\trequired: true,\r\n\t\t},\r\n\t\t{\r\n\t\t\tid: 2,\r\n\t\t\ttitle: \"Truck Capacity\",\r\n\t\t\ttext: \"\",\r\n\t\t\tlabel: \"tons\",\r\n\t\t\tplaceholder: \"0\",\r\n\t\t\tvalue: \"\",\r\n\t\t\tname: \"TruckCapacity\",\r\n\t\t\terror: false,\r\n\t\t\trequired: true,\r\n\t\t},\r\n\t\t{\r\n\t\t\tid: 3,\r\n\t\t\ttitle: \"Paving Thickness\",\r\n\t\t\ttext: \"\",\r\n\t\t\tlabel: \"inches\",\r\n\t\t\tplaceholder: \"0\",\r\n\t\t\tvalue: \"\",\r\n\t\t\tname: \"PavingThickness\",\r\n\t\t\terror: false,\r\n\t\t\trequired: true,\r\n\t\t},\r\n\t\t{\r\n\t\t\tid: 4,\r\n\t\t\ttitle: \"Paving Width\",\r\n\t\t\ttext: \"\",\r\n\t\t\tlabel: \"feet\",\r\n\t\t\tplaceholder: \"0\",\r\n\t\t\tvalue: \"\",\r\n\t\t\tname: \"PavingWidth\",\r\n\t\t\terror: false,\r\n\t\t\trequired: true,\r\n\t\t},\r\n\t\t{\r\n\t\t\tid: 5,\r\n\t\t\ttitle: \"Uncompacted Material Density\",\r\n\t\t\ttext: \"\",\r\n\t\t\tlabel: \"lbs/ft\",\r\n\t\t\tsuper: \"3\",\r\n\t\t\tplaceholder: \"0\",\r\n\t\t\tvalue: \"\",\r\n\t\t\tname: \"MaterialDensity\",\r\n\t\t\terror: false,\r\n\t\t\trequired: true,\r\n\t\t},\r\n\t\t{\r\n\t\t\tid: 6,\r\n\t\t\ttitle: \"Density of Mat Before Rolling\",\r\n\t\t\ttext: \"\",\r\n\t\t\tlabel: \"percent\",\r\n\t\t\tplaceholder: \"0\",\r\n\t\t\tvalue: \"\",\r\n\t\t\tname: \"DensityOfMat\",\r\n\t\t\terror: false,\r\n\t\t\trequired: true,\r\n\t\t},\r\n\t\t{\r\n\t\t\tid: 7,\r\n\t\t\ttitle: \"Final Density Required\",\r\n\t\t\ttext: \"\",\r\n\t\t\tlabel: \"percent\",\r\n\t\t\tplaceholder: \"0\",\r\n\t\t\tvalue: \"\",\r\n\t\t\tname: \"FinalDensity\",\r\n\t\t\terror: false,\r\n\t\t\trequired: true,\r\n\t\t},\r\n\t\t{\r\n\t\t\tid: 8,\r\n\t\t\ttitle: \"Actual Length\",\r\n\t\t\ttext: \"\",\r\n\t\t\tlabel: \"feet\",\r\n\t\t\tplaceholder: \"0\",\r\n\t\t\tvalue: \"\",\r\n\t\t\tname: \"ActualLength\",\r\n\t\t\terror: false,\r\n\t\t\trequired: false,\r\n\t\t}\r\n\t]);\r\n\tconst [pavingSpeed, setPavingSpeed] = useState('');\r\n\tconst [matLength, setMatLength] = useState('');\r\n\tconst [actualLength, setActualLength] = useState('');\r\n\tconst [percentYield, setPercentYield] = useState('');\r\n\tconst [expectedDistanceFeet, setExpectedDistanceFeet] = useState('');\r\n\tconst [expectedDistanceMiles, setExpectedDistanceMiles] = useState('');\r\n\r\n\tconst regexNumbersOnly = /^[0-9\\b]+$/;\r\n\tconst elementsRef = useRef(inputs.map(() => createRef()));\r\n\r\n\tconst handleInputUpdate = (index) => (e) => {\r\n\t\tconst target = e.target;\r\n\t\tconst value = target.value;\r\n\t\tif (regexNumbersOnly.test(value) || value === \"\") {\r\n\t\t\tupdateInputs((inputs) =>\r\n\t\t\t\tinputs.map((item) =>\r\n\t\t\t\t\titem.id === index ? { ...item, value: value, error: false } : item\r\n\t\t\t\t)\r\n\t\t\t);\r\n\t\t}\r\n\t};\r\n\r\n\tconst getInputValue = (name) => {\r\n\t\treturn inputs.filter((x) => x.name === name)[0].value;\r\n\t}\r\n\r\n\tconst calculate = () => {\r\n\t\tupdateInputs((inputs) =>\r\n\t\t\tinputs.map((item) =>\r\n\t\t\t\titem.value === \"\" && item.required\r\n\t\t\t\t\t? { ...item, error: true }\r\n\t\t\t\t\t: { ...item, error: false }\r\n\t\t\t)\r\n\t\t);\r\n\t\tlet counter = 0;\r\n\t\tinputs.forEach((item) => {\r\n\t\t\tif (item.value === \"\" && item.required) {\r\n\t\t\t\tcounter++;\r\n\t\t\t\tsetInputsValid(false);\r\n\t\t\t\tif(counter === 1) {\r\n\t\t\t\t\telementsRef.current[item.id].current.focus();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t\tif(inputsValid) {\r\n\t\t\tconst totalPavingTime = getInputValue(\"TotalPavingTime\");\r\n\t\t\tconst productionRate = getInputValue(\"ProductionRate\");\r\n\t\t\tconst truckCapacity = getInputValue(\"TruckCapacity\");\r\n\t\t\tconst pavingThickness = getInputValue(\"PavingThickness\");\r\n\t\t\tconst pavingWidth = getInputValue(\"PavingWidth\");\r\n\t\t\tconst materialDensity = getInputValue(\"MaterialDensity\");\r\n\t\t\tconst finalDensity = getInputValue(\"FinalDensity\");\r\n\t\t\tconst actualLength = getInputValue(\"ActualLength\");\r\n\r\n\t\t\tconst pavingSpeed = ((1/((pavingThickness/12) * pavingWidth)) * (1/materialDensity) * (2000 * productionRate)/60).toFixed(1);\r\n\t\t\tconst lengthOfMat = ((1/materialDensity) * (1/(pavingThickness/12*pavingWidth)) * (2000 * truckCapacity)).toFixed(1);\r\n\t\t\tconst percentYield = (actualLength / lengthOfMat * 100).toFixed(1);\r\n\t\t\tconst crossSectionalArea = pavingThickness / 12 * pavingWidth;\r\n\t\t\tconst expectedDistanceFeet = (productionRate * 2000 / materialDensity / crossSectionalArea * totalPavingTime).toFixed(1);\r\n\t\t\tconst expectedDistanceMiles = (expectedDistanceFeet / 5280).toFixed(1);\r\n\t\t\tsetPavingSpeed(isNaN(pavingSpeed) ? 0 : pavingSpeed);\r\n\t\t\tsetMatLength(isNaN(lengthOfMat) ? 0 : lengthOfMat);\r\n\t\t\tsetActualLength(isNaN(actualLength) ? 0 : actualLength);\r\n\t\t\tsetPercentYield(isNaN(percentYield) ? 0 : percentYield);\r\n\t\t\tsetExpectedDistanceFeet(isNaN(expectedDistanceFeet) ? 0 : expectedDistanceFeet);\r\n\t\t\tsetExpectedDistanceMiles(isNaN(expectedDistanceMiles) ? 0 : expectedDistanceMiles);\r\n\t\t\tsetShowResult(true);\r\n\t\t}\r\n\t}\r\n\r\n\tconst resetCalculator = () => {\r\n\t\tsetShowResult(false);\r\n\t\tsetPavingSpeed('');\r\n\t\tsetMatLength('');\r\n\t\tsetActualLength('');\r\n\t\tsetPercentYield('');\r\n\t\tsetExpectedDistanceFeet('');\r\n\t\tsetExpectedDistanceMiles('');\r\n\t\tsetInputsValid(false);\r\n\t\tupdateInputs((inputs) =>\r\n\t\t\tinputs.map((item) => ({\r\n\t\t\t\t...item,\r\n\t\t\t\tvalue: \"\",\r\n\t\t\t\terror: false,\r\n\t\t\t}))\r\n\t\t);\r\n\t};\r\n\r\n\tuseEffect(() => {\r\n\t\tsetInputsValid(true);\r\n\t\tinputs.forEach((item) => {\r\n\t\t\tif (item.value === \"\" && item.required) {\r\n\t\t\t\tsetInputsValid(false);\r\n\t\t\t}\r\n\t\t});\r\n\t}, [inputs]);\r\n\r\n\treturn ReactDOM.createPortal(\r\n\t\t
\r\n\t\t\t
\r\n\t\t\t\t{inputs.map((item, index) => {\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t 0}`}\r\n\t\t\t\t\t\t\tkey={index}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t

\r\n\t\t\t\t\t\t\t\t\t{item.title}\r\n\t\t\t\t\t\t\t\t

\r\n\t\t\t\t\t\t\t\t

\r\n\t\t\t\t\t\t\t\t\t{item.text}\r\n\t\t\t\t\t\t\t\t

\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t);\r\n\t\t\t\t})}\r\n\t\t\t
\r\n\t\t\t
\r\n\t\t\t\t{\r\n\t\t\t\t\tshowResult ? \r\n\t\t\t\t\t<>\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t

\r\n\t\t\t\t\t\t\t\tPaving Speed\r\n\t\t\t\t\t\t\t

\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t{pavingSpeed}\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tft/min\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t: ''\r\n\t\t\t\t}\r\n\t\t\t\t
\r\n\t\t\t\t\t

\r\n\t\t\t\t\t\t{showResult ? Yield : Paving Speed}\r\n\t\t\t\t\t

\r\n\t\t\t\t
\r\n\t\t\t\t{!showResult ? (\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tCalculate\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t) : (\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tactualLength === \"\"\r\n\t\t\t\t\t\t\t?\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t

Actual Length is required to calculate yield.

\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t:\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t
Length of Mat for One Truck at 100% Yield{matLength} feet
\r\n\t\t\t\t\t\t\t\t\t\t\tPercent Yield\r\n\t\t\t\t\t\t\t\t\t\t{percentYield} %
Expected Distance Per Day\r\n\t\t\t\t\t\t\t\t\t\t\t{expectedDistanceFeet} feet\r\n\t\t\t\t\t\t\t\t\t\t\t{expectedDistanceMiles} miles\r\n\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tReset Calculator\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t)}\r\n\t\t\t\t{\r\n\t\t\t\t\tshowResult &&


\r\n\t\t\t\t\tDue to changing operating and material conditions prevalent in any material processing, the shown figures should be considered as theoretical estimates only and are based on assumed input values provided by the customer. Astec, and its affiliate brands, make no guarantee of actual field results, and therefore, no production performance or warranty applies

\r\n\t\t\t\t}\r\n\t\t\t
\r\n\t\t,\r\n\t\tcontainerElement\r\n\t);\r\n};\r\nexport default PavingCalculator;\r\n","import React, { useState, useRef, createRef, useEffect } from \"react\";\r\nimport ReactDOM from \"react-dom\";\r\n\r\nconst TruckCycleTimeCalculator = (props) => {\r\n\tconst containerElement = document.getElementById(\"cycle-time-calculator\");\r\n\tconst [showResult, setShowResult] = useState(false);\r\n\tconst [inputsValid, setInputsValid] = useState(false);\r\n\tconst [inputs, updateInputs] = useState([\r\n\t\t{\r\n\t\t\tid: 0,\r\n\t\t\ttitle: \"Production Rate of HMA Plant for this project\",\r\n\t\t\ttext: \"\",\r\n\t\t\tlabel: \"tons/hr\",\r\n\t\t\tplaceholder: \"0\",\r\n\t\t\tvalue: \"\",\r\n\t\t\tname: \"ProductionRate\",\r\n\t\t\terror: false,\r\n\t\t},\r\n\t\t{\r\n\t\t\tid: 1,\r\n\t\t\ttitle: \"Truck Capacity\",\r\n\t\t\ttext: \"\",\r\n\t\t\tlabel: \"tons\",\r\n\t\t\tplaceholder: \"0\",\r\n\t\t\tvalue: \"\",\r\n\t\t\tname: \"TruckCapacity\",\r\n\t\t\terror: false,\r\n\t\t},\r\n\t\t{\r\n\t\t\tid: 2,\r\n\t\t\ttitle: \"Truck Loading\",\r\n\t\t\ttext: \"\",\r\n\t\t\tlabel: \"min\",\r\n\t\t\tplaceholder: \"0\",\r\n\t\t\tvalue: \"\",\r\n\t\t\tname: \"TruckLoading\",\r\n\t\t\terror: false,\r\n\t\t},\r\n\t\t{\r\n\t\t\tid: 3,\r\n\t\t\ttitle: \"Tarp\",\r\n\t\t\ttext: \"\",\r\n\t\t\tlabel: \"min\",\r\n\t\t\tplaceholder: \"0\",\r\n\t\t\tvalue: \"\",\r\n\t\t\tname: \"Tarp\",\r\n\t\t\terror: false,\r\n\t\t},\r\n\t\t{\r\n\t\t\tid: 4,\r\n\t\t\ttitle: \"Haul To Site\",\r\n\t\t\ttext: \"\",\r\n\t\t\tlabel: \"min\",\r\n\t\t\tplaceholder: \"0\",\r\n\t\t\tvalue: \"\",\r\n\t\t\tname: \"HaulToSite\",\r\n\t\t\terror: false,\r\n\t\t},\r\n\t\t{\r\n\t\t\tid: 5,\r\n\t\t\ttitle: \"Possible Delay\",\r\n\t\t\ttext: \"rush hour, school zones, etc.\",\r\n\t\t\tlabel: \"min\",\r\n\t\t\tplaceholder: \"0\",\r\n\t\t\tvalue: \"\",\r\n\t\t\tname: \"PossibleDelay\",\r\n\t\t\terror: false,\r\n\t\t},\r\n\t\t{\r\n\t\t\tid: 6,\r\n\t\t\ttitle: \"Waiting to Dump With MTV\",\r\n\t\t\ttext: \"\",\r\n\t\t\tlabel: \"min\",\r\n\t\t\tplaceholder: \"0\",\r\n\t\t\tvalue: \"\",\r\n\t\t\tname: \"WaitingToDump\",\r\n\t\t\terror: false,\r\n\t\t},\r\n\t\t{\r\n\t\t\tid: 7,\r\n\t\t\ttitle: \"Waiting to Dump Without MTV\",\r\n\t\t\ttext: \"\",\r\n\t\t\tlabel: \"min\",\r\n\t\t\tplaceholder: \"0\",\r\n\t\t\tvalue: \"\",\r\n\t\t\tname: \"WaitingToDumpSecondary\",\r\n\t\t\terror: false,\r\n\t\t},\r\n\t\t{\r\n\t\t\tid: 8,\r\n\t\t\ttitle: \"Engaged w/ Hopper With MTV\",\r\n\t\t\ttext: \"\",\r\n\t\t\tlabel: \"min\",\r\n\t\t\tplaceholder: \"0\",\r\n\t\t\tvalue: \"\",\r\n\t\t\tname: \"EngagedWithHopper\",\r\n\t\t\terror: false,\r\n\t\t},\r\n\t\t{\r\n\t\t\tid: 9,\r\n\t\t\ttitle: \"Engaged w/ Hopper Without MTV\",\r\n\t\t\ttext: \"\",\r\n\t\t\tlabel: \"min\",\r\n\t\t\tplaceholder: \"0\",\r\n\t\t\tvalue: \"\",\r\n\t\t\tname: \"EngagedWithHopperSecondary\",\r\n\t\t\terror: false,\r\n\t\t},\r\n\t\t{\r\n\t\t\tid: 10,\r\n\t\t\ttitle: \"Cleanup\",\r\n\t\t\ttext: \"\",\r\n\t\t\tlabel: \"min\",\r\n\t\t\tplaceholder: \"0\",\r\n\t\t\tvalue: \"\",\r\n\t\t\tname: \"Cleanup\",\r\n\t\t\terror: false,\r\n\t\t},\r\n\t\t{\r\n\t\t\tid: 11,\r\n\t\t\ttitle: \"Return Haul\",\r\n\t\t\ttext: \"\",\r\n\t\t\tlabel: \"min\",\r\n\t\t\tplaceholder: \"0\",\r\n\t\t\tvalue: \"\",\r\n\t\t\tname: \"ReturnHaul\",\r\n\t\t\terror: false,\r\n\t\t},\r\n\t\t{\r\n\t\t\tid: 12,\r\n\t\t\ttitle: \"Possible Delay\",\r\n\t\t\ttext: \"rush hour, school zones, etc.\",\r\n\t\t\tlabel: \"min\",\r\n\t\t\tplaceholder: \"0\",\r\n\t\t\tvalue: \"\",\r\n\t\t\tname: \"PossibleDelaySecondary\",\r\n\t\t\terror: false,\r\n\t\t},\r\n\t]);\r\n\tconst [trucksNeeded, setTrucksNeeded] = useState(\"\");\r\n\tconst [trucksNeededWithDelay, setTrucksNeededWithDelay] = useState(\"\");\r\n\tconst [trucksNeededSecondary, setTrucksNeededSecondary] = useState(\"\");\r\n\tconst [trucksNeededWithDelaySecondary, setTrucksNeededWithDelaySecondary] =\r\n\t\tuseState(\"\");\r\n\r\n\tconst regexNumbersOnly = /^[0-9\\b]+$/;\r\n\tconst regexNumbersAndDots = /^[0-9]*\\.?[0-9]*$/;\r\n\tconst elementsRef = useRef(inputs.map(() => createRef()));\r\n\r\n\tconst handleInputUpdate = (index) => (e) => {\r\n\t\tconst target = e.target;\r\n\t\tconst value = Number(target.value);\r\n\t\tif (regexNumbersOnly.test(value) || value === \"\") {\r\n\t\t\tupdateInputs((inputs) =>\r\n\t\t\t\tinputs.map((item) =>\r\n\t\t\t\t\titem.id === index\r\n\t\t\t\t\t\t? { ...item, value: value, error: false }\r\n\t\t\t\t\t\t: item\r\n\t\t\t\t)\r\n\t\t\t);\r\n\t\t}\r\n\t};\r\n\r\n\tconst getInputValue = (name) => {\r\n\t\treturn inputs.filter((x) => x.name === name)[0].value;\r\n\t};\r\n\r\n\tconst calculate = () => {\r\n\t\tupdateInputs((inputs) =>\r\n\t\t\tinputs.map((item) =>\r\n\t\t\t\titem.value === \"\"\r\n\t\t\t\t\t? { ...item, error: true }\r\n\t\t\t\t\t: { ...item, error: false }\r\n\t\t\t)\r\n\t\t);\r\n\t\tlet counter = 0;\r\n\t\tinputs.forEach((item) => {\r\n\t\t\tif (item.value === \"\") {\r\n\t\t\t\tcounter++;\r\n\t\t\t\tsetInputsValid(false);\r\n\t\t\t\tif (counter === 1) {\r\n\t\t\t\t\telementsRef.current[item.id].current.focus();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t\tif (inputsValid) {\r\n\t\t\tconst productionRate = getInputValue(\"ProductionRate\");\r\n\t\t\tconst truckCapacity = getInputValue(\"TruckCapacity\");\r\n\t\t\tconst truckLoading = getInputValue(\"TruckLoading\");\r\n\t\t\tconst tarp = getInputValue(\"Tarp\");\r\n\t\t\tconst haulToSite = getInputValue(\"HaulToSite\");\r\n\t\t\tconst possibleDelay = getInputValue(\"PossibleDelay\");\r\n\t\t\tconst possibleDelaySecondary = getInputValue(\r\n\t\t\t\t\"PossibleDelaySecondary\"\r\n\t\t\t);\r\n\t\t\tconst waitingToDump = getInputValue(\"WaitingToDump\");\r\n\t\t\tconst waitingToDumpSecondary = getInputValue(\r\n\t\t\t\t\"WaitingToDumpSecondary\"\r\n\t\t\t);\r\n\t\t\tconst engagedWithHopper = getInputValue(\"EngagedWithHopper\");\r\n\t\t\tconst engagedWithHopperSecondary = getInputValue(\r\n\t\t\t\t\"EngagedWithHopperSecondary\"\r\n\t\t\t);\r\n\t\t\tconst cleanup = getInputValue(\"Cleanup\");\r\n\t\t\tconst returnHaul = getInputValue(\"ReturnHaul\");\r\n\r\n\t\t\tconst totalNoDelay =\r\n\t\t\t\ttruckLoading +\r\n\t\t\t\ttarp +\r\n\t\t\t\thaulToSite +\r\n\t\t\t\twaitingToDump +\r\n\t\t\t\tengagedWithHopper +\r\n\t\t\t\tcleanup +\r\n\t\t\t\treturnHaul;\r\n\t\t\tconst totalNoDelaySecondary =\r\n\t\t\t\ttotalNoDelay -\r\n\t\t\t\twaitingToDump -\r\n\t\t\t\tengagedWithHopper +\r\n\t\t\t\twaitingToDumpSecondary +\r\n\t\t\t\tengagedWithHopperSecondary;\r\n\t\t\tconst fullTotal =\r\n\t\t\t\ttotalNoDelay + possibleDelay + possibleDelaySecondary;\r\n\t\t\tconst fullTotalSecondary =\r\n\t\t\t\ttotalNoDelaySecondary + possibleDelay + possibleDelaySecondary;\r\n\t\t\tconst trucksNeeded =\r\n\t\t\t\tproductionRate / (truckCapacity / (totalNoDelay / 60));\r\n\t\t\tconst trucksNeededSecondary =\r\n\t\t\t\tproductionRate / (truckCapacity / (totalNoDelaySecondary / 60));\r\n\t\t\tconst trucksNeededDelay =\r\n\t\t\t\t(productionRate / truckCapacity) * (fullTotal / 60);\r\n\t\t\tconst trucksNeededDelaySecondary =\r\n\t\t\t\t(productionRate / truckCapacity) * (fullTotalSecondary / 60);\r\n\t\t\tsetTrucksNeeded(isNaN(trucksNeeded) ? 0 : trucksNeeded.toFixed(1));\r\n\t\t\tsetTrucksNeededSecondary(\r\n\t\t\t\tisNaN(trucksNeededSecondary)\r\n\t\t\t\t\t? 0\r\n\t\t\t\t\t: trucksNeededSecondary.toFixed(1)\r\n\t\t\t);\r\n\t\t\tsetTrucksNeededWithDelay(\r\n\t\t\t\tisNaN(trucksNeededDelay) ? 0 : trucksNeededDelay.toFixed(1)\r\n\t\t\t);\r\n\t\t\tsetTrucksNeededWithDelaySecondary(\r\n\t\t\t\tisNaN(trucksNeededDelaySecondary)\r\n\t\t\t\t\t? 0\r\n\t\t\t\t\t: trucksNeededDelaySecondary.toFixed(1)\r\n\t\t\t);\r\n\t\t\tsetShowResult(true);\r\n\t\t}\r\n\t};\r\n\r\n\tconst resetCalculator = () => {\r\n\t\tsetShowResult(false);\r\n\t\tsetInputsValid(false);\r\n\t\tupdateInputs((inputs) =>\r\n\t\t\tinputs.map((item) => ({\r\n\t\t\t\t...item,\r\n\t\t\t\tvalue: \"\",\r\n\t\t\t\terror: false,\r\n\t\t\t}))\r\n\t\t);\r\n\t};\r\n\r\n\tuseEffect(() => {\r\n\t\tsetInputsValid(true);\r\n\t\tinputs.forEach((item) => {\r\n\t\t\tif (item.value === \"\") {\r\n\t\t\t\tsetInputsValid(false);\r\n\t\t\t}\r\n\t\t});\r\n\t}, [inputs]);\r\n\r\n\treturn ReactDOM.createPortal(\r\n\t\t
\r\n\t\t\t
\r\n\t\t\t\t

Shuttle Buggy® MTV Trucking

\r\n\t\t\t
\r\n\t\t\t
\r\n\t\t\t\t{inputs.map((item, index) => {\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t 0}`}\r\n\t\t\t\t\t\t\tkey={index}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t{item.title}\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t{item.text}\r\n\t\t\t\t\t\t\t\t

\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t);\r\n\t\t\t\t})}\r\n\t\t\t
\r\n\t\t\t\r\n\t\t\t\t{!showResult ? (\r\n\t\t\t\t\t<>\r\n\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tCalculate\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t) : (\r\n\t\t\t\t\t<>\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t

\r\n\t\t\t\t\t\t\t\tTrucks Needed With MTV\r\n\t\t\t\t\t\t\t

\r\n\t\t\t\t\t\t
\r\n\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t\tTrucks Needed\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t{trucksNeeded}\r\n\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t\tTrucks Needed With Delay\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t{trucksNeededWithDelay}\r\n\t\t\t\t\t\t\t\t\t\t
\r\n\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t

\r\n\t\t\t\t\t\t\t\tTrucks Needed Without MTV\r\n\t\t\t\t\t\t\t

\r\n\t\t\t\t\t\t
\r\n\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t\tTrucks Needed\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t{trucksNeededSecondary}\r\n\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t\tTrucks Needed With Delay\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t{trucksNeededWithDelaySecondary}\r\n\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tReset Calculator\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t)}\r\n\t\t\t\t{\r\n\t\t\t\t\tshowResult &&


\r\n\t\t\t\t\tDue to changing operating and material conditions prevalent in any material processing, the shown figures should be considered as theoretical estimates only and are based on assumed input values provided by the customer. Astec, and its affiliate brands, make no guarantee of actual field results, and therefore, no production performance or warranty applies

\r\n\t\t\t\t}\r\n\t\t\t\r\n\t\t,\r\n\t\tcontainerElement\r\n\t);\r\n};\r\nexport default TruckCycleTimeCalculator;\r\n","export function formatUnitText (unit) {\r\n\tswitch (unit) {\r\n\t\tcase \"l/min\":\r\n\t\t\treturn \" LPM\"\r\n\t\tcase \"us-gal/min\":\r\n\t\t\treturn \" USGPM\"\r\n\t\tcase \"t/h\":\r\n\t\t\treturn \" TPH\";\r\n\t\tcase \"mt/h\":\r\n\t\t\treturn \" MTPH\";\r\n\t\tdefault:\r\n\t\t\treturn \" \" + unit;\r\n\t}\r\n};","import React, { useState, useRef, useEffect } from \"react\";\r\nimport ReactDOM from \"react-dom\";\r\nimport queryString from \"query-string\";\r\nimport { formatUnitText } from \"../helpers/helpers\";\r\n\r\nconst ProductCompareTable = (props) => {\r\n\tconst containerElement = document.getElementById('product-compare-table');\r\n\tconst productId = containerElement.getAttribute(\"data-id\");\r\n\t// const productId = \"90422bda-6a3d-4b0e-a08c-0ad4622e3e87\";\r\n\tconst localStorageUnit = localStorage.getItem('unitSystem');\r\n\tconst [filterExpanded, setFilterExpanded] = useState(false);\r\n\tconst [compareAll, setCompareAll] = useState(true);\r\n\tconst [products, updateProducts] = useState({});\r\n\tconst [models, updateModels] = useState([]);\r\n\tconst [specFields, updateSpecFields] = useState([]);\r\n\tconst [unitSystem, setUnitSystem] = useState(localStorageUnit ? localStorageUnit : \"imperial\");\r\n\tconst [showUnits, updateShowUnits] = useState(false);\r\n\tconst [tableType, setTableType] = useState('general'); // general or compare\r\n\t// api/elastic/byid?id=90422bda-6a3d-4b0e-a08c-0ad4622e3e87&indexName=products_637740782858594231\r\n\t// const apiLocal = \"https://www.astec-local.com/api/elastic/byid?id=90422bda-6a3d-4b0e-a08c-0ad4622e3e87&indexName=products_637741433496176526\";\r\n\tconst indexName = queryString.parse(window?.location?.search)?.indexName;\r\n\tconst toggleRef = useRef();\r\n\tconst compareTableRef = useRef();\r\n\tuseOnClickOutside(toggleRef, () => setFilterExpanded(false));\r\n\tconst url = `/api/elastic/byid?id=${productId}${indexName ? `&indexName=${indexName}` : \"\"}`;\r\n\tconst fetchModels = function() {\r\n\t\tfetch(url)\r\n\t\t\t.then((response) => {\r\n\t\t\t\treturn response.json()\r\n\t\t\t})\r\n\t\t\t.then(data => {\r\n\t\t\t\tupdateProducts(data);\r\n\t\t\t\tconst newFields = [];\r\n\t\t\t\tdata.models.map((model) => {\r\n\t\t\t\t\tmodel.specs.map((spec) => {\r\n\t\t\t\t\t\tif(spec.type === \"MEASUREMENT\") {\r\n\t\t\t\t\t\t\tupdateShowUnits(true);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif(newFields.some((field) => field.label === spec.label)) {\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tnewFields.push(spec);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t})\r\n\t\t\t\t});\r\n\t\t\t\tupdateSpecFields(newFields);\r\n\t\t\t\tconst newModels = data.models.map((item) => ({\r\n\t\t\t\t\t...item,\r\n\t\t\t\t\tchecked: data.models.length > 1,\r\n\t\t\t\t}));\r\n\t\t\t\t// Create a new model state so we can filter/display through items easily\r\n\t\t\t\tupdateModels(newModels);\r\n\t\t\t})\r\n\t\t\t.catch(error => {\r\n\t\t\t\tconsole.error(\"Error retrieving product models\", error);\r\n\t\t\t});\r\n\t}\r\n\r\n\t// Get the lowest or highest value from measurements and number spec fields so we can display a range on the general table view\r\n\tconst getRangeValue = (field,range) => {\r\n\t\tlet lowestValue = Number.MAX_SAFE_INTEGER;\r\n\t\tlet highestValue = 0;\r\n\t\tconst type = field.type;\r\n\t\tconst unit = (type === 'MEASUREMENT') ? formatUnitText(field.units[unitSystem]) : '';\r\n\t\tif(type === 'MEASUREMENT' || type === 'NUMBER') {\r\n\t\t\tproducts.models.forEach(model => {\r\n\t\t\t\tmodel.specs.forEach(spec => {\r\n\t\t\t\t\tif(spec.label === field.label) {\r\n\t\t\t\t\t\tconst specValue = (type === 'NUMBER')\r\n\t\t\t\t\t\t\t? spec.value\r\n\t\t\t\t\t\t\t: (unitSystem === 'imperial')\r\n\t\t\t\t\t\t\t? spec.value.imperial\r\n\t\t\t\t\t\t\t: spec.value.metric;\r\n\t\t\t\t\t\tif(range === 'min') {\r\n\t\t\t\t\t\t\tlowestValue = (specValue < lowestValue) ? specValue : lowestValue;\r\n\t\t\t\t\t\t} else if(range === 'max') {\r\n\t\t\t\t\t\t\thighestValue = (specValue > highestValue) ? specValue : highestValue;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t});\r\n\t\t\tif(range === 'min') {\r\n\t\t\t\treturn lowestValue.toLocaleString() + ' ' + unit;\r\n\t\t\t} else if(range === 'max') {\r\n\t\t\t\treturn highestValue.toLocaleString() + ' ' + unit;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// Change the field type display text for the general view table\r\n\tconst getGeneralValue = (type) => {\r\n\t\tswitch(type) {\r\n\t\t\tcase 'YESNO':\r\n\t\t\t\treturn 'Yes/No';\r\n\t\t\tcase 'CLASSIFICATION':\r\n\t\t\t\treturn '--';\r\n\t\t\tcase 'TEXT':\t\r\n\t\t\t\treturn '--';\r\n\t\t\tdefault:\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t};\r\n\r\n\t// return range or general value depending on field type\r\n\tconst getFieldValue = (field, modelCount, specIndex) => {\r\n\t\tif (field.type === 'NUMBER') {\r\n\t\t\tconst minValue = getRangeValue(field, 'min');\r\n\t\t\tconst maxValue = getRangeValue(field, 'max');\r\n\t\t\tif (modelCount === 1) {\r\n\t\t\t\treturn minValue;\r\n\t\t\t} else {\r\n\t\t\t\treturn `${minValue} - ${maxValue}`;\r\n\t\t\t}\r\n\t\t} else if(field.type === 'MEASUREMENT') {\r\n\t\t\t// for measurements, return the free text field if its filled out for a single model view only\r\n\t\t\t// on the range view, return -- for a single model\r\n\t\t\t// however, if there are numeric values, display the range of those\r\n\t\t\tconst textUnitType = unitSystem + \"Text\";\r\n\t\t\tif (modelCount === 1) {\r\n\t\t\t\tif (field.value[textUnitType] !== \"\") {\r\n\t\t\t\t\treturn field.value[textUnitType];\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn field.value[unitSystem] + formatUnitText(field.units[unitSystem]);\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tconst minValue = getRangeValue(field, 'min');\r\n\t\t\t\tconst maxValue = getRangeValue(field, 'max');\r\n\t\t\t\tif (field.value[textUnitType] !== \"\") {\r\n\t\t\t\t\tconst maxNumeric = Number(maxValue.split(' ')[0]);\r\n\t\t\t\t\t// if max is greater than 0 there must be values in the numeric that can we can show for range\r\n\t\t\t\t\t// else this is just a free text field with no numeric values so display --\r\n\t\t\t\t\tif (maxNumeric > 0) {\r\n\t\t\t\t\t\treturn `${minValue} - ${maxValue}`;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\treturn \"--\";\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn `${minValue} - ${maxValue}`;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\t// For text, classifications and yes/no\r\n\t\t\tif (modelCount === 1) {\r\n\t\t\t\treturn models[0].specs[specIndex].value.toLocaleString();\r\n\t\t\t} else {\r\n\t\t\t\treturn getGeneralValue(field.type)\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// When a model is checked, set it to checked\r\n\t// The apply filter will then check every model and display only the checked ones\r\n\tconst addFilter = (e) => {\r\n\t\tconst target = e.target;\r\n\t\tconst modelName = target.value;\r\n\t\tif(target.checked) {\r\n\t\t\tupdateModels((models) => (\r\n\t\t\t\tmodels.map((item) => item.name === modelName ? {\r\n\t\t\t\t\t...item,\r\n\t\t\t\t\tchecked: true,\r\n\t\t\t\t}\r\n\t\t\t\t: item\r\n\t\t\t\t)));\r\n\t\t} else {\r\n\t\t\tupdateModels((models) => (\r\n\t\t\t\tmodels.map((item) => item.name === modelName ? {\r\n\t\t\t\t\t...item,\r\n\t\t\t\t\tchecked: false,\r\n\t\t\t\t}\r\n\t\t\t\t: item\r\n\t\t\t\t)));\r\n\t\t}\r\n\t}\r\n\r\n\tconst selectAllFilters = function(e) {\r\n\t\tconst target = e.target;\r\n\t\tsetCompareAll(target.checked);\r\n\t\tif(target.checked) {\r\n\t\t\tupdateModels((models) => (\r\n\t\t\t\tmodels.map((item) => ({\r\n\t\t\t\t\t...item,\r\n\t\t\t\t\tchecked: true,\r\n\t\t\t\t}))\r\n\t\t\t))\r\n\t\t}\r\n\t};\r\n\r\n\t// reset selected models to unchecked and not visible\r\n\tconst clearFilter = (e) => {\r\n\t\tconst target = e.target;\r\n\t\tconst targetName = target.getAttribute('data-name');\r\n\t\t// Firefox causes visual display issue on table re render, forcing style change seems to fix this\r\n\t\tcompareTableRef.current.style.opacity = '.9';\r\n\t\tsetTimeout(() => {\r\n\t\t\tcompareTableRef.current.style.opacity = '1';\r\n\t\t},0);\r\n\t\tconst visibleModels = models.filter((model) => model.checked);\r\n\t\t// We are about to remove the last model from the table\r\n\t\t// so uncheck the compare all checkbox\r\n\r\n\t\tif(visibleModels.length === 1) {\r\n\t\t\tsetCompareAll(false);\r\n\t\t}\r\n\t\tupdateModels((models) => models.map(item => item.name === targetName ? {\r\n\t\t\t...item,\r\n\t\t\tchecked: false,\r\n\t\t}\r\n\t\t: item\r\n\t\t));\r\n\t}\r\n\t\r\n\t// reset all models\r\n\tconst clearAllFilters = (e) => {\r\n\t\tsetCompareAll(false);\r\n\t\tupdateModels((models) => models.map((item) => ({\r\n\t\t\t...item,\r\n\t\t\tchecked: false,\r\n\t\t})));\r\n\t}\r\n\r\n\t// initial data fetch\r\n\tuseEffect(() => {\r\n\t\tfetchModels();\r\n\t},[]);\r\n\r\n\t// When deselecting models, set the table back to the general view when no models are selected\r\n\tuseEffect(() => {\r\n\t\tsetTableType('general');\r\n\t\tmodels.forEach((item) => {\r\n\t\t\tif(item.checked) {\r\n\t\t\t\tsetTableType('compare');\r\n\t\t\t}\r\n\t\t});\r\n\t},[models]);\r\n\r\n\treturn ReactDOM.createPortal(\r\n\t\t
\r\n\t\t\t{\r\n\t\t\t\tmodels.length > 1 &&\r\n\t\t\t\t

Model

\r\n\t\t\t}\r\n\t\t\t{\r\n\t\t\t\tmodels.length > 1 &&\r\n\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t\t
    \r\n\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tmodels.sort((a,b) => a.order - b.order).map((item,index) => {\r\n\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t}\r\n\t\t\t{\r\n\t\t\t\ttableType === 'compare' &&\r\n\t\t\t\t
    \r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tmodels.map((item,index) => {\r\n\t\t\t\t\t\t\tif(item.checked) {\r\n\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t}\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t
  • \r\n\t\t\t\t\t}\r\n\t\t\t\t
\r\n\t\t\t}\r\n\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t(tableType === 'general' && models.length > 1) && \r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t(tableType === 'general' && models.length === 1) && \r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\ttableType === 'compare' && models.map((model) => {\r\n\t\t\t\t\t\t\t\t\tif(model.checked) {\r\n\t\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tspecFields?.map((field,index) => {\r\n\t\t\t\t\t\t\t\t\treturn(\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\ttableType === 'general' &&\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\ttableType === 'compare' &&\r\n\t\t\t\t\t\t\t\t\t\tmodels.map((model) => {\r\n\t\t\t\t\t\t\t\t\t\t\tif(model.checked) {\r\n\t\t\t\t\t\t\t\t\t\t\t\tconst specValue = model.specs.find((spec) => spec.label === field.label);\r\n\t\t\t\t\t\t\t\t\t\t\t\tif(specValue) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tif(field.type === 'MEASUREMENT') {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst unitSystemText = unitSystem + \"Text\";\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t} else if(field.type === 'YESNO') {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t} \r\n\t\t\t\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t
SpecificationRangeKey Specs{model.name}
\r\n\t\t\t\t\t\t\t\t\t\t{field.label}\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t{getFieldValue(field, models.length, index)}\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{specValue.value[unitSystemText] !== \"\" ? specValue.value[unitSystemText] : specValue.value[unitSystem].toLocaleString()} \r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{specValue.value[unitSystemText] === \"\" && formatUnitText(field.units[unitSystem])}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tspecValue.value ? 'Yes' : 'No'\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{specValue.value.toLocaleString()}--
\r\n\t\t\t
\r\n\t\t\t{\r\n\t\t\t\tshowUnits &&\r\n\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t
UNITS:
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t}\r\n\t\t
,\r\n\t\tcontainerElement\r\n\t)\r\n};\r\nexport default ProductCompareTable;\r\n\r\n\r\nfunction useOnClickOutside(ref, handler) {\r\n\tuseEffect(\r\n\t () => {\r\n\t\tconst listener = (event) => {\r\n\t\t // Do nothing if clicking ref's element or descendent elements\r\n\t\t if (!ref.current || ref.current.contains(event.target)) {\r\n\t\t\treturn;\r\n\t\t }\r\n\t\t handler(event);\r\n\t\t};\r\n\t\tdocument.addEventListener(\"click\", listener);\r\n\t\treturn () => {\r\n\t\t document.removeEventListener(\"click\", listener);\r\n\t\t};\r\n\t },\r\n\t [ref, handler]\r\n\t);\r\n}","import React from \"react\";\r\n\r\nconst Svgs = () => {\r\n\treturn (\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t);\r\n};\r\nexport default Svgs;\r\n","import React, {useState} from \"react\";\r\nimport { formatUnitText } from \"../helpers/helpers\";\r\n\r\nconst ProductCard = ({ units, product, facets }) => {\r\n\r\n let specs = Object.values(product.models.flatMap(m => m.specs).reduce(function (r, a) {\r\n r[a.field] = r[a.field] || { ...a, values: [] };\r\n delete r[a.field].value;\r\n if (!r[a.field].values.includes(a.value)) {\r\n r[a.field].values.push(a.value);\r\n }\r\n return r;\r\n }, Object.create(null))); \r\n\r\n const isComponentType = facets.some((facet) => facet.label === \"componentTypes\");\r\n\r\n specs = specs.map(s => {\r\n if (s.type === 'NUMBER') {\r\n s.values = s.values.sort((a, b) => +a - +b);\r\n } else if (s.type === 'MEASUREMENT') {\r\n s.values = s.values.sort((a, b) => +a.imperial - +b.imperial);\r\n }\r\n return s;\r\n })\r\n\r\n // if an image errors on load, use this placeholder icon\r\n const imagePlaceholder = \"/ResourcePackages/Talon/assets/dist/images/Custom-Icon.png\";\r\n const [imageSrc, setImageSrc] = useState(product.image)\r\n\r\n const onImageError = (error) => {\r\n if (imageSrc !== imagePlaceholder) {\r\n setImageSrc(imagePlaceholder);\r\n }\r\n }\r\n \r\n return (\r\n <>\r\n
  • \r\n \r\n
    \r\n {\r\n product.image \r\n ? \r\n {product.name}\r\n : \"\"\r\n \r\n }\r\n
    \r\n
    \r\n

    {product.name}

    \r\n {\r\n !isComponentType &&\r\n \r\n \r\n {specs.map((s,index) => \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n
    {s.label}\r\n {/* localestring formats numbers with commas */}\r\n {s.type === 'NUMBER' ? <>\r\n {\r\n s.values.length > 1 ?\r\n <>\r\n {s.values[0].toLocaleString()} to {s.values.pop().toLocaleString()}\r\n \r\n : <>{s.values[0].toLocaleString()}\r\n }\r\n : s.type === 'MEASUREMENT' ? <>\r\n {units === \"metric\" && \r\n <>\r\n {\r\n s.values[0].metricText && s.values.length > 1\r\n ? `${s.values[0].metricText} to ${s.values.pop().metricText}`\r\n : s.values[0].metricText !== \"\" \r\n ? s.values[0].metricText \r\n : s.values.length > 1\r\n ? `${s.values[0].metric} to ${s.values.pop().metric}`\r\n : s.values[0].metric\r\n }\r\n {/* need to format super tags when using the numeric value */}\r\n {\r\n s.units.metric === \"m3\" && !s.values[0].metricText\r\n ? m3\r\n : !s.values[0].metricText\r\n ? \" \" + formatUnitText(s.units.metric)\r\n : ''\r\n }\r\n \r\n }\r\n {units === \"imperial\" && \r\n <>\r\n {\r\n s.values[0].imperialText && s.values.length > 1\r\n ? `${s.values[0].imperialText} to ${s.values.pop().imperialText}`\r\n : s.values[0].imperialText !== \"\" \r\n ? s.values[0].imperialText \r\n : s.values.length > 1\r\n ? `${s.values[0].imperial} to ${s.values.pop().imperial}`\r\n : s.values[0].imperial\r\n }\r\n {\r\n s.units.imperial === \"yd3\" && !s.values[0].imperialText\r\n ? yd3\r\n : !s.values[0].imperialText\r\n ? \" \" + formatUnitText(s.units.imperial)\r\n : ''\r\n }\r\n }\r\n \r\n :\r\n <>\r\n {s.values.join(', ')}\r\n \r\n }\r\n
    \r\n }\r\n
    \r\n
  • \r\n \r\n )\r\n}\r\n\r\nexport default ProductCard;","import React, { useEffect, useState } from \"react\";\r\nimport Skeleton, { SkeletonTheme} from 'react-loading-skeleton'\r\nimport { formatUnitText } from \"../helpers/helpers\";\r\nimport 'react-loading-skeleton/dist/skeleton.css'\r\n\r\n// facets are the initial options we retrieve on page load (or on toggling units)\r\n// live facets are the ones available in the current result set from elastic. We use this to determine which ones to disable.\r\nconst ProductFacets = ({ units, params, setParams, facets, liveFacets, setSelected, selected }) => {\r\n const [filterStatus, setFilterStatus] = useState(false);\r\n const isRange = (option) => {\r\n return option.min || option.max;\r\n }\r\n\r\n const changeValue = (facet, option) => {\r\n const newParams = { ...params, page: 1 };\r\n const newFilter = { field: facet.field, key: option.key };\r\n if (facet.isSpecFacet) {\r\n const existing = newParams.specFilters.find(f => f.field === newFilter.field && f.key === newFilter.key);\r\n if (existing) {\r\n newParams.specFilters = newParams.specFilters.filter(f => !(f.field === newFilter.field && f.key === newFilter.key));\r\n } else {\r\n if(isRange(option)){\r\n newFilter.range = { min: option.min, max: option.max };\r\n }\r\n newParams.specFilters.push(newFilter);\r\n }\r\n } else {\r\n newParams.filters = [newFilter];\r\n }\r\n setParams(newParams);\r\n }\r\n\r\n const resetFilters = () => {\r\n const newParams = { ...params, specFilters: [], filters: [], page: 1 };\r\n setParams(newParams);\r\n }\r\n\r\n const isDisabled = (option, field) => {\r\n // total of 0 are facets that wont display results\r\n if (option.total === 0) {\r\n return true;\r\n }\r\n const optionKey = option.key;\r\n // if the option doesnt exist in the live facet\r\n if(!liveFacets?.some(facet => facet.options.some(o => o.key === optionKey) && facet.field == field)){\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n // for ranges, need to convert them using the min/max values so they dont have \"asterisk\" in it.\r\n const formatOptionKey = (option) => {\r\n if (option.min && option.max) {\r\n const range = `${option.min} - ${option.max}`;\r\n return range.toLocaleString();\r\n } else if(option.min) {\r\n // when no max, we are at the highest range\r\n const range = `${option.min}+`;\r\n return range.toLocaleString();\r\n } else if(option.max) {\r\n // lowest range\r\n const range = `0 - ${option.max}`\r\n return range.toLocaleString();\r\n } else {\r\n return option.key.toLocaleString();\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n if(filterStatus) {\r\n document.body.classList.add('filter-active');\r\n } else {\r\n document.body.classList.remove('filter-active');\r\n }\r\n }, [filterStatus]);\r\n\r\n return (\r\n <>\r\n
    \r\n\t\t\t\t setFilterStatus(false)}\r\n\t\t\t\t>\r\n\t\t\t\t
    \r\n\t\t\t\t\t
    \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tFilter\r\n\t\t\t\t\t
    \r\n\t\t\t\t\t\r\n\t\t\t\t
    \r\n
      \r\n {\r\n !facets && Array(4).fill().map(() => (\r\n
    • \r\n

      \r\n \r\n

      \r\n
        \r\n {\r\n Array(5).fill().map(() => (\r\n
      • \r\n \r\n
      • \r\n ))\r\n }\r\n
      \r\n
    • \r\n ))\r\n }\r\n {facets && facets.map((facet,index) => <>\r\n
    • \r\n

      {facet.label === \"componentTypes\" ? \"Component Type\" : facet.label}

      \r\n
        \r\n {facet.options.sort((a,b) => a.key - b.key).map((option,subIndex) => {\r\n if(facet.field === \"componentTypes\") {\r\n return (\r\n
      • \r\n \r\n
      • \r\n )\r\n } else {\r\n return (\r\n
      • \r\n \r\n
      • \r\n )\r\n }\r\n }\r\n \r\n )}\r\n
      \r\n
    • \r\n )}\r\n
    \r\n\t\t\t\t setFilterStatus(false)}>\r\n\t\t\t\t\tApply Filter\r\n\t\t\t\t\r\n\t\t\t
    \r\n {/* 32 Results Found */}\r\n\t\t\t setFilterStatus(true)}\r\n\t\t\t>\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\tFilter\r\n\t\t\t\r\n \r\n \r\n )\r\n}\r\n\r\nexport default ProductFacets;","import React from \"react\";\r\nimport Skeleton from \"react-loading-skeleton\";\r\n\r\nconst SkeletonCards = () => {\r\n\r\n return (\r\n\t\t
      \r\n\t\t\t{\r\n\t\t\t\tArray(4).fill().map(() => (\r\n\t\t\t\t\t
    • \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t
      \r\n\t\t\t\t\t\t\t

      \r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t

      \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t
      \r\n\t\t\t\t\t\t
      \r\n\t\t\t\t\t
    • \r\n\t\t\t\t))\r\n\t\t\t}\r\n\t\t
    \r\n )\r\n}\r\n\r\nexport default SkeletonCards;","import React, { useEffect, useState } from \"react\";\r\n\r\nimport ProductCard from \"../products/card\";\r\nimport ProductFacets from \"../products/facets\";\r\nimport ReactDOM from \"react-dom\";\r\nimport queryString from \"query-string\";\r\nimport SkeletonCards from \"../products/skeletonCards\";\r\nimport useSWR from \"swr\";\r\nimport Skeleton from \"react-loading-skeleton\";\r\nimport \"react-loading-skeleton/dist/skeleton.css\";\r\n\r\nconst poster = (url, data) => {\r\n\tconst options = {\r\n\t\tmethod: \"POST\",\r\n\t\t...(data && { body: JSON.stringify(data) }),\r\n\t\theaders: {\r\n\t\t\taccept: \"application/json\",\r\n\t\t\t\"Content-Type\": \"application/json\",\r\n\t\t},\r\n\t};\r\n\treturn fetch(url, options).then((res) => res.json());\r\n};\r\n\r\nconst ElasticProducts = () => {\r\n\tconst containerElement = document.getElementById(\"elastic-products\");\r\n\tconst localStorageUnit = localStorage.getItem(\"unitSystem\");\r\n\tconst [units, setUnits] = useState(\r\n\t\tlocalStorageUnit ? localStorageUnit : \"imperial\"\r\n\t);\r\n\tconst [showUnits, updateShowUnits] = useState(false);\r\n\tconst indexName = queryString.parse(window?.location?.search)?.indexName;\r\n\tconst config = JSON.parse(\r\n\t\tJSON.stringify(window.astec?.config?.paramsConfig)\r\n\t);\r\n\tconfig.specFacets = config.specFacets.filter(\r\n\t\t(f) => !f.suffix.includes(`.${units === \"imperial\" ? \"metric\" : \"imperial\"}`)\r\n\t);\r\n\tconst [params, setParams] = useState(config);\r\n\tconst [facets, setFacets] = useState();\r\n\tconst [selectedFacets, setSelectedFacets] = useState([]);\r\n\tconst { data, error } = useSWR(\r\n\t\t[\r\n\t\t\tparams &&\r\n\t\t\t\t`/api/elastic/search${\r\n\t\t\t\t\tindexName ? `?indexName=${indexName}` : \"\"\r\n\t\t\t\t}`,\r\n\t\t\tparams,\r\n\t\t],\r\n\t\tposter,\r\n\t\t{ revalidateOnFocus: false, shouldRetryOnError: false }\r\n\t);\r\n\tconst totalPageCount = data ? Math.ceil(data.total / params.perPage) : null;\r\n\t// create array of page numbers to display, starting with 1\r\n\tconst totalPages = data\r\n\t\t? Array.from({ length: totalPageCount }, (_, i) => i + 1)\r\n\t\t: [];\r\n\r\n\tif (!facets && data) {\r\n\t\tsetFacets(\r\n\t\t\tdata.facets.map((f) => {\r\n\t\t\t\tif (params.specFacets.find((fa) => fa.field === f.field)) {\r\n\t\t\t\t\tf.isSpecFacet = true;\r\n\t\t\t\t}\r\n\t\t\t\treturn f;\r\n\t\t\t})\r\n\t\t);\r\n\r\n\t\t// show unit toggle only if a spec type has unit values\r\n\t\tdata.results.map((result) => {\r\n\t\t\tresult.models.map((model) => {\r\n\t\t\t\tmodel.specs.map((spec) => {\r\n\t\t\t\t\tif(spec.type === \"MEASUREMENT\" || spec.type === \"METRICIMPERIALFREETEXT\") {\r\n\t\t\t\t\t\tif (!showUnits) {\r\n\t\t\t\t\t\t\tupdateShowUnits(true);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t})\r\n\t\t});\r\n\t}\r\n\r\n\tconst goToPage = (page) => {\r\n\t\tconst newParams = { ...params };\r\n\t\tnewParams.page = page;\r\n\t\tsetParams(newParams);\r\n\t};\r\n\r\n\tconst toggleUnits = (unit) => {\r\n\t\tconst newParams = JSON.parse(\r\n\t\t\tJSON.stringify(window.astec?.config?.paramsConfig)\r\n\t\t);\r\n\t\tif (\r\n\t\t\tnewParams.specFacets.find(\r\n\t\t\t\t(f) => f.suffix.includes(\".metric\") || f.suffix.includes(\".imperial\")\r\n\t\t\t)\r\n\t\t) {\r\n\t\t\t// alert user that params will reset\r\n\t\t\tnewParams.specFacets = newParams.specFacets.filter(\r\n\t\t\t\t(f) =>\r\n\t\t\t\t\t!f.suffix.includes(`.${unit === \"imperial\" ? \"metric\" : \"imperial\"}`)\r\n\t\t\t);\r\n\t\t\tsetParams(newParams);\r\n\t\t}\r\n\t\tlocalStorage.setItem(\"unitSystem\", unit);\r\n\t\tsetUnits(unit);\r\n\t\tsetFacets();\r\n\t};\r\n\r\n\tconst [productData, setProductData] = useState([]);\r\n\tconst [defaultFetchStatus, setDefaultFetchStatus] = useState(false);\r\n\tlet defaultData = [];\r\n const productsAPI =\r\n \"/sfapi/default/products1?$select=Title,Summary,UrlName&$expand=Image,ProductPages&$orderby=Title asc\";\r\n\r\n\t// if the elastic api fails, request all products and show products with related product page equal to the current page\r\n\tconst getDefaultResults = (api) => {\r\n\t\tfetch(api)\r\n\t\t\t.then((res) => res.json())\r\n\t\t\t.then((data) => {\r\n\t\t\t\tdefaultData = [...defaultData, ...data.value];\r\n\t\t\t\tif (data[\"@odata.nextLink\"]) {\r\n\t\t\t\t\tgetDefaultResults(data[\"@odata.nextLink\"]);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tconst pageId = config.productPage;\r\n\t\t\t\t\tconst results = defaultData.filter((item) =>\r\n\t\t\t\t\t\titem.ProductPages.some((page) => page.Id === pageId)\r\n\t\t\t\t\t);\r\n\t\t\t\t\tsetProductData(results);\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\t.catch((error) => {\r\n\t\t\t\tconsole.error(\"Error retrieving product results\", error);\r\n\t\t\t});\r\n\t};\r\n\r\n\tif (error || (data && data.results.length === 0)) {\r\n\t\tif (!defaultFetchStatus) {\r\n\t\t\t// while waiting for results, show the skeleton loaders\r\n\t\t\t// after 1 second, show the default results\r\n\t\t\tsetTimeout(() => {\r\n\t\t\t\tsetDefaultFetchStatus(true);\r\n\t\t\t\tgetDefaultResults(productsAPI);\r\n\t\t\t},1000)\r\n\t\t}\r\n\t}\r\n\r\n\tconst createSummary = (description) => {\r\n\t\treturn {\r\n\t\t\t__html: description,\r\n\t\t};\r\n\t};\r\n\r\n\tif (data && data.total > 0) {\r\n\t\treturn ReactDOM.createPortal(\r\n\t\t\t
    \r\n\t\t\t\t{showUnits && (\r\n\t\t\t\t\t
    \r\n\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t
    UNITS:
    \r\n\t\t\t\t\t\t\t toggleUnits(\"metric\")}\r\n\t\t\t\t\t\t\t\tclassName={units === \"metric\" ? \"active\" : \"\"}\r\n\t\t\t\t\t\t\t\tdata-units=\"metric\"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\tMetric (mm)\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t toggleUnits(\"imperial\")}\r\n\t\t\t\t\t\t\t\tdata-units=\"imperial\"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\tImperial (in)\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t
    \r\n\t\t\t\t\t
    \r\n\t\t\t\t)}\r\n\t\t\t\t{\r\n\t\t\t\t\t
    \r\n\t\t\t\t\t\t{data?.total} results found\r\n\t\t\t\t\t
    \r\n\t\t\t\t}\r\n\t\t\t\t\r\n\r\n\t\t\t\t
    \r\n\t\t\t\t\t<>{data.total} results found\r\n\t\t\t\t
    \r\n\r\n\t\t\t\t{showUnits && (\r\n\t\t\t\t\t
    \r\n\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t
    UNITS:
    \r\n\t\t\t\t\t\t\t toggleUnits(\"metric\")}\r\n\t\t\t\t\t\t\t\tclassName={units === \"metric\" ? \"active\" : \"\"}\r\n\t\t\t\t\t\t\t\tdata-units=\"metric\"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\tMetric (mm)\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t toggleUnits(\"imperial\")}\r\n\t\t\t\t\t\t\t\tdata-units=\"imperial\"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\tImperial (in)\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t
    \r\n\t\t\t\t\t
    \r\n\t\t\t\t)}\r\n\r\n\t\t\t\t
      \r\n\t\t\t\t\t{data?.results.map((r, index) => (\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t))}\r\n\t\t\t\t
    \r\n\t\t\t\t{totalPageCount > 1 ? (\r\n\t\t\t\t\t
    \r\n\t\t\t\t\t\t goToPage(params.page - 1)}\r\n\t\t\t\t\t\t\tdisabled={params.page <= 1}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tPrevious Page\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t
      \r\n\t\t\t\t\t\t\t{totalPages.map((page) => {\r\n\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t goToPage(page)}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t{page}\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t goToPage(params.page + 1)}\r\n\t\t\t\t\t\t\tdisabled={params.page >= totalPageCount}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\tNext Page\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
    \r\n\t\t\t\t) : (\r\n\t\t\t\t\t\"\"\r\n\t\t\t\t)}\r\n\t\t\t
    ,\r\n\t\t\tcontainerElement\r\n\t\t);\r\n\t} else {\r\n\t\tif (!defaultFetchStatus) {\r\n\t\t\treturn ReactDOM.createPortal(\r\n\t\t\t\t
    \r\n\t\t\t\t{\r\n\t\t\t\t\tshowUnits &&\r\n\t\t\t\t\t
    \r\n\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t
    UNITS:
    \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t
    \r\n\t\t\t\t\t
    \r\n\t\t\t\t}\r\n\r\n\t\t\t\t
    \r\n\t\t\t\t\t\r\n\t\t\t\t
    \r\n\r\n\t\t\t\t\r\n\r\n\t\t\t\t
    \r\n\t\t\t\t\t<>{data?.total} results found\r\n\t\t\t\t
    \r\n\r\n\t\t\t\t{showUnits && (\r\n\t\t\t\t\t
    \r\n\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t
    UNITS:
    \r\n\t\t\t\t\t\t\t toggleUnits(\"metric\")}\r\n\t\t\t\t\t\t\t\tclassName={units === \"metric\" ? \"active\" : \"\"}\r\n\t\t\t\t\t\t\t\tdata-units=\"metric\"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\tMetric (mm)\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t toggleUnits(\"imperial\")}\r\n\t\t\t\t\t\t\t\tdata-units=\"imperial\"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\tImperial (in)\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t
    \r\n\t\t\t\t\t
    \r\n\t\t\t\t)}\r\n\r\n\t\t\t\t\r\n\r\n\r\n\t\t\t\t
    ,\r\n\t\t\t\tcontainerElement\r\n\t\t\t)\r\n\t\t} else {\r\n\t\t\treturn ReactDOM.createPortal(\r\n\t\t\t\t
    \r\n\t\t\t\t\t{productData.map((item, index) => {\r\n\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t\t{item.Image.length > 0 ? \r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t: \"\"\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t\t

    \r\n\t\t\t\t\t\t\t\t\t\t{item.Title}\r\n\t\t\t\t\t\t\t\t\t

    \r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t})}\r\n\t\t\t\t,\r\n\t\t\t\tcontainerElement\r\n\t\t\t);\r\n\t\t}\r\n\t}\r\n};\r\n\r\nexport default ElasticProducts;\r\n","import React, { useState, useRef, useEffect } from \"react\";\r\nimport {\r\n\tGoogleMap,\r\n\tuseJsApiLoader,\r\n\tMarker,\r\n\tInfoWindow,\r\n\tMarkerClusterer\r\n} from \"@react-google-maps/api\";\r\n\r\nimport clusterIcon from \"../../images/icon-cluster-pin.png\";\r\n\r\nconst FacilityMap = (props) => {\r\n\tconst [map, setMap] = useState(null);\r\n\tconst [activeMarkerId, setActiveMarkerId] = useState(null);\r\n\tconst mapZoom = 4;\r\n\tconst mapStyles = {\r\n\t\theight: \"100%\",\r\n\t\twidth: \"100%\",\r\n\t};\r\n\tconst markerImage = require(\"../../images/icon-pin.png\");\r\n\r\n\tconst defaultBounds = {\r\n\t\tnorth: 45,\r\n\t\tsouth: -25,\r\n\t\twest: -120,\r\n\t\teast: 135,\r\n\t}\r\n\r\n\tconst clusterStyles = [\r\n\t\t{\r\n\t\t\turl: clusterIcon,\r\n\t\t\theight: 53,\r\n\t\t\twidth: 53,\r\n\t\t\ttextColor: \"white\",\r\n\t\t}\r\n\t];\r\n\t// Extend the map bounds for every location\r\n\tconst setMapBounds = (map) => {\r\n\t\tmap.fitBounds(defaultBounds);\r\n\t\tsetMap(map);\r\n\t};\r\n\r\n\t// lift marker state id to listing component so we can scroll to the result\r\n\tconst handleMarkerClick = (id) => {\r\n\t\tsetActiveMarkerId(id);\r\n\t\tprops.setActiveMarker(id);\r\n\t}\r\n\r\n\tconst { isLoaded } = useJsApiLoader({\r\n\t\tid: \"google-map-script\",\r\n\t\tgoogleMapsApiKey: \"AIzaSyC1E9m76HVzmwOGsgMqEns4uBV9UOzzugY\",\r\n\t});\r\n\r\n\tconst onLoad = React.useCallback(function callback(map) {\r\n\t\tsetMapBounds(map);\r\n\t}, []);\r\n\r\n\tconst onUnmount = React.useCallback(function callback(map) {\r\n\t\tsetMap(null);\r\n\t}, []);\r\n\r\n\tconst generateAddress = (street,city,state,country,zip) => {\r\n\t\tlet addressLine2 = \"\";\r\n\t\tif(street) {\r\n\t\t\taddressLine2 += street;\r\n\t\t}\r\n\t\tif(city) {\r\n\t\t\taddressLine2 += `, ${city}`;\r\n\t\t}\r\n\t\tif(state) {\r\n\t\t\taddressLine2 += `, ${state}`;\r\n\t\t}\r\n\t\tif (country) {\r\n\t\t\taddressLine2 += `, ${country}`;\r\n\t\t}\r\n\t\tif(zip) {\r\n\t\t\taddressLine2 += ` ${zip}`;\r\n\t\t}\r\n\t\treturn addressLine2;\r\n\t};\r\n\r\n\r\n\t// When clicking on view details in the results listing\r\n\t// update the active marker\r\n\tuseEffect(() => {\r\n\t\tsetActiveMarkerId(props.activeMarker);\r\n\t},[props.activeMarker]);\r\n\r\n\tuseEffect(() => {\r\n\t\t// Set map bounds again when users click search multiple times\r\n\t}, [props]);\r\n\r\n\treturn isLoaded ? (\r\n\t\t\r\n\t\t\t\r\n\t\t\t{(clusterer) =>\r\n\t\t\t\tprops.locations.map((item) => {\r\n\t\t\t\t\tconst latLng = {\r\n\t\t\t\t\t\tlat: item.Address?.Latitude || 0,\r\n\t\t\t\t\t\tlng: item.Address?.Longitude || 0,\r\n\t\t\t\t\t};\r\n\t\t\t\t\tconst markerId = item.Id;\r\n\t\t\t\t\t// 24 36 pin size default\r\n\t\t\t\t\t// 38 56 active pin size\r\n\t\t\t\t\t// 72 90 original image size\r\n\t\t\t\t\tconst markerIcon = {\r\n\t\t\t\t\t\turl: markerImage,\r\n\t\t\t\t\t\tscaledSize: markerId === activeMarkerId\r\n\t\t\t\t\t\t\t? new window.google.maps.Size(45,55)\r\n\t\t\t\t\t\t\t: new window.google.maps.Size(30,38),\r\n\t\t\t\t\t\torigin: new window.google.maps.Point(0, 0),\r\n\t\t\t\t\t\tanchor: markerId === activeMarkerId\r\n\t\t\t\t\t\t\t? new window.google.maps.Point(22, 55)\r\n\t\t\t\t\t\t\t: new window.google.maps.Point(15, 38),\r\n\t\t\t\t\t};\r\n\t\t\t\t\tif(!item.Address?.Latitude && !item.Address?.Longitude) {\r\n\t\t\t\t\t\treturn false\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t handleMarkerClick(markerId)}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{markerId === activeMarkerId && (\r\n\t\t\t\t\t\t\t\t {handleMarkerClick(null)}}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t\t\t{item.RelatedImage.length > 0 ? (\r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\t\t\"\"\r\n\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{generateAddress(item.Address?.Street, item.Address?.City, item.Address?.StateCode, item.Address?.CountryCode, item.Address?.Zip)}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tGet Directions\r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t(item.OfficePhone !== \"\" || item.PartsPhone !== \"\" || item.ServicePhone !== \"\") &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\titem.OfficePhone !== \"\" &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t

    \r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tOffice:{\" \"}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{item.OfficePhone}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t

    \r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\titem.PartsPhone !== \"\" &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t

    \r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tParts:{\" \"}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{item.PartsPhone}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t

    \r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\titem.ServicePhone !== \"\" &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t

    \r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tService:{\" \"}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{item.ServicePhone}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t

    \r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t);\r\n\t\t\t\t})\r\n\t\t\t}\r\n\t\t\t
    \r\n\t\t\r\n\t) : (\r\n\t\t<>\r\n\t);\r\n};\r\nexport default FacilityMap;\r\n","import React, { useEffect, useState, useRef } from \"react\";\r\nimport useSWR from 'swr'\r\nimport FacilityMap from \"./facility-map\";\r\nimport ReactDOM from \"react-dom\";\r\n\r\nconst FacilityListing = (props) => {\r\n\tconst containerElement = document.getElementById('facility-map');\r\n\tconst api = \"/sfapi/default/facilities?$expand=RelatedImage\";\r\n\t// const api = \"https://www.astec-local.com/sfapi/default/facilities?$expand=RelatedImage\";\r\n\tconst [isDesktop, updateScreenSize] = useState(true);\r\n\tconst [activeMarker, updateActiveMarker] = useState(null);\r\n\tconst resultsElement = useRef(null);\r\n\tconst getLocations = () => \r\n\t\tfetch(api)\r\n\t\t\t.then((response) => response.json());\r\n\t\r\n\tconst { data, error } = useSWR(api, getLocations);\r\n\r\n\t// debouncer to throttle resize event\r\n\tconst debounce = function (func, wait, immediate) {\r\n var timeout;\r\n return function () {\r\n var context = this,\r\n args = arguments;\r\n var later = function later() {\r\n timeout = null;\r\n if (!immediate) func.apply(context, args);\r\n };\r\n var callNow = immediate && !timeout;\r\n clearTimeout(timeout);\r\n timeout = setTimeout(later, wait);\r\n if (callNow) func.apply(context, args);\r\n };\r\n };\r\n\r\n\t// show info window when clicking 'view more details'\r\n\tconst showInfoWindow = (id) => {\r\n\t\tupdateActiveMarker(id);\r\n\t}\r\n\r\n\t// scroll results to the active marker when clicking on a pin\r\n\tconst setActiveMarker = (id) => {\r\n\t\tconst item = document.getElementById(id);\r\n\t\t// const offset = item?.offsetTop || 0;\r\n\t\t// resultsElement.current.scrollTop = offset;\r\n\t\tupdateActiveMarker(id);\r\n\t}\r\n\r\n\tuseEffect(() => {\r\n\t\tgetLocations();\r\n\t\t// check if we're on desktop to update expanded state on the facility items\r\n\t\t// on mobile, view more detail shows additional fields based on the expanded state\r\n\t\t// on desktop, it opens the info window\r\n\t\twindow.addEventListener('resize', debounce(() => {\r\n\t\t\tconst isDesktop = window.matchMedia('(min-width: 60em)').matches;\r\n\t\t\tupdateScreenSize(isDesktop);\r\n\t\t},250));\r\n\t}, []);\r\n\r\n\tif(error) return \"An error occured trying to load facility data.\";\r\n\tif(!data) return \"Loading Results...\";\r\n\r\n\treturn ReactDOM.createPortal(\r\n\t\t
    \r\n\t\t\t
    \r\n\t\t\t\t\r\n\t\t\t
    \r\n\t\t
    ,\r\n\t\tcontainerElement\r\n\t)\r\n};\r\nexport default FacilityListing;\r\n","import React from \"react\";\r\nimport Locations from \"./components/locations/location\";\r\nimport HourlyTruckingCalculator from \"./components/calculators/hourlyTrucking\";\r\nimport PavingCalculator from \"./components/calculators/paving\";\r\nimport TruckCycleTimeCalculator from \"./components/calculators/truckCycleTimes\";\r\nimport ProductCompareTable from \"./components/specifications/compare-table\";\r\nimport Svg from \"./components/svgs/svg\";\r\nimport ElasticProducts from \"./components/elasticProducts/elasticProducts\";\r\nimport FacilityListing from \"./components/facilities/facility-listing\";\r\n\r\nconst whereToBuy = document.getElementById('where-to-buy');\r\nconst elasticProducts = document.getElementById('elastic-products');\r\nconst hourlyTruckingCalculator = document.getElementById('hourly-trucking-calculator');\r\nconst pavingCalculator = document.getElementById('paving-calculator');\r\nconst cycleTimeCalculator = document.getElementById('cycle-time-calculator');\r\nconst compareTable = document.getElementById('product-compare-table');\r\nconst facilityMap = document.getElementById('facility-map');\r\nconst App = (props) => {\r\n return (\r\n
    \r\n \r\n\t\t\t{whereToBuy && }\r\n {elasticProducts && }\r\n {cycleTimeCalculator && }\r\n\t\t\t{pavingCalculator && }\r\n {hourlyTruckingCalculator && }\r\n {compareTable && }\r\n {facilityMap && }\r\n
    \r\n )\r\n}; \r\n\r\nexport default App;","import React from \"react\";\r\nimport ReactDOM from \"react-dom\";\r\nimport 'react-app-polyfill/ie11';\r\nimport 'react-app-polyfill/stable';\r\nimport App from \"./App\";\r\n\r\nReactDOM.render(\r\n \r\n \r\n ,\r\n document.getElementById(\"react-app\")\r\n);\r\n\r\n// If you want your app to work offline and load faster, you can change\r\n// unregister() to register() below. Note this comes with some pitfalls.\r\n// Learn more about service workers: https://bit.ly/CRA-PWA\r\n"],"sourceRoot":""}