{"version":3,"sources":["ui/theme/TenantTheme.jsx","tenants/shared/_assets sync //.(png|webp|jpe?g|svg)$","tenants/shared/_assets/cie/logo-dark.svg","tenants/shared/_assets/cie/logo-white.svg","ui/hooks/usePlatform.ts","tenants/shared/_assets/cie/logo.svg","tenants/shared/_assets/ciss-icons/amh/amhSanta.svg","tenants/shared/_assets/ciss-icons/amh/solid.svg","tenants/shared/_assets/ciss-icons/amh/text-landscape.svg","tenants/shared/_assets/ciss-icons/amh/text-large.svg","tenants/shared/_assets/ciss-icons/amh/transparent.svg","tenants/shared/_assets/ciss-icons/amh/white.svg","tenants/shared/_assets/ciss-icons/diary/solid.svg","tenants/shared/_assets/ciss-icons/diary/transparent.svg","tenants/shared/_assets/ciss-icons/diary/white.svg","tenants/shared/_assets/ciss-icons/directory/solid.svg","tenants/shared/_assets/ciss-icons/directory/transparent.svg","tenants/shared/_assets/ciss-icons/directory/white.svg","tenants/shared/_assets/ciss-icons/vaks/solid.svg","tenants/shared/_assets/ciss-icons/vaks/transparent.svg","tenants/shared/_assets/ciss-icons/vaks/white.svg","tenants/shared/_assets/flags/aboriginal.svg","tenants/shared/_assets/flags/lgbt.svg","tenants/shared/_assets/flags/torres-strait.svg","tenants/shared/_assets/healthengine/logo-white.svg","tenants/shared/_assets/healthengine/logo.svg","tenants/shared/_assets/markers-svg/diary.svg","tenants/shared/_assets/markers-svg/directory.svg","tenants/shared/_assets/markers/diary.png","tenants/shared/_assets/markers/directory.png","ui/debug/debug-helper/Mono.jsx","tenants/nqphn/content sync //.md$","tenants/nqphn/content/static/default/about.md","tenants/nqphn/content/static/default/home.md","tenants/nqphn/content/static/default/kitchensink.md","tenants/nqphn/content/static/default/support.md","tenants/nqphn/theme.js","analytics/analytics-plugin-cie-elastic.js","analytics/analytics.js","ui/components/atoms/ComponentMap.jsx","ui/app/app-params-portal.ts","ui/nav/app-bar/AppBarTitle.jsx","ui/nav/app-bar/AppBarButton.jsx","ui/nav/app-bar/AppBar.jsx","ui/nav/menus/MainMenu.jsx","stores/route/route-utils.js","stores/root/utils/hash.js","stores/route/path-utils.js","stores/route/RoutePath.js","stores/route/RouteViews.js","stores/route/RouteStore.js","stores/route/search-route-machine.js","stores/debug/config.js","stores/debug/RouteMachine.js","stores/debug/DebugStore.js","ui/app/components/Headers.jsx","ui/nav/BackButton.jsx","ui/markdown/StaticMarkdown.jsx","ui/nav/menus/StaticMenu.jsx","ui/footer/FooterSection.jsx","ui/footer/Footer.jsx","ui/pages/content/ContentPage.jsx","ui/hooks/geolocation.js","ui/utils/location-utils.js","ui/location/GeolocationError.jsx","ui/location/LocationInput.jsx","ui/survey/SurveyLocation.jsx","ui/components/icon/FontAwesomeIcon.jsx","ui/components/buttons/Button.jsx","ui/pages/landing/LandingHero.jsx","ui/pages/landing/LandingTestimonials.jsx","ui/pages/landing/LandingPoints.jsx","ui/pages/landing/LandingRegAndList.jsx","ui/components/buttons/SiteSupportButton.jsx","ui/pages/landing/LandingContactUs.jsx","ui/pages/landing/Landing.jsx","ui/pages/emergency/Emergency.jsx","ui/pages/emergency/EmergencyBlock.jsx","ui/pages/selfhelp/SelfHelp.jsx","ui/pages/selfhelp/SelfHelpBlock.jsx","ui/pages/NotFound.jsx","ui/survey/SurveyQuestion.jsx","ui/survey/SurveyButtons.jsx","ui/survey/SurveyRadius.jsx","ui/survey/SurveyRadioGroup.jsx","ui/survey/SurveyCategories.jsx","ui/survey/SurveyInterests.jsx","ui/survey/SurveyScaleEval.jsx","ui/survey/SurveyStep.jsx","ui/survey/Survey.jsx","ui/search/information/Information.jsx","ui/search/params/SearchInput.jsx","ui/search/params/ParameterSelect.jsx","ui/search/params/GeographySelect.jsx","ui/search/params/RadiusSlider.jsx","ui/search/params/DateRangeParam.jsx","ui/components/atoms/LabelSwitch.jsx","ui/search/params/CategoryButtons.jsx","ui/components/atoms/IconLabel.jsx","ui/search/params/CategorySelect.jsx","ui/search/params/LocationsDisplay.jsx","ui/search/params/SearchParameters.jsx","ui/location/LocationDialog.jsx","ui/maps/ResultsMap.jsx","ui/maps/useLoadGoogleMaps.ts","ui/search/DesktopSearchToolbar.jsx","ui/search/information/InfoOnly.jsx","ui/search/results/Calendar.jsx","ui/footer/HHSOutlets.jsx","ui/search/DesktopSearch.jsx","ui/search/MobileSearch.jsx","api/legacy/cie-queries.js","api/legacy/query-helpers.js","stores/route/parse-url-query.js","ui/router/SearchRouteHandler.jsx","ui/search/Search.jsx","ui/pages/support/SupportForm.jsx","ui/pages/support/Support.jsx","api/legacy/browse-queries/browse-queries.js","ui/pages/browse/Browse.jsx","ui/pages/Scratch.jsx","ui/hooks/useScript.js","ui/pages/HHSOutletEventCalendar.jsx","ui/router/LocationRedirect.jsx","ui/router/SearchRedirect.jsx","ui/router/SearchStoreRedirect.jsx","ui/router/SurveyRedirect.jsx","ui/router/TenantRoutes.jsx","ui/app/components/FacebookPixelTag.jsx","ui/app/components/GoogleSiteVerification.jsx","ui/debug/debug-helper/Json.jsx","ui/debug/debug-helper/TestLinks.jsx","ui/debug/debug-helper/RouteMachine.jsx","ui/debug/debug-helper/DebugHelper.jsx","ui/debug/debug-helper/ReactQueryDevTools.jsx","ui/debug/redux-devtools/ReduxMonitors.jsx","ui/app/components/TelemetryService.js","ui/app/components/TelemetryProvider.jsx","appConfig.js","ui/hooks/useGoogleAnalyticsTagManager.js","ui/app/components/AppMain.jsx","ui/hooks/useAppAnalytics.js","ui/app/components/AppEntry.jsx","ui/app/query-client.ts","index.jsx","tenants/shared/assets.js","tenants/nqphn/survey.js","tenants/shared/survey.js","tenants/nqphn/assets/images/nqphn-logo.svg","tenants/nqphn/assets/images/nqphn_logo_white.svg","tenants/nqphn/assets.js","tenants/nqphn/assets/images/marker-wapha.png","tenants/nqphn/assets/images/wapha-toolbar-background@2x.png","tenants/nqphn/assets/images/NQPHN-commissioned-services-map-icons_First Nations health.png","tenants/nqphn/assets/images/NQPHN-commissioned-services-map-icons_Older Persons.png","tenants/nqphn/assets/images/NQPHN-commissioned-services-map-icons_Alcohol and Other Drugs.png","tenants/nqphn/assets/images/NQPHN-commissioned-services-map-icons_Chronic Conditions.png","tenants/nqphn/assets/images/NQPHN-commissioned-services-map-icons_Mental Health.png","tenants/nqphn/config.js","tenants/nqphn/map.js","tenants/shared/search.js","tenants/nqphn/assets/images/NQPHN-commissioned-services-map-icons_Population Health.png","tenants/nqphn/assets/images/NQPHN-commissioned-services-map-icons_Workforce.png","stores/root/utils/mobx.js","api/search-query/models/common.ts","api/search-query/models/ServiceResult.transformer.ts","api/search-query/models/EventResult.transformer.ts","api/search-query/queries/favourites.ts","api/search-query/queries/queries.ts","api/search-query/queries/infinite-results-transform.ts","api/search-query/components/SearchQueryHost.tsx","utils/string.ts","api/legacy/cie-api.js","ui/markdown/MarkdownAccordion.jsx","ui/nav/home-buttons/HomeButtons.jsx","ui/components/atoms/PreviousSearch.jsx","ui/footer/Flags.jsx","ui/markdown/SimpleMarkdown.jsx","config/config.ts","ui/vendor/neatjson.js","ui/hooks/useMediaProps.js","ui/footer/Sponsors.jsx","utils/types.ts","ui/search/results/results-control.ts","ui/footer/Acknowledgement.jsx","ui/nav/Link.jsx","stores/root/index.ts","ui/components/text/EmphasisEnglishList.jsx","ui/search/results/CovidAlert.jsx","ui/search/results/Promotions.jsx","ui/search/results/SearchResultsMarkdown.jsx","ui/search/results/SearchResultsList.jsx","ui/components/images/ImageList.jsx","stores/root/models/Content.js","stores/root/models/Tenant.js","stores/root/utils/filter-builder.js","stores/root/utils/query-builder.js","stores/root/models/Search.js","stores/root/models/Locality.ts","stores/root/models/Geography.ts","stores/root/models/SearchParams.js","stores/root/models/SearchUI.js","stores/root/models/SearchControl.js","stores/root/utils/search-utils.js","stores/root/models/Survey.js","stores/root/utils/scale-eval.js","stores/root/models/RootStore.js","stores/root/utils/storage-migrations.js","stores/root/utils/user-data.js","stores/root/utils/markdown.js","stores/root/store.js","utils/array.ts","ui/hooks/useResizeDetect.js","ui/components/images/ImageAsset.jsx","ui/components/images/Logo.jsx","ui/footer/CieBlock.jsx","ui/components/atoms/ErrorBoundary.jsx","ui/utils/object-filter.js","ui/hooks/useMergeOptions.js","ui/markdown/Markdown.jsx","ui/hooks/useParentMutationObservers.ts","ui/utils/asset-utils.js","ui/search/results/Badge.jsx","ui/search/results/HealthEngineAppointment.jsx","ui/search/results/NetworkMember.jsx","ui/search/results/BadgeList.jsx","ui/components/atoms/IconText.jsx","ui/search/results/SearchResult.jsx","api/legacy/index.ts","stores/root/utils/survey-utils.js"],"names":["themesContext","createContext","tt","require","themes","base","createTheme","variants","_","mapValues","t","responsiveFontSizes","deepmerge","loadThemes","useTenantThemes","useContext","TenantThemeProvider","theme","children","tenantThemes","get","map","webpackContext","req","id","webpackContextResolve","__webpack_require__","o","e","Error","code","keys","Object","resolve","module","exports","ieVersion","ua","match","isApple","family","getPlatform","pl","platform","isBot","isbot","os","usePlatform","React","useState","tokens","backgroundColor","color","menuColor","menuHover","menuSelected","menuSelectedFontWeight","font","fontSize","Mono","styled","Box","Json","icon","cn","className","clsx","value","rendered","setRendered","useEffect","wrap","split","l","length","ol","il","lf","indexOf","wr","push","slice","repeat","join","forceWrap","neatJson","ValuesList","items","v","k","jv","sx","attributes","body","meta","colors","config","tenantConfig","dimensions","breakpoints","values","xs","sm","ph","md","lg","tb","xl","palette","primary","main","contrastText","secondary","default","grey","light","dark","background","text","typography","fontFamily","components","MuiCssBaseline","styleOverrides","MuiOutlinedInput","root","border","input","padding","MuiTabs","indicator","PrivateTabIndicator","transition","MuiTab","textTransform","textColorPrimary","opacity","AMSApp","width","maxWidth","margin","boxShadow","borderLeft","AMSMainMenu","list","paddingTop","AMSAppBar","props","elevation","position","zIndex","drawer","flexShrink","AMSAppBarGroup","down","spacing","AMSMenuButton","AMSAppBarTitle","flexGrow","logo","height","AMSDesktopSearch","parameterDrawer","minWidth","parameters","results","between","AMSDesktopSearchToolbar","display","content","backgroundSize","backgroundRepeat","right","top","toolbarButton","bundleMeta","payload","rid","ts","tsIso","Date","toISOString","bundleStat","cieElastic","userConfig","name","debug","index","queue","updateInterval","initialize","console","log","setInterval","logAnalytics","payloads","then","result","catch","err","error","finally","page","track","identify","loaded","tc","providers","provider","googleAnalytics","plugins","analytics","p","Analytics","app","ComponentMap","renderProps","ritems","component","media","queries","useTheme","reduce","res","query","prop","queryfn","warn","useMediaQuery","useMediaChecks","render","C","itemProps","filter","x","paramsPortalAtom","atom","undefined","withStyles","flexDirection","alignItems","justifyContent","textDecoration","marginRight","title","fontWeight","classes","disableLogo","disableTextTitle","href","to","otherProps","useConfig","titleText","options","logoSrc","assets","Root","MuiLink","rootProps","RouterLink","TitleLogo","src","alt","TitleText","contents","asArray","Typography","variant","dangerouslySetInnerHTML","__html","useAppBarButtonStyles","makeStyles","button","label","whiteSpace","AppBarButton","buttonProps","bprops","underline","Button","MenuButton","minHeight","iconButtonProps","IconButton","edge","PortalOutlet","target","useAtom","setPortal","ref","el","Group","left","fill","align","onMenuClick","componentMap","onClick","AppBarTitle","Sponsors","row","groupsProp","groups","rowsProp","rows","appBarProps","rkey","group","gkey","TenantTheme","Reset","forwardRef","MainMenu","observer","withRouter","history","menuId","menu","onToggleMenu","store","useRootStore","useAnalytics","ui","menus","handleReset","resetAll","handleTrackMenuItem","item","category","MenuItem","type","Divider","my","listItemProps","route","NavLink","Link","function","ListItem","ListItemIcon","listIcon","ListItemText","listText","i","onKeyDown","List","fullList","navLink","defaultMetaConfig","Liquid","templates","robots","titlePrefix","description","tkeys","migrateTemplates","other","pick","omit","explicitMatchParams","exact","strict","loadRouteConfig","routeOptions","routes","isArray","prepareRoutes","templateKeys","getUrlHash","url","params","str","a","c","charCodeAt","toString","hashJoaat","s","fromQueryString","isString","replace","queryParams","Qs","parse","splitMultipleParam","param","delimiter","joinMultipleParams","toUrlParam","strip","mapParams2","source","parameterMap","mapSourceSingle","isCanonical","paramsInfo","pm","pkey","skey","multiple","psrc","pmap","sparams","sp","multipleParamsInfo","mapSourceMultiple","mapParam","every","pi","mp","info","generateUrl","args","pt","pathType","path","fcan","canonical","hash","mparams","generated","generatePath","generatePathError","gen","RoutePath","_store","makeAutoObservable","this","_param","_debugLinks","links","json","rootStore","pathOptions","whitespace","generatedPaths","parameterMaps","pmaps","pn","mpmaps","prev","curr","searchRouteHandler","defaultRoute","pathTypeName","fromPairs","matchPath","pathConfig","matchedRoute","pathTypeReverse","cfgKeys","cfgs","compact","all","paramOptions","ptype","parameterMapNames","paramKey","sourceKey","set","bySource","byParam","pathTypes","location","search","routeInfo","pathSources","generateUrlFromRouteInfo","getSearchPathSources","optSource","mergedSource","routePathSource","pathKey","locality","categories","searchPathTypesParamLookup","asLocality","getSearchStoreInfo","searchStoreInfo","pathInfo","searchPathTypes","SearchRouteView","searchParams","selectedCategoriesMeta","RouteViews","searchRouteStore","pc","replaceAll","cats","tenant","categoriesFromParams2","RouteConfig","assign","_cfgkeys","_config","flatten","r","RouteQuery","RouteStore","helmetState","liquid","templateViews","cfg","routeViews","state","routeConfigsByPath","metaConfigs","chain","thru","otherOptions","mergeMetaConfigs","views","metaConfig","routeConfigViews","templateView","renderedTemplates","parseAndRenderSync","metaItems","rel","innerContent","buildMetaItems","routeStore","window","routeStoreContext","useRouteStore","RouteStoreUpdater","useLocation","useRouteMatch","updateFromReactRouter","pathname","key","choose","actions","raise","getBrowserUrl","updateBrowserUrl","urlInfo","browserUrl","clearQueryParams","setRedirectAction","redirectAction","defaultMachineOptions","logUrls","urls","table","setRouterInfo","router","setStoreInfo","initCurrent","defaultUrl","current","setRouterCurrent","setStoreCurrent","clearRedirect","redirect","setCurrentFromRedirect","setRedirectFromStore","removeQueryAndRedirect","guards","urlsInvalid","urlsValid","currentValid","resetLocation","rloc","unknownQueryParams","redirectFromDefault","routerChanged","storeChanged","routerMatchesStore","redirectMatchesRouter","searchRouteMachine","createMachine","initial","context","on","SET_ROUTER_INFO","send","SET_STORE_INFO","states","init","exit","ROUTER_INFO","cond","STORE_INFO","IDLE","idle","URL_CHECK","compare","entry","COMPARE_URLS","always","wait","CHECK_REDIRECT","finish","timeout","complete","onDone","parseUrl","pending","invoke","onError","data","success","after","restore","RESTORE","debugHelperConfig","populateConfigNode","node","parentPath","itemsSrc","spath","tail","child","storePath","RouteMachineDebug","consoleLogging","storageKey","appConfig","DebugStore","routeConfigStore","routeMachine","stores","show","saveHandler","selectedHelperPath","reactQueryDevtools","environment","process","_helper","_helperMenuState","reaction","asJson","saveData","JSON","stringify","toJS","localStorage","setItem","delay","pathMap","expanded","loadFromStorage","test","_searchRouteMachine","getItem","selectedHelper","pathStr","configMap","mapNode","forEach","buildConfigMap","helper","obj","h","build","helpers","hr","jh","allh","sortBy","_this","keyBy","debugStore","debugStoreContext","useDebugStore","Headers","metaTags","metaTagInfo","MetaTag","Helmet","onChangeClientState","setHelmetState","useStyles","marginBottom","goBack","StaticMarkdown","getStaticContent","contentId","SimpleMarkdown","StaticMenuItem","linkProps","innerItem","link","hide","includes","footerComponents","CieBlock","StaticMenu","Acknowledgement","FooterTitle","divider","FooterBlock","gridProps","titleClasses","blockTitle","blockTitleLabel","Grid","block","container","sectionTitle","sectionTitleLabel","blockContents","blocks","Container","footer","Footer","sections","section","overflow","flex","marginTop","ContentPage","backButton","minScrollbarLength","filterMap","councils","getCurrentPosition","Promise","reject","navigator","geolocation","pos","lat","coords","latitude","lng","longitude","enableHighAccuracy","maximumAge","addLocationProperties","stateLong","stateUrl","shortLabel","showLocationPropsLabel","locationPropsLabel","fields","f","loc","addState","lsplit","postcode","cleanLabel","re","RegExp","pcm","r1","spm","statePrefix","partials","Array","substr","sortedUniq","defaultLocationButton","onLocationChange","message","suggestDefaultLocation","defaultLocation","defaultLocationLabel","showError","showSuggestion","handleDefaultLocationClick","suggest","gutterBottom","size","mt","Collapse","in","Fade","mr","LocationAutocomplete","Autocomplete","locIcons","LocateMeButton","loading","showButtonLabel","iconClassName","startIcon","px","LocationInput","disabled","autoFocus","onChange","acprops","disableStateLabel","internalValue","setInternalValue","inputValue","setInputValue","inputRef","setInputRef","isHome","useDeepCompareEffect","isStateTreeNode","focus","filters","searchTerm","useQuery","getLocationSuggestions","staleTime","ms","hours","keepPreviousData","select","locFull","onSettled","geoloc","reset","locres","noOptionsText","localityFilters","onReset","onSuccess","setLoading","setError","setLocation","raiseError","locate","getLocation","filterDefs","filterFns","matchesTerms","uloc","useCurrentLocation","newValue","change","trackEvent","handleAutoselectChange","disableAutocomplete","fullWidth","autoHighlight","autoComplete","blurOnSelect","selectOnFocus","onInputChange","newInputValue","renderInput","inputProps","InputProps","endAdornment","adornments","Children","toArray","customEndAdornments","placeholder","OutlinedInput","borderRadius","getOptionLabel","option","isAlive","isOptionEqualToValue","filterOptions","SurveyLocation","survey","isMobile","FormControl","FormLabel","FormControlLabel","control","Checkbox","checked","FontAwesomeIconRoot","Icon","shouldForwardProp","boxSizing","inherit","small","medium","large","FontAwesomeIcon","fa","as","baseClassName","MuiButton","rounded","ClickAway","imgSrc","bottom","LandingHero","landing","gap","borderBottom","flexBasis","subvariant","cursor","mx","handleChange","maxHeight","heroNoIcon","objectFit","objectPosition","LandingTestimonials","paragraphs","trim","textAlign","ItemText","lines","line","LandingPoints","image","testimonial1","alignImage","arrow","primaryTypographyProps","noWrap","LandingRegAndList","SiteSupportButton","Contact","LandingContactUs","menuItems","contact","contactItems","mb","Landing","testimonials","testimonial_1","testimonial_2","intro","grid","accordion","accordionDetails","groupTitle","groupIcon","serviceLink","body1","marginLeft","serviceLinkIcon","ServiceLink","EmergencyAccordian","expandId","phone","chat","onAccordionClick","serviceLinkProps","Accordion","square","AccordionSummary","expandIcon","AccordionDetails","EmergencyGroup","Emergency","setExpanded","emergencyServicesButtonProps","handleAccordionClick","panel","emergencyButton","EmergencyItem","chatUrl","TransitionProps","addEndListener","done","document","getElementById","setTimeout","scrollIntoView","scollMode","behavior","EmergencyUsc","rootRef","useRef","scrollTo","disableElevation","appLink","lm","tel","web","appLinkConfig","ios","android","AppLink","Item","apps","lp","Block","NotFound","labelIcon","question","strings","hideLabel","hideDescription","hideIcon","labelRoot","SurveyButtons","pathway","resolveVariantStrings","buttons","suffix","slider","marks","m","valuetext","SurveyRadius","Slider","getAriaValueText","defaultValue","min","max","step","valueLabelDisplay","event","radioGroupRow","SurveyRadioGroup","valueField","labelField","deselect","handleRadioChange","nv","RadioGroup","Radio","CategoryButton","SurveyCategories","metaCategoryMap","selected","isSelected","findIndex","CategoryGroup","pull","categoryGroups","Interest","SurveyInterests","questionText","resolveVariantText","interests","interest","SurveyScaleEval","scaleEval","trackScaleEvalComplete","useCallback","summary","questions","q","setValue","Question","SurveyStep","stepConfig","questionProps","stepTitle","stepDescription","slide","SurveyButtonIcon","Survey","steps","next","nav","setNav","slideIn","setSlideIn","slideDirection","setSlideDirection","handleNavigateStep","directions","scrollTop","slideToStep","prevStep","nextStep","currentStepValid","currentStep","entryActions","Slide","direction","endIcon","Card","SurveyEntry","redirectRoute","pathwayConfig","finishRedirect","finished","hints","hintLabel","hintButton","Information","tabs","getSelectedInformation","setHints","closest","thints","tab","tabHint","HintButtons","setSelectedTab","showSearchIcon","tempValue","setTempValue","isSearch","onKeyPress","activeElement","blur","startAdornment","InputAdornment","searchIcon","tabIndex","ParameterSelect","ival","opts","Select","val","GeographySelect","paramConfig","queryKey","getGeographySelectOptions","cacheTime","refetchOnWindowFocus","rcroot","MuiRadiusSlider","sliderProps","muiMarks","onChangeCommitted","RCRadiusSlider","rcMarks","onAfterChange","RadiusSlider","DateRangeParam","anytimeSelected","delta","minDate","maxDate","addDays","start","end","pb","LocalizationProvider","dateAdapter","AdapterDateFns","locale","enLocale","DateRangePicker","startText","endText","onAccept","dr","some","startProps","endProps","Input","desktopModeMediaQuery","up","LabelSwitch","FormGroup","Switch","CategoryButtons","selectMode","handleSelectCategory","oldSel","newSel","isClearEnabled","Fragment","clearButton","clearIcon","IconLabel","iconClasses","CategorySelect","style","wrapper","LocationsDisplay","qparam","hhs","setHHS","hhsOutlets","setHHSOutlets","isCollapse","setIsCollapse","dataRsp","getGeographyMembers","rsp","hhsdata","dataset","member","getOutletsByOrgId","organisationId","outletData","preferredName","outlet","Url","preventDefault","origin","Name","Parameter","disableLabel","handleCategoriesChange","setSelectedCategories","handleShowAllCategories","setShowAllCategories","searchParamaterType","ctrl","showAllCategories","categoryMode","visibleCategories","selectedCategories","paramControl","SearchParameters","containerProps","cprops","iprops","disableLabels","controls","csx","otherCprops","columns","paramProps","LocationDialog","open","onClose","shortLocationFields","saveAndClose","Dialog","paper","fullScreen","reason","DialogTitle","DialogContent","DialogActions","ResultsMapLeaflet","lazy","Status","ResultsMap","searchId","containerRef","useStoreSearch","searchResults","useSearchResults","apiKey","googleMapsApiKey","version","isLoaded","setIsLoaded","isError","setIsError","retries","Loader","load","useLoadGoogleMaps","Loading","mapProps","flat","defaultMapParams","selectedResult","onSelect","Suspense","fallback","DesktopSearchToolbar","showSearch","onClickSearch","desktop","print","useHistory","selectedTab","homeButton","searchButton","paramsDrawer","breakpoint","componentRef","handlePrint","useReactToPrint","getElementsByClassName","tabsWrapper","ml","Tabs","indicatorColor","textColor","tabc","Tab","tabLabel","isShowPrintButton","availableTabIds","Set","selectedTabId","has","isTabAvailableToPrint","hidden","box","viewInfoButton","InfoOnly","selectedInformationCategory","infoTab","py","useIconStyles","distance","openingHours","HtmlTooltip","popper","tooltipClasses","tooltip","pxToRem","getMomentFromTimeString","noSecond","isEnd","moment","format","add","compareDistance","b","defaultOperatingDays","dayOfWeek","dayOfWeekName","startTime","endTime","alwaysOpen","isDefault","AllDayEventsOperatingDays","DailyEventOpeningDays","startAt","endAt","startMoment","endAtMomnet","diff","day","Calendar","servicesResultsStore","eventsResultsStore","servicesResults","setServicesResults","eventsResults","setEventsResults","events","setEvents","resources","setResources","directoryURL","diaryURL","calendarKey","fullCalendarProductKey","renderEvents","eventsResultO","repeats","operatingDaysArray","recurrencePattern","repeatOnDay","d","parseInt","repeatEvery","isAllDay","combine","concat","startDate","endDate","datesObj","newPatterns","np","resourceId","HTML5_FMT","DATE","borderColor","date","generateEvents","weekday","calendarTitle","sort","distanceLabel","dis","address","time","operatingDays","outletNickname","locationTitle","validRange","before","future","schedulerLicenseKey","resourceTimelinePlugin","initialView","resourceAreaHeaderContent","headerToolbar","center","customWeeks","duration","weeks","slotLabelFormat","month","hour","slotDuration","buttonText","eventDidMount","isDefaultOpeningHour","extendedProps","eventTooltip","createElement","querySelector","parentNode","insertBefore","nextSibling","displayTime","ReactDOM","resourceAreaWidth","resourceOrder","resourceLabelDidMount","resourceProps","resource","_resource","addressDiv","outletNicknameDiv","servcieCatDiv","toolTipDiv","innerText","appendChild","previousSibling","onclick","renderIn","Tooltip","fieldValue","HHSOutlets","scrollMenu","flexWrap","TabPanel","tabPanel","role","ParametersScrollContainer","searchParamProps","suppressScrollX","mapFooterComponents","MapFooter","Results","mapFooterProps","mapFooter","infoCategory","SearchResultsList","mapContainer","tabComponentsMap","informationOnly","SearchResults","TabComponent","Component","DesktopSearch","scfg","dscfg","setShowSearch","showLocation","setShowLocation","isTablet","initLocation","desktopParams","parameterGroups","appBarParams","appBar","paramsPortal","locationDialogShown","clearTimeout","toggleShowSearchParams","setLocationDialogShown","Portal","SwipeableDrawer","anchor","onOpen","overflowX","borderRight","information","bottomToolbar","borderTop","bottomNavigation","paramaterDrawer","searchFab","modeFab","modeIcon","bottomIcon","buttonIcon","fab","viewMode","viewModes","useDrawerStyles","borderTopLeftRadius","borderTopRightRadius","innerHeight","paddingBottom","closeButton","OptionDrawer","Drawer","MobileSearch","setViewMode","viewOptionsDrawer","setViewOptionsDrawer","enableMap","isSearchCategorySelected","mobileSearch","mobileCategories","handleClickToggleSearch","pg","Fab","BottomNavigation","showLabels","setTab","BottomNavigationAction","queryClient","axios","create","baseURL","apiURL","headers","Authorization","transformResponse","defaults","humps","cieQueries","queryId","client","request","method","alias","paramKeys","longUrl","council","localities","pathLinkItems","clients","dummy","accept","testFail","paarams","local","view","paramQueryFn","queryDef","queryConfigs","cacheFromStore","getQueryDefs","paramInfo","sk","mapKeys","pk","paramMap","_sourceKey","_queryConfig","queryConfig","queryFnArgs","queryFn","getCieQueryDef","getQueries","queryDefs","fetchQuery","querySearchUrlParams","routerParamInfo","storeParamInfo","fetches","queryResults","qd","qdi","isSuccess","contextKeys","dataKeys","useDebugLogging","service","enabled","debugData","setDebugData","onTransition","ck","dk","getUrlInfo","dd","useRouterHash","routerState","setRouterState","rinfo","getRouterInfo","SearchRouteHandler","routerInfo","useQueryClient","storeInfo","useInterpret","cacheQueryResultsFromStore","setQueryData","cacheQueryResults","getQueryParamInfo","writeQueryResultToStore","updateFromRouterHandler","services","queryRouteParams","toJSDeep","useActor","enableConsoleLogging","ststr","toStrings","onEvent","useConsoleLogging","debugHelpers","setUrlInfo","$srm","ResultsControlUpdater","setSelectedResult","useResultsControl","subscriber","searchCount","Search","isSearchRouteHandlerEnabled","URLSearchParams","isDesktop","Number","transform","customInput","BootstrapTextField","TextField","SupportFormSchema","Yup","shape","email","required","subject","initialValues","SubmitConfirmation","DialogContentText","SupportForm","showConfirmation","setShowConfirmation","confirmation","setConfirmation","site","freshdeskTitle","handleSubmit","setSubmitting","resetForm","ticket","Site","FromName","FromEmail","Subject","Message","submitSupportTicket","clone","CustomInputComponent","field","form","touched","errors","validationSchema","onSubmit","dirty","isValid","submitForm","isSubmitting","InputLabelProps","shrink","multiline","Help","checkState","lookup","getStates","shortUrl","cs","getCouncilsForState","councilUrl","displayNameCouncil","getLocalitiesForCouncil","locationName","getLocalityByParams","stateName","defaultItems","categoriesRoot","categoryInfo","searchLocation","localityId","categoriesRoute","titleWithSuffix","staticContent","bottomItems","withLocation","routePath","deferRouteGeneration","g","really","linkIcons","browse","ItemLink","innerProps","linkType","regionLink","ReactRouterLink","regionLinkText","regionLinkIcon","Title","Items","BottomItems","citems","nameTemplate","StaticContent","getContent","defaultRegionsOptions","regionPrefix","searchPrefix","categoryPrefix","Browse","useMergeOptions","qid","bquery","qopts","paths","qkey","qfn","qres","addPathItems","gr","qp","apkeys","apadd","it","browseQuery","m2ms","isLoading","refetch","CircularProgress","thickness","progress","actionContainer","actionButton","testLink","Scratch","sponsors","vctSouthWest","useScript","script","async","removeChild","styles","mainWrapper","calendarWrapper","calendar","HHSOutletEventCalendar","urlSplitArray","outletId","outletName","progressContainer","LocationRedirect","redirectTo","setRedirect","isPending","useAsync","promiseFn","onResolve","SearchRedirect","rw","rewrites","topath","SearchStoreRedirect","ready","setReady","SurveyRedirect","routeComponents","amsComponents","Redirect","resolveComponent","TenantRoutes","RouteComponent","ContainerComponent","FacebookPixelTag","tagId","facebook","GoogleSiteVerification","googleSiteVerification","Dump","jsonObj","objectForHelper","TestLinks","RouteMachine","urlJson","DebugButton","DebugPanel","DebugContents","DebugMenuContainer","DebugMenuItemContainer","HostContainer","InfoTitle","DebugMenu","handleItemClick","setHelper2","DebugMenuItem","DebugMenuItems","ReactQueryEnable","rqenabled","toggleReactQuery","pr","DebugHelperHost","helperConfig","H","renderHelper","DebugHelper","toggleShow","ReactQueryDevtools","ReactQueryDevtools_","createDevTools","DockMonitor","toggleVisibilityKey","changePositionKey","defaultIsVisible","LogMonitor","reactPlugin","appInsights","ai","instrumentationKey","browserHistory","ReactPlugin","ApplicationInsights","maxBatchInterval","disableFetchTracking","extensions","extensionConfig","identifier","loadAppInsights","TelemetryProvider","initialized","AppInsightsInstrumentationKey","Boolean","setState","withAITracking","appicationConfig","useGoogleAnalyticsTagManager","containerID","isDirectInstall","scriptRef","noScriptRef","tagRef","textContent","tagscript","setAttribute","head","iframe","visibility","noscript","applicationInsightIKey","iKey","DebugHelper_","initialIsOpen","toggleButtonProps","AppMain","mainMenu","setMainMenu","toggleMenu","AppAnalytics","setPath","registerOutboundTracking","addEventListener","getAttribute","updatePath","useAppAnalytics","isUndefined","containerId","scripts","getElementsByTagName","srcValues","removeDuplicateScript","AppContainer","useResizeDetect","appHeight","baseUrl","URL","setAxiosConfig","AppEntry","useWebSoragePersistor","QueryClient","defaultOptions","minutes","localStoragePersistor","createWebStoragePersistor","storage","persistQueryClient","persistor","createQueryClient","instance","StyledEngineProvider","injectFirst","StylesProvider","ThemeProvider","CssBaseline","rctx","self","queryMap","followPrevious","scoring","score","questionsMap","images","acc","camelCase","cie","flags","healthengine","headerIcons","directory","cissIcons","transparent","diary","mapMarkers","markers","mapMarkersSvg","markersSvg","shared","mapMarker","toolbarBackground","badges","badge","combineMode","informationCategories","defaultCategoryTitle","defaultCategorySuffix","trackingId","siteSpeedSampleRate","navigation","disableParams","locationZoom","selectionZoom","featureType","elementType","stylers","weight","locationBoundary","stroke","fillColor","fillOpacity","defaultView","zoom","zoomLevels","geography","geographySelect","sources","categorySelect","resultsList","favourites","resultItem","hideVariant","inactive","showCategory","showOrganisationName","searchOptions","tags","extraIcon","FirstNationIcon","OrderPersonIcon","AlcoholnDrugIcon","ChronicIcon","MentalHealthIcon","showLocationDialog","area","kmlUrl","builder","sortField","sortDirection","searches","pageSize","showSiteSupport","defaultFilter","terms","serviceTags","getNode","isObservableArray","isObservableObject","isObject","formatDistance","toFixed","formatAddress","addressSummary","buildingAddress","address1","address2","suburb","removeNulls","convertServiceChanges","serviceChanges","now","find","serviceResultTransformer","cieService","latLng","geocodeLat","geocodeLong","parseFloat","organisationID","outletID","nickname","serviceId","operatingDaysDisplay","serviceTitle","organisationName","displayAddress","addressFields","addressWithheld","commissionedServiceId","logoUrl","healthEngineId","healthEngineID","healthEngineStatus","regions","serviceRegionNames","tagID","serviceCohortTags","tagOwnerType","tagName","networks","geometry","eventResultTransformer","locationAddress","eventInstanceID","eventName","startDay","instanceStartDay","startMonth","instanceStartMonth","phone1","textOnlyDescription","instanceUrl","endDay","startsAt","endsAt","favouritesAtom","atomWithStorage","favouritesAtomLookup","useFavourite","updateFavourites","useUpdateAtom","useAtomValue","isFavourite","toggleFavourite","removeAt","searchResultsAtomFamily","atomFamily","useUpdateSearchResultsAtom","useSearchResultsAtom","updateResults","effectArray","hashQueryKey","status","hasNextPage","isFetchingNextPage","useCieInfiniteSearch","queryKeyFn","cieApiFn","nextPageParam","transformer","searchType","querySummary","useInfiniteQuery","pageParam","getNextPageParam","lastPage","allPages","transformed","queryKeyHash","setHistory","isNewQuery","newPages","pages","response","newResults","useInfiniteResultsTransform","pageParams","inner","ret","useFavouritesSearch","DirectorySearch","getSearchDirectoryQueryKey","searchDirectory","useDirectorySearch","DiarySearch","getSearchDiaryQueryKey","searchDiary","useDiarySearch","FavouritesSearch","SearchQueryHost","queryProps","toEnglishList","terminator","take","last","transformRequest","rstate","rcouncil","rdata","toLocation","LocalityID","LocationName","councilId","CouncilID","State","Postcode","Latitude","Longitude","CouncilUrl","StateUrl","toLocationL","toLocalityL","sloc","getLocation2","qstr","limitToCouncils","limitToStates","post","SearchTerm","getPromotions","toGeography","gm","geographyId","centralLatitude","centralLongitude","kmlLocation","lgas","getGeographyById","getGeographyByDataset","geog","gis","gi","otherGeographyId","zip","selectFetches","unmapped","ress","orderBy","sourceFetches","allResults","details","MarkdownAccordion","summaryText","toLowerCase","scrollMode","HomeButton","iconContainer","buttonSx","layout","toTab","loadiconWithId","btnDict","homeButtons","iconImgSet","IconComp","btnSX","iconSX","labelSX","btnStyle","handleHomeBtnClick","startsWith","stackStyle","column","displayMode","mode","PreviousSearch","flagAltText","aboriginal","torresStrait","lgbt","flag","flagIds","Flag","SiteSupport","ul","paddingInlineStart","li","overrides","h1","h2","h3","h4","paragraph","h5","faq","homebuttons","HomeButtons","disclaimer","navlink","imgasset","ImageAsset","Logo","previoussearch","sitesupport","cieblock","Flags","makeOptions","configState","REACT_APP_CIE_API_URL","REACT_APP_DIRECTORY_URL","REACT_APP_DIARY_URL","cdnURL","legacyConfig","configAtom","indent","arrayPadding","objectPadding","beforeComma","aroundComma","afterComma","beforeColon","aroundColon","afterColon","beforeColon1","aroundColon1","afterColon1","beforeColonN","aroundColonN","afterColonN","apad","opad","comma","colon1","colonN","memoize","WeakSet","memo","Map","byIndent","rawBuild","Infinity","isNaN","decimals","pieces","oneLine","short","indent2","indentLast","sortedKV","sorted","kv","keyvals","aligned","longest","padRight","kvs","times","pad","substring","neatJSON","useMediaProps","findBreakpoint","findLast","setCurrent","useBreakpoint","updateTransformedProps","walkNode","valueKeys","mediaKeys","intersection","unknownKeys","difference","matchedKey","transformMediaProps","transformedProps","setTransformedProps","mixin","pickValues","buildSponsorsList","geographyMembers","membershipOverrides","apfx","assetPrefix","assetMap","itemSet","normalizeAssetPrefix","sponsor","website","presets","assetName","pfx","asset","resolvePrefixedAsset","imageList","imageListStyles","imageListIe11","imageContainer","imageContainerIe11","imageListProps","mediaProps","ie11","itemSetId","itemSets","showSponsors","imageListClasses","ImageList","subscriberFamily","deepEqual","popupStateAtom","active","closing","selectedResultAtom","selectedResultTimestampAtom","update","t1","t2","popupState","BaseLink","mergeProps","CieLink","bases","EmphasisEnglishList","boldItems","useTerminator","maxItems","remainderText","rem","kept","remainder","innerHTML","arr","delim","typographyProps","CovidAlert","showAlert","covidAlertShown","covidAlert","setCovidAlertShown","Promotions","captionText","CardContent","ActionContainer","Welcome","w","welcome","componentProps","titleProps","bodyProps","handleClickResult","SearchResult","onClickResult","StatusHeader","count","maxVerboseCategories","Line","GreyPrimaryLinearProgress","LinearProgress","linearProgressClasses","colorPrimary","bar","StatusFooter","useInView","inView","fetchNextPage","StatusFooterInner","isFetching","loadMore","handleClickSiteSupport","FavouritesStatus","resultsCount","SearchResultsMarkdown","contentPrefix","SearchResultsSections","commonProps","ErrorBoundary","sectionItems","SearchResultsListInner","srl","scrollToTop","scrollToSelected","scrollToSelectedCallbackRef","callback","useParentMutationObservers","element","mutationObservers","selector","onMutation","handleClickOutside","stopPropagation","alertBlock","initBlock","statusSponsorBlock","statusHeaderBlock","resultsBlock","statusBlock","footerBlock","ikey","ContentItem","types","model","literal","Content","selectedInformation","noContent","sc","getRoot","TenantOptions","enumeration","optional","boolean","MetaCategory","titleSuffix","maybeNull","array","integer","commissionedServices","diaryFormat","volatile","suffixRegex","titleWithoutSuffix","urlFormatted","setVolatile","Tenant","metaCategoryLookups","lucap","lu","mv","mk","getCategory","categoriesForIds","metaCategoryIds","catId","mc","categoriesFromParams","cmode","rconfig","pp","cm","cl","combinedParamArray","iterator","metaCategories","uniq","flatMap","commissionedServiceCategoryMap","cscats","csid","localeCompare","categoriesForCommissionedService","region","loadVolatile","cat","builders","nodeBuilder","nodeMap","nodeBuilders","elastic","bool","bkeys","and","or","not","bfe","n","buildNode","nkey","nmap","bldkey","bld","paramMaps","age","ageMin","ageMax","AgeMin","AgeMax","gender","Male","Female","fixed","pageNumber","categoriesRequired","locationRegion","locationRegions","isIncludeOutsideRegion","defaultGeoId","serviceRegions","queryBody","ac","gids","extendedFilters","nested","radius","should","minimum_should_match","rawFilters","pageNo","whatText","serviceCategories","locationId","radiusKM","dateRange","from","whenIndex","searchFrom","searchTo","diaryFormatId","buildQuery","paramOverrides","builderId","builtQuery","pargs","paramBuilder","paramResult","searchInterfaces","buildParams","australia","australial","filterMode","queryTotal","total","lastResultsCount","resultsHeader","prefix","apiParams","combinedParams","activeFilters","activeCategories","so","nb","buildFilter","rawFilter","activeCategoriesArray","canLoadMore","hasResult","resultsMap","canAddFavourite","favouritesSearch","locationZoomLevel","mapConfig","defaultZoom","zmap","mapParams","mapResults","combinedRawFilters","catFilters","topts","isInformationOnly","isFunction","allParams","pageParamKey","setDefaultFilter","setResults","setQueryTotal","clear","insert","removeById","setSelected","ri","splice","initSearch","setSearchResultsFromReact","clea","resUnique","tryAgain","nextPage","performSearch","flow","apiParamsObs","Locality","summaryArray","Geography","number","adminBoundaryUrl","DateRange","SearchParams","union","string","sexuality","atsi","isPreferredCategory","getParent","isLocationParamsSelected","urlParamsSource","setQuery","setRadius","setDefaultLocation","mcm","sf","updateFromSurvey","autoSelectSingleCategory","cid","SearchUI","setParamsPortal","SearchControl","contentRegions","_searches","entries","locationSummary","categoriesSummary","scm","without","lt","activeCategoriesSet","contentRegion","regionId","loadDefaultFilters","loadContentRegions","bang","visible","loadFavourites","fs","fav","toFavourite","Location","pathwaysMap","pathways","cur","scaleMap","scoreCache","scores","range","ScaleEval","evalScore","evalKessler","categoriesModified","evaluateStepRules","psi","nsi","mappedCategoriesForStep","mapCategories","mapInterestCategories","se","mapScaleEvalCategories","mapPropertyCategories","mappedCategories","mapped","reverse","scaleEvalPayload","seids","setSteps","resetSurvey","dump","applyMappedCategories","RootStore","afterCreate","postInit","autorun","psjson","defaultParams","migrations","migrate","userData","markdownContent","loadMarkdown","defaultUserData","loadDefaultUserData","buildStoreConfig","merge","initStoreConfigs","storedUserData","loadFromLocal","migrated","cloneDeep","loadStoredUserData","defaultConfig","configure","useProxies","enableLogging","predicate","storeContext","getSize","innerWidth","setSize","resizeListener","removeEventListener","srcId","getFullYear","hasError","errorInfo","matchObject","matchValue","isEqual","observers","setObservers","clearObservers","disconnect","obs","attributeName","parent","MutationObserver","mutations","mf","observe","maskedParams","mask","rv","inactiveBadges","labelContainer","borderWidth","borderStyle","faIcon","bundleIcon","textOverflow","defaultBadgeOptions","Badge","configureOptions","om","setOpts","useBadgeOptions","cdnMatch","resolveImage","NextAppointment","nextAppointment","bookingUrl","healthEngineButton","healthEngineButtonLabel","HealthEngineLogo","onQueryChanged","useGetHealthEngineNextAppointment","heresponse","NetworkMember","imageProps","networkId","BadgeList","resultBadges","IconText","iconClass","separator","spacer","topInfo","headerIcon","mcdIcon","datePill","datePillDiary","componentBlock","logoSmall","titleBlock","organisation","chip","cohortChip","breakInside","Separator","HeaderIcon","Details","Spacer","Header","showSeparator","logoClass","categoryValue","Description","AddressWithheld","ServiceChanges","HealthEngine","allianceMember","ServiceRegionNames","Chip","ServiceCohortTags","tag","Actions","confirmDeleteFav","setConfirmDeleteFav","handleClose","handleResultClick","ResultContents","displayName","ops","eq","a0","a1","neq","contains","ruleset","rule","a0key","op","cmap"],"mappings":"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","file":"static/js/main.cd95d5d1.chunk.js","sourcesContent":["import React, { createContext, useContext, forwardRef } from 'react'\n\nimport _ from 'lodash'\nimport deepmerge from 'deepmerge'\n\nimport {\n createTheme,\n responsiveFontSizes,\n ThemeProvider,\n} from '@mui/material/styles'\n\nconst loadThemes = () => {\n const tt = require(`../../tenants/${process.env.TENANT}/theme`)?.themes\n if (!tt?.base) return {}\n\n const base = createTheme(tt.base)\n const variants = _.mapValues(tt.variants || {}, (t) =>\n responsiveFontSizes(createTheme(deepmerge(tt.base, t)))\n )\n\n return { base, variants }\n}\n\nconst themesContext = createContext(loadThemes())\n\nexport const useTenantThemes = () => useContext(themesContext)\n\nexport const TenantThemeProvider = ({ theme, children }) => {\n const tenantThemes = useTenantThemes()\n const tt = _.get(tenantThemes, theme)\n\n if (!children) return null\n if (!tt) {\n // console.warn(`Theme ${theme} not defined`)\n return <>{children}\n }\n\n return {children}\n}\n\nexport const withTenantTheme = (theme) => (Component) =>\n forwardRef(function WithTenantTheme(props, ref) {\n return (\n \n \n \n )\n })\n","var map = {\n\t\"./cie/logo-dark.svg\": 1078,\n\t\"./cie/logo-white.svg\": 1079,\n\t\"./cie/logo.svg\": 1080,\n\t\"./ciss-icons/amh/amhSanta.svg\": 1081,\n\t\"./ciss-icons/amh/solid.svg\": 1082,\n\t\"./ciss-icons/amh/text-landscape.svg\": 1083,\n\t\"./ciss-icons/amh/text-large.svg\": 1084,\n\t\"./ciss-icons/amh/transparent.svg\": 1085,\n\t\"./ciss-icons/amh/white.svg\": 1086,\n\t\"./ciss-icons/diary/solid.svg\": 1087,\n\t\"./ciss-icons/diary/transparent.svg\": 1088,\n\t\"./ciss-icons/diary/white.svg\": 1089,\n\t\"./ciss-icons/directory/solid.svg\": 1090,\n\t\"./ciss-icons/directory/transparent.svg\": 1091,\n\t\"./ciss-icons/directory/white.svg\": 1092,\n\t\"./ciss-icons/vaks/solid.svg\": 1093,\n\t\"./ciss-icons/vaks/transparent.svg\": 1094,\n\t\"./ciss-icons/vaks/white.svg\": 1095,\n\t\"./flags/aboriginal.svg\": 1096,\n\t\"./flags/lgbt.svg\": 1097,\n\t\"./flags/torres-strait.svg\": 1098,\n\t\"./healthengine/logo-white.svg\": 1099,\n\t\"./healthengine/logo.svg\": 1100,\n\t\"./markers-svg/diary.svg\": 1101,\n\t\"./markers-svg/directory.svg\": 1102,\n\t\"./markers/diary.png\": 1103,\n\t\"./markers/directory.png\": 1104\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 1077;","export default __webpack_public_path__ + \"static/media/logo-dark.ff0e8b81.svg\";","export default __webpack_public_path__ + \"static/media/logo-white.346d194a.svg\";","import React, { useState } from 'react'\n\nimport platform from 'platform'\nimport isbot from 'isbot'\n//import { PlatformPath } from 'path/posix'\ntype Platform = typeof platform\n\nconst ieVersion = (ua?: string) => ua?.match(/(?:\\b(MS)?IE\\s+|\\bTrident\\/7\\.0;.*\\s+rv:)(\\d+)/)?.[2]\nconst isApple = (family?: string) => !!family?.match(/^(iOS|OS X)$/)\n\nexport type UsePlatformState = {\n platform: Platform\n isBot: boolean\n ieVersion?: string\n isApple: boolean\n}\n\nexport const getPlatform = (pl: Platform = platform): UsePlatformState => ({\n platform: pl,\n isBot: isbot(pl.ua),\n ieVersion: ieVersion(pl.ua),\n isApple: isApple(pl.os?.family),\n})\n\nexport const usePlatform = (): UsePlatformState => React.useState(getPlatform(platform))[0]\n","export default __webpack_public_path__ + \"static/media/logo.20ff9d3c.svg\";","export default __webpack_public_path__ + \"static/media/amhSanta.d9a9c807.svg\";","export default __webpack_public_path__ + \"static/media/solid.9661e94d.svg\";","export default __webpack_public_path__ + \"static/media/text-landscape.2c565ed6.svg\";","export default __webpack_public_path__ + \"static/media/text-large.4d0dc6fb.svg\";","export default __webpack_public_path__ + \"static/media/transparent.55a9efc5.svg\";","export default __webpack_public_path__ + \"static/media/white.f110bc75.svg\";","export default __webpack_public_path__ + \"static/media/solid.7613a94f.svg\";","export default __webpack_public_path__ + \"static/media/transparent.5f919e4c.svg\";","export default __webpack_public_path__ + \"static/media/white.818cc5f7.svg\";","export default __webpack_public_path__ + \"static/media/solid.e039e767.svg\";","export default __webpack_public_path__ + \"static/media/transparent.3e2aec27.svg\";","export default __webpack_public_path__ + \"static/media/white.82e604a1.svg\";","export default __webpack_public_path__ + \"static/media/solid.c896b01e.svg\";","export default __webpack_public_path__ + \"static/media/transparent.aeb5ae55.svg\";","export default __webpack_public_path__ + \"static/media/white.649414a2.svg\";","export default __webpack_public_path__ + \"static/media/aboriginal.ba1edf92.svg\";","export default __webpack_public_path__ + \"static/media/lgbt.dbea5ec0.svg\";","export default __webpack_public_path__ + \"static/media/torres-strait.b353b059.svg\";","export default __webpack_public_path__ + \"static/media/logo-white.0f286a99.svg\";","export default __webpack_public_path__ + \"static/media/logo.9c50894c.svg\";","export default __webpack_public_path__ + \"static/media/diary.c223a2f2.svg\";","export default __webpack_public_path__ + \"static/media/directory.247cd565.svg\";","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAkCAYAAACaJFpUAAAACXBIWXMAAAsSAAALEgHS3X78AAAEH0lEQVRIia2Xb2gbdRjHn1wuySW55NKsaZMuJk36b2vr3BvFUZAyN0RXXBmbUiaoILoXeyVT9M0E8YVgEV8oOBEUYfjGF3O4V3NSdFM2FbrR2lbbxrjGzK5Lc/mfyyUnz3UXbvnd7q7tPpBwef598/s9d09+sUiSBCYZnVniX7JSll4XYw1jSqlSX6k3pMXhHu5LAJgyU8ZI0DezxH8UbHceu3Qt7ZpJ8nA7X4U/M0XZ2e93Q8DjgOEoB/seDvBVof59X8RzCgD+JioZCc4u8x+4GfrE1z8k2YsLq4Rfi4MDHTCxP1ooVsRPh+LcGxoh2oJzidzlRLrw6GeXlu05QST8enjtNLz6ZFyIhdhfd8e8YwCQ1RVEsYu/pUfO3UjrlDW32pefji8EdzC71HZK/eGvf/Lf3Fhc37YYgm248HNqAGtqCi6vFMaKZfHQmR8TRPJWOXvtJuRLtcNYmxC0Wi0fT56bZx6Y2l0+/HaBdrvoz1sFR2cTfOjfQpVI2C5Y8/f5TJuySllwLpF775c/1uxmajdqJaiuJ+RXrZIj/Fqcv5qyV2uNt9BF4xvH2nZfSWY0Qu+luDoPxWxKZVsGxsmBZ+cjYKFsRLwCDgrUaK5wPS9QRJSh2AaVMg/51HXC3oqigW+jyVtFFxHRKqghphY12t6ZpawPtWTV9J2ybv9qpTuEjaBRI0xqCpWNiYWC2dAOp0BEqNHpj1lYhm4KTkeD7pJeno3xAkXRhF2N1eYkbGqGe3w4U6fkLW3z2BtERAve4ABhU2D9EaBs+reBoiELVqr16yNRPxGkxs4Gwdc1BDba0bTiqrlAHFztfUS8mr0hL/CF2hwoz2E8zL67b7B95Eoyo3vzoCi+8OGv10V5q81wYG9QcNio90E12qaGYlwaf8HNgNtnVqyLdQDWjofZ79SCUK9LJ08801shMrbJqfFdFazdbINygd/A7aQvHH/soQcmhrWwprI6UHqo0BfxHPWytluzN/nO6bT+5DACb5SxkZ3/dfqZo+pQYoZ2+pnH354YquDZZKtg7snDA2Ws1VqCEMQjXk1svPL6oX79WaUD5opi47TWcVFLELoCzrPhDtfl8T0hwmcE5mBuf9QzqRWqKQgbN9GRY6ORNbOPCtw9GGMO5hJOI0F5qAecB998brBspp8Yg7G3s9UjrWdRs4LING21TOLBlvC0gDHlqvjJnj7fT4RzE4IQCbpOD3Zzs3iwvR/ow5j7He83JYh0d7n3v/hULKPVTxxdxw908xhDODUwJYg9WctWx7FHrY53JoYFUWy8oNc3NWYFQe6NJH312hOxpg2vrZTlC/XoMoL4M2PEympp8cz5xR5Z8NnepXCHq9cg5R42LYh/Utd4ISU1JCrQ5sDJYGorFbYyMLO5vPA847BymxUDAPgflnCDBOx3uREAAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAkCAYAAACaJFpUAAAACXBIWXMAAAsSAAALEgHS3X78AAAEFElEQVRIia2WbWhbVRjHn3Nye5PcpGtrM7vOdllJauwYDNe5F+dg+IIDJyuDMdgm+kFxLSIEHIiTMURFcKMK25woKLr6xX0Y6D4MphRW6px1LzCdsS2uutp1xi2xaW6Sm9wjz0lvl+Tc3Huz7Qch4T4v//uc55yThzDGwCEb9dHhF4BKYfD42nhIZvYa6Pkx2vno5wAw6CSNnWCjPjr8AQkEt+WHv1bysfOgx6egcHWCG11Lg0ADrSBFVoJr5aYk5NTTNPjwawBwVchkJ6iP/fA+eOp357454s+dOS3YzZA3PAnys30pyMwcpeF1e0xczAX18XND+rUrj6gD/TJLpQW7FcSvgHdnNEfbun6iodWbASBhKYhi2tDx9dlTJyzSOqvWvW1PjAQ6Hip9TsvEJi4cL/w2fNdiCLZB+/7LCOY0FdT/vLQZ0sln1IEjQvCdkjlxDCB1awvPLVTokg6lP37Dc8/U5kh/8qZEfI2fVgpu1MdGWvUbcSHgbsGchcuDTUaVXFAfP/e29vN3spPcWR3gb5Xyz2yeCHYzsqeOyaBlX0eTxO3+pi5t5KyJazl/pCjcUHFXF3f2XxhaRyHSwEAi4vEy4BeFv6nr9pLOxKngVVWsnJTGIJZ0UOmcBuX9m/xdERwqMBMzQFG75S3EfmxErWIPpycs+5fUrJMh+ervw2Gz//FvFEzQlmBO8ChBcrY3LCG+BfOCF+kDD1pemD6JgctG1OOyLtEVWYN36mBxs9QHdMGjgo564dE8ixUAt922m9MoumXTl+pWrRV8Sml2MwgvAJDp7VKx6nY/gXafdXXSsuV4xV0B4xzSJSvequt+Yr02ctZy86AofvDw53XCl9o4k1bIG7bkoM79HpRcbYM0vGoK/8GdgMtXFLOH3h8AzE2XrPgWyi7vQv4V73N7M46y1IDy8rsZzG1EzAvyN1AaTnp6dt0zMZ5LaThpVAdm//js34nr6kfRlvyvl4UEtYAbxdvbP02ag4tKw4TNTJqDa719H2ZwNrlTMNbz/H4Vc1WmEARxxGNa5kXlpf2aYHEIjy1o+8zGRTNBoC2dA6SlY8j9dI9gswNjMJYu7T5g5ir0sIRG9s/4aLp/d8AYfO3AY6VEj8bJwlBn5XhoWeEcCbIw9JS396DqpJ98Hu09qLKbU1uridkJIhfBJR3AwVawVMB9srOHaeSxM4KxBkGgi5fto6HuX3CwrQba0KfaeF+TIHdqW/64vDV60+zqw6tL7nk1iT6C0QRHgrwnieke7FGlQYkezoGW3WXVt7IXFJ5UgfeGsS+8O/vmHfhvQj8rvbrssDoWpujXY2PZr94Joc29Y+84XRQJm/lVo2ZBfj5vTU4C0ym5r73V6VIaFAfh2kiwmfh2cCsNpEYxAID/Acm6gPd2m55yAAAAAElFTkSuQmCC\"","import React, { useEffect, useState } from 'react'\n\nimport _ from 'lodash'\nimport clsx from 'clsx'\n\nimport { styled, css } from '@mui/material/styles'\nimport { Box, Button, IconButton, Fab, Drawer } from '@mui/material'\n\nimport { neatJson } from '@/ui/vendor/neatjson'\n\nimport { Scrollbars } from 'react-perfect-scrollbar'\n\nexport const tokens = {\n backgroundColor: '#334',\n color: '#eee',\n menuColor: '#999',\n menuHover: '#fff',\n menuSelected: '#eee',\n menuSelectedFontWeight: '700',\n font: '\"JetBrains Mono\", monospace',\n fontSize: '12px',\n}\n\nexport const MonoBox = styled(Box)`\n position: absolute;\n display: flex;\n flex-direction: column;\n bottom: 0px;\n width: 100vw;\n z-index: 3000;\n background-color: ${tokens.backgroundColor};\n font-family: ${tokens.font};\n font-size: ${tokens.fontSize};\n color: ${tokens.color};\n`\n\nexport const Mono = styled(Box)`\n font-family: ${tokens.font};\n font-size: ${tokens.fontSize};\n padding: 16px;\n display: flex;\n flex-direction: column;\n`\n\nconst MFA = ({ icon, className: cn }) => (\n \n)\nexport const MonoFa = styled(MFA)`\n padding: 3px;\n`\n\nconst forceWrap = (value, wrap = 120) => {\n return value\n .split('\\n')\n .map((l) => {\n if (l.length < wrap) return l\n\n let ol = []\n let il = l\n\n const lf = l.indexOf(':') + 2\n const wr = wrap - lf\n\n ol.push(il.slice(0, wrap))\n il = il.slice(wrap)\n\n do {\n ol.push(' '.repeat(lf) + il.slice(lf, wrap))\n il = il.slice(wr, il.length)\n } while (il.length > 0)\n\n return ol.join('\\n')\n })\n .join('\\n')\n}\n\nexport const Json = ({ value }) => {\n const [rendered, setRendered] = useState()\n\n useEffect(() => {\n setRendered(() => forceWrap(neatJson(value)))\n }, [value])\n\n return {rendered}\n}\n\nconst ValueItem = styled(Box)``\n\nexport const ValuesList = ({ value }) => {\n const items = _.map(value, (v, k) => {\n const jv = neatJson(v)\n\n return (\n \n {k}: {jv}\n \n )\n })\n\n return {items}\n}\n\nexport const ScrollPanel = ({ children }) => {\n return (\n \n \n {children}\n \n \n )\n}\n","var map = {\n\t\"./static/default/about.md\": 1214,\n\t\"./static/default/home.md\": 1215,\n\t\"./static/default/kitchensink.md\": 1216,\n\t\"./static/default/support.md\": 1217\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 1213;","\nmodule.exports = { \n attributes: {},\n \n body: \"# About US\\n\\nRubber baby buggy bumper.\\n\",\n \n meta: {\"resourcePath\":\"/home/vsts/work/1/s/src/tenants/nqphn/content/static/default/about.md\"},\n }","\nmodule.exports = { \n attributes: {},\n \n body: \"
\\n \\n
\\n\\n
\\n\\n---\\n\\n
\\n\\nInformation & Services\\nAbout\\n\",\n \n meta: {\"resourcePath\":\"/home/vsts/work/1/s/src/tenants/nqphn/content/static/default/home.md\"},\n }","\nmodule.exports = { \n attributes: {},\n \n body: \"# Heading One\\n\\n## Heading Two\\n\\n### Heading Three\\n\\n#### Heading Four\\n\\n##### Heading Five\\n\\n###### Heading Six\\n\\nOrganic next level actually mixtape raw denim. Umami Neutra Odd Future umami selvage chambray sartorial dreamcatcher lo-fi butcher. Cliche Bushwick +1 meh 90's Marfa 90's. Tattooed aesthetic vinyl tofu McSweeney's occupy art party Tonx selfies High Life polaroid occupy selfies Shoreditch. Dreamcatcher four loko quinoa street art hoodie Shoreditch 8-bit swag photo booth quinoa DIY leggings bespoke banh mi food truck. Schlitz retro irony fixie fixie Truffaut Bushwick. Sartorial umami dreamcatcher DIY Cosby sweater swag flannel post-ironic lo-fi fixie kale chips.\\n\\nFashion axe fanny pack crucifix ennui narwhal Echo Park Neutra sustainable banh mi locavore. Artisan freegan lomo bitters selvage master cleanse pork belly cred butcher narwhal Truffaut raw denim ethical. Pug vinyl direct trade Wes Anderson crucifix. Wolf Brooklyn synth Bushwick ethnic plaid VHS asymmetrical 90's Pinterest banh mi try-hard flexitarian irony. McSweeney's gentrify you probably haven't heard of them scenester ethnic small batch shabby chic gluten-free craft beer.\\n\\n---\\n\\n## Unordered List\\n\\n* Ethnic gentrify PBR\\n* Put a bird on it YOLO\\n* Wes Anderson wayfarers cardigan Carles four loko Tumblr dreamcatcher Portland High Life.\\n* Jean shorts small batch fashion axe Intelligentsia lomo stumptown narwhal viral tattooed letterpress 90's Vice gastropub.\\n* Roof party irony 90's mlkshk iPhone wayfarers keffiyeh swag pork belly whatever small batch gastropub artisan put a bird on it\\n\\n## Ordered List\\n\\n1. Ethnic gentrify PBR\\n2. Put a bird on it YOLO\\n3. Wes Anderson wayfarers cardigan Carles four loko Tumblr dreamcatcher Portland High Life.\\n4. Jean shorts small batch fashion axe Intelligentsia lomo stumptown narwhal viral tattooed letterpress 90's Vice gastropub.\\n5. Roof party irony 90's mlkshk iPhone wayfarers keffiyeh swag pork belly whatever small batch gastropub artisan put a bird on it\\n\\n> Brunch kogi dreamcatcher jean shorts kale chips flexitarian Wes Anderson fanny pack leggings letterpress. Ennui single-origin coffee ugh single-origin coffee pop-up slow-carb Etsy tofu irony 8-bit skateboard Thundercats try-hard. Try-hard selfies jean shorts Carles pork belly umami Blue Bottle. Plaid Tumblr keytar vegan mumblecore paleo pickled farm-to-table McSweeney's Godard 90's. Swag art party small batch scenester sriracha Tonx High Life 90's gentrify photo booth drinking vinegar whatever.\\n\\n---\",\n \n meta: {\"resourcePath\":\"/home/vsts/work/1/s/src/tenants/nqphn/content/static/default/kitchensink.md\"},\n }","\nmodule.exports = { \n attributes: {},\n \n body: \"# NQPHN Commissioned Services Support\\n\\n
\\n\\nIf you have difficulty locating a particular service, would like assistance with this site, or have suggestions, please complete the support request below and our support staff will be happy to assist.\\n\",\n \n meta: {\"resourcePath\":\"/home/vsts/work/1/s/src/tenants/nqphn/content/static/default/support.md\"},\n }","import { grey } from '@mui/material/colors'\nimport { createTheme } from '@mui/material/styles'\n\nimport { config } from '@/config'\nconst { tenantConfig } = config\n\nconst colors = {\n primary: '#003d69',\n secondary: '#545759',\n banner: '#003d69',\n text: {\n primary: '#545759',\n },\n}\n\nconst dimensions = {\n parameters: 380,\n results: 450,\n}\n\nconst breakpoints = {\n values: {\n xs: 0,\n sm: 600,\n ph: 740,\n md: 900,\n lg: 1200,\n tb: 1350,\n xl: 1536,\n },\n}\n\nconst theme = createTheme({\n breakpoints,\n})\n\nexport const themes = {\n base: {\n palette: {\n primary: {\n main: colors.primary,\n contrastText: '#fff',\n },\n secondary: {\n main: colors.secondary,\n contrastText: '#fff',\n },\n default: {\n main: grey[300],\n light: grey[200],\n dark: grey[400],\n },\n background: {\n default: '#fff',\n },\n text: {\n primary: '#545759',\n },\n },\n\n typography: {\n fontSize: 13,\n fontFamily: ['Mulish', '\"Helvetica Neue\"', 'Arial', 'sans-serif'].join(\n ', '\n ),\n },\n\n breakpoints,\n\n components: {\n MuiCssBaseline: {\n styleOverrides: {\n body: {\n backgroundColor: '#ebeef1',\n },\n },\n },\n\n MuiOutlinedInput: {\n styleOverrides: {\n root: {\n '&.Mui-focused .MuiOutlinedInput-notchedOutline': {\n border: `1px solid ${colors.primary}`,\n },\n },\n input: {\n padding: '10px 12px',\n },\n },\n },\n\n MuiTabs: {\n styleOverrides: {\n root: {},\n indicator: {\n backgroundColor: '#fff',\n },\n },\n },\n\n PrivateTabIndicator: {\n styleOverrides: {\n root: {\n transition: 'all 30ms cubic-bezier(0.4, 0, 0.2, 1)',\n },\n },\n },\n\n MuiTab: {\n styleOverrides: {\n root: {\n textTransform: 'none',\n fontSize: '1rem',\n },\n textColorPrimary: {\n color: '#fff',\n opacity: 0.6,\n '&.Mui-selected': {\n color: '#fff',\n opacity: 1,\n },\n },\n },\n },\n\n // AMS\n\n AMSApp: {\n styleOverrides: {\n root: {\n width: null,\n maxWidth: 1650,\n margin: '0 auto',\n boxShadow: '0 0 6px 2px rgb(1 1 1 / 15%)',\n borderLeft: '1px solid rgba(1, 1, 1, 0.2)',\n },\n },\n },\n\n AMSMainMenu: {\n styleOverrides: {\n list: {\n paddingTop: 0,\n },\n },\n },\n\n AMSAppBar: {\n props: {\n elevation: 0,\n position: 'static',\n },\n\n styleOverrides: {\n root: {\n zIndex: theme.zIndex.drawer - 1,\n backgroundColor: 'white',\n color: '#545759',\n boxShadow: '0 0 4px 4px rgb(1 1 1 / 5%)',\n flexShrink: '1',\n },\n },\n },\n\n AMSAppBarGroup: {\n styleOverrides: {\n root: {\n [theme.breakpoints.down('sm')]: {\n padding: theme.spacing(0.5),\n },\n },\n },\n },\n\n AMSMenuButton: {\n styleOverrides: {\n root: {\n [theme.breakpoints.down('sm')]: {\n fontSize: '0.8rem',\n },\n },\n },\n },\n\n AMSAppBarTitle: {\n styleOverrides: {\n root: {\n [theme.breakpoints.down('sm')]: {\n flexGrow: 1,\n },\n },\n logo: {\n height: 78,\n width: 338,\n maxWidth: 338,\n // maxHeight: 78,\n [theme.breakpoints.down('sm')]: {\n maxWidth: '100%',\n },\n },\n },\n },\n\n // desktop search\n\n AMSDesktopSearch: {\n styleOverrides: {\n parameterDrawer: {\n minWidth: dimensions.parameters,\n maxWidth: dimensions.parameters,\n paddingTop: 100,\n },\n parameters: {\n width: dimensions.parameters,\n },\n results: {\n width: dimensions.results,\n [theme.breakpoints.between('ph', 'md')]: {\n width: 'calc(100vw / 2)',\n },\n },\n },\n },\n\n AMSDesktopSearchToolbar: {\n styleOverrides: {\n root: {\n backgroundColor: colors.banner,\n // backgroundColor: '#f0f',\n position: 'relative',\n '&::before': {\n display: 'block',\n // display: 'none',\n content: '\"\"',\n position: 'absolute',\n // background: `url(${tenantConfig.assets.toolbarBackground})`,\n backgroundSize: 'cover',\n backgroundRepeat: 'no-repeat',\n // backgroundPosition: '0 -50px',\n right: 0,\n top: 0,\n height: '100%',\n width: 350,\n },\n },\n toolbarButton: {\n color: '#fff',\n },\n },\n },\n },\n },\n}\n\nexport default theme\n","import platform from 'platform'\nimport { logAnalytics } from '@/api/legacy'\n\nconst bundleMeta = (payload) => {\n const meta = payload?.meta\n if (!meta) return null\n\n return {\n rid: meta.rid,\n ts: meta.ts,\n tsIso: new Date(meta.ts).toISOString(),\n }\n}\n\nconst bundleStat = (payload) => {\n return {\n ...payload,\n platform,\n meta: bundleMeta(payload),\n }\n}\n\n/**\n * `analytics` plugin for dumping extended data to elastic\n */\nexport const cieElastic = (userConfig) => {\n return {\n name: 'cie-elastic',\n\n config: {\n debug: userConfig?.debug || false,\n index: userConfig?.index,\n queue: [],\n updateInterval: userConfig?.updateInterval || 5000,\n },\n\n initialize: ({ config }) => {\n config.debug && console.log('initialize', config)\n\n setInterval(() => {\n if (config.queue.length === 0) return\n\n logAnalytics({\n index: config.index,\n payloads: config.queue,\n })\n .then((result) => config.debug && console.log('tx', config.queue))\n .catch((err) => config.debug && console.error(err))\n .finally(() => {\n config.queue = []\n })\n }, config.updateInterval)\n },\n\n page: ({ config, payload }) => {\n const page = bundleStat(payload)\n config.debug && console.log('page', page)\n config.queue.push(page)\n },\n\n track: ({ config, payload }) => {\n const track = bundleStat(payload)\n config.debug && console.log('track', track)\n config.queue.push(track)\n },\n\n identify: ({ config, payload }) => {\n const identify = bundleStat(payload)\n config.debug && console.log('identify', identify)\n config.queue.push(identify)\n },\n\n loaded: () => {\n return true\n },\n }\n}\n\nexport default cieElastic\n","// import React from 'react'\nimport Analytics from 'analytics'\nimport googleAnalytics from '@analytics/google-analytics'\nimport cieElastic from './analytics-plugin-cie-elastic'\n\nimport { config } from '@/config'\nconst { tenantConfig: tc } = config\n\nconst providers = {\n 'google-analytics': {\n provider: googleAnalytics,\n },\n 'cie-elastic': {\n provider: cieElastic,\n },\n}\n\nconst plugins = (tc?.analytics?.plugins || []).map((p) =>\n providers[p.provider].provider(p)\n)\n\nexport const analytics = Analytics({\n app: tc?.analytics?.app || 'ams',\n // debug: true,\n plugins,\n})\n","import React from 'react'\nimport _ from 'lodash'\n\nimport { useTheme } from '@mui/material/styles'\nimport { useMediaQuery } from '@mui/material'\n\nexport const useMediaChecks = (queries = []) => {\n const theme = useTheme()\n\n const props = queries.reduce((res, { query, breakpoints, prop }) => {\n const queryfn = theme.breakpoints[query]\n\n if (!queryfn) {\n console.warn(`useMediaProps: Invalid query ${query}`)\n return res\n }\n\n const match = useMediaQuery(queryfn(breakpoints))\n\n return {\n ...res,\n [prop]: match,\n }\n }, {})\n\n return props\n}\n\nexport const ComponentMap = ({\n components = {},\n items = [],\n renderProps = ({ props }) => props,\n}) => {\n const ritems = (items || [])\n .map(({ component, media, props }, k) => {\n const { render = true } = useMediaChecks(media)\n\n if (!render) return null\n\n const C = components[component]\n if (!C) return null\n\n const itemProps = renderProps({ component, props })\n\n return \n })\n .filter((x) => !!x)\n\n // const ritems = (items || []).map((c, k) => {\n // const ckey = _.head(_.intersection(_.keys(c), _.keys(components)))\n // const props = c[ckey]\n // const C = components[ckey]\n\n // if (!C || !props) return null\n\n // const itemProps = renderProps({ component: ckey, props })\n\n // return \n\n // }).filter(x => !!x)\n\n if (!ritems || ritems.length === 0) return null\n\n return <>{ritems}\n}\n\nexport default ComponentMap\n","import { atom } from 'jotai'\n\nexport const paramsPortalAtom = atom(undefined)\n","import React from 'react'\n\nimport { Link as RouterLink } from 'react-router-dom'\n\nimport { withStyles } from '@mui/styles'\nimport { Box, Typography, Link as MuiLink } from '@mui/material'\n\nimport { asArray } from '@/utils'\nimport { useConfig } from '@/config'\n\nconst styles = (theme) => ({\n root: {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'flex-start',\n textDecoration: 'none',\n // width: 'auto',\n // width: 350,\n },\n logo: {\n height: 32,\n // maxHeight: '100%',\n marginRight: theme.spacing(1),\n },\n title: {\n fontSize: '1.2rem',\n fontWeight: 'bold',\n // whiteSpace: 'nowrap',\n // color: theme.palette.secondary,\n },\n})\n\nconst AppBarTitle = ({\n classes,\n logo = 'logo',\n title,\n disableLogo = false,\n disableTextTitle = false,\n href,\n to,\n ...otherProps\n}) => {\n const { tenantConfig: tc } = useConfig()\n\n const titleText = title || tc.options?.title\n\n const logoSrc = tc.assets?.[logo]\n\n const linkProps = { href, to }\n\n // const rootProps =\n // href ? ({ ...r})\n\n const Root = href || to ? MuiLink : Box\n\n // const rootProps\n // = href ? ({ href })\n // : to ? ({ to, component: RouterLink })\n // : null\n\n const rootProps = {\n className: classes.root,\n href,\n to,\n ...(to && { component: RouterLink }),\n ...otherProps,\n }\n\n // const Root =\n // rootProps.href ? MuiLink :\n // rootProps.to ? RouterLink :\n // 'div'\n\n const TitleLogo = ({ src }) => {\n if (!src) return null\n return \"Logo\"\n }\n\n const TitleText = ({ titleText }) => {\n if (!titleText) return null\n\n const contents = asArray(titleText).join('
')\n\n return (\n \n )\n }\n\n return (\n \n {!disableLogo && }\n {!disableTextTitle && }\n \n )\n}\n\nexport default withStyles(styles, { name: 'AMSAppBarTitle' })(AppBarTitle)\n","import React from 'react'\n\nimport clsx from 'clsx'\n\nimport { Link as RouterLink } from 'react-router-dom'\n\nimport { makeStyles } from '@mui/styles'\nimport { Box, Button, Typography, Link as MuiLink } from '@mui/material'\n\nimport { useConfig } from '@/config'\n\nconst appBarButtonStyles = (theme) => ({\n root: {},\n button: {},\n icon: {\n marginRight: theme.spacing(1),\n // ...theme.\n fontSize: 'inherit',\n },\n label: {\n //textDecoration: 'none',\n textTransform: 'none',\n whiteSpace: 'nowrap',\n },\n})\n\nconst useAppBarButtonStyles = makeStyles(appBarButtonStyles, {\n name: 'AMSAppBarButton',\n})\n\nconst AppBarButton = ({\n // classes,\n label,\n icon,\n // variant,\n ...buttonProps\n}) => {\n const classes = useAppBarButtonStyles()\n\n const bprops = {\n underline: 'none',\n // color: 'primary',\n\n variant: 'text',\n ...buttonProps,\n }\n\n return (\n }\n {...bprops}\n >\n \n {label}\n \n )\n}\n\nexport default AppBarButton\n","import React, { useRef, useEffect } from 'react'\n\nimport _ from 'lodash'\nimport clsx from 'clsx'\n\nimport { useAtom } from 'jotai'\n// import { useRecoilState, useSetRecoilState } from 'recoil'\n// import { paramsPortalState } from '@/ui/state/search'\n\nimport { withStyles } from '@mui/styles'\nimport { AppBar as MuiAppBar, Box, IconButton } from '@mui/material'\n\nimport { TenantThemeProvider } from '@/ui/theme/TenantTheme'\nimport ComponentMap from '@/ui/components/atoms/ComponentMap'\nimport { paramsPortalAtom } from '@/ui/app/app-params-portal'\nimport AppBarTitle from './AppBarTitle'\nimport AppBarButton from './AppBarButton'\nimport Sponsors from '@/ui/footer/Sponsors'\n\nimport { useConfig } from '@/config'\n// import { withVariantStyles } from '@/ui/hooks/theme-hooks'\n\n// const { tenantConfig } = useConfig()\n\nconst menuButtonStyles = (theme) => ({\n root: {\n padding: theme.spacing(1),\n minWidth: 36,\n minHeight: 36,\n },\n icon: {\n fontSize: '1rem',\n },\n})\n\nconst MenuButton = withStyles(menuButtonStyles, { name: 'AMSMenuButton' })(\n ({ classes, icon = 'fa-solid fa-bars', ...iconButtonProps }) => {\n return (\n \n {/* */}\n \n \n )\n }\n)\n\nconst portalStyles = (theme) => ({\n root: {\n // border: '1px solid rgba(0, 100, 210, 1.0)',\n },\n target: {},\n})\n\nconst PortalOutlet = withStyles(portalStyles, { name: 'AMSPortalOutlet' })(\n (props) => {\n const { classes, ...otherProps } = props\n\n const [portal, setPortal] = useAtom(paramsPortalAtom)\n\n // const setPortal = useSetRecoilState(paramsPortalState)\n\n return (\n setPortal(el)}\n {...otherProps}\n />\n )\n // return null\n }\n)\n\nconst groupStyles = (theme) => ({\n root: {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n padding: theme.spacing(1),\n },\n left: {\n flexShrink: 1, // ie11 no auto\n justifyContent: 'flex-start',\n },\n fill: {\n flexGrow: 1, // ie11 no auto\n justifyContent: 'flex-start',\n },\n right: {\n flexShrink: 1, // ie11 no auto\n justifyContent: 'flex-end',\n },\n})\n\nconst Group = withStyles(groupStyles, { name: 'AMSAppBarGroup' })(\n ({ classes, align, items = [], onMenuClick = () => undefined }) => {\n return (\n
\n ({\n ...props,\n ...(component === 'MenuButton' && { onClick: onMenuClick }),\n })}\n />\n
\n )\n }\n)\n\nconst componentMap = {\n MenuButton,\n AppBarTitle,\n AppBarButton,\n Sponsors,\n PortalOutlet,\n}\n\nconst styles = (theme) => ({\n root: {\n zIndex: theme.zIndex.drawer - 1,\n color: theme.palette.secondary.contrastText,\n backgroundColor: theme.palette.secondary,\n },\n row: {\n display: 'flex',\n flexDirection: 'row',\n margin: 0,\n padding: theme.spacing(0, 2),\n minHeight: 60,\n [theme.breakpoints.down('sm')]: {\n minHeight: 48,\n },\n },\n})\n\nconst AppBar = ({\n classes,\n onMenuClick = () => undefined,\n groups: groupsProp,\n rows: rowsProp,\n ...appBarProps\n}) => {\n const Row = (row, rkey) => (\n
\n {(row.groups || []).map((group, gkey) => (\n \n ))}\n
\n )\n\n const rows = (rowsProp || [{ groups: groupsProp }]).map(Row)\n\n return (\n \n \n {rows}\n \n \n )\n}\n\nexport default withStyles(styles, { name: 'AMSAppBar' })(AppBar)\n","import React from 'react'\n\nimport clsx from 'clsx'\nimport { NavLink } from 'react-router-dom'\nimport { observer } from 'mobx-react-lite'\n\nimport { withStyles } from '@mui/styles'\nimport {\n Box,\n Divider,\n Link,\n List,\n ListItem,\n ListItemIcon,\n ListItemText,\n} from '@mui/material'\n\nimport { useAnalytics } from 'use-analytics'\n\nimport { forwardRef } from 'react'\nimport { withRouter } from 'react-router-dom'\nimport { useRootStore } from '@/stores/root/store'\nimport { useConfig } from '@/config'\n\nconst styles = (theme) => ({\n list: {\n width: 320,\n },\n fullList: {\n width: 'auto',\n },\n navLink: {\n color: theme.palette.text.primary,\n },\n listIcon: {},\n listText: {},\n})\n\n// TODO: Properly map functions\n\n// eslint-disable-next-line react/display-name\nconst Reset = forwardRef(({ children, ...itemProps }, ref) => (\n
\n {children}\n
\n))\n\nconst MainMenu = observer(\n withRouter(\n ({\n classes,\n history,\n match,\n menu: menuId,\n onToggleMenu = () => undefined,\n }) => {\n const store = useRootStore()\n const { track } = useAnalytics()\n\n const { tenantConfig: tc } = useConfig()\n const menu = tc.ui?.menus?.[menuId]\n\n const handleReset = () => {\n store.resetAll()\n if (match !== '/') {\n history.push('/')\n }\n }\n\n const handleTrackMenuItem = (item) => () => {\n track('mainMenuItemClick', {\n category: 'Navigation',\n label: item.label,\n })\n }\n\n if (!menu?.items) return null\n\n const MenuItem = (item) => {\n if (item.type === 'divider') return \n\n const listItemProps = item.route\n ? {\n component: NavLink,\n to: item.route,\n }\n : item.href\n ? {\n component: Link,\n href: item.href,\n target: '_blank',\n }\n : item.function === 'reset'\n ? {\n component: Reset,\n onClick: handleReset,\n }\n : null\n\n if (!listItemProps) return null\n\n return (\n \n \n \n \n \n \n )\n }\n\n const items = (menu.items || []).map((item, i) => (\n \n ))\n\n return (\n \n {items}\n \n )\n }\n )\n)\n\nexport default withStyles(styles, { name: 'AMSMainMenu' })(MainMenu)\n","import _ from 'lodash'\nimport { toJS, observe, computed } from 'mobx'\nimport deepmerge from 'deepmerge'\nimport { Liquid } from 'liquidjs'\n\nimport { config } from '@/config'\nimport { useLocation, matchPath } from 'react-router-dom'\n\nconst liquid = new Liquid()\n\n// top level route config\n\nexport const defaultMetaConfig = {\n templates: {\n robots: 'all',\n // canonical: 'default',\n titlePrefix: '{{ tenant.options.title }}',\n title: '',\n description: '{{ tenant.options.title }} Description.',\n },\n}\n\nconst tkeys = _.keys(defaultMetaConfig.templates)\n\nconst migrateTemplates = (route) => {\n const { meta, ...other } = route || {}\n const { templates } = meta || {}\n if (templates) return route\n\n return {\n ...other,\n meta: {\n templates: _.pick(meta, tkeys),\n ..._.omit(meta, tkeys),\n },\n }\n}\n\nconst explicitMatchParams = (route) => {\n return {\n ...route,\n exact: !!route.exact,\n strict: !!route.strict,\n }\n}\n\nexport const prepareRoutes = (routes) => {\n if (!_.isArray(routes)) return\n\n return routes.map(migrateTemplates).map(explicitMatchParams)\n}\n\nexport const loadRouteConfig = (config) => {\n const { tenantConfig: tc } = config\n\n const { routes: r, meta: m, routeOptions } = tc\n\n const routes = prepareRoutes(tc?.routes)\n const meta = deepmerge(defaultMetaConfig, tc?.meta)\n\n return {\n routes,\n meta,\n templateKeys: tkeys,\n ...routeOptions,\n }\n}\n\n// route utils\n\nexport const matchRoute = (routes, location) => {\n if (!location) return null\n for (let index = 0; index < routes.length; ++index) {\n const routeConfig = routes[index]\n const { path, exact, strict } = routeConfig\n\n const match = matchPath(location.pathname, { path, exact, strict })\n if (match) return { index, config: routeConfig, match, location }\n }\n}\n\nexport const generatePath = (item) => {\n const { pathType, paths, source, params, queryParams } = item\n if (!pathType || !params) return\n\n const pathOpts = paths[pathType]\n if (!pathOpts) return\n\n // this is a hack, needs to be futher upstream\n const substituteParams = ({ params }) => {\n if (!pathOpts.canonical || !source) return params\n\n return _.mapValues(params, (v, k) => {\n const ck = pathOpts.canonical?.[k]\n const cv = ck && source[ck]\n return cv || v\n })\n }\n\n const sp = substituteParams({ params })\n\n const path = _.compact([generatePath(pathOpts.path, sp), queryParams]).join(\n '?'\n )\n\n return {\n to: path,\n linkType: pathOpts.linkType,\n }\n}\n\n// meta config utils\n\n// deep merge meta configs\n// configs are applied from l to r, from: defaults -> tenantConfig.meta -> routeConfig.meta\n// templates can also include template overrides keyed by specific paths where multiple paths\n// are specified for a route\n\nexport const mergeMetaConfigs = (metaConfigs = [], options) => {\n const { templateKeys = tkeys, path } = options\n\n const templates = _.chain(metaConfigs)\n .map((c) => [c?.templates, c?.templates?.[path]])\n .flatten()\n .compact()\n .thru(deepmerge.all)\n .pick(templateKeys)\n .value()\n\n const otherOptions = _.chain(metaConfigs)\n .map((c) => _.omit(c, ['templates']))\n .compact()\n .thru(deepmerge.all)\n .value()\n\n return {\n ...otherOptions,\n templates,\n }\n}\n\n// meta templating utils\n\nexport const buildMetaItems = ({\n renderedTemplates,\n matchedRoute,\n templateView,\n pathInfo,\n}) => {\n // console.log({ pathInfo })\n return {\n ...(pathInfo.canonical && {\n canonical: {\n component: 'link',\n rel: 'canonical',\n // TODO: reread docs and migrate previous builder below\n href: pathInfo.canonical,\n },\n }),\n robots: {\n component: 'meta',\n name: 'robots',\n content: renderedTemplates.robots,\n },\n title: {\n component: 'title',\n innerContent: [renderedTemplates.titlePrefix, renderedTemplates.title]\n .filter((s) => !!s)\n .join(' - '),\n },\n description: {\n component: 'meta',\n name: 'description',\n content: renderedTemplates.description,\n },\n }\n}\n","export const hashJoaat = (str) => {\n for (var a = 0, c = str.length; c--; )\n (a += str.charCodeAt(c)), (a += a << 10), (a ^= a >> 6)\n a += a << 3\n a ^= a >> 11\n return (((a + (a << 15)) & 4294967295) >>> 0).toString(16)\n}\n\nexport const getUrlHash = ({ url, params = {}, query }) => {\n const urlstr = [url, query].filter((s) => !!s).join('_')\n const hash = hashJoaat(urlstr)\n // console.log(urlstr, hash)\n return hash\n}\n","import { makeAutoObservable, toJS } from 'mobx'\n\nimport _ from 'lodash'\nimport { generatePath } from 'react-router'\nimport Qs from 'qs'\n\nimport { toJSDeep } from '../root/utils/mobx'\nimport { getUrlHash } from '@/stores/root/utils/hash'\nimport { asArray } from '@/utils'\n\n// generate route from pathType\n// use pathType to get path and and parameterMap\n// use path and parameterMap to explicitly set the mapping\n// tries to map using parameterMap (source[sourceKey][fieldKey])\n// or maps parameters directly parameterMap.keys -> params\n\n// failedMatches 'warn', 'tag'\n\n// delimiter() {\n// return this._store.config.pathOptions?.delimiter || '+'\n// }\n\nexport const getRouterInfo = ({ match, location }) => {\n const { path, url, params } = match\n const { search } = location\n const { query, queryParams } = fromQueryString(search) || {}\n const hash = getUrlHash({ url, query })\n\n return { path, url, params, query, queryParams, hash }\n}\n\nexport const fromQueryString = (str) => {\n if (!str || !_.isString(str)) return null\n const query = str.replace(/^\\?/, '')\n const queryParams = Qs.parse(query)\n return { query, queryParams }\n}\n\nexport const splitMultipleParam = (param, { delimiter = '+' } = {}) => {\n if (!param) return []\n return param.split(delimiter)\n}\n\nexport const joinMultipleParams = (params = [], { delimiter = '+' } = {}) => {\n if (!params || params.length === 0) return\n return params.join(delimiter)\n}\n\nexport const toUrlParam = (\n param,\n { delimiter = '+', whiteSpace = '_' } = {}\n) => {\n const strip = (p) => p.replace(/[\\s&,/]+/g, whiteSpace)\n if (_.isString(param)) return strip(param)\n if (_.isArray(param)) return param.map(strip).join(delimiter)\n}\n\nexport const generateUrlFromRouteInfo = ({ pathType, routeInfo }, options) => {\n const { params } = routeInfo\n return generateUrl({ pathType, params }, options)\n}\n\nconst mapParams1 = ({ params, source, parameterMap }, options) => {\n const mapParam = ({ src, skey, pkey }) => {\n if (!src) return\n\n const msrc = src[skey] || src\n // console.log({ msrc, src, skey, pkey })\n\n if (!msrc) return\n\n if (_.isArray(msrc)) return msrc.map((s) => s[pkey])\n\n return msrc[pkey]\n }\n\n const mparams = _.chain(parameterMap)\n .mapValues((m, pkey) => {\n const [skey, fkey] = m\n\n if (source) {\n const r = mapParam({ src: source, skey, pkey: fkey })\n\n // console.log({ r, source })\n if (r) return r\n }\n\n const r = mapParam({ src: params, pkey })\n\n // console.log({ r, params })\n return r\n })\n // .tap(t => console.log(t))\n .mapValues((v) => toUrlParam(v, options))\n .value()\n\n return {\n params: mparams,\n isCanonical: false,\n }\n}\n\nconst mapParams2 = ({ params, source, parameterMap }, options) => {\n const mapSourceMultiple = ({ src, map, multiple }) => {\n const psrc = asArray(src)\n const pmap = psrc.length === 1 ? map || multiple : multiple\n\n const sparams = psrc.map((src) => mapSourceSingle({ src, map: pmap }))\n\n return {\n param: joinMultipleParams(\n sparams.map((sp) => sp.param),\n options\n ),\n multipleParamsInfo: sparams,\n isCanonical: true,\n }\n }\n\n const mapSourceSingle = ({ src, map }) => {\n return {\n param: toUrlParam(src[map[0]], options),\n isCanonical: true,\n }\n }\n\n const mapParam = ({ params, pkey }) => {\n return {\n param: params?.[pkey],\n isCanonical: false,\n }\n }\n\n const paramsInfo = _.mapValues(parameterMap, (pm, pkey) => {\n const { source: skey, map, multiple } = pm || {}\n const src = skey && source?.[skey]\n\n // console.log('v2 param', pkey, skey, toJSDeep({ map, multiple, src }))\n\n if (src && multiple) {\n return mapSourceMultiple({ src, map, multiple })\n }\n\n if (src && map) {\n return mapSourceSingle({ src, map })\n }\n\n return mapParam({ params, pkey })\n })\n\n const isCanonical = _.every(_.map(paramsInfo, (pi) => pi.isCanonical))\n\n return {\n params: _.mapValues(paramsInfo, (mp) => mp.param),\n info: paramsInfo,\n isCanonical,\n }\n}\n\nexport const generateUrl = (args, options) => {\n if (!args) return null\n\n const { pathType: pt, path: p, parameterMap: pm, source, params } = args || {}\n\n // console.log('GENERATE', { pathType: pt, path: p, parameterMap: pm, source, params })\n\n if (!source && !params) {\n // console.warn('Invalid sources, need one with a parameterMap', { source, params })\n return\n }\n\n const pathType = pt\n\n const path = pathType?.path || p\n const parameterMap = pathType?.parameterMap || pm\n\n // pathType with canonical route (fixed)\n const fcan = pathType?.canonical\n if (fcan) {\n return {\n url: fcan,\n hash: getUrlHash({ url: fcan }),\n isCanonical: true,\n }\n }\n\n if (!path || !parameterMap) {\n // console.warn('Invalid path, parameterMap', { pathType: pt, parameterMap })\n return null\n }\n\n // const { v1, v2 } = parameterMap\n // const pmv1 = v1 || parameterMap\n // console.log(toJSDeep({ parameterMap, v1, v2, pmv1 }))\n\n // const mapParams = _.isArray(parameterMap) ? mapParams1 : mapParams2\n const paramsInfo = mapParams2({ params, source, parameterMap }, options)\n\n const gen = ({ path, params }) => {\n try {\n const url = generatePath(path, params)\n return { url }\n } catch (e) {\n return {\n generatePathError: e,\n }\n }\n }\n\n const { params: mparams } = paramsInfo\n\n const generated = gen({ path, params: mparams })\n const { url } = generated\n\n const hash = url && getUrlHash({ url, params: mparams })\n\n const res = {\n ...generated,\n hash,\n path: path,\n params: mparams,\n paramsInfo,\n parameterMap,\n }\n\n // console.log('GENERATE', { ...res })\n\n return res\n}\n","import _ from 'lodash'\nimport deepmerge from 'deepmerge'\n\nimport { makeAutoObservable } from 'mobx'\n\nimport {\n generateUrl,\n generateUrlFromRouteInfo,\n fromQueryString,\n toUrlParam,\n splitMultipleParam,\n} from './path-utils'\n\nimport { getUrlHash } from '@/stores/root/utils/hash'\n\n// const searchPathTypes = {\n// 'false,false': 'root',\n// 'false,true': 'searchCategories',\n// 'true,false': 'searchLocality',\n// 'true,true': 'searchLocalityCategories',\n// }\n\nexport class RoutePath {\n _store = null\n _param\n\n constructor(store) {\n makeAutoObservable(this, {\n _param: false,\n })\n\n this._store = store\n this._param = new generateUrl(this._store)\n }\n\n get helpers() {\n return {\n _debugLinks: {\n type: 'TestLinks',\n links: [\n '/',\n '/search/Queensland/Brisbane/Fortitude_Valley',\n '/search/Queensland/Brisbane/Fortitude_Valley/categories/Allied+Ageing',\n '/search/Queensland/Moreton_Bay/Mango_Hill',\n '/search/Queensland/Maranoa/Roma',\n '/search/categories/Allied+Ageing',\n '/search/categories/Allied+Ageing?rloc=true',\n '/search/categories/Allied+Ageing?womble=orinoco',\n '/categories/General',\n ],\n },\n json: [\n 'pathTypes',\n 'pathConfig',\n 'pathSources',\n 'searchPathSources',\n 'searchStoreInfo',\n 'generated',\n 'info',\n ],\n }\n }\n\n get rootStore() {\n return this._store.rootStore\n }\n\n get paramOptions() {\n return {\n delimiter: this._store.config.pathOptions?.delimiter || '+',\n whitespace: '_',\n }\n }\n\n get pathTypes() {\n // const pathType = this.store.config?.generatedPaths?.[pathTypeName]\n return _.mapValues(this._store.config.generatedPaths, (pathType, k) => {\n const { parameterMaps: pm, ...pt } = pathType\n\n const pmaps = pm && pm.map((pn) => this._store.config.parameterMaps[pn])\n const mpmaps =\n pmaps && pmaps.reduce((prev, curr) => ({ ...prev, ...curr }), {})\n\n return {\n ...pt,\n parameterMap: mpmaps,\n }\n })\n }\n\n get searchPathTypesParamLookup() {\n return {\n 'false,false':\n this._store.config.searchRouteHandler?.defaultRoute?.pathTypeName ||\n 'root',\n 'false,true': 'searchCategories',\n 'true,false': 'searchLocality',\n 'true,true': 'searchLocalityCategories',\n }\n }\n\n get pathTypeReverse() {\n const p = _.map(this._store.config.generatedPaths, (v, k) => [v.path, k])\n return _.fromPairs(p)\n }\n\n get pathConfig() {\n const matchPath = this._store.match?.path\n const pathConfig = this._store.matchedRoute?.pathConfig\n\n if (!matchPath || !pathConfig) return null\n\n const pathType = this.pathTypeReverse[matchPath]\n const cfgKeys = ['default', pathType]\n\n const cfgs = _.compact(cfgKeys.map((k) => pathConfig[k]))\n if (!cfgs || cfgs.length === 0) return null\n\n return deepmerge.all([{ pathType }, ...cfgs])\n }\n\n generateUrl(args) {\n return generateUrl(args, this.paramOptions)\n }\n\n pathType({ pathTypeName }) {\n const pathType = this._store.config?.generatedPaths?.[pathTypeName]\n if (!pathType) return null\n\n const { parameterMaps, ...ptype } = pathType\n const parameterMap =\n parameterMaps && this.parameterMaps({ parameterMapNames: parameterMaps })\n\n return {\n ...ptype,\n parameterMap,\n }\n }\n\n parameterMaps({ parameterMapNames = [] }) {\n const pmaps = parameterMapNames.map(\n (pn) => this._store.config.parameterMaps[pn]\n )\n const mpmaps = pmaps.reduce((prev, curr) => ({ ...prev, ...curr }), {})\n return mpmaps\n }\n\n // gets extra reverse info for search route params\n // used by cacheQueryResults\n\n getQueryParamInfo({ parameterMap = {}, params = {} }) {\n return _.reduce(\n parameterMap,\n (info, pmap, paramKey) => {\n const param = params[paramKey]\n const sourceKey = pmap.source\n\n _.set(info.bySource, [sourceKey, paramKey], param)\n\n if (paramKey === 'categories')\n _.set(info.byParam, [paramKey], {\n multiple: splitMultipleParam(param, this.paramOptions),\n })\n\n return info\n },\n { bySource: {}, byParam: {} }\n )\n }\n\n // general route prerequisites (generate canonical from params)\n\n get pathSources() {\n if (!this._store.match) return null\n // const rid = this._store.matchedRoute?.id\n // if (rid === 'search') return this.searchPathSources\n\n // const { path, url, params } = this._store.match\n // const { match, pathConfig } = this.pathConfig || {}\n const pathTypeName = this?.pathConfig?.pathType\n const pathType = this.pathTypes[pathTypeName]\n\n const { path, url, params } = this._store.match\n const { query, queryParams } =\n fromQueryString(this._store?.location?.search) || {}\n const hash = getUrlHash({ url, params, query })\n\n return {\n pathTypeName,\n pathType,\n routeInfo: { path, url, params, query, queryParams, hash },\n }\n }\n\n get pathInfo() {\n if (!this.pathSources) return null\n // const { pathTypeName, pathType, source } = this.pathSources\n const gen = generateUrlFromRouteInfo(this.pathSources, this.paramOptions)\n\n const { source: s, routeInfo: ri } = this.pathSources\n\n const isCanonical = gen?.isCanonical || gen?.paramsInfo?.isCanonical\n const canonical = isCanonical ? gen.url : null\n // const url = canonical || ri.url\n\n const info = {\n ...this.pathSources,\n generated: gen,\n isCanonical,\n canonical,\n url: gen?.url,\n }\n\n return info\n }\n\n // path type and sources from the current search params\n\n get searchPathSources() {\n return this.getSearchPathSources()\n }\n\n getSearchPathSources(options) {\n const { source: optSource } = options || {}\n\n const mergedSource = {\n ...this.rootStore.search.params.routePathSource,\n ...optSource,\n }\n\n const pathKey = [\n !!mergedSource.locality,\n mergedSource.categories.length > 0,\n ].toString()\n const pathTypeName = this.searchPathTypesParamLookup[pathKey]\n const pathType = this.pathTypes[pathTypeName]\n\n return {\n // pathKey,\n pathTypeName,\n pathType,\n source: {\n locality: mergedSource.locality?.asLocality,\n categories: mergedSource.categories,\n },\n }\n }\n\n // path info for search route machine\n // uses source (locality/categories) from store.search.params by default\n\n get searchStoreInfo() {\n return this.getSearchStoreInfo()\n }\n\n getSearchStoreInfo(options) {\n const pathSources = this.getSearchPathSources(options)\n\n const { pathTypeName, pathType, source } = pathSources\n const { path, url, params, parameterMap, paramsInfo } =\n this.generateUrl(pathSources) || {}\n\n const { query, queryParams } =\n fromQueryString(this._store?.location?.search) || {}\n const hash = getUrlHash({ url, query })\n\n // const hash = getUrlHash({ url, params })\n const isCanonical = !!paramsInfo?.isCanonical\n const canonical = isCanonical ? url : null\n\n return {\n pathTypeName,\n pathType,\n path,\n url,\n params,\n paramsInfo,\n query,\n queryParams,\n source,\n parameterMap,\n hash,\n isCanonical,\n canonical,\n }\n }\n\n get generated() {\n return this.generateUrl(this.pathSources) || {}\n }\n\n get info() {\n if (!this._store.match || !this._store.matchedRoute) return null\n\n const rid = this._store.matchedRoute?.id\n if (rid === 'search') return this.searchStoreInfo\n\n return this.pathInfo\n\n // const generated = this.generated\n // const match = this._store.match\n\n // const ready = !!generated && !!match\n\n // return {\n // ready,\n // ...this.generated,\n // }\n }\n}\n","import _ from 'lodash'\nimport { toJS, makeAutoObservable } from 'mobx'\n\nconst searchPathTypes = {\n 'false,false': 'root',\n 'false,true': 'searchCategory',\n 'true,false': 'searchLocation',\n 'true,true': 'searchLocationCategory',\n}\n\nclass SearchRouteView {\n store = null\n rootStore = null\n\n constructor(store) {\n makeAutoObservable(this)\n\n this.store = store\n this.rootStore = store.rootStore\n }\n\n get searchParams() {\n return this.rootStore.search.params\n }\n\n get pathSources() {\n const { location, selectedCategoriesMeta: category } = this.searchParams\n\n const pathTypeName = searchPathTypes[[!!location, category.length > 0]]\n const pathType = this.store.path.pathType[pathTypeName]\n\n return {\n pathType,\n source: {\n location,\n category,\n },\n }\n }\n}\n\nexport class RouteViews {\n store = null\n rootStore = null\n searchRouteStore = null\n\n constructor(store) {\n makeAutoObservable(this)\n\n this.store = store\n this.rootStore = store.rootStore\n\n this.searchRouteStore = new SearchRouteView(this.store)\n }\n\n get regionsTitle() {\n const pc = _.mapValues(this.store.match.params, p => p.replaceAll('_', ' '))\n return { ...pc }\n }\n\n get categoriesRoute() {\n const params = this.store.match?.params\n const cats = this.rootStore.tenant.categoriesFromParams2(params) || []\n const { location } = this.rootStore.search.params\n const locality = location?.asLocality\n\n // TODO: just supports single for now\n const categories = cats[0]\n\n return {\n source: { location, locality, categories },\n }\n }\n\n get searchRoute() {\n return null\n }\n}\n","import React, { createContext, useContext, useEffect } from 'react'\n\nimport _ from 'lodash'\n\nimport { toJS, makeAutoObservable } from 'mobx'\nimport { toJSDeep } from '../root/utils/mobx'\nimport { useLocation, useRouteMatch } from 'react-router-dom'\nimport { Liquid } from 'liquidjs'\n\nimport { config } from '@/config'\nimport {\n loadRouteConfig,\n mergeMetaConfigs,\n buildMetaItems,\n} from '@/stores/route/route-utils'\n\nimport { asArray } from '@/utils'\n\nimport { rootStore as rootStore } from '@/stores/root/store'\nimport { RoutePath } from './RoutePath'\nimport { RouteViews } from './RouteViews'\n\nexport class RouteConfig {\n _store = null\n\n constructor(store, config) {\n _.assign(this, config)\n\n makeAutoObservable(this, {\n store: false,\n })\n\n this._cfgkeys = _.keys(config)\n\n this.store = store\n this._config = config\n }\n\n get helpers() {\n return {\n json: [...this._cfgkeys],\n }\n }\n\n get routeConfigsByPath() {\n return _.fromPairs(\n _.flatten(\n _.map(this._config.routes, (r) => asArray(r.path).map((p) => [p, r]))\n )\n )\n }\n}\n\nexport class RouteQuery {\n _store = null\n constructor(store) {\n makeAutoObservable(this, {})\n\n this._store = store\n }\n}\n\nexport class RouteStore {\n rootStore = null\n config = null\n location = null\n match = null\n helmetState = null\n\n path = null\n query = null\n\n liquid = null\n\n constructor(options) {\n makeAutoObservable(this, {\n config: false,\n templateViews: false,\n liquid: false,\n })\n\n this.rootStore = rootStore\n\n const cfg = loadRouteConfig(config)\n this.config = new RouteConfig(this, cfg)\n\n this.routeViews = new RouteViews(this)\n this.path = new RoutePath(this)\n this.query = new RouteQuery(this)\n\n this.liquid = new Liquid()\n }\n\n get helpers() {\n return {\n config: { store: this.config },\n path: { store: this.path },\n json: [\n 'location',\n 'match',\n 'matchedRoute',\n 'metaConfig',\n 'routeConfigViews',\n 'metaTagInfo',\n 'helmetState',\n // 'searchRouteHandler',\n ],\n }\n }\n\n updateFromReactRouter({ location, match }) {\n this.location = location\n this.match = match\n\n // this.searchRouteMachine.updateFromRouter({ match })\n }\n\n setLocation(location) {\n this.location = location\n }\n\n setHelmetState(state) {\n this.helmetState = state\n }\n\n setSearchRouteHandler(info) {\n this.searchRouteHandler = info\n }\n\n get tenant() {\n return this.rootStore.tenant\n }\n\n get matchedRoute() {\n if (!this.match) return null\n return this.config.routeConfigsByPath[this.match.path]\n }\n\n get metaConfig() {\n if (!this.matchedRoute) return null\n\n const { path } = this.match\n const configs = [this.config, this.matchedRoute].map((c) => c.meta)\n\n // console.log({ configs: toJSDeep(configs) })\n\n return mergeMetaConfigs(configs, { path })\n }\n\n get routeConfigViews() {\n const { views } = this.metaConfig || {}\n // console.log(this.metaConfig, { views })\n if (!views) return {}\n\n return _.fromPairs(views.map((k) => [k, this.routeViews[k]]))\n // return {}\n }\n\n get templateView() {\n return {\n ...rootStore,\n route: {\n ...this.routeConfigViews,\n },\n pathInfo: this.path.info,\n match: this.match,\n }\n }\n\n get metaTagInfo() {\n const { matchedRoute, templateView } = this\n if (!matchedRoute) return null\n\n const renderedTemplates = _.mapValues(\n this.metaConfig?.templates || {},\n (t) => this.liquid.parseAndRenderSync(t, this.templateView)\n )\n\n const metaItems = buildMetaItems({\n renderedTemplates,\n matchedRoute,\n templateView,\n pathInfo: this.path.info,\n })\n\n return {\n renderedTemplates,\n metaItems,\n }\n }\n}\n\nexport const routeStore = new RouteStore()\nwindow.routeStore = routeStore\n\nconst routeStoreContext = createContext(routeStore)\nexport const useRouteStore = () => useContext(routeStoreContext)\n\nexport const RouteStoreUpdater = () => {\n const store = useContext(routeStoreContext)\n const location = useLocation()\n const match = useRouteMatch()\n\n useEffect(() => {\n // console.log('RouteStoreProvider', { location, match })\n store.updateFromReactRouter({ location, match })\n }, [location, location?.pathname, location?.hash, location?.key])\n\n return null\n}\n","import _ from 'lodash'\n\nimport { createMachine, assign, send, actions } from 'xstate'\nconst { raise, choose, log } = actions\n\nconst getBrowserUrl = ({ query, url }) => (query ? [url, query].join('?') : url)\n\nconst updateBrowserUrl = (urlInfo) => ({\n ...urlInfo,\n browserUrl: getBrowserUrl(urlInfo),\n})\n\nconst clearQueryParams = ({ query, queryParams, ...urlInfo }) =>\n updateBrowserUrl(urlInfo)\n\nconst setRedirectAction = (redirectAction) =>\n assign((c) => ({ redirectAction }))\n\nconst defaultMachineOptions = {\n actions: {\n logUrls: (c) => {\n const urls = _.fromPairs(\n ['router', 'store', 'current'].map((k) => [k, c[k]?.browserUrl])\n )\n console.table(urls)\n },\n\n setRouterInfo: assign(\n (c, { urlInfo }) => urlInfo && { router: updateBrowserUrl(urlInfo) }\n ),\n setStoreInfo: assign(\n (c, { urlInfo }) => urlInfo && { store: updateBrowserUrl(urlInfo) }\n ),\n //updateBrowserUrl:\n\n initCurrent: assign(({ defaultUrl, router, store, current }) => {\n if (current.browserUrl) return\n if (router.browserUrl === store.browserUrl) return { current: store }\n if (router.browserUrl === defaultUrl) return { current: router }\n return { current: store }\n }),\n\n setRouterCurrent: assign((c) => ({ current: c.router })),\n setStoreCurrent: assign((c) => ({ current: c.store })),\n\n clearRedirect: assign((c) => ({ redirect: undefined })),\n setCurrentFromRedirect: assign((c) => ({ current: c.redirect })),\n setRedirectFromStore: assign((c) => ({ redirect: c.store })),\n removeQueryAndRedirect: assign((c) => ({\n redirect: clearQueryParams(c.router),\n })),\n },\n guards: {\n urlsInvalid: (c) => !c.router.browserUrl || !c.store.browserUrl,\n\n urlsValid: (c) => !!c.router.browserUrl && !!c.store.browserUrl,\n\n currentValid: (c) => !!c.current.browserUrl,\n\n resetLocation: (c) => !!c.router.queryParams?.rloc,\n\n unknownQueryParams: (c) =>\n c.router.queryParams && !c.router.queryParams?.rloc,\n\n redirectFromDefault: (c) =>\n c.router.url === c.defaultUrl && c.router.url !== c.store.url,\n\n routerChanged: (c) =>\n c.current.url &&\n c.store.url === c.current.url &&\n c.router.url !== c.current.url,\n\n storeChanged: (c) =>\n c.current.url &&\n c.store.url !== c.current.url &&\n c.router.url === c.current.url,\n\n routerMatchesStore: (c) => c.router.url === c.store.url,\n\n redirectMatchesRouter: (c) =>\n c.redirect && c.redirect.browserUrl === c.router.browserUrl,\n },\n}\n\nexport const searchRouteMachine = createMachine(\n {\n id: 'searchRoute',\n initial: 'init',\n // initial: 'init',\n context: {\n defaultUrl: '/',\n // defaultUrl: '/search',\n current: {\n url: undefined,\n },\n router: {\n url: undefined,\n },\n store: {\n url: undefined,\n },\n redirect: undefined,\n redirectAction: null,\n },\n on: {\n SET_ROUTER_INFO: {\n actions: ['setRouterInfo', send('ROUTER_INFO')],\n },\n SET_STORE_INFO: {\n actions: ['setStoreInfo', send('STORE_INFO')],\n },\n },\n states: {\n init: {\n exit: ['initCurrent', send('URL_CHECK')],\n on: {\n ROUTER_INFO: {\n target: 'idle',\n cond: 'urlsValid',\n },\n STORE_INFO: {\n target: 'idle',\n cond: 'urlsValid',\n },\n IDLE: { target: 'idle', cond: 'currentValid' },\n },\n },\n idle: {\n // entry: 'logUrls',\n on: {\n ROUTER_INFO: {\n actions: send('URL_CHECK'),\n },\n STORE_INFO: {\n actions: send('URL_CHECK'),\n },\n URL_CHECK: { target: 'compare' },\n },\n },\n compare: {\n entry: send('COMPARE_URLS'),\n on: {\n COMPARE_URLS: [\n // {\n // target: 'resetLocation',\n // cond: 'resetLocation',\n // },\n {\n target: 'redirect',\n cond: 'resetLocation',\n actions: [\n // () => console.log('resetLocation'),\n // 'resetLocation',\n 'removeQueryAndRedirect',\n setRedirectAction('resetLocation'),\n ],\n },\n {\n target: 'redirect',\n cond: 'unknownQueryParams',\n actions: [\n // () => console.log('unknownQueryParams'),\n 'removeQueryAndRedirect',\n ],\n },\n {\n target: 'redirect',\n cond: 'redirectFromDefault',\n actions: [\n // () => console.log('redirectFromDefault'),\n 'setRedirectFromStore',\n setRedirectAction('currentFromRedirect'),\n ],\n },\n {\n target: 'redirect',\n cond: 'storeChanged',\n actions: [\n // () => console.log('storeChanged'),\n 'setRedirectFromStore',\n setRedirectAction('currentFromRedirect'),\n ],\n },\n {\n target: 'parseUrl',\n cond: 'routerChanged',\n },\n { target: 'idle' },\n ],\n },\n },\n redirect: {\n id: 'redirect',\n initial: 'redirect',\n entry: [\n // () => console.log('redirect entry'),\n // ({ redirectAction }) => console.log('redirectAction', redirectAction),\n ],\n exit: [\n setRedirectAction(null),\n // assign(c => ({ setRedirectStates: null })),\n // c => console.log('redirect exit', c),\n ],\n states: {\n redirect: {\n always: [{ target: 'wait', actions: 'redirect' }],\n },\n wait: {\n entry: send('CHECK_REDIRECT'),\n // after: {\n // 2000: { target: 'timeout' },\n // },\n on: {\n ROUTER_INFO: { actions: send('CHECK_REDIRECT') },\n CHECK_REDIRECT: [\n { target: 'finish', cond: 'redirectMatchesRouter' },\n ],\n },\n },\n finish: {\n entry: choose([\n //resetLocation\n {\n cond: (c) => c.redirectAction === 'currentFromRedirect',\n actions: ['setCurrentFromRedirect', 'clearRedirect'],\n },\n {\n cond: (c) => c.redirectAction === 'resetLocation',\n actions: ['clearRedirect', 'resetLocation'],\n },\n {\n actions: 'clearRedirect',\n },\n ]),\n always: [{ target: 'complete' }],\n },\n timeout: {\n always: [{ target: 'complete' }],\n },\n complete: {\n type: 'final',\n entry: 'clearRedirect',\n },\n },\n onDone: 'compare',\n },\n parseUrl: {\n id: 'parseUrl',\n initial: 'pending',\n //entry: send('')\n states: {\n pending: {\n id: 'parseUrl',\n entry: 'cacheQueryResultsFromStore',\n invoke: {\n src: 'queryRouteParams',\n onDone: {\n target: 'success',\n actions: 'writeQueryResultToStore',\n },\n onError: {\n target: 'restore',\n actions: (c, { data }) =>\n console.warn('parseUrl error', { data }),\n },\n },\n },\n success: {\n // entry: [() => console.log('Success!')],\n after: {\n 100: { actions: send('STORE_INFO') },\n },\n on: {\n STORE_INFO: [\n {\n target: 'complete',\n actions: ['setStoreInfo', 'setRouterCurrent'],\n },\n ],\n },\n },\n restore: {\n entry: send('RESTORE'),\n on: {\n RESTORE: {\n target: 'complete',\n actions: 'setRouterCurrent',\n },\n },\n },\n complete: {\n type: 'final',\n },\n },\n onDone: 'compare',\n },\n },\n },\n defaultMachineOptions\n)\n\n// console.log('MACHINE', searchRouteMachine)\n","import _ from 'lodash'\n\nconst baseConfig = {\n id: 'debug',\n items: [\n {\n id: 'routeStore',\n items: [\n {\n id: 'config',\n items: [\n {\n id: '_config',\n component: 'Json',\n store: 'routeStore',\n storePath: 'config._config',\n },\n ],\n },\n {\n id: 'location',\n component: 'Json',\n store: 'routeStore',\n storePath: 'location',\n },\n {\n id: 'match',\n component: 'Json',\n store: 'routeStore',\n storePath: 'match',\n },\n {\n id: 'matchedRoute',\n component: 'Json',\n store: 'routeStore',\n storePath: 'matchedRoute',\n },\n {\n id: 'path',\n items: [\n {\n id: 'pathTypes',\n component: 'Json',\n store: 'routeStore',\n storePath: 'path.pathTypes',\n },\n // {\n // id: 'pathTypeReverse',\n // component: 'Json',\n // store: 'routeStore',\n // storePath: 'path.pathTypeReverse',\n // },\n {\n id: 'pathConfig',\n component: 'Json',\n store: 'routeStore',\n storePath: 'path.pathConfig',\n },\n {\n id: 'pathSources',\n component: 'Json',\n store: 'routeStore',\n storePath: 'path.pathSources',\n },\n {\n id: 'info',\n component: 'Json',\n store: 'routeStore',\n storePath: 'path.info',\n },\n ],\n },\n {\n id: 'metaConfig',\n component: 'Json',\n store: 'routeStore',\n storePath: 'metaConfig',\n },\n {\n id: 'routeConfigViews',\n component: 'Json',\n store: 'routeStore',\n storePath: 'routeConfigViews',\n },\n {\n id: 'metaTagInfo',\n component: 'Json',\n store: 'routeStore',\n storePath: 'metaTagInfo',\n },\n {\n id: 'helmetState',\n component: 'Json',\n store: 'routeStore',\n storePath: 'helmetState',\n },\n ],\n },\n ],\n}\n\nconst populateConfigNode = (node, { path: parentPath = [] } = {}) => {\n if (!node) return\n\n const { id, items: itemsSrc } = node\n const path = [...parentPath, id]\n const spath = _.tail(path)\n\n const items = _.isArray(itemsSrc)\n ? itemsSrc.map(child => populateConfigNode(child, { path: path }))\n : undefined\n\n return {\n ...node,\n path: spath,\n pathKey: spath.join('.'),\n ...(items && {\n items,\n // itemsMap: _.keyBy(items, 'id'),\n }),\n }\n}\n\nexport const buildConfigMap = config => {\n let configMap = {}\n\n const mapNode = node => {\n console.log('node')\n\n const { pathKey, items } = node\n configMap[pathKey] = node\n\n if (!_.isArray(items)) return\n items.forEach(child => mapNode(child))\n }\n\n mapNode(config)\n return configMap\n}\n\nexport const debugHelperConfig = populateConfigNode(baseConfig)\n","import React, { createContext, useContext } from 'react'\n\nimport _ from 'lodash'\nimport { toJS, makeAutoObservable, reaction } from 'mobx'\n\nexport class RouteMachineDebug {\n _store\n\n urlInfo = null\n\n consoleLogging = false\n\n constructor(store) {\n makeAutoObservable(this, {})\n\n this._store = store\n }\n\n loadFromStorage(cfg) {\n this.consoleLogging = cfg.consoleLogging\n }\n\n asJson() {\n return {\n consoleLogging: this.consoleLogging,\n }\n }\n\n setUrlInfo(urlInfo) {\n this.urlInfo = urlInfo\n }\n\n toggleConsoleLogging() {\n this.consoleLogging = !this.consoleLogging\n }\n}\n","import React, { createContext, useContext } from 'react'\n\nimport _ from 'lodash'\nimport {\n toJS,\n makeAutoObservable,\n reaction,\n isObservableMap,\n entries,\n} from 'mobx'\n\nimport { rootStore as rootStore } from '@/stores/root/store'\nimport { routeStore } from '@/stores'\nimport { config } from '@/config'\nimport { debugHelperConfig, buildConfigMap } from './config'\n\nimport { RouteMachineDebug } from './RouteMachine'\n\nconst storageKey = `ams-debugHelperStore-${\n config.appConfig.tenant || 'default'\n}`\n\nexport class DebugStore {\n config = null\n rootStore = null\n routeConfigStore = null\n routeMachine = null\n\n stores = null\n\n show = false\n saveHandler = null\n selectedHelperPath = null\n reactQueryDevtools = false\n environment = process.env.NODE_ENV\n\n _helper = null\n _helperMenuState = null\n\n constructor() {\n makeAutoObservable(this, {\n // config: false,\n rootStore: false,\n // routeConfigStore: false,\n })\n\n this.config = debugHelperConfig\n\n this.rootStore = rootStore\n this.routeConfigStore = routeStore\n this.routeMachine = new RouteMachineDebug(this)\n\n this.stores = {\n root: rootStore,\n route: routeStore,\n }\n\n this.show = false\n this.reactQueryDevtools = false\n\n this.saveHandler = reaction(\n () => this.asJson(),\n (saveData) => {\n const json = JSON.stringify(toJS(saveData), null, 2)\n window.localStorage.setItem(storageKey, json)\n },\n { delay: 1000 }\n )\n\n this._helperMenuState = _.mapValues(this.menu.pathMap, () => ({\n expanded: true,\n }))\n\n this.loadFromStorage()\n }\n\n get helperTest() {\n return { test: 'bang1!' }\n }\n\n get helpers() {\n return {\n // helperTest: { type: 'Json' },\n _searchRouteMachine: { type: 'RouteMachine' },\n root: { type: 'store', store: this.rootStore },\n route: { type: 'store', store: this.stores.route },\n // stores: this.stores,\n }\n }\n\n get route() {\n return this.stores.route\n }\n\n setRouteConfigStore(routeConfigStore) {\n this.routeConfigStore = routeConfigStore\n }\n\n loadFromStorage() {\n try {\n const json = window.localStorage.getItem(storageKey)\n if (!json) return\n\n const c = JSON.parse(json)\n if (!c) throw `Invalid json`\n\n this.show = c.show\n this.reactQueryDevtools = c.reactQueryDevtools\n this._helper = this.menu?.pathMap?.[c.selectedHelper]\n\n this.routeMachine.loadFromStorage(c.routeMachine || {})\n } catch (e) {\n console.error(e)\n }\n }\n\n asJson() {\n return {\n show: this.show,\n selectedHelper: this._helper?.pathStr,\n reactQueryDevtools: this.reactQueryDevtools,\n\n routeMachine: this.routeMachine.asJson(),\n }\n }\n\n get configMap() {\n return buildConfigMap(toJS(this.config))\n }\n\n toggleShow() {\n this.show = !this.show\n }\n\n toggleReactQuery() {\n this.reactQueryDevtools = !this.reactQueryDevtools\n }\n\n setHelper(path) {\n if (!(path in this.configMap)) return\n this.selectedHelperPath = path\n }\n\n setHelper2(helper) {\n // console.log({ helper })\n this._helper = helper\n }\n\n objectForHelper(helper = this._helper) {\n const obj =\n _.get(this.stores, helper.pathStr) || _.get(this.stores, helper.path)\n return obj\n }\n\n toggleMenuExpand(path) {\n const state = this._helperMenuState[path]\n if (!state) return\n state.expanded = !state.expanded\n }\n\n get selectedHelper() {\n return this.configMap[this.selectedHelperPath]\n }\n\n get menu() {\n let pathMap = {}\n\n const build = (node, { parentPath = [] } = {}) => {\n if (!node) return\n const { helpers: h } = node\n if (!h) return\n\n const { json, store, ...hr } = h\n\n const jh =\n json &&\n json.reduce((prev, key) => ({ ...prev, [key]: { type: 'Json' } }), {})\n\n const allh = { ...hr, ...jh }\n\n const buildMapItems = (map, path) => {\n const mo = _.fromPairs(entries(map))\n const mh = _.mapValues(mo, (s) => ({ store: s }))\n console.log({ mo, helpers: mh })\n return build({ mo, helpers: mh }, { parentPath: path })\n }\n\n const items = _.sortBy(\n _.map(\n allh,\n (value, key) => {\n const { type, store, map } = value\n const path = [...parentPath, key]\n const pathStr = path.join('.')\n\n // if (key === '_searches') {\n // console.log('_searches', value)\n // }\n\n return {\n _this: this,\n key,\n path,\n pathStr,\n ...value,\n ...(store && { type: 'store' }),\n ...(store && { items: build(store, { parentPath: path }) }),\n // ...(type === 'Json' && { json: node[key] }),\n // ...(type === 'Json' && { json: { key } }),\n\n ...(type === 'TestLinks' && { routes: value?.routes }),\n }\n },\n ['key']\n )\n )\n\n _.assign(pathMap, _.keyBy(items, 'pathStr'))\n\n return items\n }\n\n const h = build(this, { parentPath: [] })\n\n return {\n key: 'root',\n items: h,\n pathMap,\n }\n }\n}\n\nexport const debugStore = new DebugStore()\nwindow.debugStore = debugStore\n\nconst debugStoreContext = createContext(debugStore)\n\nexport const useDebugStore = () => {\n const store = useContext(debugStoreContext)\n return store\n}\n","import React from 'react'\n\nimport _ from 'lodash'\nimport { observer } from 'mobx-react-lite'\nimport { Helmet } from 'react-helmet'\n\nimport { useRouteStore } from '@/stores'\n\nexport const Headers = observer(() => {\n const routeStore = useRouteStore()\n\n const handleChangeClientState = ({ onChangeClientState, ...helmetState }) => {\n routeStore.setHelmetState(helmetState)\n }\n\n const metaTags = _.map(\n routeStore.metaTagInfo?.metaItems || {},\n ({ component: MetaTag, innerContent, ...props }, k, i) => (\n \n {innerContent}\n \n )\n )\n\n return (\n {metaTags}\n )\n})\n\nexport default Headers\n","import React from 'react'\n\nimport { withRouter } from 'react-router-dom'\nimport { useAnalytics } from 'use-analytics'\n\nimport { makeStyles } from '@mui/styles'\nimport { Button } from '@mui/material'\n\nconst useStyles = makeStyles(theme => ({\n root: {\n marginBottom: theme.spacing(3),\n },\n}))\n\nconst BackButton = withRouter(({\n history,\n match,\n}) => {\n const classes = useStyles()\n const { track } = useAnalytics()\n\n const handleClick = () => {\n track('contentPageButtonClick', {\n category: 'Navigation',\n label: 'Content Page Back',\n })\n\n history.goBack()\n }\n\n if (match.path === '/') return null\n\n return (\n
\n \n   Back\n \n
\n )\n})\n\nexport default BackButton\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\n// import Typography from '@mui/material/Typography'\n// import Divider from '@mui/material/Divider'\n\nimport SimpleMarkdown from './SimpleMarkdown'\n\nimport { useRootStore } from '@/stores/root/store'\nimport { useRouteStore } from '@/stores'\n\nconst StaticMarkdown = observer((props) => {\n const store = useRootStore()\n const route = useRouteStore()\n\n const content = store.search.getStaticContent(props.contentId)\n\n return (\n
\n {content.body}\n
\n )\n})\n\nexport default StaticMarkdown\n","import React from 'react'\n\nimport _ from 'lodash'\nimport clsx from 'clsx'\nimport { Link as RouterLink } from 'react-router-dom'\n\nimport { withStyles } from '@mui/styles'\nimport {\n Container,\n Typography,\n Divider,\n Grid,\n Link as MuiLink,\n} from '@mui/material'\n\nimport Markdown from '@/ui/markdown/Markdown'\n\nimport { useConfig } from '@/config'\nimport { useAnalytics } from 'use-analytics'\n\nconst styles = (theme) => ({\n root: {\n display: 'flex',\n flexDirection: 'column',\n },\n item: {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'flex-start',\n margin: theme.spacing(0.5, 0),\n fontSize: '0.86rem',\n },\n icon: {\n marginRight: theme.spacing(1.5),\n },\n link: {\n color: theme.palette.text.primary,\n },\n})\n\nconst StaticMenuItem = ({ classes, icon, label, route, href }) => {\n const { track } = useAnalytics()\n\n const handleClick = () => {\n track('footerMenuItemClick', {\n category: 'Navigation',\n label: label,\n })\n }\n\n const linkProps = route\n ? {\n to: route,\n component: RouterLink,\n onClick: handleClick,\n }\n : href\n ? {\n href,\n target: '_blank',\n }\n : null\n\n const innerItem = (\n
\n
\n \n
\n
\n {label.split('\\n').map((l, i) => (\n
{l}
\n ))}\n
\n
\n )\n\n return linkProps ? (\n \n {innerItem}\n \n ) : (\n innerItem\n )\n}\n\nconst StaticMenu = ({ classes, menu: menuId, hide }) => {\n const { tenantConfig: tc } = useConfig()\n const menu = tc.ui?.menus?.[menuId]\n if (!menu) return null\n\n const items = (menu.items || [])\n .filter((i) => !(i.hide || []).includes(hide))\n .map((item, i) => )\n\n return
{items}
\n}\n\nexport default withStyles(styles, { name: 'AMSStaticMenu' })(StaticMenu)\n","import React from 'react'\n\nimport _ from 'lodash'\n\nimport { withStyles } from '@mui/styles'\nimport {\n Container,\n Typography,\n Divider,\n Grid,\n Link as MuiLink,\n} from '@mui/material'\n\n// import { withVariantStyles } from '@/ui/hooks/theme-hooks'\n\nimport StaticMarkdown from '@/ui/markdown/StaticMarkdown'\nimport StaticMenu from '@/ui/nav/menus/StaticMenu'\nimport ImageList from '@/ui/components/images/ImageList'\nimport CieBlock from './CieBlock'\nimport Sponsors from './Sponsors'\nimport Acknowledgement from './Acknowledgement'\n\nconst footerComponents = {\n StaticMarkdown,\n CieBlock,\n StaticMenu,\n Sponsors,\n Acknowledgement,\n}\n\nimport { config } from '@/config'\n\nconst { tenantConfig } = config\n\nconst styles = (theme) => ({\n root: {\n padding: theme.spacing(2, 0),\n color: theme.palette.text.primary,\n },\n container: {\n padding: theme.spacing(0, 2),\n [theme.breakpoints.down('sm')]: {\n padding: theme.spacing(0, 1),\n },\n },\n sectionTitle: {\n marginBottom: theme.spacing(4),\n },\n sectionTitleLabel: {\n fontSize: 15,\n fontWeight: 600,\n },\n divider: {},\n block: {\n padding: theme.spacing(2),\n },\n blockTitle: {\n marginBottom: theme.spacing(4),\n },\n blockTitleLabel: {\n fontSize: '1rem',\n fontWeight: 600,\n },\n blockContents: {},\n})\n\nconst FooterTitle = ({ classes, label, divider = true }) => {\n if (!label) return null\n\n return (\n
\n \n {label}\n \n {divider && }\n
\n )\n}\n\nconst FooterBlock = ({\n classes,\n title,\n component,\n gridProps = { xs: 12 },\n props,\n}) => {\n const titleClasses = {\n title: classes.blockTitle,\n label: classes.blockTitleLabel,\n divider: classes.divider,\n }\n\n const C = footerComponents[component]\n\n return (\n \n {title && title.label && (\n \n )}\n\n {C && }\n \n )\n}\n\nconst FooterSection = ({ classes, blocks, title }) => {\n const titleClasses = {\n title: classes.sectionTitle,\n label: classes.sectionTitleLabel,\n divider: classes.divider,\n }\n\n return (\n
\n \n {title && title.label && (\n \n )}\n\n {blocks && (\n \n {blocks.map((block, i) => (\n \n ))}\n \n )}\n \n
\n )\n}\n\nexport default withStyles(styles, { name: 'AMSFooterSection' })(FooterSection)\n","import React from 'react'\n\nimport { makeStyles } from '@mui/styles'\nimport { useConfig } from '@/config'\n\nimport { TenantThemeProvider } from '@/ui/theme/TenantTheme'\nimport FooterSection from '@/ui/footer/FooterSection'\n\nconst useStyles = makeStyles(\n (theme) => ({\n root: {\n backgroundColor:\n theme.palette.background.footer || theme.palette.grey[200],\n color: theme.palette.text.secondary,\n display: 'flex',\n flexDirection: 'column',\n },\n }),\n { name: 'AMSFooter' }\n)\n\nconst Footer = () => {\n const classes = useStyles()\n const { tenantConfig: tc } = useConfig()\n const sections = tc.ui?.footer?.sections || []\n\n return (\n
\n {sections.map(({ theme, ...section }, i) => {\n if (!theme) return \n\n return (\n \n \n \n )\n })}\n
\n )\n}\n\nexport default Footer\n","import React from 'react'\n\nimport PerfectScrollbar from 'react-perfect-scrollbar'\n\nimport { makeStyles } from '@mui/styles'\nimport {\n Container,\n // Typography,\n} from '@mui/material'\nimport '../../../tenants/shared/landing.scss'\nimport BackButton from '@/ui/nav/BackButton'\nimport Footer from '@/ui/footer/Footer'\nimport { useConfig } from '@/config'\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: 'flex',\n flexDirection: 'column',\n // minHeight: '100%',\n // maxHeight: '100%',\n height: '100%',\n overflow: 'hidden',\n },\n main: {\n flex: '1 0 auto',\n marginTop: theme.spacing(4),\n marginBottom: theme.spacing(12),\n },\n}))\nconst ContentPage = ({ children, backButton = true }) => {\n const classes = useStyles()\n const { tenantConfig: tc } = useConfig()\n\n return (\n \n \n
\n {/* {backButton && } */}\n {children}\n \n
\n \n )\n}\n\nexport default ContentPage\n","import React, { useState } from 'react'\n\nimport _ from 'lodash'\n\nimport { getLocation2 as getLocation } from '@/api/legacy'\n\nimport { matchesTerms } from '@/ui/utils/object-filter'\n\nconst filterMap = {\n councils: 'councilId',\n states: 'state',\n}\n\nexport const useCurrentLocation = (props = {}) => {\n const {\n filters: localityFilters = {},\n onReset = () => undefined,\n onSuccess = () => undefined,\n onError = (error) => error,\n } = props\n\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState(null)\n const [location, setLocation] = useState(null)\n\n const reset = () => {\n setLoading(false)\n setError(null)\n setLocation(null)\n onReset()\n }\n\n const raiseError = (error) => {\n // console.warn('in raise')\n const {\n type = 'unknown',\n message = 'Your location could not be determined.',\n ...err\n } = error\n const e = {\n type,\n message,\n ...err,\n }\n\n // console.warn(e)\n setError(onError(e))\n }\n\n const locate = () =>\n (async () => {\n try {\n if (loading) return\n\n reset()\n setLoading(true)\n\n const coords = await getCurrentPosition()\n const loc = await getLocation(coords)\n\n const filterDefs =\n _.map(localityFilters, (v, k) => ({ [filterMap[k] || k]: v })) || []\n const filterFns = filterDefs.map(matchesTerms)\n const filter = (v) => filterFns.every((f) => f(v))\n\n // console.log({ loc, filtered: filter(loc) })\n\n if (!loc) throw { type: 'NoLocalityForCoords', coords }\n\n if (!filter(loc)) throw { type: 'LocationFiltered', location: loc }\n\n var uloc = { ...loc, ...coords }\n\n setLocation(uloc)\n onSuccess(uloc)\n } catch (e) {\n // console.warn('in catch')\n // console.warn(e)\n raiseError(e)\n } finally {\n setLoading(false)\n }\n })()\n\n return {\n locate,\n reset,\n loading,\n location,\n error,\n }\n}\n\nexport const getCurrentLocation = async () => {\n try {\n const coords = await getCurrentPosition()\n const loc = await getLocation(coords)\n\n if (!loc) throw { type: 'No location for coords' }\n\n return { ...loc, ...coords }\n } catch (e) {\n console.error(e)\n throw {\n ...e,\n message: e.message || 'Your location could not be determined.',\n }\n }\n}\n\nexport const getCurrentPosition = async () => {\n return new Promise((resolve, reject) => {\n navigator.geolocation.getCurrentPosition(\n (pos) => resolve({ lat: pos.coords.latitude, lng: pos.coords.longitude }),\n (error) =>\n reject({\n type: typeof error,\n error,\n }),\n {\n enableHighAccuracy: true,\n timeout: 5000,\n maximumAge: 0,\n }\n )\n })\n}\n","import _ from 'lodash'\nimport { useConfig } from '@/config'\n\nconst addLocationProperties = (location) => {\n if (location.name && location.stateLong) return location\n return {\n ...location,\n name: location.url.replace(/_/g, ' '),\n stateLong: location.stateUrl.replace(/_/g, ' '),\n }\n}\n\nexport const shortLabel = (location, options = {}) => {\n const { tenantConfig: tc } = useConfig()\n const showLocationPropsLabel = tc.search.location?.locationPropsLabel\n const { fields = ['name', 'state'] } = options\n\n if (!location) return\n\n let label = fields\n .map((f) => location?.[f])\n .filter((v) => !!v)\n .join(' ')\n\n console.log(showLocationPropsLabel)\n if (showLocationPropsLabel) {\n const loc = addLocationProperties(location)\n\n label = fields\n .map((f) => loc?.[f])\n .filter((v) => !!v)\n .join(' ')\n }\n\n return label\n}\n\nexport const addState = (label, state) => {\n if (!label) return label\n\n const lsplit = label.match(/(.*)\\s(\\d{4})$/)\n if (!lsplit) return label\n\n const [lb, name, postcode] = lsplit\n return `${name} ${state} ${postcode}`\n}\n\nexport const cleanLabel = (str) => {\n if (!str) return str\n\n // postcode\n\n // const pclen = leaveFullPostcode ? 4 : 3\n const pclen = 4\n const re = new RegExp(`^(.*)(\\\\s\\\\d{0,${pclen}})$`, 'i')\n const pcm = str.match(re)\n const r1 = pcm ? pcm[1] : str\n\n // state prefix\n\n const spm = r1.match(statePrefix)\n const r2 = spm ? spm[1] : r1\n\n return r2\n}\n\nconst statePrefix = (() => {\n const states = ['qld', 'nsw', 'vic', 'tas', 'sa', 'wa', 'nt', 'act']\n\n const partials = _.chain(states)\n .map((s) => _.map([...Array(s.length).keys()], (i) => s.substr(0, i + 1)))\n .flatten()\n .sortBy()\n .sortedUniq()\n .value()\n\n return new RegExp(`(.*)\\\\s+(?:(${partials.join('|')}))$`, 'i')\n})()\n","import React from 'react'\n\nimport { withStyles } from '@mui/styles'\n\nimport { Box, Button, Collapse, Fade, Typography } from '@mui/material'\n\nimport { shortLabel } from '@/ui/utils/location-utils'\nimport { useConfig } from '@/config'\n\nconst styles = (theme) => ({})\n\nconst GeolocationError = (props = {}) => {\n const {\n error,\n defaultLocationButton = false,\n onLocationChange = () => undefined,\n } = props\n const { message, suggestDefaultLocation } = error || {}\n\n const { tenantConfig: tc } = useConfig()\n const cfg = tc?.search?.location || {}\n\n const defaultLocation = cfg.defaultLocation\n const defaultLocationLabel = shortLabel(defaultLocation)\n\n const showError = !!error\n // const showSuggestion = suggestDefaultLocation && defaultLocation\n const showSuggestion = !!defaultLocation\n\n const handleDefaultLocationClick = () => {\n onLocationChange(\n { type: 'defaultLocationClick', code: 'DefaultLocation' },\n defaultLocation\n )\n }\n\n const suggest = showSuggestion && (\n <>\n \n Search for a supported location, or select the default location below.\n \n {defaultLocationButton && (\n \n {defaultLocationLabel}\n \n )}\n \n )\n\n return (\n \n \n \n \n \n \n {message}\n \n \n {suggest}\n \n \n \n )\n}\n\nexport default withStyles(styles, { name: 'AMSGeolocationError' })(\n GeolocationError\n)\n","import {\n Box,\n OutlinedInput,\n Button,\n IconButton,\n Autocomplete,\n InputAdornment,\n} from '@mui/material'\nimport { styled } from '@mui/material/styles'\nimport { withStyles } from '@mui/styles'\nimport clsx from 'clsx'\nimport { useConfig } from '@/config'\nimport { getLocationSuggestions } from '@/api/legacy'\nimport { milliseconds as ms } from 'date-fns'\nimport { toJS } from 'mobx'\nimport { observer } from 'mobx-react-lite'\nimport { isAlive, isStateTreeNode } from 'mobx-state-tree'\nimport React, { useEffect, useState } from 'react'\nimport { useQuery } from 'react-query'\nimport { useCurrentLocation } from '@/ui/hooks/geolocation'\nimport { usePlatform } from '@/ui/hooks/usePlatform'\nimport GeolocationError from '@/ui/location/GeolocationError'\nimport { addState, cleanLabel } from '@/ui/utils/location-utils'\nimport { useAnalytics } from 'use-analytics'\nimport useDeepCompareEffect from 'use-deep-compare-effect'\n\nconst LocationAutocomplete = styled(Autocomplete)(\n ({ theme }) => `\n .MuiInputBase-adornedEnd {\n padding-right: ${theme.spacing(1.25)} !important;\n }\n\n .MuiOutlinedInput-root {\n .MuiAutocomplete-hasPopupIcon&,.MuiAutocomplete-hasClearIcon&,\n .MuiAutocomplete-hasPopupIcon.MuiAutocomplete-hasClearIcon& {\n padding: 0;\n }\n }\n\n .MuiOutlinedInput-input {\n display: flex;\n ::-ms-clear {\n display: none;\n }\n .MuiAutocomplete-hasPopupIcon&,.MuiAutocomplete-hasClearIcon&,\n .MuiAutocomplete-hasPopupIcon.MuiAutocomplete-hasClearIcon& {\n padding: ${theme.spacing(1.25)} ${theme.spacing(2.5)}\n }\n }\n `\n)\n\nconst locIcons = {\n default: 'fas fa-location',\n apple: 'far fa-location-arrow',\n locating: 'far fa-circle-notch fa-spin',\n}\n\nconst LocateMeButton = (props) => {\n const {\n loading = false,\n label = 'Locate Me',\n showButtonLabel = false,\n ...buttonProps\n } = props\n\n const platform = usePlatform()\n const iconClassName = loading\n ? locIcons.locating\n : platform.isApple\n ? locIcons.apple\n : locIcons.default\n\n const icon = (\n \n )\n\n if (showButtonLabel)\n return (\n \n {label}\n \n )\n\n return (\n \n {icon}\n \n )\n}\n\nconst styles = (theme) => ({\n root: {\n width: '100%',\n display: 'flex',\n flexDirection: 'column',\n },\n})\n\nconst LocationInput = observer(\n ({\n classes,\n id = 'location-select',\n disabled = false,\n value = null,\n showButtonLabel = false,\n defaultLocationButton = false,\n autoFocus = false,\n // disableStateLabel = false,\n onChange = () => undefined,\n ...acprops\n }) => {\n const { tenantConfig: tc } = useConfig()\n const cfg = tc.search?.location || {}\n const { disableStateLabel = false } = cfg\n\n const { track } = useAnalytics()\n const [internalValue, setInternalValue] = useState(value)\n const [inputValue, setInputValue] = useState('')\n const [inputRef, setInputRef] = useState()\n\n // update value\n // TODO: doesn't trigger on replace (hack in SurveyLocation)\n const isHome = id === 'location-select-home'\n useDeepCompareEffect(() => {\n const v = isStateTreeNode(value) ? toJS(value) : value\n\n setInputValue(v ? v.label : '')\n setInternalValue(v)\n }, [toJS(value) || {}])\n\n // autoFocus\n\n useEffect(() => {\n inputRef && autoFocus && inputRef.focus()\n }, [inputRef, autoFocus])\n\n // autocomplete query\n\n // const query = cleanLabel(inputValue)\n\n const { filters } = cfg || {}\n\n const params = {\n searchTerm: cleanLabel(inputValue),\n ...filters,\n }\n\n const { data: locres } = useQuery(\n ['search-locality', params],\n async () => await getLocationSuggestions(params),\n {\n staleTime: ms({ hours: 24 }),\n keepPreviousData: true,\n select: (data = []) => {\n // console.log({ data })\n const locFull = disableStateLabel\n ? internalValue?.label\n : addState(internalValue?.label, internalValue?.state)\n // const locName = cleanLabel(internalValue?.label)\n\n // input val matches internal value\n if (internalValue && inputValue === locFull) return [internalValue]\n\n if (data?.length > 0) return data\n\n return data || []\n },\n onSettled: () => geoloc.reset(),\n }\n )\n\n // console.log({ locres })\n\n const noOptionsText =\n params.searchTerm.length <= 3\n ? 'Enter suburb or postcode'\n : 'No results found'\n\n // locate me\n\n const geoloc = useCurrentLocation({\n filters,\n onSuccess: (newValue) => {\n track('locationInputLocateMe', {\n category: 'Location',\n label: newValue?.label || 'null',\n })\n\n // change\n\n setInternalValue(newValue)\n onChange({ type: 'locate', code: 'Locate' }, newValue)\n },\n onError: (error) => {\n const { type, location } = error\n\n if (type === 'LocationFiltered' && location)\n return {\n ...error,\n message: `${tc.options.title} is not available in your region (${location.name} ${location.state}).`,\n suggestDefaultLocation: true,\n }\n\n return error\n },\n })\n\n const showGeolocError = !!geoloc.error?.message\n\n // handlers\n\n const change = (e, newValue, trackEvent = 'locationSelect') => {\n track(trackEvent, {\n category: 'Location',\n label: newValue?.label || 'null',\n })\n\n setInternalValue(newValue)\n onChange(e, newValue)\n }\n\n const handleInputChange = (_, newInputValue) => {\n setInputValue(newInputValue)\n }\n\n const handleAutoselectChange = (e, newValue) => {\n change(e, newValue, 'locationInputSelect')\n }\n\n const handleDefaultLocationClick = (e, newValue) => {\n change(e, newValue, 'locationInputSelect')\n geoloc.reset()\n }\n\n // const locIcon = geoloc.loading ? locIcons.busy : locIcons.default\n const disableAutocomplete = disabled || geoloc.loading\n\n const getOptionLabel = (option) => {\n if (!option) return ''\n if (isStateTreeNode(option) && !isAlive(option)) return ''\n if (typeof option === 'string') return option\n\n const { label, state } = option\n\n if (!(label && state)) return ''\n if (!disableStateLabel) return addState(label, state)\n return label\n }\n\n const isOptionEqualToValue = (option, value) => option.id === value.id\n\n // console.log({ internalValue, options })\n\n // const renderAdornments\n\n const renderInput = ({ inputProps, InputProps, ...other }) => {\n // MuiAutocomplete uses absolute padding & spacing for endAdornments and only provides\n // rendered components. This uses child renderProps to filter out AutocompleteEndAdornment\n // contents removing the popup icon.\n\n const { endAdornment, ...rootProps } = InputProps\n const adornments = React.Children.toArray(\n endAdornment.props.children\n ).filter((a) => !a.props['aria-label'].match(/^(Open|Close)$/))\n\n const customEndAdornments = (\n \n {adornments}\n \n \n )\n const placeholder = isHome ? ' Where are you?' : 'Suburb'\n\n return (\n \n )\n }\n return (\n
\n x}\n {...acprops}\n />\n\n \n
\n )\n }\n)\n\nexport default withStyles(styles, { name: 'AMSLocationInput' })(LocationInput)\n","import React from 'react'\n\nimport { observer } from 'mobx-react-lite'\n\nimport { makeStyles } from '@mui/styles'\nimport {\n FormControl,\n FormLabel,\n FormControlLabel,\n Checkbox,\n useMediaQuery,\n} from '@mui/material'\n\nimport { useRootStore } from '@/stores/root/store'\nimport LocationInput from '@/ui/location/LocationInput'\n\nconst useStyles = makeStyles(() => ({\n root: {\n width: '100%',\n },\n}))\n\nconst SurveyLocation = observer(({ label = null, defaultLocation = null }) => {\n const classes = useStyles()\n const { survey } = useRootStore()\n const { location } = survey\n\n // const\n\n const isMobile = useMediaQuery((theme) => theme.breakpoints.down('sm'))\n\n const handleDefault = (e) => {\n survey.setLocation(e.target.checked ? defaultLocation : null)\n }\n\n const handleChange = (e, value) => {\n survey.setLocation(value)\n }\n\n return (\n \n {label}\n
\n \n \n }\n label=\"I do not want to provide a location\"\n />\n
\n )\n})\n\nexport default SurveyLocation\n","import React from 'react'\n\nimport clsx from 'clsx'\nimport { styled } from '@mui/system'\nimport { Icon as Icon, useThemeProps } from '@mui/material'\n\nconst FontAwesomeIconRoot = styled(Icon, {\n name: 'AMSFontAwesomeIcon',\n shouldForwardProp: (prop) => prop !== 'fontSize',\n})(({ theme, fontSize = 'inherit' }) => ({\n boxSizing: 'content-box',\n fontSize:\n {\n inherit: 'inherit',\n small: '0.86rem',\n medium: '1.05rem',\n large: '1.5rem',\n }[fontSize] || fontSize,\n padding:\n {\n large: '0.4rem',\n }[fontSize] || '0.2rem',\n}))\n\nexport const FontAwesomeIcon = React.forwardRef(function FontAwesomeIcon(\n props,\n ref\n) {\n const { fa, ...other } = props\n\n // const classes = fa.split\n const className = clsx(fa, 'fw')\n\n return (\n \n )\n})\n\nexport default FontAwesomeIcon\n","import React from 'react'\n\nimport { styled } from '@mui/system'\nimport { Button as MuiButton } from '@mui/material'\n\nexport const Button = styled(MuiButton, {\n name: 'AMSButton',\n shouldForwardProp: (prop) => prop !== 'rounded',\n})(({ rounded, size, theme }) => ({\n ...(rounded && {\n borderRadius: 9999,\n padding: {\n large: theme.spacing(1, 3),\n }[size],\n }),\n}))\n\nexport default Button\n","import React from 'react'\n\n// import { styled } from '@mui/system'\nimport { makeStyles } from '@mui/styles'\n\nimport { Link as RouterLink } from 'react-router-dom'\nimport { Typography, Box, Button as MuiButton } from '@mui/material'\n\nimport { useConfig } from '@/config'\nimport SurveyLocation from '../../../../src/ui/survey/SurveyLocation'\nimport LocationInput from '../../../../src/ui/location/LocationInput'\n\nimport FAIcon from '@/ui/components/icon/FontAwesomeIcon'\nimport Button from '@/ui/components/buttons/Button'\nimport { useRootStore } from '@/stores/root/store'\nimport { useAnalytics } from 'use-analytics'\n\nconst ClickAway = (props) => {\n const { children, imgSrc, ...other } = props || {}\n\n return (\n \n {children}\n \n \n )\n}\n\nconst LandingHero = () => {\n const assets = useConfig()?.tenantConfig?.assets?.landing\n const store = useRootStore()\n const params = store.search.params\n // const hero = heroImg\n const { track } = useAnalytics()\n\n const handleChange = (value) => {\n track('searchParamaterChange', {\n category: 'Search',\n label: 'location',\n })\n\n store.search.params.set('location', value)\n }\n\n return (\n \n \n \n \n \n Welcome to\n
\n \n Access My Healthcare\n \n \n\n \n {`Find health services in your local area. If you're looking for\n fixed or a visiting outreach service, you'll find it on Access My\n Healthcare.`}\n \n \n \n \n Local health services are a
\n click away\n
\n \n \n handleChange(value)}\n defaultLocationButton\n />\n \n\n }\n to=\"/search\"\n size=\"Large\"\n rounded\n sx={{\n borderRadius: '0 100px 100px 0',\n maxHeight: '49px',\n }}\n >\n Search\n \n \n \n \n \n\n \n \n \n \n )\n}\n\nexport default LandingHero\n","import React from 'react'\nimport { makeStyles } from '@mui/styles'\nimport { Typography, Box } from '@mui/material'\n\nconst LandingTestimonials = props => {\n const { title, body } = props || {}\n\n const paragraphs = body?.split('\\n').map(l => l.trim())\n\n return (\n \n \n {title && (\n \n {title}\n \n )}\n\n {paragraphs?.map((text, i) => (\n \n {text}\n \n ))}\n \n \n )\n}\n\nexport default LandingTestimonials\n","import React from 'react'\n\nimport { Box, List, ListItem, ListItemText } from '@mui/material'\n\nimport { useConfig } from '@/config'\n\nconst ItemText = (props) => {\n const { body } = props || {}\n const lines = body?.split('\\n').map((l) => l.trim())\n\n return (\n <>\n {lines?.map((line, i) => (\n {line}\n ))}\n \n )\n}\n\nconst LandingPoints = (props) => {\n const assets = useConfig()?.tenantConfig?.assets?.landing\n\n const {\n image = assets.testimonial1,\n alignImage = 'left',\n items,\n } = props || {}\n\n return (\n \n \n \n \n \n \n {items?.map((item, i) => (\n \n \n }\n primaryTypographyProps={{ noWrap: false }}\n />\n \n ))}\n \n \n \n )\n}\n\nexport default LandingPoints\n","import React from 'react'\n\nimport { Typography, Box } from '@mui/material'\n\nimport Button from '@/ui/components/buttons/Button'\n\nconst LandingRegAndList = (props) => {\n return (\n \n \n Are you a service provider and want to list your services on Access My\n Healthcare? You can do this by registering your information on My\n Community Directory.\n \n\n \n Register and List\n \n \n )\n}\n\nexport default LandingRegAndList\n","import React from 'react'\n\nimport { makeStyles } from '@mui/styles'\n\nimport { Link as RouterLink } from 'react-router-dom'\n// import { Button } from '@mui/material'\nimport Button from '@/ui/components/buttons/Button'\nimport FAIcon from '@/ui/components/icon/FontAwesomeIcon'\n\nexport const SiteSupportButton = (props) => {\n const { variant = 'outlined', to = '/support' } = props\n\n return (\n }\n >\n Contact Site Support\n \n )\n}\n\nexport default SiteSupportButton\n","import React from 'react'\n\nimport _ from 'lodash'\n\nimport { Typography, Box, Link } from '@mui/material'\n\n// import Button from '@/ui/components/buttons/Button'\nimport SiteSupportButton from '@/ui/components/buttons/SiteSupportButton'\nimport FAIcon from '@/ui/components/icon/FontAwesomeIcon'\n\nimport { useConfig } from '@/config'\n\nconst Contact = (props) => {\n const { id, label, icon, href } = props || {}\n return (\n \n \n {label}\n \n )\n}\n\nconst LandingContactUs = (props) => {\n const { tenantConfig: tc } = useConfig()\n\n const contactKeys = ['email', 'phone']\n const menuItems = _.keyBy(tc.ui.menus.contact?.items || [], 'id')\n const contactItems = _.values(_.pick(menuItems, contactKeys))\n\n return (\n \n \n \n Need some help, or would you like to know more?\n \n \n Our support desk is open Monday to Friday 8.00am to 7.00pm AEST.\n \n\n \n {contactItems.map((item, i) => (\n \n ))}\n \n\n \n Or click the button below:\n \n \n \n \n )\n}\n\nexport default LandingContactUs\n","import React from 'react'\nimport { Typography, Box, Divider } from '@mui/material'\n\nimport { useConfig } from '@/config'\nimport LandingHero from './LandingHero.jsx'\nimport LandingTestimonials from './LandingTestimonials.jsx'\nimport LandingPoints from './LandingPoints.jsx'\nimport LandingRegAndList from './LandingRegAndList.jsx'\nimport LandingContactUs from './LandingContactUs.jsx'\n\nconst Landing = (props) => {\n const assets = useConfig()?.tenantConfig?.assets?.landing\n\n const points1 = [\n 'Locates the nearest service or within a specific distance',\n 'Finds both fixed and visiting services',\n 'Provides options for when services are provided (date range)',\n ]\n\n const points2 = [\n 'Fixed service: \\nA service that is available to you at any time',\n 'Visiting/Outreach service: \\nA service that comes to your community at certain times.',\n ]\n\n const testimonials = [\n 'Access My Healthcare is an online calendar of health and community services that are local to you.',\n '',\n ]\n\n return (\n \n \n \n \n \n How does it work?\n \n \n \n What do you mean by Fixed or Visiting/Outreach service?\n \n \n \n \n \n \n \n )\n}\n\nexport default Landing\n","import React, { useState } from 'react'\n\nimport clsx from 'clsx'\n\nimport { makeStyles } from '@mui/styles'\nimport {\n Box,\n Grid,\n Button,\n Accordion,\n AccordionSummary,\n AccordionDetails,\n Typography,\n Divider,\n Link,\n} from '@mui/material'\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore'\n\nconst useStyles = makeStyles(theme => ({\n root: {},\n title: {\n [theme.breakpoints.down('sm')]: {\n fontSize: 26,\n },\n },\n intro: {\n fontSize: 18,\n },\n // emergencyButton: {\n // // fontSize: 20,\n // // fontWeight: 600,\n // },\n grid: {\n marginTop: theme.spacing(4),\n },\n accordion: {\n backgroundColor: '#fafafa',\n margin: theme.spacing(2, 0),\n // boxShadow: 'none',\n boxShadow: '0px 1px 1px 0px rgba(0, 0, 0, 0.12)',\n '&:before': {\n backgroundColor: 'rgba(0, 0, 0, 0)',\n },\n },\n accordionDetails: {\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'stretch',\n },\n groupTitle: {\n fontSize: 18,\n fontWeight: 400,\n },\n groupIcon: {\n marginRight: theme.spacing(2),\n },\n serviceLink: {\n // backgroundColor: '#f0f',\n ...theme.typography.body1,\n marginTop: theme.spacing(2),\n marginLeft: 'auto',\n },\n serviceLinkIcon: {\n marginRight: theme.spacing(1),\n },\n}))\n\nconst ServiceLink = ({ icon, label, href }) => {\n const classes = useStyles()\n\n return (\n
\n \n \n {label}\n \n {/* {href} */}\n
\n )\n}\n\nconst EmergencyAccordian = ({\n expandId,\n title,\n description,\n phone,\n chat,\n expanded,\n onAccordionClick = () => undefined,\n}) => {\n const classes = useStyles()\n\n const serviceLinkProps = phone\n ? { icon: 'fas fa-phone', label: phone, href: `tel:${phone.replace(/[^\\d]/g, '')}` }\n : chat\n ? { icon: 'fas fa-comments', label: 'Chat', href: chat }\n : null\n\n return (\n onAccordionClick(expandId)}\n square\n >\n }\n // aria-controls={id}\n id={expandId}\n >\n \n {title}\n \n \n \n {description}\n {serviceLinkProps && }\n \n \n )\n}\n\nconst EmergencyGroup = ({ group, expanded, onAccordionClick = () => undefined }) => {\n const classes = useStyles()\n\n return (\n \n \n \n {group.title}\n \n {group.items.map((item, i) => (\n \n ))}\n \n )\n}\n\nconst Emergency = ({ data }) => {\n const classes = useStyles()\n const [expanded, setExpanded] = useState('')\n const { emergencyServicesButtonProps, groups = [] } = data || {}\n\n const handleAccordionClick = panel => {\n setExpanded(expanded === panel ? undefined : panel)\n }\n\n return (\n
\n \n Emergency Help\n \n \n
\n\n
\n\n \n {/* \n If you or someone you know needs immediate assistance, please call\n \n
*/}\n\n \n Emergency Services - 000\n \n
\n\n
\n
\n\n \n {groups.map((group, i) => (\n \n ))}\n \n
\n )\n}\n\nexport default Emergency\n","import React, { useState, useEffect, useRef } from 'react'\n\nimport clsx from 'clsx'\nimport scrollIntoView from 'scroll-into-view-if-needed'\n\nimport { makeStyles } from '@mui/styles'\nimport {\n Box,\n Button,\n Accordion,\n AccordionSummary,\n AccordionDetails,\n Typography,\n Divider,\n Link,\n} from '@mui/material'\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore'\n\nconst useStyles = makeStyles(theme => ({\n root: {},\n title: {\n [theme.breakpoints.down('sm')]: {\n fontSize: 26,\n },\n },\n intro: {\n fontSize: 18,\n },\n emergencyButton: {\n fontSize: 20,\n fontWeight: 600,\n },\n grid: {\n marginTop: theme.spacing(4),\n },\n accordion: {\n backgroundColor: '#fafafa',\n margin: theme.spacing(2, 0),\n // boxShadow: 'none',\n boxShadow: '0px 1px 1px 0px rgba(0, 0, 0, 0.12)',\n '&:before': {\n backgroundColor: 'rgba(0, 0, 0, 0)',\n },\n },\n accordionDetails: {\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'stretch',\n },\n groupTitle: {\n fontSize: 18,\n fontWeight: 600,\n },\n groupIcon: {\n marginRight: theme.spacing(2),\n },\n serviceLink: {\n // backgroundColor: '#f0f',\n ...theme.typography.body1,\n // marginTop: theme.spacing(2),\n // marginLeft: 'auto',\n },\n serviceLinkIcon: {\n marginRight: theme.spacing(1),\n },\n}))\n\nconst ServiceLink = ({ icon, label, href }) => {\n const classes = useStyles()\n\n return (\n
\n \n \n {label}\n \n {/* {href} */}\n
\n )\n}\n\nconst EmergencyItem = ({ title, description, phone, chatUrl }) => {\n const classes = useStyles()\n\n const serviceLinkProps = phone\n ? { icon: 'fas fa-phone', label: phone, href: `tel:${phone.replace(/[^\\d]/g, '')}` }\n : chatUrl\n ? { icon: 'fas fa-comments', label: 'Chat', href: chatUrl }\n : null\n\n return (\n \n \n {title}\n \n {serviceLinkProps && }\n\n \n {description}\n \n \n )\n}\n\nconst EmergencyGroup = ({ group, expanded, expandId, onAccordionClick = () => undefined }) => {\n const classes = useStyles()\n\n return (\n onAccordionClick(expandId)}\n TransitionProps={{\n timeout: 200,\n addEndListener: (node, done) => {\n if (expanded === expandId) {\n const el = document.getElementById(expandId)\n if (!el) return\n\n setTimeout(() => {\n scrollIntoView(el, {\n scollMode: 'always',\n behavior: 'smooth',\n block: 'start',\n })\n }, 200)\n }\n },\n }}\n square\n >\n }\n // aria-controls={id}\n id={expandId}\n >\n \n \n {group.title}\n \n \n \n {group.items.map((item, i) => (\n \n ))}\n \n \n )\n}\n\nconst EmergencyUsc = ({ data }) => {\n const classes = useStyles()\n const rootRef = useRef(null)\n const [expanded, setExpanded] = useState('')\n const groups = data.groups\n\n const handleAccordionClick = panel => {\n setExpanded(expanded === panel ? undefined : panel)\n }\n\n const scrollTo = ({ expanded }) => {\n if (!expanded) {\n const el = document.getElementById('scroll-content')\n if (!el) return\n\n el.scrollTo({\n top: 0,\n left: 0,\n behavior: 'smooth',\n })\n }\n }\n\n useEffect(() => {\n scrollTo({ expanded })\n }, [expanded])\n\n return (\n
\n \n Emergency Help\n \n \n
\n\n
\n\n \n \n If you or someone you know needs immediate assistance, please call\n \n
\n\n \n Emergency Services 000\n \n
\n\n
\n
\n\n
\n {groups.map((group, i) => (\n \n ))}\n
\n
\n )\n}\n\nexport default EmergencyUsc\n","import React, { useState } from 'react'\n\nimport clsx from 'clsx'\n\nimport { makeStyles } from '@mui/styles'\nimport {\n Box,\n Grid,\n Button,\n Accordion,\n AccordionSummary,\n AccordionDetails,\n Typography,\n Divider,\n Link,\n} from '@mui/material'\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore'\n\nconst useStyles = makeStyles(theme => ({\n root: {\n\n },\n title: {\n [theme.breakpoints.down('sm')]: {\n fontSize: 26,\n },\n },\n intro: {\n fontSize: 18,\n },\n emergencyButton: {\n fontSize: 20,\n fontWeight: 600,\n\n },\n grid: {\n marginTop: theme.spacing(4),\n },\n accordion: {\n backgroundColor: '#fafafa',\n margin: theme.spacing(2, 0),\n // boxShadow: 'none',\n boxShadow: '0px 1px 1px 0px rgba(0, 0, 0, 0.12)',\n '&:before': {\n backgroundColor: 'rgba(0, 0, 0, 0)',\n },\n },\n accordionDetails: {\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'stretch',\n },\n groupTitle: {\n fontSize: 18,\n fontWeight: 400,\n },\n groupIcon: {\n marginRight: theme.spacing(2),\n },\n serviceLink: {\n // backgroundColor: '#f0f',\n ...theme.typography.body1,\n marginTop: theme.spacing(2),\n marginLeft: 'auto',\n },\n serviceLinkIcon: {\n marginRight: theme.spacing(1),\n },\n}))\n\nconst ServiceLink = ({ icon, label, href }) => {\n const classes = useStyles()\n\n return (\n
\n \n \n {label}\n \n {/* {href} */}\n
\n )\n}\n\nconst EmergencyAccordian = ({\n expandId,\n title,\n description,\n phone,\n chatUrl,\n expanded,\n onAccordionClick = () => undefined,\n}) => {\n const classes = useStyles()\n\n const serviceLinkProps = phone\n ? { icon: 'fas fa-phone', label: phone, href: `tel:${phone.replace(/[^\\d]/g, '')}`}\n : chatUrl\n ? { icon: 'fas fa-comments', label: 'Chat', href: chatUrl }\n : null\n\n return (\n onAccordionClick(expandId)}\n square\n >\n }\n // aria-controls={id}\n id={expandId}\n >\n {title}\n \n \n {description}\n {serviceLinkProps && }\n \n \n )\n}\n\nconst EmergencyGroup = ({\n group,\n expanded,\n onAccordionClick = () => undefined,\n}) => {\n const classes = useStyles()\n\n return (\n \n \n {group.title}\n \n {group.items.map((item, i) => (\n \n ))}\n \n )\n}\n\nconst Emergency = ({ data }) => {\n const classes = useStyles()\n const [expanded, setExpanded] = useState('')\n const groups = data.groups\n\n const handleAccordionClick = (panel) => {\n setExpanded(expanded === panel ? undefined : panel)\n }\n\n return (\n
\n \n Emergency Help\n \n \n
\n\n
\n\n \n \n If you or someone you know needs immediate assistance, please call\n \n
\n\n \n Emergency Services 000\n \n \n\n
\n
\n\n \n {groups.map((group, i) => (\n \n ))}\n \n
\n )\n\n}\n\nexport default Emergency\n","import React, { useState, useEffect, useRef } from 'react'\n\nimport clsx from 'clsx'\nimport scrollIntoView from 'scroll-into-view-if-needed'\n\nimport { makeStyles } from '@mui/styles'\nimport {\n Box,\n Button,\n Accordion,\n AccordionSummary,\n AccordionDetails,\n Typography,\n Divider,\n Link,\n} from '@mui/material'\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore'\n\nconst useStyles = makeStyles(theme => ({\n root: {\n\n },\n title: {\n [theme.breakpoints.down('sm')]: {\n fontSize: 26,\n },\n },\n intro: {\n fontSize: 18,\n },\n emergencyButton: {\n fontSize: 20,\n fontWeight: 600,\n\n },\n grid: {\n marginTop: theme.spacing(4),\n },\n accordion: {\n backgroundColor: '#fafafa',\n margin: theme.spacing(2, 0),\n // boxShadow: 'none',\n boxShadow: '0px 1px 1px 0px rgba(0, 0, 0, 0.12)',\n '&:before': {\n backgroundColor: 'rgba(0, 0, 0, 0)',\n },\n },\n accordionDetails: {\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'stretch',\n },\n groupTitle: {\n fontSize: 18,\n fontWeight: 600,\n },\n groupIcon: {\n marginRight: theme.spacing(2),\n },\n serviceLink: {\n // backgroundColor: '#f0f',\n ...theme.typography.body1,\n // marginTop: theme.spacing(2),\n // marginLeft: 'auto',\n },\n serviceLinkIcon: {\n marginRight: theme.spacing(1),\n },\n appLink: {\n backgroundColor: '#666',\n color: '#fff',\n borderRadius: 4,\n fontWeight: 700,\n marginRight: theme.spacing(1),\n padding: theme.spacing(1),\n '& > i': {\n marginRight: theme.spacing(1),\n },\n },\n}))\n\nconst lm = {\n tel: ({ link }) => ({\n icon: 'fas fa-phone',\n label: link,\n href: `tel:${link.replaceAll(/[^0-9]/g, '')}`,\n }),\n web: ({ link }) => ({\n icon: 'fa fa-link',\n label: link.replace((/^https?:\\/+/), ''),\n href: link,\n }),\n}\n\nconst ServiceLink = ({ icon, label, href }) => {\n const classes = useStyles()\n\n return (\n
\n \n \n {label}\n \n {/* {href} */}\n
\n )\n}\n\nconst appLinkConfig = {\n ios: {\n icon: 'fab fa-apple',\n label: 'App Store',\n },\n android: {\n icon: 'fab fa-google-play',\n label: 'Google Play',\n },\n}\n\nconst AppLink = ({ type, url }) => {\n const classes = useStyles()\n\n if (!type || !url) return null\n\n const cfg = appLinkConfig[type]\n if (!cfg) return\n\n return (\n \n \n {cfg.label}\n \n )\n}\n\nconst Item = ({\n title,\n links = [],\n apps = [],\n description,\n}) => {\n const classes = useStyles()\n\n // const serviceLinkProps = phone\n // ? { icon: 'fas fa-phone', label: phone, href: `tel:${phone.replace(/[^\\d]/g, '')}`}\n // : chatUrl\n // ? { icon: 'fas fa-comments', label: 'Chat', href: chatUrl }\n // : null\n\n const linkProps = links?.map(l => {\n if (!(l.type in lm)) return null\n return lm[l.type](l)\n })\n\n return (\n \n {title}\n\n {linkProps && linkProps.map((lp, i) => )}\n\n \n {description}\n \n\n {apps && (\n \n {apps.map((a, i) => )}\n\n \n )}\n\n\n\n {/* {JSON.stringify(linkProps)} */}\n\n {/* \n {linkProps.map((lp, i) => )}\n */}\n \n )\n}\n\nconst Group = ({\n group,\n expanded,\n expandId,\n onAccordionClick = () => undefined,\n}) => {\n const classes = useStyles()\n\n return (\n\n onAccordionClick(expandId)}\n TransitionProps={{\n timeout: 200,\n addEndListener: (node, done) => {\n if (expanded === expandId) {\n const el = document.getElementById(expandId)\n if (!el) return\n\n setTimeout(() => {\n scrollIntoView(el, {\n scollMode: 'always',\n behavior: 'smooth',\n block: 'start',\n })\n }, 200)\n }\n },\n }}\n square\n >\n }\n // aria-controls={id}\n id={expandId}\n >\n \n {group.title}\n \n \n \n {group.items.map((item, i) => (\n \n ))}\n \n \n )\n}\n\nconst Block = ({ data }) => {\n const classes = useStyles()\n const rootRef = useRef(null)\n const [expanded, setExpanded] = useState('')\n const groups = data.groups\n\n const handleAccordionClick = (panel) => {\n setExpanded(expanded === panel ? undefined : panel)\n }\n\n const scrollTo = ({ expanded }) => {\n if (!expanded) {\n const el = document.getElementById('scroll-content')\n if (!el) return\n\n el.scrollTo({\n top: 0,\n left: 0,\n behavior: 'smooth',\n })\n }\n }\n\n useEffect(() => {\n scrollTo({ expanded })\n }, [expanded])\n\n return (\n
\n \n Self Help Resources\n \n \n
\n
\n\n
\n {groups.map((group, i) => (\n \n ))}\n
\n\n
\n )\n\n}\n\nexport default Block\n","import React, { useEffect } from 'react'\n\nimport { useHistory } from 'react-router-dom'\n\nimport { Box, Typography, Button } from '@mui/material'\n\nconst NotFound = () => {\n // const history = useHistory()\n // console.log(history)\n\n return (\n \n \n 404\n Oops! We could not find the requested page.\n \n\n \n \n )\n}\n\nexport default NotFound\n","import React from 'react'\n\nimport _ from 'lodash'\nimport clsx from 'clsx'\nimport { withStyles } from '@mui/styles'\nimport {\n Box,\n FormLabel,\n FormControl,\n FormControlLabel,\n Button,\n Typography,\n} from '@mui/material'\nimport { Link as RouterLink } from 'react-router-dom'\n\nimport { resolveVariantText } from '@/stores/root/utils/survey-utils'\n\nconst styles = (theme) => ({\n root: {\n display: 'flex',\n flexDirection: 'column',\n },\n label: {},\n labelIcon: {\n marginRight: theme.spacing(1),\n },\n // labelRoot: {\n // alignItems: 'flex-start',\n // marginBottom: theme.spacing(1),\n // },\n // label: {\n // marginTop: theme.spacing(1.1),\n // },\n // title: {\n // marginBottom: theme.spacing(3),\n // },\n})\n\nconst SurveyQuestion = ({ classes, question, children }) => {\n const {\n icon,\n strings = {},\n hideLabel = false,\n hideDescription = false,\n hideIcon = false,\n } = question || {}\n\n // const strings = _.mapValues(strings, )\n\n return (\n \n {!hideLabel && strings.label && (\n \n {!hideIcon && icon && }\n {strings.label}\n \n )}\n\n {!hideDescription && strings.description && (\n \n {strings.description}\n \n )}\n\n {/* {!hide} */}\n\n {children && {children}}\n\n {/* SurveyQuestion */}\n {/* {questionText}\n
\n \n {buttons.map(({ label, icon, ...buttonProps }, i) => {\n return (\n }\n {...buttonProps}\n >\n {label}\n \n )\n })}\n */}\n \n )\n}\n\nexport default withStyles(styles, { name: 'AMSSurveyQuestion' })(SurveyQuestion)\n","import React from 'react'\n\nimport _ from 'lodash'\nimport { makeStyles } from '@mui/styles'\nimport {\n Box,\n FormLabel,\n FormControl,\n FormControlLabel,\n Button,\n Typography,\n} from '@mui/material'\nimport { Link as RouterLink } from 'react-router-dom'\n\nimport {\n resolveVariantText,\n resolveVariantStrings,\n} from '@/stores/root/utils/survey-utils'\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: 'flex',\n flexDirection: 'column',\n },\n labelRoot: {\n alignItems: 'flex-start',\n marginBottom: theme.spacing(1),\n },\n label: {\n marginTop: theme.spacing(1.1),\n },\n title: {\n marginBottom: theme.spacing(3),\n },\n}))\n\nconst SurveyButtons = ({ question, pathway }) => {\n const classes = useStyles()\n\n const strings =\n resolveVariantStrings(\n _.pick(question, ['question', 'description', 'suffix']),\n pathway\n ) || {}\n\n // console.log({ pathway, question, strings })\n\n const { buttons } = question\n if (!_.isArray(buttons)) return null\n\n return (\n \n {strings.question}\n\n {strings.description && (\n \n {strings.description}\n \n )}\n\n \n {buttons.map(({ label, icon, ...buttonProps }, i) => {\n return (\n }\n {...buttonProps}\n >\n {label}\n \n )\n })}\n \n\n {strings.suffix && (\n \n {strings.suffix}\n \n )}\n \n )\n}\n\nexport default SurveyButtons\n","import React from 'react'\n\nimport { makeStyles } from '@mui/styles'\nimport { FormControl, FormLabel, Slider } from '@mui/material'\n\nconst useStyles = makeStyles(theme => ({\n root: {\n width: '100%',\n },\n slider: {\n width: 'auto',\n margin: theme.spacing(3, 3),\n },\n}))\n\nconst marks = [10, 50, 100, 150, 200].map(m => ({ value: m, label: `${m}km` }))\n\nconst valuetext = value => {\n return `${value} km`\n}\n\nconst SurveyRadius = ({ label, value = 75, onChange = () => undefined }) => {\n const classes = useStyles()\n\n return (\n \n {label}\n onChange(value)}\n />\n \n )\n}\n\nexport default SurveyRadius\n","import React from 'react'\n\nimport { makeStyles } from '@mui/styles'\n\nimport { FormControl, FormLabel, FormControlLabel, Radio, RadioGroup } from '@mui/material'\n\nconst useStyles = makeStyles(theme => ({\n radioGroupRow: {\n flexDirection: 'row',\n [theme.breakpoints.down('md')]: {\n flexDirection: 'column',\n },\n },\n}))\n\nconst SurveyRadioGroup = ({\n name,\n value,\n label,\n // help,\n options,\n valueField = null,\n labelField = null,\n deselect = false,\n row = false,\n onChange = () => undefined,\n}) => {\n const classes = useStyles()\n\n const handleRadioChange = event => {\n const nv = deselect && event.target.value === value ? null : event.target.value\n onChange(nv)\n }\n\n return (\n \n {label}\n \n {options.map((o, i) => (\n }\n />\n ))}\n \n \n )\n}\n\nexport default SurveyRadioGroup\n","import React from 'react'\n\nimport pull from 'lodash/pull'\n\nimport { makeStyles, withStyles } from '@mui/styles'\n\nimport {\n FormControl,\n FormLabel,\n Button,\n Typography,\n} from '@mui/material'\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: 'flex',\n flexDirection: 'column',\n // '& * > *': {\n // margin: theme.spacing(2, 1),\n // }\n },\n group: {\n margin: theme.spacing(2, 0),\n },\n groupTitle: {\n marginBottom: theme.spacing(1),\n },\n icon: {\n marginRight: theme.spacing(2),\n },\n button: {\n marginBottom: theme.spacing(0.5),\n },\n}))\n\nconst CategoryButton = withStyles(() => ({\n root: {\n justifyContent: 'flex-start',\n },\n label: {\n fontSize: 16,\n textTransform: 'none',\n fontWeight: 400,\n },\n}))(Button)\n\n\nconst SurveyCategories = ({\n // name,\n question,\n label,\n metaCategoryMap = {},\n selected = [],\n onChange = () => undefined,\n}) => {\n const classes = useStyles()\n\n const isSelected = id => {\n if (!selected) return false\n return selected.findIndex(i => i === id) > -1\n }\n\n const handleClick = id => {\n if (isSelected(id)) {\n onChange(pull(selected, id))\n } else {\n onChange([...selected, id])\n }\n }\n\n const CategoryGroup = ({ group }) => {\n return (\n
\n {group.title}\n {/*
*/}\n\n {group.categories\n .filter(c => c in metaCategoryMap)\n .map((c, i) => (\n handleClick(c)}\n >\n {metaCategoryMap[c].title}\n \n ))}\n
\n )\n }\n\n return (\n \n {label}\n\n {question.categoryGroups.map((group, i) => (\n \n ))}\n\n \n )\n}\n\nexport default SurveyCategories\n","import React from 'react'\n\nimport pull from 'lodash/pull'\n\nimport { makeStyles } from '@mui/styles'\nimport {\n // Typography,\n FormLabel,\n FormControl,\n FormControlLabel,\n Checkbox,\n} from '@mui/material'\n\nimport { resolveVariantText } from '@/stores/root/utils/survey-utils'\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: 'flex',\n flexDirection: 'column',\n },\n labelRoot: {\n alignItems: 'flex-start',\n marginBottom: theme.spacing(1),\n },\n label: {\n marginTop: theme.spacing(1.1),\n },\n title: {\n marginBottom: theme.spacing(3),\n },\n}))\n\nconst Interest = ({ id, label, checked, onChange }) => {\n const classes = useStyles()\n\n return (\n \n }\n label={label}\n />\n )\n}\n\nconst SurveyInterests = ({\n question,\n pathway,\n selected = [],\n onChange = () => undefined,\n}) => {\n const classes = useStyles()\n const questionText = resolveVariantText(question, 'question', pathway)\n\n const isSelected = (id) => {\n if (!selected) return false\n return selected.findIndex((i) => i === id) > -1\n }\n\n const handleChange = ({ target: { name, checked } }) => {\n if (!checked) {\n onChange(pull(selected, name))\n } else {\n onChange([...selected, name])\n }\n }\n\n return (\n \n {questionText}\n
\n\n {question.interests.map((interest) => (\n \n ))}\n
\n )\n}\n\nexport default SurveyInterests\n","import React, { useEffect, useState, useCallback } from 'react'\n\n// import { toJS } from 'mobx'\nimport { observer } from 'mobx-react-lite'\nimport { useAnalytics } from 'use-analytics'\n\nimport { makeStyles } from '@mui/styles'\nimport { Typography } from '@mui/material'\n\nimport SurveyRadioGroup from './SurveyRadioGroup'\n\nimport { useRootStore } from '@/stores/root/store'\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: 'flex',\n flexDirection: 'column',\n },\n question: {\n margin: theme.spacing(3, 0),\n },\n}))\n\nconst SurveyScaleEval = observer(({ question }) => {\n const { track } = useAnalytics()\n const classes = useStyles()\n const store = useRootStore()\n\n const [scaleEval] = useState(store.survey.scaleEval.get(question.id))\n\n useEffect(() => {\n track('surveyScaleEvalStart', {\n category: 'Survey',\n label: question.id,\n })\n }, [question, track])\n\n const trackScaleEvalComplete = useCallback(() => {\n track('surveyScaleEvalComplete', {\n category: 'Survey',\n label: question.id,\n })\n }, [track, question.id])\n\n useEffect(() => {\n if (!scaleEval?.complete) return\n trackScaleEvalComplete()\n }, [scaleEval?.complete, trackScaleEvalComplete])\n\n const handleQuestionChange = (index, value) => {\n track('surveyScaleEvalChange', {\n category: 'Survey',\n label: `Question ${index}`,\n })\n\n scaleEval.setValue(index, +value)\n }\n\n if (!scaleEval) {\n return
Undefined scale eval.
\n }\n\n return (\n
\n {question.summary}\n\n {question.questions.map((q, i) => {\n return (\n
\n handleQuestionChange(i, v)}\n row\n />\n
\n )\n })}\n\n {false && (\n
\n [total: {scaleEval.evalScore.total}, score:{' '}\n {scaleEval.evalScore.score}, complete:{' '}\n {scaleEval.complete ? 'true' : 'false'}]\n
\n )}\n
\n )\n})\n\nexport default SurveyScaleEval\n","import React, { useEffect } from 'react'\n\nimport _ from 'lodash'\n// import { toJS } from 'mobx'\nimport { observer } from 'mobx-react-lite'\nimport { useAnalytics } from 'use-analytics'\n\nimport { makeStyles } from '@mui/styles'\nimport { Box, Typography, Divider } from '@mui/material'\n\nimport { useConfig } from '@/config'\nimport { useRootStore } from '@/stores/root/store'\nimport {\n resolveVariantText,\n resolveVariantStrings,\n} from '@/stores/root/utils/survey-utils'\n\nimport SurveyQuestion from './SurveyQuestion'\nimport SurveyButtons from './SurveyButtons'\nimport SurveyLocation from './SurveyLocation'\nimport SurveyRadius from './SurveyRadius'\nimport SurveyRadioGroup from './SurveyRadioGroup'\nimport SurveyCategories from './SurveyCategories'\nimport SurveyInterests from './SurveyInterests'\nimport SurveyScaleEval from './SurveyScaleEval'\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: 'flex',\n flexDirection: 'column',\n },\n question: {\n margin: theme.spacing(3, 0),\n },\n}))\n\nconst Question = observer(({ pathway, question }) => {\n const { track } = useAnalytics()\n const store = useRootStore()\n const { tenantConfig } = useConfig()\n\n const questionText = resolveVariantText(question, 'question', pathway)\n const descriptionText = resolveVariantText(question, 'description', pathway)\n\n // survey questions default to set(key, value) using question id\n\n const handleChange = (value) => {\n track('surveyQuestionChange', {\n category: 'Survey',\n label: question.id,\n })\n\n store.survey.set(question.id, value)\n }\n\n switch (question.type) {\n case 'buttons':\n return \n\n case 'location':\n return (\n \n )\n\n case 'radius':\n return (\n \n )\n\n case 'radio':\n return (\n \n )\n\n case 'categories':\n return (\n \n )\n\n case 'interests':\n return (\n \n )\n\n case 'scaleeval':\n return \n\n default:\n return null\n // return Question children...\n }\n})\n\nconst SurveyStep = ({ pathway, questions, stepConfig }) => {\n const { track } = useAnalytics()\n const classes = useStyles()\n\n const questionProps = stepConfig?.questions\n .map((q) => questions[q.id])\n .filter((q) => q)\n .map((q) => ({\n pathway,\n question: {\n ...q,\n strings: resolveVariantStrings(q.strings, pathway),\n },\n }))\n\n const stepTitle = resolveVariantText(stepConfig, 'title', pathway)\n const stepDescription = resolveVariantText(stepConfig, 'description', pathway)\n\n useEffect(() => {\n track(`surveyStepChange`, {\n category: 'Survey',\n label: stepTitle,\n })\n }, [stepConfig, stepTitle, track])\n\n return (\n \n \n {stepTitle}\n \n \n {stepDescription && (\n \n {stepDescription}\n \n )}\n\n {questionProps?.map((q, i) => (\n \n \n \n ))}\n\n {/*
\n        {JSON.stringify(stepConfig, null, 2)}\n      
*/}\n
\n )\n}\n\nexport default SurveyStep\n","import React, { useState, useEffect } from 'react'\n\nimport { useLocation, useRouteMatch, Redirect } from 'react-router-dom'\nimport { toJSDeep } from '@/stores/root/utils/mobx'\nimport { observer } from 'mobx-react-lite'\nimport keyBy from 'lodash/keyBy'\nimport { useAnalytics } from 'use-analytics'\n\nimport { makeStyles } from '@mui/styles'\nimport { Box, Card, Slide, Button, useMediaQuery } from '@mui/material'\n\nimport { config } from '@/config'\nimport { useRootStore } from '@/stores/root/store'\nimport SurveyStep from './SurveyStep'\nimport _ from 'lodash'\n\nconst { tenantConfig } = config\n// const variant = 'self'\n// const steps = tenantConfig.survey.pathways[variant].steps\nconst questions = keyBy(tenantConfig.survey.questions, 'id')\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n width: '100%',\n padding: theme.spacing(3),\n },\n slide: {\n minHeight: 400,\n },\n buttons: {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'flex-end',\n marginTop: theme.spacing(4),\n },\n}))\n\nconst useQueryParams = (location) => {\n try {\n const search = location.search.substring(1)\n if (!search) return {}\n\n return JSON.parse(\n '{\"' + search.replace(/&/g, '\",\"').replace(/=/g, '\":\"') + '\"}',\n (key, value) => {\n return key === '' ? value : decodeURIComponent(value)\n }\n )\n } catch {\n return {}\n }\n}\n\nconst SurveyButtonIcon = ({ icon }) => (\n \n)\n\nconst Survey = observer(({ steps }) => {\n const { track } = useAnalytics()\n const classes = useStyles()\n\n const store = useRootStore()\n const survey = store.survey\n\n const [nav, setNav] = useState({ prev: null, next: null })\n const [slideIn, setSlideIn] = useState(true)\n const [slideDirection, setSlideDirection] = useState('left')\n\n const isMobile = useMediaQuery((theme) => theme.breakpoints.down('sm'))\n\n const slideToStep = (step) => {\n const directions =\n step < survey.step ? ['left', 'right'] : ['right', 'left']\n\n setSlideDirection(directions[0])\n setSlideIn(false)\n\n document.getElementById('scroll-content').scrollTop = 0\n\n setTimeout(() => {\n survey.set('step', step)\n setSlideDirection(directions[1])\n setSlideIn(true)\n }, 500)\n }\n\n const handleNavigateStep = (step, label) => () => {\n track(`surveyStepClick`, {\n category: 'Survey',\n label: label,\n })\n\n if (typeof step === 'number') {\n slideToStep(step)\n return\n }\n\n if (typeof step === 'string' && step === 'finish') {\n survey.finish()\n return\n }\n }\n\n // const handleEvalClick = () => {\n // survey.dump()\n // }\n\n const handleResetClick = () => {\n track('surveyRestart', {\n category: 'Survey',\n label: 'Restart',\n })\n\n survey.init(survey.pathway)\n }\n\n // update nav buttons\n\n useEffect(() => {\n const prev =\n survey.prevStep !== null\n ? {\n label: 'Go Back',\n step: survey.prevStep,\n }\n : null\n\n const next =\n survey.nextStep !== null\n ? {\n label: 'Next',\n step: survey.nextStep,\n disabled: !survey.currentStepValid,\n }\n : {\n label: 'Finish',\n step: 'finish',\n disabled: false,\n }\n\n setNav({ prev, next })\n }, [survey.step, survey.prevStep, survey.nextStep, survey.currentStepValid])\n\n // entry actions\n\n useEffect(() => {\n const step = survey.currentStep\n if (!step) return\n\n const entryActions = step.entry?.actions\n if (!_.isArray(entryActions)) return\n\n entryActions.forEach((a) => survey[a]?.())\n }, [survey.step])\n\n const contents = (\n \n \n
\n \n
\n
\n \n }\n onClick={handleResetClick}\n sx={{ mr: 2 }}\n >\n Restart\n \n\n {/* */}\n\n {nav.prev && (\n }\n onClick={handleNavigateStep(nav.prev.step, nav.prev.label)}\n >\n {nav.prev.label}\n \n )}\n\n {nav.next && (\n }\n onClick={handleNavigateStep(nav.next.step, nav.next.label)}\n >\n {nav.next.label}\n \n )}\n
\n
\n )\n\n return isMobile ? (\n {contents}\n ) : (\n {contents}\n )\n})\n\nconst SurveyEntry = observer(() => {\n const store = useRootStore()\n const survey = store.survey\n\n const redirectRoute = survey.pathwayConfig?.result?.finishRedirect || '/404'\n const redirect = survey.finished && { to: redirectRoute }\n\n if (redirect) return \n\n return \n})\n\nexport default SurveyEntry\n","import React, { useState, useEffect } from 'react'\n\nimport { observer } from 'mobx-react-lite'\nimport clsx from 'clsx'\n\nimport { makeStyles } from '@mui/styles'\nimport { Box, Typography, Divider, Button } from '@mui/material'\n\nimport SimpleMarkdown from '@/ui/markdown/SimpleMarkdown'\nimport { TenantThemeProvider } from '@/ui/theme/TenantTheme'\n\nimport { useConfig } from '@/config'\nimport { useRootStore } from '@/stores/root/store'\n\nconst useStyles = makeStyles((theme) => ({\n title: {\n [theme.breakpoints.down('sm')]: {\n fontSize: 26,\n },\n },\n hints: {\n marginTop: theme.spacing(5),\n // padding: theme.spacing(1),\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n },\n hintLabel: {\n // marginRight: theme.spacing(2),\n fontSize: 16,\n },\n hintButton: {\n margin: theme.spacing(0, 1),\n },\n icon: {\n marginRight: theme.spacing(1),\n },\n}))\n\nconst Information = observer(() => {\n const classes = useStyles()\n\n const { tenantConfig: tc } = useConfig()\n const tabs = tc.ui.search.tabs\n\n const store = useRootStore()\n const { category, content } = store.search.getSelectedInformation()\n\n const rootRef = React.useRef()\n\n // const category = store.search.selectedInformationCategory\n\n const [hints, setHints] = useState(null)\n\n // scroll to top\n\n React.useEffect(() => {\n rootRef.current?.closest('.scrollbar-container')?.scrollTo(0, 0)\n }, [category?.id])\n\n // tab hints\n\n useEffect(() => {\n const thints = !category?.search\n ? null\n : tabs\n .map((tab, index) => ({ tab, index }))\n .filter((t) => t.tab.options?.tabHint)\n\n setHints(thints)\n }, [category?.search, tabs])\n\n const handleHintButtonClick = (tab) => {\n store.search.ui.setSelectedTab(tab)\n }\n\n const HintButtons = ({ hints }) => {\n return (\n
\n \n {/* */}\n Search for\n \n {hints.map((h, i) => (\n handleHintButtonClick(h.index)}\n >\n \n {h.tab.title}\n \n ))}\n \n in {category.id === 'default' ? 'all categories' : 'this category'}.\n \n
\n )\n }\n\n if (!category || !content) return null\n\n const { title = 'Unknown Category' } = category\n const { body = '' } = content\n\n return (\n \n \n \n {title}\n \n \n {body && (\n \n {body}\n \n )}\n {/*
*/}\n {hints && }\n
\n
\n )\n})\n\nexport default Information\n","import React, { useState, useEffect } from 'react'\n\nimport clsx from 'clsx'\n\nimport { styled } from '@mui/material/styles'\nimport { withStyles } from '@mui/styles'\nimport { InputAdornment, IconButton, OutlinedInput } from '@mui/material'\n\nimport CloseIcon from '@mui/icons-material/Close'\n\nconst styles = (theme) => ({})\n\nconst SearchInput = ({\n classes,\n value = '',\n onChange = () => undefined,\n showSearchIcon = false,\n ...inputProps\n}) => {\n const [tempValue, setTempValue] = useState('')\n\n useEffect(() => {\n setTempValue(value)\n }, [value])\n\n const handleClear = () => {\n setTempValue('')\n onChange('')\n }\n\n const handleKeyPress = (e) => {\n if (e.code === 'Enter') {\n onChange(tempValue)\n document.activeElement.blur()\n }\n }\n\n useEffect(() => {\n let isSearch = true\n if (isSearch) {\n onChange(tempValue)\n }\n return () => {\n isSearch = false\n }\n }, [tempValue])\n\n return (\n setTempValue(e.target.value)}\n onKeyPress={handleKeyPress}\n startAdornment={\n showSearchIcon && (\n \n \n \n )\n }\n endAdornment={\n tempValue.length > 0 && (\n \n \n \n \n \n )\n }\n />\n )\n}\n\nexport default withStyles(styles, { name: 'AMSSearchInput' })(SearchInput)\n","import React from 'react'\n\nimport {\n Select,\n MenuItem,\n} from '@mui/material'\n\nconst ParameterSelect = ({\n value = null,\n options = [],\n onChange = () => undefined,\n ...inputProps\n}) => {\n\n const ival = value || 'null'\n\n const opts = [\n { value: 'null', label: 'N/A' },\n ...options.map(o => ({ value: o, label: o })),\n ]\n\n const handleChange = event => {\n const val = event.target.value !== 'null' ? event.target.value : null\n onChange(val)\n }\n\n return (\n \n {opts.map((o, i) => (\n {o.label}\n ))}\n \n )\n}\n\nexport default ParameterSelect\n","import React from 'react'\n\nimport { useQuery } from 'react-query'\n\nimport { getGeographySelectOptions } from '@/api/legacy'\n\nimport { Select, MenuItem } from '@mui/material'\n\n// eslint-disable-next-line react/display-name\nconst GeographySelect = ({\n value = null,\n paramConfig = null,\n onChange = () => undefined,\n ...inputProps\n}) => {\n const { loading, data: options } = useQuery(\n paramConfig.queryKey,\n async () => await getGeographySelectOptions(paramConfig),\n { cacheTime: 'Infinity', refetchOnWindowFocus: false }\n )\n\n const selected =\n options && value && value.type === 'geography'\n ? options.findIndex((o) => o.id === value.id)\n : ''\n\n const handleChange = (event) => {\n const val = options[event.target.value]\n onChange(val)\n }\n console.log('geo')\n return (\n \n {options &&\n options.map((o, i) => (\n \n {o.label}\n \n ))}\n \n )\n}\n\nexport default GeographySelect\n","import React, { useState, useEffect } from 'react'\n\nimport { makeStyles } from '@mui/styles'\nimport { Slider } from '@mui/material'\n\nimport RCSlider from 'rc-slider'\n\nimport { usePlatform } from '@/ui/hooks/usePlatform'\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n margin: theme.spacing(0, 3),\n },\n rcroot: {\n margin: theme.spacing(3, 3),\n },\n}))\n\n// const rcmarks = [10, 50, 100, 150, 200].reduce((marks, m) => {\n// marks[m] = `${m}km`\n// return marks\n// }, {})\n\nconst valuetext = (value) => {\n return `${value} km`\n}\n\nconst RadiusSlider = ({\n value = 0,\n min = 10,\n max = 200,\n step = 5,\n defaultValue = 75,\n marks = [10, 50, 100, 150, 200],\n onChange = () => undefined,\n}) => {\n const platform = usePlatform()\n\n const sliderProps = { value, min, max, step, defaultValue, marks, onChange }\n\n if (platform.ieVersion) return \n\n return \n}\n\n// const muiMarks = [10, 50, 100, 150, 200].map(m => ({ value: m, label: `${m}km` }))\n\nconst MuiRadiusSlider = ({\n value = 0,\n onChange = () => undefined,\n marks,\n ...sliderProps\n}) => {\n const classes = useStyles()\n const [internalValue, setInternalValue] = useState(0)\n\n useEffect(() => {\n setInternalValue(value)\n }, [value])\n\n const handleChange = (event, value) => {\n setInternalValue(value)\n }\n\n const handleChangeCommitted = (event, value) => {\n onChange(value)\n }\n\n const muiMarks = marks?.map((m) => ({ value: m, label: `${m}km` }))\n\n return (\n
\n \n
\n )\n}\n\nconst RCRadiusSlider = ({\n value = 0,\n onChange = () => undefined,\n marks,\n ...sliderProps\n}) => {\n const classes = useStyles()\n const [internalValue, setInternalValue] = useState(0)\n\n useEffect(() => {\n setInternalValue(value)\n }, [value])\n\n const handleChange = (value) => {\n setInternalValue(value)\n }\n\n const handleChangeCommitted = (value) => {\n onChange(value)\n }\n\n const rcMarks = marks.reduce((marks, m) => {\n marks[m] = `${m}km`\n return marks\n }, {})\n\n return (\n
\n \n
\n )\n}\n\nexport default RadiusSlider\n","import React, { useState, useEffect } from 'react'\n\nimport { observer } from 'mobx-react-lite'\nimport { addDays } from 'date-fns'\n\nimport enLocale from 'date-fns/locale/en-AU'\nimport { Box, Button, Input, useTheme } from '@mui/material'\nimport {\n LocalizationProvider,\n DateRangePicker,\n} from '@mui/lab'\nimport AdapterDateFns from '@mui/lab/AdapterDateFns'\n\nconst DateRangeParam = observer(({ value, onChange = () => undefined }) => {\n const theme = useTheme()\n\n // const internalValue = value ? [value.start, value.end] : [null, null]\n const [internalValue, setInternalValue] = useState([null, null])\n\n const anytimeSelected = value?.delta === -1\n\n const minDate = new Date()\n const maxDate = addDays(new Date(), 90)\n\n useEffect(() => {\n setInternalValue([value?.start || null, value?.end || null])\n }, [value?.start, value?.end])\n\n const handleAccept = newValue => {\n const dr = newValue?.some(x => x)\n ? {\n delta: -2,\n start: newValue[0],\n end: newValue[1],\n }\n : {\n delta: -1,\n start: null,\n end: null,\n }\n\n onChange(dr)\n }\n\n const handleDateChange = newValue => {\n setInternalValue(newValue)\n }\n\n const handleAnytimeClick = () => {\n onChange({\n delta: -1,\n start: null,\n end: null,\n })\n }\n\n const renderInput = (startProps, endProps) =>\n \n \n \n \n \n\n return (\n
\n \n \n Anytime\n \n \n\n \n \n \n
\n )\n})\n\nexport default DateRangeParam\n","import React from 'react'\n\nimport { makeStyles } from '@mui/styles'\nimport { FormGroup, FormControlLabel, Switch } from '@mui/material'\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n padding: theme.spacing(1, 0),\n },\n}))\n\nexport const LabelSwitch = ({\n checked = false,\n label = '',\n onChange = () => undefined,\n}) => {\n const classes = useStyles()\n\n const handleChange = (event) => {\n onChange(event.target.checked)\n }\n\n return (\n \n \n }\n label={label}\n />\n \n )\n}\n\nexport default LabelSwitch\n","import React from 'react'\n\nimport _ from 'lodash'\nimport clsx from 'clsx'\n// import { toJS } from 'mobx'\nimport { observer } from 'mobx-react-lite'\nimport { useAnalytics } from 'use-analytics'\n\nimport { makeStyles, withStyles } from '@mui/styles'\nimport { Button } from '@mui/material'\n\nconst styles = theme => ({\n root: {\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing(0.5),\n },\n icon: {\n marginRight: theme.spacing(2),\n },\n // button: {\n // marginBottom: theme.spacing(0.5),\n // },\n clearButton: {\n // marginTop: theme.spacing(1),\n justifyContent: 'flex-start',\n },\n clearIcon: {\n marginRight: theme.spacing(0.5),\n },\n})\n\nconst CategoryButton = withStyles(\n () => ({\n root: {\n justifyContent: 'flex-start',\n textAlign: 'left',\n textTransform: 'none',\n fontWeight: 'normal',\n },\n }),\n { name: 'AMSCategoryButton' }\n)(Button)\n\nconst CategoryButtons = observer(\n ({\n classes,\n selectMode = 'single',\n categories = [],\n selected = selectMode === 'single' ? null : [],\n onChange = () => undefined,\n }) => {\n const { track } = useAnalytics()\n\n const onClear = () => {\n track('categoriesClearSelected', {\n category: 'Categories',\n label: 'Clear',\n })\n\n onChange(selectMode === 'single' ? null : [])\n }\n\n const handleSelectCategory = id => () => {\n track('categoriesCategoryClick', {\n category: 'Categories',\n label: id,\n })\n\n if (selectMode === 'single') {\n const sc = id === selected ? null : id\n onChange(sc)\n }\n\n if (selectMode === 'multiple') {\n const oldSel = selected || []\n const newSel = oldSel.includes(id) ? oldSel.filter(c => c !== id) : [...oldSel, id]\n\n onChange(newSel)\n }\n }\n\n const isSelected = id => {\n if (selectMode === 'single') {\n return id === selected\n }\n\n if (selectMode === 'multiple') {\n if (!selected) return false\n\n return selected.includes(id)\n }\n }\n\n const isClearEnabled = selectMode === 'single' ? !!selected : selected && selected.length > 0\n\n return (\n
\n {categories.map((c, i) => (\n \n \n {c.title}\n \n \n ))}\n\n {isClearEnabled && (\n \n )}\n
\n )\n }\n)\n\nexport default withStyles(styles, { name: 'AMSCategoryButtons' })(CategoryButtons)\n","import React from 'react'\n\nimport { makeStyles } from '@mui/styles'\nimport { Typography } from '@mui/material'\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n // width: 300,\n // width: '100%',\n // margin: theme.spacing(2, 2)\n },\n // margin: {\n // margin: theme.spacing(1, 3),\n // },\n label: {\n fontWeight: 300,\n },\n icon: {\n marginRight: theme.spacing(1),\n },\n}))\n\nexport const IconLabel = ({ iconClasses = '', label = '' }) => {\n const classes = useStyles()\n\n return (\n
\n \n {iconClasses && }\n {label}\n \n
\n )\n}\n\nexport default IconLabel\n","import React from 'react'\n\nimport {\n Select,\n MenuItem,\n} from '@mui/material'\n\n// eslint-disable-next-line react/display-name\nconst CategorySelect = ({\n paramConfig = null,\n selectMode = 'single',\n selected = null,\n categories = [],\n onChange = () => undefined,\n ...inputProps\n}) => {\n const handleChange = ({ target: { value }}) => {\n const nval = value !== 'null' ? value : null\n onChange(nval)\n }\n\n const options = [\n { value: 'null', label: 'All Categories' },\n ...categories.map(o => ({ value: o.id, label: o.title })),\n ]\n\n const ival = selected || 'null'\n\n if (selectMode !== 'single') return (\n
selectMode: {selectMode} not supported!!
\n )\n\n return (\n \n {options.map((o, i) => (\n {o.label}\n ))}\n \n )\n}\n\nexport default CategorySelect\n","import React, { useEffect, useState } from 'react'\n// import { useConfig } from 'config/config'\nimport { useRootStore } from '@/stores/root/store'\nimport { useQuery } from 'react-query'\nimport { getGeographyMembers, getOutletsByOrgId } from '@/api/legacy/cie-api'\nimport { observer } from 'mobx-react-lite'\nimport _ from 'lodash'\nimport { makeStyles, withStyles } from '@mui/styles'\nimport { Collapse, Fade, Button } from '@mui/material'\n\nimport clsx from 'clsx'\n\n// import { getGeographySelectOptions } from 'data/api/geography'\n\nimport { Select, MenuItem } from '@mui/material'\n\nconst style = {\n wrapper: {\n display: 'flex',\n },\n title: {\n marginBottom: '5px',\n },\n}\n\nconst CategoryButton = withStyles(\n () => ({\n root: {\n justifyContent: 'flex-start',\n textAlign: 'left',\n textTransform: 'none',\n fontWeight: 'normal',\n marginBottom: '4px',\n },\n }),\n { name: 'AMSCategoryButton' }\n)(Button)\n\n// eslint-disable-next-line react/display-name\nconst LocationsDisplay = observer(() => {\n const store = useRootStore()\n const location = store.search.params.location\n const qparam = _.pick(location, ['id', 'lat', 'lng'])\n\n const [hhs, setHHS] = useState(null)\n const [hhsOutlets, setHHSOutlets] = useState([])\n const [isCollapse, setIsCollapse] = useState(true)\n\n useEffect(() => {\n const dataRsp = async () => {\n const rsp = await getGeographyMembers(qparam)\n const hhsdata = rsp.filter((x) => x.dataset == 'HHS')\n setHHS(hhsdata[0])\n // console.log('hhsdata: ', hhsdata)\n if (hhsdata.length > 0 && hhsdata[0]?.member != undefined) {\n const outletData = await getOutletsByOrgId(\n hhsdata[0]?.member?.organisationId\n )\n setHHSOutlets(outletData.data)\n }\n }\n\n dataRsp()\n }, [location])\n\n const redirectToCalendar = (url) => (e) => {\n e.preventDefault()\n window.location.href = window.location.origin + `/outleteventcalendar${url}`\n }\n\n const handleClick = () => {\n setIsCollapse(!isCollapse)\n }\n\n const icon = isCollapse ? '-' : '+'\n\n return (\n
\n {hhs?.member != undefined && hhsOutlets.length > 0 && (\n <>\n
\n
\n {hhs && `Locations in ${hhs?.member?.preferredName}:`}\n
\n \n
\n\n \n {hhsOutlets.map((outlet, i) => (\n \n \n {outlet.Name}\n \n \n ))}\n \n \n )}\n
\n )\n})\n\nexport default LocationsDisplay\n","import React from 'react'\n\nimport { toJS } from 'mobx'\nimport { observer } from 'mobx-react-lite'\nimport { useAnalytics } from 'use-analytics'\n\nimport { makeStyles, withStyles } from '@mui/styles'\nimport { Grid } from '@mui/material'\n\nimport SearchInput from '@/ui/search/params/SearchInput'\nimport ParameterSelect from '@/ui/search/params/ParameterSelect'\nimport LocationInput from '@/ui/location/LocationInput'\nimport GeographySelect from '@/ui/search/params/GeographySelect'\nimport RadiusSlider from '@/ui/search/params/RadiusSlider'\nimport DateRangeParam from '@/ui/search/params/DateRangeParam'\nimport LabelSwitch from '@/ui/components/atoms/LabelSwitch'\nimport CategoryButtons from '@/ui/search/params/CategoryButtons'\nimport IconLabel from '@/ui/components/atoms/IconLabel'\n\nimport { useRootStore } from '@/stores/root/store'\nimport { config, useConfig } from '@/config'\n\nimport CategorySelect from './CategorySelect'\nimport LocationsDisplay from './LocationsDisplay'\n\n// const { tenantConfig } = config\n\nconst Parameter = observer((props) => {\n const { control, param, disableLabel = false } = props\n const { track } = useAnalytics()\n const { tenantConfig: tc } = useConfig()\n\n const store = useRootStore()\n const params = store.search.params\n const ui = store.search.ui\n\n const handleChange = (value) => {\n track('searchParamaterChange', {\n category: 'Search',\n label: param.id,\n })\n\n store.search.params.set(param.id, value)\n }\n\n const handleCategoriesChange = (selected) => {\n track('searchParamaterChange', {\n category: 'Search',\n label: 'selectedCategories',\n })\n\n params.setSelectedCategories(selected)\n }\n\n const handleShowAllCategories = (value) => {\n track('categoriesToggleAllCategories', {\n category: 'Search',\n label: value ? 'Show' : 'Hide',\n })\n\n store.search.setShowAllCategories(value)\n }\n\n const type =\n 'searchParamaterType' in param\n ? param.searchParamaterType\n : 'type' in param\n ? param.type\n : null\n\n const paramControl = () => {\n switch (type) {\n case 'query':\n return (\n \n )\n\n case 'location':\n return (\n handleChange(value)}\n // showButtonLabel={false}\n fullWidth\n defaultLocationButton\n // defaultL\n />\n )\n\n case 'geographySelect':\n return (\n \n )\n\n case 'radius':\n return (\n \n )\n\n case 'dateRange':\n return (\n \n )\n\n case 'categoryButtons':\n return (\n <>\n {store.search.params.categories.length > 0 && (\n \n )}\n\n \n \n )\n\n case 'categorySelect':\n return (\n \n )\n\n case 'select':\n return (\n \n )\n\n case 'outlets':\n return \n\n default:\n return (\n
\n {type} {JSON.stringify(param, null, 2)}\n
\n )\n }\n }\n\n const ctrl = paramControl()\n\n return (\n <>\n {disableLabel || (\n \n )}\n {ctrl}\n \n )\n})\n\nconst styles = (theme) => ({\n root: {},\n})\n\nconst SearchParameters = observer((props) => {\n const { tenantConfig } = useConfig()\n\n const {\n classes,\n containerProps: cprops = {},\n itemProps: iprops = {},\n disableLabels = false,\n controls = [],\n } = props\n // console.log('props: ', props)\n // console.log('tenantConfig: ', tenantConfig)\n const pc = tenantConfig.ui?.search?.parameters || {}\n\n const params = controls\n .map((c) => ({ control: c, param: pc[c.param] }))\n .filter((c) => !!c.param)\n\n if (params.length === 0) return null\n\n const { sx: csx = {}, ...otherCprops } = cprops\n\n const containerProps = {\n sx: { p: 3, ...csx },\n container: true,\n columns: 1,\n spacing: 3,\n alignItems: 'stretch',\n ...otherCprops,\n }\n\n const itemProps = {\n item: true,\n xs: 1,\n ...iprops,\n }\n\n const paramProps = {\n disableLabel: disableLabels,\n }\n\n return (\n \n {params.map((p, i) => (\n \n \n \n ))}\n \n )\n})\n\nexport default withStyles(styles, { name: 'AMSSearchParameters' })(\n SearchParameters\n)\n","import React, { useState, useEffect, useRef } from 'react'\n\nimport { observer } from 'mobx-react-lite'\nimport { useAnalytics } from 'use-analytics'\n\nimport { makeStyles, useTheme } from '@mui/styles'\nimport {\n Box,\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogContentText,\n DialogTitle,\n Typography,\n useMediaQuery,\n} from '@mui/material'\n\nimport LocationInput from '@/ui/location/LocationInput'\n\nimport { useConfig } from '@/config'\nimport { useRootStore } from '@/stores/root/store'\n\nimport { shortLabel } from '@/ui/utils/location-utils'\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n [theme.breakpoints.up('md')]: {\n minWidth: 500,\n },\n },\n}))\n\nconst LocationDialog = observer(({ open, onClose = () => undefined }) => {\n const classes = useStyles()\n const { track } = useAnalytics()\n const store = useRootStore()\n const theme = useTheme()\n const sm = useMediaQuery(theme.breakpoints.down('sm'))\n\n const [location, setLocation] = useState(null)\n\n const { tenantConfig: tc } = useConfig()\n const cfg = tc?.search?.location || {}\n\n const defaultLocation = cfg.defaultLocation\n const defaultLocationLabel = shortLabel(\n defaultLocation,\n cfg.shortLocationFields\n )\n\n useEffect(() => {\n setLocation(open ? store.search.params.location : null)\n }, [open])\n\n const handleLocationChange = (event, value) => {\n setLocation(value)\n\n const { type, code } = event\n if (type === 'keydown' && code === 'Enter') {\n saveAndClose(value, 'searchLocationEnter')\n }\n }\n\n const handleOk = () => saveAndClose(location, 'searchLocationButtonOk')\n\n const handleDefault = () =>\n saveAndClose(defaultLocation, 'searchLocationButtonDefault')\n\n const handleClose = (event, reason) => {\n if (reason === 'backdropClick') return\n onClose()\n }\n\n const saveAndClose = (value, trackEvent) => {\n track(trackEvent || 'searchLocationSaveClose', {\n category: 'Search',\n label: 'Ok',\n })\n\n store.search.params.setLocation(value)\n onClose()\n }\n\n return (\n \n {'Where are you?'}\n \n \n To search the directory, you need to provide a location.\n \n {defaultLocation && (\n \n If you do not wish to provide one, the default location (\n {defaultLocationLabel}) will be selected.\n \n )}\n \n \n \n \n \n \n Cancel\n \n\n {defaultLocation && (\n \n Use Default\n \n )}\n\n \n Ok\n \n \n \n )\n})\n\nexport default LocationDialog\n","import { Box, Typography, useMediaQuery } from '@mui/material'\nimport { styled } from '@mui/material/styles'\nimport { useConfig } from '@/config'\nimport { useSearchResults } from '@/api/search-query'\nimport { useStoreSearch } from '@/stores/root/store'\nimport { observer } from 'mobx-react-lite'\nimport React from 'react'\n// import { useSearchQuery } from '@/data/search-query/SearchQuery'\nimport { usePlatform } from '@/ui/hooks/usePlatform'\nimport { useLoadGoogleMaps } from '@/ui/maps/useLoadGoogleMaps'\n\n//import ResultsMapLeaflet from './ResultsMapLeaflet'\nconst ResultsMapLeaflet = React.lazy(() =>\n import('./ResultsMapLeaflet' /* webpackChunkName: \"results-map-leaflet\" */)\n)\n\nconst Status = styled('div')`\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n font-size: 0.86rem;\n`\n\nconst ResultsMap = observer(({ searchId, containerRef }) => {\n const search = useStoreSearch(searchId)\n const searchResults = useSearchResults(searchId)\n\n const { tenantConfig: tc } = useConfig()\n const mapConfig = tc.ui?.search?.map || {}\n\n const platform = usePlatform()\n const { isLoaded, error } = useLoadGoogleMaps()\n\n React.useEffect(() => {\n if (platform.isBot) console.log('Bot detected, disabling googlemaps')\n }, [platform.isBot])\n\n const handleSelect = (source, result) => {\n // setTimeout(() => store.search.setSelected(source, result), 100)\n }\n\n if (platform.isBot) return null\n\n const Loading = () => Loading Google Maps...\n\n if (!isLoaded && !error) return \n\n if (error)\n return (\n \n
Unable to load Google Maps
\n
Please try refreshing the page.
\n
\n )\n\n const mapProps = {\n containerRef,\n searchId,\n search,\n config: tc.ui?.search?.map || {},\n // results: search.mapResults,\n // results: query.results,\n results: searchResults?.results?.flat || [],\n\n ...search.defaultMapParams,\n selected: search.control.selectedResult,\n onSelect: handleSelect,\n }\n\n return (\n }>\n \n \n )\n})\n\nexport default ResultsMap\n","import React from 'react'\n\nimport { Loader, LoaderOptions } from '@googlemaps/js-api-loader'\nimport { useConfig } from '@/config'\nimport { usePlatform } from '@/ui/hooks/usePlatform'\n\nexport const useLoadGoogleMaps = (): {\n isLoaded: boolean\n isError: boolean\n} => {\n const { appConfig } = useConfig()\n const apiKey = appConfig.googleMapsApiKey as string\n\n const platform = usePlatform()\n const version = platform.ieVersion ? '3.45' : 'quarterly'\n\n const [isLoaded, setIsLoaded] = React.useState(false)\n const [isError, setIsError] = React.useState(false)\n\n const options: LoaderOptions = {\n apiKey,\n version,\n id: 'ams-gm-loader',\n retries: 2,\n }\n\n React.useEffect(() => {\n const loader = new Loader(options)\n loader.load().then(\n () => setIsLoaded(true),\n () => setIsError(true)\n )\n }, [])\n\n return { isLoaded, isError }\n}\n","import React, { useRef } from 'react'\n\nimport { observer } from 'mobx-react-lite'\nimport { useHistory } from 'react-router-dom'\nimport { useAnalytics } from 'use-analytics'\n\nimport { withStyles } from '@mui/styles'\nimport { Box, Tabs, Tab, Button, useMediaQuery } from '@mui/material'\nimport ReactToPrint, { useReactToPrint } from 'react-to-print'\n\nimport { useConfig } from '@/config'\nimport { useRootStore } from '@/stores/root/store'\nimport _ from 'lodash'\n\nconst styles = (theme) => ({\n root: {\n flex: '0 1 auto',\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'space-between',\n alignItems: 'center',\n borderBottom: '1px solid rgba(0, 0, 0, 0.1)',\n },\n tabsWrapper: {\n flex: '0 1 auto',\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n },\n hidden: {\n display: 'none !important',\n },\n toolbarButton: {\n margin: theme.spacing(0, 1),\n },\n tabs: {},\n tabLabel: {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n '& > i': {},\n },\n})\n\nconst DesktopSearchToolbar = observer((props) => {\n const { classes, showSearch, onClickSearch = () => undefined, tabs } = props\n\n const { tenantConfig: tc } = useConfig()\n const cfg = tc.ui?.search?.desktop || {}\n const print = tc.ui?.print || {}\n\n const { track } = useAnalytics()\n const history = useHistory()\n\n const store = useRootStore()\n const tab = store.search.ui.selectedTab\n\n const homeButton = tc.ui?.search?.desktop?.homeButton\n\n const searchButton = useMediaQuery((theme) =>\n theme.breakpoints.down(cfg.paramsDrawer?.breakpoint || 'tb')\n )\n\n const componentRef = useRef()\n\n const handleClickHome = () => {\n track('searchToolbarButtonClick', {\n category: 'Navigation',\n label: 'Home',\n })\n\n history.push('/')\n }\n\n const handleClickToggleSearch = () => {\n track('searchToolbarButtonClick', {\n category: 'Search',\n label: 'Toggle Search Params',\n })\n\n onClickSearch(!showSearch)\n }\n\n const handleTabChange = (event, value) => {\n const tabc = tabs[value]\n\n track('searchToolbarSelectTab', {\n category: 'Search',\n label: tabc.title,\n })\n\n store.search.ui.setSelectedTab(value)\n }\n\n const isTabAvailableToPrint = () => {\n const availableTabIds = new Set(['services', 'events', 'favourites'])\n const selectedTabId = tabs[tab]?.id\n\n return availableTabIds.has(selectedTabId)\n }\n\n const handlePrint = useReactToPrint({\n content: () => {\n const selectedTabPanel = document.getElementById(\n `desktop-search-tabpanel-${tab}`\n )\n const searchResults = selectedTabPanel.getElementsByClassName(\n 'search-results-print'\n )\n componentRef.current = searchResults[0]\n\n return componentRef.current\n },\n })\n\n return (\n \n \n {(searchButton || homeButton?.show) && (\n \n {searchButton && (\n \n {/* */}\n \n Search\n \n )}\n\n {homeButton?.show && (\n \n {/* */}\n \n Home\n \n )}\n \n )}\n\n \n {tabs.map((t, i) => (\n \n {/* */}\n \n {t.title}\n
\n }\n />\n ))}\n \n \n\n {print?.isShowPrintButton && isTabAvailableToPrint() && (\n \n )}\n \n )\n})\n\nexport default withStyles(styles, { name: 'AMSDesktopSearchToolbar' })(\n DesktopSearchToolbar\n)\n","import React from 'react'\n\nimport { observer } from 'mobx-react-lite'\nimport clsx from 'clsx'\n\nimport { makeStyles } from '@mui/styles'\nimport { Box, Container, Typography, Divider, Button } from '@mui/material'\n\nimport { useConfig } from '@/config'\nimport { useRootStore } from '@/stores/root/store'\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n flexGrow: 1,\n display: 'flex',\n },\n box: {\n width: '100%',\n display: 'flex',\n flexDirection: 'column',\n },\n title: {\n [theme.breakpoints.down('sm')]: {\n fontSize: 26,\n },\n },\n content: {\n flexGrow: 1,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n },\n text: {\n fontSize: 18,\n },\n icon: {\n marginRight: theme.spacing(1),\n },\n viewInfoButton: {\n marginTop: theme.spacing(3),\n },\n}))\n\nconst InfoOnly = observer(() => {\n const classes = useStyles()\n\n const store = useRootStore()\n const category = store.search.selectedInformationCategory\n\n const { tenantConfig: tc } = useConfig()\n const infoTab = tc.ui.search.tabs.findIndex((x) => x.id === 'information')\n\n const handleViewInfo = () => {\n if (infoTab < 0) return\n store.search.ui.setSelectedTab(infoTab)\n }\n\n return (\n \n \n \n {category.title}\n \n \n
\n\n
\n \n This is an information only category.\n \n\n {infoTab >= 0 && (\n
\n \n \n View Information\n \n
\n )}\n
\n
\n
\n )\n})\n\nexport default InfoOnly\n","import React, { useState, useEffect } from 'react'\nimport ReactDOM from 'react-dom'\nimport { makeStyles } from '@mui/styles'\nimport { useSearchResults } from '@/api/search-query'\nimport FullCalendar from '@fullcalendar/react'\nimport resourceTimelinePlugin from '@fullcalendar/resource-timeline'\nimport { styled } from '@mui/material/styles'\nimport Tooltip, { TooltipProps, tooltipClasses } from '@mui/material/Tooltip'\nimport Typography from '@mui/material/Typography'\nimport { Box } from '@mui/material'\nimport './Calendar.scss'\nimport moment from 'moment'\nimport { useConfig } from '@/config'\nimport { add } from 'lodash'\n\nconst useIconStyles = makeStyles(() => ({\n root: {},\n icon: {\n marginRight: 8,\n },\n distance: {\n display: 'flex',\n },\n openingHours: {\n display: 'flex',\n },\n}))\n\nconst HtmlTooltip = styled(({ className, ...props }) => (\n \n))(({ theme }) => ({\n [`& .${tooltipClasses.tooltip}`]: {\n backgroundColor: 'white',\n // color: 'rgba(126, 99, 171, 0.9)',\n color: '#616161',\n maxWidth: 400,\n fontSize: theme.typography.pxToRem(12),\n border: '1px solid rgba(126, 99, 171, 0.9)',\n },\n}))\n\nfunction generateEvents(startDate, endDate, event) {\n let datesObj = []\n let recurrencePattern = 7\n\n if (event.recurrencePattern > 7) recurrencePattern = event.recurrencePattern\n\n if (event.type === 'event') startDate.add(recurrencePattern * -1, 'd')\n\n while (startDate < endDate) {\n const newPatterns = event.operatingDaysArray\n .filter((p) => p.dayOfWeek === startDate.day())\n .map((np) => ({\n resourceId: event.id,\n start: startDate.format(moment.HTML5_FMT.DATE) + 'T' + np.startTime,\n end: startDate.format(moment.HTML5_FMT.DATE) + 'T' + np.endTime,\n color: np.isDefault ? 'transparent' : 'rgba(126, 99, 171, 0.4)',\n borderColor: event.type === 'service' ? '#d14905' : '#0086ff',\n isDefault: np.isDefault ? true : false,\n // display: 'background',\n }))\n\n datesObj = datesObj.concat(newPatterns)\n\n if (datesObj.length > 0 && startDate.day() == 6) {\n startDate.date(startDate.date() + (recurrencePattern - 7 + 1))\n } else {\n startDate.date(startDate.date() + 1)\n }\n }\n\n return datesObj\n}\n\nconst getMomentFromTimeString = (str, noSecond, isEnd) => {\n if (noSecond) {\n return moment(str).format('HH:mm')\n }\n if (isEnd) {\n if (moment(str).format('HH:mm:ss') === '00:00:00') {\n return moment(str).add(-1, 's').format('HH:mm:ss')\n }\n }\n return moment(str).format('HH:mm:ss')\n}\n\nconst compareDistance = (a, b) => {\n if (a.distance < b.distance) {\n return -1\n }\n\n if (a.distance > b.distance) {\n return 1\n }\n\n return 0\n}\n\nconst defaultOperatingDays = [\n {\n dayOfWeek: 1,\n dayOfWeekName: 'Monday',\n startTime: '09:00:00',\n endTime: '17:00:00',\n alwaysOpen: false,\n isDefault: true,\n },\n {\n dayOfWeek: 2,\n dayOfWeekName: 'Tuesday',\n startTime: '09:00:00',\n endTime: '17:00:00',\n alwaysOpen: false,\n isDefault: true,\n },\n {\n dayOfWeek: 3,\n dayOfWeekName: 'Wednesday',\n startTime: '09:00:00',\n endTime: '17:00:00',\n alwaysOpen: false,\n isDefault: true,\n },\n {\n dayOfWeek: 4,\n dayOfWeekName: 'Thursday',\n startTime: '09:00:00',\n endTime: '17:00:00',\n alwaysOpen: false,\n isDefault: true,\n },\n {\n dayOfWeek: 5,\n dayOfWeekName: 'Friday',\n startTime: '09:00:00',\n endTime: '17:00:00',\n alwaysOpen: false,\n isDefault: true,\n },\n]\n\nconst AllDayEventsOperatingDays = [\n {\n dayOfWeek: 1,\n dayOfWeekName: 'Monday',\n startTime: '00:00:00',\n endTime: '23:59:59',\n alwaysOpen: false,\n },\n {\n dayOfWeek: 2,\n dayOfWeekName: 'Tuesday',\n startTime: '00:00:00',\n endTime: '23:59:59',\n alwaysOpen: false,\n },\n {\n dayOfWeek: 3,\n dayOfWeekName: 'Wednesday',\n startTime: '00:00:00',\n endTime: '23:59:59',\n alwaysOpen: false,\n },\n {\n dayOfWeek: 4,\n dayOfWeekName: 'Thursday',\n startTime: '00:00:00',\n endTime: '23:59:59',\n alwaysOpen: false,\n },\n {\n dayOfWeek: 5,\n dayOfWeekName: 'Friday',\n startTime: '00:00:00',\n endTime: '23:59:59',\n alwaysOpen: false,\n },\n]\n\nconst DailyEventOpeningDays = (startAt, endAt) => {\n let openingHours = []\n let startMoment = moment(startAt)\n let endAtMomnet = moment(endAt)\n\n if (endAtMomnet.diff(startMoment, 'days') < 7) {\n while (startMoment < endAtMomnet) {\n openingHours.push({\n dayOfWeek: startMoment.day(),\n startTime: getMomentFromTimeString(startAt, false, false),\n endTime: getMomentFromTimeString(endAt, false, true),\n alwaysOpen: false,\n })\n startMoment.add(1, 'd')\n }\n return openingHours\n }\n\n for (var i = 0; i < 7; i++) {\n openingHours.push({\n dayOfWeek: i,\n // dayOfWeekName: 'Monday',\n startTime: getMomentFromTimeString(startAt, false, false),\n endTime: getMomentFromTimeString(endAt, false, true),\n alwaysOpen: false,\n })\n }\n return openingHours\n}\n\nfunction Calendar() {\n const classes = useIconStyles()\n const servicesResultsStore = useSearchResults('services')\n const eventsResultsStore = useSearchResults('events')\n const [servicesResults, setServicesResults] = useState(null)\n const [eventsResults, setEventsResults] = useState(null)\n const [events, setEvents] = useState([])\n const [resources, setResources] = useState([])\n const { appConfig } = useConfig()\n const directoryURL = appConfig.directoryURL\n const diaryURL = appConfig.diaryURL\n const calendarKey = appConfig.fullCalendarProductKey\n\n useEffect(() => {\n if (servicesResultsStore?.results && eventsResultsStore?.results) {\n setServicesResults(servicesResultsStore?.results?.flat)\n setEventsResults(eventsResultsStore?.results?.flat)\n } else {\n setEvents([])\n setResources([])\n }\n }, [servicesResultsStore?.results, eventsResultsStore?.results])\n\n useEffect(() => {\n let renderEvents = []\n const eventsResultO = eventsResults?.map((e) => {\n switch (e.repeats) {\n //daily\n case 0:\n return {\n ...e,\n operatingDaysArray: DailyEventOpeningDays(e.startAt, e.endAt),\n recurrencePattern: 1,\n }\n //weekly\n case 1:\n if (e.repeatOnDay !== null) {\n return {\n ...e,\n operatingDaysArray: e.repeatOnDay.split(',').map((d) => ({\n dayOfWeek: parseInt(d),\n startTime: getMomentFromTimeString(e.startAt, false, false),\n endTime: getMomentFromTimeString(e.endAt, false, true),\n alwaysOpen: false,\n })),\n recurrencePattern: 7 * e.repeatEvery,\n }\n }\n\n return {\n ...e,\n operatingDaysArray: AllDayEventsOperatingDays,\n recurrencePattern: 7 * e.repeatEvery,\n }\n //monthly\n case 2:\n return {\n ...e,\n operatingDaysArray: [\n {\n dayOfWeek: moment(e.startAt).day(),\n dayOfWeekName: 'Thursday',\n startTime: getMomentFromTimeString(e.startAt, false, false),\n endTime: getMomentFromTimeString(e.endAt, false, true),\n alwaysOpen: false,\n },\n ],\n recurrencePattern: 30,\n }\n //weeklyOnDay\n case 3:\n if (e.repeatOnDay === null) {\n if (e.isAllDay) {\n return {\n ...e,\n operatingDaysArray: AllDayEventsOperatingDays,\n recurrencePattern: 7,\n }\n }\n\n return {\n ...e,\n operatingDaysArray: [\n {\n dayOfWeek: 1,\n dayOfWeekName: 'Monday',\n startTime: getMomentFromTimeString(e.startAt, false, false),\n endTime: getMomentFromTimeString(e.endAt, false, true),\n alwaysOpen: false,\n },\n {\n dayOfWeek: 2,\n dayOfWeekName: 'Tuesday',\n startTime: getMomentFromTimeString(e.startAt, false, false),\n endTime: getMomentFromTimeString(e.endAt, false, true),\n alwaysOpen: false,\n },\n {\n dayOfWeek: 3,\n dayOfWeekName: 'Wednesday',\n startTime: getMomentFromTimeString(e.startAt, false, false),\n endTime: getMomentFromTimeString(e.endAt, false, true),\n alwaysOpen: false,\n },\n {\n dayOfWeek: 4,\n dayOfWeekName: 'Thursday',\n startTime: getMomentFromTimeString(e.startAt, false, false),\n endTime: getMomentFromTimeString(e.endAt, false, true),\n alwaysOpen: false,\n },\n {\n dayOfWeek: 5,\n dayOfWeekName: 'Friday',\n startTime: getMomentFromTimeString(e.startAt, false, false),\n endTime: getMomentFromTimeString(e.endAt, false, true),\n alwaysOpen: false,\n },\n ],\n recurrencePattern: 7,\n }\n }\n\n return {\n ...e,\n recurrencePattern: 7,\n operatingDaysArray: e.repeatOnDay.split(',').map((d) => ({\n dayOfWeek: parseInt(d),\n // dayOfWeekName: 'Friday',\n startTime: getMomentFromTimeString(e.startAt, false, false),\n endTime: getMomentFromTimeString(e.endAt, false, true),\n alwaysOpen: false,\n })),\n }\n //one time event\n default:\n return {\n ...e,\n operatingDaysArray: [\n {\n dayOfWeek: moment(e.startAt).day(),\n // dayOfWeekName: moment(e.startAt).format('dddd'),\n startTime: getMomentFromTimeString(e.startAt, false, false),\n endTime: getMomentFromTimeString(e.endAt, false, true),\n alwaysOpen: false,\n },\n ],\n recurrencePattern: 60,\n }\n }\n })\n\n const combine = servicesResults?.concat(eventsResultO)\n combine?.map((e) => {\n if (e.operatingDaysArray.length === 0) {\n e.operatingDaysArray = defaultOperatingDays\n }\n\n renderEvents = renderEvents.concat(\n generateEvents(\n e.type === 'event' ? moment(e.startAt) : moment().add(-1, 'w'),\n //moment().add(-1, 'w'),\n e.type === 'event' &&\n moment(e.endAt).diff(moment(e.startAt), 'days') < 14\n ? moment(e.endAt)\n : moment()\n .add(2, 'w')\n .add(6 - moment().weekday(), 'd'),\n e\n )\n )\n })\n\n const calendarTitle = servicesResults\n ?.concat(\n eventsResults.filter(\n (r) => moment(r.startAt).diff(moment(), 'days') < 14\n )\n )\n .sort(compareDistance)\n .map((r) => ({\n title: r?.name,\n name: r?.name,\n description: r?.description,\n distanceLabel: r?.distanceLabel,\n id: r?.id,\n type: r?.type,\n dis: r?.distance,\n address: r?.address,\n category: r?.category,\n url: r?.url,\n lng: r?.lng,\n lat: r?.lat,\n time: r?.type === 'service' ? r.operatingDays : r.time,\n outletNickname:\n r?.type === 'service' ? r?.outletNickname : r?.locationTitle,\n }))\n\n setEvents(renderEvents)\n setResources(calendarTitle)\n }, [servicesResults, eventsResults])\n\n return (\n \n {\n let isDefaultOpeningHour = info.event.extendedProps.isDefault\n\n let eventTooltip = document.createElement('div')\n eventTooltip.className = 'event-tooltip'\n\n info.el\n .querySelector('.fc-event-main')\n .parentNode.insertBefore(\n eventTooltip,\n info.el.querySelector('.fc-event-main').nextSibling\n )\n\n let displayTime = `${getMomentFromTimeString(\n info.event.start,\n true,\n false\n )} - ${getMomentFromTimeString(info.event.end, true, true)}`\n\n if (isDefaultOpeningHour) displayTime = displayTime + ' (uncomfirmed)'\n // if (info.event.end === '23:59') {\n // displayTime = 'Appointment required'\n // }\n ReactDOM.render(\n \n {displayTime}\n \n }\n >\n
\n ,\n eventTooltip\n )\n }}\n resources={resources}\n resourceAreaWidth=\"35%\"\n resourceOrder=\"dis\"\n resourceLabelDidMount={function (info) {\n let resourceProps = info.resource._resource.extendedProps\n let addressDiv = document.createElement('div')\n let outletNicknameDiv = document.createElement('div')\n let servcieCatDiv = document.createElement('div')\n let toolTipDiv = document.createElement('span')\n let url = ''\n\n addressDiv.className = 'service-address'\n addressDiv.innerText = resourceProps?.address\n\n outletNicknameDiv.className = 'outlet-nickname'\n outletNicknameDiv.innerText = resourceProps?.outletNickname\n servcieCatDiv.className = 'service-category'\n servcieCatDiv.innerText = resourceProps?.category\n\n toolTipDiv.className = 'tooltip'\n toolTipDiv.innerText = ' more...'\n\n if (resourceProps.type === 'service')\n url = directoryURL + resourceProps?.url\n else url = diaryURL + resourceProps?.url\n\n info.el\n .querySelector('.fc-datagrid-cell-main')\n .appendChild(toolTipDiv)\n\n info.el\n .querySelector('.fc-datagrid-cell-main')\n .parentNode.insertBefore(\n addressDiv,\n info.el.querySelector('.fc-datagrid-cell-main').nextSibling\n )\n\n if (resourceProps?.category) {\n info.el\n .querySelector('.fc-datagrid-cell-main')\n .parentNode.insertBefore(\n servcieCatDiv,\n info.el.querySelector('.fc-datagrid-cell-main').previousSibling\n )\n }\n if (resourceProps?.outletNickname !== resourceProps?.name) {\n info.el\n .querySelector('.fc-datagrid-cell-main')\n .parentNode.insertBefore(\n outletNicknameDiv,\n info.el.querySelector('.fc-datagrid-cell-main').nextSibling\n )\n }\n\n info.el.querySelector('.fc-datagrid-cell-main').onclick =\n function () {\n window.open(url, '_blank')\n }\n\n info.el.querySelector('.service-address').onclick = function () {\n window.open(\n `https://www.google.com/maps/search/?api=1&query=${resourceProps?.lat},${resourceProps?.lng}`,\n '_blank' // <- This is what makes it open in a new window.\n )\n // window.location.href = `https://www.google.com/maps/search/?api=1&query=${resourceProps?.lat},${resourceProps?.lng}`\n }\n\n const renderIn = info.el.querySelector('.tooltip')\n\n const Tooltip = () => {\n return (\n \n \n {`${info.fieldValue}`}\n \n
\n
\n
\n \n
\n
{resourceProps?.distanceLabel}
\n
\n
\n
\n \n
\n
\n {resourceProps?.time === ''\n ? '9AM - 5PM Mon-Fri '\n : resourceProps?.time}\n
\n
\n
\n
{resourceProps?.description}
\n \n }\n >\n
more...
\n \n )\n }\n\n ReactDOM.render(, renderIn)\n }}\n />\n
\n )\n}\n\nexport default Calendar\n","import React, { useEffect, useState } from 'react'\nimport _ from 'lodash'\n\nimport { withStyles } from '@mui/styles'\nimport { Typography } from '@mui/material'\nimport { grey, purple } from '@mui/material/colors'\nimport { observer } from 'mobx-react-lite'\n\nimport { useRootStore } from '@/stores/root/store'\nimport { getGeographyMembers, getOutletsByOrgId } from '@/api/legacy/cie-api'\nimport { ScrollMenu, VisibilityContext } from 'react-horizontal-scrolling-menu'\nimport '@/tenants/shared/styles/scrolling-menu.scss'\n\nconst styles = (theme) => ({\n root: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'flex-start',\n [theme.breakpoints.down('sm')]: {\n flexDirection: 'column',\n },\n overflowX: 'auto',\n },\n title: {\n // fontSize: 13,\n padding: theme.spacing(1, 0),\n color: grey[600],\n fontSize: '0.92rem',\n fontWeight: 'light',\n },\n scrollMenu: {\n display: 'flex',\n flexWrap: 'wrap',\n maxWidth: '1050px',\n // overflow: 'auto',\n // whitespace: 'nowrap',\n },\n item: {\n display: 'flex',\n // textalign: 'center',\n fontSize: 11,\n padding: '8px',\n minWidth: '100px',\n color: grey[600],\n maxHeight: '100px',\n // textdecoration: 'none',\n // maxheight: '50px',\n // minwidth: '200px',\n },\n})\n\nconst copy = `\nWe acknowledge the traditional owners of the land and pay respects to the elders past, present and future.\n`\nconst HHSOutlets = observer(({ classes }) => {\n const store = useRootStore()\n const location = store.search.params.location\n const qparam = _.pick(location, ['id', 'lat', 'lng'])\n\n const [hhs, setHHS] = useState(null)\n const [hhsOutlets, setHHSOutlets] = useState([])\n\n useEffect(() => {\n const dataRsp = async () => {\n const rsp = await getGeographyMembers(qparam)\n const hhsdata = rsp.filter((x) => x.dataset == 'HHS')\n setHHS(hhsdata[0])\n if (hhsdata.length > 0 && hhsdata[0]?.member != undefined) {\n const outletData = await getOutletsByOrgId(\n hhsdata[0]?.member?.organisationId\n )\n setHHSOutlets(outletData.data)\n }\n }\n\n dataRsp()\n }, [location])\n\n return (\n
\n {hhs?.member != undefined && hhsOutlets.length > 0 && (\n <>\n
\n {hhs && `Locations in ${hhs?.member?.preferredName}:`}\n
\n \n {hhsOutlets.map((outlet, i) => {\n return (\n \n {outlet.Name}\n \n )\n })}\n \n \n )}\n
\n )\n})\n\nexport default withStyles(styles, { name: 'AMSHHSOutlets' })(HHSOutlets)\n","import Information from './information/Information'\nimport SearchParameters from './params/SearchParameters'\nimport SearchResultsList from './results/SearchResultsList'\nimport {\n Container,\n Box,\n Portal,\n SwipeableDrawer,\n useMediaQuery,\n} from '@mui/material'\nimport { withStyles, useTheme } from '@mui/styles'\nimport clsx from 'clsx'\nimport { useConfig } from '@/config'\nimport { useRootStore } from '@/stores/root/store'\nimport { toJSDeep } from '@/stores/root/utils/mobx'\nimport { useAtom } from 'jotai'\nimport _ from 'lodash'\nimport { observer } from 'mobx-react-lite'\nimport React, { useState, useEffect } from 'react'\nimport PerfectScrollbar from 'react-perfect-scrollbar'\nimport { paramsPortalAtom } from '@/ui/app/app-params-portal'\nimport Acknowledgement from '@/ui/footer/Acknowledgement'\nimport Sponsors from '@/ui/footer/Sponsors'\nimport { usePlatform } from '@/ui/hooks/usePlatform'\nimport LocationDialog from '@/ui/location/LocationDialog'\nimport ResultsMap from '@/ui/maps/ResultsMap'\nimport DesktopSearchToolbar from '@/ui/search/DesktopSearchToolbar'\nimport InfoOnly from '@/ui/search/information/InfoOnly'\nimport Calendar from '@/ui/search/results/Calendar'\nimport { TenantThemeProvider } from '@/ui/theme/TenantTheme'\nimport { useAnalytics } from 'use-analytics'\nimport HHSOutlets from '@/ui/footer/HHSOutlets'\n\n// import { useRecoilValue } from 'recoil'\n// import { paramsPortalState } from '@/ui/state/search'\n\nconst paramatersWidth = 380\nconst resultsWidth = 450\n\nconst styles = (theme) => ({\n root: {\n width: '100%',\n height: '100%',\n maxHeight: '100%',\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden',\n },\n hidden: {\n display: 'none !important',\n },\n content: {\n flexGrow: 1,\n display: 'flex',\n flexDirection: 'row',\n overflow: 'hidden',\n },\n tabPanel: {\n flexGrow: 1,\n display: 'flex',\n flexDirection: 'row',\n overflow: 'hidden',\n },\n parameterDrawer: {\n minWidth: paramatersWidth,\n maxWidth: paramatersWidth,\n overflowX: 'hidden',\n },\n parameters: {\n width: paramatersWidth,\n borderRight: '1px solid rgba(0, 0, 0, 0.1)',\n },\n results: {\n width: resultsWidth,\n borderRight: '1px solid rgba(0, 0, 0, 0.1)',\n },\n informationOnly: {\n flex: '1 0 0',\n },\n map: {\n flexGrow: 1,\n display: 'flex',\n flexDirection: 'column',\n width: 'calc(100vw - 380px - 450px)',\n },\n mapContainer: {\n flexGrow: 1,\n },\n})\n\nconst TabPanel = ({ classes, index, value, children, ...otherProps }) => {\n const cn = clsx(classes.tabPanel, value !== index && classes.hidden)\n\n // if (value !== index) return null\n\n return (\n \n {children}\n \n )\n}\n\nconst ParametersScrollContainer = ({ classes, ...searchParamProps }) => {\n return (\n
\n \n \n \n
\n )\n}\n\nconst mapFooterComponents = {\n HHSOutlets,\n Sponsors,\n Acknowledgement,\n}\n\nconst mapFooterStyles = {\n root: {\n flex: '0 1 0',\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'stretch',\n alignItems: 'flex-start',\n },\n section: {},\n}\n\nconst MapFooter = withStyles(mapFooterStyles, { name: 'AMSMapFooter' })(\n ({ classes, sections = [] }) => {\n return (\n
\n {sections.map((s, key) => {\n const C = mapFooterComponents[s.component]\n return C ? (\n
\n \n
\n ) : null\n })}\n
\n )\n }\n)\n\nconst Results = observer(({ classes, config }) => {\n const store = useRootStore()\n const containerRef = React.useRef()\n\n const { tenantConfig: tc } = useConfig()\n const mapFooterProps = tc.ui?.search?.desktop?.mapFooter\n\n const infoCategory = store.search.selectedInformationCategory\n // console.log(config.options.search)\n if (infoCategory && !infoCategory?.search) return \n\n return (\n <>\n
\n \n \n \n \n \n
\n\n
\n \n \n
\n\n {mapFooterProps && (\n \n \n \n )}\n \n \n )\n})\nconst CalendarScheduler = () => {\n return \n}\n\nconst Info = ({ classes }) => {\n return (\n
\n \n \n \n \n \n
\n )\n}\n\nconst tabComponentsMap = {\n Information: Info,\n SearchResults: Results,\n Calendar: CalendarScheduler,\n}\n\nconst TabComponent = ({ classes, value, index, config }) => {\n const Component = tabComponentsMap[config.component]\n return (\n \n \n \n )\n}\n\nconst DesktopSearch = observer(({ classes }) => {\n const store = useRootStore()\n const { track } = useAnalytics()\n\n const { tenantConfig: tc } = useConfig()\n const scfg = tc.ui?.search || {}\n const dscfg = scfg?.desktop || {}\n const ui = store.search.ui\n\n const tabs = scfg.tabs || []\n const tab = ui.selectedTab\n\n const [showSearch, setShowSearch] = useState(false)\n const [showLocation, setShowLocation] = useState(false)\n\n const theme = useTheme()\n const isTablet = useMediaQuery(\n theme.breakpoints.down(dscfg.paramsDrawer?.breakpoint || 'tb')\n )\n\n const { isBot } = usePlatform()\n\n const initLocation = tc.search?.location?.initLocation\n const desktopParams = scfg.parameterGroups?.desktop\n const appBarParams = scfg.parameterGroups?.appBar\n\n // const paramsPortal = useRecoilValue(paramsPortalState)\n const [paramsPortal] = useAtom(paramsPortalAtom)\n\n // wait to show location dialog\n useEffect(() => {\n const show =\n !isBot &&\n initLocation === 'dialog' &&\n !store.search.ui.locationDialogShown &&\n store.search.params.location === null\n\n const timeout = setTimeout(() => {\n if (show) {\n track('searchLocationDialogOpen', {\n category: 'Search',\n label: 'Show',\n })\n }\n setShowLocation(show)\n }, 1000)\n\n return () => clearTimeout(timeout)\n }, [store.search.params.location, store.search.ui.locationDialogShown])\n\n const toggleShowSearchParams = (value) => {\n track('toggleShowSearchParams', {\n category: 'Search',\n label: value ? 'Show' : 'Hide',\n })\n\n setShowSearch(value)\n }\n\n const handleCloseLocationDialog = () => {\n track('searchLocationDialogClose', {\n category: 'Search',\n label: 'Close',\n })\n\n setShowLocation(false)\n store.search.ui.setLocationDialogShown(true)\n }\n\n return (\n
\n {initLocation === 'dialog' && (\n \n )}\n\n \n\n {appBarParams && paramsPortal && !isTablet && (\n \n \n \n )}\n\n
\n {!isTablet && !appBarParams && (\n <>\n \n \n )}\n {isTablet && (\n toggleShowSearchParams(true)}\n onClose={() => toggleShowSearchParams(false)}\n >\n
\n \n \n \n
\n \n )}\n {tabs.map((t, i) => (\n \n ))}\n
\n
\n )\n})\n\nexport default withStyles(styles, { name: 'AMSDesktopSearch' })(DesktopSearch)\n","import {\n BottomNavigation,\n BottomNavigationAction,\n Container,\n Drawer,\n Box,\n IconButton,\n Button,\n Fab,\n} from '@mui/material'\nimport { makeStyles } from '@mui/styles'\nimport clsx from 'clsx'\nimport { useConfig } from '@/config'\nimport { useRootStore } from '@/stores/root/store'\nimport { observer } from 'mobx-react-lite'\nimport React, { useState, useEffect } from 'react'\nimport PerfectScrollbar from 'react-perfect-scrollbar'\nimport { usePlatform } from '@/ui/hooks/usePlatform'\nimport LocationDialog from '@/ui/location/LocationDialog'\nimport ResultsMap from '@/ui/maps/ResultsMap'\nimport InfoOnly from '@/ui/search/information/InfoOnly'\nimport Information from '@/ui/search/information/Information'\nimport SearchParameters from '@/ui/search/params/SearchParameters'\nimport SearchResultsList from '@/ui/search/results/SearchResultsList'\nimport Calendar from '@/ui/search/results/Calendar'\nimport { TenantThemeProvider } from '@/ui/theme/TenantTheme'\nimport { useAnalytics } from 'use-analytics'\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n width: '100%',\n height: '100%',\n maxHeight: '100%',\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden',\n },\n hidden: {\n display: 'none !important',\n },\n tabPanel: {\n flex: '1 1 0',\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden',\n },\n information: {\n flex: '1 1 0',\n overflow: 'hidden',\n },\n results: {\n flex: '1 1 0',\n overflow: 'hidden',\n },\n map: {\n flex: '1 1 0',\n },\n bottomToolbar: {\n padding: theme.spacing(1, 1),\n flex: '0 1 auto',\n borderTop: '1px solid rgba(0, 0, 0, 0.1)',\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n zIndex: 100,\n },\n bottomNavigation: {\n flex: '0 1 auto',\n borderTop: '1px solid rgba(0, 0, 0, 0.1)',\n },\n paramaterDrawer: {\n maxHeight: 'calc(100vh - 70px)',\n // display: 'flex',\n // flexDirection: 'column',\n },\n parameters: {},\n searchFab: {\n position: 'absolute',\n bottom: 148,\n right: theme.spacing(2),\n fontSize: 16,\n },\n modeFab: {\n position: 'absolute',\n bottom: 128,\n right: theme.spacing(1),\n fontSize: 20,\n },\n modeIcon: {\n marginTop: 3,\n },\n bottomIcon: {\n fontSize: 20,\n padding: 1,\n },\n toolbarButton: {\n fontSize: 14,\n [theme.breakpoints.up('sm')]: {\n fontSize: 16,\n },\n },\n buttonIcon: {\n fontSize: 14,\n padding: 1,\n marginRight: theme.spacing(1),\n },\n fab: {\n position: 'absolute',\n bottom: theme.spacing(10),\n right: theme.spacing(2),\n },\n}))\n\nconst TabPanel = ({ index, value, children, ...otherProps }) => {\n const classes = useStyles()\n const cn = clsx(classes.tabPanel, value !== index && classes.hidden)\n\n return (\n \n {children}\n \n )\n}\n\nconst SearchResultsPanel = observer(({ viewMode = 0, config }) => {\n const classes = useStyles()\n const store = useRootStore()\n\n const infoCategory = store.search.selectedInformationCategory\n // if (infoCategory && !infoCategory?.search) return \n\n return (\n <>\n \n \n \n \n \n \n \n\n \n \n \n \n )\n})\n\nconst CalendarScheduler = () => {\n return \n}\n\nconst InformationPanel = () => {\n const classes = useStyles()\n\n return (\n
\n \n \n \n \n \n \n \n
\n )\n}\n\nconst tabComponentsMap = {\n Information: InformationPanel,\n SearchResults: SearchResultsPanel,\n Calendar: CalendarScheduler,\n}\n\nconst TabComponent = ({ value, index, viewMode, config }) => {\n const Component = tabComponentsMap[config.component]\n\n return (\n \n {/*
Panel: {config.title}
*/}\n \n
\n )\n}\n\nconst viewModes = [\n {\n label: 'Map',\n icon: 'fas fa-map-marker-alt',\n },\n {\n label: 'Results',\n icon: 'far fa-list',\n },\n]\n\nconst useDrawerStyles = makeStyles((theme) => ({\n root: {\n borderTopLeftRadius: theme.spacing(1),\n borderTopRightRadius: theme.spacing(1),\n },\n drawer: {\n maxHeight: window.innerHeight - 50,\n overflow: 'hidden',\n display: 'flex',\n flexDirection: 'column',\n },\n contents: {\n paddingTop: theme.spacing(2),\n paddingBottom: theme.spacing(4),\n },\n closeButton: {\n position: 'absolute',\n top: 6,\n right: 6,\n zIndex: 1210,\n backgroundColor: 'rgba(255, 255, 255, 0.3)',\n width: 30,\n height: 30,\n },\n}))\n\nconst OptionDrawer = ({\n id = 'none',\n anchor = 'bottom',\n open = false,\n onClose = () => undefined,\n // onCloseButtonClick = () => undefined,\n children,\n}) => {\n const classes = useDrawerStyles()\n\n const handleCloseButtonClick = () => {\n onClose(id)\n }\n\n return (\n \n \n \n \n\n
\n \n
{children}
\n \n
\n \n )\n}\n\nconst MobileSearch = observer(() => {\n const { track } = useAnalytics()\n const classes = useStyles()\n\n const store = useRootStore()\n const ui = store.search.ui\n\n const { tenantConfig: tc } = useConfig()\n const tabs = tc.ui?.search?.tabs\n\n const tab = ui.selectedTab\n const setTab = (value) => ui.setSelectedTab(value)\n\n const [viewMode, setViewMode] = React.useState(0)\n const [showLocation, setShowLocation] = useState(false)\n\n const [viewOptionsDrawer, setViewOptionsDrawer] = useState(null)\n\n const enableMap =\n store.search.params.isSearchCategorySelected && tabs[tab].map\n\n const parameterGroups = {\n search: tc.ui?.search?.parameterGroups?.mobileSearch,\n categories: tc.ui?.search?.parameterGroups?.mobileCategories,\n }\n\n const initLocation = tc.search?.location?.initLocation\n\n const { isBot } = usePlatform()\n\n useEffect(() => {\n const show =\n !isBot &&\n initLocation === 'dialog' &&\n !store.search.ui.locationDialogShown &&\n store.search.params.location === null\n\n const timeout = setTimeout(() => {\n if (show) {\n track('searchLocationDialogOpen', {\n category: 'Search',\n label: 'Show',\n })\n }\n setShowLocation(show)\n }, 1000)\n\n return () => clearTimeout(timeout)\n }, [store.search.params.location, store.search.ui.locationDialogShown])\n\n useEffect(() => {\n if (!viewOptionsDrawer) return\n\n track('searchOptionsDrawer', {\n category: 'Search',\n label: `Show ${viewOptionsDrawer}`,\n })\n }, [viewOptionsDrawer, track])\n\n const handleClickToggleSearch = (id, open) => (event) => {\n if (\n event &&\n event.type === 'keydown' &&\n (event.key === 'Tab' || event.key === 'Shift')\n )\n return\n\n track('searchToolbarButton', {\n category: 'Search',\n label: `${id}`,\n })\n\n setViewOptionsDrawer(open ? id : null)\n }\n\n const handleOptionsDrawerClose = (id) => () => {\n track('searchOptionsDrawer', {\n category: 'Search',\n label: `Show ${id}`,\n })\n\n setViewOptionsDrawer(null)\n }\n\n const handleCloseLocationDialog = () => {\n track('searchLocationDialogClose', {\n category: 'Search',\n label: 'Close',\n })\n\n setShowLocation(false)\n store.search.ui.setLocationDialogShown(true)\n }\n\n const handleTabChange = (event, value) => {\n const tabc = tabs[value]\n\n track('searchToolbarSelectTab', {\n category: 'Search',\n label: tabc.title,\n })\n\n setTab(value)\n }\n\n const toggleMapView = () => {\n track('searchToggleMapView', {\n category: 'Search',\n label: viewModes[viewMode].label,\n })\n\n setViewMode(viewMode ^ 1)\n }\n\n const pg = parameterGroups[viewOptionsDrawer]\n\n return (\n
\n \n\n {tabs.map((t, i) => (\n \n ))}\n\n \n \n \n\n {true && (\n
\n {parameterGroups.search && (\n \n \n Search\n \n )}\n\n {parameterGroups.categories && (\n \n \n Categories\n \n )}\n
\n )}\n\n {enableMap && (\n \n \n \n )}\n\n
\n \n {tabs.map((t, i) => (\n }\n />\n ))}\n \n
\n
\n )\n})\n\nexport default MobileSearch\n","import React, { useState, useEffect } from 'react'\n\nimport _ from 'lodash'\nimport { toJS } from 'mobx'\nimport { useQuery } from 'react-query'\nimport axios from 'axios'\nimport humps from 'lodash-humps'\n\nimport { config } from '@/config'\nimport { rootStore as rootStore } from '@/stores/root/store'\n\nconst { appConfig } = config\n\nimport { cieQueryHelpers as helpers } from './query-helpers'\n\nexport const queryClient = axios.create({\n baseURL: appConfig.apiURL,\n timeout: 10000,\n headers: { Authorization: `ApiKey ${appConfig.apiKey}` },\n // transformResponse: humps,\n transformResponse: [].concat(axios.defaults.transformResponse, humps),\n})\n\nexport const cieQueries = {\n states: {\n queryId: 'cie-geography-states',\n client: 'axios',\n request: () => ({\n method: 'get',\n url: `/system/states`,\n }),\n select: ({ data }) => data,\n },\n\n state: {\n queryId: 'cie-geography-state',\n alias: 'state',\n client: 'axios',\n paramKeys: ['state'],\n request: ({ state }) => ({\n method: 'get',\n url: `/system/states/name/${state}`,\n }),\n select: ({ data }) => data,\n },\n\n councils: {\n queryId: 'cie-geography-councils',\n client: 'axios',\n request: ({ state }) => ({\n method: 'get',\n url: `/system/councils/state/${state}`,\n }),\n select: ({ data }) =>\n data && data.map((d) => ({ ...d, longUrl: d.url?.match(/[^/]*?$/)[0] })),\n },\n\n council: {\n queryId: 'cie-geography-council',\n client: 'axios',\n request: ({ state, council }) => ({\n method: 'get',\n url: `/system/councils/name/${state}/${council}`,\n }),\n select: ({ data }) => ({ ...data, longUrl: data.url?.match(/[^/]*?$/)[0] }),\n },\n\n localities: {\n queryId: 'cie-geography-localities',\n client: 'axios',\n request: ({ state, council }) => ({\n method: 'get',\n url: `/system/localities/council/${state}/${council}`,\n }),\n select: ({ data }) => {\n return data?.data\n },\n },\n\n locality: {\n queryId: 'cie-geography-locality',\n client: 'axios',\n // client: 'testFail',\n request: ({ state, council, locality }) => ({\n method: 'get',\n url: `/system/localities/name/${state}/${council}/${locality}`,\n }),\n select: ({ data }) => data?.data,\n },\n\n categories: {\n queryId: 'ams-categories',\n client: 'local',\n request: ({ categories }) => {\n const cats = rootStore.tenant.categoriesFromParams2({\n category: categories,\n })\n return cats\n },\n },\n\n pathLinkItems: {\n queryId: 'ams-path-link-items',\n client: 'local',\n request: helpers.pathLinkItems,\n },\n}\n\nconst clients = {\n dummy: async (query, params) =>\n new Promise((accept, reject) => {\n setTimeout(() => accept({ result: 'bang!' }), 200)\n }),\n testFail: async (query, paarams) =>\n new Promise((accept, reject) => {\n setTimeout(() => reject({ error: 'Always fails!' }), 200)\n }),\n axios: async (query, params) => {\n const res = await queryClient(query.request(params))\n return res\n // return res.data?.data || res.data\n },\n local: async (query, params) => {\n return new Promise((accept, reject) => {\n const { view } = query\n const res = query.request(params, view)\n accept(res)\n })\n },\n}\n\nexport const paramQueryFn =\n (queryDef) =>\n async ({ queryKey }) => {\n const [queryId, params] = queryKey\n\n const client = clients[queryDef.client]\n if (!client) throw `Invalid client ${queryDef.client}`\n\n const res = await client(queryDef, params)\n // console.log({res})\n return res\n }\n\nexport const getCieQueryDef = (queryConfig = {}, params, view) => {\n const name = _.isString(queryConfig) ? queryConfig : queryConfig['query']\n const queryDef = cieQueries[name] || {}\n const { queryId } = queryDef || {}\n\n if (!queryDef || !queryId)\n throw {\n message: `Invalid queryDef`,\n items: { cieQueries, queryConfig, name, queryDef, queryId },\n }\n\n const { select } = queryDef || {}\n\n const queryFnArgs = { ...queryDef, view }\n\n return {\n query: queryConfig,\n queryKey: [queryId, params],\n queryFn: paramQueryFn(queryFnArgs),\n select,\n // view,\n }\n}\n","// import { buildPathGenerator } from '@/ui/query/route-query'\n\nexport const cieQueryHelpers = {\n // pathLinkItems: (params, view) => {\n // console.log({ view })\n // const { config, routeConfig, state } = view || {}\n // const { items: itemConfig } = config || {}\n // const { itemQuery, sourceQuery, path, add } = itemConfig || {}\n // const { depsMap } = state || {}\n // if (!depsMap) {\n // console.warn(`Waiting on deps`, { depsMap, state })\n // return\n // }\n // const pathConfig = routeConfig?.paths[itemConfig?.path]\n // const linkItems = depsMap?.[sourceQuery]\n // const pathGen = buildPathGenerator({ path, itemQuery, pathConfig })\n // const itemMapper = itemMappers[itemQuery] || itemMappers.default\n // if (!linkItems) {\n // console.warn(`Invalid link items`, { depsMap, linkItems, state })\n // return\n // }\n // const items = linkItems\n // .map(pathGen)\n // .map(itemMapper)\n // .map(item => ({ ...item, ...add }))\n // return items\n // },\n}\n\nconst itemMappers = {\n default: () => ({\n name: 'Bad Item Mapper!',\n to: '#',\n }),\n state: ({ item: c, route: r }) => ({\n name: c?.name,\n to: r?.url,\n }),\n council: ({ item: c, route: r }) => ({\n name: c?.displayNameCouncil,\n to: r?.url,\n }),\n locality: ({ item: c, route: r }) => ({\n name: c?.locationName,\n to: r?.url,\n }),\n}\n","import { getCieQueryDef } from '@/api/legacy/cie-queries'\n\nimport _ from 'lodash'\n\nconst queryConfigs = {\n locality: {\n query: 'locality',\n cacheFromStore: true,\n },\n categories: {\n query: 'categories',\n },\n}\n\nconst getQueryDefs = ({ paramInfo }) => {\n // console.log('getQueryDefs', { paramInfo })\n return _.map(paramInfo.bySource, (params, sk) => {\n const config = queryConfigs[sk]\n if (!config) throw `Invalid Query Config ${sk}`\n\n const mparams = _.mapKeys(params, (v, pk) => config?.paramMap?.[pk] || pk)\n\n return {\n _sourceKey: sk,\n _queryConfig: config,\n ...getCieQueryDef(config, mparams, null),\n }\n })\n}\n\nconst getQueries = ({ queryDefs, queryClient }) =>\n queryDefs.map(\n ({ queryKey, queryFn, select = (data) => data, ...options }) =>\n async () => {\n const res = await queryClient.fetchQuery(queryKey, queryFn, {\n ..._.omit(options, ['_sourceKey', '_queryConfig']),\n staleTime: 'Infinity',\n cacheTime: 'Infinity',\n })\n\n return select(res)\n }\n )\n\nexport const cacheQueryResults = ({\n storeParamInfo,\n params,\n source,\n queryClient,\n}) => {\n try {\n // console.log('cacheQueryResults', { storeParamInfo, params, source })\n const queryDefs = getQueryDefs({ paramInfo: storeParamInfo }).filter(\n (qd) => qd._queryConfig.cacheFromStore\n )\n\n queryDefs.forEach(({ _sourceKey, queryKey }) => {\n if (!data) return\n const data = source[_sourceKey]\n\n console.log('caching query data', queryKey, data)\n queryClient.setQueryData(queryKey, data)\n })\n } catch (e) {\n console.warn(e)\n }\n}\n\nexport const querySearchUrlParams = async ({\n parameterMap,\n routerParamInfo,\n storeParamInfo,\n router,\n store,\n queryClient,\n}) => {\n // console.log('----------')\n // console.log('querySearchUrlParams', {\n // parameterMap,\n // routerParamInfo,\n // storeParamInfo,\n // router,\n // store,\n // })\n\n try {\n const queryDefs = getQueryDefs({ paramInfo: routerParamInfo })\n const fetches = getQueries({ queryDefs, queryClient })\n\n const queryResults = await Promise.all(fetches.map((f) => f()))\n const data = _.fromPairs(\n queryDefs.map((qd, qdi) => [qd._sourceKey, queryResults[qdi]])\n )\n\n // console.log({ data })\n return { isSuccess: true, data }\n } catch (error) {\n return { isSuccess: false, error }\n }\n}\n","import React, { useCallback, useEffect, useState } from 'react'\nimport _ from 'lodash'\n\n// import { inspect } from '@xstate/inspect'\n// inspect({\n// url: 'https://statecharts.io/inspect',\n// iframe: false,\n// })\n\nimport { toJS } from 'mobx'\nimport { toJSDeep } from '@/stores/root/utils/mobx'\nimport { observer } from 'mobx-react-lite'\n\nimport { useHistory, useRouteMatch, useLocation } from 'react-router-dom'\nimport { useInterpret, useActor } from '@xstate/react'\nimport { useQueryClient } from 'react-query'\n\nimport { searchRouteMachine } from '@/stores/route/search-route-machine'\nimport {\n cacheQueryResults,\n querySearchUrlParams,\n} from '@/stores/route/parse-url-query'\nimport { getRouterInfo, fromQueryString } from '@/stores/route/path-utils'\nimport { getUrlHash } from '@/stores/root/utils/hash'\n\nimport { useConfig } from '@/config'\nimport { useRootStore } from '@/stores/root/store'\nimport { useRouteStore } from '@/stores'\nimport { debugStore, useDebugStore } from '@/stores'\n\nimport { styled } from '@mui/material/styles'\nimport { Box } from '@mui/material'\nimport { Mono, MonoFa, Json } from '@/ui/debug/debug-helper/Mono'\n\nimport { DebugStore } from '@/stores'\n\nconst Links = styled(Box)`\n display: flex;\n flex-direction: row;\n gap: 12px;\n`\n\nconst contextKeys = ['current', 'router', 'store', 'redirect']\nconst dataKeys = [\n 'browserUrl',\n 'path',\n 'url',\n 'params',\n 'query',\n 'queryParams',\n 'hash',\n]\n\nconst getUrlInfo = ({ context }) => {\n return contextKeys.map((ck) =>\n _.fromPairs(dataKeys.map((dk) => [dk, context[ck]?.[dk]]))\n )\n}\n\nconst useDebugLogging = ({ service, enabled = false }) => {\n const [debugData, setDebugData] = useState({})\n\n useEffect(() => {\n if (!enabled) return\n service.onTransition((state) => {\n const urlInfo = getUrlInfo(state)\n\n const dd = {\n ts: new Date().toISOString,\n urlInfo,\n }\n\n setDebugData(() => dd)\n })\n\n //return sub.unsubscribe()\n }, [service])\n\n return debugData\n}\n\nconst useConsoleLogging = ({ service, enabled = false }) => {\n useEffect(() => {\n if (!enabled) return\n if (!service) return\n\n service\n ?.onTransition((state) => {\n if (!enabled) return\n const ststr = state.toStrings().join(', ')\n console.log(`%c% ${ststr}`, 'color: #e74;')\n const { context } = state\n console.log({ context: toJSDeep(context) })\n })\n .onEvent(({ type, ...payload }) => {\n if (!enabled) return\n console.log(`%c @${type}`, 'color: #59c;')\n console.log({ payload: toJSDeep(payload) })\n })\n\n // const usc = service.subscribe(state => {\n // console.log(state)\n // })\n }, [service])\n}\n\nconst useRouterHash = () => {\n const match = useRouteMatch()\n const location = useLocation()\n\n const [routerState, setRouterState] = useState(null)\n\n const rinfo = getRouterInfo({ match, location })\n // console.log('rinfo', rinfo.url, rinfo.query, rinfo.hash)\n\n useEffect(() => {\n setRouterState(rinfo)\n }, [rinfo.hash])\n\n return routerState\n}\n\nconst SearchRouteHandler = observer(() => {\n const { appConfig, tenantConfig: tc } = useConfig()\n const searchRouteHandlerConfig = tc?.routeOptions?.searchRouteHandler || {}\n\n const routerInfo = useRouterHash()\n const history = useHistory()\n\n const queryClient = useQueryClient()\n\n const store = useRootStore()\n const route = useRouteStore()\n const debug = useDebugStore()\n\n const config = route.config.searchRouteHandler || {}\n const defaultUrl = config.defaultRoute?.path || '/'\n\n const storeInfo = route.path.searchStoreInfo || {}\n\n const service = useInterpret(searchRouteMachine, {\n context: {\n defaultUrl,\n },\n actions: {\n resetLocation: () => {\n store.search.params.setLocation(null)\n store.search.ui.setLocationDialogShown(false)\n return send('LOCATION_RESET')\n },\n redirect: ({ redirect }) => {\n if (!redirect) return\n // console.log(`redirect -> ${redirect.browserUrl}`)\n history.push(redirect.browserUrl)\n },\n cacheQueryResultsFromStore: ({ store }) => {\n const { parameterMap, params, source } = store\n const storeParamInfo = route.path.getQueryParamInfo({\n parameterMap,\n params,\n })\n cacheQueryResults({ storeParamInfo, params, source, queryClient })\n },\n writeQueryResultToStore: (c, { data = {} }) =>\n store.search.params.updateFromRouterHandler(data),\n },\n services: {\n queryRouteParams: async ({ router, store }) => {\n const parameterMap = toJSDeep(route.config?.parameterMaps?.search)\n\n const [routerParamInfo, storeParamInfo] = [router, store].map(\n ({ params }) => route.path.getQueryParamInfo({ parameterMap, params })\n )\n\n return await querySearchUrlParams({\n parameterMap,\n routerParamInfo,\n storeParamInfo,\n router,\n store,\n queryClient,\n })\n },\n },\n })\n\n const [state, send] = useActor(service)\n\n const enableConsoleLogging = toJS(debug.routeMachine.consoleLogging)\n useConsoleLogging({ service, enabled: enableConsoleLogging })\n\n const debugData = useDebugLogging({\n service,\n enabled: appConfig.debugHelpers,\n })\n\n useEffect(() => {\n const { urlInfo } = debugData || {}\n debug.routeMachine.setUrlInfo(urlInfo)\n }, [debugData, debugData?.ts])\n\n useEffect(() => {\n window.$srm = { state, send, service }\n }, [service])\n\n useEffect(() => {\n const { hash, url, query } = routerInfo || {}\n // console.log('routerState.hash', hash, url, query)\n send({ type: 'SET_ROUTER_INFO', urlInfo: routerInfo })\n }, [routerInfo?.hash])\n\n useEffect(() => {\n // console.log('storeInfo.hash', { urlInfo: toJSDeep(storeInfo) })\n if (!storeInfo) return\n send({ type: 'SET_STORE_INFO', urlInfo: toJSDeep(storeInfo) })\n }, [storeInfo?.hash])\n\n // return <>\n return null\n})\n\nexport default SearchRouteHandler\n","import React from 'react'\n\nimport { observer } from 'mobx-react-lite'\nimport { useMediaQuery } from '@mui/material'\n\nimport { useConfig } from '@/config'\nimport { useRootStore } from '@/stores/root/store'\nimport { useResultsControl } from '@/ui/search/results/results-control'\n\nimport DesktopSearch from '@/ui/search/DesktopSearch'\nimport MobileSearch from '@/ui/search/MobileSearch'\n\nimport SearchRouteHandler from '@/ui/router/SearchRouteHandler'\n\nimport { useSearchParams } from 'react-router-dom'\n\nconst ResultsControlUpdater = observer(() => {\n const store = useRootStore()\n\n const { setSelectedResult } = useResultsControl({\n subscriber: { searchId: 'all', control: 'searchRoot' },\n })\n\n React.useEffect(() => {\n setSelectedResult()\n }, [store.search.searchCount])\n\n return null\n})\n\nconst Search = () => {\n const store = useRootStore()\n const { tenantConfig: tc } = useConfig()\n const isSearchRouteHandlerEnabled =\n tc?.routeOptions?.searchRouteHandler?.enabled\n const queryParameters = new URLSearchParams(window.location.search)\n const tab = queryParameters.get('tab')\n\n const isMobile = useMediaQuery((theme) => theme.breakpoints.down('ph'))\n const isDesktop = useMediaQuery((theme) => theme.breakpoints.up('ph'))\n\n //tab are able to be switch through url\n if (tab) {\n store.search.ui.setSelectedTab(Number(tab))\n }\n\n return (\n <>\n \n {isSearchRouteHandlerEnabled && }\n\n {isMobile && }\n {isDesktop && }\n \n )\n}\n\nexport default Search\n","import React, { useState } from 'react'\n\nimport * as Yup from 'yup'\nimport clone from 'lodash/clone'\nimport { useAnalytics } from 'use-analytics'\n\nimport { makeStyles, withStyles } from '@mui/styles'\nimport {\n Box,\n Button,\n TextField,\n Dialog,\n DialogTitle,\n DialogContent,\n DialogContentText,\n DialogActions,\n} from '@mui/material'\n\nimport { Formik, Form, Field } from 'formik'\n// import { TextField } from 'formik-material-ui'\n\nimport { submitSupportTicket } from '@/api/legacy'\n\nimport { useConfig } from '@/config'\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n width: '100%',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'flex-start',\n justifyContent: 'stretch',\n // backgroundColor: '#f0f',\n },\n control: {\n // backgroundColor: '#f0f',\n width: '100%',\n margin: theme.spacing(1, 0),\n '& label': {\n transform: 'translate(0, 0px) scale(1.0)',\n fontSize: 15,\n },\n },\n customInput: {\n width: '100%',\n },\n}))\n\nconst BootstrapTextField = withStyles((theme) => ({\n root: {\n // '& label': {\n // marginTop: theme.spacing(3),\n // },\n 'label + &': {\n marginTop: theme.spacing(3),\n },\n width: '100%',\n margin: theme.spacing(4, 0, 2),\n '& label': {\n transform: 'translate(5px, -2rem)',\n },\n '& p.Mui-error': {\n marginLeft: 4,\n },\n input: {\n borderRadius: 4,\n border: '1px solid #ced4da',\n padding: '10px 12px',\n },\n // '& input:valid + fieldset': {\n // borderColor: 'green',\n // borderWidth: 2,\n // },\n // '& input:invalid + fieldset': {\n // borderColor: 'red',\n // borderWidth: 2,\n // },\n // '& input:valid:focus + fieldset': {\n // borderLeftWidth: 6,\n // padding: '4px !important', // override inline-style\n // },\n },\n}))(TextField)\n\n// Formik\n\nconst SupportFormSchema = Yup.object().shape({\n name: Yup.string().max(100, 'Name is too long'),\n email: Yup.string()\n .email('Invalid email address')\n .max(100, 'Email is too long')\n .required('An email address is required'),\n subject: Yup.string().max(100, 'Subject is too long'),\n description: Yup.string()\n .max(1024, 'Description is too long')\n .required('A description is required'),\n})\n\nconst initialValues = {\n name: '',\n email: '',\n subject: '',\n description: '',\n}\n\n// Alert\n\nconst SubmitConfirmation = ({ open, onClose, title, message }) => {\n return (\n \n {title}\n \n \n {message}\n \n \n \n \n \n \n )\n}\n\nconst SupportForm = () => {\n const { track } = useAnalytics()\n const classes = useStyles()\n const { tenantConfig } = useConfig()\n\n const [showConfirmation, setShowConfirmation] = useState(false)\n const [confirmation, setConfirmation] = useState(null)\n\n const site =\n tenantConfig.options.freshdeskTitle ||\n tenantConfig.options.title ||\n 'Untitled AMS Site'\n\n const handleReset = () => {}\n\n const handleSubmit = async (values, { setSubmitting, resetForm }) => {\n track('supportFormSubmit', {\n category: 'Support',\n label: 'Submit',\n })\n\n setSubmitting(true)\n\n const ticket = {\n Site: site,\n FromName: values.name,\n FromEmail: values.email,\n Subject: values.subject,\n Message: values.description,\n }\n\n const res = await submitSupportTicket(ticket)\n\n setSubmitting(false)\n\n if (res) {\n setConfirmation({\n title: 'Support Ticket Submitted',\n message:\n 'Thank you for submitting a support ticket. You should recieve a confirmation via email and our support staff will get in touch.',\n })\n setShowConfirmation(true)\n resetForm(clone(initialValues))\n } else {\n track('supportFormSubmitError', {\n category: 'Support',\n label: 'Error',\n })\n\n setConfirmation({\n title: 'Error Submitting Ticket',\n message:\n 'An error occurred submitting a support ticket. Please try again later.',\n })\n setShowConfirmation(true)\n }\n }\n\n const CustomInputComponent = ({\n field, // { name, value, onChange, onBlur }\n form: { touched, errors }, // also values, setXXXX, handleXXXX, dirty, isValid, status, etc.\n ...props\n }) => (\n
\n \n {touched[field.name] && errors[field.name] && (\n
\n {errors[field.name]}\n
\n )}\n
\n )\n\n const handleCloseConfirmation = () => {\n setShowConfirmation(false)\n }\n\n return (\n <>\n \n\n \n {({ dirty, resetForm, isValid, submitForm, isSubmitting }) => (\n
\n \n \n \n\n \n \n resetForm(clone(initialValues))}\n >\n Reset\n \n \n Submit\n \n \n \n )}\n \n \n )\n}\n\nexport default SupportForm\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport SimpleMarkdown from '@/ui/markdown/SimpleMarkdown'\nimport SupportForm from '@/ui/pages/support/SupportForm'\n\nimport { useRootStore } from '@/stores/root/store'\n// import StaticMarkdown from '@/ui/components/molecules/StaticMarkdown'\nimport { Box } from '@mui/material'\nimport { useRouteStore } from '@/stores'\n\nconst Help = observer((props) => {\n const store = useRootStore()\n const route = useRouteStore()\n const content = store.search.getStaticContent(props.contentId)\n\n return (\n
\n \n {content.body}\n \n\n \n
\n )\n})\n\nexport default Help\n","import _ from 'lodash'\nimport Qs from 'qs'\n\nimport {\n getStates,\n getCouncilsForState,\n getLocalitiesForCouncil,\n getLocalityByParams,\n} from '../cie-api'\n\nexport const checkState = ({ state }) => {\n if (state !== 'Queensland') return { isValid: false }\n return { isValid: true }\n}\n\nexport const queries = {\n undefined: {\n queryKey: () => ['undefined'],\n\n lookup: async () => {\n // console.error('lookup is undefined')\n return new Promise((accept) => {\n setTimeout(() => accept({}), 10)\n })\n },\n },\n\n states: {\n queryKey: () => ['states'],\n\n lookup: async () => {\n var res = await getStates()\n if (!res.states) throw new Error()\n\n return {\n isValid: true,\n title: 'States',\n items: res.states\n // TODO: FIX!!\n .filter((s) => s.shortUrl === 'QLD')\n .map((s) => ({\n pathType: 'browseState',\n name: s.name,\n // params: { state },\n source: {\n state: s,\n },\n })),\n }\n },\n },\n\n councils: {\n queryKey: ({ state }) => ['councils', { state }],\n\n lookup: async ({ params }) => {\n const { state } = params\n\n const cs = checkState(params)\n if (!cs.isValid) return cs\n\n var res = await getCouncilsForState({ state })\n if (!res.councils) return { isValid: false }\n\n return {\n isValid: true,\n title: `Councils in ${res.state.name}`,\n items: res.councils\n .map((c) => {\n const [, stateUrl, councilUrl] = c.url.split('/')\n return { ...c, stateUrl, councilUrl }\n })\n .map((c) => ({\n pathType: 'browseCouncil',\n name: c.displayNameCouncil,\n // params: {\n // ...c.params,\n // },\n source: {\n council: c,\n },\n })),\n }\n },\n },\n\n localities: {\n queryKey: ({ state, council }) => ['localities', { state, council }],\n\n lookup: async ({ params }) => {\n const cs = checkState(params)\n if (!cs.isValid) return cs\n\n const { state, council } = params\n\n var res = await getLocalitiesForCouncil({ state, council })\n if (!res.localities) return { isValid: false }\n\n return {\n isValid: true,\n title: `Suburbs in ${res.council.displayNameCouncil}, ${res.state.name}`,\n items: res.localities.map((l) => ({\n pathType: 'browseLocality',\n name: `${l.locationName} ${l.postcode}`,\n source: {\n locality: l,\n },\n // params: {\n // state: l.stateUrl,\n // council: l.councilUrl,\n // locality: l.url,\n // },\n })),\n }\n },\n },\n\n // for locality\n categories: {\n queryKey: ({ state, council, locality }) => [\n 'categories',\n { state, council, locality },\n ],\n\n lookup: async ({ params, categories }) => {\n const cs = checkState(params)\n if (!cs.isValid) return cs\n\n const { state, council, locality } = params\n var res = await getLocalityByParams({ state, council, locality })\n if (!res) return { isValid: false }\n\n const localityParams = {\n state: res.stateUrl,\n council: res.councilUrl,\n locality: res.url,\n }\n\n const stateName = res.stateUrl.replaceAll('_', ' ')\n\n return {\n isValid: true,\n title: `Healthcare Services in ${res.name}, ${stateName}`,\n defaultItems: [\n {\n pathType: 'searchLocality',\n name: `All Health Services`,\n source: {\n locality: res,\n },\n // params: localityParams,\n },\n ],\n items: categories.map((c) => ({\n pathType: 'searchLocalityCategories',\n name: c.title,\n source: {\n locality: res,\n categories: c,\n },\n // source: c,\n // params: {\n // ...localityParams,\n // categories: c.shortUrl,\n // },\n })),\n }\n },\n },\n\n categoriesRoot: {\n queryKey: () => ['categoriesRoot'],\n\n lookup: async ({ categories }) => ({\n title: `Healthcare Service Categories`,\n items: categories.map((c) => ({\n pathType: 'browseCategory',\n name: c.title,\n source: { categories: c },\n // params: {\n // category: c.shortUrl,\n // },\n })),\n }),\n },\n\n categoryInfo: {\n queryKey: ({ categories }, { searchLocation }) => [\n 'categoryInfo',\n { categories, localityId: searchLocation?.id },\n ],\n\n lookup: async ({ categoriesRoute }) => {\n const { source } = categoriesRoute || {}\n const { categories: category } = source || {}\n\n // console.log('categoryInfo', { categoriesRoute, source, category })\n\n if (!category) return { isValid: false }\n\n return {\n title: category.titleWithSuffix,\n staticContent: {\n type: 'categoryDescription',\n id: category.id,\n },\n bottomItems: [\n {\n pathType: 'searchLocalityCategories',\n withLocation: true,\n templates: {\n default: `??`,\n withLocation: `Search {{ source.categories.titleWithSuffix }} in {{ source.location.summary }}`,\n },\n source,\n },\n {\n pathType: 'searchCategories',\n queryParams: { rloc: true },\n templates: {\n default: `Search {{ source.categories.titleWithSuffix }} in your location`,\n withLocation: `Search {{ source.categories.titleWithSuffix }} in Queensland`,\n },\n source,\n },\n ],\n }\n },\n },\n}\n\nexport const generatePath = ({ item, options }) => {\n // console.log('generatePath', { item, options })\n\n const { routePath } = options\n const { pathType: pathTypeName, source, params, deferRouteGeneration } = item\n\n const pathType = pathTypeName && routePath.pathType({ pathTypeName })\n\n if (!pathType) {\n console.warn('Invalid pathType', { pathTypeName, pathType })\n return null\n }\n\n const g =\n !deferRouteGeneration && routePath.generateUrl({ pathType, source, params })\n\n return {\n ...g,\n pathType,\n really: pathType,\n }\n}\n\nexport const browseQuery = (query, options) => async () => {\n if (!query) return null\n\n const qres = await query.lookup(options)\n\n const addPathItems = (items) => {\n if (!_.isArray(items)) return\n\n const r = _.sortBy(\n items.map((item) => {\n const { queryParams } = item\n const { url, params, ...gr } = generatePath({ item, options })\n // console.log({ url, params, ...gr })\n\n const qp = url && queryParams && Qs.stringify(queryParams)\n const to = _.compact([url, qp]).join('?')\n\n return { ...item, to, ...gr }\n }),\n ['name']\n )\n\n return r\n }\n\n const apkeys = ['defaultItems', 'items', 'bottomItems']\n\n const apadd = _.chain(qres)\n .pick(apkeys)\n .mapValues((it) => addPathItems(it))\n .value()\n\n const res = { ...qres, ...apadd }\n\n // console.log({ browseQuery: res })\n\n return res\n}\n","import React, { useState } from 'react'\n\nimport { toJS } from 'mobx'\nimport { toJSDeep } from '@/stores/root/utils/mobx'\nimport clsx from 'clsx'\nimport _ from 'lodash'\nimport { observer } from 'mobx-react-lite'\nimport { Liquid } from 'liquidjs'\n\nimport { useQuery } from 'react-query'\nimport { Link as ReactRouterLink, Redirect } from 'react-router-dom'\nimport { minutesToMilliseconds as m2ms } from 'date-fns'\n\nimport { withStyles } from '@mui/styles'\nimport {\n Box,\n Breadcrumbs,\n Button,\n Grid,\n Typography,\n CircularProgress,\n} from '@mui/material'\n\nimport { RouterLink } from '@/ui/nav/Link'\nimport SimpleMarkdown from '@/ui/markdown/SimpleMarkdown'\n\nimport { useMergeOptions } from '@/ui/hooks/useMergeOptions'\nimport { useRootStore } from '@/stores/root/store'\nimport { useRouteStore } from '@/stores'\nimport { queries, browseQuery } from '@/api/legacy/browse-queries'\n\nconst styles = (theme) => ({\n root: {\n display: 'flex',\n flexDirection: 'column',\n },\n progress: {\n margin: '40px auto',\n },\n actionContainer: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n padding: theme.spacing(2, 0),\n },\n actionButton: {\n margin: '20px auto',\n },\n items: {\n margin: theme.spacing(1, 0),\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'stretch',\n },\n regionLink: {\n textTransform: 'none',\n fontWeight: 'normal',\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n // margin: theme.spacing(1),\n padding: theme.spacing(1),\n },\n regionLinkText: {\n flex: '1 1 auto',\n },\n regionLinkIcon: {\n flex: '0 1 auto',\n maxWidth: 32,\n marginRight: 4,\n },\n})\n\nconst linkIcons = {\n browse: 'fas fa-chevron-right',\n search: 'fas fa-search',\n}\n\nconst ItemLink = (props) => {\n const { classes } = props\n\n // console.log({ props })\n\n const { item = {}, ...innerProps } = props || {}\n\n if (!item) {\n console.warn(`Invalid item`)\n return null\n }\n\n const { to, name, pathType } = item\n const { linkType } = pathType\n\n const icon = linkIcons[linkType]\n const buttonProps = { to, ...innerProps }\n\n return (\n \n {name}\n \n \n )\n}\n\nconst Title = ({ title }) => {\n return (\n \n {title}\n \n )\n}\n\nconst Items = ({ classes, items }) => {\n return (\n \n \n {items.map((item, i) => (\n \n {/* {item.name} */}\n \n \n ))}\n \n \n )\n}\n\n// specifically searchCategories and searchLocalityCategories links\nconst BottomItems = observer(({ classes, items }) => {\n const [liquid] = useState(new Liquid())\n\n const citems = _.compact(\n items.map((c) => {\n const { withLocation, source, templates: t } = c\n const { location } = source\n\n if (withLocation && !location) return null\n\n const nameTemplate = location ? t.withLocation : t.default\n const name = liquid.parseAndRenderSync(nameTemplate, { source })\n\n return { ...c, name }\n })\n )\n\n return (\n \n {citems.map((item, i) => (\n \n \n \n ))}\n \n )\n})\n\nconst useRouteBreadcrumbs = ({ match }) => {\n // console.log(match)\n if (!match) return null\n\n // const { params: p } = match\n\n const params = {\n ...match.params,\n regions: 'Regions',\n categories: 'Categories',\n }\n\n const [, bckeys] = match.path.split(/[/:]+/g)\n\n // console.log(pc)\n}\n\nconst BrowseBreadcrumbs = ({ classes }) => {\n const route = useRouteStore()\n const { match } = route\n\n const bcmbs = useRouteBreadcrumbs({ match })\n // const paths = _.dropRightWhile(['regions', state, council, locality], o => !o)\n\n // const crumbs = paths.map((v, i, arr) => {\n // return {\n // to: '/' + _.take(arr, i + 1).join('/'),\n // label: v === 'regions' ? 'Regions' : v.replaceAll('_', ' '),\n // }\n // })\n\n const crumbs = []\n\n const Crumb = ({ current, to, label }) => {\n if (current) return {label}\n else return {label}\n }\n\n // if (crumbs.length < 2) return null\n if (crumbs.length === 0) return null\n\n return (\n <>\n \n {crumbs.map((c, i) => (\n \n ))}\n \n
\n \n )\n}\n\nconst StaticContent = ({ classes, type, id }) => {\n const store = useRootStore()\n const md = store.tenant.getContent({ type, id })\n\n if (!md?.body) return null\n\n return {md.body}\n}\n\nconst defaultRegionsOptions = {\n regionPrefix: 'regions',\n searchPrefix: 'search',\n categoryPrefix: 'category',\n}\n\nconst Browse = observer(({ classes, options }) => {\n const opts = useMergeOptions(defaultRegionsOptions, options)\n\n const store = useRootStore()\n const route = useRouteStore()\n\n const params = route.match?.params\n\n const qid = route.path.pathConfig?.query\n const bquery = queries[qid]\n\n const qopts = {\n options: opts,\n params,\n categories: store.tenant.categories,\n searchLocation: store.search.params.location,\n paths: route.config.generatedPaths,\n categoriesRoute: route.routeConfigViews?.categoriesRoute,\n routePath: route.path,\n }\n\n const qkey = bquery?.queryKey(params, qopts)\n const qfn = browseQuery(bquery, qopts)\n\n const { isLoading, data, error, refetch } = useQuery(qkey, qfn, {\n enabled: !!bquery,\n refetchOnWindowFocus: false,\n cacheTime: m2ms(15),\n staleTime: m2ms(15),\n })\n\n // console.log({ error })\n\n const { isValid } = data || {}\n if (isValid === false || error) return \n\n return (\n \n {/* {JSON.stringify({ isValid })}\n {JSON.stringify({ error })} */}\n {/* TODO: Use route generator */}\n {/* */}\n\n {isLoading && (\n \n )}\n\n {!isLoading && error && (\n \n \n There was an error fetching results.\n \n \n Try Again\n \n \n )}\n\n {!isLoading && data && (\n <>\n {data.title && }\n {data.defaultItems && (\n <>\n <Items classes={classes} items={data.defaultItems} />\n <br />\n </>\n )}\n {data.staticContent && (\n <StaticContent classes={classes} {...data.staticContent} />\n )}\n {data.items && <Items classes={classes} items={data.items} />}\n {data.bottomItems && (\n <BottomItems classes={classes} items={data.bottomItems} />\n )}\n </>\n )}\n </Box>\n )\n})\n\nexport default withStyles(styles, { name: 'AMSBrowse' })(Browse)\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport { makeStyles } from '@mui/styles'\nimport { Container, Box, OutlinedInput } from '@mui/material'\n\nimport LocationInput from '../location/LocationInput'\n\nimport { useConfig } from '@/config'\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n paddingTop: theme.spacing(3),\n },\n testLink: {\n fontSize: 24,\n fontWeight: 600,\n },\n logo: {\n maxHeight: 40,\n },\n}))\n\nconst Scratch = observer(() => {\n // const store = useStore()\n const classes = useStyles()\n\n const { tenantConfig: tc } = useConfig()\n\n const srcStatic = '/tmp/vct-south-west.svg'\n const srcWebpack = tc?.assets?.sponsors?.vctSouthWest\n\n return (\n <Container className={classes.root}>\n {/* <Box sx={{ my: 2, width: 400 }}>\n <OutlinedInput value=\"Bang!\" />\n </Box> */}\n <Box sx={{ my: 2, width: 400 }}>\n <LocationInput />\n </Box>\n\n {/* <Box sx={{ p: 2, display: 'flex', flexDirection: 'column' }}>\n <img className={classes.logo} src={srcStatic} alt=\"\" />\n <img className={classes.logo} src={srcWebpack} alt=\"\" />\n </Box> */}\n </Container>\n )\n})\n\nexport default Scratch\n","import { useEffect } from 'react'\n\nconst useScript = url => {\n useEffect(() => {\n const script = document.createElement('script')\n\n script.src = url\n script.async = true\n\n document.body.appendChild(script)\n\n return () => {\n document.body.removeChild(script)\n }\n }, [url])\n}\n\nexport default useScript\n","import React from 'react'\nimport { Typography, Box, Divider } from '@mui/material'\nimport useScript from '@/ui/hooks/useScript'\n\nconst styles = {\n mainWrapper: {\n display: 'flex',\n flexDirection: 'column',\n },\n title: {\n margin: '0 auto 32px auto',\n },\n calendarWrapper: {},\n calendar: { height: '500px' },\n}\n\nconst HHSOutletEventCalendar = () => {\n const urlSplitArray = window.location.pathname.split('/')\n const outletId = urlSplitArray[urlSplitArray.length - 2]\n const outletName = urlSplitArray[urlSplitArray.length - 1].replaceAll(\n '_',\n ' '\n )\n\n useScript('https://www.mycommunitydiary.com.au/widgets/events/events.min.js')\n\n return (\n <div className=\"main-wrapper\" style={styles.mainWrapper}>\n <div className=\"title\" style={styles.title}>\n Event Calendar for <b>{outletName}</b>\n </div>\n <div className=\"calendar-wrapper\" style={styles.calendarWrapper}>\n <div\n id=\"eventsBasic\"\n widget-type=\"calendar\"\n logo-type=\"AMHC\"\n panel-height=\"500px\"\n data-location={outletId}\n style={styles.calendar}\n ></div>\n </div>\n </div>\n )\n}\nexport default HHSOutletEventCalendar\n","import React, { useState } from 'react'\n\nimport { observer } from 'mobx-react-lite'\nimport { withRouter, Redirect } from 'react-router-dom'\nimport { useAsync } from 'react-async'\n\nimport { makeStyles } from '@mui/styles'\nimport {\n Typography,\n Container,\n // Box,\n CircularProgress,\n} from '@mui/material'\n\nimport { useRootStore } from '@/stores/root/store'\nimport { getLocation2 as getLocation } from '@/api/legacy'\n\nconst useStyles = makeStyles((theme) => ({\n main: {\n marginTop: theme.spacing(4),\n marginBottom: theme.spacing(12),\n },\n progressContainer: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n },\n progress: {\n margin: '20px auto',\n },\n}))\n\nconst LocationRedirect = observer(\n withRouter(({ match, redirectTo }) => {\n const store = useRootStore()\n const classes = useStyles()\n\n const { lat, lng } = match.params\n\n const [redirect, setRedirect] = useState(null)\n\n const { isPending } = useAsync({\n promiseFn: getLocation,\n lat,\n lng,\n onResolve: (data) => {\n if (data) store.search.params.setLocation(data)\n setRedirect(redirectTo)\n },\n })\n\n if (redirect) return <Redirect to={redirect} />\n\n return (\n <Container maxWidth=\"md\" component=\"main\" className={classes.main}>\n {isPending && (\n <div className={classes.progressContainer}>\n <Typography variant=\"body2\">Resolving Location</Typography>\n <CircularProgress\n size={32}\n thickness={3.0}\n className={classes.progress}\n />\n </div>\n )}\n </Container>\n )\n })\n)\n\nexport default LocationRedirect\n","import React, { useState } from 'react'\n\nimport _ from 'lodash'\nimport { useRouteMatch, generatePath, Redirect } from 'react-router'\n\nconst SearchRedirect = ({ rewrites: rw }) => {\n const [rewrites] = useState(_.keyBy(rw, 'from'))\n const { path, params } = useRouteMatch()\n\n const topath = rewrites[path]?.to\n const to = topath ? generatePath(topath, params) : '/404'\n\n return <Redirect to={to} />\n}\n\nexport default SearchRedirect\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\n\nimport { Redirect } from 'react-router-dom'\nimport { useRootStore } from '@/stores/root/store'\n\n// This is a makeshift redirect to search that will set preset store values\n// from props defined in route config\n\nconst SearchStoreRedirect = observer(({ to, tab, selectedCategories }) => {\n const store = useRootStore()\n\n const [ready, setReady] = React.useState(false)\n\n React.useEffect(() => {\n store.search.params.setSelectedCategories(selectedCategories)\n store.search.ui.setSelectedTab(tab)\n setReady(true)\n }, [])\n\n if (!ready) return null\n\n return <Redirect to={to} />\n})\n\nexport default SearchStoreRedirect\n","import React from 'react'\nimport { observer } from 'mobx-react-lite'\nimport { useAnalytics } from 'use-analytics'\nimport { useRouteMatch, Redirect } from 'react-router-dom'\n\nimport { useRootStore } from '@/stores/root/store'\n// import { survey } from '@/tenants/amh/survey'\n\n// This is a makeshift redirect to search that will set preset store values\n// from props defined in route config\n\nconst SurveyRedirect = observer(() => {\n const store = useRootStore()\n\n const { track } = useAnalytics()\n const { params } = useRouteMatch()\n const { pathway } = params\n\n const [redirect, setRedirect] = React.useState(null)\n\n // console.log({ pathway, redirect })\n\n React.useEffect(() => {\n track('surveyStart', {\n category: 'Survey',\n label: pathway,\n })\n\n store.survey.init(pathway)\n setRedirect({ to: store.survey.pathwayConfig ? '/survey' : '/404' })\n }, [pathway, track])\n\n if (!redirect) return null\n\n return <Redirect {...redirect} />\n})\n\nexport default SurveyRedirect\n","import React, { useEffect } from 'react'\nimport {\n Switch,\n Route,\n Redirect,\n useLocation,\n useRouteMatch,\n} from 'react-router-dom'\n\nimport { useConfig } from '@/config'\nimport { useRouteStore } from '@/stores'\n\nimport { RouteStoreUpdater } from '@/stores'\n\nimport Headers from '@/ui/app/components/Headers'\n\nimport * as amsComponents from '@/ui/router/routerComponets'\n\nconst routeComponents = {\n ...amsComponents,\n Redirect,\n}\n\nconst resolveComponent = (name) => {\n return name in routeComponents ? routeComponents[name] : undefined\n}\n\nconst TenantRoutes = () => {\n const { tenantConfig } = useConfig()\n\n const routes = tenantConfig.routes.map((r, i) => {\n const RouteComponent = resolveComponent(r.component)\n const ContainerComponent = resolveComponent(r.container)\n\n // if (!RouteComponent) return <div>Invalid component: {r.component}</div>\n\n return (\n <Route key={i} exact={!!r.exact} path={r.path}>\n <RouteStoreUpdater />\n {!RouteComponent ? (\n <div>Invalid component: {r.component}</div>\n ) : ContainerComponent ? (\n <ContainerComponent {...r.containerProps}>\n <RouteComponent {...{ ...r.props }} />\n </ContainerComponent>\n ) : (\n <RouteComponent {...{ ...r.props }} />\n )}\n </Route>\n )\n })\n\n return (\n <>\n <Headers />\n <Switch>{routes}</Switch>\n </>\n )\n}\n\nexport default TenantRoutes\n","import React from 'react'\nimport { Helmet } from 'react-helmet'\n\nimport { useConfig } from '@/config'\n\nexport const FacebookPixelTag = () => {\n const { tenantConfig: tc } = useConfig()\n const { tagId } = tc.analytics?.facebook || {}\n\n if (!tagId) return null\n\n return (\n <Helmet>\n <script>{`\n !function(f,b,e,v,n,t,s)\n {if(f.fbq)return;n=f.fbq=function(){n.callMethod?\n n.callMethod.apply(n,arguments):n.queue.push(arguments)};\n if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';\n n.queue=[];t=b.createElement(e);t.async=!0;\n t.src=v;s=b.getElementsByTagName(e)[0];\n s.parentNode.insertBefore(t,s)}(window, document,'script',\n 'https://connect.facebook.net/en_US/fbevents.js');\n fbq('init', '${tagId}');\n fbq('track', 'PageView');\n `}</script>\n </Helmet>\n )\n}\n","import React from 'react'\nimport { Helmet } from 'react-helmet'\n\nimport { useConfig } from '@/config'\n\nexport const GoogleSiteVerification = () => {\n const { tenantConfig: tc } = useConfig()\n const { tagId } = tc.analytics?.googleSiteVerification || {}\n\n if (!tagId) return null\n\n return (\n <Helmet>\n <meta name=\"google-site-verification\" content={tagId} />\n </Helmet>\n )\n}\n","import React, { useEffect } from 'react'\n\nimport _ from 'lodash'\nimport { toJS, computed } from 'mobx'\nimport { observer } from 'mobx-react-lite'\n\nimport { styled } from '@mui/material/styles'\nimport { Box } from '@mui/material'\n\nimport { neatJson } from '@/ui/vendor/neatjson'\n\nimport { useDebugStore } from '@/stores'\nimport { useRouteStore } from '@/stores'\nimport { useRootStore } from '@/stores/root/store'\n\nconst useStores = () => {\n const store = useDebugStore()\n const rootStore = useRootStore()\n const routeStore = useRouteStore()\n\n return {\n store,\n rootStore,\n routeStore,\n }\n}\n\nconst Dump = styled('pre')`\n font-family: 'JetBrains Mono', monospace;\n`\n\nconst Json = observer(() => {\n const store = useDebugStore()\n\n const jsonObj = store.objectForHelper()\n if (!jsonObj) return null\n\n const rendered = neatJson(jsonObj)\n\n return (\n <Box>\n <Dump>{rendered}</Dump>\n </Box>\n )\n})\n\nexport default Json\n","import React, { useEffect } from 'react'\n\nimport _ from 'lodash'\nimport { observer } from 'mobx-react-lite'\n\nimport { styled } from '@mui/material/styles'\nimport { Box } from '@mui/material'\nimport { Link as RouterLink } from 'react-router-dom'\n\nimport { tokens } from './Mono'\nimport { useDebugStore } from '@/stores'\n\nconst Dump = styled('pre')`\n font-family: 'JetBrains Mono', monospace;\n`\n\nconst Link = styled(RouterLink)`\n color: ${tokens.color};\n`\n\nconst TestLinks = observer(() => {\n const store = useDebugStore()\n\n const { _helper } = store\n if (!_helper) return null\n\n const { links = [] } = _helper\n\n return (\n <Box>\n {links.map((to, key) => (\n <Box key={key}>\n <Link to={to}>{to}</Link>\n </Box>\n ))}\n </Box>\n )\n})\n\nexport default TestLinks\n","import React, { useEffect } from 'react'\n\nimport _ from 'lodash'\nimport { toJS, computed } from 'mobx'\nimport { observer } from 'mobx-react-lite'\n\nimport { styled } from '@mui/material/styles'\nimport { Box } from '@mui/material'\n\nimport { neatJson } from '@/ui/vendor/neatjson'\n\nimport { useDebugStore } from '@/stores'\nimport { Json } from './Mono'\n\nconst Dump = styled('pre')`\n font-family: 'JetBrains Mono', monospace;\n`\n\nconst RouteMachine = observer(() => {\n const store = useDebugStore()\n\n const { urlInfo } = store.routeMachine\n\n const urlJson = neatJson(urlInfo)\n\n // const { _helper } = store\n // if (!_helper) return null\n\n // const json = _.get(store, _helper.pathStr)\n // if (!json) return null\n\n // const rendered = neatJson(json)\n\n return (\n <Box>\n <Dump>{urlJson}</Dump>\n </Box>\n )\n})\n\nexport default RouteMachine\n","import React from 'react'\n\nimport _ from 'lodash'\nimport { toJS } from 'mobx'\nimport { observer } from 'mobx-react-lite'\n\nimport { styled } from '@mui/material/styles'\nimport { Box, Button, IconButton, Fab, Drawer } from '@mui/material'\nimport PerfectScrollbar from 'react-perfect-scrollbar'\n\nimport Json from './Json'\nimport MetaTags from './MetaTags'\nimport TestLinks from './TestLinks'\nimport RouteMachine from './RouteMachine'\n\nimport { useConfig } from '@/config'\nimport { useDebugStore } from '@/stores'\n\nimport { neatJson } from '@/ui/vendor/neatjson'\nimport { debugHelperConfig } from '@/stores/debug/config'\n\nconst tokens = {\n backgroundColor: '#334',\n color: '#eee',\n menuColor: '#999',\n menuHover: '#fff',\n menuSelected: '#eee',\n menuSelectedFontWeight: '700',\n font: '\"JetBrains Mono\", monospace',\n fontSize: '12px',\n}\n\nconst DebugButton = styled(IconButton)`\n position: absolute;\n bottom: 10px;\n /* left: 10px; */\n right: 10px;\n z-index: 3001;\n opacity: 0.5;\n`\n\nconst DebugPanel = styled(Box)`\n position: absolute;\n display: flex;\n flex-direction: column;\n bottom: 0px;\n width: 100vw;\n z-index: 3000;\n background-color: ${tokens.backgroundColor};\n font-family: ${tokens.font};\n font-size: ${tokens.fontSize};\n color: ${tokens.color};\n`\n\nconst DebugContents = styled(Box)`\n flex: 1 0 auto;\n display: flex;\n flex-direction: row;\n`\n\nconst DebugMenuContainer = styled(Box)`\n flex: 0 1 auto;\n display: flex;\n flex-direction: column;\n\n height: 400px;\n max-height: 400px;\n overflow: hidden;\n\n & .scrollbar-container {\n width: 100%;\n }\n\n /* padding: 8px; */\n`\n\nconst DebugMenuItemContainer = styled(Box)`\n cursor: pointer;\n color: ${tokens.menuColor};\n &::hover {\n color: ${tokens.menuHover};\n }\n\n &.dbh-selected {\n color: ${tokens.menuSelected};\n }\n`\n\nconst HostContainer = styled(Box)`\n flex: 1 0 0;\n display: flex;\n height: 400px;\n max-height: 400px;\n overflow: hidden;\n\n & .scrollbar-container {\n width: 100%;\n }\n`\n\nconst InfoTitle = styled('span')`\n font-size: 1rem;\n font-weight: 600;\n`\n\nconst Expander = styled('span')`\n min-width: 1.2rem;\n /* font-size: 1.2rem; */\n text-align: center;\n /* background-color: rgba(0, 0, 0, 0); */\n /* color: ${tokens.menuColor}; */\n /* border: none; */\n`\n\n// const DebugHostContainer = styled(Box)`\n// flex: 1 0 auto;\n// display: 'flex',\n// flex-\n// `\n\n//const hc = populateHelperConfig(helperConfig)\n\nconst helpers = {\n Json,\n TestLinks,\n RouteMachine,\n}\n\nconst DebugMenu = observer(({ items }) => {\n // const { items = [] } = config\n const store = useDebugStore()\n\n const handleItemClick = (item) => () => {\n store.setHelper2(item)\n }\n\n const DebugMenuItem = observer(({ item }) => {\n const { key, pathStr, items } = item\n\n const state = store._helperMenuState[pathStr]\n\n const expandContent =\n item.type === 'store' ? ['-', '+'][state.expanded | 0] : null\n\n // const\n\n const selected = store._helper?.pathStr === pathStr\n\n const toggleExpand = () => () => {\n if (item.type !== 'store') return\n store.toggleMenuExpand()\n }\n\n // console.log({ pathKey })\n\n return (\n <>\n <DebugMenuItemContainer\n className={selected && 'dbh-selected'}\n sx={{ py: 0.2 }}\n onClick={handleItemClick(item)}\n >\n <span>{key || 'no key'}</span>\n {/* <div><Expander onClick={toggleExpand}>{expandContent}</Expander>{' '} */}\n {/* <div>{pathStr} {store._helper?.pathStr}</div> */}\n {/* <div>{item.type}</div> */}\n </DebugMenuItemContainer>\n {items && (\n <Box sx={{ ml: 2 }}>\n <DebugMenuItems items={items} />\n </Box>\n )}\n </>\n )\n })\n\n const DebugMenuItems = ({ items = [] }) =>\n _.map(items, (item, i) => <DebugMenuItem key={i} item={item} />)\n\n const ReactQueryEnable = () => {\n const rqenabled = store.reactQueryDevtools\n\n return (\n <DebugMenuItemContainer className={rqenabled && 'dbh-selected'}>\n <div onClick={() => store.toggleReactQuery()}>React Query Devtools</div>\n </DebugMenuItemContainer>\n )\n }\n\n return (\n <DebugMenuContainer sx={{ p: 2 }}>\n <PerfectScrollbar\n options={{\n suppressScrollX: true,\n minScrollbarLength: 50,\n }}\n >\n <Box sx={{ mb: 2 }}>\n <ReactQueryEnable />\n </Box>\n\n <Box sx={{ pr: 2 }}>{items && <DebugMenuItems items={items} />}</Box>\n </PerfectScrollbar>\n </DebugMenuContainer>\n )\n})\n\nconst DebugHelperHost = observer(() => {\n const store = useDebugStore()\n const { _helper: h } = store\n\n const renderHelper = (helperConfig) => {\n const H = helpers[helperConfig?.type]\n if (!H) return <Box sx={{ my: 1 }}>No Helper defined for this path.</Box>\n\n return <H helperConfig={helperConfig} />\n }\n\n const title = h?.path.join('.')\n const helper = h && renderHelper(h)\n // const hcfg = JSON.stringify(_.omit(h, ['_this']))\n\n return (\n <HostContainer>\n <PerfectScrollbar\n options={{\n suppressScrollX: true,\n minScrollbarLength: 50,\n }}\n >\n <Box sx={{ p: 2, width: '100%' }}>\n <Box sx={{ mb: 2 }}>\n <InfoTitle>{title}</InfoTitle>\n </Box>\n {/* <pre>{hcfg}</pre> */}\n {helper}\n </Box>\n </PerfectScrollbar>\n </HostContainer>\n )\n})\n\nexport const DebugHelper = observer(() => {\n const { appConfig } = useConfig()\n const store = useDebugStore()\n\n const handleHelperButton = () => store.toggleShow()\n\n if (!appConfig.debugHelpers) return null\n\n return (\n <>\n <DebugButton size=\"small\" onClick={handleHelperButton}>\n <i className=\"fas fa-bug\" />\n </DebugButton>\n\n {store.show && (\n <DebugPanel sx={{ height: 400, maxHeight: 400 }}>\n <DebugContents>\n <DebugMenu items={store.menu.items} />\n <DebugHelperHost />\n </DebugContents>\n </DebugPanel>\n )}\n </>\n )\n})\n\n// export default DebugHelper\n","import { styled } from '@mui/material/styles'\n\nimport { ReactQueryDevtools as ReactQueryDevtools_ } from 'react-query/devtools'\n\nexport const ReactQueryDevtools = styled(ReactQueryDevtools_)`\n & .ReactQueryDevtoolsToggleButton {\n left: 20px;\n }\n`\n","import React from 'react'\n\nimport { createDevTools } from '@redux-devtools/core'\n\nimport { LogMonitor } from '@redux-devtools/log-monitor'\nimport { DockMonitor } from '@redux-devtools/dock-monitor'\n\nexport const ReduxDevtoolsMonitors = createDevTools(\n <DockMonitor\n toggleVisibilityKey=\"ctrl-h\"\n changePositionKey=\"ctrl-q\"\n defaultIsVisible={true}\n >\n <LogMonitor theme=\"tomorrow\" />\n </DockMonitor>\n)\n","import { ApplicationInsights } from '@microsoft/applicationinsights-web'\nimport { ReactPlugin } from '@microsoft/applicationinsights-react-js'\n\nlet reactPlugin = null\nlet appInsights = null\n\n/**\n * Create the App Insights Telemetry Service\n * @return {{reactPlugin: ReactPlugin, appInsights: Object, initialize: Function}} - Object\n */\nconst createTelemetryService = () => {\n /**\n * Initialize the Application Insights class\n * @param {string} instrumentationKey - Application Insights Instrumentation Key\n * @param {Object} browserHistory - client's browser history, supplied by the withRouter HOC\n * @return {void}\n */\n const initialize = (instrumentationKey, browserHistory) => {\n if (!browserHistory) {\n throw new Error('Could not initialize Telemetry Service')\n }\n if (!instrumentationKey) {\n throw new Error(\n 'Instrumentation key not provided in ./src/telemetry-provider.jsx'\n )\n }\n\n reactPlugin = new ReactPlugin()\n\n appInsights = new ApplicationInsights({\n config: {\n instrumentationKey: instrumentationKey,\n maxBatchInterval: 0,\n disableFetchTracking: false,\n extensions: [reactPlugin],\n extensionConfig: {\n [reactPlugin.identifier]: {\n history: browserHistory,\n },\n },\n },\n })\n\n appInsights.loadAppInsights()\n }\n\n return { reactPlugin, appInsights, initialize }\n}\n\nexport const ai = createTelemetryService()\nexport const getAppInsights = () => appInsights\n","import React, { Component, Fragment } from 'react'\nimport { withAITracking } from '@microsoft/applicationinsights-react-js'\nimport { ai } from './TelemetryService'\nimport { withRouter } from 'react-router-dom'\n\n/**\n * This Component provides telemetry with Azure App Insights\n *\n * NOTE: the package '@microsoft/applicationinsights-react-js' has a HOC withAITracking that requires this to be a Class Component rather than a Functional Component\n */\nclass TelemetryProvider extends Component {\n state = {\n initialized: false,\n }\n\n componentDidMount() {\n const { history } = this.props\n const { initialized } = this.state\n const AppInsightsInstrumentationKey = this.props.instrumentationKey // PUT YOUR KEY HERE\n if (\n !initialized &&\n Boolean(AppInsightsInstrumentationKey) &&\n Boolean(history)\n ) {\n ai.initialize(AppInsightsInstrumentationKey, history)\n this.setState({ initialized: true })\n }\n\n this.props.after()\n }\n\n render() {\n const { children } = this.props\n return <Fragment>{children}</Fragment>\n }\n}\n\nexport default withRouter(withAITracking(ai.reactPlugin, TelemetryProvider))\n","const config = window.appicationConfig\n\nexport default config\n","import { useEffect, useRef } from 'react'\n\nconst useGoogleAnalyticsTagManager = (containerID, isDirectInstall = false) => {\n const scriptRef = useRef(null)\n const noScriptRef = useRef(null)\n const tagRef = useRef(null)\n\n useEffect(() => {\n if (!scriptRef.current) {\n const script = document.createElement('script')\n script.textContent = `(function (w, d, s, l, i) {\n w[l] = w[l] || []\n w[l].push({ 'gtm.start': new Date().getTime(), event: 'gtm.js' })\n var f = d.getElementsByTagName(s)[0],\n j = d.createElement(s),\n dl = l != 'dataLayer' ? '&l=' + l : ''\n j.async = true\n j.src = 'https://www.googletagmanager.com/gtm.js?id=' + i + dl\n f.parentNode.insertBefore(j, f)\n })(window, document, 'script', 'dataLayer', '${containerID}')`\n\n if (isDirectInstall) {\n const tagscript = document.createElement('script')\n tagscript.setAttribute('async', '')\n tagscript.src = `https://www.googletagmanager.com/gtag/js?id=${containerID}`\n tagRef.current = tagscript\n document.head.appendChild(tagscript)\n\n {\n /* <script async src=\"https://www.googletagmanager.com/gtag/js?id=G-LW7KXSR7J8\"></script> */\n }\n\n script.textContent = `window.dataLayer = window.dataLayer || [];\n function gtag(){dataLayer.push(arguments);}\n gtag('js', new Date());\n gtag('config', '${containerID}');`\n }\n\n scriptRef.current = script\n document.head.appendChild(script)\n }\n\n if (!noScriptRef.current && !isDirectInstall) {\n const iframe = document.createElement('iframe')\n iframe.src = `https://www.googletagmanager.com/ns.html?id=${containerID}`\n iframe.height = '0'\n iframe.width = '0'\n iframe.style.display = 'none'\n iframe.style.visibility = 'hidden'\n\n const noscript = document.createElement('noscript')\n noscript.appendChild(iframe)\n noScriptRef.current = noscript\n document.body.insertBefore(noscript, document.getElementById('root'))\n }\n\n return () => {\n document.head.removeChild(scriptRef.current)\n scriptRef.current = null\n\n document.body.removeChild(noScriptRef.current)\n noScriptRef.current = null\n }\n }, [containerID])\n}\n\nexport const removeDuplicateScript = () => {\n const scripts = document.getElementsByTagName('script')\n // Create an array to store the unique script src values\n let srcValues = []\n\n // Loop through the script elements and add their src values to the array\n for (var i = 0; i < scripts.length; i++) {\n srcValues.push(scripts[i].src)\n }\n\n // Remove duplicates from the array\n srcValues = srcValues.filter(function (item, pos) {\n return srcValues.indexOf(item) === pos\n })\n // Loop through the script elements again and remove any that have a src value that is not in the unique array\n for (let i = 0; i < scripts.length; i++) {\n if (srcValues.indexOf(scripts[i].src) === -1) {\n scripts[i].parentNode.removeChild(scripts[i])\n }\n }\n}\n\nexport default useGoogleAnalyticsTagManager\n","import React, { useEffect, useState } from 'react'\n// import clsx from 'clsx'\n\nimport { observer } from 'mobx-react-lite'\n\nimport { BrowserRouter as Router } from 'react-router-dom'\n\nimport { useAnalytics } from 'use-analytics'\n\nimport { styled } from '@mui/material/styles'\nimport { withStyles } from '@mui/styles'\n\nimport { SwipeableDrawer } from '@mui/material'\n\nimport AppBar from '@/ui/nav/app-bar/AppBar'\nimport MainMenu from '@/ui/nav/menus/MainMenu'\nimport TenantRoutes from '@/ui/router/TenantRoutes'\nimport { FacebookPixelTag } from './FacebookPixelTag'\nimport { GoogleSiteVerification } from './GoogleSiteVerification'\n\nimport { useConfig } from '@/config'\nimport { useResizeDetect } from '@/ui/hooks/useResizeDetect'\nimport { useAppAnalytics } from '@/ui/hooks/useAppAnalytics'\nimport { usePlatform } from '@/ui/hooks/usePlatform'\n\nimport { useDebugStore } from '@/stores'\nimport { DebugHelper, ReactQueryDevtools } from '@/ui/debug/debug-helper'\n\nimport { useAtomsDevtools } from 'jotai/devtools'\nimport { MstReduxDevToolsProvider } from '@/stores/debug/mstReduxDevTools'\n\nimport { ReduxDevtoolsMonitors } from '@/ui/debug/redux-devtools/ReduxMonitors'\nimport TelemetryProvider from './TelemetryProvider.jsx'\nimport { getAppInsights } from './TelemetryService'\nimport config from '../../../appConfig'\nimport useGoogleAnalyticsTagManager, {\n removeDuplicateScript,\n} from '@/ui/hooks/useGoogleAnalyticsTagManager'\nimport _ from 'lodash'\n\nvar applicationInsightIKey =\n config.iKey || process.env.REACT_APP_INSTRUMENTATION_KEY\n\n// prevent ios full window scroll from touch\nconst preventDefault = (e) => e.preventDefault()\n\n// window.addEventListener('touchmove', preventDefault, {\n// passive: false,\n// })\n\n// window.removeEventListener('touchmove', preventDefault)\n\nconst styles = (theme) => ({\n root: {\n backgroundColor: theme.palette.background.paper,\n // backgroundColor: '#f00',\n maxHeight: (props) => props.height,\n height: (props) => props.height,\n // maxHeight: '100vh',\n // height: '100vh',\n maxWidth: '100vw',\n width: '100vw',\n\n display: 'flex',\n flexDirection: 'column',\n },\n appBar: {\n flex: '0 1 0',\n },\n content: {\n flex: `1 0 0`,\n overflow: 'hidden',\n },\n})\n\nconst DebugHelper_ = () => {\n const { appConfig } = useConfig()\n if (!appConfig.debugHelpers) return null\n return <DebugHelper />\n}\n\nconst ReactQueryDevtools_ = observer(() => {\n const { appConfig } = useConfig()\n const debug = useDebugStore()\n\n if (!appConfig.debugHelpers || !debug.reactQueryDevtools) return null\n\n return (\n <ReactQueryDevtools\n initialIsOpen={false}\n toggleButtonProps={{ className: 'ReactQueryDevtoolsToggleButton' }}\n />\n )\n})\n\nconst AppMain = withStyles(styles, { name: 'AMSApp' })((props) => {\n const { classes } = props\n const { tenantConfig: tc } = useConfig()\n const { track } = useAnalytics()\n\n const [mainMenu, setMainMenu] = useState(false)\n let appInsights = null\n\n const handleClickMenu = () => {\n track('mainMenuToggle', {\n category: 'Navigation',\n label: 'Main Menu',\n })\n toggleMenu(!mainMenu)()\n }\n\n const toggleMenu = (open) => () => {\n setMainMenu(open)\n }\n\n // hooks have to go under router\n\n const AppAnalytics = () => {\n useAppAnalytics()\n if (!_.isUndefined(tc.analytics?.googleAnalytics?.containerId)) {\n useGoogleAnalyticsTagManager(\n tc.analytics?.googleAnalytics?.containerId,\n tc.analytics?.googleAnalytics?.isDirectInstall\n )\n removeDuplicateScript()\n }\n return null\n }\n\n return (\n // <MstReduxDevToolsProvider>\n <Router>\n <TelemetryProvider\n instrumentationKey={applicationInsightIKey}\n after={() => {\n appInsights = getAppInsights()\n }}\n >\n <DebugHelper_ />\n <AppAnalytics />\n <FacebookPixelTag />\n <GoogleSiteVerification />\n <div className={classes.root}>\n <AppBar onMenuClick={handleClickMenu} {...tc.ui?.appBar} />\n <div className={classes.content}>\n <TenantRoutes />\n {/* <ReduxDevtoolsMonitors /> */}\n <ReactQueryDevtools_ />\n </div>\n </div>\n <SwipeableDrawer\n anchor=\"left\"\n open={mainMenu}\n onOpen={toggleMenu(true)}\n onClose={toggleMenu(false)}\n >\n <MainMenu menu=\"navigation\" onToggleMenu={toggleMenu} />\n </SwipeableDrawer>\n </TelemetryProvider>\n </Router>\n // </MstReduxDevToolsProvider>\n )\n})\n\nexport const AppContainer = () => {\n const { height } = useResizeDetect()\n const platform = usePlatform()\n\n const appHeight = platform.ieVersion ? height - 1 : height\n\n return <AppMain height={appHeight} />\n}\n","/* eslint-disable no-unused-vars */\nimport React, { useState, useEffect, useCallback } from 'react'\nimport { useLocation, useRouteMatch } from 'react-router-dom'\nimport { useAnalytics } from 'use-analytics'\nimport useDeepCompareEffect from 'use-deep-compare-effect'\n\nexport const useAppAnalytics = () => {\n const location = useLocation()\n const { page, track } = useAnalytics()\n const [path, setPath] = useState(null)\n\n // global a href tracking\n\n const registerOutboundTracking = useCallback(() => {\n document.addEventListener('click', e => {\n const a = e.target.closest('a')\n if (!a) return\n\n const href = a.getAttribute('href')\n if (href.match(/^\\/.*/)) return\n\n track('outboundLinkClick', {\n category: 'External',\n label: href,\n })\n })\n }, [track])\n\n useEffect(() => {\n registerOutboundTracking()\n }, [registerOutboundTracking])\n\n\n // track url changes\n\n const updatePath = useCallback(() => {\n if (location.pathname !== path) {\n page()\n setPath(location.pathname)\n }\n }, [location.pathname, path, page])\n\n useEffect(() => {\n updatePath()\n }, [location, updatePath])\n\n}\n","import '../polyfills'\nimport { CssBaseline, StyledEngineProvider, ThemeProvider } from '@mui/material'\nimport { StylesProvider } from '@mui/styles'\nimport { analytics } from '@/analytics'\nimport { MstReduxDevToolsProvider } from '@/stores/debug/mstReduxDevTools'\n// import * as serviceWorker from './serviceWorker'\n// import { RecoilRoot } from 'recoil'\nimport { Provider as JotaiProvider } from 'jotai'\nimport React from 'react'\nimport ReactDOM from 'react-dom'\nimport { QueryClientProvider } from 'react-query'\nimport '@/tenants/shared/fontawesome'\nimport '@/tenants/shared/styles/perfect-scrollbar.scss'\nimport '@/tenants/shared/styles/rcslider.scss'\nimport { createQueryClient } from '@/ui/app/query-client'\nimport { useTenantThemes } from '@/ui/theme/TenantTheme'\nimport { AnalyticsProvider } from 'use-analytics'\nimport { setAxiosConfig } from '@ciss/cie-api-orval'\nimport { config } from '@/config'\nimport { AppContainer } from './AppMain'\n\nimport { ReduxDevtoolsMonitors } from '@/ui/debug/redux-devtools/ReduxMonitors'\n\n/**\n * @ciss/cie-api-orval is built as a separate module and needs\n * an unversioned baseURL to configure Axios mutator\n */\n;(() => {\n const { baseURL: url, apiKey } = config.appConfig\n const baseUrl = new URL(config.appConfig.apiURL).origin\n setAxiosConfig({\n baseUrl,\n apiKey,\n })\n})()\n\n// // eslint-disable-next-line no-undef\n// const tenantConfig = require(`@/tenants/${process.env.TENANT}/config`).default\n\n// if (tenantConfig.fonts) {\n// Webfont.load(tenantConfig.fonts)\n// }\n\nexport const AppEntry = () => {\n // const queryClient = new QueryClient()\n const themes = useTenantThemes()\n const queryClient = createQueryClient({ useWebSoragePersistor: false })\n\n return (\n <JotaiProvider>\n <AnalyticsProvider instance={analytics}>\n <QueryClientProvider client={queryClient}>\n <StyledEngineProvider injectFirst>\n <StylesProvider>\n <ThemeProvider theme={themes.base}>\n <CssBaseline />\n <AppContainer />\n </ThemeProvider>\n </StylesProvider>\n </StyledEngineProvider>\n </QueryClientProvider>\n </AnalyticsProvider>\n </JotaiProvider>\n )\n}\n\n// serviceWorker.unregister()\n","import { config } from '@/config'\nimport { milliseconds as ms } from 'date-fns'\nimport { QueryClient } from 'react-query'\nimport { createWebStoragePersistor } from 'react-query/createWebStoragePersistor-experimental'\nimport { persistQueryClient } from 'react-query/persistQueryClient-experimental'\n\nexport const createQueryClient = (options) => {\n const { useWebSoragePersistor = true } = options || {}\n\n const queryClient = new QueryClient({\n defaultOptions: {\n queries: {\n // cacheTime: 1000 * 60 * 60 * 24, // 24 hours\n cacheTime: ms({ minutes: 10 }),\n },\n },\n })\n\n if (!useWebSoragePersistor) return queryClient\n\n const localStoragePersistor = createWebStoragePersistor({\n key: `ams-${config.appConfig.tenant}-query-persist`,\n storage: window.localStorage,\n })\n // const sessionStoragePersistor = createWebStoragePersistor({ storage: window.sessionStorage })\n\n persistQueryClient({\n queryClient,\n persistor: localStoragePersistor,\n })\n\n return queryClient\n}\n","import React from 'react'\nimport ReactDOM from 'react-dom'\n\nimport { AppEntry } from './ui/app'\n\nReactDOM.render(<AppEntry />, document.querySelector('#root'))\n","import _ from 'lodash'\nimport { camelCase } from 'change-case-all'\n\nexport const loadImgAssets = (rctx) => {\n return rctx.keys().reduce((acc, curr) => {\n const base = curr.match(/^(.\\/)?(.*)\\.(png|webp|jpe?g|svg)$/)\n\n if (base.length < 4) {\n console.warn(`Image path failed to parse ${curr}`)\n return acc\n }\n\n _.set(acc, base[2].split('/').map(camelCase).join('.'), rctx(curr).default)\n\n return acc\n }, {})\n}\n\nconst images = loadImgAssets(\n require.context('./_assets', true, /\\.(png|webp|jpe?g|svg)$/)\n)\n\nconst assets = {\n images,\n\n defaults: {\n cie: images.cie,\n flags: images.flags,\n healthengine: images.healthengine,\n headerIcons: {\n directory: images.cissIcons.directory.transparent,\n diary: images.cissIcons.diary.transparent,\n },\n mapMarkers: {\n services: images.markers.directory,\n events: images.markers.diary,\n },\n mapMarkersSvg: {\n services: images.markersSvg.directory,\n events: images.markers.diary,\n },\n },\n}\n\nexport default assets\n","import { surveyShared } from '../shared/survey'\n\nimport keyBy from 'lodash/keyBy'\n\nconst questions = [\n ...surveyShared.questions,\n {\n id: 'categories',\n type: 'categories',\n label: 'Categories',\n icon: 'far fa-stream',\n question: {\n self: 'What are you interested in?',\n other: 'What are they interested in?',\n },\n },\n]\n\nexport const survey = {\n questions,\n\n // TODO: move this and the merge to the config loader\n questionsMap: keyBy(questions, 'id'),\n}\n","// location -> location\n// age -> range\n// gender -> string\n// atsi -> string\n// lgbtqi -> string\n\n// metacategory -> string[]\n\n// kessler k-10\n// kessler k-5\n\nexport const surveyShared = {\n questions: [\n {\n id: 'query',\n type: 'query',\n label: 'Search',\n icon: 'fa-solid fa-magnifying-glass',\n question: {\n self: 'What are you looking for?',\n other: 'What are they looking for?',\n },\n },\n {\n id: 'location',\n type: 'location',\n label: 'Location',\n icon: 'fas fa-map-marker-question',\n // hideLabel: true,\n // question: {\n // self: 'Where are you?',\n // other: 'Where are they?',\n // },\n // help: {\n // self: 'Knowing what suburb or area code you are in will help us find services nearby.',\n // other: 'Knowing what suburb or area code they are in will help us find services nearby.',\n // },\n },\n {\n id: 'radius',\n type: 'radius',\n label: 'Radius',\n icon: 'far fa-running',\n question: {\n self: 'How far will you travel?',\n other: 'How far will they travel?',\n },\n },\n {\n id: 'dateRange',\n type: 'dateRange',\n label: 'Appointment Dates',\n icon: 'far fa-clock',\n question: 'When?',\n },\n {\n id: 'age',\n type: 'radio',\n searchParamaterType: 'select',\n label: 'Age',\n question: {\n self: 'I am aged between:',\n other: 'They are aged between:',\n },\n options: ['0 - 15', '16 - 25', '26 - 40', '41 - 64', '65+'],\n queryMap: {\n '0 - 15': { min: 0, max: 15 },\n '16 - 25': { min: 16, max: 25 },\n '26 - 40': { min: 26, max: 40 },\n '41 - 64': { min: 41, max: 64 },\n '65+': { min: 65, max: 999 },\n },\n },\n {\n id: 'gender',\n type: 'radio',\n searchParamaterType: 'select',\n label: 'Gender',\n question: {\n self: 'I am:',\n other: 'They are:',\n },\n options: ['Male', 'Female', 'Intersex', 'Transgender'],\n },\n {\n id: 'atsi',\n type: 'radio',\n searchParamaterType: 'select',\n label: 'Ethnicity',\n question: {\n self: 'Do you identify as Aboriginal or Torres Strait Islander?',\n other: 'Do they identify as Aboriginal or Torres Strait Islander?',\n },\n options: ['Yes', 'No', 'Unsure'],\n },\n {\n id: 'sexuality',\n type: 'radio',\n searchParamaterType: 'select',\n label: 'Sexuality',\n question: {\n self: 'Do you identify as LGBTIQI+?',\n other: 'Do they identify as LGBTIQI+?',\n },\n options: ['Yes', 'No', 'Unsure'],\n },\n {\n id: 'k10',\n type: 'scaleeval',\n label: 'k-10',\n options: [\n { value: 1, label: 'Not at all' },\n { value: 2, label: 'A little of the time' },\n { value: 3, label: 'Some of the time' },\n { value: 4, label: 'Most of the time' },\n { value: 5, label: 'All of the time' },\n ],\n summary: 'In the past 4 weeks:',\n questions: [\n {\n label: 'About how often did you feel tired out for no good reason?',\n },\n {\n label: 'About how often did you feel nervous?',\n },\n {\n label:\n 'About how often did you feel so nervous that nothing could calm you down?',\n followPrevious: true,\n },\n {\n label: 'About how often did you feel hopeless?',\n },\n {\n label: 'About how often did you feel restless or fidgety?',\n },\n {\n label:\n 'About how often did you feel so restless you could not sit still?',\n followPrevious: true,\n },\n {\n label: 'About how often did you feel depressed?',\n },\n {\n label: 'About how often did you feel that everything is an effort?',\n },\n {\n label:\n 'About how often did you feel so sad that nothing could cheer you up?',\n },\n {\n label: 'About how often did you feel worthless?',\n },\n ],\n scoring: [\n { id: 'low', score: [0, 9] },\n { id: 'early', score: [10, 19] },\n { id: 'mild', score: [20, 24] },\n { id: 'moderate', score: [25, 29] },\n { id: 'severe', score: [30, 50] },\n ],\n },\n {\n id: 'k5',\n type: 'scaleeval',\n label: 'k-5',\n options: [\n { value: 1, label: 'Not at all' },\n { value: 2, label: 'A little of the time' },\n { value: 3, label: 'Some of the time' },\n { value: 4, label: 'Most of the time' },\n { value: 5, label: 'All of the time' },\n ],\n summary: 'In the past 4 weeks:',\n questions: [\n {\n label: 'About how often did you feel nervous?',\n },\n {\n label: 'About how often did you feel without hope?',\n },\n {\n label: 'About how often did you feel restless or jumpy?',\n },\n {\n label: 'About how often did you feel that everything is an effort?',\n },\n {\n label:\n 'About how often did you feel so sad that nothing could cheer you up?',\n },\n ],\n scoring: [\n { id: 'low', score: [0, 4] },\n { id: 'early', score: [5, 9] },\n { id: 'mild', score: [10, 12] },\n { id: 'moderate', score: [13, 14] },\n { id: 'severe', score: [15, 25] },\n ],\n },\n ],\n}\n","export default __webpack_public_path__ + \"static/media/nqphn-logo.363a827c.svg\";","export default __webpack_public_path__ + \"static/media/nqphn_logo_white.074a2826.svg\";","import shared from '../shared/assets'\n\nimport logo from './assets/images/nqphn-logo.svg'\nimport mapMarker from './assets/images/marker-wapha.png'\nimport toolbarBackground from './assets/images/wapha-toolbar-background@2x.png'\nimport badge from './assets/images/nqphn_logo_white.svg'\n\nconst { cie, headerIcons, healthengine } = shared\n\nimport '@fontsource/mulish/300.css'\nimport '@fontsource/mulish/400.css'\nimport '@fontsource/mulish/500.css'\nimport '@fontsource/mulish/700.css'\nimport '@fontsource/mulish/800.css'\nimport '@fontsource/mulish/900.css'\n\nexport const assets = {\n logo,\n cie,\n headerIcons,\n healthengine,\n mapMarker,\n toolbarBackground,\n badges: {\n default: badge,\n },\n}\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAkCAYAAACaJFpUAAAACXBIWXMAAAsSAAALEgHS3X78AAAEDklEQVRIia2Xf2gTZxjHn9zlx7WpTdJaL0mvgdrU/lCZCv5aXc0CBcWOiiiDIWyMCQr7a/5A/+kfoij+YjBl/jGYivtv/wgT/9hWwiaKm64tjR3OVlt7poltbdo0ySV3uYzn8EKIyd2btl+45O7e93k+7/s+d8/7nCGbzQKhfEM8/wVNUV7GZObQRBDTfEaWR9Zz3A0ACJC40QPah3j+W6fNduBeMFjZH34NfDwOgflZpdFX7QDOaoWNznrobF4zl5LE31qczmMAMFY2MMjzFyvMlsM3/3pY9f2rF0RrcMSzGj7fsn0hmU5dX8dxx4mBw6HQ/dGpN5tPPXpgjkhpIpgq1miGc1s/TDfVrfq73e3uBoCoJhBhd4NDHRdG/i0LVCic7eEdnc/cdntrfhOVf/EsHP758fj4kmEoDMOdgf4W9FkU+DwS6Y6nhD1H+x8tGaaqd3gQ5pOJHvT9HpCm6KtH+35llo32TicCvxurLMwPhUDf0xDvCibjy80D9Pl4/KVDnaUCHA6FzvS9GDETeRAEkMIh5cgmyAZ4a2jQLGYyJ/HciD8rLEzb7Ule1zD9agzk6Te5aynEg8FaBZamNQBGY0k7TBTIAHWGc8kEVbJ3CZiqbHwBUqP/6Q5WZeCP7+XMdKWeQTFYPlRvef+ZmLAjS6Hys7Oa8cvMz+mNB2RJ0myPpwTlH4FRzuHQzF+URnxIZbUwOeBAY+3KhJadodIKBprWdE2bLZrtmxoaMKcGlCW1VVTKegM1ehpLw1gnAKOdM1SGAhQkcfCgi9M0oB01YGr0AmUy5e7hrI1uDkz1Hk3bnloWYilBSdBKcJpZ9rR/tbfj9iSv+fAgFA98+bNyRllqEvW0tqVNNH0e8lJbYK2bm8QdnEgMQwxbV2EF9N3Msr/kAyEjZ74+9dFOgYxIrsv+LgF9qwY5II7AamHunm7/YNlg6At9qrMDNYaqWpzO/dVMRfhJJMzemYksCYYPyt4NmyIuu21//v33cqjLbtt2dne3gLXJYoW2J33+JPoqdFEsaY+lRfGr7zo/FhcLRFtJlnuLlYtFd4mG2pqfOEfN/RPetrJhaIO2rS7XpWLtJbelZpbd99nmLdPEr8q7whht0LZUH619MFrvcHSd69qVJImnUo927UpOxWL7CmtRUiBqgKboS1jY6gGxjyCK1zZ4PH9q9dPd6RvrVva2u+qfYmFbStiGfUqV92UBUU2r6vyHtu94WyyemLq+3NYxh31IfBEBMSYz8YW9GKPChuu7P0mLGemgVtwWAwSMTRbg1uWNW3P38JwyGH7MT116KueDVNHEzNuRK3/0NeH5N53+0YbaGm859mUD8SN1KhZ7LWeBYqtXuEiXUtViqqNoNJH4lDGabOXCAAD+B56shRYy97UNAAAAAElFTkSuQmCC\"","export default \"data:image/png;base64,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\"","export default __webpack_public_path__ + \"static/media/NQPHN-commissioned-services-map-icons_First Nations health.b15bee47.png\";","export default __webpack_public_path__ + \"static/media/NQPHN-commissioned-services-map-icons_Older Persons.3996fbb9.png\";","export default __webpack_public_path__ + \"static/media/NQPHN-commissioned-services-map-icons_Alcohol and Other Drugs.71eaee97.png\";","export default __webpack_public_path__ + \"static/media/NQPHN-commissioned-services-map-icons_Chronic Conditions.8deb543f.png\";","export default __webpack_public_path__ + \"static/media/NQPHN-commissioned-services-map-icons_Mental Health.2423edcd.png\";","import { survey } from './survey'\nimport { assets } from './assets'\nimport { mapStyle } from './map'\nimport { serviceChangeFields } from '../shared/search'\nimport FirstNationIcon from '../nqphn/assets/images/NQPHN-commissioned-services-map-icons_First Nations health.png'\nimport OrderPersonIcon from '../nqphn/assets/images/NQPHN-commissioned-services-map-icons_Older Persons.png'\nimport AlcoholnDrugIcon from '../nqphn/assets/images/NQPHN-commissioned-services-map-icons_Alcohol and Other Drugs.png'\n\nimport ChronicIcon from '../nqphn/assets/images/NQPHN-commissioned-services-map-icons_Chronic Conditions.png'\n\nimport MentalHealthIcon from '../nqphn/assets/images/NQPHN-commissioned-services-map-icons_Mental Health.png'\nimport PopulationHealthIcon from '../nqphn/assets/images/NQPHN-commissioned-services-map-icons_Population Health.png'\nimport WorkforceIcon from '../nqphn/assets/images/NQPHN-commissioned-services-map-icons_Workforce.png'\n\nimport * as React from 'react'\n\nconst config = {\n id: 'default',\n // fonts: {\n // google: {\n // families: ['Mulish:300,400,500,700,800,900'],\n // },\n // },\n options: {\n title: 'NQPHN',\n categoryMode: 'single',\n // combineMode: 'commissioned-services',\n combineMode: 'filters',\n informationCategories: false,\n defaultCategoryTitle: 'Healthcare Services',\n defaultCategorySuffix: 'Services',\n },\n\n analytics: {\n app: 'nqphn',\n plugins: [\n {\n provider: 'google-analytics',\n // trackingId: 'UA-188798033-1', // AMS Test\n trackingId: '396919186',\n // customScriptSrc: 'https://www.google-analytics.com/analytics_debug.js',\n siteSpeedSampleRate: 100,\n },\n // {\n // provider: 'cie-elastic',\n // index: 'prod-ams-amh-analytics',\n // // debug: true,\n // },\n ],\n // facebook: {\n // tagId: '482689853334650',\n // },\n // googleSiteVerification: {\n // tagId: '4ej5FtOzV-vTBi9njysRwwxeoE0kXoVwF5C2d5Z5_8w',\n // },\n googleAnalytics: {\n containerId: 'GTM-PGKKP3D6',\n },\n },\n\n meta: {\n templates: {\n title: '{{ tenant.options.title }}',\n description: '{{ tenant.options.title }}',\n },\n },\n\n routes: [\n {\n path: '/',\n exact: true,\n component: 'Search',\n },\n {\n path: '/support',\n component: 'Support',\n container: 'ContentPage',\n props: {\n contentId: 'support',\n },\n meta: {\n templates: {\n title: '{{ tenant.options.title }} - Site Support',\n },\n },\n },\n {\n path: '/location/:lat/:lng',\n component: 'LocationRedirect',\n props: {\n redirectTo: '/',\n },\n },\n {\n path: '/404',\n exact: true,\n component: 'NotFound',\n container: 'ContentPage',\n containerProps: {\n backButton: false,\n },\n meta: {\n templates: {\n title: '{{ tenant.options.title }} - 404 Not Found',\n },\n },\n },\n {\n path: '*',\n component: 'Redirect',\n props: {\n to: '/404',\n },\n },\n ],\n\n ui: {\n appBar: {\n elevation: 0,\n groups: [\n {\n align: 'fill',\n items: [\n {\n component: 'MenuButton',\n props: {\n sx: { px: 2 },\n },\n },\n {\n component: 'AppBarTitle',\n props: {\n disableTextTitle: true,\n href: 'https://www.nqphn.com.au/',\n },\n },\n {\n component: 'PortalOutlet',\n props: {\n sx: {\n width: { lg: 800 },\n flexGrow: { md: 1, lg: 0 },\n display: { xs: 'none', lg: 'flex' },\n },\n },\n },\n ],\n },\n ],\n },\n\n menus: {\n navigation: {\n items: [\n {\n id: 'home',\n label: 'Home',\n icon: 'fas fa-home-alt',\n route: '/',\n },\n {\n id: 'support',\n label: 'Site Support',\n icon: 'fas fa-user-headset',\n route: '/support',\n },\n {\n id: 'reset',\n label: 'Clear Settings & Restart',\n icon: 'fas fa-undo',\n function: 'reset',\n },\n ],\n },\n },\n\n search: {\n tabs: [\n {\n id: 'services',\n title: 'Services',\n icon: 'fas fa-building',\n component: 'SearchResults',\n map: true,\n options: {\n search: 'services',\n },\n },\n {\n id: 'favourites',\n title: 'Favourites',\n icon: 'fas fa-star',\n component: 'SearchResults',\n map: true,\n options: {\n search: 'favourites',\n },\n },\n ],\n\n desktop: {\n paramsDrawer: {\n breakpoint: 'lg',\n },\n disableParams: true,\n },\n\n map: {\n locationZoom: 6,\n selectionZoom: 17,\n style: mapStyle,\n locationBoundary: {\n show: true,\n pathOptions: {\n stroke: true,\n color: '#329ec5',\n weight: 1.5,\n opacity: 0.6,\n fill: true,\n fillColor: '#329ec5',\n fillOpacity: 0.2,\n },\n },\n defaultView: {\n center: { lat: -23.698, lng: 133.8807 },\n zoom: 4,\n },\n zoomLevels: {\n geography: {\n 2288: 4, // nq\n 91: 4, // Cairns and Hinterland\n // 90: 8, // Central Queensland\n // 88: 7, // Central West\n // 79: 7, // Darling Downs\n // 80: 10, // Gold Coast\n 81: 4, // Mackay\n // 92: 10, // Metro North\n // 82: 9, // Metro South\n // 89: 7, // North West\n // 83: 7, // South West\n // 84: 9, // Sunshine Coast\n 93: 4, // Torres and Cape\n 85: 4, // Townsville\n // 86: 9, // West Moreton\n // 87: 8, // Wide Bay\n },\n },\n },\n\n parameters: {\n query: {\n id: 'query',\n type: 'query',\n label: 'Search',\n icon: 'fa-solid fa-magnifying-glass',\n },\n location: {\n id: 'location',\n type: 'location',\n label: 'Location',\n icon: 'fas fa-map-marker-question',\n },\n geographySelect: {\n id: 'location',\n type: 'geographySelect',\n label: 'Region',\n icon: 'fas fa-map-marker-question',\n queryKey: 'geographySelect',\n sources: [\n {\n type: 'geography',\n id: '2288',\n label: 'All Regions',\n default: true,\n },\n { type: 'dataset', id: 'NQPHN' },\n ],\n },\n categories: {\n id: 'categories',\n type: 'categoryButtons',\n label: 'Categories',\n icon: 'far fa-stream',\n },\n categorySelect: {\n id: 'categories',\n type: 'categorySelect',\n label: 'Categories',\n icon: 'far fa-stream',\n },\n },\n\n parameterGroups: {\n desktop: {\n controls: [\n { param: 'query' },\n { param: 'geographySelect' },\n { param: 'categorySelect' },\n ],\n },\n appBar: {\n disableLabels: true,\n containerProps: {\n columns: 3,\n spacing: 1,\n sx: { px: 3, py: 0, width: '100%' },\n },\n controls: [\n { param: 'query', props: { showSearchIcon: true } },\n { param: 'geographySelect' },\n { param: 'categorySelect' },\n ],\n },\n mobileSearch: {\n controls: [\n { param: 'query' },\n { param: 'geographySelect' },\n { param: 'categorySelect' },\n ],\n },\n },\n\n resultsList: {\n default: {\n sections: [\n {\n type: 'initBlock',\n items: [{ component: 'Welcome' }],\n },\n {\n type: 'resultsBlock',\n items: [{ component: 'Results' }],\n },\n {\n type: 'statusBlock',\n items: [{ component: 'Status' }, { component: 'SiteSupport' }],\n },\n ],\n },\n favourites: {\n sections: [\n {\n type: 'initBlock',\n items: [{ component: 'Welcome' }],\n },\n {\n type: 'resultsBlock',\n items: [{ component: 'Results' }],\n },\n {\n type: 'statusBlock',\n items: [\n { component: 'FavouritesStatus' },\n { component: 'SiteSupport' },\n ],\n },\n ],\n },\n },\n\n resultItem: {\n service: {\n components: [\n {\n component: 'BadgeList',\n hideVariant: 'map',\n\n options: {\n icon: 'default',\n styles: {\n inactive: {\n backgroundColor: '#bbb',\n },\n },\n },\n },\n {\n component: 'Title',\n showCategory: false,\n options: {\n showOrganisationName: true,\n },\n },\n {\n component: 'Details',\n fields: [\n { key: 'operatingDays', icon: 'far fa-clock' },\n {\n key: 'address',\n icon: 'fas fa-map-marker-alt',\n },\n { key: 'phone', icon: 'fas fa-phone' },\n ],\n },\n {\n component: 'AddressWithheld',\n hideVariant: 'list',\n },\n {\n component: 'Description',\n hideVariant: 'map',\n },\n {\n component: 'ServiceRegionNames',\n hideVariant: 'map',\n },\n {\n component: 'Spacer',\n hideVariant: 'map',\n },\n {\n component: 'ServiceCohortTags',\n hideVariant: 'map',\n },\n {\n component: 'ServiceChanges',\n fields: serviceChangeFields,\n hideVariant: 'map',\n },\n {\n component: 'HealthEngine',\n hideVariant: 'map',\n },\n ],\n },\n },\n },\n },\n\n /*\n footer: {\n backgroundColor: '#ddd',\n columns: ['cie'],\n },\n */\n\n categories: [\n {\n id: 'Aboriginal-Health',\n title: 'First Nations Health',\n searchOptions: {\n filter: {\n tags: [1666],\n },\n },\n badge: {\n tagId: 1666,\n backgroundColor: '#F7921E',\n extraIcon: FirstNationIcon,\n },\n },\n {\n id: 'Aged-Care',\n title: 'Older Persons and Palliative Health',\n searchOptions: {\n filter: {\n tags: [1667],\n },\n },\n badge: {\n tagId: 1667,\n backgroundColor: '#003E6A',\n extraIcon: OrderPersonIcon,\n },\n },\n {\n id: 'Alcohol&Other Drug',\n title: 'Alcohol and Other Drugs',\n searchOptions: {\n filter: {\n tags: [1668],\n },\n },\n badge: {\n tagId: 1668,\n backgroundColor: '#00A2C5',\n extraIcon: AlcoholnDrugIcon,\n },\n },\n {\n id: 'Chronic-Conditions',\n title: 'Chronic Conditions',\n searchOptions: {\n filter: {\n tags: [1669],\n },\n },\n badge: {\n tagId: 1669,\n backgroundColor: '#003E6A',\n extraIcon: ChronicIcon,\n },\n },\n {\n id: 'Mental-Health',\n title: 'Mental Health',\n searchOptions: {\n filter: {\n tags: [1670],\n },\n },\n badge: {\n tagId: 1670,\n backgroundColor: '#00A2C5',\n extraIcon: MentalHealthIcon,\n },\n },\n {\n id: 'Population-Health',\n title: 'Population Health',\n searchOptions: {\n filter: {\n tags: [1677],\n },\n },\n badge: {\n tagId: 1677,\n backgroundColor: '#003E6A',\n extraIcon: PopulationHealthIcon,\n },\n },\n {\n id: 'Workforce',\n title: 'Workforce',\n searchOptions: {\n filter: {\n tags: [1678],\n },\n },\n badge: {\n tagId: 1678,\n backgroundColor: '#62BB46',\n extraIcon: WorkforceIcon,\n },\n },\n ],\n\n search: {\n location: {\n showLocationDialog: false,\n initLocation: 'default',\n defaultLocation: {\n type: 'geography',\n id: 2288,\n default: true,\n label: 'All Regions',\n dataset: 'AUSSTATES',\n area: 510172400166.882,\n lat: -18.3595057568941,\n lng: 144.677549094795,\n kmlUrl:\n 'https://devdirectorycdn.blob.core.windows.net/kml/phn/northern_queensland.kml',\n },\n },\n queries: [\n {\n id: 'services',\n builder: 'directory',\n parameters: [\n { param: 'page' },\n { param: 'sort', sortField: 'Name', sortDirection: 'ASC' },\n { param: 'query' },\n // { param: 'commissionedServices' },\n // { param: 'locationRegion' },\n { param: 'serviceRegions' },\n { param: 'defaultGeoId' },\n { param: 'isIncludeOutsideRegion' },\n { param: 'filters' },\n ],\n },\n ],\n searches: {\n services: {\n id: 'services',\n type: 'directory',\n pageSize: 1000,\n showSiteSupport: true,\n defaultFilter: { terms: { serviceTags: [-1] } },\n },\n favourites: {\n id: 'favourites',\n type: 'favourites',\n },\n },\n },\n\n assets,\n survey,\n}\n\nexport default config\n","export const mapStyle = [\n {\n featureType: 'water',\n elementType: 'geometry.fill',\n stylers: [\n {\n color: '#d3d3d3',\n },\n ],\n },\n {\n featureType: 'transit',\n stylers: [\n {\n color: '#808080',\n },\n {\n visibility: 'off',\n },\n ],\n },\n {\n featureType: 'road.highway',\n elementType: 'geometry.stroke',\n stylers: [\n {\n visibility: 'on',\n },\n {\n color: '#b3b3b3',\n },\n ],\n },\n {\n featureType: 'road.highway',\n elementType: 'geometry.fill',\n stylers: [\n {\n color: '#ffffff',\n },\n ],\n },\n {\n featureType: 'road.local',\n elementType: 'geometry.fill',\n stylers: [\n {\n visibility: 'on',\n },\n {\n color: '#ffffff',\n },\n {\n weight: 1.8,\n },\n ],\n },\n {\n featureType: 'road.local',\n elementType: 'geometry.stroke',\n stylers: [\n {\n color: '#d7d7d7',\n },\n ],\n },\n {\n featureType: 'poi',\n elementType: 'geometry.fill',\n stylers: [\n {\n visibility: 'on',\n },\n {\n color: '#ebebeb',\n },\n ],\n },\n {\n featureType: 'administrative',\n elementType: 'geometry',\n stylers: [\n {\n color: '#a7a7a7',\n },\n ],\n },\n {\n featureType: 'road.arterial',\n elementType: 'geometry.fill',\n stylers: [\n {\n color: '#ffffff',\n },\n ],\n },\n {\n featureType: 'road.arterial',\n elementType: 'geometry.fill',\n stylers: [\n {\n color: '#ffffff',\n },\n ],\n },\n {\n featureType: 'landscape',\n elementType: 'geometry.fill',\n stylers: [\n {\n visibility: 'on',\n },\n {\n color: '#efefef',\n },\n ],\n },\n {\n featureType: 'road',\n elementType: 'labels.text.fill',\n stylers: [\n {\n color: '#696969',\n },\n ],\n },\n {\n featureType: 'administrative',\n elementType: 'labels.text.fill',\n stylers: [\n {\n visibility: 'on',\n },\n {\n color: '#737373',\n },\n ],\n },\n {\n featureType: 'poi',\n elementType: 'labels.icon',\n stylers: [\n {\n visibility: 'off',\n },\n ],\n },\n {\n featureType: 'poi',\n elementType: 'labels',\n stylers: [\n {\n visibility: 'off',\n },\n ],\n },\n {\n featureType: 'road.arterial',\n elementType: 'geometry.stroke',\n stylers: [\n {\n color: '#d6d6d6',\n },\n ],\n },\n {\n featureType: 'road',\n elementType: 'labels.icon',\n stylers: [\n {\n visibility: 'off',\n },\n ],\n },\n {},\n {\n featureType: 'poi',\n elementType: 'geometry.fill',\n stylers: [\n {\n color: '#dadada',\n },\n ],\n },\n]\n","export const serviceChangeFields = [\n { key: 'openingHours', icon: 'far fa-calendar-alt' },\n { key: 'serviceChangesOrClosures', icon: 'fas fa-home' },\n { key: 'extraServicesOrEvents', icon: 'fas fa-plus' },\n { key: 'emergencyContact', icon: 'fas fa-phone' },\n { key: 'eligibilityConditions', icon: 'fas fa-list' },\n]\n","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","import { toJS, isObservable, isObservableArray, isObservableMap, isOb, isObservableObject } from 'mobx'\n\nimport _ from 'lodash'\n\nexport const toJSDeep = (obj) => {\n\n const getNode = (node) => {\n //if (isObservable(node)) return getNode(toJS(node))\n if (isObservableArray(node)) return toJS(node).map(getNode)\n if (isObservableObject(node)) return _.mapValues(toJS(node), getNode)\n\n if (_.isArray(node)) return node.map(getNode)\n if (_.isObject(node)) return _.mapValues(node, getNode)\n\n return node\n }\n\n const r = getNode(obj)\n return r\n}\n","import _ from 'lodash'\n\nimport {\n ApiOutletModel,\n ApiServiceChangeModel,\n ApiOutletModelAddressSummary,\n} from '@ciss/cie-api-orval'\n\nimport { removeNulls } from '@/utils/types'\n\n/**\n * Converts distance in m to friendly\n *\n * @param distance Distance in meters\n * @category Utils\n */\nexport const formatDistance = (distance: number) => {\n if (distance < 0.1) return '< 100 m'\n if (distance < 1.0) return `${(distance * 1000).toFixed(0)} m`\n return `${distance.toFixed(2)} Km`\n}\n\n/**\n * Converts full address sumary to multi-line address\n *\n * Not implemented yet\n *\n * @category Utils\n * @param addressSummary Address Fields from Outlet\n */\nexport const formatAddress = (\n addressSummary?: ApiOutletModelAddressSummary\n) => {\n if (!addressSummary) return\n\n const { buildingAddress, address1, address2, suburb, state, postcode } =\n addressSummary\n\n const lines = [\n [buildingAddress, address1].join(', '),\n address2 || '',\n [suburb, state, postcode].join(' '),\n ].filter((l) => l.length || removeNulls(l))\n\n return lines\n}\n\n/**\n * Selects the first valid service changes\n *\n * @category Utils\n * @param serviceChanges All service changes for an Outlet\n */\nexport const convertServiceChanges = (\n serviceChanges?: ApiServiceChangeModel[]\n) => {\n if (!serviceChanges) return\n if (!serviceChanges || serviceChanges.length < 0) return\n\n const now = new Date()\n\n const svc = serviceChanges\n .map((s) => s as Required<ApiServiceChangeModel>)\n .sort((a, b) => a.id - b.id)\n .find((x) => new Date(x.startDate) <= now && new Date(x.endDate) >= now)\n\n return svc\n}\n","import _ from 'lodash'\nimport { ServiceResult } from './ServiceResult.model'\nimport { formatDistance, convertServiceChanges, formatAddress } from './common'\nimport { ApiSearchResultModel } from '@ciss/cie-api-orval'\nimport { SetRequired } from 'type-fest'\n\n/**\n * Transformer to convert CieApi Service to {@link ServiceResult}\n *\n * @category Models\n */\nexport const serviceResultTransformer = (data: ApiSearchResultModel) => {\n try {\n const cieService = data as SetRequired<\n ApiSearchResultModel,\n 'outlet' | 'service'\n >\n\n if (!cieService) {\n console.warn(`Could not assert CieDirectoryResult`, data)\n return\n }\n\n const { outlet, service } = cieService\n\n const latLng = {\n lat: outlet?.geocodeLat || 0.0,\n lng: outlet?.geocodeLong || 0.0,\n }\n\n const distance = parseFloat(cieService.distance || '0')\n\n const result: ServiceResult = {\n type: 'service',\n id: `service_${service?.id}`,\n organisationId: cieService.organisationID || 0,\n outletId: outlet.outletID || 0,\n outletNickname: outlet.nickname || '',\n serviceId: service?.id || 0,\n category: cieService.category?.name,\n operatingDays: service.operatingDaysDisplay,\n operatingDaysArray: service.operatingDays,\n name:\n service.serviceTitle && service.serviceTitle.length > 0\n ? service.serviceTitle\n : outlet.nickname || '',\n organisationName: cieService.organisationName,\n address: outlet.displayAddress || '',\n addressFields: formatAddress(outlet.address),\n addressWithheld: outlet.displayAddress === '--withheld--',\n phone: outlet.phone || '',\n description: cieService.description || '',\n commissionedServiceId: service.commissionedServiceId,\n url: cieService.url,\n logoUrl: outlet.logoUrl,\n healthEngineId: outlet.healthEngineID,\n healthEngineStatus: outlet.healthEngineStatus,\n // TODO!! move to component\n // healthEngineAppointment: s.healthEngineAppointment,\n regions: outlet.regions || [],\n serviceRegionNames: service.serviceRegionNames || [],\n serviceChanges: convertServiceChanges(outlet.serviceChanges),\n serviceTags: service.serviceTags?.map((t) => t.tagID as number) || [],\n serviceCohortTags:\n service.serviceTags\n ?.filter((t) => t.tagOwnerType === 'Cohort')\n .map((t) => t.tagName as string) || [],\n networks: cieService.networks,\n\n distance,\n distanceLabel: formatDistance(distance),\n\n ...latLng,\n geometry: latLng,\n }\n\n return result\n } catch (e) {\n console.warn(`Failed to transform service id: ${data?.service?.id}`)\n }\n}\n","import { EventResult } from '.'\nimport { ServiceResult } from './ServiceResult.model'\nimport { formatDistance, convertServiceChanges } from './common'\nimport { EventDataViewModel } from '@ciss/cie-api-orval'\nimport { SetRequired } from 'type-fest'\n\n/**\n * Transformer to convert CieApi Event to {@link EventResult}\n *\n * @category Models\n */\nexport const eventResultTransformer = (data: EventDataViewModel) => {\n try {\n const e = data\n\n const latLng = {\n lat: e?.geocodeLat || 0.0,\n lng: e?.geocodeLong || 0.0,\n }\n\n const distance = e.distance || 0\n\n const address = [e.locationTitle, e.locationAddress].join(' ').trim()\n\n const result: EventResult = {\n type: 'event',\n id: `event_${e.eventInstanceID}`,\n search: '',\n name: e.eventName || '',\n day: 'blah', // moment(e.startDate).format('dddd'),\n startDay: e.instanceStartDay || '',\n startMonth: e.instanceStartMonth || '',\n time: e.isAllDay ? 'All Day' : `${e.startTime} - ${e.endTime}`,\n address,\n addressWithheld: address === '--withheld--',\n phone: e.phone1 || '',\n description: e.textOnlyDescription || '',\n url: e.instanceUrl || '',\n locationTitle: e.locationTitle || '',\n // appointmentRequired: e.isAppointmentRequired,\n // appointmentAvalable: e.appointmentAvailability,\n // referralRequired: e.isReferralRequired,\n // additionalInfo: e.additionalInfo,\n // notes: e.notes,\n // serviceChanges: undefined,\n startDate: e.startDate,\n endDate: e.endDay,\n startAt: e.startsAt,\n endAt: e.endsAt,\n repeats: e.repeats,\n repeatEvery: e.repeatEvery,\n repeatOnDay: e.repeatOnDay,\n isAllDay: e.isAllDay,\n distance,\n distanceLabel: formatDistance(distance),\n ...latLng,\n geometry: latLng,\n }\n\n return result\n } catch (e) {\n console.warn(`Failed to transform service id: ${data?.eventInstanceID}`)\n }\n}\n","import { SearchResult } from './types'\nimport { atom, useAtom } from 'jotai'\nimport { useAtomValue, useUpdateAtom, atomWithStorage } from 'jotai/utils'\nimport _ from 'lodash'\nimport { removeAt } from '@/utils/array'\n\nimport { config } from '@/config'\n\n/**\n * Atom for storing favourites\n *\n * @category Atoms\n */\nexport const favouritesAtom = atomWithStorage<SearchResult[]>(\n `ams-${config.appConfig.tenant}-favourites`,\n []\n)\n\n/**\n * Readonly Atom used for quick lookup of favourites status by a Search id\n *\n * @category Atoms\n */\nexport const favouritesAtomLookup = atom<Record<string, number>>((get) =>\n _.fromPairs(get(favouritesAtom).map((f, i) => [f.id, i]))\n)\n\n/**\n * Gets an interface to favourites state for a given search result\n *\n * Uses {@link favouritesAtomLookup} to cache\n *\n * @category Hooks\n */\nexport const useFavourite = (result: SearchResult) => {\n const updateFavourites = useUpdateAtom(favouritesAtom)\n const lookup = useAtomValue(favouritesAtomLookup)\n\n // const index = _.has(lookup, result.id) ? lookup[result.id] || -1\n // const isFavourite = index >= 0\n\n const isFavourite = _.has(lookup, result.id)\n\n // console.log(result.id, isFavourite, lookup)\n\n const toggleFavourite = () =>\n updateFavourites((prev) => {\n // add\n if (!isFavourite) return [result, ...prev]\n\n // remove\n return removeAt(prev, lookup[result.id])\n })\n\n return {\n /**\n * ????????\n */\n isFavourite,\n toggleFavourite,\n }\n}\n\n/**\n * Gets the complete list of favourites\n *\n * Uses {@link favouritesAtom}\n *\n * @category Hooks\n */\nexport const useFavourites = () => useAtomValue(favouritesAtom)\n","import { atom, useAtom } from 'jotai'\nimport { atomFamily, useAtomValue } from 'jotai/utils'\nimport { useInfiniteResultsTransform } from './infinite-results-transform'\nimport { serviceResultTransformer, eventResultTransformer } from '../models'\nimport {\n ApiResponse,\n SearchQueryProps,\n SearchResult,\n SearchInnerQueryReturnType,\n SearchResultsBase,\n SearchResultsReturnType,\n} from './types'\nimport {\n searchDirectory,\n searchDiary,\n ApiSharedSearchResponseOfApiSearchResultModel,\n ApiSharedSearchResponseOfEventDataViewModel,\n ApiSearchResultModel,\n SearchRequestModelBody,\n getSearchDirectoryQueryKey,\n getSearchDiaryQueryKey,\n ApiRequestModel,\n EventDataViewModel,\n} from '@ciss/cie-api-orval'\nimport _ from 'lodash'\nimport { useEffect } from 'react'\nimport {\n hashQueryKey,\n useInfiniteQuery,\n QueryFunction,\n GetNextPageParamFunction,\n QueryKey,\n InfiniteData,\n} from 'react-query'\nimport { useFavourites } from './favourites'\n\n// type R = ApiSharedSearchResponseOfApiSearchResultModel\n\n// type ModelForApiListResponse<T extends { data?: unknown[] }> = NonNullable<\n// T['data']\n// >[number]\n\n// type DResp = ModelForApiListResponse<R>\n\n/**\n * Atom family containing search query results\n *\n * @category Atoms\n * @param searchId Id of the search (tab)\n */\nexport const searchResultsAtomFamily = atomFamily((searchId: string) =>\n atom<SearchResultsReturnType | undefined>(undefined)\n)\n\n/**\n * Hook to get readonly contents of {@link searchResultsAtomFamily}\n *\n * @category Hooks\n * @param searchId Id of the search (tab)\n */\nexport const useSearchResults = (searchId: string) => {\n // console.log(searchQueryAtomFamily)\n return useAtomValue(searchResultsAtomFamily(searchId))\n}\n\n/**\n * Read/Write hook used by {@link useUpdateSearchResultsAtom} to diff\n * & update search results\n *\n * @category Hooks\n * @param searchId Id of the search (tab)\n */\nexport const useSearchResultsAtom = (searchId: string) =>\n useAtom(searchResultsAtomFamily(searchId))\n\n/**\n * Forwards search results to atom for use by {@link useSearchResults}\n *\n * @category Hooks\n * @internal\n */\nconst useUpdateSearchResultsAtom = (\n searchId: string,\n results: SearchResultsReturnType\n) => {\n const [, updateResults] = useSearchResultsAtom(searchId)\n\n const base = results as SearchResultsBase\n const query = results as SearchInnerQueryReturnType\n\n const effectArray =\n 'queryKey' in results\n ? [\n hashQueryKey(results.queryKey),\n query.status,\n query.hasNextPage,\n query.isFetchingNextPage,\n ]\n : [results.results?.flat.map((r) => r.id).join(',')]\n\n useEffect(() => {\n // console.log('updating atom', { searchId, results })\n updateResults(results)\n }, effectArray)\n}\n\n/**\n * Generic wrapper for {@link useDirectorySearch} & {@link useDiarySearch}\n *\n * @category Hooks\n * @internal\n * @template TResponse The response returned by CieApi\n * @template TModel The internal Model (i.e. response.data)\n * @template TParams Body request\n * @param props.queryKeyFn Orval queryKey generator function\n * @param props.cieApiFn Orval api function\n * @param props.nextPageParam i.e. pageNumber or pageNo\n * @param props.transformer transformer used by {@link useInfiniteResultsTransform}\n */\nexport const useCieInfiniteSearch = <\n TResponse extends { data?: TModel[] },\n TModel = unknown,\n TParams = unknown\n // TResult extends ServiceResult | EventResult,\n // TModel = unknown\n>(\n props: SearchQueryProps<TParams> & {\n queryKeyFn: (params: TParams) => QueryKey\n cieApiFn: (params: TParams) => Promise<TResponse>\n nextPageParam: string\n transformer: (model: TModel) => SearchResult | undefined\n }\n): SearchResultsReturnType<TResponse, unknown> | undefined => {\n const {\n queryKeyFn,\n cieApiFn,\n nextPageParam,\n transformer,\n searchType,\n searchId,\n querySummary,\n enabled,\n params: startParams,\n } = props\n\n const queryKey = queryKeyFn(startParams)\n\n const queryFn: QueryFunction<TResponse> = ({ queryKey, pageParam }) => {\n const params = queryKey[1] as TParams\n return cieApiFn({ ...params, ...pageParam })\n }\n\n const getNextPageParam: GetNextPageParamFunction<TResponse> = (\n lastPage,\n allPages\n ) => {\n if (!lastPage.data?.length) return\n return { [nextPageParam]: allPages.length + 1 }\n }\n\n const query = useInfiniteQuery({\n enabled,\n queryKey,\n queryFn,\n getNextPageParam,\n })\n\n const transformed = useInfiniteResultsTransform({\n queryKey,\n data: query.data,\n transformer,\n })\n\n const results: SearchResultsBase = {\n searchType,\n searchId,\n querySummary,\n results: query?.data &&\n transformed && {\n pageParams: query.data.pageParams,\n pages: transformed.pages,\n flat: _.flatten(transformed.pages),\n },\n }\n\n const inner: SearchInnerQueryReturnType<TResponse, unknown> = {\n queryKey,\n ...query,\n }\n\n const ret: SearchResultsReturnType<TResponse, unknown> = {\n ...results,\n ...inner,\n }\n\n useUpdateSearchResultsAtom(searchId, ret)\n\n return ret\n // return undefined\n}\n\n/**\n * Static props for {@link useSearchDirectory}\n *\n * @category Props\n */\nexport type DirectorySearchProps = SearchQueryProps<ApiRequestModel>\n\n/**\n * Directory implementation of @{useCieInfiniteSearch}\n *\n * @category Hooks\n * @param props Props generated by search store (search.queryProps)\n */\nexport const useDirectorySearch = (props: DirectorySearchProps) =>\n useCieInfiniteSearch<\n ApiSharedSearchResponseOfApiSearchResultModel,\n ApiSearchResultModel,\n ApiRequestModel\n >({\n ...props,\n queryKeyFn: getSearchDirectoryQueryKey,\n cieApiFn: searchDirectory,\n nextPageParam: 'pageNumber',\n transformer: serviceResultTransformer,\n })\n\n/**\n * Static props for {@link useDiarySearch}\n *\n * @category Props\n */\nexport type DiarySearchProps = SearchQueryProps<SearchRequestModelBody>\n\n/**\n * Diary implementation of @{useCieInfiniteSearch}\n *\n * @category Hooks\n * @param props Props generated by search store (search.queryProps)\n */\nexport const useDiarySearch = (props: DiarySearchProps) =>\n useCieInfiniteSearch<\n ApiSharedSearchResponseOfEventDataViewModel,\n EventDataViewModel,\n SearchRequestModelBody\n >({\n ...props,\n queryKeyFn: getSearchDiaryQueryKey,\n cieApiFn: searchDiary,\n nextPageParam: 'pageNo',\n transformer: eventResultTransformer,\n })\n\n/**\n * Static props for {@link useFavouritesSearch}\n *\n * @category Props\n */\nexport type FavouritesSearchProps = SearchQueryProps<any>\n\n/**\n * Favourites wrapper for ResultsList\n *\n * Uses favourites atoms\n *\n * @category Hooks\n */\nexport const useFavouritesSearch = (\n props: FavouritesSearchProps\n): SearchResultsBase | undefined => {\n const { searchType, searchId } = props\n\n const favourites = useFavourites()\n\n const ids = favourites.map((f) => f.id).join(',')\n // console.log({ ids })\n\n const results: SearchResultsBase = {\n searchType,\n searchId,\n results: {\n pageParams: [],\n pages: [favourites],\n flat: favourites,\n },\n }\n\n useUpdateSearchResultsAtom(searchId, results)\n\n return results\n}\n","import { useState, useEffect } from 'react'\nimport _, { transform } from 'lodash'\nimport { removeNulls } from '@/utils/types'\n\nimport { QueryKey, InfiniteData, hashQueryKey } from 'react-query'\nimport { ApiResponse } from '.'\nimport { ServiceResult, EventResult } from '..'\n\n// import { ModelForApiListResponse } from '..'\n\n/**\n * Transforms response from CieApi search to UI models\n *\n * Data is returned in pages, and this uses intenal state\n * to render only new pages.\n *\n * @category Hooks\n * @template TResponse The response returned by CieApi\n * @template TParams The body type sent to CieApi\n * @template TModel The internal Model (i.e. response.data)\n * @param props.queryKey QueryKey (used to hash to detect\n * change of queries)\n * @param props.data Paged query results from CieApi\n * @param props.transformer Function to convert to UI model\n */\nexport const useInfiniteResultsTransform = <\n TResponse extends { data?: TModel[] },\n TResult extends ServiceResult | EventResult,\n TModel = unknown\n>(props: {\n queryKey: QueryKey\n data?: InfiniteData<TResponse>\n // select?: (response: TResponse) => TModel[] | undefined\n transformer: (data: TModel) => TResult | undefined\n}) => {\n const {\n queryKey,\n data,\n // select = response => response,\n transformer,\n } = props\n\n const queryKeyHash = hashQueryKey(queryKey)\n\n const [history, setHistory] = useState<{\n queryKeyHash: string\n pages?: TResult[][]\n }>({\n queryKeyHash,\n })\n\n const isNewQuery = queryKeyHash !== history.queryKeyHash\n\n const newPages = data?.pages.slice(history.pages?.length)\n\n // preserves empty pages for diffing\n\n const selected = newPages?.map(\n (response) => response.data || []\n // select inner data of api responses\n // (<{ data?: TModel[] }>response).data\n // naked response data\n // <TModel[]>response\n )\n\n // removes empty items from results (i.e. soft failed transforms)\n\n const newResults = selected?.map(\n (page) => page.map(transformer).filter(removeNulls) || []\n )\n\n const results = {\n queryKeyHash,\n pages: [...((!isNewQuery && history.pages) || []), ...(newResults || [])],\n }\n\n if (isNewQuery || newResults?.length) {\n setHistory(results)\n }\n\n return results\n}\n","import {\n DirectorySearchProps,\n DiarySearchProps,\n FavouritesSearchProps,\n useDirectorySearch,\n useDiarySearch,\n useFavouritesSearch,\n} from '../queries'\nimport { SearchType } from '../queries/types'\nimport _ from 'lodash'\nimport { observer, useObserver } from 'mobx-react-lite'\nimport React, { FC, useEffect } from 'react'\n\n/**\n * Entry FC for {@link useDirectorySearch}\n *\n * @category Components\n * @internal\n */\nconst DirectorySearch: FC<DirectorySearchProps> = (props) => {\n useDirectorySearch(props)\n return null\n}\n\n/**\n * Entry FC for {@link useDiarySearch}\n *\n * @category Components\n * @internal\n */\nconst DiarySearch: FC<DiarySearchProps & { searchId: string }> = (props) => {\n useDiarySearch(props)\n return null\n}\n\n/**\n * Entry FC for {@link useFavouritesSearch}\n *\n * @category Components\n * @internal\n */\nconst FavouritesSearch: FC<FavouritesSearchProps & { searchId: string }> = (\n props\n) => {\n useFavouritesSearch(props)\n return null\n}\n\n/**\n * Host component for search query\n *\n * @category Components\n */\nexport const SearchQueryHost = observer((props: { queryProps: any }) => {\n const { queryProps } = props\n const { searchType } = queryProps\n\n const t = searchType as SearchType\n if (!t) return null\n\n if (t === 'directory') return <DirectorySearch {...queryProps} />\n if (t === 'diary') return <DiarySearch {...queryProps} />\n if (t === 'favourites') return <FavouritesSearch {...queryProps} />\n\n return null\n})\n\n// export const SearchQueryHost = observer(SearchQueryHostInner)\n","import _ from 'lodash'\n\n/**\n * Formats array of strings to human friendly list\n */\nexport const toEnglishList = (\n items: string[],\n opts: { delimiter?: string; terminator?: string }\n) => {\n const { delimiter = ', ', terminator = ' and ' } = opts || {}\n\n if (!Array.isArray(items)) return null\n if (items.length <= 2) return items.join(terminator)\n\n return [_.take(items, items.length - 1).join(delimiter), _.last(items)].join(\n terminator\n )\n}\n\nexport const reomveDuplicateAndUpperCaseTheFisrtCharacter = (\n names: string[]\n) => {\n const uniqueNames = Array.from(\n new Set(names.map((name) => name.toLowerCase()))\n )\n return uniqueNames.map((name) =>\n name\n .split(' ')\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ')\n )\n}\n","import axios from 'axios'\n// import { appConfig } from '@/config'\nimport { config } from '@/config'\nimport _ from 'lodash'\nimport humps from 'lodash-humps'\nimport keyBy from 'lodash/keyBy'\nimport moment from 'moment'\nimport pLimit from 'p-limit'\nimport Qs from 'qs'\nimport { matchesTerms } from '@/ui/utils/object-filter'\n\nconst { appConfig } = config\n\n// const { appConfig } = config\n\nexport const client = axios.create({\n baseURL: appConfig.apiURL,\n // baseURL: 'https://www.mcdapi.com/api/v1',\n // baseURL: 'http://qaapi.mycommunitycentral.com/api/v1',\n timeout: 30000,\n headers: { Authorization: `ApiKey ${appConfig.apiKey}` },\n})\n\nexport const clienth = axios.create({\n baseURL: appConfig.apiURL,\n timeout: 30000,\n headers: { Authorization: `ApiKey ${appConfig.apiKey}` },\n transformRequest: humps,\n})\n\n// states\n\n// ??\nexport const getState = async (state) => {\n const result = await clienth.get(`/system/state/${state}`)\n if (!result?.data) throw new Error('Not Found')\n\n return {\n state: result.data,\n }\n}\n\nexport const getStates = async () => {\n const result = humps(await client.get(`/system/states`))\n if (!result?.data) throw new Error('Not Found')\n\n return {\n states: humps(result.data),\n }\n}\n\n// councils\n\nexport const getCouncilsForState = async ({ state }) => {\n // get the state\n\n const rstate = humps(await client.get(`/system/states/name/${state}`))\n if (!rstate.data) throw new Error('Not Found')\n\n // get councils\n const councils = humps(\n await client.get(`/system/councils/state/${rstate.data.shortUrl}`)\n )\n\n return {\n state: rstate.data,\n councils: councils.data || [],\n }\n}\n\n// localities\n\nexport const getLocalitiesForCouncil = async ({ state, council }) => {\n const [rstate, rcouncil, localities] = (\n await Promise.all([\n client.get(`/system/states/name/${state}`),\n client.get(`/system/councils/name/${state}/${council}`),\n client.get(`/system/localities/council/${state}/${council}`),\n ])\n ).map((r) => humps(r))\n\n if (!rstate.data || !rcouncil.data) throw new Error('Not Found')\n\n return {\n state: rstate.data,\n council: rcouncil.data,\n localities: localities.data?.data || [],\n }\n}\n\nexport const getLocalityByParams = async ({ state, council, locality }) => {\n if (!state || !council || !locality) return null\n\n const result = await client.get(\n `/system/localities/name/${state}/${council}/${locality}`\n )\n const rdata = result?.data?.data\n\n return rdata ? toLocation(rdata) : null\n}\n\n// location\n\nconst toLocation = (loc) => ({\n type: 'locality',\n id: loc.LocalityID,\n label: loc.Name,\n name: loc.LocationName,\n councilId: loc.CouncilID,\n state: loc.State,\n postcode: loc.Postcode,\n lat: loc.Latitude,\n lng: loc.Longitude,\n url: loc.Url,\n councilUrl: loc.CouncilUrl,\n stateUrl: loc.StateUrl,\n})\n\nexport const toLocationL = (loc) => ({\n type: 'locality',\n id: loc.localityId,\n label: loc.name,\n name: loc.locationName,\n councilId: loc.councilId,\n state: loc.state,\n postcode: loc.postcode,\n lat: loc.latitude,\n lng: loc.longitude,\n url: loc.url,\n councilUrl: loc.councilUrl,\n stateUrl: loc.stateUrl,\n})\n\nexport const toLocalityL = (sloc) => ({\n localityId: sloc.id,\n name: sloc.label, // label: loc.name,\n locationName: sloc.name, //name: loc.locationName,\n councilId: sloc.councilId,\n state: sloc.state,\n postcode: sloc.postcode,\n latitude: sloc.lat,\n longitude: sloc.lng,\n url: sloc.url,\n councilUrl: sloc.councilUrl,\n stateUrl: sloc.stateUrl,\n})\n\nexport const getLocation = async ({ lat, lng }) => {\n try {\n const result = await client.get(`/system/localities/${lat}/${lng}`)\n\n if (result.data) return toLocation(result.data)\n } catch (error) {\n console.error(error)\n }\n}\n\nexport const getLocation2 = async ({ lat, lng }) => {\n if (!lat || !lng) return undefined\n\n const result = await client.get(`/system/localities/${lat}/${lng}`)\n\n if (result.data) return toLocation(result.data)\n\n return null\n}\n\nexport const getLocationSuggestions = async ({\n searchTerm,\n councils,\n states,\n}) => {\n // const filterFns = filterDefs.map(matchesTerms)\n // const filter = v => filterFns.every(f => f(v))\n\n if (!searchTerm || searchTerm.length < 3) return\n\n const queryParams = (() => {\n const qstr = Qs.stringify({\n ...(_.isArray(councils) && { limitToCouncils: councils.join('|') }),\n ...(_.isArray(states) && { limitToStates: states.join('|') }),\n })\n\n return qstr && `?${qstr}`\n })()\n\n const result = await client.post(`/system/localities/search${queryParams}`, {\n SearchTerm: searchTerm,\n })\n\n if (!result.data?.success) return\n\n const res = (result.data?.data || []).map(toLocation) // .filter(filter)\n\n return res\n}\n\n// directory\n\nconst convertServiceChanges = (sc) => {\n if (!sc || sc.length < 0) return null\n\n const now = new Date()\n\n const scv = humps(\n sc\n .sort((a, b) => a.id - b.id)\n .find((x) => new Date(x.StartDate) <= now && new Date(x.EndDate) >= now)\n )\n\n return scv\n}\n\nconst toService = (s) => ({\n type: 'service',\n id: `${s.Service.ID}`,\n category: s.Category.Name,\n operatingDays: s.Service.OperatingDaysDisplay,\n name:\n s.Service.ServiceTitle && s.Service.ServiceTitle.length > 0\n ? s.Service.ServiceTitle\n : s.Outlet.Nickname,\n address: s.Outlet.DisplayAddress,\n phone: s.Outlet.Phone,\n description: s.Description,\n outletId: s.Outlet.OutletID,\n commissionedServiceId: s.Service.CommissionedServiceId,\n url: s.Url,\n logoUrl: s.Outlet.LogoUrl,\n healthEngineId: s.Outlet.HealthEngineID,\n healthEngineStatus: s.Outlet.HealthEngineStatus,\n healthEngineAppointment: s.HealthEngineAppointment,\n lat: s.Outlet.GeocodeLat,\n lng: s.Outlet.GeocodeLong,\n distance: parseFloat(s.Distance),\n serviceChanges: convertServiceChanges(s.Outlet.ServiceChanges),\n serviceTags: (s.Service.ServiceTags || []).map((t) => t.TagID),\n networks: humps(s.Networks),\n})\n\nexport const searchDirectory = async (\n request,\n axiosConfig,\n url = '/directory/search'\n) => {\n try {\n // console.log(JSON.stringify(request, null, 2))\n const res = await client.post(url, request, axiosConfig)\n\n console.log('searchDirectory', res)\n\n // console.log(humps(res.data.data))\n\n if (!res.data.success) throw new Error('search api failed')\n\n // console.log(res.data.total, res.data.data.length)\n\n // const oids = res.data.data.map(r => r.Outlet.OutletID)\n const heids = res.data.data\n .filter((r) => r.Outlet.HealthEngineStatus === 'A')\n .map((r) => ({\n outletId: r.Outlet.OutletID,\n serviceId: r.Service.ID,\n healthEngineId: r.Outlet.HealthEngineID,\n }))\n\n // parallel async secondary lookups\n\n const [ham] = await Promise.all([\n // lookupHolidayNotices(oids),\n lookupAppointments(heids),\n ])\n\n const fullResults = res.data.data.map((r) => ({\n ...r,\n // HolidayNotices: r.Outlet.OutletID in hnm ? humps(hnm[r.Outlet.OutletID]) : null,\n HealthEngineAppointment: r.Service.ID in ham ? ham[r.Service.ID] : null,\n }))\n\n return {\n total: res.data.total,\n results: fullResults.map(toService),\n }\n } catch (err) {\n console.error(err)\n throw err\n }\n}\n\nexport const searchDirectoryHealth = async (request) => {\n try {\n const url = '/listings/gethealthresults'\n const res = await client.get(url, { params: request })\n\n if (res.status !== 200) throw new Error(`search api failed ${res.status}`)\n\n const oids = res.data.Results.map((r) => r.Outlet.OutletID)\n const heids = res.data.Results.filter(\n (r) => r.Outlet.HealthEngineStatus === 'A'\n ).map((r) => ({\n outletId: r.Outlet.OutletID,\n serviceId: r.Service.ID,\n healthEngineId: r.Outlet.HealthEngineID,\n }))\n\n // parallel async secondary lookups\n\n const [hnm, ham] = await Promise.all([\n lookupHolidayNotices(oids),\n lookupAppointments(heids),\n ])\n\n const fullResults = res.data.Results.map((r) => ({\n ...r,\n HolidayNotices:\n r.Outlet.OutletID in hnm ? humps(hnm[r.Outlet.OutletID]) : null,\n HealthEngineAppointment: r.Service.ID in ham ? ham[r.Service.ID] : null,\n }))\n\n return {\n total: res.data.Total,\n results: fullResults.map(toService),\n }\n } catch (err) {\n console.error(err)\n throw err\n }\n}\n\n// diary\n\nconst toEvent = (e) => ({\n type: 'event',\n id: `${e.EventInstanceID}`,\n name: e.EventName,\n day: moment(e.StartDate).format('dddd'),\n startDay: e.InstanceStartDay,\n startMonth: e.InstanceStartMonth,\n time: e.IsAllDay ? 'All Day' : `${e.StartTime} - ${e.EndTime}`,\n address: [e.LocationTitle, e.LocationAddress].join(' ').trim(),\n phone: e.Phone1,\n description: e.TextOnlyDescription,\n url: e.InstanceUrl,\n lat: e.GeocodeLat,\n lng: e.GeocodeLong,\n distance: e.Distance,\n serviceChanges: e.HolidayNotices,\n appointmentRequired: e.IsAppointmentRequired,\n appointmentAvalable: e.AppointmentAvailability,\n referralRequired: e.IsReferralRequired,\n additionalInfo: e.AdditionalInfo,\n notes: e.Notes,\n})\n\nexport const searchDiary = async (\n request,\n axiosConfig,\n url = '/search/diary/getresults'\n) => {\n try {\n // console.log('searchDiary', url, request)\n const res = await client.get(url, { params: request }, axiosConfig)\n\n // console.log('res', res)\n\n const oids = res.data.map((r) => r.OwnerOutletID)\n const hnm = await lookupHolidayNotices(oids)\n\n const fullResults = res.data.map((r) => ({\n ...r,\n HolidayNotices: r.OwnerOutletID in hnm ? hnm[r.OwnerOutletID] : null,\n }))\n\n const frm = fullResults.map(toEvent)\n\n // console.log('fullResults', fullResults, frm)\n\n return {\n total: -1,\n results: frm,\n }\n } catch (err) {\n console.error(err)\n throw err\n }\n}\n\n// secondary lookups\n\nexport const lookupHolidayNotices = async (outletIds) => {\n try {\n const hn = await client.get('/manage/locations/holidaynotices', {\n params: { outletId: outletIds },\n paramsSerializer: (params) => Qs.stringify(params, { indices: false }),\n })\n\n if (!hn.data.data) return {}\n\n const hnm = keyBy(hn.data.data, 'OutletID')\n\n return hnm\n } catch (err) {\n console.error(err)\n return {}\n }\n}\n\nexport const lookupAppointments = async (heids) => {\n const nextAppt = async ({ outletId, serviceId, healthEngineId }) => {\n try {\n const na = await client.get(\n `/healthengine/nextappointment/${outletId}/${serviceId}/${healthEngineId}`\n )\n return na.data.data ? { serviceId, nextAppointment: na.data.data } : null\n } catch (err) {\n console.error(err)\n return null\n }\n }\n\n const limit = pLimit(10)\n const batch = heids.map((args) => limit(() => nextAppt(args)))\n const heres = await Promise.all(batch)\n\n return heres\n .filter((r) => r)\n .reduce((obj, val) => {\n obj[val.serviceId] = val.nextAppointment\n return obj\n }, {})\n}\n\n// support ticket\n\nexport const submitSupportTicket = async (ticket) => {\n // return false\n try {\n const res = await client.post('/email/support', ticket)\n return !!res?.data?.success\n } catch (err) {\n console.error(err)\n return false\n }\n}\n\n// analytics\n\nexport const logAnalytics = async ({ index, payloads }) => {\n const res = await client.post('/analytics/ams/log', { index, payloads })\n return res\n}\n\nexport const getPromotions = async ({ tenant, councilId }) => {\n if (!councilId) return\n\n const response = humps(await client.get(`/promotions/${tenant}/${councilId}`))\n return response?.data\n}\n\nexport const getCommissionedServicesByOutlet = async (outletId) => {\n const result = await client.get(`/commissionedservices/outlet/${outletId}`)\n\n if (!result.data?.data || !result.data?.success) return null\n\n return humps(result.data.data)\n}\n\nconst toGeography = ({ member, ...gm }) => {\n return {\n type: 'geography',\n id: gm.geographyId,\n label: gm.title,\n dataset: gm.dataset,\n lat: gm.centralLatitude,\n lng: gm.centralLongitude,\n area: gm.area,\n kmlUrl: gm.kmlLocation,\n lgas: gm.lgas,\n\n // sponsors (.../geographies/members/...)\n ...(member && { member }),\n }\n}\n\nexport const getGeographyById = async (id) => {\n const result = humps(await client.get(`/system/geographies/id/${id}`)).data\n\n if (!result.data || !result.success) return null\n\n return toGeography(result.data)\n}\n\nexport const getGeographyByDataset = async (dataset) => {\n const geog = humps(await client.get(`/system/geographies/${dataset}`)).data\n\n if (!geog.data || !geog.success) return null\n\n const lgas = (\n await Promise.all(\n geog.data.map((g) =>\n client.get(`/system/geographies/intersections/LGA/id/${g.geographyId}`)\n )\n )\n )\n .map(humps)\n .map((gis) => gis.data?.data.map((gi) => gi.otherGeographyId))\n\n const res = _.zip(geog.data, lgas)\n .map((g) => ({ ...g[0], lgas: g[1] }))\n .map(toGeography)\n\n return res\n}\n\nexport const getGeographyMembers = async ({ id, lat, lng }) => {\n if (!id) return []\n\n const result = await client.get(`/system/geographies/members/${lat}/${lng}`)\n\n if (!result.data?.data || !result.data?.success) return null\n\n return humps(result.data.data).map(toGeography)\n}\n\n// select\n\nconst selectFetches = {\n unmapped: async (source) => {\n console.error('unmaped selectFetch', source)\n },\n geography: async (source) => {\n const res = await getGeographyById(source.id)\n return [\n {\n ...res,\n label: source.label || res.label,\n default: source.default,\n },\n ]\n },\n dataset: async (source) => {\n const res = await getGeographyByDataset(source.id)\n const ress = _.orderBy(res, ['label'], ['asc'])\n return ress\n },\n}\n\nexport const getGeographySelectOptions = async (paramConfig) => {\n const sourceFetches = paramConfig.sources.map((s) => {\n const fn =\n s.type in selectFetches ? selectFetches[s.type] : selectFetches.unmapped\n return fn(s)\n })\n\n const allResults = _.flatten(\n (await Promise.all(sourceFetches)).filter((x) => x)\n )\n return allResults\n}\n\nexport const getOutletsByOrgId = async (id) => {\n const result = await client.get(`/system/outlets/orgId/${id}`)\n if (!result.data?.data || !result.data?.success) return null\n return result.data\n}\n","import React, { useEffect } from 'react'\n\nimport { makeStyles } from '@mui/styles'\nimport {\n Accordion,\n AccordionSummary,\n AccordionDetails,\n Typography,\n} from '@mui/material'\n\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore'\nimport scrollIntoView from 'scroll-into-view-if-needed'\n\nconst useStyles = makeStyles(theme => ({\n root: {\n backgroundColor: '#fafafa',\n margin: theme.spacing(2, 0),\n // boxShadow: 'none',\n boxShadow: '0px 1px 1px 0px rgba(0, 0, 0, 0.12)',\n '&:before': {\n backgroundColor: 'rgba(0, 0, 0, 0)',\n },\n },\n title: {\n fontSize: 18,\n fontWeight: 400,\n [theme.breakpoints.down('sm')]: {\n fontSize: 16,\n },\n },\n details: {\n display: 'flex',\n flexDirection: 'column',\n paddingTop: theme.spacing(0),\n paddingBottom: theme.spacing(5),\n },\n}))\n\nconst MarkdownAccordion = ({\n summaryText,\n expanded,\n onAccordionClick,\n children,\n}) => {\n const classes = useStyles()\n\n const id = summaryText\n .toLowerCase()\n .replace(/([^a-zA-Z0-9]+)/g, '_')\n .replace(/_$/g, '')\n\n useEffect(() => {\n if (id !== expanded) return\n\n const el = document.getElementById(`${id}_top`)\n if (!el) return\n\n setTimeout(() => {\n scrollIntoView(el, {\n scrollMode: 'always',\n behavior: 'smooth',\n block: 'start',\n })\n }, 100)\n\n }, [expanded, id])\n\n return (\n <>\n <div id={`${id}_top`} />\n <Accordion\n classes={{\n root: classes.root,\n }}\n expanded={expanded === id}\n onChange={() => onAccordionClick(id)}\n square\n >\n <AccordionSummary\n expandIcon={<ExpandMoreIcon />}\n aria-controls={id}\n id={id}\n >\n <Typography variant=\"h6\" className={classes.title}>\n {summaryText}\n </Typography>\n </AccordionSummary>\n <AccordionDetails className={classes.details}>\n {children}\n </AccordionDetails>\n </Accordion>\n </>\n )\n}\n\nexport default MarkdownAccordion\n","import React from 'react'\n\nimport _ from 'lodash'\nimport { Link as RouterLink } from 'react-router-dom'\n\nimport clsx from 'clsx'\n\nimport { makeStyles, withStyles } from '@mui/styles'\nimport { Container, Grid, Box, Button, Link, Icon } from '@mui/material'\nimport { useConfig } from '@/config'\nimport { useRootStore } from '@/stores/root/store'\nimport { height } from '@mui/system'\n\nconst homeButtonStyles = () => ({\n root: {},\n iconContainer: {},\n label: {},\n})\n\nconst HomeButton = withStyles(homeButtonStyles, { name: 'AMSHomeButton' })(\n (props) => {\n const {\n id,\n classes,\n color = 'primary',\n variant = 'contained',\n elevation = 2,\n label = 'Unnamed Button',\n icon = 'fas fa-question',\n route: to = '/404',\n sx: buttonSx = {},\n layout = 'column',\n toTab = null,\n loadiconWithId = false,\n } = props || {}\n\n const store = useRootStore()\n\n const { tenantConfig: tc } = useConfig()\n const btnDict = tc?.ui?.homeButtons?.iconImgSet\n\n const IconComp = () => {\n if (btnDict && loadiconWithId) {\n return btnDict[id]?.src\n }\n return <Box as=\"i\" className={icon} />\n }\n\n let btnSX = {\n flexDirection: 'column',\n minHeight: '22vh',\n p: 2,\n py: { xs: 2, md: 6 },\n justifyContent: 'flex-center',\n alignItems: 'flex-center',\n ...buttonSx,\n }\n\n let iconSX = {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n fontSize: { xs: '1.6rem', md: '2.38rem' },\n }\n\n let labelSX = {\n mt: 2,\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n textAlign: 'center',\n fontSize: '1.125rem',\n }\n if (layout === 'row') {\n btnSX = {\n flexDirection: 'row',\n p: 5,\n minHeight: '21vh',\n justifyContent: 'flex-center',\n alignItems: 'flex-center',\n ...buttonSx,\n }\n iconSX = {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n padding: '15px',\n fontSize: { xs: '1.6rem', md: '2.38rem' },\n }\n labelSX = {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n textAlign: 'center',\n fontSize: '1.125rem',\n }\n }\n if (props.btnStyle) {\n btnSX = { borderRadius: props.btnStyle, ...btnSX }\n }\n const handleHomeBtnClick = (toTab, to) => {\n if (toTab !== null) {\n store.search.ui.setSelectedTab(toTab)\n }\n }\n\n let isExternalLink = to.startsWith('http')\n\n return isExternalLink ? (\n <a href={to} target=\"_blank\" rel=\"noopener noreferrer\">\n <Button\n // component={RouterLink}\n className={classes.root}\n variant={variant}\n color={color}\n elevation={elevation}\n sx={btnSX}\n fullWidth\n onClick={() => handleHomeBtnClick(toTab, to)}\n >\n <Box className={classes.iconContainer} sx={iconSX}>\n {IconComp()}\n {/* <Box as=\"i\" className={icon} /> */}\n {/* <img src=\"/static/media/cutlery.a3e2a3f7.png\"></img> */}\n </Box>\n <Box className={classes.label} sx={labelSX}>\n {label}\n </Box>\n </Button>\n </a>\n ) : (\n <Button\n component={RouterLink}\n className={classes.root}\n variant={variant}\n color={color}\n elevation={elevation}\n to={to}\n sx={btnSX}\n fullWidth\n onClick={() => handleHomeBtnClick(toTab)}\n >\n <Box className={classes.iconContainer} sx={iconSX}>\n {/* <Box as=\"i\" className={icon} /> */}\n {IconComp()}\n </Box>\n <Box className={classes.label} sx={labelSX}>\n {label}\n </Box>\n </Button>\n )\n }\n)\n\nconst homeButtonsStyles = (theme) => ({\n root: {},\n})\n\nconst HomeButtons = (props) => {\n const { classes, maxWidth = 'md', spacing = 2, gridProps } = props\n\n const { tenantConfig: tc } = useConfig()\n const stackStyle = { grid: 6, column: 12, row: 4 }\n const config = tc.ui?.homeButtons || {}\n const displayMode = tc.ui?.homeButtons?.mode ?? 'grid'\n\n const { buttons } = config\n\n if (!buttons.length) return null\n\n return (\n <Box\n sx={{\n // border: '2px solid red',\n my: 3,\n // mx: -spacing,\n // margin: '0 auto',\n mx: 'auto',\n maxWidth,\n }}\n >\n <Grid container spacing={spacing}>\n {buttons.map((button, i) => (\n <Grid\n item\n key={i}\n {...{ xs: 12, md: stackStyle[displayMode], ...gridProps }}\n >\n <HomeButton {...button} />\n </Grid>\n ))}\n </Grid>\n </Box>\n )\n}\n\nexport default withStyles(homeButtonsStyles, { name: 'AMSHomeButtons' })(\n HomeButtons\n)\n","import React from 'react'\n\nimport { observer } from 'mobx-react-lite'\nimport { Link as RouterLink } from 'react-router-dom'\nimport { useAnalytics } from 'use-analytics'\nimport clsx from 'clsx'\n\nimport { makeStyles } from '@mui/styles'\nimport { Button, Typography } from '@mui/material'\n\nimport { useRootStore } from '@/stores/root/store'\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n [theme.breakpoints.down('xs')]: {\n flexDirection: 'column',\n '& > *': {\n margin: theme.spacing(1, 0),\n },\n },\n },\n label: {\n fontSize: 15,\n // marginRight: theme.spacing(1),\n [theme.breakpoints.up('xs')]: {\n marginRight: theme.spacing(1),\n },\n },\n icon: {\n marginRight: theme.spacing(1),\n },\n}))\n\nexport const PreviousSearch = observer(({ route }) => {\n const store = useRootStore()\n const classes = useStyles()\n const { track } = useAnalytics()\n\n if (!store.search.params.location) return null\n\n const handleClick = () => {\n track('homePageButtonClick', {\n category: 'Navigation',\n label: 'Previous Search',\n })\n }\n\n return (\n <div className={classes.root}>\n <Typography align=\"center\" className={classes.label} variant=\"body2\">\n Continue to your\n </Typography>\n\n <Button\n color=\"primary\"\n variant=\"outlined\"\n to=\"/search\"\n size=\"small\"\n component={RouterLink}\n onClick={handleClick}\n >\n <i className={clsx('fas fa-search fa-fw', classes.icon)} />\n Previous Search\n </Button>\n </div>\n )\n})\n\nexport default PreviousSearch\n","import React from 'react'\n\nimport { withStyles } from '@mui/styles'\nimport { Box, Typography } from '@mui/material'\n\nimport { withVariantStyles } from '@/ui/theme/TenantTheme'\nimport { useConfig } from '@/config'\n\nconst styles = (theme) => ({\n root: {\n // display: 'flex',\n // flexDirection: 'row',\n // alignItems: 'flex-start',\n // [theme.breakpoints.down('sm')]: {\n // flexDirection: 'column',\n // },\n },\n flag: {\n maxHeight: 30,\n // margin: theme.spacing(0, 0.5),\n },\n})\n\nconst flagAltText = {\n aboriginal: 'Aboriginal Flag',\n torresStrait: 'Torres Strait Flag',\n lgbt: 'Rainbow Flag',\n}\n\n/**\n * Displays A set of flags for iHelp\n */\nexport const Flags = ({\n classes,\n flagIds = ['aboriginal', 'torresStrait', 'lgbt'],\n ...props\n}) => {\n const { tenantConfig: tc } = useConfig()\n\n const Flag = ({ src, alt }) => (\n <img className={classes.flag} src={src} alt={alt} />\n )\n\n const flags = flagIds.map((id) => ({\n src: tc.assets.flags?.[id],\n alt: flagAltText[id],\n }))\n\n return (\n <Box\n as=\"a\"\n className={classes.root}\n sx={{ mt: 4, display: 'flex', gap: 1 }}\n target=\"_blank\"\n {...props}\n >\n {flags.map((flag, i) => (\n <Flag key={i} {...flag} />\n ))}\n </Box>\n )\n}\n\nexport default withStyles(styles, { name: 'AMSFlags' })(Flags)\n","import React, { useState } from 'react'\n\nimport ReactMarkdown from 'markdown-to-jsx'\nimport { NavLink } from 'react-router-dom'\nimport { Link as RouterLink } from 'react-router-dom'\n\n// import scrollIntoView from 'scroll-into-view-if-needed'\n\nimport { withStyles } from '@mui/styles'\nimport { Box, Typography, Divider, Link, Button } from '@mui/material'\n\nimport MarkdownAccordion from '@/ui/markdown/MarkdownAccordion'\nimport ImageAsset from '@/ui/components/images/ImageAsset'\nimport HomeButtons from '@/ui/nav/home-buttons/HomeButtons'\nimport Logo from '@/ui/components/images/Logo'\nimport PreviousSearch from '@/ui/components/atoms/PreviousSearch'\nimport CieBlock from '@/ui/footer/CieBlock'\nimport Flags from '@/ui/footer/Flags'\n\nconst SiteSupport = () => (\n <Button\n variant=\"outlined\"\n color=\"primary\"\n to=\"/support\"\n component={RouterLink}\n // onClick={handleClickSiteSupport}\n >\n <Box mr={1}>\n <i className=\"fas fa-user-headset\" />\n </Box>\n Contact Site Support\n </Button>\n)\n\nconst styles = (theme) => ({\n ul: {\n paddingInlineStart: '30px !important',\n [theme.breakpoints.down('sm')]: {\n paddingInlineStart: '20px !important',\n },\n },\n li: {\n marginTop: theme.spacing(1),\n },\n navLink: {\n fontSize: 16,\n },\n})\n\nconst makeOptions = ({ expanded, onAccordionClick = () => undefined }) => ({\n overrides: {\n h1: {\n component: Typography,\n props: {\n gutterBottom: true,\n variant: 'h4',\n // sx: { mb: 2 },\n },\n },\n h2: {\n component: Typography,\n props: {\n gutterBottom: true,\n variant: 'h5',\n // sx: { mb: 2 },\n },\n },\n h3: {\n component: Typography,\n props: {\n gutterBottom: true,\n variant: 'subtitle1',\n // fontSize: '1.16rem',\n fontSize: '1rem',\n fontWeight: 600,\n // sx: { mb: 2, mt: 4 },\n },\n },\n h4: {\n component: Typography,\n props: { gutterBottom: true, variant: 'caption', paragraph: true },\n },\n h5: { component: Typography, props: { gutterBottom: true, variant: 'h6' } },\n p: { component: Typography, props: { variant: 'body1', paragraph: true } },\n a: { component: Link, props: { underline: 'none' } },\n ul: {\n component: withStyles(styles)(({ classes, children }) => (\n <ul className={classes.ul}>{children}</ul>\n )),\n },\n li: {\n component: withStyles(styles)(({ classes, ...props }) => (\n <li className={classes.li}>\n <Typography component=\"div\" {...props} />\n </li>\n )),\n },\n hr: {\n component: Divider,\n },\n box: {\n component: Box,\n },\n faq: {\n component: Box,\n props: { my: 2 },\n },\n homebuttons: {\n component: HomeButtons,\n },\n disclaimer: {\n component: Box,\n props: { fontSize: 14, fontWeight: 300, color: '#666', pt: 6 },\n },\n accordion: {\n component: MarkdownAccordion,\n props: {\n expanded,\n onAccordionClick,\n },\n },\n navlink: {\n component: NavLink,\n },\n imgasset: {\n component: ImageAsset,\n },\n logo: {\n component: Logo,\n },\n previoussearch: {\n component: PreviousSearch,\n },\n sitesupport: {\n component: SiteSupport,\n },\n cieblock: {\n component: CieBlock,\n },\n flags: {\n component: Flags,\n },\n },\n})\n\nconst SimpleMarkdown = ({ ...props }) => {\n const [expanded, setExpanded] = useState(undefined)\n\n const handleAccordionClick = (panel) => {\n setExpanded(panel === expanded ? undefined : panel)\n }\n\n const options = makeOptions({\n expanded,\n onAccordionClick: handleAccordionClick,\n })\n\n return <ReactMarkdown options={options} {...props} />\n}\n\nexport default SimpleMarkdown\n","/* eslint-disable @typescript-eslint/no-var-requires */\n/* eslint-disable no-undef */\nimport React, { useState } from 'react'\n\nimport { atom, useAtom } from 'jotai'\nimport { useAtomValue } from 'jotai/utils'\n\nconst loadTenantConfig: any = () => {\n return require(`../tenants/${process.env.TENANT}/config.js`).default\n // return require(`../tenants/${process.env.TENANT}/config.ts`).default\n}\n\n// interface ConfigState {\n// config: any // replace with AmsConfig\n// context: React.Context<any>\n// }\n\nconst configState = (() => {\n const appConfig = {\n version: 3,\n apiKey: process.env.REACT_APP_CIE_API_KEY,\n apiURL: (window as any).REACT_APP_CIE_API_URL,\n directoryURL: (window as any).REACT_APP_DIRECTORY_URL,\n diaryURL: (window as any).REACT_APP_DIARY_URL,\n cdnURL: process.env.REACT_APP_CDN_URL,\n googleMapsApiKey: process.env.REACT_APP_GOOGLE_MAPS_API_KEY,\n fullCalendarProductKey: process.env.REACT_APP_CALENDAR_KEY,\n debugHelpers: process.env.REACT_APP_DEBUG_HELPERS === 'true',\n tenant: process.env.TENANT,\n }\n\n const tenantConfig = loadTenantConfig()\n\n const legacyConfig = {\n // legacy\n appConfig,\n tenantConfig,\n }\n\n const config = {\n app: appConfig,\n ...tenantConfig,\n }\n\n return {\n legacyConfig,\n config,\n }\n})()\n\n// @ts-ignore\nwindow.config = configState.config\n\n// const context = React.createContext(configState.config)\n// const legacyContext = React.createContext(configState.legacyConfig)\n\nconst configAtom = atom(configState.legacyConfig)\n\n/**\n * Exports static config for availability to non-react modules\n *\n * This is an antipattern which needs to be replaced with an async function as in\n * future it will need to use ES `async import()` instead of webpack's synchronous\n * `require()`.\n */\nexport const config = configState.legacyConfig\n\n/**\n * Hook for loading config in react\n *\n * currently most imports use\n *\n * ```ts\n * const { tenantConfig: tc } = useConfig()\n * ```\n */\nexport const useConfig = (): any => useAtomValue(configAtom)\n","export function neatJson (value, opts) {\n return neatJSON(value, {\n indent: ' ',\n // wrap: false,\n wrap: 120,\n sort: true,\n // aligned: true,\n objectPadding: 1,\n afterComma: 1,\n afterColon1: 1,\n aroundColonN: 1,\n ...opts,\n })\n}\n\nexport function neatJSON(value, opts) {\n opts = opts || {}\n if (!('wrap' in opts)) opts.wrap = 80\n if (opts.wrap == true) opts.wrap = -1\n if (!('indent' in opts)) opts.indent = ' '\n if (!('arrayPadding' in opts)) opts.arrayPadding = 'padding' in opts ? opts.padding : 0\n if (!('objectPadding' in opts)) opts.objectPadding = 'padding' in opts ? opts.padding : 0\n if (!('beforeComma' in opts)) opts.beforeComma = 'aroundComma' in opts ? opts.aroundComma : 0\n if (!('afterComma' in opts)) opts.afterComma = 'aroundComma' in opts ? opts.aroundComma : 0\n if (!('beforeColon' in opts)) opts.beforeColon = 'aroundColon' in opts ? opts.aroundColon : 0\n if (!('afterColon' in opts)) opts.afterColon = 'aroundColon' in opts ? opts.aroundColon : 0\n if (!('beforeColon1' in opts))\n opts.beforeColon1 =\n 'aroundColon1' in opts ? opts.aroundColon1 : 'beforeColon' in opts ? opts.beforeColon : 0\n if (!('afterColon1' in opts))\n opts.afterColon1 =\n 'aroundColon1' in opts ? opts.aroundColon1 : 'afterColon' in opts ? opts.afterColon : 0\n if (!('beforeColonN' in opts))\n opts.beforeColonN =\n 'aroundColonN' in opts ? opts.aroundColonN : 'beforeColon' in opts ? opts.beforeColon : 0\n if (!('afterColonN' in opts))\n opts.afterColonN =\n 'aroundColonN' in opts ? opts.aroundColonN : 'afterColon' in opts ? opts.afterColon : 0\n\n let apad = repeat(' ', opts.arrayPadding),\n opad = repeat(' ', opts.objectPadding),\n comma = repeat(' ', opts.beforeComma) + ',' + repeat(' ', opts.afterComma),\n colon1 = repeat(' ', opts.beforeColon1) + ':' + repeat(' ', opts.afterColon1),\n colonN = repeat(' ', opts.beforeColonN) + ':' + repeat(' ', opts.afterColonN)\n\n let build = memoize()\n\n let visited = new WeakSet()\n\n return build(value, '')\n\n function memoize() {\n let memo = new Map()\n return function (o, indent) {\n let byIndent = memo.get(o)\n if (!byIndent) memo.set(o, (byIndent = {}))\n if (!byIndent[indent]) byIndent[indent] = rawBuild(o, indent)\n return byIndent[indent]\n }\n }\n\n function rawBuild(o, indent) {\n if (o === null || o === undefined) return indent + 'null'\n else {\n if (typeof o === 'number') {\n if (o === Infinity) {\n return indent + '9e9999'\n } else if (o === -Infinity) {\n return indent + '-9e9999'\n } else if (Number.isNaN(o)) {\n return indent + 'NaN'\n } else {\n let isFloat = o === +o && o !== (o | 0)\n return indent + (isFloat && 'decimals' in opts ? o.toFixed(opts.decimals) : o + '')\n }\n } else if (o instanceof Array) {\n if (!o.length) return indent + '[]'\n let pieces = o.map(function (v) {\n return build(v, '')\n })\n let oneLine = indent + '[' + apad + pieces.join(comma) + apad + ']'\n if (opts.wrap === false || oneLine.length <= opts.wrap) return oneLine\n if (opts.short) {\n let indent2 = indent + ' ' + apad\n pieces = o.map(function (v) {\n return build(v, indent2)\n })\n pieces[0] = pieces[0].replace(indent2, indent + '[' + apad)\n pieces[pieces.length - 1] = pieces[pieces.length - 1] + apad + ']'\n return pieces.join(',\\n')\n } else {\n let indent2 = indent + opts.indent\n return (\n indent +\n '[\\n' +\n o\n .map(function (v) {\n return build(v, indent2)\n })\n .join(',\\n') +\n '\\n' +\n (opts.indentLast ? indent2 : indent) +\n ']'\n )\n }\n } else if (o instanceof Object) {\n // if (visited.has(o)) {\n // console.log(o)\n // return '[$circ_ref]'\n // }\n // visited.add(o)\n\n let sortedKV = [],\n i = 0\n let sort = opts.sort || opts.sorted\n for (let k in o) {\n let kv = (sortedKV[i++] = [k, o[k]])\n if (sort === true) kv[2] = k\n else if (typeof sort === 'function') kv[2] = sort(k, o[k], o)\n }\n if (!sortedKV.length) return indent + '{}'\n if (sort)\n sortedKV = sortedKV.sort(function (a, b) {\n a = a[2]\n b = b[2]\n return a < b ? -1 : a > b ? 1 : 0\n })\n let keyvals = sortedKV\n .map(function (kv) {\n // return [JSON.stringify(kv[0]), build(kv[1], '')].join(colon1)\n return [kv[0], build(kv[1], '')].join(colon1)\n })\n .join(comma)\n let oneLine = indent + '{' + opad + keyvals + opad + '}'\n if (opts.wrap === false || oneLine.length < opts.wrap) return oneLine\n if (opts.short) {\n keyvals = sortedKV.map(function (kv) {\n return [indent + ' ' + opad + kv[0], kv[1]]\n })\n keyvals[0][0] = keyvals[0][0].replace(indent + ' ', indent + '{')\n if (opts.aligned) {\n let longest = 0\n for (let i = keyvals.length; i--; )\n if (keyvals[i][0].length > longest) longest = keyvals[i][0].length\n let padding = repeat(' ', longest)\n for (let i = keyvals.length; i--; ) keyvals[i][0] = padRight(padding, keyvals[i][0])\n }\n for (let i = keyvals.length; i--; ) {\n let k = keyvals[i][0],\n v = keyvals[i][1]\n let indent2 = repeat(' ', (k + colonN).length)\n let oneLine = k + colonN + build(v, '')\n keyvals[i] =\n opts.wrap === false || oneLine.length <= opts.wrap || !v || typeof v != 'object'\n ? oneLine\n : k + colonN + build(v, indent2).replace(/^\\s+/, '')\n }\n return keyvals.join(',\\n') + opad + '}'\n } else {\n let keyvals = sortedKV.map(function (kvs) {\n kvs[0] = indent + opts.indent + kvs[0] // JSON.stringify(kvs[0])\n return kvs\n })\n if (opts.aligned) {\n let longest = 0\n for (let i = keyvals.length; i--; )\n if (keyvals[i][0].length > longest) longest = keyvals[i][0].length\n let padding = repeat(' ', longest)\n for (let i = keyvals.length; i--; ) keyvals[i][0] = padRight(padding, keyvals[i][0])\n }\n let indent2 = indent + opts.indent\n for (let i = keyvals.length; i--; ) {\n let k = keyvals[i][0],\n v = keyvals[i][1]\n let oneLine = k + colonN + build(v, '')\n keyvals[i] =\n opts.wrap === false || oneLine.length <= opts.wrap || !v || typeof v != 'object'\n ? oneLine\n : k + colonN + build(v, indent2).replace(/^\\s+/, '')\n }\n return (\n indent +\n '{\\n' +\n keyvals.join(',\\n') +\n '\\n' +\n (opts.indentLast ? indent2 : indent) +\n '}'\n )\n }\n } else {\n const x = JSON.stringify(o).replace(/(^\"|\"$)/g, '\\'')\n return indent + x\n }\n }\n }\n\n function repeat(str, times) {\n // http://stackoverflow.com/a/17800645/405017\n let result = ''\n while (true) {\n if (times & 1) result += str\n times >>= 1\n if (times) str += str\n else break\n }\n return result\n }\n\n function padRight(pad, str) {\n return (str + pad).substring(0, pad.length)\n }\n}\n","import React, { useState, useEffect, useCallback } from 'react'\n\nimport _ from 'lodash'\n\nimport { useTheme } from '@mui/material/styles'\nimport { useMediaQuery } from '@mui/material'\nimport { useResizeDetect } from './useResizeDetect'\n\nexport const useBreakpoint = () => {\n const { breakpoints } = useTheme()\n const { width } = useResizeDetect()\n\n const findBreakpoint = () => _.findLast(breakpoints.keys, k => width >= breakpoints.values[k])\n\n const [current, setCurrent] = useState(findBreakpoint())\n\n useEffect(() => {\n const c = findBreakpoint()\n if (c !== current) setCurrent(c)\n }, [width])\n\n return { current, breakpoints, width }\n}\n\nconst transformMediaProps = (root, breakpoint) => {\n const { breakpoints, width } = breakpoint\n\n return (function walkNode(node) {\n if (!node) return node\n if (_.isArray(node)) return node.map(walkNode)\n if (!_.isObject(node)) return node\n\n const valueKeys = _.keys(node)\n const mediaKeys = _.intersection(breakpoints.keys, valueKeys)\n\n // normal object\n if (mediaKeys.length == 0) return _.mapValues(node, walkNode)\n\n // keys mismatch\n if (mediaKeys.length !== valueKeys.length) {\n const unknownKeys = _.difference(valueKeys, breakpoints.keys)\n throw `Invalid media keys (${unknownKeys.join(', ')})`\n }\n\n const matchedKey = _.findLast(mediaKeys, k => width >= breakpoints.values[k])\n const matchedValue = matchedKey ? node[matchedKey] : undefined\n\n return walkNode(matchedValue)\n })(root)\n}\n\nexport const useMediaProps = props => {\n const breakpoint = useBreakpoint()\n\n const updateTransformedProps = () => transformMediaProps(props, breakpoint)\n\n const [transformedProps, setTransformedProps] = useState(updateTransformedProps)\n\n useEffect(() => {\n setTransformedProps(updateTransformedProps)\n }, [breakpoint.current])\n\n return transformedProps\n}\n","import React, { useEffect, useState } from 'react'\n\nimport _ from 'lodash'\nimport clsx from 'clsx'\nimport { useQuery } from 'react-query'\n\nimport { observer } from 'mobx-react-lite'\n\nimport { grey } from '@mui/material/colors'\nimport { withStyles } from '@mui/styles'\nimport { useTheme } from '@mui/material/styles'\nimport { Collapse, Fade, useMediaQuery } from '@mui/material'\n\nimport { useConfig } from '@/config'\nimport { usePlatform } from '@/ui/hooks/usePlatform'\nimport { useMediaProps } from '@/ui/hooks/useMediaProps'\nimport { useRootStore } from '@/stores/root/store'\nimport { getGeographyMembers } from '@/api/legacy'\n\nimport {\n default as ImageList,\n styles as imageListStyles,\n} from '@/ui/components/images/ImageList'\n\nconst styles = (theme) => ({\n root: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'stretch',\n justifyContent: 'flex-start',\n },\n label: {\n // color: theme.palette.text.secondary,\n padding: theme.spacing(1, 0),\n color: grey[600],\n fontSize: '0.92rem',\n fontWeight: 'light',\n },\n imageList: {\n ...imageListStyles.root,\n gap: 20,\n },\n imageListIe11: {\n justifyContent: 'center',\n margin: theme.spacing(-2),\n },\n imageContainer: {\n ...imageListStyles.imageContainer,\n maxWidth: 200,\n height: 50,\n maxHeight: 50,\n\n '& img': {\n width: 'inherit',\n height: 'inherit',\n maxWidth: 'inherit',\n maxHeight: 'inherit',\n },\n },\n imageContainerIe11: {\n margin: theme.spacing(2),\n },\n})\n\n_.mixin({\n pickValues: (src, keys) => {\n return _.reduce(\n keys,\n (prev, key) => {\n const r = src[key]\n return r ? [...prev, r] : prev\n },\n []\n )\n },\n})\n\nconst normalizeAssetPrefix = (assetPrefix) => {\n const pfxarr = _.isArray(assetPrefix)\n ? assetPrefix\n : _.isString(assetPrefix)\n ? [assetPrefix]\n : []\n return pfxarr.map((p) => p.split('.'))\n}\n\nconst resolvePrefixedAsset = (outletId, options) => {\n const { assets, assetMap, assetPrefix } = options\n if (!assets || !assetMap || !assetPrefix) return\n\n const assetName = assetMap[outletId]\n if (!assetName) return\n\n for (const pfx of assetPrefix) {\n const asset = _.get(assets, [...pfx, assetName])\n if (asset) return asset\n }\n}\n\nconst buildSponsorsList = (geographyMembers, options) => {\n const {\n membershipOverrides,\n assetPrefix: apfx,\n assets,\n assetMap,\n itemSet,\n location,\n } = options\n const assetPrefix = normalizeAssetPrefix(apfx)\n\n const overrideMembership = (sponsor) => {\n const member = membershipOverrides[sponsor.id]\n return member ? { ...sponsor, member } : sponsor\n }\n\n const overrideAsset = (sponsor) => {\n const src = resolvePrefixedAsset(sponsor.outletId, {\n assets,\n assetMap,\n assetPrefix,\n })\n return src ? { ...sponsor, src } : sponsor\n }\n\n // TODO: Fix this with R.compose\n // _.chain loads all lodash modules\n return (\n _.chain(geographyMembers)\n // .tap(gm => gm.forEach(g => console.log(JSON.stringify(g, null, 2))))\n .map(overrideMembership)\n .filter((gm) => !!gm.member /* && !!gm.member.logo */)\n .keyBy((gm) => gm.dataset.toLowerCase())\n .mapValues(\n ({\n id,\n dataset,\n member: { outletId, website, url, logo, preferredName },\n }) => ({\n geographyId: id,\n dataset,\n outletId,\n href: website,\n alt: preferredName,\n url,\n src: logo,\n })\n )\n .assign(options.presets)\n .mapValues((value, key) => _.assign(value, { key }))\n .pickValues(itemSet || [])\n .map(overrideAsset)\n .filter((s) => !!s.src)\n .value()\n )\n}\n\n/**\n * Displays sponsors logos\n *\n * Relies heavily on themes (see ams/theme.js variants)\n */\nconst Sponsors = (props) => {\n const { tenantConfig: tc } = useConfig()\n\n const {\n classes,\n options = tc.sponsors || {},\n label = 'Supported by',\n imageListProps = {},\n ...mediaProps\n } = props\n\n const store = useRootStore()\n const location = store.search.params.location\n const qparam = _.pick(location, ['id', 'lat', 'lng'])\n\n const platform = usePlatform()\n const ie11 = !!platform.ieVersion\n\n const { itemSet: itemSetId, assetPrefix = options.assetPrefix } =\n useMediaProps(mediaProps)\n\n const itemSet = options.itemSets?.[itemSetId]\n const [assetMap] = useState(\n _.mapValues(_.keyBy(options.assetMap || {}, 'outletId'), (a) => a.asset)\n )\n\n const { data: sponsors } = useQuery(\n ['geography-members', qparam],\n async () => await getGeographyMembers(qparam),\n {\n enabled: !!itemSet,\n select: (data) =>\n buildSponsorsList(data, {\n ...options,\n assets: tc.assets,\n itemSet,\n assetPrefix,\n assetMap,\n location,\n }),\n }\n )\n\n const showSponsors = sponsors?.length > 0\n\n const imageListClasses = {\n root: clsx(classes.imageList, ie11 && classes.imageListIe11),\n imageContainer: clsx(\n classes.imageContainer,\n ie11 && classes.imageContainerIe11\n ),\n }\n\n return (\n <Fade in={showSponsors}>\n <div className={classes.root}>\n {showSponsors && (\n <>\n {label && <div className={classes.label}>{label}</div>}\n <ImageList\n images={sponsors || []}\n classes={imageListClasses}\n {...imageListProps}\n />\n </>\n )}\n </div>\n </Fade>\n )\n}\n\nexport default withStyles(styles, { name: 'AMSSponsors' })(observer(Sponsors))\n","/**\n * Predicate for filters on arrays which narrows type\n *\n * ```typescript\n * const arr = ['one', 2, undefined, 'four']\n *\n * arr.filter(x => !!x)\n * // returns (string | number | undefined)[]\n *\n * arr.filter(removeNulls)\n * // returns (string | number)[]\n * ```\n */\nexport const removeNulls = <S>(value: S | undefined): value is S =>\n value != null\n","import React from 'react'\n\nimport { atom, useAtom } from 'jotai'\nimport { atomFamily } from 'jotai/utils'\n\nimport deepEqual from 'fast-deep-equal'\n\nimport type { Marker, Popup } from 'leaflet'\nimport type { IResult } from '@/stores/root/models/types'\n\nexport type Subscriber = {\n searchId: string\n control: string\n}\n\nexport type PopupState = {\n active?: Popup\n closing?: Popup\n withheld?: Popup\n}\n\nexport type ResultSelection = {\n subscriber?: Subscriber\n // resultId?: string\n result?: IResult\n}\n\nexport type SelectionTimeout = {\n lastUpdate: number\n}\n\nconst subscriberFamily = atomFamily(\n (subscriber: Subscriber) => atom(subscriber),\n deepEqual\n)\n\nconst popupStateAtom = atom<PopupState>({\n active: undefined,\n closing: undefined,\n})\n\nconst selectedResultAtom = atom<ResultSelection>({\n subscriber: undefined,\n result: undefined,\n})\n\nconst selectedResultTimestampAtom = atom<number>(0)\n\nconst debouncedSelectAtom = atom(\n (get) => get(selectedResultAtom),\n (get, set, update: ResultSelection) => {\n const t1 = get(selectedResultTimestampAtom)\n const t2 = Date.now()\n\n // console.log('timestamps', t1, t2, t2 - t1)\n if (t2 - t1 > 700) set(selectedResultAtom, update)\n\n set(selectedResultTimestampAtom, t2)\n }\n)\n\nexport type ResultsControlProps = {\n subscriber: Subscriber\n}\n\nexport type ResultsControl = {\n popupState: PopupState\n selectedResult: ResultSelection\n setSelectedResult: (result?: IResult) => void\n}\n\nexport const useResultsControl = (\n props: ResultsControlProps\n): ResultsControl => {\n const [subscriber] = useAtom(subscriberFamily(props.subscriber))\n const [popupState] = useAtom(popupStateAtom)\n const [selectedResult, setSelectedResult] = useAtom(selectedResultAtom)\n\n return {\n popupState,\n selectedResult,\n setSelectedResult: (result?: IResult) =>\n setSelectedResult({ subscriber, result }),\n }\n}\n","import React from 'react'\n\nimport { withStyles } from '@mui/styles'\nimport { Typography } from '@mui/material'\n\nimport Markdown from '@/ui/markdown/Markdown'\n\nimport { withVariantStyles } from '@/ui/theme/TenantTheme'\nimport { useConfig } from '@/config'\n\nconst styles = (theme) => ({\n root: {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'flex-start',\n [theme.breakpoints.down('sm')]: {\n flexDirection: 'column',\n },\n },\n flags: {\n display: 'flex',\n flexDirection: 'row',\n marginTop: theme.spacing(0.5),\n marginRight: theme.spacing(2),\n [theme.breakpoints.down('sm')]: {\n margin: theme.spacing(0, 0, 1),\n },\n },\n flag: {\n maxHeight: 30,\n margin: theme.spacing(0, 0.5),\n },\n text: {\n // fontSize: 13,\n [theme.breakpoints.down('sm')]: {\n padding: theme.spacing(0, 0.5),\n },\n },\n})\n\nconst copy = `\nWe acknowledge the traditional owners of the land and pay respects to the elders past, present and future.\n`\n\n/**\n * Displays ATSI acknowledgement for footer\n */\nexport const Acknowledgement = ({ classes }) => {\n const { tenantConfig } = useConfig()\n const flags = tenantConfig.assets.flags\n\n const Flag = ({ src, alt }) => (\n <img className={classes.flag} src={src} alt={alt} />\n )\n\n return (\n <div className={classes.root}>\n <div className={classes.flags}>\n <Flag alt=\"Aboriginal Flag\" src={flags.aboriginal} />\n <Flag alt=\"Torres Strait Flag\" src={flags.torresStrait} />\n </div>\n <Typography className={classes.text} variant=\"body1\" component=\"span\">\n {copy}\n </Typography>\n </div>\n )\n}\n\nexport default withStyles(styles, { name: 'AMSAcknowledgement' })(\n Acknowledgement\n)\n","import React from 'react'\n\nimport { Link as ReactRouterLink } from 'react-router-dom'\n\n// import { makeStyles } from '@mui/material/styles'\nimport { Link as MuiLink } from '@mui/material'\n\nimport { useConfig } from '@/config'\n\n// const { appConfig } = useConfig()\n\nexport const BaseLink = ({ ...linkProps }) => {\n const mergeProps = {\n variant: 'body1',\n color: 'primary',\n underline: 'none',\n ...linkProps,\n }\n\n return <MuiLink {...mergeProps} />\n}\n\nexport const RouterLink = ({ ...linkProps }) => {\n return <BaseLink component={ReactRouterLink} {...linkProps} />\n}\n\nexport const CieLink = ({ type, path, ...linkProps }) => {\n const { appConfig } = useConfig()\n\n const bases = {\n service: appConfig.directoryURL,\n event: appConfig.diaryURL,\n }\n\n const href =\n type && path && type in bases\n ? `${bases[type]}${path}`\n : 'https://www.mycommunitydirectory.com.au/404'\n\n // const preventDefault = event => {\n // event.preventDefault()\n // window.open(href, '_blank', 'noopener,noreferrer')\n // }\n\n return (\n <BaseLink\n // href=\"#\"\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n {...linkProps}\n // onClick={preventDefault}\n />\n )\n}\n","/**\n * @module @/stores/root\n */\n\nexport * from './store'\n","import React from 'react'\nimport _ from 'lodash'\n\nimport { Box } from '@mui/material'\n\n/**\n * Builds a delimited english list\n *\n * Use inside Typography\n */\nexport const EmphasisEnglishList = (props) => {\n const {\n component = 'span',\n items = [],\n delimiter = ', ',\n terminator = ' and ',\n boldItems = true,\n useTerminator = true,\n maxItems = 3,\n remainderText = (rem) => rem > 0 && `${rem} other${rem > 1 ? 's' : ''}`,\n ...innerProps\n } = props\n if (!_.isArray(items) || !items.length) return null\n\n const kept = maxItems < 0 ? items : _.take(items, maxItems)\n const remainder = remainderText?.(items.length - kept.length)\n\n const innerHTML = _.compact([...kept, remainder])\n .reduce((acc, item, index, arr) => {\n const delim =\n index === 0\n ? ''\n : index === arr.length - 1 && useTerminator\n ? terminator\n : delimiter\n\n return [...acc, delim, boldItems ? `<strong>${item}</strong>` : item]\n }, [])\n .join('')\n\n const typographyProps = {\n component,\n dangerouslySetInnerHTML: { __html: innerHTML },\n ...innerProps,\n }\n\n return <Box {...typographyProps} />\n}\n","import React from 'react'\n\nimport { observer } from 'mobx-react-lite'\n\nimport { withStyles } from '@mui/styles'\nimport {\n Box,\n Fade,\n Collapse,\n Typography,\n Link,\n IconButton,\n} from '@mui/material'\n\nimport CloseIcon from '@mui/icons-material/Close'\n\nimport { useRootStore } from '@/stores/root/store'\nimport { useConfig } from '@/config'\n\nconst styles = (theme) => ({\n root: {\n backgroundColor: theme.palette.covidAlert.main,\n color: theme.palette.covidAlert.contrastText,\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'flex-start',\n\n // margin: theme.spacing(0.75),\n // boxShadow: '1px 1px 3px 0px rgba(0, 0, 0, 0.2)',\n\n // [theme.breakpoints.down('sm')]: {\n // padding: theme.spacing(0),\n // // boxShadow: '0 0px 4px 0px rgba(0, 0, 0, 0.4)',\n // boxShadow: 'none',\n // },\n },\n content: {\n flexGrow: 1,\n padding: theme.spacing(1, 2, 2),\n },\n link: {\n // color: '#fff',\n color: theme.palette.covidAlert.contrastText,\n textDecoration: 'none',\n },\n closeButton: {\n // color: '#fff',\n color: theme.palette.covidAlert.contrastText,\n flexShrink: 1,\n },\n})\n\nconst CovidAlert = observer(({ classes }) => {\n const store = useRootStore()\n const state = store.search.params.location?.state\n const showAlert = !store.search.ui.covidAlertShown\n\n const { tenantConfig: tc } = useConfig()\n const config = tc.covidAlert\n\n if (!config) return null\n\n const items = [state, 'AUS'].map((x) => config?.[x]).filter((x) => !!x)\n\n const handleClose = () => {\n store.search.ui.setCovidAlertShown(true)\n }\n\n return (\n <Collapse in={showAlert}>\n <Fade in={showAlert}>\n <Box className={classes.root}>\n <div className={classes.content}>\n <Typography\n variant=\"body1\"\n sx={{ fontSize: '1rem', fontWeight: 'medium' }}\n gutterBottom\n >\n Coronavirus (COVID-19) Health Alerts\n </Typography>\n {items.map(({ label, href }, i) => (\n <Typography\n key={i}\n variant=\"body1\"\n sx={{ fontSize: '0.86rem', pl: 0 }}\n >\n <Box\n component=\"i\"\n sx={{ pr: 1 }}\n className=\"far fa-exclamation-triangle\"\n />\n <Link className={classes.link} href={href} target=\"_blank\">\n {label}\n </Link>\n </Typography>\n ))}\n </div>\n <IconButton className={classes.closeButton} onClick={handleClose}>\n <CloseIcon />\n </IconButton>\n </Box>\n </Fade>\n </Collapse>\n )\n})\n\nexport default withStyles(styles, { name: 'AMSCovidAlert' })(CovidAlert)\n","import React from 'react'\n\nimport { observer } from 'mobx-react-lite'\nimport { Box } from '@mui/material'\n\nimport { BaseLink } from '@/ui/nav/Link'\nimport { useRootStore } from '@/stores/root/store'\nimport { useConfig } from '@/config'\nimport { useQuery } from 'react-query'\n\nimport { getPromotions } from '@/api/legacy'\n\nconst Promotions = observer(() => {\n const { appConfig: ac } = useConfig()\n const { tenant } = ac\n\n const store = useRootStore()\n const { councilId } = store.search.params.location || {}\n const params = councilId ? { tenant, councilId } : null\n\n const { data } = useQuery(\n ['cie-promotions', params],\n async () => getPromotions(params),\n {\n enabled: !!params,\n refetchOnWindowFocus: false,\n select: ({ data }) => data,\n }\n )\n\n if (!data) return null\n\n return (\n <Box sx={{ p: 2 }}>\n {data.map(({ captionText, url }, i) => (\n <Box key={i}>\n <BaseLink href={url}>\n <Box component=\"i\" className=\"fas fa-file-pdf\" sx={{ mr: 1 }} />\n {captionText}\n </BaseLink>\n </Box>\n ))}\n </Box>\n )\n})\nexport default Promotions\n","import React from 'react'\n\nimport { withStyles } from '@mui/styles'\nimport SimpleMarkdown from '@/ui/markdown/SimpleMarkdown'\n\nimport { Card, CardContent } from '@mui/material'\n\nconst styles = (theme) => ({\n root: {\n borderRadius: 0,\n backgroundColor: 'rgba(0, 0, 0, 0.03)',\n\n margin: theme.spacing(1.5, 1.5, 0.75),\n [theme.breakpoints.down('sm')]: {\n margin: theme.spacing(1, 1, 0.5),\n },\n },\n})\n\nconst SearchResultsMarkdown = ({ classes, content = {} }) => {\n if (!content?.body) return null\n\n return (\n <Card variant=\"outlined\" className={classes.root}>\n <CardContent>\n <SimpleMarkdown>{content.body}</SimpleMarkdown>\n </CardContent>\n </Card>\n )\n}\n\nexport default withStyles(styles, { name: 'AMSSearchResultsMarkdown' })(\n SearchResultsMarkdown\n)\n","import { useResultsControl } from './results-control'\nimport {\n Box,\n CircularProgress,\n LinearProgress,\n Button,\n Typography,\n Divider,\n useMediaQuery,\n Fade,\n linearProgressClasses,\n} from '@mui/material'\nimport { styled } from '@mui/material/styles'\nimport { useTheme, withStyles } from '@mui/styles'\nimport clsx from 'clsx'\nimport { useConfig } from '@/config'\nimport {\n SearchQueryHost,\n useSearchResults,\n SearchQueryDebug,\n} from '@/api/search-query'\nimport { useRootStore, useStoreSearch } from '@/stores/root/store'\nimport { toEnglishList } from '@/utils'\nimport _ from 'lodash'\nimport { observer } from 'mobx-react-lite'\nimport React, { useEffect, useCallback, forwardRef } from 'react'\nimport { Link as ReactRouterLink } from 'react-router-dom'\nimport scrollIntoView from 'scroll-into-view-if-needed'\nimport { EmphasisEnglishList } from '@/ui/components/text/EmphasisEnglishList'\nimport Acknowledgement from '@/ui/footer/Acknowledgement'\nimport Sponsors from '@/ui/footer/Sponsors'\nimport { useParentMutationObservers } from '@/ui/hooks/useParentMutationObservers'\n// import { useCountRenders } from '@/ui/hooks/useCountRenders'\nimport CovidAlert from './CovidAlert'\nimport Promotions from './Promotions'\nimport SearchResultItem from './SearchResult'\nimport SearchResultsMarkdown from './SearchResultsMarkdown'\nimport { TenantThemeProvider } from '@/ui/theme/TenantTheme'\nimport { useAnalytics } from 'use-analytics'\nimport ErrorBoundary from '@/ui/components/atoms/ErrorBoundary'\nimport { useInView } from 'react-intersection-observer'\n\nconst styles = (theme) => ({\n root: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'stretch',\n paddingBottom: theme.spacing(2),\n },\n actionContainer: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'stretch',\n // justifyContent: 'center',\n padding: theme.spacing(2),\n },\n navLink: {\n textDecoration: 'none',\n },\n section: {\n display: 'flex',\n flexDirection: 'column',\n },\n alertBlock: {},\n initBlock: {},\n statusSponsorBlock: {},\n statusHeaderBlock: {},\n resultsBlock: {},\n statusBlock: {\n padding: theme.spacing(4, 0, 4),\n },\n footerBlock: {},\n // inner results\n results: {\n backgroundColor: '#fafafa',\n borderTop: '1px solid rgba(0, 0, 0, 0.07)',\n // boxShadow: '1px 2px 3px -1px rgba(0, 0, 0, 0.2) inset', // [shadow, shadow, noShadow, noShadow],\n [theme.breakpoints.down('ph')]: {\n // boxShadow: 'none',\n // borderBottom: '1px solid rgba(0, 0, 0, 0.1)',\n },\n },\n})\n\n/**\n * Container for controls like etc.\n *\n * Uses `data-nosnippet` (googlebot ignore)\n *\n * @param props.sx {object} Mui sx (hack)\n * @param props.children {object} Wrapped components\n * @param [...] (object) Additional spread props passed to container Box\n */\nconst ActionContainer = ({ sx, children, ...props }) => {\n return (\n <Box\n sx={{\n p: 2,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n ...sx,\n }}\n {...props}\n data-nosnippet\n >\n {children}\n </Box>\n )\n}\n\n/**\n * Fallback component displayed when `store.search.params.location === null`\n *\n * This populates props by default from `store.search._searches[searchId].welcome`\n *\n * @param props.store {object} store\n * @param props.title {string} Title text, e.g. 'Welcome to...'\n * @param props.body {string} Usually instructions to select location\n * @param props.componentProps {object} See config\n */\nconst Welcome = observer((props) => {\n const { store } = props\n const w = store.search.welcome\n\n const { title = w.title, body = w.body, componentProps = {} } = props\n\n const {\n container: containerProps,\n root: rootProps,\n title: titleProps,\n body: bodyProps,\n } = componentProps\n\n if (store.search.params.location) return null\n\n return (\n <ActionContainer sx={{ mt: 4, alignItems: 'stretch' }} {...containerProps}>\n <Box sx={{ textAlign: 'center' }} {...rootProps}>\n <Typography\n variant=\"h6\"\n sx={{ mb: 1, fontSize: '1rem' }}\n {...titleProps}\n >\n {title}\n </Typography>\n\n <Typography variant=\"body1\" {...bodyProps}>\n {body}\n </Typography>\n </Box>\n </ActionContainer>\n )\n})\n\n/**\n * List of SearchResult items\n *\n * @param props.classes {object} Mui classes\n * @param props.search {object} store.search._searches[searchId]\n * @param props.params {object} store.search.searchParams\n */\nconst SearchResults = observer(({ classes, search, store }) => {\n const { track } = useAnalytics()\n\n const renderResults = true\n\n const query = useSearchResults(search.id)\n const results = query?.results?.flat\n // const results = _.flatten(query?.data?.pages) ||\n\n const { selectedResult, setSelectedResult } = useResultsControl({\n subscriber: { searchId: search.id, control: 'results' },\n })\n\n const handleClickResult = useCallback(\n (result) => {\n track('searchResultsResultClick', {\n category: 'SearchResults',\n label: result.name || 'unknown',\n })\n\n setSelectedResult(result)\n },\n [store.search, track]\n )\n\n if (!results || !results.length) return null\n\n return (\n <Box className={classes.results + ' search-results-print'} sx={{ py: 0.5 }}>\n {renderResults &&\n results.map((data, i) => (\n <Fade key={i} timeout={1000} in={true}>\n <div>\n <SearchResultItem\n // search={search}\n data={data}\n selected={data.id === selectedResult?.result?.id}\n onClickResult={handleClickResult}\n variant=\"list\"\n />\n </div>\n </Fade>\n ))}\n </Box>\n )\n})\n\n/**\n * Displays text results, formatted (in theory) for SEO\n *\n * Usually in statusHeaderBlock\n *\n * Previously this showed 'Searching for', however with cached react-query results this\n * results in blipping between a queryKey change, and the cached results rendering\n *\n * @param props.search {object} store.search._searches[searchId]\n */\nconst StatusHeader = observer(({ search }) => {\n const query = useSearchResults(search.id)\n\n const count = query?.results?.flat.length\n\n const {\n location,\n categories,\n maxVerboseCategories = 3,\n } = query?.querySummary || {}\n\n if (!count || !location || !categories) return null\n\n const Line = (props) => (\n <Typography\n component=\"div\"\n variant=\"body1\"\n fontSize=\"0.937rem\"\n {...props}\n />\n )\n\n return (\n <Box sx={{ p: 2 }}>\n <Line>\n {`Top `}\n <strong>{`${count}`}</strong>\n {' results for'}\n </Line>\n <Line sx={{ my: 1 }}>\n <EmphasisEnglishList\n items={categories}\n maxItems={maxVerboseCategories}\n />\n </Line>\n <Line sx={{ my: 1 }}>\n {'in '}\n <EmphasisEnglishList items={location} useTerminator={false} />\n </Line>\n </Box>\n )\n})\n\n/**\n * Styled LinearProgress\n */\nconst GreyPrimaryLinearProgress = styled(LinearProgress)(({ theme }) => ({\n height: 4,\n borderRadius: 2,\n [`&.${linearProgressClasses.colorPrimary}`]: {\n backgroundColor: theme.palette.grey[200],\n },\n [`& .${linearProgressClasses.bar}`]: {\n borderRadius: 2,\n },\n}))\n\n/**\n * Bottom status of search query.\n *\n * @param props.classes {object} Mui classes\n * @param props.search {object} store.search._searches[searchId]\n * @param props.params {object} store.search.searchParams\n */\nconst StatusFooter = observer(({ classes, search, params }) => {\n const query = useSearchResults(search.id)\n const { ref, inView, entry } = useInView({})\n\n useEffect(() => {\n if (inView && query.hasNextPage) {\n query.fetchNextPage()\n }\n }, [inView])\n\n if (!params.location) return null\n if (!query) return null\n\n const results = query.results?.flat\n\n const StatusFooterInner = () => {\n if (query.isLoading || query.isFetching || query.isFetchingNextPage)\n return (\n <Box sx={{ p: 4 }}>\n <GreyPrimaryLinearProgress />\n </Box>\n )\n\n if (query.isError)\n return (\n <ActionContainer>\n <Typography variant=\"body1\">\n There was an error fetching results.\n </Typography>\n <br />\n\n <Button\n className={classes.loadMore}\n variant=\"outlined\"\n onClick={query.refetch}\n >\n Try Again\n </Button>\n </ActionContainer>\n )\n\n if (query.hasNextPage)\n return (\n <ActionContainer>\n <Button\n className={classes.loadMore}\n variant=\"outlined\"\n onClick={query.fetchNextPage}\n >\n Load More\n </Button>\n </ActionContainer>\n )\n\n if (results)\n return (\n <ActionContainer>\n <Typography variant=\"body1\">\n {results.length} Result{results.length !== 1 && 's'} Found\n </Typography>\n </ActionContainer>\n )\n\n return null\n }\n\n return (\n // intersection observer ref\n <Box ref={ref}>\n <StatusFooterInner />\n </Box>\n )\n})\n\n/**\n * Common Site Support Button\n *\n * @param props.search {object} store.search._searches[searchId]\n */\nconst SiteSupport = observer(({ search }) => {\n const { track } = useAnalytics()\n\n const handleClickSiteSupport = useCallback(() => {\n track('searchResultsButtonClick', {\n category: 'SearchResults',\n label: 'Site Support',\n })\n }, [track])\n\n if (search.loading) return null\n\n return (\n <ActionContainer>\n <Typography variant=\"body1\" sx={{ mb: 2 }}>\n Can't find what your looking for?\n </Typography>\n <Button\n variant=\"outlined\"\n color=\"primary\"\n to=\"/support\"\n component={ReactRouterLink}\n onClick={handleClickSiteSupport}\n >\n <Box mr={1}>\n <i className=\"fas fa-user-headset\" />\n </Box>\n Contact Site Support\n </Button>\n </ActionContainer>\n )\n})\n\n/**\n * Helper status for Favourites\n *\n * Displays instructions if favourites is empty\n */\nconst FavouritesStatus = observer(({ classes, search }) => {\n const query = useSearchResults(search.id)\n\n if (!query?.results) return null\n const resultsCount = query.results.flat.length\n\n if (resultsCount === 0)\n return (\n <div className={classes.actionContainer} data-nosnippet>\n <Typography variant=\"body1\" align=\"center\">\n You have no results in your favourites list.\n <br />\n Add items by clicking the <i className=\"far fa-star\" /> icon in the\n search results.\n </Typography>\n </div>\n )\n\n return (\n <ActionContainer sx={{ alignItems: 'stretch' }}>\n <Box sx={{ textAlign: 'center' }}>\n <Typography variant=\"body1\">\n {`${resultsCount}`} Result{resultsCount > 1 && 's'} Found\n </Typography>\n </Box>\n </ActionContainer>\n )\n})\n\n// Internal wrappers filter out {classes} from props as they have their own styles\n\nconst DividerWrapper = ({ classes, ...innerProps }) => (\n <Box px={1}>\n <Divider {...innerProps} />\n </Box>\n)\n\nconst CovidAlertWrapper = ({ classes, ...innerProps }) => (\n <CovidAlert {...innerProps} />\n)\n\nconst SponsorsWrapper = ({ classes, ...innerProps }) => (\n <Sponsors {...innerProps} variant=\"ie11\" />\n)\n\nconst AcknowledgementWrapper = ({ classes, ...innerProps }) => (\n <Acknowledgement {...innerProps} />\n)\n\n/**\n * Wrapper for <SearchResultsMarkdown />\n *\n * Loads markdown for contentPrefix from store\n */\nconst SearchResultsMarkdownWrapper = observer(({ search, contentPrefix }) => {\n const { content } = search.control.getSelectedInformation(contentPrefix) || {}\n return <SearchResultsMarkdown content={content} />\n})\n\n/**\n * Component map for mapping component name (string) to Component\n */\nconst componentMap = {\n Welcome,\n Results: SearchResults,\n StatusHeader,\n Status: StatusFooter,\n FavouritesStatus,\n SiteSupport,\n Divider: DividerWrapper,\n CovidAlert: CovidAlertWrapper,\n Promotions,\n Sponsors: SponsorsWrapper,\n Acknowledgement: AcknowledgementWrapper,\n SearchResultsMarkdown: SearchResultsMarkdownWrapper,\n}\n\n/**\n * Renders a list of SearchResultSection components (aka blocks)\n *\n * Sections support a nested 'theme' variant to configure responsive styling of Sponsors\n *\n * @param props.sections {object} section config\n * @param props.commonProps {object} Props passed to most children,\n * i.e.{ classes, store, search, params }\n */\nconst SearchResultsSections = ({ sections, commonProps }) => {\n const { classes } = commonProps\n\n return (\n <ErrorBoundary>\n {sections.map(({ type, items }, key) => {\n const sectionItems = items\n .map(({ component, theme, props }, key) => {\n const cprops = { ...commonProps, ...props }\n const C = componentMap[component]\n if (!C) {\n console.warn(`Invalid component ${component}`)\n return null\n }\n\n if (!theme) return <C key={key} {...cprops} />\n\n return (\n <TenantThemeProvider key={key} theme={theme}>\n <C {...cprops} />\n </TenantThemeProvider>\n )\n })\n .filter((c) => !!c)\n\n return (\n <Box key={key} className={clsx(classes.section, classes[type])}>\n {sectionItems}\n </Box>\n )\n })}\n </ErrorBoundary>\n )\n}\n\n/**\n * Main component for rendering search results\n *\n * Handles scrolling events and SearchResult selection via useResultsControl\n * Renders <SearchResultSections />\n *\n * @param props.classes Mui styles\n * @param props.searchId {string} Search (Tab)\n */\nconst SearchResultsListInner = observer(({ classes, searchId }) => {\n const { track } = useAnalytics()\n\n const theme = useTheme()\n const isMobile = useMediaQuery(theme.breakpoints.down('ph'))\n\n const store = useRootStore()\n const { params } = store.search\n const search = store.search.searches.get(searchId)\n\n const query = useSearchResults(searchId)\n\n const { tenantConfig: tc } = useConfig()\n const srl = tc.ui?.search?.resultsList\n const cfg = srl?.[searchId] || srl?.default\n\n const rootRef = React.useRef()\n\n const { selectedResult, setSelectedResult } = useResultsControl({\n subscriber: { searchId, control: 'results' },\n })\n\n // scroll to top callback\n\n const scrollToTop = React.useCallback(() => {\n const el = document.getElementById(`search-results-top-${searchId}`)\n\n scrollIntoView(el, {\n scrollMode: 'always',\n block: 'start',\n })\n }, [])\n\n // scroll to selected callback\n\n const scrollToSelected = React.useCallback(() => {\n const { subscriber, result } = selectedResult\n if (subscriber?.control === 'results') return\n if (!result) return\n\n const el = document.getElementById(`result-${result?.id}`)\n if (!el) return\n\n scrollIntoView(el, {\n scollMode: 'always',\n behavior: 'smooth',\n block: 'start',\n })\n }, [selectedResult])\n\n const scrollToSelectedCallbackRef = React.useRef({ callback: undefined })\n\n useEffect(() => {\n scrollToSelectedCallbackRef.current.callback = scrollToSelected\n }, [scrollToSelected, scrollToSelectedCallbackRef])\n\n // scroll to top on new search\n\n useEffect(() => {\n scrollToTop()\n }, [store.search.searchCount, searchId, scrollToTop])\n\n // scroll to selected on selection change\n\n useEffect(() => {\n scrollToSelected()\n }, [selectedResult, scrollToSelected])\n\n // scroll to selection on parent mutation (display: none)\n\n useParentMutationObservers({\n element: rootRef.current,\n mutationObservers: _.compact([\n {\n selector: 'div[role=\"tabpanel\"]',\n onMutation: (...args) =>\n scrollToSelectedCallbackRef?.current?.callback(...args),\n },\n isMobile && {\n selector: 'div[role=\"resultslist\"]',\n onMutation: (...args) =>\n scrollToSelectedCallbackRef?.current?.callback(...args),\n },\n ]),\n })\n\n // click outside\n\n const handleClickOutside = useCallback(\n (e) => {\n track('searchResultsResultClickOutside', {\n category: 'SearchResults',\n label: 'Click Outside',\n })\n\n e.stopPropagation()\n setSelectedResult()\n },\n [store.search, track]\n )\n\n const sections = cfg?.sections || []\n const commonProps = { classes, store, search, params }\n\n return (\n <div ref={rootRef} className={classes.root} onClick={handleClickOutside}>\n <SearchResultsSections\n searchId={searchId}\n commonProps={commonProps}\n sections={sections}\n />\n </div>\n )\n})\n\n/**\n * Entry for SearchResultsList\n *\n * Searches are performed by SearchQueryHost\n *\n * React Query results (or Favourites) are available via useSearchResults\n *\n * @param props.classes {object} Mui classes\n * @param props.searchId {string} Search (Tab)\n */\nconst SearchResultsList = observer((props) => {\n const { classes, searchId } = props\n\n const search = useStoreSearch(searchId)\n const queryProps = search.queryProps\n\n // console.log({ searchId, queryProps })\n\n return (\n <>\n <div id={`search-results-top-${searchId}`}></div>\n\n <SearchQueryHost queryProps={queryProps} />\n {/* <SearchQueryDebug queryProps={queryProps} /> */}\n\n <SearchResultsListInner {...props} />\n </>\n )\n})\n\nexport default withStyles(styles, { name: 'AMSSearchResultsList' })(\n SearchResultsList\n)\n","import React from 'react'\nimport _ from 'lodash'\n\nimport { Link as RouterLink } from 'react-router-dom'\n\nimport { withStyles } from '@mui/styles'\n\nimport { useConfig } from '@/config'\nimport { withVariantStyles } from '@/ui/theme/TenantTheme'\n\nexport const styles = (theme) => ({\n root: {\n display: 'flex',\n flexDirection: 'row',\n flexWrap: 'wrap',\n alignItems: 'center',\n justifyContent: 'flex-start',\n // margin: theme.spacing(-1, -1),\n // border: '1px solid #f00',\n },\n imageContainer: {\n maxHeight: 60,\n maxWidth: 120,\n // margin: theme.spacing(1, 1),\n '& img': {\n height: '100%',\n // width: '100%',\n maxHeight: 'inherit',\n maxWidth: 'inherit',\n // margin: '0 auto',\n // border: '1px solid rgba(0, 0, 0, 0.1)',\n },\n },\n link: {},\n})\n\nconst ImageList = ({ classes, images = [] }) => {\n const items = images.map(({ outletId, src, alt, href, to, target }, ikey) => {\n const image = (\n <img\n // className={classes.image}\n // height=\"50px\"\n data-outletid={outletId}\n src={src}\n alt={alt || 'sponsor logo'}\n />\n )\n\n if (href)\n return (\n <a\n key={ikey}\n className={classes.imageContainer}\n href={href}\n target={target || '_blank'}\n >\n {image}\n </a>\n )\n\n if (to)\n return (\n <RouterLink className={classes.imageContainer} key={ikey} to={to}>\n {image}\n </RouterLink>\n )\n\n return (\n <div key={ikey} className={classes.imageContainer}>\n {image}\n </div>\n )\n })\n\n return <div className={classes.root}>{items}</div>\n}\n\n// export default withVariantStyles(styles,{ name: 'AMSImageList' })(ImageList)\nexport default withStyles(styles, { name: 'AMSImageList' })(ImageList)\n","import { types, getRoot } from 'mobx-state-tree'\n\nexport const ContentItem = types\n .model({\n // id: types.identifier,\n // attributes: types.model({\n // }),\n type: types.literal('md'),\n body: '',\n })\n\nexport const Content = types\n .model({\n items: types.map(ContentItem),\n })\n\n .views((self) => ({\n get selectedInformation() {\n const noContent = { id: null, body: 'Content not found' }\n\n const ck = (category, region) => `information/${region}/${category}`\n\n const sc = getRoot(self).search.params.selectedCategories\n\n if (typeof sc !== 'string') return noContent\n\n return self.items.get(ck(sc, 'default')) || noContent\n },\n\n }))\n\n","import { types, flow, getRoot } from 'mobx-state-tree'\n\nimport _ from 'lodash'\nimport { toJS } from 'mobx'\nimport uniq from 'lodash/uniq'\nimport flatten from 'lodash/flatten'\nimport keyBy from 'lodash/keyBy'\nimport mapValues from 'lodash/mapValues'\nimport flatMap from 'lodash/flatMap'\nimport uniqBy from 'lodash/uniqBy'\n\nimport { config } from '@/config'\nconst { tenantConfig: tc } = config\n\nimport { Content } from './Content'\nimport { getCommissionedServicesByOutlet } from '@/api/legacy'\nimport { toJSDeep } from '../utils/mobx'\nimport { asArray } from '@/utils'\n\nexport const TenantOptions = types.model({\n title: '',\n categoryMode: types.enumeration('CategoryMode', ['single', 'multiple']),\n combineMode: types.enumeration('CombineMode', [\n 'filters',\n 'categories',\n 'tags',\n 'diary-format',\n ]),\n informationCategories: types.optional(types.boolean, false),\n defaultCategoryTitle: '',\n defaultCategorySuffix: '',\n maxVerboseCategories: 3,\n})\n\nexport const MetaCategory = types\n .model({\n id: '',\n title: '',\n titleSuffix: '',\n shortUrl: '',\n icon: '',\n search: true,\n show: '',\n categories: types.maybeNull(types.array(types.integer), []),\n tags: types.maybeNull(types.array(types.integer), []),\n commissionedServices: types.maybeNull(types.array(types.integer), []),\n diaryFormat: types.maybeNull(types.array(types.integer), []),\n description: '',\n })\n\n .volatile((self) => ({\n searchOptions: null,\n // badge: null,\n }))\n\n .views((self) => ({\n get suffix() {\n const to = getRoot(self).tenant.options\n return self.titleSuffix || to.defaultCategorySuffix\n },\n\n get suffixRegex() {\n return new RegExp(`\\\\s${self.suffix}$`)\n },\n\n get titleWithoutSuffix() {\n if (!self.suffix) return self.title\n return self.title.replace(self.suffixRegex, '')\n },\n\n get titleWithSuffix() {\n if (!self.suffix || self.title.match(self.suffixRegex)) return self.title\n return [self.title, self.suffix].join(' ')\n },\n\n get urlFormatted() {\n return self.shortUrl.replace(/\\s/g, '_')\n },\n\n get longUrl() {\n return self.title.replace(/[&]/g, 'and').replace(/[\\s,/]+/g, '_')\n },\n }))\n\n .actions((self) => ({\n setVolatile(category) {\n self.searchOptions = category.searchOptions\n // self.badge = category.badge\n },\n }))\n\nexport const Tenant = types\n .model({\n options: types.optional(TenantOptions, {\n categoryMode: 'single',\n combineMode: 'categories',\n informationCategories: false,\n }),\n categories: types.array(MetaCategory, []),\n content: types.optional(Content, {}),\n })\n\n .views((self) => ({\n get helpers() {\n return {\n json: ['options', 'categories', 'content'],\n }\n },\n\n get metaCategoryMap() {\n return keyBy(self.categories, 'id')\n },\n\n get metaCategoryLookups() {\n const keys = ['urlFormatted', 'longUrl']\n const lucap = _.fromPairs(\n keys.map((k) => [k, _.keyBy(self.categories, k)])\n )\n const lu = _.mapValues(lucap, (v) =>\n _.mapKeys(v, (mv, mk) => mk.toLowerCase())\n )\n const all = _.reduce(lu, (prev, curr) => ({ ...prev, ...curr }), {})\n\n const res = { ...lu, all }\n return res\n },\n\n getCategory(id) {\n return self.metaCategoryMap[id]\n // return id in self.metaCategoryMap ? self.metaCategoryMap[id] : undefined\n },\n\n categoriesForIds(metaCategoryIds) {\n return asArray(metaCategoryIds)\n .map((catId) => self.metaCategoryMap[catId])\n .filter((mc) => !!mc)\n },\n\n categoriesFromParams(params) {\n console.warn(\n 'categoriesFromParams() deprecated, use categoriesFromParams2()'\n )\n\n const cmode = tc.options.categoryMode\n\n const rconfig = tc?.search?.router?.category\n if (!rconfig) throw new Error('No config')\n\n const field = rconfig.field || 'title'\n const delimiter = rconfig.delimiter || '+'\n\n if (cmode === 'single') {\n // console.log('single')\n if (!params.category) return null\n\n const pp = params.category.replace('_', ' ')\n const pc = self.categories.find((c) => c[field] === pp)\n\n return pc ? pc.id : null\n }\n\n if (cmode === 'multiple') {\n console.log('multiple')\n if (!params.category) return []\n\n const pp = params.category\n .split(delimiter)\n .map((c) => c.replace('_', ' '))\n const cm = keyBy(self.categories, field)\n const cids = pp.filter((c) => c in cm).map((c) => cm[c].id)\n\n return cids\n }\n\n return null\n },\n\n categoriesFromParams2(param, { field = 'all' } = {}) {\n const category = param?.category || param?.categories\n // const { category } = param || {}\n\n if (!_.isString(category)) return []\n if (!category) return []\n\n const rconfig = tc?.search?.router?.category\n if (!rconfig) throw new Error('No config')\n\n const delimiter = rconfig.delimiter || '+'\n const pp = category.split(delimiter).map((c) => c.toLowerCase())\n\n const cl = pp.map((p) => this.metaCategoryLookups[field]?.[p])\n return _.compact(cl)\n },\n\n // combine search params from combined metacategories\n // for simple array types (categories, tags, diaryFormat etc.)\n\n combinedParamArray(\n metaCategoryIds,\n iterator,\n options = {\n default: [-1],\n }\n ) {\n const metaCategories = self.categoriesForIds(metaCategoryIds)\n const res = _.uniq(\n _.flatMap(metaCategories, (mc) => asArray(iterator(mc)))\n )\n return res.length > 0 ? res : options.default\n },\n\n // lookup for badges\n // TODO: migrate when elastic named queries available\n\n get commissionedServiceCategoryMap() {\n const cscats = self.categories.reduce((acc, curr) => {\n ;(curr?.commissionedServices || []).forEach((csid) => {\n // console.log('csid', csid)\n acc[csid] = [...(acc[csid] || []), curr.id]\n })\n return acc\n }, {})\n\n const res = mapValues(cscats, (c) =>\n uniq(c.sort((a, b) => a.localeCompare(b)))\n )\n return res\n },\n\n categoriesForCommissionedService(id) {\n const cats = (self.commissionedServiceCategoryMap[id] || []).map((id) =>\n self.getCategory(id)\n )\n return cats\n },\n\n // access md content\n\n getContent({ type = 'static', region = 'default', id = 'default' }) {\n const ck = (type, region, id) => `${type}/${region}/${id}`\n\n const regions = region === 'default' ? [region] : [region, 'default']\n\n const content = regions\n .map((r) => self.content.items.get(ck(type, r, id)))\n .find((c) => c)\n\n return content\n },\n }))\n\n .actions((self) => ({\n loadVolatile() {\n ;(tc.categories || []).forEach((cat) =>\n self.metaCategoryMap[cat.id].setVolatile(cat)\n )\n },\n\n // this might be redundant now!\n // loadCommissionedServices: flow(function* loadCommissionedServices({\n // commissioningOutletId,\n // typeMap,\n // }) {\n // if (!commissioningOutletId) {\n // console.error(`Invalid commissioningOutletId`)\n // return\n // }\n\n // const cso = yield getCommissionedServicesByOutlet(commissioningOutletId)\n\n // if (!cso || cso.length === 0) {\n // console.error(`No valid commissioned services returned for outlet ${commissioningOutletId}`)\n // return\n // }\n\n // // bin cs types by category\n // // a Commissioned service can be in more than one category (cs type)\n\n // const tagMap = mapValues(keyBy(typeMap, 'tagId'), v => v.category)\n\n // const csm = cso.reduce((acc, curr) => {\n // if (!curr.types) return acc\n\n // curr.types.forEach(t => {\n // const catId = tagMap[t.tagId]\n // if (!catId) return\n\n // acc[catId] = [...(acc[catId] || []), curr.commissionedServiceId]\n // })\n\n // return acc\n // }, {})\n\n // // get icons\n\n // const icons = uniqBy(flatMap(cso.map(cs => cs.types)), 'tagId').map(t => ({\n // id: tagMap[t.tagId],\n // icon: t.icon,\n // }))\n\n // // save to ams categories\n\n // self.categories.forEach(cat => {\n // cat.icon = icons[cat.id] || ''\n // cat.commissionedServices = csm[cat.id] || []\n // })\n // }),\n }))\n","import _ from 'lodash'\n\nconst builders = {\n directory: {\n nodeBuilder: 'elastic',\n nodeMap: {\n categories: {\n builder: 'terms',\n field: 'categories',\n },\n tags: {\n builder: 'terms',\n field: 'serviceTags',\n },\n },\n },\n}\n\nconst nodeBuilders = {\n elastic: {\n bool: (self, node) => {\n const bkeys = {\n and: 'filter',\n or: 'should',\n not: 'must_not',\n }\n\n const diff = _.difference(_.keys(node.bool), _.keys(bkeys))\n if (diff.length > 0) throw `Invalid keys: ${diff.join(', ')}`\n\n const bfe = _.reduce(node.bool, (acc, v, k) => {\n if (!(k in bkeys)) return acc\n acc[bkeys[k]] = Array.isArray(v)\n ? v.map(n => self.buildNode(self, n))\n : self.buildNode(self, v)\n\n return acc\n }, {})\n\n return { bool: { ...bfe } }\n },\n\n terms: (self, node, { key, field }) => {\n if (node.terms) return node\n if (!key || !field) throw `Invalid node map`\n\n return { terms: { [field]: node[key] }}\n },\n },\n}\n\nconst buildNode = (self, node) => {\n const keys = _.keys(node)\n if (keys.length !== 1) throw `Invalid keys: ${keys.join(', ')}`\n\n const nkey = keys[0]\n const nmap = self.nodeMap[nkey]\n const bldkey = nmap?.builder || nkey\n const bld = self.nodeBuilders[bldkey]\n\n if (!bld || typeof(bld) !== 'function') throw `Invalid builder: ${bldkey}`\n\n return bld(self, node, { key: nkey, ...nmap })\n}\n\nexport const buildFilter = ({\n builder = 'directory',\n filter = {},\n}) => {\n const bld = builders[builder]\n if (!bld) throw `Unknown builder: ${bld}`\n\n const nb = nodeBuilders[bld.nodeBuilder]\n if (!nb) throw `Unknown node builder: ${bld.nodeBuilder}`\n\n const self = {\n buildNode: buildNode,\n nodeBuilders: nb,\n nodeMap: bld.nodeMap,\n }\n\n const res = self.buildNode(self, filter)\n return res\n}\n\n","import { addDays } from 'date-fns'\nimport { toJS } from 'mobx'\nimport { config } from '@/config'\n// default mappings\n\nconst paramMaps = {\n age: {\n values: {\n '0 - 15': { ageMin: 0, ageMax: 15 },\n '16 - 25': { ageMin: 16, ageMax: 25 },\n '26 - 40': { ageMin: 26, ageMax: 40 },\n '41 - 64': { ageMin: 41, ageMax: 64 },\n '65+': { ageMin: 65, ageMax: 999 },\n },\n default: { AgeMin: 0, AgeMax: 999 },\n },\n\n gender: {\n values: {\n Male: 'MaleOnly',\n Female: 'FemaleOnly',\n },\n default: null,\n },\n}\n\nconst mapParam = (param, value) => {\n const m = paramMaps[param]\n if (!m) {\n console.warn(`No param mapping found for \"${param}\"`)\n return\n }\n\n return m.values[value] || m.default\n}\n\n// builders\n\nconst builders = {\n directory: {\n fixed: ({ fields }) => fields,\n\n page: ({ pageNumber = 1, pageSize = 20 }) => {\n return { pageNumber, pageSize }\n },\n\n sort: ({ sortField, sortDirection }) => {\n // return { sortField: param.sortField}\n return { sortField, sortDirection }\n },\n\n query: ({ query }) => {\n return { searchTerm: query || '' }\n },\n\n categories: ({ categories }) => {\n return { categories: categories, categoriesRequired: true }\n },\n\n commissionedServices: ({ commissionedServices }) => {\n const cs = commissionedServices.length > 0 ? commissionedServices : [-1]\n return { commissionedServices: cs }\n },\n\n location: ({ location }) => {\n return { latitude: location.lat, longitude: location.lng }\n },\n\n // single region (wapha geog)\n locationRegion: ({ location }) => {\n if (location.type !== 'geography')\n console.warn('Location is not geography type', location)\n return { locationRegions: [location.id] }\n },\n\n // locationRegions override (ihelp)\n locationRegions: ({ locationRegions }) => {\n return { locationRegions }\n },\n isIncludeOutsideRegion: ({ isIncludeOutsideRegion = true }) => {\n return { isIncludeOutsideRegion }\n },\n defaultGeoId: ({ defaultGeoId }) => {\n const { tenantConfig: tc } = config\n defaultGeoId = tc?.search?.location?.defaultLocation?.id\n return { defaultGeoId }\n },\n serviceRegions: ({ queryBody, location }) => {\n const { appConfig: ac } = config\n\n if (location.type !== 'geography')\n console.warn('Location is not geography type', location)\n\n const gids =\n location.lgas?.length > 0 && ac?.tenant === 'wapha'\n ? location.lgas\n : [location.id]\n return {\n extendedFilters: [\n ...(queryBody.extendedFilters || []),\n {\n nested: {\n path: 'serviceRegions',\n query: {\n terms: {\n 'serviceRegions.geographyId': gids,\n },\n },\n },\n },\n ],\n }\n },\n\n radius: ({ radius }) => {\n return { radius }\n },\n\n age: ({ age }) => {\n return { age: mapParam('age', age) }\n },\n\n gender: ({ gender }) => {\n return { gender: mapParam('gender', gender) }\n },\n\n filters: ({ queryBody, filters }) => {\n if (!filters) {\n console.warn(`Invalid filters`)\n return\n }\n\n return {\n extendedFilters: [\n ...(queryBody.extendedFilters || []),\n {\n bool: {\n should: [{ terms: { categories: [-1] } }, ...filters],\n minimum_should_match: 1,\n },\n },\n ],\n }\n },\n\n rawFilters: ({ rawFilters }) => {\n return { extendedFilters: rawFilters }\n },\n },\n\n // diary: {\n // fixed: ({ fields }) => fields,\n\n // page: ({ pageNo = 1, pageSize = 20 }) => {\n // return { PageNo: pageNo, PageSize: pageSize }\n // },\n\n // query: ({ query }) => {\n // return { WhatText: query || '' }\n // },\n\n // categories: ({ categories }) => {\n // return { ServiceCategories: categories }\n // },\n\n // locationId: ({ location }) => {\n // if (location.type !== 'locality') console.warn('Location is not locality type', location)\n // return { LocationId: [location.id] }\n // },\n\n // radius: ({ radius }) => {\n // return { RadiusKM: radius }\n // },\n\n // dateRange: ({ dateRange }) => {\n // if (dateRange.delta < 0) {\n // const from = dateRange.start || new Date()\n // const to = dateRange.end ? addDays(dateRange.end, 1) : addDays(from, 90)\n\n // return {\n // WhenIndex: 'Custom',\n // SearchFrom: from.toISOString(),\n // SearchTo: to.toISOString(),\n // }\n // }\n\n // console.error(`date delta not implemented ${dateRange.delta}`)\n // },\n\n // diaryFormat: ({ diaryFormat }) => {\n // // const df = diaryFormat.length > 0 ? diaryFormat : [-1]\n // return { DiaryFormatId: diaryFormat }\n // },\n // },\n\n diary: {\n fixed: ({ fields }) => fields,\n\n page: ({ pageNo = 1, pageSize = 20 }) => {\n return { pageNo, pageSize: pageSize }\n },\n\n query: ({ query }) => {\n return { whatText: query || '' }\n },\n\n categories: ({ categories }) => {\n return { serviceCategories: categories }\n },\n\n locationId: ({ location }) => {\n if (location.type !== 'locality')\n console.warn('Location is not locality type', location)\n return { locationId: location.id }\n },\n\n radius: ({ radius }) => {\n return { radiusKM: radius }\n },\n\n dateRange: ({ dateRange }) => {\n if (dateRange.delta < 0) {\n const from = dateRange.start || new Date()\n const to = dateRange.end ? addDays(dateRange.end, 1) : addDays(from, 90)\n\n return {\n whenIndex: 'Custom',\n searchFrom: from.toISOString(),\n searchTo: to.toISOString(),\n }\n }\n\n console.error(`date delta not implemented ${dateRange.delta}`)\n },\n\n diaryFormat: ({ diaryFormat }) => {\n // const df = diaryFormat.length > 0 ? diaryFormat : [-1]\n return { diaryFormatId: diaryFormat }\n },\n },\n}\n\nexport const buildQuery = ({ query, params, paramOverrides }) => {\n const { builder: builderId } = query\n const builder = builders[builderId]\n\n if (!builder) {\n console.error(`Builder not found for ${builderId}`)\n return\n }\n\n const builtQuery = query.parameters.reduce(\n (queryBody, { param, ...pargs }) => {\n const paramBuilder = param && builder[param]\n\n if (!paramBuilder) {\n console.warn(`No query builder for param \"${param}\"`)\n return queryBody\n }\n\n const paramResult = paramBuilder({ queryBody, ...params, ...pargs })\n return { ...queryBody, ...paramResult }\n },\n {}\n )\n\n // console.log({ queryBody: qb })\n return { ...builtQuery, ...paramOverrides }\n}\n","import { buildFilter } from '../utils/filter-builder'\nimport { buildQuery } from '../utils/query-builder'\n// import { Event } from './Event'\n// import { Service } from './Service'\nimport { config } from '@/config'\nimport { analytics } from '@/analytics'\nimport _ from 'lodash'\nimport { types, flow, getRoot } from 'mobx-state-tree'\nimport { toJSDeep } from '../utils/mobx'\n\nconst { tenantConfig: tc } = config\n\n// map of parameter mappings for each search\n\nconst queries = _.keyBy(tc.search.queries, 'id')\n\n// map of build/search functions to search definition\n\nconst searchInterfaces = {\n directory: {\n buildParams: buildQuery,\n },\n diary: {\n buildParams: buildQuery,\n },\n favourites: {\n buildParams: null,\n },\n}\n\n// default location for map\n\nconst australia = {\n center: { lat: -28.6, lng: 134.0 },\n zoom: 5,\n selected: null,\n}\n\nconst australial = {\n geometry: { lat: -28.6, lng: 134.0 },\n zoom: 5,\n}\n\n// export const Result = types.union(Service, Event)\n\nexport const Search = types\n .model({\n id: '',\n type: types.enumeration(Object.keys(searchInterfaces)),\n description: '',\n filterMode: types.optional(\n types.enumeration('FilterMode', [\n 'filters',\n 'categories',\n 'tags',\n 'commissioned-services',\n ]),\n 'filters'\n ),\n loading: false,\n error: false,\n queryTotal: 0,\n total: 0,\n lastResultsCount: 0,\n pageSize: 30,\n // results: types.array(Result),\n showSiteSupport: false,\n resultsHeader: types.maybeNull(\n types.model({\n type: '',\n prefix: '',\n }),\n null\n ),\n })\n\n .volatile(() => ({\n defaultFilter: {},\n apiParams: {},\n // resultsMap: {},\n }))\n\n .views((self) => ({\n get helpers() {\n return {\n json: [\n 'provider',\n 'combinedParams',\n 'apiParams',\n 'filterMap',\n 'activeFilters',\n 'mapParams',\n ],\n }\n },\n\n get control() {\n return getRoot(self).search\n },\n\n get tenant() {\n return getRoot(self).tenant\n },\n\n get provider() {\n return searchInterfaces[self.type]\n },\n\n get query() {\n return queries[self.type]\n },\n\n get category() {\n return self.control.selectedInformationCategory\n },\n\n get paramOverrides() {\n return self.category?.searchOptions?.overrides?.queries?.[self.id]?.params\n },\n\n get combinedParams() {\n const combineMode = _.camelCase(self.tenant.options.combineMode)\n if (!combineMode) throw `Invalid tenant.options.combineMode`\n\n if (combineMode === 'filters') return { filters: self.activeFilters }\n\n // old style combined params (categories, tags etc.)\n\n const combinedParams = self.tenant.combinedParamArray(\n self.control.activeCategories,\n (mc) => mc[combineMode]\n )\n\n if (combinedParams?.[0] === -1)\n console.warn(\n 'Combined params fell back to default, no results will be returned',\n {\n combinedParams,\n }\n )\n\n return { [combineMode]: combinedParams }\n },\n\n filter(category) {\n const so = self.tenant.metaCategoryMap[category]?.searchOptions\n if (!so) return null\n\n // all or single search filter\n const filter = so.filter || so[self.id]?.filter\n if (filter) return buildFilter({ builder: self.type, filter })\n\n // raw filter\n return so[self.id]?.rawFilter\n },\n\n get filterMap() {\n const res = _.mapValues(self.tenant.metaCategoryMap, (v, k) =>\n self.filter(k)\n )\n return res\n },\n\n get activeFilters() {\n const cats = self.control.params.selectedCategoriesMeta\n\n // single category select override || active categories\n const filters = (\n cats.length === 1 &&\n cats[0]?.searchOptions?.overrides?.filters?.categories === 'all'\n ? _.values(self.filterMap)\n : self.control.activeCategoriesArray.map((c) => self.filter(c))\n ).filter((f) => !!f)\n\n return filters\n },\n\n get canLoadMore() {\n return !!self.provider.canLoadMore?.(self)\n },\n\n hasResult(id) {\n return id in self.resultsMap\n },\n\n get resultsMap() {\n return _.keyBy(self.results, 'id')\n },\n\n get canAddFavourite() {\n return !!self.control.favouritesSearch\n },\n\n get locationZoomLevel() {\n const mapConfig = tc.ui?.search?.map || {}\n const location = self.control.params.location\n const defaultZoom = mapConfig?.locationZoom || 15\n\n if (!location || !mapConfig.zoomLevels) return defaultZoom\n\n const zmap = mapConfig.zoomLevels[location.type]\n if (!zmap) return defaultZoom\n\n return zmap[location.id] || defaultZoom\n },\n\n get defaultMapParams() {\n const location = self.control.params.location\n const defaultLocation = tc.search?.location?.defaultLocation\n\n const { geometry } = location || defaultLocation || australial\n\n return {\n center: geometry,\n zoom: 15,\n }\n },\n\n get mapParams() {\n const location = self.control.params.location\n const defaultLocation = tc.search?.location?.defaultLocation\n const selectedResult = self.control.selectedResult\n\n // no location\n\n if (!location) {\n return defaultLocation\n ? {\n center: { lat: defaultLocation.lat, lng: defaultLocation.lng },\n zoom: 15,\n selected: null,\n }\n : australia\n }\n\n // selected result\n\n if (\n selectedResult &&\n selectedResult.result.search === self.id &&\n selectedResult.result.address !== '--withheld--'\n ) {\n return {\n center: {\n lat: selectedResult.result.lat,\n lng: selectedResult.result.lng,\n },\n zoom: 17,\n selected: selectedResult.result,\n }\n }\n\n // default\n\n return {\n center: { lat: location.lat, lng: location.lng },\n zoom: self.locationZoomLevel,\n selected: null,\n }\n },\n\n get mapResults() {\n return self.results.filter((r) => r.address !== '--withheld--')\n },\n\n get combinedRawFilters() {\n const catFilters = self.control.activeCategoriesArray\n .map((c) => self.tenant.metaCategoryMap[c])\n .map((cm) => cm.searchOptions?.[self.id]?.rawFilter)\n .filter((f) => !!f)\n\n return [\n {\n bool: {\n should: [self.defaultFilter, ...catFilters],\n minimum_should_match: 1,\n },\n },\n ]\n },\n\n get queryProps() {\n // console.log('getQueryOptions', self.type)\n\n const topts = self.tenant.options\n\n const location = self.control.params.location\n\n const provider = self.provider || {}\n\n // info only categories don't have searches\n\n const isInformationOnly =\n topts.categoryMode === 'single' &&\n topts.informationCategories &&\n !self.category.search\n\n const enabled =\n self.id !== 'favourites' &&\n !isInformationOnly &&\n _.isFunction(provider.buildParams) &&\n !!location\n\n const allParams =\n location &&\n provider.buildParams?.({\n id: self.id,\n query: queries[self.id],\n params: {\n pageSize: self.pageSize,\n ...self.control.params,\n ...self.combinedParams,\n },\n paramOverrides: self.paramOverrides,\n })\n\n const pageParam = _.pick(allParams, provider.pageParamKey)\n const params = _.omit(allParams, provider.pageParam)\n\n return {\n searchId: self.id,\n searchType: self.type,\n querySummary: self.control.querySummary,\n pageSize: self.pageSize,\n enabled,\n isInformationOnly,\n location,\n pageParam,\n params,\n }\n },\n }))\n\n .actions((self) => ({\n setDefaultFilter(filter) {\n self.defaultFilter = filter\n },\n\n setResults(results) {\n self.results = results\n },\n\n setLoading(loading) {\n self.loading = loading\n },\n\n setError(error) {\n self.error = error\n },\n\n setQueryTotal(total) {\n self.queryTotal = total\n },\n\n /**\n * @deprecated\n */\n clear() {\n self.loading = false\n self.error = false\n // self.clearResults()\n // self.resultsMap.clear()\n self.total = 0\n },\n\n // favourites\n\n /**\n * @deprecated\n */\n insert(result) {\n if (self.hasResult(result.id)) return false\n\n self.results = [result, ...self.results]\n // self.resultsMap[result.id] = result\n\n return true\n },\n\n removeById(id) {\n if (!self.hasResult(id)) return false\n\n //\n if (\n self.control.selectedResult &&\n self.control.selectedResult.id === id\n ) {\n self.control.setSelected(null)\n }\n\n const ri = self.results.findIndex((r) => r.id === id)\n self.results.splice(ri, 1)\n // delete self.resultsMap[id]\n\n return true\n },\n\n initSearch() {\n analytics.track('searchImplInit', {\n category: 'SearchImpl',\n label: self.id,\n })\n\n if (self.type === 'favourites') return\n\n self.clear()\n\n const topts = self.tenant.options\n\n if (\n topts.categoryMode === 'single' &&\n topts.informationCategories &&\n !self.category.search\n )\n return\n\n if (!self.provider.buildParams) return\n if (!self.control.params.location) return\n\n const query = queries[self.id]\n if (!query) return\n\n const buildParams = self.provider.buildParams || buildQuery\n\n // console.log({ combinedParams: self.combinedParams })\n\n self.apiParams = buildParams({\n id: self.id,\n query: queries[self.id],\n params: {\n pageSize: self.pageSize,\n ...self.control.params,\n ...self.combinedParams,\n },\n paramOverrides: self.paramOverrides,\n })\n\n // self.performSearch()\n },\n\n setSearchResultsFromReact(res) {\n if (!res) {\n self.clea\n }\n const resUnique = res.results.map((r) => ({\n ...r,\n id: `${self.id}_${r.id}`,\n search: self.id,\n }))\n\n self.results = [...self.results, ...resUnique]\n\n analytics.track('searchImplPerformSearchResults', {\n category: 'SearchImpl',\n label: self.id,\n value: res.total,\n })\n\n if (res.total > 0) {\n self.total = res.total\n }\n\n self.lastResultsCount = res.results.length\n },\n\n tryAgain() {\n analytics.track('searchImplTryAgain', {\n category: 'SearchImpl',\n label: self.id,\n })\n\n if (self.type === 'favourites') return\n\n self.control.initSearch()\n },\n\n loadMore() {\n analytics.track('searchImplLoadMore', {\n category: 'SearchImpl',\n label: self.id,\n })\n\n if (self.type === 'favourites') return\n if (!self.provider.search) return\n if (!self.canLoadMore) return\n\n if (self.provider.nextPage) self.apiParams = self.provider.nextPage(self)\n\n // else {\n // self.apiParams = {\n // ...self.apiParams,\n // // PageSize: self.pageSize,\n // pageNo: self.apiParams.pageNo + 1,\n // // PageNumber: self.results.length / self.pageSize + 1,\n // }\n // }\n\n // self.performSearch()\n },\n // }))\n // .actions(self => ({\n\n updateResults(queryResults) {\n const { result = [], total = 0 } = queryResults\n self.results = result\n self.total = total\n },\n\n performSearch: flow(function* performSearch() {\n analytics.track('searchImplPerformSearch', {\n category: 'SearchImpl',\n label: self.id,\n searchParams: self.apiParams,\n })\n\n try {\n self.setLoading(true)\n\n const apiParams = self.apiParamsObs\n\n const res = yield self.provider.search(self.apiParams)\n\n const resUnique = res.results.map((r) => ({\n ...r,\n id: `${self.id}_${r.id}`,\n search: self.id,\n }))\n\n self.results = [...self.results, ...resUnique]\n\n analytics.track('searchImplPerformSearchResults', {\n category: 'SearchImpl',\n label: self.id,\n value: res.total,\n })\n\n if (res.total > 0) {\n self.total = res.total\n }\n\n self.lastResultsCount = res.results.length\n } catch (error) {\n console.error(error)\n self.setError(true)\n } finally {\n self.setLoading(false)\n }\n }),\n }))\n","import { types } from 'mobx-state-tree'\nimport { toLocalityL } from '@/api/legacy'\n\nexport const Locality = types\n .model({\n type: types.literal('locality'),\n id: 0,\n default: false,\n label: '',\n councilId: 0,\n state: '',\n postcode: '',\n lat: 0.0,\n lng: 0.0,\n url: '',\n councilUrl: '',\n stateUrl: '',\n })\n\n .views((self) => ({\n get geometry() {\n return {\n lat: self.lat,\n lng: self.lng,\n }\n },\n\n get name() {\n return self.url.replace(/_/g, ' ')\n },\n\n get stateLong() {\n return self.stateUrl.replace(/_/g, ' ')\n },\n\n get summary() {\n return `${this.name}, ${this.stateLong}`\n },\n\n get summaryArray() {\n return [this.name, this.stateLong]\n },\n\n get asLocality() {\n return self && toLocalityL(self)\n },\n }))\n","import { types } from 'mobx-state-tree'\n\nexport const Geography = types\n .model({\n type: types.literal('geography'),\n id: 0,\n default: false,\n label: '',\n dataset: '',\n area: 0.0,\n lat: 0.0,\n lng: 0.0,\n kmlUrl: '',\n lgas: types.array(types.number),\n })\n\n .views((self) => ({\n get geometry() {\n return {\n lat: self.lat,\n lng: self.lng,\n }\n },\n\n get adminBoundaryUrl() {\n return self.kmlUrl\n ?.replace(/devdirectorycdn/, 'mcdcdn')\n .replace(/\\/kml\\//, '/geojson-simple/')\n .replace(/\\.kml$/, '.geojson')\n .replace(/%2c/, '')\n .replace(/%2c/, '')\n },\n\n get summary() {\n return self.label\n },\n\n get summaryArray() {\n return [self.label]\n },\n }))\n","// import isEqual from 'lodash/isEqual'\n\nimport _ from 'lodash'\nimport { toJS, isObservableArray } from 'mobx'\nimport { toJSDeep } from '../utils/mobx'\nimport { types, getRoot, getParent } from 'mobx-state-tree'\n\nimport { Locality } from './Locality'\nimport { Geography } from './Geography'\n\nimport { config, useConfig } from '@/config'\nimport { analytics } from '@/analytics'\nimport { toLocationL } from '@/api/legacy'\n\nconst { tenantConfig: tc } = config\n\nconst DateRange = types.model({\n // -2 custom, -1 anytime, 0+ days\n delta: -1,\n start: types.maybeNull(types.Date),\n end: types.maybeNull(types.Date),\n})\n\nexport const SearchParams = types\n .model({\n pathway: 'self',\n query: '',\n radius: 75,\n location: types.maybeNull(types.union(Locality, Geography)),\n dateRange: types.optional(DateRange, {}),\n categories: types.array(types.string),\n selectedCategories: types.union(\n types.array(types.string),\n types.maybeNull(types.string)\n ),\n age: types.maybeNull(types.string),\n gender: types.maybeNull(types.string),\n sexuality: types.maybeNull(types.string),\n atsi: types.maybeNull(types.string),\n })\n\n .views((self) => ({\n isPreferredCategory(id) {\n return self.categories.includes(id)\n },\n\n get tenant() {\n return getRoot(self).tenant\n },\n\n get ui() {\n return getParent(self).ui\n },\n\n get visibleCategories() {\n if (!self.ui.showAllCategories && self.categories.length > 0) {\n return self.tenant.categories\n .filter((c) => c.show !== 'never')\n .filter((c) => c.show === 'always' || self.isPreferredCategory(c.id))\n }\n\n return self.tenant.categories\n .filter(\n (c) => !(c.show === 'preferred' && !self.isPreferredCategory(c.id))\n )\n .filter((c) => c.show !== 'never')\n },\n\n get selectedCategoriesMeta() {\n if (typeof self.selectedCategories === 'string') {\n const sc = self.tenant.metaCategoryMap[self.selectedCategories]\n return [sc]\n }\n\n if (isObservableArray(self.selectedCategories)) {\n const sc = self.selectedCategories.map(\n (sc) => getRoot(self).tenant.metaCategoryMap[sc]\n )\n return sc\n }\n\n return []\n },\n\n get routePathSource() {\n return {\n locality: self.location,\n categories: self.selectedCategoriesMeta,\n }\n },\n\n get isSearchCategorySelected() {\n return (\n self.selectedCategoriesMeta.length === 0 ||\n self.selectedCategoriesMeta.some((c) => c.search)\n )\n },\n\n isLocationParamsSelected(params) {\n // // no location\n // if (!params.locality && !self.location) return true\n\n // // restore location\n // if (!params.locality && self.location) return false\n\n // change location\n return (\n params?.state === self.location?.stateUrl &&\n params?.council === self.location?.councilUrl &&\n params?.locality === self.location?.url\n )\n },\n\n get urlParamsSource() {\n return {\n location: self.location,\n category: self.selectedCategoriesMeta,\n }\n },\n }))\n\n .actions((self) => ({\n set(key, value) {\n if (key === 'location') {\n self.setLocation(value)\n return\n }\n\n if (key in self) {\n self[key] = value\n }\n },\n\n setQuery(query) {\n self.query = query\n },\n setRadius(radius) {\n self.radius = radius\n },\n setDefaultLocation(location) {\n self.defaultLocation = location\n },\n setLocation(location) {\n self.location = location\n },\n\n setSelectedCategories(selected) {\n const s = toJS(selected)\n const mcm = getRoot(self).tenant.metaCategoryMap\n\n if (typeof s === 'string') {\n self.selectedCategories = s in mcm ? s : null\n } else if (Array.isArray(s)) {\n const sf = s.filter((s) => s in mcm)\n self.selectedCategories = sf.length > 0 ? sf : null\n } else {\n self.selectedCategories = null\n }\n },\n\n initLocation() {\n const { defaultLocation = null, initLocation = 'dialog' } =\n tc.search?.location\n\n if (self.location?.id === 0) {\n console.warn('Bad location, resetting')\n self.location = null\n }\n\n if (self.location) return\n\n if (initLocation === 'default' && defaultLocation && !self.location)\n self.location = defaultLocation\n },\n\n updateFromRouterHandler({ data }) {\n // console.log('updateFromRouterHandler', { data })\n\n const prepareLocation = (loc) => {\n if (!loc) return loc\n const sloc = toLocationL(loc)\n return sloc\n }\n\n const { locality, categories = [] } = data || {}\n\n self.location = prepareLocation(locality)\n // self.location = locality && locality.localityId ? toLocationL(location) : null\n\n self.setSelectedCategories((categories || []).map((c) => c.id))\n },\n\n updateFromSurvey(survey) {\n self.selectedCategories = null\n self.query = ''\n self.showAllCategories = false\n\n // console.log(toJSDeep(survey))\n\n _.keys(survey).forEach((k) => {\n if (_.has(self, k)) {\n self[k] = toJS(survey[k])\n }\n })\n\n // autoselect one category\n\n if (\n !self.selectedCategories &&\n tc.search?.survey?.autoSelectSingleCategory &&\n self.categories?.length === 1\n ) {\n const cid = self.categories[0]\n self.selectedCategories =\n tc.options.categoryMode === 'single' ? cid : [cid]\n }\n\n analytics.track('surveyImplUpdateParamsFromSurvey', {\n category: 'Survey',\n label: 'Update Params',\n // params\n })\n },\n }))\n","import _ from 'lodash'\nimport { types, getParent } from 'mobx-state-tree'\n// import { useConfig } from '@/config'\n\nexport const SearchUI = types\n .model({\n locationDialogShown: false,\n showAllCategories: false,\n selectedTab: 0,\n covidAlertShown: false,\n })\n\n .volatile((self) => ({\n paramsPortal: null,\n }))\n\n .views((self) => ({\n get params() {\n return getParent(self).params\n },\n }))\n\n .actions((self) => ({\n setShowAllCategories(val) {\n self.showAllCategories = val\n },\n setSelectedTab(val) {\n self.selectedTab = val\n },\n setLocationDialogShown(val) {\n self.locationDialogShown = val\n },\n setCovidAlertShown(val) {\n self.covidAlertShown = val\n },\n setParamsPortal(val) {\n self.paramsPortal = val\n },\n\n clear() {\n self.showAllCategories = false\n self.selectedTab = 0\n },\n\n updateFromSurvey(survey) {\n // console.log(survey.pathwayConfig)\n\n const config = survey.pathwayConfig?.ui\n if (!config) return\n\n _.assign(self, config)\n },\n }))\n","import _ from 'lodash'\nimport { types, getRoot } from 'mobx-state-tree'\nimport { keys, values, entries, toJS } from 'mobx'\n\nimport { Search } from './Search'\nimport { SearchParams } from './SearchParams'\nimport { SearchUI } from './SearchUI'\n// import { Service } from './Service'\n// import { Event } from './Event'\n\nimport { config, useConfig } from '@/config'\nimport { asArray, toEnglishList } from '@/utils'\nimport { toFavourite } from '../utils/search-utils'\nimport { toJSDeep } from '../utils/mobx'\n\nconst { tenantConfig: tc } = config\n// const { track } = useAnalytics()\n\nexport const SearchControl = types\n .model({\n // selectedResult: types.maybeNull(\n // types\n // .model({\n // source: types.enumeration(['results', 'map']),\n // // result: types.safeReference(types.union(Service, Event)),\n // id: types.maybeNull(types.string, null),\n // })\n // .views(self => ({\n // // get control() {\n // // return getRoot(self).search\n // // },\n // // get result() {\n // // // console.log('get result', self.id)\n // // if (!self.id) return null\n // // try {\n // // const searchId = self.id.match(/^([^_])*/)[0]\n // // const search = self.control.searches.get(searchId)\n // // const result = self.id in search.resultsMap ? search.resultsMap[self.id] : null\n // // return result\n // // } catch {\n // // console.error('get selected result error')\n // // return null\n // // }\n // // },\n // })),\n // null\n // ),\n searches: types.map(Search, {}),\n searchCount: 0,\n params: types.optional(SearchParams, {}),\n ui: types.optional(SearchUI, {}),\n })\n\n .volatile(() => ({\n contentRegions: {},\n }))\n\n .views((self) => ({\n get tenant() {\n return getRoot(self).tenant\n },\n\n get _searches() {\n const so = _.fromPairs(entries(self.searches))\n return {\n ...so,\n helpers: _.mapValues(so, (v, k) => ({ [k]: { store: v } })),\n }\n },\n\n get helpers() {\n return {\n _searches: { store: self._searches },\n json: ['params', 'activeCategories'],\n }\n },\n\n get locationSummary() {\n if (self.params.location?.type === 'locality')\n return self.params.location?.summary\n return 'Australia'\n },\n\n get categoriesSummary() {\n const sc = self.params.selectedCategoriesMeta\n\n if (sc.length === 1) {\n return sc[0].titleWithSuffix\n }\n\n return self.tenant.options.defaultCategoryTitle\n },\n\n /**\n * Gets summaries as string[] of location & selected categories / default category title\n *\n * Used by Search.queryProps, then passed all the way through search query to StatusHeader\n *\n * Returned values are cloned non-observables.\n *\n * See SearchQuerySummary in @/api/search-query/types\n */\n get querySummary() {\n const topts = self.tenant.options\n const scm = self.params.selectedCategoriesMeta\n\n return toJSDeep({\n maxVerboseCategories: topts.maxVerboseCategories,\n location: self.params.location?.summaryArray,\n categories: scm.length\n ? scm.map((c) => c.titleWithSuffix)\n : [topts.defaultCategoryTitle],\n })\n },\n\n // /**\n // * @deprecated\n // */\n // get locationPath() {\n // const lconfig = tc?.search?.router?.location\n // if (!lconfig) return null\n\n // const loc = self.params.location\n // if (!loc) return null\n\n // return `${lconfig.prefix}/${loc.stateUrl}/${loc.councilUrl}/${loc.url}`\n // },\n\n // /**\n // * deprecated\n // */\n // get categoryPath() {\n // const cconfig = tc?.search?.router?.category\n // if (!cconfig) return null\n\n // const sc = self.params.selectedCategoriesMeta\n // if (sc.length === 0) return null\n\n // const field = cconfig.field || 'title'\n // const delimiter = cconfig.delimiter || '+'\n\n // const cats = sc.map((c) => c[field].replace(' ', '_')).join(delimiter)\n // return `${cconfig.prefix}/${cats}`\n // },\n\n // /**\n // * @deprecated\n // */\n // get path() {\n // const rconfig = tc?.search?.router\n // if (!rconfig) return null\n\n // const pc = [rconfig.root, self.locationPath, self.categoryPath]\n // .filter((x) => x)\n // .join('/')\n // .replace(/(\\/)+/, '/')\n\n // return pc\n // },\n\n get welcome() {\n const title = `Welcome to ${self.tenant.options.title}`\n\n const l = toEnglishList(_.without(keys(self.searches), 'favourites'))\n const lt = l ? `for ${l}` : null\n const body = `To begin searching ${lt} in your region, please select a location in the search settings.`\n\n return { title, body }\n },\n\n // TODO: fix up all the consumers of theses things so everything is a []\n\n /**\n * Categories applicable to current search.\n *\n * Either selected, or visible\n */\n get activeCategories() {\n // this is the categories applicable to any given search\n // i.e. selected || visible\n\n const p = self.params\n\n if (p.selectedCategories) return p.selectedCategories\n return self.params.visibleCategories.map((c) => c.id)\n },\n\n /**\n * activeCategories as an Array\n */\n get activeCategoriesArray() {\n return asArray(self.activeCategories)\n },\n\n /**\n * activeCategories as a Set\n */\n get activeCategoriesSet() {\n return new Set(self.activeCategoriesArray)\n },\n\n get contentRegion() {\n const regionId = self.params.location?.id\n return self?.contentRegions?.[regionId]?.id || 'default'\n },\n\n /**\n * Gets the filtered selected category if 'Information' search is\n * supported\n */\n get selectedInformationCategory() {\n const tenant = getRoot(self).tenant\n if (tenant.options.categoryMode !== 'single') return undefined\n\n const catId = self.params.selectedCategories || 'default'\n if (!_.isString(catId)) return undefined\n\n return tenant.getCategory(catId)\n },\n\n /**\n * Gets static content for the current selected category (single category mode only)\n *\n * Used by ihelp for Information tabs (`type = 'information'`)\n * Used by mindcaregl for intervention categories (`'type = 'results'`)\n *\n * Loads:\n * `@/tenants/<tenant>/content/<type>/<contentRegionId>/<categoryId>.md`\n *\n * Currently no tennants use content regions\n *\n * @param {string} type\n */\n getSelectedInformation(type = 'information') {\n const tenant = getRoot(self).tenant\n const region = self.contentRegion\n\n const category = self.selectedInformationCategory\n const content = tenant.getContent({ type, region, id: category?.id })\n\n return { category, content }\n },\n\n /**\n * Gets static content\n *\n * Loads:\n * `@/tenants/<tenant>/content/static/<region>/<id>.md`\n */\n getStaticContent(id) {\n const tenant = getRoot(self).tenant\n const region = self.contentRegion\n\n const noContent = {\n id: null,\n region: 'default',\n title: 'Content Not Found',\n body: '',\n }\n\n const content = tenant.getContent({ type: 'static', region, id })\n\n return content || noContent\n },\n\n get favouritesSearch() {\n return values(self.searches).find((s) => s.type === 'favourites')\n },\n\n // /**\n // * @deprecated\n // */\n // isFavourite(id) {\n // if (!self.favouritesSearch) return false\n\n // const fid = id.match(/_fav$/) ? id : `${id}_fav`\n // return self.favouritesSearch.hasResult(fid)\n // },\n }))\n\n .actions((self) => ({\n // default filters are volatile\n loadDefaultFilters() {\n Array.from(self.searches.values()).forEach((v) => {\n const sc = tc.search?.searches[v.id]\n if (sc.defaultFilter) v.setDefaultFilter(sc.defaultFilter)\n })\n },\n\n // initLocation() {\n // const { defaultLocation = null, initLocation = 'dialog' } = tc.search?.location\n\n // if (lc.defaultLocation) {\n // self.params.setDefaultLocation(lc.defaultLocation)\n // }\n\n // if (self.params.location && self.params.location.id === 0) {\n // console.warn('bad loc')\n // self.params.setLocation(null)\n // }\n\n // if (self.params.location) return\n\n // const loc =\n // lc && lc.initLocation === 'default' && lc.defaultLocation && !self.params.location\n // ? lc.defaultLocation\n // : null\n\n // self.params.setLocation(loc)\n // },\n\n setSelected(source, result) {\n try {\n self.selectedResult = result ? { source, id: result.id } : null\n } catch {\n console.error('select error')\n self.selectedResult = null\n }\n },\n\n loadContentRegions(contentRegions = []) {\n self.contentRegions = contentRegions.reduce((obj, val) => {\n // TODO: dedupe\n val.regions.forEach(\n (r) =>\n (obj[r] = {\n id: val.id,\n title: val.title,\n })\n )\n return obj\n }, {})\n },\n\n clear() {\n self.selectedResult = null\n\n Array.from(self.searches.values()).forEach((v) => v.clear())\n },\n\n bang() {\n console.log('bang!', self.searchCount)\n },\n\n initSearch() {\n // analytics.track('searchControlInit', {\n // category: 'SearchControl',\n // label: 'Init',\n // })\n\n self.selectedResult = undefined\n self.searchCount = self.searchCount + 1\n\n Array.from(self.searches.values()).forEach((v) => v.initSearch())\n },\n\n loadMore({ search }) {\n // track('searchControlLoadMore', {\n // category: 'SearchControl',\n // label: 'Load More',\n // })\n\n self.selectedResult = undefined\n self.searches.get(search).loadMore()\n },\n\n setShowAllCategories(value) {\n self.ui.setShowAllCategories(value)\n\n const visible = self.params.visibleCategories.map((c) => c.id)\n\n // single category mode deselect\n\n if (\n tc.options.categoryMode === 'single' &&\n !visible.includes(self.params.selectedCategories)\n ) {\n self.params.setSelectedCategories(null)\n }\n },\n\n loadFavourites(favourites) {\n if (!self.favouritesSearch || !favourites) return\n self.favouritesSearch.setResults(favourites)\n },\n\n toggleFavourite(result) {\n const r = toJS(result)\n const fs = self.favouritesSearch\n\n console.log({ r })\n\n if (!fs) {\n console.error('Favourites search not found')\n return\n }\n\n const fav = r.id.match(/_fav$/) ? r : toFavourite(r, 'favourites')\n\n if (!fs.hasResult(fav.id)) {\n fs.insert(fav)\n } else {\n fs.removeById(fav.id)\n }\n },\n }))\n","import { config } from '@/config'\nimport get from 'lodash/get'\nimport { addDays } from 'date-fns'\n\nconst { tenantConfig } = config\n\nconst ageMap = tenantConfig.survey.questionsMap['age'].queryMap\nconst defaultAge = { AgeMin: 0, AgeMax: 999 }\n\nconst lookupAges = (age) => {\n if (!age || !(age in ageMap)) return defaultAge\n\n const ages = ageMap[age]\n return { AgeMin: ages.min, AgeMax: ages.max }\n}\n\nconst convertGender = (gender) => {\n const genderMap = {\n Male: 'MaleOnly',\n Female: 'FemaleOnly',\n }\n return get(genderMap, gender, null)\n}\n\nconst calculateDateRangeParams = (dateRange) => {\n if (dateRange.delta < 0) {\n const from = dateRange.start || new Date()\n const to = dateRange.end ? addDays(dateRange.end, 1) : addDays(from, 90)\n\n return {\n SearchFrom: from.toISOString(),\n SearchTo: to.toISOString(),\n }\n }\n\n console.error(`date delta not implemented ${dateRange.delta}`)\n}\n\nexport const buildDirectorySearch = ({\n params,\n categories,\n tags,\n pageSize,\n}) => {\n const ages = lookupAges(params.age)\n const gender = convertGender(params.gender)\n\n const searchQuery = {\n // ServiceChanges: true,\n SearchTerm: params.query,\n SortField: 'Distance',\n SortDirection: 'ASC',\n Categories: categories,\n CategoriesRequired: true,\n // LocationRegions: [],\n Gender: gender,\n Tags: tags,\n PageSize: pageSize,\n PageNo: 1,\n Latitude: params.location.lat,\n Longitude: params.location.lng,\n Radius: params.radius,\n ...ages,\n }\n return searchQuery\n}\n\nexport const buildDirectorySearchWAPHA = ({\n params,\n commissionedServices,\n pageSize,\n}) => {\n const csids = commissionedServices.length > 0 ? commissionedServices : [-1]\n\n const searchQuery = {\n SearchTerm: params.query,\n SortField: 'Name',\n SortDirection: 'ASC',\n LocationRegions: [params.location.id],\n IsCommissioned: true,\n CommissionedServices: csids,\n PageSize: pageSize,\n PageNo: 1,\n }\n\n return searchQuery\n}\n\nexport const buildDirectorySearchHealth = ({\n params,\n categories,\n // tags,\n pageSize,\n}) => {\n const ages = lookupAges(params.age)\n // const gender = convertGender(params.gender)\n\n const searchQuery = {\n What: params.query,\n SortField: 'Distance',\n SortDirection: 'ASC',\n ServiceCategories: categories,\n // CategoriesRequired: true,\n // LocationRegions: [],\n // Gender: gender,\n // Tags: tags,\n PageSize: pageSize,\n PageNo: 1,\n // Latitude: params.location.lat,\n // Longitude: params.location.lng,\n Location: params.location.id,\n Radius: params.radius,\n ...ages,\n }\n\n // console.log(searchQuery)\n\n return searchQuery\n}\n\nexport const buildDiarySearch = ({ params, categories, pageSize }) => {\n const dates = calculateDateRangeParams(params.dateRange)\n\n const searchQuery = {\n PageSize: pageSize,\n PageNumber: 1,\n // Latitude: params.location.lat,\n // Longitude: params.location.lng,\n LocationID: params.location.id,\n RadiusKM: params.radius,\n ServiceCategories: categories,\n // UniqueEvents: true,\n WhatText: params.query,\n WhenIndex: 'Custom',\n // SearchFrom: (new Date()).toISOString(),\n // SearchTo: '2021-01-31T03:51:07.239Z',\n // IncludeDeletedAndUnpublished: false,\n // AffiliateSiteID: 47,\n ...dates,\n }\n\n return searchQuery\n}\n\n// favourites\n\nexport const toFavourite = (result, search) => ({\n ...result,\n id: `${result.id}_fav`,\n search,\n})\n\nexport const fromFavourite = (favourite) => ({\n ...favourite,\n id: favourite.id.replace(/_fav$/, ''),\n})\n","import { toJS } from 'mobx'\nimport { types, getRoot } from 'mobx-state-tree'\n\nimport _ from 'lodash'\nimport { Locality } from './Locality'\nimport { Geography } from './Geography'\n\nimport { config } from '@/config'\nimport { analytics } from '@/analytics'\nimport {\n evaluateStepRules,\n mapInterestCategories,\n mapScaleEvalCategories,\n mapPropertyCategories,\n} from '../utils/survey-utils'\nimport { cacheScores, evalKessler } from '../utils/scale-eval'\n\nconst { tenantConfig } = config\n\nconst Location = types.union(Locality, Geography)\n\nconst pathwaysMap = (tenantConfig.survey.pathways || []).reduce((acc, cur) => {\n cur.pathways.forEach((p) => {\n acc[p] = cur\n })\n return acc\n}, {})\n\nconst scaleMap = _.keyBy(\n tenantConfig.survey.questions\n .filter((q) => q.type === 'scaleeval')\n .map((q) => ({\n id: q.id,\n question: q,\n scoreCache: cacheScores(q.scoring),\n })),\n 'id'\n)\n\nexport const ScaleEval = types\n .model({\n id: '',\n values: types.array(types.maybeNull(types.number, null)),\n })\n\n .views((self) => ({\n get question() {\n return scaleMap[self.id].question\n },\n get scoreCache() {\n return scaleMap[self.id].scoreCache\n },\n get complete() {\n return !self.values.some((v) => v === null)\n },\n\n get evalScore() {\n if (!self.question || !self.scoreCache) return { total: 0, score: 'none' }\n\n return evalKessler(self.question, self.values, self.scoreCache)\n },\n\n get payload() {\n return {\n ...self,\n complete: self.complete,\n score: self.evalScore,\n }\n },\n }))\n\n .actions((self) => ({\n init(question, scoreCache) {\n self.question = question\n self.scoreCache = scoreCache\n },\n\n setValue(index, value) {\n self.values[index] = value\n },\n }))\n\nexport const Survey = types\n .model({\n pathway: '',\n finished: false,\n step: 0,\n radius: 75,\n location: types.maybeNull(Location),\n categories: types.array(types.string),\n interests: types.array(types.string),\n age: types.maybeNull(types.string),\n gender: types.maybeNull(types.string),\n sexuality: types.maybeNull(types.string),\n atsi: types.maybeNull(types.string),\n scaleEval: types.map(ScaleEval),\n categoriesModified: false,\n })\n\n .views((self) => ({\n get pathwayConfig() {\n return pathwaysMap[self.pathway]\n },\n\n get steps() {\n return self.pathwayConfig?.steps\n },\n\n get currentStep() {\n return self.step < self.steps?.length ? self.steps[self.step] : null\n },\n\n get currentStepValid() {\n return evaluateStepRules(self, self.currentStep, 'validation')\n },\n\n get prevStep() {\n let psi = self.step - 1\n\n while (psi > -1) {\n if (evaluateStepRules(self, self.steps[psi], 'when')) return psi\n --psi\n }\n\n return null\n },\n\n get nextStep() {\n let nsi = self.step + 1\n\n while (nsi < self.steps?.length) {\n if (evaluateStepRules(self, self.steps[nsi], 'when')) return nsi\n ++nsi\n }\n\n return null\n },\n\n mappedCategoriesForStep(s) {\n // console.log('mappedCategoriesForStep', s)\n return s.mapCategories.map((m) => {\n const q = tenantConfig.survey.questionsMap[m.question]\n\n switch (q.type) {\n case 'interests':\n return mapInterestCategories(q, self.interests.slice())\n\n case 'scaleeval': {\n const se = self.scaleEval.get(q.id)\n if (!se || !se.complete) return {}\n\n return mapScaleEvalCategories(se.evalScore.score, m.categories)\n }\n\n // property\n default: {\n if (!(m.question in self)) {\n console.error(`Invalid survey mapCategories key ${m.question}`)\n return {}\n }\n return mapPropertyCategories(self[m.question], m.categories)\n }\n }\n })\n },\n\n // resolves combined category mapping from active steps\n // flattens nested arrays of { categories, selected }\n\n get mappedCategories() {\n const mapped = _.flatten(\n self.steps\n .filter((s) => 'mapCategories' in s)\n .filter((s) => evaluateStepRules(self, s, 'when'))\n .map((s) => self.mappedCategoriesForStep(s))\n )\n\n const selected = mapped\n .filter((m) => m.selected)\n .map((m) => m.selected)\n .reverse()\n\n const defaults = tenantConfig.survey.defaults?.categories || []\n\n const res = {\n categories: _.uniq(\n _.flatten([\n ...defaults,\n self.categories.slice(),\n _.flatten(mapped.map((m) => m.categories)),\n ])\n ).filter((c) => !!c),\n selectedCategories: selected.length > 0 ? selected[0] : null,\n }\n\n return res\n },\n\n get scaleEvalPayload() {\n // get scaleEval questions\n\n const seids = tenantConfig.survey.questions\n .filter((q) => q.type === 'scaleeval')\n .map((q) => q.id)\n\n // filter out steps\n\n const vs = _.uniq(\n _.flatten(\n self.steps\n .filter(\n (s) =>\n _.intersection(\n seids,\n s.questions.map((q) => q.id)\n ).length > 0\n )\n .filter((s) => evaluateStepRules(self, s, 'when'))\n .map((s) => s.questions.map((q) => q.id))\n )\n ).map((id) => self.scaleEval.get(id).payload)\n\n return vs\n },\n\n get result() {\n return {\n ...self,\n ...(self.pathwayConfig?.result?.mappedCategories &&\n self.mappedCategories),\n }\n },\n }))\n\n .actions((self) => ({\n setSteps(steps) {\n self.steps = steps\n },\n\n set(key, value) {\n if (key in self) {\n self[key] = value\n }\n },\n\n setLocation(location) {\n self.location = location\n },\n\n init(pathway = 'self', location = 'null') {\n self.clear()\n self.pathway = pathway\n\n // populate all possible evals\n\n self.scaleEval = _.keyBy(\n tenantConfig.survey.questions\n .filter((q) => q.type === 'scaleeval')\n .map((q) => ({\n id: q.id,\n values: new Array(q.questions.length).fill(null),\n })),\n 'id'\n )\n\n // location\n\n self.location = toJS(getRoot(self).search.params.location)\n },\n\n clear() {\n getRoot(self).resetSurvey()\n // self.clear()\n },\n\n dump() {\n console.log('survey', self.result)\n },\n\n applyMappedCategories() {\n if (self.categoriesModified) return\n\n self.categories = _.uniq([\n ...self.categories,\n ...self.mappedCategories?.categories,\n ])\n self.categoriesModified = true\n },\n\n finish() {\n const search = getRoot(self).search\n\n analytics.track('surveyImplComplete', {\n category: 'SurveyImpl',\n label: 'Complete',\n survey: {\n ...self.result,\n scaleEval: self.scaleEvalPayload,\n },\n // results\n })\n\n search.params.updateFromSurvey(self.result)\n\n search.ui.clear()\n search.ui.updateFromSurvey(self)\n\n self.finished = true\n },\n }))\n","import range from 'lodash/range'\n\n// calculate summary of kessler distress scales k-5 & k-10\n\nexport const evalKessler = (question, values, scores) => {\n const total = values.reduce((acc, cur, i, src) => {\n return acc + (\n !cur ? 0\n : question.questions[i].followPrevious && src[i - 1] === 1 ? 1\n : cur\n )\n }, 0)\n\n const score = total in scores ? scores[total].id : 'none'\n\n return {\n score,\n total,\n }\n}\n\n// fast lookup of kessler scoring\n\nexport const cacheScores = scores => {\n return scores.reduce((acc, cur) => {\n range(cur.score[0], cur.score[1] + 1)\n .forEach(s => acc[s] = cur)\n return acc\n }, {})\n}\n","import { autorun, toJS } from 'mobx'\nimport { types, flow } from 'mobx-state-tree'\nimport { analytics } from '@/analytics'\nimport { config } from '@/config'\n\nimport { Tenant } from './Tenant'\nimport { SearchControl } from './SearchControl'\nimport { Survey } from './Survey'\n\nconst { appConfig, tenantConfig: tc } = config\n\nexport const RootStore = types\n .model({\n version: appConfig.version || 0,\n tenant: types.optional(Tenant, {}),\n // params: types.optional(SearchParams, {}),\n search: types.optional(SearchControl, {}),\n survey: types.optional(Survey, {}),\n })\n\n .views((self) => ({\n get helpers() {\n return {\n tenant: { store: self.tenant },\n search: { store: self.search },\n survey: { store: self.survey },\n }\n },\n\n get saveData() {\n const sd = {\n version: self.version,\n params: {\n ...self.search.params,\n query: '',\n },\n ui: self.search.ui,\n survey: self.survey,\n favourites: self.search.favouritesSearch?.results,\n }\n\n return sd\n },\n }))\n\n .actions((self) => ({\n afterCreate() {\n self.postInit()\n },\n\n postInit() {\n self.tenant.loadVolatile()\n self.search.loadDefaultFilters()\n self.search.params.initLocation()\n self.search.loadContentRegions(tc.contentRegions || [])\n\n // trigger search\n\n autorun(() => {\n const params = toJS(self.search.params)\n const showAllCategories = toJS(self.search.ui.showAllCategories)\n\n // args not used, but passed as observed deps\n self.search.initSearch(params, showAllCategories)\n })\n\n // save user data\n\n autorun(\n () => {\n const psjson = JSON.stringify(toJS(self.saveData), null, 2)\n const key = `ams-userstore-${appConfig.tenant || 'default'}`\n window.localStorage.setItem(key, psjson)\n },\n {\n delay: 1000,\n }\n )\n },\n\n resetAll() {\n analytics.track('resetAll', {\n categories: 'Navigation',\n label: 'Reset All',\n })\n analytics.reset()\n\n self.survey = {}\n self.search = {\n searches: tc.search.searches,\n params: {\n ...tc?.search?.defaultParams,\n },\n ui: {},\n }\n\n self.search.params.initLocation()\n },\n\n resetSurvey() {\n self.survey = {}\n },\n }))\n","// import { useConfig } from '@/config'\n// const { appConfig, tenantConfig } = useConfig()\nimport { addDays } from 'date-fns'\n\n// eslint-disable-next-line no-undef\nconst tenant = process.env.TENANT\n\nexport const migrations = [\n {\n version: 1,\n info: 'Mindcare Tab',\n migrate: ({ userData }) => {\n if (tenant === 'mindcaregl') {\n userData.ui.selectedTab = 0\n userData.params.categories = []\n userData.params.selectedCategories = null\n }\n return userData\n },\n },\n {\n version: 3,\n info: 'Location w/o State',\n migrate: ({ userData }) => {\n const loc = userData.params.location\n\n if (loc?.type === 'locality' && !loc?.state) {\n userData.params.location = null\n userData.ui.locationDialogShown = false\n }\n\n return userData\n },\n },\n {\n version: -1,\n info: 'Calendar Reset',\n migrate: ({ userData }) => {\n if (userData?.params?.dateRange) {\n if (addDays(new Date(), -1) >= userData.params.dateRange.start) {\n userData.params.dateRange = {}\n }\n }\n return userData\n },\n },\n]\n","import _ from 'lodash'\n\nimport { migrations } from './storage-migrations'\nimport { loadMarkdown } from './markdown'\n\nimport { config } from '@/config'\nimport deepmerge from 'deepmerge'\nconst { appConfig, tenantConfig: tc } = config\n\n// preload markdown content\n\nconst markdownContent = _.keyBy(\n loadMarkdown({ tenant: appConfig.tenant }),\n 'id'\n)\n\n// initial user data\n\nconst defaultUserData = {\n version: appConfig.version || 0,\n params: {},\n survey: {},\n ui: {},\n}\n\nconst loadDefaultUserData = () =>\n deepmerge(defaultUserData, tc.defaultUserData || {})\n\n// load from store\n\nconst loadStoredUserData = () => {\n const loadFromLocal = () => {\n try {\n const json = window.localStorage.getItem(\n `ams-userstore-${appConfig.tenant || 'default'}`\n )\n return json && JSON.parse(json)\n } catch {\n //\n }\n }\n\n const storedUserData = loadFromLocal()\n if (!storedUserData) return null\n\n // run migrations\n\n const prev = storedUserData.version || 0\n const curr = appConfig.version || 0\n\n const migrated =\n migrations\n .filter(\n (m) => m.version === -1 || (m.version > prev && m.version <= curr)\n )\n .reduce((data, curr) => {\n // console.log(`Migrating: ${curr.info}`)\n return curr.migrate({ userData: data }) || data\n }, storedUserData) || loadDefaultUserData()\n\n const versioned = _.cloneDeep({\n ...migrated,\n version: curr,\n })\n\n // console.log({ iud })\n\n return versioned\n}\n\nconst buildStoreConfig = (userData) => {\n const {\n search: { searches },\n categories,\n options,\n } = tc\n\n const { params, ui, survey, favourites } = userData\n\n return {\n search: {\n searches: _.merge(\n { ...searches },\n searches?.favourites ? { favourites: { results: favourites } } : null\n ),\n params,\n ui,\n },\n survey,\n tenant: {\n categories,\n options,\n content: {\n items: markdownContent,\n },\n },\n }\n}\n\nexport const initStoreConfigs = () => {\n const storedUserData = loadStoredUserData()\n\n return {\n defaultConfig: buildStoreConfig(_.cloneDeep(loadDefaultUserData())),\n userConfig: storedUserData ? buildStoreConfig(storedUserData) : null,\n }\n}\n","/* eslint-disable no-undef */\n\nexport const loadMarkdown = () => {\n const res = require.context(\n `../../../tenants/${process.env.TENANT}/content`,\n true,\n /\\.md$/\n )\n\n return res.keys().map((key) => ({\n id: key.match(/\\/(.+)\\.md$/)[1],\n type: 'md',\n ...res(key),\n }))\n}\n","import React from 'react'\nimport { configure, toJS } from 'mobx'\nimport { enableLogging } from 'mobx-logger'\n\nimport { RootStore } from './models/RootStore'\nimport { initStoreConfigs } from './utils/user-data'\nimport { getPlatform } from '@/ui/hooks/usePlatform'\n\nconst platform = getPlatform()\n\n// proxies not compatible with ie11\n\nconfigure({\n useProxies: !!platform.ieVersion,\n\n // enforceActions: 'always',\n // computedRequiresReaction: true,\n // reactionRequiresObservable: true,\n // observableRequiresReaction: true,\n // disableErrorBoundaries: true,\n})\n\nenableLogging({\n predicate: () => true,\n})\n\nwindow.toJS = toJS\n\nexport const rootStore = (window.store = (() => {\n const configs = initStoreConfigs()\n // console.log({ configs })\n\n const store = (({ defaultConfig, userConfig }) => {\n try {\n return RootStore.create(userConfig || defaultConfig)\n } catch (err) {\n console.error('Error loading store, reverting to default config', err)\n return RootStore.create(defaultConfig)\n }\n })(configs)\n\n // s.postInit()\n return store\n})())\n\nconst storeContext = React.createContext(rootStore)\nexport const useRootStore = () => React.useContext(storeContext)\n\nexport const useStoreSearch = (searchId) =>\n useRootStore().search._searches[searchId]\n","import _ from 'lodash'\n\n/**\n * Ensures value is an array of something\n *\n * ```typescript\n * asArray(undefined)\n * // []\n *\n * asArray('bang!')\n * // ['bang']\n *\n * asArray(['already', 'done'])\n * // ['already', 'done']\n */\nexport const asArray = (val: any) => {\n if (!val) return []\n if (Array.isArray(val)) return val\n if (typeof val === 'object' && 'slice' in val) return val.slice()\n return [val]\n}\n\n/**\n * Removes item from array without mutating the array\n */\nexport const removeAt = <A = unknown>(arr: A[], index: number) => [\n ...[...arr].slice(0, index),\n ...[...arr].slice(index + 1),\n]\n","import React, { useEffect, useState } from 'react'\n\nconst getSize = () => ({\n width: window.innerWidth || 0,\n height: window.innerHeight || 0,\n})\n\nexport const useResizeDetect = () => {\n const [size, setSize] = useState(getSize())\n\n const resizeListener = () => setSize(() => getSize())\n\n useEffect(() => {\n window.addEventListener('resize', resizeListener)\n\n return () => {\n window.removeEventListener('resize', resizeListener)\n }\n }, [])\n\n return size\n}\n","import React from 'react'\nimport _ from 'lodash'\n\nimport { useConfig } from '@/config'\n\nconst ImageAsset = ({ srcId, ...props }) => {\n const { tenantConfig } = useConfig()\n\n const src = _.get(tenantConfig.assets, srcId)\n // const src = srcId in tenantConfig.assets ? tenantConfig.assets[srcId] : null\n return src ? <img src={src} {...props} alt={srcId} /> : null\n}\n\nexport default ImageAsset\n","import React from 'react'\n\nimport { makeStyles } from '@mui/styles'\nimport { useConfig } from '@/config'\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n // backgroundColor: '#f0f',\n width: '100%',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'flex-start',\n marginBottom: theme.spacing(3),\n },\n image: {\n maxWidth: '70%',\n [theme.breakpoints.down('sm')]: {\n maxWidth: '90%',\n },\n },\n}))\n\nconst Logo = ({ srcId, ...otherProps }) => {\n const classes = useStyles()\n const { tenantConfig } = useConfig()\n\n const src = srcId in tenantConfig.assets ? tenantConfig.assets[srcId] : null\n\n return src ? (\n <div className={classes.root}>\n {/* Logo {srcId} */}\n\n <img className={classes.image} src={src} alt={srcId} />\n </div>\n ) : null\n}\n\nexport default Logo\n","import React from 'react'\n\nimport { useTheme } from '@mui/material/styles'\nimport { withStyles } from '@mui/styles'\nimport { Box, Typography, Link } from '@mui/material'\n\nimport { useConfig } from '@/config'\n\nconst styles = (theme) => ({\n root: {\n padding: theme.spacing(4, 2),\n },\n logo: {\n maxWidth: 'min(300px, 100%)',\n opacity: 0.76,\n marginBottom: theme.spacing(1),\n },\n body1: {\n // fontSize: 'inherit',\n fontSize: '0.86rem',\n // fontSize: 14,\n },\n})\n\n/**\n * Displays Cie detals for footer\n */\nconst CieBlock = ({ classes }) => {\n const { tenantConfig: tc } = useConfig()\n return (\n <div className={classes.cie}>\n <Box as=\"img\" className={classes.logo} src={tc.assets.cie.logo} />\n <Typography className={classes.body1} variant=\"body1\">\n Powered by the{' '}\n <Link\n href=\"https://www.communityinformationexchange.com.au/\"\n target=\"_blank\"\n underline=\"none\"\n sx={{ whiteSpace: 'nowrap' }}\n >\n Community Information Exchange\n </Link>\n <br />© {new Date().getFullYear()} Community Information Support\n Services\n <br />\n All rights reserved. ABN: 30 143 384 043\n </Typography>\n </div>\n )\n}\n\nexport default withStyles(styles, { name: 'AMSCieBlock' })(CieBlock)\n","import React from 'react'\n\nimport { Box } from '@mui/material'\nimport { Mono, Json } from '@/ui/debug/debug-helper/Mono'\n\nexport class ErrorBoundary extends React.Component {\n constructor(props) {\n super(props)\n this.state = { hasError: false, error: undefined }\n }\n\n static getDerivedStateFromError(error) {\n return { hasError: true, error }\n }\n\n componentDidCatch(error, errorInfo) {\n console.error('Error Boundary', error, errorInfo)\n }\n\n render() {\n if (this.state.hasError) {\n return (\n <Mono>\n <Box>Error Boundary</Box>\n <Json value={this.state.error} />\n </Mono>\n )\n }\n\n return this.props.children\n }\n}\n\nexport default ErrorBoundary\n","import _ from 'lodash'\n\nconst matchesTermsProperty = (path, matchValue) => source => {\n const value = _.get(source, path)\n\n if (_.isArray(matchValue)) {\n // array values in array\n if (_.isArray(value)) return _.intersection(value, matchValue).length > 0\n\n // value in array\n return _.some(matchValue, mv => _.isEqual(value, mv))\n }\n\n return _.isEqual(value, matchValue)\n}\n\nexport const matchesTerms = matchObject => source =>\n _.every(matchObject, (v, k) => matchesTermsProperty(k, v)(source))\n","/* eslint-disable no-unused-vars */\nimport React, { useState } from 'react'\n\nimport merge from 'lodash/merge'\nimport cloneDeep from 'lodash/cloneDeep'\n\nexport const useMergeOptions = (defaults, options) => {\n const [opts] = useState(merge(cloneDeep(defaults), options))\n return opts\n}\n","import React from 'react'\n\nimport clsx from 'clsx'\nimport ReactMarkdown from 'markdown-to-jsx'\nimport { NavLink } from 'react-router-dom'\n// import scrollIntoView from 'scroll-into-view-if-needed'\n\nimport { withStyles } from '@mui/styles'\nimport { Typography, Divider, Link } from '@mui/material'\n\nimport { config } from '@/config'\n\n// import MarkdownAccordion from '@/ui/components/atoms/MarkdownAccordion'\nimport ImageAsset from '@/ui/components/images/ImageAsset'\n// import HomeButtons from '@/ui/components/atoms/HomeButtons'\nimport Logo from '@/ui/components/images/Logo'\n// import PreviousSearch from '@/ui/components/atoms/PreviousSearch'\n\nconst { tenantConfig } = config\n\nexport const styles = (theme) => ({\n ul: {\n paddingInlineStart: '30px !important',\n [theme.breakpoints.down('sm')]: {\n paddingInlineStart: '20px !important',\n },\n },\n li: {\n marginTop: theme.spacing(1),\n },\n navLink: {\n fontSize: 16,\n },\n h1: {\n fontSize: 20,\n },\n p: {\n color: theme.palette.primary.text,\n marginBottom: theme.spacing(1),\n },\n a: {\n color: '#666',\n // fontWeight: 600,\n },\n i: {\n marginRight: theme.spacing(1),\n },\n})\n\n// const useStyles = makeStyles(styles)\n\n// const useVariantStyles = makeVariantStyles(styles, {\n// name: 'AMSMarkdown',\n// variants: tenantConfig?.themeOptions?.variants?.markdown,\n// })\n\nconst makeOptions = ({ classes }) => ({\n overrides: {\n h1: {\n component: Typography,\n props: {\n gutterBottom: true,\n variant: 'h6',\n classes: {\n root: classes.h1,\n },\n },\n },\n h2: { component: Typography, props: { gutterBottom: true, variant: 'h5' } },\n h3: {\n component: Typography,\n props: { gutterBottom: true, variant: 'subtitle1' },\n },\n h4: {\n component: Typography,\n props: { gutterBottom: true, variant: 'caption', paragraph: true },\n },\n p: {\n component: Typography,\n props: {\n variant: 'body1',\n paragraph: true,\n classes: {\n root: classes.p,\n },\n },\n },\n a: {\n component: Link,\n props: {\n underline: 'none',\n target: '_blank',\n classes: {\n root: classes.a,\n },\n },\n },\n ul: {\n component: withStyles(styles)(({ classes, children }) => (\n <ul className={classes.ul}>{children}</ul>\n )),\n },\n li: {\n component: withStyles(styles)(({ classes, ...props }) => (\n <li className={classes.li}>\n <Typography component=\"span\" {...props} />\n </li>\n )),\n },\n hr: {\n component: Divider,\n },\n i: {\n component: withStyles(styles)(({ classes, className, ...props }) => (\n <i {...props} className={clsx(className, classes.i)} />\n )),\n },\n navlink: {\n component: NavLink,\n },\n imgasset: {\n component: ImageAsset,\n },\n logo: {\n component: Logo,\n },\n },\n})\n\nconst Markdown = ({ classes, ...props }) => {\n const options = makeOptions({ classes })\n return <ReactMarkdown options={options} {...props} />\n}\n\nexport default withStyles(styles, { name: 'AMSMarkdown' })(Markdown)\n","import React from 'react'\n\nexport type ParentMutationObserver = {\n selector?: string\n options?: MutationObserverInit\n filter?: (value: MutationRecord) => boolean\n onMutation?: (element: HTMLElement, mutation: MutationRecord) => void\n}\n\nexport type ParentMutationObserversOptions = {\n element: HTMLElement | undefined\n mutationObservers: Array<ParentMutationObserver> | undefined\n}\n\nexport const useParentMutationObservers = (options: ParentMutationObserversOptions): void => {\n const [observers, setObservers] = React.useState<Array<MutationObserver | undefined> | null>(null)\n\n const { element, mutationObservers } = options\n\n const clearObservers = () => {\n observers?.forEach(o => o?.disconnect())\n setObservers(null)\n }\n\n React.useEffect(() => {\n if (!element || !mutationObservers) {\n clearObservers()\n return\n }\n\n const obs = mutationObservers\n .map(\n ({\n selector,\n options = { attributes: true },\n filter = value => value.attributeName === 'class',\n onMutation,\n }) => {\n if (!selector) {\n console.warn(`Invalid selector`)\n return\n }\n\n const parent = element.closest(selector) as HTMLElement\n\n if (!parent) {\n console.warn(`No parent found for selector \"${selector}\"`)\n return\n }\n\n const o = new MutationObserver(mutations => {\n const mf = mutations.filter(filter)\n if (!mf.length || !onMutation) return\n\n mf.forEach(m => onMutation(parent, m))\n })\n\n o.observe(parent, options)\n\n return o\n }\n )\n .filter(o => !!o)\n\n setObservers(obs)\n\n return clearObservers\n }, [element, mutationObservers?.length])\n}\n","import get from 'lodash/get'\n\nimport { config } from '@/config'\n\nconst { appConfig } = config\n\nexport const resolveImage = (image, assets) => {\n if (typeof image !== 'string') return undefined\n\n // bundle asset\n const asset = get(assets, image)\n if (asset)\n return {\n type: 'bundle',\n icon: asset,\n }\n\n // font-awesome icon\n if (image.match(/^fa[a-z]?\\s/))\n return {\n type: 'fa',\n icon: image,\n }\n\n // cdn\n\n const cdnMatch = image.match(/^cdn:([\\w\\d/-_ ]+\\.(png|svg))$/)\n if (cdnMatch && cdnMatch.length > 1)\n return {\n type: 'cdn',\n icon: `${appConfig.cdnURL}/${cdnMatch[1]}`,\n }\n}\n","import React, { useState, useEffect } from 'react'\n\nimport clsx from 'clsx'\nimport { cloneDeep, merge } from 'lodash'\n\nimport { makeStyles } from '@mui/styles'\n\nimport { resolveImage } from '@/ui/utils/asset-utils'\nimport { useConfig } from '@/config'\nimport { useSearchResults } from '@/api/search-query'\nimport { useMergeOptions } from '@/ui/hooks/useMergeOptions'\n\nconst maskedParams = (r, mask) => {\n const rv = typeof r === 'number' ? `${r}px` : r\n return mask.map((m) => (m ? rv : 0)).join(' ')\n}\n\n// style based on wapha cs type badges\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n // backgroundColor: null,\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'flex-start',\n alignItems: 'stretch',\n padding: 0,\n margin: theme.spacing(0.7, 0),\n cursor: 'default',\n },\n inactive: ({ inactiveBadges }) => {\n switch (inactiveBadges) {\n case 'hidden':\n return {\n display: 'none !important',\n }\n case 'dim':\n return {\n opacity: 0.3,\n }\n default:\n return null\n }\n },\n iconContainer: ({ style }) => ({\n flexShrink: 0,\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'center',\n alignItems: 'center',\n backgroundColor: style?.backgroundColor,\n borderColor: style?.backgroundColor,\n borderRadius: maskedParams(style?.borderRadius || 4, [1, 0, 0, 1]),\n }),\n labelContainer: ({ style }) => ({\n flex: '1 0 auto',\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'center',\n alignItems: 'center',\n minWidth: 40,\n borderWidth: maskedParams(style.borderWidth || 2, [1, 1, 1, 0]),\n borderColor: style?.backgroundColor,\n borderStyle: 'solid',\n borderRadius: maskedParams(style?.borderRadius || 4, [0, 1, 1, 0]),\n }),\n faIcon: {\n marginRight: theme.spacing(1),\n },\n bundleIcon: {\n margin: theme.spacing(0.3, 1),\n },\n label: ({ style }) => ({\n color: style?.backgroundColor,\n fontSize: '1rem',\n fontWeight: 800,\n margin: theme.spacing(0, 1.5),\n maxWidth: '225px',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }),\n}))\n\nconst defaultBadgeOptions = {\n label: '',\n icon: '',\n active: true,\n // theme: 'wapha',\n inactiveBadges: 'inactive',\n styles: {\n default: {\n borderRadius: 4,\n color: '#fff',\n backgroundColor: '#666',\n },\n inactive: {\n backgroundColor: '#999',\n },\n },\n}\n\nconst useBadgeOptions = (props) => {\n const configureOptions = () => {\n const om = merge(cloneDeep(defaultBadgeOptions), props)\n\n const { active, inactiveBadges, styles } = om\n\n const style =\n !active && inactiveBadges === 'inactive' && styles.inactive\n ? { ...styles.default, ...styles.inactive }\n : styles.default\n\n return { ...om, style }\n }\n\n const [opts, setOpts] = useState(configureOptions())\n\n useEffect(() => {\n setOpts(configureOptions())\n }, [props.active])\n\n return opts\n}\n\nconst Badge = (props) => {\n const { tenantConfig } = useConfig()\n const opts = useBadgeOptions(props)\n const classes = useStyles(opts)\n\n const { active, label, icon: iconRsrc } = opts\n const icon = resolveImage(iconRsrc, tenantConfig.assets.badges)\n\n const Icon = ({ type, icon }) => {\n if (type === 'fa')\n return (\n <div className={classes.iconContainer}>\n <i className={clsx(icon, classes.faIcon)} />\n </div>\n )\n\n if (['bundle', 'cdn'].includes(type))\n return (\n <div className={classes.iconContainer}>\n {opts.extraIcon ? (\n <img\n className={classes.bundleIcon}\n height={30}\n src={opts.extraIcon}\n />\n ) : (\n <img className={classes.bundleIcon} height={30} src={icon} />\n )}\n </div>\n )\n\n return null\n }\n return (\n <div className={clsx(classes.root, !active && classes.inactive)}>\n <Icon {...icon} />\n <div className={classes.labelContainer}>\n <span className={classes.label}>{label}</span>\n </div>\n </div>\n )\n}\n\nexport default Badge\n","import React, { useEffect } from 'react'\n\nimport { withStyles } from '@mui/styles'\nimport { Box, Typography, Button, Fade } from '@mui/material'\n\nimport { useGetHealthEngineNextAppointment } from '@ciss/cie-api-orval'\nimport { useConfig } from '@/config'\nimport { Mono, Json } from '@/ui/debug/debug-helper/Mono'\nimport { values } from 'lodash'\nimport { Separator } from './SearchResultsList'\n\nconst styles = (theme) => ({\n root: {},\n})\n\nconst BookAppointmentButton = ({ classes, url, ...buttonProps }) => (\n <Button\n classes={{\n root: classes.healthEngineButton,\n label: classes.healthEngineButtonLabel,\n }}\n sx={{ mt: 0 }}\n variant=\"outlined\"\n color=\"primary\"\n href={url}\n target=\"_blank\"\n disableElevation\n {...buttonProps}\n >\n Book Now\n </Button>\n)\n\nconst NextAppointment = ({\n classes,\n nextAppointment,\n bookingUrl,\n ...buttonProps\n}) => (\n <>\n <Typography variant=\"body1\" sx={{ fontWeight: 'medium' }}>\n Next Appointment\n </Typography>\n <Box sx={{ width: '100%', mt: 1, display: 'flex', alignItems: 'center' }}>\n <Box mr={2}>\n <i className=\"fas fa-calendar\" />\n </Box>\n <Box sx={{ flexGrow: 1, display: 'flex', flexDirection: 'column' }}>\n <Typography variant=\"body1\">{nextAppointment}</Typography>\n </Box>\n <Button\n classes={{\n root: classes.healthEngineButton,\n label: classes.healthEngineButtonLabel,\n }}\n sx={{ mt: 0 }}\n variant=\"outlined\"\n color=\"primary\"\n href={bookingUrl}\n target=\"_blank\"\n disableElevation\n {...buttonProps}\n >\n Book Now\n </Button>\n </Box>\n </>\n)\n\nconst HealthEngineLogo = () => {\n const { tenantConfig: tc } = useConfig()\n return (\n <Box\n sx={{\n mt: 3,\n ml: 'auto',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n <Typography variant=\"body2\" sx={{ mr: 1.5, whiteSpace: 'nowrap' }}>\n Powered by\n </Typography>\n <Box\n component=\"img\"\n sx={{ width: 116, height: 24 }}\n src={tc.assets?.healthengine?.logo}\n />\n </Box>\n )\n}\n\nconst HealthEngineAppointment = ({\n classes,\n data,\n onQueryChanged = () => undefined,\n}) => {\n const { tenantConfig: tc, appConfig } = useConfig()\n\n const { outletId, serviceId, healthEngineId } = data\n\n const bookingUrl = `${appConfig.directoryURL}/redirect?action=healthengine&outletId=${outletId}`\n\n const query = useGetHealthEngineNextAppointment(\n outletId,\n serviceId,\n healthEngineId\n )\n\n const { data: heresponse, isLoading, isSuccess, isError } = query\n\n const nextAppointment = heresponse?.success && heresponse?.data\n\n if (isLoading) return <Mono>Loading</Mono>\n if (isError) return <Mono>Error</Mono>\n // if (isSuccess)\n // return (\n // <Mono>\n // <Json value={heresponse} />\n // </Mono>\n // )\n\n if (isSuccess)\n return (\n <Box sx={{ my: 3, pt: 2, borderTop: '1px solid rgba(0, 0, 0, 0.1)' }}>\n {/* <Box className={classes.separator} /> */}\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'flex-start',\n justifyContent: 'flex-start',\n }}\n >\n <NextAppointment {...{ classes, nextAppointment, bookingUrl }} />\n <HealthEngineLogo />\n </Box>\n </Box>\n )\n}\n\nexport default withStyles(styles, { name: 'AMSHealthEngineAppointment' })(\n HealthEngineAppointment\n)\n","import React from 'react'\n\nimport { Box } from '@mui/material'\nimport { useConfig } from '@/config'\n\nconst NetworkMember = (props) => {\n const { tenantConfig: tc } = useConfig()\n\n const { config, data } = props || {}\n const { image, imageProps, networks = [] } = config.options || {}\n\n const imgSrc = tc.assets[image]\n const isMember = data?.networks?.some((n) => networks.includes(n.networkId))\n\n if (!isMember || !imgSrc) return null\n\n return <Box as=\"img\" src={imgSrc} {...imageProps} />\n}\n\nexport default NetworkMember\n","import React from 'react'\nimport _ from 'lodash'\nimport { observer } from 'mobx-react-lite'\nimport deepmerge from 'deepmerge'\nimport { Box } from '@mui/material'\n\nimport Badge from './Badge'\nimport { config } from '@/config'\nimport { useRootStore } from '@/stores/root'\nconst { tenantConfig: tc } = config\n\nconst badges = (tc.categories || [])\n .filter((c) => !!c.badge)\n .map((c) => ({\n // ...c.badge,\n tagId: c.badge.tagId,\n category: c.id,\n label: c.title,\n styles: {\n default: {\n backgroundColor: c.badge.backgroundColor,\n },\n },\n extraIcon: c.badge.extraIcon ?? null,\n }))\n\nconst BadgeList = observer((props) => {\n const { config, data } = props || {}\n const { options } = config\n\n const store = useRootStore()\n const resultBadges = badges\n .filter((badge) => data.serviceTags?.includes(badge.tagId))\n .map((badge) =>\n deepmerge(options, {\n ...badge,\n active: store.search.activeCategories?.includes(badge.category),\n })\n )\n if (resultBadges.length === 0) return null\n\n return (\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'flex-start',\n justifyContent: 'flex-start',\n mt: 1,\n mb: 3,\n }}\n >\n {resultBadges.map((badge, i) => (\n <Badge key={i} {...badge} />\n ))}\n </Box>\n )\n})\nexport default BadgeList\n","import React from 'react'\n\nimport clsx from 'clsx'\nimport { makeStyles } from '@mui/styles'\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n ...theme.typography.body1,\n color: theme.palette.text.primary,\n display: 'flex',\n flexDirection: 'row',\n margin: theme.spacing(1, 0),\n\n // maxWidth: '100px',\n // '& > *': {\n // border: '1px solid rgba(0, 0, 0, 0.4)',\n // },\n },\n icon: {\n marginRight: 8,\n },\n}))\n\nexport const IconText = ({ iconClass = 'fas fa-alien-monster', text }) => {\n const classes = useStyles()\n\n return (\n <div className={classes.root}>\n <div className={classes.icon}>\n <i className={clsx(iconClass, 'fa-fw')} />\n </div>\n <div>{text}</div>\n </div>\n )\n}\n\nexport default IconText\n","import Badge from './Badge'\nimport HealthEngineAppointment from './HealthEngineAppointment'\nimport NetworkMemberBadge from './NetworkMember'\nimport { useResultsControl } from './results-control'\nimport {\n Box,\n IconButton,\n Card,\n CardContent,\n Typography,\n Button,\n Dialog,\n DialogTitle,\n DialogContent,\n DialogContentText,\n DialogActions,\n Chip,\n} from '@mui/material'\nimport grey from '@mui/material/colors/grey'\nimport { makeStyles, withStyles } from '@mui/styles'\nimport clsx from 'clsx'\nimport { useConfig } from '@/config'\nimport { useFavourite } from '@/api/search-query'\nimport { cloneDeep, merge } from 'lodash'\n// import { toJS } from 'mobx'\nimport { observer } from 'mobx-react-lite'\nimport React, { useCallback, useState, useEffect } from 'react'\nimport ErrorBoundary from '@/ui/components/atoms/ErrorBoundary'\nimport BadgeList from './BadgeList'\nimport IconText from '@/ui/components/atoms/IconText'\nimport { useCountRenders } from '@/ui/hooks/useCountRenders'\nimport { CieLink } from '@/ui/nav/Link'\nimport { useAnalytics } from 'use-analytics'\n\nconst styles = (theme) => ({\n root: {\n borderRadius: '4px',\n boxShadow: '1px 1px 3px 1px rgba(0, 0, 0, 0.07)',\n transform: 'none',\n cursor: 'pointer',\n fontSize: '0.937rem',\n margin: theme.spacing(2),\n [theme.breakpoints.down('ph')]: {\n borderRadius: 0,\n fontSize: '0.86rem',\n margin: theme.spacing(2, 0),\n boxShadow: '0px 1px 3px 0px rgba(0, 0, 0, 0.1)',\n },\n },\n selected: {\n transform: 'translate(-1px, -1px)',\n boxShadow: '1px 2px 4px 0 rgba(0, 0, 0, 0.3)',\n [theme.breakpoints.down('ph')]: {\n transform: 'translate(0, -1px)',\n boxShadow: '0px 2px 4px 0 rgba(0, 0, 0, 0.3)',\n },\n },\n separator: {\n margin: theme.spacing(2, 0),\n height: 1,\n backgroundColor: 'rgba(0, 0, 0, 0.1)',\n },\n spacer: {\n height: theme.spacing(3),\n },\n topInfo: {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'stretch',\n justifyContent: 'flex-start',\n marginBottom: theme.spacing(2),\n },\n headerIcon: {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'flex-start',\n },\n mcdIcon: {\n width: '1.40625rem',\n height: '1.875rem',\n },\n datePill: {\n backgroundColor: theme.palette.primary.main,\n color: theme.palette.primary.contrastText,\n padding: theme.spacing(0.7, 1),\n borderRadius: 3,\n fontSize: '1.125rem',\n fontWeight: 600,\n },\n datePillDiary: {\n fontSize: '1rem',\n fontWeight: 600,\n backgroundColor: '#417cbf',\n color: '#fff',\n padding: theme.spacing(0.7, 1),\n marginRight: theme.spacing(1),\n borderRadius: 3,\n },\n content: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'flex-start',\n justifyContent: 'stretch',\n },\n componentBlock: {\n width: '100%',\n margin: theme.spacing(2, 0),\n },\n actions: {\n marginTop: theme.spacing(2),\n marginBottom: theme.spacing(0),\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'flex-end',\n '& i': {\n fontSize: '1.125rem',\n },\n },\n distance: {\n marginLeft: 'auto',\n fontSize: '0.93rem',\n fontWeight: 300,\n color: grey[200],\n },\n logo: {\n maxHeight: 70,\n maxWidth: 120,\n },\n logoSmall: {\n maxHeight: 40,\n maxWidth: 90,\n },\n titleBlock: {\n margin: theme.spacing(0, 0, 2),\n },\n title: {\n fontSize: '1.125rem',\n fontWeight: 400,\n },\n organisation: {\n fontSize: '0.93rem',\n margin: theme.spacing(1, 0),\n color: theme.palette.text.secondary,\n },\n category: {\n fontSize: '0.93rem',\n fontWeight: 300,\n color: theme.palette.text.secondary,\n },\n flexWrap: {\n display: 'flex',\n flexWrap: 'wrap',\n gap: theme.spacing(1),\n },\n chip: {\n fontSize: '0.875rem',\n borderRadius: '4px',\n padding: '0 8px',\n color: '#fff',\n backgroundColor: theme.palette.primary.light,\n borderColor: theme.palette.primary.light,\n },\n cohortChip: {\n fontSize: '0.875rem',\n borderRadius: '4px',\n padding: '0 8px',\n // borderColor: '#f15b22',\n color: '#fff',\n backgroundColor: '#00BFFF',\n borderColor: '#00BFFF',\n },\n\n '@media print': {\n root: {\n breakInside: 'avoid',\n },\n separator: { display: 'none' },\n topInfo: {\n display: 'none',\n },\n actions: {\n display: 'none',\n },\n },\n})\n\nconst useResultStyles = makeStyles(styles, { name: 'AMSSearchResult' })\n\n// Mapped Components\n\nconst Separator = ({ classes }) => {\n return <div className={classes.separator} />\n}\n\nconst Spacer = ({ classes }) => {\n return <div className={classes.spacer} />\n}\n\nconst HeaderIcon = ({ classes, type, data }) => {\n const { tenantConfig } = useConfig()\n\n switch (type) {\n case 'directory':\n return (\n <div className={classes.headerIcon}>\n <img\n className={classes.mcdIcon}\n src={tenantConfig.assets.headerIcons.directory}\n alt=\"Directory Icon\"\n />\n </div>\n )\n case 'diary':\n return (\n <div className={classes.headerIcon}>\n <div className={classes.datePillDiary}>\n {data.startDay} {data.startMonth}\n </div>\n <img\n className={classes.mcdIcon}\n src={tenantConfig.assets.headerIcons.diary}\n alt=\"Diary Icon\"\n />\n </div>\n )\n default:\n return <div>{type}</div>\n }\n}\n\nconst Header = ({ classes, config, data, variant }) => {\n const type = config?.options?.type\n const showSeparator = config?.options?.showSeparator\n const logoClass = variant === 'map' ? classes.logoSmall : classes.logo\n\n return (\n <>\n <div className={classes.topInfo}>\n {/* {data.type === 'event' && (\n <div>\n <div className={classes.datePill}>{data.startDay} {data.startMonth}</div>\n </div>\n )} */}\n {type !== 'logo' && (\n <HeaderIcon classes={classes} type={type} data={data} />\n )}\n {type === 'logo' && (\n <div>\n {data.logoUrl && (\n <img className={logoClass} src={data.logoUrl} alt=\"logo\" />\n )}\n </div>\n )}\n <div className={classes.distance}>\n {data.distanceLabel && (\n <IconText iconClass=\"fas fa-running\" text={data.distanceLabel} />\n )}\n </div>\n </div>\n {showSeparator && <Separator classes={classes} />}\n </>\n )\n}\n\nconst Title = ({ classes, config, data, variant }) => {\n const { track } = useAnalytics()\n\n if (!data) return null\n\n const { name, organisationName, category: categoryValue } = data\n const { showCategory, showOrganisationName } = config?.options || {}\n\n const category = showCategory && categoryValue\n\n const organisation =\n showOrganisationName &&\n !name?.startsWith(organisationName) &&\n organisationName\n\n if (!(name || category || organisation)) return null\n\n const handleTitleClick = (e) => {\n e.stopPropagation()\n track(\n variant === 'map'\n ? 'searchResultMapTitleClick'\n : 'searchResultTitleClick',\n {\n category: 'SearchResults',\n label: data.name,\n }\n )\n }\n\n return (\n <Box className={classes.titleBlock}>\n <CieLink\n className={classes.title}\n type={data.type}\n path={data.url}\n // color=\"secondary\"\n onClick={handleTitleClick}\n >\n {name}\n </CieLink>\n {organisation && (\n <Box className={classes.organisation}>{organisation}</Box>\n )}\n {category && <Box className={classes.category}>{category}</Box>}\n </Box>\n )\n}\n\nconst Description = ({ classes, data }) => {\n return (\n <Box className={classes.componentBlock}>\n <Typography\n variant=\"body1\"\n element=\"div\"\n dangerouslySetInnerHTML={{ __html: data.description }}\n />\n </Box>\n )\n}\n\nconst Details = ({ classes, config, data }) => {\n if (!config.fields) return null\n\n const items = config.fields\n .filter((f) => data[f.key] && data[f.key] !== '--withheld--')\n .map((f) => ({\n icon: f.icon,\n text: data[f.key],\n }))\n\n return (\n <Box className={classes.componentBlock}>\n {items.map((v, i) => (\n <IconText key={i} iconClass={v.icon} text={v.text} />\n ))}\n </Box>\n )\n}\n\nconst AddressWithheld = ({ classes, data }) => {\n if (!data.addressWithheld) return null\n\n return (\n <Box className={classes.componentBlock}>\n <Typography\n variant=\"body1\"\n // element=\"div\"\n // dangerouslySetInnerHTML={{ __html: data.description }}\n >\n The maintainer of this service has elected to withhold the display of\n their location on a map.\n </Typography>\n </Box>\n )\n}\n\nconst ServiceChanges = ({ classes, config, data }) => {\n if (!data.serviceChanges) return null\n\n return (\n <div className={classes.componentBlock}>\n <Separator classes={classes} />\n <IconText iconClass=\"fas fa-bullhorn\" text=\"Service Changes\" />\n <Details classes={classes} config={config} data={data.serviceChanges} />\n </div>\n )\n}\n\nconst HealthEngine = ({ classes, data, ...otherProps }) => {\n if (data.healthEngineStatus !== 'A') return null\n\n // return <Box>{`${data.healthEngineId}, ${data.healthEngineStatus}`}</Box>\n\n return (\n <HealthEngineAppointment {...{ data, ...otherProps }} />\n // <Box className={classes.componentBlock}>\n /* <Separator classes={classes} /> */\n // </Box>\n )\n}\n\nconst NetworkMember = ({ classes, config, data }) => {\n const { tenantConfig: tc } = useConfig()\n tc.assets.allianceMember\n\n return (\n <Box\n className={classes.componentBlock}\n sx={{\n display: 'flex',\n justifyContent: 'flex-end',\n }}\n >\n <NetworkMemberBadge config={config} data={data} />\n </Box>\n )\n}\n\nconst BadgeListWrapper = (props) => {\n const { classes, ...innerProps } = props\n return <BadgeList {...innerProps} />\n}\n\nconst ServiceRegionNames = ({ classes, config, data }) => {\n const { serviceRegionNames } = data\n\n if (serviceRegionNames.length === 0) return null\n\n return (\n <Box className={classes.flexWrap}>\n {serviceRegionNames.map((name, i) => (\n <Chip\n key={i}\n label={name}\n className={classes.chip}\n variant=\"outlined\"\n color=\"primary\"\n />\n ))}\n </Box>\n )\n}\n\nconst ServiceCohortTags = ({ classes, data }) => {\n const { serviceCohortTags } = data\n\n if (serviceCohortTags.length === 0) return null\n\n return (\n <Box className={classes.flexWrap}>\n {serviceCohortTags.map((tag, i) => (\n <Chip\n key={i}\n label={tag}\n className={classes.cohortChip}\n variant=\"outlined\"\n color=\"secondary\"\n />\n ))}\n </Box>\n )\n}\n\nconst componentMap = {\n Separator,\n Spacer,\n Header,\n Title,\n Description,\n Details,\n AddressWithheld,\n ServiceChanges,\n HealthEngine,\n NetworkMember,\n BadgeList: BadgeListWrapper,\n ServiceRegionNames,\n ServiceCohortTags,\n}\n\n// Actions\n// TODO: Add to config\n\nconst Actions = observer(({ classes, data, search }) => {\n const { tenantConfig: tc } = useConfig()\n\n const { track } = useAnalytics()\n const [confirmDeleteFav, setConfirmDeleteFav] = useState(false)\n\n const { isFavourite, toggleFavourite } = useFavourite(data)\n\n // const theme = useTheme()\n // const isMobile = useMediaQuery(theme.breakpoints.down('sm'))\n\n const icon = data.id.match(/_fav$/)\n ? 'fas fa-trash'\n : isFavourite\n ? 'fas fa-star'\n : 'far fa-star'\n\n const handleFavouriteToggle = (e) => {\n e.stopPropagation()\n\n if (isFavourite) {\n setConfirmDeleteFav(true)\n } else {\n track('searchResultAddFavourite', {\n category: 'SearchResults',\n label: data.name,\n })\n\n toggleFavourite()\n }\n }\n\n const handleClose = (e) => {\n e.stopPropagation()\n setConfirmDeleteFav(false)\n }\n\n const handleConfirm = (e) => {\n track('searchResultDeleteFavourite', {\n category: 'SearchResults',\n label: data.name,\n })\n\n e.stopPropagation()\n toggleFavourite()\n setConfirmDeleteFav(false)\n }\n\n if (!tc.search?.searches?.favourites) return null\n\n return (\n <div className={clsx(classes.componentBlock, classes.actions)}>\n <IconButton onClick={handleFavouriteToggle}>\n <i className={clsx(icon, 'fa-fw')} />\n </IconButton>\n\n <Dialog\n open={confirmDeleteFav}\n onClose={handleClose}\n // fullScreen={isMobile}\n >\n <DialogTitle>Remove Favourite</DialogTitle>\n <DialogContent>\n <DialogContentText>\n Are you sure you want to remove <strong>{data.name}</strong> from\n your favourites list?\n </DialogContentText>\n </DialogContent>\n <DialogActions>\n <Button\n color=\"default\"\n variant=\"contained\"\n disableElevation\n onClick={handleClose}\n >\n Cancel\n </Button>\n <Button\n color=\"primary\"\n variant=\"contained\"\n autoFocus\n disableElevation\n onClick={handleConfirm}\n >\n Ok\n </Button>\n </DialogActions>\n </Dialog>\n </div>\n )\n})\n\n// Result\n\nconst SearchResult = ({\n // config,\n classes,\n search,\n data,\n variant = 'list',\n selected = false,\n onClickResult = () => undefined,\n}) => {\n // for optimising memoized renders\n\n // const classes = useResultStyles()\n\n // useCountRenders(data.id)\n\n // useEffect(() => {\n // console.log(`effect[${data.id}]`)\n // }, [data, selected, onClickResult, search])\n\n const { tenantConfig: tc } = useConfig()\n const config = tc.ui?.search?.resultItem?.[data.type]\n\n if (!config) throw `Config for item type ${data.type} not found`\n\n const handleResultClick = useCallback(\n (e) => {\n e.stopPropagation()\n onClickResult(data)\n },\n [data, onClickResult]\n )\n\n const ResultContents = () => (\n <>\n {(config?.components || []).map((c, i) => {\n if (!(c.component in componentMap)) return null\n if (c.hideVariant === variant) return null\n const Component = componentMap[c.component]\n\n return (\n <Component\n key={i}\n classes={classes}\n config={c}\n search={search}\n data={data}\n variant={variant}\n />\n )\n })}\n </>\n )\n\n if (variant === 'map') return <ResultContents />\n\n return (\n <ErrorBoundary>\n <Card\n id={`result-${data.id}`}\n className={clsx(classes.root, selected && classes.selected)}\n onClick={handleResultClick}\n >\n <CardContent sx={{ p: 2 }}>\n {false && <Typography variant=\"body1\">{data.id}</Typography>}\n\n <ResultContents />\n\n <Actions classes={classes} {...{ search, data }} />\n </CardContent>\n </Card>\n </ErrorBoundary>\n )\n}\n\nSearchResult.displayName = 'AMSSearchResult'\n\nexport default React.memo(\n withStyles(styles, { name: 'AMSSearchResult' })(SearchResult)\n)\n// export default SearchResult\n// export default SearchResult2\n","/**\n * Direct Axios client requests.\n *\n * These functions are deprecated in favour of endpoints generated via OpenAPI schema.\n *\n * See `@ciss/cie-api-orval`\n *\n * @module @/api/legacy\n */\nexport * from './cie-api'\n","import { isObservableArray } from 'mobx'\nimport intersection from 'lodash/intersection'\nimport flatten from 'lodash/flatten'\nimport uniq from 'lodash/uniq'\nimport _ from 'lodash'\n\nconst ops = {\n eq(a0, a1) {\n return a0 === a1\n },\n\n neq(a0, a1) {\n return a0 !== a1\n },\n\n contains(a0, a1) {\n if (!isObservableArray(a0)) {\n console.error('\"contains\" for a0 only supports observable arrays')\n return false\n }\n\n if (typeof a1 === 'string') return a0.slice().includes(a1)\n\n if (Array.isArray(a1)) return intersection(a0.slice(), a1).length > 0\n\n console.error('\"contains\" type not supported for a1')\n return false\n },\n}\n\nexport const evaluateStepRules = (survey, step, ruleset = 'when') => {\n if (!survey || !step) return false\n if (!(ruleset in step)) return true\n\n // only AND for all rules supported\n\n const res = step[ruleset].every(rule => {\n const [a0key, op, a1] = rule\n\n if (!(a0key in survey)) {\n console.error(`Invalid survey key \"${a0key}\"`)\n return false\n }\n\n if (!(op in ops)) {\n console.error(`Invalid operator \"${op}\"`)\n return false\n }\n\n try {\n const a0 = survey[a0key]\n return ops[op](a0, a1)\n } catch {\n return false\n }\n })\n\n return res\n}\n\nexport const resolveVariantText = (obj, key, pathway = 'self') => {\n if (!obj) return undefined\n if (!(key in obj)) return undefined\n if (!obj[key]) return undefined\n if (typeof obj[key] === 'string') return obj[key]\n\n if (!(pathway in obj[key])) return undefined\n return obj[key][pathway]\n}\n\nexport const resolveVariantStrings = (obj, pathway = 'self') => {\n if (!_.isObject(obj)) return undefined\n return _.mapValues(obj, v => (_.isString(v) ? v : v?.[pathway]))\n}\n\n// category mapping\n\nexport const mapInterestCategories = (question, interests) => {\n return {\n categories: uniq(\n flatten(\n question.interests\n .filter(i => 'categories' in i && interests.includes(i.id))\n .map(i => i.categories)\n )\n ),\n }\n}\n\nexport const mapScaleEvalCategories = (score, cmap) => {\n // console.log('map', score, cmap)\n if (!score || !cmap || !(score in cmap)) return {}\n\n const categories = cmap[score].categories\n\n return {\n categories,\n selected: categories.length > 0 ? categories[0] : null,\n }\n}\n\nexport const mapPropertyCategories = (value, cmap) => {\n if (!value || !cmap || !(value in cmap)) return {}\n\n return {\n categories: cmap[value].categories,\n }\n}\n"],"sourceRoot":""}