{"version":3,"sources":["webpack:///./src/components/EmailForm.js","webpack:///./src/components/ContactCard.js","webpack:///./src/pages/contact/index.js","webpack:///./node_modules/rgm/dist/rgm.esm.js","webpack:///./src/components/GoogleMap.js","webpack:///./src/images/headshot4.svg"],"names":["EmailForm","_ref","predefinedData","targetEmail","setTartgetEmail","useState","emailInputs","setEmailInputs","senderName","senderEmail","subject","text","generateInitialText","inquiryItem","title","year","location","emailStatus","setEmailStatus","message","error","loading","onEmailInputChange","e","target","name","value","___EmotionJSX","className","style","background","width","borderRadius","border","Button","onClick","onSubmit","async","preventDefault","emailResponse","Lambda","sendEmail","IS_NOTIFICATION","TO","FROM","body","Util","LogError","Text","fontStyle","Input","type","label","onChange","required","disabled","textarea","rows","ClipLoader","size","color","textAlign","buttonClass","ContactCard","email","phone","Contact","props","_props$location","_props$location$state","contactInfo","data","allMarkdownRemark","edges","reduce","acc","profile","node","frontmatter","excerpt","html","markhamInfo","Markham","burlingtonInfo","Burlington","state","contactCard","setContactCard","salesInquiryRef","useRef","useEffect","setTimeout","ref","window","scrollTo","current","offsetTop","Layout","bodyClass","SEO","onMouseEnter","onMouseLeave","dangerouslySetInnerHTML","__html","GoogleMap","MapContext","STYLE","map","height","Map","api","options","children","element","firstTimeRef","ctx","setCtx","Object","assign","Provider","Marker","Overlay","pixelRatioRef","toArray","overlay","setOverlay","childrenRef","childrenDivRefs","subPixelRound","v","Math","round","devicePixelRatio","overlayView","OverlayView","elt","onAdd","document","createElement","getPanes","floatPane","appendChild","view","onRemove","parentNode","removeChild","draw","projection","getProjection","forEach","_ref2","index","lat","lng","childElt","pos","fromLatLngToDivPixel","LatLng","left","x","top","y","setMap","ch","key","position","display","gridTemplate","undefined","MAP_OPTIONS","zoom","center","markham","burlington","gestureHandling","clickableIcons","CircleMarker","mapsAPI","setMapsAPI","_window2","_window2$google","mapLoaded","_window","_window$google","google","maps","script","src","defer","head","invokeMapApi","rel","href","module","exports"],"mappings":"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","file":"component---src-pages-contact-index-js-8d0feb93ea21aeca1563.js","sourcesContent":["import React, { useState } from 'react'\nimport PropTypes from 'prop-types'\nimport { ClipLoader } from 'react-spinners'\n\nimport { Lambda, Util } from '../amplify'\n\nimport Text from './Text'\nimport Input from './Input'\nimport Button from './Button'\n\nconst EmailForm = ({ predefinedData }) => {\n const customerService = 'mike.f@addcapital.ca'\n const brokerService = 'jim.h@addcapital.ca'\n\n const [targetEmail, setTartgetEmail] = useState(customerService)\n\n const generateInitialText = () => {\n const { inquiryItem } = predefinedData\n\n if (inquiryItem) {\n return `I am interested in the listed item: ${inquiryItem.title}.\\nYear: ${inquiryItem.year}\\nLocation: ${inquiryItem.location}\\n\\n---- Enter any other details below ----\\n\\n`\n }\n\n return ''\n }\n\n const [emailInputs, setEmailInputs] = useState({\n senderName: '',\n senderEmail: '',\n subject: '',\n text: generateInitialText(),\n })\n const [emailStatus, setEmailStatus] = useState({\n message: '',\n error: false,\n loading: false,\n })\n\n const onEmailInputChange = e =>\n setEmailInputs({\n ...emailInputs,\n [e.target.name]: e.target.value,\n })\n\n const submitEmail = async e => {\n e.preventDefault()\n try {\n setEmailStatus({\n message: '',\n error: false,\n loading: true,\n })\n\n const emailResponse = await Lambda.sendEmail({\n IS_NOTIFICATION: false,\n TO: targetEmail,\n FROM: 'CREDIT',\n subject: `Contact Form Submission From: ${emailInputs.senderName} ${emailInputs.senderEmail}`,\n body: emailInputs.text,\n })\n\n setEmailStatus({\n loading: false,\n error: emailResponse.error,\n message: emailResponse.message,\n })\n\n if (!emailResponse.error) {\n setEmailInputs({\n senderName: '',\n senderEmail: '',\n subject: '',\n text: '',\n })\n } else {\n Util.LogError('ERROR_CONTACT_FORM_FROM_LAMBDA', emailResponse.error, {\n IS_NOTIFICATION: false,\n TO: targetEmail,\n FROM: 'CREDIT',\n subject: `Contact Form Submission From: ${emailInputs.senderName} ${emailInputs.senderEmail}`,\n body: emailInputs.text,\n })\n setEmailStatus({\n ...emailStatus,\n loading: false,\n })\n }\n } catch (error) {\n Util.LogError('ERROR_CONTACT_FORM', error, {\n IS_NOTIFICATION: false,\n TO: targetEmail,\n FROM: 'CREDIT',\n subject: `Contact Form Submission From: ${emailInputs.senderName} ${emailInputs.senderEmail}`,\n body: emailInputs.text,\n })\n setEmailStatus({\n ...emailStatus,\n loading: false,\n })\n }\n }\n\n return (\n \n
\n
\n
Select a department and leave us a message below.
\n
\n
\n
\n setTartgetEmail(customerService)}\n >\n Customer Service\n \n setTartgetEmail(brokerService)}\n >\n Broker Service\n \n
\n
\n \n {emailStatus.message}\n \n \n \n \n {emailStatus.loading ? (\n \n ) : (\n
\n \n
\n )}\n \n
\n \n )\n}\n\nEmailForm.propTypes = {\n predefinedData: PropTypes.object,\n}\n\nexport default EmailForm\n","import React from 'react'\nimport PropTypes from 'prop-types'\n\nimport headshot1 from '../images/headshot4.svg'\n\nconst ContactCard = ({ name, title, email, phone, body }) => {\n return (\n \n
\n
\n
\n
\n

\n {name}\n

\n
{title}
\n
\n
\n

\n Email: {email}\n
\n Phone: {phone}\n

\n
\n
\n
\n
\n
\n
\n
{body}
\n
\n \n )\n}\n\nContactCard.propTypes = {\n name: PropTypes.string,\n title: PropTypes.string,\n email: PropTypes.string,\n phone: PropTypes.string,\n body: PropTypes.string,\n}\n\nexport default ContactCard\n","import React, { useRef, useState, useEffect } from 'react'\nimport { graphql } from 'gatsby'\nimport PropTypes from 'prop-types'\n\nimport SEO from '../../components/SEO'\nimport Layout from '../../layouts/index'\nimport EmailForm from '../../components/EmailForm'\nimport GoogleMap from '../../components/GoogleMap'\nimport ContactCard from '../../components/ContactCard'\n\nconst Contact = props => {\n const contactInfo = props.data.allMarkdownRemark.edges.reduce(\n (acc, profile) => {\n return {\n ...acc,\n [profile.node.frontmatter.name]: {\n ...profile.node.frontmatter,\n body: profile.node.excerpt,\n html: profile.node.html,\n },\n }\n },\n {},\n )\n const markhamInfo = contactInfo.Markham\n const burlingtonInfo = contactInfo.Burlington\n\n const inquiryItem = props?.location?.state?.inquiryItem\n\n const [contactCard, setContactCard] = useState(null)\n\n const scrollToRef = ref => window.scrollTo(0, ref.current.offsetTop)\n const salesInquiryRef = useRef(null)\n\n useEffect(() => {\n setTimeout(() => inquiryItem && scrollToRef(salesInquiryRef), 50)\n }, [])\n\n return (\n \n \n
\n
Contact
\n
\n\n
\n
\n
\n
\n
\n

{markhamInfo.name}

\n
\n
\n
\n setContactCard(contactInfo['Rick Browne'])}\n onMouseLeave={() => setContactCard(null)}\n >\n Rick Browne, Founder\n
\n \n setContactCard(contactInfo['Bill Patterson'])\n }\n onMouseLeave={() => setContactCard(null)}\n >\n Bill Patterson, President\n
\n setContactCard(contactInfo['Heather Park'])}\n onMouseLeave={() => setContactCard(null)}\n >\n Heather Park, Controller\n
\n \n setContactCard(contactInfo['Shelley Saunders'])\n }\n onMouseLeave={() => setContactCard(null)}\n >\n Shelley Saunders, Senior VP and GM\n
\n \n \n
\n
\n
\n

{burlingtonInfo.name}

\n
\n
\n
\n setContactCard(contactInfo['Dave Ralph'])}\n onMouseLeave={() => setContactCard(null)}\n >\n Dave Ralph, Partner, ext. 400\n
\n \n
\n \n
\n {contactCard && (\n \n )}\n\n \n
\n \n \n \n
\n )\n}\n\nexport const query = graphql`\n query ContactQuery {\n allMarkdownRemark(\n filter: { fileAbsolutePath: { regex: \"/contact/\" } }\n sort: { fields: [frontmatter___date], order: DESC }\n ) {\n edges {\n node {\n html\n excerpt(pruneLength: 1000)\n frontmatter {\n path\n name\n title\n email\n phone\n }\n }\n }\n }\n }\n`\nContact.propTypes = {\n data: PropTypes.object,\n}\n\nexport default Contact\n","import { createContext, forwardRef, useRef, useState, useImperativeHandle, useEffect, createElement, Fragment, useContext, Children, useLayoutEffect } from 'react';\nimport { createPortal } from 'react-dom';\n\n// $FlowExpectedError\nconst MapContext = createContext(null);\nconst warnOnce = (() => {\n const map = {};\n return str => {\n if (map[str] == null) {\n map[str] = true;\n console.warn(str.replace(/^\\s+/gm, ''));\n }\n };\n})();\nconst STYLE = {\n width: '100%',\n height: '100%'\n};\nconst Map = forwardRef((_ref, ref) => {\n let {\n api,\n options,\n children\n } = _ref;\n const element = useRef(null);\n const firstTimeRef = useRef(true);\n const [ctx, setCtx] = useState(null);\n if (process.env.NODE_ENV !== 'production') {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const apiRef = useRef(api); // eslint-disable-next-line react-hooks/rules-of-hooks\n\n const optionsRef = useRef(options);\n if (apiRef.current !== api) {\n warnOnce(`\n \"api\" prop of element has changed.\n\n If it's desired behaviour please remount your component\n using key={hash(api)} on your component.\n `); // Reinit map in case user has changed loader in dev\n\n firstTimeRef.current = true;\n } // JSON.stringify to work with React Refresh well\n\n if (typeof options !== 'function' && JSON.stringify(optionsRef.current) !== JSON.stringify(options)) {\n warnOnce(`\n \"options\" prop of element has changed.\n This change doesn't somehow affect map options at production.\n\n If it's desired behaviour please use imperative api, i.e. map.setOptions({...blabla});\n `); // Reinit map in case user changed options to find proper option\n\n firstTimeRef.current = true;\n }\n }\n useImperativeHandle(ref, () => ctx ? ctx.map : null, [ctx]);\n useEffect(() => {\n if (firstTimeRef.current && element.current) {\n const map = new api.Map(element.current,\n // We clone options object because Google adding new fields into it\n // this is not an expected behaviour in modern world ;-)\n // Object.assign is used for edge 18 at least until caniuse data is not updated\n Object.assign({}, typeof options === 'function' ? options(element.current) : options));\n firstTimeRef.current = false;\n setCtx({\n map,\n api\n });\n return () => {};\n }\n }, [api, options]);\n return /*#__PURE__*/createElement(Fragment, null, /*#__PURE__*/createElement(\"div\", {\n style: STYLE,\n ref: element\n }), ctx && /*#__PURE__*/createElement(MapContext.Provider, {\n value: ctx\n }, children));\n});\nconst useMap = () => useContext(MapContext);\nconst Marker = props => {\n return props.children;\n};\nconst Overlay = props => {\n const {\n api,\n map\n } = useMap(); // because I have 2 ;-), doesnt matter here, will be set before 1st usage\n\n const pixelRatioRef = useRef(2); // $FlowFixMe no block level $FlowFixMe so splitted on 2 lines\n\n const anyChildren = Children.toArray(props.children || []);\n const children = anyChildren;\n const [overlay, setOverlay] = useState(null);\n const childrenRef = useRef([]);\n const childrenDivRefs = useRef([]);\n const subPixelRound = v => Math.round(v * pixelRatioRef.current) / pixelRatioRef.current; // We can't use useEffect here because it causes glitches\n // We need ref to access children in draw\n\n useLayoutEffect(() => {\n childrenRef.current = children;\n }); // Create overlay https://developers.google.com/maps/documentation/javascript/examples/overlay-simple\n\n useEffect(() => {\n if (api) {\n pixelRatioRef.current = window.devicePixelRatio;\n const overlayView = new api.OverlayView();\n let elt = null;\n overlayView.onAdd = () => {\n elt = document.createElement('div');\n var panes = overlayView.getPanes(); // on all other panes there is issues with events like hover etc\n\n panes.floatPane.appendChild(elt);\n setOverlay({\n element: elt,\n view: overlayView\n });\n };\n overlayView.onRemove = () => {\n if (elt != null) {\n const {\n parentNode\n } = elt;\n if (parentNode != null) {\n // same as panes.overlayMouseTarget.removeChild\n parentNode.removeChild(elt);\n }\n setOverlay(null);\n }\n };\n overlayView.draw = () => {\n var projection = overlayView.getProjection();\n const latLngs = childrenRef.current;\n latLngs.forEach((_ref2, index) => {\n let {\n props: {\n lat,\n lng\n }\n } = _ref2;\n const {\n current: childElt\n } = childrenDivRefs.current[index];\n if (childElt != null) {\n const pos = projection.fromLatLngToDivPixel(new api.LatLng(lat, lng)); // Move react markers directly changing dom element position\n // Element is created by us, not by library user, so no issues\n\n childElt.style.left = subPixelRound(pos.x) + 'px';\n childElt.style.top = subPixelRound(pos.y) + 'px';\n }\n });\n };\n overlayView.setMap(map);\n return () => {\n overlayView.setMap(null);\n };\n }\n }, [api, map]);\n if (overlay != null && children != null && api != null) {\n const projection = overlay.view.getProjection();\n return createPortal(children.map((ch, index) => {\n const pos = projection.fromLatLngToDivPixel(new api.LatLng(ch.props.lat, ch.props.lng)); // Its not a side effect, its just a cache for refs\n // instead of creating it initially like Array(MAX_POSSIBLE_MARKERS), we just extend it here\n\n if (childrenDivRefs.current[index] == null) {\n childrenDivRefs.current[index] = {\n current: null\n };\n }\n return /*#__PURE__*/createElement(\"div\", {\n key: ch.key,\n ref: childrenDivRefs.current[index],\n style: {\n position: 'absolute',\n left: subPixelRound(pos.x),\n top: subPixelRound(pos.y),\n display: 'grid',\n gridTemplate: '0/0'\n }\n }, ch, (process.env.NODE_ENV !== 'production' || undefined === 'true') && props.debug === true && /*#__PURE__*/createElement(\"div\", {\n style: {\n position: 'absolute',\n borderRadius: '100%',\n width: 4,\n height: 4,\n left: -2,\n top: -2,\n opacity: 0.8,\n boxShadow: '0 0 0 2px blue, 0 0 0 4px white, 0 0 0 6px blue'\n }\n }));\n }), overlay.element);\n }\n return null;\n};\nexport { Map, Marker, Overlay, useMap };","import React, { useState, useEffect } from 'react'\nimport { Map, Overlay, Marker } from 'rgm'\nimport { ClipLoader } from 'react-spinners'\n\n// use https://www.latlong.net/ for coords, google maps is jank\nconst MAP_OPTIONS = {\n zoom: 9,\n center: {\n lat: 43.576676,\n lng: -79.776551,\n },\n markham: {\n lat: 43.84378,\n lng: -79.36432,\n },\n burlington: {\n lat: 43.368593,\n lng: -79.792066,\n },\n gestureHandling: 'greedy',\n clickableIcons: true,\n}\n\nconst invokeMapApi = async () => {\n // Create the script tag, set the appropriate attributes\n const script = document.createElement('script')\n script.src = `https://maps.googleapis.com/maps/api/js?key=${process.env.GATSBY_GOOGLE_API_KEY}&callback=mapLoaded`\n script.defer = true\n script.async = true\n\n // Append the 'script' element to 'head'\n document.head.appendChild(script)\n}\n\nconst CircleMarker = () =>
\n\nconst GoogleMap = () => {\n const [mapsAPI, setMapsAPI] = useState(null)\n\n useEffect(() => {\n if (typeof window !== 'undefined') {\n window.mapLoaded = () => {\n if (window?.google?.maps) {\n setMapsAPI(window.google.maps)\n }\n }\n\n // invoke if first load\n if (!window?.google?.maps) {\n invokeMapApi()\n } else {\n setMapsAPI(window.google.maps)\n }\n }\n }, [])\n\n return (\n
\n
\n
\n

\n Office Locations\n

\n {!mapsAPI ? (\n
\n \n
\n ) : (\n \n \n \n \n \n \n \n \n \n \n )}\n
\n
\n
\n
\n Markham - Head Office\n
500 Cochrane Dr. Unit 2
\n
\n Markham, Ontario. L3R 8E2 (\n \n Directions\n \n )\n
\n
Tel: 905-940-2151
\n
Fax: 905-940-1434
\n
\n
\n Burlington\n
1100 Walkers Line. Suite 304
\n
\n Burlington, Ontario. L7N 2G3 (\n \n Directions\n \n )\n
\n
Tel: 905-631-8001
\n
Fax: 905-632-8823
\n
\n
\n
\n )\n}\n\nexport default GoogleMap\n","module.exports = __webpack_public_path__ + \"static/headshot4-56e5577246680ec4206841e0070a4343.svg\";"],"sourceRoot":""}