{"version":3,"sources":["site/gallery/config.js","site/tileList/config.js","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/auth/services/authHelper.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/media.js","lib/utils-core/index.js","lib/css-emotion/breakpoints.js","lib/css-emotion/mixin.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/store/reducers.js","lib/store/storeProvider.js","store/index.js","lib/router/useHistoryStore.js","lib/router/handleLink.js","lib/router/siteLink.js","lib/instagram-feed/feedStyle.js","lib/instagram-feed/feed.js","lib/utils-core/debounce.js","lib/youtube/iframeApi.js","lib/youtube/youtubeEmbedPopup.js","auth/services/authHelper.js","lib/net-api/fetch.js","auth/services/useAuth.js","auth/controls/loginStatus/statusStyle.js","auth/controls/login/login.js","layout/menuLoader.js","layout/dashboardLayout.js","layout/dashboardNoAuthLayout.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","site/members/profile/changePassword.js","site/_editor/editorStyle.js","auth/controls/forgotPassword/forgotPassword.js","auth/controls/resetPassword/resetPassword.js","auth/controls/signupSteps/cartPayment/payStyle.js","auth/controls/signupSteps/_priceData.js","auth/controls/signupSteps/monthlyOrYearly.js","auth/controls/signupSteps/monthlyOrYearlyStyle.js","auth/controls/signupSteps/cartPayment/pay.js","auth/controls/signupSteps/cartPayment/payStripe.js","auth/controls/verifyEmail/verifyEmail.js","auth/controls/createAccount/createAccount.js","layout/memberLayout.js","components/notFound/noPermission.js","layout/permissionCheckFirst.js","site/bannerSize/bannerSize.js","site/singleBanner/singlePanel.js","site/singleBanner/singlePanelStyle.js","site/_helpers/dateTime.js","site/portal/portal.js","site/_popup/popup.js","site/_popup/popupStyle.js","site/_helpers/formError.js","site/_helpers/useIsMounted.js","site/event/eventView/register/registerForm.js","site/event/eventView/register/registerPopup.js","site/event/eventView/eventDetails.js","site/event/eventView/eventView.js","site/_cmsItems/cmsUtils.js","site/tileList/tileList.js","site/tileList/tileListStyle.js","site/_cmsItems/pageTiles/view/pageTile/pageTile.js","site/_cmsItems/pageTiles/view/pageTile/pageTileStyle.js","site/members/category/categoryTiles.js","site/members/dashboard/dashboardLoading.js","site/_cmsItems/code-dashboard/render.js","site/_cmsItems/code-dashboardV2/render.js","site/_cmsItems/code-instagram/render.js","site/_offline/index.js","lib/tracking/gtm.js","site/button/buttonStyle.js","site/button/formButton.js","site/_cmsItems/code-subscribe/subscribe.js","site/_cmsItems/code-subscribe/subscribeFormModel.js","site/_cmsItems/code-subscribe/render.js","site/ecm/category/categoryTiles.js","site/ecm/category/categoryTilesLoading.js","site/_cmsItems/ecmProductList/view/categoryList.js","site/_cmsItems/ecmProductList/render.js","site/event/eventList/tile/eventTile.js","site/event/eventList/tile/pageTileStyle.js","site/event/eventList/eventTiles.js","site/event/eventList/eventTilesLoading.js","site/_cmsItems/eventList/view/eventList.js","site/_cmsItems/eventList/render.js","site/members/guide/guideTiles.js","site/members/guide/guideTilesLoading.js","site/ecm/guide/productTile/addToCart.js","site/ecm/guide/productTile/renderHtml.js","site/ecm/guide/productTile/productTile.js","site/ecm/guide/productTile/pageTileStyle.js","site/ecm/guide/guideTiles.js","site/ecm/guide/guideTilesLoading.js","site/_cmsItems/guideList/view/guideList.js","site/_cmsItems/guideList/render.js","site/_cmsItems/html/view/renderHtml.js","site/_cmsItems/html/view/html.js","site/_cmsItems/html/render.js","site/useParallax/useParallax.js","site/_cmsItems/imagePanel/view/imagePanel.js","site/_cmsItems/imagePanel/view/imagePanelStyle.js","site/_cmsItems/imagePanel/render.js","site/_cmsItems/memberDashboard/view/memberDashboard.js","site/_cmsItems/memberDashboard/render.js","site/_cmsItems/memberDashboardV2/view/memberDashboardV2.js","site/_cmsItems/memberDashboardV2/render.js","site/members/guide/guideTilesLoadingV2.js","site/_cmsItems/newCategoryList/view/newCategoryList.js","site/_cmsItems/newCategoryList/render.js","site/_cmsItems/pageTiles/view/pageTiles.js","site/_cmsItems/pageTiles/render.js","site/_cmsItems/panel/view/panel.js","site/_cmsItems/panel/render.js","site/gallery/galleryTiles.js","site/gallery/galleryStyle.js","site/gallery/gallery.js","site/_cmsItems/photoGallery/view/photoGallery.js","site/_cmsItems/photoGallery/render.js","site/shareButtons/shareButtons.js","site/shareButtons/shareButtonStyle.js","site/_cmsItems/sharingIcons/view/sharingIcons.js","site/_cmsItems/sharingIcons/render.js","site/_cmsItems/signupForm/view/signupForm.js","site/_cmsItems/signupForm/view/signupFormModel.js","site/_cmsItems/signupForm/render.js","lib/youtube/youtubeBanner--mobilePopup.js","site/_cmsItems/videoPanel/view/videoPanel.js","site/_cmsItems/videoPanel/render.js","site/_cmsItems/items-generated.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/tiles/bsyc/style.js","components/tiles/bsyc/view.js","cms/items/singleBanner/view.js","cms/items/contactForm/contactForm.js","cms/items/contactForm/contactFormModel.js","cms/items/contactForm/view.js","cms/items/VideoPanel/view.js","site/searchResult/searchResult.js","components/TextWithJavaScript/view.js","cms/items/code/view.js","cms/items/blogPosts/view.js","cms/items/blogPostTitle/view.js","cms/items/videoHolder/view.js","cms/items/videoItem/view.js","cms/items/multiColumnPanel/view.js","cms/items/expandableHtml/view.js","components/photoGallery/style.js","components/photoGallery/view.js","components/testimonial/testimonialPanel/style.js","components/testimonial/testimonialItem/style.js","components/testimonial/testimonialItem/view.js","components/testimonial/testimonialPanel/view.js","components/expandablePanel/style.js","components/expandablePanel/view.js","site/ecm/productList/productTileStyle.js","site/ecm/productList/productTile.js","site/ecm/productList/productItems.js","site/ecm/productList/categoryListModel.js","site/ecm/orderDetails/orderDetailsStyle.js","site/ecm/gtm.js","site/ecm/orderDetails/promoApplied.js","site/ecm/orderDetails/orderDetails.js","site/ecm/cart/cartStyle.js","site/ecm/cartStep/stepStyle.js","site/ecm/cartStep/stepNav.js","site/ecm/cartOrderItems/orderItemStyle.js","site/ecm/cartSummary/summaryStyle.js","site/ecm/cartSummary/summary.js","site/ecm/cartOrderItems/promoStyle.js","site/ecm/cartOrderItems/promoCodeForm.js","site/ecm/cartOrderItems/promoApplied.js","site/ecm/cartOrderItems/orderItems.js","site/ecm/cartOrderItems/orderItemFormData.js","auth/controls/login/loginForm.js","auth/controls/createAccount/createAccountForm.js","site/ecm/cartShipping/detailsForm.js","site/ecm/cartShipping/shipping.js","site/ecm/cartPayment/payStyle.js","site/ecm/cartPayment/pay.js","site/ecm/cartPayment/payStripe.js","site/ecm/cart/cart.js","site/ecm/cart/useStep.js","cms/items/ecm/view.js","cms/items/item.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/memberMenu.js","layout/cartLoader.js","layout/topHeader/searchBar.js","layout/topHeader/navBar.js","layout/backButton/backButtonStyle.js","layout/backButton/backButton.js","layout/hamburger/hamburgerStyle.js","layout/hamburger/hamburger.js","layout/topHeader/topHeaderStyle.js","layout/topHeader/topHeader.js","layout/bottomDock/bottomDock.js","layout/popup/commonVideoPopup.js","AppRouteChanged.js","site/ecm/product/productViewStyle.js","cms/pages/partials/viewPartial.js","site/ecm/product/addToCart.js","site/ecm/product/productView.js","site/ecm/product/enquiryFormModel.js","App.js","serviceWorker.js","index.js"],"names":["exports","settings","breakpointNames","numOfTilesPerBreakpoints","marginLR","marginTB","slickSettings","dots","infinite","speed","autoplaySpeed","autoplay","slidesToShow","slidesToScroll","responsive","breakpoint","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","REACT_APP_COUNTRY_LOCALE","hostname","toLowerCase","indexOf","search","getCountry","siteName","titleSuffix","siteCode","apiBase","resourceBase","baseOrigin","origin","GATSBY_BASEURL","getBaseUrl","cmsEndpoint","ver","updateDate","stripeKey","recaptchaSiteKey","console","log","getDevCartId","cartId","localStorage","getItem","setDevCartId","setItem","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","blueColor","darkGray","greenColor","breakpoints","cssEmotion","firebaseSettings","apiKey","authDomain","projectId","storageBucket","messagingSenderId","appId","apiNetJwt","options","a","Promise","resolve","reject","unsubscribe","firebase","onAuthStateChanged","user","getIdToken","idToken","token","headers","iconColors","siteConfig","primary","secondary","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","currentPath","pathname","linkFiltered","replace","linkLower","isExternal","isHash","isTel","isMailTo","url","path","i","exts","isStaticFile","ext","getExtension","filename","split","pop","getFilename","getFolderPath","parentDepth","slice","join","toQueryString","params","Object","keys","encodeURIComponent","getYoutubeId","undefined","getSlug","text","getWebUrl","schema","getErrors","result","forEach","err","errorMessage","getErrorMessage","convertToObject","array","reduce","obj","item","convertToKeyValues","value","moveItem","list","fromIndex","toIndex","splice","removed","removeItem","insertItem","find","fn","findIndex","contains","distinct","comparer","filtered","x","sum","total","equal","list1","list2","found","j","caseInsensitiveCompare","b","localeCompare","compareIgnoreEmpty","asc","isNaN","addDays","date","days","Date","setDate","getDate","formatYYYYMMDD","dateObj","toDate","dd","mm","getMonth","yyyy","getFullYear","formatDDMMYYYY","parseDate","parseISO","toDateTime","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","toFieldName","trim","toHtml","truncateWords","maxLen","separator","ellipsis","pos","lastIndexOf","substr","numberWithCommas","parts","toString","registerPlugin","ScrollToPlugin","formatNumber","Math","round","toTelephoneNumber","like","shortId","shortid","guid","uuid","toCamel","o","newO","origKey","newKey","hasOwnProperty","constructor","getImageSetPath","setId","info","getPathDetails","baseFolder","setIds","lastFolder","classNames","form","ui","money","random","object","media","mq","facepaint","bp","mqMin","mqMax","mediaQuery","matchMedia","isMin","isMax","overlay","content","isMobile","md","resourcePath","utils","fullUrl","isNZ","getCategoryShopUrl","isCategoryShopUrl","toHoursText","mins","h","floor","m","hText","mText","coreUtils","site","useApi","response","setResponse","setErrors","setStatus","request","setRequest","fetch","res","ok","json","statusText","JSON","fetchData","hasErrors","containsErrorMessage","msg","finding","some","addErrors","errs","done","send","sendRaw","httpOptionFn","args","setResult","reset","usePost","formDataFn","data","method","post","stringify","sending","sendFormData","useGet","get","MediaQueryStatus","MetaTag","seoData","assign","description","name","keywords","language","country","faceBookDomainVerifi","heroImageUrl","rel","canonical","alternates","hreflang","MAX","MIN","getScrollProgress","scroll","scrollY","progress","boundsTop","viewport","bounds","setClass","pr","range","prVal","min","max","y","removeTransform","getScreenSize","defaultHolder","storeName","loadJs","promises","scripts","script","loadScript","all","holder_","forceToReload","holder","networkLoaded","existing","createElement","src","onload","onerror","getElementsByTagName","appendChild","defaultSettings","cutoffPadding","ParallaxData","screenSize","panels","imageRatio","panelHeight","elements","timeoutId","useParallax","handleScroll","element","au","calculated","fromTop","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","initialState","page","menu","popup","reducer","state","action","payload","Error","StoreContext","createContext","StoreProvider","useReducer","dispatch","Provider","useStore","useContext","initialState_","cartInfo","reducer_","useHistoryStore","loc","setHistory","last","handleElementLink","externalHandler","linkInfo","handled","SiteLink","target","other","goToLink","stopPropagation","tiles","marginLeft","marginRight","flexWrap","tile","flexBasis","cursor","tileImage","mixin","backgroundColor","tileIcon","InstagramFeed","Feeds","posts","numOfPost","xs","sm","lg","xl","xxl","displayingPosts","Feed","alt","debounce","ms","_","apply","arguments","loadApi","onApiReady","YT","tag","onYouTubeIframeAPIReady","firstScriptTag","insertBefore","thumbnailMax","videoId","getYoutubeCode","YoutubeEmbedPopup","posterUrl","yt","posterImageUrl","popupIndex","setPopupIndex","backgroundImage","sources","getFirebaseUser","fetchPost","signal","errMessages","authContext","ProvideAuth","auth","queryStatus","memberInfo","authData","setAuthData","setUser","isResolved","currentFirebaseUser","loggedIn","signin","email","password","signInWithEmailAndPassword","uid","displayName","emailVerified","signup","createUserWithEmailAndPassword","signout","signOut","sendPasswordResetEmail","confirmPasswordReset","code","setMemberInfo","useProvideAuth","useAuth","lighten","Login","username","setUsername","setPassword","setError","pending","setPending","router","noValidate","onSubmit","catch","htmlFor","id","required","autoFocus","autoComplete","onChange","event","MenuLoader","loadingStatus","setLoadingStatus","setData","DashboardLayout","isCancelled","useRef","sessionChecked","setSessionChecked","current","checkAuth","DashboardLayoutRoute","RenderComponent","component","rest","render","matchProps","DashboardNoAuthLayoutRoute","findControl","controlNameOrIndex","root","controls","findControlTraverse","controlName","control","getValue","getValueTraverse","helperFns","getFilesTraverse","getKeyValueTraverse","keyValue","controlType","customValueFn","files","findIndexById","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","onKeyDown","onBlur","placeholder","checked","optionValue","includes","DateSeparateInput","thisYear","year","setYear","month","setMonth","day","setDay","handleChangeInner","persist","months","selectStyle","fromYear","recentYear","handleChangeDay","handleChangeMonth","handleChangeYear","FileInput","Components","RadioListInput","option","inline","TextareaInput","textAreaRef","textAreaHeight","setTextAreaHeight","parentHeight","setParentHeight","scrollHeight","rows","ref","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","formBlock","fontWeight","marginBottom","returnLink","actions","labelHelp","ChangePassword","paddingBottom","SessionEditForm","profile","sendingStatus","setSendingStatus","getFormData","save","fb","confirmPassword","ForgotPassword","size","ResetPassword","u","pay","stripeWrapper","formActions","paymentInfoText","priceData","standard","monthly","yearly","pro","MonthlyOrYearly","subsType","per","setPer","container","paddingLeft","paddingRight","paddingTop","flex","border","rgba","optionSelected","icon","header","textAlign","priceBlock","price","Pay","payVM","getSelection","stripe","setStripe","card","setCard","Stripe","create","base","fontFamily","fontSmoothing","invalid","iconColor","mount","initStripe","results","OrderIdToken","subscriptionType","createToken","tokenId","VerifyEmail","CreateAccountLoading","CreateAccount","setConfirmPassword","corporateId","MemberLayout","exact","NoPermission","PermissionCheckFirst","redirectUrl","accessResultCode","mqBanner","bannerThin","bannerStandard","getBannerSize","setName","SingleBannerPanel","heightSet","photoCredit","photoCreditUrl","cssClass","bannerSize","bannerHeight","transformOrigin","getImageBannerStyle","data-pxh","getAESTDate","formatStr","getZonedTimeFormat","timeZone","zonedTime","utcToZonedTime","Portal","getElementById","removeChild","createPortal","Popup","showPopup","onClosed","popupSize","visibility","show","sizemedium","sizesmall","overflowY","close","Fragment","FieldError","ServerErrors","yup","shape","nullable","firstName","surname","phone","numberOfTickets","typeError","RegisterForm","registered","setRegistered","currentCartItems","setCurrentCartItems","defaultValues","register","useAddToCart","eventType","resolver","yupResolver","formState","isSubmitting","handleSubmit","serverErrors","setServerErrors","eventId","numberOfItems","RegisterPopup","eventTitle","EventDetails","timeZones","tz","DateTimeFormat","resolvedOptions","getCurrentTimeZone","area","timeText","fromDate","formatFn","getTimeTextForTimeZone","startDateTime","endDateTime","filter","others","getTimeZones","fullyBooked","numOfPlaces","usedNumOfPlaces","Book","setShowPopup","priceEl","EventView","slug","defaultVal","payloads","hasItemInPageData","pageData","matchFn","sections","hasItemInItems","items","getCodeJson","hasItemInPageDataByItemTypeCode","itemTypeCode","TileList","overridingStyle","useSlider","ss","tilesSlider","getTileListStyle","PageTile","tileLink","disableLink","pageTitle","desc","tileDesc","flexGrow","flexShrink","flexDirection","textDecoration","tileSlider","tileBg","backgroundPosition","backgroundRepeat","tileContent","lineHeight","textTransform","WebkitLineClamp","WebkitBoxOrient","overflow","getTileStyle","CategoryTiles","categories","pages","categoryName","tileTitle","tileImageUrl","getPages","DashboardLoading","version","setCorporate","newCategories","renderRule","cmsOption","cmsUtils","isCmsEdit","itemElt","navigator","onLine","hasGTM","dataLayer","pageView","pageOpt","sendEvent","eventName","sendGAEvent","category","buttonColor","baseStyle","appearance","webkitAppearance","darken","buttonBg","borderRadius","buttonTxt","smallStyle","letterSpacing","FormButton","Subscribe","gtm","contactEmail","colorBlue","CategoryTilesLoading","CategoryList","anchorName","data-cms-item-id","itemId","EventTile","eventSlug","shortDesc","datetime","EventTiles","events","acc","getAESTMonth","sort","getMonths","MonthEventTiles","EventTilesLoading","EventList","GuideTiles","guides","guideTitle","GuideTilesLoading","AddToCart","product","exists","orderItems","guideId","checkExists","node","attribs","attributesToProps","replaceImg","class","domToReact","replaceButton","_embedDataList","codeType","renderHtml","replaceEmbedCode","html","ProductTile","tileEcm","ProductPopup","addToCart","image","ecmDescription","objectFit","getProducts","GuideList","requestPath","_cmsOption","cmsViewMode","embedDataList","Html","htmlBlock","data-cms-html","processed","_href","setAttribute","handleClick","panelRef","_settings","paddingHeightRatio","stretchToFit","actionRange","cutTop","cutBottom","getSettings","onScroll","bgHeight","bgWidth","cutTopPx","cutBottomPx","onResize","ImagePanel","hideTop","hideBottom","pageOptions","imagePath","cssClass2","parallaxSetting","backgroundPositionX","MemberDashboard","MemberDashboardV2","GuideTilesLoadingV2","NewCategoryList","PageTiles","pagesSerialized","Panel","subItems","backgroundTile","bgTheme","subItemsElts","subItem","Item","GalleryTiles","images","openPopupImage","img","ImageTile","getImageTileStyle","thumbnailUrl","set","Gallery","toggler","setToggler","popupImages","galleryImages","caption","sourceIndex","PhotoGallery","ShareButtons","shareUrl","topLabel","shareButtons","shareButtonTitle","shareButton","FacebookShareButton","FacebookIcon","WhatsappShareButton","WhatsappIcon","EmailShareButton","subject","EmailIcon","SharingIcons","SignupForm","emailReceiver","fileAttachment","attachments","formData","FormData","append","file","uploadFile","YoutubeBannerMobilePopup","youtubeBannerRef","playerStatus","setPlayerStatus","playerSize","setPlayerSize","ytPlayer","setYtPlayer","muted","setMuted","countPlayedRef","popupOpened","setPopupOpened","video","videoLinkOrId","playerId","mobileImageUrl","canPlayVideo","loadVideo","containerSize","w","getSize","player","Player","PlayerState","ENDED","countPlayed","playVideo","mute","resized","canPlay","allow","frameBorder","pauseVideo","unMute","channel","isOpen","onClose","VideoPanel","videoCode","posterFrameUrl","code_dashboard","code_dashboardV2","code_instagram","code_subscribe","ecmProductList","eventList","guideList","imagePanel","memberDashboard","memberDashboardV2","newCategoryList","pageTiles","photoGallery","sharingIcons","signupForm","BannerPanel","slides","fade","BannerItem","captionTitle","captionButton","linkUrl","titlePanel","linkOverlay","block","embed","ReactDOM","replaceEmbedCodes","buttons","restructureButton","span","innerHTML","pageTile__tile","order","tile__content","tile__flip__wrapper","tile__bg","tile__bg2","tile__details","PageTilesBsyc","pageTileElts","Tile","idx","colorTheme","data-aos","SingleBanner","alignV","Contact","enquiry","recaptchaRef","sitekey","recaptchaValue","ContactForm","SearchResult","keyword","q","PageList","searchHighlight","TextWithJavScript","javaScriptCode","substring","nonjavaScriptCode","javaScriptTopCode","javaScriptInsideCode","_src","async","defer","_functionName","functionName","Code","codeJson","BlogPosts","numOfTileLines","parseInt","tilesPerLine","step","tilesToShow","setTilesToShow","showMore","BlogPostTitle","postDate","VideoHolder","VideoItem","youtubeCode","captionTitleYoutube","MultiColumnPanel","reverse","columnWidths","mobileColumnWidths","countItem","countD","countM","col","ExpandableHtml","open","setOpen","buttonTitle","iconOpen","iconClosed","panelCollapsed","panelOpen","thumbnails","thumbnail","bg","_images","_thumbImages","_texts","_text","testimonialPanel","testimonialItem","testimonialItem_title","testimonialItem_desc","testimonialItem_bottom","TestimonialItem","startRatingColor","ratingValue","rating","TestimonialPanel","testimonialItems","exTextItem","ExpandablePanel","data-anchor-status","data-cms-item-anchor","numberOfTiles","widthPercent","linkText","tileListStyle","categoryList","tileStyle","prdImage","shortDes","productUrl","productSlug","productName","productStatus","productStatusText","priceTextOveriding","priceIncTax","ProductItems","Items","categoryId","getCategoryListModel","categoryListForm","_items","sortProudcts","favorites","productId","productCategories","seqInCategory","seq","setShowProducts","showProducts","orderDetails","summary","minWidth","fv","orderItem","borderBottom","sendPurchaseEvent","orderId","alreadySent","ecm","purchase","actionField","affiliation","revenue","totalAmount","tax","taxAmount","shipping","shippingAmount","coupon","promoCode","products","oi","orderItemType","itemName","unitPrice","quantity","ecommerce","PromoApplied","promoInfo","promoDesc","OrderDetails","pageLoaded","setPageLoaded","noGTM","Details","taxLines","DiscountAmountDisplay","discountedAmount","p","c","DiscountedAmount","orderItemId","qty","totalGst","promoItems","discountTaxAmount","discountItemAmount","billingAddr","billingAddress","itemType","hasGuideInOrder","hasBookingInOrder","orderNo","orderDate","itemDescHtml","ItemExt","addedUnitPrice","discountUnitPrice","itemAmount","bookingView","BookingSummary","booking","bookingCode","cart","stepsWrapper","steps","stepCurrent","stepPrev","stepNext","stepLast","navs","nav","navCurrent","navFilled","navClickable","arrow","arrowPrev","arrowNext","StepNav","stepInfo","currentStep","moveTo","canGo","filled","details","optionName","input","totalHdr","CartSummary","totalItemDiscount","totalTaxDiscount","promoStyle","promoSection","PromoForm","applyPromoCode","cartModel","OrderItems","moveNext","ItemVariantSummary","variantOptionsSerialised","Name","Value","getOrderItemFormData","itemArray","orderItemData","LoginForm","CreateAccountForm","DetailsForm","saveShipping","billingInfo","useSameAddress","Shipping","needLogin","payStripe","itemTotalAmount","Cart","setCart","totalQuantity","CartView","EmptyCart","goNext","setGoNext","initialSteps","setSteps","setCurrentStep","lastStep","setLastStep","movePrev","markAsFilled","canGoNext","canGoPrev","useStep","orderItemForm","stepStyle","next","stepView","EcmItems","ItemBranch","typeCode","_tileType","PageMemo","memo","sectionItems","section","Section","sectionName","getMetaTag","pageTypeCode","prevProps","nextProps","ViewPage","embedStatus","setEmbedStatus","loadEmbedJs","instgrm","Embeds","useInstagram","redirectTo","noPermission","CmsRadioSender","controller","cloned","postMessage","htmlChanges","sendMessageToParent","returnTo","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","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","extend","htmleditor","getAnchors","anchors","each","htmlbody","animate","$section","getCurrentHtml","ItemId","SectionId","Content","itemid","formvals","cms_replace_item_html","EditPage","publishVer","editVer","pageId","cmsPageController","MemberMenu","onCloseMenu","memberLink","CartLoader","SearchBar","setKeyword","NavBar","currentLocation","menuItemElts","MenuItem","subMenuOpened","setSubMenuOpened","SubMenuItem","toggleSubmenu","cartItemNo","BackButton","rs","barW","barH","space","line","transitionProperty","transitionDuration","transitionDelay","transitionTimingFunction","outline","font","buttonScrolled","hamburger","line1","line2","line3","lineActive1","lineActive2","lineActive3","Hamburger","opened","toggleMenu","scrolled","aria-label","topScrolled","logo","logoImg","logoScrolled","TopHeader","menuOpened","setMenuOpened","setScrolled","useScrollPosition","prevPos","currPos","behavior","BottomDock","isCurrent","linkElts","iconHover","linkClicked","CommonVideoPopup","setSources","onOpen","AppRouteChanged","parallax","dataArr","foundIndex","findIndexReverse","getPreviousPostitionInArray","dataStr","getPositionData","getPreviousPostition","anchor","heroImageContainer","heroImage","productPageCol","productFavorite","productBreadCrumbs","listStyle","li","productViewImageBg","productViewImages","productViewImage","productViewShortDes","productViewTitle","addToCartBtn","priceText","socialMedia","attributesRow","attrContainer","desktopMobile","quoteContainer","enquiryFormContainer","ViewPartial","getFormModel","newModel","_array","n","variantAttributes","attributesEx","setAttributesEx","checkGoToCartBtn","setCheckGoToCartBtn","formVal","_variantOptions","variantOptions","_item","_cartId","pre","_new","formValues","variantOptionArray","variants","dyName","optionsSelected","currentSelection","availableOptions","from","Set","getAvailableOptionValues","optionsInVariant","currentControlName","optionInVariant","matchVariantOptions","newVariantAttribute","ProductView","productCode","totalCnt","Product","mainPhoto","productImages","allPhotos","setHeroImage","openPopup","setOpenPopup","enquiryFormModel","enquiryForm","enquiryFormRender","photo","itemScope","itemProp","PinterestShareButton","PinterestIcon","RelatedProducts","relatedProducts","metaDesc","intro","AppLayout","AOS","IgnorePath","App","isLocalhost","Boolean","serviceUpdateCheckerInterval","registerValidSW","swUrl","serviceWorker","updateViaCache","registration","scope","clearInterval","setInterval","update","preventDevToolsReloadLoop","ev","onupdatefound","installing","installingWorker","onstatechange","onUpdate","onSuccess","ready","URL","contentType","unregister","checkValidServiceWorker","waiting"],"mappings":"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","file":"static/js/main.e3306f91.chunk.js","sourcesContent":["const settings = {\n // xs, sm, md, lg, xl, xxl <-- only sample, check your breakpoints settings.\n // < 576 768 992 1200 1600\n breakpointNames: ['xs', 'sm', 'md', 'lg', 'xl', 'xxl'],\n numOfTilesPerBreakpoints: [2, 2, 2, 3, 4, 6],\n marginLR: [14, 20, 20, 20, 20, 20],\n marginTB: [14, 20, 20, 20, 20, 20],\n}\n\nexports.settings = settings","const settings = {\n // xs, sm, md, lg, xl, xxl <-- only sample, check your breakpoints settings.\n // < 576 768 992 1200 1600\n breakpointNames: ['xs', 'sm', 'md', 'lg', 'xl', 'xxl'],\n numOfTilesPerBreakpoints: [1, 2, 2, 2, 3, 3],\n marginLR: [14, 20, 20, 20, 20, 20],\n marginTB: [14, 20, 20, 20, 20, 20],\n slickSettings: {\n dots: false,\n infinite: true,\n speed: 500,\n autoplaySpeed: 3000,\n //fade: false,\n autoplay: true,\n slidesToShow: 3,\n slidesToScroll: 1,\n responsive: [\n {\n breakpoint: 1200,\n settings: {\n slidesToShow: 2,\n slidesToScroll: 1\n }\n },\n {\n breakpoint: 576,\n settings: {\n slidesToShow: 1,\n slidesToScroll: 1\n }\n }\n // You can unslick at a given breakpoint now by adding:\n // settings: \"unslick\"\n // instead of a settings object\n ]\n }\n}\n\nexports.settings = settings","// 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';\n\nexport function NotFound(props) {\n const debugInfo = props.debugInfo;\n\n function refreshPage(e) {\n e.preventDefault();\n if (typeof window !== `undefined`) {\n window.location.reload();\n }\n }\n\n function goBack(e) {\n e.preventDefault();\n if (typeof window !== `undefined`) {\n window.history.back();\n }\n }\n\n return (\n
\n
\n

404 Error

\n\n

Please refreshPage(e)}>refresh your browser.

\n
\n \n
\n\n {\n debugInfo &&\n
Error message: {debugInfo.pageUrl} - {debugInfo.loadFrom} 
\n }\n\n
\n\n
\n\n )\n}","const config = {\n isProd: process.env.NODE_ENV === 'production',\n locale: getLocale(),\n siteName: process.env.REACT_APP_SITENAME,\n titleSuffix: process.env.REACT_APP_TITLESUFFIX,\n siteCode: process.env.REACT_APP_SITECODE,\n apiBase: process.env.REACT_APP_API_ENDPOINT,\n resourceBase: process.env.REACT_APP_RESOURCE_BASEURL,\n baseOrigin: getBaseUrl(),\n cmsEndpoint: process.env.REACT_APP_CMS_ENDPOINT,\n ver: process.env.REACT_APP_VERSION,\n updateDate: process.env.REACT_APP_UPDATED_AT,\n stripeKey: process.env.REACT_APP_STRIPE_KEY,\n recaptchaSiteKey: process.env.REACT_APP_RECAPTCHA_SITEKEY,\n\n //bvClientId: process.env.REACT_APP_BAZZAR_CLIENT_ID,\n //bvSiteId: process.env.REACT_APP_BAZZAR_SITE_ID,\n //bvEnv: process.env.REACT_APP_BAZZAR_ENV,\n //bvLocale: getLocale() === 'nz' ? 'en_NZ' : 'en_AU',\n};\n\nfunction getLocale() {\n return process.env.REACT_APP_COUNTRY_LOCALE || getCountry();\n}\n\nfunction getCountry() {\n if (typeof window !== `undefined`) {\n if (window.location.hostname.toLowerCase().indexOf('.nz') >= 0) return 'nz';\n if (window.location.hostname.toLowerCase().indexOf('-nz') >= 0) return 'nz';\n if (window.location.search === '?nz=true') return 'nz';\n }\n return 'au';\n}\n\nfunction getBaseUrl() {\n if (typeof window !== `undefined`) {\n return window.location.origin;\n }\n return process.env.GATSBY_BASEURL;\n}\n\nconsole.log(process.env, config);\nexport default {\n ...config,\n getDevCartId: function () {\n const cartId = !config.isProd && typeof window !== `undefined` ? window.localStorage.getItem('cart') : null;\n return cartId === 'null' ? null : cartId;\n },\n setDevCartId: function (cartId) {\n if (!config.isProd && typeof window !== `undefined`) window.localStorage.setItem('cart', cartId);\n },\n};\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';\n\nexport function Button({onClick, status, children, btnStyle='primary', className}) {\n let buttonStyle = 'btn-' + btnStyle;\n return (\n \n );\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 = {\n breakpointNames: ['sm', 'md', 'lg', 'xl', 'xxl'],\n breakpoints: [576, 768, 992, 1200, 1600],\n};\n\nconst variables = {\n familyBase: '\"proxima-nova\",sans-serif',\n familyHeader: '\"neo-sans\",serif',\n\n primaryColor: '#0e76bc',\n fontColor: '#413e3d',\n bgColor: '#ebebeb',\n blueColor: '#0e76bc',\n darkGray: '#413e3d',\n greenColor: '#8dc63f',\n\n ...overloading,\n};\n\nexport default variables;\n","import variables from './cssInJs/variables';\nimport { getIdToken } from 'lib/auth/services/authHelper';\n\nconst cssEmotion = {\n breakpointNames: variables.breakpointNames,\n breakpoints: variables.breakpoints,\n};\n\nconst firebaseSettings = {\n apiKey: 'AIzaSyCDO7aDorNJiJqoNZqi53EEAKDDCXGrl4Q',\n authDomain: 'preventingharm-a588b.firebaseapp.com',\n // databaseURL: \"https://jaba-pwa.firebaseio.com\",\n projectId: 'preventingharm-a588b',\n storageBucket: 'preventingharm-a588b.appspot.com',\n messagingSenderId: '176116373420',\n appId: '1:176116373420:web:72fb7d1814158d73f28c09',\n};\n\nconst apiNetJwt = async (options) => {\n const token = await getIdToken();\n //console.log(token)\n if (token) {\n options.headers = options.headers || {};\n options.headers['Authorization'] = `Bearer ${token}`;\n }\n};\nexport default {\n cssEmotion,\n firebaseSettings,\n apiNetJwt,\n};\n","import * as firebase from \"firebase/app\";\r\nimport \"firebase/auth\";\r\n\r\n/**\r\n * Returns a promise that resolves with an ID token if available.\r\n * @return {!Promise} The promise that resolves with an ID token if\r\n * available. Otherwise, the promise resolves with null.\r\n */\r\nconst getIdToken = () => {\r\n return new Promise((resolve, reject) => {\r\n const unsubscribe = firebase.auth().onAuthStateChanged((user) => {\r\n unsubscribe();\r\n if (user) {\r\n user.getIdToken().then((idToken) => {\r\n resolve(idToken);\r\n }, (error) => {\r\n resolve(null);\r\n });\r\n } else {\r\n resolve(null);\r\n }\r\n });\r\n });\r\n};\r\n\r\nconst getFirebaseUser = () => {\r\n return new Promise((resolve, reject) => {\r\n const unsubscribe = firebase.auth().onAuthStateChanged((user) => {\r\n unsubscribe();\r\n resolve(user);\r\n });\r\n });\r\n};\r\n\r\nexport { getIdToken, getFirebaseUser }","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({ children }) {\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 {children}\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\nexport function getFolderPath(url, parentDepth = -1) {\r\n return url.split('/').slice(0, parentDepth).join('/');\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}\r\n\r\nexport function getWebUrl(url, schema = 'https://'){\r\n if (!url) return null;\r\n if (url.indexOf('https:') >= 0 || url.indexOf('http:') >= 0 || url.indexOf(':') >= 0) {\r\n return url;\r\n }\r\n return schema + url;\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 insertItem = (list, index, item) => {\r\n //const list = Array.from(array);\r\n list.splice(index, 0, item);\r\n\r\n return list;\r\n};\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 return null;\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 return -1;\r\n};\r\n\r\nexport const contains = (list, fn) => {\r\n return findIndex(list, fn) >= 0;\r\n}\r\n\r\n// utils.array.distinct(images, (x, y) => x.imageUrl === y.imageUrl)\r\nexport const distinct = (list, comparer) => {\r\n const filtered = []\r\n for (let i = 0; i < list.length; i++) {\r\n if (!contains(filtered, (x) => comparer(x, list[i]))) {\r\n filtered.push(list[i])\r\n }\r\n }\r\n return filtered;\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\r\nexport function formatDDMMYYYY(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 (`${dd}-${mm}-${yyyy}`)\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 toDateTime(dateObj){\r\n if (!dateObj) return null;\r\n if (typeof dateObj === 'string') {\r\n return parseDate(dateObj, \"yyyy-MM-dd'T'HH:mm:ss.SSSxxx\") ||\r\n parseDate(dateObj, 'yyyy-MM-dd HH:mm:ss.SSSxxx') ||\r\n parseDate(dateObj, 'yyyy-M-d HH:mm:ss.SSSxxx') ||\r\n parseDate(dateObj, 'dd/MM/yyyy HH:mm:ss.SSSxxx') ||\r\n parseDate(dateObj, 'd/M/yyyy HH:mm:ss.SSSxxx') ||\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}\r\n\r\nexport const toTelephoneNumber = (str) => {\r\n return (str || []).replace(/[^+\\d]+/g, \"\");\r\n\r\n}\r\n\r\n// utils.text.like('text here', '%keyword%')\r\nexport const like = (str, search) => {\r\n if (typeof search !== 'string' || str === null) { return false; }\r\n // Remove special chars\r\n search = search.replace(new RegExp(\"([\\\\.\\\\\\\\\\\\+\\\\*\\\\?\\\\[\\\\^\\\\]\\\\$\\\\(\\\\)\\\\{\\\\}\\\\=\\\\!\\\\<\\\\>\\\\|\\\\:\\\\-])\", \"g\"), \"\\\\$1\");\r\n // Replace % and _ with equivalent regex\r\n search = search.replace(/%/g, '.*').replace(/_/g, '.');\r\n // Check matches\r\n return RegExp('^' + search + '$', 'gi').test(str);\r\n\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 { getFilename } from './url';\r\nimport { contains } from './array';\r\nexport function getImageSetPath(url, setId) {\r\n const info = getPathDetails(url)\r\n if (!info) return url;\r\n //console.log(url, info);\r\n return info.baseFolder + \"/@\" + setId + '/' + info.filename\r\n}\r\n\r\nexport function getPathDetails(url, setIds) {\r\n if (!url) return null;\r\n const parts = url.split('/').slice(0, -1);\r\n if (parts.length <= 1) return { baseFolder: '/', setId: null, filename: getFilename(url) };\r\n\r\n const lastFolder = parts[parts.length - 1];\r\n const hasSet = setIds && setIds.length > 0 ? contains(setIds, x => x === lastFolder) : lastFolder.indexOf('@') === 0;\r\n\r\n return hasSet ?\r\n { baseFolder: parts.slice(0, -1).join('/'), setId: lastFolder, filename: getFilename(url) } :\r\n { baseFolder: parts.join('/'), setId: null, filename: getFilename(url) }\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\nimport * as media from './media';\r\n\r\nexport default { classNames, url, form, array, date, css, ui, money, text, random, object, media};","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 utils from '../utils';\nimport env from '../env';\nimport { isMin } from '../lib/css-emotion';\n\nexport const isMobile = () => {\n // isMin.md() ==> min-width: 768px\n return !isMin.md();\n};\n\nexport function resourcePath(url) {\n if (!url) return null;\n if (url && url.indexOf('/assets/') === 0) return url;\n return utils.url.isExternalLink(url) ? url : env.resourceBase + url;\n}\n\nexport function fullUrl(url) {\n return utils.url.isExternalLink(url) ? url : env.baseOrigin + url;\n}\n\nexport const isNZ = env.locale === 'nz';\n\nexport function getCategoryShopUrl(pageUrl) {\n return (pageUrl || '').toLowerCase().replace('/categories/', '/categories-shop/');\n}\n\nexport function isCategoryShopUrl(pageUrl) {\n return (pageUrl || '').toLowerCase().indexOf('/categories-shop/') >= 0;\n}\n\nexport function toHoursText(mins) {\n const h = Math.floor(mins / 60);\n const m = mins % 60;\n\n if (mins === 1) return mins + ' min';\n if (mins < 60) return mins + ' mins';\n\n const hText = h === 1 ? '1 hr' : `${h} hrs`;\n const mText = m === 0 ? '' : m === 1 ? '1 min' : `${m} mins`;\n return mText ? hText + ' ' + mText : hText;\n}\n","import coreUtils from '../lib/utils-core';\nimport * as site from '../site/siteUtils';\n\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 const statusText = res.status === 401 ? 'Permission denied. Please login first.' : res.statusText\r\n setErrors(['Error - [' + res.status + ']' + (statusText && (' - ' + 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 setResult: (json) => { setResponse(json); setStatus('done') },\r\n reset: () => {\r\n setStatus('ready');\r\n setErrors([]);\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 (data.faceBookDomainVerifi && data.faceBookDomainVerifi !== '') &&\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 {(data.alternates || []).map((x, index) => )}\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 = 100000;\r\nexport const MIN = -100000;\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', pr, [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(min, max, pr, range = [0, 1]) {\r\n //console.log(min, max, typeof min, typeof to)\r\n if (pr < range[0]) return min;\r\n if (pr > range[1]) return max;\r\n return min + (max - min) * ((pr - range[0])/(range[1] - range[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 defaultHolder = 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, defaultHolder)));\r\n return Promise.all(promises);\r\n}\r\n\r\nexport function loadedJs(url, holder = defaultHolder) {\r\n if (!holder[storeName]) return false;\r\n return holder[storeName][url] && holder[storeName][url].loaded\r\n}\r\n\r\nexport function loadScript(url, holder_, forceToReload = false) {\r\n const holder = holder_ || defaultHolder\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 (!forceToReload && 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 // remove previous\r\n const existing = document.querySelector('script[src=\"' + url +'\"]')\r\n if (existing) existing.remove();\r\n\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}","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 { initialState as initialState_, reducer as reducer_ } from '../lib/store/reducers';\nexport { StoreContext, StoreProvider, useStore } from '../lib/store';\n\nconst initialState = Object.assign(initialState_, { cartInfo: null });\n\nconst reducer = (state = initialState, action) => {\n switch (action.type) {\n case 'SET_CART':\n return {\n ...state,\n cartInfo: action.payload,\n };\n default:\n return reducer_(state, action);\n }\n};\n\nexport { initialState, reducer };\n","import { useStore } from '../../store';\r\n\r\n// loc data: {path:'', title:''}\r\nexport function useHistoryStore() {\r\n const { state, dispatch } = useStore();\r\n const history = state.history || [];\r\n\r\n function push(loc) {\r\n const same = history.length > 0 \r\n && (JSON.stringify(history[history.length - 1]) === JSON.stringify(loc))\r\n if (!same) {\r\n // console.log(JSON.stringify(history[history.length - 1]), JSON.stringify(loc))\r\n setHistory([...history, loc]);\r\n }\r\n }\r\n\r\n function setHistory(history){\r\n // console.log('history set', history)\r\n dispatch({ type: 'SET_HISTORY', payload: history })\r\n }\r\n\r\n const last = () => {\r\n // console.log('last history', history)\r\n if (history.length < 2) return null;\r\n return history[history.length - 2].path;\r\n }\r\n\r\n const pop = () => {\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, pop, last };\r\n};","import utils from '../../utils';\r\n\r\nexport function handleElementLink(el, externalHandler) {\r\n // externalHandler = (url) => {\r\n // if (typeof window !== `undefined`) window.location.href = url;\r\n // }\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 //console.log(processed)\r\n if (processed.handled) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n }\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","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}","// https://www.pluralsight.com/guides/re-render-react-component-on-window-resize\r\nexport function debounce(fn, ms) {\r\n let timer\r\n return _ => {\r\n clearTimeout(timer)\r\n timer = setTimeout(_ => {\r\n timer = null\r\n fn.apply(this, arguments)\r\n }, ms)\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\nimport { FaRegPlayCircle } from 'react-icons/fa';\r\nimport { useStore } from '../../store';\r\n\r\nexport function YoutubeEmbedPopup({ url, title, posterUrl }) {\r\n const { dispatch } = useStore();\r\n\r\n const videoId = yt.getYoutubeCode(url);\r\n const posterImageUrl = utils.site.resourcePath(posterUrl || yt.thumbnailMax(videoId));\r\n const [popupIndex, setPopupIndex] = React.useState(0);\r\n\r\n function openVideo() {\r\n setPopupIndex(popupIndex + 1);\r\n dispatch({ type: 'SET_POPUP', payload: { sources: [\r\n // \r\n 'https://www.youtube.com/watch?v=' + videoId\r\n ], popupIndex: popupIndex + 1} });\r\n }\r\n return (\r\n
\r\n \r\n
\r\n );\r\n}\r\n","import * as firebase from \"firebase/app\";\nimport \"firebase/auth\";\n\n/**\n * Returns a promise that resolves with an ID token if available.\n * @return {!Promise} The promise that resolves with an ID token if\n * available. Otherwise, the promise resolves with null.\n */\nconst getIdToken = () => {\n return new Promise((resolve, reject) => {\n const unsubscribe = firebase.auth().onAuthStateChanged((user) => {\n unsubscribe();\n if (user) {\n user.getIdToken().then((idToken) => {\n resolve(idToken);\n }, (error) => {\n resolve(null);\n });\n } else {\n resolve(null);\n }\n });\n });\n};\n\nconst getFirebaseUser = () => {\n return new Promise((resolve, reject) => {\n const unsubscribe = firebase.auth().onAuthStateChanged((user) => {\n unsubscribe();\n resolve(user);\n });\n });\n};\n\nexport { getIdToken, getFirebaseUser }","import utils from '../../utils';\r\n//import siteConfig from '../../config';\r\n\r\nexport async function fetchGet(url, signal, apiNetJwt) {\r\n //console.log(url, options);\r\n const options = {}\r\n apiNetJwt && await apiNetJwt(options);\r\n\r\n const res = await fetch(url, { \r\n method: 'GET', \r\n signal,\r\n ...options\r\n });\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 throw new Error(json.message)\r\n }\r\n } catch (e) {\r\n throw e;\r\n }\r\n const statusText = res.status === 401 ? 'Permission denied. Please login first.' : res.statusText\r\n throw new Error('Error - [' + res.status + ']' + res.status + (statusText && (' - ' + statusText)))\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 const errMessages = utils.form.getErrors(json);\r\n throw new Error(errMessages.join(', '))\r\n }\r\n return json;\r\n}\r\n\r\n\r\nexport async function fetchPost(url, data, signal, apiNetJwt) {\r\n //console.log(url, options);\r\n const options = { headers: { 'Content-Type': 'application/json' } }\r\n apiNetJwt && await apiNetJwt(options);\r\n\r\n const res = await fetch(url, {\r\n method: 'POST',\r\n body: JSON.stringify(data),\r\n signal,\r\n ...options\r\n });\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 throw new Error(json.message)\r\n }\r\n } catch (e) { }\r\n throw new Error('Error - ' + res.status + (res.statusText && (' - ' + res.statusText)))\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 const errMessages = utils.form.getErrors(json);\r\n throw new Error(errMessages.join(', '))\r\n }\r\n return json;\r\n}","import React, { useContext, createContext } from 'react';\nimport * as firebase from 'firebase/app';\nimport 'firebase/auth';\nimport config from 'config';\nimport env from 'env';\nimport { getFirebaseUser } from './authHelper';\nimport { fetchPost } from '@lib/net-api/fetch';\n\nfirebase.initializeApp(config.firebaseSettings);\n\nconst authContext = createContext();\n\n// Provider component that wraps your app and makes auth object available to any child component that calls useAuth().\nexport function ProvideAuth({ children }) {\n //console.log('ProvideAuth')\n const auth = useProvideAuth();\n return {children};\n}\n\n// Hook for child components to get the auth object and re-render when it changes.\nexport const useAuth = () => {\n return useContext(authContext);\n};\n\n// Provider hook that creates auth object and handles state\nfunction useProvideAuth() {\n const [authData, setAuthData] = React.useState({ user: null, queryStatus: 'loading', memberInfo: null });\n const user = authData.user;\n const setUser = (user) => setAuthData({ ...authData, user: user, queryStatus: 'resolved' });\n const setMemberInfo = (memberInfo) => {\n if (!authData.memberInfo || JSON.stringify(authData.memberInfo) !== JSON.stringify(memberInfo))\n setAuthData({ ...authData, memberInfo: memberInfo });\n };\n const isResolved = authData.queryStatus === 'resolved';\n\n //#region Firebase methods\n const signin = (email, password) => {\n return firebase\n .auth()\n .signInWithEmailAndPassword(email, password)\n .then(async (response) => {\n await fetchPost(env.apiBase + '/api/profile/UpdateUserProfile', {\n uid: response.user.uid,\n email: response.user.email,\n displayName: response.user.displayName,\n emailVerified: response.user.emailVerified,\n });\n setUser(response.user);\n return response.user;\n });\n };\n\n const signup = (email, password) => {\n return firebase\n .auth()\n .createUserWithEmailAndPassword(email, password)\n .then(async (response) => {\n await fetchPost(env.apiBase + '/api/profile/UpdateUserProfile', {\n uid: response.user.uid,\n email: response.user.email,\n displayName: response.user.displayName,\n emailVerified: response.user.emailVerified,\n });\n setUser(response.user);\n return response.user;\n });\n };\n\n const signout = () => {\n return firebase\n .auth()\n .signOut()\n .then(async () => {\n setUser(null);\n });\n };\n\n const sendPasswordResetEmail = (email) => {\n return firebase\n .auth()\n .sendPasswordResetEmail(email)\n .then(() => {\n return true;\n });\n };\n\n const confirmPasswordReset = (code, password) => {\n return firebase\n .auth()\n .confirmPasswordReset(code, password)\n .then(() => {\n return true;\n });\n };\n //#endregion\n\n const currentFirebaseUser = async () => await getFirebaseUser();\n const loggedIn = async () => {\n if (user) return user;\n else return await getFirebaseUser();\n };\n\n React.useEffect(() => {\n const unsubscribe = firebase.auth().onAuthStateChanged(async (user) => {\n //console.log('onAuthStateChanged', user)\n if (user) {\n setUser(user);\n } else {\n setUser(null);\n }\n });\n\n return () => unsubscribe();\n // eslint-disable-next-line\n }, []);\n\n // Return the user object and auth methods\n return {\n authData,\n user,\n isResolved,\n signin,\n signup,\n signout,\n sendPasswordResetEmail,\n confirmPasswordReset,\n // status\n loggedIn,\n currentFirebaseUser,\n // set\n setMemberInfo,\n };\n}\n","import { variables } from 'cssInJs';\nimport { lighten } from 'polished';\n\nconst primaryColor = variables.primaryColor;\nconsole.log(primaryColor);\nexport const loginStatusStyle = {\n panel: {\n padding: 30,\n background: lighten(0.5, primaryColor),\n textAlign: 'center',\n '.btn': {\n minWidth: 100,\n },\n },\n};\n","import React from 'react';\nimport { useAuth } from 'auth';\nimport { useRouter, SiteLink } from 'components';\n\nexport function Login(props) {\n const [username, setUsername] = React.useState('');\n const [password, setPassword] = React.useState('');\n const [error, setError] = React.useState('');\n const [pending, setPending] = React.useState(false);\n const auth = useAuth();\n\n const router = useRouter();\n\n function submit(e) {\n setPending(true);\n //console.log('loggin', username, password)\n e.preventDefault();\n e.stopPropagation();\n\n auth\n .signin(username, password)\n .then((user) => {\n console.log(user);\n setPending(false);\n setError('');\n router.push('/member/dashboard');\n })\n .catch((error) => {\n console.log(error);\n setPending(false);\n setError(error.message);\n });\n }\n return (\n
\n

Log In

\n
\n {/* */}\n
\n
\n
\n \n {\n setUsername(event.target.value);\n }}\n />\n
Email is invalid
\n
\n\n
\n \n {\n setPassword(event.target.value);\n }}\n />\n
Password is required
\n
\n {/* \n */}\n\n
\n \n
\n\n {error &&
{error}
}\n\n {/*
\n \n
*/}\n
\n\n {/*
\n Or Log in with \n
\n \n
\n
\n */}\n {/*
\n Don't have an account? Sign Up\n
*/}\n
\n Forgot Password?\n
\n
\n
\n
\n );\n}\n","import { useState, useEffect } from 'react';\nimport { useGet } from 'components';\nimport env from 'env';\nimport { useStore } from 'store';\n\nexport function MenuLoader() {\n const { state, dispatch } = useStore();\n const [loadingStatus, setLoadingStatus] = useState('ready');\n const [data, setData] = useState(null);\n\n const get = useGet();\n\n useEffect(() => {\n if (loadingStatus !== 'ready') return;\n if (state && !state.menu) {\n setLoadingStatus('loading');\n get.send(env.apiBase + \"/api/cms/GetMenu\");\n }\n // eslint-disable-next-line\n }, [state]);\n\n useEffect(() => {\n // console.log(data)\n if (data) {\n dispatch({ type: 'SET_MENU', payload: data.menu })\n }\n // eslint-disable-next-line\n }, [data]);\n\n if (loadingStatus !== 'done' && get.done()) {\n setLoadingStatus('done');\n setData(get.response);\n }\n return null;\n}\n\n","import React from 'react';\nimport { Route } from 'react-router-dom';\n\nimport { Loading } from 'components';\nimport { useRouter } from '../components';\nimport { useAuth } from 'auth';\nimport { MenuLoader } from './menuLoader';\n\nconst DashboardLayout = ({ children, ...rest }) => {\n const isCancelled = React.useRef(false);\n const [sessionChecked, setSessionChecked] = React.useState(false);\n const { navigate } = useRouter();\n const auth = useAuth();\n\n React.useEffect(() => {\n const checkAuth = async () => {\n if (!isCancelled.current) {\n const loggedIn = await auth.loggedIn();\n // console.log({ loggedIn })\n if (!loggedIn) {\n navigate('/member/login');\n } else {\n setSessionChecked(true);\n }\n }\n };\n checkAuth();\n return () => {\n isCancelled.current = true;\n };\n }, [auth, navigate]);\n\n if (!sessionChecked) {\n return (\n
\n \n
\n );\n } else {\n return
{children}
;\n }\n};\n\nconst DashboardLayoutRoute = ({ component: RenderComponent, ...rest }) => {\n return (\n (\n \n \n \n \n )}\n />\n );\n};\n\nexport default DashboardLayoutRoute;\n","import React from 'react';\nimport { Route } from 'react-router-dom';\n\nimport { MenuLoader } from './menuLoader';\n\nconst DashboardLayout = ({ children, ...rest }) => {\n return
{children}
;\n};\n\nconst DashboardNoAuthLayoutRoute = ({\n component: RenderComponent,\n ...rest\n}) => {\n return (\n (\n \n \n \n \n )}\n />\n );\n};\n\nexport default DashboardNoAuthLayoutRoute;\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 \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 autoComplete=\"new-password\"\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 //console.log(value, typeof value)\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) return control.value;\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 };","/** @jsx jsx */\nimport { jsx } from '@emotion/core';\nimport React from 'react';\nimport env from 'env';\n\nimport { SiteLink } from 'components';\n\nimport { getEditorStyle } from 'site/_editor/editorStyle';\nimport { useGet } from 'components';\nimport { usePost } from 'components';\nimport { useForm } from 'form';\nimport { Button, ErrorMessage } from 'components';\nimport { Loading, ErrorPopup } from 'components';\n\nimport { fb, validators } from 'form';\n\nconst s = getEditorStyle();\n\nexport function ChangePassword() {\n const get = useGet();\n\n React.useEffect(() => {\n get.send(env.apiBase + `/api/member/getProfile`);\n // eslint-disable-next-line\n }, []);\n\n if (get.loading()) {\n return ;\n } else if (get.hasErrors()) {\n return ;\n }\n\n const data = get.response;\n\n return (\n
\n

Change Password

\n
\n < Return to dashboard\n
\n \n
\n );\n}\n\nfunction SessionEditForm({ profile }) {\n const [sendingStatus, setSendingStatus] = React.useState(null);\n\n const post = usePost();\n const model = getFormData(profile);\n const form = useForm(model, {});\n\n function save(e) {\n e.preventDefault();\n form.validateForm(\n e,\n () => {\n const value = { ...form.getValue() };\n\n post.send(env.apiBase + '/api/member/UpdatePassword', value);\n setSendingStatus('pending');\n },\n (errors) => {}\n );\n }\n\n if (post.done() && sendingStatus === 'pending') {\n form.reset(getFormData({}));\n setSendingStatus(null);\n }\n\n const render = (name) => form.renderControl(name, null);\n\n return (\n
\n
\n {/*
\n
{render('currentPassword')}
\n
*/}\n
\n
{render('password')}
\n
\n
\n
{render('confirmPassword')}
\n
\n
\n
\n
\n \n
\n\n \n \n {post.done() && (\n
\n
Password successfully reset!
\n
\n Go back to dashboard.\n
\n {/*
Please login again.
*/}\n
\n )}\n
\n
\n
\n
\n );\n}\n\nexport function getFormData(data) {\n const model = fb.group({\n // currentPassword: [data.currentPassword || '', [validators.Required()], { label: 'Current Password', type: 'password' }],\n password: [\n data.password || '',\n [validators.Required(), validators.Length('Min 7 characters', { min: 7 })],\n { label: 'New Password', type: 'password' },\n ],\n confirmPassword: [\n data.confirmPassword || '',\n [validators.Required()],\n { label: 'Confirm Password', type: 'password' },\n ],\n });\n\n return model;\n}\n","// import { variables } from 'cssInJs'\n\nexport function getEditorStyle() {\n return {\n formBlock: {\n maxWidth: '1600px',\n margin: '1.5rem 0',\n '& label': {\n fontWeight: 'bold'\n },\n '& p': {\n marginBottom: '0.2rem'\n }\n },\n returnLink: {\n fontSize: '0.8rem'\n },\n actions: {\n margin: '2rem 0',\n display: 'flex',\n 'button, a': {\n marginRight: '0.5rem'\n }\n },\n labelHelp: {\n fontSize: '90%'\n }\n }\n}\n","import React from 'react';\nimport env from 'env';\nimport { usePost } from 'components';\nimport { Button, ErrorMessage } from 'components';\nimport { SiteLink } from 'components';\nimport { IoReturnUpBack } from 'react-icons/io5';\n\nexport function ForgotPassword() {\n const [username, setUsername] = React.useState(\"\");\n\n const post = usePost();\n\n function onSubmit(e) {\n post.send(env.apiBase + \"/api/profile/SendPasswordResetEmail\", { email: username });\n }\n return (\n
\n

Forgot Password

\n
\n
\n
\n
\n \n {\n setUsername(event.target.value);\n }} />\n
Email is invalid
\n
\n\n
\n By clicking \"Reset Password\" we will send a password reset link\n
\n
\n
\n \n {post.done() &&
Nearly there! Password reset email sent, check your inbox including your junk folders.
}\n
\n
\n \n \n
\n
\n
\n Go back to LOG IN\n
\n
)\n}","import React from 'react';\nimport env from 'env';\nimport { usePost } from 'components';\nimport { SiteLink } from 'components';\nimport { useRouter } from 'components';\nimport { ErrorPopup } from 'components';\nimport { Button, ErrorMessage } from 'components';\nimport { IoReturnUpBack } from 'react-icons/io5';\n\nexport function ResetPassword() {\n const [password, setPassword] = React.useState(\"\");\n const { query } = useRouter();\n const token = (query && query.u) || '';\n const post = usePost();\n\n if (!token) {\n return \n Go back to LOG IN\n \n }\n\n function onSubmit(e) {\n post.send(env.apiBase + \"/api/profile/ResetPassword\", { token: token, password: password });\n }\n return (\n
\n

Reset Password

\n
\n
\n
\n
\n \n {\n setPassword(event.target.value);\n }} />\n
Password is invalid
\n
\n
\n
\n \n {post.done() &&
\n Successfully reset your password.\n
}\n
\n
\n \n \n
\n
\n \n
\n Go back to LOG IN\n
\n
)\n}","import { mq } from \"cssInJs\";\n\nexport default {\n pay: {\n 'h3': {\n marginTop: 0\n }\n },\n stripeWrapper: {\n margin: '1rem 0 1rem',\n maxWidth: 500,\n padding: '1rem',\n backgroundColor: '#fff5e4'\n },\n formActions: {\n marginTop: '2rem'\n },\n paymentInfoText : mq({\n fontSize: ['0.6rem', '0.5rem'],\n marginTop: '1rem',\n '.contact-link' : {\n color: 'white'\n }\n })\n}","export const priceData = {\n standard: {\n id: 'standard',\n name: 'Standard',\n monthly: 7.99,\n yearly: 56.99\n },\n pro: {\n id: 'pro',\n name: 'Professional',\n monthly: 18.99,\n yearly: 134.99\n }\n}\n","/** @jsx jsx */\nimport { jsx } from '@emotion/core'\n// import React from 'react';\nimport { getMonthlyOrYearlyStyle } from './monthlyOrYearlyStyle';\nimport { FaCheckCircle } from 'react-icons/fa'\nimport { priceData } from './_priceData'\n\nexport function MonthlyOrYearly({ subsType, per, setPer }) {\n\n const s = getMonthlyOrYearlyStyle()\n\n return
\n
\n
setPer('monthly')}>\n {per === 'monthly' && }\n

Monthly

\n
\n AUD {subsType.id === 'standard' ? priceData.standard.monthly : priceData.pro.monthly}\n per month\n
\n
\n
setPer('yearly')}>\n {per === 'yearly' && }\n

Yearly

\n
\n AUD {subsType.id === 'standard' ? priceData.standard.yearly : priceData.pro.yearly}\n per month\n
\n
\n
\n
\n}","// import { css } from '@emotion/core'\nimport { variables, mq } from 'cssInJs'\nimport { rgba } from 'polished'\n\nexport function getMonthlyOrYearlyStyle() {\n return {\n container: mq({\n maxWidth: 800,\n display: 'flex',\n marginLeft: -20,\n marginRight: -20,\n }),\n option: mq({\n position: 'relative',\n margin: 20,\n paddingLeft: 40,\n paddingRight: 40,\n paddingTop: 20,\n paddingBottom: 20,\n flex: '0 0 50%',\n background: '#f3f3f3',\n transition: 'all 0.3s',\n border: '3px solid transparent',\n '&:hover, &:active': {\n //color: 'white',\n background: rgba(variables.primaryColor, 0.1),\n border: `3px solid ${variables.primaryColor}`\n },\n 'ul': {\n margin: '1rem 0',\n paddingLeft: 20\n }\n }),\n optionSelected: mq({\n border: `3px solid ${variables.primaryColor}`\n }),\n icon: mq({\n position: 'absolute',\n top: 5,\n right: 5,\n fontSize: '2rem',\n color: variables.primaryColor,\n }),\n header: mq({\n textAlign: 'center',\n }),\n priceBlock: mq({\n marginTop: 10,\n marginBottom: 10\n }),\n price: mq({\n fontSize: '1.6rem',\n fontWeight: 'bold',\n color: variables.primaryColor\n }),\n per: mq({\n fontSize: '0.875rem',\n color: '#999',\n marginLeft: '1rem'\n }),\n }\n}\n","/** @jsx jsx */\nimport { jsx } from '@emotion/core'\nimport style from './payStyle';\nimport React from 'react';\n\nimport { usePost } from 'components';\nimport { Button, ErrorMessage } from 'components';\nimport env from 'env';\nimport { useRouter } from 'components';\nimport { initStripe } from './payStripe';\n\nimport { priceData } from '../_priceData'\nimport { MonthlyOrYearly } from '../monthlyOrYearly'\n\nexport function Pay({ payVM, getSelection }) {\n\n const [per, setPer] = React.useState('monthly');\n const [stripe, setStripe] = React.useState(null);\n const [card, setCard] = React.useState(null);\n const [error, setError] = React.useState(null);\n\n const post = usePost();\n const { Redirect } = useRouter()\n\n React.useEffect(() => {\n const { stripe, card } = initStripe(setError)\n setStripe(stripe);\n setCard(card);\n }, [])\n\n function payNow() {\n if (error) return;\n stripe.createToken(card).then(function (result) {\n if (result.error) {\n setError(result.error.message);\n } else {\n setError(null);\n // Send the token to your server.\n onSubmit(result.token.id);\n }\n });\n }\n\n function onSubmit(tokenId) {\n const data = payVM; //getSelection();\n\n console.log(tokenId, data)\n post.send(env.apiBase + \"/api/subscription/payStripe\", { ...data, per, tokenId: tokenId, cartId: env.getDevCartId() });\n }\n\n if (post.done()) {\n env.setDevCartId(null);\n return \n }\n\n const data = payVM; //getSelection()\n const subsType = priceData[data.subscriptionType]\n // console.log(data, subsType)\n\n\n return
\n
\n
\n {subsType ?
\n

You have selected '{subsType.name}'. Please choose your payment frequency.

\n \n
:
No subscription selected. Please go back to the previouse steps.
}\n\n\n
\n
\n
\n
\n {/*
\n Payment through encrypted gateway can be made by Visa, Mastercard or AMEX. Please enter your credit card details to complete your order. \n For alternative payment methods please contact us \n
*/}\n
\n\n
\n\n
\n
\n \n \n \n
\n
\n}\n","import env from 'env';\n\nexport function initStripe(setError) {\n // Create a Stripe client.\n const stripe = window.Stripe(env.stripeKey);\n\n\n // Create an instance of Elements.\n const elements = stripe.elements();\n\n // Custom styling can be passed to options when creating an Element.\n // (Note that this demo uses a wider set of styles than the guide below.)\n const elStyle = {\n base: {\n color: '#32325d',\n fontFamily: '\"Helvetica Neue\", Helvetica, sans-serif',\n fontSmoothing: 'antialiased',\n fontSize: '18px',\n '::placeholder': {\n //color: '#aab7c4'\n color: '#000000'\n }\n },\n invalid: {\n color: '#fa755a',\n iconColor: '#fa755a'\n }\n };\n\n // Create an instance of the card Element.\n const card = elements.create('card', { style: elStyle });\n\n // Add an instance of the card Element into the `card-element`
.\n card.mount('#card-element');\n\n // Handle real-time validation errors from the card Element.\n card.addEventListener('change', function (event) {\n if (event.error) {\n setError(event.error.message);\n } else {\n setError(null);\n }\n });\n\n return { stripe, card };\n}","import React from 'react';\nimport env from 'env';\nimport { Loading, ErrorPopup } from 'components';\nimport { useRouter } from 'components';\n\nimport { usePost } from 'components';\nimport { Pay } from '../signupSteps/cartPayment/pay';\n\nexport function VerifyEmail() {\n const { query } = useRouter();\n const token = query.u || '';\n\n const post = usePost();\n\n React.useEffect(() => {\n post.send(env.apiBase + \"/api/subscription/VerifyEmail\", { token: token });\n // eslint-disable-next-line\n }, []);\n\n if (post.loading()) {\n return
Verifying your email...
\n } else if (post.hasErrors()) {\n return \n }\n\n const data = post.response;\n const payVM = data.results.payVM;\n console.log(data.results.payVM)\n return
\n

Your email is successfully verified.

\n

Payment

\n\n \n
\n}\n","import React from 'react';\nimport env from 'env';\nimport { usePost } from 'components';\nimport { SiteLink } from 'components';\nimport { useRouter } from 'components';\nimport { Loading, ErrorPopup } from 'components';\nimport { Button, ErrorMessage } from 'components';\nimport { IoReturnUpBack } from 'react-icons/io5';\n\nexport function CreateAccountLoading() {\n const { query } = useRouter();\n const token = (query && query.u) || '';\n const post = usePost();\n\n React.useEffect(() => {\n post.send(env.apiBase + '/api/profile/validateToken', { token: token });\n // eslint-disable-next-line\n }, []);\n\n if (post.loading()) {\n return (\n \n
Validating Request...
\n
\n );\n } else if (post.hasErrors()) {\n return (\n \n Go back to{' '}\n \n LOG IN\n \n \n );\n }\n\n const data = post.response?.results || {};\n return ;\n}\n\nexport function CreateAccount({ token, data }) {\n const [password, setPassword] = React.useState('');\n const [confirmPassword, setConfirmPassword] = React.useState('');\n const [errors, setErrors] = React.useState([]);\n\n const post = usePost();\n\n function onSubmit(e) {\n e.preventDefault();\n if (password.length === 0) {\n setErrors(['Password is required.']);\n return;\n }\n if (password !== confirmPassword) {\n setErrors([`Password and Confirm Password don't match.`]);\n return;\n }\n\n post.send(env.apiBase + '/api/profile/createAccount', {\n token: token,\n password: password,\n confirmPassword: confirmPassword,\n });\n }\n\n React.useEffect(() => {\n if (post.done()) {\n window.setTimeout(() => (window.location.href = '/member/login'), 1500);\n }\n }, [post]);\n\n if (!data.corporateId) return
Invalid link - no corporate linked.
;\n\n return (\n
\n

Create an account

\n
\n
\n
\n Email: {data.email}\n
\n
\n
\n \n {\n setPassword(event.target.value);\n }}\n />\n
Password is invalid
\n
\n
\n \n {\n setConfirmPassword(event.target.value);\n }}\n />\n
Confirm Password is invalid
\n
\n
\n
\n \n {post.done() && (\n
\n Successfully created your account. Please wait while page is loading...\n
\n )}\n
\n
\n \n \n \n
\n
\n\n
\n Go back to{' '}\n \n LOG IN\n \n
\n
\n );\n}\n","import React from 'react';\nimport { Route, Redirect } from 'react-router-dom';\n\nimport DashboardLayoutRoute from 'layout/dashboardLayout';\nimport DashboardNoAuthLayoutRoute from 'layout/dashboardNoAuthLayout';\n\nimport { Login } from 'auth';\nimport { ChangePassword } from 'site/members/profile/changePassword';\nimport { ForgotPassword } from 'auth/controls/forgotPassword/forgotPassword';\nimport { ResetPassword } from 'auth/controls/resetPassword/resetPassword';\nimport { VerifyEmail } from 'auth/controls/verifyEmail/verifyEmail';\nimport { CreateAccountLoading } from 'auth/controls/createAccount/createAccount';\nimport { MenuLoader } from './menuLoader';\n\n// import { Dashboard } from 'site/members/dashboard/dashboard';\n\nconst MemberLayout = ({ children }) => (\n
\n \n \n \n \n \n \n\n \n {/* */}\n\n \n \n \n
\n);\nexport default MemberLayout;\n","import React from 'react';\nimport { useAuth } from 'auth';\nimport { SiteLink } from 'components';\n\nexport function NoPermission(props) {\n const auth = useAuth();\n const debugInfo = props.debugInfo;\n\n function goBack(e) {\n e.preventDefault();\n if (typeof window !== `undefined`) {\n window.history.back();\n }\n }\n\n const loggedIn = !!auth.user;\n\n return (\n
\n
\n

No Permission

\n {!loggedIn && (\n
\n

\n To access this page, please Log in first.\n

\n
\n )}\n\n {loggedIn && (\n
\n

Sorry, you don't have a permission to this page.

\n
\n )}\n\n
\n \n
\n\n {debugInfo && (\n
\n            Error message: {debugInfo.pageUrl} - {debugInfo.loadFrom}{' '}\n          
\n )}\n
\n
\n );\n}\n","import React from 'react';\nimport env from 'env';\nimport { useGet } from 'components';\nimport { Loading } from 'components';\nimport { useRouter } from '../components';\nimport { useAuth } from 'auth';\nimport { NoPermission } from 'components/notFound/noPermission';\n\nconst PermissionCheckFirst = ({ children, ...rest }) => {\n const isCancelled = React.useRef(false);\n const [sessionChecked, setSessionChecked] = React.useState(false);\n const { pathname, navigate, Redirect } = useRouter();\n const auth = useAuth();\n const get = useGet();\n\n React.useEffect(() => {\n const checkAuth = async () => {\n if (!isCancelled.current) {\n const loggedIn = await auth.loggedIn();\n // console.log({ loggedIn })\n if (!loggedIn) {\n navigate('/member/login');\n } else {\n setSessionChecked(true);\n if (get.status === 'ready')\n get.send(env.apiBase + '/api/member/canAccess?url=' + encodeURIComponent(pathname));\n }\n }\n };\n checkAuth();\n return () => {\n isCancelled.current = true;\n };\n // eslint-disable-next-line\n }, [auth, navigate]);\n\n if (!sessionChecked || !get.done()) {\n return (\n
\n \n
\n );\n } else {\n console.log(get.response);\n if (get.response.redirectUrl) {\n return ;\n } else if (get.response.accessResultCode === 98 /*No Auth*/) {\n return ;\n } else if (get.response.accessResultCode === 99 /*No Permission*/) {\n return ;\n } else {\n return
{children}
;\n }\n }\n};\n\nexport default PermissionCheckFirst;","import facepaint from 'facepaint'\n// 'sm', 'md', 'lg', 'xl', 'xxl'\nconst breakpoints = [576, 768, 992, 1200, 1600, 1900, 2200] \n\nexport const mqBanner = facepaint(\n breakpoints.map(bp => `@media (min-width: ${bp}px)`)\n)\n\n// 576, 768, 992, 1200, 1600, 1900, 2200\nexport const bannerThin = [180, 190, 200, 220, 250, 270, 290, 300]\nexport const bannerStandard = [350, 350, 400, 450, 500, 550, 600, 700]\n\nexport const getBannerSize = (setName) => {\n if (setName === 'standard')\n return bannerStandard\n else if (setName === 'thin')\n return bannerThin\n else\n return bannerStandard\n}","/** @jsx jsx */\nimport { jsx } from '@emotion/core'\nimport utils from 'utils';\nimport { SiteLink } from 'components';\nimport { getImageBannerStyle } from './singlePanelStyle';\n\nexport function SingleBannerPanel({ bgUrl, heightSet, photoCredit, photoCreditUrl }) {\n const cssClass = utils.classNames(`single-banner`, `banner-item`);\n const s = getImageBannerStyle(heightSet);\n\n return (\n
\n {(photoCredit && !photoCreditUrl) &&
{photoCredit}
}\n {(photoCredit && photoCreditUrl) && {photoCredit}}\n
\n );\n}\n","import { mqBanner, getBannerSize } from 'site/bannerSize/bannerSize';\n\nexport function getImageBannerStyle(heightSet) {\n const bannerSize = getBannerSize(heightSet);\n\n return {\n bannerHeight: mqBanner({\n height: bannerSize\n }),\n photoCredit: mqBanner({\n color: 'white',\n fontSize: '0.8rem',\n transform: 'rotate(-90deg) translate(-50%, 10px)',\n position: 'absolute',\n top: '50%',\n left: '0',\n textAlign: 'center',\n transformOrigin: 'left top',\n maxWidth: bannerSize.map(x => x * 0.9),\n '&:hover, &:active': {\n color: 'white'\n }\n })\n }\n}","import utils from 'utils';\nimport { utcToZonedTime, format } from 'date-fns-tz';\nimport Timespan from 'readable-timespan';\n\nexport const baseTimeZone = 'Australia/Sydney';\nexport function getAESTMonth(date) {\n const zonedTime = utcToZonedTime(date, baseTimeZone);\n return {\n title: format(zonedTime, 'MMMM yyyy', { timeZone: baseTimeZone }),\n id: format(zonedTime, 'yyyy-MM', { timeZone: baseTimeZone }),\n };\n}\n\nexport function getAESTDate(date, formatStr) {\n return getZonedTimeFormat(date, baseTimeZone, formatStr);\n}\n\nexport function getZonedTimeFormat(date, timeZone, formatStr = 'yyyy-MM-dd HH:mm:ss zzz') {\n if (!date) return null;\n const zonedTime = utcToZonedTime(date, timeZone);\n return format(zonedTime, formatStr, { timeZone });\n}\n\nexport function getTimeTextForTimeZone(fromDate, toDate, timeZone) {\n const formatFn = (date) => (getZonedTimeFormat(date, timeZone, 'h:mmaaa') || '').replace(':00', '');\n if (!fromDate) return '';\n if (!toDate || toDate <= fromDate) return formatFn(fromDate);\n return `${formatFn(fromDate)} to ${formatFn(toDate)}`;\n}\n\nexport function getCurrentTimeZone() {\n try {\n return Intl.DateTimeFormat().resolvedOptions().timeZone;\n } catch (e) {}\n return null;\n}\n\nexport function timeLeft(date) {\n const timespan = new Timespan();\n return timespan.parse(date - new Date());\n}\n\n// https://en.wikipedia.org/wiki/List_of_tz_database_time_zones\n// timeTest('2021-10-30T13:00:00+11:00');\nexport function timeTest(dateObj) {\n const date = utils.date.toDate(dateObj);\n console.log(dateObj);\n console.log('Local', date);\n console.log('Adelaide', getZonedTimeFormat(date, 'Australia/Adelaide'));\n console.log('Sydney', getZonedTimeFormat(date, 'Australia/Sydney'));\n console.log('Brisbane', getZonedTimeFormat(date, 'Australia/Brisbane'));\n console.log('Darwin', getZonedTimeFormat(date, 'Australia/Darwin'));\n console.log('Perth', getZonedTimeFormat(date, 'Australia/Perth'));\n}\n","import React from 'react';\nimport { createPortal } from \"react-dom\";\n\nexport function Portal({children}){\n const [el] = React.useState(document.createElement('div'));\n React.useEffect(() => {\n let mount = document.getElementById(\"portal-root\");\n mount.appendChild(el);\n return () => mount.removeChild(el);\n }, [el]);\n return createPortal(children, el);\n}","/** @jsx jsx */\nimport { jsx } from '@emotion/core'\nimport React from 'react';\nimport { Portal } from \"site/portal/portal\";\nimport { getPopupStyle } from './popupStyle';\nimport { IoMdCloseCircleOutline } from 'react-icons/io'\n\nexport function Popup({ children, showPopup, onClosed, ...attrs }) {\n const options = { ...{ popupSize: 'medium' }, ...attrs }\n const s = getPopupStyle()\n return \n \n
\n
\n
\n
{showPopup && children}
\n
\n
\n
\n
\n}\n","import { mq } from 'cssInJs';\nimport { rgba } from 'polished';\n\nexport function getPopupStyle() {\n return {\n overlay: mq({\n position: 'fixed',\n top:0,\n bottom:0,\n left: 0,\n right: 0,\n transition: 'all 0.5s',\n // pointerEvents: 'none',\n background: rgba('#000', 0.8),\n zIndex: -1,\n opacity: 0,\n visibility: 'hidden',\n }),\n show: mq({\n opacity: 1,\n visibility: 'visible',\n zIndex: 3000\n }),\n popup: mq({\n width: '90%',\n height: '85vh',\n maxWidth: 1000,\n background: '#fff',\n position: 'absolute',\n left: '50%',\n top: '50%',\n transform: 'translate(-50%, -50%)',\n }),\n sizemedium: mq({\n width: '90%',\n height: '85vh',\n maxWidth: 1000,\n }),\n sizesmall: mq({\n width: '90%',\n height: '85vh',\n maxWidth: 800,\n maxHeight: 400\n }),\n content: mq({\n padding: 20,\n height: '100%',\n overflowY: 'auto'\n }),\n close: mq({\n position: 'absolute',\n right: 15,\n top: 5,\n zIndex: 3001,\n cursor: 'pointer',\n })\n }\n}\n\n","import React from 'react';\n\nexport function FieldError({ error }) {\n const errorMessage = error?.message || error;\n return errorMessage ?
{errorMessage}
: null;\n}\n\nexport function ServerErrors({ errors }) {\n const errorMessage = errors?.message || errors;\n // console.log(errorMessage, errors);\n return errorMessage ?
{errorMessage}
: null;\n}\n","import { useEffect, useState } from 'react';\nconst useIsMounted = () => {\n const [isMounted, setIsMouted] = useState(false);\n useEffect(() => {\n setIsMouted(true);\n return () => setIsMouted(false);\n }, []);\n return isMounted;\n};\nexport { useIsMounted };\n","import React from 'react';\n\nimport { useForm } from 'react-hook-form';\nimport { yupResolver } from '@hookform/resolvers/yup';\nimport * as yup from 'yup';\nimport { FieldError, ServerErrors } from '@site/_helpers';\n\nimport env from 'env';\nimport { ErrorMessage } from 'components';\nimport { usePost } from 'components';\nimport { useStore } from 'store';\nimport { useRouter } from 'components';\n\nconst schema = yup.object().shape({\n email: yup.string().nullable().required('Email is required.'),\n firstName: yup.string().nullable().required('First Name is required.'),\n surname: yup.string().nullable().required('Surname is required.'),\n phone: yup.string().nullable(),\n numberOfTickets: yup\n .number()\n .nullable()\n .typeError('Number of Tickets must be a number')\n .required('Please provide Number of Tickets.')\n .min(1, 'Number of Tickets must be more than 1.'),\n});\n\nexport function RegisterForm({ event, onClosed }) {\n const post = usePost();\n const { dispatch } = useStore();\n const { push } = useRouter();\n const [registered, setRegistered] = React.useState(false);\n const [currentCartItems, setCurrentCartItems] = React.useState(0);\n const defaultValues = event.register || {};\n\n const useAddToCart = event.eventType === 0 /*PurchaseTicket*/ && event.price;\n\n const {\n formState: { isSubmitting, errors },\n register,\n handleSubmit,\n reset,\n } = useForm({ defaultValues, resolver: yupResolver(schema) });\n const [serverErrors, setServerErrors] = React.useState([]);\n\n async function onSubmit(model) {\n try {\n if (useAddToCart) {\n post.send(env.apiBase + '/api/event/addToCart', {\n eventId: event.eventId,\n register: model,\n cartId: env.getDevCartId(),\n });\n } else {\n post.send(env.apiBase + '/api/event/register', { eventId: event.eventId, register: model });\n }\n } catch (e) {\n reset(model);\n setServerErrors(e);\n }\n }\n\n React.useEffect(() => {\n if (post.done()) {\n post.reset();\n reset({ numberOfTickets: 1 });\n\n const useAddToCart = event.eventType === 0 /*PurchaseTicket*/ && event.price;\n if (useAddToCart) {\n const cartInfo = post.response.results.cartInfo;\n console.log(cartInfo);\n env.setDevCartId(cartInfo.cartId);\n dispatch({\n type: 'SET_CART',\n payload: cartInfo,\n });\n\n setRegistered(true);\n setCurrentCartItems(cartInfo.numberOfItems);\n } else {\n setRegistered(true);\n }\n }\n }, [dispatch, post, reset, post.status, event]);\n\n // console.log(isValid, dirtyFields, isSubmitting, errors);\n return (\n
\n
\n
\n
\n
\n \n \n \n
\n
\n
\n
\n \n \n \n
\n
\n
\n
\n
\n
\n \n \n \n
\n
\n
\n
\n \n \n \n
\n
\n
\n
\n
\n
\n \n \n \n
\n
\n
\n\n
\n {useAddToCart ? (\n registered ? (\n <>\n
\n \n \n
\n
\n

\n Successfully added. Total {currentCartItems} {currentCartItems > 1 ? 'items' : 'item'} in the cart.{' '}\n
\n You can keep adding more registrations on this page.\n

\n
\n \n ) : (\n \n )\n ) : registered ? (\n
\n

Successfully submitted.

\n

A confirmation email has been sent. Please check your inbox.

\n
\n ) : (\n \n )}\n\n \n
\n\n \n \n \n
\n );\n}\n","import React from 'react';\nimport utils from 'utils';\nimport { Popup } from 'site/_popup/popup';\nimport { RegisterForm } from './registerForm';\n\nexport function RegisterPopup({ showPopup, onClosed, event }) {\n const title = event.eventTitle;\n\n return (\n \n
\n

\n {title}\n {event.price != null && (\n - {(event.price || 0) === 0 ? 'FREE' : utils.money.formatMoney(event.price)}\n )}\n

\n

Please fill out the following registration form.

\n\n
\n \n
\n
\n
\n );\n}\n","import React from 'react';\nimport { SiteLink } from 'components';\nimport { getAESTDate, getTimeTextForTimeZone, getCurrentTimeZone } from 'site/_helpers/dateTime';\nimport utils from 'utils';\nimport { RegisterPopup } from './register/registerPopup';\nimport { MenuLoader } from 'layout/menuLoader';\n\nexport function EventDetails({ event }) {\n const timeZones = React.useMemo(() => getTimeZones(event), [event]);\n console.log(\n event,\n timeZones,\n utils.date.toDateTime(event.startDateTime),\n (utils.date.toDateTime(event.startDateTime) - new Date()) / (1000 * 60 * 60)\n );\n // const tileLink = `/event/${event.eventSlug}`;\n // const title = event.eventTitle;\n const date = getAESTDate(event.startDateTime, 'MMMM d');\n const duration = event.duration;\n const isPast = utils.date.toDateTime(event.startDateTime) - new Date() < 0;\n const fullyBooked = event.numOfPlaces && (event.usedNumOfPlaces || 0) >= event.numOfPlaces;\n\n return (\n
\n \n
\n < Return to Events\n
\n

{event.eventTitle}

\n
\n
\n {date} @\n
\n
\n \n {timeZones.current.map((x) => (\n \n {x.timeText} {x.area}\n \n ))}\n \n ({utils.site.toHoursText(duration)})\n
\n {timeZones.others.map((x, inx) => (\n \n {inx > 0 && | }\n {x.timeText} {x.area}\n \n ))}\n
\n
\n
\n\n
\n\n
\n\n
\n\n {isPast || fullyBooked ? (\n
\n \n
\n ) : (\n \n )}\n
\n );\n}\n\nfunction Book({ event }) {\n const [showPopup, setShowPopup] = React.useState(false);\n\n let priceEl = null;\n if (event.eventType === 0 /*PurchaseTicket*/) {\n priceEl = (\n
\n
\n {(event.price || 0) === 0 ? 'FREE' : utils.money.formatMoney(event.price)}\n
\n
\n );\n }\n\n return (\n
\n
\n {priceEl}\n
\n \n
\n
\n {\n e.stopPropagation();\n setShowPopup(false);\n }}\n event={event}\n />\n
\n );\n}\n\nfunction getTimeZones(event) {\n const tz = getCurrentTimeZone() || 'Australia/Sydney';\n const timeZones = [\n { timeZone: 'Australia/Adelaide', area: 'SA' },\n { timeZone: 'Australia/Sydney', area: 'NSW/VIC/TAS' },\n { timeZone: 'Australia/Brisbane', area: 'QLD' },\n { timeZone: 'Australia/Darwin', area: 'NT' },\n { timeZone: 'Australia/Perth', area: 'WA' },\n ];\n\n timeZones.forEach((x) => (x.timeText = getTimeTextForTimeZone(event.startDateTime, event.endDateTime, x.timeZone)));\n\n return { current: timeZones.filter((x) => tz === x.timeZone), others: timeZones.filter((x) => tz !== x.timeZone) };\n}\n","import React from 'react';\nimport env from 'env';\nimport utils from 'utils';\nimport { useGet } from 'components';\n// import { SiteLink } from 'components';\nimport { Loading, ErrorPopup } from 'components';\nimport { useRouter } from 'components';\nimport { SingleBannerPanel } from 'site/singleBanner/singlePanel';\nimport { EventDetails } from './eventDetails';\n\nconst r = utils.site.resourcePath;\nconst bannerImage = '/sites/preventingharm/media/bwbanners/adobestock_392700489.jpg';\n\nexport function EventView() {\n const { query } = useRouter();\n const get = useGet();\n\n const slug = query.slug || '';\n\n React.useEffect(() => {\n console.log('getting...');\n get.send(env.apiBase + `/api/event/getEvent/${slug}`);\n // eslint-disable-next-line\n }, [slug]);\n\n if (get.loading()) {\n return ;\n } else if (get.hasErrors()) {\n return ;\n }\n\n const event = get.response;\n\n return (\n <>\n \n\n
\n \n
\n \n );\n}\n","function payload(item, key, defaultVal = '') {\n const found = item.payloads.find(x => x.key === key);\n return found ? found.value : defaultVal;\n}\n\nfunction getCodeJson(item) {\n const code = payload(item, 'Code');\n const codeType = payload(item, 'CodeType');\n if (codeType === 'Json') {\n const codeJson = JSON.parse(code);\n return codeJson\n }\n return null\n}\n\n\nfunction hasItemInPageDataByItemTypeCode(pageData, itemTypeCode) {\n return hasItemInPageData(pageData, item => item.itemTypeCode === itemTypeCode);\n}\n\n// hasItemInPageData(cmsOption.pageData, '')\n// matchFn = (item) => item.itemTypeCode === itemTypeCode\nfunction hasItemInPageData(pageData, matchFn) {\n if (!pageData) return false;\n for (let i = 0; i < pageData.sections.length; i++) {\n if (hasItemInItems(pageData.sections[i].items, matchFn)) return true;\n }\n return false;\n}\n\nfunction hasItemInItems(items, matchFn) {\n if (!items) return false;\n for (let i = 0; i < items.length; i++) {\n if (matchFn(items[i])) return true;\n if (hasItemInItems(items[i].items, matchFn)) return true;\n }\n return false;\n}\n\nexport default { payload, getCodeJson, hasItemInPageData, hasItemInItems, hasItemInPageDataByItemTypeCode };","/** @jsx jsx */\nimport { jsx } from '@emotion/core'\nimport Slider from \"react-slick\";\nimport { settings as defaultSettings} from './config';\n\n/**\n * Tile List\n * @param {Array} tiles React elements, required\n * @param {Object} style Style object, required\n * @param {string} cssClass\n * @param {string} useSlider Use SlickSlider, default: false\n * @param {Object} settings Tile Settings, required\n * @param {...Object} attrs Other attributes in the list level\n */\nexport function TileList({tiles, style, overridingStyle, cssClass, useSlider = false, settings = defaultSettings, ...attrs}) {\n const s = style || {};\n const ss = overridingStyle || {};\n const slickSettings = settings.slickSettings;\n\n useSlider = useSlider && tiles.length > 1\n slickSettings.infinite = tiles.length > 2\n\n if (useSlider) {\n return (\n
\n
\n \n {tiles}\n \n
\n
\n );\n } else {\n return (\n
\n
\n {tiles}\n
\n
\n );\n }\n\n}","import { variables, mq } from '../../cssInJs';\nimport { settings as defaultSettings} from './config';\n/**\n * Tile List Style. This is only for list wrapper, not tile itself\n * @param {Object} settings Tile Settings, required\n */\nexport function getTileListStyle(settings = defaultSettings) {\n const marginLR = settings.marginLR;\n const marginTB = settings.marginTB;\n return {\n holder: mq({\n //maxWidth: 1000,\n margin: 'auto',\n marginTop: [30, null, 40],\n marginBottom: [30, null, 40],\n '.slick-prev, .slick-next': {\n top: [100],\n transform: 'translate(0, 0)',\n },\n '.slick-prev': {\n left: [10, null, -20]\n },\n '.slick-next': {\n right: [10, null, -20]\n },\n '.slick-prev:before, .slick-next:before': {\n color: variables.fontColor\n }\n }),\n tiles: mq({\n display: 'flex',\n justifyContent: 'flex-start',\n alignItems: 'stretch',\n flexWrap: 'wrap',\n marginLeft: marginLR.map(x => x === null? null : -x / 2),\n marginRight: marginLR.map(x => x === null? null : -x / 2),\n marginTop: marginTB.map(x => x === null? null : x / 2),\n marginBottom: marginTB.map(x => x === null? null : x / 2),\n }),\n tilesSlider: mq({\n display: 'block',\n marginLeft: [15, null, 15],\n marginRight: [15, null, 15],\n })\n }\n}\n\n","/** @jsx jsx */\nimport { jsx } from '@emotion/core'\nimport utils from 'utils';\nimport { SiteLink } from 'components';\nimport { getTileStyle } from './pageTileStyle';\n\nexport function PageTile({ page, useSlider, disableLink }) {\n const tileLink = page.pageUrl;\n const imageUrl = utils.site.resourcePath(page.imageUrl);\n const title = page.pageTitle;\n const desc = page.tileDesc || page.description;\n const s = getTileStyle();\n\n return (\n \n
\n
\n
{title}
\n
{desc}
\n
\n
\n )\n}","import { variables, mq } from 'cssInJs';\nimport { settings as defaultSettings } from 'site/tileList/config';\n\n//import { rgba } from 'polished';\n\nexport function getTileStyle(settings = defaultSettings) {\n const numOfTilesPerBreakpoints = settings.numOfTilesPerBreakpoints\n const marginLR = settings.marginLR\n const marginTB = settings.marginTB\n\n return {\n tile: mq({\n paddingLeft: marginLR.map(x => x === null ? null : x / 2),\n paddingRight: marginLR.map(x => x === null ? null : x / 2),\n paddingTop: marginTB.map(x => x === null ? null : x / 2),\n paddingBottom: marginTB.map(x => x === null ? null : x / 2),\n maxWidth: numOfTilesPerBreakpoints.map(x => x === null ? null : 100 / x + '%'),\n flexBasis: numOfTilesPerBreakpoints.map(x => x === null ? null : 100 / x + '%'),\n flexGrow: 0,\n flexShrink: 0,\n textAlign: 'left',\n display: 'flex',\n flexDirection: 'column',\n color: 'inherit',\n ':hover': {\n textDecoration: 'none',\n color: 'inherit',\n '.tileBg': {\n transform: 'scale(1.02)',\n transition: 'all .2s ease-in-out'\n },\n '.tileContent': {\n backgroundColor: variables.greenColor\n }\n }\n }),\n tileSlider: mq({\n maxWidth: '100% !important'\n }),\n tileBg: mq({\n backgroundColor: 'white',\n backgroundPosition: 'center',\n backgroundRepeat: 'no-repeat',\n backgroundSize: 'cover',\n height: 0,\n paddingBottom: '56.25%',\n }),\n tileContent: mq({\n display: 'flex',\n flexDirection: 'column',\n flexGrow: 1,\n lineHeight: 1.3,\n //boxShadow: '4px 4px 14px 4px rgba(190,190,190,0.5)',\n backgroundColor: variables.blueColor,\n marginTop: [10],\n padding: [20],\n transition: 'all .2s ease-in-out',\n color:'white'\n }),\n title: mq({\n //fontFamily: variables.familyHeader,\n fontSize: '1.3rem',\n textTransform: 'uppercase',\n lineHeight: 1.3,\n //fontWeight: 900,\n //textAlign: 'center',\n fontWeight:700\n }),\n desc: mq({\n marginTop: 5,\n fontSize: '0.9rem',\n display: '-webkit-box',\n WebkitLineClamp: '9',\n WebkitBoxOrient: 'vertical',\n overflow: 'hidden',\n fontWeight:400\n }),\n }\n}\n\nexport function getTileListOverridingStyle() {\n return {\n tiles: mq({\n alignItems: 'flex-start',\n })\n }\n}","/** @jsx jsx */\nimport { jsx } from '@emotion/core';\nimport React from 'react';\nimport { TileList } from 'site/tileList/tileList';\nimport { getTileListStyle } from 'site/tileList/tileListStyle';\n\nimport { PageTile } from 'site/_cmsItems/pageTiles/view/pageTile/pageTile';\n\nexport function CategoryTiles({ categories }) {\n const pages = React.useMemo(() => getPages(categories), [categories]);\n\n if (categories.length === 0) return
No available guides.
;\n\n const tiles = pages.map((page, index) => );\n return ;\n}\n\nfunction getPages(categories) {\n return (categories || []).map((x) => ({\n pageTitle: x.categoryName || x.tileTitle || x.pageTitle,\n tileDesc: x.tileDesc,\n pageUrl: x.pageUrl,\n imageUrl: x.tileImageUrl,\n }));\n}\n","import React from 'react';\nimport env from 'env';\nimport { useGet, useRouter } from 'components';\n// import { SiteLink } from 'components';\nimport { Loading, ErrorPopup } from 'components';\nimport { useAuth } from 'auth';\nimport { CategoryTiles } from 'site/members/category/categoryTiles';\n\nexport function DashboardLoading({version = 'v1'}) {\n const [sendingStatus, setSendingStatus] = React.useState(null);\n const auth = useAuth();\n const get = useGet();\n const { query } = useRouter();\n const setCorporate = query.setCorporate || '';\n //console.log(\"version ---- \", version);\n if (setCorporate) {\n localStorage.setItem('corporateId', setCorporate);\n }\n //console.log(\"localStorage.getItem('corporateId')\", localStorage.getItem('corporateId'));\n React.useEffect(() => {\n get.send(env.apiBase + `/api/member/getDashboard?corporateId=${localStorage.getItem('corporateId')}`);\n setSendingStatus('pending');\n // eslint-disable-next-line\n }, []);\n\n React.useEffect(() => {\n if (sendingStatus === 'done') auth.setMemberInfo(data.memberInfo);\n // eslint-disable-next-line\n }, [sendingStatus]);\n\n if (get.loading()) {\n return ;\n } else if (get.hasErrors()) {\n let errors = get.errors;\n let title = 'Loading Error';\n if (get.containsErrorMessage('inactive account')) {\n title = 'Account Disabled';\n errors = 'This account is inactive or temporarily disabled.';\n }\n return ;\n }\n\n const data = get.response;\n\n if (get.done() && sendingStatus === 'pending') {\n setSendingStatus('done');\n }\n console.log(\"dfdsfdffd-----\", data);\n return ;\n}","import React from 'react';\nimport cmsUtils from '../cmsUtils';\nimport { DashboardLoading } from 'site/members/dashboard/dashboardLoading';\n\nexport const renderRule = {\n match: (item, cmsOption) =>\n (cmsUtils.getCodeJson(item) || {})['control'] === 'MemberDashboard' && !cmsOption.isCmsEdit,\n itemElt: (item, cmsOption) => ,\n};\n","import React from 'react';\nimport cmsUtils from '../cmsUtils';\nimport { DashboardLoading } from 'site/members/dashboard/dashboardLoading';\n\nexport const renderRule = {\n match: (item, cmsOption) =>\n (cmsUtils.getCodeJson(item) || {})['control'] === 'MemberDashboardV2' && !cmsOption.isCmsEdit,\n itemElt: (item, cmsOption) => ,\n};\n","import React from 'react';\nimport cmsUtils from '../cmsUtils';\nimport { InstagramFeed } from 'components';\nimport { isOffline } from '@site/_offline';\n\nexport const renderRule = {\n match: (item, cmsOption) => (cmsUtils.getCodeJson(item) || {})['control'] === 'instagram', \n itemElt: (item, cmsOption) => (!isOffline() && )\n}","// export { getOfflinePage, getOperators, getOperator, getOperatorById, getFeaturedOperators, getDestination, getExpTypes, getExpType } from './dbSelect'\n// export { indexOfflineData } from './dbInsert'\n// export { addCache, checkCache, existInCache, getAllImagesInCache } from './cache'\n// export { getOfflineMedia } from './media'\n// export { initInstallEventHandler, isInPWA } from './pwa'\n// export { isIOS } from './device'\n\nexport function isOffline() {\n // return true;\n return !navigator.onLine;\n}\n\n\nexport async function getStorageInfo() {\n const messages = []\n if (!('indexedDB' in window)) {\n console.log('not supported')\n }\n if ('caches' in window) {\n messages.push('Cache available')\n }\n if (navigator.storage && navigator.storage.estimate) {\n const quota = await navigator.storage.estimate();\n // quota.usage -> Number of bytes used.\n // quota.quota -> Maximum number of bytes available.\n const percentageUsed = ((quota.usage / quota.quota) * 100).toFixed(2);\n messages.push(`You've used ${percentageUsed}% of the available storage.`);\n const remaining = ((quota.quota - quota.usage) / 1024 / 1024).toFixed(2);\n messages.push(`You can write up to ${remaining} more MBs.`);\n }\n\n if (navigator.storage && navigator.storage.persist) {\n const persistent = await navigator.storage.persist();\n if (persistent)\n messages.push(\"Storage will not be cleared except by explicit user action\");\n else\n messages.push(\"Storage may be cleared by the UA under storage pressure.\");\n }\n\n return messages;\n}\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\r\nexport const sendGAEvent = (category, action, label, value) => {\r\n if (!hasGTM()) return;\r\n window.dataLayer.push(Object.assign({ event: 'gaEvent' }, { category: category || '', action: action || '', label: label || '', value: value || '' }))\r\n}\r\n//#endregion\r\n\r\n\r\n","import { css } from \"@emotion/core\";\nimport { variables, mq } from \"../../cssInJs\";\nimport { darken } from \"polished\";\n\nconst buttonColor = variables.primaryColor;\n\nconst baseStyle = {\n button: mq({\n color: \"white\",\n padding: \"0.7rem 1.5rem 1rem 1.5rem\",\n position: \"relative\",\n overflow: \"hidden\",\n display: \"inline-block\",\n appearance: \"none\",\n webkitAppearance: \"none\",\n //margin: '0 0.5rem',\n \"&:hover .buttonBg\": {\n background: darken(0.1, buttonColor),\n },\n \"&:hover\": {\n color: \"white\",\n textDecoration: \"none\",\n },\n }),\n buttonBg: {\n transition: \"all 0.3s\",\n borderRadius: \"100%\",\n position: \"absolute\",\n background: buttonColor,\n right: \"-200px\",\n left: \"-200px\",\n top: \"-200px\",\n content: '\"\"',\n bottom: \"0\",\n zIndex: \"0\",\n },\n buttonTxt: {\n zIndex: \"1\",\n position: \"relative\",\n },\n};\n\nconst smallStyle = {\n button: css(baseStyle.button, {\n fontSize: \"0.85rem\",\n fontWeight: 600,\n letterSpacing: 1,\n padding: \"0.3rem 1.5rem 0.3rem 1.5rem\",\n \"&:hover .buttonBg\": {\n background: darken(0.1, buttonColor),\n },\n }),\n buttonBg: css(baseStyle.buttonBg, {\n background: buttonColor,\n }),\n buttonTxt: baseStyle.buttonTxt,\n};\n\nexport function getButtonStyle(type) {\n if (type === \"small\") {\n return smallStyle;\n }\n return baseStyle;\n}\n","/** @jsx jsx */\nimport { jsx } from '@emotion/core'\nimport { getButtonStyle } from './buttonStyle';\n\nexport function FormButton({ onClick, status, children, buttonStyle, overridingStyle, to, ...other }) {\n const s = getButtonStyle(buttonStyle);\n const ss = overridingStyle || {};\n return \n \n \n {status === 'pending' && }\n {children}\n \n}\n","import React from 'react';\nimport env from '../../../env';\nimport { usePost } from '../../../components';\nimport { useForm } from '../../../form';\nimport { ErrorMessage } from '../../../components';\nimport { getModel } from './subscribeFormModel';\nimport { gtm } from '../../../lib/tracking';\nimport { FormButton } from '../../button/formButton';\nimport { variables } from 'cssInJs';\n\nimport { darken } from 'polished';\n\nexport function Subscribe() {\n\n const model = getModel({});\n const form = useForm(model, { usePlaceholder: true });\n const [sendingStatus, setSendingStatus] = React.useState(null);\n const post = usePost();\n\n function onSubmit(e) {\n e.preventDefault();\n e.stopPropagation();\n form.validateForm(e, () => {\n const value = { ...form.getValue() };\n post.send(env.apiBase + \"/api/contact/subscribe\", value);\n setSendingStatus('pending')\n })\n }\n\n\n if (post.done() && sendingStatus === 'pending') {\n var value = form.getValue();\n gtm.sendEvent('subscribeFormSubmitted', {contactEmail: value.email} )\n form.reset(model)\n setSendingStatus(null)\n }\n\n const render = (name) => form.renderControl(name, null);\n\n const overridingStyle = {\n button: {\n '&:hover .buttonBg': {\n background: darken(0.1, variables.colorBlue),\n },\n },\n buttonBg: {\n background: variables.colorBlue,\n },\n buttonTxt: {\n fontWeight: 900,\n color: 'white'\n },\n }\n\n return (\n
\n
\n
{render('name')}
\n {/*
{render('phone')}
*/}\n
{render('email')}
\n
\n
\n
\n \n

By subscribing to Ecotourism Australia’s monthly newsletter, you accept the terms of our Privacy Policy

\n
\n

SUBSCRIBE NOW

\n \n \n {post.done() && Successfully registered!}\n
\n
\n
\n
\n );\n}","import { fb, validators } from '../../../lib/form';\n\nexport function getModel(data) {\n const model = fb.group({\n name: [data.name || '', [validators.Required()], { label: 'Name', type: 'text' }],\n //phone: [data.phone || '', [validators.Required()], { label: 'Phone', type: 'text' }],\n email: [data.email || '', [validators.Required(), validators.Email()], { label: 'Email', type: 'email' }],\n }); \n return model;\n}","import React from 'react';\nimport cmsUtils from '../cmsUtils';\nimport { Subscribe } from './subscribe';\n\nexport const renderRule = {\n match: (item, cmsOption) => (cmsUtils.getCodeJson(item) || {})['control'] === 'subscribe', \n itemElt: (item, cmsOption) => \n}","/** @jsx jsx */\nimport { jsx } from '@emotion/core';\nimport React from 'react';\nimport utils from 'utils';\nimport { TileList } from 'site/tileList/tileList';\nimport { getTileListStyle } from 'site/tileList/tileListStyle';\n\nimport { PageTile } from 'site/_cmsItems/pageTiles/view/pageTile/pageTile';\n\nexport function CategoryTiles({ categories }) {\n \n console.log(\"ddsfsddsf\", categories);\n \n \n const pages = React.useMemo(() => getPages(categories), [categories]);\n console.log(pages);\n \n if (categories.length === 0) return
No available guides.
;\n\n const tiles = pages.map((page, index) => );\n return ;\n}\n\nfunction getPages(categories) {\n return (categories || []).map((x) => ({\n pageTitle: x.categoryName || x.tileTitle || x.pageTitle,\n tileDesc: x.tileDesc,\n pageUrl: utils.site.getCategoryShopUrl(x.pageUrl),\n imageUrl: x.tileImageUrl,\n }));\n}\n","/** @jsx jsx */\nimport { jsx } from '@emotion/core';\nimport React from 'react';\nimport env from 'env';\nimport { CategoryTiles } from 'site/ecm/category/categoryTiles';\nimport { useGet } from 'components';\nimport { Loading, ErrorPopup } from 'components';\n\nexport function CategoryTilesLoading({type}) {\n const get = useGet();\n\n React.useEffect(() => {\n get.send(`${env.apiBase}/api/guide/getCategories?type=${type}`);\n // eslint-disable-next-line\n }, []);\n\n if (get.loading()) {\n return ;\n } else if (get.hasErrors()) {\n return ;\n }\n\n const data = get.response;\n \n return (\n
\n \n
\n );\n}\n","/** @jsx jsx */\nimport { jsx } from '@emotion/core';\nimport cmsUtils from '../../cmsUtils';\nimport utils from 'utils';\nimport { CategoryTilesLoading } from 'site/ecm/category/categoryTilesLoading';\n\nexport function CategoryList(props) {\n const item = props.item;\n const cmsOption = props.cmsOption || {};\n // console.log(cmsOption.pageData.pageUrl, cmsOption);\n const isCmsEdit = !!cmsOption.isCmsEdit;\n const pageUrl = cmsOption.pageData.pageUrl;\n const type = cmsUtils.payload(item, 'Type') || 'all';\n // console.log('item', item, isCmsEdit);\n\n const cssClass = utils.classNames('cms_item', item.cssClass || item.anchorName || '');\n\n return isCmsEdit ? (\n
\n
\n Category/Guide List (This will list category tiles automatically)\n
\n
\n ) : (\n
\n \n
\n );\n}\n","import React from 'react';\nimport { CategoryList } from './view/categoryList';\n\nexport const renderRule = {\n match: (item, cmsOption) => item.itemTypeCode === 'GuideProductList',\n itemElt: (item, cmsOption) => ,\n};\n","/** @jsx jsx */\nimport { jsx } from '@emotion/core';\nimport { SiteLink } from 'components';\nimport { getTileStyle } from './pageTileStyle';\nimport { getAESTDate } from 'site/_helpers/dateTime';\nimport utils from 'utils';\n\nexport function EventTile({ event, useSlider, disableLink }) {\n // console.log(event);\n const tileLink = `/event/${event.eventSlug}`;\n const title = event.eventTitle;\n const date = getAESTDate(event.startDateTime, 'MMMM d');\n const duration = event.duration;\n const desc = event.shortDesc || '';\n\n const fullyBooked = event.numOfPlaces && (event.usedNumOfPlaces || 0) >= event.numOfPlaces;\n\n const s = getTileStyle();\n return (\n \n {fullyBooked && (\n
FULLY BOOKED
\n )}\n
\n
\n {date} ({utils.site.toHoursText(duration)})\n
\n
{title}
\n
{desc}
\n
\n
\n );\n}\n","import { variables, mq } from 'cssInJs';\nimport { settings as defaultSettings } from 'site/tileList/config';\n\n//import { rgba } from 'polished';\n\nexport function getTileStyle(settings = defaultSettings) {\n const numOfTilesPerBreakpoints = settings.numOfTilesPerBreakpoints;\n const marginLR = settings.marginLR;\n const marginTB = settings.marginTB;\n\n return {\n tile: mq({\n paddingLeft: marginLR.map((x) => (x === null ? null : x / 2)),\n paddingRight: marginLR.map((x) => (x === null ? null : x / 2)),\n paddingTop: marginTB.map((x) => (x === null ? null : x / 2)),\n paddingBottom: marginTB.map((x) => (x === null ? null : x / 2)),\n maxWidth: numOfTilesPerBreakpoints.map((x) => (x === null ? null : 100 / x + '%')),\n flexBasis: numOfTilesPerBreakpoints.map((x) => (x === null ? null : 100 / x + '%')),\n flexGrow: 0,\n flexShrink: 0,\n textAlign: 'left',\n display: 'flex',\n flexDirection: 'column',\n color: 'inherit',\n ':hover': {\n textDecoration: 'none',\n color: 'inherit',\n '.tileBg': {\n transform: 'scale(1.02)',\n transition: 'all .2s ease-in-out',\n },\n '.tileContent': {\n backgroundColor: variables.greenColor,\n },\n },\n }),\n tileSlider: mq({\n maxWidth: '100% !important',\n }),\n tileBg: mq({\n backgroundColor: 'white',\n backgroundPosition: 'center',\n backgroundRepeat: 'no-repeat',\n backgroundSize: 'cover',\n height: 0,\n paddingBottom: '56.25%',\n }),\n tileContent: mq({\n display: 'flex',\n flexDirection: 'column',\n flexGrow: 1,\n lineHeight: 1.3,\n //boxShadow: '4px 4px 14px 4px rgba(190,190,190,0.5)',\n backgroundColor: variables.blueColor,\n // marginTop: [10],\n padding: [20],\n minHeight: ['10rem'],\n transition: 'all .2s ease-in-out',\n color: 'white',\n }),\n datetime: mq({\n marginBottom: '0.5rem',\n }),\n duration: mq({\n fontSize: '0.8rem',\n }),\n title: mq({\n //fontFamily: variables.familyHeader,\n fontSize: '1.1rem',\n textTransform: 'uppercase',\n lineHeight: 1.3,\n //fontWeight: 900,\n //textAlign: 'center',\n fontWeight: 700,\n }),\n desc: mq({\n marginTop: 5,\n fontSize: '0.9rem',\n display: '-webkit-box',\n WebkitLineClamp: '9',\n WebkitBoxOrient: 'vertical',\n overflow: 'hidden',\n // fontWeight: 400,\n }),\n };\n}\n\nexport function getTileListOverridingStyle() {\n return {\n tiles: mq({\n alignItems: 'flex-start',\n }),\n };\n}\n","/** @jsx jsx */\nimport { jsx } from '@emotion/core';\nimport { mq } from 'cssInJs';\nimport React from 'react';\nimport { TileList } from 'site/tileList/tileList';\nimport { getTileListStyle } from 'site/tileList/tileListStyle';\n\nimport { EventTile } from './tile/eventTile';\nimport { getAESTMonth } from 'site/_helpers/dateTime';\n\nexport function EventTiles({ events }) {\n const months = React.useMemo(() => getMonths(events), [events]);\n\n if (months.length === 0) return
No events.
;\n return (\n
\n {months.map((month) => (\n
\n

{month.title}

\n \n
\n ))}\n
\n );\n}\n\nfunction MonthEventTiles({ events }) {\n if (events.length === 0) return
No events.
;\n\n const overridingStyle = {\n holder: mq({\n marginTop: [5, null, 5],\n }),\n };\n\n const tiles = events.map((event, index) => (\n \n ));\n return ;\n}\n\nfunction getMonths(events) {\n const months = events.reduce((acc, event) => {\n const month = getAESTMonth(event.startDateTime);\n const key = month.id;\n (acc[key] = acc[key] || { id: month.id, title: month.title, events: [] }).events.push(event);\n return acc;\n }, {});\n const sorted = Object.keys(months)\n .sort()\n .map((key) => ({ ...months[key] }));\n // console.log(months, sorted);\n\n return sorted;\n}\n","/** @jsx jsx */\nimport { jsx } from '@emotion/core';\nimport React from 'react';\nimport env from 'env';\nimport { EventTiles } from '@site/event/eventList/eventTiles';\nimport { useGet } from 'components';\nimport { Loading, ErrorPopup } from 'components';\n\nexport function EventTilesLoading() {\n const get = useGet();\n\n React.useEffect(() => {\n get.send(`${env.apiBase}/api/event/getEvents`);\n // eslint-disable-next-line\n }, []);\n\n if (get.loading()) {\n return ;\n } else if (get.hasErrors()) {\n return ;\n }\n\n const data = get.response;\n return (\n
\n \n
\n );\n}\n","/** @jsx jsx */\nimport { jsx } from '@emotion/core';\n// import cmsUtils from '../../cmsUtils';\nimport utils from 'utils';\nimport { EventTilesLoading } from '@site/event/eventList/eventTilesLoading';\n\nexport function EventList(props) {\n const item = props.item;\n const cmsOption = props.cmsOption || {};\n // console.log(cmsOption.pageData.pageUrl, cmsOption);\n const isCmsEdit = !!cmsOption.isCmsEdit;\n // const pageUrl = cmsOption.pageData.pageUrl;\n // console.log('item', item, isCmsEdit);\n\n const cssClass = utils.classNames('cms_item', item.cssClass || item.anchorName || '');\n\n return isCmsEdit ? (\n
\n
Event List (This will list event tiles automatically)
\n
\n ) : (\n
\n \n
\n );\n}\n","import React from 'react';\nimport { EventList } from './view/eventList';\n\nexport const renderRule = {\n match: (item, cmsOption) => item.itemTypeCode === 'EventList',\n itemElt: (item, cmsOption) => ,\n};\n","/** @jsx jsx */\nimport { jsx } from '@emotion/core';\nimport React from 'react';\nimport { TileList } from 'site/tileList/tileList';\nimport { getTileListStyle } from 'site/tileList/tileListStyle';\n\nimport { PageTile } from 'site/_cmsItems/pageTiles/view/pageTile/pageTile';\n\nexport function GuideTiles({ guides }) {\n const pages = React.useMemo(() => getPages(guides), [guides]);\n\n if (guides.length === 0) return
No available guides.
;\n\n const tiles = pages.map((page, index) => );\n return ;\n}\n\nfunction getPages(guides) {\n return (guides || []).map((x) => ({\n pageTitle: x.guideTitle || x.tileTitle || x.pageTitle,\n tileDesc: x.tileDesc,\n pageUrl: x.pageUrl,\n imageUrl: x.tileImageUrl,\n }));\n}\n","/** @jsx jsx */\nimport { jsx } from '@emotion/core';\nimport React from 'react';\nimport env from 'env';\nimport { GuideTiles } from 'site/members/guide/guideTiles';\nimport { useGet } from 'components';\nimport { Loading, ErrorPopup } from 'components';\n\nexport function GuideTilesLoading({ pageUrl }) {\n const get = useGet();\n\n React.useEffect(() => {\n get.send(\n `${env.apiBase}/api/member/getCategory?cat=${encodeURIComponent(pageUrl)}&corporateId=${localStorage.getItem(\n 'corporateId'\n )}`\n );\n // eslint-disable-next-line\n }, []);\n\n if (get.loading()) {\n return ;\n } else if (get.hasErrors()) {\n return ;\n }\n\n const data = get.response;\n \n if(!data){\n return(\n
\n No Guides\n
\n )\n }\n\n return (\n \n
\n \n
\n );\n}\n","/** @jsx jsx */\nimport { jsx } from '@emotion/core';\nimport React from 'react';\nimport env from 'env';\nimport { Button, ErrorMessage } from 'components';\nimport { usePost } from 'components';\nimport { useStore } from 'store';\nimport { useRouter } from 'components';\n\nexport function AddToCart({ product, useSlider, disableLink }) {\n const post = usePost();\n const { state, dispatch } = useStore();\n const { push } = useRouter();\n\n const exists = React.useMemo(() => checkExists(state, product), [state, product]);\n\n function addToCart(e) {\n e.preventDefault();\n e.stopPropagation();\n post.send(env.apiBase + '/api/guide/addToCart', { guideId: product.guideId });\n }\n\n function removeFromCart(e) {\n e.preventDefault();\n e.stopPropagation();\n post.send(env.apiBase + '/api/guide/removeFromCart', { guideId: product.guideId });\n }\n\n React.useEffect(() => {\n if (post.done()) {\n post.reset();\n const cartInfo = post.response.results.cartInfo;\n console.log(cartInfo);\n env.setDevCartId(cartInfo.cartId);\n dispatch({\n type: 'SET_CART',\n payload: cartInfo,\n });\n }\n }, [dispatch, post, post.status]);\n\n return (\n
\n {exists && (\n \n )}\n {!exists && (\n \n )}\n {exists && (\n \n )}\n\n \n
\n );\n}\n\nfunction checkExists(state, product) {\n const orderItems = state?.cartInfo?.orderItems || [];\n const exists = orderItems.some((x) => x?.ext?.itemId === product.guideId);\n\n //console.log('checkExists', product.guideId, state, exists);\n return exists;\n}\n","import React from 'react';\nimport parse, { domToReact, attributesToProps } from 'html-react-parser';\nimport utils from '../../../../utils';\nimport env from '../../../../env';\n\n//https://github.com/remarkablemark/html-react-parser\n\nconst options = {\n replace,\n};\nlet _embedDataList = [];\nlet _cmsOption = {};\n\nexport function renderHtml(html) {\n return parse(html || '', options);\n}\n\nfunction replace(node) {\n //console.log(node)\n if (!env.isProd && node.type === 'tag' && node.name === 'img') {\n return replaceImg(node);\n } else if (node.type === 'tag' && node.attribs.class === 'button') {\n return replaceButton(node);\n } else if (node.type === 'tag' && node.attribs['data-embed-jaba']) {\n return replaceEmbedCode(node);\n }\n}\n\nfunction replaceImg(node) {\n if (node.attribs && node.attribs.src) {\n const props = attributesToProps(node.attribs);\n props.src = utils.site.resourcePath(node.attribs.src);\n // eslint-disable-next-line\n return ;\n }\n return null;\n}\n\nfunction replaceButton(node) {\n if (node.children && node.children.some((x) => x.name === 'span')) return null;\n const props = attributesToProps(node.attribs);\n return React.createElement(node.name, props, {domToReact(node.children, options)});\n}\n\nfunction replaceEmbedCode(node) {\n const id = node.attribs['data-embed-jaba'];\n const found = utils.array.find(_embedDataList, (x) => x.id === id);\n if (found) {\n //console.log(found)\n return
{renderHtml(found.code, _cmsOption)}
;\n } else return null;\n}\n","/** @jsx jsx */\nimport { jsx } from '@emotion/core';\nimport React from 'react';\nimport utils from 'utils';\nimport { SiteLink } from 'components';\nimport { getTileStyle } from './pageTileStyle';\nimport { Popup } from 'site/_popup/popup';\n// import { ErrorPopup } from 'components';\nimport { AddToCart } from './addToCart';\nimport { renderHtml } from './renderHtml';\n\nexport function ProductTile({ product, useSlider }) {\n const [showPopup, setShowPopup] = React.useState(false);\n // console.log(product);\n const tileLink = '/products' + product.pageUrl;\n const imageUrl = utils.site.resourcePath(product.tileImageUrl);\n const title = product.guideTitle || product.tileTitle;\n const desc = product.tileDesc;\n const price = utils.money.formatMoney(product.price);\n\n function addToCart(e) {\n e.preventDefault();\n e.stopPropagation();\n console.log('addToCart');\n }\n\n function viewDetails(e) {\n e.preventDefault();\n e.stopPropagation();\n setShowPopup(true);\n }\n const s = getTileStyle();\n return (\n \n
\n
\n
{title}
\n
{desc}
\n
\n
\n
\n {price}\n
\n \n
\n\n {\n e.stopPropagation();\n setShowPopup(false);\n }}\n addToCart={addToCart}\n product={product}\n />\n
\n );\n}\n\nfunction ProductPopup({ showPopup, onClosed, product, addToCart }) {\n const title = product.guideTitle || product.tileTitle;\n const image = product.tileImageUrl && utils.site.resourcePath(product.tileImageUrl);\n const desc = product.ecmDescription || product.tileDesc;\n const price = utils.money.formatMoney(product.price);\n\n const guide = {\n lineHeight: '1.3',\n textAlign: 'center',\n };\n return (\n \n
\n

{title}

\n\n
\n {image && (\n \n \n
\n )}\n
\n
{renderHtml(desc)}
\n
\n
\n\n
\n
{price}
\n\n \n \n
\n
\n \n );\n}\n","import { variables, mq } from 'cssInJs';\nimport { settings as defaultSettings } from 'site/tileList/config';\n\nimport { darken } from 'polished';\n\nexport function getTileStyle(settings = defaultSettings) {\n const numOfTilesPerBreakpoints = settings.numOfTilesPerBreakpoints;\n const marginLR = settings.marginLR;\n const marginTB = settings.marginTB;\n\n return {\n tile: mq({\n paddingLeft: marginLR.map((x) => (x === null ? null : x / 2)),\n paddingRight: marginLR.map((x) => (x === null ? null : x / 2)),\n paddingTop: marginTB.map((x) => (x === null ? null : x / 2)),\n paddingBottom: marginTB.map((x) => (x === null ? null : x / 2)),\n maxWidth: numOfTilesPerBreakpoints.map((x) => (x === null ? null : 100 / x + '%')),\n flexBasis: numOfTilesPerBreakpoints.map((x) => (x === null ? null : 100 / x + '%')),\n flexGrow: 0,\n flexShrink: 0,\n textAlign: 'left',\n display: 'flex',\n flexDirection: 'column',\n color: 'inherit',\n ':hover': {\n textDecoration: 'none',\n color: 'inherit',\n '.tileBg': {\n transform: 'scale(1.02)',\n transition: 'all .2s ease-in-out',\n },\n '.tileContent': {\n backgroundColor: variables.greenColor,\n },\n '.tileEcm': {\n backgroundColor: darken(0.1, variables.greenColor),\n },\n },\n }),\n tileSlider: mq({\n maxWidth: '100% !important',\n }),\n tileBg: mq({\n backgroundColor: 'white',\n backgroundPosition: 'center',\n backgroundRepeat: 'no-repeat',\n backgroundSize: 'cover',\n height: 0,\n paddingBottom: '56.25%',\n }),\n tileContent: mq({\n display: 'flex',\n flexDirection: 'column',\n flexGrow: 1,\n lineHeight: 1.3,\n //boxShadow: '4px 4px 14px 4px rgba(190,190,190,0.5)',\n backgroundColor: variables.blueColor,\n marginTop: [10],\n padding: [20],\n transition: 'all .2s ease-in-out',\n color: 'white',\n }),\n tileEcm: mq({\n display: 'flex',\n flexDirection: 'row',\n flexGrow: 0,\n lineHeight: 1.3,\n //boxShadow: '4px 4px 14px 4px rgba(190,190,190,0.5)',\n backgroundColor: darken(0.1, variables.blueColor),\n marginTop: [0],\n padding: [20],\n transition: 'all .2s ease-in-out',\n color: 'white',\n }),\n title: mq({\n //fontFamily: variables.familyHeader,\n fontSize: '1.3rem',\n textTransform: 'uppercase',\n lineHeight: 1.3,\n //fontWeight: 900,\n //textAlign: 'center',\n fontWeight: 700,\n }),\n desc: mq({\n marginTop: 5,\n fontSize: '0.9rem',\n display: '-webkit-box',\n WebkitLineClamp: '9',\n WebkitBoxOrient: 'vertical',\n overflow: 'hidden',\n fontWeight: 400,\n }),\n };\n}\n\nexport function getTileListOverridingStyle() {\n return {\n tiles: mq({\n alignItems: 'flex-start',\n }),\n };\n}\n","/** @jsx jsx */\nimport { jsx } from '@emotion/core';\nimport React from 'react';\nimport { TileList } from 'site/tileList/tileList';\nimport { getTileListStyle } from 'site/tileList/tileListStyle';\n\nimport { ProductTile } from './productTile/productTile';\n\nexport function GuideTiles({ guides, categories }) {\n const products = React.useMemo(() => getProducts(guides, categories), [guides, categories]);\n const tiles = products.map((product, index) => (\n \n ));\n\n return (\n <>\n \n \n );\n}\n\nfunction getProducts(guides, categories) {\n console.log(guides, categories);\n return (guides || []).map((x) => ({\n ...x,\n }));\n}\n","/** @jsx jsx */\nimport { jsx } from '@emotion/core';\nimport React from 'react';\nimport env from 'env';\nimport { GuideTiles } from 'site/ecm/guide/guideTiles';\nimport { useGet } from 'components';\nimport { Loading, ErrorPopup } from 'components';\n\nexport function GuideTilesLoading({ pageUrl }) {\n const get = useGet();\n\n React.useEffect(() => {\n get.send(`${env.apiBase}/api/guide/getGuides?cat=${encodeURIComponent(pageUrl)}`);\n // eslint-disable-next-line\n }, []);\n\n if (get.loading()) {\n return ;\n } else if (get.hasErrors()) {\n return ;\n }\n\n const data = get.response;\n\n if(!data){\n return(\n
\n No Guides\n
\n )\n }\n\n return (\n
\n \n
\n );\n}\n","/** @jsx jsx */\nimport { jsx } from '@emotion/core';\n// import cmsUtils from '../../cmsUtils';\nimport utils from 'utils';\nimport { GuideTilesLoading } from 'site/members/guide/guideTilesLoading';\nimport { GuideTilesLoading as EcmGuideTilesLoading } from 'site/ecm/guide/guideTilesLoading';\n\nexport function GuideList(props) {\n const item = props.item;\n const cmsOption = props.cmsOption || {};\n // console.log(cmsOption.pageData.pageUrl, cmsOption);\n const isCmsEdit = !!cmsOption.isCmsEdit;\n const pageUrl = cmsOption.requestPath || cmsOption.pageData.pageUrl;\n // console.log('item', item, isCmsEdit);\n\n const cssClass = utils.classNames('cms_item', item.cssClass || item.anchorName || '');\n const isCategoryShopUrl = utils.site.isCategoryShopUrl(pageUrl);\n // console.log(isCategoryShopUrl, pageUrl);\n\n return isCmsEdit ? (\n
\n
Guide List (This will list guide tiles automatically)
\n
\n ) : (\n
\n {isCategoryShopUrl ? : }\n
\n );\n}\n","import React from 'react';\nimport { GuideList } from './view/guideList';\n\nexport const renderRule = {\n match: (item, cmsOption) => item.itemTypeCode === 'GuideList',\n itemElt: (item, cmsOption) => ,\n};\n","import React from 'react';\nimport parse, { domToReact, attributesToProps } from 'html-react-parser';\nimport utils from '../../../../utils';\nimport env from '../../../../env';\n\n//https://github.com/remarkablemark/html-react-parser\n\nconst options = {\n replace,\n};\nlet _embedDataList = [];\nlet _cmsOption = {};\n\nexport function renderHtml(html, cmsOption) {\n _cmsOption = cmsOption;\n if (!cmsOption.isCmsEdit || cmsOption.cmsViewMode === 'viewonly') {\n _embedDataList = cmsOption?.pageData?.embedDataList;\n return parse(html || '', options);\n } else {\n return parse(html || '', {});\n }\n}\n\nfunction replace(node) {\n //console.log(node)\n if (!env.isProd && node.type === 'tag' && node.name === 'img') {\n return replaceImg(node);\n } else if (node.type === 'tag' && node.attribs.class === 'button') {\n return replaceButton(node);\n } else if (node.type === 'tag' && node.attribs['data-embed-jaba']) {\n return replaceEmbedCode(node);\n }\n}\n\nfunction replaceImg(node) {\n if (node.attribs && node.attribs.src) {\n const props = attributesToProps(node.attribs);\n props.src = utils.site.resourcePath(node.attribs.src);\n // eslint-disable-next-line\n return ;\n }\n return null;\n}\n\nfunction replaceButton(node) {\n if (node.children && node.children.some((x) => x.name === 'span')) return null;\n const props = attributesToProps(node.attribs);\n return React.createElement(node.name, props, {domToReact(node.children, options)});\n}\n\nfunction replaceEmbedCode(node) {\n const id = node.attribs['data-embed-jaba'];\n const found = utils.array.find(_embedDataList, (x) => x.id === id);\n if (found) {\n //console.log(found)\n return
{renderHtml(found.code, _cmsOption)}
;\n } else return null;\n}\n","import React, { useRef } from 'react';\nimport cmsUtils from '../../cmsUtils';\nimport utils from '../../../../utils';\n\nimport { useRouter } from '../../../../components';\n\nimport { handleElementLink } from '../../../../components';\nimport env from '../../../../env';\nimport { renderHtml } from './renderHtml';\n\n//import { Document, Page } from 'react-pdf'\n//import { Document, Page } from 'react-pdf/dist/entry.webpack';\n\nexport function Html(props) {\n const ver = env.ver;\n const item = props.item;\n //const subItems = item.items || [];\n const cmsOption = props.cmsOption || {};\n const { history } = useRouter();\n //const [ pdfViewPath, setPdfViewPath ] = React.useState(null)\n //console.log('item', item, cmsOption);\n\n const year = new Date().getFullYear();\n let content = cmsOption.isCmsEdit\n ? cmsUtils.payload(item, 'Content')\n : cmsUtils\n .payload(item, 'Content')\n .replace(/__year__/g, year)\n .replace('__version__', \" PWA \" + ver + '');\n\n const cssClass = utils.classNames(\n 'cms_item',\n 'htmlPanel',\n cmsOption.isCmsEdit && 'html',\n item.cssClass || item.anchorName || ''\n );\n\n //let itemElt = (
);\n\n function handleClick(e) {\n let target = '';\n if (e.target.closest('a')) {\n target = e.target.closest('a').getAttribute('target');\n }\n\n let href = '';\n if (e.target.closest('a')) {\n href = e.target.closest('a').getAttribute('href');\n }\n\n console.log(href);\n if ((href || '').toLowerCase().indexOf('/api/downloadfile') >= 0) {\n return;\n }\n\n const processed = target === '_blank' ? handleElementLink(e.target, null) : handleElementLink(e.target);\n //const link = utils.url.getLinkFromElement(e.target);\n //console.log('clicked', e, e.target, processed);\n\n if (processed.handled) {\n e.preventDefault();\n e.stopPropagation();\n } else if (processed.linkInfo && processed.linkInfo.type === 'internal') {\n e.preventDefault();\n e.stopPropagation();\n history.push(processed.linkInfo.url);\n } else {\n //e.preventDefault();\n //e.stopPropagation();\n // setPdfViewPath(utils.site.resourcePath(link))\n\n if (e.target.closest('a')) {\n let href = e.target.closest('a').getAttribute('href') + '';\n if (href.indexOf('#') !== -1) {\n let _href = href.split('#');\n console.log('_href', _href);\n let el = document.querySelector('section[data-cms-item-anchor=\"' + _href[1] + '\"]');\n if (el) {\n let anchorStatus = el.getAttribute('data-anchor-status');\n if (anchorStatus === 'collapse') {\n el.setAttribute('data-anchor-status', 'expand');\n el.classList.add('expand');\n } else {\n el.setAttribute('data-anchor-status', 'collapse');\n el.classList.remove('expand');\n }\n }\n e.preventDefault();\n e.stopPropagation();\n }\n }\n }\n }\n\n const htmlBlock = useRef(null);\n return (\n <>\n handleClick(e)}\n >\n {renderHtml(content, cmsOption)}\n \n \n );\n}\n","import React from 'react';\nimport { Html } from './view/html';\n\nexport const renderRule = {\n match: (item, cmsOption) => item.itemTypeCode === 'Html', \n itemElt: (item, cmsOption) => \n}","import React from 'react';\nimport { au } from 'components';\n\nexport function useParallax(panelRef, _settings) {\n const [settings,] = React.useState(getSettings(_settings));\n const handleScroll = () => {\n //console.log('useParallax - scrolling')\n onScroll(settings, panelRef.current);\n }\n\n const reset = () => {\n //console.log('useParallax - reset');\n setTimeout(() => { onResize(settings, panelRef.current); handleScroll(); }, 300)\n }\n\n React.useEffect(() => {\n\n reset();\n if (typeof window !== `undefined`) {\n window.addEventListener('scroll', handleScroll)\n window.addEventListener('resize', reset)\n }\n return () => {\n if (typeof window !== `undefined`) {\n window.removeEventListener('scroll', handleScroll)\n window.removeEventListener('resize', reset)\n }\n }\n // eslint-disable-next-line \n }, []);\n return { reset };\n}\n\nfunction getSettings(settings) {\n const defaultSettings = {\n cutoffPadding: 10,//px\n paddingHeightRatio: 1,\n stretchToFit: true,\n actionRange: [0.1, 0.9],\n imageRatio: 1080 / 1920,\n panelHeight: 'auto',\n cutTop: 0,\n cutBottom: 0\n }\n return Object.assign({}, defaultSettings, settings);\n}\n\n\nexport function onResize(settings, el) {\n const screenSize = au.getScreenSize();\n const autoPanelHeight = !settings.panelHeight || settings.panelHeight === 'auto';\n const panelHeight = autoPanelHeight ? el.offsetHeight : parseFloat(settings.panelHeight);\n //console.log(autoPanelHeight, panelHeight)\n\n let bgHeight = 0, bgWidth = 0;\n bgHeight = panelHeight * (1 + settings.paddingHeightRatio) + 2 * settings.cutoffPadding;\n bgWidth = (bgHeight * (1 + settings.cutTop + settings.cutBottom)) / settings.imageRatio;\n //console.log(panelHeight, settings.paddingHeightRatio, bgHeight, bgWidth)\n if (settings.stretchToFit && bgWidth < screenSize.width) {\n // magnifying the background image to fix the full width of the browser\n bgHeight = screenSize.width * settings.imageRatio;\n bgWidth = (bgHeight * (1 + settings.cutTop + settings.cutBottom)) / settings.imageRatio;\n //console.log('magnified', bgHeight, bgWidth, screenSize)\n }\n \n const cutTopPx = bgHeight * (1 + settings.cutTop + settings.cutBottom) * settings.cutTop\n const cutBottomPx = bgHeight * (1 + settings.cutTop + settings.cutBottom) * settings.cutBottom\n let fromTop = -settings.cutoffPadding;\n let toTop = -(bgHeight - panelHeight - settings.cutoffPadding);\n fromTop += (fromTop - toTop) > cutTopPx ? cutTopPx : 0\n toTop += (fromTop - toTop) > cutBottomPx ? cutBottomPx : 0\n //console.log('shift', cutTopPx, cutBottomPx, bgHeight, fromTop, toTop)\n\n el.setAttribute('data-fromTop', fromTop)\n el.setAttribute('data-toTop', toTop)\n\n if (!autoPanelHeight)\n el.style.height = settings.panelHeight + 'px';\n\n el.style.backgroundSize = bgWidth + 'px ' + bgHeight + 'px'\n}\n\nexport function onScroll(settings, el) {\n const pr = au.getScrollProgress(el).progress;\n //console.log(pr, panel.calculated);\n\n const min = parseFloat(el.getAttribute('data-fromTop'));\n const max = parseFloat(el.getAttribute('data-toTop'));\n const top = au.prVal(min, max, pr, settings.actionRange/*[0, 1]*/);\n //console.log(min, max, top);\n el.style.backgroundPositionY = top + 'px'\n}","/** @jsx jsx */\nimport { jsx } from '@emotion/core'\nimport React from 'react';\nimport cmsUtils from '../../cmsUtils';\nimport utils from 'utils';\nimport { SiteLink } from 'components';\nimport { getImageBannerStyle } from './imagePanelStyle';\nimport { useParallax } from 'site/useParallax/useParallax';\n\nexport function ImagePanel(props) {\n const item = props.item;\n const cmsOption = props.cmsOption || {};\n //console.log(cmsOption)\n //console.log('item', item);\n const heightSet = cmsUtils.payload(item, 'HeightSet') || 'standard';\n const photoCredit = cmsUtils.payload(item, 'PhotoCredit');\n const photoCreditUrl = cmsUtils.payload(item, 'PhotoCreditUrl');\n const hideTop = cmsUtils.payload(item, 'HideTop') || '0';\n const hideBottom = cmsUtils.payload(item, 'HideBottom') || '0';\n \n const cssClass = utils.classNames('cms_item', 'imagePanel', 'parallax_notused', `bannerSize_notused--${heightSet}`, item.cssClass || item.anchorName || '');\n \n const bgUrl = cmsOption.pageOptions && cmsOption.pageOptions.imagePath ?\n utils.site.resourcePath(cmsOption.pageOptions.imagePath):\n utils.site.resourcePath(cmsUtils.payload(item, 'ImageUrl'));\n\n const htmlBlock = React.useRef(null);\n const cssClass2 = utils.classNames('cms_item', 'htmlPanel', cmsOption.isCmsEdit && 'html', item.cssClass || item.anchorName || '');\n const content = cmsUtils.payload(item, 'Content');\n\n const parallaxSetting = {\n cutoffPadding: 10,//px\n paddingHeightRatio: 1,\n stretchToFit: true,\n actionRange: [0.1, 0.9],\n imageRatio: 1080 / 1920,\n panelHeight: 'auto',\n cutTop: hideTop? parseFloat(hideTop) : 0,\n cutBottom: hideBottom? parseFloat(hideBottom) : 0\n }\n //console.log(parallaxSetting)\n \n const panelRef = React.useRef(null);\n useParallax(panelRef, parallaxSetting);\n\n const s = getImageBannerStyle(heightSet);\n\n return (\n
\n
\n
\n \n {(photoCredit && !photoCreditUrl) &&
{photoCredit}
}\n {(photoCredit && photoCreditUrl) && {photoCredit}}\n
\n );\n}\n","import { mqBanner, getBannerSize } from 'site/bannerSize/bannerSize';\n\nexport function getImageBannerStyle(heightSet) {\n const bannerSize = getBannerSize(heightSet);\n\n return {\n bannerHeight: mqBanner({\n height: bannerSize,\n backgroundPositionX: 'center'\n }),\n photoCredit: mqBanner({\n color: 'white',\n fontSize: '0.8rem',\n transform: 'rotate(-90deg) translate(-50%, 10px)',\n position: 'absolute',\n top: '50%',\n left: '0',\n textAlign: 'center',\n transformOrigin: 'left top',\n maxWidth: bannerSize.map(x => x * 0.9),\n '&:hover, &:active': {\n color: 'white'\n }\n })\n }\n}","import React from 'react';\nimport { ImagePanel } from './view/imagePanel';\n\nexport const renderRule = {\n match: (item, cmsOption) => item.itemTypeCode === 'ImagePanel', \n itemElt: (item, cmsOption) => \n}","/** @jsx jsx */\nimport { jsx } from '@emotion/core';\n// import cmsUtils from '../../cmsUtils';\nimport utils from 'utils';\nimport { DashboardLoading } from 'site/members/dashboard/dashboardLoading';\n\nexport function MemberDashboard(props) {\n const item = props.item;\n const cmsOption = props.cmsOption || {};\n // console.log(cmsOption.pageData.pageUrl, cmsOption);\n const isCmsEdit = !!cmsOption.isCmsEdit;\n const pageUrl = cmsOption.pageData.pageUrl;\n // console.log('item', item, isCmsEdit);\n\n const cssClass = utils.classNames('cms_item', item.cssClass || item.anchorName || '');\n\n return isCmsEdit ? (\n
\n
\n Member Dashboard (This will list cateogry/guide tiles automatically)\n
\n
\n ) : (\n
\n \n
\n );\n}\n","import React from 'react';\nimport { MemberDashboard } from './view/memberDashboard';\n\nexport const renderRule = {\n match: (item, cmsOption) => item.itemTypeCode === 'MemberDashboard',\n itemElt: (item, cmsOption) => ,\n};\n","/** @jsx jsx */\nimport { jsx } from '@emotion/core';\n// import cmsUtils from '../../cmsUtils';\nimport utils from 'utils';\nimport { DashboardLoading } from 'site/members/dashboard/dashboardLoading';\n\nexport function MemberDashboardV2(props) {\n const item = props.item;\n const cmsOption = props.cmsOption || {};\n // console.log(cmsOption.pageData.pageUrl, cmsOption);\n const isCmsEdit = !!cmsOption.isCmsEdit;\n const pageUrl = cmsOption.pageData.pageUrl;\n // console.log('item', item, isCmsEdit);\n\n const cssClass = utils.classNames('cms_item', item.cssClass || item.anchorName || '');\n\n return isCmsEdit ? (\n
\n
\n Member Dashboard (This will list cateogry/guide tiles automatically)\n
\n
\n ) : (\n
\n \n
\n );\n}\n","import React from 'react';\nimport { MemberDashboardV2 } from './view/memberDashboardV2';\n\nexport const renderRule = {\n match: (item, cmsOption) => item.itemTypeCode === 'MemberDashboardV2',\n itemElt: (item, cmsOption) => ,\n};\n","/** @jsx jsx */\nimport { jsx } from '@emotion/core';\nimport React from 'react';\nimport env from 'env';\n//import { GuideTiles } from 'site/members/guide/guideTiles';\nimport { CategoryTiles } from 'site/members/category/categoryTiles';\nimport { useGet } from 'components';\nimport { Loading, ErrorPopup } from 'components';\n\nexport function GuideTilesLoadingV2({ pageUrl }) {\n const get = useGet();\n\n React.useEffect(() => {\n get.send(\n `${env.apiBase}/api/member/getcategoryv2?cat=${encodeURIComponent(pageUrl)}&corporateId=${localStorage.getItem(\n 'corporateId'\n )}`\n );\n // eslint-disable-next-line\n }, []);\n\n if (get.loading()) {\n return ;\n } else if (get.hasErrors()) {\n return ;\n }\n\n const data = get.response;\n //console.log(\"dddddddddd\", data);\n \n if(!data){\n return(\n
\n No Guides\n
\n )\n }\n\n return (\n
\n \n
\n );\n}\n","/** @jsx jsx */\r\nimport { jsx } from '@emotion/core';\r\nimport utils from 'utils';\r\nimport { GuideTilesLoadingV2 } from 'site/members/guide/guideTilesLoadingV2';\r\n\r\nexport function NewCategoryList(props) {\r\n const item = props.item;\r\n const cmsOption = props.cmsOption || {};\r\n // console.log(cmsOption.pageData.pageUrl, cmsOption);\r\n const isCmsEdit = !!cmsOption.isCmsEdit;\r\n const pageUrl = cmsOption.requestPath || cmsOption.pageData.pageUrl;\r\n // console.log('item', item, isCmsEdit);\r\n const cssClass = utils.classNames('cms_item', item.cssClass || item.anchorName || '');\r\n\r\n return isCmsEdit ? (\r\n
\r\n
New category List (This will list category tiles automatically)
\r\n
\r\n ) : (\r\n
\r\n \r\n
\r\n );\r\n}","import React from 'react';\nimport { NewCategoryList } from './view/newCategoryList';\n\nexport const renderRule = {\n match: (item, cmsOption) => item.itemTypeCode === 'NewCategoryList',\n itemElt: (item, cmsOption) => ,\n};","/** @jsx jsx */\nimport { jsx } from '@emotion/core'\nimport cmsUtils from '../../cmsUtils';\nimport { TileList } from 'site/tileList/tileList'\nimport { getTileListStyle } from 'site/tileList/tileListStyle';\n\nimport { PageTile } from './pageTile/pageTile'\n\nexport function PageTiles(props) {\n const item = props.item;\n const cmsOption = props.cmsOption || {};\n //console.log(cmsOption)\n //console.log('item', item);\n const useSlider = cmsUtils.payload(item, 'UseSlider') === 'slider';\n const pages = getPages(cmsUtils.payload(item, 'PageObjects'))\n\n const tiles = pages.map((page, index) => )\n \n return (\n \n );\n}\n\nfunction getPages(pagesSerialized) {\n if (pagesSerialized) {\n return JSON.parse(pagesSerialized);\n }\n return [];\n}","import React from 'react';\nimport { PageTiles } from './view/pageTiles';\n\nexport const renderRule = {\n match: (item, cmsOption) => item.itemTypeCode === 'PageTiles__', \n itemElt: (item, cmsOption) => \n}","/** @jsx jsx */\nimport { jsx } from '@emotion/core'\nimport cmsUtils from '../../cmsUtils';\nimport { Item } from '../../../../cms/items/item';\nimport utils from '../../../../utils';\n\nexport function Panel(props) {\n const item = props.item;\n const subItems = item.items || [];\n const cmsOption = props.cmsOption || {};\n\n //console.log('item', item, subItems);\n //console.log(cmsUtils.hasItemInPageDataByItemTypeCode(cmsOption.pageData, 'DestinationOperators'))\n\n const bgColor = cmsUtils.payload(item, 'BgColor');\n //const textColorTheme = cmsUtils.payload(item, 'TextColorTheme');\n const imageUrl = cmsUtils.payload(item, 'ImageUrl');\n const backgroundTile = cmsUtils.payload(item, 'BackgroundTile');\n const bgTheme = cmsUtils.payload(item, 'TextColorTheme') || 'white';\n //console.log(bgTheme)\n\n let bgUrl = null;\n if (imageUrl)\n bgUrl = utils.site.resourcePath(imageUrl);\n else if (backgroundTile)\n bgUrl = utils.site.resourcePath(`/dist/transparent-textures/textures/${backgroundTile}`);\n\n const cssClass = utils.classNames('cms_item', 'contentPanel', 'contentPanel--' + bgTheme, item.cssClass || item.anchorName || '');\n\n const subItemsElts = subItems.map((subItem, index) =>\n \n );\n\n return (\n
\n
\n
{subItemsElts}
\n
\n );\n}\n","import React from 'react';\nimport { Panel } from './view/panel';\n\nexport const renderRule = {\n match: (item, cmsOption) => item.itemTypeCode === 'Panel', \n itemElt: (item, cmsOption) => \n}","/** @jsx jsx */\nimport { jsx } from '@emotion/core'\nimport utils from '../../utils';\nimport { SiteLink } from '../../components';\n\nimport { TileList } from '../tileList/tileList'\nimport { getTileListStyle } from '../tileList/tileListStyle';\nimport { settings } from './config';\n\nimport { getImageTileStyle } from './galleryStyle';\n\nexport function GalleryTiles({ images, openPopupImage, useSlider = false }) {\n if (images.length === 0) return null;\n const tiles = images.map((img, index) => )\n return \n}\n\nfunction ImageTile({ image, useSlider, disableLink, openPopupImage }) {\n const s = getImageTileStyle(settings);\n //const imageUrl = utils.site.resourcePath(image.imageUrl);\n const thumbnailUrl = image.thumbnailUrl || image.imageUrl;\n const tileLink = image.imageUrl;\n\n return openPopupImage(e, image)}>\n
\n
\n}\n","import { mq } from '../../cssInJs';\nimport { settings as defaultSettings} from '../tileList/config';\n\nexport function getImageTileStyle(settings = defaultSettings) {\n const numOfTilesPerBreakpoints = settings.numOfTilesPerBreakpoints\n const marginLR = settings.marginLR\n const marginTB = settings.marginTB\n\n return {\n tile: mq({\n paddingLeft: marginLR.map(x => x === null? null : x / 2),\n paddingRight: marginLR.map(x => x === null? null : x / 2),\n paddingTop: marginTB.map(x => x === null? null : x / 2),\n paddingBottom: marginTB.map(x => x === null? null : x / 2),\n maxWidth: numOfTilesPerBreakpoints.map(x => x === null? null : 100 / x + '%'),\n flexBasis: numOfTilesPerBreakpoints.map(x => x === null? null : 100 / x + '%'),\n flexGrow: 0,\n flexShrink: 0,\n textAlign: 'left',\n display: 'flex',\n flexDirection: 'column',\n color: 'inherit',\n ':hover': {\n textDecoration: 'none',\n color: 'inherit',\n '.tileBg': {\n transform: 'scale(1.02)',\n transition: 'all .2s ease-in-out'\n }\n }\n }),\n tileSlider: mq({\n maxWidth: '100% !important'\n }),\n tileBg: mq({\n backgroundColor: 'white',\n backgroundPosition: 'center',\n backgroundRepeat: 'no-repeat',\n backgroundSize: 'cover',\n height: 0,\n paddingBottom: '100%',//'56.25%',\n }),\n }\n}\n\n","/** @jsx jsx */\nimport { jsx } from '@emotion/core'\nimport React from 'react';\nimport utils from 'utils';\nimport { GalleryTiles } from './galleryTiles';\n\nimport { Portal } from \"site/portal/portal\";\nimport FsLightbox from 'fslightbox-react';\n\nconst r = utils.site.resourcePath\nconst set = utils.media.getImageSetPath\n\nexport function Gallery({ images, useSlider = false }) {\n\n const [toggler, setToggler] = React.useState(false);\n const [popupIndex, setPopupIndex] = React.useState(0);\n\n const filtered = utils.array.distinct(images, (x, y) => x.imageUrl === y.imageUrl)\n if (filtered.length === 0) return null;\n\n const popupImages = filtered.map(x => r(x.imageUrl));\n const galleryImages = filtered.map(x => ({ imageUrl: r(x.imageUrl), thumbnailUrl: r(set(x.imageUrl, 'tiles_quare')), caption: x.caption }));\n // console.log(popupImages)\n\n function openPopupImage(e, image) {\n e.stopPropagation(); e.preventDefault();\n const imageUrl = r(image.imageUrl);\n const inx = utils.array.findIndex(popupImages, x => x === imageUrl);\n setPopupIndex(inx >= 0 ? inx : 0)\n setToggler(!toggler)\n }\n\n return \n \n \n \n \n \n}","/** @jsx jsx */\nimport { jsx } from '@emotion/core'\nimport cmsUtils from '../../cmsUtils';\nimport utils from 'utils'\nimport { Gallery } from '@site/gallery/gallery'\n\nexport function PhotoGallery(props) {\n const item = props.item;\n //const cmsOption = props.cmsOption || {};\n //console.log(cmsOption)\n //console.log('item', item);\n\n const cssClass = utils.classNames('cms_item', 'photoGallery', item.cssClass || item.anchorName || '');\n const images = cmsUtils.payload(item, 'ImageUrl') ? cmsUtils.payload(item, 'ImageUrl').split(\"|\") : [];\n const galleryImages = images.map(x => ({imageUrl: x, thumbnailUrl: x, caption: null}));\n \n return (\n \n );\n}\n","import React from 'react';\nimport { PhotoGallery } from './view/photoGallery';\n\nexport const renderRule = {\n match: (item, cmsOption) => item.itemTypeCode === 'PhotoGallery', \n itemElt: (item, cmsOption) => \n}","/** @jsx jsx */\nimport { jsx } from '@emotion/core'\nimport { FacebookShareButton, FacebookIcon } from \"react-share\";\n// import { LinkedinShareButton, LinkedinIcon } from \"react-share\";\n// import { TwitterShareButton, TwitterIcon } from \"react-share\";\nimport { WhatsappShareButton, WhatsappIcon } from \"react-share\";\nimport { EmailShareButton, EmailIcon } from \"react-share\";\n\nimport { getShareButtonStyle } from './shareButtonStyle';\n\nexport function ShareButtons({ shareUrl, pageTitle = null, topLabel = 'SHARE THIS PAGE:' }) {\n const s = getShareButtonStyle();\n const title = pageTitle || window.document.title;\n console.log(title)\n return
\n {topLabel &&
{topLabel}
}\n \n \n \n \n \n {/* \n \n \n \n */}\n {/* \n \n \n \n */}\n \n \n \n \n \n \n \n \n \n \n
\n}\n","//import { mq } from '../../cssInJs';\n\nexport function getShareButtonStyle() {\n return {\n shareButtons: {\n marginTop: '1.5rem',\n },\n shareButtonTitle: {\n fontSize: '0.8rem',\n marginLeft: '0.5rem',\n marginBottom: '0.3rem'\n },\n shareButton: {\n margin: 5\n },\n }\n} \n","/** @jsx jsx */\nimport { jsx } from '@emotion/core'\n// import cmsUtils from '../../cmsUtils';\nimport utils from 'utils'\nimport { ShareButtons } from 'site/shareButtons/shareButtons'\n\nexport function SharingIcons(props) {\n const item = props.item;\n const cmsOption = props.cmsOption || {};\n //console.log(cmsOption)\n //console.log('item', item);\n\n const cssClass = utils.classNames('cms_item', item.cssClass || item.anchorName || '');\n const shareUrl = utils.site.fullUrl(window.location.pathname + window.location.search)\n\n return
\n \n
\n}\n","import React from 'react';\nimport { SharingIcons } from './view/sharingIcons';\n\nexport const renderRule = {\n match: (item, cmsOption) => item.itemTypeCode === 'SharingIcons', \n itemElt: (item, cmsOption) => \n}","/** @jsx jsx */\nimport { jsx } from '@emotion/core';\nimport React from 'react';\nimport env from '../../../../env';\nimport { usePost, Button, ErrorMessage } from '../../../../components';\nimport { useForm } from '../../../../form';\nimport { getSignupFormModel } from './signupFormModel';\nimport utils from 'utils';\nimport cmsUtils from '../../cmsUtils';\n\nexport function SignupForm(props){\n \n const item = props.item;\n const cmsOption = props.cmsOption || {};\n \n const emailReceiver = cmsUtils.payload(item, 'EmailReceiver');\n const fileAttachment = cmsUtils.payload(item, 'FileAttachment') || \"false\";\n\n const cssClass = utils.classNames('cms_item', 'htmlPanel', cmsOption.isCmsEdit && 'html', item.cssClass || item.anchorName || '');\n\n const model = getSignupFormModel({});\n const form = useForm(model, { usePlaceholder: true });\n const [sendingStatus, setSendingStatus] = React.useState(null);\n const post = usePost();\n\n function onSubmit(e) {\n form.validateForm(e, () => {\n //const recaptchaValue = recaptchaRef.current.getValue();\n //const value = { ...form.getValue(), emailReceiver: emailReceiver, recaptchaValue : recaptchaValue }; \n const value = { ...form.getValue(), emailReceiver: emailReceiver }; \n var files = form.getFiles();\n var formData = new FormData();\n formData.append('jsonData', JSON.stringify(value))\n files.forEach(file => {\n (file.files || []).forEach(uploadFile => {\n formData.append(file.name, uploadFile)\n })\n });\n //post.send(env.apiBase + \"/api/contact/send\", value);\n post.sendFormData(env.apiBase + \"/api/contact/signupform\", formData);\n setSendingStatus('pending')\n })\n \n console.log('submitting')\n }\n\n if (post.done() && sendingStatus === 'pending') {\n //var value = form.getValue();\n //gtm.sendEvent('contactFormSubmitted', {contactEmail: value.email} )\n form.reset(model);\n setSendingStatus(null)\n }\n\n const render = (name) => form.renderControl(name, null);\n \n return( \n
\n
\n
\n
\n
{render('name')}
\n
{render('email')}
\n
{render('phone')}
\n
\n\n
\n
{render('state')}
\n
\n\n {/*
\n
{render('enquiry')}
\n
*/}\n\n { fileAttachment === 'true' &&\n
\n
{render('attachments')}
\n
\n }\n\n {/*
\n
\n \n \n
\n
*/}\n\n
\n
\n
\n \n \n \n {post.done() && Successfully sent!}\n
\n
\n
\n
\n
\n
\n \n \n )\n\n}","import { fb, validators } from '../../../../lib/form';\n\nexport function getSignupFormModel(data) {\n \n let stateList = [\n {name: 'State', value: ''},\n {name: 'Australian Capital Territory', value: 'ACT'},\n {name: 'New South Wales', value: 'New South Wales'},\n {name: 'Victoria', value: 'Victoria'},\n {name: 'South Australia', value: 'South Australia'},\n {name: 'Queensland', value: 'Queensland'},\n {name: 'Western Australia', value: 'Western Australia'},\n {name: 'Northern Territory', value: 'Northern Territory'},\n {name: 'Tasmania', value: 'Tasmania'}\n ]\n \n const model = fb.group({\n name: [data.name || '', [validators.Required()], { label: 'Name', type: 'text' }],\n phone: [data.phone || '', [], { label: 'Phone', type: 'text' }],\n email: [data.email || '', [validators.Required(), validators.Email()], { label: 'Email', type: 'email' }],\n //enquiry: [data.enquiry || '', [validators.Required()], { label: 'Your Message', type: 'textarea' }],\n attachments: [data.attachments || '', [], { label: 'Attachments', type: 'file' }],\n state : [data.state || '', [], { label: null, type: 'select', options: stateList }],\n }); \n return model;\n}","import React from 'react';\nimport { SignupForm } from './view/signupForm';\n\nexport const renderRule = {\n match: (item, cmsOption) => item.itemTypeCode === 'SignupForm', \n itemElt: (item, cmsOption) => \n}","import React, { useState, useRef } from 'react';\r\nimport utils from '../../utils';\r\nimport { debounce } from '../utils-core/debounce';\r\nimport * as yt from './iframeApi';\r\nimport { FiVolumeX, FiVolume2 } from 'react-icons/fi';\r\nimport { FaRegPlayCircle } from 'react-icons/fa';\r\nimport ModalVideo from 'react-modal-video'\r\n\r\n\r\nexport function YoutubeBannerMobilePopup(props) {\r\n const youtubeBannerRef = React.useRef(null);\r\n\r\n const [playerStatus, setPlayerStatus] = useState('loading');\r\n const [playerSize, setPlayerSize] = useState(null);\r\n const [ytPlayer, setYtPlayer] = useState(null);\r\n const [muted, setMuted] = useState(true);\r\n const countPlayedRef = useRef(0);\r\n const [popupOpened, setPopupOpened] = useState(false);\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 posterImageUrl = (props.posterImageUrl && props.posterImageUrl !== '') ? props.posterImageUrl : yt.thumbnailMax(videoId);\r\n const mobileImageUrl = props.mobileImageUrl;\r\n //let countPlayed = 0;\r\n const canPlayVideo = () => (typeof window !== `undefined` && typeof props.canPlayVideo === `undefined`)? window.innerWidth >= 1200 : !!(typeof props.canPlayVideo === 'function'? props.canPlayVideo() : props.canPlayVideo);\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': typeof window !== `undefined` && window.location.origin,\r\n 'allowfullscreen': true,\r\n 'wmode': 'transparent'\r\n }\r\n\r\n //console.log('videoId: ' + videoId)\r\n //const canPlayVideo = () => window.innerWidth >= 1200\r\n React.useEffect(() => {\r\n const resized = debounce(() => {\r\n loadVideo();\r\n });\r\n loadVideo();\r\n if (typeof window !== `undefined`)\r\n window.addEventListener('resize', resized)\r\n return () => {\r\n if (typeof window !== `undefined`)\r\n window.removeEventListener('resize', resized)\r\n }\r\n // eslint-disable-next-line\r\n }, [])\r\n\r\n \r\n function loadVideo() {\r\n if (youtubeBannerRef.current)\r\n setPlayerSize(getSize(youtubeBannerRef.current));\r\n if (canPlayVideo()) {\r\n yt.loadApi((loadJs) => {\r\n loadJs ? init() : setTimeout(init, 100)\r\n })\r\n }\r\n }\r\n\r\n function init() {\r\n let player = null;\r\n if (typeof window !== `undefined`) {\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 const countPlayed = countPlayedRef.current;\r\n if (countPlayed < 3 - 1) {\r\n //console.log('ended', countPlayed + 1);\r\n countPlayedRef.current = countPlayed + 1;\r\n if (player && player.playVideo)\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 if (player && player.mute && player.playVideo) {\r\n player.mute();\r\n player.playVideo();\r\n }\r\n setTimeout(() => setPlayerStatus('loaded'), 1000)\r\n },\r\n 'onError': (e) => { console.log(e) }\r\n }\r\n });\r\n\r\n setYtPlayer(player);\r\n }\r\n }\r\n\r\n function soundToggle(e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n if (ytPlayer){\r\n if (muted) {\r\n setMuted(false);\r\n setTimeout(() => {\r\n if (ytPlayer && ytPlayer.pauseVideo && ytPlayer.unMute && ytPlayer.playVideo) {\r\n ytPlayer.pauseVideo();\r\n ytPlayer.unMute();\r\n ytPlayer.playVideo();\r\n }\r\n }, 100)\r\n } else {\r\n setMuted(true);\r\n setTimeout(() => {\r\n if (ytPlayer && ytPlayer.pauseVideo && ytPlayer.unMute && ytPlayer.playVideo) {\r\n ytPlayer.pauseVideo();\r\n ytPlayer.mute();\r\n ytPlayer.playVideo();\r\n }\r\n }, 100)\r\n }\r\n }\r\n\r\n //https://developers.google.com/web/updates/2017/09/autoplay-policy-changes\r\n }\r\n\r\n function playVideo() {\r\n setPopupOpened(true)\r\n }\r\n\r\n const canPlay = canPlayVideo();\r\n const imageUrl = !canPlay && mobileImageUrl ? mobileImageUrl : posterImageUrl;\r\n return (\r\n \r\n
\r\n
\r\n
\r\n {canPlay && playerSize && }\r\n {canPlay && playerStatus === 'loaded' &&
\r\n {muted? : }\r\n
}\r\n\r\n {!canPlay && !mobileImageUrl &&
\r\n \r\n
}\r\n
\r\n setPopupOpened(false)} />\r\n
\r\n );\r\n}\r\n\r\nfunction getSize(container) {\r\n const containerSize = container ? { w: container.offsetWidth, h: container.offsetHeight } : { w: window.innerWidth, h: window.innerHeight }\r\n const overSize = 1;\r\n const rate = 9 / 16;\r\n const w = containerSize.w * overSize;\r\n const h = containerSize.h * 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 //console.log(size)\r\n size.left = -(size.width - containerSize.w) / 2;\r\n size.top = -(size.height - containerSize.h) / 2;\r\n return size;\r\n}\r\n","import React from 'react';\nimport cmsUtils from '../../cmsUtils';\nimport utils from '../../../../utils';\nimport { YoutubeBannerMobilePopup } from '../../../../lib/youtube/youtubeBanner--mobilePopup';\n\nexport function VideoPanel(props) {\n const item = props.item;\n const cmsOption = props.cmsOption || {};\n\n //console.log('item', item);\n\n const heightSet = cmsUtils.payload(item, 'HeightSet') || 'standard';\n const videoCode = cmsUtils.payload(item, 'YoutubeCode');\n const posterFrameUrl = cmsUtils.payload(item, 'PosterFrameUrl', null);\n const playerId = 'ytBanner-' + (item.itemId).substr(0, 8);\n\n const video = {\n heightSet: heightSet,\n videoLinkOrId: videoCode,\n playerId: playerId\n }\n\n //const enableYoutube = env.isProd;\n const canPlayVideo = () => utils.css.screenWidth() >= 1200\n\n const cssClass = utils.classNames('cms_item', 'youtubePanel', item.cssClass || item.anchorName || '');\n\n //console.log(window.innerWidth, canPlayVideo())\n\n return (\n
\n {/* {canPlayVideo() ? : } */}\n \n
\n );\n}\n","import React from 'react';\nimport { VideoPanel } from './view/videoPanel';\n\nexport const renderRule = {\n match: (item, cmsOption) => item.itemTypeCode === 'VideoPanel', \n itemElt: (item, cmsOption) => \n}","\nimport { renderRule as code_dashboard } from './code-dashboard/render';\nimport { renderRule as code_dashboardV2 } from './code-dashboardV2/render';\nimport { renderRule as code_instagram } from './code-instagram/render';\nimport { renderRule as code_subscribe } from './code-subscribe/render';\nimport { renderRule as ecmProductList } from './ecmProductList/render';\nimport { renderRule as eventList } from './eventList/render';\nimport { renderRule as guideList } from './guideList/render';\nimport { renderRule as html } from './html/render';\nimport { renderRule as imagePanel } from './imagePanel/render';\nimport { renderRule as memberDashboard } from './memberDashboard/render';\nimport { renderRule as memberDashboardV2 } from './memberDashboardV2/render';\nimport { renderRule as newCategoryList } from './newCategoryList/render';\nimport { renderRule as pageTiles } from './pageTiles/render';\nimport { renderRule as panel } from './panel/render';\nimport { renderRule as photoGallery } from './photoGallery/render';\nimport { renderRule as sharingIcons } from './sharingIcons/render';\nimport { renderRule as signupForm } from './signupForm/render';\nimport { renderRule as videoPanel } from './videoPanel/render';\nexport const items = [\n code_dashboard,\n code_dashboardV2,\n code_instagram,\n code_subscribe,\n ecmProductList,\n eventList,\n guideList,\n html,\n imagePanel,\n memberDashboard,\n memberDashboardV2,\n newCategoryList,\n pageTiles,\n panel,\n photoGallery,\n sharingIcons,\n signupForm,\n videoPanel,\n]","function payload(item, key, defaultVal = '') {\n const found = item.payloads.find(x => x.key === key);\n return found ? found.value : defaultVal;\n}\n\nexport default { payload };","import React from 'react';\nimport { Item } from '../../items/item';\nimport cmsUtils from '../../utils/cmsUtils';\nimport utils from '../../../utils';\nimport Slider from \"react-slick\";\n\nexport function BannerPanel(props) {\n const item = props.item;\n const subItems = item.items || [];\n const cmsOption = props.cmsOption || {};\n\n //console.log('item', item, subItems);\n\n const heightSet = cmsUtils.payload(item, 'HeightSet') || 'standard';\n\n const slides = subItems.map((subItem, index) =>\n \n );\n\n var settings = {\n dots: false,\n infinite: true,\n speed: 1500,\n autoplaySpeed: 3000,\n fade: true,\n autoplay: true,\n slidesToShow: 1,\n slidesToScroll: 1\n };\n\n const cssClass = utils.classNames('cms_item', 'bannerPanel', `bannerWrapperSize--${heightSet}`, item.cssClass || item.anchorName || '');\n\n return (\n
\n \n {slides}\n \n
\n );\n}","import React from 'react';\nimport cmsUtils from '../../utils/cmsUtils';\nimport utils from '../../../utils';\nimport { SiteLink } from '../../../components';\n\nexport function BannerItem(props) {\n const item = props.item;\n const cmsOption = props.cmsOption || {};\n\n //console.log('item', item);\n\n const bgUrl = utils.site.resourcePath(cmsUtils.payload(item, 'ImageUrl'));\n\n const captionTitle = cmsUtils.payload(item, 'CaptionTitle2') || cmsUtils.payload(item, 'CaptionTitle');\n const captionButton = cmsUtils.payload(item, 'CaptionButton') && cmsUtils.payload(item, 'CaptionButton') !== \"\" ? cmsUtils.payload(item, 'CaptionButton') : \"READ MORE\";\n \n const linkUrl = cmsUtils.payload(item, 'LinkUrl2') || cmsUtils.payload(item, 'LinkUrl');\n\n const titlePanel = captionTitle ? (\n linkUrl ? (
\n
\n { captionButton } \n
\n ) : (
)\n ) : null;\n\n const linkOverlay = linkUrl && !captionTitle ? (\n \n ) : null;\n\n const cssClass = utils.classNames('cms_item', 'banner-item', 'bannerSize', item.cssClass || item.anchorName || '', titlePanel && 'bannerHasTitlePanel');\n\n return (\n
\n {titlePanel &&
{titlePanel}
}\n {linkOverlay && linkOverlay}\n
\n );\n\n\n}\n","import React from 'react';\nimport cmsUtils from '../../utils/cmsUtils';\nimport { Item } from '../../items/item';\nimport utils from '../../../utils';\n\nexport function Panel(props) {\n const item = props.item;\n const subItems = item.items || [];\n const cmsOption = props.cmsOption || {};\n\n //console.log('item', item, subItems);\n \n const bgColor = cmsUtils.payload(item, 'BgColor');\n //const textColorTheme = cmsUtils.payload(item, 'TextColorTheme');\n const imageUrl = cmsUtils.payload(item, 'ImageUrl');\n const backgroundTile = cmsUtils.payload(item, 'BackgroundTile');\n const bgTheme = cmsUtils.payload(item, 'TextColorTheme') || 'white';\n //console.log(bgTheme)\n\n\n let bgUrl = null;\n if (imageUrl)\n bgUrl = utils.site.resourcePath(imageUrl);\n else if (backgroundTile)\n bgUrl = utils.site.resourcePath(`/dist/transparent-textures/textures/${backgroundTile}`);\n\n const cssClass = utils.classNames('cms_item', 'contentPanel', 'contentPanel--' + bgTheme, item.cssClass || item.anchorName || '');\n\n const subItemsElts = subItems.map((subItem, index) =>\n \n );\n\n return (\n
\n
\n
\n {subItemsElts}\n
\n
\n );\n}\n","import React, { useLayoutEffect, useRef } from 'react';\nimport ReactDOM from 'react-dom';\nimport cmsUtils from '../../utils/cmsUtils';\nimport utils from '../../../utils';\n\nimport { useRouter } from '../../../components';\n\nimport { handleElementLink } from '../../../components';\nimport env from '../../../env';\n\n//import { Document, Page } from 'react-pdf'\n//import { Document, Page } from 'react-pdf/dist/entry.webpack';\n\nexport function Html(props) {\n const ver = env.ver;\n const item = props.item;\n //const subItems = item.items || [];\n const cmsOption = props.cmsOption || {};\n const { history } = useRouter();\n //const [ pdfViewPath, setPdfViewPath ] = React.useState(null)\n //console.log('item', item, cmsOption);\n\n const year = (new Date()).getFullYear();\n let content = cmsOption.isCmsEdit? \n cmsUtils.payload(item, 'Content'): \n cmsUtils.payload(item, 'Content')\n .replace(/__year__/g, year)\n .replace(\"__version__\", \" PWA \"+ ver +\"\");\n\n\n const cssClass = utils.classNames('cms_item', 'htmlPanel', cmsOption.isCmsEdit && 'html', item.cssClass || item.anchorName || '');\n\n //let itemElt = (
);\n\n function handleClick(e) {\n \n let target = \"\";\n if(e.target.closest('a')){\n target = e.target.closest('a').getAttribute('target');\n }\n const processed = (target === \"_blank\" ? handleElementLink(e.target, null) : handleElementLink(e.target));\n //const link = utils.url.getLinkFromElement(e.target);\n //console.log('clicked', e, e.target, processed);\n \n if (processed.handled) {\n e.preventDefault();\n e.stopPropagation();\n } else if (processed.linkInfo && processed.linkInfo.type === 'internal') {\n e.preventDefault();\n e.stopPropagation();\n history.push(processed.linkInfo.url)\n } else {\n //e.preventDefault();\n //e.stopPropagation();\n // setPdfViewPath(utils.site.resourcePath(link))\n\n if(e.target.closest('a')){\n let href = e.target.closest('a').getAttribute('href') + \"\";\n if(href.indexOf('#') !== -1){\n let _href = href.split('#');\n console.log(\"_href\", _href);\n let el = document.querySelector('section[data-cms-item-anchor=\"' + _href[1] + '\"]');\n let anchorStatus = el.getAttribute('data-anchor-status');\n if(anchorStatus === \"collapse\"){\n el.setAttribute('data-anchor-status', 'expand');\n el.classList.add(\"expand\");\n }\n else{\n el.setAttribute('data-anchor-status', 'collapse');\n el.classList.remove(\"expand\");\n }\n e.preventDefault();\n e.stopPropagation(); \n }\n }\n\n }\n }\n //console.log(pdfViewPath)\n const pdfView = \n // pdfViewPath ? \n // : \n null;\n\n const htmlBlock = useRef(null);\n // function iframeSizer() {\n // //console.log('iframesizer')\n // let iframesContainer = htmlBlock.current.querySelectorAll('iframe.youtube, .ytvideo iframe');\n // //console.log('iframesizer', iframesContainer)\n // if (iframesContainer && iframesContainer.length) {\n // iframesContainer.forEach(element => {\n // let height = (element.parentElement.offsetWidth * 9) / 16\n // //console.log(height, element.parentElement.offsetWidth)\n // element.style.height = height + 'px';\n // });\n // }\n // }\n\n\n useLayoutEffect(() => {\n //console.log(cmsOption.isCmsEdit)\n if (!cmsOption.isCmsEdit || cmsOption.cmsViewMode === 'viewonly') {\n replaceEmbedCodes(htmlBlock.current, cmsOption);\n }\n \n const buttons = htmlBlock.current.querySelectorAll('.button');\n for (let i = 0; buttons && i < buttons.length; i++) {\n restructureButton(buttons[i])\n }\n\n // iframeSizer();\n // window.addEventListener('resize', iframeSizer)\n // return (): void => {\n // window.removeEventListener('resize', iframeSizer)\n // }\n\n }, [cmsOption])\n\n return (\n <>\n
handleClick(e)}>
\n {pdfView}\n \n )\n}\n\n\nfunction restructureButton(el) {\n if (!el.querySelector('span')) {\n const span = document.createElement('span');\n span.innerHTML = el.innerHTML;\n el.innerHTML = '';\n el.appendChild(span);\n }\n}\n\n\nfunction replaceEmbedCodes(block, cmsOption) {\n const embedDataList = cmsOption?.pageData?.embedDataList;\n const embedCodes = block.querySelectorAll('[data-embed-jaba]')\n embedCodes.forEach(embed => {\n const id = embed.getAttribute(\"data-embed-jaba\");\n const found = utils.array.find(embedDataList, x => x.id === id);\n if (found){\n //console.log(found)\n ReactDOM.render(
, embed);\n }\n })\n //console.log(embedCodes, embedDataList)\n}\n\n","import React from 'react';\nimport cmsUtils from '../../utils/cmsUtils';\nimport utils from '../../../utils';\n\nexport function ImagePanel(props) {\n const item = props.item;\n const cmsOption = props.cmsOption || {};\n //console.log(cmsOption)\n //console.log('item', item);\n const heightSet = cmsUtils.payload(item, 'HeightSet') || 'standard';\n \n const cssClass = utils.classNames('cms_item', 'imagePanel', 'parallax', `bannerSize--${heightSet}`, item.cssClass || item.anchorName || '');\n \n const bgUrl = cmsOption.pageOptions && cmsOption.pageOptions.imagePath ?\n utils.site.resourcePath(cmsOption.pageOptions.imagePath):\n utils.site.resourcePath(cmsUtils.payload(item, 'ImageUrl'));\n\n const htmlBlock = React.useRef(null);\n const cssClass2 = utils.classNames('cms_item', 'htmlPanel', cmsOption.isCmsEdit && 'html', item.cssClass || item.anchorName || '');\n const content = cmsUtils.payload(item, 'Content');\n\n return (\n
\n
\n
\n
\n );\n}","//import { css, keyframes } from '@emotion/core'\n//import { variables, mq } from 'cssInJs'\n\nimport { css } from '@emotion/core'\nimport { mq, variables } from '../../../cssInJs'\n\nexport default {\n pageTiles : css({\n display: 'flex',\n justifyContent: 'flex-start',\n flexWrap: 'wrap',\n margin: '2rem -10px',\n overflow:'hidden'\n }),\n pageTile__tile : css(mq({\n flex: '0 0 100%',\n maxWidth: '100%',\n padding: '10px',\n zIndex:1,\n '&:nth-of-type(even)' : {\n '.pageTile__bsyc__bg' : mq({\n order: ['0',null,'2'],\n }),\n '.pageTile__bsyc__content__details' : mq({\n order: '1'\n })\n }\n })),\n\n tile__content : css({\n // display: 'flex',\n // flexDirection: 'row',\n // justifyContent: 'space-between',\n // width: '100%',\n // height: '100%',\n // cursor: 'pointer',\n // position: 'relative',\n // flexWrap: 'wrap',\n '&:hover' : {\n textDecoration: 'none',\n '& .pageTile__bsyc__content__details' : {\n color: 'white',\n backgroundColor: variables.greenColor\n // '&.default' : css({\n // backgroundColor: 'rgba(0,113,188,1)'\n // }),\n // '&.red' : css({\n // backgroundColor: 'rgba(211,61,2,1)'\n // }),\n // '&.green' : css({\n // backgroundColor: 'rgba(0, 146, 69,1)'\n // })\n },\n '& .pageTile__bsyc__bg2' : {\n //transform: scale(1.05)\n transform : 'scale(1.05)'\n }\n }\n }),\n\n tile__flip__wrapper : css({\n zIndex:'-1', \n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'space-between',\n width: '100%',\n height: '100%',\n cursor: 'pointer',\n position: 'relative',\n flexWrap: 'wrap'\n }),\n\n// tile__bg : css(mq({\n// height: '0',\n// //paddingTop: '30%',\n// paddingTop: ['50%','35%','30%'],\n// backgroundPosition: '50%',\n// backgroundRepeat: 'no-repeat',\n// backgroundSize: 'cover',\n// flex: '1 1 300px'\n// })),\n\ntile__bg : css(mq({\n height: '0',\n paddingTop: ['50%','35%','30%'],\n //height: ['50%','35%','30%'],\n flex: '1 1 300px',\n overflow:'hidden',\n position:'relative'\n})),\n\ntile__bg2 : css(mq({\n height: '100%',\n backgroundPosition: '50%',\n backgroundRepeat: 'no-repeat',\n backgroundSize: 'cover',\n //overflow:'hidden',\n transition:'all .2s',\n position:'absolute',\n top:'0px',\n width:'100%'\n})),\n\n tile__details : css({\n overflow: 'hidden',\n flexGrow: '1',\n textAlign: 'center',\n width: '100%',\n bottom: '0',\n backgroundColor: variables.blueColor,\n // '&.default' : css({\n // backgroundColor: 'rgba(0, 113, 188,.5)'\n // }),\n // '&.red' : css({\n // backgroundColor: 'rgba(211, 61, 2,.5)'\n // }),\n // '&.green' : css({\n // backgroundColor: 'rgba(0, 146, 69,.5)'\n // }),\n //backgroundColor : '#77cf22',\n flex: '1 1 300px',\n transition: 'all .2s ease-in-out',\n color: '#ebebeb',\n position:'relative',\n '& .pageTile__bsyc__container' : mq({\n //position: 'absolute',\n position: ['static,',null,'absolute'],\n top: '50%',\n left:'50%',\n transform: ['none',null,'translate(-50%, -50%)'],\n width:['100%',null,'90%'],\n padding:['1rem',null,'0px'],\n '& .pageTile__bsyc__title' : {\n //fontFamily: 'proxima-soft, sans-serif',\n fontSize: '2rem',\n //textTransform: 'uppercase',\n fontWeight: '700',\n lineHeight: '1',\n margin: '0',\n paddingTop: '.5rem',\n paddingBottom: '.5rem',\n color:'inherit'\n },\n '& .pageTile__bsyc__desc' : {\n lineHeight: '1.3',\n fontSize: '.9rem',\n //color: '#3d3d3d',\n minHeight: '70px',\n color:'inherit',\n fontWeight:'400'\n }\n })\n })\n}","//import React from 'react';\nimport cmsUtils from '../../../cms/utils/cmsUtils';\nimport utils from '../../../utils';\nimport { SiteLink } from '../../../components';\n\n/** @jsx jsx */\nimport { jsx } from '@emotion/core'\nimport style from './style';\n\nexport function PageTilesBsyc(props) {\n const item = props.item;\n //const detailHoverBgColor = props.detailHoverBgColor ? props.detailHoverBgColor : \"black\";\n const cmsOption = props.cmsOption || {};\n const pages = getPages(cmsUtils.payload(item, 'PageObjects'))\n const pageTileElts = pages.map((page, index) =>\n \n );\n\n //const cssClass = utils.classNames('cms_item', 'pageTiles tiles', item.cssClass || item.anchorName || '');\n const cssClass = utils.classNames('cms_item', 'pageTiles__bsyc', item.cssClass || item.anchorName || '');\n\n return (\n
\n {pageTileElts}\n
\n );\n}\n\nfunction getPages(pagesSerialized) {\n if (pagesSerialized) {\n return JSON.parse(pagesSerialized);\n }\n return [];\n}\n\nfunction Tile(props) {\n const page = props.page;\n const imageUrl = utils.site.resourcePath(page.imageUrl);\n const disableLink = props.disableLink;\n const colorTheme = page.colorTheme;\n const index = props.idx;\n return (\n \n
\n \n
\n\n
\n
\n
\n \n
\n
\n \n {\n (page.pageTitle && page.pageTitle !== '') &&\n
\n {page.pageTitle}\n
\n }\n\n
\n {page.tileDesc || page.description}\n
\n
\n
\n
\n
\n
\n )\n}","import React from 'react';\nimport cmsUtils from '../../utils/cmsUtils';\nimport utils from '../../../utils';\nimport { SiteLink } from '../../../components';\n\nexport function SingleBanner(props) {\n const item = props.item;\n const cmsOption = props.cmsOption || {};\n\n //console.log('item', item);\n const heightSet = cmsUtils.payload(item, 'HeightSet') || 'standard';\n const alignV = cmsUtils.payload(item, 'AlignV') || '50%';\n\n const cssClass = utils.classNames('cms_item', 'single-banner', 'banner-item', `bannerSize--${heightSet}`, item.cssClass || item.anchorName || '');\n const bgUrl = utils.site.resourcePath(cmsUtils.payload(item, 'ImageUrl'));\n\n const captionTitle = cmsUtils.payload(item, 'CaptionTitle2') || cmsUtils.payload(item, 'CaptionTitle');\n const linkUrl = cmsUtils.payload(item, 'LinkUrl2') || cmsUtils.payload(item, 'LinkUrl');\n\n const titlePanel = captionTitle ? (\n linkUrl ? (\n
\n
) : (
)\n ) : null;\n\n return (\n
\n {titlePanel &&
{titlePanel}
}\n
\n );\n\n\n}\n","import React, { useRef } from 'react';\nimport env from '../../../env';\nimport { usePost } from '../../../components';\nimport { useForm } from '../../../form';\nimport { Button, ErrorMessage } from '../../../components';\nimport { getContactModel } from './contactFormModel';\nimport { gtm } from '../../../lib/tracking';\nimport ReCAPTCHA from \"react-google-recaptcha\";\n\nexport function Contact(props) {\n const emailReceiver = props.emailReceiver;\n const fileAttachment = props.fileAttachment || 'false';\n \n const model = getContactModel({});\n const form = useForm(model, { usePlaceholder: true });\n const [sendingStatus, setSendingStatus] = React.useState(null);\n const post = usePost();\n const recaptchaRef = useRef(null);\n\n function onSubmit(e) {\n form.validateForm(e, () => {\n const recaptchaValue = recaptchaRef.current.getValue();\n const value = { ...form.getValue(), emailReceiver: emailReceiver, recaptchaValue : recaptchaValue }; \n var files = form.getFiles();\n var formData = new FormData();\n formData.append('jsonData', JSON.stringify(value))\n files.forEach(file => {\n (file.files || []).forEach(uploadFile => {\n formData.append(file.name, uploadFile)\n })\n });\n //post.send(env.apiBase + \"/api/contact/send\", value);\n post.sendFormData(env.apiBase + \"/api/contact/send\", formData);\n setSendingStatus('pending')\n })\n\n console.log('submitting')\n }\n\n // if (status === 'done') {\n // //navigate(`/task/view/${taskId}`)\n // window.location.reload();\n // }\n\n if (post.done() && sendingStatus === 'pending') {\n var value = form.getValue();\n gtm.sendEvent('contactFormSubmitted', {contactEmail: value.email} )\n form.reset(model);\n recaptchaRef.current.reset();\n setSendingStatus(null)\n }\n\n const render = (name) => form.renderControl(name, null);\n\n return (\n
\n
\n
{render('name')}
\n
{render('phone')}
\n
{render('email')}
\n
\n\n
\n
{render('state')}
\n
\n\n
\n
{render('enquiry')}
\n
\n\n { fileAttachment === 'true' &&\n
\n
{render('attachments')}
\n
\n }\n\n
\n
\n \n \n
\n
\n\n
\n
\n
\n \n \n \n {post.done() && Successfully sent!}\n
\n
\n
\n
\n );\n}","import { fb, validators } from '../../../lib/form';\n\nexport function getContactModel(data) {\n \n let stateList = [\n {name: 'State', value: ''},\n {name: 'Australian Capital Territory', value: 'ACT'},\n {name: 'New South Wales', value: 'New South Wales'},\n {name: 'Victoria', value: 'Victoria'},\n {name: 'South Australia', value: 'South Australia'},\n {name: 'Queensland', value: 'Queensland'},\n {name: 'Western Australia', value: 'Western Australia'},\n {name: 'Northern Territory', value: 'Northern Territory'},\n {name: 'Tasmania', value: 'Tasmania'}\n ]\n \n const model = fb.group({\n name: [data.name || '', [validators.Required()], { label: 'Name', type: 'text' }],\n phone: [data.phone || '', [validators.Required()], { label: 'Phone', type: 'text' }],\n email: [data.email || '', [validators.Required(), validators.Email()], { label: 'Email', type: 'email' }],\n enquiry: [data.enquiry || '', [validators.Required()], { label: 'Your Message', type: 'textarea' }],\n attachments: [data.attachments || '', [], { label: 'Attachments', type: 'file' }],\n state : [data.state || '', [validators.Required()], { label: null, type: 'select', options: stateList }],\n }); \n return model;\n}","import React from 'react';\nimport cmsUtils from '../../utils/cmsUtils';\nimport utils from '../../../utils';\nimport { Contact } from './contactForm';\n\nexport function ContactForm(props) {\n const item = props.item;\n console.log('item', item);\n //const subItems = item.items || [];\n const cmsOption = props.cmsOption || {};\n\n //console.log('item', item, cmsOption);\n\n const emailReceiver = cmsUtils.payload(item, 'EmailReceiver');\n const fileAttachment = cmsUtils.payload(item, 'FileAttachment') || \"false\";\n\n const cssClass = utils.classNames('cms_item', 'htmlPanel', cmsOption.isCmsEdit && 'html', item.cssClass || item.anchorName || '');\n\n //let itemElt = (
);\n\n return (\n
\n\n
\n \n
\n\n
\n )\n}","import React from 'react';\n// import { Item } from '../../items/item';\n// import { SiteLink } from 'shared/link/siteLink';\nimport cmsUtils from '../../utils/cmsUtils';\nimport utils from '../../../utils';\nimport { YoutubeBannerMobilePopup } from '../../../lib/youtube/youtubeBanner--mobilePopup';\n//import env from '../../../env';\n//import Slider from 'modules/slider/slider';\n//import {BannerPanel} from '../bannerPanel/view';\n\nexport function VideoPanel(props) {\n const item = props.item;\n const cmsOption = props.cmsOption || {};\n\n //console.log('item', item);\n\n const heightSet = cmsUtils.payload(item, 'HeightSet') || 'standard';\n const videoCode = cmsUtils.payload(item, 'YoutubeCode');\n const playerId = 'ytBanner-' + (item.itemId).substr(0, 8);\n\n const video = {\n heightSet: heightSet,\n videoLinkOrId: videoCode,\n playerId: playerId\n }\n\n //const enableYoutube = env.isProd;\n const canPlayVideo = () => utils.css.screenWidth() >= 1200\n\n const cssClass = utils.classNames('cms_item', 'youtubePanel', item.cssClass || item.anchorName || '');\n\n //console.log(window.innerWidth, canPlayVideo())\n\n return (\n
\n {/* {canPlayVideo() ? : } */}\n \n
\n );\n}\n\n// function MobileSlider(props) {\n// const item = props.item;\n// const subItems = item.items || [];\n \n// const slides = subItems.map((subItem, index) =>\n// \n// );\n\n// useLayoutEffect(() => {\n// setTimeout(() => {\n// console.log(window.innerWidth);\n// const slider = new Slider('.contSlider');\n// slider.init();\n// }, 100)\n// }, [])\n\n// return (\n//
\n// {slides}\n//
\n// );\n// }\n\n// function SlideItem(props){\n// const item = props.item;\n// const bgUrl = utils.site.resourcePath(cmsUtils.payload(item, 'ImageUrl'));\n\n// return (\n//
\n// \"Banner\"\n//
\n// );\n\n// }","import React from 'react';\nimport env from '../../env';\nimport { SiteLink} from '../../components';\nimport { usePost } from '../../components';\nimport { ErrorPopup, Loading } from '../../components';\nimport { useRouter } from '../../components';\n\nexport function SearchResult(props) {\n const { query } = useRouter();\n const post = usePost();\n const keyword = query.q;\n //console.log(keyword);\n\n React.useEffect(() => {\n post.send(env.apiBase + '/api/search/search', { keyword: keyword });\n // eslint-disable-next-line\n }, [keyword]);\n\n if (post.loading()) {\n return \n } else if (post.hasErrors()) {\n return \n }\n\n console.log(post)\n const data = post.response;\n\n const pages = data.pages;\n\n if (pages.length === 0) return (\n
\n No result found.\n
\n )\n return (\n <>\n {pages.length > 0 &&
\n

Pages

\n \n
}\n \n );\n}\n\nfunction PageList({pages}) {\n return (\n
\n {pages.map((page, index) =>\n
\n
\n {page.pageTitle}\n
\n
\n
\n )}\n
\n );\n}","/** @jsx jsx */\nimport { jsx } from '@emotion/core';\nimport cmsUtils from '../../cms/utils/cmsUtils';\nimport { useEffect } from 'react';\n//import style from './style';\n\nexport function TextWithJavScript(props){\n \n const item = props.item;\n const cssClass = props.cssClass;\n const code = cmsUtils.payload(item, 'Code') || '';\n\n const javaScriptCode = code.substring(code.indexOf(\"\") + 9)).trim();\n const nonjavaScriptCode = code.replace(javaScriptCode, '').trim();\n console.log('nonjavaScriptCode', nonjavaScriptCode);\n\n useEffect(() => {\n \n const javaScriptTopCode = javaScriptCode.substring(javaScriptCode.indexOf(\"\") + 1)).trim();\n const javaScriptInsideCode = javaScriptCode.substring((javaScriptCode.indexOf(\">\") + 1), (javaScriptCode.indexOf(\"\"))).trim();\n\n const script = document.createElement('script');\n script.type = `text/javascript`;\n \n if(javaScriptInsideCode !== ''){\n script.text = javaScriptInsideCode;\n }\n\n if(javaScriptTopCode.includes(\"src=\")){\n let _src = javaScriptTopCode.indexOf('src=\"') === -1 ? '' : javaScriptTopCode.substring(javaScriptTopCode.indexOf('src=\"')).trim();\n let src = _src.substring((_src.indexOf('src=\"') + 5), _src.indexOf('\"',5));\n script.src = src;\n }\n\n if(javaScriptTopCode.includes(\"async\")){\n script.async = true;\n }\n\n if(javaScriptTopCode.includes(\"defer\")){\n script.defer = true;\n }\n\n if(javaScriptTopCode.includes(\"onload=\")){\n \n let _functionName = javaScriptTopCode.substring(javaScriptTopCode.indexOf('onload=') + 8);\n let functionName = _functionName.substring(0, _functionName.indexOf('\"')-1).replace('()','');\n script.onload = function(){\n window[functionName]();\n };\n }\n\n document.body.appendChild(script);\n }, [javaScriptCode]);\n\n return(\n
\n
\n )\n}","import React from 'react';\nimport cmsUtils from '../../utils/cmsUtils';\nimport utils from '../../../utils';\nimport { SearchResult } from '../../../site/searchResult/searchResult';\nimport { InstagramFeed } from '../../../components';\nimport { AppVersion } from '../../../components';\nimport { TextWithJavScript } from '../../../components/TextWithJavaScript/view';\n\nexport function Code(props) {\n const item = props.item;\n //const subItems = item.items || [];\n const cmsOption = props.cmsOption || {};\n\n //console.log('item', item, cmsOption);\n\n const code = cmsUtils.payload(item, 'Code');\n const codeType = cmsUtils.payload(item, 'CodeType');\n let controls = null;\n if (codeType === 'Json') {\n const codeJson = JSON.parse(code);\n if (codeJson.control === 'search-results') {\n controls = \n } else if(codeJson.control === 'app'){\n controls = \n } else if (codeJson.control === 'instagram') {\n controls = \n }\n }\n\n const cssClass = utils.classNames('cms_item', item.cssClass || item.anchorName || '');\n\n //let itemElt = (
);\n\n if (cmsOption.isCmsEdit)\n return (\n
\n
\n          Code Type: {codeType}\n          {code}
\n
\n )\n else if (codeType === 'Text')\n return (\n
\n )\n else if(codeType === 'TestWithJs'){\n return(\n \n )\n }\n else\n return (\n
{controls}
\n )\n}\n","import React from 'react';\nimport cmsUtils from '../../utils/cmsUtils';\nimport utils from '../../../utils';\nimport { SiteLink } from '../../../components';\n\nexport function BlogPosts(props) {\n const item = props.item;\n const cmsOption = props.cmsOption || {};\n\n //console.log('item', item);\n\n const posts = getPages(cmsUtils.payload(item, 'BlogPosts'));\n const numOfTileLines = parseInt(cmsUtils.payload(item, 'NumOfTileLines', '2'));\n //console.log(numOfPost, parseInt(numOfPost));\n //console.log(posts);\n const bp = utils.ui.getCurrentBreakpoint();\n const tilesPerLine = {xs:1, sm:1, md:2, lg:2, xl:3, xxl:4}\n const numOfPost = numOfTileLines * (tilesPerLine[bp] || 3);\n const step = numOfPost;\n console.log(bp, numOfTileLines, tilesPerLine, numOfPost)\n\n const [tilesToShow, setTilesToShow] = React.useState(numOfPost);\n\n const displayingPosts = posts.length > tilesToShow ? posts.slice(0, tilesToShow) : posts;\n const showMore = posts.length > displayingPosts.length;\n\n const pageTileElts = displayingPosts.map((page, index) =>\n \n );\n\n const cssClass = utils.classNames('cms_item', 'blogTiles tiles', item.cssClass || item.anchorName || '');\n\n return (\n <>\n
\n {pageTileElts}\n
\n {showMore && (
\n { setTilesToShow(tilesToShow + step) }}>LOAD MORE
)}\n \n );\n}\n\nfunction getPages(pagesSerialized) {\n if (pagesSerialized) {\n return JSON.parse(pagesSerialized);\n }\n return [];\n}\n\nfunction Tile(props) {\n const page = props.page;\n const imageUrl = utils.site.resourcePath(page.imageUrl);\n const disableLink = props.disableLink;\n return (\n
\n \n
\n
\n
\n
\n {page.pageTitle}\n
\n
\n {page.tileDesc || page.description}\n
\n
READ MORE
\n
\n
\n
\n
\n )\n}","import React from 'react';\nimport cmsUtils from '../../utils/cmsUtils';\nimport utils from '../../../utils';\n\nexport function BlogPostTitle(props) {\n const item = props.item;\n const cmsOption = props.cmsOption || {};\n\n //console.log('item', item);\n\n const title = cmsUtils.payload(item, 'PageTitle');\n const postDate = cmsUtils.payload(item, 'PostDate');\n\n const cssClass = utils.classNames('blogView__titleContainer', 'cms_item', item.cssClass || item.anchorName || '');\n\n return (\n
\n
\n {postDate}\n
\n

\n {title}\n

\n
\n );\n}\n","import React from 'react';\n//import cmsUtils from '../../utils/cmsUtils';\nimport utils from '../../../utils';\nimport { Item } from '../../items/item';\n\nexport function VideoHolder(props) {\n const item = props.item;\n const subItems = item.items || [];\n const cmsOption = props.cmsOption || {};\n\n //console.log('item', item, subItems);\n\n const subItemsElts = subItems.map((subItem, index) =>\n \n );\n\n const cssClass = utils.classNames('cms_item', 'videoHolder', item.cssClass || item.anchorName || '');\n\n return (\n
\n {subItemsElts}\n
\n );\n}","import React from 'react';\nimport cmsUtils from '../../utils/cmsUtils';\nimport utils from '../../../utils';\nimport { YoutubeEmbedPopup } from '../../../components';\n\nexport function VideoItem(props) {\n const item = props.item;\n const cmsOption = props.cmsOption || {};\n\n console.log('item', item);\n\n const youtubeCode = cmsUtils.payload(item, 'YoutubeCode');\n const posterFrameUrl = cmsUtils.payload(item, 'PosterFrameUrl');\n const captionTitleYoutube = cmsUtils.payload(item, 'CaptionTitleYoutube');\n const shortDesc = cmsUtils.payload(item, 'ShortDesc');\n\n const cssClass = utils.classNames('cms_item', 'videoItem', item.cssClass || item.anchorName || '');\n\n return (\n
\n
\n
\n \n
\n
\n

{captionTitleYoutube}

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

\n { title }\n

\n
\n { rating }\n
\n {/* style={{ flexBasis: props.desH + \"px\" }} */}\n
\n { desc }\n
\n
\n { bottom }\n
\n
\n );\n}","//import { Item } from 'cms/items/item';\nimport Slider from \"react-slick\";\nimport utils from '../../../utils';\n//import cmsUtils from 'cms/utils/cmsUtils';\n\n/** @jsx jsx */\nimport { jsx } from '@emotion/core';\nimport style from './style';\n//import { useState, useEffect } from 'react';\n\nimport { TestimonialItem } from '../testimonialItem/view';\n\nexport function TestimonialPanel(props){\n const item = props.item;\n //const defaultDesH = 220;\n const startRatingColor = props.startRatingColor;\n const subItems = item.items || [];\n //console.log(subItems.length);\n const cmsOption = props.cmsOption || {};\n const cssClass = utils.classNames('cms_item', 'testimonialPanel', item.cssClass || item.anchorName || '');\n \n //const [desH, setDesH] = useState(defaultDesH);\n\n //var maxDesTextLength = 0;\n const testimonialItems = subItems.map((subItem, index) => {\n // let subItemDes = cmsUtils.payload(subItem, \"Desc\");\n // if(maxDesTextLength < subItemDes.length){\n // maxDesTextLength = subItemDes.length\n // }\n //return \n return \n }\n );\n \n // useEffect(() => {\n // if(defaultDesH < maxDesTextLength){\n // setDesH(maxDesTextLength);\n // }\n // }, [maxDesTextLength]);\n\n var settings = {\n dots: false,\n infinite: true,\n speed: 1700,\n autoplaySpeed: 3000,\n ////fade: true,\n autoplay: true,\n slidesToShow: (subItems.length >= 3 ? 3 : subItems.length),\n //slidesToShow: 3,\n slidesToScroll: 1,\n responsive : [\n {breakpoint : 1024, settings : { slidesToShow: (subItems.length >= 2 ? 2 : subItems.length) }},\n {breakpoint : 800, settings : { slidesToShow: 1 }}\n ]\n };\n\n return(\n
\n \n { testimonialItems }\n \n
\n );\n}","import { css } from '@emotion/core'\n//import { mq } from '../../cssInJs'\nexport default{\n exTextItem : css({\n overflow:'hidden',\n maxHeight:'0',\n transition: 'all 0.8s',\n padding: '0px',\n '&.expand' : {\n maxHeight:'40000px',\n padding: '1rem 0'\n }\n })\n}","/** @jsx jsx */\nimport { jsx } from '@emotion/core'\n//import React from 'react';\nimport cmsUtils from '../../cms/utils/cmsUtils';\nimport utils from '../../utils';\nimport style from './style';\nimport { Item } from '../../cms/items/item';\n\nexport function ExpandablePanel(props){\n const item = props.item;\n const subItems = item.items || [];\n const cmsOption = props.cmsOption || {};\n\n const bgColor = cmsUtils.payload(item, 'BgColor');\n const imageUrl = cmsUtils.payload(item, 'ImageUrl');\n const backgroundTile = cmsUtils.payload(item, 'BackgroundTile');\n \n let bgUrl = null;\n\n if (imageUrl){\n bgUrl = utils.site.resourcePath(imageUrl);\n }\n else if (backgroundTile){\n bgUrl = utils.site.resourcePath(`/dist/transparent-textures/textures/${backgroundTile}`);\n }\n\n const cssClass = utils.classNames('cms_item', 'contentPanel', 'expandablePanel', cmsOption.isCmsEdit && 'expandablePanel_item_cms', item.cssClass || item.anchorName || '');\n const subItemsElts = subItems.map((subItem, index) =>\n \n );\n //id={item.anchorName}\n return (\n
\n
\n
\n {subItemsElts}\n
\n
\n )\n}","import { css } from '@emotion/core';\nimport { variables, mq } from '../../../cssInJs';\n\nconst numberOfTiles = [1, 2, 3, 3];\n//const marginLR = [14, 14, 14, 14]\nconst marginTB = [14, 14, 14, 14];\n\nconst widthPercent = (index) => 100 / numberOfTiles[index] + '%';\n\nconst linkText = {\n color: variables.fontColor,\n fontSize: '0.8rem',\n padding: '0 20px',\n '&:hover': {\n color: variables.fontColor,\n },\n};\n\nexport const tileListStyle = {\n tiles: mq({\n display: 'flex',\n justifyContent: 'flex-start',\n flexWrap: 'wrap',\n //marginLeft: [-marginLR[0] / 2, -marginLR[1] / 2, -marginLR[2] / 2, -marginLR[3] / 2],\n //marginRight: [-marginLR[0] / 2, -marginLR[1] / 2, -marginLR[2] / 2, -marginLR[3] / 2],\n marginTop: [marginTB[0] / 2, marginTB[1] / 2, marginTB[2] / 2, marginTB[3] / 2],\n marginBottom: [marginTB[0] / 2, marginTB[1] / 2, marginTB[2] / 2, marginTB[3] / 2],\n maxWidth: ['960px'],\n margin: 'auto',\n }),\n categoryList: mq({\n marginTop: [marginTB[0] / 2, marginTB[1] / 2, marginTB[2] / 2, marginTB[3] / 2],\n marginBottom: [marginTB[0] / 2, marginTB[1] / 2, marginTB[2] / 2, marginTB[3] / 2],\n maxWidth: ['960px'],\n margin: 'auto',\n 'div.ff.form-group': {\n maxWidth: '250px',\n },\n }),\n};\n\nexport const tileStyle = {\n tile: mq({\n //paddingLeft: [marginLR[0] / 2, marginLR[1] / 2, marginLR[2] / 2, marginLR[3] / 2],\n //paddingRight: [marginLR[0] / 2, marginLR[1] / 2, marginLR[2] / 2, marginLR[3] / 2],\n paddingLeft: '10px',\n paddingRight: '10px',\n paddingTop: [marginTB[0] / 2, marginTB[1] / 2, marginTB[2] / 2, marginTB[3] / 2],\n paddingBottom: [marginTB[0] / 2, marginTB[1] / 2, marginTB[2] / 2, marginTB[3] / 2],\n maxWidth: [widthPercent(0), widthPercent(1), widthPercent(2), widthPercent(3)],\n flexBasis: [widthPercent(0), widthPercent(1), widthPercent(2), widthPercent(3)],\n flexGrow: 0,\n flexShrink: 0,\n }),\n tileLink: {\n background: '#fff',\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n //padding: 5,\n //border: '1px solid red',\n '&:hover': {\n textDecoration: 'none',\n //background: '#f3f3f3'\n },\n },\n prdImage: {\n //padding: '0 5px',\n //maxWidth: '190px',\n //margin: 'auto',\n //width: '100%',\n backgroundColor: 'grey',\n },\n bg: {\n //height: 0,\n //paddingBottom: '100%',\n paddingTop: '210px',\n backgroundPosition: 'center top',\n backgroundSize: 'cover',\n backgroundRepeat: 'no-repeat',\n },\n shortDes: css({\n fontWeight: 'bold',\n textAlign: 'center',\n marginTop: '0.8rem',\n lineHeight: '1.15',\n marginBottom: '8px',\n }),\n name: css(linkText, {\n fontWeight: 300,\n fontFamily: variables.familyHeader,\n lineHeight: '1.2',\n textAlign: 'center',\n marginBottom: '8px',\n }),\n price: css(linkText, {\n marginTop: 'auto',\n textAlign: 'center',\n marginBottom: '1rem',\n }),\n};\n","/** @jsx jsx */\nimport { jsx } from '@emotion/core';\nimport utils from '../../../utils';\nimport { SiteLink } from '../../../components';\nimport { tileStyle } from './productTileStyle';\n\nexport function ProductTile({ product }) {\n const s = tileStyle;\n const imageUrl = product.thumbnailUrl ? utils.site.resourcePath(product.thumbnailUrl) : '/assets/product-empty.png';\n //console.log(\"product : \", product)\n const productUrl = product.productUrl ? product.productUrl : `/product/${product.productSlug}`;\n return (\n
\n \n
\n
\n
\n
{product.productName}
\n
\n {product.shortDesc}\n {/*
\n
\n
*/}\n
\n\n
\n {product.productStatus !== 0\n ? product.productStatusText\n : product.priceTextOveriding\n ? product.priceTextOveriding\n : 'AU' + utils.money.formatMoney(product.priceIncTax)}\n
\n
\n
\n );\n}\n","/** @jsx jsx */\nimport { jsx } from '@emotion/core';\nimport React, { Fragment, useState } from 'react';\nimport env from '../../../env';\nimport { Loading, ErrorPopup, usePost } from '../../../components';\nimport { useForm } from '../../../form';\nimport { ProductTile } from './productTile';\nimport { tileListStyle } from './productTileStyle';\nimport { getCategoryListModel } from './categoryListModel';\n\nexport function ProductItems({ categories }) {\n const post = usePost();\n React.useEffect(() => {\n post.send(env.apiBase + '/api/product/getProducts', { categories: categories });\n // eslint-disable-next-line\n }, [categories]);\n\n // React.useEffect(() => {\n // if (post.done()) {\n // setProduct(post.response);\n // }\n // }, [post])\n\n if (post.loading()) {\n return ;\n } else if (post.hasErrors()) {\n return ;\n }\n\n const data = post.response;\n //console.log('product List', data);\n\n return data.items && data.items.length > 0 ? (\n \n ) : (\n
No products
\n );\n}\n\nfunction Items({ items, categories }) {\n const s = tileListStyle;\n const model = getCategoryListModel(categories);\n const categoryListForm = useForm(model, { usePlaceholder: true, onControlChanged: orderItemChanged });\n\n //const [showProducts, setShowProducts] = useState(items);\n const [showProducts, setShowProducts] = useState(() => {\n if (categories.length === 1) {\n let _items = [];\n let _items2 = JSON.parse(JSON.stringify(items));\n _items = _items2.filter((item) => {\n for (let i in item.productCategories) {\n if (item.productCategories[i].categoryId === categories[0].categoryId) {\n item.seqInCategory = item.productCategories[i].seq;\n return true;\n }\n }\n return false;\n });\n\n sortProudcts(_items);\n return _items;\n }\n return items;\n });\n\n function orderItemChanged(e, control) {\n if (control && control.name === 'categoryList') {\n console.log('controll value', control.value);\n let _items = [];\n if (control.value && control.value !== '') {\n _items = items.filter((item) => {\n if (control.value === '_favourites_') {\n if (localStorage.favorites !== '') {\n if (localStorage.favorites.includes(item.productId)) {\n return true;\n }\n }\n } else {\n for (let i in item.productCategories) {\n if (item.productCategories[i].categoryId === control.value) {\n item.seqInCategory = item.productCategories[i].seq;\n return true;\n }\n }\n }\n return false;\n });\n } else {\n _items = items;\n }\n //sort\n sortProudcts(_items);\n setShowProducts(_items);\n }\n }\n\n const render = (name) => categoryListForm.renderControl(name, null);\n return (\n \n
\n {render('categoryList')}\n
\n
\n {/* {items.map((item, index) => )} */}\n {showProducts.length > 0 ? (\n showProducts.map((item, index) => )\n ) : (\n
No product
\n )}\n
\n
\n );\n}\n\nfunction sortProudcts(items) {\n items.sort((a, b) => {\n return a.seqInCategory - b.seqInCategory;\n });\n}\n","import { fb } from '../../../lib/form';\nexport function getCategoryListModel(data) { \n var options = [{name : 'All', value : ''}, {name : 'Favourites', value : '_favourites_'}];\n if(data.length > 0){\n data.forEach(el => {\n options.push({name : el.categoryName, value : el.categoryId});\n });\n }\n const model = fb.group({\n categoryList: [data.categoryList || '', [], {\n label: 'FILTER BY',\n type: 'select',\n options : options\n }]\n }); \n return model;\n}","import { mq } from '../../../cssInJs'\n\nexport default {\n orderDetails: {\n textAlign: 'left',\n marginBottom: '3rem',\n paddingLeft: '1rem',\n paddingRight: '1rem'\n },\n summary: {\n\n },\n\n fn: mq({\n minWidth: ['7rem', null, '10em'],\n margin: 0\n }),\n fv: {\n\n },\n\n orderItems: {},\n orderItem: {\n padding: '0.5rem 0',\n margin: '0.5rem 0',\n borderBottom: 'solid 1px #ccc'\n },\n total: {\n //marginLeft: 15,\n fontWeight: 'bold',\n color: 'chocolate'\n }\n}\n","import { gtm } from '../../lib/tracking';\n\nexport function alreadySent(order) {\n const orderId = localStorage.getItem('orderIDSentToGTM');\n if (orderId && orderId === order.orderId.toString()) return true;\n localStorage.setItem('orderIDSentToGTM', order.orderId);\n return false;\n}\n\nexport function sendPurchaseEvent(order) {\n if (!gtm.hasGTM()) return;\n\n if (alreadySent(order)) return;\n\n // for the details of the fields, https://developers.google.com/analytics/devguides/collection/analyticsjs/enhanced-ecommerce\n const ecm = {\n purchase: {\n actionField: {\n id: order.orderId, // Transaction ID. Required for purchases and refunds.\n affiliation: 'Online Store',\n revenue: order.totalAmount, // Total transaction value (incl. tax and shipping)\n tax: order.taxAmount,\n shipping: order.shippingAmount,\n coupon: order.promoCode,\n },\n products: [],\n },\n };\n\n order.orderItems\n .filter((oi) => oi.orderItemType === 0)\n .forEach((oi) => {\n ecm.purchase.products.push({\n name: oi.itemName, // Name or ID is required.\n id: oi.productId,\n price: oi.unitPrice,\n quantity: oi.quantity,\n });\n });\n\n console.log(ecm);\n window.dataLayer.push({ ecommerce: null }); // Clear the previous ecommerce object.\n window.dataLayer.push({\n event: 'purchase',\n ecommerce: ecm,\n });\n}\n","/** @jsx jsx */\nimport { jsx } from '@emotion/core';\n\nexport function PromoApplied({ order }) {\n const promoStyle = {\n promoSection: {\n margin: '1rem 0',\n padding: '0.5rem 1rem',\n background: '#fff5e2',\n },\n };\n\n if (!(order.promoInfo && order.promoInfo.promoCode)) return null;\n\n // console.log(isValid, dirtyFields, isSubmitting, errors);\n return (\n
\n Promo {order.promoInfo.promoCode}({order.promoInfo.promoDesc}) has been applied.\n
\n );\n}\n","/** @jsx jsx */\nimport { jsx } from '@emotion/core';\nimport style from './orderDetailsStyle';\nimport React from 'react';\n\nimport env from '../../../env';\nimport { useGet } from '../../../components';\nimport { Loading, ErrorPopup } from '../../../components';\nimport { useRouter } from '../../../components';\nimport utils from '../../../utils';\n\nimport { sendPurchaseEvent } from '../gtm';\nimport { PromoApplied } from './promoApplied';\n\nexport function OrderDetails() {\n const get = useGet();\n // const { pathname, query } = useRouter();\n const { query } = useRouter();\n const [pageLoaded, setPageLoaded] = React.useState(false);\n const o = query.o || '';\n\n React.useEffect(() => {\n get.send(env.apiBase + '/api/order/getPaidOrder/' + o);\n // eslint-disable-next-line\n }, []);\n\n if (get.loading()) {\n return ;\n } else if (get.hasErrors()) {\n return ;\n }\n const order = get.response;\n if (!pageLoaded && order) {\n setPageLoaded(true);\n //if (!query.noGTM) gtm.pageView(pathname, 'Order Thankyou');\n if (!query.noGTM) sendPurchaseEvent(order);\n return null;\n }\n\n return
;\n}\n\nfunction Details({ order }) {\n console.log('order', order);\n const orderItems = order.orderItems.filter((x) => x.orderItemType === 0);\n const taxLines = order.orderItems.filter((x) => x.orderItemType === 1);\n\n function itemAmount(orderItem) {\n return (\n (orderItem.unitPrice * 100 +\n (orderItem.addedUnitPrice ? orderItem.addedUnitPrice * 100 : 0) -\n (orderItem.discountUnitPrice ? orderItem.discountUnitPrice * 100 : 0)) /\n 100\n );\n }\n // function itemTotalAmount(orderItem) {\n // return (orderItem.quantity * (orderItem.unitPrice * 100 + orderItem.addedUnitPrice * 100 - orderItem.discountUnitPrice * 100)) / 100;\n // }\n\n function DiscountAmountDisplay(amount, discountedAmount) {\n return (\n
\n
\n {utils.money.formatMoney(discountedAmount)}\n
\n {amount !== discountedAmount && (\n
\n {utils.money.formatMoney(amount)}\n
\n )}\n
\n );\n }\n\n function sum(array) {\n if (array.length === 0) return 0;\n return array.reduce((p, c) => p + c);\n }\n function DiscountedAmount(type, orderItemId, unitPrice, qty = 1) {\n if (order.promoInfo && order.promoInfo.promoCode) {\n if (type === 'gst') {\n const totalGst = sum(order.promoInfo.promoItems.map((x) => x.discountTaxAmount));\n if (totalGst) {\n return DiscountAmountDisplay(unitPrice, unitPrice - totalGst);\n }\n } else {\n const found = order.promoInfo.promoItems.find((x) => x.orderItemId === orderItemId);\n if (found) {\n return DiscountAmountDisplay(unitPrice, (unitPrice * qty - found.discountItemAmount) / qty);\n }\n }\n }\n return {utils.money.formatMoney(unitPrice)};\n }\n\n const billingAddr = order.billingAddress;\n return (\n
\n {!hasGuideInOrder(order) && }\n {!hasBookingInOrder(order) && (\n \n )}\n
\n
\n
\n
\n {order.orderNo}{' '}\n
\n
\n {' '}\n \n AU {utils.money.formatMoney(order.totalAmount, 2)}\n {' '}\n
\n
\n {' '}\n {utils.date.formatYYYYMMDD(order.orderDate)}{' '}\n
\n
\n
\n
\n\n

ITEMS

\n
\n {orderItems.map((orderItem, i) => (\n
\n
\n \n
\n \n
\n
\n Unit Price: {DiscountedAmount('sku', orderItem.orderItemId, itemAmount(orderItem), orderItem.quantity)}\n
\n
Qty: {orderItem.quantity}
\n
\n ))}\n\n {/*
\n
Shipping Fee:
\n
\n {DiscountedAmount('sku', orderItem.orderItemId, itemAmount(items[index], orderItem))}\n
\n
*/}\n\n {taxLines.map((orderItem, index) => (\n
\n
Tax: {orderItem.itemName}
\n
\n {DiscountedAmount(orderItem.itemName === 'GST' ? 'gst' : '', orderItem.orderItemId, orderItem.unitPrice)}\n
\n
\n ))}\n\n \n\n
\n
\n
\n Total: AU {utils.money.formatMoney(order.totalAmount, 2)}\n {/* Item Total: {utils.money.formatMoney(order.itemAmount)}\n + Shipping Fee: {order.shippingAmount > 0 ? 'AU ' + utils.money.formatMoney(order.shippingAmount) : 'FREE'}\n + GST: {utils.money.formatMoney(order.taxAmount)}\n \n
Grand Total (including GST): AU {utils.money.formatMoney(order.totalAmount)}\n
*/}\n
\n
\n
\n
\n\n
\n\n {/*

\n DELIVERY METHOD\n

\n
\n {order.shippingMethod}\n
\n {\n (order.shippingAddress && order.shippingMethod === 'Standard') &&\n
\n }\n */}\n\n

BILLING ADDRESS

\n
\n {billingAddr.firstName}{' '}\n
\n
\n {billingAddr.surname}{' '}\n
\n
\n {billingAddr.email}{' '}\n
\n
\n {billingAddr.phone}{' '}\n
\n
\n );\n}\n\nfunction hasGuideInOrder(order) {\n return order.orderItems.some((x) => x.ext?.itemType === 'guide');\n}\n\nfunction hasBookingInOrder(order) {\n return order.orderItems.some((x) => x.ext?.itemType === 'event');\n}\n\nfunction ItemExt({ orderItem }) {\n // console.log(orderItem.ext);\n const ext = orderItem?.ext;\n if (!ext) return '';\n const desc = ext.itemName;\n if (ext.itemType === 'guide')\n return
;\n else if (ext.itemType === 'event')\n return orderItem.bookingView ? (\n \n ) : (\n ') }}\n >\n );\n else if (ext.itemName)\n return
;\n\n return '';\n}\n\nfunction BookingSummary({ ext, booking }) {\n return (\n
\n {/*
[{booking.startDateTimeText}]
*/}\n {/*
{booking.eventTitle}
*/}\n
\n
Booking ID: {booking.bookingCode}
\n
\n );\n}\n","import { css } from '@emotion/core'\nimport { mq } from '../../../cssInJs'\n\nconst step = css(mq({\n flex: '0 0 100%',\n opacity: 0,\n padding: '2rem 1rem 2rem',\n // maxHeight: '300px',\n transition: 'all 0.3s',\n}))\n\nexport default {\n cart: css({\n position: 'relative',\n margin: 'auto',\n marginBottom: '3rem',\n textAlign: 'left'\n }),\n\n stepsWrapper: css({\n overflow: 'hidden',\n }),\n steps: css({\n display: 'flex',\n transition: 'all 1s cubic-bezier(0.22, 0.61, 0.36, 1)',\n '& h3, & h4': {\n textTransform: 'uppercase'\n }\n }),\n step,\n stepCurrent: css(step, {\n // maxHeight: '2000px',\n opacity: 1,\n background: 'rgba(255,255,255,0.5)',\n }),\n stepPrev: css(step, {}),\n stepNext: css(step, {}),\n stepLast: css({\n //maxHeight: '1000px',\n opacity: 1\n }),\n\n}\n","import { css } from '@emotion/core';\nimport { mq } from 'cssInJs';\n\nconst navs = {\n navs: css(\n mq({\n marginTop: [5, 10, 20],\n marginBottom: 15,\n display: 'flex',\n justifyContent: 'center',\n borderBottom: 'solid 10px #eee',\n })\n ),\n nav: css(\n mq({\n // width: 20,\n // height: 30,\n background: '#ccc',\n margin: 5,\n padding: '0.5rem 1rem',\n transform: 'skewX(-12deg)',\n })\n ),\n navCurrent: css({\n backgroundColor: 'orange',\n color: 'white',\n fontWeight: 'bold',\n }),\n navFilled: css({\n backgroundColor: '#666',\n color: '#ccc',\n }),\n navClickable: css({\n cursor: 'pointer',\n }),\n};\n\nexport default {\n arrow: css(\n mq({\n position: 'absolute',\n cursor: 'pointer',\n color: '#aaa',\n transition: 'all 0.3s',\n zIndex: '1',\n // xs, sm(>=576), md(>=768), lg(>=992), xl(>=1200), xxl(>=1600)\n top: 0,\n // [mqMax.md]: {\n // width: 100\n // },\n width: [20, 25, 30, 40],\n '&:hover': {\n color: '#666',\n },\n })\n ),\n arrowPrev: css(\n mq({\n left: [-15, 0],\n })\n ),\n arrowNext: css(\n mq({\n right: [-15, 0],\n })\n ),\n\n ...navs,\n};\n","/** @jsx jsx */\nimport { jsx } from '@emotion/core';\nimport style from './stepStyle';\nimport React from 'react';\n\n// import { FaAngleRight } from 'react-icons/fa';\n\nexport function StepNav({ stepInfo }) {\n const { steps, currentStep, moveTo, canGo } = stepInfo;\n\n //if (currentStep === steps.length - 1) return null;\n return (\n
\n {steps\n .filter((x) => x.id !== 'thanks')\n .map((step, index) => (\n \n moveTo(index)}\n >\n {step.title}\n
\n {/* {index < steps.length - 1 && } */}\n \n ))}\n \n );\n}\n","export default {\n items: {\n marginBottom: '2rem',\n width: '100%',\n },\n item: {\n display: 'flex',\n justifyContent: 'space-between',\n borderBottom: 'solid 1px #ccc',\n padding: '0.5rem',\n transition: 'all 0.5s',\n '&:hover': {\n background: '#f3f3f3',\n },\n },\n // imgContainer: {\n // flex: '1 1 auto',\n // },\n product: {\n flex: '1 1 auto',\n },\n details: {\n flex: '0 1 auto',\n display: 'flex',\n },\n optionName: {\n fontSize: '0.9rem',\n },\n optionValue: {\n fontSize: '0.9rem',\n fontWeight: 'bold',\n },\n qty: {\n margin: '0 0.5rem',\n '.form-group': {\n display: 'inline-block',\n },\n input: {\n width: '3.5rem',\n },\n },\n amount: {\n margin: '0 0.5rem',\n paddingTop: '0.3rem',\n minWidth: '5rem',\n textAlign: 'right',\n },\n remove: {\n //margin: '0 0.5rem',\n //paddingTop: '0.1rem',\n button: {\n display: 'block',\n },\n },\n};\n","import { mq } from '../../../cssInJs'\nexport default {\n summary: mq({\n marginLeft: [0, null, 30],\n border: 'solid 1px #333',\n padding: '0.5rem',\n color: 'white',\n borderRadius: ' 0.5rem',\n background: '#555',\n marginBottom: '0.5rem'\n }),\n\n totalHdr: {\n fontSize: '1.1rem',\n marginBottom: '0.5rem'\n },\n\n totalAmount: {\n fontSize: '1.2rem',\n fontWeight: 'bold'\n }\n}\n","/** @jsx jsx */\nimport { jsx } from '@emotion/core';\nimport style from './summaryStyle';\n\nimport utils from '../../../utils';\n\nexport function CartSummary({ cart }) {\n //console.log('cart', cart);\n const formatMoney = utils.money.formatMoney;\n\n return (\n
\n {/* {\n cart.shippingMethod === \"Standard\" &&\n \n
Shipping
\n
AU {formatMoney(cart.shippingAmount)}
\n
\n
\n } */}\n
Total Amount
\n
AU {formatMoney(cart.totalAmount, 2)}
\n {cart.promoInfo && cart.promoInfo.promoCode && (\n \n \n -{utils.money.formatMoney(cart.promoInfo.totalItemDiscount + cart.promoInfo.totalTaxDiscount)}\n {' '}\n saved\n \n )}\n {/*
\n
Total:
\n
AU {formatMoney(cart.itemAmount)}
\n
\n
\n
GST:
\n
AU {formatMoney(cart.taxAmount)}
\n
*/}\n {/*
\n
Shipping:
\n
\n Method not selected yet\n Pickup - FREE\n {{cart.shippingAmount > 0? 'AU ' + formatMoney(cart.shippingAmount) : 'FREE'}}\n
\n
\n
\n
\n
\n {{cart.shippingMethod == ''? 'Please select Shipping Option.': 'AU ' + formatMoney(cart.totalAmount)}}\n
\n
\n */}\n
\n );\n}\n","export const promoStyle = {\n promoSection: {\n margin: '1rem 0',\n padding: '0.5rem 1rem',\n background: '#fff5e2',\n },\n promoCode: {\n input: {\n textTransform: 'uppercase',\n },\n '.form-group': {\n margin: 0,\n },\n },\n};\n","/** @jsx jsx */\nimport { jsx } from '@emotion/core';\nimport React from 'react';\n\nimport env from 'env';\nimport { useForm } from 'react-hook-form';\nimport { yupResolver } from '@hookform/resolvers/yup';\nimport * as yup from 'yup';\nimport { FieldError, ServerErrors } from '@site/_helpers';\nimport { promoStyle } from './promoStyle';\nimport { fetchPost } from '@lib/net-api/fetch';\n\nconst schema = yup.object().shape({\n promoCode: yup.string().required('Promo Code is required.'),\n});\n\nexport function PromoForm({ cart, applyPromoCode }) {\n const defaultValues = { promoCode: '' };\n\n const {\n formState: { isSubmitting, errors },\n register,\n handleSubmit,\n reset,\n } = useForm({ defaultValues, resolver: yupResolver(schema) });\n const [serverErrors, setServerErrors] = React.useState([]);\n\n async function onSubmit(model) {\n try {\n const value = { ...model, cartId: env.getDevCartId() };\n const res = await fetchPost(env.apiBase + '/api/cart/applyPromoCode', value);\n\n const cart = res.results.cartModel;\n // console.log(cart);\n reset(defaultValues);\n applyPromoCode(cart);\n } catch (e) {\n reset(model);\n setServerErrors(e);\n }\n }\n\n if (cart.promoInfo && cart.promoInfo.promoCode) return null;\n // console.log(isValid, dirtyFields, isSubmitting, errors);\n return (\n
\n
\n
\n
\n
\n
\n \n \n
\n
\n
\n \n
\n
\n \n
\n
\n
\n );\n}\n","/** @jsx jsx */\nimport { jsx } from '@emotion/core';\nimport React from 'react';\n\nimport env from 'env';\nimport { useForm } from 'react-hook-form';\nimport { yupResolver } from '@hookform/resolvers/yup';\nimport * as yup from 'yup';\nimport { ServerErrors } from '@site/_helpers';\nimport { promoStyle } from './promoStyle';\nimport { fetchPost } from '@lib/net-api/fetch';\n\nconst schema = yup.object().shape({});\n\nexport function PromoApplied({ cart, applyPromoCode }) {\n const defaultValues = {};\n\n const {\n formState: { isSubmitting },\n handleSubmit,\n reset,\n } = useForm({ defaultValues, resolver: yupResolver(schema) });\n const [serverErrors, setServerErrors] = React.useState([]);\n\n async function onSubmit(model) {\n try {\n const value = { ...model, cartId: env.getDevCartId() };\n const res = await fetchPost(env.apiBase + '/api/cart/removePromoCode', value);\n\n const cart = res.results.cartModel;\n // console.log(cart);\n reset(defaultValues);\n applyPromoCode(cart);\n } catch (e) {\n reset(model);\n setServerErrors(e);\n }\n }\n\n if (!(cart.promoInfo && cart.promoInfo.promoCode)) return null;\n\n // console.log(isValid, dirtyFields, isSubmitting, errors);\n return (\n
\n
\n
\n
\n
\n Promo {cart.promoInfo.promoCode}({cart.promoInfo.promoDesc}) has been applied.\n
\n
\n \n
\n
\n \n
\n
\n
\n );\n}\n","/** @jsx jsx */\nimport { jsx } from '@emotion/core';\nimport style from './orderItemStyle';\nimport React from 'react';\n\nimport { Button, ErrorMessage } from '../../../components';\nimport utils from '../../../utils';\n\nimport { CartSummary } from '../cartSummary/summary';\nimport { PromoForm } from './promoCodeForm';\nimport { PromoApplied } from './promoApplied';\n\nexport function OrderItems({ cart, form, moveNext, post, remove, applyPromoCode }) {\n //const model = form.model;\n const items = form.findControl('items').controls;\n // const render = (name, parent = null) => form.renderControl(name, parent);\n\n function itemAmount(item, orderItem) {\n const val = item.getValue();\n return (val.quantity * (orderItem.unitPrice * 100)) / 100;\n }\n\n const next = (e) => {\n form.validateForm(e, () => {\n moveNext();\n });\n };\n\n function ItemVariantSummary({ orderItem }) {\n if (!orderItem.variantOptionsSerialised) return null;\n const options = JSON.parse(orderItem.variantOptionsSerialised);\n return (\n
\n {options\n .map((x) => (\n \n {x.Name}:\n {x.Value}\n \n ))\n .reduce(\n (acc, x) =>\n acc === null ? (\n x\n ) : (\n \n {acc}, {x}\n \n ),\n null\n )}\n
\n );\n }\n\n function sum(array) {\n if (array.length === 0) return 0;\n return array.reduce((p, c) => p + c);\n }\n\n function DiscountAmountDisplay(amount, discountedAmount) {\n return (\n
\n
\n {utils.money.formatMoney(discountedAmount)}\n
\n
\n {utils.money.formatMoney(amount)}\n
\n
\n );\n }\n function DiscountedAmount(type, orderItemId, amount) {\n if (cart.promoInfo && cart.promoInfo.promoCode) {\n if (type === 'gst') {\n const totalGst = sum(cart.promoInfo.promoItems.map((x) => x.discountTaxAmount));\n if (totalGst) {\n return DiscountAmountDisplay(amount, amount - totalGst);\n }\n } else {\n const found = cart.promoInfo.promoItems.find((x) => x.orderItemId === orderItemId);\n if (found) {\n return DiscountAmountDisplay(amount, amount - found.discountItemAmount);\n }\n }\n }\n return {utils.money.formatMoney(amount)};\n }\n\n const orderItems = cart.orderItems.filter((x) => x.orderItemType === 0);\n const taxLines = cart.orderItems.filter((x) => x.orderItemType === 1);\n\n return (\n
\n
\n
\n
\n {orderItems.map((orderItem, index) => (\n
\n
\n {/*
\n \"immmm\"\n
*/}\n\n
\n \n \n \n
\n\n {/*
Qty: {render('quantity', items[index])}
*/}\n\n
\n {DiscountedAmount('sku', orderItem.orderItemId, itemAmount(items[index], orderItem))}\n remove(e, index)}\n status={form.status}\n >\n Remove\n \n
\n
\n
\n ))}\n {taxLines.map((orderItem, index) => (\n
\n
\n
\n
Tax: {orderItem.itemName}
\n
\n
\n {DiscountedAmount(\n orderItem.itemName === 'GST' ? 'gst' : '',\n orderItem.orderItemId,\n orderItem.unitPrice\n )}\n
\n
\n
\n ))}\n
\n \n \n
\n
\n \n
\n
\n \n \n
\n
\n
\n );\n}\n\nfunction ItemExt({ orderItem }) {\n // console.log(orderItem.ext);\n const ext = orderItem?.ext;\n if (!ext) return '';\n const desc = ext.itemName;\n if (ext.itemType === 'guide')\n return
;\n else if (ext.itemType === 'event')\n return (\n ') }}\n >\n );\n else if (ext.itemName)\n return
;\n\n return '';\n}\n","import { fb } from '../../../form';\n\nexport function getOrderItemFormData(cart) {\n const model = fb.group({\n items: fb.array([]),\n });\n\n const itemArray = model.find('items').controls;\n (cart.orderItems || []).forEach(item => {\n itemArray.push(orderItemData(item))\n })\n return model;\n}\n\n\nexport function orderItemData(item) {\n return fb.group({\n quantity: [item.quantity || '', [], { label: null, type: 'number' }]\n })\n}\n\n// addedUnitPrice: 0\n// discountUnitPrice: 0\n// extSerialized: null\n// itemDesc: \"\"\n// itemDescHtml: \"\"\n// itemName: \"Donation\"\n// orderItemDescriptions: []\n// orderItemId: \"031283cd-dbf2-4d62-aaf7-4134231f27a6\"\n// orderItemOptions: []\n// productCode: \"Donation\"\n// productId: \"dbdc9aad-16ab-47a0-97c7-ac2c13cf01a6\"\n// quantity: 1\n// shippingFeeType: 1\n// shppingFee: 0\n// subTitle: null\n// taxType: 2\n// thumbnailUrl: null\n// unitPrice: 0","import React from 'react';\nimport { useAuth } from 'auth';\n\nimport { useForm } from 'react-hook-form';\nimport { yupResolver } from '@hookform/resolvers/yup';\nimport * as yup from 'yup';\nimport { FieldError, ServerErrors } from '@site/_helpers';\n\nconst schema = yup.object().shape({\n email: yup.string().required('Email is required.'),\n password: yup.string().required('Password is required.').min(6, 'Password is too short - should be 6 chars minimum.'),\n});\n\nexport function LoginForm(props) {\n const auth = useAuth();\n\n const {\n formState: { isSubmitting, errors },\n register,\n handleSubmit,\n reset,\n } = useForm({ resolver: yupResolver(schema) });\n const [serverErrors, setServerErrors] = React.useState([]);\n\n async function onSubmit(model) {\n try {\n await auth.signin(model.email, model.password);\n } catch (e) {\n reset(model);\n setServerErrors(e);\n }\n }\n\n // console.log(isValid, dirtyFields, isSubmitting, errors);\n return (\n
\n
\n
\n \n \n \n
\n
\n \n \n \n
\n
\n \n
\n\n \n \n
\n );\n}\n","import React from 'react';\nimport { useAuth } from 'auth';\n\nimport { useForm } from 'react-hook-form';\nimport { yupResolver } from '@hookform/resolvers/yup';\nimport * as yup from 'yup';\nimport { FieldError, ServerErrors } from '@site/_helpers';\n\nconst schema = yup.object().shape({\n email: yup.string().required('Email is required.'),\n password: yup.string().required('Password is required.').min(6, 'Password is too short - should be 6 chars minimum.'),\n});\n\nexport function CreateAccountForm(props) {\n const auth = useAuth();\n\n const {\n formState: { isSubmitting, errors },\n register,\n handleSubmit,\n reset,\n } = useForm({ resolver: yupResolver(schema) });\n const [serverErrors, setServerErrors] = React.useState([]);\n\n async function onSubmit(model) {\n try {\n await auth.signup(model.email, model.password);\n } catch (e) {\n reset(model);\n setServerErrors(e);\n }\n }\n\n // console.log(isValid, dirtyFields, isSubmitting, errors);\n return (\n
\n
\n
\n \n \n \n
\n
\n \n \n \n
\n
\n \n
\n\n \n \n
\n );\n}\n","import React from 'react';\n\nimport { useForm } from 'react-hook-form';\nimport { yupResolver } from '@hookform/resolvers/yup';\nimport * as yup from 'yup';\nimport { FieldError, ServerErrors } from '@site/_helpers';\n\nconst schema = yup.object().shape({\n email: yup.string().nullable().required('Email is required.'),\n firstName: yup.string().nullable().required('First Name is required.'),\n surname: yup.string().nullable().required('Surname is required.'),\n phone: yup.string().nullable(),\n});\n\nexport function DetailsForm({ cart, saveShipping }) {\n // console.log(cart.billingAddress);\n const defaultValues = cart.billingAddress;\n\n const {\n formState: { isSubmitting, errors },\n register,\n handleSubmit,\n reset,\n } = useForm({ defaultValues, resolver: yupResolver(schema) });\n const [serverErrors, setServerErrors] = React.useState([]);\n\n async function onSubmit(model) {\n try {\n await saveShipping({ billingInfo: model, useSameAddress: true });\n } catch (e) {\n reset(model);\n setServerErrors(e);\n }\n }\n\n // console.log(isValid, dirtyFields, isSubmitting, errors);\n return (\n
\n

BILLING INFORMATION

\n
\n
\n
\n
\n \n \n \n
\n
\n
\n
\n \n \n \n
\n
\n
\n
\n
\n
\n \n \n \n
\n
\n
\n
\n \n \n \n
\n
\n
\n\n
\n \n
\n\n \n \n
\n );\n}\n","/** @jsx jsx */\nimport { jsx } from '@emotion/core';\nimport { SiteLink } from 'components';\nimport { CartSummary } from '../cartSummary/summary';\nimport { useAuth } from 'auth';\nimport { LoginForm } from 'auth/controls/login/loginForm';\nimport { CreateAccountForm } from 'auth/controls/createAccount/createAccountForm';\nimport { DetailsForm } from './detailsForm';\n\nexport function Shipping({ cart, saveShipping, post }) {\n const auth = useAuth();\n const needLogin = hasGuideInOrder(cart) && !auth.user;\n\n return (\n
\n
\n
\n {needLogin ? (\n
\n

\n Create your account first to continue. If you already have an account, please login instead.\n

\n
\n
\n
\n

CREATE ACCOUNT

\n \n
\n
\n
\n
\n

LOG IN

\n \n
\n Forgot Password?\n
\n
\n
\n
\n
\n ) : (\n
\n \n
\n )}\n
\n\n
\n \n
\n
\n
\n );\n}\n\nfunction hasGuideInOrder(cart) {\n return cart.orderItems.some((x) => x.ext?.itemType === 'guide');\n}\n","import { mq } from \"../../../cssInJs\";\n\nexport default {\n pay: {\n 'h3': {\n marginTop: 0\n }\n },\n stripeWrapper: {\n margin: '1rem 0 1rem',\n maxWidth: 500,\n padding: '1rem',\n backgroundColor: '#999999'\n },\n formActions: {\n marginTop: '2rem'\n },\n paymentInfoText : mq({\n fontSize: ['0.6rem', '0.5rem'],\n marginTop: '1rem',\n '.contact-link' : {\n color: 'white'\n }\n })\n}","/** @jsx jsx */\nimport { jsx } from '@emotion/core'\nimport style from './payStyle';\nimport React from 'react';\n\nimport { SiteLink, usePost } from '../../../components';\nimport { Button, ErrorMessage } from '../../../components';\nimport env from '../../../env';\nimport { useRouter } from '../../../components';\nimport { initStripe } from './payStripe';\n\nimport { CartSummary } from '../cartSummary/summary';\n\nexport function Pay({ cart, model, form, payStripe }) {\n\n const [stripe, setStripe] = React.useState(null);\n const [card, setCard] = React.useState(null);\n const [error, setError] = React.useState(null);\n\n const post = usePost();\n const { Redirect } = useRouter()\n\n React.useEffect(() => {\n const { stripe, card } = initStripe(setError)\n setStripe(stripe);\n setCard(card);\n }, [])\n\n function payNow() {\n if (error) return;\n stripe.createToken(card).then(function (result) {\n if (result.error) {\n setError(result.error.message);\n } else {\n setError(null);\n // Send the token to your server.\n onSubmit(result.token.id);\n }\n });\n }\n\n function onSubmit(tokenId) {\n console.log(tokenId)\n post.send(env.apiBase + \"/api/cart/payStripe\", { tokenId: tokenId, itemTotalAmount: cart.itemTotalAmount, cartId: env.getDevCartId() });\n }\n\n if (post.done()) {\n env.setDevCartId(null);\n return \n }\n\n return
\n
\n
\n

Pay by Credit Card

\n\n
\n
\n
\n
\n
\n Payment through encrypted gateway can be made by Visa, Mastercard or AMEX. Please enter your credit card details to complete your order. \n For alternative payment methods please contact us \n
\n
\n\n
\n\n
\n \n
\n
\n
\n \n \n \n
\n
\n}\n","import env from '../../../env';\n\nexport function initStripe(setError) {\n // Create a Stripe client.\n const stripe = window.Stripe(env.stripeKey);\n\n\n // Create an instance of Elements.\n const elements = stripe.elements();\n\n // Custom styling can be passed to options when creating an Element.\n // (Note that this demo uses a wider set of styles than the guide below.)\n const elStyle = {\n base: {\n color: '#32325d',\n fontFamily: '\"Helvetica Neue\", Helvetica, sans-serif',\n fontSmoothing: 'antialiased',\n fontSize: '18px',\n '::placeholder': {\n //color: '#aab7c4'\n color: '#000000'\n }\n },\n invalid: {\n color: '#fa755a',\n iconColor: '#fa755a'\n }\n };\n\n // Create an instance of the card Element.\n const card = elements.create('card', { style: elStyle });\n\n // Add an instance of the card Element into the `card-element`
.\n card.mount('#card-element');\n\n // Handle real-time validation errors from the card Element.\n card.addEventListener('change', function (event) {\n if (event.error) {\n setError(event.error.message);\n } else {\n setError(null);\n }\n });\n\n return { stripe, card };\n}","/** @jsx jsx */\nimport { jsx } from '@emotion/core';\nimport style from './cartStyle';\nimport React from 'react';\nimport { useStore } from 'store';\n\n//import { SiteLink } from '../../../components';\n\nimport env from '../../../env';\nimport { useGet, usePost } from '../../../components';\nimport { useForm } from '../../../form';\nimport { Loading, ErrorPopup } from '../../../components';\n\nimport { useStep } from './useStep';\nimport { StepNav } from '../cartStep/stepNav';\n\nimport { OrderItems } from '../cartOrderItems/orderItems';\nimport { getOrderItemFormData } from '../cartOrderItems/orderItemFormData';\nimport { Shipping } from '../cartShipping/shipping';\n// import { getShippingFormData } from '../cartShipping/shippingFormData';\nimport { Pay } from '../cartPayment/pay';\nimport utils from '../../../utils';\n\nexport function Cart() {\n const [sendingStatus, setSendingStatus] = React.useState(null);\n const [cart, setCart] = React.useState(null);\n\n const get = useGet();\n\n React.useEffect(() => {\n get.send(env.apiBase + '/api/cart/getCart/' + env.getDevCartId());\n setSendingStatus('pending');\n // eslint-disable-next-line\n }, []);\n\n if (get.loading()) {\n return ;\n } else if (get.hasErrors()) {\n return ;\n }\n\n if (sendingStatus === 'pending') {\n setCart(get.response);\n setSendingStatus(null);\n }\n\n if (!cart || cart.cartInfo.totalQuantity === 0) {\n return ;\n }\n return ;\n}\n\nfunction CartView({ cart, setCart }) {\n const { dispatch } = useStore();\n const [sendingStatus, setSendingStatus] = React.useState(null);\n const [goNext, setGoNext] = React.useState(false);\n const post = usePost();\n const stepInfo = useStep([\n { id: 'orderItems', title: '1. Cart' },\n { id: 'shipping', title: '2. Your Details' },\n { id: 'payment', title: '3. Pay' },\n ]);\n const { steps, currentStep, lastStep, moveNext, markAsFilled } = stepInfo;\n\n const orderItemForm = useForm(getOrderItemFormData(cart), { onControlChanged: orderItemChanged });\n // const shippingForm = useForm(getShippingFormData(cart), { onControlChanged: orderItemChanged });\n\n function orderItemChanged(e, control) {\n // if (control && control.name === 'quantity') {\n // const index = orderItemForm.findControl('items').findIndexById(control.parent.id);\n // const orderItem = cart.orderItems[index];\n // const value = { qty: control.value, orderItemId: orderItem.orderItemId, cartId: env.getDevCartId() };\n // post.send(env.apiBase + '/api/cart/updateQty', value);\n // setSendingStatus('pending');\n // setGoNext(false);\n // } else if (control && (control.name === 'shippingMethod' || control.name === 'shippingCountry')) {\n // shippingForm.findControl('useSameAddress').value = false;\n // if (control.value === 'Standard') {\n // shippingForm.findControl('useSameAddress').value = true;\n // }\n // const value = { ...shippingForm.getValue(), cartId: env.getDevCartId() };\n // post.send(env.apiBase + '/api/cart/saveShippingInfo', value);\n // setSendingStatus('pending');\n // setGoNext(false);\n // }\n }\n\n function remove(e, index) {\n console.log(index);\n const orderItem = cart.orderItems[index];\n const value = { orderItemId: orderItem.orderItemId, cartId: env.getDevCartId() };\n post.send(env.apiBase + '/api/cart/removeItem', value);\n setSendingStatus('pending');\n setGoNext(false);\n }\n\n function saveShipping(model) {\n const value = { ...model, cartId: env.getDevCartId() };\n post.send(env.apiBase + '/api/cart/saveShippingInfo', value);\n setSendingStatus('pending');\n setGoNext(true);\n }\n\n function applyPromoCode(cart) {\n setCart(cart);\n }\n\n React.useEffect(() => {\n if (post.done() && sendingStatus === 'pending') {\n const cart = post.response.results.cartModel;\n setSendingStatus(null);\n setCart(cart);\n if (goNext) {\n markAsFilled(currentStep);\n moveNext();\n }\n\n dispatch({\n type: 'SET_CART',\n payload: post.response.results.cartInfo,\n });\n }\n // eslint-disable-next-line\n }, [post, currentStep, dispatch]);\n\n const stepStyle = (index) => {\n const locStyle =\n index === currentStep\n ? style.stepCurrent\n : index === currentStep - 1\n ? style.stepPrev\n : index === currentStep + 1\n ? style.stepNext\n : style.step;\n const movingStyle = index === lastStep ? style.stepLast : null;\n return [locStyle, movingStyle];\n };\n\n const next = () => {\n markAsFilled(currentStep);\n moveNext();\n utils.ui.scrollTo('#ecmcart');\n };\n\n return (\n
\n
\n \n
\n {steps.map((step, index) => {\n let stepView = null;\n switch (step.id) {\n case 'orderItems':\n stepView = (\n \n );\n break;\n case 'shipping':\n stepView = ;\n break;\n case 'payment':\n stepView = ;\n break;\n default:\n break;\n }\n return (\n
\n {stepView}\n
\n );\n })}\n
\n
\n
\n );\n}\n\nfunction EmptyCart() {\n return (\n
\n
\n

Your cart is empty.

\n
\n
\n );\n}\n","import React from 'react';\n\nexport function useStep(initialSteps){\n const [steps, setSteps] = React.useState(initialSteps);\n const [currentStep, setCurrentStep] = React.useState(0);\n const [lastStep, setLastStep] = React.useState(0);\n\n const moveNext = () => {\n moveTo(currentStep < steps.length ? currentStep + 1 : currentStep)\n }\n\n const movePrev = () => {\n moveTo(currentStep > 0 ? currentStep - 1 : 0)\n }\n\n const moveTo = (index) => {\n if (!canGo(index)) return\n setLastStep(currentStep)\n setCurrentStep(index)\n // if (!utils.ui.isElementInViewport(navEl.current)) {\n // utils.ui.scrollTo(navEl.current)\n // }\n }\n\n const markAsFilled = (index) => {\n if (!steps[index]) return;\n steps[index].filled = true;\n setSteps(steps);\n }\n \n function canGo(index) {\n if (steps[index] && steps[index].filled) return true;\n const maxIndexFilled = Math.max(...steps.map((x, i) => x.filled ? i : -1));\n return index <= maxIndexFilled + 1\n }\n\n function canGoNext() {\n return currentStep < steps.length && canGo(currentStep + 1)\n }\n\n function canGoPrev() {\n return currentStep > 0 && canGo(currentStep - 1)\n }\n\n return { steps, setSteps, currentStep, lastStep, moveTo, moveNext, movePrev, markAsFilled, canGo, canGoNext, canGoPrev}\n}","import React from 'react';\nimport cmsUtils from '../../utils/cmsUtils';\nimport utils from '../../../utils';\nimport { ProductItems } from '../../../site/ecm/productList/productItems';\nimport { OrderDetails } from 'site/ecm/orderDetails/orderDetails';\nimport { Cart } from '../../../site/ecm/cart/cart';\n\nexport function EcmItems(props) {\n const item = props.item;\n const cmsOption = props.cmsOption || {};\n\n console.log('item', item);\n\n const cssClass = utils.classNames('cms_item', 'ecm', item.cssClass || item.anchorName || '');\n\n return cmsOption.isCmsEdit ? (\n \n Type: {item?.itemTypeCode}\n \n ) : (\n
\n \n
\n );\n}\n\nfunction ItemBranch({ item }) {\n const typeCode = item?.itemTypeCode;\n\n if (typeCode === 'Ecm-ShoppingCart') {\n return ;\n } else if (typeCode === 'Ecm-OrderDetails') {\n return ;\n } else if (typeCode === 'Ecm-ProductList') {\n const categories = cmsUtils.payload(item, 'SelectedCategories');\n return ;\n }\n return
;\n}\n","import React from 'react';\nimport utils from '../../utils';\nimport { items } from '../../site/_cmsItems/items-generated';\nimport cmsUtils from '../utils/cmsUtils';\nimport { BannerPanel } from './bannerPanel/view';\nimport { BannerItem } from './bannerItem/view';\nimport { Panel } from './panel/view';\nimport { Html } from './html/view';\n// import { TestimonialPanel } from './testimonialPanel/view';\n// import { TestimonialItem } from './testimonialItem/view';\nimport { ImagePanel } from './imagePanel/view';\n//import { PageTiles } from './pageTiles/view';\nimport { PageTiles } from '../../site/_cmsItems/pageTiles/view/pageTiles';\nimport { PageTilesBsyc } from '../../components/tiles/bsyc/view';\nimport { SingleBanner } from './singleBanner/view';\nimport { ContactForm } from './contactForm/view';\nimport { VideoPanel } from './VideoPanel/view';\nimport { Code } from './code/view';\nimport { BlogPosts } from './blogPosts/view';\nimport { BlogPostTitle } from './blogPostTitle/view';\nimport { VideoHolder } from './videoHolder/view';\nimport { VideoItem } from './videoItem/view';\nimport { MultiColumnPanel } from './multiColumnPanel/view';\nimport { ExpandableHtml } from './expandableHtml/view';\nimport { PhotoGallery } from '../../components/photoGallery/view';\nimport { TestimonialPanel } from '../../components/testimonial/index';\nimport { ExpandablePanel } from '../../components/expandablePanel/view';\nimport { EcmItems } from './ecm/view';\n\n//import { PrintShare } from './printShare/view';\n\nexport function Item(props) {\n const item = props.item;\n const cmsOption = props.cmsOption || {};\n\n //console.log('item', item, cmsOption);\n\n let itemElt = null;\n\n const found = utils.array.find(items, (x) => x.match(item, cmsOption));\n //console.log(found)\n if (found) {\n return found.itemElt(item, cmsOption);\n }\n if (item.itemTypeCode.indexOf('Ecm-') === 0) {\n itemElt = ;\n } else if (item.itemTypeCode === 'Panel') {\n itemElt = ;\n } else if (item.itemTypeCode === 'Html') {\n itemElt = ;\n } else if (item.itemTypeCode === 'BannerPanel') {\n itemElt = ;\n } else if (item.itemTypeCode === 'BannerItem') {\n itemElt = ;\n } else if (item.itemTypeCode === 'TestimonialPanel') {\n const setting = {\n startRatingColor: '#2b707d',\n };\n itemElt = ;\n } else if (item.itemTypeCode === 'ImagePanel') {\n itemElt = ;\n } else if (item.itemTypeCode === 'PageTiles') {\n let _tileType = cmsUtils.payload(item, 'TileType');\n const tileType = _tileType && _tileType !== '' ? _tileType : '1';\n if (tileType === '2') {\n itemElt = ;\n } else {\n itemElt = ;\n }\n } else if (item.itemTypeCode === 'SingleBanner') {\n itemElt = ;\n } else if (item.itemTypeCode === 'ContactForm') {\n itemElt = ;\n } else if (item.itemTypeCode === 'VideoPanel') {\n itemElt = ;\n } else if (item.itemTypeCode === 'Code') {\n itemElt = ;\n } else if (item.itemTypeCode === 'Blog-Posts') {\n itemElt = ;\n } else if (item.itemTypeCode === 'Blog-PostTitle') {\n itemElt = ;\n } else if (item.itemTypeCode === 'MultiColumnPanel') {\n itemElt = ;\n } else if (item.itemTypeCode === 'ExpandableHtml') {\n itemElt = ;\n } else if (item.itemTypeCode === 'VideoHolder') {\n itemElt = ;\n } else if (item.itemTypeCode === 'VideoItem') {\n itemElt = ;\n } else if (item.itemTypeCode === 'PhotoGallery') {\n itemElt = ;\n } else if (item.itemTypeCode === 'ExpandablePanel') {\n itemElt = ;\n } else {\n itemElt =
{item.itemTypeCode}
;\n }\n\n // const subItemsElts = subItems.map((subItem, index) =>\n // \n // );\n return itemElt;\n}\n","import React, { useState, useEffect } from 'react';\nimport { useRouter } from '../../../components';\nimport { useGet } from '../../../components';\nimport { Item } from '../../items/item';\nimport { NotFound } from '../../../components';\nimport { NoPermission } from 'components/notFound/noPermission';\nimport env from '../../../env';\nimport { useStore } from '../../../store';\nimport { ErrorPopup, Loading } from '../../../components';\nimport { useInstagram } from '../../../components';\nimport { MetaTag } from '../../../components';\nimport cmsUtils from '../../utils/cmsUtils';\nimport utils from '../../../utils';\nimport { gtm } from '../../../lib/tracking';\n\nconst log = (...args) => {\n // console.log(args);\n};\nconst areEqual = (prevProps, nextProps) => {\n return prevProps.pageData === nextProps.pageData;\n};\nconst PageMemo = React.memo(Page, areEqual);\n\nexport function ViewPage() {\n const { dispatch } = useStore();\n const [pageLoaded, setPageLoaded] = useState(false);\n const [data, setData] = useState(null);\n //const path = usePath();\n //log('view page', path);\n const { pathname, Redirect } = useRouter();\n useInstagram();\n\n const get = useGet();\n log('0. viewpage ready');\n\n useEffect(() => {\n log('*. start loading');\n setPageLoaded(false);\n get.send(env.apiBase + '/api/cms/GetPublishedPage?path=' + pathname);\n // eslint-disable-next-line\n }, [pathname]);\n\n useEffect(() => {\n if (data) {\n dispatch({ type: 'SET_PAGE', payload: data.data });\n dispatch({ type: 'SET_MENU', payload: data.menu });\n }\n // eslint-disable-next-line\n }, [data]);\n\n if (get.loading()) {\n return ;\n } else if (get.hasErrors()) {\n return ;\n }\n\n //log(router.pathname);\n //log(get.loading());\n log('1. viewpage component', pageLoaded, get.response);\n\n const pageData = get.response.data;\n //const menuData = get.response.menu;\n const redirectTo = get.response.redirectTo;\n const noPermission = get.response.noPermission;\n\n const cmsOption = { requestPath: pathname };\n log(pageLoaded, !pageLoaded && !!pageData);\n if (!pageLoaded && pageData) {\n //log(pageLoaded, pageData, menuData)\n log('2. dispatching page & menu');\n setPageLoaded(true);\n setData(get.response);\n document.title = pageData.pageTitle;\n gtm.pageView(pathname, pageData.pageTitle);\n return null;\n } else if (redirectTo) {\n if (redirectTo.indexOf('http') >= 0 && typeof window !== `undefined`) {\n return (window.location.href = redirectTo);\n } else {\n return ;\n }\n } else if (!pageLoaded && noPermission) {\n setPageLoaded(true);\n setData(get.response);\n return ;\n } else if (!pageLoaded && !pageData) {\n setPageLoaded(true);\n setData(get.response);\n return ;\n }\n\n log('3. call rendering memo');\n if (pageData) return ;\n else if (noPermission) return ;\n else return ;\n}\n\nfunction Page(props) {\n const pageData = props.pageData;\n const cmsOption = props.cmsOption;\n const pathname = props.pathname;\n cmsOption.pageData = pageData;\n // document.title = pageData.pageTitle;\n log('4. page rendering', pageData, cmsOption);\n const sectionItems = pageData.sections.map((section, index) => {\n return
;\n });\n return (\n <>\n \n
{sectionItems}
\n \n );\n}\n\nfunction Section(props) {\n log('5. section rendering');\n const item = props.item;\n //const sectionName = item.sectionName;\n const subItems = item.items || [];\n const cmsOption = props.cmsOption || {};\n if (!subItems || subItems.length === 0) return <>;\n\n const subItemsElts = subItems.map((subItem, index) => (\n \n ));\n return <>{subItemsElts};\n}\n\nfunction getMetaTag(pageData) {\n //const country = utils.site.isNZ? 'New Zealand' : 'Australia'\n const country = 'Australia';\n const siteName = env.siteName;\n const titleSuffix = env.titleSuffix;\n\n return {\n title: pageData.pageTitle + ' | ' + titleSuffix,\n description: cmsUtils.payload(pageData, 'Description'),\n keywords: cmsUtils.payload(pageData, 'Keyword'),\n heroImageUrl: utils.site.fullUrl(cmsUtils.payload(pageData, 'ImageUrl')),\n language: 'English',\n country: country,\n siteName: siteName,\n url: utils.site.fullUrl(pageData.pageUrl),\n //canonical: utils.site.resourcePath(pageData.pageUrl)\n };\n}\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'\n\nexport class CmsRadioSender {\n controller;//: CmsPageController;\n constructor(controller) {\n this.controller = controller;\n }\n\n sendMessageToParent(action: string, data: any) {\n var cloned = JSON.parse(JSON.stringify(data));\n if (typeof window !== `undefined`) {\n window.parent.postMessage({\n action: action,\n data: cloned\n }, \"*\");\n }\n }\n\n saveAllDirtyHtml(htmlChanges) {\n // skip another unneccesary round trip\n this.sendMessageToParent('return-all-dirty-html', {\n returnTo: '_saveAllDirtyHtml',\n htmlChanges: htmlChanges\n });\n }\n\n selectControllerItem(data) {\n this.sendMessageToParent(\"select-controller-item\", data);\n }\n\n returnAllDirtyHtml(returnTo, htmlChanges) {\n this.sendMessageToParent('return-all-dirty-html', {\n returnTo: returnTo,\n htmlChanges: htmlChanges\n });\n }\n\n returnHtml(id, html) {\n this.sendMessageToParent('return-html', {\n id: id,\n html: html\n });\n }\n\n markDirtyHtml(id) {\n this.sendMessageToParent(\"mark-dirty-html-item\", { id: id });\n }\n}\n","//declare var CKEDITOR: any;\n//import { CmsPageController } from './cms-page-controller'\n\nexport class CmsRadioReceiver {\n controller;//: CmsPageController;\n constructor(controller) {\n this.controller = controller;\n this.init();\n }\n\n init() {\n if (typeof window !== `undefined`) {\n var self = this;\n window.addEventListener(\"message\", function (e) {\n\n var action = e.data.action;\n var data = e.data.data;\n\n // console.log(e, \"cms-action-received: \" + action, data);\n\n if (action === 'select-item') {\n self.selectItem(data.itemId)\n } else if (action === 'media-selected-ckeditor') {\n self.mediaSelectedCKEditor(data)\n } else if (action === 'get-all-dirty-html') {\n var htmlChanges = self.controller.getAllDirtyHtml();\n self.controller.sender.returnAllDirtyHtml(data.returnTo, htmlChanges);\n } else if (action === 'get-html') {\n var html = self.controller.getHtml(data.id);\n self.controller.sender.returnHtml(data.id, html);\n } else if (action === 'page-reload') {\n window.location.reload();\n }\n }, false);\n }\n }\n\n mediaSelectedCKEditor(data) {\n const CKEDITOR = window['CKEDITOR'] || {};\n CKEDITOR.tools.callFunction(data.funcNum, data.selectedPath);\n }\n\n selectItem(itemId) {\n this.controller.selectItemFromController(itemId);\n }\n}\n","import { CmsRadioSender } from './cms-radio-sender'\n// //import * as $ from 'jquery';\n// declare var CKEDITOR: any;\n// import * as $ from 'jquery';\n\nexport class CmsHtmlEditor {\n ckeditorConfig;\n ckeditorStylesSet;\n sender;\n constructor(cmsEndpoint: string, sender: CmsRadioSender) {\n this.ckeditorConfig = {\n startupFocus: true,\n filebrowserBrowseUrl: cmsEndpoint + '/cms41helper/browse/selectpageormedia', //'/cms/browse',//'/cms/resource/selectfileckeditor',\n filebrowserImageBrowseUrl: cmsEndpoint + '/cms41helper/browse/selectmedia', //'/cms/browse?type=rc',//'/cms/resource/selectfileckeditor?type=Images',\n extraPlugins: 'sourcedialog,youtubejaba,lineutils,widget,embedjaba,image2',\n toolbar: [{\n name: 'basicstyles',\n groups: ['basicstyles', 'cleanup'],\n items: ['Bold', 'Italic', 'Underline', 'Strike', 'Subscript', 'Superscript', '-', 'RemoveFormat']\n },\n {\n name: 'paragraph',\n groups: ['list', 'align'],\n items: ['NumberedList', 'BulletedList', '-', 'JustifyLeft', 'JustifyCenter', 'JustifyRight',\n 'JustifyBlock'\n ]\n },\n {\n name: 'links',\n items: ['Link', 'Unlink', 'Anchor']\n },\n {\n name: 'insert',\n items: ['Image', 'Table', 'HorizontalRule', 'PageBreak', 'Iframe', 'Youtube', 'EmbedJaba']\n },\n '/',\n {\n name: 'document',\n groups: ['mode'],\n items: ['Sourcedialog']\n },\n {\n name: 'clipboard',\n groups: ['clipboard', 'undo'],\n items: ['Cut', 'Copy', 'Paste', 'PasteText', 'PasteFromWord', '-', 'Undo', 'Redo']\n },\n {\n name: 'styles',\n items: ['Styles', 'Format']\n },\n {\n name: 'colors',\n items: ['TextColor', 'BGColor']\n },\n {\n name: 'tools',\n items: ['Maximize', 'ShowBlocks']\n }\n ],\n extraAllowedContent: 'style;span;*[id,rel,data-*](*){*}'\n }\n\n this.ckeditorStylesSet = [\n /* Block Styles */\n\n // These styles are already available in the \"Format\" combo (\"format\" plugin),\n // so they are not needed here by default. You may enable them to avoid\n // placing the \"Format\" combo in the toolbar, maintaining the same features.\n /*\n { name: 'Paragraph',\t\telement: 'p' },\n { name: 'Heading 1',\t\telement: 'h1' },\n { name: 'Heading 2',\t\telement: 'h2' },\n { name: 'Heading 3',\t\telement: 'h3' },\n { name: 'Heading 4',\t\telement: 'h4' },\n { name: 'Heading 5',\t\telement: 'h5' },\n { name: 'Heading 6',\t\telement: 'h6' },\n { name: 'Preformatted Text',element: 'pre' },\n { name: 'Address',\t\t\telement: 'address' },\n */\n { name: 'Title', attributes: { 'class': 'title' } },\n // { name: 'Heading 3', element: 'h1', attributes: { 'class': 'h3' } },\n // { name: 'Super paragraph',\t\telement: 'p', attributes: { 'class': 'superparagraph' } },\n\n //{ name: 'Italic Title',\t\telement: 'h2', styles: { 'font-style': 'italic' } },\n //{ name: 'Subtitle',\t\t\telement: 'h3', styles: { 'color': '#aaa', 'font-style': 'italic' } },\n //{\n //\tname: 'Special Container',\n //\telement: 'div',\n //\tstyles: {\n //\t\tpadding: '5px 10px',\n //\t\tbackground: '#eee',\n //\t\tborder: '1px solid #ccc'\n //\t}\n //},\n\n /* Inline Styles */\n\n // These are core styles available as toolbar buttons. You may opt enabling\n // some of them in the Styles combo, removing them from the toolbar.\n // (This requires the \"stylescombo\" plugin)\n /*\n { name: 'Strong',\t\t\telement: 'strong', overrides: 'b' },\n { name: 'Emphasis',\t\t\telement: 'em'\t, overrides: 'i' },\n { name: 'Underline',\t\telement: 'u' },\n { name: 'Strikethrough',\telement: 'strike' },\n { name: 'Subscript',\t\telement: 'sub' },\n { name: 'Superscript',\t\telement: 'sup' },\n */\n\n //{ name: 'Marker',\t\t\telement: 'span', attributes: { 'class': 'marker' } },\n\n //{ name: 'Big',\t\t\t\telement: 'big' },\n //{ name: 'Small',\t\t\telement: 'small' },\n //{ name: 'Typewriter',\t\telement: 'tt' },\n\n //{ name: 'Computer Code',\telement: 'code' },\n //{ name: 'Keyboard Phrase',\telement: 'kbd' },\n //{ name: 'Sample Text',\t\telement: 'samp' },\n //{ name: 'Variable',\t\t\telement: 'var' },\n\n //{ name: 'Deleted Text',\t\telement: 'del' },\n //{ name: 'Inserted Text',\telement: 'ins' },\n\n //{ name: 'Cited Work',\t\telement: 'cite' },\n //{ name: 'Inline Quotation',\telement: 'q' },\n\n //{ name: 'Language: RTL',\telement: 'span', attributes: { 'dir': 'rtl' } },\n //{ name: 'Language: LTR',\telement: 'span', attributes: { 'dir': 'ltr' } },\n\n /* Object Styles */\n { name: 'Button', element: 'a', attributes: { 'class': 'button' } },\n { name: 'Primary Button', element: 'a', attributes: { 'class': 'p-button' } },\n { name: 'Secondary Button', element: 'a', attributes: { 'class': 's-button' } },\n { name: 'More link', element: 'a', attributes: { 'class': 'more' } }\n //{\n //\tname: 'Styled image (left)',\n //\telement: 'img',\n //\tattributes: { 'class': 'left' }\n //},\n\n //{\n //\tname: 'Styled image (right)',\n //\telement: 'img',\n //\tattributes: { 'class': 'right' }\n //},\n\n //{\n //\tname: 'Compact table',\n //\telement: 'table',\n //\tattributes: {\n //\t\tcellpadding: '5',\n //\t\tcellspacing: '0',\n //\t\tborder: '1',\n //\t\tbordercolor: '#ccc'\n //\t},\n //\tstyles: {\n //\t\t'border-collapse': 'collapse'\n //\t}\n //},\n\n //{ name: 'Borderless Table',\t\telement: 'table',\tstyles: { 'border-style': 'hidden', 'background-color': '#E6E6FA' } },\n //{ name: 'Square Bulleted List',\telement: 'ul',\t\tstyles: { 'list-style-type': 'square' } }\n ]\n\n this.sender = sender;\n }\n\n show($editor) {\n const CKEDITOR = window['CKEDITOR'] || {};\n //for ckeditor\n // console.log('ckeditor show');\n try {\n // We need to turn off the automatic editor creation first.\n CKEDITOR.disableAutoInline = true;\n } catch (e) { }\n\n var editor = CKEDITOR.inline('cmsCurrentEditor', this.ckeditorConfig);\n if (!CKEDITOR.stylesSet.get('default'))\n CKEDITOR.stylesSet.add('default', this.ckeditorStylesSet);\n\n var self = this;\n editor.on('change', function (evt) {\n // getData() returns CKEditor's HTML content.\n //$(\"#cmsCurrentEditor\").addClass(\"dirtyHtml\");\n //const itemId = $(\"#cmsCurrentEditor\").data('cms-item-id');\n const ed = document.querySelector('#cmsCurrentEditor');\n ed.classList.add('dirtyHtml');\n const itemId = ed.getAttribute('data-cms-item-id');\n\n //console.log(itemId);\n self.sender.markDirtyHtml(itemId);\n //console.log('Total bytes: ' + evt.editor.getData().length);\n });\n editor.on('paste', function (evt) {\n //console.log(evt.data.dataValue);\n //evt.data.dataValue = evt.data.dataValue.replace(/ /g, '');\n //evt.data.dataValue = evt.data.dataValue.replace(/

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

\").html(item.html());\n // if ($tmp.find('.cms-skeleton').length > 0)\n // return $tmp.find('.cms-skeleton').html();\n // else\n // return item.html();\n //tmp.find(\".cms_ctrl_in_editor\").each(function (inx, obj) {\n // var ctrlid = $(obj).attr(\"data-cms-ctrl-id\");\n // $(obj).replaceWith(\"__cms__ctrl:\" + ctrlid + \"__\");\n //});\n //return tmp.html();\n }\n\n}\n","import React, { useEffect } from 'react';\nimport { useRouter } from '../../../components';\nimport { useGet } from '../../../components';\nimport { Item } from '../../items/item';\nimport env from '../../../env';\nimport { loadJs } from '../../../lib/net-loader';\nimport { CmsPageController } from '../../services/cms-page-controller';\nimport { ErrorPopup, Loading } from '../../../components';\n\n// function useQuery() {\n// return new URLSearchParams(useLocation().search);\n// }\n\nexport function EditPage(props) {\n //const [page, setPage] = useState(null);\n\n //const pageId = props.pageId;\n const { query } = useRouter();\n const { cmsViewMode = 'edit', id, publishVer, editVer } = query;\n const pageId = id;\n\n //console.log(pageId, cmsViewMode, env.apiBase, env)\n\n const get = useGet();\n useEffect(() => {\n get.send(env.apiBase + '/api/cms/GetPage/' + pageId + '?cmsViewMode=' + cmsViewMode\n + (publishVer ? '&publishVer=' + publishVer : '')\n + (editVer ? '&editVer=' + editVer : '')\n );\n // eslint-disable-next-line\n }, [pageId]);\n\n if (get.loading()) {\n return \n } else if (get.hasErrors()) {\n return \n }\n\n //console.log(router.pathname);\n //console.log(res);\n\n const pageData = get.response.data;\n const cmsOption = { isCmsEdit: true, cmsViewMode: cmsViewMode };\n cmsOption.pageData = pageData;\n\n const cmsPageController = new CmsPageController();\n if (cmsViewMode !== 'viewonly') {\n const ver = 1;\n loadJs(\n env.resourceBase + '/dist/jquery-3.4.1/jquery.min.js?v=' + ver\n ).then(data => {\n return loadJs(\n env.resourceBase + '/dist/cms/ckeditor/ckeditor.js?v=' + ver\n )\n }).then(data => {\n // console.log('script loaded ', data);\n cmsPageController.init({});\n document.querySelector('body').classList.add('cmsedit');\n }).catch(error => console.log(error));\n } else {\n const ver = 1;\n loadJs(\n env.resourceBase + '/dist/jquery-3.4.1/jquery.min.js?v=' + ver\n ).then(data => {\n cmsOption.isCmsEdit = false;\n cmsPageController.init({ viewOnly: true });\n }).catch(error => console.log(error));\n }\n\n //setPage(res.response.data);\n const sectionItems = pageData.sections.map((section, index) =>\n
\n );\n return (\n
\n {sectionItems}\n
\n );\n}\n\n\nfunction Section(props) {\n const item = props.item;\n //const sectionName = item.sectionName;\n const subItems = item.items || [];\n const cmsOption = props.cmsOption || {};\n\n if (!subItems || subItems.length === 0)\n return (<>);\n\n const subItemsElts = subItems.map((subItem, index) =>\n \n );\n return (\n <>\n {subItemsElts}\n \n );\n}\n\n","/** @jsx jsx */\nimport { jsx } from '@emotion/core'\n\nimport { Link } from 'react-router-dom';\nimport { useAuth } from 'auth';\nimport { useRouter } from 'components';\n\nexport function MemberMenu({ onCloseMenu }) {\n const auth = useAuth();\n const router = useRouter();\n\n function signout(e) {\n e.preventDefault();\n e.stopPropagation();\n\n auth.signout().then(user => {\n router.push('/member/login')\n onCloseMenu();\n }).catch(error => {\n console.log(error)\n })\n }\n\n // const email = (auth.user && auth.user.email) || '';\n\n //if (router.path === '/member/login') return null;\n if (!auth.isResolved) return null;\n\n const s = getStyle()\n\n if (auth.user) {\n return
    \n
  • \n Dashboard\n
  • \n
  • \n signout(e)}>LOG OUT\n
  • \n
\n } else {\n return
    \n
  • \n LOG IN\n
  • \n
\n }\n}\n\nfunction getStyle() {\n return {\n memberLink: {\n color: '#b3ffa4 !important',\n }\n }\n}","import { useState, useEffect } from 'react';\nimport { useGet } from 'components';\nimport env from 'env';\nimport { useStore } from 'store';\n\nexport function CartLoader() {\n const { state, dispatch } = useStore();\n const [loadingStatus, setLoadingStatus] = useState('ready');\n const [data, setData] = useState(null);\n\n const get = useGet();\n\n useEffect(() => {\n if (loadingStatus !== 'ready') return;\n if (state && !state.menu) {\n setLoadingStatus('loading');\n get.send(env.apiBase + '/api/cart/getcart/' + env.getDevCartId());\n }\n // eslint-disable-next-line\n }, [state]);\n\n useEffect(() => {\n console.log(data);\n if (data) {\n dispatch({ type: 'SET_CART', payload: data.cartInfo });\n }\n // eslint-disable-next-line\n }, [data]);\n\n if (loadingStatus !== 'done' && get.done()) {\n setLoadingStatus('done');\n setData(get.response);\n }\n return null;\n}\n","import React from 'react';\nimport { useRouter } from '../../components';\n\nexport function SearchBar({onCloseMenu}) {\n const [keyword, setKeyword ] = React.useState('')\n const { navigate } = useRouter();\n function search(e) {\n e.preventDefault();\n onCloseMenu();\n navigate('/search-results?q=' + encodeURIComponent(keyword))\n }\n function onChange(e) {\n setKeyword(e.target.value);\n }\n return (\n
search(e)}>\n \n
);\n\n}\n","import React, { useState, useEffect } from 'react';\nimport { SiteLink } from '../../components';\nimport { useStore } from '../../store';\n\nimport { FaChevronDown } from 'react-icons/fa';\n\nimport { MemberMenu } from 'layout/memberMenu';\nimport { CartLoader } from 'layout/cartLoader';\nimport { SearchBar } from './searchBar';\n\nexport function NavBar(props) {\n const open = props.open;\n //const currentLocation = props.currentLocation;\n const { state } = useStore();\n\n const menu = state.menu || { items: [] };\n const currentLocation = state.history && state.history.length > 0 ? state.history[state.history.length - 1].path : '';\n const depth = 1;\n const menuItemElts = menu.items.map((item, index) => (\n \n ));\n return (\n
\n \n
\n \n
\n \n
\n );\n}\n\nfunction MenuItem(props) {\n const [subMenuOpened, setSubMenuOpened] = useState(false);\n const item = props.item;\n const subItems = item.items || [];\n const currentLocation = props.currentLocation;\n\n const subItemsElts =\n subItems.length > 0\n ? subItems.map((subItem, index) => )\n : null;\n\n useEffect(() => {\n //console.log('navbar', currentLocation);\n setSubMenuOpened(false);\n }, [currentLocation]);\n\n function closeMenu() {\n props.onCloseMenu();\n }\n\n function toggleSubmenu(e) {\n e.preventDefault();\n e.stopPropagation();\n setSubMenuOpened(!subMenuOpened);\n }\n\n return (\n
  • \n closeMenu()}>\n {item.title}\n {subItemsElts && (\n toggleSubmenu(e)}>\n \n \n )}\n \n {subItemsElts &&
      {subItemsElts}
    }\n
  • \n );\n}\n\nfunction SubMenuItem(props) {\n const item = props.item;\n function closeMenu() {\n props.onCloseMenu();\n }\n\n return (\n
  • \n closeMenu()}>\n {item.title}\n \n
  • \n );\n}\n\nfunction Cart({ onCloseMenu, state }) {\n const cartItemNo = state?.cartInfo?.numberOfItems || 0;\n return (\n
      \n
    • \n 0 ? '#ea8b2a' : '#2ab5ea' }}\n >\n CART\n ({cartItemNo})\n \n
    • \n
    \n );\n}\n","import { css } from '@emotion/core';\nimport { mq } from '../../cssInJs';\nexport default {\n button: css(mq({\n position: 'absolute',\n left: '1rem',\n lineHeight: '1.6rem',\n color: '#ddd',\n fontSize: ['12px', null, '15px']\n })),\n}","/** @jsx jsx */\nimport { jsx } from '@emotion/core';\nimport { SiteLink } from '../../components';\nimport { FaAngleLeft } from 'react-icons/fa';\nimport { useHistoryStore } from '../../components';\nimport style from './backButtonStyle';\n\nexport function BackButton(props) {\n\n const history = useHistoryStore();\n\n function goBack(e) {\n history.pop();\n }\n\n if (history.last()) {\n return (\n \n )\n } else {\n return null;\n }\n}","import { css } from '@emotion/core';\nimport { mq } from '../../cssInJs';\n\nconst rs = [\n { w: 44, h: 44, barW: 28, barH: 3, space: 8 },\n { w: 56, h: 56, barW: 44, barH: 3, space: 10 }\n]\n\nconst line = css(mq({\n width: [rs[0].barW, null, rs[1].barW],\n height: [rs[0].barH, null, rs[1].barH],\n borderRadius: '4px',\n position: 'absolute',\n transitionProperty: 'transform',\n backgroundColor: '#fff',\n display: 'block',\n transitionDuration: '0.15s',\n transitionDelay: '0.15s',\n transitionTimingFunction: 'cubic-bezier(0.55, 0.055, 0.675, 0.19)',\n}))\n\nexport default {\n button: css(mq({\n cursor: 'pointer',\n zIndex: '1000',\n position: 'fixed',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n transition: 'all 0.3s ease-in-out',\n padding: '0',\n //top: [0, null, 12],\n top: 0,\n width: [rs[0].w, null, rs[1].w],\n height: [rs[0].h, null, rs[1].h],\n right: [0, null, 20],\n background: 'black', //variables.primaryColor,\n border: 'none',\n outline: 'none',\n font: 'inherit',\n color: 'inherit',\n textTransform: 'none',\n '&:focus': {\n outline: 'none',\n }\n })),\n\n buttonScrolled: css(mq({\n top: [0, null, 0]\n })),\n\n hamburger: css(mq({\n width: [rs[0].barW, null, rs[1].barW],\n height: [rs[0].barH + rs[0].space * 2, null, rs[1].barH + rs[1].space * 2],\n position: 'relative',\n display: 'block',\n })),\n\n line1: css(mq(line, {\n top: 0,\n transition: 'top 0.3s 0.1s cubic-bezier(0.33333, 0.66667, 0.66667, 1), opacity 0.1s 0.1s linear',\n })),\n line2: css(mq(line, {\n transition: 'top 0.12s 0.3s cubic-bezier(0.33333, 0.66667, 0.66667, 1), transform 0.15s cubic-bezier(0.55, 0.055, 0.675, 0.19)',\n top: [rs[0].space, null, rs[1].space],\n })),\n line3: css(mq(line, {\n top: [rs[0].space * 2, null, rs[1].space * 2],\n })),\n\n lineActive1: css({\n opacity: '0',\n top: 18,\n transition: 'top 0.3s cubic-bezier(0.33333, 0, 0.66667, 0.33333), opacity 0.2s linear',\n }),\n lineActive2: css({\n transform: 'rotate(-135deg)',\n transition: 'top 0.12s 0.18s cubic-bezier(0.33333, 0, 0.66667, 0.33333), transform 0.15s 0.42s cubic-bezier(0.215, 0.61, 0.355, 1)',\n }),\n lineActive3: css(mq({\n transform: [`translate3d(0, -${rs[0].space}px, 0) rotate(-45deg)`, null, `translate3d(0, -${rs[1].space}px, 0) rotate(-45deg)`],\n transitionDelay: '0.32s',\n transitionTimingFunction: 'cubic-bezier(0.215, 0.61, 0.355, 1)',\n }))\n}","/** @jsx jsx */\nimport { jsx } from '@emotion/core'\nimport style from './hamburgerStyle';\n\nexport function Hamburger({ opened, toggleMenu, scrolled }) {\n\n return \n}","import { css } from '@emotion/core'\nimport { mq } from '../../cssInJs'\n\nexport default {\n top: css(mq({\n //height: [44, null, 80],\n height: [44, null, 56],\n //background: 'black',\n background: 'transparent',\n position: 'fixed',\n width: '100%',\n zIndex: '999',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n transition: 'all 0.3s'\n })),\n topScrolled: css(mq({\n background: 'white',\n })),\n logo: css(mq({\n })),\n logoImg: css(mq({\n display: 'block',\n height: ['45px', null, '70px'],\n marginTop: ['1rem', null, '2rem'],\n transition:'all .2s'\n })),\n logoScrolled: css(mq({\n img : css(mq({\n height: [34, null, 50],\n marginTop:'0rem'\n }))\n })),\n}","/** @jsx jsx */\nimport { jsx } from '@emotion/core';\n\nimport { useState, Fragment } from 'react';\nimport { SiteLink } from '../../components';\nimport { useScrollPosition } from '@n8tb1t/use-scroll-position';\nimport { NavBar } from './navBar';\nimport { BackButton } from '../backButton/backButton';\nimport { Hamburger } from '../hamburger/hamburger';\nimport style from './topHeaderStyle';\n\nexport function TopHeader(props) {\n const [menuOpened, setMenuOpened] = useState(false);\n const [scrolled, setScrolled] = useState(false);\n\n useScrollPosition(\n ({ prevPos, currPos }) => {\n //console.log(currPos.x)\n //console.log(currPos.y);\n if (currPos.y > 90) {\n setScrolled(true);\n } else {\n setScrolled(false);\n }\n //setScrolled(currPos.y > 90)\n },\n [],\n null,\n true\n );\n\n function toggleMenu(e) {\n setMenuOpened(!menuOpened);\n }\n\n function onCloseMenu() {\n setMenuOpened(false);\n }\n function backTop() {\n window.scrollTo({ top: 0, behavior: 'smooth' });\n }\n return (\n \n
    \n \n \n logo\n \n\n \n \n
    \n
    \n );\n}\n","import React from 'react';\nimport { useRouter } from '../../components';\nimport { SiteLink } from '../../components';\nimport utils from 'utils';\n//import BottomDrawer from '../../components/bottomDrawer'\n\nexport function BottomDock(props) {\n const links = [\n { url: '/member/login', title: 'LOG-IN', icon: 'navicon-100.png', iconHover: 'navicon-100.png' },\n { url: '/guides', title: 'GUIDES', icon: 'navicon-100.png', iconHover: 'navicon-100.png' },\n { url: '/workshops', title: 'WORKSHOPS', icon: 'navicon-100.png', iconHover: 'navicon-100.png' },\n { url: '/phi-online', title: 'PHI ONLINE', icon: 'navicon-100.png', iconHover: 'navicon-100.png' },\n { url: '#contact', title: 'CONTACT', icon: 'navicon-100.png', iconHover: 'navicon-100.png' },\n ];\n\n //const path = usePath();\n const { pathname, navigate } = useRouter();\n\n const isCurrent = (link) => {\n return pathname && pathname.toLowerCase() === link.toLowerCase();\n };\n\n function linkClicked(e, url) {\n if (url === '#contact') {\n e.preventDefault();\n e.stopPropagation();\n if (utils.ui.findElement(url)) {\n utils.ui.scrollTo(url);\n } else {\n navigate('/#contact');\n }\n }\n }\n\n const linkElts = links.map((link, index) => (\n
  • \n linkClicked(e, link.url)}\n >\n
    \n {link.title}\n {link.title}\n
    \n
    {link.title}
    \n \n
  • \n ));\n\n // const bottomMenu = useRef(null);\n // useLayoutEffect(() => {\n // //console.log('useLayoutEffect');\n // const slider = new BottomDrawer(bottomMenu.current);\n // setTimeout(() => slider.init(), 1000)\n // }, [])\n\n return (\n <>\n \n {/*
    */}\n \n );\n}\n","import React from 'react';\nimport { useStore } from '../../store';\nimport FsLightbox from 'fslightbox-react';\n\nexport function CommonVideoPopup(props) {\n const { state } = useStore();\n\n const [toggler, setToggler] = React.useState(false);\n const [sources, setSources] = React.useState([]);\n const [popupIndex, setPopupIndex] = React.useState(0);\n\n const popup = state.popup;\n //console.log(popup, JSON.stringify((popup && popup.sources) || []), JSON.stringify(sources), (popup && popup.popupIndex), popupIndex)\n if (JSON.stringify((popup && popup.sources) || []) !== JSON.stringify(sources) ||\n ((popup && popup.popupIndex) || 0) !== popupIndex) {\n setSources(popup.sources);\n setPopupIndex(popup.popupIndex);\n setTimeout(() => { setToggler(!toggler) }, 10)\n } else {\n\n }\n //console.log(toggler, popupIndex, sources)\n return (\n
    \n {\n }}\n />\n
    \n\n );\n}","import React from 'react';\nimport { useRouter } from './components';\nimport { useHistoryStore } from './components';\nimport { useParallax } from './components';\nimport utils from './utils';\n// import debounce from \"lodash/debounce\";\n\nexport function AppRouteChanged() {\n const { path } = useRouter();\n const parallax = useParallax();\n const history = useHistoryStore();\n\n React.useLayoutEffect(() => {\n //console.log('route changed', path)\n // const scrolled = debounce((e) => saveScrollPosition(e, path), 100)\n\n history.push({ path: path });\n if (typeof window !== `undefined`) {\n parallax.reset();\n\n const pos = getPreviousPostition(path);\n // console.log('pos', pos)\n if (pos) {\n setTimeout(() => {\n window.scrollTo(pos.scrollLeft, pos.scrollTop);\n }, 500);\n } else {\n const hash = window.location.hash;\n\n if (hash) {\n setTimeout(() => {\n const anchor = utils.ui.findElement(hash);\n if (anchor) utils.ui.scrollTo(anchor, 500);\n }, 500);\n } else {\n window.scrollTo(0, 0);\n }\n }\n }\n\n // window.addEventListener('scroll', scrolled)\n // return () => {\n // window.removeEventListener('scroll', scrolled)\n // }\n // eslint-disable-next-line\n }, [path]);\n\n return null;\n}\n\n//#region scroll position store\n\n// function saveScrollPosition(e, path) {\n// if (typeof window === `undefined`) return;\n// const scrollLeft = window.pageXOffset || document.documentElement.scrollLeft\n// const scrollTop = window.pageYOffset || document.documentElement.scrollTop\n// // console.log('save position', path, scrollTop, scrollLeft)\n// setPositionData(path, scrollLeft, scrollTop)\n// }\n\nfunction getPreviousPostition(path) {\n const dataArr = getPositionData() || [];\n // console.log(dataArr.length)\n const pos = getPreviousPostitionInArray(dataArr, path);\n return pos;\n}\n\nfunction getPositionData() {\n const dataStr = localStorage.getItem('scrollPosRouter');\n // console.log(dataStr)\n if (dataStr) {\n let data;\n try {\n data = JSON.parse(dataStr);\n } catch (e) {\n return null;\n }\n return data;\n }\n return null;\n}\n\n// function setPositionData(path, scrollLeft, scrollTop) {\n// const dataArr = getPositionData() || []\n// setCurrentPositionInArray(dataArr, path, scrollLeft, scrollTop)\n// // console.log(dataArr)\n// localStorage.setItem('scrollPosRouter', JSON.stringify(dataArr))\n// }\n\n// const MAX_SIZE = 5\n// function setCurrentPositionInArray(dataArr, path, scrollLeft, scrollTop) {\n// const same = dataArr.length > 0 && dataArr[dataArr.length - 1].path === path\n// if (same) {\n// const found = dataArr[dataArr.length - 1]\n// found.scrollLeft = scrollLeft\n// found.scrollTop = scrollTop\n// found.ts = new Date()\n// } else {\n// if (dataArr.length >= MAX_SIZE) dataArr.shift()\n// dataArr.push({\n// path: path,\n// scrollLeft: scrollLeft,\n// scrollTop: scrollTop,\n// ts: new Date()\n// })\n// }\n// }\n\nfunction getPreviousPostitionInArray(dataArr, path) {\n const foundIndex = findIndexReverse(dataArr, (x) => x.path === path);\n // console.log(foundIndex, dataArr.length - 1)\n if (foundIndex >= 0 && foundIndex >= dataArr.length - 2) {\n // remove after the index\n if (foundIndex < dataArr.length - 1) {\n dataArr.splice(foundIndex + 1);\n localStorage.setItem('scrollPosRouter', JSON.stringify(dataArr));\n }\n return dataArr[foundIndex];\n }\n return null;\n}\n\nfunction findIndexReverse(list, fn) {\n if (!list) return -1;\n for (let i = list.length - 1; i >= 0; i--) {\n if (fn(list[i])) {\n return i;\n }\n }\n return -1;\n}\n//#endregion\n","//import { css } from '@emotion/core';\nimport variables from '../../../cssInJs/variables';\nimport { mq } from '../../../cssInJs';\nexport default {\n desc: {\n marginTop: '1rem',\n p: {\n fontSize: '1rem !important',\n fontFamily: variables.familyBase + ' !important',\n marginBottom: '0.5rem !important',\n lineHeight: '1.1 !important',\n },\n },\n heroImageContainer: mq({\n //textAlign: 'center',\n height: ['180px', '340px'],\n position: 'relative',\n }),\n heroImage: mq({\n //maxWidth: '350px !important',\n //height: '100% !important'\n maxHeight: ['180px', '340px'],\n position: 'absolute',\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n }),\n productPageCol: mq({\n paddingLeft: '45px',\n paddingRight: '45px',\n }),\n productFavorite: {\n cursor: 'pointer',\n '&.checked': {\n color: 'red',\n },\n },\n productBreadCrumbs: mq({\n padding: '0px',\n listStyle: 'none',\n marginBottom: '0.5rem',\n display: 'block',\n li: mq({\n display: 'inline-block',\n marginRight: '1.5rem',\n position: 'relative',\n fontSize: '0.7rem',\n '&:not(:last-child)::after, &.breadCrumb.last-item::after': {\n content: '\">\"',\n position: 'absolute',\n right: '-1rem',\n },\n '&.breadCrumb::after': {\n content: '\"|\"',\n position: 'absolute',\n right: '-1rem',\n },\n }),\n }),\n productViewImageBg: mq({\n backgroundPosition: 'center',\n backgroundSize: 'contain',\n paddingTop: ['80px', '120px'],\n backgroundRepeat: 'no-repeat',\n marginLeft: '5px',\n marginRight: '5px',\n }),\n productViewImages: mq({\n marginTop: ['1rem', '2rem'],\n paddingBottom: ['1rem', '2rem'],\n marginLeft: '-5px',\n marginRight: '-5px',\n '.slick-prev, .slick-next': {\n transform: 'none',\n top: '150px',\n '&:before': {\n color: '#999999',\n },\n },\n '.slick-prev': {\n left: '150px',\n },\n '.slick-next': {\n right: '150px',\n },\n }),\n\n productViewImage: {\n //paddingLeft: '5px',\n //paddingRight: '5px'\n outline: 'none',\n cursor: 'pointer',\n },\n\n productViewShortDes: mq({\n fontSize: ['1rem'],\n textAlign: 'center',\n\n fontWeight: 300,\n fontFamily: variables.familyHeader,\n lineHeight: '1.2',\n marginTop: '0.5rem',\n }),\n\n productViewTitle: mq({\n fontSize: ['1.3rem', null, null, '40px'],\n textAlign: 'center',\n marginTop: '0px',\n }),\n\n addToCartBtn: {\n //width: '100%'\n 'button, .btn': {\n width: '100%',\n //transform: 'skewX(-12deg)'\n },\n // 'button.gotocartbtn' : {\n // marginTop: '1rem'\n // }\n },\n priceText: {\n fontSize: '0.8rem',\n },\n socialMedia: {\n '.social-icon-text': {\n fontSize: '0.8rem',\n },\n },\n attributesRow: {\n cursor: 'pointer',\n //marginTop: '0.5rem',\n //marginBottom: '0.5rem',\n paddingTop: '0.2rem',\n paddingBottom: '0.2rem',\n '&:hover': {\n backgroundColor: '#999999',\n color: 'white',\n },\n '.svgContainer svg': {\n transition: 'all 0.5s',\n },\n '.svgContainer.open svg': {\n transform: 'rotate(180deg)',\n },\n },\n\n attrContainer: {\n maxHeight: '0px',\n transition: 'all 0.3s',\n overflow: 'hidden',\n '&.open': {\n maxHeight: '1000px',\n },\n },\n\n desktopMobile: {\n '&.mobile': mq({\n display: ['block', 'none'],\n }),\n '&.desk__top': mq({\n display: ['none', 'block'],\n }),\n },\n quoteContainer: {\n marginBottom: '1rem',\n '.quote__text': {\n fontSize: '0.8rem',\n marginBottom: '1rem',\n },\n button: {\n //transform: 'skewX(-12deg)'\n },\n },\n enquiryFormContainer: {\n backgroundColor: 'rgba(0,0,0,0.3)',\n position: 'fixed',\n top: '0px',\n left: '0px',\n width: '100%',\n height: '100%',\n zIndex: '9999',\n 'form.contactForm': {\n position: 'absolute',\n width: '100%',\n maxWidth: '900px',\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n backgroundColor: 'grey',\n //paddingTop: '2rem',\n paddingLeft: '1rem',\n paddingRight: '1rem',\n margin: '0px',\n '.closeButton': {\n textAlign: 'right',\n //margin: '1rem 0px',\n cursor: 'pointer',\n color: 'white',\n marginTop: '0.5rem',\n },\n '.enquireNowText': {\n marginBottom: '0.5rem',\n color: 'white',\n },\n },\n },\n};\n","import React, { useState, useEffect } from 'react';\nimport { useGet } from '../../../components';\nimport { Item } from '../../items/item';\nimport { NotFound } from '../../../components';\nimport env from '../../../env';\nimport { useStore } from '../../../store';\nimport { ErrorPopup, Loading } from '../../../components';\n\nconst log = (...args) => {\n //console.log(args);\n}\nconst areEqual = (prevProps, nextProps) => {\n return (prevProps.pageData === nextProps.pageData)\n};\nconst PageMemo = React.memo(Page, areEqual)\n\nexport function ViewPartial({pageOptions = null}) {\n const { dispatch } = useStore();\n const [pageLoaded, setPageLoaded] = useState(false);\n const [data, setData] = useState(null);\n //const path = usePath();\n //log('view page', path);\n const pathname = '/partials/common-footer';\n\n const get = useGet();\n log('0. viewpage ready');\n\n useEffect(() => {\n log('*. start loading')\n setPageLoaded(false);\n get.send(env.apiBase + \"/api/cms/GetPublishedPage?path=\" + pathname);\n // eslint-disable-next-line\n }, [pathname]);\n\n useEffect(() => {\n if (data){\n dispatch({ type: 'SET_PAGE', payload: data.data })\n dispatch({ type: 'SET_MENU', payload: data.menu })\n }\n // eslint-disable-next-line\n }, [data]);\n\n if (get.loading()) {\n return \n } else if (get.hasErrors()) {\n return \n }\n\n //log(router.pathname);\n //log(get.loading());\n log('1. viewpage component', pageLoaded, get.response);\n\n\n const pageData = get.response.data;\n //const menuData = get.response.menu;\n const cmsOption = { pageOptions: pageOptions};\n log(pageLoaded, !pageLoaded && !!pageData)\n if (!pageLoaded && pageData) {\n //log(pageLoaded, pageData, menuData)\n log('2. dispatching page & menu')\n setPageLoaded(true);\n setData(get.response);\n\n //document.title = pageData.pageTitle;\n return null;\n } else if (!pageData) {\n return ()\n }\n\n log('3. call rendering memo')\n return ;\n}\n\n\nfunction Page(props) {\n const pageData = props.pageData;\n const cmsOption = props.cmsOption;\n // document.title = pageData.pageTitle;\n log('4. page rendering', pageData, cmsOption)\n const sectionItems = pageData.sections.map((section, index) => {\n return (\n
    \n )\n }\n );\n return (\n <>\n {sectionItems}\n \n );\n}\n\nfunction Section(props) {\n log('5. section rendering')\n const item = props.item;\n //const sectionName = item.sectionName;\n const subItems = item.items || [];\n const cmsOption = props.cmsOption || {};\n if (!subItems || subItems.length === 0)\n return (<>);\n\n const subItemsElts = subItems.map((subItem, index) =>\n \n );\n return (\n <>\n {subItemsElts}\n \n );\n}\n\n","/** @jsx jsx */\nimport { jsx } from '@emotion/core'\nimport { useState } from 'react';\nimport env from '../../../env';\nimport { SiteLink } from '../../../components'; //useRouter\n//import { useHistory } from \"react-router-dom\";\nimport { useForm } from '../../../form';\nimport { fb, validators } from '../../../form';\nimport { Button, ErrorMessage } from '../../../components';\nimport { usePost } from '../../../components';\nimport utils from '../../../utils';\nimport style from './productViewStyle';\nimport { MdKeyboardArrowDown } from \"react-icons/md\";\nimport { useStore } from '../../../store';\n//import {ProductAttributes} from './productAttributes';\n\nexport function AddToCart({ product }) {\n //console.log('product', product);\n const post = usePost();\n //const { Redirect } = useRouter();\n //const history = useHistory();\n const render = (name, parent = null) => form.renderControl(name, parent);\n const model = getFormModel(product, {});\n const form = useForm(model, { usePlaceholder: true, onControlChanged: onControlChanged });\n\n const [attributesEx, setAttributesEx] = useState(() => {\n let _array = [];\n for(let n in product.variantAttributes){\n console.log(n);\n _array.push(false);\n }\n return _array;\n });\n\n const [checkGoToCartBtn, setCheckGoToCartBtn] = useState(false);\n const { dispatch } = useStore();\n\n function onControlChanged(e, control) {\n if (!(control.type === 'select' && control.parent)) return;\n const newModel = getFormModel(product, form.getValue())\n form.reset(newModel)\n }\n\n function addToCart(e) {\n form.validateForm(e, () => {\n const formVal = form.getValue();\n let _variantOptions = [];\n for(let i in formVal.variantOptions){\n let _item = {\n name : formVal.variantOptions[i].name,\n value : formVal.variantOptions[i][Object.keys(formVal.variantOptions[i])[1]]\n };\n _variantOptions.push(_item);\n }\n //const value = { ...formVal, productId: product.productId, cartId: env.getDevCartId() };\n let _cartId = env.getDevCartId();\n const value = { \n quantity : formVal.quantity,\n variantOptions : _variantOptions,\n productId: product.productId,\n cartId: _cartId === 'null' ? null : _cartId\n };\n //console.log('value', value);\n post.send(env.apiBase + \"/api/cart/addToCart\", value);\n })\n }\n\n if (post.done()) {\n env.setDevCartId(post.response.results.cartInfo.cartId);\n //console.log('dfdlsjflskdfj',post.response);\n if(post.response.errors.length < 1){\n setTimeout(() => {\n dispatch({type:'SET_STATE', payload : {cartInfo : post.response.results.cartInfo.totalQuantity === 0 ? 0 : (post.response.results.cartInfo.totalQuantity)-1}});\n setCheckGoToCartBtn(true);\n }, 500); \n }\n // return \n }\n const attributes = form.findControl('variantOptions');\n return
    \n {/*
    \n Price: {product.priceText ? product.priceText : 'AU ' + utils.money.formatMoney(product.price)}\n
    */}\n\n {/* */}\n \n {\n attributes.controls.map(\n (item, index) =>\n {\n //console.log('item', item);\n return(\n
    \n \n
    \n
    {\n setAttributesEx(pre => {\n let _new = {...pre};\n _new[index] = !_new[index];\n return _new;\n });\n }}>\n
    \n {item.controls[0].value}\n
    \n
    \n {item.controls[1].value}\n
    \n
    \n \n
    \n
    \n
    \n\n
    \n {render(item.controls[0].value.toLowerCase(), item)}\n {/* {render('value', item)} */}\n
    \n\n {/*
    {render('value', item)}
    */}\n
    \n )\n }\n )\n }\n\n
    \n
    \n
    \n All prices shown in AUD\n
    \n
    \n
    \n {product.priceTextOveriding ? product.priceTextOveriding : 'AU ' + utils.money.formatMoney(product.priceIncTax)}\n
    \n
    \n
    \n\n
    \n
    \n {render('quantity')}\n
    \n
    \n \n {\n checkGoToCartBtn === true &&\n GO TO CART \n }\n
    \n
    \n \n
    \n {/* */}\n \n \n
    \n
    \n
    \n}\n\nfunction getFormModel(product, formValues /* for reset */) {\n const variantAttributes = product.variantAttributes;\n\n const model = fb.group({\n //quantity: [formValues.quantity || 1, [validators.Required()], { label: 'Quantity', type: 'number' }],\n quantity: [formValues.quantity || 1, [validators.Required()], { label: 'Quantity', type: 'number' }],\n variantOptions: fb.array([]),\n });\n const variantOptionArray = model.find('variantOptions').controls;\n (variantAttributes || []).forEach(attr => {\n variantOptionArray.push(newVariantAttribute(attr, formValues, product.variants))\n })\n return model;\n}\n\n// function newVariantAttribute(attr, formValues, variants) {\n// //console.log(attr, formValues, variants)\n// const optionsSelected = formValues.variantOptions || [];\n// const currentSelection = utils.array.find(optionsSelected, x => attr.name === x.name);\n// const filtered = variants\n// .filter(x => matchVariantOptions(optionsSelected, x.variantOptions, attr.name))\n// const availableOptions = getAvailableOptionValues(filtered, attr.name);\n// const options = attr.options.map(x => { return { ...x, ...{ disabled: !availableOptions.some(o => o === x.value) } } })\n// return fb.group({\n// name: [attr.name, [], { type: 'hidden' }],\n// value: [(currentSelection && currentSelection.value) || attr.value || '',\n// [validators.Required()], {\n// //label: attr.name,\n// label: null,\n// type: 'select',\n// options: [{ displayName: 'Select ...', value: '' }, ...options].map(x => {\n// return {\n// name: (x.displayName || x.value) + (x.disabled || false ? ' - not available' : ''),\n// value: x.value,\n// disabled: x.disabled || false\n// }\n// })\n// }]\n// })\n// }\n\nfunction newVariantAttribute(attr, formValues, variants) {\n \n // const choices = [\n // { name: 'Yes, please!', value: 'Yes' },\n // { name: 'No, thanks', value: 'No' }\n // ]\n\n const dyName = attr.name.toLowerCase();\n const optionsSelected = formValues.variantOptions || [];\n const currentSelection = utils.array.find(optionsSelected, x => attr.name === x.name);\n\n const filtered = variants\n .filter(x => matchVariantOptions(optionsSelected, x.variantOptions, attr.name))\n const availableOptions = getAvailableOptionValues(filtered, attr.name);\n const options = attr.options.map(x => { return { ...x, ...{ disabled: !availableOptions.some(o => o === x.value) } } });\n\n return fb.group({\n name: [attr.name, [], { type: 'hidden' }],\n [dyName] : [(currentSelection && currentSelection.value) || attr.value || options[0].value,\n [validators.Required()], {\n //label: attr.name,\n label: null,\n type: 'radioList',\n //options : choices\n options: [...options].map(x => {\n return {\n name: (x.displayName || x.value) + (x.disabled || false ? ' - not available' : ''),\n value: x.value,\n disabled: x.disabled || false\n }\n })\n }]\n })\n}\n\nfunction getAvailableOptionValues(variants, name) {\n const values = variants.map(x => {\n const options = x.variantOptions.filter(o => o.name === name)\n return options && options[0].value\n }).filter(x => x);\n\n return Array.from(new Set(values));\n}\n\nfunction matchVariantOptions(optionsSelected, optionsInVariant, currentControlName) {\n //console.log(optionsSelected, optionsInVariant, currentControlName)\n for (let i = 0; i < optionsSelected.length; i++) {\n let optionSelected = optionsSelected[i];\n if (optionSelected.value === '') {\n // skip match test\n continue;\n }\n if (optionSelected.name === currentControlName) {\n // skip match test for the just selected value\n continue;\n }\n let found = false;\n for (let j = 0; j < optionsInVariant.length; j++) {\n let optionInVariant = optionsInVariant[j];\n if (optionSelected.name === optionInVariant.name && optionSelected.value === optionInVariant.value) {\n found = true;\n break;\n }\n }\n if (!found) return false;\n }\n return true;\n}","/** @jsx jsx */\nimport { jsx } from '@emotion/core';\nimport style from './productViewStyle';\nimport React, { useState, useEffect } from 'react';\nimport env from '../../../env';\nimport utils from '../../../utils';\nimport { ErrorPopup, Loading, Button, ErrorMessage, useGet, usePost, useRouter } from '../../../components';\nimport { ViewPartial } from '../../../cms/pages/partials/viewPartial';\n//import { CommonProductBottom } from '../../../cms/pages/partials/commonProductBottom';\nimport { ProductTile } from '../productList/productTile';\nimport FsLightbox from 'fslightbox-react';\nimport { MetaTag } from '../../../components';\nimport { AddToCart } from './addToCart';\nimport Slider from 'react-slick';\n// import { MdFavorite } from 'react-icons/md';\n\n//import { debounce } from '../../../lib/utils-core/debounce';\nimport { gtm } from '../../../lib/tracking';\nimport { FacebookShareButton, FacebookIcon, PinterestShareButton, PinterestIcon } from 'react-share';\nimport { createPortal } from 'react-dom';\nimport { getEnquiryFormModel } from './enquiryFormModel';\nimport { useForm } from '../../../form';\n// import { ProductPagePartial } from '../../../cms/pages/partials/productPagePartial';\n\nfunction Portal({ children }) {\n const [el] = useState(document.createElement('div'));\n useEffect(() => {\n let mount = document.getElementById('portal-root');\n mount.appendChild(el);\n return () => mount.removeChild(el);\n }, [el]);\n return createPortal(children, el);\n}\n\nexport function ProductView(props) {\n const { query } = useRouter();\n const [loaded, setLoaded] = React.useState(false);\n const get = useGet();\n const productCode = query.id || '';\n const category = query.category || '';\n const slug = query.slug || '';\n //console.log(category, slug, productCode)\n React.useEffect(() => {\n console.log('productview use effect');\n //const url = productCode ? `/api/product/getProduct/${productCode}` : `/api/product/getProductByUrl?category=${category}&slug=${slug}`\n const url = `/api/product/getProduct/${slug}`;\n get.send(env.apiBase + url);\n setLoaded(false);\n // eslint-disable-next-line\n }, [productCode, slug]);\n\n if (get.loading()) {\n return ;\n } else if (get.hasErrors()) {\n return ;\n }\n\n const data = get.response;\n\n if (get.done() && !loaded) {\n setLoaded(true);\n const pageUrl = productCode ? `/product/${productCode}` : `/products/${category}/${slug}`;\n const pageTitle = data.totalCnt === 0 ? 'No product found' : data.productName;\n gtm.pageView(pageUrl, pageTitle);\n }\n\n if (data.totalCnt === 0) return
    No product found.
    ;\n return (\n \n
    \n \n {/* */}\n {/* */}\n \n \n );\n}\n\nfunction Product({ product }) {\n console.log('product', product);\n //product.productImages = [];\n // const mainPhoto = product.productImages.length > 0 ? product.productImages[0] : { imageUrl: '/assets/product-empty.png', alt: product.productName };\n //const mainPhoto = {imageUrl: utils.site.resourcePath('/sites/beehive-react/media/products/coastal-flora-1k-hexjar.jpg'), alt: product.productName};\n\n const mainPhoto =\n product.productImages.length > 0\n ? {\n imageUrl: product.productImages[0].imageUrl,\n alt: product.productImages[0].alt ? product.productImages[0].alt : product.productName,\n }\n : { imageUrl: '/assets/logos/logo.png', alt: product.productName };\n\n const allPhotos = product.productImages || [];\n //console.log(\"aaa\", allPhotos);\n //const otherPhotos = product.productImages.length > 0 ? product.productImages.filter(x => !x.isPackage) : [];\n const popupImages = allPhotos.map((x) => x.imageUrl);\n\n const [heroImage, setHeroImage] = React.useState(mainPhoto);\n const [openPopup, setOpenPopup] = useState(false);\n\n const [toggler, setToggler] = React.useState(false);\n //const [popupImages, setPopupImages] = React.useState();\n const [popupIndex, setPopupIndex] = React.useState(0);\n const shareUrl = utils.site.resourcePath('/product/' + product.productSlug);\n // const heroImageUrl = utils.site.resourcePath(mainPhoto.imageUrl);\n\n const enquiryFormModel = getEnquiryFormModel({});\n const enquiryForm = useForm(enquiryFormModel, { usePlaceholder: true });\n\n const enquiryFormRender = (name) => enquiryForm.renderControl(name, null);\n const post = usePost();\n const [sendingStatus, setSendingStatus] = React.useState(null);\n // const [favorite, setFavorite] = React.useState(() => {\n // if ((localStorage.favorites || []).includes(product.productId)) {\n // return true;\n // }\n // return false;\n // });\n\n // const breadCrumbs = product.breadCrumbs;\n\n //console.log('favorite', favorite);\n //const [isMobile, setIsMobile] = React.useState(utils.site.isMobile())\n\n // React.useEffect(() => {\n // const resized = debounce(() => {\n // setIsMobile(utils.site.isMobile())\n // }, 1000)\n // if (typeof window !== `undefined`) {\n // window.addEventListener('resize', resized)\n // }\n // return () => {\n // if (typeof window !== `undefined`) {\n // window.removeEventListener('resize', resized)\n // }\n // }\n\n // })\n\n function openPopupImage(imageUrl) {\n const inx = utils.array.findIndex(popupImages, (x) => x === imageUrl);\n setPopupIndex(inx >= 0 ? inx : 0);\n setToggler(!toggler);\n }\n\n var settings = {\n dots: false,\n infinite: allPhotos.length > 2 ? true : false,\n speed: 1500,\n autoplaySpeed: 3000,\n //fade: true,\n autoplay: false,\n slidesToShow: allPhotos.length >= 3 ? 3 : allPhotos.length,\n slidesToScroll: 1,\n };\n\n const slides = allPhotos.map((photo, index) => (\n \n setHeroImage(photo)}\n >\n {/* {photo.alt} setHeroImage(photo)} /> */}\n \n ));\n\n function onSubmit(e) {\n enquiryForm.validateForm(e, () => {\n const value = { ...enquiryForm.getValue(), productName: product.productName, emailReceiver: '' };\n //var files = form.getFiles();\n var formData = new FormData();\n formData.append('jsonData', JSON.stringify(value));\n //post.send(env.apiBase + \"/api/contact/send\", value);\n post.sendFormData(env.apiBase + '/api/cart/sendenquire', formData);\n setSendingStatus('pending');\n });\n //console.log('submitting');\n }\n\n if (post.done() && sendingStatus === 'pending') {\n //var value = enquiryForm.getValue();\n //gtm.sendEvent('contactFormSubmitted', {contactEmail: value.email} )\n enquiryForm.reset(enquiryFormModel);\n setSendingStatus(null);\n setTimeout(() => {\n setOpenPopup(false);\n document.body.style.overflow = 'unset';\n }, 1500);\n }\n\n return (\n
    \n \n {openPopup && (\n
    \n
    \n {\n setOpenPopup(false);\n document.body.style.overflow = 'unset';\n }}\n >\n CLOSE\n
    \n
    Enquire Now
    \n
    \n
    {enquiryFormRender('name')}
    \n
    {enquiryFormRender('phone')}
    \n
    {enquiryFormRender('email')}
    \n
    \n
    \n
    {enquiryFormRender('enquiry')}
    \n
    \n\n
    \n
    \n
    \n {/* onClick={onSubmit} status={post.status} */}\n \n \n {post.status === 'done' && 'Successfully sent!'}\n
    \n
    \n
    \n \n
    \n )}\n \n\n \n \n\n
    \n
    \n {/* */}\n
    \n
    \n \n
    \n \n
    \n\n {product.description && }\n {/* {barcodeCleaned && } */}\n {heroImage && heroImage.imageUrl && }\n\n
    \n {/*
    \n \n
      \n
    • \n {' '}\n Home {' '}\n
    • \n
    • \n {' '}\n Shop {' '}\n
    • \n {breadCrumbs.map((item, index) => (\n
    • \n {item.categoryPageTitle} \n
    • \n ))}\n
    • {product.productName}
    • \n
    \n
    \n\n
    \n {\n setFavorite((pre) => {\n let _localStorageFavorites = localStorage.favorites.replace(product.productId + '|', '');\n let _new = !pre;\n if (_new === true) {\n _localStorageFavorites = _localStorageFavorites + product.productId + '|';\n }\n localStorage.setItem('favorites', _localStorageFavorites);\n return _new;\n });\n }}\n >\n
    */}\n\n
    \n
    \n openPopupImage(heroImage.imageUrl)}\n />\n
    \n {allPhotos.length > 1 && (\n
    \n {/* {slides} */}\n {slides}\n
    \n )}\n\n {/*
    \n
    \n
    \n Like this product but doesn't match your specifications? Click for a custom quote.\n
    \n {\n setOpenPopup(true);\n document.body.style.overflow = 'hidden';\n }}\n >\n {' '}\n CUSTOM QUOTE{' '}\n \n
    \n\n
    \n
    SHARE THIS PRODUCT:
    \n \n \n \n \n \n \n
    \n \n
    */}\n
    \n
    \n

    \n {product.productName}\n

    \n {product.shortDesc && (\n
    \n {product.shortDesc}\n
    \n )}\n\n
    \n\n {/*
    */}\n\n {/*
    \n Product code: {product.productCode}\n
    */}\n\n {product.productStatus === 0 && }\n\n {product.productStatus === 100 && (\n {\n setOpenPopup(true);\n document.body.style.overflow = 'hidden';\n }}\n >\n {' '}\n ENQUIRE NOW{' '}\n \n )}\n\n {product.productStatus === 1 && }\n\n {product.productStatus === 98 && }\n\n
    \n
    \n
    \n Like this product but doesn't match your specifications? Click for a custom quote.\n
    \n {\n setOpenPopup(true);\n document.body.style.overflow = 'hidden';\n }}\n >\n {' '}\n CUSTOM QUOTE{' '}\n \n
    \n\n
    \n
    SHARE THIS PRODUCT:
    \n \n \n \n \n \n \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n \n );\n}\n\nfunction getMetaTag(product, mainPhoto) {\n return {\n title: product.productName,\n description: product.metaDesc || product.intro,\n keywords: '',\n heroImageUrl: utils.site.resourcePath(mainPhoto.imageUrl),\n language: 'English',\n country: 'Australia',\n siteName: env.siteName,\n url: utils.site.resourcePath('/product/' + product.productSlug),\n //canonical: utils.site.resourcePath(pageData.pageUrl)\n };\n}\n\nfunction RelatedProducts({ products }) {\n //console.log(products)\n if (!products || products.length === 0) return null;\n return (\n
    \n

    RELATED PRODUCTS

    \n
    \n {products.map((product, index) => (\n \n ))}\n
    \n
    \n );\n}\n","import { fb, validators } from '../../../lib/form';\nexport function getEnquiryFormModel(data) {\n const model = fb.group({\n name: [data.name || '', [validators.Required()], { label: 'Name', type: 'text' }],\n phone: [data.phone || '', [validators.Required()], { label: 'Phone', type: 'text' }],\n email: [data.email || '', [validators.Required(), validators.Email()], { label: 'Email', type: 'email' }],\n enquiry: [data.enquiry || '', [validators.Required()], { label: 'Enquiry', type: 'textarea' }]\n //attachments: [data.attachments || '', [], { label: 'Attachments', type: 'file' }]\n }); \n return model;\n}","import React, { useEffect } from 'react';\nimport { BrowserRouter as Router, Switch, Route, Redirect } from 'react-router-dom';\nimport { useRouter } from './components';\nimport { StoreProvider } from './store';\nimport { ProvideAuth } from 'auth';\n\nimport MemberLayout from 'layout/memberLayout';\nimport DashboardNoAuthLayoutRoute from 'layout/dashboardNoAuthLayout';\nimport PermissionCheckFirst from 'layout/permissionCheckFirst';\nimport { Login } from 'auth';\nimport { EventView } from 'site/event/eventView/eventView';\n\nimport { ViewPage } from './cms/pages/viewPage/viewPage';\nimport { EditPage } from './cms/pages/editPage/editPage';\nimport { TopHeader } from './layout/topHeader/topHeader';\n// import { Footer } from './layout/footer/footer';\nimport { BottomDock } from './layout/bottomDock/bottomDock';\n// import { BlogView } from './site/blog/blogView';\nimport { AppVersionPage } from './components';\nimport { MediaQueryStatus } from './components';\nimport { CommonVideoPopup } from './layout/popup/commonVideoPopup';\nimport { HelmetProvider } from 'react-helmet-async';\n//import { useScrollPosition } from '@n8tb1t/use-scroll-position';\nimport { AppRouteChanged } from './AppRouteChanged';\nimport AOS from 'aos';\n\n//For ECM\nimport { ProductView } from './site/ecm/product/productView';\n// import { OrderDetails } from './site/ecm/orderDetails/orderDetails';\n// import env from './env';\n// import { useStore } from './store';\n\nfunction AppLayout(props) {\n const { pathname } = useRouter();\n\n //For ECM\n //const storeContext = useRef(useStore());\n\n //const [scrolled, setScrolled] = useState(false)\n //const path = usePath();\n //const routeResult = useRoutes(routes);\n\n // const parallax = useParallax();\n // //console.log(path, routeResult);\n // const routeChanged = (path) => {\n // //console.log(path);\n // parallax.reset();\n // }\n\n // useScrollPosition(({ prevPos, currPos }) => {\n // //console.log(currPos.x)\n // //console.log(currPos.y);\n // if (currPos.y > 90) {\n // document.querySelector('body').classList.add('scrolled')\n // } else {\n // document.querySelector('body').classList.remove('scrolled')\n // }\n // //setScrolled(currPos.y > 90)\n // }, [], null, true)\n\n //const pageChanged = useCallback(path => routeChanged(path), [])\n //useLocationChange((path) => { routeChanged(path, history)})\n //useLocationChange(path => routeChanged(path))\n\n //const pathFiltered = (pathname || '').toLocaleLowerCase();\n let specialClassName = '';\n // if (pathFiltered.indexOf('/digital-sensor') >= 0) specialClassName = 'digital-sensor-page';\n // else if (pathFiltered === '/brilliance') specialClassName = 'brilliance-page';\n\n useEffect(() => {\n AOS.init({\n duration: 1200,\n //delay:400,\n //once:true\n });\n\n // For ECM\n // fetch(env.apiBase + \"/api/cart/getcart/\" + env.getDevCartId())\n // .then(res => res.json())\n // .then(res => {\n // const data = res;\n // if(data){\n // storeContext.current.dispatch({type:'SET_STATE', payload : {cartInfo : data.cartInfo.totalQuantity === 0 ? 0 : (data.cartInfo.totalQuantity)-1}});\n // }\n // })\n // .catch(error =>{\n // storeContext.current.dispatch({type:'SET_STATE', payload : {cartInfo : 0}});\n // });\n }, []);\n\n return (\n
    \n \n \n
    \n
    \n \n } />\n } />\n {/* } /> */}\n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n\n \n \n \n \n\n {/* For ECM }/>\n */}\n } />\n } />\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    \n {/* */}\n
    \n {/*
    */}\n \n \n \n
    \n );\n}\n\nfunction App() {\n return (\n \n \n \n \n \n \n \n \n \n );\n}\n\nfunction IgnorePath() {\n const { path } = useRouter();\n // console.log(window.location.pathname, path);\n // window.location.href = path;\n return (\n
    \n

    Download the file directly

    \n \n {path}\n \n
    \n );\n}\n\nexport default App;\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.0/8 are considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\nlet serviceUpdateCheckerInterval = null;\n\nexport function register(config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl, config) {\n navigator.serviceWorker\n .register(swUrl, {updateViaCache: 'none'})\n .then(registration => {\n // https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerRegistration\n console.log('Service Worker registration successful with scope: ', registration.scope);\n \n // Regular checking service worker\n if (serviceUpdateCheckerInterval) { try { clearInterval(serviceUpdateCheckerInterval) } catch (e) { } }\n serviceUpdateCheckerInterval = setInterval(() => {\n console.log('Checking SW updates...')\n registration.update();\n }, 1/*hour(s)*/ * 10/*minutes*/ * 60 * 1000);\n\n window.updateSW = function() {\n console.log('Checking SW updates... (force)')\n return registration.update();\n }\n \n // When the user asks to refresh the UI, we'll need to reload the window\n var preventDevToolsReloadLoop = false;\n navigator.serviceWorker.addEventListener('controllerchange', function (ev) {\n console.log('Service Worker controller change', ev)\n // Ensure refresh is only called once.\n // This works around a bug in \"force update on reload\".\n if (preventDevToolsReloadLoop) return;\n preventDevToolsReloadLoop = true;\n window.location.reload();\n });\n\n // onNewServiceWorker(registration, function () {\n // console.log('onNewServiceWorker', registration)\n // alert('New Update Available');\n \n // console.log('User okay to update', registration);\n // if (!registration.waiting) {\n // // Just to ensure registration.waiting is available before calling postMessage()\n // return;\n // }\n // registration.waiting.postMessage({ type: 'SKIP_WAITING' });\n\n // console.log('show refresh')\n // });\n \n registration.onupdatefound = () => {\n console.log('registration.onupdatefound', registration.installing)\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n\n navigator.serviceWorker.ready.then(function (registration) {\n console.log('Service Worker ready');\n });\n}\n\n\n// function onNewServiceWorker(registration, callback) {\n// if (registration.waiting) {\n// console.log('onNewServiceWorker-registration.waiting')\n// // SW is waiting to activate. Can occur if multiple clients open and one of the clients is refreshed.\n// return callback();\n// }\n\n// function listenInstalledStateChange() {\n// console.log('listenInstalledStateChange', registration.installing)\n// registration.installing.addEventListener('statechange', function (event) {\n// console.log('listenInstalledStateChange - statechange', event)\n// if (event.target.state === 'installed') {\n// // A new service worker is available, inform the user\n// callback();\n// }\n// });\n// };\n\n// if (registration.installing) {\n// console.log('onNewServiceWorker-registration.installing')\n// return listenInstalledStateChange();\n// }\n\n// // We are currently controlled so a new SW may be found...\n// // Add a listener in case a new SW is found,\n// registration.addEventListener('updatefound', listenInstalledStateChange);\n// }\n\n\nfunction checkValidServiceWorker(swUrl, config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl, {\n headers: { 'Service-Worker': 'script' }\n })\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister();\n });\n }\n}\n","import 'react-app-polyfill/ie11';\nimport 'react-app-polyfill/stable';\nimport './polyfill';\n\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport './_scss/index.scss';\nimport App from './App';\nimport * as serviceWorker from './serviceWorker';\n\nReactDOM.render(, document.getElementById('root'));\n//ReactDOM.hydrate(, document.getElementById('root'));\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.register({\n onUpdate: (registration) => {\n console.log('updated', registration);\n const update = true;//window.confirm('New Update Available. Do you want to update? (Refresh page)');\n if (update){\n if (!registration.waiting) {\n // Just to ensure registration.waiting is available before calling postMessage()\n return;\n }\n registration.waiting.postMessage({ type: 'SKIP_WAITING' });\n \n }\n }\n});\n"],"sourceRoot":""}