{"version":3,"sources":["lib/polyfill-ie/index.js","cssInJs/variables.js","lib/auth/services/authHelper.js","config.js","lib/auth/services/useAuth.js","env.js","components/form/buttons/button.js","lib/ui-error/errorMessage.js","lib/ui-error/errorPopup.js","lib/icons-svg/icons/NarrowRight.js","lib/icons-svg/icons/Loading--circle.js","lib/ui-loading-v2/sectionLoading.js","lib/utils-core/url.js","lib/utils-core/form.js","lib/utils-core/array.js","lib/utils-core/date.js","lib/utils-core/css.js","lib/utils-core/ui.js","lib/utils-core/money.js","lib/utils-core/text.js","lib/utils-core/random.js","lib/utils-core/object.js","lib/utils-core/index.js","site/siteUtils.js","utils/index.js","lib/net-api/index.js","lib/animation/animationUtils.js","lib/net-loader/loadJs.js","lib/router/useRouter.js","lib/store/reducers.js","lib/store/storeProvider.js","lib/router/siteLink.js","lib/router/handleLink.js","lib/auth/controls/loginStatus/loginStatus.js","lib/auth/controls/login/login.js","layout/appHeader.js","layout/loginLayout.js","layout/appSideBar.js","layout/dashboardLayout.js","components/table/table.js","site/product/productList.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","form/controls.js","lib/form/formValidate.js","lib/form/useForm.js","lib/form/useStep.js","lib/form/controls/HtmlInput--ckeditor.js","site/data.js","site/product/edit/productEditFormModel.js","site/product/edit/imageSelector.js","site/product/edit/mediaSelector.js","site/product/edit/metaImageSelector.js","site/product/edit/storeSelector.js","site/product/edit/productEditForm.js","site/product/edit/productEdit.js","site/product/new/productEditForm.js","site/product/new/productNew.js","site/product/new/productEditFormModel.js","components/table/tableServerSide.js","site/warranty/warrantyList.js","site/warranty/warrantyView.js","site/wheretobuy/storeList.js","site/wheretobuy/edit/storeEdit.js","site/wheretobuy/edit/storeEditFormModel.js","site/wheretobuy/new/storeNew.js","site/wheretobuy/new/storeEditFormModel.js","lib/utils-core/dateExt.js","site/contact/contactList.js","site/contact/contactView.js","site/join/joinList.js","site/join/joinView.js","App.js","serviceWorker.js","index.js"],"names":["Element","prototype","matches","msMatchesSelector","webkitMatchesSelector","closest","s","el","this","parentElement","parentNode","nodeType","variables","familyBase","familyHeader","primaryColor","secondaryColor","fontColor","bgColor","breakpointNames","breakpoints","getFirebaseUser","Promise","resolve","reject","unsubscribe","firebase","onAuthStateChanged","user","cssEmotion","iconColors","primary","secondary","firebaseSettings","apiKey","authDomain","databaseURL","projectId","storageBucket","messagingSenderId","appId","apiNetJwt","options","a","getIdToken","then","idToken","error","token","headers","config","authContext","createContext","ProvideAuth","children","auth","React","useState","setUser","currentFirebaseUser","loggedIn","useEffect","signin","email","password","signInWithEmailAndPassword","response","signup","createUserWithEmailAndPassword","signout","signOut","sendPasswordResetEmail","confirmPasswordReset","code","useProvideAuth","Provider","value","useAuth","useContext","isProd","process","apiBase","publicBase","resourceBase","cmsEndpoint","baseUrlAU","baseUrlNZ","ver","updateDate","console","log","Button","onClick","status","btnStyle","rest","buttonStyle","className","type","disabled","role","aria-hidden","ErrorMessage","errors","summaryMessage","length","message","Array","isArray","map","index","key","ErrorPopup","props","title","messages","push","style","css","position","padding","width","maxWidth","maxHeight","background","color","top","left","transform","zIndex","inx","dangerouslySetInnerHTML","__html","SvgNarrowRight","siteConfig","SvgLoading","height","viewBox","preserveAspectRatio","cx","cy","r","fill","stroke","strokeWidth","attributeName","repeatCount","dur","values","keyTimes","keySplines","calcMode","begin","Loading","loaded","setLoaded","loading","minHeight","display","justifyContent","alignItems","opacity","transition","timer","setTimeout","clearTimeout","isExternalLink","link","indexOf","getLinkFromElement","linkEl","getAttribute","getLinkInfo","origin","window","location","currentPath","pathname","linkFiltered","replace","linkLower","toLowerCase","isExternal","isHash","isTel","isMailTo","url","path","i","exts","isStaticFile","ext","getExtension","filename","split","pop","getFilename","toQueryString","params","Object","keys","encodeURIComponent","join","getYoutubeId","undefined","getSlug","text","getErrors","result","forEach","err","errorMessage","getErrorMessage","convertToObject","array","reduce","obj","item","convertToKeyValues","moveItem","list","fromIndex","toIndex","splice","removed","removeItem","insertItem","find","fn","findIndex","contains","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","e","rect","getBoundingClientRect","scrollLeft","pageXOffset","scrollTop","pageYOffset","isElementInViewport","bottom","right","getCurrentBreakpoint","bpHolder","getComputedStyle","getPropertyValue","formatMoney","number","fraction","formatter","Intl","NumberFormat","currency","minimumFractionDigits","toMonthlyCost","amount","frequency","isBlank","str","test","isEmpty","isNumeric","num","capitalize","expression","charAt","toUpperCase","slice","toFieldName","trim","toHtml","truncateWords","maxLen","separator","ellipsis","pos","lastIndexOf","substr","numberWithCommas","x","parts","toString","registerPlugin","ScrollToPlugin","formatNumber","Math","round","shortId","shortid","guid","uuid","toCamel","o","newO","origKey","newKey","hasOwnProperty","constructor","classNames","form","ui","money","random","object","isMobile","utils","resourcePath","env","coreUtils","site","useApi","setResponse","setErrors","setStatus","request","setRequest","fetch","res","ok","json","statusText","JSON","fetchData","hasErrors","containsErrorMessage","msg","finding","some","addErrors","errs","done","send","sendRaw","httpOptionFn","args","reset","usePost","formDataFn","data","method","post","stringify","sending","sendFormData","useGet","get","MAX","MIN","getScrollProgress","scroll","scrollY","progress","boundsTop","viewport","bounds","setClass","pr","range","prVal","min","max","y","removeTransform","getScreenSize","useRouter","useParams","useLocation","history","useHistory","useRouteMatch","useMemo","navigate","Redirect","hash","search","query","queryString","initialState","page","menu","popup","SiteLink","target","other","goToLink","externalHandler","linkInfo","handled","handleElementLink","preventDefault","stopPropagation","href","rel","LoginStatus","router","Fragment","fontSize","marginRight","catch","Login","username","setUsername","setPassword","setError","pending","setPending","margin","noValidate","onSubmit","htmlFor","id","name","required","autoFocus","onChange","event","AppHeader","src","alt","LoginLayout","LoginLayoutRoute","RenderComponent","component","render","matchProps","AppSideBar","DashboardLayout","checkAuth","DashboardLayoutRoute","Table","columns","useTable","useSortBy","getTableProps","getTableBodyProps","headerGroups","rows","prepareRow","headerGroup","getHeaderGroupProps","column","getHeaderProps","getSortByToggleProps","isSorted","isSortedDesc","row","getRowProps","cells","cell","getCellProps","ProductList","Header","accessor","Cell","c","productCode","localStorage","getItem","filterKeyword","setFilterKeyword","searchInField","search_str","escapeRegExp","filtered","filter","productName","filterList","float","placeholder","setItem","marginLeft","cursor","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","checked","optionValue","includes","DateSeparateInput","thisYear","year","setYear","month","setMonth","day","setDay","handleChangeInner","persist","months","selectStyle","fromYear","recentYear","handleChangeDay","handleChangeMonth","m","handleChangeYear","FileInput","Components","RadioListInput","option","inline","TextareaInput","textAreaRef","useRef","textAreaHeight","setTextAreaHeight","parentHeight","setParentHeight","current","h","scrollHeight","ref","CheckboxInput","CheckboxListInput","SelectInput","HiddenInput","renderControlDirect","Component","HtmlInput","getSiteControl","getControl","renderControl","formRoot","nameOrIndex","validateTraverse","errorsFromControl","errorsFromSub","useForm","initialFormModel","formModel","setFormModel","template","onControlChanged","controlFromEvent","querySelectorAll","getControlValue","onBeforeUpdateValue","validateGroup","successHandler","errorHandler","formValidate","model","controlRenderer","validateForm","getFiles","viewMode","setViewMode","htmlSource","setHtmlSource","newVal","editor","ClassicEditor","plugins","Essentials","Bold","Italic","Paragraph","List","RemoveFormat","Heading","Link","Font","ImagePlugin","ImageInsert","toolbar","heading","class","view","getData","categories","category","segments","styles","buildArray","items","itemArray","createGroup","specSectionList","linkTypeList","group","itemStatus","itemId","itemTypeCode","g","fb","itemValue","video","videoUrl","desc","qa","question","answer","spec","html","linkType","createItem","getItemValue","fns","ImageSelector","fieldName","field","packageChanged","isPackage","onAUChanged","forAU","onNZChanged","forNZ","youtubeCheckChanged","youtubeCheck","youtubeUrlChanged","youtubeUrl","useLayoutEffect","handleMessage","action","onSelection","WebPath","Alt","selectedMediaFiles","addEventListener","removeEventListener","onDragEnd","destination","source","droppableId","provided","snapshot","droppableProps","innerRef","isDraggingOver","draggableId","draggableProps","dragHandleProps","isDragging","ImageListItem","image","onPackageChanged","onYoutubeCheckChanged","onYoutubeUrlChanged","onRemove","w","open","openLibrary","marginBottom","MediaSelector","MetaImageSelector","marginTop","StoreSelector","editingStore","setEditingStore","storesInFrom","stores","storeName","editingStoreForm","onStoreSelectChanged","currentStores","storeCode","buyOnlineOverride","storeUrlOverride","notes","onEdit","store","storeInData","buyOnlineOptions","buyOnline","resetEditingStoreModel","Store","StoreEdit","onCancel","forProduct","overrides","country","ProductEditForm","currentTab","setCurrentTab","tabs","tabView","DetailsTab","WhereToBuyTab","SpecTab","SeeMoreTab","DiscoverMoreTab","FaqTab","RelatedTab","PhotoTab","GoogleMF","productUrlAU","productUrl","productUrlNZ","formVal","productStatusAU","productStatusNZ","textAlign","WordCounter","forMeta","tab","showTab","orgProductCode","relatedProducts","section","EditorPanel","addOptions","migRelatedProducts","from","ItemEditor","posterImage","toggleItem","Item","ProductEdit","categoryList","statusList","styleList","filterName","filterCode","bookletLink","metaImage","recipeBookletLink","category2","barcode","barcodeUPC","filters","priceAU","priceNZ","warranty","productImages","productStores","intro","metaDesc","trendingNow","useSparePartInstruction","sortingOrder","mpn","mfTitle","mfDesc","mfProductType1","mfProductType2","mfProductType3","mfProductType4","mfProductType5","howToSection","discoverMoreSection","faqSection","whereToBuySection","detailSection","specSection","seeMoreSection","getProductEditModel","results","ProductNew","productStatus","controlledPageCount","pageCount","controlledPageSize","pageSize","contolledTotalCount","totalCount","controlledPageIndex","pageIndex","controlledSortBy","sortBy","manualPagination","manualSortBy","usePagination","canPreviousPage","canNextPage","pageOptions","gotoPage","nextPage","previousPage","setPageSize","state","defaultValue","Number","WarrantyList","original","warrantyRegistrationId","setData","setPageCount","setTotalCount","setPageIndex","setSortBy","filterWM","setFilterWM","filterCountry","setFilterCountry","filterFrom","setFilterFrom","filterTo","setFilterTo","getSearchParam","ceil","totalCnt","useCallback","pageNo","keyword","menOrWomen","dateFrom","dateTo","onKeyPress","ExportCSV","WarrantyView","warrantyId","Warranty","Fld","firstName","lastName","dob","mobile","postcode","modelNumber","purchaseDate","whereToBuy","newsletter","interests","dateRegistered","fileAttachments","file","filePath","fileName","fontWeight","mailchimpStatus","mailchimpDateSent","mailchimpMessage","ResendMailchimp","whiteSpace","reload","StoreList","orgStoreCode","storeUrl","seq","iconPath","mailchimpName","getStoreEditModel","StoreEditForm","orgstoreCode","confirm","StoreNew","formatDateTime","formatStr","ContactList","contactId","filterContactSite","filterContactStatus","setFilterContactStatus","ContactView","Contact","dateSent","backgroundColor","contactStatus","ChangeStatus","JoinList","joinRegistrationId","JoinView","joinId","Join","App","exact","Boolean","hostname","ReactDOM","getElementById","navigator","serviceWorker","ready","registration","unregister"],"mappings":"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","file":"static/js/main.627eb830.chunk.js","sourcesContent":["// closest\r\n\r\nif (!Element.prototype.matches) {\r\n Element.prototype.matches = Element.prototype.msMatchesSelector || \r\n Element.prototype.webkitMatchesSelector;\r\n}\r\n\r\nif (!Element.prototype.closest) {\r\n Element.prototype.closest = function(s) {\r\n var el = this;\r\n\r\n do {\r\n if (el.matches(s)) return el;\r\n el = el.parentElement || el.parentNode;\r\n } while (el !== null && el.nodeType === 1);\r\n return null;\r\n };\r\n}\r\n\r\n\r\n// getBoundingClientRect","const overloading = {\n breakpointNames: ['sm', 'md', 'lg', 'xl', 'xxl'],\n breakpoints: [576, 768, 992, 1200, 1600]\n}\n\nconst variables = {\n familyBase: '\"Gotham\",sans-serif',\n familyHeader: '\"DIN Next LT Pro\",serif',\n\n primaryColor: '#009245',\n secondaryColor: '#000',\n fontColor: '#404040',\n bgColor: '#ebebeb',\n\n ...overloading\n}\n\nexport default variables;","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 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 iconColors = {\n primary: variables.primaryColor,\n secondary: variables.secondaryColor || '#000'\n}\n\nconst firebaseSettings = {\n apiKey: \"AIzaSyAtuNCYY5OdcjDEVWuQZFkqdEiwUecEuGM\",\n authDomain: \"jaba-pwa.firebaseapp.com\",\n databaseURL: \"https://jaba-pwa.firebaseio.com\",\n projectId: \"jaba-pwa\",\n storageBucket: \"jaba-pwa.appspot.com\",\n messagingSenderId: \"727092207149\",\n appId: \"1:727092207149:web:b047c9858655295ef562a4\"\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}\n\nexport default {\n cssEmotion,\n iconColors,\n firebaseSettings,\n apiNetJwt\n}","import React, { useContext, createContext } from \"react\";\r\nimport * as firebase from \"firebase/app\";\r\nimport \"firebase/auth\";\r\nimport config from '../../../config';\r\nimport { getFirebaseUser } from './authHelper';\r\n\r\nfirebase.initializeApp(config.firebaseSettings);\r\n\r\nconst authContext = createContext();\r\n\r\n// Provider component that wraps your app and makes auth object available to any child component that calls useAuth().\r\nexport function ProvideAuth({ children }) {\r\n //console.log('ProvideAuth')\r\n const auth = useProvideAuth();\r\n return {children};\r\n}\r\n\r\n// Hook for child components to get the auth object and re-render when it changes.\r\nexport const useAuth = () => {\r\n return useContext(authContext);\r\n};\r\n\r\n// Provider hook that creates auth object and handles state\r\nfunction useProvideAuth() {\r\n const [user, setUser] = React.useState(null);\r\n\r\n //#region Firebase methods\r\n const signin = (email, password) => {\r\n return firebase\r\n .auth()\r\n .signInWithEmailAndPassword(email, password)\r\n .then(async response => {\r\n setUser(response.user);\r\n return response.user;\r\n });\r\n };\r\n\r\n const signup = (email, password) => {\r\n return firebase\r\n .auth()\r\n .createUserWithEmailAndPassword(email, password)\r\n .then(async response => {\r\n setUser(response.user);\r\n return response.user;\r\n });\r\n };\r\n\r\n const signout = () => {\r\n return firebase\r\n .auth()\r\n .signOut()\r\n .then(async () => {\r\n setUser(null);\r\n });\r\n };\r\n\r\n const sendPasswordResetEmail = email => {\r\n return firebase\r\n .auth()\r\n .sendPasswordResetEmail(email)\r\n .then(() => {\r\n return true;\r\n });\r\n };\r\n\r\n const confirmPasswordReset = (code, password) => {\r\n return firebase\r\n .auth()\r\n .confirmPasswordReset(code, password)\r\n .then(() => {\r\n return true;\r\n });\r\n };\r\n //#endregion\r\n\r\n const currentFirebaseUser = async () => await getFirebaseUser();\r\n const loggedIn = async () => {\r\n if (user) return user;\r\n else return await getFirebaseUser();\r\n }\r\n\r\n React.useEffect(() => {\r\n const unsubscribe = firebase.auth().onAuthStateChanged(async user => {\r\n //console.log('onAuthStateChanged', user)\r\n if (user) {\r\n await setUser(user);\r\n } else {\r\n await setUser(null);\r\n }\r\n });\r\n\r\n return () => unsubscribe();\r\n // eslint-disable-next-line \r\n }, []);\r\n\r\n\r\n // Return the user object and auth methods\r\n return {\r\n user,\r\n signin,\r\n signup,\r\n signout,\r\n sendPasswordResetEmail,\r\n confirmPasswordReset,\r\n // status\r\n loggedIn,\r\n currentFirebaseUser\r\n };\r\n}\r\n","const config = {\n isProd: process.env.NODE_ENV === \"production\",\n apiBase: process.env.REACT_APP_API_ENDPOINT,\n publicBase: process.env.PUBLIC_URL,\n resourceBase: process.env.REACT_APP_RESOURCE_BASEURL,\n cmsEndpoint: process.env.REACT_APP_CMS_ENDPOINT,\n baseUrlAU: process.env.REACT_APP_BASEURL_AU,\n baseUrlNZ: process.env.REACT_APP_BASEURL_NZ,\n ver: process.env.REACT_APP_VERSION,\n updateDate: process.env.REACT_APP_UPDATED_AT\n}\n\nconsole.log(process.env, config)\nexport default {\n ...config\n}","import React from 'react';\n\nexport function Button({onClick, status, children, btnStyle='primary', ...rest}) {\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","import * as React from \"react\";\r\nimport siteConfig from '../../../config';\r\n\r\nconst iconColors = (siteConfig && siteConfig.iconColors) || { primary: \"#eee\", secondary: \"#000\" }\r\n\r\nfunction SvgLoading(props) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default SvgLoading;","import React from 'react';\r\nimport { LoadingCircle } from '../../icons';\r\n/** @jsx jsx */\r\nimport { css, jsx } from '@emotion/core'\r\n\r\nexport function Loading(props) {\r\n const [loaded, setLoaded] = React.useState(false);\r\n\r\n const style = {\r\n loading: css({\r\n minHeight: '300px',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n opacity: '0',\r\n transition: 'all 1s',\r\n }),\r\n loaded: css({\r\n opacity: '1'\r\n })\r\n }\r\n\r\n React.useEffect(() => {\r\n let timer = setTimeout(() => setLoaded(true), 500)\r\n return () => { clearTimeout(timer) }\r\n }, [])\r\n \r\n return
\r\n \r\n
\r\n}","export function isExternalLink(link){\r\n return link && (link.indexOf('https://') === 0 || link.indexOf('http://') === 0 || link.indexOf('://') === 0);\r\n}\r\n\r\nexport function getLinkFromElement(el){\r\n if (!el) return null;\r\n const linkEl = el.closest('a');\r\n //console.log(el, linkEl);\r\n if (linkEl){\r\n return linkEl.getAttribute('href');\r\n }\r\n return null;\r\n}\r\n\r\n\r\n// router utils\r\nexport function getLinkInfo(link) {\r\n if (!link) return null;\r\n\r\n const origin = typeof window !== `undefined` && window.location && window.location.origin;\r\n const currentPath = typeof window !== `undefined` && window.location && window.location.pathname;\r\n let linkFiltered = link.replace(origin, '').replace(currentPath + '#', '#');\r\n let linkLower = link.toLowerCase();\r\n\r\n //if (isStaticFile(linkLower)) return null;\r\n const isExternal = isExternalLink(linkFiltered);\r\n const isHash = linkFiltered.indexOf('#') === 0;\r\n const isTel = linkFiltered.indexOf('tel:') === 0;\r\n const isMailTo = linkFiltered.indexOf('mailto:') === 0;\r\n const type = (isHash && 'hash') || (isTel && 'tel') || (isMailTo && 'mailto') || \r\n (isStaticFile(linkLower) && 'static') || (isExternal && 'external') || 'internal';\r\n\r\n return { url: linkFiltered, type: type, ext: getExtension(link) };\r\n}\r\n\r\nvar exts = ['.pdf', '.jpg', '.png', '.gif', '.docx', '.doc']\r\nfunction isStaticFile(path) {\r\n for(let i = 0; i < exts.length; i++) {\r\n if (path.indexOf(exts[i]) >= 0) return true;\r\n }\r\n return false;\r\n}\r\n\r\nexport function getExtension(filename) {\r\n if (!filename || filename.indexOf('.') < 0) return null;\r\n return filename.split('.').pop().toLowerCase();\r\n}\r\n\r\nexport function getFilename(url) {\r\n return url.split('/').pop().split('?')[0];\r\n}\r\n\r\n//\r\nexport function toQueryString(params) {\r\n var queryString = Object.keys(params).map((key) => {\r\n return encodeURIComponent(key) + '=' + encodeURIComponent(params[key])\r\n }).join('&');\r\n return queryString;\r\n}\r\n\r\nexport function getYoutubeId(url){\r\n url = url.split(/(vi\\/|v=|\\/v\\/|youtu\\.be\\/|\\/embed\\/)/);\r\n return (url[2] !== undefined) ? url[2].split(/[^0-9a-z_-]/i)[0] : url[0];\r\n}\r\n\r\nexport function getSlug(text){\r\n return text.toLowerCase().replace(/ /g,'-').replace(/[-]+/g, '-').replace(/[^\\w-]+/g,'');\r\n}","//#region error json parsing\r\nexport const getErrors = (result) => {\r\n let errors = [];\r\n if (result && result.errors && result.errors.length > 0) {\r\n result.errors.forEach(err => {\r\n errors.push(err.errorMessage);\r\n });\r\n }\r\n return errors;\r\n}\r\n\r\nexport const getErrorMessage = (result) => {\r\n let errors = getErrors(result);\r\n return errors.join(\" \");\r\n}\r\n//#endregion","//#region conversion between array and object\r\nexport const convertToObject = (array, key) => {\r\n const initialValue = {};\r\n return array.reduce((obj, item) => {\r\n return {\r\n ...obj,\r\n [item[key]]: item,\r\n };\r\n }, initialValue);\r\n};\r\n\r\nexport const convertToKeyValues = (array, key, value) => {\r\n const initialValue = {};\r\n return array.reduce((obj, item) => {\r\n return {\r\n ...obj,\r\n [item[key]]: item[value],\r\n };\r\n }, initialValue);\r\n};\r\n//#endregion\r\n\r\n//#region array helper functions\r\nexport const moveItem = (list, fromIndex, toIndex) => {\r\n //const list = Array.from(array);\r\n const [removed] = list.splice(fromIndex, 1);\r\n list.splice(toIndex, 0, removed);\r\n\r\n return list;\r\n};\r\n\r\nexport const removeItem = (list, index) => {\r\n //const list = Array.from(array);\r\n list.splice(index, 1);\r\n\r\n return list;\r\n};\r\n\r\nexport const 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};\r\n\r\nexport const findIndex = (list, fn) => {\r\n if (!list) return -1;\r\n for (let i = 0; i < list.length; i++) {\r\n if (fn(list[i])) {\r\n return i;\r\n }\r\n }\r\n};\r\n\r\nexport const contains = (list, fn) => {\r\n return findIndex(list, fn) >= 0;\r\n}\r\n\r\nexport const sum = (list, fn) => {\r\n if (!list) return 0;\r\n let total = 0;\r\n for (let i = 0; i < list.length; i++) {\r\n total += fn(list[i]) || 0\r\n }\r\n return total\r\n}\r\n\r\nexport const equal = (list1, list2, fn) => {\r\n if (!list1 && !list2) return true;\r\n if (!list1 || !list2) return false;\r\n if (list1.length !== list2.length) return false;\r\n for (let i = 0; i < list1.length; i++) {\r\n let found = false;\r\n for (let j = 0; j < list2.length; j++) {\r\n if(fn(list1[i], list2[i])) {\r\n found = true;\r\n break;\r\n }\r\n }\r\n if (!found) return false;\r\n }\r\n return true;\r\n}\r\n//#endregion\r\n\r\n//#region sorting helpers\r\nexport const caseInsensitiveCompare = function (a, b) {\r\n return a.toLowerCase().localeCompare(b.toLowerCase());\r\n}\r\n\r\n// put the null items at the end.\r\nexport const compareIgnoreEmpty = function (asc) {\r\n return asc ?\r\n function (a, b) {\r\n return (a === null || isNaN(a)) - (b === null || isNaN(b)) || +(a > b) || -(a < b);\r\n }\r\n :\r\n function (a, b) {\r\n return (a === null || isNaN(a)) - (b === null || isNaN(b)) || -(a > b) || +(a < b);\r\n }\r\n}\r\n//#endregion","import parse from 'date-fns/parse';\r\nimport parseISO from 'date-fns/parseISO';\r\n\r\n//#region manipulation\r\nexport const addDays = (date, days) => {\r\n var result = new Date(date)\r\n result.setDate(result.getDate() + days)\r\n return result\r\n}\r\n//#endregion\r\n\r\n//#region format\r\nexport function formatYYYYMMDD(dateObj) {\r\n const date = toDate(dateObj);\r\n //console.log(dateObj, date)\r\n if (!date) return '';\r\n var dd = date.getDate();\r\n var mm = date.getMonth() + 1; //January is 0!\r\n\r\n var yyyy = date.getFullYear();\r\n if (dd < 10) {\r\n dd = '0' + dd;\r\n } \r\n if (mm < 10) {\r\n mm = '0' + mm;\r\n } \r\n return (`${yyyy}-${mm}-${dd}`)\r\n}\r\n\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}","import shortid from 'shortid';\r\nimport uuid from 'uuid/v4';\r\n\r\nexport function shortId() {\r\n return shortid();\r\n}\r\n\r\nexport function guid() {\r\n return uuid();\r\n}","export function toCamel(o) {\r\n var newO, origKey, newKey, value\r\n if (o instanceof Array) {\r\n return o.map(function(value) {\r\n if (typeof value === \"object\") {\r\n value = toCamel(value)\r\n }\r\n return value\r\n })\r\n } else {\r\n newO = {}\r\n for (origKey in o) {\r\n if (o.hasOwnProperty(origKey)) {\r\n newKey = (origKey.charAt(0).toLowerCase() + origKey.slice(1) || origKey).toString()\r\n value = o[origKey]\r\n if (value instanceof Array || (value !== null && value.constructor === Object)) {\r\n value = toCamel(value)\r\n }\r\n newO[newKey] = value\r\n }\r\n }\r\n }\r\n return newO\r\n}","import classNames from 'classnames';\r\nimport * as url from './url';\r\nimport * as form from './form';\r\nimport * as array from './array';\r\nimport * as date from './date';\r\nimport * as css from './css';\r\nimport * as ui from './ui';\r\nimport * as money from './money';\r\nimport * as text from './text';\r\nimport * as random from './random';\r\nimport * as object from './object';\r\n\r\nexport default { classNames, url, form, array, date, css, ui, money, text, random, object};","import utils from \"utils\";\nimport env from 'env';\n\nexport const isMobile = () => {\n var width = utils.css.screenWidth()\n return width < 768\n}\n\nexport function resourcePath(url){\n return utils.url.isExternalLink(url)? url : env.resourceBase + url;\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 setErrors(['Error - ' + res.status + (res.statusText && (' - ' + res.statusText))]);\r\n setStatus('error')\r\n return;\r\n }\r\n\r\n //const json = await res.json();\r\n const text = await res.text();\r\n const json = text && text.length ? JSON.parse(text) : null;\r\n //console.log(json);\r\n\r\n // check if ajax result from c#\r\n if (json && json.errors && json.errors.length > 0) {\r\n setErrors(utils.form.getErrors(json));\r\n setStatus('error')\r\n return;\r\n }\r\n\r\n setResponse(json);\r\n setStatus('done')\r\n } catch (err) {\r\n //console.log(error, error.toString(), typeof error, JSON.stringify(error))\r\n setErrors([err.toString()]);\r\n setStatus('error')\r\n }\r\n };\r\n fetchData();\r\n }, [request]);\r\n\r\n const containsErrorMessage = (msg) => {\r\n const finding = (msg || '').toLowerCase()\r\n return errors.some(x => (x || '').toLowerCase().indexOf(finding) >= 0)\r\n }\r\n\r\n //return [ response, error, status, (...args) => setRequest(fn(...args)) ];\r\n return {\r\n request: request,\r\n response: response,\r\n errors: errors,\r\n status: status,\r\n hasErrors: () => status === 'error', \r\n containsErrorMessage: containsErrorMessage,\r\n addErrors: (errs) => {\r\n setErrors(...errors, ...errs)\r\n setStatus('error')\r\n },\r\n done: () => status === 'done',\r\n send: (...args) => {setStatus('ready'); setRequest(fn(...args))},\r\n sendRaw: (httpOptionFn, ...args) => {setStatus('ready'); setRequest(httpOptionFn(...args))},\r\n reset: () => {\r\n setStatus('ready');\r\n 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 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 { 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 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 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\n/** @jsx jsx */\r\nimport { jsx } from '@emotion/core'\r\n\r\nimport { Link } from 'react-router-dom';\r\nimport { useAuth } from '../../../../auth';\r\nimport { useRouter } from '../../../../components';\r\n\r\nexport function LoginStatus(props) {\r\n const auth = useAuth();\r\n const router = useRouter();\r\n\r\n //console.log(auth.user, auth.session, auth.loggedIn())\r\n\r\n function signout(e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n auth.signout().then(user => {\r\n router.push('/admin/login')\r\n }).catch(error => {\r\n console.log(error)\r\n })\r\n }\r\n\r\n const email = (auth.user && auth.user.email) || '';\r\n return (\r\n
\r\n {auth.loggedIn() ? (\r\n \r\n {email}\r\n \r\n \r\n ) : (\r\n Login\r\n )}\r\n
)\r\n}","import React from 'react';\r\nimport { useAuth } from '../../../../auth';\r\nimport { useRouter } from '../../../../components';\r\n\r\nexport function Login(props) {\r\n const [username, setUsername] = React.useState(\"\");\r\n const [password, setPassword] = React.useState(\"\");\r\n const [error, setError] = React.useState(\"\");\r\n const [pending, setPending] = React.useState(false);\r\n const auth = useAuth();\r\n\r\n const router = useRouter();\r\n\r\n function submit(e) {\r\n setPending(true);\r\n //console.log('loggin', username, password)\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n auth.signin(username, password).then(user => {\r\n console.log(user)\r\n setPending(false);\r\n setError('')\r\n router.push('/admin/dashboard')\r\n }).catch(error => {\r\n console.log(error)\r\n setPending(false);\r\n setError(error.message)\r\n })\r\n\r\n }\r\n return (\r\n
\r\n

Log In

\r\n
\r\n {/* */}\r\n
\r\n
\r\n
\r\n \r\n {\r\n setUsername(event.target.value);\r\n }} />\r\n
\r\n Email is invalid\r\n
\r\n
\r\n\r\n
\r\n \r\n {\r\n setPassword(event.target.value);\r\n }} />\r\n
\r\n Password is required\r\n
\r\n
\r\n {/* \r\n */}\r\n\r\n
\r\n \r\n
\r\n\r\n {error &&
{error}
}\r\n\r\n {/*
\r\n \r\n
*/}\r\n\r\n
\r\n\r\n {/*
\r\n Or Log in with \r\n
\r\n \r\n
\r\n
\r\n\r\n \r\n
\r\n Don't have an account? Sign Up\r\n
*/}\r\n
\r\n
\r\n
)\r\n}","import React from 'react';\nimport { SiteLink } from 'components';\nimport { LoginStatus } from 'auth';\n\nexport function AppHeader() {\n return (\n
\n
\n \n \"logo\"\n \n
\n \n
\n );\n}\n","import React from 'react';\nimport { Route } from 'react-router-dom';\nimport { AppHeader } from 'layout/appHeader';\n\nconst LoginLayout = ({ children }) => (\n
\n \n
\n
\n {children}\n
\n
\n
\n);\n\nconst LoginLayoutRoute = ({ component: RenderComponent, ...rest }) => {\n return (\n (\n \n \n \n )} />\n )\n};\n\nexport default LoginLayoutRoute; ","import React from 'react';\nimport { SiteLink } from 'components';\n\nexport function AppSideBar() {\n return (\n
\n
\n
\n
Data
\n
    \n
  • \n Products\n
  • \n
\n
\n\n
\n
WHERE TO BUY
\n
    \n
  • \n Australia\n
  • \n
  • \n New Zealand\n
  • \n
\n
\n\n
\n
WARRANTY
\n
    \n
  • \n Warranty Registrations\n
  • \n
\n
\n\n
\n
CONTACT
\n
    \n
  • \n Contact Submission\n
  • \n
\n
\n\n
\n
JOIN
\n
    \n
  • \n Join Submission\n
  • \n
\n
\n\n
\n
\n );\n}\n","import React from 'react';\nimport { Route } from 'react-router-dom';\n\nimport { AppHeader } from 'layout/appHeader';\nimport { AppSideBar } from 'layout/appSideBar';\n\nimport { useRouter } from '../components';\nimport { useAuth } from 'auth';\n\nconst DashboardLayout = ({ children, ...rest }) => {\n const { Redirect } = useRouter();\n const auth = useAuth();\n\n React.useEffect(() => {\n const checkAuth = async() => {\n if (!(await auth.loggedIn())) {\n return \n }\n }\n checkAuth();\n }, [auth]);\n\n return (\n
\n \n
\n \n
\n
\n {children}\n
\n
\n
\n
\n )\n}\n\nconst DashboardLayoutRoute = ({ component: RenderComponent, ...rest }) => {\n return (\n (\n \n \n \n )} />\n )\n};\n\nexport default DashboardLayoutRoute;","import React from 'react'\nimport { useTable, useSortBy } from 'react-table'\n\nexport function Table({ columns, data }) {\n const {\n getTableProps,\n getTableBodyProps,\n headerGroups,\n rows,\n prepareRow,\n } = useTable(\n {\n columns,\n data,\n },\n useSortBy\n )\n\n return (\n <>\n \n \n {headerGroups.map(headerGroup => (\n \n {headerGroup.headers.map(column => (\n // Add the sorting props to control sorting. For this example\n // we can add them into the header props\n \n ))}\n \n ))}\n \n \n {rows.map(\n (row, i) => {\n prepareRow(row);\n return (\n \n {row.cells.map(cell => {\n return (\n \n )\n })}\n \n )\n }\n )}\n \n
\n {column.render('Header')}\n {/* Add a sort direction indicator */}\n \n {column.isSorted\n ? column.isSortedDesc\n ? ' 🔽'\n : ' 🔼'\n : ''}\n \n
{cell.render('Cell')}
\n \n )\n}\n","import React from 'react';\nimport env from 'env';\nimport { Table } from 'components/table/table';\nimport { useGet } from 'components';\nimport utils from 'utils';\nimport { SiteLink } from 'components';\nimport { Loading, ErrorPopup } from 'components';\n\nexport function ProductList(props) {\n const columns = React.useMemo(\n () => [\n {\n Header: 'Product Name',\n accessor: 'productName',\n Cell: (c) => {\n //console.log(c)\n return ({c.cell.value})\n }\n },\n {\n Header: 'Product Code',\n accessor: 'productCode',\n },\n {\n Header: 'Sorting Order',\n accessor: 'sortingOrder',\n },\n {\n Header: 'Status AU',\n accessor: 'productStatusTextAU',\n },\n {\n Header: 'Status NZ',\n accessor: 'productStatusTextNZ',\n },\n {\n Header: 'Trending Now',\n accessor: 'trendingNow',\n Cell: (c) => {\n return !!c.cell.value ? 'Y' : ''\n }\n },\n {\n Header: 'Cat 1',\n accessor: 'category',\n },\n {\n Header: 'Price AU',\n accessor: 'priceAU',\n Cell: (c) => c.cell.value && utils.money.formatMoney(c.cell.value)\n },\n {\n Header: 'Price NZ',\n accessor: 'priceNZ',\n Cell: (c) => c.cell.value && utils.money.formatMoney(c.cell.value)\n }\n ],\n []\n )\n\n // const [filterWM, setFilterWM] = React.useState(window.localStorage.getItem('filterWM') || 'W');\n const [filterKeyword, setFilterKeyword] = React.useState(window.localStorage.getItem('filterKeyword') || '');\n const get = useGet();\n\n React.useEffect(() => {\n get.send(env.apiBase + '/api/productAdmin/getProducts');\n //get.send(env.apiBase + '/api/productAdmin/getProducts?q=' + encodeURIComponent(filterKeyword));\n //get.send(env.apiBase + '/api/productAdmin/getProducts?wm=' + filterWM);\n // eslint-disable-next-line\n }, []); //filterWM\n \n if (get.loading()) {\n return \n } else if (get.hasErrors()) {\n return \n }\n\n // const changeFilterWM = (e) => {\n // setFilterWM(e.target.value)\n // window.localStorage.setItem('filterWM', e.target.value);\n // }\n\n const changeFilterKeyword = (e) => {\n setFilterKeyword(e.target.value)\n window.localStorage.setItem('filterKeyword', e.target.value);\n }\n\n function filterList(data) {\n let filtered = data;\n if (filterKeyword) {\n filtered = filtered.filter(x => searchInField(x.productCode, filterKeyword) || searchInField(x.productName, filterKeyword))\n }\n return filtered;\n }\n\n function searchInField(str, search_str) {\n if (!str || !search_str) return false;\n const result = str.search(new RegExp(escapeRegExp(search_str), \"i\"));\n return result >= 0\n }\n\n function escapeRegExp(str) {\n // eslint-disable-next-line\n return str.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, \"\\\\$&\");\n }\n\n function removeFilter() {\n setFilterKeyword('')\n window.localStorage.setItem('filterKeyword', '');\n }\n\n// console.log(get)\n const data = get.response;\n const filtered = filterList(data);\n //console.log(filtered)\n\n return (\n <>\n

Products

\n
\n Add Product\n
\n \n {filterKeyword && clear filter}\n
\n {/* */}\n
\n \n \n );\n}\n","export function findControl(controlNameOrIndex, root) {\r\n if (typeof controlNameOrIndex === 'number' && root && root.controls.length > controlNameOrIndex) return root.controls[controlNameOrIndex];\r\n return findControlTraverse(controlNameOrIndex, root);\r\n}\r\n\r\nfunction findControlTraverse(controlName, control) {\r\n if (!control) return null;\r\n if (control.name === controlName) return control;\r\n if (control.controls && control.controls.length > 0) {\r\n for (let i = 0; i < control.controls.length; i++) {\r\n const found = findControlTraverse(controlName, control.controls[i]);\r\n if (found) {\r\n return found;\r\n }\r\n }\r\n }\r\n return null;\r\n}\r\n\r\nexport function findControlById(id, root) {\r\n return findControlByIdTraverse(id, root);\r\n}\r\n\r\nfunction findControlByIdTraverse(id, control) {\r\n if (!control) return null;\r\n if (control.id === id) return control;\r\n if (control.controls && control.controls.length > 0) {\r\n for (let i = 0; i < control.controls.length; i++) {\r\n const found = findControlByIdTraverse(id, control.controls[i]);\r\n if (found) {\r\n return found;\r\n }\r\n }\r\n }\r\n return null;\r\n}\r\n\r\nexport function getValue(root) {\r\n //console.log(root)\r\n return getValueTraverse(root);\r\n}\r\n\r\nconst helperFns = {\r\n getValueTraverse: getValueTraverse,\r\n getFilesTraverse: getFilesTraverse\r\n}\r\n\r\nfunction getKeyValueTraverse(control) {\r\n let keyValue = {};\r\n keyValue[control.name] = getValueTraverse(control);\r\n return keyValue\r\n}\r\n\r\nfunction getValueTraverse(control) {\r\n //console.log(control);\r\n if (control.controlType === 'control') {\r\n if (control.customValueFn)\r\n return control.customValueFn(control, helperFns);\r\n\r\n return control.value;\r\n } else if (control.controlType === 'group') {\r\n if (control.customValueFn)\r\n return control.customValueFn(control, helperFns);\r\n\r\n let value = {};\r\n for (let i = 0; i < control.controls.length; i++) {\r\n value = { ...value, ...getKeyValueTraverse(control.controls[i]) };\r\n }\r\n return value;\r\n } else if (control.controlType === 'array') {\r\n if (control.customValueFn)\r\n return control.customValueFn(control, helperFns);\r\n\r\n const array = [];\r\n for (let i = 0; i < control.controls.length; i++) {\r\n array.push(getValueTraverse(control.controls[i]))\r\n }\r\n return array;\r\n }\r\n return null;\r\n}\r\n\r\nexport function getFiles(root) {\r\n //console.log(root)\r\n return getFilesTraverse(root);\r\n}\r\n\r\nfunction getFilesTraverse(control) {\r\n if (control.controlType === 'control') {\r\n return control.files ? [{ name: control.name, files: control.files }] : [];\r\n } else if (control.controlType === 'group') {\r\n let files = [];\r\n for (let i = 0; i < control.controls.length; i++) {\r\n files.push(...getFilesTraverse(control.controls[i]));\r\n }\r\n return files;\r\n } else if (control.controlType === 'array') {\r\n let files = [];\r\n for (let i = 0; i < control.controls.length; i++) {\r\n files.push(...getFilesTraverse(control.controls[i]));\r\n }\r\n return files;\r\n }\r\n return [];\r\n}","//import uuid from 'uuid/v4';\r\nimport shortid from 'shortid';\r\nimport * as formModelHelper from './formModelHelper';\r\n\r\n//#region helpers\r\nfunction findIndexById(id) {\r\n for (let i = 0; i < this.controls.length; i++) {\r\n if (this.controls[i].id === id) return i;\r\n }\r\n return -1;\r\n}\r\n//#endregion\r\n\r\nconst group = (controls) => {\r\n const controlArray = [];\r\n //console.log('group', controls, typeof controls);\r\n if (controls && typeof controls === 'object') {\r\n Object.keys(controls).forEach(key => {\r\n controlArray.push(abstractControl(key, controls[key]))\r\n })\r\n }\r\n\r\n const ctrl = {\r\n controlType: 'group',\r\n id: shortid(),\r\n controls: controlArray,\r\n find: (name) => controlArray.find((x) => x.name === name),\r\n customValueFn: null, // function\r\n disableValidators: false\r\n }\r\n ctrl.getValue = () => formModelHelper.getValue(ctrl)\r\n ctrl.controls.forEach(x => x.parent = ctrl)\r\n\r\n return ctrl\r\n}\r\n\r\nconst array = (controls) => {\r\n //console.log('array', controls);\r\n const ctrl = {\r\n controlType: 'array',\r\n id: shortid(),\r\n controls: controls,\r\n findIndexById: findIndexById\r\n }\r\n ctrl.getValue = () => formModelHelper.getValue(ctrl)\r\n ctrl.controls.forEach(x => x.parent = ctrl)\r\n\r\n return ctrl\r\n}\r\n\r\nconst abstractControl = (name, controlObject) => {\r\n //console.log('abstractControl', name, controlObject);\r\n if (!controlObject) return null;\r\n // array or group\r\n if (controlObject.controlType) {\r\n controlObject.name = name;\r\n return controlObject;\r\n } else {\r\n return control(name, controlObject)\r\n }\r\n}\r\n\r\nconst control = (name, [value, validators, controlOptions]) => {\r\n //const { label, type, options, style } = controlOptions || {};\r\n //console.log(value, validators, label, type, options)\r\n return {...{\r\n controlType: 'control',\r\n id: shortid(),\r\n name: name,\r\n value: value,\r\n validators: validators || [],\r\n touched: false,\r\n incomplete: false,\r\n findValidator: (type) => (validators || []).find((x) => x.type === type),\r\n // label: label,\r\n // type: type,\r\n // options: options,\r\n // style: style\r\n }, ...controlOptions};\r\n}\r\n\r\nexport default { group, array }","import utils from '../../utils';\r\n\r\nexport function hasRequiredValidator(control) {\r\n if (!control) return false;\r\n return !!control.findValidator('required')\r\n}\r\n\r\nexport function getNameForValidator(label, name) {\r\n return utils.text.toFieldName(label || name);\r\n}\r\n\r\nexport function getValidatorOptions(params) {\r\n const defaultOpt = { continueToValidate: false }\r\n return params ? { ...defaultOpt, ...params } : defaultOpt;\r\n}\r\n\r\nexport function createValidator(type, message, opt, validate) {\r\n const validator =\r\n {\r\n type: type,\r\n disabled: false,\r\n ...getValidatorOptions(opt),\r\n message: message,\r\n validate: validate\r\n }\r\n return validator;\r\n}","import { createValidator, getNameForValidator } from '../validatorHelper';\r\n\r\nexport function Required(message = null, opt = null) {\r\n return createValidator('required', message, opt, function(control, e, validateOpt) {\r\n if (validateOpt.triggeredByChange && control.incomplete) return null;\r\n return isEmpty(control.value) ? (message || (getNameForValidator(control.label, control.name) + ' is required.')) : null\r\n })\r\n}\r\n\r\nfunction isEmpty(val) {\r\n if (Array.isArray(val))\r\n return val.length === 0;\r\n return !val && val !== 0;\r\n}\r\n","import { createValidator, getNameForValidator } from '../validatorHelper';\r\n\r\nexport function Email(message = null, opt = null) {\r\n return createValidator('email', message, opt, function(control, e, validateOpt) {\r\n if (validateOpt.triggeredByChange && control.incomplete) return null;\r\n // only validate for blur keydown tab\r\n if (e && e.type === 'change') return null;\r\n return !isEmpty(control.value) && !isValidEmail(control.value) ? (message || (getNameForValidator(control.label, control.name) + ' - Invalid email.')) : null\r\n })\r\n}\r\n\r\n\r\nexport const isValidEmail = mail => {\r\n const regex = /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\r\n return regex.test(mail);\r\n}\r\n\r\nfunction isEmpty(val) {\r\n if (Array.isArray(val))\r\n return val.length === 0;\r\n return !val && val !== 0;\r\n}\r\n","import { createValidator, getNameForValidator } from '../validatorHelper';\r\nimport utils from '../../../utils';\r\n\r\nexport function ValidateDate(message = null, opt = null) {\r\n return createValidator('date', message, opt, function(control, e, validateOpt) {\r\n if (validateOpt.triggeredByChange && control.incomplete) return null;\r\n return !isDate(control.value) ? (message || (getNameForValidator(control.label, control.name) + ' is invalid.')) : null\r\n })\r\n}\r\n\r\nexport function PastDate(message = null, opt = null) {\r\n return createValidator('past-date', message, opt, function(control, e, validateOpt) {\r\n if (validateOpt.triggeredByChange && control.incomplete) return null;\r\n return !isPast(control.value) ? (message || (getNameForValidator(control.label, control.name) + ' is invalid.')) : null\r\n })\r\n}\r\n\r\nfunction isDate(val) {\r\n if (val) {\r\n const date = utils.date.toDate(val);\r\n return !!date;\r\n }\r\n return false\r\n}\r\n\r\nfunction isPast(val) {\r\n if (val) {\r\n const date = utils.date.toDate(val);\r\n //console.log(date, typeof date)\r\n if (date){\r\n const now = new Date();\r\n return date.getTime() < now.getTime();\r\n }\r\n }\r\n return false\r\n}\r\n","import { createValidator, getNameForValidator } from '../validatorHelper';\r\n\r\nexport function Length(message = null, opt = null) {\r\n return createValidator('email', message, opt, function(control, e, validateOpt, validator) {\r\n if (validateOpt.triggeredByChange && control.incomplete) return null;\r\n return !isValidLength(control.value, validator) ? (message || (getNameForValidator(control.label, control.name) + ' - Invalid length.')) : null\r\n })\r\n}\r\n\r\n\r\nexport const isValidLength = (text, validator) => {\r\n const length = (text || '').length;\r\n if (validator.min && length < validator.min) return false;\r\n if (validator.max && length > validator.max) return false;\r\n return true;\r\n}\r\n","import { Required } from './validators/required';\r\nimport { Email } from './validators/email';\r\nimport { ValidateDate, PastDate } from './validators/date';\r\nimport { Length } from './validators/length';\r\n\r\nconst validateControl = (control, e, validateOpt) => {\r\n const errors = [];\r\n const validators = control.validators || [];\r\n for (let i = 0; i < validators.length; i++) {\r\n const validator = validators[i];\r\n if (!validator.disabled) {\r\n const error = validator.validate && validator.validate(control, e, validateOpt, validator);\r\n if (error) {\r\n errors.push(error);\r\n //console.log(error, control, validator, e)\r\n\r\n if (!validator.continueToValidate) break;\r\n }\r\n }\r\n }\r\n control.errors = errors;\r\n return errors;\r\n}\r\n\r\nexport default {\r\n Required, Email, Date: ValidateDate, PastDate, Length, validateControl\r\n}","import utils from '../../utils';\r\nimport React from 'react';\r\nimport { hasRequiredValidator } from './validatorHelper';\r\n\r\nexport function getLabel(control, formOption) {\r\n //console.log(label, label == null, label === null, name, label || name)\r\n const { label, name } = control\r\n const requiredMark = hasRequiredValidator(control) && (formOption.requiredMark || '*')\r\n if (label === null) return \"\";\r\n return <>\r\n {label || utils.text.toFieldName(name)}\r\n {requiredMark && {requiredMark}}\r\n ;\r\n}\r\n\r\nexport function getLabelAsString(control, formOption) {\r\n //console.log(label, label == null, label === null, name, label || name)\r\n const { label, name } = control\r\n const requiredMark = hasRequiredValidator(control) && (formOption.requiredMark || '*')\r\n if (label === null) return \"\";\r\n \r\n return (label || utils.text.toFieldName(name)) + (requiredMark ? requiredMark : '');\r\n}","import React from 'react';\r\n\r\nconst ValidationAlert = ({ errors }) => {\r\n if (!errors || errors.length === 0) return null;\r\n return
') }}>
\r\n}\r\n\r\nexport default ValidationAlert;","import * as React from 'react';\r\nimport ValidationAlert from '../components/ValidationAlert';\r\nimport utils from '../../../utils';\r\nimport { getLabel, getLabelAsString } from '../formRenderHelper';\r\n\r\nfunction TextInput({ control, handleChange, formOption }) {\r\n const { name, label, type, value, errors, style, helpText, attrs } = control;\r\n //const { template = 'bootstrap', usePlaceholder = false } = formOption;\r\n const fieldId = utils.random.shortId();\r\n const { usePlaceholder = false } = formOption;\r\n const fieldLabel = getLabel(control, formOption);\r\n //console.log(control, formOption)\r\n const placeHolder = usePlaceholder ? getLabelAsString(control, formOption) : null;\r\n let valueStr = value === 0 ? 0 : (value || \"\");\r\n if (type === 'date' && value) {\r\n valueStr = utils.date.formatYYYYMMDD(value);\r\n }\r\n\r\n let prependText = null;\r\n if (style && style.prependText) {\r\n prependText = style.prependText\r\n }\r\n //console.log(name, !!(style && style.autoFocus))\r\n //const autoFocus = !!(style && style.autoFocus)\r\n\r\n function keyDown(e) {\r\n //console.log(e.key)\r\n if (e.key === \"Enter\" || e.key === 'Tab') {\r\n handleChange(e, control)\r\n }\r\n }\r\n function changed(e) {\r\n //console.log('changed', name, e.target.value)\r\n handleChange(e, control)\r\n }\r\n function blur(e) {\r\n //console.log('blur', name, e.target.value)\r\n handleChange(e, control)\r\n }\r\n\r\n // function focus(e) {\r\n // console.log('focus', name, e.target.value)\r\n // }\r\n\r\n return (\r\n
\r\n {!usePlaceholder && fieldLabel && }\r\n
\r\n {prependText &&
\r\n
{prependText}
\r\n
\r\n }\r\n\r\n handleChange(e, control)} \r\n // onBlur={(e) => handleChange(e, control, true)}\r\n onChange={changed}\r\n onKeyDown={keyDown}\r\n onBlur={blur}\r\n //onFocus={focus}\r\n //autoFocus={autoFocus}\r\n placeholder={placeHolder}\r\n className={\"form-control\" + (errors && errors.length > 0 ? ' is-invalid' : '')} {...attrs} />\r\n
\r\n {helpText &&
}\r\n \r\n
\r\n )\r\n}\r\n\r\nexport default TextInput;","import React from 'react';\r\nimport ValidationAlert from '../components/ValidationAlert';\r\nimport utils from '../../../utils';\r\nimport { getLabel } from '../formRenderHelper';\r\n\r\nfunction RadioListInput({ control, handleChange, formOption }) {\r\n const { name, label, value, errors, style, options, helpText, attrs } = control;\r\n const fieldId = utils.random.shortId();\r\n const fieldLabel = getLabel(control, formOption);\r\n return (\r\n
\r\n {fieldLabel && }\r\n
\r\n {options && options.map((option, index) =>\r\n
\r\n handleChange(e, control)}\r\n value={option.value} id={fieldId + '_' + index} {...attrs} />\r\n \r\n
)}\r\n
\r\n {helpText &&
}\r\n \r\n
\r\n )\r\n}\r\n\r\nfunction checked(value, optionValue) {\r\n if (optionValue === null || typeof optionValue === 'undefined') return false;\r\n return value === optionValue;\r\n}\r\n\r\nexport default RadioListInput;","import React from 'react';\r\nimport ValidationAlert from '../components/ValidationAlert';\r\nimport utils from '../../../utils';\r\nimport { getLabel } from '../formRenderHelper';\r\n\r\nconst CheckboxListInput = ({ control, handleChange, formOption }) => {\r\n const { name, label, value, errors, style, options, helpText, attrs } = control;\r\n const fieldId = utils.random.shortId();\r\n const fieldLabel = getLabel(control, formOption);\r\n const values = value ? [...value] : [];\r\n return (\r\n
\r\n {fieldLabel && }\r\n
\r\n
\r\n {options && options.map((option, index) =>\r\n
\r\n handleChange(e, control)}\r\n value={option.value} id={fieldId + '_' + index} {...attrs}/>\r\n \r\n
)}\r\n\r\n
\r\n
\r\n {helpText &&
}\r\n \r\n
\r\n )\r\n}\r\n\r\nfunction checked(values, value) {\r\n if (value === null || typeof value === 'undefined') return false;\r\n return values.includes(value);\r\n}\r\n\r\nexport default CheckboxListInput;","import * as React from 'react';\r\nimport ValidationAlert from '../components/ValidationAlert';\r\nimport utils from '../../../utils';\r\nimport { getLabel } from '../formRenderHelper';\r\n\r\nfunction DateSeparateInput({ control, handleChange, formOption }) {\r\n //const { name, label, value, errors, style } = control;\r\n const { name, label, errors, style, helpText, attrs } = control;\r\n const thisYear = (new Date()).getFullYear();\r\n //console.log(name, value)\r\n const [year, setYear] = React.useState('')\r\n const [month, setMonth] = React.useState('')\r\n const [day, setDay] = React.useState('')\r\n\r\n //const { template = 'bootstrap', usePlaceholder = false } = formOption;\r\n const fieldId = utils.random.shortId();\r\n const { usePlaceholder = false } = formOption;\r\n const fieldLabel = getLabel(control, formOption);\r\n //console.log(label, name + '|'+ fieldLabel)\r\n //const placeHolder = usePlaceholder ? fieldLabel : null;\r\n // let valueStr = value === 0 ? 0 : (value || \"\");\r\n // if (type === 'date' && value) {\r\n // valueStr = utils.date.formatYYYYMMDD(value);\r\n // }\r\n\r\n function handleChangeDay(e) {\r\n setDay(e.target.value)\r\n handleChangeInner(year, month, e.target.value)\r\n }\r\n\r\n function handleChangeMonth(e) {\r\n setMonth(e.target.value)\r\n handleChangeInner(year, e.target.value, day)\r\n }\r\n\r\n function handleChangeYear(e) {\r\n setYear(e.target.value)\r\n handleChangeInner(e.target.value, month, day)\r\n }\r\n\r\n function handleChangeInner(yyyy, mm, dd) {\r\n control.incomplete = !(yyyy !== '' && mm !== '' && dd !== '')\r\n const newVal = yyyy + '-' + mm + '-' + dd;\r\n //console.log(newVal)\r\n //mimic event\r\n handleChange({\r\n persist: () => { },\r\n target: { name: name, value: newVal, checked: false }\r\n }, control)\r\n }\r\n\r\n //const monthsFull = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']\r\n const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']\r\n const selectStyle = { width: 'auto', display: 'inline-block', marginRight: '0.5em' };\r\n\r\n const fromYear = style && style.recentYear ? thisYear : thisYear - 10;\r\n const recentYear = style && style.recentYear ? style.recentYear : 100;\r\n return (\r\n
\r\n {!usePlaceholder && fieldLabel && }\r\n
\r\n \r\n \r\n \r\n
\r\n {helpText &&
}\r\n \r\n
\r\n )\r\n}\r\n\r\nexport default DateSeparateInput;","import * as React from 'react';\r\nimport ValidationAlert from '../components/ValidationAlert';\r\nimport utils from '../../../utils';\r\nimport { getLabel } from '../formRenderHelper';\r\n\r\nfunction FileInput({ control, handleChange, formOption }) {\r\n const { name, label, type, value, errors, style, helpText, attrs } = control;\r\n //const { template = 'bootstrap', usePlaceholder = false } = formOption;\r\n const fieldId = utils.random.shortId();\r\n const { usePlaceholder = false } = formOption;\r\n const fieldLabel = getLabel(control, formOption);\r\n //console.log(label, control)\r\n const placeHolder = usePlaceholder ? fieldLabel : null;\r\n let valueStr = value === 0 ? 0 : (value || \"\");\r\n if (type === 'date' && value) {\r\n valueStr = utils.date.formatYYYYMMDD(value);\r\n }\r\n return (\r\n
\r\n {!usePlaceholder && fieldLabel && }\r\n
\r\n handleChange(e, control)} onBlur={(e) => handleChange(e, control)}\r\n placeholder={placeHolder}\r\n className={\"form-control-file\" + (errors && errors.length > 0 ? ' is-invalid' : '')} {...attrs}/>\r\n
\r\n {helpText &&
}\r\n \r\n
\r\n\r\n )\r\n}\r\n\r\nexport default FileInput;","import TextInput from './TextInput';\r\nimport RadioListInput from './RadioListInput';\r\nimport TextareaInput from './TextareaInput';\r\nimport CheckboxInput from './CheckboxInput';\r\nimport CheckboxListInput from './CheckboxListInput';\r\nimport SelectInput from './SelectInput';\r\nimport HiddenInput from './HiddenInput';\r\n//import HtmlInput from './HtmlInput';\r\nimport DateSeparateInput from './DateSeparateInput';\r\nimport FileInput from './FileInput';\r\n\r\nconst Components = { TextInput, RadioListInput, TextareaInput, CheckboxInput, CheckboxListInput, SelectInput, HiddenInput, DateSeparateInput, FileInput };\r\n\r\nconst capitalize = expression => expression.charAt(0).toUpperCase() + expression.slice(1);\r\n\r\nexport function getControl(control, formOption) {\r\n let Component = null;\r\n if (control.type === 'number' || control.type === 'email' || control.type === 'date' || control.type === 'password' || control.type === 'tel')\r\n Component = TextInput;\r\n else if (control.type === \"dob\")\r\n Component = DateSeparateInput;\r\n else\r\n Component = Components[capitalize(control.type || '') + 'Input'];\r\n\r\n return Component;\r\n}\r\n\r\n","import React from 'react';\r\nimport ValidationAlert from '../components/ValidationAlert';\r\nimport utils from '../../../utils';\r\nimport { getLabel, getLabelAsString } from '../formRenderHelper';\r\n\r\nfunction TextareaInput({ control, handleChange, formOption }) {\r\n const { name, label, type, value, errors, style, helpText, attrs } = control;\r\n const fieldId = utils.random.shortId();\r\n const fieldLabel = getLabel(control, formOption);\r\n //const { template = 'bootstrap', usePlaceholder = false } = formOption;\r\n const { usePlaceholder = false } = formOption;\r\n const placeHolder = usePlaceholder ? getLabelAsString(control, formOption) : null;\r\n const valueStr = value === 0 ? 0 : (value || \"\");\r\n\r\n\r\n const textAreaRef = React.useRef(null);\r\n const [textAreaHeight, setTextAreaHeight] = React.useState(\"auto\");\r\n const [parentHeight, setParentHeight] = React.useState(\"auto\");\r\n\r\n React.useEffect(() => {\r\n if (textAreaRef.current) {\r\n const h = textAreaRef.current.scrollHeight > 60? textAreaRef.current.scrollHeight : 60\r\n setParentHeight(`${h}px`);\r\n setTextAreaHeight(`${h}px`);\r\n }\r\n }, [valueStr]);\r\n\r\n function onChangeInternal(e) {\r\n setTextAreaHeight(\"auto\");\r\n if (textAreaRef.current) {\r\n const h = textAreaRef.current.scrollHeight > 60? textAreaRef.current.scrollHeight : 60\r\n setParentHeight(`${h}px`);\r\n }\r\n handleChange(e, control);\r\n }\r\n\r\n return (\r\n
\r\n {!usePlaceholder && fieldLabel && }\r\n
\r\n \r\n
\r\n {helpText &&
}\r\n \r\n
\r\n )\r\n}\r\n\r\nexport default TextareaInput;","import React from 'react';\r\nimport ValidationAlert from '../components/ValidationAlert';\r\nimport utils from '../../../utils';\r\nimport { getLabel } from '../formRenderHelper';\r\n\r\nconst CheckboxInput = ({ control, handleChange, formOption }) => {\r\n const { name, label, type, value, errors, style, helpText, attrs } = control;\r\n const fieldId = utils.random.shortId();\r\n const fieldLabel = getLabel(control, formOption);\r\n return (\r\n
\r\n handleChange(e, control)} \r\n className={\"form-check-input\"} {...attrs}/>\r\n \r\n {helpText &&
}\r\n \r\n
\r\n )\r\n}\r\n\r\nexport default CheckboxInput;","import React from 'react';\r\nimport ValidationAlert from '../components/ValidationAlert';\r\nimport utils from '../../../utils';\r\nimport { getLabel } from '../formRenderHelper';\r\n\r\nfunction SelectInput({ control, handleChange, formOption }) {\r\n const { name, label, type, value, errors, style, options, helpText, attrs } = control;\r\n const fieldId = utils.random.shortId();\r\n const fieldLabel = getLabel(control, formOption);\r\n //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 HtmlInput from 'lib/form/controls/HtmlInput--ckeditor';\n\nexport function getSiteControl(control, formOption) {\n if (control.type === 'html')\n return HtmlInput;\n return null;\n}\n\n","import validators from './validators';\r\n\r\nexport function validate(root, validateOpt = {}) {\r\n //console.log({...{ triggeredByChange: false }, ...validateOpt})\r\n //console.log(root, validateOpt)\r\n const errors = validateTraverse(root, {...{ triggeredByChange: false }, ...validateOpt});\r\n return errors;\r\n}\r\n\r\nfunction validateTraverse(control, validateOpt) {\r\n if (!control) return [];\r\n //console.log(!!control.disableValidators, control)\r\n if (!!control.disableValidators) { control.errors =[]; return []; }\r\n const errors = [];\r\n const errorsFromControl = validators.validateControl(control, null, validateOpt);\r\n errors.push(...errorsFromControl);\r\n //console.log(errorsFromControl, errors)\r\n if (control.controls && control.controls.length > 0) {\r\n for (let i = 0; i < control.controls.length; i++) {\r\n const errorsFromSub = validateTraverse(control.controls[i], validateOpt);\r\n errors.push(...errorsFromSub);\r\n }\r\n }\r\n control.errors = errors;\r\n return errors;\r\n}\r\n\r\n","import { useState } from 'react';\r\nimport controlRenderer from './controlRenderer';\r\nimport * as formModelHelper from './formModelHelper';\r\nimport * as formValidate from './formValidate';\r\nimport validators from './validators';\r\n\r\nconst useForm = (initialFormModel, option) => {\r\n const [formModel, setFormModel] = useState(initialFormModel);\r\n const formOption = {\r\n ...{\r\n template: 'bootstrap',\r\n usePlaceholder: false,\r\n requiredMark: '*',\r\n onControlChanged: null\r\n }, ...option\r\n };\r\n\r\n const handleChange = (e, controlFromEvent) => {\r\n e.persist();\r\n const control = controlFromEvent || formModelHelper.findControl(e.target.name, formModel);\r\n //console.log(control)\r\n // const control = controlId? formModelHelper.findControlById(controlId, formModel)\r\n // : formModelHelper.findControl(e.target.name, formModel);\r\n if (!control) return;\r\n\r\n //console.log(control.value, e.target)\r\n control.touched = true;\r\n control.value = getControlValue(control, e.target);\r\n if (control.type === 'file') {\r\n control.files = e.target.files\r\n }\r\n\r\n // parseInput(control);\r\n if (control.onBeforeUpdateValue) {\r\n control.onBeforeUpdateValue(control, formModel)\r\n }\r\n\r\n validators.validateControl(control, e, { triggeredByChange: true });\r\n setFormModel({ ...formModel });\r\n\r\n if (formOption.onControlChanged) {\r\n formOption.onControlChanged(e, control)\r\n }\r\n };\r\n\r\n const validateForm = (e, successHandler, errorHandler) => {\r\n validateGroup(formModel, e, successHandler, errorHandler)\r\n };\r\n\r\n const validateGroup = (control, e, successHandler, errorHandler) => {\r\n e && e.preventDefault();\r\n const errors = formValidate.validate(control);\r\n\r\n if (errors.length === 0) successHandler && successHandler();\r\n else {\r\n setFormModel({ ...formModel });\r\n errorHandler && errorHandler(errors)\r\n }\r\n };\r\n\r\n const reset = (model) => setFormModel(model ? { ...model } : { ...formModel });\r\n\r\n // const parseInput = input => input.value = input.parseFun ? input.parseFun(input.value) : input.value;\r\n\r\n const renderControl = (name, formRoot) => controlRenderer.renderControl(formRoot || formModel, name, handleChange, formOption);\r\n const renderControlDirect = (control) => controlRenderer.renderControlDirect(control, handleChange, formOption);\r\n\r\n const getValue = (formRoot) => formModelHelper.getValue(formRoot || formModel);\r\n\r\n const getFiles = (formRoot) => formModelHelper.getFiles(formRoot || formModel);\r\n\r\n const findControl = (name, formRoot) => {\r\n const control = formModelHelper.findControl(name, formRoot || formModel);\r\n return control;\r\n }\r\n //return [controls, handleChange, handleSubmit, getValue]\r\n return {\r\n model: formModel,\r\n errors: formModel.errors,\r\n reset: reset,\r\n renderControl: renderControl,\r\n renderControlDirect: renderControlDirect,\r\n findControl: findControl,\r\n validateForm: validateForm,\r\n validateGroup: validateGroup,\r\n getValue: getValue,\r\n getFiles: getFiles\r\n }\r\n};\r\n\r\nfunction getControlValue(control, el) {\r\n //console.log(control, el)\r\n if (control.type === 'checkboxList') {\r\n const options = el.closest('.controlOptions');\r\n if (options) {\r\n return [...options.querySelectorAll('input:checked')].map(x => x.value)\r\n }\r\n return [];\r\n }\r\n else if (control.type === 'radioList') {\r\n const options = el.closest('.controlOptions');\r\n if (options) {\r\n const val = [...options.querySelectorAll('input:checked')].map(x => x.value)\r\n return val && val.length > 0 ? val[0] : null\r\n }\r\n return null;\r\n }\r\n return control.type === 'checkbox' ? el.checked : el.value;\r\n}\r\n\r\nexport { useForm };","import { useState } from 'react';\r\n\r\nconst useStep = (steps_) => {\r\n const [steps, setSteps] = useState(steps_);\r\n\r\n const setActive = (id) => {\r\n setSteps(steps.map(step => { step.active = step.id === id; return step; }));\r\n };\r\n\r\n const setActiveByIndex = (index) => {\r\n setSteps(steps.map((step, inx) => { step.active = inx === index; return step; }));\r\n };\r\n\r\n const getActive = () => {\r\n for (let i = 0; i < steps.length; i++) {\r\n if (steps[i].active) return steps[i];\r\n }\r\n return null;\r\n };\r\n\r\n const getActiveIndex = () => {\r\n for (let i = 0; i < steps.length; i++) {\r\n if (steps[i].active) return i;\r\n }\r\n return -1;\r\n }\r\n\r\n const next = () => {\r\n const index = getActiveIndex();\r\n if (index < steps.length - 1)\r\n setActiveByIndex(index + 1);\r\n }\r\n\r\n const prev = () => {\r\n const index = getActiveIndex();\r\n if (index > 0)\r\n setActiveByIndex(index - 1);\r\n }\r\n\r\n return { steps: steps, setActive: setActive, getActive: getActive, getActiveIndex: getActiveIndex, next: next, prev: prev }\r\n};\r\n\r\nexport { useStep };","import React from 'react';\r\nimport ValidationAlert from '../components/ValidationAlert';\r\n//import utils from '../../utils';\r\nimport { getLabel } from '../formRenderHelper';\r\n//import ReactQuill from 'react-quill';\r\n// import CKEditor from '@ckeditor/ckeditor5-react';\r\n// import ClassicEditor from '@ckeditor/ckeditor5-build-classic';\r\n// // //import RemoveFormat from '@ckeditor/ckeditor5-remove-format/src/removeformat';\r\n\r\n//import debounce from \"lodash/debounce\";\r\n\r\n//------------- ckeditor build source directly\r\nimport CKEditor from \"@ckeditor/ckeditor5-react\";\r\n// NOTE: Use the editor from source (not a build)!\r\nimport ClassicEditor from \"@ckeditor/ckeditor5-editor-classic/src/classiceditor\";\r\nimport Essentials from \"@ckeditor/ckeditor5-essentials/src/essentials\";\r\nimport Bold from \"@ckeditor/ckeditor5-basic-styles/src/bold\";\r\nimport Italic from \"@ckeditor/ckeditor5-basic-styles/src/italic\";\r\nimport Paragraph from \"@ckeditor/ckeditor5-paragraph/src/paragraph\";\r\nimport List from \"@ckeditor/ckeditor5-list/src/list\";\r\nimport RemoveFormat from '@ckeditor/ckeditor5-remove-format/src/removeformat';\r\nimport Heading from '@ckeditor/ckeditor5-heading/src/heading';\r\nimport Link from '@ckeditor/ckeditor5-link/src/link';\r\nimport Font from '@ckeditor/ckeditor5-font/src/font';\r\nimport ImagePlugin from '@ckeditor/ckeditor5-image/src/image';\r\nimport ImageInsert from '@ckeditor/ckeditor5-image/src/imageinsert';\r\n\r\n//------------- ckeditor build source directly\r\n\r\nfunction HtmlInput({ control, handleChange, formOption }) {\r\n const { name, label, value, errors, style, helpText, attrs } = control;\r\n //const fieldId = utils.random.shortId();\r\n const fieldLabel = getLabel(control, formOption);\r\n const [viewMode, setViewMode] = React.useState('html');\r\n const [htmlSource, setHtmlSource] = React.useState(value);\r\n //const { template = 'bootstrap', usePlaceholder = false } = formOption;\r\n const { usePlaceholder = false } = formOption;\r\n //const placeHolder = usePlaceholder ? fieldLabel : null;\r\n const valueStr = value === 0 ? 0 : (value || \"\");\r\n\r\n function handleChangeInner(newVal) {\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 onTextareaChanged = (e) => {\r\n setHtmlSource(e.target.value)\r\n }\r\n\r\n function applyToHtml() {\r\n handleChangeInner(htmlSource)\r\n setViewMode('html')\r\n }\r\n\r\n function changeToEditor() {\r\n setViewMode('html')\r\n }\r\n\r\n function changeToSource() {\r\n setHtmlSource(valueStr)\r\n setViewMode('source')\r\n }\r\n\r\n return (\r\n
\r\n {!usePlaceholder && fieldLabel && }\r\n {/* {} */}\r\n\r\n
\r\n {\r\n // console.log(valueStr, control.id)\r\n // editor.controlId = control.id;\r\n // console.log( Array.from( editor.ui.componentFactory.names() ) )\r\n // // You can store the \"editor\" and use when it is needed.\r\n // console.log('Editor is ready to use!', editor);\r\n }}\r\n onChange={(event, editor) => {\r\n const data = editor.getData();\r\n handleChangeInner(data);\r\n //console.log({ event, editor, data });\r\n }}\r\n />\r\n
\r\n
\r\n \r\n \r\n
\r\n\r\n
\r\n \r\n \r\n
\r\n\r\n {helpText &&
}\r\n \r\n
\r\n )\r\n}\r\n\r\nexport default HtmlInput;","export const categories = [\n { category: 'Breakfast', segments: ['Kettle'] },\n { category: 'Cooking', segments: [] },\n { category: 'Food Preparation', segments: [] },\n { category: 'Dessert', segments: [] },\n { category: 'Cookware', segments: [] },\n { category: 'Utensils', segments: [] },\n { category: 'Air Purification', segments: [] }\n]\n\nexport const styles = [\n 'Volume',\n 'Straight',\n 'Curls',\n 'Waves',\n 'Length',\n 'Occasion'\n]\n","import { fb, validators } from \"form\";\nimport { categories, styles } from \"site/data\";\n\nexport function getProductEditModel(data) {\n // let projectList = data.projectList.map((p) => { return { name: getProjectName(p), value: p.projectCode }});\n // projectList = [{ name: 'Select...', value: '' }, ...projectList];\n\n let categoryList = categories.map((x) => {\n return { name: x.category, value: x.category };\n });\n categoryList = [{ name: \"Select...\", value: \"\" }, ...categoryList];\n\n const statusList = [\n { name: \"Live\", value: \"0\" },\n { name: \"Archived\", value: \"97\" },\n { name: \"Discontinued\", value: \"98\" },\n { name: \"N/A\", value: \"99\" },\n ];\n\n const styleList = styles.map((x) => {\n return { name: x, value: x };\n });\n const filterList = data.filterList.map((x) => {\n return { name: x.filterName, value: x.filterCode };\n });\n\n console.log(\"getProductEditModel\", data);\n\n const model = fb.group({\n productStatusAU: [\n data.productStatusAU,\n [validators.Required()],\n { type: \"select\", options: statusList },\n ],\n productStatusNZ: [\n data.productStatusNZ,\n [validators.Required()],\n { type: \"select\", options: statusList },\n ],\n\n productCode: [\n data.productCode || \"\",\n [validators.Required()],\n { type: \"text\" },\n ],\n productName: [\n data.productName || \"\",\n [validators.Required()],\n { type: \"text\" },\n ],\n productUrl: [\n data.productUrl || \"\",\n [validators.Required()],\n { type: \"text\" },\n ],\n bookletLink: [data.bookletLink || \"\", [], { type: \"text\" }],\n metaImage: [data.metaImage || \"\", [], null],\n recipeBookletLink: [data.recipeBookletLink || \"\", [], { type: \"text\" }],\n category: [\n data.category || \"\",\n [validators.Required()],\n { type: \"select\", options: categoryList },\n ],\n category2: [\n data.category2 || \"\",\n [],\n { type: \"select\", options: categoryList },\n ],\n barcode: [data.barcode || \"\", [], { type: \"text\" }],\n barcodeUPC: [\n data.barcodeUPC || \"\",\n [],\n { label: \"Barcode(UPC)\", type: \"text\" },\n ],\n styles: [\n data.styles || [],\n [],\n { type: \"checkboxList\", options: styleList, style: { inline: true } },\n ],\n filters: [\n data.filters || [],\n [],\n { type: \"checkboxList\", options: filterList, style: { inline: true } },\n ],\n priceAU: [data.priceAU || \"\", [], { type: \"number\", label: \"Price (AU$)\" }],\n priceNZ: [data.priceNZ || \"\", [], { type: \"number\", label: \"Price (NZ$)\" }],\n warranty: [\n data.warranty || \"\",\n [],\n { type: \"text\", label: \"Waranty Year\" },\n ],\n relatedProducts: [\n data.relatedProducts.join(\"\\n\") || \"\",\n [],\n {\n type: \"textarea\",\n label: \"Related Products - product code in each line\",\n style: { rows: 10 },\n },\n ],\n productImages: [data.productImages || [], [], null],\n productStores: [data.productStores || [], [], null],\n intro: [data.intro || \"\", [], { type: \"textarea\", style: { rows: 7 } }],\n metaDesc: [\n data.metaDesc || \"\",\n [],\n {\n type: \"textarea\",\n label: \"Meta Description (if empty, Intro will be used)\",\n style: { rows: 7 },\n },\n ],\n // forAU: [data.forAU, [], { label: \"AU\", type: \"checkbox\" }],\n // forNZ: [data.forNZ, [], { label: \"NZ\", type: \"checkbox\" }],\n trendingNow: [\n data.trendingNow || \"\",\n [],\n { label: \"Trending Now\", type: \"checkbox\" },\n ],\n useSparePartInstruction: [\n data.useSparePartInstruction || \"\",\n [],\n { label: \"Use common Spare Part Instruction\", type: \"checkbox\" },\n ],\n\n sortingOrder: [\n data.sortingOrder || \"\",\n [],\n {\n type: \"text\",\n label: \"Sorting Order (any text)\",\n helpText:\n \"Done by character sorting, not numeric sorting, i.e., 12 comes before 2. Use paddings if you are going to use numbers like 001, 002, 012. You may use any group name here.\",\n },\n ],\n mpn: [\n data.mpn || \"\",\n [],\n {\n type: \"text\",\n label: \"MPN (If empty, Product Code(non SKU_*) will be used)\",\n helpText:\n 'More info(Google)',\n },\n ],\n mfTitle: [\n data.mfTitle || \"\",\n [],\n {\n type: \"text\",\n label:\n \"Title (If empty, Sitename + Product Name + Product Code(non SKU_*) will be used)\",\n helpText:\n 'More info(Google)',\n },\n ],\n mfDesc: [\n data.mfDesc || \"\",\n [],\n {\n type: \"textarea\",\n label: \"Description (if empty, Intro will be used)\",\n style: { rows: 7 },\n helpText:\n 'More info(Google)',\n },\n ],\n mfProductType1: [\n data.mfProductType1 || \"\",\n [],\n {\n type: \"text\",\n label: \"Product Type (categorisation, i.e., Women > Hair Dryer > ...)\",\n },\n ],\n mfProductType2: [\n data.mfProductType2 || \"\",\n [],\n { type: \"text\", label: null },\n ],\n mfProductType3: [\n data.mfProductType3 || \"\",\n [],\n { type: \"text\", label: null },\n ],\n mfProductType4: [\n data.mfProductType4 || \"\",\n [],\n { type: \"text\", label: null },\n ],\n mfProductType5: [\n data.mfProductType5 || \"\",\n [],\n { type: \"text\", label: null },\n ],\n // details: [data.details || '', [], { type: 'html', style: { } }],\n // styleTips: [data.styleTips || '', [], { type: 'html', style: { } }],\n // seeMore: [data.seeMore || '', [], { type: 'html', style: { } }],\n // specifications: [data.specifications || '', [], { type: 'html', style: { } }],\n howToSection: fb.array([]),\n discoverMoreSection: fb.array([]),\n faqSection: fb.array([]),\n whereToBuySection: fb.array([]),\n detailSection: fb.array([]),\n specSection: fb.array([]),\n seeMoreSection: fb.array([]),\n //youtubeSection : fb.array([]),\n });\n\n // const itemArray = model.find('detailSection').controls;\n // data.detailSection.forEach(item => {\n // itemArray.push(fb.group({\n // itemValue: [item.itemValue || '', [], { type: 'html', label: null, style: { } }],\n // itemStatus: [item.itemStatus, [], { type: 'select', style: { } }],\n // itemId: [item.itemId],\n // itemTypeCode: [item.itemTypeCode]\n // }))\n // })\n\n buildArray(data.howToSection, model.find(\"howToSection\").controls);\n buildArray(\n data.discoverMoreSection,\n model.find(\"discoverMoreSection\").controls\n );\n buildArray(data.faqSection, model.find(\"faqSection\").controls);\n buildArray(data.whereToBuySection, model.find(\"whereToBuySection\").controls);\n buildArray(data.detailSection, model.find(\"detailSection\").controls);\n buildArray(data.specSection, model.find(\"specSection\").controls);\n buildArray(data.seeMoreSection, model.find(\"seeMoreSection\").controls);\n //buildArray(data.youtubeSection, model.find('youtubeSection').controls);\n\n return model;\n}\n\nfunction buildArray(items, itemArray) {\n items.forEach((item) => {\n itemArray.push(createGroup(item));\n });\n}\n\nconst specSectionList = [\n { name: \"Left\", value: \"L\" },\n { name: \"Right\", value: \"R\" },\n];\n//const linkTypeList = [{ name: 'Auto', value: 'auto' }, { name: 'Blog', value: 'blog' }, { name: 'Instagram', value: 'instagram' }, { name: 'Web', value: 'web' }];\nconst linkTypeList = [\n { name: \"Auto\", value: \"auto\" },\n { name: \"Instagram\", value: \"instagram\" },\n { name: \"Tiktok\", value: \"tiktok\" },\n];\n\nexport function createGroup(item) {\n const group = {\n itemStatus: [item.itemStatus, [], { type: \"select\", style: {} }],\n itemId: [item.itemId],\n itemTypeCode: [item.itemTypeCode],\n };\n\n const g = fb.group({ ...group, ...createItem(item) });\n g.customValueFn = getItemValue;\n return g;\n}\n\nexport function createItem(item) {\n if (item.itemTypeCode === \"video\") {\n if (!item.itemValue) return null;\n const video = JSON.parse(item.itemValue);\n //console.log(video);\n return {\n videoUrl: [\n video.video || \"\",\n [],\n { type: \"text\", label: \"Youtube Id or Url\" },\n ],\n title: [video.title || \"\", [], { type: \"text\", label: \"Title\" }],\n desc: [\n video.desc || \"\",\n [],\n { type: \"html\", label: \"Short Description\", style: {} },\n ],\n };\n }\n\n if (item.itemTypeCode === \"qa\") {\n if (!item.itemValue) return null;\n const qa = JSON.parse(item.itemValue);\n //console.log(video);\n return {\n question: [\n qa.question || \"\",\n [],\n { type: \"textarea\", label: \"Question\" },\n ],\n answer: [\n qa.answer || \"\",\n [],\n { type: \"html\", label: \"Answer\", style: {} },\n ],\n };\n }\n\n if (item.itemTypeCode === \"spec\") {\n if (!item.itemValue) return null;\n const spec = JSON.parse(item.itemValue);\n //console.log(video);\n return {\n category: [\n spec.category || \"\",\n [],\n { type: \"select\", label: \"Section\", options: specSectionList },\n ],\n label: [spec.label || \"\", [], { type: \"text\", label: \"Label\" }],\n text: [\n spec.text || \"\",\n [],\n { type: \"text\", label: \"Specification\", style: {} },\n ],\n };\n }\n\n if (item.itemTypeCode === \"html\") {\n return {\n html: [\n item.itemValue || \"\",\n [],\n { type: \"html\", label: null, style: {} },\n ],\n };\n }\n\n if (item.itemTypeCode === \"link\") {\n if (!item.itemValue) return null;\n const link = JSON.parse(item.itemValue);\n return {\n linkType: [\n link.linkType || \"auto\",\n [],\n { type: \"select\", label: \"Type\", options: linkTypeList },\n ],\n title: [link.title || \"\", [], { type: \"text\", label: \"Title\" }],\n url: [link.url || \"\", [], { type: \"text\", label: \"URL\", style: {} }],\n };\n }\n\n if (item.itemTypeCode === \"weblink\") {\n if (!item.itemValue) return null;\n const link = JSON.parse(item.itemValue);\n return {\n //linkType: [link.linkType || 'auto', [], { type: 'select', label: 'Type', options: linkTypeList }],\n title: [link.title || \"\", [], { type: \"text\", label: \"Title\" }],\n url: [link.url || \"\", [], { type: \"text\", label: \"URL\", style: {} }],\n };\n }\n}\n\nfunction getItemValue(item, fns) {\n const val = (name) => {\n const control = item.find(name);\n return control ? control.value : null;\n };\n const value = {\n itemStatus: val(\"itemStatus\"),\n itemId: val(\"itemId\"),\n itemTypeCode: val(\"itemTypeCode\"),\n };\n\n if (value.itemTypeCode === \"video\") {\n value.itemValue = JSON.stringify({\n video: val(\"videoUrl\"),\n title: val(\"title\"),\n desc: val(\"desc\"),\n });\n } else if (value.itemTypeCode === \"qa\") {\n value.itemValue = JSON.stringify({\n question: val(\"question\"),\n answer: val(\"answer\"),\n });\n } else if (value.itemTypeCode === \"spec\") {\n value.itemValue = JSON.stringify({\n category: val(\"category\"),\n label: val(\"label\"),\n text: val(\"text\"),\n });\n } else if (value.itemTypeCode === \"html\") {\n value.itemValue = val(\"html\");\n } else if (value.itemTypeCode === \"link\") {\n value.itemValue = JSON.stringify({\n linkType: val(\"linkType\"),\n title: val(\"title\"),\n url: val(\"url\"),\n });\n } else if (value.itemTypeCode === \"weblink\") {\n value.itemValue = JSON.stringify({ title: val(\"title\"), url: val(\"url\") });\n }\n return value;\n}\n","import React from \"react\";\nimport env from \"env\";\nimport utils from \"utils\";\nimport { DragDropContext, Droppable, Draggable } from \"react-beautiful-dnd\";\n\nexport function ImageSelector({ form, fieldName, data }) {\n const field = form.findControl(fieldName);\n //console.log(field, fieldName)\n\n React.useLayoutEffect(() => {\n const handleMessage = (e) => {\n //console.log(e);\n var action = e.data.action;\n var onSelection = e.data.onSelection;\n var data = e.data.data;\n\n if (action === \"media-selected\") {\n if (onSelection === \"selectedMediaFiles\") {\n selectedMediaFiles(data);\n }\n }\n };\n window.addEventListener(\"message\", handleMessage);\n\n return () => window.removeEventListener(\"message\", handleMessage);\n // eslint-disable-next-line\n }, []);\n\n function openLibrary(e) {\n var url = env.cmsEndpoint + \"/cms41helper/browse/selectmedia?onSelection=selectedMediaFiles&maxSelect=100\";\n var w = window.innerWidth;\n var h = window.innerHeight;\n window.open(url, \"cms_library\", `toolbar=yes,scrollbars=yes,resizable=yes,top=${w * 0.05},left=${h * 0.05},width=${w * 0.9},height=${h * 0.9}`);\n }\n\n function selectedMediaFiles(items) {\n //const field = form.findControl(fieldName);\n if (!field) return;\n\n //console.log(items)\n let obj = items;\n\n field.value = field.value || [];\n for (var i in obj.items) {\n field.value.push({\n imageUrl: obj.items[i].WebPath,\n alt: obj.items[i].Alt,\n isPackage: false,\n forAU: true,\n forNZ: true,\n youtubeUrl: \"\",\n youtubeCheck: false,\n });\n }\n form.reset();\n }\n\n // const reorder = (list, startIndex, endIndex) => {\n // const result = Array.from(list);\n // const [removed] = result.splice(startIndex, 1);\n // result.splice(endIndex, 0, removed);\n\n // return result;\n // };\n\n // const removeItem = (list, index) => {\n // const result = Array.from(list);\n // result.splice(index, 1);\n\n // return result;\n // };\n\n function remove(e, index) {\n //if (!window.confirm('Delete this??')) return;\n field.value = utils.array.removeItem(field.value || [], index);\n form.reset();\n }\n\n function packageChanged(e, index) {\n (field.value || [])[index].isPackage = e.target.checked;\n //console.log(field)\n form.reset();\n }\n\n function onAUChanged(e, index) {\n (field.value || [])[index].forAU = e.target.checked;\n //console.log(field)\n form.reset();\n }\n\n function onNZChanged(e, index) {\n (field.value || [])[index].forNZ = e.target.checked;\n //console.log(field)\n form.reset();\n }\n\n function youtubeCheckChanged(e, index) {\n (field.value || [])[index].youtubeCheck = e.target.checked;\n //console.log(field)\n form.reset();\n }\n\n function youtubeUrlChanged(e, index) {\n (field.value || [])[index].youtubeUrl = e.target.value;\n //console.log(field)\n form.reset();\n }\n\n function onDragEnd(result) {\n //console.log(result)\n //const field = form.findControl(fieldName);\n if (!field) return;\n\n // dropped outside the list\n if (!result.destination) {\n return;\n }\n\n field.value = utils.array.moveItem(field.value || [], result.source.index, result.destination.index);\n\n form.reset();\n }\n\n return (\n
\n \n \n {(provided, snapshot) => (\n \n {(field.value || []).map((item, index) => (\n \n {(provided, snapshot) => (\n \n \n
\n )}\n \n ))}\n {provided.placeholder}\n \n )}\n \n \n\n \n \n );\n}\n\nfunction ImageListItem({ image, index, onRemove, onPackageChanged, onAUChanged, onNZChanged, onYoutubeCheckChanged, onYoutubeUrlChanged }) {\n return (\n <>\n
\n {image.alt}\n
\n
\n
\n \n
\n
\n \n
\n
\n \n
\n \n
\n \n
\n\n
\n \n onYoutubeUrlChanged(e, index)}\n />\n
\n\n
\n \n
\n
\n \n );\n}\n","import React from 'react';\nimport env from 'env';\n\nexport function MediaSelector({ form, fieldName, data }) {\n\n const field = form.findControl(fieldName);\n //console.log(field, fieldName)\n\n React.useLayoutEffect(() => {\n const handleMessage = (e) => {\n //console.log(e);\n var action = e.data.action;\n var onSelection = e.data.onSelection;\n var data = e.data.data;\n\n if (action === 'media-selected') {\n const fldName = onSelection.replace('selectedMediaFiles_', '')\n if (fldName === fieldName) {\n selectedMediaFiles(data);\n } \n }\n }\n window.addEventListener('message', handleMessage)\n\n return () => window.removeEventListener('message', handleMessage)\n // eslint-disable-next-line\n }, [])\n\n function openLibrary(e) {\n const defPath = '/sites/cuisinart/media/information-booklets';\n var url = (env.cmsEndpoint) + `/cms41helper/browse/selectmedia?onSelection=selectedMediaFiles_${fieldName}&defPath=${defPath}&maxSelect=1`;\n var w = window.innerWidth;\n var h = window.innerHeight;\n window.open(url, 'cms_library', `toolbar=yes,scrollbars=yes,resizable=yes,top=${w * 0.05},left=${h * 0.05},width=${w * 0.9},height=${h * 0.9}`);\n\n }\n\n function selectedMediaFiles(items) {\n //const field = form.findControl(fieldName);\n if (!field) return;\n\n console.log(items)\n let obj = items;\n\n field.value = field.value || '';\n if (obj.items.length > 0) {\n field.value = obj.items[0].WebPath\n }\n form.reset()\n }\n\n return (\n
\n\n \n
\n );\n}","import React from \"react\";\nimport env from \"env\";\nimport utils from \"utils\";\n//import { DragDropContext, Droppable, Draggable } from \"react-beautiful-dnd\";\n\nexport function MetaImageSelector({ form, fieldName, data }) {\n const field = form.findControl(fieldName);\n //console.log(field, fieldName)\n\n React.useLayoutEffect(() => {\n const handleMessage = (e) => {\n //console.log(e);\n var action = e.data.action;\n var onSelection = e.data.onSelection;\n var data = e.data.data;\n\n if (action === \"media-selected\") {\n if (onSelection === \"selectedMediaFiles\") {\n selectedMediaFiles(data);\n }\n }\n };\n window.addEventListener(\"message\", handleMessage);\n\n return () => window.removeEventListener(\"message\", handleMessage);\n // eslint-disable-next-line\n }, []);\n\n function openLibrary(e) {\n var url = env.cmsEndpoint + \"/cms41helper/browse/selectmedia?onSelection=selectedMediaFiles&maxSelect=1\";\n var w = window.innerWidth;\n var h = window.innerHeight;\n window.open(url, \"cms_library\", `toolbar=yes,scrollbars=yes,resizable=yes,top=${w * 0.05},left=${h * 0.05},width=${w * 0.9},height=${h * 0.9}`);\n }\n\n function selectedMediaFiles(items) {\n //const field = form.findControl(fieldName);\n if (!field) return;\n //console.log(items)\n let obj = items;\n field.value = field.value || '';\n if (obj.items.length > 0) {\n // field.value = {\n // imageUrl: obj.items[0].WebPath,\n // alt: obj.items[0].Alt\n // }\n field.value = obj.items[0].WebPath;\n }\n form.reset();\n }\n\n function remove(e) {\n //if (!window.confirm('Delete this??')) return;\n field.value = '';\n form.reset();\n }\n\n return (\n
\n\n {\n field.value &&\n \n }\n\n \n
\n );\n}\n\nfunction ImageListItem({ image, onRemove, alt }) {\n return (\n <>\n
\n {alt}\n
\n
\n
\n \n
\n
\n \n );\n}","import React from 'react'\nimport utils from 'utils'\nimport { useForm } from 'form'\nimport { Button, ErrorMessage } from 'components'\nimport fb from 'lib/form/formBuilder'\n\nexport function StoreSelector({ form, data, fieldName }) {\n const [editingStore, setEditingStore] = React.useState()\n\n const field = form.findControl(fieldName)\n const storesInFrom = field.value || []\n const stores = (data.stores || []).filter((x) => x.storeName)\n\n // form data for the right hand store editor\n const editingStoreForm = useForm({}, {})\n\n function onStoreSelectChanged(e) {\n let currentStores = field.value || []\n if (e.target.checked) {\n //add\n currentStores.push({\n storeCode: e.target.value,\n buyOnlineOverride: null,\n storeUrlOverride: null,\n notes: null,\n })\n } else {\n //remove\n currentStores = currentStores.filter(\n (x) => x.storeCode !== e.target.value\n )\n }\n field.value = currentStores\n form.reset()\n }\n\n function onEdit(storeCode) {\n let currentStores = field.value || []\n const store = utils.array.find(\n currentStores,\n (x) => x.storeCode === storeCode\n )\n resetEditingStoreModel(store)\n setEditingStore(store)\n }\n\n function onEditSaved(storeCode, store) {\n let currentStores = field.value || []\n currentStores = currentStores.filter((x) => x.storeCode !== storeCode)\n currentStores.push(store)\n field.value = currentStores\n form.reset()\n setEditingStore(null) // close editor\n }\n\n function onCancel() {\n setEditingStore(null) // close editor\n }\n\n function resetEditingStoreModel(store) {\n const storeInData = utils.array.find(\n data.stores,\n (x) => x.storeCode === store.storeCode\n )\n const buyOnlineOptions = [\n {\n name:\n 'Use default store setting (' +\n (storeInData.buyOnline ? 'Buy Online' : 'No Online') +\n ')',\n value: '',\n },\n { name: 'Buy Online', value: true },\n { name: 'No Online', value: false },\n ]\n const model = fb.group({\n buyOnlineOverride: [\n store.buyOnlineOverride === false\n ? false\n : store.buyOnlineOverride || '',\n [],\n {\n type: 'select',\n label: 'Overriding Buy Online',\n options: buyOnlineOptions,\n },\n ],\n storeUrlOverride: [\n store.storeUrlOverride || '',\n [],\n { type: 'text', label: 'Overriding Link' },\n ],\n notes: [store.notes || '', [], { type: 'text', label: 'Notes' }],\n storeInData: [storeInData],\n })\n editingStoreForm.reset(model)\n }\n\n return (\n
\n
\n
\n {stores.map((store, index) => (\n \n ))}\n
\n
\n
\n {editingStore && (\n \n )}\n
\n
\n )\n}\n\nfunction Store({ storesInFrom, storeInData, onStoreSelectChanged, onEdit }) {\n const forProduct = utils.array.find(\n storesInFrom,\n (x) => x.storeCode === storeInData.storeCode\n )\n const overrides = []\n if (forProduct) {\n // console.log(typeof forProduct.buyOnlineOverride)\n // console.log(forProduct.buyOnlineOverride, forProduct.buyOnlineOverride === true, forProduct.buyOnlineOverride === false)\n\n // if (forProduct.buyOnlineOverride === 'true'){\n // overrides.push(`Buy Online`)\n // } else if (forProduct.buyOnlineOverride === 'false'){\n // overrides.push(`No Online`)\n // }\n // if (forProduct.storeUrlOverride) {\n // overrides.push(`Store Url: ${forProduct.storeUrlOverride}`);\n // }\n if (\n forProduct.buyOnlineOverride === 'true' ||\n forProduct.buyOnlineOverride === true\n ) {\n overrides.push(`Buy Online`)\n } else if (\n forProduct.buyOnlineOverride === 'false' ||\n forProduct.buyOnlineOverride === false\n ) {\n overrides.push(`No Online`)\n }\n if (forProduct.storeUrlOverride) {\n overrides.push(`Store Url: ${forProduct.storeUrlOverride}`)\n }\n }\n\n return (\n
\n \n {forProduct && forProduct.notes && (\n ({forProduct.notes})\n )}\n {!!forProduct && (\n {\n onEdit(storeInData.storeCode)\n }}\n >\n Edit\n \n )}\n\n {overrides.length > 0 && (\n
{overrides.join('\\n')}
\n )}\n
\n )\n}\n\nfunction StoreEdit({ form, store, stores, onChange, onCancel }) {\n const storeInData = utils.array.find(\n stores,\n (x) => x.storeCode === store.storeCode\n )\n console.log(store, storeInData)\n\n function save(e) {\n form.validateForm(e, () => {\n const value = { ...form.getValue(), storeCode: store.storeCode }\n onChange(store.storeCode, value)\n })\n }\n\n const render = (name) => form.renderControl(name)\n return (\n
\n

\n Editing '[{storeInData.country}] {storeInData.storeName}'\n

\n

\n The following settings are for this product only.\n

\n
{render('buyOnlineOverride')}
\n
{render('storeUrlOverride')}
\n
{render('notes')}
\n\n
\n
\n \n \n \n
\n
\n
\n )\n}\n","import React from \"react\";\nimport env from \"env\";\nimport { Redirect, Link } from \"react-router-dom\";\nimport { usePost } from \"components\";\nimport { useForm } from \"form\";\nimport { Button, ErrorMessage } from \"components\";\nimport { ImageSelector } from \"./imageSelector\";\nimport { MediaSelector } from \"./mediaSelector\";\nimport { MetaImageSelector } from \"./metaImageSelector\";\nimport { StoreSelector } from \"./storeSelector\";\nimport utils from \"utils\";\nimport { DragDropContext, Droppable, Draggable } from \"react-beautiful-dnd\";\nimport { FaGripLines, FaRegEyeSlash, FaRegEye, FaTrash } from \"react-icons/fa\";\nimport { createGroup } from \"./productEditFormModel\";\n\nexport function ProductEditForm({ model, data, productCode }) {\n const form = useForm(model, {});\n const post = usePost();\n const [currentTab, setCurrentTab] = React.useState(\"details\");\n\n const render = (name) => form.renderControl(name);\n\n function save(e) {\n form.validateForm(e, () => {\n const value = { ...form.getValue(), orgProductCode: productCode };\n value.relatedProducts = value.relatedProducts\n ? value.relatedProducts.split(\"\\n\")\n : [];\n post.send(env.apiBase + \"/api/productAdmin/saveProduct\", value);\n });\n }\n\n // function remove(e) {\n // if (!window.confirm(\"Delete this??\")) return;\n // post.send(env.apiBase + \"/api/productAdmin/removeProduct\", { productCode: productCode });\n // }\n\n function suggestUrl() {\n const value = form.getValue();\n const productUrl = form.findControl(\"productUrl\");\n productUrl.value = \"/products/\" + utils.url.getSlug(value.productName);\n form.reset();\n }\n // if (post.hasErrors()) {\n // return \n // }\n if (post.status === \"done\") {\n return ;\n }\n\n const tabs = [\n //{ id: 'howto', title: 'Style Tips', tabView: HowtoTab },\n { id: \"details\", title: \"Details\", tabView: DetailsTab },\n { id: \"wheretobuy\", title: \"Where to buy\", tabView: WhereToBuyTab },\n { id: \"specifications\", title: \"Specifications\", tabView: SpecTab },\n { id: \"seemore\", title: \"Recipes\", tabView: SeeMoreTab },\n { id: \"discover\", title: \"Discover More\", tabView: DiscoverMoreTab },\n { id: \"faq\", title: \"FAQs\", tabView: FaqTab },\n { id: \"related\", title: \"Related\", tabView: RelatedTab },\n { id: \"photos\", title: \"Photos\", tabView: PhotoTab },\n { id: \"google\", title: \"Google MF\", tabView: GoogleMF },\n // { id: 'youtube', title: 'Youtube', tabView: Youtube }\n ];\n\n function showTab(tab) {\n setCurrentTab(tab);\n }\n\n //const baseUrl = data.menOrWomen === 'M' ? env.baseUrlMen : env.baseUrlWomen;\n const baseUrlAU = env.baseUrlAU;\n const productUrlAU = data.productUrl\n ? baseUrlAU + data.productUrl\n : `${baseUrlAU}/product/${data.productCode}`;\n const baseUrlNZ = env.baseUrlNZ;\n const productUrlNZ = data.productUrl\n ? baseUrlNZ + data.productUrl\n : `${baseUrlNZ}/product/${data.productCode}`;\n\n const formVal = form.getValue();\n return (\n
\n
\n {/* {data.productUrl && Product page} */}\n {formVal.productStatusAU !== 99 && (\n \n Product (AU)\n \n )}\n {formVal.productStatusNZ !== 99 && (\n \n Product (NZ)\n \n )}\n {/* {data.migProductUrl && (\n \n Old page\n \n )} */}\n
\n

Product Edit

\n\n
\n
\n
{render(\"productCode\")}
\n
\n
{render(\"category\")}
\n
{render(\"category2\")}
\n
\n
\n
{render(\"productName\")}
\n
\n {render(\"productUrl\")}\n
\n \n Suggest URL from product name\n \n
\n
\n
\n
\n
\n
\n
{render(\"productStatusAU\")}
\n
{render(\"productStatusNZ\")}
\n
\n\n
\n
{render(\"priceAU\")}
\n
{render(\"priceNZ\")}
\n
\n\n
\n
{render(\"warranty\")}
\n
\n \n {render(\"useSparePartInstruction\")}\n
\n
\n
\n
{render(\"barcode\")}
\n
{render(\"barcodeUPC\")}
\n
\n
\n
\n {render(\"bookletLink\")}\n \n
\n
\n
\n
\n {render(\"recipeBookletLink\")}\n \n
\n
\n \n
\n \n \n
\n
\n
\n\n
\n
\n
{render(\"sortingOrder\")}
\n
\n {/* {data.menOrWomen === 'W' && render('styles')} */}\n \n {render(\"trendingNow\")}\n {render(\"filters\")}\n
\n
\n\n
\n
\n {render(\"intro\")}\n \n
\n
\n {render(\"metaDesc\")}\n \n
\n
\n
\n
\n
\n {tabs.map((tab) => (\n showTab(tab.id)}\n >\n {tab.title}\n
\n ))}\n
\n\n
\n {tabs.map((tab) => (\n \n \n
\n ))}\n
\n \n\n {/*
\n
\n
{render('details')}
\n
\n \n \n
\n
\n
\n
{render('styleTips')}
\n
\n
\n
{render('specifications')}
\n
\n
\n
{render('seeMore')}
\n
\n
*/}\n \n\n
\n
\n \n \n \n {/* {productCode && (\n \n )} */}\n \n Cancel\n \n
\n
\n \n \n );\n}\n\nfunction WordCounter({ form, field, forMeta }) {\n const val = form.getValue()[field];\n const length = (val || \"\").length;\n const style = {\n color: forMeta\n ? length < 50 || length > 160\n ? \"red\"\n : \"limegreen\"\n : \"#666\",\n fontSize: \"0.8rem\",\n };\n return (\n
\n {length} {length === 1 ? \"character\" : \"characters\"}\n {forMeta && (\n \n (50-160 characters recommended)\n \n )}\n
\n );\n}\n\n// function HowtoTab({ form }) {\n// const section = form.findControl('howToSection');\n// const addOptions = [\n// { name: 'Html', itemTypeCode: 'html' },\n// { name: 'Video', itemTypeCode: 'video' }\n// ]\n// return ;\n// }\n\nfunction DiscoverMoreTab({ form }) {\n const section = form.findControl(\"discoverMoreSection\");\n const addOptions = [{ name: \"Web Link\", itemTypeCode: \"weblink\" }];\n return ;\n}\n\nfunction FaqTab({ form }) {\n const section = form.findControl(\"faqSection\");\n const addOptions = [{ name: \"Q&A\", itemTypeCode: \"qa\" }];\n return ;\n}\n\nfunction DetailsTab({ form }) {\n const section = form.findControl(\"detailSection\");\n const addOptions = [\n { name: \"Html\", itemTypeCode: \"html\" },\n { name: \"Video\", itemTypeCode: \"video\" },\n ];\n return ;\n}\n\nfunction SpecTab({ form }) {\n const section = form.findControl(\"specSection\");\n const addOptions = [\n { name: \"Html\", itemTypeCode: \"html\" },\n { name: \"Spec\", itemTypeCode: \"spec\" },\n ];\n return ;\n}\n\nfunction SeeMoreTab({ form }) {\n const section = form.findControl(\"seeMoreSection\");\n const addOptions = [\n { name: \"Html\", itemTypeCode: \"html\" },\n { name: \"Link\", itemTypeCode: \"link\" },\n ];\n return ;\n}\n\nfunction RelatedTab({ form, data }) {\n const render = (name) => form.renderControl(name);\n return (\n
\n
{render(\"relatedProducts\")}
\n
\n
\n \n
{data.migRelatedProducts.join(\"\\n\")}
\n
\n
\n
\n );\n}\n\nfunction EditorPanel({ form, section, addOptions }) {\n //const section = form.findControl('detailSection');\n //console.log(section)\n //return null;\n // section.controls.map((item, index) => {\n // console.log(item.controls[0].value)\n // });\n\n function onDragEnd(result) {\n //console.log(result)\n\n // dropped outside the list\n if (!result.destination) {\n return;\n }\n\n //console.log(JSON.stringify(section))\n section.controls = utils.array.moveItem(\n Array.from(section.controls || []),\n result.source.index,\n result.destination.index\n );\n // console.log(JSON.stringify(section))\n // console.log(JSON.stringify(form.model))\n form.reset();\n }\n\n function removed(id) {\n console.log(id);\n section.controls = section.controls.filter((x) => x.id !== id);\n form.reset();\n }\n\n // function deleteAll() {\n // if (!window.confirm(\"Delete all?\")) return;\n // section.controls = [];\n // form.reset();\n // }\n\n function activateAll() {\n section.controls.forEach((item) => {\n item.find(\"itemStatus\").value = 0;\n });\n form.reset();\n }\n\n function deactivateAll() {\n section.controls.forEach((item) => {\n item.find(\"itemStatus\").value = 99;\n });\n form.reset();\n }\n\n function addItem(e) {\n console.log(e.target.value);\n const itemTypeCode = e.target.value;\n let itemValue = \"\";\n if (itemTypeCode === \"video\") {\n itemValue = JSON.stringify({\n videoUrl: \"\",\n title: \"\",\n desc: \"\",\n posterImage: \"\",\n });\n } else if (itemTypeCode === \"qa\") {\n itemValue = JSON.stringify({ question: \"\", answer: \"\" });\n } else if (itemTypeCode === \"spec\") {\n itemValue = JSON.stringify({ category: \"L\", label: \"\", text: \"\" });\n } else if (itemTypeCode === \"link\") {\n itemValue = JSON.stringify({ linkType: \"auto\", title: \"\", url: \"\" });\n } else if (itemTypeCode === \"weblink\") {\n itemValue = JSON.stringify({ linkType: \"auto\", title: \"\", url: \"\" });\n }\n\n const group = createGroup({\n itemTypeCode: itemTypeCode,\n itemValue: itemValue,\n itemStatus: 0,\n });\n console.log(group);\n section.controls.push(group);\n form.reset();\n console.log(form);\n }\n\n return (\n
\n \n \n {(provided, snapshot) => (\n \n {section.controls.map((item, index) => (\n \n {(provided, snapshot) => (\n \n \n
\n )}\n \n ))}\n {provided.placeholder}\n \n )}\n \n \n\n
\n For all items in this section,\n \n \n {/* */}\n {addOptions && (\n \n \n \n )}\n
\n {/* {section.controls.map(item => )} */}\n \n );\n}\n\nfunction ItemEditor({ form, item, provided, removed }) {\n const itemStatus = item.find(\"itemStatus\").value; // form.findControl('itemTypeCode', item);\n //console.log(itemStatus, typeof itemStatus)\n function toggleItem() {\n const itemStatus = item.find(\"itemStatus\").value;\n item.find(\"itemStatus\").value = itemStatus === 99 ? 0 : 99;\n form.reset();\n }\n\n function removeItem() {\n removed(item.id);\n }\n return (\n
\n
\n
\n \n
\n
\n {itemStatus === 99 ? (\n toggleItem()} />\n ) : (\n toggleItem()} />\n )}\n
\n
\n removeItem()} />\n
\n
\n
\n {/* {item.id} */}\n \n
\n
\n );\n}\n\nfunction Item({ form, item }) {\n const render = (name) => form.renderControl(name, item);\n const itemTypeCode = item.find(\"itemTypeCode\").value; // form.findControl('itemTypeCode', item);\n //console.log(item, itemTypeCode)\n if (itemTypeCode === \"video\") {\n return (\n
\n
\n
{render(\"videoUrl\")}
\n
{render(\"title\")}
\n
\n
{render(\"desc\")}
\n
\n );\n }\n if (itemTypeCode === \"qa\") {\n return (\n
\n
{render(\"question\")}
\n
{render(\"answer\")}
\n
\n );\n }\n if (itemTypeCode === \"spec\") {\n // \"{\"category\": \"L\",\"label\":\"Barrel / Plate size:\",\"text\":\"19mm Barrel\"}\"\n return (\n
\n
{render(\"category\")}
\n
{render(\"label\")}
\n
{render(\"text\")}
\n
\n );\n }\n if (itemTypeCode === \"link\") {\n return (\n
\n
{render(\"linkType\")}
\n
{render(\"title\")}
\n
{render(\"url\")}
\n
\n );\n }\n if (itemTypeCode === \"weblink\") {\n return (\n
\n
{render(\"title\")}
\n
{render(\"url\")}
\n
\n );\n }\n return <>{render(\"html\")};\n}\n\nfunction PhotoTab({ form, data }) {\n return (\n <>\n \n \n );\n}\n\nfunction WhereToBuyTab({ form, data }) {\n return (\n <>\n \n \n );\n}\n\nfunction GoogleMF({ form, data }) {\n const render = (name) => form.renderControl(name);\n return (\n
\n
\n {render(\"mpn\")}\n {render(\"mfTitle\")}\n {render(\"mfDesc\")}\n
\n
\n {render(\"mfProductType1\")}\n {render(\"mfProductType2\")}\n {render(\"mfProductType3\")}\n {render(\"mfProductType4\")}\n {render(\"mfProductType5\")}\n
\n \n More info(Google)\n \n
\n
\n {/*
\n
\n
{data.migRelatedProducts.join('\\n')}
\n
\n
*/}\n
\n );\n}\n\n// function Youtube({ form }) {\n// const section = form.findControl('youtubeSection');\n// const addOptions = [\n// { name: 'Video', itemTypeCode: 'video' }\n// ]\n// return ;\n// }\n","import React from 'react';\nimport env from 'env';\nimport { useRouter } from 'components';\nimport { useGet } from 'components';\nimport { ErrorPopup } from 'components';\nimport { getProductEditModel } from './productEditFormModel';\nimport { ProductEditForm } from './productEditForm';\n\nexport function ProductEdit(props) {\n const { query } = useRouter();\n const get = useGet();\n\n const productCode = query.id || '';\n\n React.useEffect(() => {\n get.send(env.apiBase + `/api/productAdmin/getProduct/${productCode}`);\n // eslint-disable-next-line\n }, []);\n\n if (get.loading()) {\n return
Loading...
\n } else if (get.hasErrors()) {\n return \n }\n\n console.log(get)\n const data = get.response;\n const model = getProductEditModel(data);\n //console.log(\"sfddsfs------\", model)\n\n return \n}","import React from 'react';\nimport env from 'env';\nimport { Link, Redirect } from \"react-router-dom\";\nimport { usePost } from 'components';\nimport { useForm } from 'form';\nimport { Button, ErrorMessage } from 'components';\n\nexport function ProductEditForm({ model }) {\n const form = useForm(model, {});\n const post = usePost();\n\n const render = (name) => form.renderControl(name);\n\n function save(e) {\n form.validateForm(e, () => {\n const value = { ...form.getValue() };\n post.send(env.apiBase + \"/api/productAdmin/createProduct\", value);\n })\n }\n\n if (post.status === 'done') {\n console.log(post.response)\n const productCode = post.response.results.productCode;\n return \n }\n\n return (\n
\n

New Product

\n\n
\n
\n
{render('productCode')}
\n
{render('productStatus')}
\n
{render('category')}
\n
\n
\n
{render('productName')}
\n
\n\n
\n
\n \n \n \n Cancel\n
\n
\n
\n
\n );\n}\n","import React from 'react';\nimport { getProductEditModel } from './productEditFormModel';\nimport { ProductEditForm } from './productEditForm';\n\nexport function ProductNew(props) {\n const model = getProductEditModel({});\n console.log(model)\n\n return \n}","import { fb, validators } from 'form';\nimport { categories } from 'site/data';\n\nexport function getProductEditModel(data) {\n let categoryList = categories.map((x) => { return { name: x.category, value: x.category } });\n categoryList = [{ name: 'Select...', value: '' }, ...categoryList];\n \n const statusList = [{ name: 'Live', value: '0' }, { name: 'Archive', value: '99' }, { name: 'Discontinued', value: '98' }];\n\n console.log('getProductEditModel', data)\n\n const model = fb.group({\n productStatus: [data.productStatus || '0', [validators.Required()], { type: 'select', options: statusList }],\n productCode: [data.productCode || '', [validators.Required()], { type: 'text' }],\n productName: [data.productName || '', [validators.Required()], { type: 'text' }],\n category: [data.category || '', [validators.Required()], { type: 'select', options: categoryList }],\n //productUrl: [data.productUrl || '', [validators.Required()], { type: 'text' }],\n })\n\n return model;\n}\n","import React from 'react'\nimport { useTable, usePagination, useSortBy } from 'react-table'\n\nexport function Table({\n columns,\n data,\n fetchData,\n loading,\n pageCount: controlledPageCount,\n pageSize: controlledPageSize,\n totalCount: contolledTotalCount,\n pageIndex: controlledPageIndex,\n sortBy: controlledSortBy\n}) {\n const {\n getTableProps,\n getTableBodyProps,\n headerGroups,\n prepareRow,\n page,\n canPreviousPage,\n canNextPage,\n pageOptions,\n pageCount,\n gotoPage,\n nextPage,\n previousPage,\n setPageSize,\n // Get the state from the instance\n state: { pageIndex, pageSize, sortBy },\n } = useTable(\n {\n columns,\n data,\n initialState: { pageIndex: controlledPageIndex, pageSize: controlledPageSize, sortBy: controlledSortBy }, // Pass our hoisted table state\n manualPagination: true, // Tell the usePagination\n // hook that we'll handle our own data fetching\n // This means we'll also have to provide our own\n // pageCount.\n manualSortBy : true,\n pageCount: controlledPageCount,\n },\n useSortBy,\n usePagination\n \n )\n\n //console.log('table', pageIndex, pageSize)\n\n // Listen for changes in pagination and use the state to fetch our new data\n React.useEffect(() => {\n fetchData({ pageIndex, pageSize, sortBy })\n }, [fetchData, pageIndex, pageSize, sortBy])\n return (\n <>\n {/*
\n        \n          {JSON.stringify(\n            {\n              pageIndex,\n              pageSize,\n              pageCount,\n              canNextPage,\n              canPreviousPage,\n            },\n            null,\n            2\n          )}\n        \n      
*/}\n
\n \n {headerGroups.map(headerGroup => (\n \n {headerGroup.headers.map(column => (\n \n ))}\n \n ))}\n \n \n {page.map((row, i) => {\n prepareRow(row)\n return (\n \n {row.cells.map(cell => {\n return \n })}\n \n )\n })}\n \n
\n {column.render('Header')}\n \n {column.isSorted\n ? column.isSortedDesc\n ? ' 🔽'\n : ' 🔼'\n : ''}\n \n
{cell.render('Cell')}
\n\n
\n {loading ? (\n Loading...\n ) : (\n \n Showing {page.length} of ~{contolledTotalCount}{' '}\n results\n \n )}\n
\n\n
\n {' '}\n {' '}\n {' '}\n {' '}\n \n Page{' '}\n \n {pageIndex + 1} of {pageOptions.length}\n {' '}\n \n \n | Go to page:{' '}\n {\n const page = e.target.value ? Number(e.target.value) - 1 : 0\n gotoPage(page)\n }}\n style={{ width: '100px' }}\n />\n {' '}\n {\n setPageSize(Number(e.target.value))\n }}\n >\n {[10, 20, 30, 40, 50].map(pageSize => (\n \n ))}\n \n
\n \n )\n}\n","import React from \"react\";\nimport env from \"env\";\nimport { Table } from \"components/table/tableServerSide\";\nimport { usePost } from \"components\";\nimport { SiteLink } from \"components\";\nimport { Loading, ErrorPopup } from \"components\";\nimport { Button, ErrorMessage } from \"components\";\n\nexport function WarrantyList(props) {\n const columns = React.useMemo(\n () => [\n {\n Header: \"First Name\",\n accessor: \"firstName\",\n Cell: (c) => {\n //console.log(c)\n return (\n \n {c.cell.value}\n \n );\n },\n },\n {\n Header: \"Last Name\",\n accessor: \"lastName\",\n },\n // {\n // Header: 'Site',\n // accessor: 'siteCode',\n // },\n {\n Header: \"Country\",\n accessor: \"country\",\n },\n {\n Header: \"Email\",\n accessor: \"email\",\n },\n {\n Header: \"Postcode\",\n accessor: \"postcode\",\n },\n {\n Header: \"Purchase Date\",\n accessor: \"purchaseDate\",\n },\n {\n Header: \"Registered Date\",\n accessor: \"dateRegistered\",\n },\n ],\n []\n );\n\n const [data, setData] = React.useState([]);\n //const [loading, setLoading] = React.useState(false)\n const [loading] = React.useState(false);\n const [pageCount, setPageCount] = React.useState(0);\n const [totalCount, setTotalCount] = React.useState(0);\n const [pageSize, setPageSize] = React.useState(30);\n const [pageIndex, setPageIndex] = React.useState(0);\n const [sortBy, setSortBy] = React.useState([]);\n //const fetchIdRef = React.useRef(0)\n\n const [filterWM, setFilterWM] = React.useState(window.localStorage.getItem(\"warranty.filterWM\") || \"all\");\n const [filterCountry, setFilterCountry] = React.useState(window.localStorage.getItem(\"warranty.filterCountry\") || \"W\");\n const [filterKeyword, setFilterKeyword] = React.useState(window.localStorage.getItem(\"warranty.filterKeyword\") || \"\");\n const [filterFrom, setFilterFrom] = React.useState(window.localStorage.getItem(\"warranty.filterFrom\") || \"\");\n const [filterTo, setFilterTo] = React.useState(window.localStorage.getItem(\"warranty.filterTo\") || \"\");\n const post = usePost();\n\n React.useEffect(() => {\n //console.log('post.send', pageSize, pageIndex)\n post.send(env.apiBase + \"/api/warrantyAdmin/getRegistrations\", getSearchParam());\n // eslint-disable-next-line\n }, [filterWM, filterKeyword, filterCountry, filterFrom, sortBy, filterTo, pageSize, pageIndex]);\n\n React.useEffect(() => {\n if (post.done()) {\n //console.log('post.done', pageSize, pageIndex)\n const result = post.response;\n setPageCount(Math.ceil(result.totalCnt / pageSize));\n setTotalCount(result.totalCnt);\n setData(result.items);\n }\n }, [post, pageSize]);\n\n const fetchData = React.useCallback(({ pageSize, pageIndex, sortBy }) => {\n console.log(\"usecallback\", pageSize, pageIndex, sortBy);\n setPageSize(pageSize);\n setPageIndex(pageIndex);\n setSortBy(sortBy);\n }, []);\n\n function getSearchParam() {\n return {\n pageSize: pageSize,\n pageNo: pageIndex + 1,\n keyword: filterKeyword,\n menOrWomen: filterWM,\n country: filterCountry,\n dateFrom: filterFrom,\n dateTo: filterTo,\n sortBy: sortBy,\n };\n }\n\n if (post.loading()) {\n return ;\n } else if (post.hasErrors()) {\n return ;\n }\n\n // const changeFilterWM = (e) => {\n // setFilterWM(e.target.value)\n // window.localStorage.setItem('warranty.filterWM', e.target.value);\n // }\n\n // const changeFilterCountry = (e) => {\n // setFilterCountry(e.target.value)\n // window.localStorage.setItem('warranty.filterCountry', e.target.value);\n // }\n\n const changeFilterFrom = (e) => {\n setFilterFrom(e.target.value);\n window.localStorage.setItem(\"warranty.filterFrom\", e.target.value);\n };\n const changeFilterTo = (e) => {\n setFilterTo(e.target.value);\n window.localStorage.setItem(\"warranty.filterTo\", e.target.value);\n };\n // const changeFilterKeyword = (e) => {\n // setFilterKeyword(e.target.value)\n // window.localStorage.setItem('filterKeyword', e.target.value);\n // }\n\n function handleKeyPress(e) {\n if (e.key === \"Enter\") {\n setFilterKeyword(e.target.value);\n window.localStorage.setItem(\"warranty.filterKeyword\", e.target.value);\n }\n }\n\n function removeFilter() {\n setFilterWM(\"\");\n setFilterCountry(\"\");\n setFilterKeyword(\"\");\n setFilterFrom(\"\");\n setFilterTo(\"\");\n window.localStorage.setItem(\"warranty.filterWM\", \"all\");\n window.localStorage.setItem(\"warranty.filterCountry\", \"all\");\n window.localStorage.setItem(\"warranty.filterKeyword\", \"\");\n window.localStorage.setItem(\"warranty.filterFrom\", \"\");\n window.localStorage.setItem(\"warranty.filterTo\", \"\");\n }\n\n return (\n <>\n

Warranty Registrations

\n
\n
\n {/* */}\n {/* */}\n \n \n Reset filter\n \n
\n
\n Date Registered: \n -\n \n
\n
\n\n \n\n
\n \n
\n \n );\n}\n\nfunction ExportCSV({ getSearchParam }) {\n const post = usePost();\n\n function exportCSV() {\n post.send(env.apiBase + \"/api/warrantyAdmin/exportToCSV\", getSearchParam());\n }\n return (\n \n \n {post.done() && (\n \n Download\n \n )}\n \n \n );\n}\n","import React from \"react\";\nimport env from \"env\";\nimport { useRouter, SiteLink } from \"components\";\nimport { useGet, usePost } from \"components\";\nimport { Button, ErrorMessage } from \"components\";\nimport { ErrorPopup } from \"components\";\nimport utils from \"utils\";\n\nexport function WarrantyView(props) {\n const { query } = useRouter();\n const get = useGet();\n\n const warrantyId = query.id || \"\";\n\n React.useEffect(() => {\n get.send(env.apiBase + `/api/warrantyAdmin/getRegistration/${warrantyId}`);\n // eslint-disable-next-line\n }, []);\n\n if (get.loading()) {\n return
Loading...
;\n } else if (get.hasErrors()) {\n return ;\n }\n\n console.log(get);\n const data = get.response;\n\n return ;\n}\n\nfunction Warranty({ data }) {\n return (\n
\n

Warranty Registration

\n
\n < Back to list\n
\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n\n {/*
public List Attachments { get; set; } */}\n
\n
\n \n
\n
Receipts:
\n
\n {data.fileAttachments &&\n data.fileAttachments.map((file, index) => (\n \n ))}\n
\n
\n\n
\n

Mailchimp integration

\n\n \n \n {data.mailchimpStatus === 99 && }\n \n
\n
\n \n );\n}\n\nfunction Fld({ name, value }) {\n return (\n
\n
{name}:
\n
\n {value}\n
\n
\n );\n}\n\nfunction ResendMailchimp({ id }) {\n const post = usePost();\n\n function resend(e) {\n post.send(env.apiBase + \"/api/warrantyAdmin/resendMc\", { warrantyRegistrationId: id });\n }\n\n if (post.done()) {\n return window.location.reload();\n }\n\n return (\n
\n \n \n
\n );\n}\n","import React from \"react\";\nimport env from \"env\";\nimport { Table } from \"components/table/table\";\nimport { useRouter } from \"components\";\nimport { useGet } from \"components\";\nimport { SiteLink } from \"components\";\nimport { Loading, ErrorPopup } from \"components\";\n\nexport function StoreList(props) {\n const columns = React.useMemo(\n () => [\n {\n Header: \"Name\",\n accessor: \"storeName\",\n Cell: (c) => {\n //console.log(c.row)\n return (\n \n {c.cell.value}\n \n );\n },\n },\n {\n Header: \"Seq\",\n accessor: \"seq\",\n },\n {\n Header: \"Buy Online\",\n accessor: \"buyOnline\",\n Cell: (c) => (c.cell.value === true ? \"Y\" : \"N\"),\n },\n {\n Header: \"Url\",\n accessor: \"storeUrl\",\n },\n ],\n []\n );\n\n const get = useGet();\n\n const { query } = useRouter();\n const country = query.country || \"AU\";\n\n React.useEffect(() => {\n get.send(env.apiBase + \"/api/storeAdmin/getStores?country=\" + country);\n // eslint-disable-next-line\n }, [country]);\n\n if (get.loading()) {\n return ;\n } else if (get.hasErrors()) {\n return ;\n }\n\n const data = get.response;\n const filtered = data;\n\n return (\n <>\n

{country === \"AU\" ? \"Australia\" : \"New Zealand\"} Stores

\n
\n \n Add {country === \"AU\" ? \"Australia\" : \"New Zealand\"} Store\n \n
\n \n \n );\n}\n","import React from \"react\";\nimport env from \"env\";\nimport { useRouter } from \"components\";\nimport { useGet, usePost } from \"components\";\nimport { ErrorPopup } from \"components\";\nimport { getStoreEditModel } from \"./storeEditFormModel\";\nimport { Redirect, Link } from \"react-router-dom\";\nimport { useForm } from \"form\";\nimport { Button, ErrorMessage } from \"components\";\n//import { ImageSelector } from './imageSelector';\n//import utils from 'utils';\n\nexport function StoreEdit(props) {\n const { query } = useRouter();\n const get = useGet();\n\n const storeCode = query.id || \"\";\n\n React.useEffect(() => {\n get.send(env.apiBase + `/api/storeAdmin/getStore/${storeCode}`);\n // eslint-disable-next-line\n }, []);\n\n if (get.loading()) {\n return
Loading...
;\n } else if (get.hasErrors()) {\n return ;\n }\n\n const data = get.response;\n const model = getStoreEditModel(data);\n\n return ;\n}\n\nfunction StoreEditForm({ model, data, storeCode }) {\n const form = useForm(model, {});\n const post = usePost();\n\n const render = (name) => form.renderControl(name);\n\n function save(e) {\n form.validateForm(e, () => {\n const value = { ...form.getValue(), orgstoreCode: storeCode };\n\n console.log(value);\n\n post.send(env.apiBase + \"/api/storeAdmin/saveStore\", value);\n });\n }\n\n function remove(e) {\n if (!window.confirm(\"Delete this??\")) return;\n post.send(env.apiBase + \"/api/storeAdmin/removeStore\", { storeCode: storeCode });\n }\n\n if (post.status === \"done\") {\n return ;\n }\n\n return (\n
\n

Store Edit

\n\n
\n
\n
{render(\"storeName\")}
\n
{render(\"storeCode\")}
\n
\n
\n\n
\n
{render(\"buyOnline\")}
\n
\n\n
\n
{render(\"seq\")}
\n
{render(\"storeUrl\")}
\n
\n
\n
\n
{render(\"iconPath\")}
\n
{render(\"mailchimpName\")}
\n
\n\n
\n
\n \n \n \n {storeCode && (\n \n )}\n \n Cancel\n \n
\n
\n
\n
\n );\n}\n","import { fb, validators } from \"form\";\n\nexport function getStoreEditModel(data) {\n const model = fb.group({\n storeCode: [data.storeCode || \"\", [validators.Required()], { type: \"text\" }],\n orgStoreCode: [data.storeCode || \"\", [], { type: \"hidden\" }],\n //storeStatus: [data.storeStatus, [validators.Required()], { type: 'select', options: statusList }],\n //country: [data.country || '', [validators.Required()], { type: 'text' }],\n storeName: [data.storeName || \"\", [validators.Required()], { type: \"text\" }],\n storeUrl: [data.storeUrl || \"\", [validators.Required()], { type: \"text\" }],\n buyOnline: [data.buyOnline, [], { label: \"Buy Online\", type: \"checkbox\" }],\n seq: [data.seq || \"0\", [], { type: \"number\", helpText: \"Will automatically re-numbered\" }],\n\n iconPath: [data.iconPath || \"\", [], { type: \"text\" }],\n mailchimpName: [data.mailchimpName || \"\", [], { type: \"text\", helpText: \"For matching field with MailChimp. Check the code first in MailChimp\" }],\n });\n\n return model;\n}\n","import React from 'react';\nimport env from 'env';\nimport { useRouter } from 'components';\nimport { getStoreEditModel } from './storeEditFormModel';\nimport { Link, Redirect } from \"react-router-dom\";\nimport { usePost } from 'components';\nimport { useForm } from 'form';\nimport { Button, ErrorMessage } from 'components';\n\nexport function StoreNew(props) {\n const { query } = useRouter();\n const country = query.country || 'AU';\n const model = getStoreEditModel({ country: country });\n console.log(model)\n\n return \n}\n\nfunction StoreEditForm({ model, country }) {\n const form = useForm(model, {});\n const post = usePost();\n\n const render = (name) => form.renderControl(name);\n\n function save(e) {\n form.validateForm(e, () => {\n const value = { ...form.getValue(), country: country };\n post.send(env.apiBase + \"/api/storeAdmin/createStore\", value);\n })\n }\n\n if (post.status === 'done') {\n console.log(post.response)\n const storeCode = post.response.results.storeCode;\n return \n }\n\n return (\n
\n

New Store

\n\n
\n
\n
{render('storeName')}
\n
\n
\n
\n \n \n \n Cancel\n
\n
\n
\n
\n );\n}","import { fb, validators } from 'form';\n\nexport function getStoreEditModel(data) {\n const model = fb.group({\n storeName: [data.storeName || '', [validators.Required()], { type: 'text' }],\n })\n\n return model;\n}\n","import format from 'date-fns/format';\r\n\r\nimport { toDateTime } from './date';\r\n\r\n// import { formatDateTime } from 'lib/utils-core/dateExt'\r\n// formatDateTime(c.cell.value, 'yyyy-MM-dd HH:mm')\r\nexport function formatDateTime(date, formatStr) {\r\n const dateObj = toDateTime(date);\r\n //console.log(dateObj)\r\n if (!dateObj) return '';\r\n return format(dateObj, formatStr)\r\n}","import React from 'react';\nimport env from 'env';\nimport { Table } from 'components/table/table';\nimport { useGet } from 'components';\nimport { SiteLink } from 'components';\nimport { Loading, ErrorPopup } from 'components';\nimport { formatDateTime } from 'lib/utils-core/dateExt'\n\nexport function ContactList(props) {\n const columns = React.useMemo(\n () => [\n {\n Header: 'Name',\n accessor: 'name',\n Cell: (c) => {\n //console.log(c)\n return ({c.cell.value})\n }\n },\n {\n Header: 'Email',\n accessor: 'email'\n },\n {\n Header: 'Status',\n accessor: 'contactStatus',\n },\n {\n Header: 'Site',\n accessor: 'siteCode'\n },\n {\n Header: 'Country',\n accessor: 'country',\n },\n {\n Header: 'Date Sent',\n accessor: 'dateSent',\n Cell: (c) => c.cell.value && formatDateTime(c.cell.value, 'yyyy-MM-dd HH:mm')\n }\n ],\n []\n )\n\n const [filterContactSite] = React.useState(window.localStorage.getItem('filterContactSite') || 'all');\n const [filterContactStatus, setFilterContactStatus] = React.useState(window.localStorage.getItem('filterContactStatus') || 'all');\n const [filterKeyword, setFilterKeyword] = React.useState(window.localStorage.getItem('filterContactKeyword') || '');\n const get = useGet();\n\n React.useEffect(() => {\n get.send(env.apiBase + '/api/contactAdmin/getContacts?site=' + filterContactSite + '&status=' + filterContactStatus);\n // eslint-disable-next-line\n }, [filterContactSite, filterContactStatus]);\n\n if (get.loading()) {\n return \n } else if (get.hasErrors()) {\n return \n }\n\n // const changeFilterContactSite = (e) => {\n // setFilterContactSite(e.target.value)\n // window.localStorage.setItem('filterContactSite', e.target.value);\n // }\n\n const changeFilterContactStatus = (e) => {\n setFilterContactStatus(e.target.value)\n window.localStorage.setItem('filterContactStatus', e.target.value);\n }\n\n const changeFilterKeyword = (e) => {\n setFilterKeyword(e.target.value)\n window.localStorage.setItem('filterContactKeyword', e.target.value);\n }\n\n function filterList(data) {\n let filtered = data;\n if (filterKeyword) {\n filtered = filtered.filter(x => searchInField(x.name, filterKeyword) ||\n searchInField(x.email, filterKeyword))\n }\n return filtered;\n }\n\n function searchInField(str, search_str) {\n if (!str || !search_str) return false;\n const result = str.search(new RegExp(escapeRegExp(search_str), \"i\"));\n return result >= 0\n }\n\n function escapeRegExp(str) {\n // eslint-disable-next-line\n return str.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, \"\\\\$&\");\n }\n\n function removeFilter() {\n setFilterKeyword('')\n window.localStorage.setItem('filterKeyword', '');\n }\n\n // console.log(get)\n const data = get.response;\n const filtered = filterList(data);\n //console.log(filtered)\n\n return (\n <>\n

Contacts

\n
\n
\n\n {/* */}\n\n \n \n {filterKeyword && clear filter}\n
\n\n
\n
\n \n );\n}\n","import React from 'react';\nimport env from 'env';\nimport { Redirect } from \"react-router-dom\";\nimport { useRouter, SiteLink } from 'components';\nimport { useGet, usePost } from 'components';\nimport { Button, ErrorMessage } from 'components';\nimport { ErrorPopup } from 'components';\nimport { formatDateTime } from 'lib/utils-core/dateExt'\n\nexport function ContactView(props) {\n const { query } = useRouter();\n const get = useGet();\n\n const contactId = query.id || '';\n\n React.useEffect(() => {\n get.send(env.apiBase + `/api/contactAdmin/getContact/${contactId}`);\n // eslint-disable-next-line\n }, []);\n\n if (get.loading()) {\n return
Loading...
\n } else if (get.hasErrors()) {\n return \n }\n\n console.log(get)\n const data = get.response;\n\n return \n}\n\nfunction Contact({ data }) {\n return
\n

{data.name} {formatDateTime(data.dateSent, 'yyyy-MM-dd HH:mm')}

\n
\n < Back to list\n
\n\n
\n
\n
\n\n {/* */}\n {data.contactStatus !== 'Processed' &&\n }\n\n {data.contactStatus === 'Processed' &&\n }\n
\n
\n
\n\n}\n\n// function Fld({ name, value }) {\n// return
\n//
{name}:
\n//
{value}
\n//
\n// }\n\nfunction ChangeStatus({ id, status }) {\n\n const post = usePost();\n\n function changeStatus(e) {\n post.send(env.apiBase + \"/api/contactAdmin/changeStatus\", { contactId: id, contactStatus: status });\n }\n\n if (post.done()) {\n return \n }\n\n return
\n\n \n \n
\n}","import React from 'react';\nimport env from 'env';\nimport { Table } from 'components/table/tableServerSide';\nimport { usePost } from 'components';\nimport { SiteLink } from 'components';\nimport { Loading, ErrorPopup } from 'components';\n//import { Button, ErrorMessage } from 'components';\n\nexport function JoinList(props) {\n const columns = React.useMemo(\n () => [\n {\n Header: 'First Name',\n accessor: 'firstName',\n Cell: (c) => {\n //console.log(c)\n return ({c.cell.value})\n }\n },\n {\n Header: 'Last Name',\n accessor: 'lastName',\n },\n {\n Header: 'Site',\n accessor: 'siteCode',\n },\n {\n Header: 'Country',\n accessor: 'country',\n },\n {\n Header: 'Email',\n accessor: 'email',\n },\n {\n Header: 'Postcode',\n accessor: 'postcode',\n },\n {\n Header: 'Registered Date',\n accessor: 'dateRegistered'\n }\n ],\n []\n )\n\n const [data, setData] = React.useState([]);\n const [loading] = React.useState(false);\n const [pageCount, setPageCount] = React.useState(0);\n const [totalCount, setTotalCount] = React.useState(0);\n const [pageSize, setPageSize] = React.useState(30);\n const [pageIndex, setPageIndex] = React.useState(0);\n const [sortBy, setSortBy] = React.useState([]);\n\n const [filterWM, setFilterWM] = React.useState('all');\n const [filterCountry, setFilterCountry] = React.useState('W');\n const [filterKeyword, setFilterKeyword] = React.useState('');\n const [filterFrom, setFilterFrom] = React.useState('');\n const [filterTo, setFilterTo] = React.useState('');\n const post = usePost();\n\n React.useEffect(() => {\n //console.log('post.send', pageSize, pageIndex)\n post.send(env.apiBase + '/api/joinadmin/getregistrations', getSearchParam());\n // eslint-disable-next-line\n }, [filterWM, filterKeyword, filterCountry, filterFrom, sortBy, filterTo, pageSize, pageIndex]);\n\n React.useEffect(() => {\n if (post.done()) {\n //console.log('post.done', pageSize, pageIndex)\n const result = post.response;\n setPageCount(Math.ceil(result.totalCnt / pageSize))\n setTotalCount(result.totalCnt)\n setData(result.items);\n }\n }, [post, pageSize]);\n\n const fetchData = React.useCallback(({ pageSize, pageIndex, sortBy }) => {\n console.log('usecallback', pageSize, pageIndex, sortBy)\n setPageSize(pageSize);\n setPageIndex(pageIndex);\n setSortBy(sortBy);\n }, []);\n\n function getSearchParam() {\n return {\n pageSize: pageSize, pageNo: pageIndex + 1,\n keyword: filterKeyword,\n menOrWomen: filterWM,\n country: filterCountry,\n dateFrom: filterFrom,\n dateTo: filterTo,\n sortBy: sortBy\n }\n };\n\n if (post.loading()) {\n return \n } else if (post.hasErrors()) {\n return \n }\n\n // const changeFilterWM = (e) => {\n // setFilterWM(e.target.value)\n // window.localStorage.setItem('warranty.filterWM', e.target.value);\n // }\n\n const changeFilterCountry = (e) => {\n setFilterCountry(e.target.value)\n window.localStorage.setItem('warranty.filterCountry', e.target.value);\n }\n\n const changeFilterFrom = (e) => {\n setFilterFrom(e.target.value)\n window.localStorage.setItem('warranty.filterFrom', e.target.value);\n }\n const changeFilterTo = (e) => {\n setFilterTo(e.target.value)\n window.localStorage.setItem('warranty.filterTo', e.target.value);\n }\n\n function handleKeyPress(e) {\n if (e.key === 'Enter') {\n setFilterKeyword(e.target.value)\n //window.localStorage.setItem('warranty.filterKeyword', e.target.value);\n }\n };\n\n function removeFilter() {\n setFilterWM('');\n setFilterCountry('');\n setFilterKeyword('');\n setFilterFrom('');\n setFilterTo('');\n }\n\n return (\n <>\n

Join Registrations

\n
\n
\n\n {/* */}\n\n \n \n Reset filter\n\n\n
\n
Date Registered: \n -\n \n
\n\n
\n\n
\n\n
\n \n )\n\n\n}","import React from 'react';\nimport env from 'env';\nimport { useRouter, SiteLink } from 'components';\nimport { useGet } from 'components';\n//import { Button, ErrorMessage } from 'components';\nimport { ErrorPopup } from 'components';\nimport utils from 'utils';\n\nexport function JoinView(props) {\n const { query } = useRouter();\n const get = useGet();\n\n const joinId = query.id || '';\n\n React.useEffect(() => {\n get.send(env.apiBase + `/api/joinadmin/getregistration/${joinId}`);\n // eslint-disable-next-line\n }, []);\n\n if (get.loading()) {\n return
Loading...
\n } else if (get.hasErrors()) {\n return \n }\n\n \n const data = get.response;\n\n console.log('data --- ', data);\n\n return \n}\n\n\nfunction Join({ data }) {\n return
\n

Join Registration

\n
\n < Back to list\n
\n
\n \n
\n \n \n \n \n \n \n \n
\n \n
\n \n
\n
Receipts:
\n
\n {data.fileAttachments && data.fileAttachments.map((file, index) => )}\n
\n
\n\n
\n

Mailchimp integration

\n\n \n \n {data.mailchimpStatus === 99 && }\n {/* */}\n
\n
\n
\n\n}\n\n\nfunction Fld({ name, value }) {\n return
\n
{name}:
\n
{value}
\n
\n}","import React from 'react';\nimport { BrowserRouter as Router, Switch, Route, Redirect } from 'react-router-dom';\n\nimport { ProvideAuth } from 'auth';\n\nimport LoginLayoutRoute from \"layout/loginLayout\";\nimport DashboardLayoutRoute from \"layout/dashboardLayout\";\n\nimport { Login } from 'auth';\nimport { ProductList } from 'site/product/productList';\nimport { ProductEdit } from 'site/product/edit/productEdit';\nimport { ProductNew } from 'site/product/new/productNew';\n\nimport { WarrantyList } from 'site/warranty/warrantyList';\nimport { WarrantyView } from 'site/warranty/warrantyView';\n\nimport { StoreList } from 'site/wheretobuy/storeList';\nimport { StoreEdit } from 'site/wheretobuy/edit/storeEdit';\nimport { StoreNew } from 'site/wheretobuy/new/storeNew';\n\nimport { ContactList } from 'site/contact/contactList';\nimport { ContactView } from 'site/contact/contactView';\n\nimport { JoinList } from 'site/join/joinList';\nimport { JoinView } from 'site/join/joinView';\n\nfunction App() {\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\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\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)\n .then(registration => {\n registration.onupdatefound = () => {\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\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';\n\nimport './_scss/index.scss';\nimport App from './App';\nimport * as serviceWorker from './serviceWorker';\n\nReactDOM.render(, document.getElementById('root'));\n\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.unregister();\n"],"sourceRoot":""}