{"version":3,"sources":["lib/polyfill-ie/index.js","components/notFound/notFound.js","env.js","lib/app-version/index.js","components/form/buttons/button.js","lib/ui-error/errorMessage.js","lib/ui-error/errorPopup.js","lib/icons-svg/icons/NarrowRight.js","cssInJs/variables.js","config.js","lib/icons-svg/icons/Loading--circle.js","lib/ui-loading-v2/sectionLoading.js","lib/utils-core/url.js","lib/utils-core/form.js","lib/utils-core/array.js","lib/utils-core/date.js","lib/utils-core/css.js","lib/utils-core/ui.js","lib/utils-core/money.js","lib/utils-core/text.js","lib/utils-core/random.js","lib/utils-core/object.js","lib/utils-core/index.js","site/siteUtils.js","utils/index.js","lib/net-api/index.js","lib/dev-mediaQueryStatus/index.js","lib/seo/meta-tag.js","lib/seo/tracking--deprecated.js","lib/animation/animationUtils.js","lib/net-loader/loadJs.js","lib/ui-parallax/index.js","lib/router/useRouter.js","lib/router/useHistory.js","lib/store/reducers.js","lib/store/storeProvider.js","lib/router/handleLink.js","lib/router/siteLink.js","lib/css-emotion/variables.js","lib/css-emotion/breakpoints.js","lib/css-emotion/mixin.js","lib/instagram-feed/feedStyle.js","lib/instagram-feed/feed.js","lib/youtube/iframeApi.js","lib/youtube/youtubeEmbed.js","components/youtubeBanner/youtubeBanner.js","cms/utils/cmsUtils.js","cms/items/bannerPanel/view.js","cms/items/bannerItem/view.js","cms/items/panel/view.js","cms/items/html/view.js","cms/items/imagePanel/view.js","components/pageTileAdore/style.js","components/pageTileAdore/view.js","cms/items/singleBanner/view.js","lib/form/formModelHelper.js","lib/form/formBuilder.js","lib/form/validatorHelper.js","lib/form/validators/required.js","lib/form/validators/email.js","lib/form/validators/date.js","lib/form/validators/length.js","lib/form/validators.js","lib/form/formRenderHelper.js","lib/form/components/ValidationAlert.js","lib/form/controls/TextInput.js","lib/form/controls/RadioListInput.js","lib/form/controls/CheckboxListInput.js","lib/form/controls/DateSeparateInput.js","lib/form/controls/FileInput.js","lib/form/controls/index.js","lib/form/controls/TextareaInput.js","lib/form/controls/CheckboxInput.js","lib/form/controls/SelectInput.js","lib/form/controls/HiddenInput.js","lib/form/controlRenderer.js","lib/form/formValidate.js","lib/form/useForm.js","cms/items/contactForm/contactForm.js","cms/items/contactForm/contactFormModel.js","cms/items/contactForm/view.js","cms/items/youtubeBannerPanel/view.js","cms/items/youtubeEmbedded/view.js","site/searchResult/searchResult.js","cms/items/code/view.js","cms/items/blogPosts/view.js","cms/items/blogPostTitle/view.js","cms/items/multiColumnPanel/view.js","cms/items/expandableHtml/view.js","components/testimonial/testimonialPanel/style.js","components/testimonial/testimonialItem/style.js","components/testimonial/testimonialItem/view.js","components/testimonial/testimonialPanel/view.js","components/slider/sliderPanel/style.js","components/slider/sliderItem/style.js","components/slider/sliderItem/view.js","components/slider/sliderPanel/view.js","cms/items/item.js","lib/tracking/gtm.js","cms/pages/viewPage/viewPage.js","lib/instagram-useInstagram/index.js","cms/services/cms-radio-sender.js","cms/services/cms-radio-receiver.js","cms/services/cms-html-editor.js","cms/services/cms-page-controller.js","cms/pages/editPage/editPage.js","layout/topHeader/navBar.js","layout/topHeader/topHeader.js","layout/bottomDock/bottomDock.js","layout/popup/commonVideoPopup.js","App.js","serviceWorker.js","index.js"],"names":["Element","prototype","matches","msMatchesSelector","webkitMatchesSelector","closest","s","el","this","parentElement","parentNode","nodeType","NotFound","props","debugInfo","className","href","onClick","e","preventDefault","window","location","reload","refreshPage","history","back","goBack","style","marginTop","color","fontSize","pageUrl","loadFrom","config","isProd","process","locale","getLocale","siteName","apiBase","resourceBase","cmsEndpoint","ver","updateDate","bvClientId","bvSiteId","bvEnv","bvLocale","REACT_APP_COUNTRY_LOCALE","hostname","toLowerCase","indexOf","search","getCountry","console","log","AppVersion","React","useState","checkStatus","setCheckStatus","env","useEffect","updateSW","then","timer","setTimeout","clearTimeout","button","type","AppVersionPage","margin","width","Button","status","children","btnStyle","buttonStyle","disabled","role","aria-hidden","ErrorMessage","errors","summaryMessage","length","message","Array","isArray","map","error","index","key","ErrorPopup","title","messages","push","css","position","padding","maxWidth","maxHeight","background","top","left","transform","zIndex","inx","dangerouslySetInnerHTML","__html","SvgNarrowRight","variables","familyBase","familyHeader","primaryColor","fontColor","bgColor","breakpointNames","breakpoints","cssEmotion","iconColors","primary","secondary","secondaryColor","siteConfig","SvgLoading","height","viewBox","preserveAspectRatio","cx","cy","r","fill","stroke","strokeWidth","attributeName","repeatCount","dur","values","keyTimes","keySplines","calcMode","begin","Loading","loaded","setLoaded","loading","minHeight","display","justifyContent","alignItems","opacity","transition","isExternalLink","link","getLinkFromElement","linkEl","getAttribute","getLinkInfo","origin","currentPath","pathname","linkFiltered","replace","linkLower","isExternal","isHash","isTel","isMailTo","url","path","i","exts","isStaticFile","ext","getExtension","filename","split","pop","getFilename","toQueryString","params","Object","keys","encodeURIComponent","join","getYoutubeId","undefined","getSlug","text","getErrors","result","forEach","err","errorMessage","getErrorMessage","convertToObject","array","reduce","obj","item","convertToKeyValues","value","moveItem","list","fromIndex","toIndex","splice","removed","removeItem","find","fn","findIndex","contains","sum","total","equal","list1","list2","found","j","caseInsensitiveCompare","a","b","localeCompare","compareIgnoreEmpty","asc","isNaN","addDays","date","days","Date","setDate","getDate","formatYYYYMMDD","dateObj","toDate","dd","mm","getMonth","yyyy","getFullYear","parseDate","parseISO","dateStr","format","parse","isValidDate","d","bgUrl","imageUrl","encodeURI","decodeURI","bgUrlStyle","screenWidth","innerWidth","document","documentElement","clientWidth","body","screenHeight","innerHeight","clientHeight","outerWidth","offsetWidth","outerHeight","offsetHeight","hasClass","classList","match","RegExp","addClass","add","removeClass","remove","reg","toggleClass","scrollTo","selector","duration","delay","findElement","offset","elementOffset","gsap","to","ease","querySelectorOrNull","querySelector","rect","getBoundingClientRect","scrollLeft","pageXOffset","scrollTop","pageYOffset","isElementInViewport","bottom","right","getCurrentBreakpoint","bpHolder","getComputedStyle","getPropertyValue","formatMoney","number","fraction","formatter","Intl","NumberFormat","currency","minimumFractionDigits","toMonthlyCost","amount","frequency","isBlank","str","test","isEmpty","isNumeric","num","capitalize","expression","charAt","toUpperCase","slice","toFieldName","trim","toHtml","truncateWords","maxLen","separator","ellipsis","pos","lastIndexOf","substr","numberWithCommas","x","parts","toString","registerPlugin","ScrollToPlugin","formatNumber","Math","round","shortId","shortid","guid","uuid","toCamel","o","newO","origKey","newKey","hasOwnProperty","constructor","classNames","form","ui","money","random","object","isMobile","utils","resourcePath","isNZ","coreUtils","site","useApi","response","setResponse","setErrors","setStatus","request","setRequest","async","options","apiNetJwt","fetch","res","ok","json","statusText","JSON","fetchData","hasErrors","containsErrorMessage","msg","finding","some","addErrors","errs","done","send","sendRaw","httpOptionFn","args","reset","usePost","formDataFn","data","method","post","headers","stringify","sending","sendFormData","useGet","get","MediaQueryStatus","MetaTag","seoData","assign","description","name","content","keywords","language","country","heroImageUrl","rel","canonical","MAX","MIN","getScrollProgress","scroll","scrollY","progress","boundsTop","viewport","bounds","setClass","pr","range","prVal","from","scale","y","removeTransform","getScreenSize","holder","storeName","loadJs","promises","scripts","script","loadScript","Promise","all","resolve","reject","networkLoaded","createElement","src","onload","onerror","getElementsByTagName","appendChild","defaultSettings","cutoffPadding","speed","ParallaxData","settings","screenSize","panels","imageRatio","panelHeight","elements","timeoutId","useParallax","handleScroll","element","au","min","calculated","fromTop","max","toTop","backgroundPositionY","init","useLayoutEffect","addEventListener","removeEventListener","cnt","panel","querySelectorAll","autoPanelHeight","parseFloat","shadowHeight","shadowWidth","baseHeight","backgroundSize","useRouter","useParams","useLocation","useHistory","useRouteMatch","useMemo","navigate","Redirect","hash","query","queryString","historyItem","initialState","page","menu","popup","reducer","state","action","payload","Error","StoreContext","createContext","StoreProvider","useReducer","dispatch","Provider","useStore","useContext","handleElementLink","externalHandler","linkInfo","handled","SiteLink","target","other","goToLink","stopPropagation","mq","facepaint","bp","mqMin","mqMax","mediaQuery","matchMedia","isMin","isMax","overlay","tiles","marginLeft","marginRight","flexWrap","tile","flexBasis","cursor","tileImage","mixin","backgroundColor","tileIcon","InstagramFeed","Feeds","posts","numOfPost","xs","sm","md","lg","xl","xxl","displayingPosts","Feed","alt","loadApi","onApiReady","YT","tag","onYouTubeIframeAPIReady","firstScriptTag","insertBefore","thumbnailMax","videoId","getYoutubeCode","YoutubeEmbed","yt","allow","frameBorder","allowFullScreen","YoutubeBanner","playerStatus","SetPlayerStatus","w","h","size","getSize","playerSize","video","heightSet","videoLinkOrId","playerId","posterImageUrl","ele","useRef","setMarginTop","countPlayed","wResize","current","playerVars","canPlayVideo","player","Player","events","PlayerState","ENDED","playVideo","mute","ref","backgroundImage","id","defaultVal","payloads","BannerPanel","subItems","items","cmsOption","cmsUtils","slides","subItem","Item","itemId","cssClass","anchorName","data-cms-item-id","isCmsEdit","dots","infinite","autoplaySpeed","fade","autoplay","slidesToShow","slidesToScroll","BannerItem","captionTitle","linkUrl","titlePanel","Panel","backgroundTile","bgTheme","subItemsElts","Html","htmlBlock","buttons","restructureButton","data-cms-html","processed","handleClick","span","innerHTML","ImagePanel","cssClass2","data-pxh","pageTiles","pageTile__tile","overflow","tile__content","textDecoration","tile__bg","paddingTop","backgroundPosition","backgroundRepeat","tile__details","tile__details__title","marginBottom","fontWeight","tile__details__desc","Tile","disableLink","pageTitle","tileDesc","PageTileAdore","pagesSerialized","pageTileElts","idx","SingleBanner","findControl","controlNameOrIndex","root","controls","findControlTraverse","controlName","control","getValue","getValueTraverse","helperFns","getFilesTraverse","getKeyValueTraverse","keyValue","controlType","customValueFn","files","abstractControl","controlObject","validators","controlOptions","touched","incomplete","findValidator","controlArray","ctrl","disableValidators","formModelHelper","parent","hasRequiredValidator","getNameForValidator","label","createValidator","opt","validate","defaultOpt","continueToValidate","getValidatorOptions","val","isValidEmail","mail","isDate","isPast","now","getTime","isValidLength","validator","Required","validateOpt","triggeredByChange","Email","PastDate","Length","validateControl","getLabel","formOption","requiredMark","getLabelAsString","ValidationAlert","TextInput","handleChange","helpText","attrs","fieldId","usePlaceholder","fieldLabel","placeHolder","valueStr","prependText","htmlFor","onChange","onKeyDown","onBlur","placeholder","checked","optionValue","includes","DateSeparateInput","thisYear","year","setYear","month","setMonth","day","setDay","handleChangeInner","persist","months","selectStyle","fromYear","recentYear","handleChangeDay","handleChangeMonth","m","handleChangeYear","FileInput","Components","RadioListInput","option","inline","TextareaInput","textAreaRef","textAreaHeight","setTextAreaHeight","parentHeight","setParentHeight","scrollHeight","rows","CheckboxInput","CheckboxListInput","SelectInput","HiddenInput","renderControlDirect","Component","getControl","renderControl","formRoot","nameOrIndex","validateTraverse","errorsFromControl","errorsFromSub","useForm","initialFormModel","formModel","setFormModel","template","onControlChanged","controlFromEvent","getControlValue","onBeforeUpdateValue","validateGroup","successHandler","errorHandler","formValidate","model","controlRenderer","validateForm","getFiles","Contact","emailReceiver","fb","phone","email","enquiry","render","ContactForm","YoutubeBannerPanel","YoutubeEmbedded","videoCode","SearchResult","keyword","q","pages","PageList","searchHighlight","Code","code","codeType","codeJson","border","BlogPosts","getPages","numOfTileLines","parseInt","tilesPerLine","step","tilesToShow","setTilesToShow","showMore","BlogPostTitle","postDate","MultiColumnPanel","reverse","columnWidths","mobileColumnWidths","countItem","countD","countM","col","ExpandableHtml","open","setOpen","buttonTitle","icon","iconOpen","iconClosed","panelCollapsed","panelOpen","textAlign","testimonialPanel","testimonialItem","flexDirection","testimonialItem_title","testimonialItem_desc","flex","TestimonialItem","startRatingColor","desc","ratingValue","rating","TestimonialPanel","testimonialItems","responsive","breakpoint","sliderPanel","sliderItem","SliderItem","SliderPanel","sliderItems","itemElt","itemTypeCode","hasGTM","dataLayer","pageView","pageOpt","event","sendEvent","eventName","PageMemo","memo","pageData","sectionItems","sections","section","Section","sectionName","getMetaTag","pageTypeCode","prevProps","nextProps","ViewPage","pageLoaded","setPageLoaded","embedStatus","setEmbedStatus","loadEmbedJs","instgrm","Embeds","useInstagram","menuData","gtm","CmsRadioSender","controller","cloned","postMessage","htmlChanges","sendMessageToParent","returnTo","html","CmsRadioReceiver","self","selectItem","mediaSelectedCKEditor","getAllDirtyHtml","sender","returnAllDirtyHtml","getHtml","returnHtml","tools","callFunction","funcNum","selectedPath","selectItemFromController","CmsHtmlEditor","ckeditorConfig","startupFocus","filebrowserBrowseUrl","filebrowserImageBrowseUrl","extraPlugins","toolbar","groups","extraAllowedContent","ckeditorStylesSet","attributes","$editor","CKEDITOR","disableAutoInline","editor","stylesSet","on","evt","ed","markDirtyHtml","instances","cmsCurrentEditor","setData","getData","destroy","CmsPageController","viewOnly","receiver","htmlEditor","$","initGlobalVars","prop","off","attr","is","ctrlKey","which","saveAllDirtyHtml","$item","fromController","doubleclicked","cke_top","closeEditingItem","findItem","removeAttr","depth","showHtmlEditor","selectControllerItem","openEdit","editableParent","parents","first","close","show","extend","htmleditor","getAnchors","anchors","each","htmlbody","floor","animate","$section","getCurrentHtml","ItemId","SectionId","Content","itemid","formvals","cms_replace_item_html","EditPage","cmsViewMode","pageId","cmsPageController","catch","NavBar","currentLocation","menuItemElts","MenuItem","onCloseMenu","subMenuOpened","setSubMenuOpened","SubMenuItem","closeMenu","toggleSubmenu","TopHeader","menuOpened","setMenuOpened","setCurrentLocation","scrolled","setScrolled","initHistory","setHistory","nav","getLast","getPrevious","getPreviousPath","anchor","routeChanged","aria-label","BottomDock","isCurrent","linkElts","CommonVideoPopup","toggler","setToggler","sources","setSources","popupIndex","setPopupIndex","onOpen","PageUpdated","parallax","AppLayout","useScrollPosition","prevPos","currPos","App","isLocalhost","Boolean","serviceUpdateCheckerInterval","registerValidSW","swUrl","navigator","serviceWorker","register","updateViaCache","registration","scope","clearInterval","setInterval","update","preventDevToolsReloadLoop","ev","onupdatefound","installing","installingWorker","onstatechange","onUpdate","onSuccess","ready","ReactDOM","getElementById","URL","contentType","unregister","checkValidServiceWorker","confirm","waiting"],"mappings":"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","file":"static/js/main.129a598e.chunk.js","sourcesContent":["// closest\r\n\r\nif (!Element.prototype.matches) {\r\n Element.prototype.matches = Element.prototype.msMatchesSelector || \r\n Element.prototype.webkitMatchesSelector;\r\n}\r\n\r\nif (!Element.prototype.closest) {\r\n Element.prototype.closest = function(s) {\r\n var el = this;\r\n\r\n do {\r\n if (el.matches(s)) return el;\r\n el = el.parentElement || el.parentNode;\r\n } while (el !== null && el.nodeType === 1);\r\n return null;\r\n };\r\n}\r\n\r\n\r\n// getBoundingClientRect","import React from 'react';\r\n\r\nexport function NotFound(props) {\r\n const debugInfo = props.debugInfo;\r\n\r\n function refreshPage(e) {\r\n e.preventDefault();\r\n window.location.reload();\r\n }\r\n\r\n function goBack(e) {\r\n e.preventDefault();\r\n window.history.back();\r\n }\r\n\r\n return (\r\n
\r\n
\r\n

404 Error

\r\n\r\n

Please refreshPage(e)}>refresh your browser.

\r\n
\r\n \r\n
\r\n\r\n {\r\n debugInfo &&\r\n
Error message: {debugInfo.pageUrl} - {debugInfo.loadFrom} 
\r\n }\r\n\r\n
\r\n\r\n
\r\n\r\n )\r\n}","const config = {\r\n isProd: process.env.NODE_ENV === \"production\",\r\n locale: getLocale(),\r\n siteName: process.env.REACT_APP_SITENAME,\r\n apiBase: process.env.REACT_APP_API_ENDPOINT,\r\n resourceBase: process.env.REACT_APP_RESOURCE_BASEURL,\r\n cmsEndpoint: process.env.REACT_APP_CMS_ENDPOINT,\r\n ver: process.env.REACT_APP_VERSION,\r\n updateDate: process.env.REACT_APP_UPDATED_AT,\r\n \r\n bvClientId: process.env.REACT_APP_BAZZAR_CLIENT_ID,\r\n bvSiteId: process.env.REACT_APP_BAZZAR_SITE_ID,\r\n bvEnv: process.env.REACT_APP_BAZZAR_ENV,\r\n bvLocale: getLocale() === 'nz' ? 'en_NZ' : 'en_AU',\r\n}\r\n\r\nfunction getLocale() {\r\n return process.env.REACT_APP_COUNTRY_LOCALE || getCountry()\r\n}\r\n\r\nfunction getCountry() {\r\n if (typeof window !== `undefined`) {\r\n if (window.location.hostname.toLowerCase().indexOf(\".nz\") >= 0) return 'nz';\r\n if (window.location.hostname.toLowerCase().indexOf(\"-nz\") >= 0) return 'nz';\r\n if (window.location.search === '?nz=true') return 'nz';\r\n }\r\n return 'au';\r\n}\r\n\r\nconsole.log(process.env, config)\r\nexport default {\r\n ...config\r\n}\r\n","import React from 'react';\r\nimport env from '../../env';\r\n\r\nexport function AppVersion(props) {\r\n\r\n const [checkStatus, setCheckStatus] = React.useState('idle')\r\n //const [secs, setSecs] = React.useState(10)\r\n const ver = env.ver;\r\n const updateDate = env.updateDate;\r\n\r\n React.useEffect(() => {\r\n console.log(checkStatus);\r\n if (checkStatus === 'checking') {\r\n if (typeof window !== `undefined`) {\r\n window.updateSW().then(function () {\r\n console.log('sw update called');\r\n setCheckStatus('checked')\r\n })\r\n }\r\n\r\n let timer = setTimeout(() => {\r\n if (typeof window !== `undefined`) {\r\n window.location.reload()\r\n }\r\n }, 5000)\r\n return () => { clearTimeout(timer) }\r\n }\r\n }, [checkStatus])\r\n\r\n function checkUpdates(e) {\r\n if (typeof window !== `undefined`) {\r\n if (window.updateSW) {\r\n setCheckStatus('checking')\r\n } else {\r\n window.location.reload();\r\n }\r\n }\r\n }\r\n\r\n function refreshApp(e) {\r\n if (typeof window !== `undefined`) {\r\n window.location.reload();\r\n }\r\n }\r\n\r\n let button = null\r\n if (checkStatus === 'checking') {\r\n button = ;\r\n } else if (checkStatus === 'checked') {\r\n button = <>
(If this does't reload automatically, please click the above button)
;\r\n } else {\r\n button = ;\r\n }\r\n\r\n return (\r\n
\r\n
\r\n Version: {ver} ({updateDate})\r\n
\r\n
\r\n {button}\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport function AppVersionPage(props) {\r\n return (\r\n
\r\n \r\n
);\r\n}","import React from 'react';\r\n\r\nexport function Button({onClick, status, children, btnStyle='primary'}) {\r\n let buttonStyle = 'btn-' + btnStyle;\r\n return (\r\n \r\n );\r\n}","import React from 'react';\r\n\r\nexport const ErrorMessage = ({ errors, summaryMessage }) => {\r\n if (!errors) return null;\r\n if (typeof errors.length !== 'undefined' && errors.length === 0) return null;\r\n \r\n if (summaryMessage) return
{summaryMessage}
\r\n let message = errors;\r\n if (Array.isArray(errors)) {\r\n if (errors.length === 0) return null;\r\n message = errors.map((error, index) =>
{error}
);\r\n }\r\n \r\n return
{message}
\r\n}\r\n","//import React from 'react';\r\n/** @jsx jsx */\r\nimport { css, jsx } from '@emotion/core'\r\n\r\nexport const ErrorPopup = (props) => {\r\n const title = props.title || 'Errors';\r\n const errors = props.errors;\r\n let messages = [];\r\n if (errors) {\r\n if (Array.isArray(errors)) {\r\n messages = errors;\r\n } else {\r\n messages.push(errors);\r\n }\r\n }\r\n\r\n const style = css({\r\n position: 'fixed',\r\n padding: '3rem',\r\n width: '800px',\r\n maxWidth: '90vw',\r\n maxHeight: '90vw',\r\n background: 'white',\r\n color: 'red',\r\n top: '50%',\r\n left: '50%',\r\n transform: 'translate(-50%, -50%)',\r\n zIndex: '1000'\r\n })\r\n\r\n return
\r\n

{title}

\r\n {props.children}\r\n {messages.map((error, inx) => (\r\n
\r\n ))}\r\n \r\n
\r\n}\r\n","import React from \"react\";\r\n\r\nfunction SvgNarrowRight(props) {\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default SvgNarrowRight;\r\n","const overloading = {\r\n breakpointNames: ['sm', 'md', 'lg', 'xl', 'xxl'],\r\n breakpoints: [576, 768, 992, 1200, 1600]\r\n}\r\n\r\nconst variables = {\r\n familyBase: '\"Gotham\",sans-serif',\r\n familyHeader: '\"DIN Next LT Pro\",serif',\r\n\r\n primaryColor: '#30b0c5',\r\n fontColor: '#404040',\r\n bgColor: '#ebebeb',\r\n\r\n ...overloading\r\n}\r\n\r\nexport default variables;","import variables from 'cssInJs/variables';\r\n\r\nconst cssEmotion = {\r\n breakpointNames: variables.breakpointNames,\r\n breakpoints: variables.breakpoints\r\n}\r\n\r\nconst iconColors = {\r\n primary: variables.primaryColor,\r\n secondary: variables.secondaryColor || '#000'\r\n}\r\n\r\nexport default {\r\n cssEmotion,\r\n iconColors\r\n}","import * as React from \"react\";\r\nimport siteConfig from '../../../config';\r\n\r\nconst iconColors = (siteConfig && siteConfig.iconColors) || { primary: \"#eee\", secondary: \"#000\" }\r\n\r\nfunction SvgLoading(props) {\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\r\nexport default SvgLoading;","import React from 'react';\r\nimport { LoadingCircle } from '../../icons';\r\n/** @jsx jsx */\r\nimport { css, jsx } from '@emotion/core'\r\n\r\nexport function Loading(props) {\r\n const [loaded, setLoaded] = React.useState(false);\r\n\r\n const style = {\r\n loading: css({\r\n minHeight: '300px',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n opacity: '0',\r\n transition: 'all 1s',\r\n }),\r\n loaded: css({\r\n opacity: '1'\r\n })\r\n }\r\n\r\n React.useEffect(() => {\r\n let timer = setTimeout(() => setLoaded(true), 500)\r\n return () => { clearTimeout(timer) }\r\n }, [])\r\n \r\n return
\r\n \r\n
\r\n}","export function isExternalLink(link){\r\n return link && (link.indexOf('https://') === 0 || link.indexOf('http://') === 0 || link.indexOf('://') === 0);\r\n}\r\n\r\nexport function getLinkFromElement(el){\r\n if (!el) return null;\r\n const linkEl = el.closest('a');\r\n //console.log(el, linkEl);\r\n if (linkEl){\r\n return linkEl.getAttribute('href');\r\n }\r\n return null;\r\n}\r\n\r\n\r\n// router utils\r\nexport function getLinkInfo(link) {\r\n if (!link) return null;\r\n\r\n const origin = typeof window !== `undefined` && window.location && window.location.origin;\r\n const currentPath = typeof window !== `undefined` && window.location && window.location.pathname;\r\n let linkFiltered = link.replace(origin, '').replace(currentPath + '#', '#');\r\n let linkLower = link.toLowerCase();\r\n\r\n //if (isStaticFile(linkLower)) return null;\r\n const isExternal = isExternalLink(linkFiltered);\r\n const isHash = linkFiltered.indexOf('#') === 0;\r\n const isTel = linkFiltered.indexOf('tel:') === 0;\r\n const isMailTo = linkFiltered.indexOf('mailto:') === 0;\r\n const type = (isHash && 'hash') || (isTel && 'tel') || (isMailTo && 'mailto') || \r\n (isStaticFile(linkLower) && 'static') || (isExternal && 'external') || 'internal';\r\n\r\n return { url: linkFiltered, type: type, ext: getExtension(link) };\r\n}\r\n\r\nvar exts = ['.pdf', '.jpg', '.png', '.gif', '.docx', '.doc']\r\nfunction isStaticFile(path) {\r\n for(let i = 0; i < exts.length; i++) {\r\n if (path.indexOf(exts[i]) >= 0) return true;\r\n }\r\n return false;\r\n}\r\n\r\nexport function getExtension(filename) {\r\n if (!filename || filename.indexOf('.') < 0) return null;\r\n return filename.split('.').pop().toLowerCase();\r\n}\r\n\r\nexport function getFilename(url) {\r\n return url.split('/').pop().split('?')[0];\r\n}\r\n\r\n//\r\nexport function toQueryString(params) {\r\n var queryString = Object.keys(params).map((key) => {\r\n return encodeURIComponent(key) + '=' + encodeURIComponent(params[key])\r\n }).join('&');\r\n return queryString;\r\n}\r\n\r\nexport function getYoutubeId(url){\r\n url = url.split(/(vi\\/|v=|\\/v\\/|youtu\\.be\\/|\\/embed\\/)/);\r\n return (url[2] !== undefined) ? url[2].split(/[^0-9a-z_-]/i)[0] : url[0];\r\n}\r\n\r\nexport function getSlug(text){\r\n return text.toLowerCase().replace(/ /g,'-').replace(/[-]+/g, '-').replace(/[^\\w-]+/g,'');\r\n}","//#region error json parsing\r\nexport const getErrors = (result) => {\r\n let errors = [];\r\n if (result && result.errors && result.errors.length > 0) {\r\n result.errors.forEach(err => {\r\n errors.push(err.errorMessage);\r\n });\r\n }\r\n return errors;\r\n}\r\n\r\nexport const getErrorMessage = (result) => {\r\n let errors = getErrors(result);\r\n return errors.join(\" \");\r\n}\r\n//#endregion","//#region conversion between array and object\r\nexport const convertToObject = (array, key) => {\r\n const initialValue = {};\r\n return array.reduce((obj, item) => {\r\n return {\r\n ...obj,\r\n [item[key]]: item,\r\n };\r\n }, initialValue);\r\n};\r\n\r\nexport const convertToKeyValues = (array, key, value) => {\r\n const initialValue = {};\r\n return array.reduce((obj, item) => {\r\n return {\r\n ...obj,\r\n [item[key]]: item[value],\r\n };\r\n }, initialValue);\r\n};\r\n//#endregion\r\n\r\n//#region array helper functions\r\nexport const moveItem = (list, fromIndex, toIndex) => {\r\n //const list = Array.from(array);\r\n const [removed] = list.splice(fromIndex, 1);\r\n list.splice(toIndex, 0, removed);\r\n\r\n return list;\r\n};\r\n\r\nexport const removeItem = (list, index) => {\r\n //const list = Array.from(array);\r\n list.splice(index, 1);\r\n\r\n return list;\r\n};\r\n\r\nexport const find = (list, fn) => {\r\n if (!list) return null;\r\n for (let i = 0; i < list.length; i++) {\r\n if (fn(list[i])) {\r\n return list[i];\r\n }\r\n }\r\n};\r\n\r\nexport const findIndex = (list, fn) => {\r\n if (!list) return -1;\r\n for (let i = 0; i < list.length; i++) {\r\n if (fn(list[i])) {\r\n return i;\r\n }\r\n }\r\n};\r\n\r\nexport const contains = (list, fn) => {\r\n return findIndex(list, fn) >= 0;\r\n}\r\n\r\nexport const sum = (list, fn) => {\r\n if (!list) return 0;\r\n let total = 0;\r\n for (let i = 0; i < list.length; i++) {\r\n total += fn(list[i]) || 0\r\n }\r\n return total\r\n}\r\n\r\nexport const equal = (list1, list2, fn) => {\r\n if (!list1 && !list2) return true;\r\n if (!list1 || !list2) return false;\r\n if (list1.length !== list2.length) return false;\r\n for (let i = 0; i < list1.length; i++) {\r\n let found = false;\r\n for (let j = 0; j < list2.length; j++) {\r\n if(fn(list1[i], list2[i])) {\r\n found = true;\r\n break;\r\n }\r\n }\r\n if (!found) return false;\r\n }\r\n return true;\r\n}\r\n//#endregion\r\n\r\n//#region sorting helpers\r\nexport const caseInsensitiveCompare = function (a, b) {\r\n return a.toLowerCase().localeCompare(b.toLowerCase());\r\n}\r\n\r\n// put the null items at the end.\r\nexport const compareIgnoreEmpty = function (asc) {\r\n return asc ?\r\n function (a, b) {\r\n return (a === null || isNaN(a)) - (b === null || isNaN(b)) || +(a > b) || -(a < b);\r\n }\r\n :\r\n function (a, b) {\r\n return (a === null || isNaN(a)) - (b === null || isNaN(b)) || -(a > b) || +(a < b);\r\n }\r\n}\r\n//#endregion","import parse from 'date-fns/parse';\r\nimport parseISO from 'date-fns/parseISO';\r\n\r\n//#region manipulation\r\nexport const addDays = (date, days) => {\r\n var result = new Date(date)\r\n result.setDate(result.getDate() + days)\r\n return result\r\n}\r\n//#endregion\r\n\r\n//#region format\r\nexport function formatYYYYMMDD(dateObj) {\r\n const date = toDate(dateObj);\r\n //console.log(dateObj, date)\r\n if (!date) return '';\r\n var dd = date.getDate();\r\n var mm = date.getMonth() + 1; //January is 0!\r\n\r\n var yyyy = date.getFullYear();\r\n if (dd < 10) {\r\n dd = '0' + dd;\r\n } \r\n if (mm < 10) {\r\n mm = '0' + mm;\r\n } \r\n return (`${yyyy}-${mm}-${dd}`)\r\n}\r\n//#endregion\r\n\r\n//#region parse\r\nexport function toDate(dateObj){\r\n if (!dateObj) return null;\r\n if (typeof dateObj === 'string') {\r\n return parseDate(dateObj, 'yyyy-MM-dd') ||\r\n parseDate(dateObj, 'yyyy-M-d') ||\r\n parseDate(dateObj, 'dd/MM/yyyy') ||\r\n parseDate(dateObj, 'd/M/yyyy') ||\r\n parseISO(dateObj)\r\n } else {\r\n return dateObj;\r\n }\r\n}\r\n\r\nexport function parseDate(dateStr, format) {\r\n const date = parse(dateStr, format, new Date());\r\n return date && isValidDate(date)? date : null;\r\n}\r\n\r\nexport function isValidDate(d) {\r\n return d instanceof Date && !isNaN(d);\r\n}\r\n//#endregion","//#region background images\r\nexport const bgUrl = (imageUrl) => {\r\n return `background-image:url(\"` + encodeURI(decodeURI(imageUrl)) + `\")`\r\n}\r\n\r\nexport const bgUrlStyle = (imageUrl) => {\r\n return `url(\"` + encodeURI(decodeURI(imageUrl)) + `\")`\r\n}\r\n//#endregion\r\n\r\n//#region screen/element size\r\nexport const screenWidth = () => {\r\n if (typeof window !== `undefined`) { \r\n return window.innerWidth ||\r\n document.documentElement.clientWidth ||\r\n document.body.clientWidth\r\n } else {\r\n return 0;\r\n }\r\n}\r\n\r\nexport const screenHeight = () => {\r\n if (typeof window !== `undefined`) { \r\n return window.innerHeight ||\r\n document.documentElement.clientHeight ||\r\n document.body.clientHeight\r\n } else {\r\n return 0;\r\n }\r\n}\r\n\r\nexport const outerWidth = el => el.offsetWidth\r\nexport const outerHeight = el => el.offsetHeight\r\n//#endregion\r\n\r\n//#region css class\r\n/**\r\n * Check if element has the css class on it.\r\n */\r\nexport const hasClass = (el, className) => {\r\n if (el.classList) {\r\n return el.classList.contains(className)\r\n }\r\n\r\n return !!el.className.match(new RegExp(`(\\\\s|^)${className}(\\\\s|$)`))\r\n}\r\n\r\n/**\r\n * Adds the provided css className to the element.\r\n */\r\nexport const addClass = (el, className) => {\r\n if (el.classList) {\r\n el.classList.add(className)\r\n return\r\n }\r\n\r\n if (!hasClass(el, className)) {\r\n el.className += ` ${className}`\r\n }\r\n}\r\n\r\n/**\r\n * Remove the provided css className from the element.\r\n */\r\nexport const removeClass = (el, className) => {\r\n if (el.classList) {\r\n el.classList.remove(className)\r\n return\r\n }\r\n\r\n if (hasClass(el, className)) {\r\n const reg = new RegExp(`(\\\\s|^)${className}(\\\\s|$)`)\r\n el.className = el.className.replace(reg, ' ')\r\n }\r\n}\r\n\r\n/**\r\n * Adds or removes a class name on the input depending on the status flag.\r\n */\r\nexport const toggleClass = (el, className, status) => {\r\n if (!el || !className) return\r\n\r\n if (status) {\r\n return addClass(el, className)\r\n }\r\n\r\n removeClass(el, className)\r\n}\r\n//#endregion","import { gsap } from 'gsap';\r\nimport { ScrollToPlugin } from 'gsap/ScrollToPlugin';\r\n\r\ngsap.registerPlugin(ScrollToPlugin);\r\n\r\nexport function scrollTo(selector, duration = 750, delay = 0) {\r\n const el = findElement(selector);\r\n if (el) {\r\n setTimeout(() => {\r\n //console.log(element);\r\n const offset = elementOffset(el);\r\n //console.log(offset)\r\n //window.scrollTo(0, offset.top - 300);\r\n\r\n gsap.to(window, {duration: (duration/1000), scrollTo: offset.top - 100, ease: 'power1'});\r\n\r\n }, delay);\r\n //el.scrollIntoView({ block: 'start', inline: 'nearest', behavior: 'smooth' }); }, timeout);\r\n return true;\r\n }\r\n return false;\r\n}\r\n\r\nexport function findElement(selector) {\r\n if (typeof selector !== 'string') return selector;\r\n\r\n let found = querySelectorOrNull(selector)\r\n || querySelectorOrNull('#' + selector)\r\n || querySelectorOrNull('.' + selector)\r\n \r\n return found;\r\n}\r\n\r\nexport function querySelectorOrNull(selector) {\r\n try {\r\n return document.querySelector(selector);\r\n } catch(e){\r\n return null;\r\n };\r\n}\r\n\r\nexport function elementOffset(el) {\r\n var rect = el.getBoundingClientRect(),\r\n scrollLeft = typeof window !== `undefined` ? (window.pageXOffset || document.documentElement.scrollLeft) : 0,\r\n scrollTop = typeof window !== `undefined` ? (window.pageYOffset || document.documentElement.scrollTop) : 0;\r\n\r\n return { top: rect.top + scrollTop, left: rect.left + scrollLeft, width: el.offsetWidth, height: el.offsetHeight }\r\n}\r\n\r\nexport function isElementInViewport (el) {\r\n if (typeof window !== `undefined`) {\r\n var rect = el.getBoundingClientRect();\r\n\r\n return (\r\n rect.top >= 0 &&\r\n rect.left >= 0 &&\r\n rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && /* or $(window).height() */\r\n rect.right <= (window.innerWidth || document.documentElement.clientWidth) /* or $(window).width() */\r\n );\r\n } else {\r\n return true;\r\n }\r\n}\r\n\r\nexport function getCurrentBreakpoint() {\r\n if (typeof window === `undefined`) return null;\r\n \r\n const bpHolder = document.querySelector('.devMediaQueryStatus__current');\r\n if (!bpHolder) return null;\r\n return window.getComputedStyle(bpHolder, ':before').getPropertyValue('content').replace(/[\"']/g, '');\r\n}\r\n\r\n","export function formatMoney(number, fraction = 0) {\r\n var formatter = new Intl.NumberFormat('en-AU', {\r\n style: 'currency',\r\n currency: 'AUD',\r\n minimumFractionDigits: fraction,\r\n });\r\n\r\n return formatter.format(number);\r\n}\r\n\r\nexport function toMonthlyCost(amount, frequency) {\r\n if (!amount) return 0;\r\n if (frequency === 'Week') {\r\n return amount * 52.1429 / 12.0;\r\n } else if (frequency === 'Fortnight') {\r\n return amount * 52.1429 / 2.0 / 12.0;\r\n } else if (frequency === 'Month') {\r\n return amount;\r\n } else if (frequency === 'Quarter') {\r\n return amount * 4.0 / 12.0;\r\n } else if (frequency === 'Year') {\r\n return amount / 12.0;\r\n } else {\r\n return amount;\r\n }\r\n}\r\n","export function isBlank(str) {\r\n return (!str || /^\\s*$/.test(str))\r\n}\r\n\r\nexport function isEmpty(str) {\r\n return (!str || str.length === 0)\r\n}\r\n\r\nexport function isNumeric(num){\r\n return !isNaN(num)\r\n}\r\n\r\nexport function capitalize(expression) {\r\n return expression.charAt(0).toUpperCase() + expression.slice(1);\r\n}\r\n\r\nexport function toFieldName(str) {\r\n if (!str) return null;\r\n return capitalize((str.replace(/([A-Z]+)/g, ' $1').replace(/([A-Z][a-z])/g, ' $1')).trim());\r\n}\r\n\r\nexport function toHtml(str) {\r\n if (!str) return null;\r\n return str.replace(/[\\n\\r]/g, '
')\r\n}\r\n\r\n// Shorten a string to less than maxLen characters without truncating words.\r\nexport function truncateWords(str, maxLen, separator = ' ', ellipsis = '...') {\r\n if (str.length <= maxLen) return str\r\n var pos = str.lastIndexOf(separator, maxLen)\r\n return str.substr(0, pos) + ellipsis\r\n}\r\n\r\nexport function numberWithCommas(x) {\r\n var parts = x.toString().split(\".\");\r\n parts[0] = parts[0].replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\r\n return parts.join(\".\");\r\n}\r\n\r\nexport const formatNumber = (value) => {\r\n if (value === 0) return '0';\r\n if (!value) return '';\r\n return Math.round(value * 100) / 100\r\n}","import shortid from 'shortid';\r\nimport uuid from 'uuid/v4';\r\n\r\nexport function shortId() {\r\n return shortid();\r\n}\r\n\r\nexport function guid() {\r\n return uuid();\r\n}","export function toCamel(o) {\r\n var newO, origKey, newKey, value\r\n if (o instanceof Array) {\r\n return o.map(function(value) {\r\n if (typeof value === \"object\") {\r\n value = toCamel(value)\r\n }\r\n return value\r\n })\r\n } else {\r\n newO = {}\r\n for (origKey in o) {\r\n if (o.hasOwnProperty(origKey)) {\r\n newKey = (origKey.charAt(0).toLowerCase() + origKey.slice(1) || origKey).toString()\r\n value = o[origKey]\r\n if (value instanceof Array || (value !== null && value.constructor === Object)) {\r\n value = toCamel(value)\r\n }\r\n newO[newKey] = value\r\n }\r\n }\r\n }\r\n return newO\r\n}","import classNames from 'classnames';\r\nimport * as url from './url';\r\nimport * as form from './form';\r\nimport * as array from './array';\r\nimport * as date from './date';\r\nimport * as css from './css';\r\nimport * as ui from './ui';\r\nimport * as money from './money';\r\nimport * as text from './text';\r\nimport * as random from './random';\r\nimport * as object from './object';\r\n\r\nexport default { classNames, url, form, array, date, css, ui, money, text, random, object};","import utils from \"utils\";\r\nimport env from 'env';\r\n\r\nexport const isMobile = () => {\r\n var width = utils.css.screenWidth()\r\n return width < 768\r\n}\r\n\r\nexport function resourcePath(url){\r\n return utils.url.isExternalLink(url)? url : env.resourceBase + url;\r\n}\r\n\r\nexport const isNZ = env.locale === 'nz'\r\n\r\n","import coreUtils from 'lib/utils-core';\r\nimport * as site from 'site/siteUtils';\r\n\r\nexport default { ...coreUtils, site };","import { useState, useEffect } from 'react';\r\nimport utils from '../../utils';\r\nimport siteConfig from '../../config';\r\n\r\nexport function useApi(fn) {\r\n //console.log('useApi')\r\n const [response, setResponse] = useState({});\r\n const [errors, setErrors] = useState([]);\r\n const [status, setStatus] = useState('ready');\r\n const [request, setRequest] = useState(null);\r\n\r\n useEffect(() => {\r\n if (!request) return;\r\n\r\n //console.log('fetch now')\r\n setResponse(null);\r\n setErrors([]);\r\n setStatus('ready');\r\n\r\n const fetchData = async () => {\r\n setStatus('pending');\r\n try {\r\n //console.log(request);\r\n const options = request.options || {}\r\n siteConfig.apiNetJwt && await siteConfig.apiNetJwt(options);\r\n\r\n const res = await fetch(request.url, options);\r\n //console.log(res);\r\n\r\n if (!res.ok) {\r\n try {\r\n const json = await res.json();\r\n console.log(json);\r\n\r\n if (json.message) {\r\n setErrors([json.message]);\r\n setStatus('error')\r\n return;\r\n }\r\n } catch (e) { }\r\n\r\n setErrors(['Error - ' + res.status + (res.statusText && (' - ' + res.statusText))]);\r\n setStatus('error')\r\n return;\r\n }\r\n\r\n //const json = await res.json();\r\n const text = await res.text();\r\n const json = text && text.length ? JSON.parse(text) : null;\r\n //console.log(json);\r\n\r\n // check if ajax result from c#\r\n if (json && json.errors && json.errors.length > 0) {\r\n setErrors(utils.form.getErrors(json));\r\n setStatus('error')\r\n return;\r\n }\r\n\r\n setResponse(json);\r\n setStatus('done')\r\n } catch (err) {\r\n //console.log(error, error.toString(), typeof error, JSON.stringify(error))\r\n setErrors([err.toString()]);\r\n setStatus('error')\r\n }\r\n };\r\n fetchData();\r\n }, [request]);\r\n\r\n const containsErrorMessage = (msg) => {\r\n const finding = (msg || '').toLowerCase()\r\n return errors.some(x => (x || '').toLowerCase().indexOf(finding) >= 0)\r\n }\r\n\r\n //return [ response, error, status, (...args) => setRequest(fn(...args)) ];\r\n return {\r\n request: request,\r\n response: response,\r\n errors: errors,\r\n status: status,\r\n hasErrors: () => status === 'error', \r\n containsErrorMessage: containsErrorMessage,\r\n addErrors: (errs) => {\r\n setErrors(...errors, ...errs)\r\n setStatus('error')\r\n },\r\n done: () => status === 'done',\r\n send: (...args) => {setStatus('ready'); setRequest(fn(...args))},\r\n sendRaw: (httpOptionFn, ...args) => {setStatus('ready'); setRequest(httpOptionFn(...args))},\r\n reset: () => {\r\n setStatus('ready')\r\n }\r\n };\r\n}\r\n\r\nexport function usePost() {\r\n const formDataFn = (url, data, options = {}) =>\r\n ({\r\n url: url,\r\n options: {\r\n ...options,\r\n method: 'POST',\r\n body: data // FormData\r\n }\r\n });\r\n const post = useApi((url, data, options = {}) =>\r\n ({\r\n url: url,\r\n options: {\r\n ...options,\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(data)\r\n }\r\n })\r\n );\r\n return {\r\n ...post,\r\n loading: () => post.status === 'ready' || post.status === 'pending',\r\n sending: () => post.status === 'pending',\r\n sendFormData: (...args) => post.sendRaw(formDataFn, ...args)\r\n }\r\n}\r\n\r\nexport function useGet() {\r\n const get = useApi((url, options = {}) =>\r\n ({\r\n url: url,\r\n options: {\r\n ...options,\r\n method: 'GET'\r\n }\r\n })\r\n );\r\n return {\r\n ...get,\r\n loading: () => get.status === 'ready' || get.status === 'pending'\r\n }\r\n}\r\n\r\n//https://medium.com/@jaryd_34198/seamless-api-requests-with-react-hooks-part-2-3ab42ba6ad5c","import React from 'react';\r\nimport env from '../../env';\r\n\r\nexport function MediaQueryStatus(props) {\r\n return (\r\n
\r\n
\r\n
\r\n );\r\n}\r\n","import React from 'react';\r\nimport { Helmet } from 'react-helmet-async';\r\n\r\nexport function MetaTag({ data: seoData }) {\r\n //console.log(seoData)\r\n const data = Object.assign({}, {\r\n title: ''\r\n }, seoData)\r\n\r\n return (<>\r\n \r\n {data.title}\r\n {data.description && }\r\n {data.keywords && }\r\n {data.language && }\r\n {data.country && }\r\n\r\n\r\n \r\n \r\n \r\n {data.description && }\r\n {data.heroImageUrl && }\r\n\r\n \r\n \r\n \r\n {data.description && }\r\n {data.heroImageUrl && }\r\n\r\n\r\n \r\n \r\n )\r\n}\r\n\r\n\r\n// function MetaContent({ name, content }) {\r\n// console.log(name, content)\r\n// if (!content) return null;\r\n// return \r\n// }\r\n\r\n","import env from '../../env';\r\n\r\nexport const pageView = (url) => {\r\n if (process.env.NODE_ENV === 'development') {\r\n console.warn(`Tracking is deprecated.`, `Use seperate tracking helper instead`);\r\n }\r\n if (hasGTM()) gtmPageView(url)\r\n if (hasGtag()) gaPageView(url)\r\n if (hasFBPixel()) fbPageView(url)\r\n}\r\n\r\nexport const sendFormEvent = (formName, params) => {\r\n if (process.env.NODE_ENV === 'development') {\r\n console.warn(`Tracking is deprecated.`, `Use seperate tracking helper instead`);\r\n }\r\n const p = Object.assign({ 'gtm.elementId': formName }, params || {})\r\n\r\n if (hasGTM()) gtmSendEvent('form', p)\r\n if (hasGtag()) gaSendEvent('form', p)\r\n if (hasFBPixel()) fbSendEvent('form', p)\r\n}\r\n\r\nexport const sendEvent = (eventName, params) => {\r\n if (process.env.NODE_ENV === 'development') {\r\n console.warn(`Tracking is deprecated.`, `Use seperate tracking helper instead`);\r\n }\r\n if (hasGTM()) gtmSendEvent(eventName, params)\r\n if (hasGtag()) gaSendEvent(eventName, params)\r\n if (hasFBPixel()) fbSendEvent(eventName, params)\r\n}\r\n\r\n//#region GTM\r\nexport const hasGTM = () => {\r\n return !!(typeof window !== `undefined` && window.dataLayer);\r\n}\r\n\r\nexport const gtmPageView = (url) => {\r\n if (typeof window !== `undefined`) {\r\n window.dataLayer.push({\r\n event: 'pageview',\r\n page: {\r\n path: url\r\n }\r\n })\r\n }\r\n}\r\nexport const gtmSendEvent = (eventName, params) => {\r\n if (typeof window !== `undefined`) {\r\n window.dataLayer.push(Object.assign({ event: eventName }, params || {}))\r\n }\r\n}\r\n//#endregion\r\n\r\n//#region Gtag / GA\r\nexport const hasGtag = () => {\r\n return !!(typeof window !== `undefined` && window.gtag);\r\n}\r\n\r\nexport const gaPageView = (url) => {\r\n if (typeof window !== `undefined`) {\r\n if (env.gaAccounts) {\r\n env.gaAccounts.forEach(id => {\r\n window.gtag('config', id, { 'page_path': url });\r\n })\r\n }\r\n }\r\n}\r\n\r\nexport const gaSendEvent = (eventName, params) => {\r\n if (typeof window !== `undefined`) {\r\n if (env.gaAccounts && env.gaAccounts.length > 0) {\r\n window.gtag('event', eventName, params || {});\r\n }\r\n }\r\n}\r\n//#endregion\r\n\r\n//#region Facebook Pixel\r\nexport const hasFBPixel = () => {\r\n return !!(typeof window !== `undefined` && window.fbq);\r\n}\r\n\r\nexport const fbPageView = (url) => {\r\n if (typeof window !== `undefined`) {\r\n window.fbq('track', 'PageView');\r\n }\r\n}\r\n\r\nexport const fbSendEvent = (eventName, params) => {\r\n if (typeof window !== `undefined`) {\r\n window.fbq('track', eventName, params || {});\r\n }\r\n}\r\n//#endregion\r\n\r\n\r\n\r\n","import utils from '../../utils';\r\n\r\nexport const MAX = 10000;\r\nexport const MIN = -10000;\r\n\r\nexport function getScrollProgress(el) {\r\n if (typeof window !== `undefined`) {\r\n const scroll = window.scrollY || window.pageYOffset\r\n if (!el) {\r\n console.log('not exists', el)\r\n return {\r\n progress: 0,\r\n top: scroll\r\n }\r\n }\r\n const boundsTop = el.getBoundingClientRect().top + scroll\r\n\r\n const viewport = {\r\n top: scroll,\r\n bottom: scroll + window.innerHeight,\r\n height: window.innerHeight\r\n }\r\n\r\n const bounds = {\r\n top: boundsTop,\r\n bottom: boundsTop + el.clientHeight,\r\n height: el.clientHeight\r\n }\r\n\r\n //const scrollTop = window.scrollY || window.pageYOffset || document.documentElement.scrollTop;\r\n\r\n // const status = {\r\n // viewport: viewport,\r\n // bound: bounds,\r\n // inViewport: (bounds.bottom >= viewport.top && bounds.bottom <= viewport.bottom)\r\n // || (bounds.top <= viewport.bottom && bounds.top >= viewport.top)\r\n // }\r\n\r\n //console.log((viewport.bottom - bounds.top) / (bounds.height + viewport.height))\r\n return {\r\n progress: (viewport.bottom - bounds.top) / (bounds.height + viewport.height),\r\n top: (viewport.bottom - bounds.top) / (viewport.height)\r\n }\r\n } else {\r\n return {\r\n progress: 0,\r\n top: 0\r\n }\r\n }\r\n}\r\n\r\n//au.setClass(section, 'animated', [0.3, au.MAX])\r\nexport function setClass(el, className, pr, range)\r\n{\r\n if (pr >= range[0] && pr <= range[1]) {\r\n utils.css.addClass(el, className);\r\n } else {\r\n utils.css.removeClass(el, className);\r\n }\r\n}\r\n\r\nexport function prVal(from, to, pr, scale = [0, 1]) {\r\n //console.log(from, to, typeof from, typeof to)\r\n if (pr < scale[0]) return from;\r\n if (pr > scale[1]) return to;\r\n return from + (to - from) * ((pr - scale[0])/(scale[1] - scale[0]));\r\n}\r\n\r\nexport function transform(el, x, y) {\r\n el.style.transform = 'translate(' + x + ',' + y + ')';\r\n}\r\n\r\nexport function removeTransform(el) {\r\n\r\n}\r\n\r\n// requestAnimationFrame\r\n// const raf =\r\n// (window).requestAnimationFrame ||\r\n// (window).webkitRequestAnimationFrame ||\r\n// (window).mozRequestAnimationFrame ||\r\n// function (callback) {\r\n// (window).setTimeout(callback, 1000 / 60)\r\n// }\r\nexport function getScreenSize() {\r\n const w = utils.css.screenWidth()\r\n const h = utils.css.screenHeight()\r\n return { width: w, height: h };\r\n}\r\n","const holder = typeof window !== `undefined` ? window : {};\r\nconst storeName = '__j6_lazy_js'\r\n\r\nexport function loadJs(...scripts) {\r\n const promises = [];\r\n scripts.forEach((script) => promises.push(loadScript(script, holder)));\r\n return Promise.all(promises);\r\n}\r\n\r\nexport function loadedJs(url) {\r\n if (!holder[storeName]) return false;\r\n return holder[storeName][url] && holder[storeName][url].loaded\r\n}\r\n\r\nfunction loadScript(url) {\r\n if (!holder[storeName]) holder[storeName] = {};\r\n\r\n return new Promise((resolve, reject) => {\r\n //resolve if already loaded\r\n if (holder[storeName][url] && holder[storeName][url].loaded) {\r\n resolve({ script: url, loaded: true, networkLoaded: false , status: 'Already Loaded' });\r\n }\r\n else {\r\n //load script\r\n let script = document.createElement('script');\r\n script.type = 'text/javascript';\r\n script.src = url;\r\n script.onload = () => {\r\n holder[storeName][url] = { loaded: true };\r\n resolve({ script: url, loaded: true, networkLoaded: true, status: 'Loaded' });\r\n };\r\n script.onerror = (error) => resolve({ script: url, loaded: false, status: 'Load failed' });\r\n document.getElementsByTagName('head')[0].appendChild(script);\r\n }\r\n });\r\n}","import { useLayoutEffect } from 'react';\r\n//import useWindowScroll from '@react-hook/window-scroll';\r\nimport { au } from '../../components';\r\n\r\n/* background image height =\r\n + cutoff padding = always hidden padding - usually 10 px\r\n + panel height (desired parallax panel height)\r\n + padding height = panel height * padding height ratio\r\n + cutoff padding = always hidden padding - usually 10 px\r\n*/\r\n\r\nconst defaultSettings = {\r\n cutoffPadding: 10,\r\n speed: 15, // 5% of image/100px scroll\r\n //paddingHeightRatio: 0.3\r\n //screenSize\r\n}\r\n\r\nexport const ParallaxData = {\r\n settings: {\r\n screenSize: null\r\n },\r\n panels: [\r\n { selector: '.parallax', imageRatio: 1080 / 1920, panelHeight: 'auto' },\r\n ],\r\n elements: [],\r\n timeoutId: null\r\n}\r\n\r\nexport function useParallax() {\r\n const handleScroll = () => {\r\n //console.log('useParallax - scrolling')\r\n onScroll(ParallaxData);\r\n }\r\n\r\n const reset = () => {\r\n //console.log('useParallax - reset');\r\n setTimeout(() => { init(ParallaxData); handleScroll(); }, 300)\r\n }\r\n\r\n useLayoutEffect(() => {\r\n //console.log('useParallax - effect');\r\n setTimeout(() => { init(ParallaxData); handleScroll(); }, 300)\r\n if (typeof window !== `undefined`) {\r\n window.addEventListener('scroll', handleScroll)\r\n window.addEventListener('resize', reset)\r\n }\r\n return () => {\r\n //console.log('useParallax - removed');\r\n if (typeof window !== `undefined`) {\r\n window.removeEventListener('scroll', handleScroll)\r\n window.removeEventListener('resize', reset)\r\n }\r\n }\r\n\r\n // eslint-disable-next-line \r\n }, []);\r\n\r\n return { reset };\r\n};\r\n\r\n// export function useParallax(opt) {\r\n// // const settings = Object.assign({}, defaultSettings, opt);\r\n\r\n// const [resetCounter, setResetCounter] = useState(0);\r\n// const [parallaxData,] = useState(ParallaxData);\r\n\r\n// //const scrollY = useWindowScroll(60 /*fps*/)\r\n// const reset = () => {\r\n// setResetCounter(resetCounter + 1);\r\n// }\r\n\r\n// const handleScroll = () => {\r\n// onScroll(parallaxData);\r\n// }\r\n\r\n// useLayoutEffect(() => {\r\n// console.log('useParallax - effect');\r\n\r\n// setTimeout(() => { init(parallaxData); handleScroll(); }, 300)\r\n\r\n// //const handleScroll = (): void => setThrottledScroll(getScrollY())\r\n// window.addEventListener('scroll', handleScroll)\r\n// window.addEventListener('resize', handleScroll)\r\n// return (): void => {\r\n// window.removeEventListener('scroll', handleScroll)\r\n// window.removeEventListener('resize', handleScroll)\r\n// }\r\n\r\n// // eslint-disable-next-line \r\n// }, [resetCounter]);\r\n// //console.log(scrollY, resetCounter)\r\n\r\n// return { reset };\r\n// };\r\n\r\nexport function init(data) {\r\n //console.log('parallax init');\r\n const screenSize = data.settings.screenSize = au.getScreenSize();\r\n data.settings = Object.assign({}, defaultSettings, data.settings)\r\n let cnt = 0;\r\n data.panels.forEach(panel => {\r\n const elements = document.querySelectorAll(panel.selector) || [];\r\n for (let i = 0; i < elements.length; i++) {\r\n cnt++;\r\n const el = elements[i];\r\n //const el = document.querySelector(panel.selector);\r\n //console.log(panel.selector, el)\r\n //if (!el) { panel.el = null; return; }\r\n const autoPanelHeight = !panel.panelHeight || panel.panelHeight === 'auto';\r\n const panelHeight = autoPanelHeight ? el.offsetHeight : parseFloat(panel.panelHeight);\r\n //console.log(autoPanelHeight, panelHeight)\r\n\r\n const calculated = { shadowHeight: 0, shadowWidth: 0, fromTop: 0, toTop: 0 };\r\n // calculated.shadowHeight = panelHeight * (1 + data.settings.paddingHeightRatio) + 2 * data.settings.cutoffPadding;\r\n // calculated.shadowWidth = calculated.shadowHeight / panel.imageRatio;\r\n // if (calculated.shadowWidth < data.settings.screenSize.width) {\r\n // // magnifying the background image to fix the full width of the browser\r\n // calculated.shadowWidth = data.settings.screenSize.width;\r\n // calculated.shadowHeight = calculated.shadowWidth * panel.imageRatio;\r\n // }\r\n\r\n const speed = data.settings.speed * (screenSize.width > 1000 ? 1 : 2) \r\n let baseHeight = data.settings.screenSize.width * panel.imageRatio > panelHeight ? data.settings.screenSize.width * panel.imageRatio : panelHeight\r\n baseHeight = baseHeight + (data.settings.screenSize.height + panelHeight) * (speed * 0.01)\r\n calculated.shadowHeight = baseHeight + 2 * data.settings.cutoffPadding;\r\n calculated.shadowWidth = calculated.shadowHeight / panel.imageRatio;\r\n if (calculated.shadowWidth < data.settings.screenSize.width) {\r\n // magnifying the background image to fix the full width of the browser\r\n calculated.shadowWidth = data.settings.screenSize.width;\r\n calculated.shadowHeight = calculated.shadowWidth * panel.imageRatio;\r\n }\r\n\r\n calculated.fromTop = -data.settings.cutoffPadding;\r\n calculated.toTop = -calculated.shadowHeight + panelHeight + data.settings.cutoffPadding;\r\n\r\n if (!autoPanelHeight)\r\n (el).style.height = panel.panelHeight + 'px';\r\n\r\n (el).style.backgroundSize = calculated.shadowWidth + 'px ' + calculated.shadowHeight + 'px'\r\n\r\n //panel.el = el;\r\n panel.calculated = calculated;\r\n data.elements.push({ el: el, calculated: calculated });\r\n //console.log(panelHeight, baseHeight, calculated)\r\n }\r\n })\r\n\r\n //console.log('parallax init - ' + cnt)\r\n if (cnt === 0) {\r\n if (data.timeoutId) {\r\n try {\r\n if (typeof window !== `undefined`) { \r\n window.clearTimeout(data.timeoutId)\r\n }\r\n } catch(e){}\r\n }\r\n // reschedule\r\n if (typeof window !== `undefined`) { \r\n data.timeoutId = window.setTimeout(() => init(data), 500)\r\n }\r\n }\r\n}\r\n\r\n\r\nexport function onScroll(data) {\r\n //console.log(data);\r\n data.elements.forEach(element => {\r\n if (!element.el) return;\r\n const pr = au.getScrollProgress(element.el).progress;\r\n //console.log(pr);\r\n\r\n const min = element.calculated.fromTop;\r\n const max = element.calculated.toTop;\r\n const top = au.prVal(min, max, pr, [0, 1]);\r\n //console.log(top);\r\n (element.el).style.backgroundPositionY = top + 'px'\r\n })\r\n\r\n}","import { useMemo } from 'react';\r\nimport { useParams, useLocation, useHistory, useRouteMatch, Redirect } from 'react-router-dom';\r\nimport queryString from 'query-string';\r\n\r\nexport function useRouter() {\r\n const params = useParams();\r\n const location = useLocation();\r\n const history = useHistory();\r\n const match = useRouteMatch();\r\n\r\n // Return our custom router object\r\n // Memoize so that a new object is only returned if something changes\r\n return useMemo(() => {\r\n return {\r\n // For convenience add push(), replace(), pathname at top level\r\n navigate: history.push,\r\n push: history.push,\r\n Redirect: Redirect,\r\n replace: history.replace,\r\n pathname: location.pathname,\r\n path: location.pathname + location.hash + location.search,\r\n // Merge params and parsed query string into single \"query\" object\r\n // so that they can be used interchangeably.\r\n // Example: /:topic?sort=popular -> { topic: \"react\", sort: \"popular\" }\r\n query: {\r\n ...queryString.parse(location.search), // Convert string to object\r\n ...params\r\n },\r\n // Include match, location, history objects so we have\r\n // access to extra React Router functionality if needed.\r\n match,\r\n location,\r\n history\r\n };\r\n }, [params, match, location, history]);\r\n}","import { useState } from 'react';\r\n\r\nexport function useHistory(currentPath) {\r\n const initHistory = currentPath ? [ historyItem(currentPath) ] : [];\r\n const [history, setHistory] = useState(initHistory);\r\n\r\n // useEffect(() => {\r\n // console.log('use history')\r\n // });\r\n\r\n const push = (url) => {\r\n// console.log(url)\r\n const nav = historyItem(url);\r\n \r\n const same = history.length > 0 \r\n && (JSON.stringify(history[history.length - 1]) === JSON.stringify(nav))\r\n // console.log(same, history)\r\n if (!same) {\r\n setHistory([...history, nav]);\r\n }\r\n }\r\n\r\n const getLast = () => {\r\n if (history.length === 0) return null;\r\n return history[history.length - 1];\r\n }\r\n\r\n const getPreviousPath = () => {\r\n //console.log(history)\r\n if (history.length < 2) return null;\r\n return history[history.length - 2].url;\r\n }\r\n\r\n const getPrevious = () => {\r\n if (history.length === 0) return null;\r\n history.pop(); // remove the current first\r\n const item = history.pop();\r\n return item;\r\n }\r\n\r\n return { history, push, getLast, getPrevious, getPreviousPath };\r\n};\r\n\r\nfunction historyItem(url) {\r\n return { url: url};\r\n}","const initialState = {\r\n page: null,\r\n menu: null,\r\n popup: null,\r\n history: null\r\n};\r\n\r\nconst reducer = (state = initialState, action) => {\r\n //console.log('reducer', action)\r\n switch (action.type) {\r\n case 'SET_PAGE':\r\n return {\r\n ...state,\r\n page: action.payload\r\n };\r\n case 'SET_MENU':\r\n return {\r\n ...state,\r\n menu: action.payload\r\n };\r\n case 'SET_POPUP':\r\n return {\r\n ...state,\r\n popup: action.payload\r\n };\r\n case 'SET_HISTORY':\r\n return {\r\n ...state,\r\n history: action.payload\r\n };\r\n case 'SET_STATE':\r\n return {\r\n ...state,\r\n ...action.payload\r\n };\r\n default:\r\n throw new Error(\"Unexpected action\");\r\n }\r\n};\r\n\r\nexport { initialState, reducer };","import React, { createContext, useReducer, useContext, useEffect } from 'react';\r\nimport { initialState, reducer } from '../../store';\r\n\r\nconst StoreContext = createContext(initialState);\r\n\r\nconst StoreProvider = ({ children }) => {\r\n // Get state and dispatch from Reacts new API useReducer. \r\n const [state, dispatch] = useReducer(reducer, initialState);\r\n //console.log('StoreProvider')\r\n // Log new state\r\n useEffect(() => {\r\n //console.log('-- new state', state);\r\n //console.trace();\r\n }, [state]);\r\n // Render state, dispatch and special case actions\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};\r\nexport { StoreContext, StoreProvider };\r\n\r\nexport const useStore = () => useContext(StoreContext);","import utils from '../../utils';\r\n\r\nexport function handleElementLink(el, externalHandler = (url) => {\r\n if (typeof window !== `undefined`) window.location.href = url;\r\n}) {\r\n const link = utils.url.getLinkFromElement(el);\r\n const linkInfo = utils.url.getLinkInfo(link);\r\n //console.log(link, linkInfo)\r\n if (!linkInfo) return { handled: false, linkInfo: linkInfo };\r\n\r\n if (linkInfo.type === 'hash') {\r\n utils.ui.scrollTo(linkInfo.url);\r\n } else if (linkInfo.type === 'tel' || linkInfo.type === 'mailto') {\r\n\r\n } else if (linkInfo.type === 'external' && externalHandler) {\r\n // let the external handler process.\r\n externalHandler(linkInfo.url);\r\n return { handled: true, linkInfo: linkInfo };;\r\n }\r\n return { handled: false, linkInfo: linkInfo };\r\n}","import React from 'react'; \r\nimport { Link } from 'react-router-dom';\r\nimport utils from '../../utils';\r\nimport { handleElementLink } from './handleLink';\r\n\r\nexport function SiteLink(props) {\r\n const { children, to, target, onClick, ...other } = props;\r\n\r\n function goToLink(e) {\r\n //console.log(e, e.target);\r\n if (onClick) onClick(e);\r\n const processed = handleElementLink(e.target);\r\n if (processed.handled) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n }\r\n //console.log(processed)\r\n }\r\n\r\n return utils.url.isExternalLink(to) ?\r\n goToLink(e)} {...other}>{children}\r\n :\r\n goToLink(e)} {...other}>{children}\r\n ;\r\n}\r\n","const variables = {\r\n familyBase: '\"Gotham\",sans-serif',\r\n familyHeader: '\"DIN Next LT Pro\",serif',\r\n\r\n primaryColor: '#c20f2f',\r\n fontColor: '#404040',\r\n bgColor: '#ebebeb',\r\n}\r\n\r\nexport default variables;","import facepaint from 'facepaint'\r\nimport siteConfig from '../../config';\r\n\r\nconst config = siteConfig.cssEmotion\r\nconst breakpointNames = (config && config.breakpointNames) || ['sm', 'md', 'lg', 'xl', 'xxl']\r\nconst breakpoints = (config && config.breakpoints) || [576, 768, 992, 1200, 1600]\r\n\r\nconst mq = facepaint(\r\n breakpoints.map(bp => `@media (min-width: ${bp}px)`)\r\n)\r\n\r\nconst mqMin = {};\r\nbreakpointNames.forEach((bp, index) => mqMin[bp] = `@media (min-width: ${breakpoints[index]}px)`)\r\n\r\nconst mqMax = {};\r\nbreakpointNames.forEach((bp, index) => mqMax[bp] = `@media (max-width: ${breakpoints[index] - 1}px)`)\r\n//console.log(mqMin, mqMax)\r\n\r\nconst matches = (mediaQuery) => !!window.matchMedia(mediaQuery).matches\r\nconst isMin = {};\r\nbreakpointNames.forEach((bp, index) => isMin[bp] = () => matches(`(min-width: ${breakpoints[index]}px)`))\r\n\r\nconst isMax = {};\r\nbreakpointNames.forEach((bp, index) => isMax[bp] = () => matches(`(max-width: ${breakpoints[index] - 1}px)`))\r\n\r\nexport { mq, mqMin, mqMax, isMin, isMax }","export function overlay() {\r\n return {\r\n content: `''`,\r\n position: 'absolute',\r\n top:0,\r\n bottom:0,\r\n left: 0,\r\n right: 0,\r\n transition: 'all 0.5s'\r\n }\r\n}","import { css } from '@emotion/core'\r\nimport { mixin, mq } from '../../cssInJs'\r\n\r\nexport default {\r\n tiles: css(mq({\r\n marginLeft: [0, -5, null, -10],\r\n marginRight: [0, -5, null, -10],\r\n display: 'flex',\r\n justifyContent: 'center',\r\n flexWrap: 'wrap'\r\n })),\r\n tile: css(mq({\r\n flexBasis: ['50%', '33.33%', '25%', '25%', '20%', '16.66%'],\r\n padding: [0, 5, null, 10],\r\n cursor: 'pointer'\r\n })),\r\n tileImage: css({\r\n position: 'relative',\r\n display: 'block',\r\n ':after': { ...mixin.overlay() },\r\n ':hover, :focus': {\r\n ':after': {\r\n backgroundColor: 'rgba(0, 0, 0, 0.2)'\r\n }\r\n }\r\n }),\r\n tileIcon: css({\r\n position: 'absolute',\r\n top: 10,\r\n right: 10,\r\n fontSize: 30,\r\n color: 'white',\r\n zIndex: 1\r\n })\r\n}","import React from 'react';\r\n/** @jsx jsx */\r\nimport { jsx } from '@emotion/core'\r\nimport env from '../../env';\r\nimport utils from '../../utils';\r\nimport { useGet, ErrorPopup, Loading } from '../../components';\r\nimport style from './feedStyle';\r\nimport {FaRegCaretSquareRight, FaRegClone} from 'react-icons/fa';\r\n\r\nexport function InstagramFeed(props){\r\n const get = useGet();\r\n\r\n React.useEffect(() => {\r\n get.send(env.apiBase + `/api/instagram/GetInstagramFeeds`);\r\n // eslint-disable-next-line\r\n }, []);\r\n\r\n if (get.loading()) {\r\n return \r\n } else if (get.hasErrors()) {\r\n return \r\n }\r\n\r\n console.log(get)\r\n const data = get.response;\r\n if (data.length === 0) return null\r\n return (\r\n \r\n );\r\n}\r\n\r\nfunction Feeds({posts}) {\r\n const numOfTileLines = 2;\r\n const bp = utils.ui.getCurrentBreakpoint();\r\n const tilesPerLine = {xs:2, sm:3, md:4, lg:4, xl:5, xxl:6}\r\n const numOfPost = numOfTileLines * (tilesPerLine[bp] || 6);\r\n console.log(bp, numOfTileLines, numOfPost)\r\n const displayingPosts = posts.length > numOfPost ? posts.slice(0, numOfPost) : posts;\r\n\r\n return (\r\n
\r\n {displayingPosts.map((item, index) =>\r\n )}\r\n
\r\n )\r\n}\r\n\r\nfunction Feed({item}) {\r\n return (\r\n \r\n )\r\n}","import utils from '../../utils';\r\n\r\nexport function loadApi(onApiReady) {\r\n if (typeof window !== `undefined` && !window.YT) { // If not, load the script asynchronously\r\n const tag = document.createElement('script');\r\n tag.src = 'https://www.youtube.com/iframe_api';\r\n\r\n // onYouTubeIframeAPIReady will load the video after the script is loaded\r\n window.onYouTubeIframeAPIReady = () => onApiReady(true);\r\n\r\n const firstScriptTag = document.getElementsByTagName('script')[0];\r\n firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);\r\n } else { // If script is already there, load the video directly\r\n onApiReady(false);\r\n }\r\n}\r\n\r\n// export function player(playerId, videoId, playerVars = {}, events = {}) {\r\n// //let player = null;\r\n// const defaultPlayerVars = {\r\n// 'autoplay': 1,\r\n// 'controls': 0,\r\n// 'loop': 1,\r\n// 'showinfo': 0,\r\n// 'rel': 0,\r\n// 'modestbranding': 1,\r\n// 'origin': window.location.origin,\r\n// 'allowfullscreen': true,\r\n// 'wmode': 'transparent'\r\n// }\r\n// const defaultEvents = {\r\n// 'onStateChange': (e) => { },\r\n// 'onReady': (e) => { console.log('onReady'); player.mute() },\r\n// 'onError': (e) => { console.log(e) }\r\n// }\r\n\r\n// const player = new window.YT.Player(playerId, {\r\n// videoId: videoId,\r\n// playerVars: Object.assign({}, defaultPlayerVars, playerVars),\r\n// events: Object.assign({}, defaultEvents, events),\r\n// });\r\n// return player;\r\n// }\r\n\r\nexport function thumbnailMax(videoId){\r\n return `https://img.youtube.com/vi/${videoId}/maxresdefault.jpg`\r\n}\r\n\r\n// onPlayerStateChange(event){\r\n// switch (event.data){\r\n// case window['YT'].PlayerState.PLAYING:\r\n// //console.log('Playing');\r\n// //this.player.mute();\r\n// break;\r\n// case window['YT'].PlayerState.PAUSED:\r\n// //console.log('Pafdsu');\r\n// break;\r\n// case window['YT'].PlayerState.ENDED:\r\n// //console.log('ended ');\r\n// //this.player.playVideo();\r\n// this.player.stopVideo();\r\n// break;\r\n// }\r\n// }\r\n\r\n// toggleBannerYoutueInCMS(toggleItem:string){ \r\n// if(toggleItem == 'youtube'){\r\n// //location.reload();\r\n// this.toggleBannerOrYoutube = toggleItem;\r\n// this.player.playVideo();\r\n// this.init();\r\n// }\r\n// else{\r\n// this.toggleBannerOrYoutube = toggleItem;\r\n// this.player.stopVideo();\r\n// }\r\n// }\r\n\r\n\r\nexport function getYoutubeCode(src) {\r\n // if (src.indexOf('http') >= 0) {\r\n // if (src.indexOf('v=') >= 0) {\r\n // return src.split('v=')[1];\r\n // }\r\n // }\r\n // return src;\r\n return utils.url.getYoutubeId(src);\r\n}","import React from 'react';\r\nimport utils from '../../utils';\r\nimport * as yt from './iframeApi';\r\n\r\nexport function YoutubeEmbed({ url, title }) {\r\n const videoId = yt.getYoutubeCode(url);\r\n //const posterImageUrl = yt.thumbnailMax(videoId);\r\n\r\n const playerVars = {\r\n 'enablejsapi': 1,\r\n //'autoplay': 1,\r\n 'controls': 1,\r\n 'loop': 0,\r\n 'showinfo': 0,\r\n 'rel': 0,\r\n 'modestbranding': 1,\r\n //'origin': typeof window !== `undefined` && window.location.origin,\r\n 'allowfullscreen': true,\r\n 'wmode': 'transparent'\r\n }\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n}\r\n","import React, { useLayoutEffect, useState, useRef } from 'react';\r\nimport utils from 'utils';\r\n//import * as yt from './iframeApi';\r\nimport * as yt from '../../lib/youtube/iframeApi';\r\n\r\nexport function YoutubeBanner(props) {\r\n console.log(\"props\", props);\r\n const [playerStatus, SetPlayerStatus] = useState('loading');\r\n const [playerSize] = useState(getSize());\r\n const { heightSet, videoLinkOrId, playerId } = props.video;\r\n const videoId = yt.getYoutubeCode(videoLinkOrId);\r\n const posterImageUrl = yt.thumbnailMax(videoId);\r\n const ele = useRef(null);\r\n const [marginTop, setMarginTop] = useState(\"\");\r\n let countPlayed = 0;\r\n \r\n const wResize = () => {\r\n let height = ele.current.clientHeight;\r\n let _marginTop = \"-\" + (((height / 2) /2) -80) + \"px\";\r\n setMarginTop(_marginTop);\r\n };\r\n \r\n const playerVars = {\r\n 'enablejsapi': 1,\r\n //'autoplay': 1,\r\n 'controls': 0,\r\n 'loop': 1,\r\n 'showinfo': 0,\r\n 'rel': 0,\r\n 'modestbranding': 1,\r\n 'origin': window.location.origin,\r\n 'allowfullscreen': true,\r\n 'wmode': 'transparent'\r\n }\r\n //const canPlayVideo = () => window.innerWidth >= 1200\r\n const canPlayVideo = () => window.innerWidth >= 800\r\n useLayoutEffect(() => {\r\n let player = null;\r\n if (canPlayVideo()) {\r\n yt.loadApi(() => {\r\n player = new window.YT.Player(playerId, {\r\n events: {\r\n 'onStateChange': (e) => {\r\n switch (e.data) {\r\n // case window.YT.PlayerState.PLAYING:\r\n // break;\r\n // case window.YT.PlayerState.PAUSED:\r\n // break;\r\n case window.YT.PlayerState.ENDED:\r\n //console.log('ended', countPlayed);\r\n if (++countPlayed < 3) {\r\n player.playVideo();\r\n } else {\r\n SetPlayerStatus('finished');\r\n }\r\n break;\r\n default:\r\n }\r\n },\r\n 'onReady': (e) => {\r\n //console.log('onReady');\r\n player.mute();\r\n player.playVideo();\r\n setTimeout(() => SetPlayerStatus('loaded'), 1000)\r\n },\r\n 'onError': (e) => { console.log(e) }\r\n }\r\n });\r\n })\r\n \r\n }\r\n \r\n if(heightSet === \"standard\"){\r\n wResize();\r\n window.addEventListener('resize', wResize);\r\n }\r\n return () => {\r\n if(heightSet === \"standard\"){\r\n window.removeEventListener('resize', wResize);\r\n }\r\n }\r\n \r\n // eslint-disable-next-line\r\n }, []);\r\n \r\n return (\r\n
\r\n
\r\n
\r\n {canPlayVideo && }\r\n
\r\n );\r\n }\r\n \r\n function getSize() {\r\n const overSize = 1;\r\n const rate = 9 / 16;\r\n const w = window.innerWidth * overSize;\r\n const h = window.innerHeight * overSize;\r\n const size = { width: w, height: w * rate, left: 0, top: 0 };\r\n if (size.height < h) {\r\n // stretch horizontally\r\n size.height = h;\r\n size.width = h / rate;\r\n }\r\n \r\n size.left = -(size.width - window.innerWidth) / 2;\r\n size.top = -(size.height - window.innerHeight) / 2;\r\n return size;\r\n }","function payload(item, key, defaultVal = '') {\r\n const found = item.payloads.find(x => x.key === key);\r\n return found ? found.value : defaultVal;\r\n}\r\n\r\nexport default { payload };","import React from 'react';\r\nimport { Item } from 'cms/items/item';\r\nimport cmsUtils from 'cms/utils/cmsUtils';\r\nimport utils from 'utils';\r\nimport Slider from \"react-slick\";\r\n\r\nexport function BannerPanel(props) {\r\n const item = props.item;\r\n const subItems = item.items || [];\r\n const cmsOption = props.cmsOption || {};\r\n\r\n //console.log('item', item, subItems);\r\n\r\n const heightSet = cmsUtils.payload(item, 'HeightSet') || 'standard';\r\n\r\n const slides = subItems.map((subItem, index) =>\r\n \r\n );\r\n\r\n var settings = {\r\n dots: false,\r\n infinite: true,\r\n speed: 1500,\r\n autoplaySpeed: 3000,\r\n fade: true,\r\n autoplay: true,\r\n slidesToShow: 1,\r\n slidesToScroll: 1\r\n };\r\n\r\n const cssClass = utils.classNames('cms_item', 'bannerPanel', `bannerWrapperSize--${heightSet}`, item.cssClass || item.anchorName || '');\r\n\r\n return (\r\n
\r\n \r\n {slides}\r\n \r\n
\r\n );\r\n}","import React from 'react';\r\nimport cmsUtils from 'cms/utils/cmsUtils';\r\nimport utils from 'utils';\r\nimport { SiteLink } from 'components';\r\n\r\nexport function BannerItem(props) {\r\n const item = props.item;\r\n const cmsOption = props.cmsOption || {};\r\n\r\n //console.log('item', item);\r\n\r\n const cssClass = utils.classNames('cms_item', 'banner-item', 'bannerSize', item.cssClass || item.anchorName || '');\r\n const bgUrl = utils.site.resourcePath(cmsUtils.payload(item, 'ImageUrl'));\r\n\r\n const captionTitle = cmsUtils.payload(item, 'CaptionTitle2') || cmsUtils.payload(item, 'CaptionTitle');\r\n const linkUrl = cmsUtils.payload(item, 'LinkUrl2') || cmsUtils.payload(item, 'LinkUrl');\r\n\r\n //console.log('item', bgUrl);\r\n // const titlePanel = captionTitle ? (\r\n // linkUrl ? (\r\n // \r\n //
\r\n //
) :\r\n // (\r\n //
\r\n // )\r\n // ) : null;\r\n \r\n const titlePanel = captionTitle ? (\r\n
\r\n ) : null;\r\n \r\n return (\r\n linkUrl ? (\r\n \r\n
\r\n {titlePanel &&
{titlePanel}
}\r\n
\r\n
\r\n ) : \r\n
\r\n {titlePanel &&
{titlePanel}
}\r\n
\r\n );\r\n}","import React from 'react';\r\nimport cmsUtils from 'cms/utils/cmsUtils';\r\nimport { Item } from 'cms/items/item';\r\nimport utils from 'utils';\r\n\r\nexport function Panel(props) {\r\n const item = props.item;\r\n const subItems = item.items || [];\r\n const cmsOption = props.cmsOption || {};\r\n\r\n //console.log('item', item, subItems);\r\n \r\n const bgColor = cmsUtils.payload(item, 'BgColor');\r\n //const textColorTheme = cmsUtils.payload(item, 'TextColorTheme');\r\n const imageUrl = cmsUtils.payload(item, 'ImageUrl');\r\n const backgroundTile = cmsUtils.payload(item, 'BackgroundTile');\r\n const bgTheme = cmsUtils.payload(item, 'TextColorTheme') || 'white';\r\n //console.log(bgTheme)\r\n\r\n\r\n let bgUrl = null;\r\n if (imageUrl)\r\n bgUrl = utils.site.resourcePath(imageUrl);\r\n else if (backgroundTile)\r\n bgUrl = utils.site.resourcePath(`/dist/transparent-textures/textures/${backgroundTile}`);\r\n\r\n const cssClass = utils.classNames('cms_item', 'contentPanel', 'contentPanel--' + bgTheme, item.cssClass || item.anchorName || '');\r\n\r\n const subItemsElts = subItems.map((subItem, index) =>\r\n \r\n );\r\n\r\n return (\r\n
\r\n {/*
*/}\r\n
\r\n {subItemsElts}\r\n
\r\n
\r\n );\r\n}\r\n","import React, { useLayoutEffect, useRef } from 'react';\r\nimport cmsUtils from 'cms/utils/cmsUtils';\r\nimport utils from 'utils';\r\nimport { useRouter } from 'components';\r\nimport { handleElementLink } from 'components';\r\nimport env from 'env';\r\n\r\nexport function Html(props) {\r\n const ver = env.ver;\r\n const item = props.item;\r\n //const subItems = item.items || [];\r\n const cmsOption = props.cmsOption || {};\r\n const { history } = useRouter();\r\n //console.log('item', item, cmsOption);\r\n\r\n let content = cmsOption.isCmsEdit? \r\n cmsUtils.payload(item, 'Content'): \r\n cmsUtils.payload(item, 'Content').replace(\"__version__\", \" PWA \"+ ver +\"\");\r\n\r\n if (!cmsOption.isCmsEdit){\r\n //console.log(content)\r\n if (utils.site.isNZ){\r\n content = content.replace(/{\"price\":\"B9000RA\"}/g, 'RRP: NZ $499.99').replace(/{"price":"B9000RA"}/g, 'RRP: NZ $499.99')\r\n } else {\r\n content = content.replace(/{\"price\":\"B9000RA\"}/g, 'RRP: AU $429.95').replace(/{"price":"B9000RA"}/g, 'RRP: AU $429.95')\r\n }\r\n }\r\n const cssClass = utils.classNames('cms_item', 'htmlPanel', cmsOption.isCmsEdit && 'html', item.cssClass || item.anchorName || '');\r\n\r\n //let itemElt = (
);\r\n\r\n function handleClick(e) { \r\n \r\n let target = \"\";\r\n if(e.target.closest('a')){\r\n target = e.target.closest('a').getAttribute('target');\r\n }\r\n const processed = target === \"_blank\" ? handleElementLink(e.target, null) : handleElementLink(e.target);\r\n //const link = utils.url.getLinkFromElement(e.target);\r\n\r\n if(target === \"_blank\"){\r\n processed.linkInfo.type = 'external';\r\n }\r\n\r\n if (processed.handled) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n } else if (processed.linkInfo && processed.linkInfo.type === 'internal') {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n history.push(processed.linkInfo.url)\r\n } else {\r\n // e.preventDefault();\r\n // e.stopPropagation();\r\n // setPdfViewPath(utils.site.resourcePath(link))\r\n }\r\n }\r\n\r\n const htmlBlock = useRef(null);\r\n // function iframeSizer() {\r\n // //console.log('iframesizer')\r\n // let iframesContainer = htmlBlock.current.querySelectorAll('iframe.youtube, .ytvideo iframe');\r\n // //console.log('iframesizer', iframesContainer)\r\n // if (iframesContainer && iframesContainer.length) {\r\n // iframesContainer.forEach(element => {\r\n // let height = (element.parentElement.offsetWidth * 9) / 16\r\n // //console.log(height, element.parentElement.offsetWidth)\r\n // element.style.height = height + 'px';\r\n // });\r\n // }\r\n // }\r\n\r\n useLayoutEffect(() => {\r\n const buttons = htmlBlock.current.querySelectorAll('.button');\r\n for (let i = 0; buttons && i < buttons.length; i++) {\r\n restructureButton(buttons[i])\r\n }\r\n\r\n // const youtubes = htmlBlock.current.querySelectorAll('iframe[src*=\"youtube\"]');\r\n // console.log(youtubes)\r\n\r\n // iframeSizer();\r\n // window.addEventListener('resize', iframeSizer)\r\n // return (): void => {\r\n // window.removeEventListener('resize', iframeSizer)\r\n // }\r\n\r\n }, [])\r\n\r\n return (\r\n
handleClick(e)}>
\r\n )\r\n}\r\n\r\n\r\nfunction restructureButton(el) {\r\n if (!el.querySelector('span')) {\r\n const span = document.createElement('span');\r\n span.innerHTML = el.innerHTML;\r\n el.innerHTML = '';\r\n el.appendChild(span);\r\n }\r\n}","import React, { useRef } from 'react';\r\nimport cmsUtils from 'cms/utils/cmsUtils';\r\nimport utils from 'utils';\r\n//import Html from 'cms/items/html/view';\r\n\r\nexport function ImagePanel(props) {\r\n const item = props.item;\r\n const cmsOption = props.cmsOption || {};\r\n\r\n //console.log('item', item);\r\n const heightSet = cmsUtils.payload(item, 'HeightSet') || 'standard';\r\n \r\n const cssClass = utils.classNames('cms_item', 'imagePanel', 'parallax', `bannerSize--${heightSet}`, item.cssClass || item.anchorName || '');\r\n const bgUrl = utils.site.resourcePath(cmsUtils.payload(item, 'ImageUrl'));\r\n\r\n const htmlBlock = useRef(null);\r\n const cssClass2 = utils.classNames('cms_item', 'htmlPanel', cmsOption.isCmsEdit && 'html', item.cssClass || item.anchorName || '');\r\n const content = cmsUtils.payload(item, 'Content');\r\n\r\n return (\r\n \r\n //data-cms-item-id={cmsOption.isCmsEdit && item.itemId} id={item.anchorName}\r\n
\r\n \r\n
\r\n
\r\n\r\n
\r\n );\r\n\r\n\r\n}","//import { css, keyframes } from '@emotion/core'\r\n//import { variables, mq } from 'cssInJs'\r\n\r\nimport { css } from '@emotion/core'\r\nimport { mq } from 'cssInJs'\r\n\r\n\r\nexport default {\r\n \r\n pageTiles : css(mq({\r\n display: 'flex',\r\n justifyContent: ['center', 'center', 'flex-start'],\r\n //maxWidth : ['unset', '75%', '100%', '90%', 'unset'],\r\n flexWrap: 'wrap',\r\n margin: '2rem -10px',\r\n //border: '1px solid red'\r\n })), \r\n // pageTiles : css({\r\n // display: 'flex',\r\n // justifyContent: 'center',\r\n // flexWrap: 'wrap',\r\n // margin: '2rem -10px'\r\n // }),\r\n pageTile__tile : css(mq({\r\n flexBasis: ['100%', '100%', '47%', '47%', '31.33%'],\r\n maxWidth : ['100%', '80%', '100%', '40%', '100%'],\r\n //maxWidth : '100%',\r\n position: 'relative',\r\n overflow : 'hidden',\r\n //border: '1px solid red',\r\n margin : '10px'\r\n })),\r\n\r\n tile__content : css({\r\n display : 'block',\r\n overflow : 'hidden',\r\n '&:hover' : {\r\n textDecoration: 'none',\r\n // '& .pageTile__bsyc__content__details' : {\r\n // backgroundColor : '#429b57'\r\n // }\r\n '& .pageTile__adore__bg' : {\r\n //backgroundColor : '#429b57'\r\n transform: 'scale(1.05)'\r\n }\r\n }\r\n }),\r\n\r\n tile__bg : css(mq({\r\n height: '0',\r\n paddingTop: '95%',\r\n backgroundPosition: '50%',\r\n backgroundRepeat: 'no-repeat',\r\n backgroundSize: 'cover',\r\n transition: '.5s'\r\n //flex: '1 1 300px',\r\n })),\r\n\r\n tile__details : css({\r\n backgroundColor : 'white',\r\n position: 'absolute',\r\n top: '50%',\r\n left: '50%',\r\n transform: 'translate(-50%, -50%)',\r\n width : '70%',\r\n padding : '1.5rem 1rem',\r\n minHeight: '50%',\r\n color : '#333333'\r\n }),\r\n\r\n tile__details__title : css({\r\n marginBottom : '1rem',\r\n fontWeight: '700',\r\n fontSize : '1.3rem',\r\n color : '#0071bc'\r\n }),\r\n tile__details__desc : css(mq({\r\n fontSize : ['16px', '18px']\r\n }))\r\n\r\n}","import cmsUtils from 'cms/utils/cmsUtils';\r\nimport utils from 'utils';\r\nimport { SiteLink } from 'components';\r\n\r\n/** @jsx jsx */\r\nimport { jsx } from '@emotion/core'\r\nimport style from './style';\r\n\r\nfunction getPages(pagesSerialized) {\r\n if (pagesSerialized) {\r\n return JSON.parse(pagesSerialized);\r\n }\r\n return [];\r\n}\r\n \r\nfunction Tile(props) {\r\n \r\n const page = props.page;\r\n const imageUrl = utils.site.resourcePath(page.imageUrl);\r\n const disableLink = props.disableLink;\r\n\r\n return (\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n {page.pageTitle}\r\n
\r\n
\r\n {page.tileDesc || page.description}\r\n
\r\n
\r\n\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport function PageTileAdore(props){\r\n const item = props.item;\r\n const cmsOption = props.cmsOption || {};\r\n const pages = getPages(cmsUtils.payload(item, 'PageObjects'))\r\n const pageTileElts = pages.map((page, index) =>\r\n \r\n );\r\n\r\n const cssClass = utils.classNames('cms_item', 'pageTiles__adore', item.cssClass || item.anchorName || '');\r\n\r\n return (\r\n
\r\n {pageTileElts}\r\n
\r\n );\r\n\r\n}","import React from 'react';\r\nimport cmsUtils from 'cms/utils/cmsUtils';\r\nimport utils from 'utils';\r\nimport { SiteLink } from 'components';\r\n\r\nexport function SingleBanner(props) {\r\n const item = props.item;\r\n const cmsOption = props.cmsOption || {};\r\n\r\n //console.log('item', item);\r\n const heightSet = cmsUtils.payload(item, 'HeightSet') || 'standard';\r\n\r\n const cssClass = utils.classNames('cms_item', 'single-banner', 'banner-item', `bannerSize--${heightSet}`, item.cssClass || item.anchorName || '');\r\n const bgUrl = utils.site.resourcePath(cmsUtils.payload(item, 'ImageUrl'));\r\n\r\n const captionTitle = cmsUtils.payload(item, 'CaptionTitle2') || cmsUtils.payload(item, 'CaptionTitle');\r\n const linkUrl = cmsUtils.payload(item, 'LinkUrl2') || cmsUtils.payload(item, 'LinkUrl');\r\n\r\n const titlePanel = captionTitle ? (\r\n linkUrl ? (\r\n
\r\n
) : (
)\r\n ) : null;\r\n\r\n return (\r\n
\r\n {titlePanel &&
{titlePanel}
}\r\n
\r\n );\r\n\r\n\r\n}\r\n","export function findControl(controlNameOrIndex, root) {\r\n if (typeof controlNameOrIndex === 'number' && root && root.controls.length > controlNameOrIndex) return root.controls[controlNameOrIndex];\r\n return findControlTraverse(controlNameOrIndex, root);\r\n}\r\n\r\nfunction findControlTraverse(controlName, control) {\r\n if (!control) return null;\r\n if (control.name === controlName) return control;\r\n if (control.controls && control.controls.length > 0) {\r\n for (let i = 0; i < control.controls.length; i++) {\r\n const found = findControlTraverse(controlName, control.controls[i]);\r\n if (found) {\r\n return found;\r\n }\r\n }\r\n }\r\n return null;\r\n}\r\n\r\nexport function findControlById(id, root) {\r\n return findControlByIdTraverse(id, root);\r\n}\r\n\r\nfunction findControlByIdTraverse(id, control) {\r\n if (!control) return null;\r\n if (control.id === id) return control;\r\n if (control.controls && control.controls.length > 0) {\r\n for (let i = 0; i < control.controls.length; i++) {\r\n const found = findControlByIdTraverse(id, control.controls[i]);\r\n if (found) {\r\n return found;\r\n }\r\n }\r\n }\r\n return null;\r\n}\r\n\r\nexport function getValue(root) {\r\n //console.log(root)\r\n return getValueTraverse(root);\r\n}\r\n\r\nconst helperFns = {\r\n getValueTraverse: getValueTraverse,\r\n getFilesTraverse: getFilesTraverse\r\n}\r\n\r\nfunction getKeyValueTraverse(control) {\r\n let keyValue = {};\r\n keyValue[control.name] = getValueTraverse(control);\r\n return keyValue\r\n}\r\n\r\nfunction getValueTraverse(control) {\r\n //console.log(control);\r\n if (control.controlType === 'control') {\r\n if (control.customValueFn)\r\n return control.customValueFn(control, helperFns);\r\n\r\n return control.value;\r\n } else if (control.controlType === 'group') {\r\n if (control.customValueFn)\r\n return control.customValueFn(control, helperFns);\r\n\r\n let value = {};\r\n for (let i = 0; i < control.controls.length; i++) {\r\n value = { ...value, ...getKeyValueTraverse(control.controls[i]) };\r\n }\r\n return value;\r\n } else if (control.controlType === 'array') {\r\n if (control.customValueFn)\r\n return control.customValueFn(control, helperFns);\r\n\r\n const array = [];\r\n for (let i = 0; i < control.controls.length; i++) {\r\n array.push(getValueTraverse(control.controls[i]))\r\n }\r\n return array;\r\n }\r\n return null;\r\n}\r\n\r\nexport function getFiles(root) {\r\n //console.log(root)\r\n return getFilesTraverse(root);\r\n}\r\n\r\nfunction getFilesTraverse(control) {\r\n if (control.controlType === 'control') {\r\n return control.files ? [{ name: control.name, files: control.files }] : [];\r\n } else if (control.controlType === 'group') {\r\n let files = [];\r\n for (let i = 0; i < control.controls.length; i++) {\r\n files.push(...getFilesTraverse(control.controls[i]));\r\n }\r\n return files;\r\n } else if (control.controlType === 'array') {\r\n let files = [];\r\n for (let i = 0; i < control.controls.length; i++) {\r\n files.push(...getFilesTraverse(control.controls[i]));\r\n }\r\n return files;\r\n }\r\n return [];\r\n}","//import uuid from 'uuid/v4';\r\nimport shortid from 'shortid';\r\nimport * as formModelHelper from './formModelHelper';\r\n\r\n//#region helpers\r\nfunction findIndexById(id) {\r\n for (let i = 0; i < this.controls.length; i++) {\r\n if (this.controls[i].id === id) return i;\r\n }\r\n return -1;\r\n}\r\n//#endregion\r\n\r\nconst group = (controls) => {\r\n const controlArray = [];\r\n //console.log('group', controls, typeof controls);\r\n if (controls && typeof controls === 'object') {\r\n Object.keys(controls).forEach(key => {\r\n controlArray.push(abstractControl(key, controls[key]))\r\n })\r\n }\r\n\r\n const ctrl = {\r\n controlType: 'group',\r\n id: shortid(),\r\n controls: controlArray,\r\n find: (name) => controlArray.find((x) => x.name === name),\r\n customValueFn: null, // function\r\n disableValidators: false\r\n }\r\n ctrl.getValue = () => formModelHelper.getValue(ctrl)\r\n ctrl.controls.forEach(x => x.parent = ctrl)\r\n\r\n return ctrl\r\n}\r\n\r\nconst array = (controls) => {\r\n //console.log('array', controls);\r\n const ctrl = {\r\n controlType: 'array',\r\n id: shortid(),\r\n controls: controls,\r\n findIndexById: findIndexById\r\n }\r\n ctrl.getValue = () => formModelHelper.getValue(ctrl)\r\n ctrl.controls.forEach(x => x.parent = ctrl)\r\n\r\n return ctrl\r\n}\r\n\r\nconst abstractControl = (name, controlObject) => {\r\n //console.log('abstractControl', name, controlObject);\r\n if (!controlObject) return null;\r\n // array or group\r\n if (controlObject.controlType) {\r\n controlObject.name = name;\r\n return controlObject;\r\n } else {\r\n return control(name, controlObject)\r\n }\r\n}\r\n\r\nconst control = (name, [value, validators, controlOptions]) => {\r\n //const { label, type, options, style } = controlOptions || {};\r\n //console.log(value, validators, label, type, options)\r\n return {...{\r\n controlType: 'control',\r\n id: shortid(),\r\n name: name,\r\n value: value,\r\n validators: validators,\r\n touched: false,\r\n incomplete: false,\r\n findValidator: (type) => (validators || []).find((x) => x.type === type),\r\n // label: label,\r\n // type: type,\r\n // options: options,\r\n // style: style\r\n }, ...controlOptions};\r\n}\r\n\r\nexport default { group, array }","import utils from '../../utils';\r\n\r\nexport function hasRequiredValidator(control) {\r\n if (!control) return false;\r\n return !!control.findValidator('required')\r\n}\r\n\r\nexport function getNameForValidator(label, name) {\r\n return utils.text.toFieldName(label || name);\r\n}\r\n\r\nexport function getValidatorOptions(params) {\r\n const defaultOpt = { continueToValidate: false }\r\n return params ? { ...defaultOpt, ...params } : defaultOpt;\r\n}\r\n\r\nexport function createValidator(type, message, opt, validate) {\r\n const validator =\r\n {\r\n type: type,\r\n disabled: false,\r\n ...getValidatorOptions(opt),\r\n message: message,\r\n validate: validate\r\n }\r\n return validator;\r\n}","import { createValidator, getNameForValidator } from '../validatorHelper';\r\n\r\nexport function Required(message = null, opt = null) {\r\n return createValidator('required', message, opt, function(control, e, validateOpt) {\r\n if (validateOpt.triggeredByChange && control.incomplete) return null;\r\n return isEmpty(control.value) ? (message || (getNameForValidator(control.label, control.name) + ' is required.')) : null\r\n })\r\n}\r\n\r\nfunction isEmpty(val) {\r\n if (Array.isArray(val))\r\n return val.length === 0;\r\n return !val && val !== 0;\r\n}\r\n","import { createValidator, getNameForValidator } from '../validatorHelper';\r\n\r\nexport function Email(message = null, opt = null) {\r\n return createValidator('email', message, opt, function(control, e, validateOpt) {\r\n if (validateOpt.triggeredByChange && control.incomplete) return null;\r\n // only validate for blur keydown tab\r\n if (e && e.type === 'change') return null;\r\n return !isEmpty(control.value) && !isValidEmail(control.value) ? (message || (getNameForValidator(control.label, control.name) + ' - Invalid email.')) : null\r\n })\r\n}\r\n\r\n\r\nexport const isValidEmail = mail => {\r\n const regex = /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\r\n return regex.test(mail);\r\n}\r\n\r\nfunction isEmpty(val) {\r\n if (Array.isArray(val))\r\n return val.length === 0;\r\n return !val && val !== 0;\r\n}\r\n","import { createValidator, getNameForValidator } from '../validatorHelper';\r\nimport utils from '../../../utils';\r\n\r\nexport function ValidateDate(message = null, opt = null) {\r\n return createValidator('date', message, opt, function(control, e, validateOpt) {\r\n if (validateOpt.triggeredByChange && control.incomplete) return null;\r\n return !isDate(control.value) ? (message || (getNameForValidator(control.label, control.name) + ' is invalid.')) : null\r\n })\r\n}\r\n\r\nexport function PastDate(message = null, opt = null) {\r\n return createValidator('past-date', message, opt, function(control, e, validateOpt) {\r\n if (validateOpt.triggeredByChange && control.incomplete) return null;\r\n return !isPast(control.value) ? (message || (getNameForValidator(control.label, control.name) + ' is invalid.')) : null\r\n })\r\n}\r\n\r\nfunction isDate(val) {\r\n if (val) {\r\n const date = utils.date.toDate(val);\r\n return !!date;\r\n }\r\n return false\r\n}\r\n\r\nfunction isPast(val) {\r\n if (val) {\r\n const date = utils.date.toDate(val);\r\n //console.log(date, typeof date)\r\n if (date){\r\n const now = new Date();\r\n return date.getTime() < now.getTime();\r\n }\r\n }\r\n return false\r\n}\r\n","import { createValidator, getNameForValidator } from '../validatorHelper';\r\n\r\nexport function Length(message = null, opt = null) {\r\n return createValidator('email', message, opt, function(control, e, validateOpt, validator) {\r\n if (validateOpt.triggeredByChange && control.incomplete) return null;\r\n return !isValidLength(control.value, validator) ? (message || (getNameForValidator(control.label, control.name) + ' - Invalid length.')) : null\r\n })\r\n}\r\n\r\n\r\nexport const isValidLength = (text, validator) => {\r\n const length = (text || '').length;\r\n if (validator.min && length < validator.min) return false;\r\n if (validator.max && length > validator.max) return false;\r\n return true;\r\n}\r\n","import { Required } from './validators/required';\r\nimport { Email } from './validators/email';\r\nimport { ValidateDate, PastDate } from './validators/date';\r\nimport { Length } from './validators/length';\r\n\r\nconst validateControl = (control, e, validateOpt) => {\r\n const errors = [];\r\n const validators = control.validators || [];\r\n for (let i = 0; i < validators.length; i++) {\r\n const validator = validators[i];\r\n if (!validator.disabled) {\r\n const error = validator.validate && validator.validate(control, e, validateOpt, validator);\r\n if (error) {\r\n errors.push(error);\r\n //console.log(error, control, validator, e)\r\n\r\n if (!validator.continueToValidate) break;\r\n }\r\n }\r\n }\r\n control.errors = errors;\r\n return errors;\r\n}\r\n\r\nexport default {\r\n Required, Email, Date: ValidateDate, PastDate, Length, validateControl\r\n}","import utils from '../../utils';\r\nimport React from 'react';\r\nimport { hasRequiredValidator } from './validatorHelper';\r\n\r\nexport function getLabel(control, formOption) {\r\n //console.log(label, label == null, label === null, name, label || name)\r\n const { label, name } = control\r\n const requiredMark = hasRequiredValidator(control) && (formOption.requiredMark || '*')\r\n if (label === null) return \"\";\r\n return <>\r\n {label || utils.text.toFieldName(name)}\r\n {requiredMark && {requiredMark}}\r\n ;\r\n}\r\n\r\nexport function getLabelAsString(control, formOption) {\r\n //console.log(label, label == null, label === null, name, label || name)\r\n const { label, name } = control\r\n const requiredMark = hasRequiredValidator(control) && (formOption.requiredMark || '*')\r\n if (label === null) return \"\";\r\n \r\n return (label || utils.text.toFieldName(name)) + (requiredMark ? requiredMark : '');\r\n}","import React from 'react';\r\n\r\nconst ValidationAlert = ({ errors }) => {\r\n if (!errors || errors.length === 0) return null;\r\n return
') }}>
\r\n}\r\n\r\nexport default ValidationAlert;","import * as React from 'react';\r\nimport ValidationAlert from '../components/ValidationAlert';\r\nimport utils from '../../../utils';\r\nimport { getLabel, getLabelAsString } from '../formRenderHelper';\r\n\r\nfunction TextInput({ control, handleChange, formOption }) {\r\n const { name, label, type, value, errors, style, helpText, attrs } = control;\r\n //const { template = 'bootstrap', usePlaceholder = false } = formOption;\r\n const fieldId = utils.random.shortId();\r\n const { usePlaceholder = false } = formOption;\r\n const fieldLabel = getLabel(control, formOption);\r\n //console.log(control, formOption)\r\n const placeHolder = usePlaceholder ? getLabelAsString(control, formOption) : null;\r\n let valueStr = value === 0 ? 0 : (value || \"\");\r\n if (type === 'date' && value) {\r\n valueStr = utils.date.formatYYYYMMDD(value);\r\n }\r\n\r\n let prependText = null;\r\n if (style && style.prependText) {\r\n prependText = style.prependText\r\n }\r\n //console.log(name, !!(style && style.autoFocus))\r\n //const autoFocus = !!(style && style.autoFocus)\r\n\r\n function keyDown(e) {\r\n //console.log(e.key)\r\n if (e.key === \"Enter\" || e.key === 'Tab') {\r\n handleChange(e, control)\r\n }\r\n }\r\n function changed(e) {\r\n //console.log('changed', name, e.target.value)\r\n handleChange(e, control)\r\n }\r\n function blur(e) {\r\n //console.log('blur', name, e.target.value)\r\n handleChange(e, control)\r\n }\r\n\r\n // function focus(e) {\r\n // console.log('focus', name, e.target.value)\r\n // }\r\n\r\n return (\r\n
\r\n {!usePlaceholder && fieldLabel && }\r\n
\r\n {prependText &&
\r\n
{prependText}
\r\n
\r\n }\r\n\r\n handleChange(e, control)} \r\n // onBlur={(e) => handleChange(e, control, true)}\r\n onChange={changed}\r\n onKeyDown={keyDown}\r\n onBlur={blur}\r\n //onFocus={focus}\r\n //autoFocus={autoFocus}\r\n placeholder={placeHolder}\r\n className={\"form-control\" + (errors && errors.length > 0 ? ' is-invalid' : '')} {...attrs} />\r\n
\r\n {helpText &&
}\r\n \r\n
\r\n )\r\n}\r\n\r\nexport default TextInput;","import React from 'react';\r\nimport ValidationAlert from '../components/ValidationAlert';\r\nimport utils from '../../../utils';\r\nimport { getLabel } from '../formRenderHelper';\r\n\r\nfunction RadioListInput({ control, handleChange, formOption }) {\r\n const { name, label, value, errors, style, options, helpText, attrs } = control;\r\n const fieldId = utils.random.shortId();\r\n const fieldLabel = getLabel(control, formOption);\r\n return (\r\n
\r\n {fieldLabel && }\r\n
\r\n {options && options.map((option, index) =>\r\n
\r\n handleChange(e, control)}\r\n value={option.value} id={fieldId + '_' + index} {...attrs} />\r\n \r\n
)}\r\n
\r\n {helpText &&
}\r\n \r\n
\r\n )\r\n}\r\n\r\nfunction checked(value, optionValue) {\r\n if (optionValue === null || typeof optionValue === 'undefined') return false;\r\n return value === optionValue;\r\n}\r\n\r\nexport default RadioListInput;","import React from 'react';\r\nimport ValidationAlert from '../components/ValidationAlert';\r\nimport utils from '../../../utils';\r\nimport { getLabel } from '../formRenderHelper';\r\n\r\nconst CheckboxListInput = ({ control, handleChange, formOption }) => {\r\n const { name, label, value, errors, style, options, helpText, attrs } = control;\r\n const fieldId = utils.random.shortId();\r\n const fieldLabel = getLabel(control, formOption);\r\n const values = value ? [...value] : [];\r\n return (\r\n
\r\n {fieldLabel && }\r\n
\r\n
\r\n {options && options.map((option, index) =>\r\n
\r\n handleChange(e, control)}\r\n value={option.value} id={fieldId + '_' + index} {...attrs}/>\r\n \r\n
)}\r\n\r\n
\r\n
\r\n {helpText &&
}\r\n \r\n
\r\n )\r\n}\r\n\r\nfunction checked(values, value) {\r\n if (value === null || typeof value === 'undefined') return false;\r\n return values.includes(value);\r\n}\r\n\r\nexport default CheckboxListInput;","import * as React from 'react';\r\nimport ValidationAlert from '../components/ValidationAlert';\r\nimport utils from '../../../utils';\r\nimport { getLabel } from '../formRenderHelper';\r\n\r\nfunction DateSeparateInput({ control, handleChange, formOption }) {\r\n //const { name, label, value, errors, style } = control;\r\n const { name, label, errors, style, helpText, attrs } = control;\r\n const thisYear = (new Date()).getFullYear();\r\n //console.log(name, value)\r\n const [year, setYear] = React.useState('')\r\n const [month, setMonth] = React.useState('')\r\n const [day, setDay] = React.useState('')\r\n\r\n //const { template = 'bootstrap', usePlaceholder = false } = formOption;\r\n const fieldId = utils.random.shortId();\r\n const { usePlaceholder = false } = formOption;\r\n const fieldLabel = getLabel(control, formOption);\r\n //console.log(label, name + '|'+ fieldLabel)\r\n //const placeHolder = usePlaceholder ? fieldLabel : null;\r\n // let valueStr = value === 0 ? 0 : (value || \"\");\r\n // if (type === 'date' && value) {\r\n // valueStr = utils.date.formatYYYYMMDD(value);\r\n // }\r\n\r\n function handleChangeDay(e) {\r\n setDay(e.target.value)\r\n handleChangeInner(year, month, e.target.value)\r\n }\r\n\r\n function handleChangeMonth(e) {\r\n setMonth(e.target.value)\r\n handleChangeInner(year, e.target.value, day)\r\n }\r\n\r\n function handleChangeYear(e) {\r\n setYear(e.target.value)\r\n handleChangeInner(e.target.value, month, day)\r\n }\r\n\r\n function handleChangeInner(yyyy, mm, dd) {\r\n control.incomplete = !(yyyy !== '' && mm !== '' && dd !== '')\r\n const newVal = yyyy + '-' + mm + '-' + dd;\r\n //console.log(newVal)\r\n //mimic event\r\n handleChange({\r\n persist: () => { },\r\n target: { name: name, value: newVal, checked: false }\r\n }, control)\r\n }\r\n\r\n //const monthsFull = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']\r\n const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']\r\n const selectStyle = { width: 'auto', display: 'inline-block', marginRight: '0.5em' };\r\n\r\n const fromYear = style && style.recentYear ? thisYear : thisYear - 10;\r\n const recentYear = style && style.recentYear ? style.recentYear : 100;\r\n return (\r\n
\r\n {!usePlaceholder && fieldLabel && }\r\n
\r\n \r\n \r\n \r\n
\r\n {helpText &&
}\r\n \r\n
\r\n )\r\n}\r\n\r\nexport default DateSeparateInput;","import * as React from 'react';\r\nimport ValidationAlert from '../components/ValidationAlert';\r\nimport utils from '../../../utils';\r\nimport { getLabel } from '../formRenderHelper';\r\n\r\nfunction FileInput({ control, handleChange, formOption }) {\r\n const { name, label, type, value, errors, style, helpText, attrs } = control;\r\n //const { template = 'bootstrap', usePlaceholder = false } = formOption;\r\n const fieldId = utils.random.shortId();\r\n const { usePlaceholder = false } = formOption;\r\n const fieldLabel = getLabel(control, formOption);\r\n //console.log(label, control)\r\n const placeHolder = usePlaceholder ? fieldLabel : null;\r\n let valueStr = value === 0 ? 0 : (value || \"\");\r\n if (type === 'date' && value) {\r\n valueStr = utils.date.formatYYYYMMDD(value);\r\n }\r\n return (\r\n
\r\n {!usePlaceholder && fieldLabel && }\r\n
\r\n handleChange(e, control)} onBlur={(e) => handleChange(e, control)}\r\n placeholder={placeHolder}\r\n className={\"form-control-file\" + (errors && errors.length > 0 ? ' is-invalid' : '')} {...attrs}/>\r\n
\r\n {helpText &&
}\r\n \r\n
\r\n\r\n )\r\n}\r\n\r\nexport default FileInput;","import TextInput from './TextInput';\r\nimport RadioListInput from './RadioListInput';\r\nimport TextareaInput from './TextareaInput';\r\nimport CheckboxInput from './CheckboxInput';\r\nimport CheckboxListInput from './CheckboxListInput';\r\nimport SelectInput from './SelectInput';\r\nimport HiddenInput from './HiddenInput';\r\n//import HtmlInput from './HtmlInput';\r\nimport DateSeparateInput from './DateSeparateInput';\r\nimport FileInput from './FileInput';\r\n\r\nconst Components = { TextInput, RadioListInput, TextareaInput, CheckboxInput, CheckboxListInput, SelectInput, HiddenInput, DateSeparateInput, FileInput };\r\n\r\nconst capitalize = expression => expression.charAt(0).toUpperCase() + expression.slice(1);\r\n\r\nexport function getControl(control, formOption) {\r\n let Component = null;\r\n if (control.type === 'number' || control.type === 'email' || control.type === 'date' || control.type === 'password' || control.type === 'tel')\r\n Component = TextInput;\r\n else if (control.type === \"dob\")\r\n Component = DateSeparateInput;\r\n else\r\n Component = Components[capitalize(control.type) + 'Input'];\r\n\r\n return Component;\r\n}\r\n\r\n","import React from 'react';\r\nimport ValidationAlert from '../components/ValidationAlert';\r\nimport utils from '../../../utils';\r\nimport { getLabel, getLabelAsString } from '../formRenderHelper';\r\n\r\nfunction TextareaInput({ control, handleChange, formOption }) {\r\n const { name, label, type, value, errors, style, helpText, attrs } = control;\r\n const fieldId = utils.random.shortId();\r\n const fieldLabel = getLabel(control, formOption);\r\n //const { template = 'bootstrap', usePlaceholder = false } = formOption;\r\n const { usePlaceholder = false } = formOption;\r\n const placeHolder = usePlaceholder ? getLabelAsString(control, formOption) : null;\r\n const valueStr = value === 0 ? 0 : (value || \"\");\r\n\r\n\r\n const textAreaRef = React.useRef(null);\r\n const [textAreaHeight, setTextAreaHeight] = React.useState(\"auto\");\r\n const [parentHeight, setParentHeight] = React.useState(\"auto\");\r\n\r\n React.useEffect(() => {\r\n if (textAreaRef.current) {\r\n const h = textAreaRef.current.scrollHeight > 60? textAreaRef.current.scrollHeight : 60\r\n setParentHeight(`${h}px`);\r\n setTextAreaHeight(`${h}px`);\r\n }\r\n }, [valueStr]);\r\n\r\n function onChangeInternal(e) {\r\n setTextAreaHeight(\"auto\");\r\n if (textAreaRef.current) {\r\n const h = textAreaRef.current.scrollHeight > 60? textAreaRef.current.scrollHeight : 60\r\n setParentHeight(`${h}px`);\r\n }\r\n handleChange(e, control);\r\n }\r\n\r\n return (\r\n
\r\n {!usePlaceholder && fieldLabel && }\r\n
\r\n \r\n
\r\n {helpText &&
}\r\n \r\n
\r\n )\r\n}\r\n\r\nexport default TextareaInput;","import React from 'react';\r\nimport ValidationAlert from '../components/ValidationAlert';\r\nimport utils from '../../../utils';\r\nimport { getLabel } from '../formRenderHelper';\r\n\r\nconst CheckboxInput = ({ control, handleChange, formOption }) => {\r\n const { name, label, type, value, errors, style, helpText, attrs } = control;\r\n const fieldId = utils.random.shortId();\r\n const fieldLabel = getLabel(control, formOption);\r\n return (\r\n
\r\n handleChange(e, control)} \r\n className={\"form-check-input\"} {...attrs}/>\r\n \r\n {helpText &&
}\r\n \r\n
\r\n )\r\n}\r\n\r\nexport default CheckboxInput;","import React from 'react';\r\nimport ValidationAlert from '../components/ValidationAlert';\r\nimport utils from '../../../utils';\r\nimport { getLabel } from '../formRenderHelper';\r\n\r\nfunction SelectInput({ control, handleChange, formOption }) {\r\n const { name, label, type, value, errors, style, options, helpText, attrs } = control;\r\n const fieldId = utils.random.shortId();\r\n const fieldLabel = getLabel(control, formOption);\r\n return (\r\n
\r\n {fieldLabel && }\r\n
\r\n \r\n
\r\n {helpText &&
}\r\n \r\n
\r\n )\r\n}\r\n\r\nexport default SelectInput;\r\n\r\n","import * as React from 'react';\r\nimport utils from '../../../utils';\r\n\r\nfunction TextInput({ control, handleChange, formOption }) {\r\n const { name, value } = control;\r\n const fieldId = utils.random.shortId();\r\n let valueStr = value === 0 ? 0 : (value || \"\");\r\n\r\n\r\n return (\r\n \r\n )\r\n}\r\n\r\nexport default TextInput;","import React from 'react';\r\nimport * as formModelHelper from './formModelHelper';\r\nimport { getControl } from './controls';\r\nimport { getSiteControl } from '../../form';\r\n\r\nexport function renderControlDirect(control, handleChange, formOption) {\r\n if (control === null) return null;\r\n let Component = getSiteControl(control, formOption) || getControl(control, formOption);\r\n if (Component === null) return null;\r\n return ;\r\n}\r\n\r\n\r\nexport function renderControl(formRoot, nameOrIndex, handleChange, formOption) {\r\n //console.log(formRoot, name);\r\n const control = formModelHelper.findControl(nameOrIndex, formRoot);\r\n //console.log(control, formRoot, name, handleChange, formOption)\r\n if (control) {\r\n return renderControlDirect(control, handleChange, formOption);\r\n }\r\n}\r\n\r\nexport default { renderControl, renderControlDirect }","import validators from './validators';\r\n\r\nexport function validate(root, validateOpt = {}) {\r\n //console.log({...{ triggeredByChange: false }, ...validateOpt})\r\n //console.log(root, validateOpt)\r\n const errors = validateTraverse(root, {...{ triggeredByChange: false }, ...validateOpt});\r\n return errors;\r\n}\r\n\r\nfunction validateTraverse(control, validateOpt) {\r\n if (!control) return [];\r\n //console.log(!!control.disableValidators, control)\r\n if (!!control.disableValidators) { control.errors =[]; return []; }\r\n const errors = [];\r\n const errorsFromControl = validators.validateControl(control, null, validateOpt);\r\n errors.push(...errorsFromControl);\r\n //console.log(errorsFromControl, errors)\r\n if (control.controls && control.controls.length > 0) {\r\n for (let i = 0; i < control.controls.length; i++) {\r\n const errorsFromSub = validateTraverse(control.controls[i], validateOpt);\r\n errors.push(...errorsFromSub);\r\n }\r\n }\r\n control.errors = errors;\r\n return errors;\r\n}\r\n\r\n","import { useState } from 'react';\r\nimport controlRenderer from './controlRenderer';\r\nimport * as formModelHelper from './formModelHelper';\r\nimport * as formValidate from './formValidate';\r\nimport validators from './validators';\r\n\r\nconst useForm = (initialFormModel, option) => {\r\n const [formModel, setFormModel] = useState(initialFormModel);\r\n const formOption = {\r\n ...{\r\n template: 'bootstrap',\r\n usePlaceholder: false,\r\n requiredMark: '*',\r\n onControlChanged: null\r\n }, ...option\r\n };\r\n\r\n const handleChange = (e, controlFromEvent) => {\r\n e.persist();\r\n const control = controlFromEvent || formModelHelper.findControl(e.target.name, formModel);\r\n //console.log(control)\r\n // const control = controlId? formModelHelper.findControlById(controlId, formModel)\r\n // : formModelHelper.findControl(e.target.name, formModel);\r\n if (!control) return;\r\n\r\n //console.log(control.value, e.target)\r\n control.touched = true;\r\n control.value = getControlValue(control, e.target);\r\n if (control.type === 'file') {\r\n control.files = e.target.files\r\n }\r\n\r\n // parseInput(control);\r\n if (control.onBeforeUpdateValue) {\r\n control.onBeforeUpdateValue(control, formModel)\r\n }\r\n\r\n validators.validateControl(control, e, { triggeredByChange: true });\r\n setFormModel({ ...formModel });\r\n\r\n if (formOption.onControlChanged) {\r\n formOption.onControlChanged(e, control)\r\n }\r\n };\r\n\r\n const validateForm = (e, successHandler, errorHandler) => {\r\n validateGroup(formModel, e, successHandler, errorHandler)\r\n };\r\n\r\n const validateGroup = (control, e, successHandler, errorHandler) => {\r\n e && e.preventDefault();\r\n const errors = formValidate.validate(control);\r\n\r\n if (errors.length === 0) successHandler && successHandler();\r\n else {\r\n setFormModel({ ...formModel });\r\n errorHandler && errorHandler(errors)\r\n }\r\n };\r\n\r\n const reset = (model) => setFormModel(model ? { ...model } : { ...formModel });\r\n\r\n // const parseInput = input => input.value = input.parseFun ? input.parseFun(input.value) : input.value;\r\n\r\n const renderControl = (name, formRoot) => controlRenderer.renderControl(formRoot || formModel, name, handleChange, formOption);\r\n const renderControlDirect = (control) => controlRenderer.renderControlDirect(control, handleChange, formOption);\r\n\r\n const getValue = (formRoot) => formModelHelper.getValue(formRoot || formModel);\r\n\r\n const getFiles = (formRoot) => formModelHelper.getFiles(formRoot || formModel);\r\n\r\n const findControl = (name, formRoot) => {\r\n const control = formModelHelper.findControl(name, formRoot || formModel);\r\n return control;\r\n }\r\n //return [controls, handleChange, handleSubmit, getValue]\r\n return {\r\n model: formModel,\r\n errors: formModel.errors,\r\n reset: reset,\r\n renderControl: renderControl,\r\n renderControlDirect: renderControlDirect,\r\n findControl: findControl,\r\n validateForm: validateForm,\r\n validateGroup: validateGroup,\r\n getValue: getValue,\r\n getFiles: getFiles\r\n }\r\n};\r\n\r\nfunction getControlValue(control, el) {\r\n //console.log(control, el)\r\n if (control.type === 'checkboxList') {\r\n const options = el.closest('.controlOptions');\r\n if (options) {\r\n return [...options.querySelectorAll('input:checked')].map(x => x.value)\r\n }\r\n return [];\r\n }\r\n else if (control.type === 'radioList') {\r\n const options = el.closest('.controlOptions');\r\n if (options) {\r\n const val = [...options.querySelectorAll('input:checked')].map(x => x.value)\r\n return val && val.length > 0 ? val[0] : null\r\n }\r\n return null;\r\n }\r\n return control.type === 'checkbox' ? el.checked : el.value;\r\n}\r\n\r\nexport { useForm };","import React from 'react';\r\nimport env from 'env';\r\nimport { usePost } from 'components';\r\nimport { useForm } from 'form';\r\nimport { Button, ErrorMessage } from 'components';\r\nimport { getContactModel } from './contactFormModel';\r\n\r\nexport function Contact(props) {\r\n const emailReceiver = props.emailReceiver;\r\n const model = getContactModel({});\r\n const form = useForm(model, { usePlaceholder: true });\r\n const post = usePost();\r\n\r\n function onSubmit(e) {\r\n form.validateForm(e, () => {\r\n const value = { ...form.getValue(), emailReceiver: emailReceiver };\r\n post.send(env.apiBase + \"/api/contact/send\", value);\r\n })\r\n console.log('submitting')\r\n }\r\n\r\n // if (status === 'done') {\r\n // //navigate(`/task/view/${taskId}`)\r\n // window.location.reload();\r\n // }\r\n\r\n const render = (name) => form.renderControl(name, null);\r\n\r\n return (\r\n
\r\n
\r\n
{render('name')}
\r\n
{render('phone')}
\r\n
{render('email')}
\r\n
\r\n
\r\n
{render('enquiry')}
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n {post.status === 'done' && 'Successfully sent!'}\r\n
\r\n
\r\n
\r\n
\r\n );\r\n}","import { fb, validators } from 'form';\r\n\r\nexport function getContactModel(data) {\r\n const model = fb.group({\r\n name: [data.name || '', [validators.Required()], { label: 'Name', type: 'text' }],\r\n phone: [data.phone || '', [validators.Required()], { label: 'Phone', type: 'text' }],\r\n email: [data.email || '', [validators.Required(), validators.Email()], { label: 'Email', type: 'email' }],\r\n enquiry: [data.enquiry || '', [validators.Required()], { label: 'Your Message', type: 'textarea' }]\r\n });\r\n \r\n return model;\r\n}","import React from 'react';\r\nimport cmsUtils from 'cms/utils/cmsUtils';\r\nimport utils from 'utils';\r\nimport { Contact } from './contactForm';\r\n\r\nexport function ContactForm(props) {\r\n const item = props.item;\r\n //const subItems = item.items || [];\r\n const cmsOption = props.cmsOption || {};\r\n\r\n //console.log('item', item, cmsOption);\r\n\r\n const emailReceiver = cmsUtils.payload(item, 'EmailReceiver');\r\n\r\n const cssClass = utils.classNames('cms_item', 'htmlPanel', cmsOption.isCmsEdit && 'html', item.cssClass || item.anchorName || '');\r\n\r\n //let itemElt = (
);\r\n\r\n return (\r\n
\r\n\r\n
\r\n \r\n
\r\n\r\n
\r\n )\r\n}","import React from 'react';\r\n// import { Item } from 'cms/items/item';\r\n// import { SiteLink } from 'shared/link/siteLink';\r\nimport cmsUtils from 'cms/utils/cmsUtils';\r\nimport utils from 'utils';\r\nimport { YoutubeBanner } from 'components';\r\n//import env from 'env';\r\n//import Slider from 'modules/slider/slider';\r\nimport {BannerPanel} from '../bannerPanel/view';\r\n\r\nexport function YoutubeBannerPanel(props) {\r\n const item = props.item;\r\n const cmsOption = props.cmsOption || {};\r\n\r\n //console.log('item', item);\r\n\r\n const heightSet = cmsUtils.payload(item, 'HeightSet') || 'standard';\r\n const videoCode = cmsUtils.payload(item, 'YoutubeCode');\r\n const playerId = 'ytBanner-' + (item.itemId).substr(0, 8);\r\n\r\n const video = {\r\n heightSet: heightSet,\r\n videoLinkOrId: videoCode,\r\n playerId: playerId\r\n }\r\n\r\n //const enableYoutube = env.isProd;\r\n //const canPlayVideo = () => window.innerWidth >= 1200\r\n const canPlayVideo = () => window.innerWidth >= 800\r\n\r\n const cssClass = utils.classNames('cms_item', 'youtubePanel', heightSet, item.cssClass || item.anchorName || '');\r\n\r\n //console.log(window.innerWidth, canPlayVideo())\r\n\r\n return (\r\n
\r\n {canPlayVideo() ? : }\r\n {/* \r\n {false && } */}\r\n
\r\n );\r\n}\r\n\r\n// function MobileSlider(props) {\r\n// const item = props.item;\r\n// const subItems = item.items || [];\r\n \r\n// const slides = subItems.map((subItem, index) =>\r\n// \r\n// );\r\n\r\n// useLayoutEffect(() => {\r\n// setTimeout(() => {\r\n// console.log(window.innerWidth);\r\n// const slider = new Slider('.contSlider');\r\n// slider.init();\r\n// }, 100)\r\n// }, [])\r\n\r\n// return (\r\n//
\r\n// {slides}\r\n//
\r\n// );\r\n// }\r\n\r\n// function SlideItem(props){\r\n// const item = props.item;\r\n// const bgUrl = utils.site.resourcePath(cmsUtils.payload(item, 'ImageUrl'));\r\n\r\n// return (\r\n//
\r\n// \"Banner\"\r\n//
\r\n// );\r\n\r\n// }","import React from 'react';\r\n// import { Item } from 'cms/items/item';\r\n// import { SiteLink } from 'shared/link/siteLink';\r\nimport cmsUtils from 'cms/utils/cmsUtils';\r\nimport utils from 'utils';\r\nimport { YoutubeEmbed } from 'components';\r\n\r\nexport function YoutubeEmbedded(props) {\r\n const item = props.item;\r\n const cmsOption = props.cmsOption || {};\r\n\r\n //console.log('item', item);\r\n\r\n // const heightSet = cmsUtils.payload(item, 'HeightSet') || 'standard';\r\n const videoCode = cmsUtils.payload(item, 'YoutubeCode');\r\n\r\n const cssClass = utils.classNames('cms_item', 'youtubeEmbedded', item.cssClass || item.anchorName || '');\r\n\r\n //console.log(window.innerWidth, canPlayVideo())\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n}\r\n","import React from 'react';\r\nimport env from 'env';\r\nimport { SiteLink} from 'components';\r\nimport { usePost } from 'components';\r\nimport { ErrorPopup, Loading } from 'components';\r\nimport { useRouter } from 'components';\r\n\r\nexport function SearchResult(props) {\r\n \r\n const { query } = useRouter();\r\n const post = usePost();\r\n const keyword = query.q;\r\n //console.log(keyword);\r\n\r\n React.useEffect(() => {\r\n post.send(env.apiBase + '/api/search/search', { keyword: keyword });\r\n // eslint-disable-next-line\r\n }, [keyword]);\r\n\r\n if (post.loading()) {\r\n return \r\n } else if (post.hasErrors()) {\r\n return \r\n }\r\n //console.log(\"post\", post)\r\n const data = post.response;\r\n //const products = data.products;\r\n const pages = data.pages;\r\n\r\n if (pages.length === 0) return (\r\n
\r\n No result found.\r\n
\r\n )\r\n return (\r\n <>\r\n {/* {products.length > 0 &&
\r\n

Products

\r\n \r\n
} */}\r\n {pages.length > 0 &&
\r\n

Pages

\r\n \r\n
}\r\n \r\n );\r\n}\r\n\r\n// function ProductList({products}) {\r\n// return (\r\n//
\r\n// {products.map((product, index) =>\r\n// \r\n// )}\r\n//
\r\n// );\r\n// }\r\n\r\nfunction PageList({pages}) {\r\n return (\r\n
\r\n {pages.map((page, index) =>\r\n
\r\n
\r\n {page.pageTitle}\r\n
\r\n
\r\n
\r\n )}\r\n
\r\n );\r\n}","import React from 'react';\r\nimport cmsUtils from 'cms/utils/cmsUtils';\r\nimport utils from 'utils';\r\nimport { SearchResult } from 'site/searchResult/searchResult';\r\nimport { InstagramFeed } from 'components';\r\nimport { AppVersion } from 'components';\r\n\r\nexport function Code(props) {\r\n const item = props.item;\r\n //const subItems = item.items || [];\r\n const cmsOption = props.cmsOption || {};\r\n\r\n //console.log('item', item, cmsOption);\r\n\r\n const code = cmsUtils.payload(item, 'Code');\r\n const codeType = cmsUtils.payload(item, 'CodeType');\r\n let controls = null;\r\n if (codeType === 'Json') {\r\n const codeJson = JSON.parse(code);\r\n\r\n if (codeJson.control === 'search-results'){\r\n controls = \r\n } else if(codeJson.control === 'app'){\r\n controls = \r\n } else if (codeJson.control === 'instagram') {\r\n controls = \r\n }\r\n }\r\n\r\n const cssClass = utils.classNames('cms_item', item.cssClass || item.anchorName || '');\r\n\r\n //let itemElt = (
);\r\n\r\n if (cmsOption.isCmsEdit)\r\n return (\r\n
\r\n
\r\nCode Type: {codeType}\r\n{code}}
\r\n
\r\n )\r\n else if (codeType === 'Text')\r\n return (\r\n
\r\n )\r\n else\r\n return (\r\n
{controls}
\r\n )\r\n}\r\n","import React from 'react';\r\nimport cmsUtils from 'cms/utils/cmsUtils';\r\nimport utils from 'utils';\r\nimport { SiteLink } from 'components';\r\n\r\nexport function BlogPosts(props) {\r\n const item = props.item;\r\n const cmsOption = props.cmsOption || {};\r\n\r\n //console.log('item', item);\r\n\r\n const posts = getPages(cmsUtils.payload(item, 'BlogPosts'));\r\n const numOfTileLines = parseInt(cmsUtils.payload(item, 'NumOfTileLines', '2'));\r\n //console.log(numOfPost, parseInt(numOfPost));\r\n //console.log(posts);\r\n const bp = utils.ui.getCurrentBreakpoint();\r\n const tilesPerLine = {xs:1, sm:1, md:2, lg:2, xl:3, xxl:4}\r\n const numOfPost = numOfTileLines * (tilesPerLine[bp] || 3);\r\n const step = numOfPost;\r\n console.log(bp, numOfTileLines, tilesPerLine, numOfPost)\r\n\r\n const [tilesToShow, setTilesToShow] = React.useState(numOfPost);\r\n\r\n const displayingPosts = posts.length > tilesToShow ? posts.slice(0, tilesToShow) : posts;\r\n const showMore = posts.length > displayingPosts.length;\r\n\r\n const pageTileElts = displayingPosts.map((page, index) =>\r\n \r\n );\r\n\r\n const cssClass = utils.classNames('cms_item', 'blogTiles tiles', item.cssClass || item.anchorName || '');\r\n\r\n return (\r\n <>\r\n
\r\n {pageTileElts}\r\n
\r\n {showMore && (
\r\n { setTilesToShow(tilesToShow + step) }}>LOAD MORE
)}\r\n \r\n );\r\n}\r\n\r\nfunction getPages(pagesSerialized) {\r\n if (pagesSerialized) {\r\n return JSON.parse(pagesSerialized);\r\n }\r\n return [];\r\n}\r\n\r\nfunction Tile(props) {\r\n const page = props.page;\r\n const imageUrl = utils.site.resourcePath(page.imageUrl);\r\n const disableLink = props.disableLink;\r\n return (\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n {page.pageTitle}\r\n
\r\n
\r\n {page.tileDesc || page.description}\r\n
\r\n
READ MORE
\r\n
\r\n
\r\n
\r\n
\r\n )\r\n}","import React from 'react';\r\nimport cmsUtils from 'cms/utils/cmsUtils';\r\nimport utils from 'utils';\r\n\r\nexport function BlogPostTitle(props) {\r\n const item = props.item;\r\n const cmsOption = props.cmsOption || {};\r\n\r\n //console.log('item', item);\r\n\r\n const title = cmsUtils.payload(item, 'PageTitle');\r\n const postDate = cmsUtils.payload(item, 'PostDate');\r\n\r\n const cssClass = utils.classNames('blogView__titleContainer', 'cms_item', item.cssClass || item.anchorName || '');\r\n\r\n return (\r\n
\r\n
\r\n {postDate}\r\n
\r\n

\r\n {title}\r\n

\r\n
\r\n );\r\n}\r\n","import React from 'react';\r\nimport cmsUtils from 'cms/utils/cmsUtils';\r\nimport { Item } from 'cms/items/item';\r\nimport utils from 'utils';\r\n\r\nexport function MultiColumnPanel(props){\r\n const item = props.item;\r\n const mobileReverse = cmsUtils.payload(item, 'MobileReverse', 'no');\r\n //const subItems = item.items || [];\r\n const subItems = (mobileReverse === \"yes\" && window.innerWidth <= 550) ? item.items.reverse() || [] : item.items || [];\r\n const cmsOption = props.cmsOption || {};\r\n const columnWidths = cmsUtils.payload(item, 'ColumnWidths').split(\",\");\r\n const mobileColumnWidths = cmsUtils.payload(item, 'MobileColumnWidths').split(\",\");\r\n const countItem = {countD : 0, countM : 0, col : \"\"};\r\n\r\n const bgColor = cmsUtils.payload(item, 'BgColor');\r\n //const textColorTheme = cmsUtils.payload(item, 'TextColorTheme');\r\n const imageUrl = cmsUtils.payload(item, 'ImageUrl');\r\n const backgroundTile = cmsUtils.payload(item, 'BackgroundTile');\r\n const bgTheme = cmsUtils.payload(item, 'TextColorTheme') || 'white';\r\n \r\n let bgUrl = null;\r\n if (imageUrl)\r\n bgUrl = utils.site.resourcePath(imageUrl);\r\n else if (backgroundTile)\r\n bgUrl = utils.site.resourcePath(`/dist/transparent-textures/textures/${backgroundTile}`);\r\n\r\n const cssClass = utils.classNames('cms_item', 'contentPanel', 'multiColumnPanel', 'contentPanel--' + bgTheme, item.cssClass || item.anchorName || ''); \r\n\r\n function setupClass(index){ \r\n countItem.col = \"\";\r\n if(columnWidths.length === countItem.countD){\r\n countItem.countD = 0;\r\n }\r\n\r\n if(mobileColumnWidths.length === countItem.countM){\r\n countItem.countM = 0;\r\n }\r\n \r\n countItem.col = \"col-sm-\" + columnWidths[countItem.countD] + \" col-\" + mobileColumnWidths[countItem.countM];\r\n countItem.countD ++;\r\n countItem.countM ++;\r\n };\r\n\r\n const subItemsElts = subItems.map((subItem, index) => {\r\n setupClass();\r\n return
\r\n \r\n
\r\n } \r\n );\r\n return (\r\n
\r\n
\r\n
\r\n {subItemsElts}\r\n
\r\n
\r\n
\r\n );\r\n}","/** @jsx jsx */\r\nimport { jsx } from '@emotion/core';\r\nimport { FaChevronDown } from \"react-icons/fa\";\r\nimport React, { useLayoutEffect, useRef } from 'react';\r\nimport cmsUtils from 'cms/utils/cmsUtils';\r\nimport utils from 'utils';\r\nimport { useRouter } from 'components';\r\nimport { handleElementLink } from 'components';\r\nimport env from 'env';\r\n\r\nexport function ExpandableHtml(props) {\r\n const cmsOption = props.cmsOption || {};\r\n const [open, setOpen] = React.useState(cmsOption.isCmsEdit);\r\n const ver = env.ver;\r\n const item = props.item;\r\n //const subItems = item.items || [];\r\n const { history } = useRouter();\r\n //console.log('item', item, cmsOption);\r\n //console.log(open)\r\n let content = cmsUtils.payload(item, 'Content').replace(\"__version__\", \" PWA \"+ ver +\"\");\r\n \r\n const buttonTitle = cmsUtils.payload(item, 'ButtonTitle');\r\n\r\n\r\n const cssClass = utils.classNames('cms_item', 'htmlPanel exHtml', cmsOption.isCmsEdit && 'html', item.cssClass || item.anchorName || '');\r\n\r\n //let itemElt = (
);\r\n\r\n function handleClick(e) { \r\n \r\n let target = \"\";\r\n if(e.target.closest('a')){\r\n target = e.target.closest('a').getAttribute('target');\r\n }\r\n const processed = (target === \"_blank\" ? handleElementLink(e.target, null) : handleElementLink(e.target));\r\n //const link = utils.url.getLinkFromElement(e.target);\r\n //console.log('clicked', e, e.target, processed);\r\n \r\n if (processed.handled) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n } else if (processed.linkInfo && processed.linkInfo.type === 'internal') {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n history.push(processed.linkInfo.url)\r\n } else {\r\n // e.preventDefault();\r\n // e.stopPropagation();\r\n // setPdfViewPath(utils.site.resourcePath(link))\r\n }\r\n }\r\n\r\n const htmlBlock = useRef(null);\r\n // function iframeSizer() {\r\n // //console.log('iframesizer')\r\n // let iframesContainer = htmlBlock.current.querySelectorAll('iframe.youtube, .ytvideo iframe');\r\n // //console.log('iframesizer', iframesContainer)\r\n // if (iframesContainer && iframesContainer.length) {\r\n // iframesContainer.forEach(element => {\r\n // let height = (element.parentElement.offsetWidth * 9) / 16\r\n // //console.log(height, element.parentElement.offsetWidth)\r\n // element.style.height = height + 'px';\r\n // });\r\n // }\r\n // }\r\n\r\n useLayoutEffect(() => {\r\n const buttons = htmlBlock.current.querySelectorAll('.button');\r\n for (let i = 0; buttons && i < buttons.length; i++) {\r\n restructureButton(buttons[i])\r\n }\r\n\r\n // const youtubes = htmlBlock.current.querySelectorAll('iframe[src*=\"youtube\"]');\r\n // console.log(youtubes)\r\n\r\n // iframeSizer();\r\n // window.addEventListener('resize', iframeSizer)\r\n // return (): void => {\r\n // window.removeEventListener('resize', iframeSizer)\r\n // }\r\n\r\n }, [])\r\n\r\n\r\n const style = {\r\n icon: {\r\n marginLeft: '0.5rem',\r\n width: 'auto !important',\r\n fontSize: '80%',\r\n transition: 'all 0.5s'\r\n },\r\n iconOpen: {\r\n transform: 'translateY(-0.1rem) rotate(-180deg)'\r\n },\r\n iconClosed: {\r\n transform: 'translateY(-0.1rem) rotate(0)'\r\n },\r\n panelCollapsed: {\r\n maxHeight: 0,\r\n transition: 'all 0.6s',\r\n opacity: 0,\r\n overflow: 'hidden'\r\n },\r\n panelOpen: {\r\n opacity: 1,\r\n maxHeight: '2000px',\r\n transition: 'all 1s'\r\n }\r\n }\r\n\r\n const toggleExPanel = (e) => {\r\n e.preventDefault()\r\n e.stopPropagation()\r\n setOpen(!open)\r\n }\r\n\r\n\r\n if (cmsOption.isCmsEdit)\r\n return (\r\n
handleClick(e)}>\r\n
\r\n {e.preventDefault(); e.stopPropagation();}}>{buttonTitle} \r\n
To edit the button title, please double click or open item editor
\r\n
\r\n \r\n
\r\n
\r\n )\r\n\r\n return (\r\n
handleClick(e)}>\r\n
\r\n {buttonTitle} \r\n
\r\n \r\n
\r\n
\r\n )\r\n}\r\n\r\n\r\nfunction restructureButton(el) {\r\n if (!el.querySelector('span')) {\r\n const span = document.createElement('span');\r\n span.innerHTML = el.innerHTML;\r\n el.innerHTML = '';\r\n el.appendChild(span);\r\n }\r\n}","import { css } from '@emotion/core'\r\n//import { mq } from 'cssInJs'\r\n\r\nexport default{\r\n testimonialPanel : css({\r\n marginTop: '20px',\r\n marginBottom: '20px',\r\n backgroundColor: 'transparent',\r\n '& .slick-prev:before, .slick-next:before' : {\r\n color : 'black'\r\n },\r\n '& .slick-next' : {\r\n right : '-2%'\r\n },\r\n '& .slick-prev' : {\r\n left : '-2%'\r\n }\r\n })\r\n}","import { css } from '@emotion/core'\r\n//import { mq } from 'cssInJs'\r\n\r\nexport default{\r\n testimonialItem : css({\r\n maxWidth : '300px',\r\n backgroundColor: '#f8f8ff',\r\n opacity: '.9',\r\n textAlign: 'center',\r\n color: '#000',\r\n padding: '10px',\r\n //height: '100%',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'space-between',\r\n margin: 'auto',\r\n height: '430px'\r\n }),\r\n testimonialItem_title : css({\r\n //flex: '1 1 auto'\r\n marginBottom: '0px'\r\n }),\r\n testimonialItem_desc : css({\r\n flex: '1 1 auto'\r\n //flexGrow: '1',\r\n //flexShrink: '1'\r\n })\r\n}","import utils from 'utils';\r\nimport cmsUtils from 'cms/utils/cmsUtils';\r\nimport { IoIosStar } from \"react-icons/io\";\r\n\r\n/** @jsx jsx */\r\nimport { jsx } from '@emotion/core'\r\nimport style from './style';\r\n\r\nexport function TestimonialItem(props){\r\n\r\n const item = props.item;\r\n //const cmsOption = props.cmsOption || {};\r\n const cssClass = utils.classNames('cms_item', 'testimonialItem', item.cssClass || item.anchorName || '');\r\n \r\n const startRatingColor = (props.startRatingColor && props.startRatingColor !== \"\") ? props.startRatingColor : \"black\";\r\n \r\n const title = cmsUtils.payload(item, 'Title');\r\n const desc = cmsUtils.payload(item, 'Desc');\r\n const bottom = cmsUtils.payload(item, 'BottomText');\r\n const ratingValue = parseInt(cmsUtils.payload(item, 'RatingStar'));\r\n \r\n var rating = [];\r\n\r\n for(var i = 0; i < ratingValue; i++ ){\r\n rating.push(\r\n \r\n );\r\n }\r\n\r\n return(\r\n // data-cms-item-id={cmsOption.isCmsEdit && item.itemId} id={item.anchorName}\r\n
\r\n

\r\n { title }\r\n

\r\n
\r\n { rating }\r\n
\r\n {/* style={{ flexBasis: props.desH + \"px\" }} */}\r\n
\r\n { desc }\r\n
\r\n
\r\n { bottom }\r\n
\r\n
\r\n );\r\n}","//import { Item } from 'cms/items/item';\r\nimport Slider from \"react-slick\";\r\nimport utils from 'utils';\r\n//import cmsUtils from 'cms/utils/cmsUtils';\r\n\r\n/** @jsx jsx */\r\nimport { jsx } from '@emotion/core';\r\nimport style from './style';\r\n//import { useState, useEffect } from 'react';\r\n\r\nimport { TestimonialItem } from '../testimonialItem/view';\r\n\r\nexport function TestimonialPanel(props){\r\n const item = props.item;\r\n //const defaultDesH = 220;\r\n const startRatingColor = props.startRatingColor;\r\n const subItems = item.items || [];\r\n //console.log(subItems.length);\r\n const cmsOption = props.cmsOption || {};\r\n const cssClass = utils.classNames('cms_item', 'testimonialPanel', item.cssClass || item.anchorName || '');\r\n \r\n //const [desH, setDesH] = useState(defaultDesH);\r\n\r\n //var maxDesTextLength = 0;\r\n const testimonialItems = subItems.map((subItem, index) => {\r\n // let subItemDes = cmsUtils.payload(subItem, \"Desc\");\r\n // if(maxDesTextLength < subItemDes.length){\r\n // maxDesTextLength = subItemDes.length\r\n // }\r\n //return \r\n return \r\n }\r\n );\r\n \r\n // useEffect(() => {\r\n // if(defaultDesH < maxDesTextLength){\r\n // setDesH(maxDesTextLength);\r\n // }\r\n // }, [maxDesTextLength]);\r\n\r\n var settings = {\r\n dots: false,\r\n infinite: true,\r\n speed: 1700,\r\n autoplaySpeed: 3000,\r\n ////fade: true,\r\n autoplay: true,\r\n slidesToShow: (subItems.length >= 3 ? 3 : subItems.length),\r\n //slidesToShow: 3,\r\n slidesToScroll: 1,\r\n responsive : [\r\n {breakpoint : 1024, settings : { slidesToShow: (subItems.length >= 2 ? 2 : subItems.length) }},\r\n {breakpoint : 800, settings : { slidesToShow: 1 }}\r\n ]\r\n };\r\n\r\n return(\r\n
\r\n \r\n { testimonialItems }\r\n \r\n
\r\n );\r\n}","import { css } from '@emotion/core'\r\n//import { mq } from 'cssInJs'\r\n\r\nexport default{\r\n sliderPanel : css({\r\n marginTop: '20px',\r\n marginBottom: '20px',\r\n // backgroundColor: 'transparent',\r\n // '& .slick-prev:before, .slick-next:before' : {\r\n // color : 'black'\r\n // },\r\n // '& .slick-next' : {\r\n // right : '-2%'\r\n // },\r\n // '& .slick-prev' : {\r\n // left : '-2%'\r\n // }\r\n '.slick-arrow' : {\r\n display:'none !important'\r\n }\r\n })\r\n}","import { css } from '@emotion/core'\r\nimport { mq } from 'cssInJs'\r\n\r\nexport default{\r\n sliderItem : css({\r\n // maxWidth : '300px',\r\n // backgroundColor: '#f8f8ff',\r\n // opacity: '.9',\r\n // textAlign: 'center',\r\n // color: '#000',\r\n // padding: '10px',\r\n // //height: '100%',\r\n // display: 'flex',\r\n // flexDirection: 'column',\r\n // justifyContent: 'space-between',\r\n // margin: 'auto',\r\n // height: '430px'\r\n 'img' : mq({\r\n //padding: ['0px 1rem', '0px 0px'],\r\n padding: '0px 0.5rem',\r\n margin : 'auto',\r\n maxWidth: '100%',\r\n height:'auto'\r\n })\r\n })\r\n // testimonialItem_title : css({\r\n // //flex: '1 1 auto'\r\n // marginBottom: '0px'\r\n // }),\r\n // testimonialItem_desc : css({\r\n // flex: '1 1 auto'\r\n // //flexGrow: '1',\r\n // //flexShrink: '1'\r\n // })\r\n}","import utils from 'utils';\r\nimport cmsUtils from 'cms/utils/cmsUtils';\r\n\r\n/** @jsx jsx */\r\nimport { jsx } from '@emotion/core'\r\nimport style from './style';\r\n\r\nexport function SliderItem(props){\r\n const item = props.item;\r\n const imageUrl = cmsUtils.payload(item, 'ImageUrl');\r\n //console.log('item', item);\r\n //const cmsOption = props.cmsOption || {};\r\n const cssClass = utils.classNames('cms_item', 'sliderItem', item.cssClass || item.anchorName || ''); \r\n return(\r\n
\r\n \"image1\"\r\n
\r\n );\r\n}","import Slider from \"react-slick\";\r\nimport utils from 'utils';\r\n//import cmsUtils from 'cms/utils/cmsUtils';\r\n\r\n/** @jsx jsx */\r\nimport { jsx } from '@emotion/core';\r\nimport style from './style';\r\n\r\nimport { SliderItem } from '../sliderItem/view';\r\n\r\nexport function SliderPanel(props){\r\n\r\n const item = props.item;\r\n //const defaultDesH = 220;\r\n const subItems = item.items || [];\r\n //console.log(subItems.length);\r\n const cmsOption = props.cmsOption || {};\r\n const cssClass = utils.classNames('cms_item', 'sliderPanel', 'container', item.cssClass || item.anchorName || '');\r\n\r\n const sliderItems = subItems.map((subItem, index) => {\r\n return \r\n });\r\n\r\n var settings = {\r\n dots: false,\r\n infinite: true,\r\n speed: 2000,\r\n autoplaySpeed: 3000,\r\n ////fade: true,\r\n autoplay: true,\r\n slidesToShow: (subItems.length >= 6 ? 6 : subItems.length),\r\n slidesToScroll: 1,\r\n responsive : [\r\n // {breakpoint : 1024, settings : { slidesToShow: (subItems.length >= 2 ? 2 : subItems.length) }},\r\n {breakpoint : 1024, settings : { slidesToShow: (subItems.length >= 3 ? 3 : subItems.length) }}\r\n ]\r\n };\r\n\r\n return(\r\n
\r\n \r\n { sliderItems }\r\n \r\n
\r\n );\r\n\r\n}","import React from 'react';\r\nimport { BannerPanel } from 'cms/items/bannerPanel/view';\r\nimport { BannerItem } from 'cms/items/bannerItem/view';\r\nimport { Panel } from 'cms/items/panel/view';\r\nimport { Html } from 'cms/items/html/view';\r\n//import { TestimonialPanel } from 'cms/items/testimonialPanel/view';\r\n//import { TestimonialItem } from 'cms/items/testimonialItem/view';\r\nimport { ImagePanel } from 'cms/items/imagePanel/view';\r\n//import { PageTiles } from 'cms/items/pageTiles/view';\r\nimport { PageTileAdore } from 'components/pageTileAdore/view';\r\nimport { SingleBanner } from 'cms/items/singleBanner/view';\r\nimport { ContactForm } from 'cms/items/contactForm/view';\r\nimport { YoutubeBannerPanel } from 'cms/items/youtubeBannerPanel/view';\r\nimport { YoutubeEmbedded } from 'cms/items/youtubeEmbedded/view';\r\nimport { Code } from 'cms/items/code/view';\r\nimport { BlogPosts } from 'cms/items/blogPosts/view';\r\nimport { BlogPostTitle } from 'cms/items/blogPostTitle/view';\r\nimport { MultiColumnPanel } from 'cms/items/multiColumnPanel/view';\r\nimport { ExpandableHtml } from 'cms/items/expandableHtml/view';\r\nimport { TestimonialPanel } from 'components/testimonial/index';\r\nimport { SliderPanel } from 'components/slider/index';\r\n\r\nexport function Item(props) {\r\n const item = props.item;\r\n //const subItems = item.items || [];\r\n const cmsOption = props.cmsOption || {};\r\n\r\n //console.log('item', item, subItems, cmsOption);\r\n\r\n let itemElt = (<>);\r\n if (item.itemTypeCode === 'Panel') {\r\n itemElt = ();\r\n } else if (item.itemTypeCode === 'Html') {\r\n itemElt = ();\r\n } else if (item.itemTypeCode === 'BannerPanel') {\r\n itemElt = ();\r\n } else if (item.itemTypeCode === 'BannerItem') {\r\n itemElt = ();\r\n } else if (item.itemTypeCode === 'TestimonialPanel') {\r\n const setting = {\r\n startRatingColor : '#1b1664'\r\n };\r\n itemElt = ();\r\n } else if (item.itemTypeCode === 'ImagePanel') {\r\n itemElt = ();\r\n } else if (item.itemTypeCode === 'PageTiles') {\r\n itemElt = ();\r\n } else if (item.itemTypeCode === 'SingleBanner') {\r\n itemElt = ();\r\n } else if (item.itemTypeCode === 'ContactForm') {\r\n itemElt = ();\r\n } else if (item.itemTypeCode === 'YoutubeBannerPanel') {\r\n itemElt = ();\r\n } else if (item.itemTypeCode === 'YoutubeEmbedded') {\r\n itemElt = ();\r\n } else if (item.itemTypeCode === 'Code') {\r\n itemElt = ();\r\n } else if (item.itemTypeCode === 'Blog-Posts') {\r\n itemElt = ();\r\n } else if (item.itemTypeCode === 'Blog-PostTitle') {\r\n itemElt = ();\r\n } else if (item.itemTypeCode === 'MultiColumnPanel') {\r\n itemElt = ();\r\n } else if (item.itemTypeCode === 'ExpandableHtml') {\r\n itemElt = ();\r\n } else if (item.itemTypeCode === 'SliderPanel') {\r\n itemElt = ();\r\n } else {\r\n itemElt = (
{item.itemTypeCode}
);\r\n }\r\n // else if (item.itemTypeCode === 'TestimonialItem') {\r\n // itemElt = ();\r\n // }\r\n\r\n // const subItemsElts = subItems.map((subItem, index) =>\r\n // \r\n // );\r\n return (\r\n <>\r\n {itemElt}\r\n {/* {subItemsElts} */}\r\n \r\n );\r\n}\r\n","//#region GTM\r\nexport const hasGTM = () => {\r\n return !!(typeof window !== `undefined` && window.dataLayer);\r\n}\r\n\r\nexport const pageView = (url, pageTitle = null) => {\r\n if (!hasGTM()) return;\r\n\r\n const pageOpt = pageTitle ? {\r\n path: url,\r\n title: pageTitle\r\n } : { path: url }\r\n //console.log(url, pageOpt)\r\n window.dataLayer.push({\r\n event: 'pageview',\r\n page: pageOpt\r\n })\r\n}\r\n\r\n// \r\nexport const sendEvent = (eventName, params) => {\r\n if (!hasGTM()) return;\r\n window.dataLayer.push(Object.assign({ event: eventName }, params || {}))\r\n}\r\n//#endregion\r\n\r\n\r\n","import React, { useState, useEffect } from 'react';\r\nimport { useRouter } from 'components';\r\nimport { useGet } from 'components';\r\nimport { Item } from 'cms/items/item';\r\nimport { NotFound } from 'components';\r\nimport env from 'env';\r\nimport { useStore } from 'store';\r\nimport { ErrorPopup, Loading } from 'components';\r\nimport { useInstagram } from 'components';\r\nimport { MetaTag } from 'components';\r\nimport cmsUtils from 'cms/utils/cmsUtils';\r\nimport utils from 'utils';\r\nimport { gtm } from 'lib/tracking';\r\n\r\nconst log = (...args) => {\r\n //console.log(args);\r\n}\r\nconst areEqual = (prevProps, nextProps) => {\r\n return (prevProps.pageData === nextProps.pageData)\r\n};\r\nconst PageMemo = React.memo(Page, areEqual)\r\n\r\nexport function ViewPage() {\r\n const { dispatch } = useStore();\r\n const [pageLoaded, setPageLoaded] = useState(false);\r\n //const [page, setPage] = useState(null);\r\n //const path = usePath();\r\n //log('view page', path);\r\n const { pathname } = useRouter();\r\n useInstagram();\r\n\r\n const get = useGet();\r\n log('0. viewpage ready');\r\n\r\n useEffect(() => {\r\n log('*. start loading')\r\n setPageLoaded(false);\r\n get.send(env.apiBase + \"/api/cms/GetPublishedPage?path=\" + pathname);\r\n // eslint-disable-next-line\r\n }, [pathname]);\r\n\r\n if (get.loading()) {\r\n return \r\n } else if (get.hasErrors()) {\r\n return \r\n }\r\n\r\n //log(router.pathname);\r\n //log(get.loading());\r\n log('1. viewpage component', pageLoaded, get.response);\r\n\r\n\r\n const pageData = get.response.data;\r\n const menuData = get.response.menu;\r\n const cmsOption = {};\r\n log(pageLoaded, !pageLoaded && !!pageData)\r\n if (!pageLoaded && pageData) {\r\n //log(pageLoaded, pageData, menuData)\r\n log('2. dispatching page & menu')\r\n setPageLoaded(true);\r\n //dispatch({ type: 'SET_STATE', payload: { page: pageData, menu: menuData } })\r\n dispatch({ type: 'SET_PAGE', payload: pageData })\r\n dispatch({ type: 'SET_MENU', payload: menuData })\r\n document.title = pageData.pageTitle;\r\n gtm.pageView(pathname, pageData.pageTitle);\r\n return null;\r\n } else if (!pageData) {\r\n return ()\r\n }\r\n\r\n log('3. call rendering memo')\r\n return ;\r\n}\r\n\r\n\r\nfunction Page(props) {\r\n const pageData = props.pageData;\r\n const cmsOption = props.cmsOption;\r\n // document.title = pageData.pageTitle;\r\n log('4. page rendering', pageData, cmsOption)\r\n const sectionItems = pageData.sections.map((section, index) => {\r\n return (\r\n
\r\n )\r\n }\r\n );\r\n return (\r\n <>\r\n \r\n
\r\n {sectionItems}\r\n
\r\n \r\n );\r\n}\r\n\r\nfunction Section(props) {\r\n log('5. section rendering')\r\n const item = props.item;\r\n //const sectionName = item.sectionName;\r\n const subItems = item.items || [];\r\n const cmsOption = props.cmsOption || {};\r\n if (!subItems || subItems.length === 0)\r\n return (<>);\r\n\r\n const subItemsElts = subItems.map((subItem, index) =>\r\n \r\n );\r\n return (\r\n <>\r\n {subItemsElts}\r\n \r\n );\r\n}\r\n\r\nfunction getMetaTag(pageData) {\r\n const country = utils.site.isNZ? 'New Zealand' : 'Australia'\r\n const siteName = env.siteName + ' ' + country;\r\n\r\n return {\r\n title: pageData.pageTitle + ' | ' + siteName,\r\n description: cmsUtils.payload(pageData, 'Description'),\r\n keywords: cmsUtils.payload(pageData, 'Keyword'),\r\n heroImageUrl: utils.site.resourcePath(cmsUtils.payload(pageData, 'ImageUrl')),\r\n language: 'English',\r\n country: country,\r\n siteName: siteName,\r\n url: utils.site.resourcePath(pageData.pageUrl),\r\n //canonical: utils.site.resourcePath(pageData.pageUrl)\r\n }\r\n}","import React from 'react';\r\nimport { loadJs } from '../../lib/net-loader';\r\n\r\nexport function useInstagram() {\r\n const [embedStatus, setEmbedStatus] = React.useState(null);\r\n\r\n React.useEffect(() => {\r\n loadEmbedJs()\r\n })\r\n\r\n function loadEmbedJs() {\r\n if (typeof window !== `undefined`) {\r\n //console.log('instgrm effect', embedStatus, window.instgrm);\r\n if (window.instgrm) {\r\n window.instgrm.Embeds.process();\r\n }\r\n else if (!embedStatus && embedStatus !== 'loading') {\r\n setEmbedStatus('loading');\r\n loadJs(\"https://www.instagram.com/embed.js\").then(data => {\r\n //console.log('instgrm loaded', data);\r\n if (window.instgrm) {\r\n window.instgrm.Embeds.process();\r\n setEmbedStatus('loaded');\r\n }\r\n })\r\n }\r\n }\r\n }\r\n\r\n return { loadEmbedJs: loadEmbedJs }\r\n}","//import { CmsPageController } from './cms-page-controller'\r\n\r\nexport class CmsRadioSender {\r\n controller;//: CmsPageController;\r\n constructor(controller) {\r\n this.controller = controller;\r\n }\r\n\r\n sendMessageToParent(action: string, data: any) {\r\n var cloned = JSON.parse(JSON.stringify(data));\r\n window.parent.postMessage({\r\n action: action,\r\n data: cloned\r\n }, \"*\");\r\n }\r\n\r\n saveAllDirtyHtml(htmlChanges) {\r\n // skip another unneccesary round trip\r\n this.sendMessageToParent('return-all-dirty-html', {\r\n returnTo: '_saveAllDirtyHtml',\r\n htmlChanges: htmlChanges\r\n });\r\n }\r\n\r\n selectControllerItem(data) {\r\n this.sendMessageToParent(\"select-controller-item\", data);\r\n }\r\n\r\n returnAllDirtyHtml(returnTo, htmlChanges) {\r\n this.sendMessageToParent('return-all-dirty-html', {\r\n returnTo: returnTo,\r\n htmlChanges: htmlChanges\r\n });\r\n }\r\n\r\n returnHtml(id, html) {\r\n this.sendMessageToParent('return-html', {\r\n id: id,\r\n html: html\r\n });\r\n }\r\n\r\n markDirtyHtml(id) {\r\n this.sendMessageToParent(\"mark-dirty-html-item\", { id: id });\r\n }\r\n}\r\n","//declare var CKEDITOR: any;\r\n//import { CmsPageController } from './cms-page-controller'\r\n\r\nexport class CmsRadioReceiver {\r\n controller;//: CmsPageController;\r\n constructor(controller) {\r\n this.controller = controller;\r\n this.init();\r\n }\r\n\r\n init() {\r\n var self = this;\r\n window.addEventListener(\"message\", function (e) {\r\n\r\n var action = e.data.action;\r\n var data = e.data.data;\r\n\r\n // console.log(e, \"cms-action-received: \" + action, data);\r\n\r\n if (action === 'select-item') {\r\n self.selectItem(data.itemId)\r\n } else if (action === 'media-selected-ckeditor') {\r\n self.mediaSelectedCKEditor(data)\r\n } else if (action === 'get-all-dirty-html') {\r\n var htmlChanges = self.controller.getAllDirtyHtml();\r\n self.controller.sender.returnAllDirtyHtml(data.returnTo, htmlChanges);\r\n } else if (action === 'get-html') {\r\n var html = self.controller.getHtml(data.id);\r\n self.controller.sender.returnHtml(data.id, html);\r\n } else if (action === 'page-reload') {\r\n window.location.reload();\r\n }\r\n }, false);\r\n }\r\n\r\n mediaSelectedCKEditor(data) {\r\n const CKEDITOR = window['CKEDITOR'] || {};\r\n CKEDITOR.tools.callFunction(data.funcNum, data.selectedPath);\r\n }\r\n\r\n selectItem(itemId) {\r\n this.controller.selectItemFromController(itemId);\r\n }\r\n}\r\n","import { CmsRadioSender } from './cms-radio-sender'\r\n// //import * as $ from 'jquery';\r\n// declare var CKEDITOR: any;\r\n// import * as $ from 'jquery';\r\n\r\nexport class CmsHtmlEditor {\r\n ckeditorConfig;\r\n ckeditorStylesSet;\r\n sender;\r\n constructor(cmsEndpoint: string, sender: CmsRadioSender) {\r\n this.ckeditorConfig = {\r\n startupFocus: true,\r\n filebrowserBrowseUrl: cmsEndpoint + '/cms41helper/browse/selectpageormedia', //'/cms/browse',//'/cms/resource/selectfileckeditor',\r\n filebrowserImageBrowseUrl: cmsEndpoint + '/cms41helper/browse/selectmedia', //'/cms/browse?type=rc',//'/cms/resource/selectfileckeditor?type=Images',\r\n extraPlugins: 'sourcedialog,youtubejaba,lineutils,widget,embedjaba,image2',\r\n toolbar: [{\r\n name: 'basicstyles',\r\n groups: ['basicstyles', 'cleanup'],\r\n items: ['Bold', 'Italic', 'Underline', 'Strike', 'Subscript', 'Superscript', '-', 'RemoveFormat']\r\n },\r\n {\r\n name: 'paragraph',\r\n groups: ['list', 'align'],\r\n items: ['NumberedList', 'BulletedList', '-', 'JustifyLeft', 'JustifyCenter', 'JustifyRight',\r\n 'JustifyBlock'\r\n ]\r\n },\r\n {\r\n name: 'links',\r\n items: ['Link', 'Unlink', 'Anchor']\r\n },\r\n {\r\n name: 'insert',\r\n items: ['Image', 'Table', 'HorizontalRule', 'PageBreak', 'Iframe', 'Youtube'/*, 'EmbedJaba'*/]\r\n },\r\n '/',\r\n {\r\n name: 'document',\r\n groups: ['mode'],\r\n items: ['Sourcedialog']\r\n },\r\n {\r\n name: 'clipboard',\r\n groups: ['clipboard', 'undo'],\r\n items: ['Cut', 'Copy', 'Paste', 'PasteText', 'PasteFromWord', '-', 'Undo', 'Redo']\r\n },\r\n {\r\n name: 'styles',\r\n items: ['Styles', 'Format']\r\n },\r\n {\r\n name: 'colors',\r\n items: ['TextColor', 'BGColor']\r\n },\r\n {\r\n name: 'tools',\r\n items: ['Maximize', 'ShowBlocks']\r\n }\r\n ],\r\n extraAllowedContent: 'style;span;*[id,rel,data-*](*){*}'\r\n }\r\n\r\n this.ckeditorStylesSet = [\r\n /* Block Styles */\r\n\r\n // These styles are already available in the \"Format\" combo (\"format\" plugin),\r\n // so they are not needed here by default. You may enable them to avoid\r\n // placing the \"Format\" combo in the toolbar, maintaining the same features.\r\n /*\r\n { name: 'Paragraph',\t\telement: 'p' },\r\n { name: 'Heading 1',\t\telement: 'h1' },\r\n { name: 'Heading 2',\t\telement: 'h2' },\r\n { name: 'Heading 3',\t\telement: 'h3' },\r\n { name: 'Heading 4',\t\telement: 'h4' },\r\n { name: 'Heading 5',\t\telement: 'h5' },\r\n { name: 'Heading 6',\t\telement: 'h6' },\r\n { name: 'Preformatted Text',element: 'pre' },\r\n { name: 'Address',\t\t\telement: 'address' },\r\n */\r\n { name: 'Title', attributes: { 'class': 'title' } },\r\n // { name: 'Heading 3', element: 'h1', attributes: { 'class': 'h3' } },\r\n // { name: 'Super paragraph',\t\telement: 'p', attributes: { 'class': 'superparagraph' } },\r\n\r\n //{ name: 'Italic Title',\t\telement: 'h2', styles: { 'font-style': 'italic' } },\r\n //{ name: 'Subtitle',\t\t\telement: 'h3', styles: { 'color': '#aaa', 'font-style': 'italic' } },\r\n //{\r\n //\tname: 'Special Container',\r\n //\telement: 'div',\r\n //\tstyles: {\r\n //\t\tpadding: '5px 10px',\r\n //\t\tbackground: '#eee',\r\n //\t\tborder: '1px solid #ccc'\r\n //\t}\r\n //},\r\n\r\n /* Inline Styles */\r\n\r\n // These are core styles available as toolbar buttons. You may opt enabling\r\n // some of them in the Styles combo, removing them from the toolbar.\r\n // (This requires the \"stylescombo\" plugin)\r\n /*\r\n { name: 'Strong',\t\t\telement: 'strong', overrides: 'b' },\r\n { name: 'Emphasis',\t\t\telement: 'em'\t, overrides: 'i' },\r\n { name: 'Underline',\t\telement: 'u' },\r\n { name: 'Strikethrough',\telement: 'strike' },\r\n { name: 'Subscript',\t\telement: 'sub' },\r\n { name: 'Superscript',\t\telement: 'sup' },\r\n */\r\n\r\n //{ name: 'Marker',\t\t\telement: 'span', attributes: { 'class': 'marker' } },\r\n\r\n //{ name: 'Big',\t\t\t\telement: 'big' },\r\n //{ name: 'Small',\t\t\telement: 'small' },\r\n //{ name: 'Typewriter',\t\telement: 'tt' },\r\n\r\n //{ name: 'Computer Code',\telement: 'code' },\r\n //{ name: 'Keyboard Phrase',\telement: 'kbd' },\r\n //{ name: 'Sample Text',\t\telement: 'samp' },\r\n //{ name: 'Variable',\t\t\telement: 'var' },\r\n\r\n //{ name: 'Deleted Text',\t\telement: 'del' },\r\n //{ name: 'Inserted Text',\telement: 'ins' },\r\n\r\n //{ name: 'Cited Work',\t\telement: 'cite' },\r\n //{ name: 'Inline Quotation',\telement: 'q' },\r\n\r\n //{ name: 'Language: RTL',\telement: 'span', attributes: { 'dir': 'rtl' } },\r\n //{ name: 'Language: LTR',\telement: 'span', attributes: { 'dir': 'ltr' } },\r\n\r\n /* Object Styles */\r\n { name: 'Button', element: 'a', attributes: { 'class': 'button' } },\r\n { name: 'Primary Button', element: 'a', attributes: { 'class': 'p-button' } },\r\n { name: 'Secondary Button', element: 'a', attributes: { 'class': 's-button' } },\r\n { name: 'More link', element: 'a', attributes: { 'class': 'more' } }\r\n //{\r\n //\tname: 'Styled image (left)',\r\n //\telement: 'img',\r\n //\tattributes: { 'class': 'left' }\r\n //},\r\n\r\n //{\r\n //\tname: 'Styled image (right)',\r\n //\telement: 'img',\r\n //\tattributes: { 'class': 'right' }\r\n //},\r\n\r\n //{\r\n //\tname: 'Compact table',\r\n //\telement: 'table',\r\n //\tattributes: {\r\n //\t\tcellpadding: '5',\r\n //\t\tcellspacing: '0',\r\n //\t\tborder: '1',\r\n //\t\tbordercolor: '#ccc'\r\n //\t},\r\n //\tstyles: {\r\n //\t\t'border-collapse': 'collapse'\r\n //\t}\r\n //},\r\n\r\n //{ name: 'Borderless Table',\t\telement: 'table',\tstyles: { 'border-style': 'hidden', 'background-color': '#E6E6FA' } },\r\n //{ name: 'Square Bulleted List',\telement: 'ul',\t\tstyles: { 'list-style-type': 'square' } }\r\n ]\r\n\r\n this.sender = sender;\r\n }\r\n\r\n show($editor) {\r\n const CKEDITOR = window['CKEDITOR'] || {};\r\n //for ckeditor\r\n // console.log('ckeditor show');\r\n try {\r\n // We need to turn off the automatic editor creation first.\r\n CKEDITOR.disableAutoInline = true;\r\n } catch (e) { }\r\n\r\n var editor = CKEDITOR.inline('cmsCurrentEditor', this.ckeditorConfig);\r\n if (!CKEDITOR.stylesSet.get('default'))\r\n CKEDITOR.stylesSet.add('default', this.ckeditorStylesSet);\r\n\r\n var self = this;\r\n editor.on('change', function (evt) {\r\n // getData() returns CKEditor's HTML content.\r\n //$(\"#cmsCurrentEditor\").addClass(\"dirtyHtml\");\r\n //const itemId = $(\"#cmsCurrentEditor\").data('cms-item-id');\r\n const ed = document.querySelector('#cmsCurrentEditor');\r\n ed.classList.add('dirtyHtml');\r\n const itemId = ed.getAttribute('data-cms-item-id');\r\n\r\n //console.log(itemId);\r\n self.sender.markDirtyHtml(itemId);\r\n //console.log('Total bytes: ' + evt.editor.getData().length);\r\n });\r\n editor.on('paste', function (evt) {\r\n //console.log(evt.data.dataValue);\r\n //evt.data.dataValue = evt.data.dataValue.replace(/ /g, '');\r\n //evt.data.dataValue = evt.data.dataValue.replace(/

<\\/p>/g, '');\r\n //editor.insertHtml(evt.data.dataValue); return false;\r\n setTimeout(function () {\r\n CKEDITOR.instances.cmsCurrentEditor.setData(CKEDITOR.instances.cmsCurrentEditor.getData());\r\n }, 100);\r\n }, null, null, 9);\r\n }\r\n\r\n close($editor = null) {\r\n const CKEDITOR = window['CKEDITOR'] || {};\r\n //console.log('ckeditor close');\r\n if (typeof CKEDITOR.instances.cmsCurrentEditor != \"undefined\")\r\n CKEDITOR.instances.cmsCurrentEditor.destroy();\r\n\r\n //for (var instance in CKEDITOR.instances) {\r\n // CKEDITOR.instances[instance].destroy();\r\n //}\r\n\r\n }\r\n}\r\n","import { CmsRadioSender } from './cms-radio-sender'\r\nimport { CmsRadioReceiver } from './cms-radio-receiver'\r\nimport { CmsHtmlEditor } from './cms-html-editor'\r\nimport env from 'env';\r\n\r\n// declare var CKEDITOR: any;\r\n// import * as $ from 'jquery';\r\n\r\n\r\nexport class CmsPageController {\r\n settings;//: any;\r\n sender;//: CmsRadioSender;\r\n receiver;//: CmsRadioReceiver;\r\n htmlEditor;//: CmsHtmlEditor;\r\n\r\n constructor() {\r\n this.settings = { root: \"body\", viewOnly: false };\r\n this.sender = new CmsRadioSender(this);\r\n this.receiver = new CmsRadioReceiver(this);\r\n this.htmlEditor = new CmsHtmlEditor(env.cmsEndpoint, this.sender);\r\n }\r\n init(options) {\r\n const $ = window['jQuery'];\r\n this.settings = Object.assign({}, /*default*/{ root: \"body\", viewOnly: false }, options);\r\n this.initGlobalVars();\r\n\r\n var self = this;\r\n $(\"[onclick]\").prop(\"onclick\", null);\r\n $(\"[dblclick]\").prop(\"dblclick\", null);\r\n $(self.settings.root).off(\"click dblclick\", \"*\");\r\n $(self.settings.root).on(\"click dblclick\", \"*\", function (e) {\r\n //$(\".cms_html_editor_img_selected\").removeClass(\"cms_html_editor_img_selected\");\r\n // console.log($(e.target).hasClass(\"allowClick\"));\r\n // console.log(e.target);\r\n\r\n if (!$(e.target).hasClass(\"allowClick\")) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n }\r\n\r\n if ($(this).attr(\"contenteditable\") === \"true\" ||\r\n $(\"#cms_html_editor_source_id\").is(\":visible\")) {\r\n e.stopPropagation();\r\n return;\r\n }\r\n if (!self.settings.viewOnly)\r\n self.selectItem($(this), false, e.type === \"dblclick\");\r\n });\r\n\r\n if (self.settings.viewOnly) return; // stop the editing logic for viewonly mode.\r\n\r\n // ctrl + s for html block\r\n $(self.settings.root).on('keydown', \"#cmsCurrentEditor\", function (e) {\r\n if (e.ctrlKey && e.which === 83) {\r\n //var itemId = $(this).data(\"cms-item-id\");\r\n //if (!itemId)\r\n // itemId = $(this).closest(\"[data-cms-item-id]\").data(\"cms-item-id\");\r\n //window.parent.cms.site.saveHtml(itemId);\r\n //e.preventDefault();\r\n\r\n self.sender.saveAllDirtyHtml(self.getAllDirtyHtml());\r\n return false;\r\n }\r\n });\r\n }\r\n\r\n selectItemFromController(id) {\r\n const $ = window['jQuery'];\r\n var item = $(\".cms_item[data-cms-item-id='\" + id + \"']\");\r\n this.scrollTo(item);\r\n this.selectItem(item, true);\r\n }\r\n\r\n selectItem($item, fromController, doubleclicked = false) {\r\n //console.log(\"select item - \" + fromController + \" - \" + doubleclicked);\r\n //console.log($item);\r\n var editor = $item.closest(\"[contenteditable]\");\r\n if (editor.length > 0)\r\n return;\r\n var cke_top = $item.closest(\".cke_top\");\r\n if (cke_top.length > 0)\r\n return;\r\n\r\n this.closeEditingItem();\r\n //console.log($item);\r\n if (typeof $item === \"undefined\") return;\r\n if ($item.length === 0) return;\r\n this.findItem($item, fromController, 0, doubleclicked);\r\n }\r\n\r\n closeEditingItem() {\r\n const $ = window['jQuery'];\r\n //console.log(\"close editing item\");\r\n $(\"[contenteditable]\").removeAttr(\"contenteditable\");\r\n $(\"#cms_hovermenu\").remove();\r\n $(\".cms_editing_item\").removeClass(\"cms_editing_item\");\r\n\r\n }\r\n\r\n findItem($item, fromController, depth, doubleclicked) {\r\n if (depth > 100) return false;\r\n // console.log($item, fromController, depth, doubleclicked)\r\n if (typeof $item.attr(\"data-cms-html\") !== \"undefined\" && $item.attr(\"data-cms-html\") === \"true\") {\r\n $item.attr(\"contenteditable\", \"true\");\r\n this.showHtmlEditor($item);\r\n }\r\n if (typeof $item.attr(\"data-cms-item-id\") !== \"undefined\") {\r\n //$item.attr(\"contenteditable\", \"true\");\r\n $item.addClass(\"cms_editing_item\");\r\n if (!fromController) {\r\n //window.parent.cms.site.selectControllerItem($item.attr(\"data-cms-item-id\"),\r\n // typeof doubleclicked != \"undefined\" && doubleclicked == true\r\n //);\r\n this.sender.selectControllerItem({\r\n id: $item.attr(\"data-cms-item-id\"),\r\n openEdit: typeof doubleclicked !== \"undefined\" && doubleclicked === true\r\n });\r\n\r\n }\r\n\r\n //show_hovermenu($item);\r\n\r\n } else {\r\n var editableParent = $item.parents(\".cms_item[data-cms-item-id], [data-cms-html]\");\r\n if (editableParent.length > 0)\r\n this.findItem(editableParent.first(), fromController, depth + 1, doubleclicked);\r\n\r\n }\r\n }\r\n\r\n sameContent(a, b) {\r\n return a === b;\r\n }\r\n\r\n showHtmlEditor($item) {\r\n const $ = window['jQuery'];\r\n var editor = $item;\r\n //console.log(editor);\r\n //var $menu = $(\"#cms_html_editor_ctrl\");\r\n ////$menu.css(\"top\", $item.offset().top - 40);\r\n ////$menu.css(\"left\", $item.offset().left);\r\n //$menu.show();\r\n //initHtmlEditor($item);\r\n\r\n if (editor.attr(\"id\") === \"cmsCurrentEditor\") return;\r\n\r\n $(\"#cmsCurrentEditor\").attr(\"id\", \"\");\r\n this.htmlEditor.close(editor);\r\n\r\n editor.attr(\"id\", \"cmsCurrentEditor\");\r\n //editor.data(\"current-content\", editor.html());\r\n\r\n this.htmlEditor.show(editor);\r\n //setHandlers($item);\r\n\r\n }\r\n\r\n\r\n initGlobalVars() {\r\n const $ = window['jQuery'];\r\n window[\"cmsPage\"] = $.extend({}, window[\"cmsPage\"] || {}, {\r\n htmleditor: {\r\n // cmsPage.htmleditor.getAnchors();\r\n getAnchors: function (opt) {\r\n //var options = $.extend({}, opt);\r\n //console.log(options);\r\n var anchors = [];\r\n\r\n $(\"a[name]\").each(function (inx, obj) {\r\n anchors.push({ id: $(obj).attr(\"id\"), name: $(obj).attr(\"name\") });\r\n });\r\n\r\n $(\"[data-cms-item-name],[data-cms-anchor]\").each(function (inx, obj) {\r\n if (typeof $(obj).attr(\"data-cms-anchor\") !== \"undefined\" && $(obj).attr(\"data-cms-anchor\") !== \"\" && $(obj).parents(\".owl-item\").length === 0) {\r\n anchors.push({ id: null, name: $(obj).attr(\"data-cms-anchor\") });\r\n } else if ($(obj).attr(\"data-cms-item-name\") !== \"\" && $(obj).parents(\".owl-item\").length === 0) {\r\n anchors.push({ id: null, name: $(obj).attr(\"data-cms-item-name\") });\r\n }\r\n });\r\n\r\n return anchors;\r\n }\r\n }\r\n });\r\n }\r\n\r\n scrollTo(target) {\r\n const $ = window['jQuery'];\r\n if (typeof target === \"undefined\") return;\r\n if ($(target).length === 0) return;\r\n var htmlbody = $('html,body');\r\n var top = 0;\r\n if ($(target).height() > $(window).height())\r\n top = $(target).offset().top;\r\n else {\r\n top = $(target).offset().top - Math.floor(($(window).height() - $(target).height()) / 2);\r\n }\r\n //console.log(top);\r\n //htmlbody.animate({ scrollTop: top }, 500, 'easeInOutQuint');\r\n htmlbody.animate({ scrollTop: top }, 500);\r\n }\r\n\r\n getCurrentHtml() {\r\n const CKEDITOR = window['CKEDITOR'] || {};\r\n try {\r\n return CKEDITOR.instances.cmsCurrentEditor.getData();\r\n } catch (e) { return \"\"; }\r\n }\r\n\r\n getAllDirtyHtml() {\r\n const $ = window['jQuery'];\r\n var self = this;\r\n var htmlChanges = [];\r\n $(\".dirtyHtml\").each(function (inx, obj) {\r\n var $section = $(obj);\r\n var content = $section.is(\"#cmsCurrentEditor\") ? // if the html editor is active, it needs to get the html from the editor.\r\n self.getCurrentHtml() : $section.html();\r\n if ($section.is(\"[data-cms-section-id]\")) {\r\n // section level?\r\n let $item = $section.closest(\"[data-cms-item-id]\");\r\n htmlChanges.push({ ItemId: $item.data(\"cms-item-id\"), SectionId: $section.data(\"cms-section-id\"), Content: content });\r\n } else if ($section.is(\"[data-cms-item-id]\")) {\r\n // section level?\r\n let $item = $section;\r\n htmlChanges.push({ ItemId: $item.data(\"cms-item-id\"), SectionId: \"Content\", Content: content });\r\n }\r\n });\r\n return htmlChanges;\r\n }\r\n\r\n getHtml(itemid: any) {\r\n const $ = window['jQuery'];\r\n this.htmlEditor.close();\r\n var self = this;\r\n var item = $(\".cms_item[data-cms-item-id='\" + itemid + \"']\");\r\n\r\n var formvals = { Content: this.cms_replace_item_html(item) };\r\n\r\n //cms_msg_progressing(\"#save_message\", \"Saving...\");\r\n if ($(\"[data-cms-section-id]\", item).length > 0) {\r\n $(\"[data-cms-section-id]\", item).each(function (inx, section) {\r\n var closestItemId = $(section).closest(\".cms_item\").data(\"cms-item-id\");\r\n if (closestItemId === itemid) {\r\n var id = $(section).attr(\"data-cms-section-id\");\r\n formvals[id] = self.cms_replace_item_html($(section)); //.find(\">:first-child\")().html();\r\n\r\n }\r\n });\r\n }\r\n return formvals;\r\n }\r\n\r\n cms_replace_item_html(item) {\r\n return item.html();\r\n // var $tmp = $(\"

\").html(item.html());\r\n // if ($tmp.find('.cms-skeleton').length > 0)\r\n // return $tmp.find('.cms-skeleton').html();\r\n // else\r\n // return item.html();\r\n //tmp.find(\".cms_ctrl_in_editor\").each(function (inx, obj) {\r\n // var ctrlid = $(obj).attr(\"data-cms-ctrl-id\");\r\n // $(obj).replaceWith(\"__cms__ctrl:\" + ctrlid + \"__\");\r\n //});\r\n //return tmp.html();\r\n }\r\n\r\n}\r\n","import React, { useEffect } from 'react';\r\nimport { useRouter } from 'components';\r\nimport { useGet } from 'components';\r\nimport { Item } from 'cms/items/item';\r\nimport env from 'env';\r\nimport { loadJs } from 'lib/net-loader';\r\nimport { CmsPageController } from 'cms/services/cms-page-controller';\r\nimport { ErrorPopup, Loading } from 'components';\r\n\r\n// function useQuery() {\r\n// return new URLSearchParams(useLocation().search);\r\n// }\r\n\r\nexport function EditPage(props) {\r\n //const [page, setPage] = useState(null);\r\n\r\n //const pageId = props.pageId;\r\n const { query } = useRouter();\r\n const { cmsViewMode = 'edit', id } = query;\r\n const pageId = id;\r\n\r\n //console.log(pageId, cmsViewMode, env.apiBase, env)\r\n\r\n const get = useGet();\r\n useEffect(() => {\r\n get.send(env.apiBase + '/api/cms/GetPage/' + pageId + '?cmsViewMode=' + cmsViewMode);\r\n // eslint-disable-next-line\r\n }, [pageId]);\r\n\r\n if (get.loading()) {\r\n return \r\n } else if (get.hasErrors()) {\r\n return \r\n }\r\n\r\n //console.log(router.pathname);\r\n //console.log(res);\r\n\r\n const pageData = get.response.data;\r\n const cmsOption = { isCmsEdit: true };\r\n \r\n const cmsPageController = new CmsPageController();\r\n if (cmsViewMode !== 'viewonly') {\r\n const ver = 1;\r\n loadJs(\r\n env.resourceBase + '/dist/jquery-3.4.1/jquery.min.js?v=' + ver\r\n ).then(data => {\r\n return loadJs(\r\n env.resourceBase + '/dist/cms/ckeditor/ckeditor.js?v=' + ver\r\n )\r\n }).then(data => {\r\n // console.log('script loaded ', data);\r\n cmsPageController.init({});\r\n document.querySelector('body').classList.add('cmsedit');\r\n }).catch(error => console.log(error));\r\n } else {\r\n const ver = 1;\r\n loadJs(\r\n env.resourceBase + '/dist/jquery-3.4.1/jquery.min.js?v=' + ver\r\n ).then(data => {\r\n cmsOption.isCmsEdit = false;\r\n cmsPageController.init({ viewOnly: true });\r\n }).catch(error => console.log(error));\r\n }\r\n\r\n //setPage(res.response.data);\r\n const sectionItems = pageData.sections.map((section, index) =>\r\n
\r\n );\r\n return (\r\n
\r\n {sectionItems}\r\n
\r\n );\r\n}\r\n\r\n\r\nfunction Section(props) {\r\n const item = props.item;\r\n //const sectionName = item.sectionName;\r\n const subItems = item.items || [];\r\n const cmsOption = props.cmsOption || {};\r\n\r\n if (!subItems || subItems.length === 0)\r\n return (<>);\r\n\r\n const subItemsElts = subItems.map((subItem, index) =>\r\n \r\n );\r\n return (\r\n <>\r\n {subItemsElts}\r\n \r\n );\r\n}\r\n\r\n","import React, {useState, useEffect} from 'react';\r\nimport { SiteLink } from 'components';\r\nimport { useStore } from 'store';\r\n\r\nimport { FaChevronDown } from 'react-icons/fa';\r\n// import { SearchBar } from './searchBar';\r\n\r\n//for #contact link\r\nimport { handleElementLink } from 'components';\r\n\r\nexport function NavBar(props) {\r\n const open = props.open;\r\n const currentLocation = props.currentLocation;\r\n const { state } = useStore();\r\n const menu = state.menu || { items: [] };\r\n const depth = 1;\r\n const menuItemElts = menu.items.map((item, index) =>\r\n \r\n );\r\n return (\r\n
\r\n {/* */}\r\n
\r\n \r\n
\r\n
);\r\n}\r\n\r\nfunction MenuItem(props) {\r\n const [subMenuOpened, setSubMenuOpened] = useState(false);\r\n const item = props.item;\r\n const subItems = item.items || [];\r\n const currentLocation = props.currentLocation;\r\n\r\n const subItemsElts = subItems.length > 0? subItems.map((subItem, index) =>\r\n \r\n ) : null;\r\n\r\n\r\n useEffect(() => {\r\n //console.log('navbar', currentLocation);\r\n setSubMenuOpened(false);\r\n }, [currentLocation])\r\n\r\n function closeMenu() {\r\n props.onCloseMenu();\r\n }\r\n\r\n function toggleSubmenu(e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n setSubMenuOpened(!subMenuOpened);\r\n }\r\n\r\n //for #contact link\r\n function handleClick(e) {\r\n e.preventDefault();\r\n e.stopPropagation(); \r\n handleElementLink(e.target);\r\n closeMenu();\r\n }\r\n\r\n return (\r\n item.url === \"#contact\" ?\r\n
  • \r\n handleClick(e)}>\r\n {item.title}\r\n \r\n
  • \r\n : \r\n
  • \r\n {\r\n item.target === '_blank' ?\r\n\r\n closeMenu()}>\r\n {item.title}\r\n :\r\n closeMenu()}>\r\n {item.title}\r\n {subItemsElts && toggleSubmenu(e)}>}\r\n \r\n }\r\n\r\n {subItemsElts &&\r\n
      \r\n {subItemsElts}\r\n
    }\r\n
  • \r\n )\r\n}\r\n\r\nfunction SubMenuItem(props) {\r\n const item = props.item;\r\n function closeMenu() {\r\n props.onCloseMenu();\r\n }\r\n\r\n return (\r\n
  • \r\n closeMenu()}>\r\n {item.title}\r\n \r\n
  • \r\n )\r\n}","import React, { useState, useEffect } from 'react';\r\nimport { useRouter } from 'components';\r\n//import { navigate, usePath, useLocationChange } from 'raviger';\r\nimport { SiteLink } from 'components';\r\nimport { NavBar } from './navBar';\r\nimport { FaAngleLeft } from 'react-icons/fa';\r\nimport { useHistory } from 'components';\r\nimport utils from 'utils';\r\n\r\nexport function TopHeader(props) {\r\n\r\n const { pathname } = useRouter();\r\n //const path = usePath();\r\n const [menuOpened, setMenuOpened] = useState(false);\r\n const [currentLocation, setCurrentLocation] = useState(pathname);\r\n const [scrolled, setScrolled] = useState(false);\r\n\r\n //const [scrolled, setScrolled] = useState(false)\r\n // const history = useHistory();\r\n // console.log(history.length, history)\r\n\r\n const history = useHistory(pathname);\r\n\r\n const routeChanged = (path, history) => {\r\n //console.log(path, history);\r\n //console.log(window.location.hash)\r\n const hash = window.location.hash;\r\n const search = window.location.search;\r\n history.push(path + hash + search)\r\n\r\n if (hash) { scrollTo(); }\r\n }\r\n\r\n useEffect(() => {\r\n scrollTo();\r\n \r\n if(window.scrollY >= 100){\r\n setScrolled(true);\r\n }\r\n\r\n window.addEventListener('scroll', function(){\r\n if(window.scrollY >= 100 ){\r\n setScrolled(true);\r\n }\r\n else{\r\n setScrolled(false);\r\n } \r\n //console.log(\"ABCsdfsdfd\", this.window.scrollY);\r\n });\r\n\r\n }, []);\r\n\r\n //const pageChanged = useCallback(path => routeChanged(path, history), [history])\r\n // useLocationChange(path => {\r\n // routeChanged(path, history);\r\n // setCurrentLocation(path);\r\n // })\r\n\r\n useEffect(() => {\r\n routeChanged(pathname, history);\r\n setCurrentLocation(pathname);\r\n // eslint-disable-next-line\r\n }, [pathname]);\r\n\r\n function scrollTo() {\r\n const hash = window.location.hash;\r\n if (hash) {\r\n //console.log(hash)\r\n setTimeout(() => {\r\n const anchor = utils.ui.findElement(hash);\r\n if (anchor)\r\n utils.ui.scrollTo(anchor, 500);\r\n }, 500)\r\n }\r\n }\r\n\r\n function toggleMenu(e) {\r\n setMenuOpened(!menuOpened);\r\n }\r\n\r\n function onCloseMenu() {\r\n setMenuOpened(false);\r\n }\r\n\r\n function goBack(e) {\r\n //e.preventDefault();\r\n history.getPrevious();\r\n //console.log(previousLink)\r\n }\r\n\r\n // useEffect(() => {\r\n // console.log('use history')\r\n // }, []);\r\n\r\n// console.log(history.history)\r\n\r\n return (\r\n <>\r\n {/*
    */}\r\n
    \r\n {\r\n history.history.length > 1 && \r\n \r\n BACK\r\n \r\n } \r\n \r\n {/*
    */}\r\n\r\n \r\n \"logo\"\r\n \r\n {/*
    */}\r\n \r\n\r\n \r\n
    \r\n \r\n );\r\n}","import React from 'react';\r\nimport { useRouter } from 'components';\r\nimport { SiteLink } from 'components';\r\n\r\nexport function BottomDock(props) {\r\n const links = [\r\n { url: '/', title: 'HOME' },\r\n { url: '/about', title: 'ABOUT' },\r\n { url: '/software', title: 'SOFTWARE' },\r\n { url: '/faq', title: 'FAQ' },\r\n { url: '/contact', title: 'CONTACT' }\r\n ];\r\n\r\n //const path = usePath();\r\n const { pathname } = useRouter();\r\n\r\n const isCurrent = (link) => {\r\n return pathname && pathname.toLowerCase() === link.toLowerCase();\r\n }\r\n\r\n const linkElts = links.map((link, index) =>\r\n
  • \r\n \r\n
    \r\n
    {link.title}
    \r\n
    \r\n
  • \r\n );\r\n\r\n // const bottomMenu = useRef(null);\r\n // useLayoutEffect(() => {\r\n // console.log('useLayoutEffect');\r\n // const slider = new BottomSlider(bottomMenu.current);\r\n // setTimeout(() => slider.init(), 1000)\r\n // }, [])\r\n\r\n return (\r\n <>\r\n {/* ref={bottomMenu} */}\r\n \r\n {/*
    */}\r\n \r\n \r\n );\r\n}\r\n","import React from 'react';\r\nimport { useStore } from 'store';\r\nimport FsLightbox from 'fslightbox-react';\r\n\r\nexport function CommonVideoPopup(props) {\r\n const { state } = useStore();\r\n\r\n const [toggler, setToggler] = React.useState(false);\r\n const [sources, setSources] = React.useState([]);\r\n const [popupIndex, setPopupIndex] = React.useState(0);\r\n\r\n const popup = state.popup;\r\n //console.log(popup, JSON.stringify((popup && popup.sources) || []), JSON.stringify(sources), (popup && popup.popupIndex), popupIndex)\r\n if (JSON.stringify((popup && popup.sources) || []) !== JSON.stringify(sources) ||\r\n ((popup && popup.popupIndex) || 0) !== popupIndex) {\r\n setSources(popup.sources);\r\n setPopupIndex(popup.popupIndex);\r\n setTimeout(() => { setToggler(!toggler) }, 10)\r\n } else {\r\n\r\n }\r\n //console.log(toggler, popupIndex, sources)\r\n return (\r\n
    \r\n {\r\n }}\r\n />\r\n
    \r\n\r\n );\r\n}","import React from 'react';\r\nimport { BrowserRouter as Router, Switch, Route, Redirect } from 'react-router-dom';\r\nimport { useRouter } from 'components';\r\nimport { StoreProvider } from 'store';\r\nimport { ViewPage } from './cms/pages/viewPage/viewPage';\r\nimport { EditPage } from './cms/pages/editPage/editPage';\r\nimport { TopHeader } from './layout/topHeader/topHeader';\r\n//import { Footer } from './layout/footer/footer';\r\nimport { BottomDock } from './layout/bottomDock/bottomDock';\r\n// import { BlogView } from './site/blog/blogView';\r\nimport { useScrollPosition } from '@n8tb1t/use-scroll-position';\r\nimport { useParallax } from 'components';\r\nimport { AppVersionPage } from 'components';\r\nimport { MediaQueryStatus } from 'components';\r\nimport { CommonVideoPopup } from \"./layout/popup/commonVideoPopup\";\r\nimport { HelmetProvider } from 'react-helmet-async';\r\n\r\nfunction PageUpdated() {\r\n const { pathname } = useRouter();\r\n const parallax = useParallax();\r\n\r\n React.useLayoutEffect(() => {\r\n window.scrollTo(0, 0);\r\n parallax.reset();\r\n // eslint-disable-next-line\r\n }, [pathname]);\r\n return null;\r\n}\r\n\r\nfunction AppLayout(props) {\r\n const { pathname } = useRouter();\r\n //const [scrolled, setScrolled] = useState(false)\r\n //const path = usePath();\r\n //const routeResult = useRoutes(routes);\r\n\r\n // const parallax = useParallax();\r\n // //console.log(path, routeResult);\r\n // const routeChanged = (path) => {\r\n // //console.log(path);\r\n // parallax.reset();\r\n // }\r\n\r\n useScrollPosition(({ prevPos, currPos }) => {\r\n //console.log(currPos.x)\r\n //console.log(currPos.y);\r\n if (currPos.y > 90) {\r\n document.querySelector('body').classList.add('scrolled')\r\n } else {\r\n document.querySelector('body').classList.remove('scrolled')\r\n }\r\n //setScrolled(currPos.y > 90)\r\n }, [], null, true)\r\n\r\n //const pageChanged = useCallback(path => routeChanged(path), [])\r\n //useLocationChange((path) => { routeChanged(path, history)})\r\n //useLocationChange(path => routeChanged(path))\r\n\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 \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\nfunction App() {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default App;\r\n","// This optional code is used to register a service worker.\r\n// register() is not called by default.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on subsequent visits to a page, after all the\r\n// existing tabs open on the page have been closed, since previously cached\r\n// resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model and instructions on how to\r\n// opt-in, read https://bit.ly/CRA-PWA\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.0/8 are considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n);\r\n\r\nlet serviceUpdateCheckerInterval = null;\r\n\r\nexport function register(config) {\r\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Let's check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl, config);\r\n\r\n // Add some additional logging to localhost, pointing developers to the\r\n // service worker/PWA documentation.\r\n navigator.serviceWorker.ready.then(() => {\r\n console.log(\r\n 'This web app is being served cache-first by a service ' +\r\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\r\n );\r\n });\r\n } else {\r\n // Is not localhost. Just register service worker\r\n registerValidSW(swUrl, config);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW(swUrl, config) {\r\n navigator.serviceWorker\r\n .register(swUrl, {updateViaCache: 'none'})\r\n .then(registration => {\r\n // https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerRegistration\r\n console.log('Service Worker registration successful with scope: ', registration.scope);\r\n \r\n // Regular checking service worker\r\n if (serviceUpdateCheckerInterval) { try { clearInterval(serviceUpdateCheckerInterval) } catch (e) { } }\r\n serviceUpdateCheckerInterval = setInterval(() => {\r\n console.log('Checking SW updates...')\r\n registration.update();\r\n }, 1/*hour(s)*/ * 10/*minutes*/ * 60 * 1000);\r\n\r\n window.updateSW = function() {\r\n console.log('Checking SW updates... (force)')\r\n return registration.update();\r\n }\r\n \r\n // When the user asks to refresh the UI, we'll need to reload the window\r\n var preventDevToolsReloadLoop = false;\r\n navigator.serviceWorker.addEventListener('controllerchange', function (ev) {\r\n console.log('Service Worker controller change', ev)\r\n // Ensure refresh is only called once.\r\n // This works around a bug in \"force update on reload\".\r\n if (preventDevToolsReloadLoop) return;\r\n preventDevToolsReloadLoop = true;\r\n window.location.reload();\r\n });\r\n\r\n // onNewServiceWorker(registration, function () {\r\n // console.log('onNewServiceWorker', registration)\r\n // alert('New Update Available');\r\n \r\n // console.log('User okay to update', registration);\r\n // if (!registration.waiting) {\r\n // // Just to ensure registration.waiting is available before calling postMessage()\r\n // return;\r\n // }\r\n // registration.waiting.postMessage({ type: 'SKIP_WAITING' });\r\n\r\n // console.log('show refresh')\r\n // });\r\n \r\n registration.onupdatefound = () => {\r\n console.log('registration.onupdatefound', registration.installing)\r\n const installingWorker = registration.installing;\r\n if (installingWorker == null) {\r\n return;\r\n }\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the updated precached content has been fetched,\r\n // but the previous service worker will still serve the older\r\n // content until all client tabs are closed.\r\n console.log(\r\n 'New content is available and will be used when all ' +\r\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\r\n );\r\n\r\n // Execute callback\r\n if (config && config.onUpdate) {\r\n config.onUpdate(registration);\r\n }\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log('Content is cached for offline use.');\r\n\r\n // Execute callback\r\n if (config && config.onSuccess) {\r\n config.onSuccess(registration);\r\n }\r\n }\r\n }\r\n };\r\n };\r\n })\r\n .catch(error => {\r\n console.error('Error during service worker registration:', error);\r\n });\r\n\r\n navigator.serviceWorker.ready.then(function (registration) {\r\n console.log('Service Worker ready');\r\n });\r\n}\r\n\r\n\r\n// function onNewServiceWorker(registration, callback) {\r\n// if (registration.waiting) {\r\n// console.log('onNewServiceWorker-registration.waiting')\r\n// // SW is waiting to activate. Can occur if multiple clients open and one of the clients is refreshed.\r\n// return callback();\r\n// }\r\n\r\n// function listenInstalledStateChange() {\r\n// console.log('listenInstalledStateChange', registration.installing)\r\n// registration.installing.addEventListener('statechange', function (event) {\r\n// console.log('listenInstalledStateChange - statechange', event)\r\n// if (event.target.state === 'installed') {\r\n// // A new service worker is available, inform the user\r\n// callback();\r\n// }\r\n// });\r\n// };\r\n\r\n// if (registration.installing) {\r\n// console.log('onNewServiceWorker-registration.installing')\r\n// return listenInstalledStateChange();\r\n// }\r\n\r\n// // We are currently controlled so a new SW may be found...\r\n// // Add a listener in case a new SW is found,\r\n// registration.addEventListener('updatefound', listenInstalledStateChange);\r\n// }\r\n\r\n\r\nfunction checkValidServiceWorker(swUrl, config) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl, {\r\n headers: { 'Service-Worker': 'script' }\r\n })\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n const contentType = response.headers.get('content-type');\r\n if (\r\n response.status === 404 ||\r\n (contentType != null && contentType.indexOf('javascript') === -1)\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl, config);\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\r\n 'No internet connection found. App is running in offline mode.'\r\n );\r\n });\r\n}\r\n\r\nexport function unregister() {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister();\r\n });\r\n }\r\n}\r\n","import 'react-app-polyfill/ie11';\r\nimport 'react-app-polyfill/stable';\r\nimport './polyfill';\r\n\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport './_scss/index.scss';\r\nimport App from './App';\r\nimport * as serviceWorker from './serviceWorker';\r\nReactDOM.render(, document.getElementById('root'));\r\n//ReactDOM.hydrate(, document.getElementById('root'));\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\nserviceWorker.register({\r\n onUpdate: (registration) => {\r\n console.log('updated');\r\n const update = window.confirm('New Update Available. Do you want to update? (Refresh page)');\r\n if (update){\r\n if (!registration.waiting) {\r\n // Just to ensure registration.waiting is available before calling postMessage()\r\n return;\r\n }\r\n registration.waiting.postMessage({ type: 'SKIP_WAITING' });\r\n \r\n }\r\n }\r\n});\r\n"],"sourceRoot":""}