{"version":3,"sources":["assets/phr_logo.png","assets/pella_logo.png","assets/placeholderModel.png","assets/placeholderPhoto.png","components/Product.js","components/Home.js","App.js","serviceWorker.js","index.js"],"names":["module","exports","Product","props","useState","imageLoaded","setImageLoaded","imgSrc","setImgSrc","momentBusinessDays","require","updateLocale","holidays","holidayFormat","useEffect","isPhotoImage","product","imagePhotoFilename","imageModelFilename","imgPlaceholderPhoto","imgPlaceholderModel","Col","xs","sm","md","lg","xl","Card","className","CardImg","top","style","display","src","alt","title","onLoad","CardBody","CardSubtitle","subtitle","CardText","shipDate","businessDiff","moment","toString","concat","utc","lastUpdate","fromNow","Home","id","useParams","data","setData","isErrored","setIsErrored","reloadForce","setReloadForce","showPhotoImages","setShowPhotoImages","websiteTitle","setWebsiteTitle","isPellaDomain","setIsPellaDomain","isPowerDomain","setIsPowerDomain","customerLocations","setCustomerLocations","location","setLocation","dropdownOpen","setDropdownOpen","populateData","useCallback","a","console","log","window","hostname","queryPath","customerNum","shipToAreaCode","sessionStorage","setItem","JSON","stringify","fetch","then","res","json","responseData","error","determineInitialLocation","fetchedCustomerLocations","savedLocation","getItem","parse","length","initialLocation","Date","getTime","navigator","serviceWorker","ready","registration","update","reload","interval","setInterval","clearInterval","customerLocationsQuery","savedHostname","removeItem","response","fetchCustomerLocations","Navbar","color","dark","expand","NavbarBrand","href","width","height","pellalogo","phrlogo","Nav","navbar","Dropdown","isOpen","toggle","prevState","DropdownToggle","caret","size","pellaAPIRegionName","DropdownMenu","map","customerLocation","DropdownItem","onClick","key","NavItem","NavLink","icon","faImage","faSync","faExclamationSquare","role","Container","fluid","Row","series","App","path","name","render","Component","displayName","isLocalhost","Boolean","match","registerValidSW","swUrl","config","register","onupdatefound","installingWorker","installing","onstatechange","state","controller","onUpdate","onSuccess","catch","baseUrl","document","getElementsByTagName","getAttribute","rootElement","getElementById","ReactDOM","basename","URL","process","origin","addEventListener","status","headers","get","indexOf","unregister","checkValidServiceWorker","waitingServiceWorker","waiting","event","target","postMessage","type"],"mappings":"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","file":"static/js/main.99670535.chunk.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/media/phr_logo.30aecd96.png\";","module.exports = __webpack_public_path__ + \"static/media/pella_logo.f1143531.png\";","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAWUAAADpAQMAAADGTrTvAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAADUExURf///6fEG8gAAAAJcEhZcwAADsEAAA7BAbiRa+0AAAAiSURBVGje7cExAQAAAMKg9U9tDQ8gAAAAAAAAAAAAAG7UACneAAGXhc4YAAAAAElFTkSuQmCC\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAckAAAGQAQMAAAD/cAkNAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAADUExURf///6fEG8gAAAAJcEhZcwAADsIAAA7CARUoSoAAAAAuSURBVHja7cExAQAAAMKg9U9tDB8gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOCkBlwwAAFpjWAIAAAAAElFTkSuQmCC\"","import React, { useState, useEffect } from 'react';\nimport { Col, Card, CardImg, CardText, CardSubtitle, CardBody } from 'reactstrap';\nimport moment from 'moment';\nimport imgPlaceholderModel from '../assets/placeholderModel.png';\nimport imgPlaceholderPhoto from '../assets/placeholderPhoto.png';\n\nexport default function Product(props) {\n const [imageLoaded, setImageLoaded] = useState(false);\n const [imgSrc, setImgSrc] = useState(null);\n\n const momentBusinessDays = require('moment-business-days');\n momentBusinessDays.updateLocale('us', {\n holidays: [\n '11-26-2020',\n '11-27-2020',\n '12-24-2020',\n '12-25-2020',\n '01-01-2021',\n '05-31-2021',\n '07-05-2021',\n '09-06-2021',\n '11-25-2021',\n '11-26-2021',\n '12-23-2021',\n '12-24-2021',\n ],\n holidayFormat: 'MM-DD-YYYY',\n });\n\n useEffect(() => {\n if (imageLoaded && props.isPhotoImage && props.product.imagePhotoFilename)\n setImgSrc(`/products/${props.product.imagePhotoFilename}`);\n else if (\n imageLoaded &&\n !props.isPhotoImage &&\n props.product.imageModelFilename\n )\n setImgSrc(`/products/${props.product.imageModelFilename}`);\n else if (props.isPhotoImage) setImgSrc(imgPlaceholderPhoto);\n else if (!props.isPhotoImage) setImgSrc(imgPlaceholderModel);\n }, [imageLoaded, props]);\n\n return (\n \n \n setImageLoaded(true)}\n />\n \n
{props.product.title}
\n \n \n {props.product.subtitle}\n \n \n \n \n Lead time is{' '}\n \n {momentBusinessDays(props.product.shipDate)\n .businessDiff(moment(), 'days')\n .toString()\n .concat(' business days')}\n \n
\n Now shipping on{' '}\n \n {props.product.shipDate}\n \n
\n
\n \n {'Updated '.concat(\n moment.utc(props.product.lastUpdate).fromNow()\n )}\n \n
\n
\n
\n \n );\n}\n","import React, { useState, useEffect, useCallback } from 'react';\r\nimport { useParams } from 'react-router';\r\nimport {\r\n Navbar,\r\n Nav,\r\n NavItem,\r\n NavLink,\r\n NavbarBrand,\r\n Container,\r\n Row,\r\n Dropdown,\r\n DropdownToggle,\r\n DropdownMenu,\r\n DropdownItem,\r\n} from 'reactstrap';\r\nimport phrlogo from '../assets/phr_logo.png';\r\nimport pellalogo from '../assets/pella_logo.png';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport {\r\n faExclamationSquare,\r\n faSync,\r\n faImage,\r\n} from '@fortawesome/pro-solid-svg-icons';\r\nimport Product from './Product';\r\nimport '../styles/Home.css';\r\n\r\nexport default function Home(props) {\r\n let { id } = useParams();\r\n\r\n const [data, setData] = useState([]);\r\n const [isErrored, setIsErrored] = useState(false);\r\n const [reloadForce, setReloadForce] = useState(false);\r\n const [showPhotoImages, setShowPhotoImages] = useState(false);\r\n const [websiteTitle, setWebsiteTitle] = useState('');\r\n const [isPellaDomain, setIsPellaDomain] = useState(false);\r\n const [isPowerDomain, setIsPowerDomain] = useState(false);\r\n const [customerLocations, setCustomerLocations] = useState([]);\r\n const [location, setLocation] = useState();\r\n\r\n\r\n const [dropdownOpen, setDropdownOpen] = useState(false);\r\n const toggle = () => setDropdownOpen((prevState) => !prevState);\r\n\r\n const populateData = useCallback(async () => {\r\n console.log('Fetching data');\r\n if (!location) return; // Guard clause to exit early if location is not set\r\n\r\n let hostname = window.location.hostname;\r\n let queryPath = `ProductLeadTime/${location.customerNum}/${location.shipToAreaCode}`;\r\n sessionStorage.setItem('location', JSON.stringify(location))\r\n\r\n try {\r\n const responseData = await fetch(queryPath).then(res => res.json());\r\n setData(responseData);\r\n } catch (error) {\r\n console.error(error);\r\n setIsErrored(true);\r\n }\r\n\r\n }, [location]);\r\n\r\n\r\n const determineInitialLocation = (fetchedCustomerLocations) => {\r\n const savedLocation = sessionStorage.getItem('location');\r\n console.log(savedLocation)\r\n\r\n // Attempt to restore the location from sessionStorage first\r\n if (savedLocation) {\r\n setLocation(JSON.parse(savedLocation));\r\n } else if (fetchedCustomerLocations && fetchedCustomerLocations.length > 0) {\r\n // No saved location, so set it to the first item of the fetched customerLocations\r\n const initialLocation = fetchedCustomerLocations[0];\r\n setLocation(initialLocation);\r\n sessionStorage.setItem('location', JSON.stringify(initialLocation)); // Save the initial location for future\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n if (id === 'photos') setShowPhotoImages(true);\r\n else setShowPhotoImages(false);\r\n }, [id]);\r\n\r\n useEffect(() => {\r\n if (reloadForce) {\r\n window.sessionStorage.setItem('lastForcedReload', new Date().getTime());\r\n\r\n navigator.serviceWorker.ready.then((registration) => {\r\n registration.update();\r\n });\r\n window.location.reload(true);\r\n\r\n }\r\n }, [reloadForce]);\r\n\r\n useEffect(() => {\r\n populateData();\r\n\r\n const interval = setInterval(() => {\r\n populateData();\r\n }, 900000);\r\n return () => clearInterval(interval);\r\n }, [populateData]);\r\n\r\n useEffect(() => {\r\n const savedHostname = sessionStorage.getItem('savedHostname');\r\n const hostname = window.location.hostname;\r\n\r\n if (!savedHostname) {\r\n sessionStorage.setItem('savedHostname', hostname);\r\n } else if (savedHostname !== hostname) {\r\n sessionStorage.removeItem('location'); \r\n sessionStorage.setItem('savedHostname', hostname); \r\n }\r\n let customerLocationsQuery;\r\n if (\r\n hostname === 'pellacoastalvinyl.com' ||\r\n hostname === 'www.pellacoastalvinyl.com'\r\n ) {\r\n setWebsiteTitle('Pella Coastal Vinyl');\r\n setIsPellaDomain(true);\r\n setIsPowerDomain(false);\r\n customerLocationsQuery = 'ProductLeadTime/CustomerLocations/Pella'\r\n } else {\r\n setWebsiteTitle('Fortress Lead Time Dashboard');\r\n setIsPellaDomain(false);\r\n setIsPowerDomain(true);\r\n customerLocationsQuery = 'ProductLeadTime/CustomerLocations/Power'\r\n\r\n };\r\n\r\n const fetchCustomerLocations = async () => {\r\n try {\r\n const response = await fetch(customerLocationsQuery);\r\n const data = await response.json();\r\n setCustomerLocations(data);\r\n determineInitialLocation(data);\r\n } catch (error) {\r\n console.error(error);\r\n setIsErrored(true);\r\n }\r\n };\r\n fetchCustomerLocations();\r\n }, []);\r\n\r\n return (\r\n <>\r\n \r\n \r\n {isPellaDomain && (\r\n \r\n )}\r\n {isPowerDomain && (\r\n \r\n )}\r\n {websiteTitle}\r\n \r\n \r\n \r\n
\r\n \r\n \r\n {data.map((product) => (\r\n \r\n ))}\r\n \r\n \r\n
\r\n \r\n );\r\n}\r\n","import React, { Component } from 'react';\nimport { Route } from 'react-router';\nimport Home from './components/Home';\nimport 'bootstrap/dist/css/bootstrap.min.css';\nimport './custom.css';\n\nexport default class App extends Component {\n static displayName = App.name;\n\n render() {\n return (\n }\n />\n );\n }\n}\n","// In production, we register a service worker to serve assets from local cache.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on the \"N+1\" visit to a page, since previously\n// cached resources are updated in the background.\n\n// To learn more about the benefits of this model, read https://goo.gl/KwvDNy.\n// This link also includes instructions on opting out of this behavior.\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.1/8 is considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\nexport function register(config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://goo.gl/SC7cgQ'\n );\n });\n } else {\n // Is not local host. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl, config) {\n navigator.serviceWorker\n .register(swUrl)\n .then((registration) => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the old content will have been purged and\n // the fresh content will have been added to the cache.\n // It's the perfect time to display a \"New content is\n // available; please refresh.\" message in your web app.\n console.log('New content is available; please refresh.');\n\n // Execute callback\n if (config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch((error) => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl)\n .then((response) => {\n // Ensure service worker exists, and that we really are getting a JS file.\n if (\n response.status === 404 ||\n response.headers.get('content-type').indexOf('javascript') === -1\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then((registration) => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready.then((registration) => {\n registration.unregister();\n });\n }\n}\n","import 'bootstrap/dist/css/bootstrap.css';\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport { BrowserRouter } from 'react-router-dom';\nimport App from './App';\nimport * as serviceWorker from './serviceWorker';\n\nconst baseUrl = document.getElementsByTagName('base')[0].getAttribute('href');\nconst rootElement = document.getElementById('root');\n\nReactDOM.render(\n \n \n ,\n rootElement\n);\n\nserviceWorker.register({\n onUpdate: (registration) => {\n const waitingServiceWorker = registration.waiting;\n\n if (waitingServiceWorker) {\n waitingServiceWorker.addEventListener('statechange', (event) => {\n if (event.target.state === 'activated') {\n window.location.reload();\n }\n });\n waitingServiceWorker.postMessage({ type: 'SKIP_WAITING' });\n }\n },\n});\n"],"sourceRoot":""}