{"version":3,"sources":["app/i18n.js","common/BuildVersion.js","constants.js","common/Footer/VaccineFinderLogo.js","common/InlineBoldTrans.js","common/Footer/index.js","common/vendors/GoogleAnalytics.js","common/Header/LanguageSelect.js","common/Logo/LogoEN.js","common/Logo/LogoES.js","common/Logo/index.js","common/Header/index.js","common/LanguageDetection/index.js","features/locationFinder/NotificationBanner.js","features/locationFinder/EligibilityRequirements.js","common/SEO.js","features/locationFinder/Filters/FilterGroup.js","hooks/useEventTracker.js","features/locationFinder/Filters/FiltersContent.js","common/TrackedComponents/index.js","features/locationFinder/Filters/ClearFiltersButton.js","features/locationFinder/Filters/FiltersDesktop.js","features/locationFinder/Filters/FiltersMobile.js","features/locationFinder/Filters/index.js","features/locationFinder/SearchInput.js","features/locationFinder/ZipsInternalNav.js","features/locationFinder/schema/SearchAction.js","features/locationFinder/LocationFinder/index.js","common/LoadingSpinner.js","features/locationFinder/LocationCard/SecondaryInfoSection/CopyContact.js","hooks/usePrevious.js","features/locationFinder/LocationCard/SecondaryInfoSection/ContactButton.js","app/client.js","app/queries.js","features/locationFinder/locationFinderSlice.js","features/locationFinder/LocationCard/SecondaryInfoSection/WebsiteFullLink.js","features/locationFinder/LocationCard/SecondaryInfoSection/SecondaryInfoSection.js","features/locationFinder/LocationCard/index.js","features/locationFinder/schema/AppointmentLocations.js","features/locationFinder/SearchResults.js","features/locationFinder/LocationResults/index.js","App.js","features/locationFinder/AccessibilityText.js","theme/palette.js","theme/useDirectionTheme.js","common/MuiThemeProvider.js","common/ApplicationInsights.js","serviceWorker.js","app/store.js","index.js"],"names":["i18n","use","Backend","LanguageDetector","initReactI18next","init","fallbackLng","debug","process","interpolation","escapeValue","BuildVersion","sha","Helmet","name","value","tracking","makeStyles","fillTeal","fill","fillBlack","ELIGIBILITY_CLICKED","EMPTY_RESULTS_SHOWN","INVALID_ZIP_SEARCHED","LANGUAGE_SELECTED","LOCATIONS_BOOKING_LINK_CLICKED","LOCATIONS_SEARCHED","OLD_APP_LINK_CLICKED","LOAD_MORE_BUTTON_CLICKED","DOH_NEWSROOM_LINK_CLICKED","LOCATIONS_EMAIL_COPIED","LOCATIONS_PHONE_LINK_CLICKED","LOCATIONS_VIEW_MORE_INFO_CLICKED","LOCATIONS_VIEW_LESS_INFO_CLICKED","CLEAR_FILTERS_BUTTON_CLICKED","OPEN_FILTERS_BUTTON_CLICKED","OPEN_VACCINE_TYPE_FILTERS_BUTTON_CLICKED","FEEDBACK_FORM_SUBMITTED","routes","LOCATION_FINDER_PATH","LOCATION_DETAIL_PATH","LOCATION_RESULTS_PATH","vaccineAvailability","AVAILABLE","UNAVAILABLE","UNKNOWN","filterProperty","validFilters","InlineBoldTrans","i18nKey","Trans","components","bold","useStyles","theme","feedback","backgroundColor","palette","accent","purpleLightest","padding","spacing","textAlign","breakpoints","up","titleContainer","alignItems","display","justifyContent","title","marginBottom","marginLeft","logoContainer","margin","maxWidth","attribution","marginRight","vaccineFinderLink","Footer","useTranslation","t","Date","getFullYear","GoogleAnalytics","gaProfileId","id","async","src","appInsights","locales","supportedLocales","Set","map","languages","color","common","white","LogoEN","height","viewBox","xmlns","d","LogoES","Logo","inverted","useTheme","language","secondary","main","to","aria-label","root","toolbar","Header","classes","AppBar","className","component","position","Toolbar","LanguageDetection","props","search","useLocation","useMemo","parse","replace","isSupportedLanguage","has","currentLanguage","console","log","changeLanguage","useCallback","useEffect","children","container","requirements","infolink","fontWeight","notification","background","tealLighter","wordWrap","NotificationBanner","Grid","item","xs","Container","disableGutters","Typography","SEO","description","location","origin","window","canonical","React","pathname","htmlAttributes","lang","meta","content","property","rel","href","filter","hreflang","defaultProps","memo","iconSpacer","width","filterGroup","border","label","chip","chipLabel","lineHeight","paddingLeft","paddingRight","whiteSpace","down","fontSize","FilterGroup","list","handleClick","data","Chip","message","aria-pressed","isSelected","variant","icon","Check","onClick","useEventTracker","eventName","useAppInsightsContext","eventTracker","useTrackEvent","eventData","VACCINE_TYPES","SCHEDULING_FILTERS","ACCESSIBILITY_FILTERS","CYS_FILTERS","flexWrap","FiltersContent","filtersData","useContext","filtersContext","openVF","setOpenVF","openSP","setOpenSP","openAC","setOpenAC","openCYS","setOpenCYS","schedulingPreferencesList","clearFilters","filtersAppliedCount","schedulingFilters","accessibilityList","accessibilityFilters","cysList","cysFilters","Button","filtersToggle","size","aria-expanded","x","ExpandLess","ExpandMore","Collapse","expandedSection","in","timeout","vaccineTypes","aria-live","COMPONENTS","BUTTON","LINK","Link","TrackedComponent","forwardRef","ref","Component","event","rest","track","tags","Object","entries","reduce","key","val","isFunction","TrackedLink","propTypes","PropTypes","oneOfType","element","node","string","object","TrackedButton","ClearFiltersButton","disabled","fullWidth","disableElevation","func","wrapper","FiltersDesktop","open","setOpen","trackOpenFilters","dialogTitle","dialogContent","dialogClose","right","top","filtersButton","Transition","Slide","direction","FiltersMobile","handleClose","isClearButtonDisabled","Dialog","fullScreen","onClose","TransitionComponent","DialogTitle","IconButton","edge","Close","DialogContent","DialogActions","createContext","mapFilterData","validFilterList","selectedFilters","includes","getListOfSelectedFilterValues","updatedList","type","Filters","intialValue","history","useHistory","zip","useParams","useState","isMobile","useMediaQuery","setFiltersData","length","searchQueryString","updatedFiltersData","some","vaccineFilters","queryString","qs","stringify","arrayFormat","Provider","chipToDelete","updatedData","push","clearedFilters","submitContainer","flexDirection","searchInput","searchButton","searchDisclaimer","searchIcon","text","SearchInput","initialValue","inline","setValue","helperText","setHelperText","params","filters","ignoreQueryPrefix","vaccineTypeFilters","split","validZips","useSelector","state","locationFinder","zips","invalidZipSearched","handleSubmit","isEmpty","TextField","error","Boolean","inputProps","InputProps","endAdornment","InputAdornment","Cancel","onChange","e","target","onKeyDown","which","placeholder","clsx","SearchActions","welcomeSection","typography","h3","h2","LocationFinder","keys","minHeight","LoadingSpinner","justify","CircularProgress","contactItem","contactItemText","copyButton","textDecoration","copyText","doneIcon","CopyContact","copyValue","Icon","eventTags","useCopyToClipboard","copyResult","copyToClipboard","didCopyResult","setDidCopyResult","onCopyClick","setTimeout","Done","usePrevious","useRef","current","contactButton","contactText","ContactButton","displayText","buttonText","API_URI","credentials","test","ApolloClient","cache","InMemoryCache","typePolicies","Location","keyFields","link","createHttpLink","uri","fetch","findZips","gql","searchLocations","availabilityToOrdinal","availability","locationFinderSlice","createSlice","initialState","isLoading","locations","feedbackFormLocation","paging","summary","isError","reducers","resetLocations","setFeedbackFormLocation","action","payload","setLocations","setPaging","setSummary","setZips","toggleSpinner","setError","actions","fetchLocations","searchValue","pageNum","pageSize","dispatch","client","query","variables","originZip","then","result","loading","networkStatus","locationsWithDistance","l","formattedDistance","distance","toFixed","availabilityOrdinal","warn","catch","finally","WebsiteFullLink","hasAvailability","useDispatch","paddingBottom","divider","emailLink","primary","infoItem","infoItemText","check","green","accessibilityItem","interpreterDesc","marginTop","SecondaryInfoSection","resultPosition","schedulingLink","infoLink","email","phone","locationId","walkIn","waitList","walkupSite","driveupSite","waitingArea","additionalSupports","accessibleParking","wheelchairAccessible","commCardAvailable","commCardBrailleAvailable","interpretersAvailable","interpretersDesc","supportUrl","scheduleOnline","scheduleByPhone","scheduleByEmail","provideInfantVaccine","providePediatricVaccine","provideYouthVaccine","consentLegallyEmancipated","consentFosterParent","consentResponsibleRelative","consentMatureMinor","consentVerbal","consentWritten","consentFromParentGuardianAuthAdul","consentSignedAuth","consentNurseCounselorLiai","schedulingMap","accessibilityMap","cysMap","schedulingOptions","accessibilityOptions","cysOptions","timeDisplayed","now","showMore","setShowMore","previousShowMore","viewMoreButtonRef","expandedContentRef","toggleShowMore","firstLink","document","getElementById","getElementsByTagName","focus","locationTrackingTags","timeToClickSeconds","zipcode","methodsOfContact","contact","preferredMethodOfContact","get","hasMore","copyEmailDisplay","Email","phoneDisplay","Phone","CardActions","Divider","Accessible","ChildFriendly","CheckCircle","NotListedLocation","card","borderRadius","infoItemMessage","updateMessage","availableIcon","noAvailabilityIcon","warning","unknownAvailabilityIcon","rtlEnglishAddress","vaccineTypeIcon","dark","LocationCard","locationAddress","addressLine1","addressLine2","city","address","vaccineType","join","recordSource","rawDataSourceName","Card","CardContent","gutterBottom","locationName","dir","role","moment","updatedAt","format","AppointmentLocations","script","helmetJsonLdProp","obj","telephone","url","entry","screenReaderFocus","clip","overflow","loadMoreButtonContainer","SearchResults","submittedValue","loadMore","onClickLoadMore","pageDiff","ifIndexIsFirstOfNextLoadedPage","idx","Fragment","total","Box","searchContainer","listContainer","errorMessage","LocationResults","doneLoading","trackLocationsSearched","trackEmptyResultsShown","trackInvalidZipSearched","areValidZipsLoaded","isZipValid","areFiltersValid","invalidTypeFilters","difference","invalidSchedulingFilters","invalidAccessibilityFilters","invalidCysFilters","locationsCount","nearestLocationDistance","first","availabilityCount","availabilitySummaryIndex","findIndex","o","locationAvailabilityRatio","isLoadingFirstPage","sm","md","App","mockButton","bottom","a","response","findZipCodes","exact","path","black","contrastText","light","info","success","grey","50","100","200","300","400","500","600","700","800","900","A100","A200","A400","A700","pink","orange","yellow","blue","purpleLight","tealDark","tealLight","contrastThreshold","tonalOffset","hint","paper","default","level2","level1","active","hover","hoverOpacity","selected","selectedOpacity","disabledBackground","disabledOpacity","focusOpacity","activatedOpacity","fontFamilyDefault","useDirectionTheme","createMuiTheme","values","lg","xl","mixins","overrides","MuiButton","MuiLink","underlineHover","letterSpacing","shadows","shape","transitions","easing","easeInOut","easeOut","easeIn","sharp","duration","shortest","shorter","short","standard","complex","enteringScreen","leavingScreen","htmlFontSize","fontFamily","fontWeightLight","fontWeightRegular","fontWeightMedium","fontWeightBold","fontWeightExtraBold","h1","h4","h5","h6","subtitle1","subtitle2","body1","body2","button","textTransform","caption","overline","zIndex","mobileStepper","speedDial","appBar","drawer","modal","snackbar","tooltip","jss","create","plugins","jssPreset","rtl","MuiThemeProvider","useLayoutEffect","body","setAttribute","StylesProvider","ThemeProvider","reactPlugin","ReactPlugin","createBrowserHistory","basename","ApplicationInsights","config","instrumentationKey","extensions","extensionConfig","identifier","samplingPercentage","loadAppInsights","hostname","match","configureStore","reducer","locationFinderReducer","renderFn","hasChildNodes","ReactDOM","hydrate","render","StrictMode","AppInsightsContext","store","fallback","navigator","serviceWorker","ready","registration","unregister"],"mappings":"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,KACJtE,MAAO,uBAET,CACEsE,GAAI,QACJtE,MAAO,mDAET,CACEsE,GAAI,QACJtE,MAAO,oDAET,CACEsE,GAAI,MACJtE,MAAO,0BAET,CACEsE,GAAI,MACJtE,MAAO,6BAET,CACEsE,GAAI,KACJtE,MAAO,0CAET,CACEsE,GAAI,KACJtE,MAAO,wBAET,CACEsE,GAAI,KACJtE,MAAO,oBAET,CACEsE,GAAI,KACJtE,MAAO,sCAET,CACEsE,GAAI,KACJtE,MAAO,2CAET,CACEsE,GAAI,KACJtE,MAAO,gDAET,CACEsE,GAAI,MACJtE,MAAO,iBAET,CACEsE,GAAI,KACJtE,MAAO,iCAET,CACEsE,GAAI,MACJtE,MAAO,8BAET,CACEsE,GAAI,KACJtE,MAAO,kEAET,CACEsE,GAAI,KACJtE,MAAO,+BAET,CACEsE,GAAI,KACJtE,MAAO,gEAET,CACEsE,GAAI,KACJtE,MAAO,uCAET,CACEsE,GAAI,MACJtE,MAAO,8BAET,CACEsE,GAAI,KACJtE,MAAO,iDAET,CACEsE,GAAI,KACJtE,MAAO,oBAET,CACEsE,GAAI,KACJtE,MAAO,qCAET,CACEsE,GAAI,QACJtE,MAAO,sCAET,CACEsE,GAAI,KACJtE,MAAO,kDAET,CACEsE,GAAI,KACJtE,MAAO,6BAET,CACEsE,GAAI,KACJtE,MAAO,wDAET,CACEsE,GAAI,KACJtE,MAAO,sBAET,CACEsE,GAAI,KACJtE,MAAO,wBAET,CACEsE,GAAI,KACJtE,MAAO,uBAET,CACEsE,GAAI,KACJtE,MAAO,WAET,CACEsE,GAAI,KACJtE,MAAO,0CAET,CACEsE,GAAI,KACJtE,MAAO,iDAET,CACEsE,GAAI,KACJtE,MAAO,qDAET,CACEsE,GAAI,KACJtE,MAAO,uCAET,CACEsE,GAAI,KACJtE,MAAO,qGAET,CACEsE,GAAI,KACJtE,MAAO,+CAET,CACEsE,GAAI,KACJtE,MAAO,sCAIL2E,EAAmB,IAAIC,IAAIF,EAAQG,KAAI,qBAAGP,OAG9BpE,aAAW,SAACqC,GAAD,MAAY,CACvCuC,UAAW,CACTC,MAAOxC,EAAMG,QA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","file":"static/js/main.72b6c0ed.chunk.js","sourcesContent":["import Backend from \"i18next-http-backend\";\r\nimport LanguageDetector from \"i18next-browser-languagedetector\";\r\nimport i18n from \"i18next\";\r\nimport { initReactI18next } from \"react-i18next\";\r\n\r\ni18n\r\n // load translation using http -> see /public/locales (i.e. https://github.com/i18next/react-i18next/tree/master/example/react/public/locales)\r\n // learn more: https://github.com/i18next/i18next-http-backend\r\n .use(Backend)\r\n // detect user language\r\n // learn more: https://github.com/i18next/i18next-browser-languageDetector\r\n .use(LanguageDetector)\r\n // pass the i18n instance to react-i18next.\r\n .use(initReactI18next)\r\n // init i18next\r\n // for all options read: https://www.i18next.com/overview/configuration-options\r\n .init({\r\n fallbackLng: \"en\",\r\n debug: process.env.NODE_ENV !== \"production\",\r\n interpolation: {\r\n escapeValue: false, // not needed for react as it escapes by default\r\n },\r\n });\r\n\r\nexport default i18n;\r\n","import React from \"react\";\r\nimport { Helmet } from 'react-helmet'\r\n\r\nconst BuildVersion = () => {\r\n const sha = process.env.REACT_APP_BUILD_SHA;\r\n if (!sha) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default BuildVersion;\r\n","const tracking = {\r\n ELIGIBILITY_CLICKED: 'Eligibility Clicked',\r\n EMPTY_RESULTS_SHOWN: 'Empty Results Shown',\r\n INVALID_ZIP_SEARCHED: 'Invalid Zip Searched',\r\n LANGUAGE_SELECTED: 'Language Selected',\r\n LOCATIONS_BOOKING_LINK_CLICKED: 'Locations Booking Link Clicked',\r\n LOCATIONS_SEARCHED: 'Locations Searched',\r\n OLD_APP_LINK_CLICKED: 'Old App Link Clicked',\r\n LOAD_MORE_BUTTON_CLICKED: 'Load More Button Clicked',\r\n DOH_NEWSROOM_LINK_CLICKED: 'DOH Newsroom Link Clicked',\r\n LOCATIONS_EMAIL_COPIED: 'Locations Email Copied',\r\n LOCATIONS_PHONE_LINK_CLICKED: 'Locations Phone Link Clicked',\r\n LOCATIONS_VIEW_MORE_INFO_CLICKED: 'Locations View More Info Clicked',\r\n LOCATIONS_VIEW_LESS_INFO_CLICKED: 'Locations Less Info Clicked',\r\n CLEAR_FILTERS_BUTTON_CLICKED: 'Clear Filters Button Clicked',\r\n OPEN_FILTERS_BUTTON_CLICKED: 'Open Filters Button Clicked',\r\n OPEN_VACCINE_TYPE_FILTERS_BUTTON_CLICKED: 'Open Vaccine Type Filters Button Clicked',\r\n FEEDBACK_FORM_SUBMITTED: 'Feedback Form Submitted',\r\n};\r\n\r\nexport { tracking };\r\n\r\nconst links = {\r\n FEEDBACK_EMAIL: 'covid.vaccine@doh.wa.gov',\r\n OLD_VACCINE_LOCATOR_URL: 'https://www.doh.wa.gov/YouandYourFamily/Immunization/VaccineLocations',\r\n COVIDWA_URL: 'https://www.covidwa.com/',\r\n DOH_NEWSROOM_URL: 'https://www.doh.wa.gov/Newsroom/Articles/ID/2737/Statement-on-Pausing-J-J-Vaccine',\r\n VACCINEFINDER_URL: 'https://vaccinefinder.org/',\r\n DOH_EMERGENCIES_COVID19_VACCINE: 'https://www.doh.wa.gov/Emergencies/COVID19/Vaccine',\r\n};\r\n\r\nexport { links };\r\n\r\nconst routes = {\r\n LOCATION_FINDER_PATH: '/',\r\n LOCATION_DETAIL_PATH: '/locations',\r\n LOCATION_RESULTS_PATH: '/locations/:zip',\r\n};\r\n\r\nexport { routes };\r\n\r\n// Models the enumerated appointment availability options for a location\r\n// cf. VACCS-API: ./api/src/models/constants.js\r\nconst vaccineAvailability = {\r\n AVAILABLE: 'AVAILABLE',\r\n UNAVAILABLE: 'UNAVAILABLE',\r\n UNKNOWN: 'UNKNOWN',\r\n};\r\n\r\nexport { vaccineAvailability };\r\n\r\nconst filterProperty = {\r\n VACCINE_TYPES: 'vaccineTypes',\r\n SCHEDULING_FILTERS: 'schedulingFilters',\r\n ACCESSIBILITY_FILTERS: 'accessibilityFilters',\r\n CYS_FILTERS: 'cysFilters',\r\n};\r\n\r\nexport { filterProperty };\r\n\r\nconst validFilters = {\r\n [filterProperty.VACCINE_TYPES]: [\r\n // { value: \"pfizerTod\"},\r\n // { value: \"modernaTod\"},\r\n { value: 'pfizerTodBiv' },\r\n { value: 'modTodBiv' },\r\n // { value: \"pfizerPed\"},\r\n // { value: \"modernaPed\"},\r\n { value: 'pfizerPedBiv' },\r\n { value: 'modernaBiv' },\r\n // { value: \"pfizer\" },\r\n // { value: \"moderna\" },\r\n { value: 'pfizerBiv' },\r\n // { value: \"johnsonAndJohnson\" },\r\n { value: 'novavax' },\r\n ],\r\n [filterProperty.SCHEDULING_FILTERS]: [\r\n // scheduling preferences\r\n { value: 'scheduleOnline' },\r\n { value: 'scheduleByPhone' },\r\n { value: 'scheduleByEmail' },\r\n { value: 'walkIn' },\r\n { value: 'waitList' },\r\n ],\r\n [filterProperty.ACCESSIBILITY_FILTERS]: [\r\n // accessibility\r\n { value: 'walkupSite' },\r\n { value: 'waitingArea' },\r\n { value: 'accessibleParking' },\r\n { value: 'wheelchairAccessible' },\r\n { value: 'commCardAvailable' },\r\n { value: 'commCardBrailleAvailable' },\r\n { value: 'interpretersAvailable' },\r\n { value: 'additionalSupports' },\r\n { value: 'driveupSite' },\r\n ],\r\n [filterProperty.CYS_FILTERS]: [\r\n // cys\r\n { value: 'provideInfantVaccine' },\r\n { value: 'providePediatricVaccine' },\r\n { value: 'provideYouthVaccine' },\r\n { value: 'consentLegallyEmancipated' },\r\n { value: 'consentFosterParent' },\r\n { value: 'consentResponsibleRelative' },\r\n { value: 'consentMatureMinor' },\r\n { value: 'consentVerbal' },\r\n { value: 'consentWritten' },\r\n { value: 'consentFromParentGuardianAuthAdul' },\r\n { value: 'consentSignedAuth' },\r\n { value: 'consentNurseCounselorLiai' },\r\n ],\r\n};\r\n\r\nexport { validFilters };\r\n\r\nconst all = { links, routes, tracking, vaccineAvailability, validFilters };\r\nexport default all;\r\n","import React from \"react\";\r\nimport { makeStyles } from \"@material-ui/core\";\r\n\r\nconst useStyles = makeStyles(() => ({\r\n fillTeal: {\r\n fill: \"#30a197\",\r\n },\r\n fillBlack: {\r\n fill: \"#000000\",\r\n },\r\n}));\r\n\r\nconst VaccineFinderLogo = ({ width = 50 }) => {\r\n const classes = useStyles();\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default VaccineFinderLogo;\r\n","import PropTypes from \"prop-types\";\r\nimport React from \"react\";\r\nimport { Trans } from \"react-i18next\";\r\n\r\nconst InlineBoldTrans = ({ i18nKey }) => (\r\n ,\r\n }}\r\n />\r\n);\r\n\r\nInlineBoldTrans.propTypes = {\r\n i18nKey: PropTypes.string,\r\n};\r\n\r\nexport default InlineBoldTrans;\r\n","import React from 'react';\r\nimport { Trans, useTranslation } from 'react-i18next';\r\nimport { Container, Grid, Link, makeStyles, Typography } from '@material-ui/core';\r\nimport { QuestionAnswer } from '@material-ui/icons';\r\nimport VaccineFinderLogo from './VaccineFinderLogo';\r\nimport { links } from '../../constants';\r\nimport InlineBoldTrans from '../../common/InlineBoldTrans';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n feedback: {\r\n backgroundColor: theme.palette.accent.purpleLightest,\r\n padding: theme.spacing(4, 0),\r\n textAlign: 'center',\r\n [theme.breakpoints.up('sm')]: {\r\n padding: theme.spacing(5, 0),\r\n },\r\n },\r\n titleContainer: {\r\n alignItems: 'center',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n },\r\n title: {\r\n marginBottom: theme.spacing(1),\r\n marginLeft: theme.spacing(1),\r\n },\r\n logoContainer: {\r\n margin: '0 auto',\r\n padding: theme.spacing(4, 3),\r\n textAlign: 'center',\r\n [theme.breakpoints.up('sm')]: {\r\n maxWidth: 420,\r\n padding: theme.spacing(6, 0),\r\n },\r\n },\r\n attribution: {\r\n alignItems: 'center',\r\n display: 'flex',\r\n marginLeft: 'auto',\r\n marginRight: 'auto',\r\n maxWidth: 330,\r\n textAlign: 'center',\r\n },\r\n vaccineFinderLink: {\r\n display: 'block',\r\n marginBottom: theme.spacing(2),\r\n },\r\n}));\r\n\r\nconst Footer = () => {\r\n const classes = useStyles();\r\n const { t } = useTranslation();\r\n const currentYear = new Date().getFullYear();\r\n\r\n return (\r\n
\r\n {/*\r\n
\r\n \r\n \r\n {t(\"feedback\")}\r\n \r\n
\r\n \r\n {t(\"contactUs\")}\r\n
\r\n \r\n {links.FEEDBACK_EMAIL}\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n Vaccine type data provided by{\" \"}\r\n \r\n VaccineFinder\r\n {\" \"}\r\n ©2021. Boston Children's Hospital. All rights reserved.\r\n \r\n \r\n
\r\n
*/}\r\n
\r\n );\r\n};\r\n\r\nexport default Footer;\r\n","import React from 'react'\r\nimport { Helmet } from 'react-helmet'\r\n\r\nconst ga = gaProfileId => `\r\n window.dataLayer = window.dataLayer || [];\r\n\r\n function gtag(){dataLayer.push(arguments);}\r\n\r\n gtag('js', new Date());\r\n\r\n gtag('config', '${gaProfileId}');\r\n`\r\n\r\nconst GoogleAnalytics = () => {\r\n const id = process.env.REACT_APP_GA_ID\r\n if (!id) {\r\n console.warn('Google Analytics not loaded: no ID in build environment')\r\n return null\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport default GoogleAnalytics\r\n","import * as appInsights from \"@microsoft/applicationinsights-react-js\";\r\nimport React, { useState } from \"react\";\r\nimport { Button, makeStyles, Menu, MenuItem } from \"@material-ui/core\";\r\nimport { Language } from \"@material-ui/icons\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { useLocation, useHistory } from \"react-router-dom\";\r\nimport * as qs from \"qs\";\r\n\r\nimport { tracking } from \"../../constants\";\r\n\r\n/**\r\n * The useAppInsights hook relies on a real version of ReactDOM#render.\r\n * Regrettably, using the render function from @testing-library/react\r\n * breaks this hook and breaks all our tests.\r\n *\r\n * This sets our hooks to stubs in test mode, and operate normally otherwise\r\n */\r\nlet useAppInsightsContext;\r\nlet useTrackEvent;\r\nif (process.env.NODE_ENV === \"test\") {\r\n useAppInsightsContext = function stub() {};\r\n useTrackEvent = function genStub() {\r\n return () => {};\r\n };\r\n} else {\r\n useAppInsightsContext = appInsights.useAppInsightsContext;\r\n useTrackEvent = appInsights.useTrackEvent;\r\n}\r\n\r\n// The ids for each locale must map to the directories in public/locales\r\nexport const locales = [\r\n {\r\n id: \"en\",\r\n value: \"English\",\r\n },\r\n {\r\n id: \"es\",\r\n value: \"Spanish - Español\",\r\n },\r\n {\r\n id: \"am\",\r\n value: \"Amharic - አማርኛ\",\r\n },\r\n {\r\n id: \"ar\",\r\n value: \"Arabic - العَرَبِيةُ\",\r\n },\r\n {\r\n id: \"hy\",\r\n value: \"Armenian - հայերէն\",\r\n },\r\n {\r\n id: \"my\",\r\n value: \"Burmese - မြန်မာ\",\r\n },\r\n {\r\n id: \"ca\",\r\n value: \"Catalan - Català\",\r\n },\r\n {\r\n id: \"zh-CN\",\r\n value: \"Chinese (Simplified) - 简体中文\",\r\n },\r\n {\r\n id: \"zh-TW\",\r\n value: \"Chinese (Traditional) - 繁體中文\",\r\n },\r\n {\r\n id: \"chk\",\r\n value: \"Chuukese - Fosun Chuuk\",\r\n },\r\n {\r\n id: \"prs\",\r\n value: \"Dari - دری\",\r\n },\r\n {\r\n id: \"fa\",\r\n value: \"Farsi - فارسی\",\r\n },\r\n {\r\n id: \"fr\",\r\n value: \"French - Français\",\r\n },\r\n {\r\n id: \"de\",\r\n value: \"German - Deutsch\",\r\n },\r\n {\r\n id: \"ht\",\r\n value: \"Haitian Creole - Kreyòl ayisyen\",\r\n },\r\n {\r\n id: \"he\",\r\n value: \"Hebrew - עברית\",\r\n },\r\n {\r\n id: \"hi\",\r\n value: \"Hindi - हिन्दी\",\r\n },\r\n {\r\n id: \"hmn\",\r\n value: \"Hmong - Hmoob\",\r\n },\r\n {\r\n id: \"ja\",\r\n value: \"Japanese - 日本語\",\r\n },\r\n {\r\n id: \"kar\",\r\n value: \"Karen - ကညီ\",\r\n },\r\n {\r\n id: \"km\",\r\n value: \"Khmer - ភាសាខ្មែរ\",\r\n },\r\n {\r\n id: \"ko\",\r\n value: \"Korean - 한국어\",\r\n },\r\n {\r\n id: \"lo\",\r\n value: \"Lao - ພາ​ສາ​ລາວ\",\r\n },\r\n {\r\n id: \"mh\",\r\n value: \"Marshallese - Kajin Ṃajeḷ\",\r\n },\r\n {\r\n id: \"mxb\",\r\n value: \"Mixteco Bajo - Ñuu savi\",\r\n },\r\n {\r\n id: \"ne\",\r\n value: \"Nepali - नेपाली\",\r\n },\r\n {\r\n id: \"om\",\r\n value: \"Oromo - Oromiffa\",\r\n },\r\n {\r\n id: \"ps\",\r\n value: \"Pashto - پښتو\",\r\n },\r\n {\r\n id: \"pt-BR\",\r\n value: \"Portuguese - Português (Brasil)\",\r\n },\r\n {\r\n id: \"pa\",\r\n value: \"Punjabi - ਪੰਜਾਬੀ\",\r\n },\r\n {\r\n id: \"ro\",\r\n value: \"Romanian - Română\",\r\n },\r\n {\r\n id: \"ru\",\r\n value: \"Russian - Русский\",\r\n },\r\n {\r\n id: \"sm\",\r\n value: \"Samoan - Faa-Samoa\",\r\n },\r\n {\r\n id: \"so\",\r\n value: \"Somali - Af Soomaali\",\r\n },\r\n {\r\n id: \"sw\",\r\n value: \"Swahili - Kiswahili\",\r\n },\r\n {\r\n id: \"tl\",\r\n value: \"Tagalog\",\r\n },\r\n {\r\n id: \"ta\",\r\n value: \"Tamil - தமிழ்\",\r\n },\r\n {\r\n id: \"te\",\r\n value: \"Telugu - తెలుగు\",\r\n },\r\n {\r\n id: \"th\",\r\n value: \"Thai - ภาษาไทย\",\r\n },\r\n {\r\n id: \"ti\",\r\n value: \"Tigrinya - ትግርኛ\",\r\n },\r\n {\r\n id: \"uk\",\r\n value: \"Ukrainian - Українська мова\",\r\n },\r\n {\r\n id: \"ur\",\r\n value: \"Urdu - اُردُو\",\r\n },\r\n {\r\n id: \"vi\",\r\n value: \"Vietnamese - Tiếng Việt\",\r\n },\r\n];\r\n\r\nconst supportedLocales = new Set(locales.map(({ id }) => id));\r\nexport { supportedLocales };\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n languages: {\r\n color: theme.palette.common.white,\r\n },\r\n}));\r\n\r\nexport function LanguageSelect() {\r\n const classes = useStyles();\r\n const [anchorEl, setAnchorEl] = useState(null);\r\n const { i18n, t } = useTranslation();\r\n const history = useHistory();\r\n const location = useLocation();\r\n const track = useTrackEvent(\r\n useAppInsightsContext(),\r\n tracking.LANGUAGE_SELECTED\r\n );\r\n\r\n const qsParams = qs.parse(location.search.replace(/^\\?/, \"\"));\r\n\r\n const handleOpen = (e) => setAnchorEl(e.currentTarget);\r\n\r\n const handleClose = () => setAnchorEl(null);\r\n\r\n const handleLanguageChange = (e) => {\r\n const { id } = e.currentTarget;\r\n track({ id });\r\n\r\n // Update the language query parameter, but only if it's already specified.\r\n // The LocationDetection component will detect URL and i18n language are out\r\n // of sync and will change the language accordingly.\r\n // Otherwise do it the normal way without touching the URL.\r\n if (\"language\" in qsParams) {\r\n // Don't drop any query params that may exist in the URL\r\n const newParams = qs.stringify({ ...qsParams, language: id });\r\n\r\n history.push(`${location.pathname}?${newParams}`);\r\n } else {\r\n i18n.changeLanguage(id);\r\n }\r\n\r\n // TODO: find solution for translating updated langauge\r\n // moment.updateLocale(i18n.language, {\r\n // relativeTime: {\r\n // past: t(\"relativeTimePast\"),\r\n // s: t(\"relativeTimeS\"),\r\n // },\r\n // });\r\n handleClose();\r\n };\r\n\r\n return (\r\n <>\r\n }\r\n variant=\"text\"\r\n >\r\n {t(\"nativeLanguageName\")}\r\n \r\n \r\n {locales.map((l) => (\r\n \r\n {l.value}\r\n \r\n ))}\r\n \r\n \r\n );\r\n}\r\n","import React from \"react\";\r\n\r\nconst LogoEN = ({ fill, height }) => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport default LogoEN;\r\n","import React from \"react\";\r\n\r\nconst LogoES = ({ fill, height }) => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport default LogoES;\r\n","import { Link } from \"react-router-dom\";\r\nimport PropTypes from \"prop-types\";\r\nimport React from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\nimport { useTheme } from \"@material-ui/core\";\r\n\r\nimport LogoEN from \"./LogoEN\";\r\nimport LogoES from \"./LogoES\";\r\nimport { routes } from \"../../constants\";\r\n\r\nconst Logo = ({ height = 70, inverted = false }) => {\r\n const theme = useTheme();\r\n const { language } = useTranslation().i18n;\r\n const fill = inverted\r\n ? theme.palette.secondary.main\r\n : theme.palette.common.white;\r\n\r\n return (\r\n \r\n {language === \"es\" ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nLogo.propTypes = {\r\n height: PropTypes.number,\r\n inverted: PropTypes.bool,\r\n};\r\n\r\nexport default Logo;\r\n","import React from 'react';\r\n\r\nimport { AppBar, makeStyles, Toolbar } from '@material-ui/core';\r\n\r\nimport { LanguageSelect } from './LanguageSelect';\r\nimport Logo from '../Logo';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n backgroundColor: theme.palette.secondary.main,\r\n },\r\n toolbar: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n },\r\n}));\r\n\r\nconst Header = () => {\r\n const classes = useStyles();\r\n\r\n return (\r\n \r\n \r\n \r\n
{/**/}
\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default Header;\r\n","import React, { useCallback, useEffect, useMemo } from \"react\";\r\nimport { parse } from \"qs\";\r\nimport { useLocation } from \"react-router-dom\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\nimport { supportedLocales } from \"../Header/LanguageSelect\";\r\n\r\nconst LanguageDetection = (props) => {\r\n const { search } = useLocation();\r\n const { i18n } = useTranslation();\r\n const language = useMemo(() => parse(search.replace(/^\\?/, '')).language, [search])\r\n const isSupportedLanguage = useMemo(() => supportedLocales.has(language), [\r\n language,\r\n ]);\r\n const currentLanguage = i18n.language;\r\n console.log(\"🚀 ~ file: index.js:16 ~ LanguageDetection ~ currentLanguage:\", currentLanguage)\r\n\r\n const changeLanguage = useCallback(() => i18n.changeLanguage(language), [i18n, language]);\r\n\r\n useEffect(() => {\r\n if (language && language !== currentLanguage && isSupportedLanguage) {\r\n changeLanguage(language);\r\n }\r\n }, [currentLanguage, language, isSupportedLanguage, changeLanguage])\r\n\r\n return (\r\n <>\r\n {props.children}\r\n \r\n );\r\n}\r\n\r\nexport default LanguageDetection;\r\n","import React from \"react\";\r\n\r\nimport { Container, Grid, Typography, makeStyles } from \"@material-ui/core\";\r\n\r\nimport InlineBoldTrans from \"../../common/InlineBoldTrans\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n notification: {\r\n background: theme.palette.accent.tealLighter,\r\n padding: theme.spacing(2),\r\n wordWrap: 'break-word',\r\n [theme.breakpoints.up(\"sm\")]: {\r\n textAlign: \"center\",\r\n padding: theme.spacing(1, 2),\r\n },\r\n },\r\n}));\r\n\r\nconst NotificationBanner = () => {\r\n const classes = useStyles();\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default NotificationBanner;\r\n","import React from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Container, Grid, makeStyles, Typography, Link } from \"@material-ui/core\";\r\nimport { links } from \"../../constants\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n container: {\r\n padding: theme.spacing(5, 3),\r\n [theme.breakpoints.up(\"md\")]: {\r\n padding: theme.spacing(5, 0),\r\n },\r\n },\r\n requirements: {\r\n backgroundColor: theme.palette.secondary.main,\r\n color: theme.palette.common.white,\r\n },\r\n title: {\r\n textAlign: \"center\",\r\n },\r\n infolink: {\r\n color: \"#CCFEFF\",\r\n fontWeight: \"600\",\r\n },\r\n}));\r\n\r\nconst ElegibilityRequirements = () => {\r\n const classes = useStyles();\r\n const { t } = useTranslation();\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n {t(\"dohVaccineLinkText\")}\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default ElegibilityRequirements;\r\n","import PropTypes from \"prop-types\";\r\nimport React from \"react\";\r\nimport { Helmet } from \"react-helmet\";\r\nimport { useLocation } from \"react-router-dom\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\nimport { locales } from \"./Header/LanguageSelect\";\r\n\r\nfunction SEO (props) {\r\n const {\r\n description,\r\n title\r\n } = props;\r\n\r\n const location = useLocation();\r\n const { i18n: { language } } = useTranslation();\r\n const origin = window.location.origin;\r\n\r\n // The canonical tag tells search engines what the \"official, most definitive\r\n // version of this content lives\". It helps us disambiguate from among\r\n // language-specific versions of the site as well as for query parameters that\r\n // don't affect the content of the page\r\n const canonical = React.useMemo(() => (\r\n `${origin}${location.pathname}?language=${language}`\r\n ), [language, location, origin])\r\n\r\n return (\r\n \r\n \r\n {\r\n // Signal to search engines which page variant to show if it is aware of\r\n // the searcher's language preferences. (https://moz.com/learn/seo/hreflang-tag)\r\n locales\r\n // No need to link the language version we're already on!\r\n .filter(({ id: lang }) => lang !== language)\r\n .map(({ id: lang }) => (\r\n \r\n ))\r\n }\r\n \r\n );\r\n}\r\n\r\nSEO.defaultProps = {\r\n description: `\r\n Publishing up-to-date COVID-19 vaccine availability at hospitals and\r\n pharmacies across Washington state.\r\n `\r\n};\r\n\r\nSEO.propTypes = {\r\n description: PropTypes.string,\r\n title: PropTypes.string.isRequired\r\n};\r\n\r\nexport default React.memo(SEO);\r\n","import React from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Check } from \"@material-ui/icons\";\r\nimport {\r\n Chip,\r\n makeStyles,\r\n Typography,\r\n} from \"@material-ui/core\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n iconSpacer: {\r\n display: \"inline-block\",\r\n width: 24,\r\n },\r\n filterGroup: {\r\n border: 0,\r\n padding: 0,\r\n margin: theme.spacing(2, 0, 0)\r\n },\r\n label: {\r\n padding: 0,\r\n margin: theme.spacing(1, 0),\r\n fontWeight: 600,\r\n },\r\n chip: {\r\n height: \"fit-content\",\r\n padding: \"4px 0\",\r\n margin: theme.spacing(.5),\r\n },\r\n chipLabel: {\r\n lineHeight: \"normal\",\r\n paddingLeft: 8,\r\n paddingRight: 24,\r\n whiteSpace: \"pre-wrap\",\r\n [theme.breakpoints.down(\"sm\")]: {\r\n fontSize: 12,\r\n },\r\n }\r\n}));\r\n\r\nexport default function FilterGroup({label, list, handleClick, filterProperty}) {\r\n const classes = useStyles();\r\n const { t } = useTranslation();\r\n\r\n return (\r\n
\r\n \r\n \r\n {list.map((data) => (\r\n : }\r\n label={t(data.value)}\r\n onClick={handleClick(data, filterProperty)}\r\n />\r\n ))}\r\n
\r\n );\r\n}\r\n","import { useCallback } from \"react\";\r\nimport {\r\n useAppInsightsContext,\r\n useTrackEvent,\r\n} from \"@microsoft/applicationinsights-react-js\";\r\n\r\nconst useEventTracker = (eventName) => {\r\n const appInsights = useAppInsightsContext();\r\n\r\n const eventTracker = useTrackEvent(appInsights, eventName);\r\n\r\n // Memoize repetitive calls to the tracker with the same function args\r\n const tracker = useCallback(\r\n (eventData) => {\r\n eventTracker(eventData);\r\n },\r\n [eventTracker]\r\n );\r\n\r\n return tracker;\r\n};\r\n\r\nexport default useEventTracker;\r\n","import PropTypes from \"prop-types\";\r\nimport React, {useContext} from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport {\r\n makeStyles,\r\n Typography,\r\n Button,\r\n Collapse,\r\n Grid,\r\n Container\r\n} from \"@material-ui/core\";\r\nimport FilterGroup from './FilterGroup';\r\nimport { filterProperty } from \"../../../constants\";\r\nimport { tracking } from \"../../../constants\";\r\nimport useEventTracker from \"../../../hooks/useEventTracker\";\r\nimport { ExpandMore, ExpandLess } from \"@material-ui/icons\";\r\nimport { filtersContext } from \"./index\";\r\n\r\nconst { VACCINE_TYPES, SCHEDULING_FILTERS, ACCESSIBILITY_FILTERS, CYS_FILTERS } = filterProperty;\r\nconst useStyles = makeStyles((theme) => ({\r\n filterGroup: {\r\n display: \"flex\",\r\n flexWrap: \"wrap\",\r\n border: 0,\r\n padding: 0,\r\n margin: 0,\r\n },\r\n}));\r\n\r\nexport default function FiltersContent({ filtersData, handleClick }) {\r\n const classes = useStyles();\r\n const { t } = useTranslation();\r\n const {\r\n openVF,\r\n setOpenVF,\r\n openSP,\r\n setOpenSP,\r\n openAC,\r\n setOpenAC,\r\n openCYS,\r\n setOpenCYS,\r\n clearFilters,\r\n filtersAppliedCount\r\n } = useContext(filtersContext);\r\n\r\n const schedulingPreferencesList = filtersData.schedulingFilters;\r\n const accessibilityList = filtersData.accessibilityFilters;\r\n const cysList = filtersData.cysFilters;\r\n\r\n const toggleClickVTOpen = () => { \r\n setOpenVF((x) => !x);\r\n }\r\n\r\n const toggleClickSPOpen = () => { \r\n setOpenSP((x) => !x);\r\n }\r\n\r\n const toggleClickACOpen = () => {\r\n setOpenAC((x) => !x);\r\n }\r\n\r\n const toggleClickCYSOpen = () => {\r\n setOpenCYS((x) => !x);\r\n }\r\n\r\n return (\r\n <>\r\n\r\n {/* \r\n \r\n ADO 1819 Add an \"Accordian\" Control for Each Filter Section\r\n \r\n For each collapsible filter section the components consists of the following \r\n ELEMENT USAGE\r\n 1. A Button element Used to trigger the update to the Collapse element based on the state of the control.\r\n 2. A Collapse element Toggles content from visible to hidden in a collapsible style\r\n 3. A FilterGroup element Contains the filter data that users can select \r\n EXCEPTION: \r\n 4. A Typography element Used to display the message regarding boosters.\r\n\r\n */}\r\n\r\n {/* Vaccine Type filter collapsible section */}\r\n \r\n {t(\"vaccineTypes\")}\r\n { openVF ? : }\r\n \r\n \r\n\r\n \r\n \r\n {t(\"msgBoosters\")}\r\n \r\n\r\n \r\n\r\n {/* Scheduling preferences filter collapsible section */}\r\n\r\n \r\n {t(\"schedulingPreferences\")}\r\n { openSP ? : }\r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n {/* Accessibility filter collapsible section */}\r\n\r\n \r\n {t(\"accessibilityLabel\")}\r\n { openAC ? : }\r\n \r\n \r\n\r\n \r\n\r\n \r\n\r\n {/* Child Youth Services filter collapsible section */}\r\n\r\n \r\n {t(\"cysLabel\")}\r\n { openCYS ? : }\r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n );\r\n}\r\n\r\nFiltersContent.propTypes = {\r\n filtersData: PropTypes.object,\r\n handleClick: PropTypes.func,\r\n};\r\n","import PropTypes from 'prop-types'\r\nimport React, { forwardRef } from 'react'\r\nimport { isFunction } from 'lodash'\r\nimport { useTranslation } from 'react-i18next'\r\nimport {\r\n useAppInsightsContext,\r\n useTrackEvent\r\n} from '@microsoft/applicationinsights-react-js'\r\n\r\nimport { Button, Link } from '@material-ui/core'\r\n\r\n/**\r\n * Tracked components wrap standard Material UI trackable components. Each\r\n * wrapped component receives tracking parameters as properties, add a tracking\r\n * handler, and forwards everything else to the underlying component:\r\n *\r\n * @param {String} event the tracking event name to send to Azure App Insights\r\n * @param {Object} tags an optional key/value tags to add detail to the event\r\n */\r\n\r\nconst COMPONENTS = {\r\n BUTTON: Button,\r\n LINK: Link\r\n}\r\n\r\nconst TrackedComponent = forwardRef((props, ref) => {\r\n const { Component, children, event, onClick, ...rest } = props\r\n const { i18n } = useTranslation()\r\n const track = useTrackEvent(useAppInsightsContext(), event)\r\n\r\n const handleClick = React.useCallback(() => {\r\n const tags = Object.entries(props.tags).reduce(\r\n (memo, [key, val]) => ({\r\n ...memo,\r\n [key]: isFunction(val) ? val() : val\r\n }),\r\n {}\r\n )\r\n onClick && onClick()\r\n track({\r\n ...tags,\r\n language: i18n.language\r\n })\r\n }, [props.tags, onClick, i18n.language, track])\r\n\r\n return (\r\n \r\n {children}\r\n \r\n )\r\n})\r\n\r\nexport const TrackedLink = forwardRef((props, ref) => (\r\n \r\n))\r\n\r\nTrackedLink.propTypes = {\r\n children: PropTypes.oneOfType([\r\n PropTypes.element,\r\n PropTypes.node,\r\n PropTypes.string\r\n ]),\r\n event: PropTypes.string,\r\n href: PropTypes.string,\r\n tags: PropTypes.object\r\n}\r\n\r\nTrackedLink.defaultProps = {\r\n tags: {}\r\n}\r\n\r\nexport const TrackedButton = forwardRef((props, ref) => (\r\n \r\n))\r\n\r\nTrackedButton.propTypes = {\r\n children: PropTypes.oneOfType([\r\n PropTypes.element,\r\n PropTypes.node,\r\n PropTypes.string\r\n ]),\r\n event: PropTypes.string,\r\n href: PropTypes.string,\r\n tags: PropTypes.object,\r\n onClick: PropTypes.func\r\n}\r\n\r\nTrackedButton.defaultProps = {\r\n tags: {}\r\n}\r\n","import PropTypes from \"prop-types\";\r\nimport React from \"react\";\r\nimport { tracking } from \"../../../constants\";\r\nimport { TrackedButton } from \"../../../common/TrackedComponents\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\n\r\nexport default function ClearFiltersButton({ disabled, onClick, fullWidth }) {\r\n const { t } = useTranslation();\r\n\r\n return (\r\n \r\n {t(\"clearFilters\")}\r\n \r\n );\r\n}\r\n\r\nClearFiltersButton.propTypes = {\r\n disabled: PropTypes.bool,\r\n fullWidth: PropTypes.bool,\r\n clearFilters: PropTypes.func,\r\n};\r\n","import React, {useContext} from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport {\r\n Button,\r\n Collapse,\r\n Grid,\r\n makeStyles,\r\n Container,\r\n} from \"@material-ui/core\";\r\nimport { ExpandMore, ExpandLess } from \"@material-ui/icons\";\r\nimport FiltersContent from \"./FiltersContent\";\r\nimport ClearFiltersButton from \"./ClearFiltersButton\";\r\nimport { tracking } from \"../../../constants\";\r\nimport useEventTracker from \"../../../hooks/useEventTracker\";\r\nimport { filtersContext } from \"./index\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n wrapper: {\r\n \"@media (min-width: 686px)\": { // 686px is min width for 16 px for margin since search bar is centered\r\n marginLeft: `calc((100% - 654px) / 2)`, // 650px is max the searchInput length will get\r\n },\r\n },\r\n filtersToggle: {\r\n fontSize: \"1.25rem\",\r\n marginRight: theme.spacing(1),\r\n padding: theme.spacing(1),\r\n },\r\n expandedSection: {\r\n marginLeft: theme.spacing(1),\r\n },\r\n}));\r\n\r\nexport default function FiltersDesktop() {\r\n const classes = useStyles();\r\n const { t } = useTranslation();\r\n const {\r\n open,\r\n setOpen,\r\n openVF,\r\n setOpenVF,\r\n openSP,\r\n setOpenSP,\r\n openAC,\r\n setOpenAC,\r\n openCYS,\r\n setOpenCYS,\r\n handleClick,\r\n clearFilters,\r\n filtersAppliedCount,\r\n filtersData,\r\n } = useContext(filtersContext);\r\n\r\n const trackOpenFilters = useEventTracker(\r\n tracking.OPEN_FILTERS_BUTTON_CLICKED\r\n );\r\n\r\n const toggleClickOpen = () => {\r\n if(!open) {\r\n trackOpenFilters();\r\n }\r\n setOpen((x) => !x);\r\n }\r\n\r\n return (\r\n \r\n \r\n {t(\"filters\")} ({filtersAppliedCount})\r\n { open ? : }\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n","import React, { useMemo, useContext } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport {\r\n Button,\r\n Dialog,\r\n DialogContent,\r\n DialogActions,\r\n DialogTitle,\r\n Grid,\r\n makeStyles,\r\n Typography,\r\n Slide,\r\n IconButton,\r\n} from \"@material-ui/core\";\r\nimport { TrackedButton } from \"../../../common/TrackedComponents\";\r\nimport { Close } from \"@material-ui/icons\";\r\nimport FiltersContent from \"./FiltersContent\";\r\nimport ClearFiltersButton from \"./ClearFiltersButton\";\r\nimport { tracking } from \"../../../constants\";\r\nimport { filtersContext } from \"./index\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n dialogTitle: {\r\n padding: theme.spacing(2, 2, 0),\r\n },\r\n dialogContent: {\r\n padding: theme.spacing(0, 2),\r\n },\r\n dialogClose: {\r\n position: \"absolute\",\r\n right: 0,\r\n top: 0,\r\n margin: 8,\r\n },\r\n filtersButton: {\r\n marginBottom: theme.spacing(1),\r\n },\r\n}));\r\n\r\nconst Transition = React.forwardRef(function Transition(props, ref) {\r\n return ;\r\n});\r\n\r\nexport default function FiltersMobile() {\r\n const classes = useStyles();\r\n const { t } = useTranslation();\r\n const {\r\n open,\r\n setOpen,\r\n handleClick,\r\n clearFilters,\r\n filtersAppliedCount,\r\n filtersData,\r\n } = useContext(filtersContext);\r\n\r\n const handleClickOpen = () => {\r\n setOpen(true);\r\n };\r\n\r\n const handleClose = () => {\r\n setOpen(false);\r\n };\r\n\r\n const isClearButtonDisabled = useMemo(() => filtersAppliedCount === 0,\r\n [filtersAppliedCount]\r\n )\r\n\r\n return (\r\n \r\n \r\n {t(\"filters\")} ({filtersAppliedCount})\r\n \r\n \r\n \r\n \r\n \r\n {t(\"filters\")}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {t(\"close\")}\r\n \r\n \r\n \r\n \r\n );\r\n}\r\n","import PropTypes from \"prop-types\";\r\nimport React, { useMemo, createContext } from \"react\";\r\nimport { includes } from \"lodash\";\r\nimport { useHistory, useParams } from \"react-router-dom\";\r\nimport {\r\n makeStyles,\r\n Container,\r\n useMediaQuery,\r\n useTheme,\r\n} from \"@material-ui/core\";\r\nimport { validFilters, filterProperty } from \"../../../constants\";\r\nimport qs from \"qs\";\r\nimport FiltersDesktop from \"./FiltersDesktop\";\r\nimport FiltersMobile from \"./FiltersMobile\";\r\n\r\nexport const filtersContext = createContext();\r\nconst { VACCINE_TYPES, SCHEDULING_FILTERS, ACCESSIBILITY_FILTERS, CYS_FILTERS } = filterProperty;\r\nconst useStyles = makeStyles((theme) => ({\r\n container: {\r\n padding: 0,\r\n margin: `${theme.spacing(2)}px auto ${theme.spacing(1)}px`,\r\n },\r\n}));\r\n\r\nconst mapFilterData = (validFilterList, filterProperty, selectedFilters) => validFilterList\r\n .map(filter => ({\r\n ...filter,\r\n filterProperty,\r\n isSelected: includes(selectedFilters, filter.value)\r\n }));\r\n\r\nconst getListOfSelectedFilterValues = (updatedList, filterProperty) => updatedList\r\n .filter(type => type.isSelected === true && type.filterProperty === filterProperty)\r\n .map(type => type.value);\r\n\r\nexport default function Filters({ intialValue = {} }) {\r\n const { vaccineTypes, schedulingFilters, accessibilityFilters, cysFilters } = intialValue;\r\n const classes = useStyles();\r\n const history = useHistory();\r\n const { zip } = useParams();\r\n const [open, setOpen] = React.useState(false);\r\n const [openVF, setOpenVF] = React.useState(false);\r\n const [openSP, setOpenSP] = React.useState(false);\r\n const [openAC, setOpenAC] = React.useState(false);\r\n const [openCYS, setOpenCYS] = React.useState(false);\r\n const theme = useTheme();\r\n const isMobile = useMediaQuery(theme.breakpoints.down('xs'));\r\n\r\n const [filtersData, setFiltersData] = React.useState({\r\n vaccineTypes: mapFilterData(validFilters.vaccineTypes, VACCINE_TYPES, vaccineTypes),\r\n schedulingFilters: mapFilterData(validFilters.schedulingFilters, SCHEDULING_FILTERS, schedulingFilters),\r\n accessibilityFilters: mapFilterData(validFilters.accessibilityFilters, ACCESSIBILITY_FILTERS, accessibilityFilters),\r\n cysFilters: mapFilterData(validFilters.cysFilters, CYS_FILTERS, cysFilters),\r\n });\r\n\r\n const filtersAppliedCount = useMemo(() => vaccineTypes.length + schedulingFilters.length + accessibilityFilters.length + cysFilters.length,\r\n [vaccineTypes, schedulingFilters, accessibilityFilters, cysFilters]\r\n );\r\n\r\n const searchQueryString = ((updatedFiltersData) => {\r\n const hasSelectedFilters = [...updatedFiltersData.vaccineTypes, ...updatedFiltersData.schedulingFilters, ...updatedFiltersData.accessibilityFilters, , ...updatedFiltersData.cysFilters]\r\n .some(val => val.isSelected === true)\r\n\r\n if (hasSelectedFilters) {\r\n const vaccineFilters = getListOfSelectedFilterValues(updatedFiltersData.vaccineTypes, VACCINE_TYPES);\r\n const schedulingFilters = getListOfSelectedFilterValues(updatedFiltersData.schedulingFilters, SCHEDULING_FILTERS);\r\n const accessibilityFilters = getListOfSelectedFilterValues(updatedFiltersData.accessibilityFilters, ACCESSIBILITY_FILTERS);\r\n const cysFilters = getListOfSelectedFilterValues(updatedFiltersData.cysFilters, CYS_FILTERS);\r\n\r\n const queryString = qs.stringify({\r\n vaccineTypes: vaccineFilters,\r\n schedulingFilters: schedulingFilters,\r\n accessibilityFilters: accessibilityFilters,\r\n cysFilters: cysFilters\r\n }, { arrayFormat: 'comma' });\r\n\r\n return `?${queryString}`;\r\n }\r\n return ''\r\n });\r\n\r\n\r\n const handleClick = (chipToDelete, filterProperty) => () => {\r\n const updatedData = filtersData;\r\n\r\n updatedData[filterProperty] = updatedData[filterProperty].map(item => {\r\n if (item.value === chipToDelete.value) {\r\n return { ...item, isSelected: !item.isSelected };\r\n } else {\r\n return item;\r\n }\r\n });\r\n setFiltersData(updatedData);\r\n\r\n history.push({\r\n pathname: `/locations/${zip}`,\r\n search: searchQueryString(updatedData),\r\n });\r\n };\r\n\r\n const clearFilters = () => {\r\n const clearedFilters = {\r\n vaccineTypes: mapFilterData(validFilters.vaccineTypes, VACCINE_TYPES, []),\r\n schedulingFilters: mapFilterData(validFilters.schedulingFilters, SCHEDULING_FILTERS, []),\r\n accessibilityFilters: mapFilterData(validFilters.accessibilityFilters, ACCESSIBILITY_FILTERS, []),\r\n cysFilters: mapFilterData(validFilters.cysFilters, CYS_FILTERS, []),\r\n }\r\n\r\n setFiltersData(clearedFilters)\r\n history.push({ pathname: `/locations/${zip}` });\r\n }\r\n\r\n return (\r\n \r\n \r\n {isMobile ? : }\r\n \r\n \r\n\r\n );\r\n}\r\n\r\nFilters.propTypes = {\r\n initialValue: PropTypes.object,\r\n};\r\n","import PropTypes from \"prop-types\";\r\nimport React, {useMemo, useState} from \"react\";\r\nimport clsx from \"clsx\";\r\nimport { isEmpty } from \"lodash\";\r\nimport { useHistory, useLocation } from \"react-router-dom\";\r\nimport { useSelector } from \"react-redux\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { searchQueryString } from \"./Filters\";\r\n\r\nimport {\r\n useAppInsightsContext,\r\n useTrackEvent,\r\n} from \"@microsoft/applicationinsights-react-js\";\r\n\r\nimport {\r\n Button,\r\n IconButton,\r\n InputAdornment,\r\n TextField,\r\n Typography,\r\n makeStyles,\r\n} from \"@material-ui/core\";\r\nimport { Cancel } from \"@material-ui/icons\";\r\n\r\nimport { tracking } from \"../../constants\";\r\nimport qs from \"qs\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n container: {\r\n display: \"flex\",\r\n flexWrap: \"wrap\",\r\n width: \"100%\",\r\n [theme.breakpoints.up(\"sm\")]: {\r\n justifyContent: \"center\",\r\n flexWrap: \"nowrap\",\r\n },\r\n },\r\n submitContainer: {\r\n alignItems: \"center\",\r\n display: \"flex\",\r\n flexDirection: \"row\",\r\n [theme.breakpoints.up(\"sm\")]: {\r\n flexDirection: \"column\",\r\n marginLeft: theme.spacing(2),\r\n },\r\n \"&.inline\": {\r\n flexDirection: \"row\",\r\n },\r\n },\r\n searchInput: {\r\n marginBottom: theme.spacing(2),\r\n [theme.breakpoints.up(\"sm\")]: {\r\n marginBottom: 0,\r\n maxWidth: 340,\r\n },\r\n },\r\n searchButton: {\r\n whiteSpace: \"nowrap\",\r\n [theme.breakpoints.up(\"sm\")]: {\r\n height: 56,\r\n marginBottom: theme.spacing(1),\r\n },\r\n \"&.inline\": {\r\n marginBottom: 0,\r\n },\r\n },\r\n searchDisclaimer: {\r\n whiteSpace: \"nowrap\",\r\n marginLeft: theme.spacing(1),\r\n [theme.breakpoints.up(\"sm\")]: {\r\n marginLeft: 0,\r\n },\r\n \"&.inline\": {\r\n marginLeft: theme.spacing(1),\r\n },\r\n },\r\n searchIcon: {\r\n color: theme.palette.text.disabled,\r\n },\r\n}));\r\n\r\n/**\r\n * SearchInput handles presentation and interaction of the zip code search\r\n * input. It is built to make look, feel, helper text, and state handling behave\r\n * consistently across multiple uses.\r\n *\r\n * It expects an optional initial value --\r\n * useful in ZIP-specific result pages where the initial search is already set.\r\n *\r\n * @params {String} props.initialValue an optional initial value for the search input\r\n */\r\n\r\nexport default function SearchInput({ initialValue = \"\", inline = false }) {\r\n const appInsights = useAppInsightsContext();\r\n const classes = useStyles();\r\n const [value, setValue] = useState(initialValue);\r\n const [helperText, setHelperText] = useState(\"\");\r\n const history = useHistory();\r\n const { t } = useTranslation();\r\n const params = useLocation().search;\r\n const filters = qs.parse(params, { ignoreQueryPrefix: true });\r\n\r\n const vaccineTypeFilters = useMemo(() =>\r\n filters.vaccineTypes ? filters.vaccineTypes.split(',') : [],\r\n [filters.vaccineTypes]\r\n );\r\n\r\n const schedulingFilters = useMemo(() =>\r\n filters.schedulingFilters ? filters.schedulingFilters.split(',') : [],\r\n [filters.schedulingFilters]\r\n );\r\n\r\n const accessibilityFilters = useMemo(() =>\r\n filters.accessibilityFilters ? filters.accessibilityFilters.split(',') : [],\r\n [filters.accessibilityFilters]\r\n );\r\n\r\n const cysFilters = useMemo(() =>\r\n filters.cysFilters ? filters.cysFilters.split(',') : [],\r\n [filters.cysFilters]\r\n );\r\n\r\n const validZips = useSelector((state) => state.locationFinder.zips);\r\n\r\n const clearSearch = () => setValue(\"\");\r\n\r\n const invalidZipSearched = useTrackEvent(\r\n appInsights,\r\n tracking.INVALID_ZIP_SEARCHED\r\n );\r\n\r\n const handleSubmit = () => {\r\n if (!value) {\r\n return setHelperText(t(\"searchRequiredMessage\"));\r\n } else {\r\n setHelperText(\"\");\r\n }\r\n if (!isEmpty(validZips) && !(value in validZips)) {\r\n // TODO translate validation message\r\n invalidZipSearched({ zip: value });\r\n return setHelperText(t(\"inputValidationInvalidZip\"));\r\n }\r\n\r\n const queryString = qs.stringify({\r\n vaccineTypes: vaccineTypeFilters,\r\n schedulingFilters: schedulingFilters,\r\n accessibilityFilters: accessibilityFilters,\r\n cysFilters: cysFilters\r\n }, { arrayFormat: 'comma' });\r\n\r\n history.push(`/locations/${value}?${queryString}`);\r\n };\r\n\r\n const handleChange = (e) => {\r\n if (helperText && e.target.value) setHelperText(\"\");\r\n\r\n setValue(e.target.value);\r\n };\r\n\r\n const handleKeyDown = (e) => {\r\n if (e.which === 13) {\r\n handleSubmit();\r\n }\r\n };\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n ),\r\n }}\r\n onChange={handleChange}\r\n onKeyDown={handleKeyDown}\r\n placeholder={t(\"searchPlaceholder\")}\r\n value={value}\r\n variant=\"outlined\"\r\n />\r\n \r\n \r\n {t(\"submitButton\")}\r\n \r\n \r\n {t(\"submitDisclaimer\")}\r\n \r\n
\r\n \r\n );\r\n}\r\n\r\nSearchInput.propTypes = {\r\n initialValue: PropTypes.string,\r\n inline: PropTypes.bool,\r\n};\r\n","import PropTypes from \"prop-types\";\r\nimport React from \"react\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { makeStyles } from \"@material-ui/core\";\r\n\r\nconst useStyles = makeStyles({\r\n root: {\r\n display: 'none',\r\n }\r\n});\r\n\r\nfunction ZipsInternalNav (props) {\r\n const { zips } = props;\r\n const classes = useStyles();\r\n\r\n if (!zips.length) {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n

{'Find vaccination locations for your ZIP code'}

\r\n
    \r\n {zips.map(zip => (\r\n
  • \r\n {zip}\r\n
  • \r\n ))}\r\n
\r\n
\r\n );\r\n}\r\n\r\nZipsInternalNav.propTypes = { zips: PropTypes.array };\r\n\r\nexport default React.memo(ZipsInternalNav)\r\n","import React from \"react\";\r\nimport { Helmet } from \"react-helmet\";\r\nimport { helmetJsonLdProp } from \"react-schemaorg\";\r\n\r\nfunction SearchActions () {\r\n return (\r\n \r\n );\r\n}\r\n\r\nexport default SearchActions;\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { useSelector } from 'react-redux';\r\n\r\nimport { Container, Typography, makeStyles } from '@material-ui/core';\r\n\r\nimport EligibilityRequirements from '../EligibilityRequirements';\r\nimport NotificationBanner from '../NotificationBanner';\r\nimport SEO from '../../../common/SEO';\r\nimport SearchInput from '../SearchInput';\r\nimport ZipsInternalNav from '../ZipsInternalNav';\r\nimport Schema from '../schema/SearchAction';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n welcomeSection: {\r\n padding: theme.spacing(5, 3),\r\n [theme.breakpoints.up('sm')]: {\r\n padding: theme.spacing(15, 3),\r\n },\r\n [theme.breakpoints.up('md')]: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n height: '55vh',\r\n justifyContent: 'center',\r\n padding: 0,\r\n },\r\n },\r\n title: {\r\n ...theme.typography.h3,\r\n marginBottom: theme.spacing(3),\r\n [theme.breakpoints.up('sm')]: {\r\n ...theme.typography.h2,\r\n marginBottom: theme.spacing(4),\r\n marginLeft: 'auto',\r\n marginRight: 'auto',\r\n maxWidth: 560,\r\n textAlign: 'center',\r\n },\r\n },\r\n}));\r\n\r\nconst LocationFinder = () => {\r\n const classes = useStyles();\r\n const { t } = useTranslation();\r\n const zips = useSelector((state) => Object.keys(state.locationFinder.zips));\r\n\r\n return (\r\n <>\r\n {/*\r\n */}\r\n \r\n
\r\n

\r\n Washington State's COVID-19 Vaccine Locator is no longer supported. Thank you for using this valuable tool over the last few years! Please visit{' '}\r\n \r\n Vaccines.gov\r\n {' '}\r\n to help you find pharmacies offering COVID-19 vaccine, and other vaccines, near you.\r\n

\r\n

\r\n The{' '}\r\n \r\n Washington State Department of Health\r\n {' '}\r\n also supports this{' '}\r\n \r\n provider map\r\n \r\n . This map is used to find providers who receive publicly supplied vaccines through the state's{' '}\r\n \r\n Childhood Vaccine Program\r\n {' '}\r\n and{' '}\r\n \r\n Adult Vaccine Program\r\n \r\n .\r\n

\r\n

\r\n \r\n Please note: This provider map is updated twice each year. Contact the provider ahead of your visit to confirm availability of supply, age\r\n eligibility, and more information regarding the policies associated with the practice.\r\n \r\n

\r\n
\r\n
\r\n {/*\r\n \r\n */}\r\n \r\n );\r\n};\r\n\r\nexport default LocationFinder;\r\n","import React from \"react\";\r\n\r\nimport { CircularProgress, Grid, makeStyles } from \"@material-ui/core\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n container: {\r\n minHeight: 320,\r\n },\r\n}));\r\n\r\nconst LoadingSpinner = () => {\r\n const classes = useStyles();\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default LoadingSpinner;\r\n","import React, { useState, useCallback, useEffect } from 'react';\r\nimport { useCopyToClipboard } from 'react-use';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { makeStyles, Typography } from \"@material-ui/core\";\r\nimport { Done } from \"@material-ui/icons\";\r\nimport { TrackedLink } from \"../../../../common/TrackedComponents\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nconst SHOW_RESULT_TIME = 2000;\r\nconst useStyles = makeStyles((theme) => ({\r\n contactItem: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n marginBottom: theme.spacing(1),\r\n padding: theme.spacing(0, 2, 1),\r\n },\r\n contactItemText: {\r\n marginLeft: theme.spacing(1),\r\n },\r\n copyButton: {\r\n marginLeft: \"auto\",\r\n textDecoration: \"none\",\r\n },\r\n copyText: {\r\n fontWeight: 600,\r\n },\r\n doneIcon: {\r\n fontSize: \"1rem\",\r\n }\r\n}));\r\n\r\nconst CopyContact = ({ display, copyValue, Icon, event, eventTags }) => {\r\n const classes = useStyles();\r\n const { t } = useTranslation();\r\n const [copyResult, copyToClipboard] = useCopyToClipboard();\r\n const [didCopyResult, setDidCopyResult] = useState(false);\r\n\r\n const onCopyClick = useCallback(\r\n () => {\r\n return copyToClipboard(copyValue);\r\n },\r\n [copyToClipboard, copyValue]\r\n );\r\n\r\n useEffect(() => {\r\n if (!copyResult) return;\r\n setDidCopyResult(true);\r\n setTimeout(() => {\r\n setDidCopyResult(false);\r\n }, SHOW_RESULT_TIME);\r\n }, [copyResult]);\r\n\r\n return (\r\n
\r\n \r\n \r\n {display}\r\n \r\n onCopyClick(e)}\r\n >\r\n \r\n { didCopyResult && copyResult.value ? (\r\n \r\n ) : (\r\n t(\"copy\")\r\n )}\r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nexport default React.memo(CopyContact);\r\n\r\nCopyContact.propTypes = {\r\n display: PropTypes.element,\r\n copyValue: PropTypes.string,\r\n Icon: PropTypes.object,\r\n event: PropTypes.string,\r\n eventTags: PropTypes.object,\r\n};\r\n","import { useEffect, useRef } from \"react\";\r\n\r\nconst usePrevious = (value) => {\r\n const ref = useRef();\r\n\r\n useEffect(() => {\r\n ref.current = value;\r\n });\r\n\r\n return ref.current;\r\n};\r\n\r\nexport default usePrevious;\r\n","import React, { forwardRef } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport { TrackedLink } from \"../../../../common/TrackedComponents\";\r\nimport { makeStyles, Typography } from \"@material-ui/core\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n contactItem: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n marginBottom: theme.spacing(1),\r\n padding: theme.spacing(0, 2, 1),\r\n },\r\n contactItemText: {\r\n marginLeft: theme.spacing(1),\r\n },\r\n contactButton: {\r\n marginLeft: \"auto\",\r\n textDecoration: \"none\",\r\n },\r\n contactText: {\r\n fontWeight: 600,\r\n },\r\n}));\r\n\r\nexport const ContactButton = forwardRef((props, ref) => {\r\n const { icon, displayText, href, buttonText, event, eventTags } = props;\r\n const classes = useStyles();\r\n return (\r\n
\r\n {icon}\r\n \r\n {displayText}\r\n \r\n \r\n \r\n {buttonText}\r\n \r\n \r\n
\r\n );\r\n});\r\n\r\nContactButton.propTypes = {\r\n Icon: PropTypes.any,\r\n displayText: PropTypes.string,\r\n buttonText: PropTypes.string,\r\n href: PropTypes.string,\r\n event: PropTypes.string,\r\n eventTags: PropTypes.object,\r\n};\r\n","// See docs: https://www.apollographql.com/docs/react/get-started/\r\n\r\n// TODO: maybe add GraphQL persisted queries. This blog post describes it, but\r\n// uses older NPM packages with slightly different API:\r\n//\r\n// https://www.apollographql.com/blog/caching-graphql-results-in-your-cdn-54299832b8e2/\r\n//\r\n// The README for the newer (but still beta) @apollo/link-persisted-queries NPM\r\n// shows how to use the pattern with the newer API:\r\n//\r\n// https://www.npmjs.com/package/@apollo/link-persisted-queries\r\n\r\nimport { ApolloClient, InMemoryCache, createHttpLink } from '@apollo/client';\r\nimport fetch from 'cross-fetch';\r\n// import { createPersistedQueryLink } from \"@apollo/link-persisted-queries\"\r\n\r\n// const link = concat(\r\n// createPersistedQueryLink({ useGETForHashedQueries: true }),\r\n// new HttpLink({ uri: process.env.REACT_APP_API_URI })\r\n// )\r\nconst API_URI = process.env.REACT_APP_API_URI || 'https://apim-vaccs-dev.azure-api.net/web/graphql';\r\n// const API_URI = process.env.REACT_APP_API_URI || 'http://localhost:4000/graphql';\r\n// Don't send credentials if developing against the API in localhost\r\nconst credentials = /localhost/.test(API_URI) ? '' : 'include';\r\n\r\nexport default new ApolloClient({\r\n // See: https://www.apollographql.com/docs/react/caching/cache-configuration/\r\n cache: new InMemoryCache({\r\n typePolicies: {\r\n Location: {\r\n keyFields: ['locationId'],\r\n },\r\n },\r\n }),\r\n // link: link\r\n link: createHttpLink({\r\n uri: API_URI,\r\n credentials,\r\n fetch,\r\n }),\r\n});\r\n","import { gql } from \"@apollo/client\";\r\n\r\nexport const findZips = gql`\r\n query FindZips {\r\n findZipCodes\r\n }\r\n`;\r\nexport const searchLocations = gql`\r\n query SearchLocations($searchInput: SearchLocationsInput) {\r\n searchLocations(searchInput: $searchInput) {\r\n paging {\r\n pageSize\r\n pageNum\r\n total\r\n }\r\n summary {\r\n total\r\n vaccineAvailability\r\n }\r\n locations {\r\n addressLine1\r\n addressLine2\r\n city\r\n latitude\r\n locationId\r\n locationName\r\n locationType\r\n longitude\r\n schedulingLink\r\n state\r\n vaccineAvailability\r\n vaccineTypes\r\n zipcode\r\n updatedAt\r\n distance\r\n phone\r\n email\r\n infoLink\r\n waitList\r\n walkIn\r\n walkupSite\r\n driveupSite\r\n waitingArea\r\n additionalSupports\r\n accessibleParking\r\n wheelchairAccessible\r\n commCardAvailable\r\n commCardBrailleAvailable\r\n interpretersAvailable\r\n interpretersDesc\r\n supportUrl\r\n scheduleByEmail\r\n scheduleByPhone\r\n scheduleOnline\r\n provideInfantVaccine\r\n providePediatricVaccine\r\n provideYouthVaccine\r\n consentLegallyEmancipated\r\n consentFosterParent\r\n consentResponsibleRelative\r\n consentMatureMinor\r\n consentVerbal\r\n consentWritten\r\n consentFromParentGuardianAuthAdul\r\n consentSignedAuth\r\n consentNurseCounselorLiai\r\n rawDataSourceName\r\n }\r\n }\r\n }\r\n`;\r\n","import { createSlice } from \"@reduxjs/toolkit\";\r\n\r\nimport client from \"../../app/client\";\r\nimport { searchLocations, findZips } from \"../../app/queries\";\r\nimport { vaccineAvailability } from \"../../constants\";\r\n\r\nconst { AVAILABLE, UNKNOWN } = vaccineAvailability;\r\n\r\nconst availabilityToOrdinal = (availability) => {\r\n switch (availability) {\r\n case AVAILABLE:\r\n return 1;\r\n case UNKNOWN:\r\n return 2;\r\n default:\r\n return 3;\r\n }\r\n};\r\n\r\nexport const locationFinderSlice = createSlice({\r\n name: \"locationFinder\",\r\n initialState: {\r\n isLoading: false,\r\n locations: [],\r\n feedbackFormLocation: null,\r\n paging: {},\r\n summary: [],\r\n zips: {},\r\n isError: false,\r\n },\r\n reducers: {\r\n resetLocations: (state) => {\r\n state.locations = [];\r\n },\r\n setFeedbackFormLocation: (state, action) => {\r\n state.feedbackFormLocation = action.payload;\r\n },\r\n setLocations: (state, action) => {\r\n // Redux Toolkit allows us to write \"mutating\" logic in reducers. It\r\n // doesn't actually mutate the state because it uses the Immer library,\r\n // which detects changes to a \"draft state\" and produces a brand new\r\n // immutable state based off those changes\r\n state.locations.push(...action.payload);\r\n },\r\n setPaging: (state, action) => {\r\n state.paging = action.payload;\r\n },\r\n setSummary: (state, action) => {\r\n state.summary = action.payload;\r\n },\r\n setZips: (state, action) => {\r\n // Note, a Set would be more ideal, but is not serializable by Redux\r\n state.zips = (action.payload || []).reduce(\r\n (memo, zip) => ({ ...memo, [zip]: true }),\r\n {}\r\n );\r\n },\r\n toggleSpinner: (state, action) => {\r\n state.isLoading = action.payload;\r\n },\r\n setError: (state, action) => {\r\n state.isError = action.payload;\r\n },\r\n },\r\n});\r\n\r\nexport const {\r\n resetLocations,\r\n setFeedbackFormLocation,\r\n setLocations,\r\n setPaging,\r\n setSummary,\r\n setZips,\r\n toggleSpinner,\r\n setError,\r\n} = locationFinderSlice.actions;\r\n\r\n// The function below is called a thunk and allows us to perform async logic. It\r\n// can be dispatched like a regular action: `dispatch(fetchLocations('54321'))`. This\r\n// will call the thunk with the `dispatch` function as the first argument. Async\r\n// code can then be executed and other actions can be dispatched\r\nexport const fetchLocations = ({ searchValue, pageNum = 1, pageSize = 20, vaccineTypes, schedulingFilters, accessibilityFilters, cysFilters }) => (dispatch) => {\r\n dispatch(setError(false));\r\n dispatch(toggleSpinner(true));\r\n pageNum === 1 && dispatch(resetLocations([]));\r\n\r\n client\r\n .query({\r\n query: searchLocations,\r\n variables: {\r\n searchInput: {\r\n originZip: searchValue,\r\n paging: {\r\n pageNum,\r\n pageSize,\r\n },\r\n ...(vaccineTypes.length > 0 && { vaccineTypes }), // only send vaccineTypes if there are any applied\r\n ...(schedulingFilters.length > 0 && { schedulingFilters }), // only send schedulingFilters if there are any applied\r\n ...(accessibilityFilters.length > 0 && { accessibilityFilters }), // only send accessibilityFilters if there are any applied\r\n ...(cysFilters.length > 0 && { cysFilters }) // only send cysFilters if there are any applied\r\n\r\n },\r\n },\r\n })\r\n .then((result) => {\r\n const { data, loading, networkStatus } = result;\r\n\r\n if (loading) return;\r\n\r\n if (networkStatus !== 7) {\r\n console.warn(`Unhandled network status ${networkStatus}`);\r\n return;\r\n }\r\n\r\n const { locations, paging, summary } = data.searchLocations;\r\n\r\n const locationsWithDistance = locations.map((l) => {\r\n\r\n return {\r\n ...l,\r\n formattedDistance: l.distance.toFixed(1),\r\n availabilityOrdinal: availabilityToOrdinal(l.vaccineAvailability),\r\n };\r\n });\r\n dispatch(setLocations(locationsWithDistance));\r\n dispatch(setPaging(paging));\r\n dispatch(setSummary(summary));\r\n })\r\n .catch((error) => {\r\n console.error(error);\r\n dispatch(setError(true))\r\n })\r\n .finally(() => dispatch(toggleSpinner(false)));\r\n};\r\n\r\nexport const fetchZips = () => async (dispatch) => {\r\n try {\r\n const response = await client.query({ query: findZips });\r\n dispatch(setZips(response.data.findZipCodes));\r\n } catch (err) {\r\n // Eat this error. If this fails, we just don't do validation\r\n console.error(err);\r\n }\r\n};\r\n\r\n// The function below is called a selector and allows us to select a value from\r\n// the state. Selectors can also be defined inline where they're used instead of\r\n// in the slice file. For example: `useSelector((state) => state.locationFinder.value)`\r\n// export const selectLocations = (state) => state.locationFinder.locations;\r\n\r\nexport default locationFinderSlice.reducer;\r\n","import React from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport PropTypes from \"prop-types\";\r\nimport { useDispatch } from \"react-redux\";\r\n\r\nimport { TrackedButton } from \"../../../../common/TrackedComponents\";\r\nimport { tracking } from \"../../../../constants\";\r\nimport { setFeedbackFormLocation } from \"../../locationFinderSlice\";\r\n\r\nexport const WebsiteFullLink = ({ href, hasAvailability, eventTags, location }) => {\r\n const dispatch = useDispatch();\r\n const { t } = useTranslation();\r\n\r\n const handleClick = () => {\r\n dispatch(setFeedbackFormLocation(location));\r\n };\r\n\r\n return (\r\n \r\n {t(\"goToSiteButton\")}\r\n \r\n )\r\n};\r\n\r\nWebsiteFullLink.propTypes = {\r\n href: PropTypes.string,\r\n event: PropTypes.string,\r\n eventTags: PropTypes.object,\r\n};\r\n","import React, { useRef, useState, useEffect } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport PropTypes from \"prop-types\";\r\nimport CopyContact from \"./CopyContact\";\r\nimport { TrackedButton } from \"../../../../common/TrackedComponents\";\r\nimport usePrevious from \"../../../../hooks/usePrevious\";\r\nimport { tracking, vaccineAvailability } from \"../../../../constants\";\r\nimport {\r\n CardActions,\r\n Divider,\r\n Collapse,\r\n makeStyles,\r\n Typography,\r\n Link,\r\n} from \"@material-ui/core\";\r\nimport { Accessible, ChildFriendly, Check, Email, Phone } from \"@material-ui/icons\";\r\nimport { ContactButton } from \"./ContactButton\";\r\nimport { WebsiteFullLink } from \"./WebsiteFullLink\";\r\nimport { get } from \"lodash\";\r\nimport clsx from \"clsx\";\r\nimport { Fragment } from \"react\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n container: {\r\n paddingBottom: theme.spacing(1.5),\r\n },\r\n actions: {\r\n padding: theme.spacing(0, 2, 1),\r\n },\r\n divider: {\r\n marginBottom: theme.spacing(2),\r\n },\r\n emailLink: {\r\n color: theme.palette.primary.main,\r\n },\r\n infoItem: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n marginBottom: theme.spacing(1),\r\n padding: theme.spacing(0, 2, 1),\r\n },\r\n infoItemText: {\r\n marginLeft: theme.spacing(1),\r\n },\r\n check: {\r\n color: theme.palette.accent.green,\r\n },\r\n accessibilityItem: {\r\n paddingLeft: theme.spacing(6),\r\n },\r\n interpreterDesc: {\r\n marginTop: theme.spacing(-2),\r\n paddingLeft: theme.spacing(10),\r\n },\r\n}));\r\n\r\nexport const SecondaryInfoSection = ({ location, resultPosition }) => {\r\n const classes = useStyles();\r\n const { t, i18n } = useTranslation();\r\n const {\r\n schedulingLink,\r\n infoLink,\r\n email,\r\n phone,\r\n locationId,\r\n walkIn,\r\n waitList,\r\n walkupSite,\r\n driveupSite,\r\n waitingArea,\r\n additionalSupports,\r\n accessibleParking,\r\n wheelchairAccessible,\r\n commCardAvailable,\r\n commCardBrailleAvailable,\r\n interpretersAvailable,\r\n interpretersDesc,\r\n supportUrl,\r\n scheduleOnline,\r\n scheduleByPhone,\r\n scheduleByEmail,\r\n provideInfantVaccine,\r\n providePediatricVaccine,\r\n provideYouthVaccine,\r\n consentLegallyEmancipated,\r\n consentFosterParent,\r\n consentResponsibleRelative,\r\n consentMatureMinor,\r\n consentVerbal,\r\n consentWritten,\r\n consentFromParentGuardianAuthAdul,\r\n consentSignedAuth,\r\n consentNurseCounselorLiai,\r\n } = location;\r\n const schedulingMap = {\r\n scheduleOnline,\r\n scheduleByPhone,\r\n scheduleByEmail,\r\n walkIn,\r\n waitList,\r\n };\r\n const accessibilityMap = {\r\n walkupSite,\r\n driveupSite,\r\n waitingArea,\r\n additionalSupports,\r\n accessibleParking,\r\n wheelchairAccessible,\r\n commCardAvailable,\r\n commCardBrailleAvailable,\r\n interpretersAvailable,\r\n };\r\n const cysMap = {\r\n provideInfantVaccine,\r\n providePediatricVaccine,\r\n provideYouthVaccine,\r\n consentLegallyEmancipated,\r\n consentFosterParent,\r\n consentResponsibleRelative,\r\n consentMatureMinor,\r\n consentVerbal,\r\n consentWritten,\r\n consentFromParentGuardianAuthAdul,\r\n consentSignedAuth,\r\n consentNurseCounselorLiai,\r\n };\r\n const schedulingOptions = Object.keys(schedulingMap).filter(\r\n (key) => schedulingMap[key]\r\n );\r\n const accessibilityOptions = Object.keys(accessibilityMap).filter(\r\n (key) => accessibilityMap[key]\r\n );\r\n const cysOptions = Object.keys(cysMap).filter(\r\n (key) => cysMap[key]\r\n );\r\n const { language } = i18n;\r\n const timeDisplayed = Date.now();\r\n const hasAvailability =\r\n location.vaccineAvailability === vaccineAvailability.AVAILABLE;\r\n\r\n const [showMore, setShowMore] = useState(false);\r\n const previousShowMore = usePrevious(showMore);\r\n\r\n const viewMoreButtonRef = useRef(null);\r\n const expandedContentRef = useRef(null);\r\n\r\n const toggleShowMore = () => {\r\n setShowMore((x) => !x);\r\n };\r\n\r\n useEffect(() => {\r\n // User has just expanded the panel, focus on the first within expanded content\r\n if (\r\n expandedContentRef.current &&\r\n previousShowMore === false &&\r\n showMore === true\r\n ) {\r\n const firstLink = document\r\n .getElementById(`expandedContent-${locationId}`)\r\n .getElementsByTagName(\"a\")[0];\r\n\r\n if (firstLink) firstLink.focus();\r\n }\r\n }, [showMore, previousShowMore, locationId]);\r\n\r\n useEffect(() => {\r\n // User has just collapsed the panel, focus on the viewMore Button\r\n if (\r\n viewMoreButtonRef.current &&\r\n previousShowMore === true &&\r\n showMore === false\r\n )\r\n viewMoreButtonRef.current.focus();\r\n }, [showMore, previousShowMore]);\r\n\r\n const locationTrackingTags = {\r\n locationId,\r\n distance: location.distance,\r\n position: resultPosition,\r\n timeToClickSeconds: () => (Date.now() - timeDisplayed) / 1000,\r\n zip: location.zipcode,\r\n language,\r\n };\r\n\r\n const methodsOfContact = [\r\n { type: \"website\", value: schedulingLink || infoLink },\r\n { type: \"email\", value: email },\r\n { type: \"phone\", value: phone },\r\n ].filter((contact) => !!contact.value);\r\n\r\n const preferredMethodOfContact = get(methodsOfContact, '[0].type');\r\n const hasMore = methodsOfContact.length > 1 || schedulingOptions.length > 0 || accessibilityOptions.length > 0 || cysOptions.length > 0;\r\n\r\n const copyEmailDisplay = (\r\n \r\n {email}\r\n \r\n }\r\n copyValue={email}\r\n Icon={Email}\r\n event={tracking.LOCATIONS_EMAIL_COPIED}\r\n eventTags={locationTrackingTags}\r\n />\r\n );\r\n const phoneDisplay = (\r\n }\r\n displayText={phone}\r\n href={`tel:${phone}`}\r\n event={tracking.LOCATIONS_PHONE_LINK_CLICKED}\r\n eventTags={locationTrackingTags}\r\n buttonText={t(\"call\")}\r\n />\r\n );\r\n\r\n return (\r\n
\r\n {preferredMethodOfContact === \"website\" && (\r\n \r\n \r\n \r\n )}\r\n {preferredMethodOfContact === \"email\" && copyEmailDisplay}\r\n {preferredMethodOfContact === \"phone\" && phoneDisplay}\r\n {hasMore && (\r\n <>\r\n \r\n \r\n
\r\n {email && preferredMethodOfContact !== \"email\" && copyEmailDisplay}\r\n {phone && preferredMethodOfContact !== \"phone\" && phoneDisplay}\r\n {schedulingOptions.length > 0 && (\r\n schedulingOptions.map((key) => (\r\n
\r\n \r\n \r\n {t(key)}\r\n \r\n
\r\n ))\r\n )}\r\n {accessibilityOptions.length > 0 && (\r\n <>\r\n
\r\n \r\n \r\n {t(\"accessibilityLabel\")}\r\n \r\n
\r\n {accessibilityOptions.map((key) => (\r\n \r\n \r\n \r\n \r\n {t(key)}\r\n \r\n
\r\n {key === \"interpretersAvailable\" && interpretersDesc && (\r\n \r\n {interpretersDesc}\r\n \r\n )}\r\n \r\n ))}\r\n \r\n )}\r\n {cysOptions.length > 0 && (\r\n <>\r\n
\r\n \r\n \r\n {t(\"cysLabel\")}\r\n \r\n
\r\n {cysOptions.map((key) => (\r\n \r\n \r\n \r\n \r\n {t(key)}\r\n \r\n
\r\n \r\n ))}\r\n \r\n )}\r\n {supportUrl && (\r\n \r\n {t(\"moreAccessibilityInfo\")}\r\n \r\n )}\r\n \r\n \r\n \r\n {showMore ? (\r\n \r\n {t(\"viewLess\")}\r\n \r\n ) : (\r\n \r\n {t(\"viewMoreOptions\")}\r\n \r\n )}\r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nSecondaryInfoSection.propTypes = {\r\n location: PropTypes.object.isRequired,\r\n resultPosition: PropTypes.number,\r\n};\r\n","import PropTypes from \"prop-types\";\r\nimport React, { memo, useMemo } from \"react\";\r\nimport clsx from \"clsx\";\r\nimport moment from \"moment\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { isEmpty } from \"lodash\";\r\nimport {\r\n Card,\r\n CardContent,\r\n makeStyles,\r\n Typography,\r\n useTheme,\r\n} from \"@material-ui/core\";\r\nimport { Cancel, CheckCircle, NotListedLocation } from \"@material-ui/icons\";\r\nimport { SecondaryInfoSection } from \"./SecondaryInfoSection/SecondaryInfoSection\";\r\nimport { vaccineAvailability } from \"../../../constants\";\r\nimport InlineBoldTrans from \"../../../common/InlineBoldTrans\";\r\n\r\nconst availabilityStrings = {\r\n [vaccineAvailability.AVAILABLE]: \"hasAppointments\",\r\n [vaccineAvailability.UNAVAILABLE]: \"hasNoAppointments\",\r\n [vaccineAvailability.UNKNOWN]: \"appointmentStatusUnknown\",\r\n};\r\n\r\nconst availabilityIcons = {\r\n [vaccineAvailability.AVAILABLE]: CheckCircle,\r\n [vaccineAvailability.UNAVAILABLE]: Cancel,\r\n [vaccineAvailability.UNKNOWN]: NotListedLocation,\r\n};\r\n\r\nconst availabilityStyles = {\r\n [vaccineAvailability.AVAILABLE]: \"availableIcon\",\r\n [vaccineAvailability.UNAVAILABLE]: \"noAvailabilityIcon\",\r\n [vaccineAvailability.UNKNOWN]: \"unknownAvailabilityIcon\",\r\n};\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n card: {\r\n borderRadius: 0,\r\n marginBottom: theme.spacing(1),\r\n },\r\n title: {\r\n marginBottom: theme.spacing(2),\r\n },\r\n infoItem: {\r\n alignItems: \"center\",\r\n display: \"flex\",\r\n marginBottom: theme.spacing(1),\r\n },\r\n infoItemMessage: {\r\n marginLeft: theme.spacing(0.5),\r\n },\r\n updateMessage: {\r\n marginLeft: theme.spacing(3.5),\r\n },\r\n actions: {\r\n padding: theme.spacing(0, 2, 2),\r\n },\r\n availableIcon: {\r\n color: theme.palette.accent.green,\r\n },\r\n noAvailabilityIcon: {\r\n color: theme.palette.warning.main,\r\n },\r\n unknownAvailabilityIcon: {\r\n color: theme.palette.warning.main,\r\n },\r\n rtlEnglishAddress: {\r\n textAlign: \"left\",\r\n },\r\n vaccineTypeIcon: {\r\n color: theme.palette.secondary.dark,\r\n },\r\n}));\r\n\r\nconst LocationCard = memo(({ location, resultPosition }) => {\r\n const classes = useStyles();\r\n const theme = useTheme();\r\n const { t } = useTranslation();\r\n\r\n const locationAddress = useMemo(() => {\r\n const { addressLine1, addressLine2, city, state, zipcode } = location;\r\n let address = addressLine1;\r\n\r\n if (addressLine2) address += ` ${addressLine2}`;\r\n\r\n return `${address}, ${city}, ${state} ${zipcode}`;\r\n }, [location]);\r\n\r\n const vaccineType = useMemo(() => {\r\n const { vaccineTypes } = location;\r\n return isEmpty(vaccineTypes)\r\n ? t(\"vaccineTypesNotAvailable\")\r\n : vaccineTypes.join(\", \");\r\n }, [location, t]);\r\n\r\n\r\n const recordSource = useMemo(() => {\r\n //we need to convert the API Function name to an Acronym\r\n\r\n const { rawDataSourceName } = location;\r\n\r\n switch (rawDataSourceName) {\r\n case 'CostcoLocationsFn':\r\n case 'CostcoVaccineAvailabilityFn':\r\n return 'CC';\r\n case 'CVSVaccineAvailabilityFn':\r\n return 'CV';\r\n case 'EpicVaccineAvailabilityFn':\r\n return 'EV';\r\n case 'KPWAEpicVaccineAvailabilityFn':\r\n return 'KP';\r\n case 'PrepModVaccineAvailabilityFn':\r\n return 'PM';\r\n case 'RiteAidVaccineAvailabilityFn':\r\n return 'RA';\r\n case 'UWEpicVaccineAvailabilityFn':\r\n return 'UW';\r\n case 'VaccineFinderAvailabilityFn':\r\n return 'VF';\r\n case 'VaccineSpotterFn':\r\n return 'VS';\r\n case 'ValleyMedEpicVaccineAvailabilityFn':\r\n return 'VM';\r\n case 'WalgreensFn':\r\n return 'WG';\r\n case 'WADOH':\r\n return 'WA';\r\n default:\r\n return 'UN';\r\n }\r\n }, [location]);\r\n // TODO: figure out that location.type should be in the new data schema\r\n\r\n const AvailabilityIcon = availabilityIcons[location.vaccineAvailability];\r\n return (\r\n \r\n \r\n
\r\n \r\n {location.locationName}\r\n \r\n \r\n {locationAddress}\r\n \r\n \r\n {location.formattedDistance} mi\r\n \r\n
\r\n
\r\n \r\n medical_services\r\n \r\n \r\n \r\n \r\n
\r\n {/*
\r\n \r\n \r\n {t(availabilityStrings[location.vaccineAvailability])}\r\n \r\n
*/}\r\n \r\n {t(\"updatedAt\")} {moment(location.updatedAt).format('l') + ' ' +moment(location.updatedAt).format('LT') } ({recordSource})\r\n \r\n
\r\n \r\n
\r\n );\r\n});\r\n\r\nLocationCard.propTypes = {\r\n location: PropTypes.object.isRequired,\r\n resultPosition: PropTypes.number,\r\n};\r\n\r\nexport default LocationCard;\r\n","import PropTypes from \"prop-types\";\r\nimport React from \"react\";\r\nimport { Helmet } from \"react-helmet\";\r\nimport { helmetJsonLdProp } from \"react-schemaorg\";\r\n\r\n// TODO DRY violation. Taken from LocationCard/index.js\r\n// move to shared util?\r\nconst locationAddress = location => {\r\n const { addressLine1, addressLine2, city, state, zipcode } = location;\r\n let address = addressLine1;\r\n\r\n if (addressLine2) address += ` ${addressLine2}`;\r\n\r\n return `${address}, ${city}, ${state} ${zipcode}`;\r\n};\r\n\r\nconst cleanEmptyProperties = obj => Object.entries(obj)\r\n .filter(entry => !!entry[1])\r\n .reduce(\r\n (memo, [key, val]) => ({ ...memo, [key]: val }),\r\n {}\r\n );\r\n\r\nfunction AppointmentLocations (props) {\r\n const { locations } = props;\r\n\r\n\r\n return (\r\n \r\n // https://schema.org/LocalBusiness\r\n cleanEmptyProperties({\r\n '@type': 'LocalBusiness',\r\n address: locationAddress(location),\r\n email: location.email,\r\n name: location.locationName,\r\n telephone: location.phone,\r\n url: location.schedulingLink,\r\n })\r\n )\r\n })\r\n ]}\r\n />\r\n );\r\n}\r\n\r\nAppointmentLocations.propTypes = {\r\n locations: PropTypes.array.isRequired,\r\n};\r\n\r\nexport default AppointmentLocations;\r\n","import PropTypes from \"prop-types\";\r\nimport React, {useCallback, useMemo} from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { makeStyles, Box } from \"@material-ui/core\";\r\nimport LocationCard from \"./LocationCard\";\r\nimport { TrackedButton } from \"../../common/TrackedComponents\";\r\nimport { tracking } from \"../../constants\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport LoadingSpinner from \"../../common/LoadingSpinner\";\r\nimport Schema from \"./schema/AppointmentLocations\";\r\nimport {useLocation} from \"react-router-dom\";\r\nimport qs from \"qs\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n screenReaderFocus: {\r\n clip: \"rect(1px, 1px, 1px, 1px)\",\r\n height: \"1px\",\r\n width: \"1px\",\r\n overflow: \"hidden\",\r\n position: \"absolute\",\r\n },\r\n loadMoreButtonContainer: {\r\n marginTop: theme.spacing(5),\r\n },\r\n}));\r\n\r\nconst SearchResults = ({\r\n locations,\r\n submittedValue,\r\n paging,\r\n loadMore,\r\n isLoading,\r\n}) => {\r\n const classes = useStyles();\r\n const { t } = useTranslation();\r\n const dispatch = useDispatch();\r\n const { pageNum, pageSize } = paging;\r\n const params = useLocation().search;\r\n const filters = qs.parse(params, { ignoreQueryPrefix: true });\r\n\r\n const vaccineTypeFilters = useMemo(() =>\r\n filters.vaccineTypes ? filters.vaccineTypes.split(',') : [],\r\n [filters.vaccineTypes]\r\n );\r\n\r\n const schedulingFilters = useMemo(() =>\r\n filters.schedulingFilters ? filters.schedulingFilters.split(',') : [],\r\n [filters.schedulingFilters]\r\n );\r\n\r\n const accessibilityFilters = useMemo(() =>\r\n filters.accessibilityFilters ? filters.accessibilityFilters.split(',') : [],\r\n [filters.accessibilityFilters]\r\n );\r\n\r\n const cysFilters = useMemo(() =>\r\n filters.cysFilters ? filters.cysFilters.split(',') : [],\r\n [filters.cysFilters]\r\n );\r\n\r\n const onClickLoadMore = useCallback(() => {\r\n const nextPage = pageNum + 1;\r\n dispatch(loadMore({ searchValue: submittedValue, pageNum: nextPage, vaccineTypes: vaccineTypeFilters, schedulingFilters, accessibilityFilters, cysFilters } ));\r\n }, [dispatch, loadMore, pageNum, submittedValue]);\r\n\r\n const pageDiff =\r\n locations.length % pageSize === 0 ? pageSize : locations.length % pageSize;\r\n\r\n const ifIndexIsFirstOfNextLoadedPage = (idx) =>\r\n pageNum > 1 && idx === (pageNum - 1) * pageSize - 1;\r\n\r\n return (\r\n <>\r\n {locations.map((l, idx) => (\r\n \r\n \r\n {ifIndexIsFirstOfNextLoadedPage(idx) && (\r\n \r\n {t(\"loadedMore\", { pageDiff })}\r\n

\r\n )}\r\n
\r\n ))}\r\n \r\n {isLoading ? (\r\n \r\n ) : (\r\n locations.length < paging.total && (\r\n \r\n \r\n {t(\"loadMoreLocations\")}\r\n \r\n \r\n )\r\n )}\r\n \r\n );\r\n};\r\n\r\nSearchResults.propTypes = {\r\n locations: PropTypes.array,\r\n submittedValue: PropTypes.string,\r\n};\r\n\r\nexport default SearchResults;\r\n","import React, { useEffect, useMemo } from \"react\";\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport { useHistory, useParams, useLocation } from \"react-router-dom\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { difference, findIndex, first, get, isEmpty } from \"lodash\";\r\nimport { Container, Grid, Typography, makeStyles } from \"@material-ui/core\";\r\nimport LoadingSpinner from \"../../../common/LoadingSpinner\";\r\nimport NotificationBanner from \"../NotificationBanner\";\r\nimport SEO from \"../../../common/SEO\";\r\nimport SearchInput from \"../SearchInput\";\r\nimport Filters from \"../Filters\"\r\nimport SearchResults from \"../SearchResults\";\r\nimport { fetchLocations, setFeedbackFormLocation } from \"../locationFinderSlice\";\r\nimport { routes, tracking, validFilters } from \"../../../constants\";\r\nimport useEventTracker from \"../../../hooks/useEventTracker\";\r\nimport usePrevious from \"../../../hooks/usePrevious\";\r\nimport qs from \"qs\";\r\nimport { vaccineAvailability } from \"../../../constants\";\r\nimport clsx from \"clsx\";\r\nconst { AVAILABLE } = vaccineAvailability;\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n searchContainer: {\r\n padding: theme.spacing(3, 2, 0),\r\n [theme.breakpoints.up(\"md\")]: {\r\n padding: theme.spacing(3, 0, 0),\r\n },\r\n },\r\n background: {\r\n backgroundColor: theme.palette.accent.purpleLightest,\r\n },\r\n listContainer: {\r\n [theme.breakpoints.down(\"sm\")]: {\r\n padding: theme.spacing(3, 2),\r\n },\r\n },\r\n list: {\r\n paddingBottom: theme.spacing(3),\r\n [theme.breakpoints.up(\"sm\")]: {\r\n margin: \"0 auto\",\r\n padding: theme.spacing(3, 0, 8),\r\n },\r\n },\r\n message: {\r\n marginBottom: theme.spacing(3),\r\n },\r\n errorMessage: {\r\n margin: theme.spacing(2),\r\n }\r\n}));\r\n\r\nconst LocationResults = () => {\r\n const classes = useStyles();\r\n const dispatch = useDispatch();\r\n const history = useHistory();\r\n const { t, i18n } = useTranslation();\r\n const { language } = i18n;\r\n const { zip } = useParams();\r\n const params = useLocation().search;\r\n const filters = qs.parse(params, { ignoreQueryPrefix: true });\r\n\r\n const {\r\n isLoading,\r\n feedbackFormLocation,\r\n locations,\r\n zips: validZips,\r\n paging,\r\n summary,\r\n isError,\r\n } = useSelector((state) => state.locationFinder);\r\n\r\n const showFeedbackForm = useMemo(\r\n () => !isEmpty(feedbackFormLocation),\r\n [feedbackFormLocation]\r\n );\r\n const handleModalClose = () => {\r\n dispatch(setFeedbackFormLocation(null))\r\n };\r\n \r\n const handleModalSubmit = (payload) => {\r\n trackFeedbackFormSubmission({payload});\r\n handleModalClose();\r\n };\r\n // Determine loading state\r\n const previousIsLoading = usePrevious(isLoading);\r\n const doneLoading = previousIsLoading === true && isLoading === false;\r\n\r\n // Set up event trackers\r\n const trackLocationsSearched = useEventTracker(tracking.LOCATIONS_SEARCHED);\r\n const trackEmptyResultsShown = useEventTracker(tracking.EMPTY_RESULTS_SHOWN);\r\n const trackInvalidZipSearched = useEventTracker(tracking.INVALID_ZIP_SEARCHED);\r\n const trackFeedbackFormSubmission = useEventTracker(tracking.FEEDBACK_FORM_SUBMITTED);\r\n\r\n // Check if zips are loaded && validity of currently searched zip\r\n const areValidZipsLoaded = useMemo(() => !isEmpty(validZips), [validZips]);\r\n const isZipValid = useMemo(() => {\r\n if (!areValidZipsLoaded) return false;\r\n return !!validZips[zip];\r\n }, [areValidZipsLoaded, validZips, zip]);\r\n\r\n // Check if vaccine filters are valid\r\n const vaccineTypeFilters = useMemo(() =>\r\n filters.vaccineTypes ? filters.vaccineTypes.split(',') : [],\r\n [filters.vaccineTypes]\r\n );\r\n\r\n // Check if scheduling filters are valid\r\n const schedulingFilters = useMemo(() =>\r\n filters.schedulingFilters ? filters.schedulingFilters.split(',') : [],\r\n [filters.schedulingFilters]\r\n );\r\n\r\n // Check if accessibility filters are valid\r\n const accessibilityFilters = useMemo(() =>\r\n filters.accessibilityFilters ? filters.accessibilityFilters.split(',') : [],\r\n [filters.accessibilityFilters]\r\n );\r\n\r\n // Check if cys filters are valid\r\n const cysFilters = useMemo(() =>\r\n filters.cysFilters ? filters.cysFilters.split(',') : [],\r\n [filters.cysFilters]\r\n );\r\n\r\n const areFiltersValid = useMemo(() => {\r\n\r\n const invalidTypeFilters = difference(vaccineTypeFilters, validFilters.vaccineTypes.map(filter => filter.value));\r\n const invalidSchedulingFilters = difference(schedulingFilters, [...validFilters.schedulingFilters].map(filter => filter.value));\r\n const invalidAccessibilityFilters = difference(accessibilityFilters, [...validFilters.accessibilityFilters].map(filter => filter.value));\r\n const invalidCysFilters = difference(cysFilters, [...validFilters.cysFilters].map(filter => filter.value));\r\n return invalidTypeFilters.length === 0 && invalidAccessibilityFilters.length === 0 && invalidSchedulingFilters.length === 0 && invalidCysFilters.length === 0\r\n }, [vaccineTypeFilters, schedulingFilters, accessibilityFilters, cysFilters]);\r\n\r\n // Grab aggregate calculations from locations\r\n const locationsCount = paging.total;\r\n const nearestLocationDistance = useMemo(\r\n () => get(first(locations), \"distance\", null),\r\n [locations]\r\n );\r\n const availabilityCount = useMemo(() => {\r\n const availabilitySummaryIndex = findIndex(\r\n summary,\r\n (o) => o.vaccineAvailability === AVAILABLE\r\n );\r\n return get(summary, `[${availabilitySummaryIndex}].total`);\r\n }, [summary]);\r\n\r\n const locationAvailabilityRatio = useMemo(() => {\r\n return availabilityCount / paging.total;\r\n }, [availabilityCount, paging]);\r\n\r\n // Effect: After results have loaded, log that a search occurred (with or without results)\r\n useEffect(() => {\r\n if (!doneLoading) return;\r\n\r\n if (locationsCount === 0) {\r\n trackEmptyResultsShown({ language, zip });\r\n } else\r\n trackLocationsSearched({\r\n availabilityCount,\r\n language,\r\n locationAvailabilityRatio,\r\n nearestLocationDistance,\r\n zip,\r\n });\r\n }, [\r\n zip,\r\n doneLoading,\r\n trackEmptyResultsShown,\r\n locationsCount,\r\n trackLocationsSearched,\r\n locationAvailabilityRatio,\r\n availabilityCount,\r\n language,\r\n nearestLocationDistance,\r\n ]);\r\n\r\n // Effect: If in invalid zip or filter has been provided, log and redirect\r\n useEffect(() => {\r\n if ((!isZipValid && areValidZipsLoaded) || !areFiltersValid) {\r\n trackInvalidZipSearched(zip);\r\n history.push(routes.LOCATION_FINDER_PATH);\r\n }\r\n }, [zip, isZipValid, areValidZipsLoaded, areFiltersValid, trackInvalidZipSearched, history]);\r\n\r\n // Effect: If a valid zip & filter has been provided, fetch locations\r\n useEffect(() => {\r\n if (isZipValid && areFiltersValid) {\r\n dispatch(fetchLocations({ searchValue: zip, vaccineTypes: vaccineTypeFilters, schedulingFilters: schedulingFilters, accessibilityFilters: accessibilityFilters, cysFilters: cysFilters }));\r\n }\r\n }, [zip, isZipValid, vaccineTypeFilters, schedulingFilters, accessibilityFilters, cysFilters, areFiltersValid, dispatch]);\r\n\r\n const isLoadingFirstPage = isLoading && locations.length === 0;\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n {isLoadingFirstPage ? (\r\n \r\n ) : (\r\n \r\n \r\n \r\n { locations.length > 0 && (\r\n <>\r\n \r\n {paging.total}{\" \"}\r\n {t(\"resultsMessage\", {\r\n searchValue: zip,\r\n })}\r\n \r\n \r\n \r\n )}\r\n\r\n { locations.length == 0 && (\r\n <>\r\n \r\n {t(\"noFacilityMatches\")}\r\n \r\n \r\n \r\n )}\r\n\r\n {isError && (\r\n \r\n {t(\"error\")}\r\n \r\n )}\r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default LocationResults;\r\n","import { BrowserRouter as Router, Redirect, Route, Switch } from 'react-router-dom';\r\nimport React, { useEffect } from 'react';\r\nimport { useDispatch } from 'react-redux';\r\n\r\nimport './App.css';\r\nimport BuildVersion from './common/BuildVersion';\r\nimport Footer from './common/Footer';\r\nimport GoogleAnalytics from './common/vendors/GoogleAnalytics';\r\nimport Header from './common/Header';\r\nimport LanguageDetection from './common/LanguageDetection';\r\nimport LocationFinder from './features/locationFinder/LocationFinder';\r\nimport LocationResults from './features/locationFinder/LocationResults';\r\nimport { fetchZips } from './features/locationFinder/locationFinderSlice';\r\nimport { routes } from './constants';\r\nimport AccessibilityText from './features/locationFinder/AccessibilityText';\r\n\r\nconst App = () => {\r\n const dispatch = useDispatch();\r\n\r\n useEffect(() => {\r\n dispatch(fetchZips());\r\n }, [dispatch]);\r\n\r\n // NOTE: keep any new routes synced with SitemapRoutes.js as well to\r\n // accurately generate sitemaps.\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n