{"version":3,"file":"./js/dist/client.bundle.js","mappings":"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","sources":["webpack://@skv/nsw/../SKV.ClientAssets/sprites/ sync ^(.*\\.(svg$))[^.]*$/i","webpack://@skv/nsw/../SKV.FrontEnd/src/styles/au-variables.scss","webpack://@skv/nsw/../SKV.FrontEnd/src/styles/jsvariables-nsw.scss","webpack://@skv/nsw/../SKV.FrontEnd/src/styles/jsvariables.scss","webpack://@skv/nsw/../SKV.FrontEnd/src/styles/nsw-variables.scss","webpack://@skv/nsw/../SKV.FrontEnd/src/styles/nz-variables.scss","webpack://@skv/nsw/../SKV.ClientAssets/sprites/glyph/add.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/glyph/arror-right--hover.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/glyph/arrow-down--hover.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/glyph/arrow-down.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/glyph/arrow-left--hover.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/glyph/arrow-left.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/glyph/arrow-right--hover.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/glyph/arrow-right.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/glyph/arrow-up--hover.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/glyph/arrow-up.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/glyph/caution.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/glyph/close--hover.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/glyph/close.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/glyph/copy.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/glyph/correct.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/glyph/download.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/glyph/duplicate.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/glyph/edit.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/glyph/envelope.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/glyph/error.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/glyph/eye.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/glyph/face.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/glyph/file.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/glyph/flag-full.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/glyph/flag.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/glyph/heart-full.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/glyph/heart.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/glyph/incorrect.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/glyph/info.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/glyph/link-external.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/glyph/paper-clip.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/glyph/paper-plane.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/glyph/pencil.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/glyph/positive.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/glyph/promote.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/glyph/question.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/glyph/share.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/glyph/star.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/glyph/trash.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/icons/accessible.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/icons/briefcase.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/icons/calendar.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/icons/caret-down.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/icons/caret-up.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/icons/checklist.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/icons/chev-down.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/icons/chev-left.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/icons/chev-right.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/icons/chev-up.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/icons/clock.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/icons/close.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/icons/copy.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/icons/correct.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/icons/duplicate.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/icons/edit.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/icons/envelope-outline.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/icons/envelope.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/icons/exclamation-circle.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/icons/exclamation-triangle.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/icons/external.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/icons/eye.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/icons/face.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/icons/facebook-circle.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/icons/file.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/icons/heart.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/icons/home.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/icons/incorrect.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/icons/linkedin-circle.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/icons/location-pin.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/icons/marker.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/icons/mortarboard.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/icons/paper-plane.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/icons/pencil.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/icons/question-circle.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/icons/ribbon.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/icons/share.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/icons/spinner-solid.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/icons/star.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/icons/tick.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/icons/trash.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/icons/twitter-circle.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/icons/user-circle.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/icons/wheelchair.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/illustrations/01B.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/illustrations/AU01.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/illustrations/AU02.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/illustrations/AU03.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/illustrations/NZ01.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/illustrations/NZ02.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/illustrations/NZ03.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/illustrations/opportunities.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/illustrations/search.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/logos/certsy-logo.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/logos/nswgov-inverse.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/logos/nswvolunteering-cobrand.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/logos/nswvolunteering.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/logos/seekvolunteer-inverse.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/logos/seekvolunteer.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/personas/four.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/personas/one.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/personas/three.svg","webpack://@skv/nsw/../SKV.ClientAssets/sprites/personas/two.svg","webpack://@skv/nsw/./src/ui/SearchForm.state.ts","webpack://@skv/nsw/../SKV.ClientState/src/hooks/useThunkReducer.tsx","webpack://@skv/nsw/../SKV.ClientState/src/state/favourites/types.ts","webpack://@skv/nsw/../SKV.ClientState/src/state/favourites/actions.tsx","webpack://@skv/nsw/../SKV.ClientState/src/state/favourites/helpers.tsx","webpack://@skv/nsw/../SKV.ReactRemark/src/index.tsx","webpack://@skv/nsw/../SKV.ClientCore/src/components/SvgSprite.tsx","webpack://@skv/nsw/../SKV.ClientCore/src/components/Accordion.tsx","webpack://@skv/nsw/../SKV.ClientUtil/src/getDateRange.ts","webpack://@skv/nsw/../SKV.ClientUtil/src/locationHelpers.tsx","webpack://@skv/nsw/../SKV.ClientUtil/src/pluraliser.ts","webpack://@skv/nsw/../SKV.ClientUtil/src/resizeImg.tsx","webpack://@skv/nsw/../SKV.ClientCore/src/components/AdSpace.tsx","webpack://@skv/nsw/../SKV.ClientCore/src/components/Analytics/AnalyticsProvider.tsx","webpack://@skv/nsw/../SKV.ClientCore/src/components/Analytics/Analytics.tsx","webpack://@skv/nsw/../SKV.ClientCore/src/components/Analytics/AnalyticsStatic.tsx","webpack://@skv/nsw/../SKV.ClientCore/src/components/AspectRatio.tsx","webpack://@skv/nsw/../SKV.ClientCore/src/components/ArticleCard.tsx","webpack://@skv/nsw/../SKV.ClientCore/src/components/BrowserUpgradeNotification.tsx","webpack://@skv/nsw/../SKV.ClientCore/src/components/CertsyCta.tsx","webpack://@skv/nsw/../SKV.ClientCore/src/components/CsvImportForm.tsx","webpack://@skv/nsw/../SKV.ClientCore/src/components/DateRangePicker/DateRangePickerSelect.tsx","webpack://@skv/nsw/../SKV.ClientCore/src/components/DateRangePicker/DateRangePickerHeader.tsx","webpack://@skv/nsw/../SKV.ClientCore/src/components/DateRangePicker/DateRangePicker.tsx","webpack://@skv/nsw/../SKV.ClientCore/src/components/DefinitionLists.tsx","webpack://@skv/nsw/../SKV.ClientCore/src/components/DateRangePicker/DateRangePickerBtn.tsx","webpack://@skv/nsw/../SKV.ClientCore/src/components/Errors.tsx","webpack://@skv/nsw/../SKV.ClientCore/src/components/ErrorBoundary.tsx","webpack://@skv/nsw/../SKV.ClientCore/src/components/EventBadge.tsx","webpack://@skv/nsw/../SKV.ClientCore/src/components/EventDiscoverySlider.tsx","webpack://@skv/nsw/../SKV.ClientCore/src/components/FavouriteBtn.tsx","webpack://@skv/nsw/../SKV.ClientState/src/state/favourites/selectors.tsx","webpack://@skv/nsw/../SKV.ClientCore/src/components/Footer.tsx","webpack://@skv/nsw/../SKV.ClientCore/src/components/Form/HelpText.tsx","webpack://@skv/nsw/../SKV.ClientCore/src/components/Form/ValidationError.tsx","webpack://@skv/nsw/../SKV.ClientCore/src/components/Form/Fieldset.tsx","webpack://@skv/nsw/../SKV.ClientCore/src/components/Form/DateField.tsx","webpack://@skv/nsw/../SKV.ClientCore/src/components/Form/Field.tsx","webpack://@skv/nsw/../SKV.ClientCore/src/components/Form/PasteInput.tsx","webpack://@skv/nsw/../SKV.ClientCore/src/components/Form/RadioSwitch.tsx","webpack://@skv/nsw/../SKV.ClientCore/src/components/Form/SelectMulti.tsx","webpack://@skv/nsw/../SKV.ClientCore/src/components/GlobalNav.tsx","webpack://@skv/nsw/../SKV.ClientCore/src/components/Header.tsx","webpack://@skv/nsw/../SKV.ClientCore/src/components/HelmetCanonical.tsx","webpack://@skv/nsw/../SKV.ClientCore/src/components/HotTipPopover.tsx","webpack://@skv/nsw/../SKV.ClientCore/src/components/IconLink.tsx","webpack://@skv/nsw/../SKV.ClientCore/src/hooks/useAppInsights.tsx","webpack://@skv/nsw/../SKV.ClientCore/src/hooks/useAsyncTypeahead.tsx","webpack://@skv/nsw/../SKV.ClientCore/src/hooks/usePageFocus.tsx","webpack://@skv/nsw/../SKV.ClientCore/src/hooks/useReferrer.tsx","webpack://@skv/nsw/../SKV.ClientCore/src/hooks/useSearchFilters.tsx","webpack://@skv/nsw/../SKV.ClientCore/src/components/Typeahead/Highlighter.tsx","webpack://@skv/nsw/../SKV.ClientCore/src/components/Typeahead/ListItem.tsx","webpack://@skv/nsw/../SKV.ClientCore/src/components/Typeahead/Menu.tsx","webpack://@skv/nsw/../SKV.ClientCore/src/components/Typeahead/AsyncTypeahead.tsx","webpack://@skv/nsw/../SKV.ClientCore/src/components/Typeahead/AsyncTypeaheadSearch.tsx","webpack://@skv/nsw/../SKV.ClientCore/src/components/MultiLocationTypeahead.tsx","webpack://@skv/nsw/../SKV.ClientCore/src/components/NavBar.tsx","webpack://@skv/nsw/../SKV.ClientCore/src/components/Pagination.tsx","webpack://@skv/nsw/../SKV.ClientUtil/src/pagination.ts","webpack://@skv/nsw/../SKV.ClientCore/src/components/Peekdown.tsx","webpack://@skv/nsw/../SKV.ClientCore/src/components/VolunteerSearchLink.tsx","webpack://@skv/nsw/../SKV.ClientCore/src/components/ResultCard.tsx","webpack://@skv/nsw/../SKV.ClientCore/src/components/ResultListPagination.tsx","webpack://@skv/nsw/../SKV.ClientCore/src/types/AgencyEntityTypes.ts","webpack://@skv/nsw/../SKV.ClientCore/src/types/EmailNotificationTypes.ts","webpack://@skv/nsw/../SKV.ClientCore/src/types/OpportunitySearch.ts","webpack://@skv/nsw/../SKV.ClientCore/src/types/OpportunityStatus.ts","webpack://@skv/nsw/../SKV.ClientCore/src/types/OrganisationStatus.ts","webpack://@skv/nsw/../SKV.ClientCore/src/components/ResultSearchTypeBreak.tsx","webpack://@skv/nsw/../SKV.ClientCore/src/components/ScrollSink.tsx","webpack://@skv/nsw/../SKV.ClientCore/src/components/ResultTable.tsx","webpack://@skv/nsw/../SKV.ClientCore/src/components/SearchFormAdditionalFilter.tsx","webpack://@skv/nsw/../SKV.ClientCore/src/components/SearchFormWithFilters.tsx","webpack://@skv/nsw/../SKV.ClientCore/src/components/SearchInput.tsx","webpack://@skv/nsw/../SKV.ClientCore/src/components/ShareableLinkInfoModal.tsx","webpack://@skv/nsw/../SKV.ClientCore/src/ui/ExternalLink.tsx","webpack://@skv/nsw/../SKV.ClientCore/src/components/ShareablePasteInput.tsx","webpack://@skv/nsw/../SKV.ClientCore/src/components/ShareSocialEmailButton.tsx","webpack://@skv/nsw/../SKV.ClientCore/src/components/ShareSocialFacebookButton.tsx","webpack://@skv/nsw/../SKV.ClientCore/src/components/ShareSocialLinkedinButton.tsx","webpack://@skv/nsw/../SKV.ClientCore/src/components/ShareSocialTwitterButton.tsx","webpack://@skv/nsw/../SKV.ClientCore/src/components/ShareSocial.tsx","webpack://@skv/nsw/../SKV.ClientCore/src/components/SidebarBox.tsx","webpack://@skv/nsw/../SKV.ClientCore/src/components/SortByLink.tsx","webpack://@skv/nsw/../SKV.ClientCore/src/hocs/withInjectedRouter.tsx","webpack://@skv/nsw/../SKV.FrontEnd/src/styles/au-variables.scss?a59c","webpack://@skv/nsw/../SKV.FrontEnd/src/styles/jsvariables.scss?22a4","webpack://@skv/nsw/../SKV.ClientCore/src/themes/auTheme.ts","webpack://@skv/nsw/../SKV.FrontEnd/src/styles/jsvariables-nsw.scss?6e45","webpack://@skv/nsw/../SKV.FrontEnd/src/styles/nsw-variables.scss?f42f","webpack://@skv/nsw/../SKV.ClientCore/src/themes/nswTheme.ts","webpack://@skv/nsw/../SKV.FrontEnd/src/styles/nz-variables.scss?1fe0","webpack://@skv/nsw/../SKV.ClientCore/src/themes/nzTheme.ts","webpack://@skv/nsw/../SKV.ClientCore/src/components/StaticLayout.tsx","webpack://@skv/nsw/../SKV.ClientCore/src/hocs/withThemeProvider.tsx","webpack://@skv/nsw/../SKV.ClientCore/src/components/Strapi/Provider.tsx","webpack://@skv/nsw/../SKV.ClientCore/src/components/Tabs.tsx","webpack://@skv/nsw/../SKV.ClientCore/src/components/TooltipPopover.tsx","webpack://@skv/nsw/../SKV.ClientCore/src/models/CustomError.ts","webpack://@skv/nsw/../SKV.ClientCore/src/pages/browser-upgrade/index.tsx","webpack://@skv/nsw/../SKV.ClientCore/src/schemas/EoiSchema.ts","webpack://@skv/nsw/../SKV.ClientState/src/state/favourites/hooks.tsx","webpack://@skv/nsw/../SKV.ClientState/src/state/favourites/reducer.tsx","webpack://@skv/nsw/../SKV.ClientState/src/state/opportunity/reducer.ts","webpack://@skv/nsw/../SKV.ClientState/src/state/opportunity/actions.tsx","webpack://@skv/nsw/../SKV.ClientState/src/state/opportunity/hooks.tsx","webpack://@skv/nsw/../SKV.ClientState/src/state/context/PageEnvelope.tsx","webpack://@skv/nsw/../SKV.ClientState/src/state/context/OpportunitySearchQuery.tsx","webpack://@skv/nsw/../SKV.ClientState/src/state/opportunityResult/util.tsx","webpack://@skv/nsw/../SKV.ClientState/src/state/opportunityResult/actions.tsx","webpack://@skv/nsw/../SKV.ClientState/src/state/organisation/actions.tsx","webpack://@skv/nsw/../SKV.ClientState/src/state/organisation/hooks.tsx","webpack://@skv/nsw/../SKV.ClientState/src/state/organisation/reducer.ts","webpack://@skv/nsw/../SKV.ClientState/src/state/context/OrganisationSearchQuery.tsx","webpack://@skv/nsw/../SKV.ClientState/src/state/organisationResult/util.tsx","webpack://@skv/nsw/../SKV.ClientState/src/state/organisationResult/actions.tsx","webpack://@skv/nsw/../SKV.ClientState/src/state/organisationResult/reducer.tsx","webpack://@skv/nsw/../SKV.ClientState/src/state/context/ServerStatic.tsx","webpack://@skv/nsw/../SKV.ClientState/src/state/context/Global.tsx","webpack://@skv/nsw/../SKV.ClientState/src/state/SearchForm.state.ts","webpack://@skv/nsw/../SKV.ClientState/src/state/index.tsx","webpack://@skv/nsw/../SKV.ClientState/src/state/opportunityResult/reducer.ts","webpack://@skv/nsw/../SKV.ClientState/src/view-model/RootView.tsx","webpack://@skv/nsw/../SKV.ClientState/src/view-model/ViewModel.tsx","webpack://@skv/nsw/./src/state/UserContext.tsx","webpack://@skv/nsw/./src/state/EoiFormContext.tsx","webpack://@skv/nsw/./src/ui/Account/SignInCta.tsx","webpack://@skv/nsw/./src/ui/Form/ValidationError.tsx","webpack://@skv/nsw/./src/ui/Form/HelpText.tsx","webpack://@skv/nsw/./src/ui/Form/Field.tsx","webpack://@skv/nsw/./src/ui/Form/Select.tsx","webpack://@skv/nsw/./src/ui/Account/SignInOutPanel.tsx","webpack://@skv/nsw/./src/ui/Banner.tsx","webpack://@skv/nsw/./src/constants.ts","webpack://@skv/nsw/./src/ui/Breadcrumb.tsx","webpack://@skv/nsw/./src/ui/ServerResponse.tsx","webpack://@skv/nsw/./src/ui/Errors.tsx","webpack://@skv/nsw/./src/ui/FavouriteInlineSelectForm.tsx","webpack://@skv/nsw/./src/ui/Footer.tsx","webpack://@skv/nsw/./src/utils/utilities.ts","webpack://@skv/nsw/./src/utils/navigation.ts","webpack://@skv/nsw/./src/ui/NavBar.tsx","webpack://@skv/nsw/./src/ui/NSWPeekdown.tsx","webpack://@skv/nsw/./src/ui/ResultCard.tsx","webpack://@skv/nsw/./src/ui/SearchFormWithCommitment.tsx","webpack://@skv/nsw/./src/pages/favourites/index.tsx","webpack://@skv/nsw/./src/ui/SuggestedOpportunity.tsx","webpack://@skv/nsw/./src/ui/ActivityDashboard.tsx","webpack://@skv/nsw/./src/pages/home/index.tsx","webpack://@skv/nsw/./src/ui/FilterGroup.tsx","webpack://@skv/nsw/./src/ui/SearchFiltersSidebarForm.tsx","webpack://@skv/nsw/./src/ui/OrganisationSearch.tsx","webpack://@skv/nsw/../SKV.ClientState/src/state/organisationResult/hooks.tsx","webpack://@skv/nsw/./src/pages/volunteering-organisations/OrganisationDetails.tsx","webpack://@skv/nsw/./src/pages/volunteering-organisations/OrganisationDirectoryResults.tsx","webpack://@skv/nsw/./src/pages/volunteering-organisations/OrganisationDirectorySearchForm.tsx","webpack://@skv/nsw/./src/pages/volunteering-organisations/OrganisationDirectory.tsx","webpack://@skv/nsw/./src/pages/volunteering-organisations/index.tsx","webpack://@skv/nsw/./src/pages/unsubscribe/index.tsx","webpack://@skv/nsw/./src/ui/ShareSocial.tsx","webpack://@skv/nsw/./src/pages/volunteering/OpportunityDetailsAside.tsx","webpack://@skv/nsw/./src/ui/Alerts/InPageAlert.tsx","webpack://@skv/nsw/./src/pages/volunteering/OpportunityDetailsEoiRedirect.tsx","webpack://@skv/nsw/./src/pages/volunteering/OpportunityDetailsEoi.tsx","webpack://@skv/nsw/./src/pages/volunteering/OpportunityDetailsEoiSuccess.tsx","webpack://@skv/nsw/./src/pages/volunteering/OpportunityDetailsHeader.tsx","webpack://@skv/nsw/./src/pages/volunteering/OpportunityDetailsMain.tsx","webpack://@skv/nsw/./src/pages/volunteering/OpportunityDetails.tsx","webpack://@skv/nsw/./src/pages/volunteering/index.tsx","webpack://@skv/nsw/./src/pages/browser-upgrade/index.tsx","webpack://@skv/nsw/./src/pages/my-activity/Dashboard.tsx","webpack://@skv/nsw/./src/pages/my-activity/Suggestions.tsx","webpack://@skv/nsw/./src/pages/my-activity/Subscriptions.tsx","webpack://@skv/nsw/./src/pages/my-activity/Applications.tsx","webpack://@skv/nsw/./src/pages/my-activity/Experiences.tsx","webpack://@skv/nsw/./src/pages/my-activity/AddExperience.tsx","webpack://@skv/nsw/../SKV.ClientCore/src/locales/yup.ts","webpack://@skv/nsw/./src/pages/my-activity/Favourites.tsx","webpack://@skv/nsw/./src/pages/my-activity/index.tsx","webpack://@skv/nsw/./src/pages/signin/index.tsx","webpack://@skv/nsw/./src/ui/OpportunityEmailSubscribeForm.tsx","webpack://@skv/nsw/./src/ui/OpportunitySearchResultsHeader.tsx","webpack://@skv/nsw/./src/ui/OpportunitySearchResults.tsx","webpack://@skv/nsw/../SKV.ClientState/src/state/opportunityResult/hooks.tsx","webpack://@skv/nsw/./src/ui/OrganisationSearchForm.tsx","webpack://@skv/nsw/./src/App.tsx","webpack://@skv/nsw/./src/Root.tsx","webpack://@skv/nsw/./src/client.ts"],"sourcesContent":["var map = {\n\t\"./glyph/add.svg\": 21896,\n\t\"./glyph/arror-right--hover.svg\": 54488,\n\t\"./glyph/arrow-down--hover.svg\": 99656,\n\t\"./glyph/arrow-down.svg\": 92516,\n\t\"./glyph/arrow-left--hover.svg\": 44648,\n\t\"./glyph/arrow-left.svg\": 35999,\n\t\"./glyph/arrow-right--hover.svg\": 17088,\n\t\"./glyph/arrow-right.svg\": 99412,\n\t\"./glyph/arrow-up--hover.svg\": 22716,\n\t\"./glyph/arrow-up.svg\": 61364,\n\t\"./glyph/caution.svg\": 88712,\n\t\"./glyph/close--hover.svg\": 85428,\n\t\"./glyph/close.svg\": 54540,\n\t\"./glyph/copy.svg\": 38068,\n\t\"./glyph/correct.svg\": 22136,\n\t\"./glyph/download.svg\": 51588,\n\t\"./glyph/duplicate.svg\": 39276,\n\t\"./glyph/edit.svg\": 4556,\n\t\"./glyph/envelope.svg\": 99559,\n\t\"./glyph/error.svg\": 808,\n\t\"./glyph/eye.svg\": 55992,\n\t\"./glyph/face.svg\": 67608,\n\t\"./glyph/file.svg\": 62000,\n\t\"./glyph/flag-full.svg\": 64812,\n\t\"./glyph/flag.svg\": 58924,\n\t\"./glyph/heart-full.svg\": 84183,\n\t\"./glyph/heart.svg\": 35176,\n\t\"./glyph/incorrect.svg\": 22132,\n\t\"./glyph/info.svg\": 99156,\n\t\"./glyph/link-external.svg\": 86580,\n\t\"./glyph/paper-clip.svg\": 68772,\n\t\"./glyph/paper-plane.svg\": 3068,\n\t\"./glyph/pencil.svg\": 94028,\n\t\"./glyph/positive.svg\": 15952,\n\t\"./glyph/promote.svg\": 10320,\n\t\"./glyph/question.svg\": 96732,\n\t\"./glyph/share.svg\": 1100,\n\t\"./glyph/star.svg\": 63004,\n\t\"./glyph/trash.svg\": 6868,\n\t\"./icons/accessible.svg\": 40205,\n\t\"./icons/briefcase.svg\": 2120,\n\t\"./icons/calendar.svg\": 57256,\n\t\"./icons/caret-down.svg\": 99044,\n\t\"./icons/caret-up.svg\": 65264,\n\t\"./icons/checklist.svg\": 66184,\n\t\"./icons/chev-down.svg\": 90096,\n\t\"./icons/chev-left.svg\": 59476,\n\t\"./icons/chev-right.svg\": 71440,\n\t\"./icons/chev-up.svg\": 22624,\n\t\"./icons/clock.svg\": 31452,\n\t\"./icons/close.svg\": 15497,\n\t\"./icons/copy.svg\": 39596,\n\t\"./icons/correct.svg\": 28392,\n\t\"./icons/duplicate.svg\": 41188,\n\t\"./icons/edit.svg\": 81948,\n\t\"./icons/envelope-outline.svg\": 12748,\n\t\"./icons/envelope.svg\": 69928,\n\t\"./icons/exclamation-circle.svg\": 6900,\n\t\"./icons/exclamation-triangle.svg\": 64764,\n\t\"./icons/external.svg\": 78416,\n\t\"./icons/eye.svg\": 1420,\n\t\"./icons/face.svg\": 7264,\n\t\"./icons/facebook-circle.svg\": 38384,\n\t\"./icons/file.svg\": 91516,\n\t\"./icons/heart.svg\": 2280,\n\t\"./icons/home.svg\": 2644,\n\t\"./icons/incorrect.svg\": 76764,\n\t\"./icons/linkedin-circle.svg\": 46168,\n\t\"./icons/location-pin.svg\": 57844,\n\t\"./icons/marker.svg\": 10664,\n\t\"./icons/mortarboard.svg\": 55104,\n\t\"./icons/paper-plane.svg\": 43580,\n\t\"./icons/pencil.svg\": 99596,\n\t\"./icons/question-circle.svg\": 57968,\n\t\"./icons/ribbon.svg\": 54772,\n\t\"./icons/share.svg\": 95676,\n\t\"./icons/spinner-solid.svg\": 24548,\n\t\"./icons/star.svg\": 86528,\n\t\"./icons/tick.svg\": 48448,\n\t\"./icons/trash.svg\": 2844,\n\t\"./icons/twitter-circle.svg\": 67720,\n\t\"./icons/user-circle.svg\": 14188,\n\t\"./icons/wheelchair.svg\": 39844,\n\t\"./illustrations/01B.svg\": 76380,\n\t\"./illustrations/AU01.svg\": 3344,\n\t\"./illustrations/AU02.svg\": 22408,\n\t\"./illustrations/AU03.svg\": 11644,\n\t\"./illustrations/NZ01.svg\": 14448,\n\t\"./illustrations/NZ02.svg\": 33300,\n\t\"./illustrations/NZ03.svg\": 27548,\n\t\"./illustrations/opportunities.svg\": 61484,\n\t\"./illustrations/search.svg\": 85340,\n\t\"./logos/certsy-logo.svg\": 6304,\n\t\"./logos/nswgov-inverse.svg\": 36428,\n\t\"./logos/nswvolunteering-cobrand.svg\": 63412,\n\t\"./logos/nswvolunteering.svg\": 17968,\n\t\"./logos/seekvolunteer-inverse.svg\": 53124,\n\t\"./logos/seekvolunteer.svg\": 31216,\n\t\"./personas/four.svg\": 79024,\n\t\"./personas/one.svg\": 780,\n\t\"./personas/three.svg\": 5668,\n\t\"./personas/two.svg\": 27016\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 38084;","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../SKV.NSW/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../SKV.NSW/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, ``, \"\",{\"version\":3,\"sources\":[],\"names\":[],\"mappings\":\"\",\"sourceRoot\":\"\"}]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"enableBackgroundPatterns\": `false`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../SKV.NSW/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../SKV.NSW/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, ``, \"\",{\"version\":3,\"sources\":[],\"names\":[],\"mappings\":\"\",\"sourceRoot\":\"\"}]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"gray100\": `#fbfbfb`,\n\t\"gray200\": `#f2f2f2`,\n\t\"gray300\": `#ebebeb`,\n\t\"gray400\": `#cdd3d6`,\n\t\"gray500\": `#d6d6d6`,\n\t\"gray600\": `#ababab`,\n\t\"gray700\": `#747474`,\n\t\"gray800\": `#495054`,\n\t\"gray900\": `#22272b`,\n\t\"primaryColor\": `#002664`,\n\t\"secondaryColor\": `#cbedfd`,\n\t\"nswBlueColor\": `#0198d2`,\n\t\"successColor\": `#008a07`,\n\t\"infoColor\": `#2e5299`,\n\t\"warningColor\": `#c95000`,\n\t\"dangerColor\": `#b81237`,\n\t\"lightColor\": `#fff`,\n\t\"darkColor\": `#22272b`,\n\t\"linkColor\": `#002664`,\n\t\"mutedColor\": `#747474`,\n\t\"lineHeightBase\": `1.5`,\n\t\"spacer1\": `.25rem`,\n\t\"spacer2\": `.5rem`,\n\t\"spacer3\": `1rem`,\n\t\"spacer4\": `1.5rem`,\n\t\"spacer5\": `3rem`,\n\t\"spacer6\": `5rem`,\n\t\"btnPaddingY\": `.625rem`,\n\t\"btnPaddingX\": `.5625rem`,\n\t\"borderRadius\": `.25rem`,\n\t\"borderRadiusLg\": `.25rem`,\n\t\"borderRadiusSm\": `.1875rem`,\n\t\"boxShadowSm\": `0 .125rem .25rem rgba(0,0,0,.075)`,\n\t\"boxShadow\": `0 .5rem 1rem rgba(0,0,0,.15)`,\n\t\"boxShadowLg\": `0 1rem 3rem rgba(0,0,0,.175)`,\n\t\"xsBreakpoint\": `0`,\n\t\"smBreakpoint\": `576px`,\n\t\"mdBreakpoint\": `768px`,\n\t\"lgBreakpoint\": `992px`,\n\t\"xlBreakpoint\": `1200px`,\n\t\"smMaxWidth\": `540px`,\n\t\"mdMaxWidth\": `720px`,\n\t\"lgMaxWidth\": `960px`,\n\t\"xlMaxWidth\": `1200px`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../SKV.NSW/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../SKV.NSW/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.react-mde.react-mde,.react-mde .mde-header,.react-mde .mde-header .mde-tabs button.selected{border-color:#555}.fs-7{font-size:.875rem}.rounded{border-radius:.125rem}.rounded-lg{border-radius:.25rem}.rounded-xl{border-radius:.5rem}`, \"\",{\"version\":3,\"sources\":[\"webpack://./../SKV.FrontEnd/src/styles/_custom.scss\"],\"names\":[],\"mappings\":\"AAuVA,6FAGE,iBA9TS,CAiUX,MACE,iBA5Pa,CA+Pf,SACE,qBA3Qc,CA8QhB,YACE,oBA7QiB,CAgRnB,YACE,mBAhRiB\",\"sourceRoot\":\"\"}]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"gray100\": `#f7f7f7`,\n\t\"gray200\": `#eee`,\n\t\"gray300\": `#ddd`,\n\t\"gray400\": `#ccc`,\n\t\"gray500\": `#aaa`,\n\t\"gray600\": `#777`,\n\t\"gray700\": `#555`,\n\t\"gray800\": `#222`,\n\t\"gray900\": `#1c1c1c`,\n\t\"primaryColor\": `#9556b7`,\n\t\"secondaryColor\": `#0b076d`,\n\t\"successColor\": `#248817`,\n\t\"infoColor\": `#0d3880`,\n\t\"warningColor\": `#ffc708`,\n\t\"dangerColor\": `#cf1a6d`,\n\t\"lightColor\": `#f7f7f7`,\n\t\"darkColor\": `#1c1c1c`,\n\t\"linkColor\": `#2765cf`,\n\t\"mutedColor\": `#555`,\n\t\"lineHeightBase\": `1.5`,\n\t\"spacer1\": `.25rem`,\n\t\"spacer2\": `.5rem`,\n\t\"spacer3\": `1rem`,\n\t\"spacer4\": `1.5rem`,\n\t\"spacer5\": `3rem`,\n\t\"spacer6\": `5rem`,\n\t\"btnPaddingY\": `.625rem`,\n\t\"btnPaddingX\": `.9375rem`,\n\t\"borderRadius\": `.125rem`,\n\t\"borderRadiusLg\": `.25rem`,\n\t\"borderRadiusSm\": `.125rem`,\n\t\"boxShadowSm\": `0 .125rem .25rem rgba(0,0,0,.075)`,\n\t\"boxShadow\": `0 .5rem 1rem rgba(0,0,0,.15)`,\n\t\"boxShadowLg\": `0 1rem 3rem rgba(0,0,0,.175)`,\n\t\"xsBreakpoint\": `0`,\n\t\"smBreakpoint\": `576px`,\n\t\"mdBreakpoint\": `768px`,\n\t\"lgBreakpoint\": `992px`,\n\t\"xlBreakpoint\": `1200px`,\n\t\"smMaxWidth\": `540px`,\n\t\"mdMaxWidth\": `720px`,\n\t\"lgMaxWidth\": `960px`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../SKV.NSW/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../SKV.NSW/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, ``, \"\",{\"version\":3,\"sources\":[],\"names\":[],\"mappings\":\"\",\"sourceRoot\":\"\"}]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"enableBackgroundPatterns\": `false`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../SKV.NSW/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../SKV.NSW/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, ``, \"\",{\"version\":3,\"sources\":[],\"names\":[],\"mappings\":\"\",\"sourceRoot\":\"\"}]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"enableBackgroundPatterns\": `true`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","module.exports = {\n id: \"glyph:add-usage\",\n viewBox: \"0 0 16 16\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#glyph:add-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"glyph:arror-right--hover-usage\",\n viewBox: \"0 0 16 16\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#glyph:arror-right--hover-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"glyph:arrow-down--hover-usage\",\n viewBox: \"0 0 16 16\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#glyph:arrow-down--hover-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"glyph:arrow-down-usage\",\n viewBox: \"0 0 16 16\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#glyph:arrow-down-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"glyph:arrow-left--hover-usage\",\n viewBox: \"0 0 16 16\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#glyph:arrow-left--hover-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"glyph:arrow-left-usage\",\n viewBox: \"0 0 16 16\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#glyph:arrow-left-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"glyph:arrow-right--hover-usage\",\n viewBox: \"0 0 16 16\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#glyph:arrow-right--hover-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"glyph:arrow-right-usage\",\n viewBox: \"0 0 16 16\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#glyph:arrow-right-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"glyph:arrow-up--hover-usage\",\n viewBox: \"0 0 16 16\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#glyph:arrow-up--hover-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"glyph:arrow-up-usage\",\n viewBox: \"0 0 16 16\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#glyph:arrow-up-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"glyph:caution-usage\",\n viewBox: \"0 0 16 16\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#glyph:caution-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"glyph:close--hover-usage\",\n viewBox: \"0 0 16 16\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#glyph:close--hover-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"glyph:close-usage\",\n viewBox: \"0 0 16 16\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#glyph:close-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"glyph:copy-usage\",\n viewBox: \"0 0 16 16\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#glyph:copy-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"glyph:correct-usage\",\n viewBox: \"0 0 16 16\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#glyph:correct-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"glyph:download-usage\",\n viewBox: \"0 0 16 16\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#glyph:download-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"glyph:duplicate-usage\",\n viewBox: \"0 0 16 16\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#glyph:duplicate-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"glyph:edit-usage\",\n viewBox: \"0 0 16 16\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#glyph:edit-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"glyph:envelope-usage\",\n viewBox: \"0 0 19 15\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#glyph:envelope-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"glyph:error-usage\",\n viewBox: \"0 0 15 15\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#glyph:error-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"glyph:eye-usage\",\n viewBox: \"0 0 16 16\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#glyph:eye-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"glyph:face-usage\",\n viewBox: \"0 0 16 16\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#glyph:face-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"glyph:file-usage\",\n viewBox: \"0 0 16 16\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#glyph:file-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"glyph:flag-full-usage\",\n viewBox: \"0 0 16 16\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#glyph:flag-full-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"glyph:flag-usage\",\n viewBox: \"0 0 16 16\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#glyph:flag-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"glyph:heart-full-usage\",\n viewBox: \"0 0 20 18\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#glyph:heart-full-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"glyph:heart-usage\",\n viewBox: \"0 0 20 18\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#glyph:heart-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"glyph:incorrect-usage\",\n viewBox: \"0 0 16 16\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#glyph:incorrect-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"glyph:info-usage\",\n viewBox: \"0 0 16 16\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#glyph:info-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"glyph:link-external-usage\",\n viewBox: \"0 0 16 16\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#glyph:link-external-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"glyph:paper-clip-usage\",\n viewBox: \"0 0 16 16\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#glyph:paper-clip-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"glyph:paper-plane-usage\",\n viewBox: \"0 0 16 16\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#glyph:paper-plane-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"glyph:pencil-usage\",\n viewBox: \"0 0 16 16\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#glyph:pencil-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"glyph:positive-usage\",\n viewBox: \"0 0 16 16\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#glyph:positive-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"glyph:promote-usage\",\n viewBox: \"0 0 16 16\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#glyph:promote-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"glyph:question-usage\",\n viewBox: \"0 0 14 14\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#glyph:question-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"glyph:share-usage\",\n viewBox: \"0 0 16 14\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#glyph:share-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"glyph:star-usage\",\n viewBox: \"0 0 16 16\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#glyph:star-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"glyph:trash-usage\",\n viewBox: \"0 0 16 16\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#glyph:trash-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"icons:accessible-usage\",\n viewBox: \"0 0 16 16\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#icons:accessible-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"icons:briefcase-usage\",\n viewBox: \"0 0 16 16\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#icons:briefcase-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"icons:calendar-usage\",\n viewBox: \"0 0 16 16\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#icons:calendar-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"icons:caret-down-usage\",\n viewBox: \"0 0 8 4\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#icons:caret-down-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"icons:caret-up-usage\",\n viewBox: \"0 0 8 4\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#icons:caret-up-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"icons:checklist-usage\",\n viewBox: \"0 0 16 16\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#icons:checklist-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"icons:chev-down-usage\",\n viewBox: \"0 0 16 16\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#icons:chev-down-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"icons:chev-left-usage\",\n viewBox: \"0 0 16 16\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#icons:chev-left-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"icons:chev-right-usage\",\n viewBox: \"0 0 16 16\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#icons:chev-right-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"icons:chev-up-usage\",\n viewBox: \"0 0 16 16\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#icons:chev-up-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"icons:clock-usage\",\n viewBox: \"0 0 16 16\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#icons:clock-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"icons:close-usage\",\n viewBox: \"0 0 16 16\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#icons:close-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"icons:copy-usage\",\n viewBox: \"0 0 16 16\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#icons:copy-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"icons:correct-usage\",\n viewBox: \"0 0 24 24\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#icons:correct-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"icons:duplicate-usage\",\n viewBox: \"0 0 16 16\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#icons:duplicate-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"icons:edit-usage\",\n viewBox: \"0 0 16 16\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#icons:edit-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"icons:envelope-outline-usage\",\n viewBox: \"0 0 24 24\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#icons:envelope-outline-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"icons:envelope-usage\",\n viewBox: \"0 0 17 15\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#icons:envelope-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"icons:exclamation-circle-usage\",\n viewBox: \"0 0 16 16\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#icons:exclamation-circle-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"icons:exclamation-triangle-usage\",\n viewBox: \"0 0 16 16\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#icons:exclamation-triangle-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"icons:external-usage\",\n viewBox: \"0 0 16 16\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#icons:external-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"icons:eye-usage\",\n viewBox: \"0 0 16 16\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#icons:eye-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"icons:face-usage\",\n viewBox: \"0 0 16 16\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#icons:face-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"icons:facebook-circle-usage\",\n viewBox: \"0 0 1024 1024\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#icons:facebook-circle-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"icons:file-usage\",\n viewBox: \"0 0 16 16\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#icons:file-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"icons:heart-usage\",\n viewBox: \"0 0 18 16\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#icons:heart-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"icons:home-usage\",\n viewBox: \"0 0 20 22\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#icons:home-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"icons:incorrect-usage\",\n viewBox: \"0 0 24 24\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#icons:incorrect-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"icons:linkedin-circle-usage\",\n viewBox: \"0 0 1024 1024\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#icons:linkedin-circle-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"icons:location-pin-usage\",\n viewBox: \"0 0 14 18\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#icons:location-pin-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"icons:marker-usage\",\n viewBox: \"0 0 16 16\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#icons:marker-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"icons:mortarboard-usage\",\n viewBox: \"0 0 16 16\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#icons:mortarboard-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"icons:paper-plane-usage\",\n viewBox: \"0 0 17 16\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#icons:paper-plane-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"icons:pencil-usage\",\n viewBox: \"0 0 17 17\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#icons:pencil-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"icons:question-circle-usage\",\n viewBox: \"0 0 24 24\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#icons:question-circle-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"icons:ribbon-usage\",\n viewBox: \"0 0 16 16\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#icons:ribbon-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"icons:share-usage\",\n viewBox: \"0 0 16 14\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#icons:share-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"icons:spinner-solid-usage\",\n viewBox: \"0 0 512 512\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#icons:spinner-solid-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"icons:star-usage\",\n viewBox: \"0 0 17 17\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#icons:star-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"icons:tick-usage\",\n viewBox: \"0 0 11 8\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#icons:tick-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"icons:trash-usage\",\n viewBox: \"0 0 16 16\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#icons:trash-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"icons:twitter-circle-usage\",\n viewBox: \"0 0 1024 1024\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#icons:twitter-circle-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"icons:user-circle-usage\",\n viewBox: \"0 0 16 16\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#icons:user-circle-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"icons:wheelchair-usage\",\n viewBox: \"0 0 16 16\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#icons:wheelchair-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"illustrations:01B-usage\",\n viewBox: \"0 0 439 78\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#illustrations:01B-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"illustrations:AU01-usage\",\n viewBox: \"0 0 272 238\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#illustrations:AU01-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"illustrations:AU02-usage\",\n viewBox: \"0 0 263 231\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#illustrations:AU02-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"illustrations:AU03-usage\",\n viewBox: \"0 0 231 233\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#illustrations:AU03-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"illustrations:NZ01-usage\",\n viewBox: \"0 0 468.7 345.3\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#illustrations:NZ01-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"illustrations:NZ02-usage\",\n viewBox: \"0 0 476.2 330\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#illustrations:NZ02-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"illustrations:NZ03-usage\",\n viewBox: \"0 0 321 355\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#illustrations:NZ03-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"illustrations:opportunities-usage\",\n viewBox: \"0 0 294 330\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#illustrations:opportunities-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"illustrations:search-usage\",\n viewBox: \"0 0 294 330\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#illustrations:search-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"logos:certsy-logo-usage\",\n viewBox: \"0 0 118 35\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#logos:certsy-logo-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"logos:nswgov-inverse-usage\",\n viewBox: \"0 0 35 38\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#logos:nswgov-inverse-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"logos:nswvolunteering-cobrand-usage\",\n viewBox: \"0 0 178.1 106.1\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#logos:nswvolunteering-cobrand-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"logos:nswvolunteering-usage\",\n viewBox: \"0 0 217 16\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#logos:nswvolunteering-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"logos:seekvolunteer-inverse-usage\",\n viewBox: \"0 0 249 48\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#logos:seekvolunteer-inverse-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"logos:seekvolunteer-usage\",\n viewBox: \"0 0 249 48\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#logos:seekvolunteer-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"personas:four-usage\",\n viewBox: \"0 0 40 42\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#personas:four-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"personas:one-usage\",\n viewBox: \"0 0 32 43\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#personas:one-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"personas:three-usage\",\n viewBox: \"0 0 37 44\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#personas:three-usage\",\n toString: function () {\n return this.url;\n }\n }","module.exports = {\n id: \"personas:two-usage\",\n viewBox: \"0 0 32 43\",\n url: \"/static/\" + \"sprites.d024681c2afb7131ccbe9522cede4128.svg#personas:two-usage\",\n toString: function () {\n return this.url;\n }\n }","import type { FriendlyKeyValueUrl, PageEnvelope } from \"@skv/core\";\nimport { Machine, assign } from \"xstate\";\n\ninterface SearchFormStateSchema {\n states: {\n initialSuggestions: {\n states: {\n idle: {};\n loading: {};\n loaded: {};\n failed: {};\n };\n };\n relatedSuggestions: {\n states: {\n idle: {};\n loading: {};\n loaded: {};\n failed: {};\n };\n };\n };\n}\n\nexport type SearchFormEvent =\n | {\n type: \"SELECT\";\n value: string[];\n }\n | {\n type: \"CLEAR_ALL_INPUTS\";\n }\n | {\n type: \"KEYWORD_INPUT_CLEAR\";\n }\n | {\n type: \"KEYWORD_INPUT_CHANGE\";\n value: string;\n }\n | {\n type: \"KEYWORD_INPUT_SELECT\";\n value: FriendlyKeyValueUrl;\n }\n | {\n type: \"LOCATION_INPUT_CLEAR\";\n }\n | {\n type: \"LOCATION_INPUT_CHANGE\";\n value: string;\n }\n | {\n type: \"LOCATION_INPUT_SELECT\";\n value: string;\n }\n | {\n type: \"FETCH_START_INITIAL_SUGGESTIONS\";\n }\n | {\n type: \"FETCH_START_LOCATIONS\";\n value: string;\n }\n | {\n type: \"\";\n };\n\ninterface SearchFormContext {\n keyword: string;\n where: string;\n category: number[];\n didKeywordAutoComplete: boolean;\n didWhereAutoComplete: boolean;\n initialSuggestions: string[];\n relatedSuggestions: string[];\n\n cache: {\n [key: string]: string[];\n };\n}\n\nlet INITIAL_SUGGESTIONS_CACHE = null;\nconst WHERE_STORE_NAME = \"searchFormWhere\";\n\n/* Guards */\nconst locationSearchValid = (ctx, event) => {\n if (\"value\" in event) {\n return event.value.length > 2;\n }\n\n return false;\n};\n\nconst idleLocationHasValidValue = (ctx, event) => {\n return ctx.where.length > 2;\n};\n\nexport const searchFormMachine = Machine<\n SearchFormContext,\n SearchFormStateSchema,\n SearchFormEvent\n>({\n id: \"typeahead\",\n type: \"parallel\",\n context: {\n keyword: \"\",\n where: \"\",\n category: [],\n didKeywordAutoComplete: false,\n didWhereAutoComplete: false,\n initialSuggestions: [],\n relatedSuggestions: [],\n cache: {},\n },\n states: {\n initialSuggestions: {\n initial: INITIAL_SUGGESTIONS_CACHE ? \"loaded\" : \"loading\",\n states: {\n idle: {\n on: {\n FETCH_START_INITIAL_SUGGESTIONS: \"loading\",\n },\n },\n loading: {\n invoke: {\n id: \"fetch_initial_suggestions\",\n src: (ctx) => {\n if (INITIAL_SUGGESTIONS_CACHE) {\n return Promise.resolve().then(() => INITIAL_SUGGESTIONS_CACHE);\n }\n\n return fetch(\"/api/locations/default\")\n .then>((res) =>\n res.json()\n )\n .then(({ data }) => {\n INITIAL_SUGGESTIONS_CACHE = data.locations;\n return data.locations;\n });\n },\n onDone: {\n target: \"loaded\",\n actions: assign({\n initialSuggestions: (ctx, event) => event.data,\n }),\n },\n onError: \"failed\",\n },\n },\n loaded: {},\n failed: {},\n },\n },\n relatedSuggestions: {\n initial: \"idle\",\n states: {\n idle: {\n always: [\n {\n target: \"loading\",\n cond: idleLocationHasValidValue,\n },\n ],\n },\n loading: {\n invoke: {\n id: \"fetch_location_suggestions\",\n src: (ctx) => {\n if (ctx.cache[ctx.where]) {\n return Promise.resolve().then(() => ctx.cache[ctx.where]);\n }\n\n const jsonCache =\n sessionStorage?.getItem(WHERE_STORE_NAME) || \"{}\";\n const whereCache = JSON.parse(jsonCache) as Record<\n string,\n string[]\n >;\n\n if (whereCache.hasOwnProperty(ctx.where)) {\n return Promise.resolve().then(() => whereCache[ctx.where]);\n }\n\n return fetch(`/api/locations?q=${ctx.where}`)\n .then>((res) =>\n res.json()\n )\n .then(({ data }) => {\n try {\n whereCache[ctx.where] = [...data.locations];\n sessionStorage?.setItem(\n WHERE_STORE_NAME,\n JSON.stringify(whereCache)\n );\n } catch (e) {\n console.error(\"Error storing search form where: \", e);\n }\n\n return data.locations;\n });\n },\n onDone: {\n target: \"loaded\",\n actions: assign({\n cache: (ctx, event) =>\n Object.assign({}, ctx.cache, {\n [ctx.where]: event.data,\n }),\n relatedSuggestions: (ctx, event) => event.data,\n }),\n },\n onError: \"failed\",\n },\n },\n loaded: {},\n failed: {},\n },\n },\n },\n on: {\n CLEAR_ALL_INPUTS: {\n actions: assign({\n keyword: (ctx) => \"\",\n category: (ctx) => [],\n where: (ctx) => \"\",\n didKeywordAutoComplete: (ctx) => false,\n didWhereAutoComplete: (ctx) => false,\n cache: (ctx) => {\n const tempCache = Object.assign({}, ctx.cache);\n delete tempCache[ctx.keyword];\n delete tempCache[ctx.where];\n return tempCache;\n },\n }),\n },\n KEYWORD_INPUT_CLEAR: {\n actions: assign({\n keyword: (ctx) => \"\",\n category: (ctx) => [],\n didKeywordAutoComplete: (ctx) => false,\n cache: (ctx) => {\n const tempCache = Object.assign({}, ctx.cache);\n delete tempCache[ctx.keyword];\n return tempCache;\n },\n }),\n },\n KEYWORD_INPUT_CHANGE: {\n actions: assign({\n keyword: (ctx, e) => e.value,\n category: (ctx) => [],\n didKeywordAutoComplete: (ctx) => false,\n }),\n },\n KEYWORD_INPUT_SELECT: {\n actions: assign({\n keyword: (ctx, e) => e.value.name,\n category: (ctx, e) => [e.value.id],\n didKeywordAutoComplete: (ctx) => true,\n }),\n },\n LOCATION_INPUT_CLEAR: {\n actions: assign({\n where: (ctx) => \"\",\n didWhereAutoComplete: (ctx) => false,\n }),\n },\n LOCATION_INPUT_CHANGE: {\n actions: assign({\n where: (ctx, e) => e.value,\n didWhereAutoComplete: (ctx) => false,\n }),\n },\n LOCATION_INPUT_SELECT: [\n {\n target: \"relatedSuggestions.loading\",\n cond: locationSearchValid,\n actions: assign({\n where: (ctx, e) => e.value || ctx.where || \"\",\n didWhereAutoComplete: (ctx) => true,\n }),\n },\n ],\n FETCH_START_LOCATIONS: {\n target: \"relatedSuggestions.loading\",\n cond: locationSearchValid,\n actions: assign({\n where: (ctx, e) => e.value || ctx.where || \"\",\n }),\n },\n },\n});\n","import * as React from \"react\";\nimport { cloneDeep } from \"lodash-es\";\n\nexport const useThunkReducer = (\n reducer: React.Reducer,\n initialState: State\n) => {\n const internalReducer = React.useRef(reducer);\n\n React.useEffect(() => {\n internalReducer.current = reducer;\n });\n\n /**\n * We allow nested values in the state,\n * and object.assign only does a shallow copy,\n * so potentially props could be mutated unintendedly\n * if the initial state is coming from props.\n *\n * We memoize the cloneDeep result before sending it to\n * useState as otherwise cloneDeep will run every render\n * even though its result is discarded by React\n * */\n const internalInitialState = React.useMemo(() => {\n return cloneDeep(initialState);\n }, []);\n\n const [$state, $setState] = React.useState(internalInitialState);\n\n const stateRef = React.useRef($state);\n\n const getState = React.useMemo(() => {\n return (): State => stateRef.current;\n }, [stateRef]);\n\n const setState = React.useMemo(() => {\n return (nextState: State): void => {\n stateRef.current = nextState;\n $setState(nextState);\n };\n }, []);\n\n const reduce = React.useMemo(() => {\n return (action: Actions): State => {\n return internalReducer.current(getState(), action);\n };\n }, [internalReducer, getState]);\n\n type GetState = () => State;\n\n type ThunkDispatch = (\n dispatch: React.Dispatch,\n getState: GetState\n ) => void;\n\n const dispatch = React.useMemo(() => {\n function dispatch(action: Actions): void;\n function dispatch(action: ThunkDispatch): void;\n function dispatch(action: any): void {\n if (typeof action === \"function\") {\n return (action as ThunkDispatch)(dispatch, getState);\n }\n\n return setState(reduce(action));\n }\n\n return dispatch;\n }, [setState, reduce, getState]);\n\n return [getState, dispatch] as const;\n};\n","import { CustomError } from \"@skv/core\";\n\nexport interface State {\n opportunities: {\n [oppId: string]: string | number;\n };\n organisations: {\n [orgId: string]: string | number;\n };\n loading: boolean;\n error: false | null | CustomError;\n}\n\nexport enum FAVOURITES_ENUM {\n OPPORTUNITY = \"opp\",\n ORGANISATION = \"org\",\n}\n\nexport type ActionTypes =\n | {\n type: \"FAVOURITES:FETCH:START\";\n }\n | {\n type: \"FAVOURITES:FETCH:END\";\n payload: {\n opportunities: {\n [oppId: string]: string;\n };\n organisations: {\n [orgId: string]: string;\n };\n };\n }\n | {\n type: \"FAVOURITES:OPP:ADD\";\n payload: {\n id: string;\n };\n }\n | {\n type: \"FAVOURITES:ORG:ADD\";\n payload: {\n id: string;\n };\n }\n | {\n type: \"FAVOURITES:OPP:REMOVE\";\n payload: {\n id: string;\n };\n }\n | {\n type: \"FAVOURITES:ORG:REMOVE\";\n payload: {\n id: string;\n };\n };\n","import { AppThunk } from \"../\";\n\nexport const addFavourite =\n (id, type): AppThunk =>\n (dispatch) => {\n if (!id) {\n throw Error(\"No id passed to addFavourite function\");\n }\n\n // make sure type is always a valid value\n switch (type) {\n case \"opp\":\n case \"org\":\n break;\n default:\n type = \"opp\";\n break;\n }\n\n dispatch({\n type: type === \"opp\" ? \"FAVOURITES:OPP:ADD\" : \"FAVOURITES:ORG:ADD\",\n payload: {\n id,\n },\n });\n\n return fetch(\"/api/favourites\", {\n method: \"POST\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n id,\n type,\n }),\n })\n .then((res) => {\n if (res.ok) {\n return res.json();\n }\n\n throw Error(\"Unhandled error\");\n })\n .then(({ data, success, errorCode, errorMessage }) => {\n if (success) {\n return true;\n }\n\n throw Error(\"Recieved false for success from API\");\n });\n };\n\nexport const removeFavourite =\n (id, type): AppThunk =>\n (dispatch) => {\n if (!id) {\n throw Error(\"No id passed to addFavourite function\");\n }\n\n // make sure type is always a valid value\n switch (type) {\n case \"opp\":\n case \"org\":\n break;\n default:\n type = \"opp\";\n break;\n }\n\n dispatch({\n type: type === \"opp\" ? \"FAVOURITES:OPP:REMOVE\" : \"FAVOURITES:ORG:REMOVE\",\n payload: {\n id,\n },\n });\n\n fetch(\"/api/favourites\", {\n method: \"DELETE\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n id,\n type,\n }),\n })\n .then((res) => {\n if (res.ok) {\n return res.json();\n }\n })\n .then(({ data, success, errorCode, errorMessage }) => {\n if (success) {\n return true;\n }\n });\n };\n\nexport const getFavourites = (): AppThunk => (dispatch) => {\n dispatch({\n type: \"FAVOURITES:FETCH:START\",\n });\n fetch(\"/api/favourites/list\")\n .then((res) => {\n if (res.ok) {\n return res.json();\n }\n })\n .then(({ data, success, errorCode, errorMessage }) => {\n if (success) {\n dispatch({\n type: \"FAVOURITES:FETCH:END\",\n payload: {\n opportunities: data.favourites.opportunities.reduce((acc, cur) => {\n acc[cur.id] = cur.date;\n return acc;\n }, {}),\n organisations: data.favourites.organisations.reduce((acc, cur) => {\n acc[cur.id] = cur.date;\n return acc;\n }, {}),\n },\n });\n }\n })\n .catch((err) => {\n dispatch({\n type: \"FAVOURITES:FETCH:END\",\n payload: {\n opportunities: {},\n organisations: {},\n },\n });\n console.log(err);\n });\n};\n","import { FAVOURITES_ENUM } from \"./types\";\n\ninterface FavouriteItem {\n id: string;\n date: number;\n}\n\ntype ReturnType = {\n opportunities: Record;\n organisations: Record;\n};\n\nexport function getFavouritesFromCookie(): ReturnType {\n const favourites = Object.values(FAVOURITES_ENUM).reduce((acc, cur) => {\n const list = getListFromCookie(cur);\n acc[cur] = list.reduce((innerAcc, innerCur) => {\n innerAcc[innerCur.id] = innerCur.date;\n return innerAcc;\n }, {});\n return acc;\n }, {});\n\n return {\n opportunities: favourites[FAVOURITES_ENUM.OPPORTUNITY],\n organisations: favourites[FAVOURITES_ENUM.ORGANISATION],\n };\n}\n\nfunction getListFromCookie(type: FAVOURITES_ENUM) {\n let listOfFavourites: FavouriteItem[] = [];\n\n if (typeof document !== \"undefined\" && document?.cookie) {\n const favCookie = document.cookie\n .split(\";\")\n .find((c) => c.trim().startsWith(`f_${type}=`))\n ?.split(\"=\")[1];\n\n if (favCookie) {\n const decoded = decodeURIComponent(decodeURIComponent(favCookie) || \"\");\n listOfFavourites = (Object.entries(JSON.parse(decoded)) || []).map(\n ([id, date]) => ({ id, date } as FavouriteItem)\n );\n }\n }\n\n return listOfFavourites;\n}\n","/*\n NOTE: This is pretty much a fork of remark-react\n https://github.com/remarkjs/react-remark\n\n Currently (as of 18/01/2021) react-remark doesn't support\n server rendering markdown. See below github issue:\n https://github.com/remarkjs/react-remark/issues/16\n\n Main differences are:\n - secure by default by having the sanitize step within the exported hook\n - uses remark's synchronous 'processSync' method instead of\n process (which is async)\n - adds an additional initialContent option to the useRemark hook\n and uses children prop as the initialContent\n - exports a component that has a modified hast-util-sanitize\n github schema (default) to allow the custom 'jsx' tag in html (which\n allows us to further parse this in to a react component via jsx-parser).\n This allows us to write jsx in markdown, and render the actual react-component.\n - adds 'className' as a valid attribute to all elements (might only need\n this on jsx tags, todo : look in to this further)\n*/\n\nimport {\n FunctionComponent,\n Fragment,\n ReactElement,\n createElement,\n useState,\n useEffect,\n useCallback,\n useMemo,\n} from \"react\";\nimport unified, { PluggableList } from \"unified\";\nimport remarkParse, { RemarkParseOptions } from \"remark-parse\";\nimport remarkToRehype from \"remark-rehype\";\nimport rehypeReact, { Options as RehypeReactOptions } from \"rehype-react\";\n\nimport rehypeSanitize from \"rehype-sanitize\";\n\nimport deepMerge from \"deepmerge\";\nimport GHSCHEMA from \"hast-util-sanitize/lib/github.json\";\nimport u from \"unist-builder\";\n\ntype PartialBy = Omit & Partial>;\n\nexport interface UseRemarkOptions {\n remarkParseOptions?: Partial;\n remarkToRehypeOptions?: RemarkToRehypeOptions;\n rehypeReactOptions?: PartialBy<\n RehypeReactOptions,\n \"createElement\"\n >;\n remarkPlugins?: PluggableList;\n rehypePlugins?: PluggableList;\n onError?: (err: Error) => void;\n initialContent?: string;\n}\n\nconst SCHEMA = deepMerge(GHSCHEMA, {\n tagNames: [\"jsx\"],\n attributes: {\n \"*\": [\"className\"],\n },\n});\n\ntype Test = T extends unified.Plugin\n ? U\n : never;\n\ntype RemarkToRehypeOptions = Test[1];\n\nexport const useRemark = ({\n remarkParseOptions,\n remarkToRehypeOptions,\n rehypeReactOptions,\n remarkPlugins = [],\n rehypePlugins = [],\n onError = () => {},\n initialContent,\n}: UseRemarkOptions = {}): [ReactElement | null, (source: string) => void] => {\n const parser = useCallback((source: string) => {\n const result = unified()\n .use(remarkParse, remarkParseOptions)\n .use(remarkPlugins)\n .use(remarkToRehype, remarkToRehypeOptions)\n .use(rehypeSanitize, SCHEMA as any)\n .use(rehypePlugins)\n .use(rehypeReact, {\n createElement,\n Fragment,\n ...rehypeReactOptions,\n } as RehypeReactOptions)\n .processSync(source).result as ReactElement;\n\n return result;\n }, []);\n\n const [reactContent, setReactContent] = useState(() =>\n initialContent ? parser(initialContent) : null\n );\n\n const setMarkdownSource = useCallback((source: string) => {\n const result = parser(source);\n setReactContent(result);\n }, []);\n\n return [reactContent, setMarkdownSource];\n};\n\nexport interface RemarkProps extends UseRemarkOptions {\n children: string;\n}\n\nexport const Remark: FunctionComponent = ({\n children,\n ...useRemarkOptions\n}) => {\n const [reactContent, setMarkdownSource] = useRemark({\n ...useRemarkOptions,\n initialContent: children,\n });\n\n useEffect(() => {\n setMarkdownSource(children);\n }, [children, setMarkdownSource]);\n\n return reactContent;\n};\n\ninterface RemarkJsxProps extends RemarkProps {\n renderJsx: (props: rehypeReact.ComponentProps) => JSX.Element;\n}\n\nconst remarkJsxToRehypeOptions: RemarkToRehypeOptions = {\n allowDangerousHtml: true,\n handlers: {\n code: (h, node) => {\n const value = node.value ? node.value + \"\\n\" : \"\";\n const lang =\n node.lang && (node.lang as string).match(/^[^ \\t]+(?=[ \\t]|$)/);\n const props: Record = {};\n\n if (lang) {\n props.language = lang;\n props.className = [\"language-\" + lang];\n }\n\n if (lang && lang[0] === \"jsx\") {\n return h(node, \"jsx\", props, [u(\"text\", value)]);\n }\n\n return h(node, \"pre\", [h(node, \"code\", props, [u(\"text\", value)])]);\n },\n },\n};\n\nexport const RemarkJsx: FunctionComponent = ({\n children,\n renderJsx,\n rehypeReactOptions: initialRehypeReactOptions,\n}) => {\n const rehypeReactOptions = useMemo(\n () =>\n deepMerge(\n {\n passNode: true,\n components: {\n jsx: renderJsx,\n },\n },\n initialRehypeReactOptions || {}\n ),\n []\n );\n\n return (\n \n {children}\n \n );\n};\n","import * as React from \"react\";\n\nconst req = require.context(\n \"@skv/assets/sprites\",\n true,\n /^(.*\\.(svg$))[^.]*$/im\n);\n\ntype LoadedSprite = {\n id: string;\n url: string;\n};\n\nconst sprites = req.keys().map(function (key) {\n const sprite = req(key);\n return {\n id: sprite.id,\n url: sprite.url,\n } as LoadedSprite;\n});\n\nconst spritesDictionary = sprites.reduce((acc, cur) => {\n acc[cur.id] = cur;\n return acc;\n}, {} as Record);\n\ninterface SvgSpriteProps\n extends Omit, \"aria-hidden\"> {\n id: string;\n [\"aria-hidden\"]?: never;\n}\n\n// SvgSprite should always have either an aria-label or aria-hidden attribute to ensure good accessibility.\n// \"aria-hidden\" is not allowed as a prop, because it will be added if \"aria-label\" is falsy.\n\nexport const SvgSprite: React.FC = ({\n id,\n \"aria-label\": ariaLabel,\n ...rest\n}) => {\n const spriteKey = `${id}-usage`;\n const sprite = spritesDictionary[spriteKey];\n const spriteAtLocation = `@skv/assets/sprites/${id.replace(\":\", \"/\")}.svg`;\n\n if (!sprite) {\n throw Error(\n `No sprite found with id ${id}. ${spriteAtLocation} does not exist`\n );\n }\n\n if (ariaLabel) {\n return (\n \n \n \n );\n }\n\n return (\n \n \n \n );\n};\n","import { Remark } from \"@skv/react-remark\";\nimport * as React from \"react\";\nimport {\n Accordion as BootstrapAccordion,\n AccordionProps as BootstrapAccordionProps,\n} from \"react-bootstrap\";\nimport styled from \"styled-components\";\nimport { SvgSprite } from \"./SvgSprite\";\n\nconst Toggle = styled.button`\n position: relative;\n top: 1px;\n margin-top: -1px;\n display: block;\n text-align: left;\n width: 100%;\n background-color: transparent;\n border: 0;\n padding: 0.6875rem 0;\n\n display: flex;\n\n border-top: 1px solid ${(p): string => p.theme.gray300};\n border-bottom: 1px solid ${(p): string => p.theme.gray300};\n`;\n\nconst CustomToggle: React.FC<{\n label: string;\n setActiveKey: (key: string) => void;\n active: boolean;\n eventKey: string;\n}> = ({ label, setActiveKey, active, eventKey }) => {\n const handleClick = (e) => {\n setActiveKey(active ? null : eventKey);\n };\n\n return (\n \n \n {label}\n \n \n p.theme.gray600};\n transition: transform 0.3s ${(p): string => p.theme.timingFnEaseOut};\n\n transform: rotate3d(1, 0, 0, 0deg);\n\n .open & {\n transform: rotate3d(1, 0, 0, 180deg);\n }\n `}\n />\n \n \n );\n};\n\nexport interface Question {\n question: string;\n answer: React.ReactNode;\n}\n\ninterface AccordionProps extends BootstrapAccordionProps {\n questions: Question[];\n // answers can come from a json with html markup,\n // or also as a React.ReactNode\n answersAreHtml?: boolean; // todo: deprecate\n answersAreJsx?: boolean;\n}\n\nexport const Accordion: React.FC = ({\n questions,\n answersAreHtml = false,\n answersAreJsx = false,\n ...rest\n}) => {\n const [activeKey, setActiveKey] = React.useState(null);\n\n return (\n \n {questions.map((q, idx) => (\n
\n \n\n \n {((): JSX.Element => {\n if (answersAreHtml) {\n return (\n \n );\n }\n\n if (answersAreJsx) {\n return {q.answer as string};\n }\n\n return
{q.answer}
;\n })()}\n
\n
\n ))}\n
\n );\n};\n","import dayjs from \"dayjs\";\n\nexport const isInThePast = (date: string) => {\n const now = new Date();\n const nowDate = `${now.getFullYear()}-${now.getMonth() + 1}-${now.getDate()}`;\n return dayjs(date).isBefore(nowDate, \"day\");\n};\n\nexport const getDateRange = (\n startDate: string,\n endDate?: string,\n format?: string\n) => {\n const dateFormat = format || \"D MMM YYYY\";\n const [dayPart, monthPart, yearPart] = dateFormat.split(\" \");\n\n // Does endDate exist?\n if (!endDate) {\n return dayjs(startDate).format(dateFormat);\n }\n // Is endDate before startDate?\n if (dayjs(endDate).isBefore(dayjs(startDate), \"day\")) {\n return dayjs(startDate).format(dateFormat);\n }\n // Is startDate and endDate the same?\n if (dayjs(startDate).isSame(dayjs(endDate), \"day\")) {\n return dayjs(startDate).format(dateFormat);\n }\n // Is startDate and endDate in the same month?\n if (dayjs(startDate).isSame(dayjs(endDate), \"month\")) {\n return `${dayjs(startDate).format(dayPart)} - ${dayjs(endDate).format(\n dateFormat\n )}`;\n }\n // Is startDate and endDate in the same year?\n const shortMonth = `${dayPart} MMM`;\n if (dayjs(startDate).isSame(dayjs(endDate), \"year\")) {\n return `${dayjs(startDate).format(shortMonth)} - ${dayjs(endDate).format(\n `${shortMonth} ${yearPart}`\n )}`;\n }\n // Start and end date are in different years\n return `${dayjs(startDate).format(`${shortMonth} ${yearPart}`)} - ${dayjs(\n endDate\n ).format(`${shortMonth} ${yearPart}`)}`;\n};\n","import { VolunteerSearchLink, WorldLocation } from \"@skv/core\";\nimport * as React from \"react\";\n\ntype LocationSegmentsToReactNode = (\n locations: WorldLocation[],\n isOnlineOrRemote: boolean\n) => React.ReactNode;\n\ninterface LocationStringsToReactNodeOptions {\n noLocationsText?: string;\n remoteFriendlyLabel?: string;\n}\n\nexport const locationSegmentsToReactNode: LocationSegmentsToReactNode = (\n locations,\n isOnlineOrRemote,\n options?: LocationStringsToReactNodeOptions\n) => {\n options = Object.assign(\n {},\n {\n noLocationsText: \"Remote Only\",\n remoteFriendlyLabel: \"Remote Friendly\",\n },\n options\n );\n\n switch (locations.length) {\n case 0:\n return isOnlineOrRemote ? {options.noLocationsText} : null;\n case 1:\n return (\n \n {locations[0].segments.map((segment, idx) => (\n \n {idx !== 0 && \" \"}\n \n {segment.name}\n \n \n ))}\n {isOnlineOrRemote ? ` / ${options.remoteFriendlyLabel}` : null}\n \n );\n default:\n return (\n \n {locations.map((n) => n.displayName).join(\", \")}\n {isOnlineOrRemote ? ` / ${options.remoteFriendlyLabel}` : null}\n \n );\n }\n};\n\nexport const locationStringsToReactNode = (\n locations: string[],\n isOnlineOrRemote: boolean,\n options?: LocationStringsToReactNodeOptions\n): React.ReactNode => {\n options = Object.assign(\n {},\n {\n noLocationsText: \"Remote Only\",\n remoteFriendlyLabel: \"Remote Friendly\",\n },\n options\n );\n\n switch (locations.length) {\n case 0:\n return isOnlineOrRemote ? {options.noLocationsText} : null;\n default:\n return (\n \n {locations.join(\", \")}\n {isOnlineOrRemote ? ` / ${options.remoteFriendlyLabel}` : null}\n \n );\n }\n};\n","interface PluraliserOptions {\n none: string;\n singular: string;\n plural: string;\n}\n\nexport const pluraliser = (\n count: number,\n { none, singular, plural }: PluraliserOptions\n): string => {\n if (count === 0) {\n return none;\n }\n\n if (count === 1) {\n return singular;\n }\n\n return plural;\n};\n","/*\n Below is used on organisation images\n*/\n\nexport const resizeImg = (url, size) => {\n if (!url) {\n throw Error(\"Argument 'url' passed with no value\");\n }\n\n const newUrl = url.split(\"/\");\n newUrl.splice(newUrl.length - 1, 0, size);\n return newUrl.join(\"/\");\n};\n\n/*\n Below is used on blog articles from strapi\n*/\n\nlet CLOUDFRONT_URL;\n\nif (process.env.TARGET_ENV === \"nz\") {\n CLOUDFRONT_URL = \"cdn.seekvolunteer.co.nz\";\n} else {\n CLOUDFRONT_URL = \"cdn.volunteer.com.au\";\n}\n\nexport const resizeImgCloudFront = (imgUrl: string, size: string): string => {\n const urlArray = imgUrl.split(\"/\");\n\n const result = [...urlArray];\n result.splice(urlArray.length - 1, 0, size);\n result[2] = CLOUDFRONT_URL;\n\n return result.join(\"/\");\n};\n","import * as React from \"react\";\nimport { Link } from \"react-router-dom\";\nimport styled, { useTheme } from \"styled-components\";\n\nimport { StrapiPromo } from \"../types\";\n\nimport { resizeImgCloudFront } from \"@skv/util\";\n\ntype ImgProps = React.DetailedHTMLProps<\n React.ImgHTMLAttributes,\n HTMLImageElement\n>;\n\nexport interface AdSpaceWithImageProps {\n imgXl2x: string;\n imgXl: string;\n\n imgLg2x: string;\n imgLg: string;\n\n imgMd2x: string;\n imgMd: string;\n\n img2x: string;\n img: string;\n\n imgAlt?: string;\n\n imgProps?: Omit;\n}\n\nconst BaseAdSpace = styled.section`\n background-color: ${(p): string => p.theme.infoColor};\n display: flex;\n flex-direction: column;\n min-height: 320px;\n justify-content: center;\n\n @media (min-width: ${(p): string => p.theme.mdBreakpoint}) {\n flex-direction: row;\n }\n`;\n\nconst BaseAdSpaceContent = styled.div`\n padding: 1rem ${30 / 16}rem;\n flex: 1 1 auto;\n color: #fff;\n display: flex;\n flex-direction: column;\n justify-content: center;\n\n @media (min-width: ${(p): string => p.theme.mdBreakpoint}) {\n flex: 0 1 40%;\n }\n`;\n\nexport const AdSpaceWithImage = ({\n imgXl2x,\n imgXl,\n\n imgLg2x,\n imgLg,\n\n imgMd2x,\n imgMd,\n\n img2x,\n img,\n imgAlt = \"\",\n\n imgProps,\n\n children,\n ...rest\n}: AdSpaceWithImageProps & {\n children?: React.ReactNode;\n}): JSX.Element => {\n const theme = useTheme();\n\n return (\n \n p.theme.mdBreakpoint}) {\n min-height: 320px;\n flex: 1 1 60%;\n }\n `}\n >\n \n \n \n \n \n \n \n \n {children}\n \n );\n};\n\nexport const AdSpace = ({\n created_at,\n heading,\n subheading,\n id,\n media,\n published_at,\n summary,\n updated_at,\n url,\n media_alt_tag,\n _request_date_UTC,\n button_text,\n object_position,\n children,\n ...rest\n}: StrapiPromo & {\n children?: React.ReactNode;\n}): JSX.Element => {\n if (media) {\n return (\n \n
\n

{heading}

\n {subheading && (\n

{subheading}

\n )}\n {summary &&

{summary}

}\n
\n \n {button_text || \"Read more\"}\n \n
\n
\n \n );\n }\n\n return (\n \n p.theme.mdBreakpoint}) {\n flex: 1 1 100%;\n text-align: center;\n }\n `}\n >\n
\n \n {heading}\n \n {subheading && (\n

{subheading}

\n )}\n {summary &&

{summary}

}\n
\n p.theme.mdBreakpoint}) {\n align-self: center;\n }\n `}\n className=\"btn btn-sm btn-outline-light\"\n to={url}\n >\n {button_text || \"Read more\"}\n \n
\n
\n \n
\n );\n};\n","import * as React from \"react\";\nimport { AnalyticsData } from \"./Analytics\";\n// import { prettyLog } from \"./helpers\";\n\nexport interface AnalyticsProviderProps {\n division: \"vol\";\n country: \"nz\" | \"au\";\n site: \"skvnz\" | \"skvau\" | \"nswgov\";\n scriptSrc: string;\n}\n\ntype AnalyticsLinkNameTypes =\n | \"favourite-opportunity\"\n | \"favourite-organisation\"\n | \"remove-favourite-opportunity\"\n | \"remove-favourite-organisation\"\n | \"subscribe-to-new-opportunity-email\"\n | \"express-of-interest\"\n | \"survey-link-clicked\";\n\n// State context is immutable for now\ntype AnalyticsStateContext = AnalyticsProviderProps & {\n scriptLoaded: boolean;\n};\n\ninterface AnalyticsMethods {\n trackPageLink: (link: AnalyticsLinkNameTypes) => void;\n trackPageView: (data: AnalyticsData) => void;\n}\n\nconst AnalyticsContext = React.createContext(\n undefined\n);\n\nconst AnalyticsMethods = React.createContext(\n undefined\n);\n\ndeclare const global: {\n utag: any;\n analytics: any;\n};\n\nexport const AnalyticsProvider: React.FC = ({\n country,\n division,\n site,\n scriptSrc,\n children,\n}) => {\n if (!country || !division || !site) {\n throw Error(\n \"Analytics provider needs 'country', 'division', and 'site' props\"\n );\n }\n\n const queue = React.useRef([]);\n const [scriptLoaded, setScriptLoaded] = React.useState(false);\n\n /* methods */\n\n const trackPageLink = React.useCallback(\n (link: AnalyticsLinkNameTypes) => {\n if (global.utag && scriptLoaded) {\n global.analytics.linkName = link;\n global.utag.link(global.analytics);\n\n // if (process.env.NODE_ENV !== \"production\") {\n // prettyLog(\"link\", global.analytics);\n // }\n }\n },\n [scriptLoaded]\n );\n\n const trackPageView = React.useCallback(\n (data?: AnalyticsData): void => {\n if (global.utag && scriptLoaded) {\n global.analytics = Object.assign({}, { country, division, site }, data);\n global.utag.view(global.analytics);\n\n // if (process.env.NODE_ENV !== \"production\") {\n // prettyLog(\"page-view\", global.analytics);\n // }\n } else {\n //prettyLog(\"queuing\", data);\n queue.current = [...queue.current, data];\n }\n },\n [country, division, site, scriptLoaded]\n );\n\n React.useEffect(() => {\n // initialise default global.analytics object\n global.analytics = {\n country,\n division,\n site,\n };\n }, [country, division, site]);\n\n React.useEffect(() => {\n // load tracking script\n\n if (scriptSrc && typeof scriptSrc === \"string\") {\n const script = document.createElement(\"script\");\n script.src = scriptSrc;\n script.type = \"text/javascript\";\n script.async = true;\n script.onload = (): void => {\n setScriptLoaded(true);\n };\n\n const topScript = document.getElementsByTagName(\"script\")[0];\n topScript.parentNode.insertBefore(script, topScript);\n }\n }, [scriptSrc]);\n\n React.useEffect(() => {\n // process queue\n if (scriptLoaded) {\n queue.current.forEach((data) => trackPageView(data));\n queue.current = [];\n }\n }, [scriptLoaded, trackPageView]);\n\n return (\n \n \n {children}\n \n \n );\n};\n\nexport const useAnalyticsUtil = () => {\n const analyticsUtils = React.useContext(AnalyticsMethods);\n\n if (analyticsUtils === undefined) {\n throw Error(\"useAnalyticsUtil used outside an \");\n }\n\n return analyticsUtils;\n};\n","import {\n OpportunitySearchQueryState,\n OrganisationSearchQueryState,\n useGlobal,\n} from \"@skv/state\";\nimport * as React from \"react\";\n\nimport { useAnalyticsUtil } from \"./AnalyticsProvider\";\n\ntype InputMethods = \"auto-suggest\" | \"typed\";\nexport interface AnalyticsData {\n // main/search results\n subSection?: string;\n subSubSection?: string;\n subSubSubSection?: string;\n pageTitle?: string;\n pageType?: string;\n loginStatus?: \"loggedin\" | \"loggedout\";\n searchTerm?: string;\n searchTermInputMethod?: InputMethods;\n searchLocation?: string;\n searchLocationInputMethod?: InputMethods;\n searchLocationRadius?: string; // {distance}km\n searchCategory?: string;\n searchWorkType?: string;\n searchSuitability?: string;\n searchCommitment?: string;\n searchDayAndTime?: string;\n\n // opp/org\n organisationId?: number;\n opportunityId?: number;\n}\n\ninterface AnalyticsProps {\n data: AnalyticsData;\n}\n\nexport const Analytics: React.FC = ({ data }) => {\n const { trackPageView } = useAnalyticsUtil();\n\n if (!trackPageView) {\n throw Error(\n \" component used outside an . Did you forget to wrap your app with the AnalyticsProvider component?\"\n );\n }\n\n React.useEffect(() => {\n trackPageView(data);\n }, []);\n\n return null;\n};\n\ninterface AnalyticsSearchQueryProps {\n searchQuery: OpportunitySearchQueryState | OrganisationSearchQueryState;\n data?: AnalyticsData;\n delay?: number;\n}\n\n/**\n * AnalyticsSearchQuery relies on history.state for the searchQuery.\n * We are doing a history.push AFTER the FETCH:END method has completed,\n * therefore, our searchQuery will actually not be the correct searchQuery\n * when the searchResults has updated (as we have not pushed the new url and\n * searchQuery state yet). Without changing the logic for the searchQuery,\n * for now opt to delay the firing of the tracking event until the searchQuery\n * is stable, which should happen almost immediately, as it'll fire in the next\n * promise block.\n *\n * Side note, this also prevents quick successions of searchQuery changing and\n * firing tracking events (e.g, a user changing category sidebar filters quickly)\n * */\nexport const AnalyticsSearchQuery: React.FC = ({\n searchQuery,\n data,\n delay = 1000,\n}) => {\n const { trackPageView } = useAnalyticsUtil();\n\n const {\n categoryList,\n commitmentList,\n dayAndTimeList,\n suitableForList,\n typeOfWorkList,\n } = useGlobal();\n\n if (!trackPageView) {\n throw Error(\n \" component used outside an . Did you forget to wrap your app with the AnalyticsProvider component?\"\n );\n }\n\n React.useEffect(() => {\n const timeout = setTimeout(() => {\n const _data: AnalyticsData = Object.assign(\n {},\n {\n searchTerm: searchQuery.keyword || \"\",\n searchTermInputMethod: \"typed\", // todo : when category search is in, work on auto-suggest\n searchLocation: searchQuery.where || \"\",\n searchLocationInputMethod: \"typed\",\n searchLocationRadius: \"0km\", // todo : no radius search atm\n searchCategory: searchQuery.category\n .map((id) => categoryList.find((n) => n.id === id)?.name)\n .filter((n) => n != null)\n .join(\", \"),\n },\n data\n );\n\n if (\"typeofwork\" in searchQuery) {\n _data.searchWorkType = searchQuery.typeofwork\n .map((id) => typeOfWorkList.find((n) => n.id === id)?.name)\n .filter((n) => n != null)\n .join(\", \");\n }\n\n if (\"suitablefor\" in searchQuery) {\n _data.searchSuitability = searchQuery.suitablefor\n .map((id) => suitableForList.find((n) => n.id === id)?.name)\n .filter((n) => n != null)\n .join(\", \");\n }\n\n if (\"commitment\" in searchQuery) {\n _data.searchCommitment = searchQuery.commitment\n .map((id) => commitmentList.find((n) => n.id === id)?.name)\n .filter((n) => n != null)\n .join(\", \");\n }\n\n if (\"daytime\" in searchQuery) {\n _data.searchDayAndTime = searchQuery.daytime\n .map((id) => dayAndTimeList.find((n) => n.id === id)?.name)\n .filter((n) => n != null)\n .join(\", \");\n }\n\n trackPageView(_data);\n }, delay);\n\n return (): void => {\n clearTimeout(timeout);\n };\n }, [\n categoryList,\n commitmentList,\n data,\n dayAndTimeList,\n searchQuery,\n suitableForList,\n trackPageView,\n typeOfWorkList,\n delay,\n ]);\n\n return null;\n};\n","import * as React from \"react\";\nimport { AnalyticsProvider } from \"./AnalyticsProvider\";\nimport { Analytics } from \"./Analytics\";\nimport type { AnalyticsData } from \"./Analytics\";\nimport type { AnalyticsProviderProps } from \"./AnalyticsProvider\";\n\ninterface AnalyticsStaticProps extends AnalyticsData, AnalyticsProviderProps {}\n\nexport const AnalyticsStatic: React.FC = ({\n country,\n division,\n site,\n scriptSrc,\n ...rest\n}) => {\n return (\n \n \n \n );\n};\n","import * as React from \"react\";\n\ninterface AspectRatioProps extends React.HTMLAttributes {\n width: number;\n height: number;\n}\n\nexport const AspectRatio: React.FC = (props) => {\n const { children, style, width, height, ...rest } = props;\n return (\n \n {children}\n \n );\n};\n","import classNames from \"classnames\";\nimport * as React from \"react\";\nimport { Link, LinkProps } from \"react-router-dom\";\nimport { AspectRatio } from \"./AspectRatio\";\nimport { SvgSprite } from \"./SvgSprite\";\n\nimport { StrapiArticle } from \"../types\";\n\ninterface ArticleCardProps\n extends Pick {\n asAnchor?: AsAnchor;\n to: AsAnchor extends false ? LinkProps[\"to\"] : string;\n className?: string;\n wrapperClassName?: string;\n\n imgUrl1x?: string;\n imgUrl2x?: string;\n}\n\nexport const ArticleCard = (\n props: ArticleCardProps\n): JSX.Element => {\n const {\n title,\n summary,\n to,\n type,\n imgUrl1x,\n imgUrl2x,\n className,\n asAnchor,\n wrapperClassName = \"mb-5\",\n } = props;\n\n return (\n \n p.theme.mdBreakpoint}) {\n width: 280px;\n }\n `}\n className={classNames(\"card h-100\", className)}\n >\n {imgUrl1x && imgUrl2x && (\n
\n \n \n \n \n \n \n {type === \"video\" && (\n \n Video\n \n )}\n
\n )}\n\n
\n

{title}

\n

{summary}

\n {asAnchor === true ? (\n \n {type === \"video\" ? \"Watch\" : \"Read\"}\n \n \n ) : (\n \n {type === \"video\" ? \"Watch\" : \"Read\"}\n \n \n )}\n
\n \n \n );\n};\n\ntype ImgProps = React.DetailedHTMLProps<\n React.ImgHTMLAttributes,\n HTMLImageElement\n>;\n\ninterface ArticleFeaturedCardProps\n extends Omit, \"imgUrl1x\" | \"imgUrl2x\" | \"title\"> {\n headline: string;\n\n desktopImgUrl1x?: string;\n desktopImgUrl2x?: string;\n\n mobileImgUrl1x?: string;\n mobileImgUrl2x?: string;\n\n imgProps?: Omit;\n}\n\nexport const ArticleFeaturedCard = ({\n headline,\n summary,\n desktopImgUrl1x,\n desktopImgUrl2x,\n mobileImgUrl1x,\n mobileImgUrl2x,\n imgProps,\n to,\n asAnchor,\n wrapperClassName = \"mb-5\",\n}: ArticleFeaturedCardProps): JSX.Element => {\n const areImagesProvided = !!(\n desktopImgUrl1x &&\n desktopImgUrl2x &&\n mobileImgUrl1x &&\n mobileImgUrl2x\n );\n\n return (\n \n
\n {areImagesProvided && (\n
\n \n \n \n p.theme.lgBreakpoint}) {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n }\n `}\n src={mobileImgUrl2x}\n alt=\"\"\n {...imgProps}\n />\n \n
\n )}\n \n
\n

{headline}

\n

{summary}

\n {asAnchor === true ? (\n \n Read\n \n \n ) : (\n \n Read\n \n \n )}\n
\n
\n \n \n );\n};\n","import { SvgSprite } from \"./SvgSprite\";\n\nimport { Link } from \"react-router-dom\";\n\nexport const BrowserUpgradeNotification = (): JSX.Element => {\n return (\n p.theme.mdBreakpoint}) {\n bottom: 3rem;\n right: 3rem;\n width: 500px;\n }\n\n @supports (display: none) {\n display: none;\n visibility: hidden;\n }\n `}\n >\n \n\n

Browser upgrade recommended

\n

\n It looks like you may be using a web browser version that we don't\n support. Make sure you're using the most recent version of your\n browser, or try using Microsoft Edge or Google Chrome, to get the full\n SEEK Volunteer experience.\n

\n \n Learn more\n \n \n \n );\n};\n\nexport const BrowserUpgradeNotificationNsw = (): JSX.Element => {\n return (\n p.theme.mdBreakpoint}) {\n bottom: 3rem;\n right: 3rem;\n width: 500px;\n }\n\n @supports (display: none) {\n display: none;\n visibility: hidden;\n }\n `}\n >\n

Browser upgrade recommended

\n

\n It looks like you may be using a web browser version that we don't\n support. Make sure you're using the most recent version of your\n browser, or try using Microsoft Edge or Google Chrome, to get the full\n experience.\n

\n \n Learn more\n \n \n \n );\n};\n","import certsyProfileImg from \"@skv/assets/gfx/certsy-profile.svg\";\nimport { AspectRatio, SvgSprite } from \".\";\n\ninterface CertsyCtaProps {\n certsyHirerLandingUrl: string;\n}\n\nexport const CertsyCta = ({\n certsyHirerLandingUrl,\n}: CertsyCtaProps): JSX.Element => {\n return (\n \n
\n \n \n \n
\n\n p.theme.smBreakpoint}) {\n width: 70%;\n }\n @media (min-width: ${(p): string => p.theme.mdBreakpoint}) {\n width: 50%;\n }\n `}\n >\n

Hassle-free compliance checks

\n

\n Get early access to a simple way to conduct compliance checks and\n credential management.\n

\n \n Learn more\n \n \n p.theme.smBreakpoint}) {\n margin: 0;\n max-width: 50%;\n position: absolute;\n bottom: -15%;\n right: -5%;\n }\n `}\n >\n \n \n \n );\n};\n","import { useState } from \"react\";\n\nexport const CsvImportForm = () => {\n const [isSubmitting, setSubmitting] = useState(false);\n const [hasFiles, setHasFiles] = useState(false);\n\n const handleSubmit = () => setSubmitting(true);\n const handleChange = (e) => setHasFiles(!!e.target.files.length);\n\n return (\n
\n \n
\n \n \n
\n \n Import CSV\n \n \n {isSubmitting && (\n
\n
\n
\n Loading...\n
\n
\n Uploading file\n Please wait. Do not leave this page.\n You will be redirected automatically.\n
\n )}\n
\n );\n};\n","import * as React from \"react\";\nimport { SvgSprite } from \"../SvgSprite\";\n\nimport classNames from \"classnames\";\n\ninterface State {\n isFocused: boolean;\n activeIdx: number;\n}\n\nexport interface DateRangePickerSelectProps {\n id: string;\n label: string;\n selected: T;\n dataSource: T[];\n renderOption: (option: T, idx: number) => React.ReactNode;\n onSelect: (option: T, idx: number) => void;\n isActive: (option: T, idx: number) => boolean;\n innerRef?: React.MutableRefObject<{\n ul: HTMLUListElement;\n button: HTMLButtonElement;\n }>;\n \"aria-labelledby\": string;\n}\n\ntype ListItemProps = React.DetailedHTMLProps<\n React.LiHTMLAttributes,\n HTMLLIElement\n>;\n\ninterface ListOptionProps extends ListItemProps {\n active: boolean;\n}\n\nconst ListOption: React.FC = ({\n active,\n children,\n ...props\n}) => {\n const liRef = React.useRef(null);\n\n React.useEffect(() => {\n if (!active) {\n return;\n }\n\n if (liRef.current) {\n const parentNode = liRef.current.parentNode as HTMLUListElement;\n const currentNode = liRef.current;\n\n /* - delta */\n if (currentNode.offsetTop < parentNode.scrollTop) {\n // scrollIntoView with top aligned\n currentNode.scrollIntoView({ block: \"nearest\" });\n // parentNode.scrollTop = currentNode.offsetTop;\n }\n\n /* + delta */\n if (\n currentNode.offsetTop + currentNode.clientHeight >\n parentNode.scrollTop + parentNode.clientHeight\n ) {\n // scrollIntoView with bottom aligned\n currentNode.scrollIntoView({ block: \"nearest\" });\n }\n }\n }, [active]);\n\n return (\n
  • \n {children}\n
  • \n );\n};\n\nexport const DateRangePickerSelect = ({\n id,\n label,\n selected,\n dataSource,\n renderOption,\n onSelect,\n isActive,\n innerRef,\n \"aria-labelledby\": labeledBy,\n ...props\n}: DateRangePickerSelectProps): JSX.Element => {\n const ulRef = React.useRef(null);\n const buttonRef = React.useRef(null);\n\n React.useImperativeHandle(innerRef, () => ({\n ul: ulRef.current,\n button: buttonRef.current,\n }));\n\n const [state, setState] = React.useState(() => {\n return {\n isFocused: false,\n activeIdx: dataSource.findIndex(isActive),\n };\n });\n\n const handleBlur = (e: React.FocusEvent): void => {\n e.stopPropagation();\n\n if (e.currentTarget === e.target) {\n console.log(\"blur (self)\");\n setState((prev) => ({ ...prev, isFocused: false }));\n }\n if (!e.currentTarget.contains(e.relatedTarget as Node)) {\n console.log(\"focusleave\");\n setState((prev) => ({ ...prev, isFocused: false }));\n }\n };\n\n const handleUlKeyDown = (e: React.KeyboardEvent): void => {\n switch (e.key) {\n case \"Escape\": {\n setState((prev) => ({\n ...prev,\n isFocused: false,\n }));\n buttonRef.current.focus();\n break;\n }\n\n case \"ArrowUp\": {\n e.preventDefault();\n setState((prev) => {\n let nextActiveIdx = prev.activeIdx - 1;\n\n if (nextActiveIdx < 0) {\n nextActiveIdx = dataSource.length - 1;\n }\n\n return {\n ...prev,\n activeIdx: nextActiveIdx,\n };\n });\n break;\n }\n\n case \"ArrowDown\": {\n e.preventDefault();\n setState((prev) => {\n let nextActiveIdx = prev.activeIdx + 1;\n\n if (nextActiveIdx > dataSource.length - 1) {\n nextActiveIdx = 0;\n }\n\n return {\n ...prev,\n activeIdx: nextActiveIdx,\n };\n });\n break;\n }\n\n case \"Home\": {\n e.preventDefault();\n setState((prev) => ({\n ...prev,\n activeIdx: 0,\n }));\n break;\n }\n\n case \"End\": {\n e.preventDefault();\n setState((prev) => ({\n ...prev,\n activeIdx: dataSource.length - 1,\n }));\n break;\n }\n\n case \"Enter\": {\n e.preventDefault();\n setState((prev) => ({\n ...prev,\n isFocused: false,\n }));\n buttonRef.current.focus();\n break;\n }\n }\n };\n\n const onSelectRef = React.useRef(onSelect);\n\n React.useEffect(() => {\n onSelectRef.current = onSelect;\n });\n\n React.useEffect(() => {\n if (onSelectRef.current && dataSource) {\n onSelectRef.current(dataSource[state.activeIdx], state.activeIdx);\n }\n }, [dataSource, state.activeIdx]);\n\n React.useEffect(() => {\n if (state.isFocused) {\n ulRef.current.focus();\n }\n }, [state.isFocused]);\n\n const btnId = `${id}__toggle-btn`;\n\n return (\n
    \n {\n e.preventDefault();\n setState((prev) => ({\n ...prev,\n isFocused: true,\n }));\n\n ulRef.current.focus();\n }}\n onKeyDown={(e) => {\n const { key } = e;\n\n switch (key) {\n case \"ArrowUp\": {\n e.preventDefault();\n setState((prev) => {\n let nextActiveIdx = prev.activeIdx - 1;\n\n if (nextActiveIdx < 0) {\n nextActiveIdx = dataSource.length - 1;\n }\n\n return {\n ...prev,\n isFocused: true,\n activeIdx: nextActiveIdx,\n };\n });\n break;\n }\n\n case \"ArrowDown\": {\n e.preventDefault();\n setState((prev) => {\n let nextActiveIdx = prev.activeIdx + 1;\n\n if (nextActiveIdx > dataSource.length - 1) {\n nextActiveIdx = 0;\n }\n\n return {\n ...prev,\n isFocused: true,\n activeIdx: nextActiveIdx,\n };\n });\n break;\n }\n }\n }}\n >\n {label}{\" \"}\n p.theme.timingFnEaseOut};\n `}\n style={{\n transform: state.isFocused\n ? \"rotate3d(1, 0, 0, 180deg)\"\n : \"rotate3d(1, 0, 0, 0deg)\",\n }}\n />\n \n \n {dataSource.map((n, idx) => {\n return (\n {\n setState((prev) => ({\n ...prev,\n isFocused: false,\n activeIdx: idx,\n }));\n onSelect(n, idx);\n }}\n aria-selected={idx === state.activeIdx}\n active={idx === state.activeIdx}\n >\n {renderOption(n, idx)}\n \n );\n })}\n \n
    \n );\n};\n","import * as React from \"react\";\nimport {\n DateRangePickerSelect,\n DateRangePickerSelectProps,\n} from \"./DateRangePickerSelect\";\n\n// import styled from \"styled-components\";\n\nexport interface DateRangePickerHeaderProps {\n id: string;\n year: number;\n month: number;\n onMonthChange?: (month: number) => void;\n onYearChange?: (year: number) => void;\n innerRef?: React.MutableRefObject<{\n monthDropdown: DateRangePickerSelectProps[\"innerRef\"][\"current\"];\n yearDropdown: DateRangePickerSelectProps[\"innerRef\"][\"current\"];\n }>;\n}\n\nexport const MONTHS = [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n];\n\nconst CURRENT_YEAR = new Date().getFullYear();\n\nconst YEARS = Array.from({ length: 20 }).map((n, idx) => {\n return CURRENT_YEAR - idx;\n});\n\nexport const DateRangePickerHeader: React.FC = ({\n id,\n year,\n month,\n onMonthChange,\n onYearChange,\n innerRef,\n}) => {\n const monthDropdownRef = React.useRef<\n DateRangePickerSelectProps[\"innerRef\"][\"current\"]\n >(null);\n\n const yearDropdownRef = React.useRef<\n DateRangePickerSelectProps[\"innerRef\"][\"current\"]\n >(null);\n\n React.useImperativeHandle(innerRef, () => ({\n monthDropdown: monthDropdownRef.current,\n yearDropdown: yearDropdownRef.current,\n }));\n\n return (\n
    \n \n {MONTHS[month]} {year}\n \n
    \n
    \n \n Select a month\n \n {\n onMonthChange(idx);\n }}\n dataSource={MONTHS}\n renderOption={(month) => month}\n isActive={(value, idx) => {\n return idx === month;\n }}\n aria-labelledby={`${id}-month-label`}\n />\n
    \n
    \n \n Select a year\n \n {\n onYearChange(_year);\n }}\n dataSource={YEARS}\n renderOption={(_year) => _year}\n isActive={(_year, idx) => {\n return _year === year;\n }}\n aria-labelledby={`${id}-year-label`}\n />\n
    \n
    \n
    \n );\n};\n","import * as React from \"react\";\nimport DayPicker, {\n DateUtils,\n DayPickerProps,\n RangeModifier,\n} from \"react-day-picker\";\nimport { createGlobalStyle } from \"styled-components\";\n\nimport {\n DateRangePickerHeader,\n DateRangePickerHeaderProps,\n} from \"./DateRangePickerHeader\";\n\nimport dayjs from \"dayjs\";\nimport { SvgSprite } from \"../SvgSprite\";\n\ntype FilteredDayPickerProps = Omit<\n DayPickerProps,\n \"onDayClick\" | \"modifiers\" | \"selectedDays\"\n>;\n\ninterface Preset {\n range: RangeModifier;\n label: React.ReactNode;\n}\n\nexport interface DateRangePickerProps extends FilteredDayPickerProps {\n id: string;\n\n onChange?: (range: RangeModifier) => void;\n\n from?: Date;\n to?: Date;\n\n innerRef?: React.MutableRefObject<{\n header: DateRangePickerHeaderProps[\"innerRef\"][\"current\"];\n }>;\n\n presets: Preset[];\n onPresetClick: (\n preset: Preset,\n event: React.MouseEvent\n ) => void;\n}\n\nexport const DateRangePicker: React.FC = ({\n id,\n onChange,\n onMonthChange,\n from,\n to,\n innerRef,\n presets,\n onPresetClick,\n ...props\n}) => {\n const [dayPickerStyles, setDayPickerStyles] = React.useState(undefined);\n\n React.useEffect(() => {\n setDayPickerStyles(import(\"react-day-picker/lib/style.css\"));\n }, []);\n\n const GlobalStyles = createGlobalStyle`\n ${dayPickerStyles}\n `;\n\n const [calendarState, setCalendarState] = React.useState(() => {\n return {\n date: from || new Date(),\n };\n });\n\n const modifiers = {\n start: from,\n end: to,\n };\n\n const headerRef =\n React.useRef(null);\n\n React.useImperativeHandle(innerRef, () => ({\n header: headerRef.current,\n }));\n\n return (\n <>\n \n {\n const newDate = dayjs(calendarState.date).set(\"M\", month).toDate();\n setCalendarState((prev) => ({\n ...prev,\n date: newDate,\n }));\n }}\n onYearChange={(year) => {\n const newDate = dayjs(calendarState.date).set(\"y\", year).toDate();\n setCalendarState((prev) => ({\n ...prev,\n date: newDate,\n }));\n }}\n />\n \n {\n const newDate = dayjs(calendarState.date).subtract(1, \"M\").toDate();\n setCalendarState((prev) => ({\n ...prev,\n date: newDate,\n }));\n }}\n aria-label=\"Previous month\"\n >\n \n \n {\n setCalendarState((prev) => ({\n ...prev,\n date: new Date(),\n }));\n }}\n >\n Today\n \n {\n const newDate = dayjs(calendarState.date).add(1, \"M\").toDate();\n setCalendarState((prev) => ({\n ...prev,\n date: newDate,\n }));\n }}\n aria-label=\"Next month\"\n >\n \n \n \n p.theme.linkColor};\n color: #f0f8ff;\n }\n\n .DayPicker-Day {\n border-radius: 0 !important;\n width: 2rem;\n height: 2rem;\n }\n\n .DayPicker-Day--today {\n color: initial;\n font-weight: normal;\n }\n\n .DayPicker-Day--today:not(.DayPicker-Day--selected) {\n position: relative;\n\n &:after {\n content: \"\";\n left: 0.25rem;\n right: 0.25rem;\n bottom: 0.25rem;\n position: absolute;\n border-bottom: 2px solid ${(p) => p.theme.primaryColor};\n }\n }\n `}\n numberOfMonths={1}\n month={calendarState.date}\n onMonthChange={(month) => {\n setCalendarState((prev) => ({\n ...prev,\n date: month,\n }));\n\n if (onMonthChange) {\n onMonthChange(month);\n }\n }}\n selectedDays={[\n from,\n {\n from,\n to,\n },\n ]}\n modifiers={modifiers}\n onDayClick={(...args): void => {\n const range = DateUtils.addDayToRange(args[0], {\n from: from,\n to: to,\n });\n\n if (range.to == null) {\n range.to = range.from;\n }\n\n if (onChange) {\n onChange(range);\n }\n }}\n captionElement={() => {\n return null;\n }}\n navbarElement={(props) => {\n return null;\n }}\n {...props}\n />\n\n
    \n {presets.map((preset, idx) => (\n {\n onPresetClick(preset, e);\n }}\n >\n {preset.label}\n \n ))}\n
    \n \n );\n};\n","import * as React from \"react\";\n\nimport styled, { css } from \"styled-components\";\n\nconst DlWrapper = styled.div`\n margin: 0 -0.5rem;\n`;\n\nconst Dl = styled.dl`\n display: table;\n width: 100%;\n margin-bottom: 0;\n`;\n\nconst DlDiv = styled.div`\n display: table-row;\n`;\n\nconst SharedDtDdStyles = css`\n display: table-cell;\n padding: 0.25rem 0.5rem;\n`;\n\nconst Dt = styled.dt.attrs({\n className: \"text-muted small\",\n})`\n ${SharedDtDdStyles}\n font-weight: normal;\n width: 1%;\n min-width: 120px;\n text-align: right;\n`;\n\nconst Dd = styled.dd`\n ${SharedDtDdStyles}\n`;\n\nconst InlineDt = styled.dt.attrs({\n className: \"small\",\n})`\n display: inline;\n &:after {\n content: \": \";\n }\n`;\n\nconst InlineDd = styled.dd.attrs({\n className: \"small\",\n})`\n display: inline;\n`;\n\ninterface DefinitionListItemProps {\n term: React.ReactNode;\n definition: React.ReactNode;\n}\n\nexport const DefinitionListTableItem: React.FC = ({\n term,\n definition,\n}) => {\n return (\n \n
    {term}
    \n
    {definition}
    \n
    \n );\n};\n\nexport const DefinitionListTable: React.FC<{}> = ({ children }) => {\n return (\n \n
    {children}
    \n
    \n );\n};\n\nexport const DefinitionListInlineItem: React.FC = ({\n term,\n definition,\n}) => {\n return (\n
    \n {term}\n {definition}\n
    \n );\n};\n\nexport const DefinitionListInline: React.FC<{}> = ({ children }) => {\n return
    {children}
    ;\n};\n","import * as React from \"react\";\n\nimport { DateRangePicker, DateRangePickerProps } from \"./DateRangePicker\";\n\ninterface State {\n isFocused: boolean;\n}\n\ntype SetState = React.Dispatch>;\n\ntype BtnRef = React.MutableRefObject;\n\ninterface DateRangePickerBtnProps {\n id: string;\n renderDatePicker: (DatePicker: typeof DateRangePicker) => React.ReactNode;\n renderBtn: (setState: SetState, btnRef: BtnRef) => React.ReactNode;\n}\n\ntype DateRangePickerBtnPassedRef = {\n dialog: HTMLDivElement;\n button: HTMLButtonElement;\n};\n\nexport const DateRangePickerBtn = React.forwardRef<\n DateRangePickerBtnPassedRef,\n DateRangePickerBtnProps\n>(({ id, renderDatePicker, renderBtn }, ref) => {\n // only load datepicker on client, see useEffect below\n const [show, setShow] = React.useState(false);\n\n const [state, setState] = React.useState(() => {\n return {\n isFocused: false,\n };\n });\n\n const dialogRef = React.useRef(null);\n const btnRef = React.useRef(null);\n\n React.useImperativeHandle(ref, () => ({\n dialog: dialogRef.current,\n button: btnRef.current,\n }));\n\n React.useEffect(() => {\n if (state.isFocused) {\n // TODO : see if we can get the current today el better\n const el: HTMLDivElement = document.querySelector(\n \".DayPicker-Day--today\"\n );\n\n if (el) {\n el.focus();\n }\n }\n }, [state.isFocused]);\n\n React.useEffect(() => {\n /**\n * We only want to render this on the client and not server,\n * as server time will be used and react mismatch occurs favouring server time\n */\n setShow(true);\n\n const handleBodyClick = (e: MouseEvent): void => {\n if (\n !dialogRef.current.contains(e.target as Node) &&\n !btnRef.current.contains(e.target as Node)\n ) {\n setState((prev) => ({\n ...prev,\n isFocused: false,\n }));\n }\n };\n\n const handleKeyPress = (e: KeyboardEvent): void => {\n const { key } = e;\n if (key === \"Escape\") {\n setState((prev) => ({\n ...prev,\n isFocused: false,\n }));\n }\n };\n\n document.addEventListener(\"click\", handleBodyClick, true);\n window.addEventListener(\"keydown\", handleKeyPress, true);\n\n return (): void => {\n document.removeEventListener(\"click\", handleBodyClick, true);\n window.removeEventListener(\"keydown\", handleKeyPress, true);\n };\n }, []);\n\n return (\n <>\n \n {renderBtn(setState, btnRef)}\n {show && (\n \n {renderDatePicker(DateRangePicker)}\n \n )}\n \n \n );\n});\n","import * as React from \"react\";\nimport { Link, LinkProps, useRouteMatch, Route } from \"react-router-dom\";\n\nimport { Analytics, VolunteerSearchLink } from \"./\";\n\nimport { opportunityStore, useThunkDispatch } from \"@skv/state\";\n\ntype HtmlDivAttributes = React.DetailedHTMLProps<\n React.HTMLAttributes,\n HTMLDivElement\n>;\n\ntype ErrorLayoutProps = React.DetailedHTMLProps<\n React.HTMLAttributes,\n HTMLDivElement\n>;\n\nconst ErrorLayout: React.FC = ({\n children,\n className,\n ...rest\n}) => {\n return (\n
    \n {children}\n
    \n );\n};\n\ninterface DotNetReactRouterStaticContext {\n status?: number;\n}\n\ntype PropertiesOf = {\n [Key in keyof T]: T[Key];\n};\n\ntype WithErrorLayoutProps = {\n wrapperProps?: ErrorLayoutProps;\n} & PropertiesOf;\n\nconst withErrorLayout = (\n Component: React.ComponentType<\n Pick, Exclude>\n >,\n statusCode = 200\n): typeof WithErrorLayout => {\n const displayName = Component.displayName || \"Component\";\n\n const WithErrorLayout = (props: WithErrorLayoutProps): JSX.Element => {\n const { wrapperProps, ...rest } = props;\n\n return (\n <>\n \n \n \n {\n if (props.staticContext) {\n (props.staticContext as DotNetReactRouterStaticContext).status =\n statusCode;\n }\n return null;\n }}\n />\n \n );\n };\n\n WithErrorLayout.displayName = displayName;\n\n return WithErrorLayout;\n};\n\ninterface ErrorContactUsFragmentProps {\n contactUsTo?: string;\n}\n\nexport const Error404Fragment: React.FC = ({\n contactUsTo = \"/help-and-support/contact-us\",\n}) => {\n const isExternal = contactUsTo.slice(0, 4) === \"http\";\n\n return (\n <>\n

    \n This page is missing.{\" \"}\n \n 🤷‍\n \n

    \n

    We can’t find the page you were looking for.

    \n
      \n
    • Check the web address for typos.
    • \n
    • Go back to the previous page.
    • \n
    \n

    \n If you're still stuck, let us know by{\" \"}\n {isExternal ? (\n contacting us\n ) : (\n contacting us\n )}\n .\n

    \n \n );\n};\n\nexport const Error404FragmentWithAnalytics = () => {\n return (\n <>\n \n \n \n );\n};\n\nexport const Error404 = withErrorLayout(\n Error404FragmentWithAnalytics,\n 404\n);\n\nexport const Error500Fragment = ({\n contactUsTo = \"/help-and-support/contact-us\",\n}: ErrorContactUsFragmentProps): JSX.Element => {\n const isExternal = contactUsTo.slice(0, 4) === \"http\";\n\n return (\n <>\n

    \n Something went wrong...{\" \"}\n \n 😞\n \n

    \n

    We're not sure what happened, but one of these might help:

    \n
      \n
    • Go back to the previous page.
    • \n
    • Reload the page.
    • \n
    • Use a different browser or device.
    • \n
    \n

    \n If you're still stuck, let us know by{\" \"}\n {isExternal ? (\n contacting us\n ) : (\n contacting us\n )}\n .\n

    \n \n );\n};\n\nexport const Error500 = withErrorLayout(\n Error500Fragment,\n 500\n);\n\nexport const OrganisationDetails404Fragment = (): JSX.Element => {\n return (\n <>\n

    This organisation isn’t here.

    \n
    \n 🎣\n
    \n

    Sorry this organisation is no longer available.

    \n

    \n You can{\" \"}\n \n search for other organisations\n \n .\n

    \n \n );\n};\n\nexport const OrganisationDetails404 = withErrorLayout>(\n OrganisationDetails404Fragment,\n 404\n);\n\nexport const OpportunityDetails404Fragment = (): JSX.Element => {\n return (\n <>\n

    \n This opportunity has gone. 🚢\n

    \n

    Sorry this opportunity is no longer available.

    \n

    \n You can{\" \"}\n \n search for current opportunities\n \n .\n

    \n \n );\n};\n\nexport const OpportunityDetails404 = withErrorLayout(\n OpportunityDetails404Fragment,\n 404\n);\n\nexport const ErrorEoiLimitReachedFragment = (): JSX.Element => {\n return (\n
    \n
    \n

    \n You’ve applied for too many applications.{\" \"}\n \n ✋\n \n

    \n\n

    \n To help our community organisations manage the volume applications, we\n limit the number of applications you can make in a day.\n

    \n

    Please come back tomorrow.

    \n
    \n
    \n );\n};\n\ninterface ErrorEoiAppliedFragmentProps {\n organisationTo: LinkProps[\"to\"];\n organisationName: React.ReactNode;\n}\n\nexport const ErrorEoiAppliedFragment: React.FC =\n ({ organisationTo, organisationName }) => {\n return (\n <>\n

    \n You’ve already applied.{\" \"}\n \n ✋\n \n

    \n\n

    \n Thanks for your application.\n
    \n To get an update on your application you can contact{\" \"}\n {organisationName} directly.\n

    \n \n );\n };\n\nexport const ErrorEoiApplied = (): JSX.Element => {\n const match = useRouteMatch<{\n id: string;\n }>();\n\n const { data } = opportunityStore.hooks.useOpportunity(match.params.id);\n\n const { organisation } = data || {};\n\n const dispatch = useThunkDispatch();\n\n React.useEffect(() => {\n return (): void => {\n dispatch({\n type: \"OPPORTUNITY:ERROR:RESET\",\n });\n };\n }, [dispatch]);\n\n return (\n \n \n \n );\n};\n\nexport const ErrorEoiLimitReached = (): JSX.Element => {\n const dispatch = useThunkDispatch();\n\n React.useEffect(() => {\n return (): void => {\n dispatch({\n type: \"OPPORTUNITY:ERROR:RESET\",\n });\n };\n }, [dispatch]);\n\n return (\n \n \n \n );\n};\n","import * as React from \"react\";\nimport { useLocation } from \"react-router-dom\";\n\nimport { Error500 } from \"./Errors\";\n\ninterface ErrorBoundaryState {\n hasError: boolean;\n}\n\nconst usePrevious = (value: T): T => {\n const ref = React.useRef();\n\n React.useEffect(() => {\n ref.current = value;\n });\n return ref.current;\n};\n\ninterface LocationErrorResetProps {\n resetError: () => void;\n hasError: boolean;\n}\n\nconst LocationErrorReset: React.FC = ({\n resetError,\n hasError,\n}) => {\n const location = useLocation();\n const prevHasError = usePrevious(hasError);\n\n React.useEffect(() => {\n if (prevHasError) {\n resetError();\n }\n }, [location, prevHasError, resetError]);\n\n return null;\n};\n\nexport class ErrorBoundary extends React.Component<{}, ErrorBoundaryState> {\n constructor(props) {\n super(props);\n this.state = { hasError: false };\n\n this.resetError = this.resetError.bind(this);\n }\n\n resetError(): void {\n this.setState({\n hasError: false,\n });\n }\n\n static getDerivedStateFromError(error): ErrorBoundaryState {\n console.log(error);\n // Update state so the next render will show the fallback UI.\n return { hasError: true };\n }\n\n componentDidCatch(error, errorInfo): void {\n console.log(error);\n // You can also log the error to an error reporting service\n // logErrorToMyService(error, errorInfo);\n }\n\n render(): React.ReactNode {\n const { children } = this.props;\n\n return (\n <>\n \n {this.state.hasError ? : children}\n \n );\n }\n}\n","import dayjs from \"dayjs\";\n\ninterface EventBadgeProps {\n date: string;\n}\n\nexport const EventBadge = (props: EventBadgeProps) => {\n const now = new Date();\n const nowDate = `${now.getFullYear()}-${now.getMonth() + 1}-${now.getDate()}`;\n const daysToGo = dayjs(props.date).diff(nowDate, \"days\");\n\n let badgeContent: string;\n const badgeClass: string[] = [\"badge-event\"];\n\n switch (true) {\n case daysToGo < 0:\n badgeContent = \"Past event\";\n break;\n case daysToGo <= 7:\n badgeContent = \"Within 7 days\";\n badgeClass.push(\"badge-tertiary\");\n break;\n case daysToGo <= 30:\n badgeContent = \"Within a month\";\n badgeClass.push(\"badge-primary\");\n break;\n default:\n badgeContent = \"Over four weeks away\";\n badgeClass.push(\"badge-danger\");\n break;\n }\n\n if (badgeContent === \"Past event\") {\n return null;\n }\n\n return {badgeContent};\n};\n","import type { FriendlyKeyValueUrl, KeyValue, PageEnvelope } from \"@skv/core\";\nimport {\n EventBadge,\n EventCarousel,\n ResultMetaList,\n ResultMetaListItem,\n} from \"@skv/core\";\nimport { getDateRange, resizeImg } from \"@skv/util\";\nimport { format } from \"date-fns\";\nimport { useEffect, useState } from \"react\";\nimport { Dropdown } from \"react-bootstrap\";\n\ntype EventsViewModel = {\n events: EventData[];\n oneOffOpportunitiesUrl: string;\n eventOpportunitiesUrl: string;\n states: FriendlyKeyValueUrl[];\n};\n\ntype EventData = {\n id: number;\n name: string;\n startDate: string;\n endDate: string;\n location: string;\n friendlyName: string;\n url: string;\n organisationName: string;\n organisationLogoUrl: string | null;\n};\n\ninterface EventDiscoverySliderProps {\n country: \"Australia\" | \"New Zealand\";\n}\n\nasync function fetchCarouselData(stateId?: number) {\n const location = stateId ? `stateId=${stateId}&` : \"\";\n const date = format(new Date(), \"yyyy-MM-dd\");\n return await fetch(`/volunteering/events?${location}date=${date}`)\n .then>((res) => {\n if (res.ok) {\n return res.json();\n }\n throw new Error(\"Server Error\");\n })\n .then(({ data }) => data);\n}\n\nexport const EventDiscoverySlider = (props: EventDiscoverySliderProps) => {\n const [selectedState, setSelectedState] = useState();\n const [data, setData] = useState({\n events: [],\n oneOffOpportunitiesUrl: \"\",\n eventOpportunitiesUrl: \"\",\n states: [],\n });\n\n useEffect(() => {\n const getData = async () => {\n const res = await fetchCarouselData(selectedState?.id);\n setData(res);\n };\n\n getData();\n }, [selectedState]);\n\n const handleLocationChange = async (stateId?: number) => {\n if (stateId !== selectedState?.id) {\n setSelectedState(() => data.states.find((s) => s.id === stateId));\n }\n };\n\n if (data.events.length < 4 && !selectedState) {\n // Less than 4 events country wide => hide the carousel\n return null;\n }\n\n return (\n
    \n
    \n
    \n

    Get started

    \n Find an event in your local community\n
    \n
    \n \n Location\n \n\n \n
    \n
    \n {data.events.length > 0 ? (\n
    \n \n {data.events.map((item, idx) => (\n \n ))}\n \n
    \n \n Browse allevents\n \n
    \n
    \n ) : (\n selectedState && (\n \n )\n )}\n
    \n );\n};\n\nconst CarouselItem = ({ item }: { item: EventData }) => {\n return (\n
    \n e.stopPropagation()}\n >\n
    \n

    \n \n {item.name}\n \n

    \n {item.organisationName}\n
    \n \n
    \n
    \n \n \n {item.location}\n \n {item.startDate && (\n \n {getDateRange(item.startDate, item.endDate)}\n \n )}\n \n
    \n
    \n {item.organisationLogoUrl && (\n
    \n \n
    \n )}\n
    \n \n );\n};\n\ninterface NoEventsInStateProps {\n state: FriendlyKeyValueUrl;\n oneOffOpportunitiesUrl: string;\n}\n\nconst NoEventsInState = (props: NoEventsInStateProps) => {\n return (\n
    \n

    No upcoming events in the {props.state.name}

    \n

    \n Sorry, there are no upcoming events listed at the moment.\n
    \n Maybe try one of the following...\n

    \n \n
    \n );\n};\n\ninterface LocationDropdownProps extends EventDiscoverySliderProps {\n selectedState: KeyValue | undefined;\n onChange: (stateId?: number) => void;\n stateList: FriendlyKeyValueUrl[];\n}\n\nconst LocationDropdown = (props: LocationDropdownProps) => {\n return (\n \n \n {props.selectedState?.name || props.country}\n \n\n \n props.onChange()}\n >\n {props.country}\n \n {props.stateList.map(({ id, name }) => (\n props.onChange(id)}\n >\n {name}\n \n ))}\n \n \n );\n};\n","import { easeExpOut } from \"d3-ease\";\nimport * as React from \"react\";\nimport styled, { keyframes } from \"styled-components\";\n\nimport classNames from \"classnames\";\n\nimport { animated, ForwardedProps, useTrail } from \"react-spring\";\n\nimport { useSelector } from \"react-redux\";\n\nimport { useAnalyticsUtil } from \"../\";\n\nimport { favouritesStore, useThunkDispatch } from \"@skv/state\";\nimport { FAVOURITES_ENUM } from \"@skv/state/src/state/favourites\";\n\nconst HoverAnimation = keyframes`\n 0% {\n transform: rotate(0deg) scale(1);\n }\n\n 100% {\n transform: rotate(0deg) scale(1.2);\n }\n`;\n\nconst ShakeAnimation = keyframes`\n 0% {\n transform: rotate(-10deg) scale(0.9);\n }\n\n 100% {\n transform: rotate(10deg) scale(0.9);\n }\n`;\n\nconst PopShrinkAnimation = keyframes`\n 0% {\n transform: rotate(0deg) scale(1.4);\n }\n\n 100% {\n transform: rotate(0deg) scale(1);\n }\n`;\n\nconst StyledFavBtn = styled.button`\n .heartSvg {\n transition: all 0.2s ${(p): string => p.theme.timingFnEaseOut};\n }\n\n &.mousedown {\n .heartSvg > path {\n fill: ${(p): string => p.theme.dangerColor};\n }\n }\n\n &.mouseup {\n .heartSvg {\n animation: ${PopShrinkAnimation} 0.5s\n ${(p): string => p.theme.timingFnEaseOut};\n }\n &:hover {\n .heartSvg {\n animation: ${PopShrinkAnimation} 0.5s\n ${(p): string => p.theme.timingFnEaseOut};\n }\n }\n }\n\n &:hover {\n .heartSvg {\n animation: ${HoverAnimation} 0.3s\n ${(p): string => p.theme.timingFnEaseOut} forwards;\n }\n }\n\n &:active {\n .heartSvg {\n animation: ${ShakeAnimation} 0.1s ease-in-out infinite alternate !important;\n }\n }\n`;\n\nconst StyledFavInner = styled.span<{\n $isFavourited: boolean;\n}>`\n position: relative;\n font-weight: 400;\n pointer-events: none;\n\n color: ${(p) => p.theme.dangerColor};\n\n .heartSvg > path {\n fill: ${(p) => (p.$isFavourited ? p.theme.dangerColor : \"transparent\")};\n }\n\n &:hover {\n .heartSvg > path {\n fill: ${(p) => (p.$isFavourited ? p.theme.dangerColor : \"transparent\")};\n }\n }\n`;\n\nconst HeartSvg = styled(animated.svg)`\n position: absolute;\n top: 0;\n left: 0;\n`;\n\nconst heartPath = (\n \n);\n\nexport interface BaseFavouriteBtnProps {\n animationDuration?: number;\n type: FAVOURITES_ENUM;\n isFavourited: boolean;\n onFavourite: () => void;\n onUnfavourite: () => void;\n}\n\ntype AnimationTrail = ForwardedProps<{\n config: {\n duration: number;\n easing: (t: number) => number;\n };\n opacity: 0 | 1;\n y: number;\n}>[];\n\nexport const BaseFavouriteBtn = ({\n animationDuration = 800,\n type,\n isFavourited,\n onFavourite,\n onUnfavourite,\n}: BaseFavouriteBtnProps) => {\n const animationRef = React.useRef(null);\n\n const [isAnimating, setIsAnimating] = React.useState(false);\n const [mouseDown, setMouseDown] = React.useState(false);\n const [mouseUp, setMouseUp] = React.useState(false);\n\n const trail: AnimationTrail = useTrail(3, {\n config: {\n duration: animationDuration,\n easing: easeExpOut,\n },\n opacity: isAnimating ? 0 : 1,\n y: isAnimating ? 1 : 0,\n });\n\n const handleMouseDown = () => setMouseDown(true);\n const handleMouseUp = () => setMouseDown(false);\n const handleMouseOut = () => {\n if (mouseDown) {\n setMouseDown(false);\n }\n };\n\n const handleToggleFavourite = React.useCallback(() => {\n if (isFavourited) {\n onUnfavourite();\n return;\n }\n\n onFavourite();\n\n if (isAnimating) {\n clearTimeout(animationRef.current);\n }\n\n setMouseUp(true);\n setIsAnimating(true);\n\n animationRef.current = setTimeout(() => {\n setIsAnimating(false);\n setMouseUp(false);\n }, animationDuration);\n }, [\n animationDuration,\n isAnimating,\n isFavourited,\n onFavourite,\n onUnfavourite,\n ]);\n\n const BtnInner = () => {\n return (\n \n {/* Animating hearts you see on click */}\n {isAnimating && }\n\n {/* Svg Heart icon */}\n \n {heartPath}\n \n\n {/* Text for the favourites button */}\n {type === FAVOURITES_ENUM.OPPORTUNITY ? (\n Favourite opportunity\n ) : (\n Favourite organisation\n )}\n \n );\n };\n\n return (\n \n \n \n );\n};\n\n// Container Favourites Btn\n\nexport interface FavouriteBtnProps {\n id: number;\n type: FAVOURITES_ENUM;\n onFavourite?: (isFavourited: boolean) => void;\n}\n\nexport const FavouriteBtn = ({ id, type, onFavourite }: FavouriteBtnProps) => {\n const dispatch = useThunkDispatch();\n const onFavouriteRef = React.useRef(onFavourite);\n const { trackPageLink } = useAnalyticsUtil();\n\n const isFavourited = useSelector(\n favouritesStore.selectors.isFavourite(id, type)\n );\n\n React.useEffect(() => {\n onFavouriteRef.current = onFavourite;\n });\n\n const handleFavourite = React.useCallback(() => {\n dispatch(favouritesStore.actions.addFavourite(id, type));\n\n trackPageLink(\n type === FAVOURITES_ENUM.OPPORTUNITY\n ? \"favourite-opportunity\"\n : \"favourite-organisation\"\n );\n\n if (onFavouriteRef.current) {\n onFavouriteRef.current(true);\n }\n }, [dispatch, id, trackPageLink, type]);\n\n const handleUnfavourite = React.useCallback(() => {\n dispatch(favouritesStore.actions.removeFavourite(id, type));\n trackPageLink(\n type === FAVOURITES_ENUM.OPPORTUNITY\n ? \"remove-favourite-opportunity\"\n : \"remove-favourite-organisation\"\n );\n\n if (onFavouriteRef.current) {\n onFavouriteRef.current(false);\n }\n }, [dispatch, id, trackPageLink, type]);\n\n return (\n \n );\n};\n\ninterface BtnAnimationProps {\n animationTrail: AnimationTrail;\n}\n\nconst BtnAnimation = (props: BtnAnimationProps) => {\n const seed1 = Math.random();\n const seed2 = Math.random();\n const seed3 = Math.random();\n\n return (\n p.theme.dangerColor};\n top: 0;\n left: 0;\n display: inline-block;\n `}\n >\n {props.animationTrail.map(({ y, ...rest }, idx) => (\n \n `translate3d(${\n idx !== 0\n ? y * Math.ceil(seed1 * 5 + 10) * (idx % 2 ? -1 : 1)\n : 0\n }px , -${idx !== 0 ? y * 20 : y * 30}px, 0) scale(${\n 0.2 + y * 0.8\n }) rotate(${\n idx !== 0\n ? 45 - Math.ceil((idx === 1 ? seed2 : seed3) * 90)\n : 0\n }deg)`\n ),\n }}\n width={18}\n height={16}\n aria-hidden\n >\n {heartPath}\n \n ))}\n \n );\n};\n","import { RootState } from \"../\";\nimport { FAVOURITES_ENUM } from \"./types\";\n\nexport function isFavourite(id: number, type: FAVOURITES_ENUM) {\n return (state: RootState): boolean => {\n const listName =\n type === FAVOURITES_ENUM.OPPORTUNITY ? \"opportunities\" : \"organisations\";\n\n return Object.keys(state.favourites[listName]).includes(`${id}`);\n };\n}\n","import * as React from \"react\";\nimport { Collapse } from \"react-bootstrap\";\nimport { SvgSprite } from \"./SvgSprite\";\n\ninterface FooterProps {\n copyright: string;\n featuredCategories?: React.ReactNode;\n hiddenCategories?: React.ReactNode;\n featuredCities?: React.ReactNode;\n socialMedia: React.ReactNode;\n volunteersSection: React.ReactNode;\n organisationsSection: React.ReactNode;\n legalSection: React.ReactNode;\n acknowledgementOfCountry?: React.ReactNode;\n showQuickSearch?: boolean;\n}\n\nexport const Footer: React.FC = ({\n copyright,\n featuredCategories,\n hiddenCategories,\n featuredCities,\n socialMedia,\n volunteersSection,\n organisationsSection,\n legalSection,\n acknowledgementOfCountry,\n showQuickSearch = true,\n}) => {\n const [categoriesExpanded, setCategoriesExpanded] = React.useState(false);\n\n const toggleExpandCategories = React.useCallback((e): void => {\n e.preventDefault();\n setCategoriesExpanded((state) => !state);\n }, []);\n\n return (\n
    \n
    \n {/* Quick Search */}\n {showQuickSearch === true && (\n
    \n

    Quick Search

    \n
      \n {typeof hiddenCategories !== \"undefined\" &&\n typeof featuredCategories !== \"undefined\" && (\n
    • \n

      Categories

      \n
        \n {featuredCategories}\n
      • \n \n View all\n p.theme.timingFnEaseOut};\n `}\n style={{\n transform: categoriesExpanded\n ? \"rotate3d(1,0,0,180deg)\"\n : \"rotate3d(0,0,0,0deg)\",\n }}\n />\n \n
      • \n
      \n {/* View all categories */}\n \n
      \n p.theme.timingFnEaseOut};\n `}\n >\n {hiddenCategories}\n
    \n
    \n \n \n )}\n {typeof featuredCities !== \"undefined\" && (\n
  • \n

    Major Cities

    \n
      {featuredCities}
    \n
  • \n )}\n \n \n )}\n
    \n
    \n
    \n
    \n
    \n

    SEEK Volunteer

    \n
      {volunteersSection}
    \n
    \n
    \n
    \n
    \n

    Organisations

    \n
      \n {organisationsSection}\n
    \n
    \n
    \n
    \n
    \n

    Social Media

    \n
      {socialMedia}
    \n
    \n
    \n
    \n
    \n
    \n\n {acknowledgementOfCountry}\n\n
    \n
    \n
    \n
      \n {legalSection}\n
    \n
    \n
    \n\n
    © {copyright}
    \n
    \n \n
    \n );\n};\n","import * as React from \"react\";\nimport classNames from \"classnames\";\n\nexport interface HelpTextProps {\n helpId: string;\n helpText: React.ReactNode;\n className?: React.HTMLAttributes[\"className\"];\n}\n\nexport const HelpText: React.FC = ({\n helpId,\n helpText,\n className,\n}) => {\n return (\n \n {helpText}\n \n );\n};\n","import classNames from \"classnames\";\n\nimport { SvgSprite } from \"../SvgSprite\";\n\ninterface FormValidationErrorProps {\n errorId: string;\n message: React.ReactNode;\n className?: string;\n}\n\nexport const ValidationError: React.FC = ({\n errorId,\n message,\n className,\n}) => {\n return (\n \n \n {message}\n \n );\n};\n","import * as React from \"react\";\nimport { useFormBag } from \"react-yup\";\nimport { HelpText, HelpTextProps } from \"./HelpText\";\nimport { ValidationError } from \"./ValidationError\";\n\nimport classNames from \"classnames\";\n\ninterface FieldsetProps {\n legend: React.ReactNode;\n optional?: boolean;\n helpText?: HelpTextProps[\"helpText\"];\n data: {\n name: string;\n id: number;\n }[];\n name: string;\n type: \"radio\" | \"checkbox\";\n disabled?: boolean;\n}\n\nexport const Legend: React.FC<\n React.DetailedHTMLProps<\n React.HTMLAttributes,\n HTMLLegendElement\n >\n> = ({ children, ...rest }) => {\n return (\n \n {children}\n \n );\n};\n\nexport const Fieldset: React.FC = ({\n legend,\n helpText,\n optional,\n name,\n data,\n type,\n disabled = false,\n}) => {\n const { isTouched, getError, isChecked, field } = useFormBag();\n\n const touched = isTouched(name);\n const error = getError(name);\n\n return (\n \n \n {legend}{\" \"}\n {optional ? (optional) : \"*\"}\n \n {helpText && (\n \n )}\n {error && touched && (\n \n )}\n p.theme.smBreakpoint}) {\n column-count: 2;\n }\n `}\n >\n {data.map((n) => (\n
    \n \n \n {n.name}\n \n
    \n ))}\n \n \n );\n};\n\ninterface FieldsetFlexColumnsProps extends Omit {\n data: {\n name: string;\n id: number;\n }[][];\n}\n\nexport const FieldsetFlexColumns: React.FC = ({\n legend,\n helpText,\n optional,\n name,\n data,\n type,\n disabled = false,\n}) => {\n const { isTouched, getError, isChecked, field } = useFormBag();\n\n const touched = isTouched(name);\n const error = getError(name);\n\n return (\n \n \n {legend} {optional && (optional)}\n \n {helpText && (\n \n )}\n {error && touched && (\n \n )}\n
    \n {data.map((col, idx) => (\n \n {col.map((n) => (\n
    \n \n \n {n.name}\n \n
    \n ))}\n
    \n ))}\n \n \n );\n};\n","import classNames from \"classnames\";\nimport dayjs from \"dayjs\";\nimport * as React from \"react\";\nimport { Legend } from \"./Fieldset\";\nimport { HelpText, HelpTextProps } from \"./HelpText\";\nimport { ValidationError } from \"./ValidationError\";\n\n// const CURRENT_DATE = new Date();\nconst CURRENT_DATE = dayjs();\nconst MONTHS = [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n];\n\nconst DAYS = Array.from(Array(31).keys()).map((v) => v + 1);\n\ninterface DateFieldProps {\n id: string;\n name: string;\n label: string;\n optional?: boolean;\n helpText?: HelpTextProps[\"helpText\"];\n value: string;\n error?: string;\n touched?: boolean;\n onChange: (date: dayjs.Dayjs) => void;\n onBlur: (e: React.FocusEvent) => void;\n previousDate?: dayjs.Dayjs | null;\n maxDate: dayjs.Dayjs;\n disabled?: boolean;\n}\n\ntype DateFieldForwardedRef = null | {\n fieldsetRef: HTMLFieldSetElement;\n dayInputRef: HTMLSelectElement;\n monthInputRef: HTMLSelectElement;\n yearInputRef: HTMLSelectElement;\n};\n\nexport const DateField = React.forwardRef<\n DateFieldForwardedRef,\n DateFieldProps\n>(\n (\n {\n id,\n name,\n value,\n error,\n touched,\n optional,\n helpText,\n maxDate,\n onChange,\n onBlur,\n label,\n previousDate,\n disabled = false,\n },\n ref\n ) => {\n const fieldSetRef = React.useRef(null);\n const dayInputRef = React.useRef(null);\n const monthInputRef = React.useRef(null);\n const yearInputRef = React.useRef(null);\n\n React.useImperativeHandle(ref, () => ({\n fieldsetRef: fieldSetRef.current,\n dayInputRef: dayInputRef.current,\n monthInputRef: monthInputRef.current,\n yearInputRef: yearInputRef.current,\n }));\n\n const $onChange = React.useRef(onChange);\n const [date, setDate] = React.useState(() => {\n if (value) {\n return dayjs(value);\n }\n\n if (value === null) {\n return null;\n }\n\n return dayjs();\n });\n\n const { day, month, year, isoDate } = React.useMemo(() => {\n if (date === null) {\n return {\n day: 0,\n month: -1,\n year: 0,\n isoDate: \"\",\n };\n }\n\n return {\n day: date.date(),\n month: date.month(),\n year: date.year(),\n isoDate: date.toISOString(),\n };\n }, [date]);\n\n const handleDayChange = (e) => {\n const value = parseInt(e.target.value, 10);\n const _date = date || dayjs();\n\n setDate(value ? _date.set(\"date\", value) : null);\n };\n\n const handleMonthChange = (e) => {\n const value = parseInt(e.target.value, 10);\n const _date = date || dayjs();\n\n // Note: January is month 0, so -1 is the value for no month selected\n setDate(value >= 0 ? _date.set(\"month\", value) : null);\n };\n\n const handleYearChange = (e) => {\n const value = parseInt(e.target.value, 10);\n const _date = date || dayjs();\n\n setDate(value ? _date.set(\"year\", value) : null);\n };\n\n React.useEffect(() => {\n $onChange.current(date);\n }, [date, $onChange]);\n\n /* Note - Previous year is used for Dates in previous years so it doesn't\n * default to the first item in the dropdown (i.e. the current year)\n */\n const previousYear =\n previousDate && previousDate.year() < CURRENT_DATE.year()\n ? previousDate.year()\n : null;\n const yearsList = Array.from(\n { length: maxDate.year() - CURRENT_DATE.year() + 1 },\n (_, idx) => CURRENT_DATE.year() + idx\n );\n\n return (\n x != null)\n .join(\" \")}\n >\n \n {label ?? \"Expiry date\"}{\" \"}\n {optional ? (optional) : \"*\"}\n \n {helpText && (\n \n )}\n {error && touched && (\n \n )}\n
    \n
    \n \n x != null)\n .join(\" \")}\n >\n {optional && }\n {DAYS.map((v) => (\n \n ))}\n \n
    \n\n
    \n \n x != null)\n .join(\" \")}\n >\n {optional && }\n {MONTHS.map((month, idx) => (\n \n ))}\n \n
    \n\n
    \n \n\n x != null)\n .join(\" \")}\n >\n {optional && }\n {previousYear && (\n \n )}\n {yearsList.map((year) => (\n \n ))}\n \n
    \n \n
    \n \n );\n }\n);\n","import classNames from \"classnames\";\nimport * as React from \"react\";\nimport { useFormBag } from \"react-yup\";\nimport { HelpText, HelpTextProps } from \"./HelpText\";\nimport { ValidationError } from \"./ValidationError\";\n\ntype LabelProps = React.DetailedHTMLProps<\n React.LabelHTMLAttributes,\n HTMLLabelElement\n>;\n\ninterface BaseFieldProps {\n id: string;\n name: string;\n label: string;\n labelProps?: LabelProps;\n helpText?: HelpTextProps[\"helpText\"];\n optional?: boolean;\n wrapperProps?: React.DetailedHTMLProps<\n React.HTMLAttributes,\n HTMLElement\n >;\n isInvalid?: boolean;\n}\n\ninterface PureFieldProps extends FieldProps {\n error?: React.ReactNode;\n touched?: boolean;\n labelSimple?: boolean;\n}\n\nexport const PureField: React.FC = React.memo(\n ({\n id,\n name,\n label,\n labelProps,\n value,\n optional,\n error,\n touched,\n helpText,\n autoComplete,\n \"aria-describedby\": ariaDescribedBy,\n labelSimple,\n ...rest\n }) => {\n return (\n
    \n \n {helpText && (\n \n )}\n {error && touched && (\n \n )}\n x != null)\n .join(\" \")}\n {...rest}\n />\n
    \n );\n }\n);\n\ntype FieldPropsOmit = Omit<\n React.DetailedHTMLProps<\n React.InputHTMLAttributes,\n HTMLInputElement\n >,\n \"id\" | \"name\"\n>;\n\ninterface FieldProps extends FieldPropsOmit, BaseFieldProps {}\n\nexport const Field: React.FC = (props) => {\n const { name } = props;\n const { getValue, getError, isTouched } = useFormBag();\n\n const value = getValue(name) || \"\";\n const error = getError(name);\n const touched = isTouched(name);\n\n return (\n \n );\n};\n\ntype TextAreaPropsOmit = Omit<\n React.DetailedHTMLProps<\n React.TextareaHTMLAttributes,\n HTMLTextAreaElement\n >,\n \"id\" | \"name\"\n>;\n\ninterface TextAreaProps extends BaseFieldProps, TextAreaPropsOmit {}\n\ninterface PureTextAreaProps extends BaseFieldProps, TextAreaPropsOmit {\n error?: string;\n touched?: boolean;\n}\n\nexport const PureTextArea: React.FC = ({\n id,\n name,\n label,\n labelProps,\n helpText,\n optional,\n error,\n touched,\n value,\n ...rest\n}) => {\n return (\n
    \n \n {helpText && }\n {error && touched && (\n \n )}\n\n \n
    \n );\n};\n\nexport const TextArea: React.FC = (props) => {\n const { name } = props;\n const { getValue, getError, isTouched } = useFormBag();\n\n const value = getValue(name) || \"\";\n const error = getError(name);\n const touched = isTouched(name);\n\n return (\n \n );\n};\n\ntype SelectPropsOmit = Omit<\n React.DetailedHTMLProps<\n React.SelectHTMLAttributes,\n HTMLSelectElement\n >,\n \"id\" | \"name\"\n>;\n\ninterface SelectProps extends BaseFieldProps, SelectPropsOmit {}\n\nexport const Select: React.FC = ({\n name,\n id,\n label,\n labelProps,\n wrapperProps,\n helpText,\n optional,\n children,\n ...rest\n}) => {\n const { getValue, getError, isTouched } = useFormBag();\n\n const value = getValue(name) || \"\";\n const error = getError(name);\n const touched = isTouched(name);\n\n return (\n
    \n \n {helpText && }\n {error && touched && (\n \n )}\n \n {children}\n \n
    \n );\n};\n\ntype CheckPropsOmit = Omit<\n React.DetailedHTMLProps<\n React.InputHTMLAttributes,\n HTMLInputElement\n >,\n \"id\" | \"name\" | \"type\" | \"ref\"\n>;\ninterface CheckProps\n extends Omit,\n CheckPropsOmit {\n type: \"radio\" | \"checkbox\" | \"switch\";\n inline?: boolean;\n}\n\nexport const Check = React.forwardRef(\n (\n { id, name, type, label, inline = true, wrapperProps, isInvalid, ...rest },\n ref\n ) => {\n return (\n \n \n \n \n );\n }\n);\n\n/*\n TODO : This is a special case for when we want to do something on unmount\n Figure out potentially a better way/move to SKV.AdminAU/pages/Opportunity?\n*/\ninterface CheckWithUnmountProps extends CheckProps {\n onUnmount: () => void;\n}\n\nexport const CheckWithUnmount = React.forwardRef<\n HTMLInputElement,\n CheckWithUnmountProps\n>(({ onUnmount, ...props }, ref) => {\n React.useEffect(() => {\n return onUnmount;\n }, []);\n\n return ;\n});\n","import { Field } from \"react-yup\";\nimport { Form } from \"@skv/core\";\nimport { useState, useEffect } from \"react\";\nimport classNames from \"classnames\";\n\nexport interface PasteInputProps {\n id: string;\n value?: string;\n touched?: boolean;\n error?: string;\n field: Field;\n label: React.ReactFragment | string;\n helpText?: React.ReactFragment | string;\n onPaste: (fromClipboard: string) => void;\n className?: string;\n labelProps?: React.LabelHTMLAttributes;\n helpTextProps?: React.HTMLAttributes;\n inputProps?: React.InputHTMLAttributes;\n buttonProps?: React.ButtonHTMLAttributes;\n inputWrapperProps?: React.HTMLAttributes;\n customValidationError?: React.ReactNode;\n}\n\nexport const PasteInput = (props: PasteInputProps) => {\n const [canCopyText, setCanCopyText] = useState(false);\n useEffect(() => {\n if (\"readText\" in navigator.clipboard) {\n setCanCopyText(true);\n }\n }, []);\n\n const onPaste = async () => {\n if (\"readText\" in navigator.clipboard) {\n const fromClipboard = await navigator.clipboard.readText();\n if (fromClipboard) {\n props.onPaste(fromClipboard);\n }\n }\n };\n\n return (\n
    \n \n\n {props.helpText && (\n \n {props.helpText}\n \n )}\n\n {props.touched && props.error && !props.customValidationError && (\n \n )}\n\n
    \n \n {canCopyText && (\n
    \n \n
    \n )}\n
    \n {props.touched && props.error && props.customValidationError}\n
    \n );\n};\n","import React from \"react\";\n\ntype RadioSwitchProps = Omit<\n React.InputHTMLAttributes,\n \"type\" | \"name\"\n> & {\n name: string;\n label: string;\n};\n\nexport const RadioSwitch = (props: RadioSwitchProps) => {\n const radioSwitchId = props.id || props.name;\n\n return (\n
    \n \n \n
    \n );\n};\n","import { useEffect, useMemo, useRef, useState } from \"react\";\n\nimport {\n Select,\n SelectArrow,\n SelectItem,\n SelectItemCheck,\n SelectLabel,\n SelectPopover,\n SelectState,\n useSelectState,\n} from \"ariakit/select\";\n\nimport { SvgSprite, TooltipPopover } from \"@skv/core\";\nimport classNames from \"classnames\";\nimport { timingFunctions } from \"polished\";\n\ntype BaseItem = {\n id: string;\n name: string;\n};\n\ntype LabelProps = React.DetailedHTMLProps<\n React.LabelHTMLAttributes,\n HTMLLabelElement\n>;\n\ntype SelectProps = React.DetailedHTMLProps<\n React.SelectHTMLAttributes,\n HTMLSelectElement\n>;\n\ninterface SelectMultiProps {\n id: string;\n label: string;\n labelProps?: LabelProps;\n selectProps?: SelectProps;\n name?: string;\n items: T[];\n defaultValue?: string | string[] | undefined;\n categoryTitle?: string;\n categoryType?: string;\n className?: string;\n onUpdateField: (value: string) => void;\n onClear?: () => void;\n onDropdownOpen?: () => void;\n renderValue?: (\n selectState: SelectState,\n itemMap: Map\n ) => React.ReactNode;\n}\n\nexport const SelectMulti = ({\n id,\n label,\n labelProps,\n selectProps,\n items,\n name,\n className,\n categoryTitle = \"Nothing selected\",\n categoryType = \"items selected\",\n onUpdateField,\n renderValue,\n onClear,\n onDropdownOpen,\n defaultValue = [],\n}: SelectMultiProps) => {\n const selectState = useSelectState({\n value: defaultValue,\n sameWidth: true,\n });\n\n const itemMap = useMemo(() => {\n const map = new Map();\n items.forEach((item) => {\n map.set(item.id, item);\n });\n\n return map;\n }, [items]);\n\n const selectMultiButtonRef = useRef(null);\n const [isTooltipVisible, setIsTooltipVisible] = useState(false);\n\n useEffect(() => {\n if (selectState.mounted) {\n onDropdownOpen && onDropdownOpen();\n }\n }, [selectState.mounted, onDropdownOpen]);\n\n return (\n
    \n \n {label}\n \n
    \n \n \n {(() => {\n if (renderValue) {\n return renderValue(selectState, itemMap);\n }\n if (selectState.value.length === 0) {\n return categoryTitle;\n }\n if (selectState.value.length === 1) {\n return itemMap.get(selectState.value[0])?.name;\n }\n return `${selectState.value.length} ${categoryType}`;\n })()}\n \n\n \n \n {selectState.mounted && (\n \n {items.map((x) => (\n {\n onUpdateField(x.id);\n }}\n css={`\n cursor: pointer;\n line-height: 2;\n\n &[data-active-item] {\n background-color: #eee;\n }\n `}\n >\n \n {x.name}\n \n ))}\n \n )}\n {onClear && (\n // Note - this wrapping div is required for screens zoomed in >= 400% to prevent overflow from the clear button.\n \n setIsTooltipVisible(nextShow)}\n >\n .rounded-circle {\n background-color: ${(p): string => p.theme.gray200};\n box-shadow: 1px 1px 3px ${(p): string => p.theme.gray400};\n }\n `}\n onClick={() => {\n onClear();\n selectMultiButtonRef.current?.focus();\n }}\n onKeyDown={(e) => {\n if (e.key === \" \" || e.key === \"Enter\") {\n e.preventDefault();\n onClear();\n setIsTooltipVisible(false);\n selectMultiButtonRef.current?.focus();\n }\n }}\n >\n p.theme.gray200};\n box-shadow: 1px 1px 3px ${(p): string => p.theme.gray400};\n }\n `}\n >\n \n \n \n \n
    \n )}\n
    \n \n \n );\n};\n\nexport default SelectMulti;\n","import * as React from \"react\";\n\ninterface GlobalNavProps {\n active: \"au\" | \"nz\";\n}\n\ninterface GlobalNavLocaleProps {\n active?: boolean;\n href: string;\n}\n\nconst GlobalNavLocale: React.FC = ({\n active,\n href,\n children,\n}) => {\n if (active) {\n return (\n
  • \n \n {children} , current page\n \n
  • \n );\n }\n\n return (\n
  • \n \n {children}\n \n
  • \n );\n};\n\nexport const GlobalNav: React.FC = ({ active }) => {\n return (\n \n );\n};\n","import * as React from \"react\";\nimport { Link } from \"react-router-dom\";\n\nimport { AspectRatio, SvgSprite } from \".\";\n\ninterface HeaderProps {\n adminApplicationUrl: string;\n}\n\nexport const Header: React.FC = ({ adminApplicationUrl }) => {\n if (!adminApplicationUrl) {\n throw Error(\n \"No adminApplicationUrl passed to
    . This should be the url to either au/nz admin url\"\n );\n }\n\n return (\n
    \n
    \n
    \n
    \n \n \n \n \n SEEK Volunteer\n \n
    \n
    \n \n Find Volunteers\n \n
    \n
    \n
    \n
    \n );\n};\n","import * as React from \"react\";\nimport { Helmet } from \"react-helmet\";\n\ninterface HelmetCanonicalProps {\n url: string;\n}\n\n/**\n * @description\n * Wraps \\\n * and \\\n * inside a Helmet component from \"react-helmet\".\n *\n * Also removes trailing slash, and lowercases the pathname\n */\nexport const HelmetCanonical: React.FC = ({\n url: initialUrl,\n}) => {\n const parsedUrl = React.useMemo(() => {\n return new URL(initialUrl);\n }, [initialUrl]);\n\n const pathname = React.useMemo(() => {\n const pathname = parsedUrl.pathname.endsWith(\"/\")\n ? parsedUrl.pathname.substring(0, parsedUrl.pathname.length - 1)\n : parsedUrl.pathname;\n\n return pathname.toLocaleLowerCase();\n }, [parsedUrl]);\n\n const url = `${parsedUrl.origin}${pathname}${parsedUrl.search}`;\n\n return (\n \n \n \n \n );\n};\n","import { forwardRef } from \"react\";\nimport { Popover } from \"react-bootstrap\";\nimport { OverlayInjectedProps } from \"react-bootstrap/esm/Overlay\";\nimport { SvgSprite } from \"./SvgSprite\";\n\ninterface HotTipPopoverProps extends OverlayInjectedProps {\n id: string;\n hotTip: string;\n setCommitmentTooltip: React.Dispatch<\n React.SetStateAction<\"event\" | \"more-than-6-months\">\n >;\n}\n\nexport const HotTipPopover = forwardRef(\n (\n {\n hotTip,\n setCommitmentTooltip,\n placement,\n arrowProps,\n show,\n popper,\n ...rest\n },\n ref\n ) => {\n return (\n p.theme.infoColor};\n }\n }\n `}\n aria-hidden\n {...rest}\n >\n
    \n
    \n
    Hot tip:
    \n {\n e.preventDefault();\n setCommitmentTooltip(null);\n }}\n css={`\n position: absolute;\n top: 0;\n right: 0;\n `}\n className=\"btn btn-link btn-sm text-white p-3 mt-n1 mr-n1 mb-0 border-0\"\n >\n \n \n
    \n {hotTip}\n
    \n \n );\n }\n);\n","import * as React from \"react\";\n// import styled from \"styled-components\";\nimport classNames from \"classnames\";\n\nimport { SvgSprite } from \"./SvgSprite\";\n\ntype AnchorProps = React.DetailedHTMLProps<\n React.AnchorHTMLAttributes,\n HTMLAnchorElement\n>;\n\ninterface IconLinkProps extends AnchorProps {\n icon: string;\n}\n\nexport const IconLink: React.FC = ({\n icon,\n children,\n ...rest\n}) => {\n return (\n \n \n \n \n \n {children}\n \n \n );\n};\n\ntype ButtonProps = React.DetailedHTMLProps<\n React.ButtonHTMLAttributes,\n HTMLButtonElement\n>;\n\ninterface IconButtonProps extends ButtonProps {\n icon: string;\n}\n\nexport const IconLinkBtn: React.FC = ({\n icon,\n className,\n children,\n ...rest\n}) => {\n return (\n \n \n \n \n \n {children}\n \n \n );\n};\n","import * as React from \"react\";\n\nimport { ApplicationInsights } from \"@microsoft/applicationinsights-web\";\n\nconst appInsightsCache: Record = {};\n\nif (typeof window !== \"undefined\") {\n window.appInsightsCache = appInsightsCache;\n}\n\nconst APP_INSIGHTS_INDEXER = \"__APP_INSIGHTS_INSTRUMENTATION_KEY__\";\n\ndeclare const window: {\n [APP_INSIGHTS_INDEXER]?: string | null;\n appInsightsCache?: typeof appInsightsCache;\n};\n\nexport const useAppInsights = (): ApplicationInsights | null => {\n const [appInsights] = React.useState(() => {\n if (typeof window === \"undefined\") {\n return null;\n }\n\n if (\n APP_INSIGHTS_INDEXER in window &&\n window[APP_INSIGHTS_INDEXER] != null\n ) {\n if (appInsightsCache[window[APP_INSIGHTS_INDEXER]]) {\n return appInsightsCache[window[APP_INSIGHTS_INDEXER]];\n }\n\n const appInsights = new ApplicationInsights({\n config: {\n instrumentationKey: window[APP_INSIGHTS_INDEXER],\n },\n });\n\n appInsightsCache[window[APP_INSIGHTS_INDEXER]] = appInsights;\n\n return appInsights;\n }\n\n return null;\n });\n\n React.useEffect(() => {\n if (appInsights) {\n appInsights.loadAppInsights();\n }\n }, []);\n\n return appInsights;\n};\n","import * as React from \"react\";\n\ninterface UseAsyncTypeaheadSettings {\n url: (query: string) => string;\n onSuccess: (data: ServerResponse) => T[];\n defaultOptions?: T[];\n}\n\ninterface UseAsyncTypeaheadResults {\n isLoading: boolean;\n onSearch: (query: string) => Promise;\n options: T[];\n}\n\nexport const useAsyncTypeahead = ({\n url,\n onSuccess,\n defaultOptions = [],\n}: UseAsyncTypeaheadSettings): UseAsyncTypeaheadResults<\n T\n> => {\n const [loading, setLoading] = React.useState(false);\n const [options, setOptions] = React.useState(() => defaultOptions);\n\n const urlFnRef = React.useRef(url);\n const onSuccessFnRef = React.useRef(onSuccess);\n\n const cache = React.useRef>({});\n\n React.useEffect(() => {\n urlFnRef.current = url;\n onSuccessFnRef.current = onSuccess;\n });\n\n const handleSearch = React.useCallback(async (query: string): Promise<\n T[]\n > => {\n query = query.trim();\n\n if (cache.current[query]) {\n setOptions(cache.current[query]);\n return cache.current[query];\n }\n\n setLoading(true);\n\n return fetch(urlFnRef.current(query), {\n method: \"GET\",\n })\n .then((res) => {\n if (res.ok) {\n return res.json();\n }\n throw Error(\"Response not ok\");\n })\n .then(onSuccessFnRef.current)\n .then((result) => {\n setOptions(result);\n cache.current[query] = result;\n return result;\n })\n .finally(() => {\n setLoading(false);\n });\n }, []);\n\n return {\n isLoading: loading,\n onSearch: handleSearch,\n options,\n };\n};\n","import { MutableRefObject, useEffect, useRef } from \"react\";\n\n/**\n * Hook that sets the initial focus to the element when the component is mounted.\n * @param options for the hook allows the conditional focusing of the element.\n * @returns Ref object of the element to set focus.\n */\n\ninterface Options {\n shouldFocus?: boolean;\n}\n\nexport const useInitialFocus = (\n options?: Options\n): MutableRefObject => {\n const elementRef = useRef(null);\n\n useEffect(() => {\n if (options?.shouldFocus === undefined || options?.shouldFocus) {\n elementRef.current?.focus();\n }\n }, [elementRef, options?.shouldFocus]);\n\n return elementRef;\n};\n","import * as React from \"react\";\nimport { useLocation } from \"react-router-dom\";\nimport { OpportunitySearchQueryState } from \"@skv/state\";\n\nimport * as H from \"history\";\n\ninterface ReferrerState {\n searchQuery?: Partial;\n searchType?: \"opp\" | \"org\";\n children?: string;\n}\n\nexport const useReferrer = (): H.LocationDescriptorObject<\n ReferrerState\n> | null => {\n const location = useLocation<{\n referrer?: H.LocationDescriptorObject;\n }>();\n\n const [\n referrer,\n setReferrer,\n ] = React.useState>(null);\n\n React.useEffect(() => {\n if (location.state?.referrer) {\n setReferrer(location.state.referrer);\n }\n }, [location]);\n\n return referrer;\n};\n","import * as React from \"react\";\n\nimport { KeyValue } from \"@skv/core\";\nimport {\n OpportunitySearchQueryState,\n OrganisationSearchQueryState,\n useGlobal,\n} from \"@skv/state\";\n\ntype AvailableFilters =\n | \"categoryList\"\n | \"commitmentList\"\n | \"dayAndTimeList\"\n | \"suitableForList\"\n | \"typeOfWorkList\";\n\ninterface UseFiltersOptions {\n searchQuery: OpportunitySearchQueryState | OrganisationSearchQueryState;\n filters?: AvailableFilters[];\n filterKeyToLabel?: (filter: AvailableFilters) => string;\n filterKeyToName?: (filter: AvailableFilters) => string;\n onChange: (\n query: OpportunitySearchQueryState | OrganisationSearchQueryState\n ) => void;\n}\n\nexport type ResolvedFilter = {\n label: string;\n name: string;\n data: KeyValue[];\n};\n\ninterface UseFiltersReturn {\n filters: ResolvedFilter[];\n handleFiltersChange: (event: React.ChangeEvent) => void;\n handleSelectChange: (fieldName: string, value: number) => void;\n handleSelectClear: (fieldName: string) => void;\n}\n\ntype UseFiltersHook = (options: UseFiltersOptions) => UseFiltersReturn;\n\nexport type FilterName =\n | \"category\"\n | \"commitment\"\n | \"daytime\"\n | \"keyword\"\n | \"suitablefor\"\n | \"typeofwork\"\n | \"where\";\n\nconst defaultFilterKeyToLabel = (filter: AvailableFilters): string => {\n switch (filter) {\n case \"categoryList\":\n return \"Category\";\n case \"commitmentList\":\n return \"Commitment\";\n case \"dayAndTimeList\":\n return \"Day & Time\";\n case \"suitableForList\":\n return \"Suitable for\";\n case \"typeOfWorkList\":\n return \"Type of work\";\n default:\n throw Error(\"Unknown filter key passed\");\n }\n};\n\nconst defaultFilterKeyToName = (filter: AvailableFilters): string => {\n switch (filter) {\n case \"categoryList\":\n return \"category\";\n case \"commitmentList\":\n return \"commitment\";\n case \"dayAndTimeList\":\n return \"daytime\";\n case \"suitableForList\":\n return \"suitablefor\";\n case \"typeOfWorkList\":\n return \"typeofwork\";\n default:\n throw Error(\"Unknown filter key passed\");\n }\n};\n\nconst defaultFilters: AvailableFilters[] = [\n \"categoryList\",\n \"typeOfWorkList\",\n \"suitableForList\",\n \"commitmentList\",\n \"dayAndTimeList\",\n];\n\nexport const useSearchFilters: UseFiltersHook = ({\n searchQuery,\n filters = defaultFilters,\n filterKeyToLabel = defaultFilterKeyToLabel,\n filterKeyToName = defaultFilterKeyToName,\n onChange,\n}) => {\n const global = useGlobal();\n\n const resolvedFilters: ResolvedFilter[] = React.useMemo(() => {\n return filters.map((n) => {\n return {\n label: filterKeyToLabel(n),\n name: filterKeyToName(n),\n data: global[n],\n };\n });\n }, [filterKeyToLabel, filterKeyToName, filters, global]);\n\n const handleFiltersChange = (\n e: React.ChangeEvent\n ): void => {\n const target = e.target;\n const nextSearchQuery = Object.assign({}, searchQuery);\n delete nextSearchQuery.page;\n const value = parseInt(e.target.value, 10);\n\n if (e.target.checked) {\n switch (true) {\n case Array.isArray(nextSearchQuery[target.name]):\n nextSearchQuery[target.name] = [\n ...nextSearchQuery[target.name],\n value,\n ];\n break;\n case !nextSearchQuery[target.name]:\n default:\n nextSearchQuery[target.name] = [value];\n break;\n }\n } else {\n switch (true) {\n case Array.isArray(nextSearchQuery[target.name]):\n nextSearchQuery[target.name] = nextSearchQuery[target.name].filter(\n (val) => val !== value\n );\n break;\n default:\n nextSearchQuery[target.name] = [];\n break;\n }\n }\n\n onChange(nextSearchQuery);\n };\n\n const handleSelectChange = (fieldName: string, value: number): void => {\n const nextSearchQuery = Object.assign({}, searchQuery);\n delete nextSearchQuery.page;\n\n if (Array.isArray(nextSearchQuery[fieldName])) {\n if (nextSearchQuery[fieldName].includes(value)) {\n nextSearchQuery[fieldName] = nextSearchQuery[fieldName].filter(\n (n) => n !== value\n );\n } else {\n nextSearchQuery[fieldName] = [...nextSearchQuery[fieldName], value];\n }\n } else {\n nextSearchQuery[fieldName] = [value];\n }\n\n onChange(nextSearchQuery);\n };\n\n const handleSelectClear = (fieldName: string): void => {\n const nextSearchQuery = Object.assign({}, searchQuery);\n delete nextSearchQuery.page;\n\n nextSearchQuery[fieldName] = [];\n onChange(nextSearchQuery);\n };\n\n return {\n filters: resolvedFilters,\n handleFiltersChange,\n handleSelectChange,\n handleSelectClear,\n };\n};\n","import * as React from \"react\";\nimport { escapeRegExp } from \"lodash-es\";\n\nexport interface HighlighterProps {\n children: string;\n filter: string;\n}\n\nexport const Highlighter = ({\n children,\n filter,\n}: HighlighterProps): JSX.Element => {\n const filterLowerCase = filter.toLowerCase();\n\n const parts = children\n .split(new RegExp(`(${escapeRegExp(filter)})`, \"gi\"))\n .filter((n) => !!n)\n .map((n, idx) => {\n if (n.toLowerCase() === filterLowerCase) {\n return (\n \n {n}\n \n );\n }\n\n return n;\n });\n\n return <>{parts.map((n) => n)};\n};\n","import * as React from \"react\";\nimport classNames from \"classnames\";\n\ntype GeneratedListItemProps = {\n id: string;\n ref: React.MutableRefObject;\n className: string;\n style: React.CSSProperties;\n onClick: (event: React.MouseEvent) => void;\n role: string;\n \"aria-label\": string;\n \"aria-selected\": boolean;\n};\n\nexport interface ListItemProps {\n id: string;\n active: boolean;\n label: string;\n onClick: (event: React.MouseEvent) => void;\n value: T;\n children: React.ReactNode;\n listBoxRef: React.MutableRefObject;\n className?: string;\n\n render: (listItemProps: GeneratedListItemProps) => JSX.Element;\n}\n\nexport const ListItem = ({\n id,\n active,\n label,\n value,\n onClick,\n children,\n listBoxRef,\n className,\n\n render,\n}: ListItemProps): JSX.Element => {\n const ref = React.useRef(null);\n\n React.useEffect(() => {\n if (!active) {\n return;\n }\n\n if (ref.current) {\n const parentNode = listBoxRef.current;\n const currentNode = ref.current;\n\n /* - delta */\n if (currentNode.offsetTop < parentNode.scrollTop) {\n // scrollIntoView with top aligned\n currentNode.scrollIntoView({ block: \"nearest\" });\n // parentNode.scrollTop = currentNode.offsetTop;\n }\n\n /* + delta */\n if (\n currentNode.offsetTop + currentNode.clientHeight >\n parentNode.scrollTop + parentNode.clientHeight\n ) {\n // scrollIntoView with bottom aligned\n currentNode.scrollIntoView({ block: \"nearest\" });\n }\n }\n }, [active, value, listBoxRef]);\n\n const listItemProps: GeneratedListItemProps = {\n id,\n ref,\n className: classNames(\"dropdown-item\", className, {\n active: active,\n }),\n style: {\n cursor: \"pointer\",\n },\n onClick,\n role: \"option\",\n \"aria-label\": label,\n \"aria-selected\": active,\n };\n\n if (render) {\n return render(listItemProps);\n }\n\n return
  • {children}
  • ;\n};\n","import React from \"react\";\n\ninterface MenuProps {\n id: string;\n children: React.ReactNode;\n}\n\nexport const Menu = React.forwardRef<\n HTMLUListElement,\n MenuProps\n>(({ children, ...rest }, ref) => {\n return (\n
      \n {children}\n
    \n );\n});\n\ntype HTMLElementProps = React.DetailedHTMLProps<\n React.HTMLAttributes,\n HTMLElement\n>;\n\ninterface MenuHeaderProps extends HTMLElementProps {\n as?: \"li\" | \"div\";\n id: string;\n}\n\nexport const MenuHeader: React.FC = ({\n as = \"li\",\n children,\n ...rest\n}) => {\n return React.createElement(as, {\n role: \"presentation\",\n className: \"dropdown-header\",\n children,\n ...rest,\n });\n};\n","import classNames from \"classnames\";\nimport { timingFunctions } from \"polished\";\nimport * as React from \"react\";\n\nimport { SvgSprite, TooltipPopover } from \"..\";\nimport { Highlighter } from \"./Highlighter\";\nimport { ListItem, ListItemProps } from \"./ListItem\";\nimport { Menu, MenuHeader } from \"./Menu\";\n\ntype HtmlInputProps = React.DetailedHTMLProps<\n React.InputHTMLAttributes,\n HTMLInputElement\n>;\n\ntype HtmlDivProps = React.DetailedHTMLProps<\n React.HTMLAttributes,\n HTMLDivElement\n>;\n\ntype WrapperDivProps = HtmlDivProps;\n\nexport type AsyncTypeaheadMenuProps = {\n ref: React.MutableRefObject;\n id: string;\n role: string;\n \"aria-label\": string;\n className: string;\n style: React.CSSProperties;\n};\n\ntype MenuComponents = {\n Menu: typeof Menu;\n MenuItem: React.FC<{\n option: T;\n position: number;\n render?: ListItemProps[\"render\"];\n }>;\n MenuHeader: typeof MenuHeader;\n CurrentHighlighter: React.FC<{\n children: string;\n }>;\n};\n\nexport interface AsyncTypeaheadProps {\n id: string;\n isLoading: boolean;\n isValid?: boolean;\n isInvalid?: boolean;\n labelKey?: (option: T) => string;\n minLength?: number;\n onChange?: (option: T[], event?: React.ChangeEvent) => void;\n onClear?: () => void;\n onInputChange?: (\n text: string,\n event: React.ChangeEvent\n ) => void;\n onSearch: (query: string) => void;\n onBlur?: HtmlDivProps[\"onBlur\"];\n onFocus?: HtmlInputProps[\"onFocus\"];\n onClick?: HtmlDivProps[\"onClick\"];\n onKeyDown?: HtmlDivProps[\"onKeyDown\"];\n options?: T[];\n inputProps?: Omit;\n selected?: T[];\n autoFocus?: boolean;\n defaultInputValue?: string;\n onSearchDelay?: number;\n open?: boolean;\n wrapperProps?: WrapperDivProps;\n placeholder?: string;\n\n renderMenu?: (\n results: T[],\n menuProps: AsyncTypeaheadMenuProps,\n menuComponents: MenuComponents\n ) => JSX.Element;\n}\n\nexport interface AsyncTypeaheadState {\n selected: T[];\n value: string;\n query: string;\n activePosition: number;\n isFocused: boolean;\n lastInputType: InputEvent[\"inputType\"];\n}\n\nexport const AsyncTypeahead = ({\n id,\n isLoading,\n isInvalid = false,\n isValid = false,\n onInputChange,\n onSearch,\n onChange,\n onClear,\n onBlur = (e): void => void 0,\n onFocus = (e): void => void 0,\n onKeyDown = (e): void => void 0,\n options = [],\n labelKey = (n: T): string => n as string,\n minLength = 2,\n inputProps,\n selected = [],\n autoFocus = false,\n defaultInputValue = \"\",\n onSearchDelay = 400,\n open = undefined,\n wrapperProps,\n placeholder = \"\",\n renderMenu,\n}: AsyncTypeaheadProps): JSX.Element => {\n const wrapperRef = React.useRef(null);\n const listBoxRef = React.useRef(null);\n const inputRef = React.useRef(null);\n\n const stateRef = React.useRef>({\n selected,\n value: selected.length ? labelKey(selected[0]) : defaultInputValue,\n query: selected.length ? labelKey(selected[0]) : defaultInputValue,\n activePosition: -1,\n isFocused: false,\n lastInputType: null,\n });\n\n const [state, $setState] = React.useState(() => {\n if (!selected.length) {\n return {\n selected: [],\n value: defaultInputValue,\n query: defaultInputValue,\n activePosition: -1,\n isFocused: false,\n lastInputType: null,\n };\n }\n return stateRef.current;\n });\n\n const isMenuOpen =\n typeof open === \"undefined\"\n ? state.isFocused && state.query.length >= minLength\n : open;\n\n // store these functions in ref as they might change over time\n // we don't want to recreate event handlers\n const labelKeyRef = React.useRef(labelKey);\n const onChangeRef = React.useRef(onChange);\n const onSearchRef = React.useRef(onSearch);\n const onInputChangeRef = React.useRef(onInputChange);\n const optionsRef = React.useRef(options);\n const isMenuOpenRef = React.useRef(isMenuOpen);\n\n const clearBtnRef = React.useRef(null);\n\n React.useEffect(() => {\n onChangeRef.current = onChange;\n onSearchRef.current = onSearch;\n onInputChangeRef.current = onInputChange;\n labelKeyRef.current = labelKey;\n optionsRef.current = options;\n isMenuOpenRef.current = isMenuOpen;\n });\n\n const getState = React.useCallback(() => {\n return stateRef.current;\n }, []);\n\n const setState: typeof $setState = React.useMemo(() => {\n return (state): void => {\n const nextState =\n typeof state === \"function\" ? state(stateRef.current) : state;\n\n stateRef.current = nextState;\n $setState(nextState);\n };\n }, []);\n\n const showHideClearButton = (isVisible: boolean) => {\n if (isVisible) {\n clearBtnRef.current?.setAttribute(\"tabindex\", \"0\");\n clearBtnRef.current?.style.setProperty(\"right\", \"0.75rem\");\n clearBtnRef.current?.style.setProperty(\"opacity\", \"1\");\n } else {\n clearBtnRef.current?.setAttribute(\"tabindex\", \"-1\");\n clearBtnRef.current?.style.setProperty(\"right\", \"-100vw\");\n clearBtnRef.current?.style.setProperty(\"opacity\", \"0\");\n }\n };\n\n const handleChange = React.useMemo(() => {\n let timeout;\n\n return (event: React.ChangeEvent): void => {\n clearTimeout(timeout);\n\n const { target, nativeEvent } = event;\n const { value } = target;\n\n const inputType = (nativeEvent as InputEvent).inputType;\n\n if (onChangeRef.current) {\n onChangeRef.current([], event);\n }\n\n showHideClearButton(!!value);\n\n setState((prev) => {\n return {\n ...prev,\n selected: [],\n value,\n query: value,\n activePosition: -1,\n isFocused: true,\n lastInputType: inputType,\n };\n });\n\n if (onInputChangeRef.current) {\n onInputChangeRef.current(value, event);\n }\n\n if (value.length >= minLength) {\n timeout = setTimeout(() => {\n onSearchRef.current(value);\n }, onSearchDelay);\n }\n };\n }, [minLength, onSearchDelay, setState]);\n\n const handleClear = () => {\n setState((prev) => ({\n ...prev,\n selected: [],\n value: \"\",\n query: \"\",\n activePosition: -1,\n isFocused: false,\n }));\n\n if (onChangeRef.current) {\n onChangeRef.current([]);\n }\n\n if (inputRef.current) {\n inputRef.current.innerHTML = \"\";\n inputRef.current.focus();\n }\n\n showHideClearButton(false);\n };\n\n const handleFocus = (e) => {\n setState((prev) => ({\n ...prev,\n isFocused: true,\n }));\n onFocus(e);\n };\n\n const handleBlur = (e: React.FocusEvent): void => {\n if (e.currentTarget === e.target) {\n setState((prev) => ({\n ...prev,\n isFocused: false,\n activePosition: prev.query !== prev.value ? -1 : prev.activePosition,\n }));\n onBlur(e);\n }\n\n if (!e.currentTarget.contains(e.relatedTarget as Node)) {\n setState((prev) => ({\n ...prev,\n isFocused: false,\n activePosition: prev.query !== prev.value ? -1 : prev.activePosition,\n }));\n onBlur(e);\n }\n };\n\n const selectOption = React.useCallback(\n (position: number, focusMenu = false): void => {\n if (position === -1) {\n return;\n }\n\n const option = optionsRef.current[position];\n const inputValue = labelKeyRef.current(option);\n\n setState((prev) => ({\n ...prev,\n query: inputValue,\n value: inputValue,\n activePosition: position,\n isFocused: focusMenu,\n }));\n\n if (onChangeRef.current) {\n onChangeRef.current([option]);\n }\n },\n [setState]\n );\n\n /* Components Section */\n const menuProps: AsyncTypeaheadMenuProps = React.useMemo(() => {\n return {\n ref: listBoxRef,\n id: `${id}__listbox`,\n role: \"listbox\",\n \"aria-label\": \"Options\",\n className: \"dropdown-menu d-block\",\n style: {\n width: \"100%\",\n maxHeight: \"300px\",\n overflow: \"auto\",\n position: \"absolute\",\n background: \"#fff\",\n display: isMenuOpen ? \"block\" : \"none\",\n visibility: isMenuOpen ? \"visible\" : \"hidden\",\n },\n };\n }, [id, isMenuOpen]);\n\n const CurrentHighlighter = React.useMemo(() => {\n const CurrentHighlighter: React.FC<{ children: string }> = ({\n children,\n }): JSX.Element => {\n return {children};\n };\n\n return CurrentHighlighter;\n }, [getState]);\n\n const MenuItem = React.useMemo(() => {\n const MenuItem: React.FC<{\n option: T;\n position: number;\n render?: ListItemProps[\"render\"];\n }> = ({ option, position, render, children }) => {\n const label = labelKeyRef.current(option);\n const listItemId = `${id}__option-${position}`;\n const active = getState().activePosition === position;\n const onClick = () => {\n selectOption(position);\n showHideClearButton(true);\n };\n\n return (\n \n {children ?? (\n {label}\n )}\n \n );\n };\n\n return MenuItem;\n }, [id, selectOption, getState]);\n\n const menuComponents = React.useMemo(() => {\n return {\n Menu,\n MenuItem,\n MenuHeader,\n CurrentHighlighter,\n };\n }, [MenuItem, CurrentHighlighter]);\n\n /* */\n const handleKeyDown = (e: React.KeyboardEvent): void => {\n const { key } = e;\n\n switch (key) {\n case \"PageUp\":\n if (isMenuOpen) {\n listBoxRef.current.scrollTo({ top: 0 });\n e.preventDefault();\n }\n break;\n case \"PageDown\":\n if (isMenuOpen) {\n listBoxRef.current.scrollTo({ top: listBoxRef.current.scrollHeight });\n e.preventDefault();\n }\n break;\n case \"ArrowUp\":\n case \"ArrowDown\": {\n if (isLoading || !isMenuOpen) {\n break;\n }\n\n setState((prev) => {\n let nextIdx = -1;\n if (key === \"ArrowUp\") {\n nextIdx =\n prev.activePosition === -1\n ? options.length - 1\n : prev.activePosition - 1;\n } else {\n nextIdx =\n prev.activePosition < options.length - 1\n ? prev.activePosition + 1\n : -1;\n }\n\n return {\n ...prev,\n activePosition: nextIdx,\n isFocused: true,\n value: ((): string => {\n if (!options[nextIdx]) {\n return prev.value;\n }\n\n if (typeof options[nextIdx] === \"string\") {\n return options[nextIdx] as string;\n }\n\n return labelKey(options[nextIdx]);\n })(),\n };\n });\n\n e.preventDefault();\n break;\n }\n\n case \"Enter\": {\n if (isMenuOpen) {\n e.preventDefault();\n selectOption(getState().activePosition);\n }\n break;\n }\n\n case \"Backspace\": {\n break;\n }\n\n case \"Escape\": {\n if (isMenuOpen) {\n setState((prev) => ({\n ...prev,\n // value: prev.query,\n isFocused: !prev.isFocused,\n activePosition: -1,\n }));\n }\n\n break;\n }\n\n default: {\n break;\n }\n }\n\n onKeyDown(e);\n };\n\n React.useEffect(() => {\n // options changed\n\n const curState = getState();\n if (\n options.length &&\n curState.lastInputType != null &&\n isMenuOpenRef.current\n ) {\n let nextActiveIdx;\n\n switch (curState.lastInputType) {\n case \"deleteWordBackward\":\n case \"deleteContentBackward\":\n case \"deleteContent\": {\n nextActiveIdx = -1;\n break;\n }\n default: {\n const queryLowerCase = curState.query.toLocaleLowerCase();\n nextActiveIdx = options.findIndex((n) =>\n labelKeyRef\n .current(n)\n .toLocaleLowerCase()\n .startsWith(queryLowerCase)\n );\n }\n }\n\n const nextValue =\n nextActiveIdx === -1\n ? curState.query\n : labelKeyRef.current(options[nextActiveIdx]);\n\n setState((prev) => ({\n ...prev,\n value: nextValue,\n activePosition: nextActiveIdx,\n }));\n }\n }, [options, getState, setState]);\n\n React.useEffect(() => {\n if (inputRef.current && state.activePosition !== -1) {\n const queryLower = state.query.toLowerCase();\n const valueLower = state.value.toLowerCase();\n\n if (valueLower.indexOf(queryLower) !== -1) {\n inputRef.current.setSelectionRange(\n state.query.length,\n state.value.length\n );\n }\n }\n }, [state.value, state.activePosition, state.query]);\n\n const [autoComplete, setAutoComplete] = React.useState<\n HtmlInputProps[\"autoComplete\"]\n >(() => {\n if (inputProps?.autoComplete) {\n return inputProps.autoComplete;\n }\n return undefined;\n });\n\n React.useEffect(() => {\n // Focus on mount useEffect\n if (autoFocus && inputRef.current) {\n inputRef.current.focus();\n }\n\n /*\n Auto complete handling\n - set autocomplete to initialAutoComplete value from props\n - if no autoComplete prop passed through, set as undefined initially\n - when this useEffect runs, set it to \"off\"\n\n This allows chrome/any other browsers in the future to persist the inputs\n value on history changes on a server load or if js is disabled\n */\n setAutoComplete(\"off\");\n }, []);\n\n return (\n \n x != null)\n .join(\" \")}\n />\n \n Suggestions will appear below the field as you type\n \n\n {((): React.ReactNode => {\n // if (!isMenuOpen) {\n // return null;\n // }\n\n if (renderMenu) {\n return renderMenu(options, menuProps, menuComponents);\n }\n\n return (\n }\n >\n {((): React.ReactNode => {\n if (isLoading) {\n return
  • Loading...
  • ;\n }\n\n if (options.length) {\n return options.map((option, idx) => {\n return ;\n });\n }\n\n return (\n
  • No matches found.
  • \n );\n })()}\n \n );\n })()}\n {onClear && (\n \n {\n e.preventDefault();\n e.stopPropagation();\n handleClear();\n onClear();\n }}\n >\n p.theme.gray200};\n box-shadow: 1px 1px 3px ${(p): string => p.theme.gray400};\n }\n `}\n >\n \n \n \n \n )}\n \n );\n};\n","import classNames from \"classnames\";\nimport { timingFunctions } from \"polished\";\nimport * as React from \"react\";\n\nimport { SvgSprite, TooltipPopover } from \"..\";\nimport { AsyncTypeaheadProps } from \"./AsyncTypeahead\";\nimport { Highlighter } from \"./Highlighter\";\nimport { ListItem, ListItemProps } from \"./ListItem\";\nimport { Menu, MenuHeader } from \"./Menu\";\n\ntype HtmlInputProps = React.DetailedHTMLProps<\n React.InputHTMLAttributes,\n HTMLInputElement\n>;\n\ntype MenuProps = {\n ref: React.MutableRefObject;\n id: string;\n role: string;\n \"aria-label\": string;\n className: string;\n style: React.CSSProperties;\n};\n\nexport const AsyncTypeaheadSearch = ({\n id,\n isLoading,\n isInvalid = false,\n isValid = false,\n onInputChange,\n onSearch,\n onChange,\n onClear,\n onClick,\n onBlur = (e): void => void 0,\n onFocus = (e): void => void 0,\n onKeyDown = (e): void => void 0,\n options = [],\n labelKey = (n: T): string => n as string,\n minLength = 2,\n inputProps,\n selected = [],\n autoFocus = false,\n defaultInputValue = \"\",\n onSearchDelay = 300,\n open = undefined,\n wrapperProps,\n renderMenu,\n}: AsyncTypeaheadProps): JSX.Element => {\n const wrapperRef = React.useRef(null);\n const listBoxRef = React.useRef(null);\n const inputRef = React.useRef(null);\n\n const [state, setState] = React.useState({\n selected,\n value: defaultInputValue,\n query: defaultInputValue,\n activePosition: -1,\n isFocused: open || false,\n lastInputType: null,\n });\n\n const isMenuOpen =\n typeof open === \"undefined\"\n ? state.isFocused && state.query.length >= minLength\n : open;\n\n // store these functions in ref as they might change over time\n // we don't want to recreate event handlers\n const labelKeyRef = React.useRef(labelKey);\n const onChangeRef = React.useRef(onChange);\n const onSearchRef = React.useRef(onSearch);\n const onInputChangeRef = React.useRef(onInputChange);\n const optionsRef = React.useRef(options);\n const isMenuOpenRef = React.useRef(isMenuOpen);\n\n const clearBtnRef = React.useRef(null);\n\n React.useEffect(() => {\n onChangeRef.current = onChange;\n onSearchRef.current = onSearch;\n onInputChangeRef.current = onInputChange;\n labelKeyRef.current = labelKey;\n optionsRef.current = options;\n isMenuOpenRef.current = isMenuOpen;\n });\n\n const showHideClearButton = (isVisible: boolean) => {\n if (isVisible) {\n clearBtnRef.current?.setAttribute(\"tabindex\", \"0\");\n clearBtnRef.current?.style.setProperty(\"right\", \"0.75rem\");\n clearBtnRef.current?.style.setProperty(\"opacity\", \"1\");\n } else {\n clearBtnRef.current?.setAttribute(\"tabindex\", \"-1\");\n clearBtnRef.current?.style.setProperty(\"right\", \"-100vw\");\n clearBtnRef.current?.style.setProperty(\"opacity\", \"0\");\n }\n };\n\n React.useEffect(() => {\n const inputValue = selected.length\n ? labelKey(selected[0])\n : defaultInputValue;\n\n setState({\n selected,\n value: inputValue,\n query: inputValue,\n activePosition: -1,\n isFocused: open || false,\n lastInputType: null,\n });\n\n showHideClearButton(!!inputValue);\n // We only want this to rerender if the keyword or the selection changes\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [defaultInputValue, selected[0]]);\n\n const handleChange = React.useMemo(() => {\n let timeout;\n\n return (event: React.ChangeEvent): void => {\n clearTimeout(timeout);\n\n const { target, nativeEvent } = event;\n const { value } = target;\n\n const inputType = (nativeEvent as InputEvent).inputType;\n\n if (onChangeRef.current) {\n onChangeRef.current([], event);\n }\n\n showHideClearButton(!!value);\n\n setState((prev) => {\n return {\n ...prev,\n selected: [],\n value,\n query: value,\n activePosition: -1,\n isFocused: true,\n lastInputType: inputType,\n };\n });\n\n if (onInputChangeRef.current) {\n onInputChangeRef.current(value, event);\n }\n\n if (value.length >= minLength) {\n timeout = setTimeout(() => {\n onSearchRef.current(value);\n }, onSearchDelay);\n }\n };\n }, [minLength, onSearchDelay, setState]);\n\n const handleClear = () => {\n setState((prev) => ({\n ...prev,\n selected: [],\n value: \"\",\n query: \"\",\n activePosition: -1,\n isFocused: false,\n }));\n\n if (onChangeRef.current) {\n onChangeRef.current([]);\n }\n\n if (inputRef.current) {\n inputRef.current.innerHTML = \"\";\n inputRef.current.focus();\n }\n\n showHideClearButton(false);\n };\n\n const handleClick = (e) => {\n setState((prev) => ({\n ...prev,\n isFocused: true,\n }));\n onFocus(e);\n };\n\n const handleFocus = (e) => {\n setState((prev) => ({\n ...prev,\n isFocused: true,\n }));\n onFocus(e);\n };\n\n const handleBlur = (e: React.FocusEvent): void => {\n if (e.currentTarget === e.target) {\n setState((prev) => ({\n ...prev,\n isFocused: false,\n activePosition: prev.query !== prev.value ? -1 : prev.activePosition,\n }));\n onBlur(e);\n }\n\n if (!e.currentTarget.contains(e.relatedTarget as Node)) {\n setState((prev) => ({\n ...prev,\n isFocused: false,\n activePosition: prev.query !== prev.value ? -1 : prev.activePosition,\n }));\n onBlur(e);\n }\n };\n\n const selectOption = React.useCallback(\n (position: number, focusMenu = false): void => {\n if (position === -1) {\n return;\n }\n\n const option = optionsRef.current[position];\n const inputValue = labelKeyRef.current(option);\n\n setState((prev) => ({\n ...prev,\n query: inputValue,\n value: inputValue,\n activePosition: position,\n isFocused: focusMenu,\n }));\n\n if (onChangeRef.current) {\n onChangeRef.current([option]);\n }\n },\n [setState]\n );\n\n /* Components Section */\n const menuProps: MenuProps = React.useMemo(() => {\n return {\n ref: listBoxRef,\n id: `${id}__listbox`,\n role: \"listbox\",\n \"aria-label\": \"Options\",\n className: \"dropdown-menu d-block\",\n style: {\n width: \"100%\",\n maxHeight: \"300px\",\n overflow: \"auto\",\n position: \"absolute\",\n background: \"#fff\",\n display: isMenuOpen ? \"block\" : \"none\",\n visibility: isMenuOpen ? \"visible\" : \"hidden\",\n },\n };\n }, [id, isMenuOpen]);\n\n const CurrentHighlighter = React.useMemo(() => {\n const CurrentHighlighter: React.FC<{ children: string }> = ({\n children,\n }): JSX.Element => {\n return {children};\n };\n\n return CurrentHighlighter;\n }, [state.query]);\n\n const MenuItem = React.useMemo(() => {\n const MenuItem: React.FC<{\n option: T;\n position: number;\n render?: ListItemProps[\"render\"];\n }> = ({ option, position, render, children }) => {\n const label = labelKeyRef.current(option);\n const listItemId = `${id}__option-${position}`;\n const active = state.activePosition === position;\n const onClick = () => {\n selectOption(position);\n showHideClearButton(true);\n };\n\n return (\n \n {children ?? {label}}\n \n );\n };\n\n return MenuItem;\n }, [id, selectOption, state.activePosition, state.query]);\n\n const menuComponents = React.useMemo(() => {\n return {\n Menu,\n MenuItem,\n MenuHeader,\n CurrentHighlighter,\n };\n }, [MenuItem, CurrentHighlighter]);\n\n const handleKeyDown = (e: React.KeyboardEvent): void => {\n switch (e.key) {\n case \"PageUp\":\n if (isMenuOpen) {\n listBoxRef.current.scrollTo({ top: 0 });\n e.preventDefault();\n }\n break;\n case \"PageDown\":\n if (isMenuOpen) {\n listBoxRef.current.scrollTo({ top: listBoxRef.current.scrollHeight });\n e.preventDefault();\n }\n break;\n case \"ArrowUp\":\n case \"ArrowDown\": {\n if (isLoading || !isMenuOpen) {\n break;\n }\n\n setState((prev) => {\n let nextIdx = -1;\n if (e.key === \"ArrowUp\") {\n nextIdx =\n prev.activePosition === -1\n ? options.length - 1\n : prev.activePosition - 1;\n } else {\n nextIdx =\n prev.activePosition < options.length - 1\n ? prev.activePosition + 1\n : -1;\n }\n\n return {\n ...prev,\n activePosition: nextIdx,\n isFocused: true,\n value: ((): string => {\n if (!options[nextIdx]) {\n return prev.value;\n }\n\n if (typeof options[nextIdx] === \"string\") {\n return options[nextIdx] as string;\n }\n\n return labelKey(options[nextIdx]);\n })(),\n };\n });\n\n e.preventDefault();\n break;\n }\n\n case \"Enter\": {\n if (isMenuOpen) {\n e.preventDefault();\n selectOption(state.activePosition);\n }\n break;\n }\n\n case \"Escape\": {\n if (isMenuOpen) {\n setState((prev) => ({\n ...prev,\n // value: prev.query,\n isFocused: !prev.isFocused,\n activePosition: -1,\n }));\n }\n\n break;\n }\n\n case \"Backspace\":\n default: {\n break;\n }\n }\n\n onKeyDown(e);\n };\n\n React.useEffect(() => {\n // options changed\n if (\n options.length &&\n state.lastInputType != null &&\n isMenuOpenRef.current\n ) {\n let nextActiveIdx;\n\n switch (state.lastInputType) {\n case \"deleteWordBackward\":\n case \"deleteContentBackward\":\n case \"deleteContent\": {\n nextActiveIdx = -1;\n break;\n }\n default: {\n const queryLowerCase = state.query.toLocaleLowerCase();\n nextActiveIdx = options.findIndex((n) =>\n labelKeyRef\n .current(n)\n .toLocaleLowerCase()\n .startsWith(queryLowerCase)\n );\n }\n }\n\n const nextValue =\n nextActiveIdx === -1\n ? state.query\n : labelKeyRef.current(options[nextActiveIdx]);\n\n setState((prev) => ({\n ...prev,\n value: nextValue,\n activePosition: nextActiveIdx,\n }));\n }\n }, [options, setState, state.lastInputType, state.query]);\n\n React.useEffect(() => {\n if (inputRef.current && state.activePosition !== -1) {\n const queryLower = state.query.toLowerCase();\n const valueLower = state.value.toLowerCase();\n\n if (valueLower.indexOf(queryLower) !== -1) {\n inputRef.current.setSelectionRange(\n state.query.length,\n state.value.length\n );\n }\n }\n }, [state.value, state.activePosition, state.query]);\n\n const [autoComplete, setAutoComplete] = React.useState<\n HtmlInputProps[\"autoComplete\"]\n >(() => {\n if (inputProps?.autoComplete) {\n return inputProps.autoComplete;\n }\n return undefined;\n });\n\n React.useEffect(() => {\n // Focus on mount useEffect\n if (autoFocus && inputRef.current) {\n inputRef.current.focus();\n }\n\n /*\n Auto complete handling\n - set autocomplete to initialAutoComplete value from props\n - if no autoComplete prop passed through, set as undefined initially\n - when this useEffect runs, set it to \"off\"\n\n This allows chrome/any other browsers in the future to persist the inputs\n value on history changes on a server load or if js is disabled\n */\n setAutoComplete(\"off\");\n }, [autoFocus]);\n\n return (\n \n x != null)\n .join(\" \")}\n />\n \n Suggestions will appear below the field as you type\n \n\n {((): React.ReactNode => {\n if (renderMenu) {\n return renderMenu(options, menuProps, menuComponents);\n }\n\n return (\n }\n >\n {((): React.ReactNode => {\n if (isLoading) {\n return
  • Loading...
  • ;\n }\n\n if (options.length) {\n return options.map((option, idx) => {\n return ;\n });\n }\n\n return (\n
  • No matches found.
  • \n );\n })()}\n \n );\n })()}\n {onClear && (\n \n {\n e.preventDefault();\n e.stopPropagation();\n setTimeout(() => {\n handleClear();\n onClear();\n }, onSearchDelay);\n }}\n >\n p.theme.gray200};\n box-shadow: 1px 1px 3px ${(p): string => p.theme.gray400};\n }\n `}\n >\n \n Clear\n \n \n \n )}\n \n );\n};\n","import * as React from \"react\";\n\nimport { useAsyncTypeahead } from \"../hooks\";\nimport { ValidationError } from \"./Form\";\nimport { SvgSprite } from \"./SvgSprite\";\nimport { AsyncTypeahead, AsyncTypeaheadProps } from \"./Typeahead\";\n\nexport interface MultiLocationTypeaheadProps\n extends Omit, \"isLoading\" | \"onSearch\"> {\n idx: number;\n\n onRemove: (event: React.MouseEvent) => void;\n touched: boolean;\n error: string;\n defaultOptions?: T[];\n\n showRemoveBtn?: boolean;\n}\n\nexport const MultiLocationTypeahead = ({\n id,\n idx,\n onRemove,\n defaultOptions = [],\n touched,\n error,\n showRemoveBtn = true,\n inputProps,\n ...rest\n}: MultiLocationTypeaheadProps): JSX.Element => {\n const locationTypeahead = useAsyncTypeahead({\n url: (q) => `/api/locations?query=${q}`,\n onSuccess: (res) => {\n console.log(res);\n return res;\n },\n defaultOptions,\n });\n\n return (\n
    \n \n {touched && !!error && (\n \n )}\n\n
    \n \n id={id}\n isInvalid={touched && !!error}\n {...locationTypeahead}\n {...rest}\n inputProps={Object.assign({}, inputProps, {\n \"aria-describedby\": [\n touched && !!error ? `${id}-error-message` : null,\n inputProps?.[\"aria-describedby\"],\n ]\n .filter((x): x is string => x != null)\n .join(\" \"),\n })}\n />\n {showRemoveBtn && (\n \n \n \n )}\n
    \n
    \n );\n};\n","import { debounce } from \"lodash-es\";\nimport * as React from \"react\";\nimport { NavLink } from \"react-router-dom\";\nimport styled, { ThemeProvider, css } from \"styled-components\";\n\nimport { SvgSprite } from \"./SvgSprite\";\n\nimport patternLightBgImg from \"@skv/assets/gfx/pattern-light@2x.png\";\n\nconst CarouselPagingControl = styled.button`\n position: absolute;\n top: 0;\n height: ${(p): number =>\n ((p.theme.height as number) - (p.theme.borderBottomWidth as number)) /\n 16}rem;\n background-color: transparent;\n border: 0;\n color: ${(p) => p.theme.arrowColor as string};\n padding: 0 1rem;\n display: flex;\n align-items: center;\n transition: all 0.15s ${(p): string => p.theme.timingFnEaseOut};\n`;\n\ninterface NavBarState {\n clientWidth: number;\n scrollWidth: number;\n scrollLeft: number;\n}\n\ntype NavBarActions =\n | {\n type: \"UPDATE_SCROLL_LEFT\";\n payload: {\n scrollLeft: number;\n };\n }\n | {\n type: \"HANDLE_RESIZE\";\n payload: {\n clientWidth: number;\n scrollWidth: number;\n scrollLeft: number;\n };\n };\n\nconst reducer = (state: NavBarState, action: NavBarActions): NavBarState => {\n switch (action.type) {\n case \"UPDATE_SCROLL_LEFT\":\n return {\n ...state,\n scrollLeft: action.payload.scrollLeft,\n };\n case \"HANDLE_RESIZE\":\n return {\n ...state,\n clientWidth: action.payload.clientWidth,\n scrollWidth: action.payload.scrollWidth,\n scrollLeft: action.payload.scrollLeft,\n };\n default:\n return state;\n }\n};\n\nexport const NavBar = ({ children }): JSX.Element => {\n const [state, dispatch] = React.useReducer(reducer, {\n clientWidth: 0,\n scrollWidth: 0,\n scrollLeft: 0,\n });\n\n const scrollEl = React.useRef(null);\n\n const handleScroll = React.useMemo(() => {\n const handleScroll = (): void => {\n const { scrollLeft } = scrollEl.current;\n\n dispatch({\n type: \"UPDATE_SCROLL_LEFT\",\n payload: {\n scrollLeft,\n },\n });\n };\n\n return debounce(handleScroll, 300);\n }, []);\n\n /* Handle carousel clicks */\n const handlePreviousClick = React.useCallback(\n (e) => {\n e.preventDefault();\n scrollEl.current.scrollBy({ left: -100, behavior: \"smooth\" });\n },\n [scrollEl]\n );\n\n const handleNextClick = React.useCallback(\n (e) => {\n e.preventDefault();\n scrollEl.current.scrollBy({ left: 100, behavior: \"smooth\" });\n },\n [scrollEl]\n );\n\n /* Handle resize events */\n React.useEffect(() => {\n const handleResize = (e?: UIEvent): void => {\n const { clientWidth, scrollLeft, scrollWidth } = scrollEl.current;\n\n dispatch({\n type: \"HANDLE_RESIZE\",\n payload: {\n clientWidth,\n scrollLeft,\n scrollWidth,\n },\n });\n };\n\n const debouncedHandleResize = debounce(handleResize, 300);\n\n // run function on component load\n handleResize();\n\n window.addEventListener(\"resize\", debouncedHandleResize, false);\n\n return (): void => {\n window.removeEventListener(\"resize\", debouncedHandleResize, false);\n };\n }, []);\n\n return (\n ({\n ...rest,\n tabActiveColor: rest.tabActiveColor ?? \"#fff\",\n tabActiveBgColor: rest.tabActiveBgColor ?? primaryColor,\n tabColor: rest.tabColor ?? \"#fff\",\n tabBgColor: rest.tabBgColor ?? \"transparent\",\n tabBorderRadius: rest.tabBorderRadius ?? 0,\n barBgColor: rest.barBgColor ?? secondaryColor,\n arrowColor: rest.arrowColor ?? \"#fff\",\n arrowBgColor: rest.arrowBgColor ?? secondaryColor,\n height: 54,\n borderBottomWidth: rest.borderBottomWidth ?? 6,\n borderBottomColor: rest.borderBottomColor ?? primaryColor,\n barBorderRadius: rest.barBorderRadius ?? 0,\n isFluid: rest.isFluid ?? true,\n paddingX: rest.paddingX ?? \"1rem\",\n marginTop: rest.marginTop ?? 0,\n })}\n >\n p.theme.height / 16}rem;\n overflow: hidden;\n background-color: ${(p): string => p.theme.barBgColor};\n\n border-radius: ${(p) => p.theme.barBorderRadius};\n ${(p): string | void => {\n // TODO : sass-loader booleans are string types \"true\" instead of true. Figure out a better way to handle this?\n if (p.theme.enableBackgroundPatterns === \"true\") {\n return `\n\n &:before {\n content: \"\";\n background-image: url(${patternLightBgImg});\n background-size: 5rem;\n background-position: 50% 0;\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n opacity: 0.1;\n }\n `;\n }\n }};\n\n margin-top: ${(p): number => p.theme.marginTop / 16}rem;\n\n &:after {\n content: \"\";\n position: absolute;\n bottom: 0;\n left: 0;\n width: 100%;\n height: ${(p): number => p.theme.borderBottomWidth / 16}rem;\n background-color: ${(p): string => p.theme.borderBottomColor};\n }\n `}\n >\n `${p.theme.paddingX}`};\n padding-right: ${(p): string => `${p.theme.paddingX}`};\n\n @media (min-width: ${(p): string => p.theme.mdBreakpoint}) {\n max-width: ${(p): string => p.theme.mdMaxWidth};\n }\n\n @media (min-width: ${(p): string => p.theme.lgBreakpoint}) {\n max-width: ${(p): string => p.theme.lgMaxWidth};\n }\n\n @media (min-width: ${(p): string => p.theme.xlBreakpoint}) {\n max-width: ${(p): string => p.theme.xlMaxWidth};\n }\n `}\n >\n \n p.theme.isFluid &&\n css`\n margin-left: -${(p): string => `${p.theme.paddingX}`};\n margin-right: -${(p): string => `${p.theme.paddingX}`};\n\n @media (min-width: 768px) {\n margin: 0 0;\n }\n `}\n `}\n >\n \n {children}\n \n \n \n\n {/* Directional Arrows */}\n p.theme.arrowBgColor} 35%\n );\n left: 0;\n `}\n >\n \n \n p.theme.arrowBgColor} 35%\n );\n right: 0;\n `}\n >\n \n \n \n \n );\n};\n\nNavBar.ListItemLink = styled(NavLink)`\n position: relative;\n margin: 1px 2px 0;\n border: 1px solid transparent;\n padding: 0 3rem;\n height: ${(p): number =>\n ((p.theme.height as number) - (p.theme.borderBottomWidth as number)) /\n 16}rem;\n display: inline-flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n color: ${(p): string => `${p.theme.tabColor}`};\n background-color: ${(p): string => `${p.theme.tabBgColor}`};\n border-top-left-radius: ${(p): number =>\n (p.theme.tabBorderRadius as number) / 16}rem;\n border-top-right-radius: ${(p): number =>\n (p.theme.tabBorderRadius as number) / 16}rem;\n white-space: nowrap;\n z-index: 5;\n\n &:after {\n content: attr(data-text);\n height: 0;\n visibility: hidden;\n overflow: hidden;\n user-select: none;\n pointer-events: none;\n font-weight: 700;\n @media speech {\n display: none;\n }\n }\n\n &:hover {\n color: ${(p): string => `${p.theme.tabColor}`};\n text-decoration: none;\n font-weight: 700;\n }\n\n &.active {\n font-weight: 700;\n color: ${(p): string => `${p.theme.tabActiveColor}`};\n background-color: ${(p): string => `${p.theme.tabActiveBgColor}`};\n }\n`;\n\nNavBar.ListItem = styled.li`\n display: block;\n scroll-snap-coordinate: 50% 50%;\n scroll-snap-align: center;\n`;\n","import { generatePagination } from \"@skv/util\";\nimport classnames from \"classnames\";\nimport * as qs from \"qs\";\nimport * as React from \"react\";\nimport { useLocation, useRouteMatch } from \"react-router-dom\";\n\nimport type { SearchTypes } from \"../types\";\nimport { VolunteerSearchLink } from \"./\";\n\nimport {\n OpportunitySearchQueryState,\n OrganisationSearchQueryState,\n} from \"@skv/state\";\n\ntype UsePageLocationResult = readonly [\n (\n | (OpportunitySearchQueryState & {\n page: number;\n })\n | (OrganisationSearchQueryState & {\n page: number;\n })\n ),\n string\n];\n\nconst usePageLocation = (\n searchQuery: OpportunitySearchQueryState | OrganisationSearchQueryState,\n desiredPage: number\n): UsePageLocationResult => {\n const location = useLocation();\n\n const nextPageSearchQuery = React.useMemo(() => {\n return Object.assign({}, searchQuery, { page: desiredPage });\n }, [searchQuery, desiredPage]);\n\n const nextPageSearchQueryString = React.useMemo(() => {\n return qs.stringify(\n {\n ...qs.parse(location.search, {\n ignoreQueryPrefix: true,\n }),\n page: desiredPage,\n },\n {\n arrayFormat: \"repeat\",\n }\n );\n }, [location.search, desiredPage]);\n\n return [nextPageSearchQuery, nextPageSearchQueryString] as const;\n};\n\ninterface PaginationProps {\n currentPage: number;\n totalPages: number;\n searchQuery: OpportunitySearchQueryState | OrganisationSearchQueryState;\n searchType: SearchTypes;\n isNsw?: boolean;\n}\n\nconst PaginationListItem: React.FC<{\n isActive: boolean;\n isHiddenMobile: boolean;\n searchQuery: OpportunitySearchQueryState | OrganisationSearchQueryState;\n searchType: SearchTypes;\n page: number;\n}> = ({ isActive, isHiddenMobile, searchQuery, searchType, page }) => {\n const [pageQuery, pageQueryString] = usePageLocation(searchQuery, page);\n const { url } = useRouteMatch();\n\n return (\n \n {isActive ? (\n \n {page} , current page\n \n ) : (\n \n {page}\n \n )}\n \n );\n};\n\nexport const Pagination: React.FC = ({\n currentPage,\n totalPages,\n searchQuery,\n searchType,\n isNsw = false,\n}) => {\n const match = useRouteMatch();\n\n const pagesToShow = 5;\n const pagesToDisplay = generatePagination(\n currentPage,\n totalPages,\n pagesToShow\n );\n\n /* Previous button */\n const prevPage = currentPage > 1 ? currentPage - 1 : 1;\n\n const [prevSearchQuery, prevSearchQueryString] = usePageLocation(\n searchQuery,\n prevPage\n );\n\n /* Next button */\n const nextPage = currentPage < totalPages ? currentPage + 1 : totalPages;\n\n const [nextSearchQuery, nextSearchQueryString] = usePageLocation(\n searchQuery,\n nextPage\n );\n\n /*\n Actual page numbers\n TODO : This might need a rework\n */\n\n const activeIdx = pagesToDisplay.indexOf(currentPage);\n const spread = Math.floor(pagesToShow / 2);\n\n const paginationListItems = pagesToDisplay.map((page, idx) => {\n const isActive = activeIdx === idx;\n\n const isHiddenMobile = (() => {\n if (activeIdx < spread) {\n return idx > pagesToShow - 1 - spread;\n }\n\n if (activeIdx > spread) {\n return idx < pagesToShow - (spread + 1);\n }\n\n return idx === 0 || idx === pagesToShow - 1;\n })();\n\n return (\n \n );\n });\n\n return (\n \n );\n};\n","export function generatePagination(curPage, totalPages, pagesToShow): number[] {\n const spread = Math.floor(pagesToShow / 2);\n\n let pages = Array.from(\n { length: totalPages < pagesToShow ? totalPages : pagesToShow },\n (v, k) => k + (curPage - spread)\n );\n\n if (pages[0] < 1) {\n const difference = 1 + Math.abs(pages[0]);\n pages = pages.map((v) => v + difference);\n }\n\n if (pages[pages.length - 1] > totalPages) {\n const difference = pages[pages.length - 1] - totalPages;\n pages = pages.map((v) => v - difference);\n }\n\n return pages;\n}\n","import { darken } from \"polished\";\nimport * as React from \"react\";\nimport { Accordion } from \"react-bootstrap\";\nimport { Link, RouteProps, useRouteMatch } from \"react-router-dom\";\nimport * as store from \"store2\";\nimport { SvgSprite } from \"./SvgSprite\";\n\nconst STORE = store.local.namespace(\"peekdown\");\n\ntype OnCloseEvent = (\n e: React.MouseEvent\n) => void;\n\ninterface PeekdownState {\n handleClose: OnCloseEvent;\n}\n\nconst PeekdownContext = React.createContext(\n undefined\n);\n\ninterface PeekdownProps {\n id: string;\n storeKey?: string;\n match?: string | string[] | RouteProps;\n}\n\nexport const Peekdown: React.FC = ({\n id,\n storeKey = \"name\",\n match,\n children,\n}) => {\n const routeMatch = useRouteMatch(match);\n\n const [activeKey, setActiveKey] = React.useState(null);\n\n const handleClose: OnCloseEvent = React.useCallback(\n (e) => {\n e.preventDefault();\n setActiveKey(null);\n STORE.set(storeKey, id);\n },\n [id, storeKey]\n );\n\n React.useEffect(() => {\n const storedValue = STORE.get(storeKey);\n\n if (storedValue !== id) {\n setActiveKey(id);\n }\n }, [id, storeKey]);\n\n if (match !== undefined && routeMatch && !routeMatch.isExact) {\n return null;\n }\n\n return (\n \n \n \n {children as JSX.Element}\n \n \n \n );\n};\n\nexport const CloseBtn = (): JSX.Element => {\n const { handleClose } = React.useContext(PeekdownContext);\n\n return (\n p.theme.timingFnEaseOut};\n\n &:hover {\n color: ${darken(0.25, \"#fff\")};\n }\n `}\n >\n \n \n \n \n );\n};\n\nexport const CovidPeekdown = (): JSX.Element => {\n return (\n \n
    \n \n Covid-19 Update & Opportunities\n \n \n
    \n \n \n );\n};\n","import * as React from \"react\";\nimport { useHistory, LinkProps } from \"react-router-dom\";\n\nimport { SearchTypes } from \"../types\";\n\nimport {\n OpportunitySearchQueryState,\n OrganisationSearchQueryState,\n useThunkDispatch,\n opportunityResultStore,\n organisationResultStore,\n} from \"@skv/state\";\n\nexport interface VolunteerSearchLinkProps\n extends Omit {\n to?: Exclude;\n searchQuery: OpportunitySearchQueryState | OrganisationSearchQueryState;\n searchType?: SearchTypes;\n shouldUpdateSearchForm?: boolean;\n}\n\nexport const VolunteerSearchLink: React.FC = ({\n to,\n searchQuery,\n searchType = \"opp\",\n children,\n shouldUpdateSearchForm = false,\n ...rest\n}) => {\n const dispatch = useThunkDispatch();\n\n const history = useHistory();\n\n const queryString = React.useMemo(() => {\n return opportunityResultStore.util.opportunitySearchQueryToString(\n searchQuery\n );\n }, [searchQuery]);\n\n const action = React.useMemo(() => {\n switch (searchType) {\n case \"org\":\n return \"/volunteering-organisations\";\n case \"favourites\":\n return \"/favourites\";\n case \"opp\":\n default:\n return \"/volunteering\";\n }\n }, [searchType]);\n\n const href = React.useMemo(() => {\n switch (typeof to) {\n case \"undefined\":\n return history.createHref({\n pathname: action,\n search: queryString,\n });\n case \"string\":\n return to;\n default:\n return history.createHref(to);\n }\n }, [action, history, queryString, to]);\n\n const handleClick = React.useMemo(() => {\n return (e: React.MouseEvent): void => {\n e.preventDefault();\n\n history.push(href, {\n searchQuery,\n });\n\n if (searchType === \"opp\") {\n dispatch(\n opportunityResultStore.actions.fetchOpportunities(\n searchQuery as OpportunitySearchQueryState\n )\n ).then((data) => {\n history.replace(data.canonicalUrl, {\n searchQuery,\n shouldUpdateSearchForm,\n });\n });\n return;\n }\n\n if (searchType === \"org\") {\n dispatch(\n organisationResultStore.actions.fetchOrganisations(\n searchQuery as OrganisationSearchQueryState\n )\n ).then((data) => {\n history.replace(data.canonicalUrl, {\n searchQuery,\n shouldUpdateSearchForm,\n });\n });\n return;\n }\n\n if (searchType === \"favourites\") {\n /*\n Favourites is currently handled with a useEffect in it's own component\n so we don't do anything here.\n\n TODO : Look in to refactoring favourites so there's no ambiguity in the search flow\n */\n\n return;\n }\n };\n }, [\n dispatch,\n history,\n searchQuery,\n searchType,\n href,\n shouldUpdateSearchForm,\n ]);\n\n return (\n \n {children}\n \n );\n};\n","import * as React from \"react\";\nimport { Link, LinkProps } from \"react-router-dom\";\nimport styled, { css } from \"styled-components\";\n\nimport { SvgSprite } from \"./SvgSprite\";\n\nimport classNames from \"classnames\";\n\nimport { OpportunitySearchQueryState } from \"@skv/state\";\nimport { FAVOURITES_ENUM } from \"@skv/state/src/state/favourites\";\nimport { getDateRange, isInThePast, resizeImg } from \"@skv/util\";\nimport { formatDistanceToNow } from \"date-fns\";\nimport { BaseFavouriteBtn, BaseFavouriteBtnProps, EventBadge } from \"./\";\nimport {\n VolunteerSearchLink,\n VolunteerSearchLinkProps,\n} from \"./VolunteerSearchLink\";\n\nconst ResultListSvgSprite = styled(SvgSprite)`\n vertical-align: middle;\n`;\n\nexport const ResultCardHeader = styled.header.attrs((props) => ({\n ...props,\n className: props.className || \"mb-2\",\n}))``;\n\nexport const ResultCard = styled.article<{\n $isFeatured?: boolean;\n $isNew?: boolean;\n hover?: boolean;\n}>`\n position: relative;\n margin-top: -1px;\n overflow-wrap: break-word;\n\n li > & {\n border-top: 1px solid ${(p) => p.theme.gray300};\n }\n\n li:not(:last-child) > & {\n border-bottom: 1px solid ${(p) => p.theme.gray300};\n }\n\n ${(p) =>\n p.hover !== false &&\n css`\n &:hover {\n background-color: ${(p) => p.theme.gray100};\n margin-left: -1rem;\n margin-right: -1rem;\n padding-left: 1rem;\n padding-right: 1rem;\n }\n `}\n\n ${(p) => {\n if (p.$isFeatured) {\n return css`\n padding-left: 0.5rem;\n margin-left: -0.5rem;\n box-shadow: -2px 0 0 ${(p) => p.theme.primaryColor};\n\n @media (min-width: ${(p) => p.theme.mdBreakpoint}) {\n padding-left: 1rem;\n margin-left: -1rem;\n }\n\n ${ResultCardHeader}:before {\n content: \"In Demand\";\n display: inline-flex;\n float: right;\n padding: 0 0 0.5rem 0.5rem;\n font-size: 0.875rem;\n color: ${(p) => p.theme.primaryColor};\n }\n `;\n }\n\n if (p.$isNew) {\n return css`\n ${ResultCardHeader}:before {\n content: \"New\";\n display: inline-flex;\n float: right;\n padding: 0 0 0.5rem 0.5rem;\n font-size: 0.875rem;\n color: ${(p) => p.theme.dangerColor};\n }\n `;\n }\n }}\n`;\n\nconst SearchResultStretchedLink = styled(Link)<{\n to: LinkProps[\"to\"];\n}>`\n &:visited {\n color: ${(p) => p.theme.primaryColor};\n }\n &:after {\n content: \"\";\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n }\n`;\n\nexport const ResultCardHeading = styled.h3.attrs(({ className, ...rest }) => ({\n ...rest,\n className: className || \"h4 mb-0\",\n}))``;\n\ntype HeadingProps = React.HTMLAttributes;\n\nexport interface ResultCardLinkHeadingProps\n extends Omit {\n title: React.ReactNode;\n to: LinkProps[\"to\"];\n stretchedLink?: boolean;\n agencyName?: string | null;\n}\n\nexport const ResultCardLinkHeading: React.FC = ({\n title,\n to,\n stretchedLink = true,\n agencyName,\n ...rest\n}) => {\n return (\n \n {stretchedLink ? (\n {title}\n ) : (\n {title}\n )}\n {!!agencyName && (\n
    \n \n supported by\n {\" \"}\n {agencyName}\n
    \n )}\n
    \n );\n};\n\nexport interface ResultCardVolunteerSearchLinkHeadingProps\n extends Omit {\n title: React.ReactNode;\n to: Exclude;\n searchQuery: OpportunitySearchQueryState;\n stretchedLink?: boolean;\n shouldUpdateSearchForm?: VolunteerSearchLinkProps[\"shouldUpdateSearchForm\"];\n}\n\nexport const ResultCardVolunteerSearchLinkHeading: React.FC<\n ResultCardVolunteerSearchLinkHeadingProps\n> = ({\n title,\n to,\n searchQuery,\n stretchedLink = true,\n shouldUpdateSearchForm,\n ...rest\n}) => {\n return (\n \n {stretchedLink ? (\n \n <>{title}\n \n ) : (\n \n <>{title}\n \n )}\n \n );\n};\n\nexport const ResultCardSubHeading = styled.p.attrs(\n ({ className, ...rest }) => ({\n ...rest,\n className: className || \"h5 mb-0\",\n })\n)``;\n\ninterface ResultCardLinkSubHeadingProps\n extends Omit {\n title: React.ReactNode;\n to?: LinkProps[\"to\"];\n agencyName?: string;\n organisationMemberName?: string;\n isOrgLinkedEntity?: boolean;\n}\n\nexport const ResultCardLinkSubHeading: React.FC<\n ResultCardLinkSubHeadingProps\n> = ({\n title,\n to,\n agencyName,\n organisationMemberName,\n isOrgLinkedEntity,\n ...rest\n}) => {\n return (\n \n {organisationMemberName || agencyName ? (\n <>\n {isOrgLinkedEntity === true ? (\n <>\n {title}{\" \"}\n \n supported by {agencyName}\n \n \n ) : (\n <>\n {organisationMemberName}{\" \"}\n \n managed by {title}\n \n \n )}\n \n ) : (\n <>{title}\n )}\n \n );\n};\n\nexport const BaseResultMetaListItem = styled.li.attrs<{ small?: boolean }>(\n ({ small = true, className, ...props }) => ({\n className: classNames(\n \"list-inline-item\",\n {\n small: small,\n },\n className\n ),\n ...props,\n })\n)`\n margin-bottom: 0.5rem;\n`;\n\ntype LiElementProps = React.DetailedHTMLProps<\n React.LiHTMLAttributes,\n HTMLLIElement\n>;\n\ninterface ResultMetaListItemProps extends LiElementProps {\n icon?: \"marker\" | \"ribbon\" | \"briefcase\" | \"calendar\";\n small?: boolean;\n}\n\nexport const ResultMetaListItem: React.FC = ({\n children,\n icon,\n small,\n className,\n}) => {\n const altText =\n icon === \"marker\"\n ? \"Location: \"\n : icon === \"ribbon\"\n ? \"Category: \"\n : icon === \"briefcase\"\n ? \"Types of work: \"\n : \"Event date\";\n\n return (\n \n {icon && (\n \n )}\n {children}\n \n );\n};\n\ninterface ResultMetaListProps {\n $listItemSpacing?: string;\n}\n\nexport const ResultMetaList = styled.ul.attrs((props) => ({\n ...props,\n className: classNames(\"list-inline\", props.className),\n}))`\n ${BaseResultMetaListItem}:not(:last-child) {\n margin-right: ${(p) => p.$listItemSpacing || \"1rem\"};\n }\n\n margin-bottom: 0;\n`;\n\n/* TODO : Revisit this isolated ml-n3 class */\nexport const ResultCardFooter = styled.footer.attrs((props) => ({\n ...props,\n className: props.className || \"ml-n3 d-flex align-items-center\",\n}))``;\n\n/*\n Full components that are built from ResultCard\n*/\n\ninterface OpportunityResultCardProps {\n name: React.ReactNode;\n to: ResultCardLinkHeadingProps[\"to\"];\n\n organisationName: React.ReactNode;\n organisationTo: ResultCardLinkSubHeadingProps[\"to\"];\n\n agencyName?: string;\n organisationMemberName?: string;\n isOrgLinkedEntity?: boolean;\n\n locations?: React.ReactNode;\n category?: React.ReactNode;\n typesOfWork?: React.ReactNode;\n\n summary: React.ReactNode;\n\n logoUrl?: string;\n isFeatured?: boolean;\n isNew?: boolean;\n eventStartDate?: string;\n eventEndDate?: string;\n\n isFavourited: boolean;\n onFavourite: BaseFavouriteBtnProps[\"onFavourite\"];\n onUnfavourite: BaseFavouriteBtnProps[\"onUnfavourite\"];\n\n headingProps?: Partial[0]>;\n subHeadingProps?: Partial[0]>;\n}\n\nexport const OpportunityResultCard: React.FC = ({\n name,\n to,\n organisationName,\n organisationTo,\n organisationMemberName,\n agencyName,\n isOrgLinkedEntity,\n locations,\n category,\n typesOfWork,\n summary,\n logoUrl,\n isFeatured = false,\n isNew = false,\n eventStartDate,\n eventEndDate,\n\n isFavourited,\n\n headingProps,\n subHeadingProps,\n\n onFavourite,\n onUnfavourite,\n}) => {\n return (\n \n \n \n \n \n\n {eventStartDate && (\n \n {isInThePast(eventStartDate) === false && (\n \n \n \n )}\n \n {getDateRange(eventStartDate, eventEndDate)}\n \n \n )}\n\n \n {locations && (\n {locations}\n )}\n {category && (\n {category}\n )}\n {typesOfWork && (\n \n {typesOfWork}\n \n )}\n \n

    {summary}

    \n \n \n {logoUrl && (\n \n )}\n \n
    \n );\n};\n\ninterface OrganisationResultCardProps {\n organisationName: string;\n to: ResultCardLinkHeadingProps[\"to\"];\n category: React.ReactNode;\n headingProps?: Partial[0]>;\n agencyName?: string | null;\n}\n\nexport const OrganisationResultCard: React.FC = ({\n organisationName,\n to,\n category,\n headingProps,\n agencyName,\n}) => {\n return (\n \n \n \n \n \n {category && (\n {category}\n )}\n \n \n );\n};\n\ninterface OrganisationFavouriteResultCardProps {\n organisationName: React.ReactNode;\n to: ResultCardLinkHeadingProps[\"to\"];\n\n locations?: React.ReactNode;\n category?: React.ReactNode;\n\n isFavourited: boolean;\n onFavourite: BaseFavouriteBtnProps[\"onFavourite\"];\n onUnfavourite: BaseFavouriteBtnProps[\"onUnfavourite\"];\n\n logoUrl?: string;\n summary: React.ReactNode;\n\n headingProps?: Partial[0]>;\n}\n\nexport const OrganisationFavouriteResultCard: React.FC<\n OrganisationFavouriteResultCardProps\n> = ({\n to,\n isFavourited,\n onFavourite,\n onUnfavourite,\n organisationName,\n locations,\n category,\n logoUrl,\n summary,\n headingProps,\n}) => {\n return (\n \n \n \n \n \n {locations && (\n {locations}\n )}\n {category && (\n {category}\n )}\n \n

    {summary}

    \n\n \n \n {logoUrl && (\n \n )}\n \n
    \n );\n};\n\ninterface OpportunityFavouriteResultCardProps {\n name: React.ReactNode;\n to: ResultCardLinkHeadingProps[\"to\"];\n organisationName: React.ReactNode;\n\n locations?: React.ReactNode;\n category?: React.ReactNode;\n typesOfWork?: React.ReactNode;\n\n summary: React.ReactNode;\n\n logoUrl?: string;\n\n isFavourited: boolean;\n onFavourite: BaseFavouriteBtnProps[\"onFavourite\"];\n onUnfavourite: BaseFavouriteBtnProps[\"onUnfavourite\"];\n\n headingProps?: Partial[0]>;\n subHeadingProps?: Partial[0]>;\n date?: string;\n}\n\nexport const OpportunityFavouriteResultCard: React.FC<\n OpportunityFavouriteResultCardProps\n> = ({\n name,\n to,\n organisationName,\n locations,\n category,\n typesOfWork,\n summary,\n logoUrl,\n isFavourited,\n onFavourite,\n onUnfavourite,\n headingProps,\n subHeadingProps,\n date,\n}) => {\n const formatDateDistance = (dateString) => {\n const formattedDate = formatDistanceToNow(new Date(dateString), {\n addSuffix: true,\n });\n return formattedDate;\n };\n\n return (\n \n \n {date ? (\n
    \n \n {formatDateDistance(date)}\n
    \n ) : (\n \n )}\n \n
    \n \n {locations && (\n {locations}\n )}\n {category && (\n {category}\n )}\n {typesOfWork && (\n \n {typesOfWork}\n \n )}\n \n

    {summary}

    \n \n \n {logoUrl && (\n \n )}\n \n
    \n );\n};\n\ninterface OrganisationDetailsOpportunityResultCardProps {\n name: React.ReactNode;\n to: ResultCardLinkHeadingProps[\"to\"];\n\n locations?: React.ReactNode;\n category?: React.ReactNode;\n typesOfWork?: React.ReactNode;\n\n headingProps?: Partial[0]>;\n}\n\nexport const OrganisationDetailsOpportunityResultCard: React.FC<\n OrganisationDetailsOpportunityResultCardProps\n> = ({ name, to, locations, category, typesOfWork, headingProps }) => {\n return (\n \n \n \n \n \n {locations && (\n {locations}\n )}\n {category && (\n {category}\n )}\n {typesOfWork && (\n \n {typesOfWork}\n \n )}\n \n \n );\n};\n","import React from \"react\";\n\nimport { generatePagination } from \"@skv/util\";\nimport { useLocation } from \"react-router-dom\";\n\nimport classNames from \"classnames\";\nimport qs from \"qs\";\n\ninterface ResultListPaginationProps {\n currentPage: number;\n totalPages: number;\n pagesToShow?: number;\n}\n\nexport const ResultListPagination: React.FC = (\n props\n) => {\n const { currentPage, totalPages, pagesToShow = 5 } = props;\n\n const location = useLocation();\n\n const pagesToDisplay = generatePagination(\n currentPage,\n totalPages,\n pagesToShow\n );\n\n const activeIdx = pagesToDisplay.indexOf(currentPage);\n const spread = Math.floor(pagesToShow / 2);\n\n const query = qs.parse(location.search, { ignoreQueryPrefix: true });\n\n const paginationListItems = pagesToDisplay.map((page, idx) => {\n const isActive = activeIdx === idx;\n\n const isHiddenMobile = (() => {\n if (activeIdx < spread) {\n return idx > pagesToShow - 1 - spread;\n }\n\n if (activeIdx > spread) {\n return idx < pagesToShow - (spread + 1);\n }\n\n return idx === 0 || idx === pagesToShow - 1;\n })();\n\n const query = qs.parse(location.search, { ignoreQueryPrefix: true });\n\n const pageQuery = {\n ...query,\n page,\n };\n\n const pageQueryString = qs.stringify(pageQuery, {\n arrayFormat: \"repeat\",\n });\n\n return (\n \n {isActive ? (\n {page}\n ) : (\n \n {page}\n \n )}\n \n );\n });\n\n return (\n \n );\n};\n","import { KeyValue, PaginatedModel } from \"@skv/core\";\n\nexport enum AgencyEntityStatus {\n Active,\n Archived,\n}\n\nexport type AgencyEntityStatusKeyValue = {\n id: AgencyEntityStatus;\n name: string;\n};\n\nexport interface AgencyEntitySearchQuery {\n ascending: boolean;\n page: number;\n search: string;\n sortedBy: number;\n}\n\nexport type AgencyEntityListResult = PaginatedModel & {\n agencyName: string;\n};\n\nexport interface AgencyEntity {\n id: number;\n name: string;\n dateCreated: string;\n managerName: string;\n managerEmail: string;\n type: string;\n}\n\nexport interface AgencyEntityListViewModel {\n filteredByStatus: AgencyEntityStatusKeyValue;\n filteredByType: KeyValue[];\n form: AgencyEntitySearchQuery;\n listResult: AgencyEntityListResult;\n requestConnectionUrl: string;\n}\n\nexport type EntityItem = KeyValue & {\n type: EntityItemType | null;\n};\n\ntype ValueOf = T[keyof T];\n\ntype EntityItemType = {\n isManaged: boolean;\n isSupported: boolean;\n name: keyof typeof AgencyEntityTypeEnum;\n value: ValueOf;\n};\n\nexport enum AgencyEntityTypeEnum {\n Managed = 0,\n Supported,\n}\n","export enum EmailNotificationTypes {\n VolunteerOpportunitySearch,\n VolunteerOrganisationViewedEoi,\n OrganisationSummary,\n VolunteerAllOpportunitySearches,\n OrganisationNoActivityForThreeMonths,\n OrganisationNoActivityForOneYear\n}\n","import type { MetaSegment, WorldLocation } from \"@skv/core\";\n\nexport enum OpportunitySearchTypes {\n NoLocation,\n LocationSuburb,\n LocationRegional,\n LocationMetro,\n LocationStateRegion,\n}\n\ninterface OpportunitySearchResultOrganisation {\n friendlyName: string;\n id: number;\n logoUrl: string;\n name: string;\n url: string;\n}\n\nexport interface OpportunitySearchResult {\n agencyName?: string;\n category: MetaSegment;\n eventEndDate?: string | null;\n eventStartDate?: string | null;\n friendlyName: string;\n id: number;\n isFeatured: boolean;\n isNew: boolean;\n isOrgLinkedEntity: boolean;\n locations: WorldLocation[];\n name: string;\n onlineRemoteVolunteers: boolean;\n organisation: OpportunitySearchResultOrganisation;\n organisationMemberName?: string;\n summary: string;\n typesOfWork: MetaSegment[];\n url: string;\n}\n\nexport interface OpportunitySearchResults {\n canonicalLocation: string | null;\n canonicalUrl: string | null;\n metaFilters: string[];\n noLocationMatch: boolean;\n onlineRemoteVolunteersOnly: boolean;\n opportunities: OpportunitySearchResult[];\n opportunitySearchType: OpportunitySearchTypes;\n organisationName: string | null;\n page: number;\n pageDescription: string;\n pageSize: number;\n pageTitle: string;\n searchSummary: string;\n suggestedLocations: MetaSegment[];\n surroundingOpportunityIndex: number;\n totalCount: number;\n totalPages: number;\n}\n\n// todo : deprecate opportunityresultstateenums in favour of unified shared SearchResultStatus\nexport enum OpportunityResultStateEnums {\n IDLE = \"IDLE\",\n FETCHING_DATA = \"FETCHING_DATA\",\n FETCH_ERROR = \"FETCH_ERROR\",\n}\n\nexport enum SearchResultStatus {\n IDLE = \"IDLE\",\n FETCHING_DATA = \"FETCHING_DATA\",\n FETCH_ERROR = \"FETCH_ERROR\",\n}\n","export enum OpportunityStatus {\n Draft,\n Open,\n Archived,\n Expired,\n}\n","export enum OrganisationStatus {\n Pending,\n Active,\n Inactive,\n NotSuitable,\n}\n","import * as React from \"react\";\nimport { AspectRatio } from \"./\";\nimport { SvgSprite } from \"./SvgSprite\";\nimport { OpportunitySearchTypes } from \"../types\";\n\ninterface ResultSearchTypeBreakProps {\n opportunitySearchType: OpportunitySearchTypes;\n}\n\nexport const ResultSearchTypeBreak: React.FC = ({\n opportunitySearchType,\n}) => {\n const summary = React.useMemo(() => {\n if (process.env.TARGET_ENV === \"au\" || process.env.TARGET_ENV === \"nsw\") {\n switch (opportunitySearchType) {\n case OpportunitySearchTypes.NoLocation:\n default:\n return null;\n case OpportunitySearchTypes.LocationSuburb:\n return (\n

    \n We found more opportunities in the\n
    surrounding suburbs and areas\n

    \n );\n case OpportunitySearchTypes.LocationRegional:\n return (\n

    \n We found more opportunities that are\n
    state wide or remote\n

    \n );\n case OpportunitySearchTypes.LocationMetro:\n return (\n

    \n We found more opportunities in the\n
    surrounding areas\n

    \n );\n case OpportunitySearchTypes.LocationStateRegion:\n return (\n

    \n We found more opportunities that are\n
    remote\n

    \n );\n }\n }\n\n if (process.env.TARGET_ENV === \"nz\") {\n switch (opportunitySearchType) {\n case OpportunitySearchTypes.NoLocation:\n default:\n return null;\n case OpportunitySearchTypes.LocationSuburb:\n return (\n

    \n We found more opportunities in the\n
    surrounding suburbs and areas\n

    \n );\n case OpportunitySearchTypes.LocationRegional:\n return (\n

    \n We found more opportunities in the\n
    surrounding areas\n

    \n );\n case OpportunitySearchTypes.LocationMetro:\n return (\n

    \n We found more opportunities in the\n
    surrounding areas\n

    \n );\n case OpportunitySearchTypes.LocationStateRegion:\n return (\n

    \n We found more opportunities that are\n
    remote\n

    \n );\n }\n }\n }, [opportunitySearchType]);\n\n return (\n \n \n \n \n {summary}\n \n );\n};\n","import * as React from \"react\";\nimport { useLocation } from \"react-router-dom\";\n\nexport const ScrollSink: React.FC<{}> = () => {\n const cache = React.useRef>({});\n\n const location = useLocation<{\n scroll: boolean;\n }>();\n\n React.useEffect(() => {\n if (!location.key) {\n console.log(\"No location key found. Do nothing.\");\n return;\n }\n\n if (cache.current[location.key]) {\n console.log(\"Popstate page. Do nothing.\");\n return;\n }\n\n if (location.state?.scroll === false) {\n /*\n we can prevent scrolling on history.push by sending down state.scroll = false,\n this is used on tabbed navigation\n */\n return;\n }\n\n cache.current[location.key] = true;\n\n window.scrollTo(0, 0);\n }, [location.pathname, location.key, location.state, cache]);\n\n return null;\n};\n","import { ResultListPagination } from \"./\";\n\ninterface CreateColumnCssOptions {}\n\ninterface ResultTableProps {\n currentPage: number;\n dataSource: T[];\n totalCount: number;\n totalPages: number;\n renderHead: (rowProps: typeof headRowProps) => JSX.Element;\n renderBody: (dataSource: T[], rowProps: typeof bodyRowProps) => JSX.Element;\n renderEmpty: () => JSX.Element;\n}\n\nconst headRowProps = {\n className: \"d-none d-md-table-row text-nowrap\",\n};\n\nconst bodyRowProps = {\n className: \"d-flex flex-column d-md-table-row\",\n};\n\nexport const ResultTable = ({\n currentPage,\n totalCount,\n totalPages,\n dataSource,\n renderHead,\n renderBody,\n renderEmpty,\n}: ResultTableProps): JSX.Element => {\n if (totalCount > 0) {\n return (\n <>\n
    \n tbody td:not(:first-child) {\n @media (max-width: ${(p): string => p.theme.mdBreakpoint}) {\n border-top: 0 !important;\n padding-top: 0 !important;\n\n &:not(:last-child) {\n padding-bottom: 0 !important;\n }\n }\n }\n\n > tbody td:first-child {\n @media (max-width: ${(p): string => p.theme.mdBreakpoint}) {\n // border-top: 0 !important;\n padding-bottom: 0 !important;\n }\n }\n `}\n >\n {renderHead(headRowProps)}\n {renderBody(dataSource, bodyRowProps)}\n \n
    \n \n \n );\n }\n\n return renderEmpty();\n};\n","import { timingFunctions } from \"polished\";\nimport * as React from \"react\";\nimport { Collapse, Form } from \"react-bootstrap\";\nimport styled, { css } from \"styled-components\";\n\nimport { FilterName, KeyValue, SvgSprite, useInitialFocus } from \"@skv/core\";\n\nimport useOutsideClick from \"@skv/core/src/hooks/useOutsideClick\";\n\nconst FilterHeadingBtn = styled.button.attrs({\n type: \"button\",\n})<{ $isInactive: boolean }>`\n border: 0;\n background-color: transparent;\n line-height: 1;\n transition: color 150ms ${timingFunctions(\"easeOutCubic\")};\n\n ${(p) => css`\n color: ${p.theme.lightColor}${p.$isInactive ? \"4D\" : \"FF\"};\n `}\n`;\n\nconst FilterCheckboxLabel = styled.span<{ $isDisabled: boolean }>`\n position: relative;\n color: ${(p) => p.theme.gray900};\n top: ${1 / 16}rem;\n cursor: ${(p) => (p.$isDisabled ? \"default\" : \"pointer\")};\n\n &:hover {\n font-weight: ${(p) => p.$isDisabled === false && \"bold\"};\n }\n`;\n\ninterface AdditionalFilterProps {\n heading: string;\n name: FilterName;\n data: KeyValue[];\n openFilter: FilterName;\n setOpenFilter: React.Dispatch>;\n onChange: (event: React.ChangeEvent) => void;\n disabledCategory?: number;\n shouldFocus: boolean;\n selectedIds: number[];\n}\n\nexport const AdditionalFilter = ({\n heading,\n name,\n data,\n openFilter,\n setOpenFilter,\n onChange,\n disabledCategory,\n shouldFocus,\n selectedIds,\n}: AdditionalFilterProps) => {\n const type = React.useMemo(() => {\n switch (name) {\n case \"category\":\n return \"categories\";\n case \"commitment\":\n return \"commitments\";\n case \"daytime\":\n return \"availabilities\";\n case \"suitablefor\":\n return \"suitabilities\";\n case \"typeofwork\":\n return \"work types\";\n default:\n throw Error(\"Filter name is not defined.\");\n }\n }, [name]);\n\n const isOpen = openFilter === name;\n\n const displayHeading =\n selectedIds.length === 0\n ? `${type === \"suitabilities\" ? \"Any\" : \"All\"} ${type}`\n : selectedIds.length === 1\n ? data.find((n) => n.id === selectedIds[0])?.name || heading\n : `${selectedIds.length} ${type}`;\n\n const dropdownRef = React.useRef(null);\n const filterHeadingRef = useInitialFocus({\n shouldFocus,\n });\n\n const closeDropdown = () => {\n if (openFilter === name) {\n setOpenFilter(null);\n }\n };\n\n useOutsideClick(dropdownRef, closeDropdown);\n\n const toggleDropdown = (event) => {\n event.stopPropagation();\n isOpen ? setOpenFilter(null) : setOpenFilter(name);\n };\n\n return (\n p.theme.smBreakpoint}) {\n position: relative;\n\n &:first-of-type {\n border-left: 1px solid rgba(255, 255, 255, 0.3);\n }\n &:last-of-type {\n border-right: 1px solid rgba(255, 255, 255, 0.3);\n }\n }\n\n @media (min-width: ${(p) => p.theme.mdBreakpoint}) {\n flex: unset;\n }\n `}\n >\n
    \n p.theme.mdBreakpoint}) {\n line-height: 1;\n overflow: unset;\n }\n `}\n >\n {heading}\n :\n \n \n \n {displayHeading}\n \n\n \n \n\n \n p.theme.smBreakpoint}) {\n top: calc(100% + 0.5rem);\n width: 300px;\n }\n `}\n >\n
    \n {data.map((filter) => {\n const isDisabled =\n name === \"category\" && filter.id === disabledCategory;\n return (\n \n \n {filter.name}\n \n }\n onChange={(e) => {\n onChange(e);\n setOpenFilter(null);\n }}\n value={filter.id}\n disabled={isDisabled}\n checked={\n selectedIds ? selectedIds.includes(filter.id) : false\n }\n />\n \n );\n })}\n
    \n
    \n \n \n \n );\n};\n","import { useMachine } from \"@xstate/react\";\nimport * as React from \"react\";\nimport { useHistory, useLocation, useRouteMatch } from \"react-router-dom\";\nimport { useForm } from \"react-yup\";\nimport * as Yup from \"yup\";\n\nimport {\n opportunityResultStore,\n OpportunitySearchQueryState,\n SearchFormEvent,\n searchFormMachine,\n useGlobal,\n useOpportunitySearchQuery,\n useThunkDispatch,\n} from \"@skv/state\";\n\nimport {\n AdditionalFilter,\n AsyncTypeaheadProps,\n AsyncTypeaheadSearch,\n FilterName,\n Form,\n FriendlyKeyValueUrl,\n OpportunitySearchResults,\n SvgSprite,\n useSearchFilters,\n} from \"@skv/core\";\n\nconst SearchSchema = Yup.object({\n keyword: Yup.string().required().default(\"\").label(\"Keyword\"),\n where: Yup.string().required().default(\"\").label(\"Where\"),\n commitment: Yup.array()\n .of(Yup.number())\n .required()\n .default([])\n .label(\"Commitment\"),\n category: Yup.array()\n .of(Yup.number())\n .required()\n .default([])\n .label(\"Category\"),\n daytime: Yup.string().label(\"Day and time\"),\n suitablefor: Yup.array()\n .of(Yup.number())\n .required()\n .default([])\n .label(\"Suitable for\"),\n typeofwork: Yup.array()\n .of(Yup.number())\n .required()\n .default([])\n .label(\"Type of work\"),\n});\n\nexport const SearchFormWithFilters = (): JSX.Element => {\n const { push, replace } = useHistory();\n const formRef = React.useRef(null);\n const location = useLocation<{\n analytics?: {\n didKeywordAutoComplete: boolean;\n didWhereAutoComplete: boolean;\n };\n resetSearch?: boolean;\n searchQuery?: ReturnType;\n }>();\n\n const dispatch = useThunkDispatch();\n const searchQuery = useOpportunitySearchQuery();\n\n const { categoryList } = useGlobal();\n\n const match = useRouteMatch({\n path: [\"/*-volunteering\", \"/volunteering*\"],\n });\n\n const initialValues = React.useMemo(\n () => ({\n keyword: \"\",\n where: \"\",\n commitment: [] as number[],\n category: [] as number[],\n suitablefor: [] as number[],\n typeofwork: [] as number[],\n }),\n []\n );\n\n const {\n filters,\n handleFiltersChange,\n handleSelectChange,\n handleSelectClear,\n } = useSearchFilters({\n searchQuery,\n onChange: (nextQuery) => {\n dispatch(\n opportunityResultStore.actions.fetchOpportunities(nextQuery)\n ).then((data) => {\n push(data.canonicalUrl, {\n searchQuery: nextQuery,\n analytics: location.state?.analytics,\n });\n });\n },\n });\n\n const [isRepeatSearch, setIsRepeatSearch] = React.useState(() => {\n if (\n match?.isExact ||\n location.pathname.includes(\"/volunteering\") ||\n location.search\n ) {\n return true;\n }\n return !!searchQuery.category.length;\n });\n\n const [openFilter, setOpenFilter] = React.useState(null);\n const [showFilters, setShowFilters] = React.useState(isRepeatSearch);\n const [focusFilter, setFocusFilter] = React.useState();\n\n const form = useForm({\n defaultValues: initialValues,\n validationSchema: SearchSchema,\n });\n\n const { setValues } = form;\n const [current, send] = useMachine(searchFormMachine);\n\n React.useEffect(() => {\n // If the user clicks on the Opportunities tab, or the SEEK logo,\n // pass through the resetSearch flag to reset the search form.\n if (location.state?.resetSearch) {\n setShowFilters(location.pathname === \"/volunteering\");\n setIsRepeatSearch(location.pathname === \"/volunteering\");\n setValues(() => initialValues);\n send({\n type: \"CLEAR_ALL_INPUTS\",\n });\n return;\n }\n\n // On location change populate the WHAT input\n if (searchQuery.keyword) {\n send({ type: \"KEYWORD_INPUT_CHANGE\", value: searchQuery.keyword });\n } else if (searchQuery.category.length === 1) {\n send({\n type: \"KEYWORD_INPUT_SELECT\",\n value: categoryList.find(({ id }) => id === searchQuery.category[0]),\n });\n }\n\n // On location change populate the WHERE input\n if (searchQuery.where) {\n send({ type: \"LOCATION_INPUT_CHANGE\", value: searchQuery.where });\n }\n\n // On location change populate the COMMITMENT input\n if (searchQuery.commitment?.length) {\n const commitmentList = searchQuery.commitment;\n searchQuery[\"commitment\"] = commitmentList;\n setValues((prev) => ({\n ...prev,\n commitment: commitmentList,\n }));\n }\n\n // On location change populate the ADDITIONAL FILTERS\n const isAdditionalFiltersOpen =\n searchQuery.category?.length ||\n searchQuery.typeofwork?.length ||\n searchQuery.suitablefor?.length;\n\n if (isAdditionalFiltersOpen) {\n setShowFilters(true);\n setIsRepeatSearch(true);\n setValues((prev) => ({\n ...prev,\n category: searchQuery.category || [],\n suitablefor: searchQuery.suitablefor || [],\n typeofwork: searchQuery.typeofwork || [],\n }));\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [location.key]);\n\n const categoryOptions = React.useMemo(() => {\n return (categoryList || []).filter(\n (n) =>\n n.name\n .toLocaleLowerCase()\n .indexOf(form.values.keyword.toLocaleLowerCase()) > -1\n );\n }, [categoryList, form.values.keyword]);\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n setShowFilters(true);\n setIsRepeatSearch(true);\n\n const query: OpportunitySearchQueryState = {\n ...location.state?.searchQuery,\n keyword: current.context.didKeywordAutoComplete\n ? \"\"\n : current.context.keyword,\n category: isRepeatSearch\n ? location.state?.searchQuery.category || []\n : current.context.category,\n commitment: isRepeatSearch\n ? location.state?.searchQuery.commitment || []\n : form.values.commitment,\n where: current.context.where,\n };\n\n if (\"page\" in query) {\n delete query.page;\n }\n\n const createNextHistoryState = (data: OpportunitySearchResults) => ({\n searchQuery: {\n ...query,\n where: data.canonicalLocation || query.where,\n },\n analytics: {\n didKeywordAutoComplete: current.context.didKeywordAutoComplete,\n didWhereAutoComplete: current.context.didWhereAutoComplete,\n },\n });\n\n /*\n push to /volunteering url to show search page\n if current url is not on the search page.\n This is needed to show the loading states,\n otherwise on a slow connection for example,\n it would just stay on the home page and only change\n page when the request is finished, and the user will\n not see the loading indicator.\n */\n if (!match) {\n push(`/volunteering`, { searchQuery: query });\n dispatch(opportunityResultStore.actions.fetchOpportunities(query)).then(\n (data) => {\n replace(data.canonicalUrl, createNextHistoryState(data));\n }\n );\n } else {\n dispatch(opportunityResultStore.actions.fetchOpportunities(query)).then(\n (data) => {\n push(data.canonicalUrl, createNextHistoryState(data));\n }\n );\n }\n };\n\n const onOptionSelected = (\n selected: Array,\n field: FilterName\n ) => {\n const action: SearchFormEvent[\"type\"] =\n field === \"keyword\" ? \"KEYWORD_INPUT_SELECT\" : \"LOCATION_INPUT_SELECT\";\n\n if (selected.length) {\n Promise.resolve()\n .then(() => {\n send({\n type: action,\n value: selected[0],\n } as SearchFormEvent);\n })\n .then(() => {\n setOpenFilter(null);\n\n if (field === \"keyword\") {\n searchQuery[\"keyword\"] = \"\";\n const selectedId = (selected[0] as FriendlyKeyValueUrl).id;\n\n if (isRepeatSearch) {\n handleSelectChange(\"category\", selectedId);\n } else {\n if (!searchQuery[\"category\"].includes(selectedId)) {\n searchQuery[\"category\"].push(selectedId);\n const prevCategories = form.getValues().category as number[];\n form.setValue(\n \"category\",\n [...prevCategories, selectedId],\n true\n );\n }\n }\n }\n\n if (field === \"where\") {\n if (isRepeatSearch) {\n formRef.current?.requestSubmit();\n } else {\n searchQuery[field as string] = selected[0] as string;\n }\n }\n });\n }\n };\n\n const getWhatValueFromContext = () => {\n if (current.context.keyword) {\n return current.context.keyword;\n }\n\n if (current.context.category.length) {\n const selectedId = current.context.category[0];\n return categoryList.find((n) => n.id === selectedId)?.name || \"\";\n }\n\n return \"\";\n };\n\n const renderMenu = React.useCallback<\n AsyncTypeaheadProps[\"renderMenu\"]\n >(\n (results, menuProps, { Menu, MenuItem, MenuHeader }) => {\n if (\n current.matches(\"initialSuggestions.loading\") ||\n current.matches(\"relatedSuggestions.loading\")\n ) {\n return (\n }\n aria-labelledby=\"where-heading\"\n >\n Loading please wait...\n \n );\n }\n\n // render initial suggestions if where input is < 2 chars\n // for now, we know initialSuggestions[0] is online or remote,\n if (current.context.where.length <= 2) {\n return (\n }\n aria-labelledby=\"where-heading\"\n >\n Remote\n \n Suggested areas\n {results.map((result, idx) => {\n if (idx === 0) {\n return null;\n }\n\n return ;\n })}\n \n );\n }\n\n return (\n }\n aria-labelledby=\"where-heading\"\n >\n {results.length ? (\n results.map((result, idx) => (\n \n ))\n ) : (\n No results\n )}\n \n );\n },\n [current]\n );\n\n const commitmentList =\n filters\n .find((n) => n.name === \"commitment\")\n ?.data.map((n) => ({ id: `${n.id}`, name: n.name })) || [];\n\n return (\n
    \n \n \n
    \n
    \n \n \n What\n \n \n id=\"keyword\"\n inputProps={{\n name: \"keyword\",\n autoComplete: \"off\",\n placeholder: \"What are you interested in?\",\n className: \"focus-light\",\n }}\n labelKey={(option) => option.name}\n onInputChange={(text) => {\n const id = current.context.category?.[0] ?? null;\n if (id !== null && searchQuery.category.includes(id)) {\n // If the user has selected a category and is typing remove it from the categories list.\n if (isRepeatSearch) {\n handleSelectChange(\"category\", id);\n } else {\n searchQuery[\"category\"] = searchQuery.category.filter(\n (n) => n === id\n );\n }\n }\n\n send({ type: \"KEYWORD_INPUT_CHANGE\", value: text });\n searchQuery[\"keyword\"] = text;\n }}\n onSearch={() => {\n return;\n }}\n onChange={(selected) => onOptionSelected(selected, \"keyword\")}\n onClear={() => {\n Promise.resolve().then(() => {\n setOpenFilter(null);\n send({ type: \"KEYWORD_INPUT_CLEAR\" });\n\n const id = current.context.category?.[0] ?? null;\n if (id !== null && searchQuery.category.includes(id)) {\n const updatedCategories = searchQuery.category.filter(\n (n) => n === id\n );\n form.setValue(\"category\", updatedCategories, true);\n if (isRepeatSearch) {\n handleSelectChange(\"category\", id);\n } else {\n searchQuery[\"category\"] = updatedCategories;\n }\n } else {\n searchQuery[\"keyword\"] = \"\";\n if (isRepeatSearch) {\n formRef.current?.requestSubmit();\n }\n }\n });\n }}\n open={openFilter === \"keyword\" && categoryOptions.length > 0}\n onClick={() => {\n if (openFilter !== \"keyword\") {\n setOpenFilter(\"keyword\");\n }\n }}\n onFocus={() => setOpenFilter(\"keyword\")}\n onBlur={() => setOpenFilter(null)}\n onKeyDown={(e) => {\n switch (e.key) {\n case \"ArrowUp\":\n case \"ArrowDown\":\n if (openFilter !== \"keyword\") {\n setOpenFilter(\"keyword\");\n return false;\n }\n break;\n case \"Escape\":\n if (openFilter === \"keyword\") {\n setOpenFilter(null);\n }\n break;\n }\n }}\n isLoading={current.matches(\"relatedSuggestions.loading\")}\n options={categoryOptions}\n defaultInputValue={getWhatValueFromContext()}\n selected={\n current.context.keyword\n ? []\n : current.context.category\n .map((id) => categoryList.find((l) => l.id === id))\n .filter((n) => n != null)\n }\n minLength={0}\n renderMenu={(\n results,\n menuProps,\n { Menu, MenuItem, MenuHeader }\n ): JSX.Element => {\n return (\n \n }\n aria-labelledby=\"category-heading\"\n >\n \n Categories\n \n {results.map((n, idx) => (\n \n ))}\n \n );\n }}\n />\n
    \n\n
    \n {\n if (isRepeatSearch) {\n handleSelectClear(\"commitment\");\n } else {\n form.setValue(\"commitment\", [], true);\n searchQuery[\"commitment\"] = [];\n }\n }}\n onDropdownOpen={() => setOpenFilter(null)}\n onUpdateField={(value) => {\n const id = Number(value);\n if (isRepeatSearch) {\n handleSelectChange(\"commitment\", id);\n } else {\n const updatedList = form.values.commitment.includes(id)\n ? form.values.commitment.filter((n) => n !== id)\n : [...form.values.commitment, id];\n\n form.setValue(\"commitment\", updatedList, true);\n searchQuery[\"commitment\"] = updatedList;\n }\n }}\n />\n
    \n\n \n \n \n id=\"where\"\n inputProps={{\n name: \"where\",\n autoComplete: \"off\",\n placeholder: \"Enter suburb, town or city\",\n className: \"focus-light\",\n }}\n open={openFilter === \"where\"}\n onClick={() => {\n if (openFilter !== \"where\") {\n setOpenFilter(\"where\");\n }\n }}\n onFocus={() => setOpenFilter(\"where\")}\n onBlur={() => setOpenFilter(null)}\n onInputChange={(text) => {\n send({ type: \"LOCATION_INPUT_CHANGE\", value: text });\n searchQuery[\"where\"] = text;\n if (openFilter !== \"where\") {\n setOpenFilter(\"where\");\n }\n }}\n onSearch={(text) => {\n if (text.length > 2) {\n send({ type: \"FETCH_START_LOCATIONS\", value: text });\n }\n }}\n onChange={(selected) => onOptionSelected(selected, \"where\")}\n onClear={() => {\n Promise.resolve().then(() => {\n send({ type: \"LOCATION_INPUT_CLEAR\" });\n setOpenFilter(null);\n\n if (isRepeatSearch) {\n formRef.current?.requestSubmit();\n }\n });\n }}\n isLoading={current.matches(\"relatedSuggestions.loading\")}\n options={(() => {\n if (current.context.where.length <= 2) {\n return current.context.initialSuggestions;\n }\n\n return current.context.relatedSuggestions || [];\n })()}\n defaultInputValue={current.context.where}\n selected={\n current.context.where ? [current.context.where] : []\n }\n minLength={0}\n onKeyDown={(e) => {\n switch (e.key) {\n case \"Escape\":\n if (openFilter === \"where\") {\n setOpenFilter(null);\n }\n break;\n }\n }}\n renderMenu={renderMenu}\n />\n
    \n\n
    \n {\n if (isRepeatSearch) {\n formRef.current?.requestSubmit();\n }\n }}\n >\n SEEK\n \n
    \n \n {!showFilters && (\n
    \n {\n setFocusFilter(0);\n setShowFilters(true);\n }}\n >\n More options\n \n \n
    \n )}\n \n {showFilters && (\n
    \n
    \n
    \n {filters\n .filter(\n (n) => n.name !== \"commitment\" && n.name !== \"daytime\"\n )\n .map(({ data, label, name }, idx) => (\n \n ))}\n
    \n
    \n
    \n )}\n \n
    \n
    \n );\n};\n","import classNames from \"classnames\";\n\ntype SearchInputProps = React.DetailedHTMLProps<\n React.InputHTMLAttributes,\n HTMLInputElement\n>;\n\nexport const SearchInput = ({\n className,\n ...rest\n}: SearchInputProps): JSX.Element => {\n return (\n \n );\n};\n","import { Button, Modal } from \"react-bootstrap\";\n\ninterface ShareableLinkInfoModalProps {\n isNsw?: boolean;\n seekProfileUrl: string;\n show: boolean;\n onHide: () => void;\n}\n\nexport const ShareableLinkInfoModal = ({\n isNsw = false,\n seekProfileUrl,\n show,\n onHide,\n}: ShareableLinkInfoModalProps) => {\n const subtitleClasses = isNsw ? \"h4\" : \"h6\";\n\n return (\n \n \n {isNsw ? (\n

    SEEK Profile shareable link

    \n ) : (\n SEEK Profile shareable link\n )}\n
    \n \n
    \n

    What is a SEEK profile?

    \n

    \n A{\" \"}\n \n SEEK Profile\n {\" \"}\n is an individual's professional summary, housed on SEEK. It lets\n candidates present a personal summary, career history, education and\n their skills to organisations and makes the application process\n easier.\n

    \n
    \n
    \n

    What is a shareable link?

    \n

    \n A summary version of your SEEK Profile, if you have one, that is\n sharable with organisations outside of SEEK via a unique link.\n

    \n
    \n
    \n

    Why share your SEEK Profile?

    \n

    \n When you share your SEEK Profile you are showing organisations the\n skills, experience and credentials they need to see, so you can\n start volunteering sooner.\n

    \n
    \n
    \n

    How do I share my SEEK Profile

    \n

    \n You first must have a{\" \"}\n \n SEEK Profile\n \n . Then create a link by clicking the ‘Share’ button under your email\n address, at the top of your SEEK Profile page.\n

    \n {!isNsw && (\n

    \n For more information{\" \"}\n \n view our FAQs\n \n .\n

    \n )}\n
    \n
    \n

    \n Can I still apply for a volunteer opportunity without a SEEK\n Profile?\n

    \n

    \n Yes, sharing a SEEK Profile is completely optional. We know that not\n everyone has a SEEK Profile and it's not relevant for all\n volunteering opportunities.\n

    \n
    \n
    \n \n \n \n Get SEEK Profile link\n \n \n
    \n );\n};\n","import { SvgSprite } from \"@skv/core\";\n\ninterface ExternalLinkProps\n extends React.AnchorHTMLAttributes {\n href: string;\n iconSize?: number | null;\n children: React.ReactNode;\n}\n\nexport const ExternalLink = ({\n children,\n iconSize = 12,\n ...rest\n}: ExternalLinkProps) => {\n return (\n \n {children}\n {iconSize ? (\n \n ) : (\n Opens in a new tab\n )}\n \n );\n};\n","import React from \"react\";\nimport { ShareableLinkInfoModal } from \".\";\nimport { ExternalLink } from \"../ui\";\nimport { PasteInput, PasteInputProps } from \"./Form\";\nimport { SvgSprite } from \"./SvgSprite\";\n\ninterface ShareablePasteInputProps\n extends Pick<\n PasteInputProps,\n | \"value\"\n | \"touched\"\n | \"error\"\n | \"field\"\n | \"onPaste\"\n | \"customValidationError\"\n > {\n application: \"AU\" | \"NZ\" | \"NSW\";\n}\n\nexport const ShareablePasteInput = ({\n application,\n ...rest\n}: ShareablePasteInputProps) => {\n const [showShareableModal, setShowShareableModal] =\n React.useState(false);\n\n const handleToggleShareableModal = () => {\n setShowShareableModal((prev) => !prev);\n };\n\n const handleCloseShareableModal = () => {\n setShowShareableModal(false);\n };\n\n const isNsw = application === \"NSW\";\n const baseUrl =\n application === \"NZ\" ? \"https://www.seek.co.nz\" : \"https://www.seek.com.au\";\n const seekProfileUrl = `${baseUrl}/profile/me/profile-visibility`;\n\n return (\n <>\n \n SEEK Profile shareable link{\" \"}\n (optional)\n \n \n \n \n }\n labelProps={isNsw ? { className: \"nsw-form__label mb-0\" } : undefined}\n helpText={\n <>\n Share your skills, experience and qualifications using your SEEK\n Profile\n \n Get link\n \n \n }\n helpTextProps={{\n className: isNsw\n ? \"nsw-form__helper\"\n : \"form-text text-muted mt-n1 mb-1\",\n }}\n inputWrapperProps={{\n className: isNsw\n ? \"d-flex flex-nowrap gap-3\"\n : \"input-group gap-3 mb-3\",\n }}\n inputProps={{\n className: isNsw ? \"nsw-form__input\" : \"form-control\",\n }}\n buttonProps={{\n className: isNsw\n ? \"flex-shrink-0 btn btn-outline-primary px-3\"\n : \"btn btn-outline-secondary\",\n }}\n {...rest}\n />\n \n \n );\n};\n","import qs from \"qs\";\n\nexport type EmailParams = {\n body?: string;\n subject?: string;\n separator?: string;\n};\n\ninterface EmailButtonProps {\n params: EmailParams;\n className?: string;\n children: React.ReactNode;\n}\n\nexport const EmailButton = ({\n params,\n className,\n children,\n}: EmailButtonProps) => {\n const handleClick = () => {\n window.location.href = `mailto:?${qs.stringify(params)}`;\n };\n\n return (\n \n {children}\n \n );\n};\n","import qs from \"qs\";\n\nexport type FacebookParams = {\n app_id: string;\n display: \"page\";\n redirect_uri: string;\n href: string;\n};\n\ninterface FacebookButtonProps {\n params: FacebookParams;\n className?: string;\n children: React.ReactNode;\n}\n\nconst DEFAULT_POPUP_OPTIONS = {\n height: 600,\n width: 750,\n location: \"no\",\n toolbar: \"no\",\n status: \"no\",\n directories: \"no\",\n menubar: \"no\",\n scrollbars: \"yes\",\n resizable: \"no\",\n centerscreen: \"yes\",\n chrome: \"yes\",\n};\n\nconst popupStyles = Object.entries(DEFAULT_POPUP_OPTIONS)\n .map(([key, value]) => `${key}=${value}`)\n .join(\",\");\n\nexport const FacebookButton = ({\n params,\n className,\n children,\n}: FacebookButtonProps) => {\n const handleClick = () => {\n const url = `https://www.facebook.com/dialog/share?${qs.stringify(params)}`;\n window.open(url, \"\", popupStyles);\n };\n\n return (\n \n {children}\n \n );\n};\n","import qs from \"qs\";\n\nexport type LinkedinParams = {\n url: string;\n};\n\ninterface LinkedinButtonProps {\n params: LinkedinParams;\n className?: string;\n children: React.ReactNode;\n}\n\nconst DEFAULT_POPUP_OPTIONS = {\n height: 600,\n width: 750,\n location: \"no\",\n toolbar: \"no\",\n status: \"no\",\n directories: \"no\",\n menubar: \"no\",\n scrollbars: \"yes\",\n resizable: \"no\",\n centerscreen: \"yes\",\n chrome: \"yes\",\n};\n\nconst popupStyles = Object.entries(DEFAULT_POPUP_OPTIONS)\n .map(([key, value]) => `${key}=${value}`)\n .join(\",\");\n\nexport const LinkedinButton = ({\n params,\n className,\n children,\n}: LinkedinButtonProps) => {\n const handleClick = () => {\n const url = `https://www.linkedin.com/sharing/share-offsite?${qs.stringify(\n params\n )}`;\n window.open(url, \"\", popupStyles);\n };\n\n return (\n \n {children}\n \n );\n};\n","import qs from \"qs\";\n\nexport type TwitterParams = {\n url?: string;\n text?: string;\n via?: string;\n hashtags?: string;\n related?: string;\n};\n\ninterface TwitterButtonProps {\n params: TwitterParams;\n className?: string;\n children: React.ReactNode;\n}\n\nconst DEFAULT_POPUP_OPTIONS = {\n height: 600,\n width: 750,\n location: \"no\",\n toolbar: \"no\",\n status: \"no\",\n directories: \"no\",\n menubar: \"no\",\n scrollbars: \"yes\",\n resizable: \"no\",\n centerscreen: \"yes\",\n chrome: \"yes\",\n};\n\nconst popupStyles = Object.entries(DEFAULT_POPUP_OPTIONS)\n .map(([key, value]) => `${key}=${value}`)\n .join(\",\");\n\nexport const TwitterButton = ({\n params,\n className,\n children,\n}: TwitterButtonProps) => {\n const handleClick = () => {\n const url = `https://twitter.com/intent/tweet?${qs.stringify(params)}`;\n window.open(url, \"\", popupStyles);\n };\n\n return (\n \n {children}\n \n );\n};\n","import Dropdown from \"react-bootstrap/Dropdown\";\nimport { useLocation } from \"react-router-dom\";\n\nimport { EmailButton, EmailParams } from \"./ShareSocialEmailButton\";\nimport { FacebookButton, FacebookParams } from \"./ShareSocialFacebookButton\";\nimport { LinkedinButton, LinkedinParams } from \"./ShareSocialLinkedinButton\";\nimport { TwitterButton, TwitterParams } from \"./ShareSocialTwitterButton\";\n\nimport { useAppSettings } from \"@skv/state\";\nimport { SvgSprite } from \"./SvgSprite\";\n\ninterface ShareSocialProps {\n showEmail?: boolean;\n showFacebook?: boolean;\n showLinkedin?: boolean;\n showTwitter?: boolean;\n emailOptions?: EmailParams;\n linkedinOptions?: LinkedinParams;\n facebookOptions?: FacebookParams;\n twitterOptions?: TwitterParams;\n}\n\nexport const ShareSocialInline = ({\n showEmail,\n emailOptions,\n showFacebook,\n facebookOptions,\n showLinkedin,\n linkedinOptions,\n showTwitter,\n twitterOptions,\n}: ShareSocialProps) => {\n const { pathname } = useLocation();\n const { applicationName, applicationUrl, facebookAppId } = useAppSettings();\n const shareBtnCss = `\n padding: 0.25rem;\n &:hover {\n background-color: #f4f6fe;\n }\n `;\n return (\n
    \n {showFacebook && (\n \n \n \n )}\n {showTwitter && (\n \n \n \n )}\n {showLinkedin && (\n \n \n \n )}\n {showEmail && (\n \n \n \n )}\n
    \n );\n};\n\nexport const ShareSocialDropdown = ({\n showEmail,\n emailOptions,\n showFacebook,\n facebookOptions,\n showLinkedin,\n linkedinOptions,\n showTwitter,\n twitterOptions,\n}: ShareSocialProps) => {\n const { pathname } = useLocation();\n const { applicationName, applicationUrl, facebookAppId } = useAppSettings();\n const shareBtnCss = `\n width: 100%;\n text-align: left;\n padding: 0.5rem;\n transition: all 100ms ease;\n\n &:hover {\n background-color: #f4f6fe;\n }\n `;\n\n return (\n \n \n \n \n Share\n \n \n \n {showEmail && (\n \n Email a friend\n \n )}\n {showFacebook && (\n \n Facebook\n \n )}\n {showTwitter && (\n \n Twitter\n \n )}\n {showLinkedin && (\n \n LinkedIn\n \n )}\n \n \n );\n};\n","import styled from \"styled-components\";\n\nexport const SidebarBox = styled.section`\n font-size: 87.5%;\n padding-top: 1rem;\n margin-top: -1px;\n border-top: 1px solid ${(p): string => p.theme.gray300};\n border-bottom: 1px solid ${(p): string => p.theme.gray300};\n`;\n","import qs from \"qs\";\nimport React from \"react\";\nimport { useLocation } from \"react-router-dom\";\nimport { SvgSprite } from \"./SvgSprite\";\n\ninterface SortByLinkProps {\n sortBy: string;\n defaultAscending?: boolean;\n}\n\nexport const SortByLink: React.FC = ({\n sortBy,\n children,\n defaultAscending = true,\n}) => {\n const location = useLocation();\n const query = React.useMemo(() => {\n return qs.parse(location.search, { ignoreQueryPrefix: true });\n }, [location.search]);\n\n const isSorted = !!query.sortedBy;\n const isSortedByValue = isSorted && query.sortedBy === sortBy;\n\n const hasAscendingParam = query.ascending !== undefined;\n const isCurrentlyAscending = hasAscendingParam\n ? query.ascending === \"true\"\n : defaultAscending;\n\n const isAscending =\n isSortedByValue && hasAscendingParam\n ? !isCurrentlyAscending\n : defaultAscending;\n\n return (\n \n {isSortedByValue && (\n \n )}\n {children}\n \n );\n};\n","/**\n * NOTICE : This HOC will soon be deprecated.\n * You should not use this HOC for any future components.\n */\n\nimport * as React from \"react\";\nimport { BrowserRouter, StaticRouter, useLocation } from \"react-router-dom\";\nimport { StaticRouterProps } from \"react-router\";\nimport { PropsAreEqual } from \".\";\n\nconst Debugger = () => {\n const location = useLocation();\n\n return
    {JSON.stringify(location)}
    ;\n};\n\nexport const withInjectedRouter = (\n Component: {\n (props: Omit): Exclude<\n JSX.Element,\n undefined\n >;\n displayName?: string;\n },\n propsAreEqual?: PropsAreEqual | false,\n\n componentName = Component.displayName ?? Component.name\n) => {\n return (props: Props): JSX.Element => {\n const { location, basename, context, ...rest } = props;\n\n React.useEffect(() => {\n console.warn(\n \"[DEPRECATION NOTICE] withInjectedRouter will soon be deprecated next major. Avoid using this HOC.\"\n );\n }, []);\n\n if (typeof window === \"undefined\") {\n return (\n \n {/* */}\n \n \n );\n }\n\n return (\n \n \n \n );\n };\n};\n","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../SKV.NSW/node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../SKV.NSW/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./au-variables.scss\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../SKV.NSW/node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../SKV.NSW/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./au-variables.scss\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../SKV.NSW/node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../SKV.NSW/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./jsvariables.scss\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../SKV.NSW/node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../SKV.NSW/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./jsvariables.scss\";\n export default content && content.locals ? content.locals : undefined;\n","import auVariables from \"@skv/frontend/src/styles/au-variables.scss\";\nimport baseTheme from \"@skv/frontend/src/styles/jsvariables.scss\";\n\nimport { timingFunctions } from \"polished\";\nimport { DefaultTheme } from \"styled-components\";\n\nexport const auTheme: DefaultTheme = Object.assign({}, baseTheme, auVariables, {\n timingFnEaseOut: timingFunctions(\"easeOutCubic\"),\n});\n","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../SKV.NSW/node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../SKV.NSW/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./jsvariables-nsw.scss\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../SKV.NSW/node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../SKV.NSW/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./jsvariables-nsw.scss\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../SKV.NSW/node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../SKV.NSW/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./nsw-variables.scss\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../SKV.NSW/node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../SKV.NSW/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./nsw-variables.scss\";\n export default content && content.locals ? content.locals : undefined;\n","import baseTheme from \"@skv/frontend/src/styles/jsvariables-nsw.scss\";\nimport nswVariables from \"@skv/frontend/src/styles/nsw-variables.scss\";\n\nimport { timingFunctions } from \"polished\";\nimport { DefaultTheme } from \"styled-components\";\n\nexport const nswTheme: DefaultTheme = Object.assign(\n {},\n baseTheme,\n nswVariables,\n {\n timingFnEaseOut: timingFunctions(\"easeOutCubic\"),\n }\n);\n","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../SKV.NSW/node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../SKV.NSW/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./nz-variables.scss\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../SKV.NSW/node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../SKV.NSW/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./nz-variables.scss\";\n export default content && content.locals ? content.locals : undefined;\n","import baseTheme from \"@skv/frontend/src/styles/jsvariables.scss\";\nimport nzVariables from \"@skv/frontend/src/styles/nz-variables.scss\";\n\nimport { timingFunctions } from \"polished\";\nimport { DefaultTheme } from \"styled-components\";\n\nexport const nzTheme: DefaultTheme = Object.assign({}, baseTheme, nzVariables, {\n timingFnEaseOut: timingFunctions(\"easeOutCubic\"),\n});\n","import React from \"react\";\nimport { GlobalNav, Header, NavBar } from \"../components\";\n\nimport { AppSettings, ServerStaticProvider, useAppSettings } from \"@skv/state\";\n\nimport { compose } from \"recompose\";\n\nimport { withThemeProvider, withInjectedRouter } from \"../hocs\";\n\ninterface Static404Props {\n appSettings: AppSettings;\n}\n\ninterface StaticLayoutProps {\n site: \"au\" | \"nz\";\n footer: React.ReactNode;\n}\n\nexport const BaseStaticLayout: React.FC = ({\n site,\n children,\n footer,\n}) => {\n const { adminApplicationUrl } = useAppSettings();\n\n return (\n <>\n
    \n \n Skip to main content\n \n\n \n
    \n \n \n \n Opportunities\n \n \n \n \n Favourites\n \n \n \n \n Advice & Tips\n \n \n \n\n
    \n
    {children}
    \n
    \n {footer}\n
    \n \n );\n};\n\nexport const StaticLayout = compose<\n StaticLayoutProps & Static404Props,\n StaticLayoutProps & Static404Props\n>(\n withInjectedRouter,\n withThemeProvider\n)(({ appSettings, children, footer, site }) => {\n return (\n \n \n {children}\n \n \n );\n});\n","/**\n * NSW has an extra variable xlMaxWidth which doesn't exist on au/nz.\n * This trips up Typescript as we override styled-components DefaultTheme\n * per environment (au/nz/nsw). So cast each theme here as unknown.\n *\n * Because of this we can't get typescript intellisense in SKV.Core components\n * as SKV.Core has no concept of which environment it might be executed in.\n *\n * TODO : Look in to adding xlMaxWidth variable to au/nz so we don't have this issue\n * */\n\nimport { DefaultTheme, ThemeProvider } from \"styled-components\";\nimport { PropsAreEqual } from \".\";\nimport { auTheme, nswTheme, nzTheme } from \"../themes\";\n\nexport const withThemeProviderNz = (\n Component: {\n (props: Props): Exclude;\n displayName?: string;\n },\n propsAreEqual?: PropsAreEqual | false,\n\n componentName = Component.displayName ?? Component.name\n): typeof WithThemeProviderNz => {\n const displayName = Component.displayName || \"Component\";\n\n const WithThemeProviderNz = (props: Props): JSX.Element => (\n \n \n \n );\n\n WithThemeProviderNz.displayName = displayName;\n\n return WithThemeProviderNz;\n};\n\nexport const withThemeProviderAu = (\n Component: {\n (props: Props): Exclude;\n displayName?: string;\n },\n propsAreEqual?: PropsAreEqual | false,\n\n componentName = Component.displayName ?? Component.name\n): typeof WithThemeProviderAu => {\n const displayName = Component.displayName || \"Component\";\n\n const WithThemeProviderAu = (props: Props): JSX.Element => (\n \n \n \n );\n\n WithThemeProviderAu.displayName = displayName;\n\n return WithThemeProviderAu;\n};\n\nexport const withThemeProviderNsw = (\n Component: {\n (props: Props): Exclude;\n displayName?: string;\n },\n propsAreEqual?: PropsAreEqual | false,\n\n componentName = Component.displayName ?? Component.name\n): typeof WithThemeProviderNsw => {\n const displayName = Component.displayName || \"Component\";\n\n const WithThemeProviderNsw = (props: Props): JSX.Element => (\n \n \n \n );\n\n WithThemeProviderNsw.displayName = displayName;\n\n return WithThemeProviderNsw;\n};\n\n/**\n * withThemeProvider will use whichever theme provider based on the TARGET_ENV variable.\n * On build, webpack's definePlugin will replace \"process.env.TARGET_ENV\" to it's resolved value\n * allowing us to remove whichever branch is not needed through dead code elimination via the minifier.\n * e.g TARGET_ENV = au,\n * if \"au\" === \"au\" -> withThemeProvider = return withThemeProviderAu\n * if \"au\" === \"nz\" = if false -> this if statement is removed (dead code)\n */\nexport const withThemeProvider = (\n Component: {\n (props: Props): Exclude;\n displayName?: string;\n },\n propsAreEqual?: PropsAreEqual | false,\n componentName = Component.displayName ?? Component.name\n) => {\n return (props: Props): JSX.Element => {\n if (process.env.TARGET_ENV === \"au\") {\n return withThemeProviderAu(Component)(props);\n }\n\n if (process.env.TARGET_ENV === \"nz\") {\n return withThemeProviderNz(Component)(props);\n }\n\n if (process.env.TARGET_ENV === \"nsw\") {\n return withThemeProviderNsw(Component)(props);\n }\n\n throw Error(\n \"withThemeProvider requires the TARGET_ENV variable to be set on process.env\"\n );\n };\n};\n","import * as React from \"react\";\nimport { StrapiPage } from \"./Page\";\n\ninterface DataProvider {\n data: T;\n status: string;\n error: null | Error;\n}\n\ntype StrapiPageState = DataProvider<{\n [slug: string]: StrapiPage;\n}>;\n\ntype StrapiArticleState = DataProvider<{\n [slug: string]: any; // replace with StrapiArticle\n}>;\n\nconst StrapiPageState = React.createContext(undefined);\nconst StrapiPageDispatch = React.createContext<\n React.Dispatch>\n>(undefined);\n\nconst StrapiArticleState = React.createContext(undefined);\n\nexport const Provider = ({ children }) => {\n const [pageState, setPageState] = React.useState({\n data: {},\n status: \"loading\",\n error: null,\n });\n return (\n \n \n {children}\n \n \n );\n};\n\nexport const useStrapiPage = (slug: string) => {\n const ctx = React.useContext(StrapiPageState);\n\n const ctxRef = React.useRef(ctx);\n\n React.useEffect(() => {\n ctxRef.current = ctx;\n });\n\n const setPageState = React.useContext(StrapiPageDispatch);\n\n if (!ctx) {\n throw Error(\"useStrapiPage used outside Provider\");\n }\n\n React.useEffect(() => {\n if (ctxRef.current.data[slug]) {\n return;\n }\n\n setPageState((prev) => ({\n ...prev,\n status: \"loading\",\n }));\n\n fetch(`http://localhost:1337/pages?slug=${slug}`)\n .then((res) => res.json())\n .then((data) => {\n setPageState((prev) => ({\n ...prev,\n status: \"idle\",\n data: {\n ...prev.data,\n [slug]: data,\n },\n }));\n });\n\n // fetch data\n }, [ctxRef, setPageState, slug]);\n\n return {\n ...ctx,\n data: ctx.data[slug],\n };\n};\n","import * as React from \"react\";\nimport {\n useTabState,\n Tab as BaseTab,\n TabList as BaseTabList,\n TabListOptions,\n TabPanel as BaseTabPanel,\n TabProps,\n TabPanelOptions,\n} from \"reakit/Tab\";\n\nimport classNames from \"classnames\";\n\nconst TabsContext = React.createContext<\n undefined | ReturnType\n>(undefined);\n\ntype TabsProps = Exclude[0], Function>;\n\nexport const Tabs: React.FC> = ({\n children,\n ...initialState\n}) => {\n const tab = useTabState(initialState);\n const value = React.useMemo(() => tab, Object.values(tab));\n return {children};\n};\n\nexport const Tab: React.FC> = (props) => {\n const tab = React.useContext(TabsContext);\n return ;\n};\n\nexport const TabList: React.FC> = (props) => {\n const tab = React.useContext(TabsContext);\n\n return (\n p.theme.gray300};\n `}\n // wrap={\"horizontal\"}\n {...props}\n />\n );\n};\n\nexport const TabPanel: React.FC> = (props) => {\n const tab = React.useContext(TabsContext);\n return ;\n};\n","import { useId } from \"@react-aria/utils\";\nimport type { OverlayTriggerProps } from \"react-bootstrap\";\nimport { OverlayTrigger, Tooltip } from \"react-bootstrap\";\n\ntype TooltipPopoverProps = Omit & {\n tooltipText?: string;\n};\n\nexport const TooltipPopover = ({\n children,\n placement = \"right\",\n tooltipText,\n ...rest\n}: TooltipPopoverProps): JSX.Element => {\n const tooltipId = useId();\n\n return (\n \n {tooltipText}\n \n }\n >\n {children}\n \n );\n};\n","import type { ErrorList } from \"../types/ErrorList\";\n\nexport class CustomError extends Error {\n errorCode: ErrorList[keyof ErrorList];\n meta: T;\n constructor(message, errorCode: ErrorList[keyof ErrorList], meta?: T) {\n super(message);\n this.errorCode = errorCode;\n this.meta = meta;\n }\n}\n\nexport class PageEnvelopeResponseError extends Error {\n res: Response;\n meta: T;\n text: string;\n constructor(message: string, res: Response, meta?: T) {\n super(message);\n this.res = res;\n this.meta = meta;\n }\n}\n\nexport const createPageEnvelopeResponseHandler = (\n meta: T\n) => {\n return async function pageEnvelopeResponseHandler(\n res: Response\n ): Promise {\n if (res.ok) {\n try {\n return res.json();\n } catch (e) {\n throw new PageEnvelopeResponseError(\"res.json failed\", res, meta);\n }\n }\n\n throw new PageEnvelopeResponseError(\n \"Unknown error occurs (res.ok = false)\",\n res,\n meta\n );\n };\n};\n","import * as React from \"react\";\nimport { Collapse } from \"react-bootstrap\";\n\nimport ChromeIconImg from \"@skv/assets/gfx/browser/chrome.png\";\nimport EdgeIconImg from \"@skv/assets/gfx/browser/edge.png\";\nimport { ExternalLink, SvgSprite } from \"@skv/core\";\n\nexport const BrowserUpgrade = (): JSX.Element => {\n const [open, setOpen] = React.useState(false);\n\n return (\n
    \n

    \n Time to upgrade your browser. ☝️\n

    \n
    \n
    \n

    Why am I seeing this page?

    \n

    \n You're seeing this page because your browser (the program you\n use to browse the web) needs to be upgraded.\n

    \n

    Why do I need to upgrade?

    \n

    \n If you're using an outdated browser it may prevent you from\n being able to see or access all the functionality on our website.\n

    \n\n {\n e.preventDefault();\n setOpen((prev) => !prev);\n }}\n >\n p.theme.timingFnEaseOut};\n `}\n />\n Learn more\n \n \n
    \n

    \n Here are 3 reasons why you need to update your browser or switch\n to a newer one:\n

    \n
      \n
    1. \n Website compatibility - new features are\n often only supported by newer browsers and when websites\n utilise these features, older browsers don't function\n properly.\n
    2. \n
    3. \n Security risks - newer browsers are\n continually updated to fix security issues so using an\n outdated browser can make you more vulnerable.\n
    4. \n
    5. \n A faster browsing experience - older browsers\n do not perform at the same speed as newer browsers. This makes\n your experience considerably slower and can sometimes cause\n your browser to crash or freeze.\n
    6. \n
    \n
    \n
    \n\n

    What about Internet Explorer?

    \n

    \n \n Internet Explorer is no longer supported by Microsoft\n {\" \"}\n and they are encouraging people to switch to their new browser\n called Edge.\n

    \n
    \n \n
    \n
    \n );\n};\n\nexport default BrowserUpgrade;\n","import * as Yup from \"yup\";\n\nconst yupEoiLocale = {\n mixed: {\n required: \"${path} is needed to apply\",\n },\n number: {\n lessThan: \"${path} must be before ${less}\",\n moreThan: \"${path} must be after ${more}\",\n },\n};\n\nYup.setLocale(yupEoiLocale);\n\nconst CURRENT_YEAR = new Date().getFullYear();\nconst MIN_YOB = CURRENT_YEAR - 101;\nconst MAX_YOB = CURRENT_YEAR;\nconst TEXT_FIELD_MAX_LENGTH = 50;\n\nexport const eoiSchema = Yup.object({\n firstName: Yup.string()\n .label(\"First name\")\n .min(1, \"This field is required\")\n .max(\n TEXT_FIELD_MAX_LENGTH,\n `Please limit your input to ${TEXT_FIELD_MAX_LENGTH} characters`\n )\n .matches(/^[a-zA-Z\\s-]+$/, \"Please enter only valid characters\")\n .required()\n .nullable(),\n lastName: Yup.string()\n .label(\"Last name\")\n .min(1, \"This field is required\")\n .max(\n TEXT_FIELD_MAX_LENGTH,\n `Please limit your input to ${TEXT_FIELD_MAX_LENGTH} characters`\n )\n .matches(/^[a-zA-Z\\s-]+$/, \"Please enter only valid characters\")\n .required()\n .nullable(),\n phone: Yup.string()\n .matches(/^[\\d ()+-]+$/, \"This is not a valid phone number\")\n .required()\n .label(\"Phone number\")\n .nullable(),\n email: Yup.string()\n .email(\"This is not a valid email address\")\n .required()\n .label(\"Email address\")\n .nullable(),\n gender: Yup.number().nullable(),\n qualification: Yup.string().max(500).label(\"Qualification\").nullable(),\n shareableLink: Yup.string()\n .label(\"Link\")\n .matches(\n /^((http(s?):\\/\\/)?w{3}\\.seek\\.((com\\.au)|(co\\.nz))\\/profile\\/[a-zA-Z0-9-]{3,}\\/?)$/,\n {\n excludeEmptyString: true,\n message: \"Link doesn't appear to be valid\",\n }\n )\n .notRequired()\n .nullable(),\n yearOfBirth: Yup.number()\n .moreThan(MIN_YOB)\n .lessThan(MAX_YOB)\n .transform((value, ogValue) => {\n if (typeof ogValue === \"string\" && ogValue === \"\") {\n return null;\n }\n return value;\n })\n .nullable()\n .typeError(\n `Year of Birth must be a number between ${MIN_YOB} and ${MAX_YOB}`\n )\n .label(\"Year of Birth\"),\n location: Yup.string()\n .required()\n .label(\"Location\")\n .typeError(\"Location is needed to apply\")\n .nullable(),\n}).defined();\n","import * as React from \"react\";\n\nimport { useSelector } from \"react-redux\";\nimport { RootState } from \"../\";\n\nimport { useAnalyticsUtil } from \"@skv/core\";\nimport { useThunkDispatch } from \"../\";\n\nimport { actions, FAVOURITES_ENUM } from \"./\";\n\nexport const useFavourites = () => {\n const dispatch = useThunkDispatch();\n const { trackPageLink } = useAnalyticsUtil();\n\n const favourites = useSelector((state: RootState) => state.favourites);\n\n const handleFavourite = React.useCallback(\n (id: number, type: FAVOURITES_ENUM) => {\n dispatch(actions.addFavourite(id, type));\n\n trackPageLink(\n type === FAVOURITES_ENUM.OPPORTUNITY\n ? \"favourite-opportunity\"\n : \"favourite-organisation\"\n );\n },\n [dispatch, trackPageLink]\n );\n\n const handleUnfavourite = React.useCallback(\n (id: number, type: FAVOURITES_ENUM) => {\n dispatch(actions.removeFavourite(id, type));\n trackPageLink(\n type === FAVOURITES_ENUM.OPPORTUNITY\n ? \"remove-favourite-opportunity\"\n : \"remove-favourite-organisation\"\n );\n },\n [dispatch, trackPageLink]\n );\n\n return { favourites, handleFavourite, handleUnfavourite };\n};\n","import { getFavouritesFromCookie } from \"./helpers\";\nimport { ActionTypes, State } from \"./types\";\n\nconst { opportunities, organisations } = getFavouritesFromCookie();\n\nexport const reducer = (\n state: State = {\n opportunities,\n organisations,\n loading: false,\n error: false,\n },\n action: ActionTypes\n): State => {\n let newState;\n\n switch (action.type) {\n case \"FAVOURITES:FETCH:START\":\n return {\n ...state,\n loading: true,\n error: false,\n };\n case \"FAVOURITES:FETCH:END\":\n return {\n ...state,\n loading: false,\n error: false,\n organisations: action.payload.organisations,\n opportunities: action.payload.opportunities,\n };\n case \"FAVOURITES:ORG:ADD\":\n return {\n ...state,\n organisations: {\n ...state.organisations,\n [action.payload.id]: Date.now(),\n },\n };\n case \"FAVOURITES:OPP:ADD\":\n return {\n ...state,\n opportunities: {\n ...state.opportunities,\n [action.payload.id]: Date.now(),\n },\n };\n case \"FAVOURITES:ORG:REMOVE\":\n newState = Object.assign({}, state);\n delete newState.organisations[action.payload.id];\n return newState;\n case \"FAVOURITES:OPP:REMOVE\":\n newState = Object.assign({}, state);\n delete newState.opportunities[action.payload.id];\n return newState;\n default:\n return state;\n }\n};\n","import type { Opportunity } from \"@skv/core\";\nimport { CustomError } from \"@skv/core\";\n\ntype OpportunityFetchStart = {\n type: \"OPPORTUNITY:FETCH:START\";\n};\n\ntype OpportunityFetchEnd = {\n type: \"OPPORTUNITY:FETCH:END\" | \"OPPORTUNITY:FETCH:END:FROMCACHE\";\n payload: {\n data: Opportunity;\n };\n};\n\ntype OpportunityFetchError = {\n type: \"OPPORTUNITY:FETCH:ERROR\";\n payload: {\n error: CustomError;\n id: string;\n };\n};\n\ntype OpportunityFetchErrorUnknown = {\n type: \"OPPORTUNITY:FETCH:ERROR:UNKNOWN\";\n payload: {\n error: CustomError;\n };\n};\n\ntype OpportunityErrorSet = {\n type: \"OPPORTUNITY:ERROR:SET\";\n payload: {\n error: CustomError;\n };\n};\n\ntype OpportunityErrorReset = {\n type: \"OPPORTUNITY:ERROR:RESET\";\n};\n\nexport type ActionTypes =\n | OpportunityFetchStart\n | OpportunityFetchEnd\n | OpportunityFetchError\n | OpportunityFetchErrorUnknown\n | OpportunityErrorSet\n | OpportunityErrorReset;\n\nexport interface State {\n loading: boolean;\n error: null | CustomError;\n data: {\n [key: string]: Opportunity | CustomError;\n };\n}\n\nexport const reducer = (\n state: State = {\n loading: false,\n error: null,\n data: {},\n },\n action: ActionTypes\n): State => {\n switch (action.type) {\n case \"OPPORTUNITY:FETCH:START\":\n return {\n ...state,\n loading: true,\n error: null,\n };\n case \"OPPORTUNITY:FETCH:END\":\n case \"OPPORTUNITY:FETCH:END:FROMCACHE\":\n return {\n ...state,\n loading: false,\n error: null,\n data: {\n ...state.data,\n [action.payload.data.id]: action.payload.data,\n },\n };\n case \"OPPORTUNITY:FETCH:ERROR\":\n return {\n ...state,\n loading: false,\n error: action.payload.error,\n data: {\n ...state.data,\n [action.payload.id]: action.payload.error,\n },\n };\n case \"OPPORTUNITY:FETCH:ERROR:UNKNOWN\":\n return {\n ...state,\n loading: false,\n error: action.payload.error,\n };\n case \"OPPORTUNITY:ERROR:SET\":\n return {\n ...state,\n error: action.payload.error,\n };\n case \"OPPORTUNITY:ERROR:RESET\":\n return {\n ...state,\n loading: false,\n error: null,\n };\n default:\n return state;\n }\n};\n","import type { AppThunk } from \"../\";\nimport type { Opportunity, PageEnvelope } from \"@skv/core\";\nimport { CustomError } from \"@skv/core\";\n\nexport const fetchOpportunity = (\n oppId\n): AppThunk> => async (\n dispatch,\n getState\n): Promise => {\n if (!oppId) {\n throw Error(\"No opportunity id passed as argument.\");\n }\n\n const currentState = getState();\n const cachedResult = currentState.opportunity.data[oppId];\n\n if (cachedResult) {\n if (cachedResult instanceof CustomError) {\n dispatch({\n type: \"OPPORTUNITY:FETCH:ERROR\",\n payload: {\n id: oppId,\n error: cachedResult,\n },\n });\n return;\n }\n\n dispatch({\n type: \"OPPORTUNITY:FETCH:END:FROMCACHE\",\n payload: {\n data: cachedResult,\n },\n });\n\n return cachedResult;\n }\n\n dispatch({\n type: \"OPPORTUNITY:FETCH:START\",\n });\n\n return fetch(`/api/opportunity/${oppId}`)\n .then>((res) => {\n if (res.ok) {\n return res.json();\n }\n\n throw new CustomError(\n \"Response from server was not 200\",\n \"error:opportunity\"\n );\n })\n .then(({ data, errorCode, errorMessage, success }) => {\n if (success) {\n dispatch({\n type: \"OPPORTUNITY:FETCH:END\",\n payload: {\n data: data.opportunity,\n },\n });\n\n return data.opportunity;\n }\n\n dispatch({\n type: \"OPPORTUNITY:FETCH:ERROR\",\n payload: {\n id: oppId,\n error: new CustomError(errorMessage, errorCode),\n },\n });\n })\n .catch((err: CustomError) => {\n console.log(err);\n\n dispatch({\n type: \"OPPORTUNITY:FETCH:ERROR:UNKNOWN\",\n payload: {\n error: err,\n },\n });\n\n return err;\n });\n};\n\nexport const resetErrors = () => ({\n type: \"OPPORTUNITY:ERROR:RESET\",\n});\n","import { useEffect } from \"react\";\nimport { CustomError } from \"@skv/core\";\nimport { useSelector } from \"react-redux\";\n\nimport { RootState, useThunkDispatch } from \"../\";\n\nimport { fetchOpportunity } from \"./actions\";\n\nexport const useOpportunity = (id: string) => {\n const dispatch = useThunkDispatch();\n const opportunityState = useSelector((state: RootState) => state.opportunity);\n\n const opportunity = id !== \"-1\" ? opportunityState.data[id] : null;\n\n useEffect(() => {\n if (!opportunity && id !== \"-1\") {\n dispatch(fetchOpportunity(id));\n }\n }, [id, opportunity, dispatch]);\n\n if (opportunity instanceof CustomError) {\n return {\n ...opportunityState,\n loading: false,\n error: opportunity,\n data: null,\n };\n }\n\n return {\n ...opportunityState,\n data: opportunity,\n };\n};\n","import type { PageEnvelope } from \"@skv/core\";\nimport * as React from \"react\";\n\nexport const defaultPageEnvelopeState = {\n success: false,\n data: null,\n errorCode: null,\n errorMessage: null,\n meta: null,\n};\n\ndeclare const window: {\n pageEnvelope: any;\n};\n\nexport const PageEnvelopeStateContext = React.createContext<\n PageEnvelope | undefined\n>(defaultPageEnvelopeState);\n\nexport const PageEnvelopeProvider: React.FC<{\n initialPageEnvelope: PageEnvelope;\n}> = ({ initialPageEnvelope, children }) => {\n const [state, setState] = React.useState(\n initialPageEnvelope || defaultPageEnvelopeState\n );\n\n const resetPageEnvelope = React.useCallback(() => {\n setState(defaultPageEnvelopeState);\n }, []);\n\n React.useEffect(() => {\n window.pageEnvelope = initialPageEnvelope;\n resetPageEnvelope();\n }, []);\n\n return (\n \n {children}\n \n );\n};\n\nexport const usePageEnvelope = (): {\n pageEnvelope: PageEnvelope;\n} => {\n const state = React.useContext(PageEnvelopeStateContext);\n\n /* Page envelope gets reset, so we store the initial value of pageEnvelope in a localised state before the context gets reset */\n const memoizedState = React.useMemo(() => {\n return state;\n }, []);\n\n return {\n pageEnvelope: memoizedState,\n };\n};\n\nexport default PageEnvelopeProvider;\n","import * as React from \"react\";\nimport { useLocation } from \"react-router-dom\";\nimport { usePageEnvelope } from \"./PageEnvelope\";\nimport { normalizeQuery } from \"../opportunityResult/util\";\n\nexport interface OpportunitySearchQueryState {\n keyword?: null | string;\n where?: null | string;\n radius?: number;\n category?: number[];\n typeofwork?: number[];\n commitment?: number[];\n suitablefor?: number[];\n daytime?: number[];\n organisationId?: null | string;\n page?: null | number;\n}\n\nexport const defaultOpportunitySearchQuery: OpportunitySearchQueryState = {\n keyword: null,\n where: null,\n radius: 0,\n category: [],\n typeofwork: [],\n commitment: [],\n suitablefor: [],\n daytime: [],\n organisationId: null,\n page: null,\n};\n\nexport const OpportunitySearchQueryStateContext = React.createContext<\n OpportunitySearchQueryState | undefined\n>(undefined);\n\nexport const OpportunitySearchQueryProvider = ({\n children,\n}: {\n children: React.ReactNode;\n}) => {\n const location = useLocation<{\n searchQuery?: OpportunitySearchQueryState;\n }>();\n\n const { pageEnvelope } = usePageEnvelope<{\n searchCriteria?: OpportunitySearchQueryState;\n }>();\n\n const searchQuery = React.useMemo(() => {\n // console.log(pageEnvelope.data?.searchCriteria);\n // console.log(location.state?.searchQuery);\n\n const query: OpportunitySearchQueryState = normalizeQuery(\n Object.assign(\n {},\n defaultOpportunitySearchQuery,\n location.state?.searchQuery || pageEnvelope.data?.searchCriteria\n )\n );\n\n return query;\n }, [location.state, pageEnvelope.data]);\n\n return (\n \n {children}\n \n );\n};\n\nexport const useOpportunitySearchQuery = (): OpportunitySearchQueryState => {\n const searchQuery = React.useContext(OpportunitySearchQueryStateContext);\n return searchQuery;\n};\n","import qs from \"qs\";\nimport {\n defaultOpportunitySearchQuery,\n OpportunitySearchQueryState,\n} from \"../context/OpportunitySearchQuery\";\n\nimport { pick } from \"lodash-es\";\n\nfunction alphabeticalSort(a: string, b: string): number {\n return a.localeCompare(b);\n}\n\nconst qsOptions: qs.IStringifyOptions = {\n arrayFormat: \"repeat\",\n // sorts keys, not values\n sort: alphabeticalSort,\n};\n\nconst KEYS: (keyof OpportunitySearchQueryState)[] = [\n \"category\",\n \"commitment\",\n \"daytime\",\n \"keyword\",\n \"organisationId\",\n \"page\",\n \"radius\",\n \"suitablefor\",\n \"typeofwork\",\n \"where\",\n];\n\nexport const normalizeQuery = (\n searchQuery?: OpportunitySearchQueryState\n): OpportunitySearchQueryState => {\n if (searchQuery === undefined) {\n return defaultOpportunitySearchQuery;\n }\n\n // remove all unused keys\n searchQuery = pick(searchQuery, KEYS);\n\n // normalize query with default from server\n // empty keyword on server is null\n if (searchQuery.keyword === \"\") {\n searchQuery.keyword = null;\n }\n\n // query.where make each word uppercase\n // and remove extraenous spaces\n if (searchQuery.where === \"\") {\n searchQuery.where = null;\n }\n\n // server page property default is null\n if (searchQuery.page === 1) {\n searchQuery.page = null;\n }\n\n // remove duplicate entries and\n // sort arrays from lowest to highest\n for (const key in searchQuery) {\n if (Array.isArray(searchQuery[key])) {\n searchQuery[key] = [...Array.from(new Set(searchQuery[key]))];\n searchQuery[key] = searchQuery[key].sort((a, b) => a - b);\n }\n }\n\n return searchQuery;\n};\n\nexport const opportunitySearchQueryToString = (\n searchQuery?: OpportunitySearchQueryState\n): string => {\n if (searchQuery === undefined) {\n return qs\n .stringify(defaultOpportunitySearchQuery, qsOptions)\n .toLocaleLowerCase();\n }\n\n return qs\n .stringify(\n { ...defaultOpportunitySearchQuery, ...normalizeQuery(searchQuery) },\n qsOptions\n )\n .toLocaleLowerCase();\n};\n","import type { AppThunk } from \"../\";\nimport type { PageEnvelope } from \"@skv/core\";\nimport { CustomError } from \"@skv/core\";\nimport { OpportunitySearchResults } from \"@skv/core\";\n\nimport { OpportunitySearchQueryState } from \"../context/OpportunitySearchQuery\";\nimport { opportunitySearchQueryToString } from \"./util\";\n\nexport const addResultsToCache = (\n results: OpportunitySearchResults,\n searchQuery: OpportunitySearchQueryState\n): AppThunk> => async (\n dispatch,\n getState\n): Promise => {\n const query = opportunitySearchQueryToString(searchQuery);\n\n dispatch({\n type: \"RESULT:FETCH:END\",\n payload: {\n data: results,\n searchQuery: query,\n },\n });\n\n return results;\n};\n\nexport const fetchOpportunities = (\n searchQuery?: OpportunitySearchQueryState\n): AppThunk> => async (\n dispatch,\n getState\n): Promise => {\n const query = opportunitySearchQueryToString(searchQuery);\n const { opportunityResult } = getState();\n\n dispatch({\n type: \"RESULT:FETCH:START\",\n });\n\n if (opportunityResult.data[query]) {\n dispatch({\n type: \"RESULT:FETCH:END:CACHE\",\n payload: {\n searchQuery: query,\n data: opportunityResult.data[query],\n },\n });\n return opportunityResult.data[query];\n }\n\n return fetch(`/api/opportunity/search?${query}`)\n .then>(\n (res) => {\n if (res.ok) {\n return res.json();\n }\n\n switch (res.status) {\n case 500:\n default:\n throw Error(\"Unhandled server error\");\n }\n }\n )\n .then(({ data, errorCode, errorMessage, success }) => {\n console.log(data);\n\n if (success) {\n /* save to cache the same result with the resolved canonicalLocation */\n if (\n data.opportunityResult.canonicalLocation !== null &&\n data.opportunityResult.canonicalLocation !== searchQuery?.where\n ) {\n dispatch(\n addResultsToCache(data.opportunityResult, {\n ...searchQuery,\n where: data.opportunityResult.canonicalLocation,\n })\n );\n }\n\n dispatch({\n type: \"RESULT:FETCH:END\",\n payload: {\n searchQuery: query,\n data: data.opportunityResult,\n },\n });\n\n return data.opportunityResult;\n }\n\n dispatch({\n type: \"RESULT:FETCH:ERROR\",\n payload: {\n error: new CustomError(errorMessage, errorCode),\n },\n });\n });\n};\n","import type { AppThunk } from \"../\";\nimport { CustomError, PageEnvelope } from \"@skv/core\";\n\nimport { Organisation } from \"./reducer\";\n\nexport const fetchOrganisation = (\n orgId: string\n): AppThunk> => async (\n dispatch,\n getState\n): Promise => {\n if (!orgId) {\n throw Error(\"No organisationId passed as argument.\");\n }\n\n const currentState = getState();\n const cachedResult = currentState.organisation.data[orgId];\n\n if (cachedResult) {\n if (cachedResult instanceof CustomError) {\n dispatch({\n type: \"ORGANISATION:FETCH:ERROR\",\n payload: {\n id: orgId,\n error: cachedResult,\n },\n });\n return;\n }\n\n dispatch({\n type: \"ORGANISATION:FETCH:END:FROMCACHE\",\n payload: {\n data: cachedResult,\n },\n });\n\n return cachedResult;\n }\n\n dispatch({\n type: \"ORGANISATION:FETCH:START\",\n });\n\n return fetch(`/api/organisation/${orgId}`)\n .then>((res) => {\n if (res.ok) {\n return res.json();\n }\n\n throw new CustomError(\n \"Response from server was not 200\",\n \"error:organisation\"\n );\n })\n .then(({ data, errorCode, errorMessage, success }) => {\n if (success) {\n dispatch({\n type: \"ORGANISATION:FETCH:END\",\n payload: {\n data: data.organisation,\n },\n });\n\n return data.organisation;\n }\n\n dispatch({\n type: \"ORGANISATION:FETCH:ERROR\",\n payload: {\n id: orgId,\n error: new CustomError(errorMessage, errorCode),\n },\n });\n })\n .catch((err: CustomError) => {\n dispatch({\n type: \"ORGANISATION:FETCH:ERROR:UNKNOWN\",\n payload: {\n error: err,\n },\n });\n\n return err;\n });\n};\n\nexport const resetErrors = () => ({\n type: \"ORGANISATION:ERROR:RESET\",\n});\n","import { useEffect } from \"react\";\nimport { CustomError } from \"@skv/core\";\nimport { useSelector } from \"react-redux\";\n\nimport { RootState, useThunkDispatch } from \"../\";\n\nimport { fetchOrganisation } from \"./actions\";\n\nexport const useOrganisation = (id: string) => {\n const dispatch = useThunkDispatch();\n const organisationState = useSelector(\n (state: RootState) => state.organisation\n );\n\n const organisation = organisationState.data[id];\n\n useEffect(() => {\n dispatch(fetchOrganisation(id));\n }, [id, dispatch]);\n\n if (organisation instanceof CustomError) {\n return {\n ...organisationState,\n loading: false,\n error: organisation,\n data: null,\n };\n }\n\n return {\n ...organisationState,\n data: organisation,\n };\n};\n","import type { CustomError, MetaSegment } from \"@skv/core\";\n\ntype Website = {\n name: string;\n url: string;\n};\n\nexport interface Organisation {\n id: number;\n name: string;\n description: string;\n category: string;\n website: Website | null;\n emailAddress: string;\n phoneNumber: string;\n managingVRC: string;\n logoUrl: string;\n primaryAddress: PrimaryAddress;\n canonicalUrl: string;\n opportunitySearchUrl: string;\n friendlyName: string;\n totalCount: number;\n opportunities: Opportunity[];\n isSocialEnterprise: boolean;\n agencyNames: string[];\n}\n\ninterface Opportunity {\n category: MetaSegment;\n friendlyName: string;\n id: number;\n locations: Location[];\n name: string;\n onlineRemoteVolunteers: boolean;\n organisation: OppOrganisation;\n summary: string;\n typesOfWork: MetaSegment[];\n url: string;\n}\n\ninterface Location {\n suburb: string;\n state: string;\n displayName: string;\n segments: MetaSegment[];\n}\n\ninterface OppOrganisation {\n logoUrl: string;\n id: number;\n name: string;\n friendlyName: string;\n url: string;\n}\n\ninterface PrimaryAddress {\n street: string;\n suburb: string;\n state: string;\n}\n\nexport interface State {\n loading: boolean;\n error: null | CustomError;\n data: {\n [key: string]: Organisation | CustomError;\n };\n}\n\nexport type ActionTypes =\n | {\n type: \"ORGANISATION:FETCH:START\";\n }\n | {\n type: \"ORGANISATION:FETCH:END\" | \"ORGANISATION:FETCH:END:FROMCACHE\";\n payload: {\n data: Organisation;\n };\n }\n | {\n type: \"ORGANISATION:FETCH:ERROR\";\n payload: {\n id: string;\n error: CustomError;\n };\n }\n | {\n type: \"ORGANISATION:FETCH:ERROR:UNKNOWN\";\n payload: {\n error: CustomError;\n };\n }\n | {\n type: \"ORGANISATION:ERROR:RESET\";\n };\n\nexport const reducer = (\n state: State = {\n loading: false,\n error: null,\n data: null,\n },\n action: ActionTypes\n): State => {\n switch (action.type) {\n case \"ORGANISATION:FETCH:START\":\n return {\n ...state,\n loading: true,\n error: null,\n };\n case \"ORGANISATION:FETCH:END\":\n case \"ORGANISATION:FETCH:END:FROMCACHE\":\n return {\n ...state,\n loading: false,\n error: null,\n data: {\n ...state.data,\n [action.payload.data.id]: action.payload.data,\n },\n };\n case \"ORGANISATION:FETCH:ERROR\":\n return {\n ...state,\n loading: false,\n error: action.payload.error,\n data: {\n ...state.data,\n [action.payload.id]: action.payload.error,\n },\n };\n case \"ORGANISATION:FETCH:ERROR:UNKNOWN\":\n return {\n ...state,\n loading: false,\n error: action.payload.error,\n };\n case \"ORGANISATION:ERROR:RESET\":\n return {\n ...state,\n loading: false,\n error: null,\n };\n default:\n return state;\n }\n};\n","import * as React from \"react\";\nimport { useLocation } from \"react-router-dom\";\nimport { normalizeQuery } from \"../organisationResult/util\";\nimport { usePageEnvelope } from \"./PageEnvelope\";\n\nexport interface OrganisationSearchQueryState {\n keyword?: null | string;\n where?: null | string;\n category?: number[];\n page?: null | number;\n}\n\nexport const defaultOrganisationSearchQuery = {\n keyword: null,\n where: null,\n category: [],\n page: null,\n};\n\nexport const OrganisationSearchQueryStateContext = React.createContext<\n OrganisationSearchQueryState | undefined\n>(undefined);\n\nexport const OrganisationSearchQueryProvider: React.FC<{}> = ({ children }) => {\n const location = useLocation<{\n searchQuery?: OrganisationSearchQueryState;\n }>();\n\n const { pageEnvelope } = usePageEnvelope<{\n searchCriteria?: OrganisationSearchQueryState;\n }>();\n\n const searchQuery = React.useMemo(() => {\n return normalizeQuery(\n Object.assign(\n {},\n defaultOrganisationSearchQuery,\n location.state?.searchQuery ||\n pageEnvelope.data?.searchCriteria ||\n defaultOrganisationSearchQuery\n )\n );\n }, [location.state, pageEnvelope.data]);\n\n return (\n \n {children}\n \n );\n};\n\nexport const useOrganisationSearchQuery = (): OrganisationSearchQueryState => {\n const searchQuery = React.useContext(OrganisationSearchQueryStateContext);\n return searchQuery;\n};\n\nexport default OrganisationSearchQueryStateContext;\n","import qs from \"qs\";\nimport {\n defaultOrganisationSearchQuery,\n OrganisationSearchQueryState,\n} from \"../context/OrganisationSearchQuery\";\n\nimport { pick } from \"lodash-es\";\n\nfunction alphabeticalSort(a: string, b: string): number {\n return a.localeCompare(b);\n}\n\nconst qsOptions: qs.IStringifyOptions = {\n arrayFormat: \"repeat\",\n // sorts keys, not values\n sort: alphabeticalSort,\n};\n\nconst KEYS: (keyof OrganisationSearchQueryState)[] = [\n \"category\",\n \"keyword\",\n \"page\",\n \"where\",\n];\n\nexport const normalizeQuery = (\n searchQuery?: OrganisationSearchQueryState\n): OrganisationSearchQueryState => {\n if (searchQuery === undefined) {\n return defaultOrganisationSearchQuery;\n }\n\n // remove all unused keys\n searchQuery = pick(searchQuery, KEYS);\n\n // normalize query with default from server\n // empty keyword on server is null\n if (searchQuery.keyword === \"\") {\n searchQuery.keyword = null;\n }\n\n // query.where make each word uppercase\n // and remove extraenous spaces\n if (searchQuery.where === \"\") {\n searchQuery.where = null;\n }\n\n // server page property default is null\n if (searchQuery.page === 1) {\n searchQuery.page = null;\n }\n\n // remove duplicate entries and\n // sort arrays from lowest to highest\n for (const key in searchQuery) {\n if (Array.isArray(searchQuery[key])) {\n searchQuery[key] = [...Array.from(new Set(searchQuery[key]))];\n searchQuery[key] = searchQuery[key].sort((a, b) => a - b);\n }\n }\n\n return searchQuery;\n};\n\nexport const organisationSearchQueryToString = (\n searchQuery?: OrganisationSearchQueryState\n): string => {\n if (searchQuery === undefined) {\n return qs\n .stringify(defaultOrganisationSearchQuery, qsOptions)\n .toLocaleLowerCase();\n }\n\n return qs\n .stringify(\n { ...defaultOrganisationSearchQuery, ...normalizeQuery(searchQuery) },\n qsOptions\n )\n .toLocaleLowerCase();\n};\n","import type { AppThunk } from \"../\";\nimport type { PageEnvelope } from \"@skv/core\";\n\nimport { OrganisationSearchResults } from \"./reducer\";\nimport { OrganisationSearchQueryState } from \"../context/OrganisationSearchQuery\";\nimport { organisationSearchQueryToString } from \"./util\";\n\nexport const fetchOrganisations = (\n searchQuery?: OrganisationSearchQueryState\n): AppThunk> => async (\n dispatch,\n getState\n): Promise => {\n const query = organisationSearchQueryToString(searchQuery);\n\n const currentState = getState();\n\n if (currentState.organisationResult.data[query]) {\n dispatch({\n type: \"ORG_RESULT:FETCH:END\",\n payload: {\n searchQuery: query,\n data: currentState.organisationResult.data[query],\n },\n });\n return currentState.organisationResult.data[query];\n }\n\n dispatch({\n type: \"ORG_RESULT:FETCH:START\",\n });\n\n return fetch(`/api/organisation/search?${query}`)\n .then>(\n (res) => {\n if (res.ok) {\n return res.json();\n }\n }\n )\n .then(({ data, errorCode, errorMessage, success }) => {\n if (!success) {\n throw Error(\"Failed to get orgnanisations\");\n }\n\n dispatch({\n type: \"ORG_RESULT:FETCH:END\",\n payload: {\n searchQuery: query,\n data: data.organisationResult,\n },\n });\n\n return data.organisationResult;\n });\n};\n","import { MetaSegment, WorldLocation, SearchResultStatus } from \"@skv/core\";\n\nexport interface OrganisationSearchResult {\n category: MetaSegment;\n location: WorldLocation;\n id: number;\n name: string;\n friendlyName: string;\n url: string;\n agencyName: string;\n}\n\nexport interface OrganisationSearchResults {\n totalCount: number;\n organisations: OrganisationSearchResult[];\n page: number;\n pageSize: number;\n totalPages: number;\n canonicalUrl: string;\n}\n\nexport interface State {\n loading: boolean;\n error: Error | null | false;\n data: { [searchQuery: string]: OrganisationSearchResults };\n status: SearchResultStatus;\n}\n\nexport type ActionTypes =\n | {\n type: \"ORG_RESULT:FETCH:START\";\n }\n | {\n type: \"ORG_RESULT:FETCH:END\";\n payload: {\n searchQuery: string;\n data: OrganisationSearchResults;\n };\n }\n | {\n type: \"ORG_RESTULT:FETCH:ERROR\";\n payload: {\n error: Error;\n };\n };\n\nexport const reducer = (\n state: State = {\n loading: false,\n error: false,\n data: {},\n status: SearchResultStatus.IDLE,\n },\n action: ActionTypes\n): State => {\n switch (action.type) {\n case \"ORG_RESULT:FETCH:START\":\n return {\n ...state,\n loading: true,\n status: SearchResultStatus.FETCHING_DATA,\n };\n case \"ORG_RESULT:FETCH:END\":\n return {\n ...state,\n loading: false,\n data: {\n ...state.data,\n [action.payload.searchQuery]: action.payload.data,\n },\n status: SearchResultStatus.IDLE,\n };\n case \"ORG_RESTULT:FETCH:ERROR\":\n return {\n ...state,\n error: action.payload.error,\n status: SearchResultStatus.FETCH_ERROR,\n };\n default:\n return state;\n }\n};\n","import * as React from \"react\";\n\nexport interface AppSettings {\n adminApplicationUrl: string;\n applicationName: string;\n applicationUrl: string;\n homeUrl: string;\n certsyHirerLandingUrl: string;\n certsySignInUrl: string;\n facebookAppId: string;\n omnitureScriptUrl: string;\n seekVolunteerUrl: string;\n supportEmail?: string;\n showVolunteerSoftwareIntegrations?: boolean;\n showAdviceTipsSubscribe?: boolean;\n showApplicationNudge?: boolean;\n showFiltersInSearch?: boolean;\n socialTradersFeatureFlag?: boolean;\n}\n\ninterface ServerStaticContext {\n appSettings: AppSettings;\n}\n\nexport const ServerStatic = React.createContext<\n ServerStaticContext | undefined\n>(undefined);\n\nexport const ServerStaticProvider: React.FC = ({\n appSettings,\n children,\n}) => {\n const value = React.useMemo(() => {\n return {\n appSettings,\n };\n }, []);\n\n return (\n {children}\n );\n};\n\nexport const useServerStatic = (): ServerStaticContext => {\n const context = React.useContext(ServerStatic);\n\n if (!context) {\n throw Error(\"useServerStatic used outside a global Provider\");\n }\n\n return context;\n};\n\nexport const useAppSettings = (): AppSettings => {\n const { appSettings } = useServerStatic();\n\n return appSettings;\n};\n","import { FriendlyKeyValueUrl, KeyValue, MetaSegment } from \"@skv/core\";\nimport * as React from \"react\";\n\nexport interface GlobalStaticProps {\n categoryList: FriendlyKeyValueUrl[];\n commitmentList: KeyValue[];\n dayAndTimeList: KeyValue[];\n genders: KeyValue[];\n majorCities: MetaSegment[];\n suitableForList: KeyValue[];\n typeOfWorkList: KeyValue[];\n\n staticRoutes?: string[]; // au + nz, todo figure out how to remove for nsw?\n adviceAndTipsCategoryRoutes?: (KeyValue & { slug: string })[];\n}\n\nconst GlobalStaticContext = React.createContext(\n undefined\n);\n\ninterface GlobalStaticProviderProps {\n value: GlobalStaticProps;\n}\n\nexport const GlobalStaticProvider: React.FC = ({\n children,\n value,\n}) => {\n return (\n \n {children}\n \n );\n};\n\nexport const useGlobal = (): GlobalStaticProps => {\n const ctx = React.useContext(GlobalStaticContext);\n\n if (!ctx) {\n throw Error(\n \"useGlobal hook called outside a component\"\n );\n }\n\n return ctx;\n};\n","import type { FriendlyKeyValueUrl, PageEnvelope } from \"@skv/core\";\nimport { Machine, assign } from \"xstate\";\n\ninterface SearchFormStateSchema {\n states: {\n initialSuggestions: {\n states: {\n idle: {};\n loading: {};\n loaded: {};\n failed: {};\n };\n };\n relatedSuggestions: {\n states: {\n idle: {};\n loading: {};\n loaded: {};\n failed: {};\n };\n };\n };\n}\n\nexport type SearchFormEvent =\n | {\n type: \"SELECT\";\n value: string[];\n }\n | {\n type: \"CLEAR_ALL_INPUTS\";\n }\n | {\n type: \"KEYWORD_INPUT_CLEAR\";\n }\n | {\n type: \"KEYWORD_INPUT_CHANGE\";\n value: string;\n }\n | {\n type: \"KEYWORD_INPUT_SELECT\";\n value: FriendlyKeyValueUrl;\n }\n | {\n type: \"LOCATION_INPUT_CLEAR\";\n }\n | {\n type: \"LOCATION_INPUT_CHANGE\";\n value: string;\n }\n | {\n type: \"LOCATION_INPUT_SELECT\";\n value: string;\n }\n | {\n type: \"FETCH_START_INITIAL_SUGGESTIONS\";\n }\n | {\n type: \"FETCH_START_LOCATIONS\";\n value: string;\n }\n | {\n type: \"\";\n };\n\ninterface SearchFormContext {\n keyword: string;\n where: string;\n category: number[];\n didKeywordAutoComplete: boolean;\n didWhereAutoComplete: boolean;\n initialSuggestions: string[];\n relatedSuggestions: string[];\n\n cache: {\n [key: string]: string[];\n };\n}\n\nlet INITIAL_SUGGESTIONS_CACHE = null;\nconst WHERE_STORE_NAME = \"searchFormWhere\";\n\n/* Guards */\nconst locationSearchValid = (ctx, event) => {\n if (\"value\" in event) {\n return event.value.length > 2;\n }\n\n return false;\n};\n\nconst idleLocationHasValidValue = (ctx, event) => {\n return ctx.where.length > 2;\n};\n\nexport const searchFormMachine = Machine<\n SearchFormContext,\n SearchFormStateSchema,\n SearchFormEvent\n>({\n id: \"typeahead\",\n type: \"parallel\",\n context: {\n keyword: \"\",\n where: \"\",\n category: [],\n didKeywordAutoComplete: false,\n didWhereAutoComplete: false,\n initialSuggestions: [],\n relatedSuggestions: [],\n cache: {},\n },\n states: {\n initialSuggestions: {\n initial: INITIAL_SUGGESTIONS_CACHE ? \"loaded\" : \"loading\",\n states: {\n idle: {\n on: {\n FETCH_START_INITIAL_SUGGESTIONS: \"loading\",\n },\n },\n loading: {\n invoke: {\n id: \"fetch_initial_suggestions\",\n src: (ctx) => {\n if (INITIAL_SUGGESTIONS_CACHE) {\n return Promise.resolve().then(() => INITIAL_SUGGESTIONS_CACHE);\n }\n\n return fetch(\"/api/majorcities\")\n .then>((res) =>\n res.json()\n )\n .then(({ data }) => {\n INITIAL_SUGGESTIONS_CACHE = data.locations;\n return data.locations;\n });\n },\n onDone: {\n target: \"loaded\",\n actions: assign({\n initialSuggestions: (ctx, event) => event.data,\n }),\n },\n onError: \"failed\",\n },\n },\n loaded: {},\n failed: {},\n },\n },\n relatedSuggestions: {\n initial: \"idle\",\n states: {\n idle: {\n always: [\n {\n target: \"loading\",\n cond: idleLocationHasValidValue,\n },\n ],\n },\n loading: {\n invoke: {\n id: \"fetch_location_suggestions\",\n src: (ctx) => {\n if (ctx.cache[ctx.where]) {\n return Promise.resolve().then(() => ctx.cache[ctx.where]);\n }\n\n const jsonCache =\n sessionStorage?.getItem(WHERE_STORE_NAME) || \"{}\";\n const whereCache = JSON.parse(jsonCache) as Record<\n string,\n string[]\n >;\n\n if (whereCache.hasOwnProperty(ctx.where)) {\n return Promise.resolve().then(() => whereCache[ctx.where]);\n }\n\n return fetch(`/api/locations?q=${ctx.where}`)\n .then>((res) =>\n res.json()\n )\n .then(({ data }) => {\n try {\n whereCache[ctx.where] = [...data.locations];\n sessionStorage?.setItem(\n WHERE_STORE_NAME,\n JSON.stringify(whereCache)\n );\n } catch (e) {\n console.error(\"Error storing search form where: \", e);\n }\n\n return data.locations;\n });\n },\n onDone: {\n target: \"loaded\",\n actions: assign({\n cache: (ctx, event) =>\n Object.assign({}, ctx.cache, {\n [ctx.where]: event.data,\n }),\n relatedSuggestions: (ctx, event) => event.data,\n }),\n },\n onError: \"failed\",\n },\n },\n loaded: {},\n failed: {},\n },\n },\n },\n on: {\n CLEAR_ALL_INPUTS: {\n actions: assign({\n keyword: (ctx) => \"\",\n category: (ctx) => [],\n where: (ctx) => \"\",\n didKeywordAutoComplete: (ctx) => false,\n didWhereAutoComplete: (ctx) => false,\n cache: (ctx) => {\n const tempCache = Object.assign({}, ctx.cache);\n delete tempCache[ctx.keyword];\n delete tempCache[ctx.where];\n return tempCache;\n },\n }),\n },\n KEYWORD_INPUT_CLEAR: {\n actions: assign({\n keyword: (ctx) => \"\",\n category: (ctx) => [],\n didKeywordAutoComplete: (ctx) => false,\n cache: (ctx) => {\n const tempCache = Object.assign({}, ctx.cache);\n delete tempCache[ctx.keyword];\n return tempCache;\n },\n }),\n },\n KEYWORD_INPUT_CHANGE: {\n actions: assign({\n keyword: (ctx, e) => e.value,\n category: (ctx) => [],\n didKeywordAutoComplete: (ctx) => false,\n }),\n },\n KEYWORD_INPUT_SELECT: {\n actions: assign({\n keyword: (ctx) => \"\",\n category: (ctx, e) => [e.value.id],\n didKeywordAutoComplete: (ctx) => true,\n }),\n },\n LOCATION_INPUT_CLEAR: {\n actions: assign({\n where: (ctx) => \"\",\n didWhereAutoComplete: (ctx) => false,\n }),\n },\n LOCATION_INPUT_CHANGE: {\n actions: assign({\n where: (ctx, e) => e.value,\n didWhereAutoComplete: (ctx) => false,\n }),\n },\n LOCATION_INPUT_SELECT: [\n {\n target: \"relatedSuggestions.loading\",\n cond: locationSearchValid,\n actions: assign({\n where: (ctx, e) => e.value || ctx.where || \"\",\n didWhereAutoComplete: (ctx) => true,\n }),\n },\n ],\n FETCH_START_LOCATIONS: {\n target: \"relatedSuggestions.loading\",\n cond: locationSearchValid,\n actions: assign({\n where: (ctx, e) => e.value || ctx.where || \"\",\n }),\n },\n },\n});\n","import {\n applyMiddleware,\n combineReducers,\n compose,\n createStore as createReduxStore,\n} from \"redux\";\n\nimport { Provider, useDispatch } from \"react-redux\";\nimport thunk, { ThunkAction, ThunkMiddleware } from \"redux-thunk\";\n\nimport * as favouritesStore from \"./favourites\";\nimport * as opportunityStore from \"./opportunity\";\nimport * as opportunityResultStore from \"./opportunityResult\";\nimport * as organisationStore from \"./organisation\";\nimport * as organisationResultStore from \"./organisationResult\";\n\nimport {\n OpportunitySearchQueryState,\n OrganisationSearchQueryState,\n} from \"./context\";\n\nimport * as React from \"react\";\n\nimport {\n CustomError,\n Opportunity,\n OpportunityResultStateEnums,\n OpportunitySearchResults,\n PageEnvelope,\n SearchResultStatus,\n} from \"@skv/core\";\n\nexport * from \"./context\";\n\nexport {\n favouritesStore,\n opportunityResultStore,\n opportunityStore,\n organisationResultStore,\n organisationStore,\n};\n\nexport const reducer = combineReducers({\n opportunityResult: opportunityResultStore.reducer,\n opportunity: opportunityStore.reducer,\n organisation: organisationStore.reducer,\n favourites: favouritesStore.reducer,\n organisationResult: organisationResultStore.reducer,\n});\n\nexport type RootState = ReturnType;\n\nexport type RootActions =\n | opportunityResultStore.ActionTypes\n | opportunityStore.ActionTypes\n | organisationStore.ActionTypes\n | favouritesStore.ActionTypes\n | organisationResultStore.ActionTypes;\n\ndeclare const window: {\n __REDUX_DEVTOOLS_EXTENSION__: any;\n};\n\nconst ReduxDevToolsMiddleware = ((): any => {\n if (process.env.NODE_ENV !== \"production\") {\n if (typeof window !== \"undefined\" && window.__REDUX_DEVTOOLS_EXTENSION__) {\n return window.__REDUX_DEVTOOLS_EXTENSION__({ trace: true });\n }\n }\n\n return (f): any => f;\n})();\n\nexport const createStore = (initialState?: Partial) => {\n return createReduxStore(\n reducer,\n initialState,\n compose(\n applyMiddleware(thunk as ThunkMiddleware),\n ReduxDevToolsMiddleware\n )\n );\n};\n\ntype ThunkDispatch = ReturnType[\"dispatch\"];\n\nexport const useThunkDispatch = () => {\n return useDispatch();\n};\n\nexport type AppThunk = ThunkAction<\n ReturnType,\n RootState,\n unknown,\n RootActions\n>;\n\ntype InitialServerPageEnvelope = {\n opportunityResult?: OpportunitySearchResults;\n opportunity?: Opportunity;\n organisation?: organisationStore.Organisation;\n organisationResult?: organisationResultStore.OrganisationSearchResults;\n favourites?: any;\n\n searchCriteria?: OpportunitySearchQueryState | OrganisationSearchQueryState;\n};\n\ntype InitialServerMeta = {\n id?: number;\n} | null;\n\nconst handleError = (\n pageEnvelope: PageEnvelope,\n initialState: RootState\n): RootState => {\n const { meta } = pageEnvelope;\n\n // error:namespace:errordesc\n\n const err = pageEnvelope.errorCode.split(\":\");\n\n if (err[0] !== \"error\") {\n return initialState;\n }\n\n const key = err[1];\n const key2 = err[2];\n\n // if (!initialState[key]) {\n // return initialState;\n // }\n\n switch (key) {\n case \"application\":\n if (key2 === \"alreadyexists\") {\n initialState.opportunity.error = new CustomError(\n pageEnvelope.errorMessage,\n pageEnvelope.errorCode\n );\n initialState.opportunity.data = {\n [pageEnvelope.data.opportunity.id]: initialState.opportunity.error,\n };\n }\n\n break;\n case \"organisation\":\n case \"opportunity\": {\n initialState[key].error = new CustomError(\n pageEnvelope.errorMessage,\n pageEnvelope.errorCode\n );\n initialState[key].data = {\n [meta?.id]: initialState[key].error,\n };\n break;\n }\n }\n\n return initialState;\n};\n\nexport const createInitialState = <\n T extends InitialServerPageEnvelope,\n M extends InitialServerMeta\n>(\n pageEnvelope: PageEnvelope\n): RootState => {\n const { opportunities, organisations } =\n favouritesStore.getFavouritesFromCookie();\n\n let initialState: RootState = {\n opportunityResult: {\n loading: false,\n error: null,\n data: {},\n state: OpportunityResultStateEnums.IDLE,\n },\n opportunity: {\n loading: false,\n error: null,\n data: {},\n },\n organisation: {\n loading: false,\n error: null,\n data: {},\n },\n organisationResult: {\n loading: false,\n error: null,\n data: {},\n status: SearchResultStatus.IDLE,\n },\n favourites: {\n loading: false,\n error: null,\n opportunities,\n organisations,\n },\n };\n\n if (pageEnvelope) {\n if (pageEnvelope.errorCode) {\n initialState = handleError(pageEnvelope, initialState);\n }\n\n if (pageEnvelope.data) {\n if (\"opportunityResult\" in pageEnvelope.data) {\n initialState.opportunityResult = {\n ...initialState.opportunityResult,\n data: {\n [opportunityResultStore.util.opportunitySearchQueryToString(\n pageEnvelope.data.searchCriteria as OpportunitySearchQueryState\n )]: pageEnvelope.data.opportunityResult,\n },\n };\n }\n\n if (\"opportunity\" in pageEnvelope.data) {\n initialState.opportunity = {\n ...initialState.opportunity,\n data: {\n [pageEnvelope.data.opportunity.id]: pageEnvelope.data.opportunity,\n },\n };\n }\n\n if (\"organisation\" in pageEnvelope.data) {\n initialState.organisation = {\n ...initialState.organisation,\n data: {\n [pageEnvelope.data.organisation.id]: pageEnvelope.data.organisation,\n },\n };\n }\n\n if (\"organisationResult\" in pageEnvelope.data) {\n initialState.organisationResult = {\n ...initialState.organisationResult,\n data: {\n [organisationResultStore.util.organisationSearchQueryToString(\n pageEnvelope.data.searchCriteria\n )]: pageEnvelope.data.organisationResult,\n },\n };\n }\n }\n }\n\n return initialState;\n};\n\nexport const ReduxProvider: React.FC<{\n initialPageEnvelope: PageEnvelope;\n}> = ({ initialPageEnvelope, children }) => {\n const initialState = React.useMemo(() => {\n return createInitialState(initialPageEnvelope);\n }, [initialPageEnvelope]);\n\n const store = createStore(initialState);\n\n return {children};\n};\n\nexport * from \"./SearchForm.state\";\n","import {\n OpportunitySearchResults,\n OpportunityResultStateEnums,\n} from \"@skv/core\";\n\nimport { CustomError } from \"@skv/core\";\n\nexport interface State {\n loading: boolean;\n error: false | null | CustomError;\n data: { [searchQuery: string]: OpportunitySearchResults };\n state: OpportunityResultStateEnums;\n}\n\nexport type ActionTypes =\n | {\n type: \"RESULT:FETCH:START\";\n }\n | {\n type: \"RESULT:FETCH:END\" | \"RESULT:FETCH:END:CACHE\";\n payload: {\n searchQuery: string;\n data: OpportunitySearchResults;\n };\n }\n | {\n type: \"RESULT:FETCH:ERROR\";\n payload: {\n error: CustomError;\n };\n }\n | {\n type: \"RESULT:ERROR:RESET\";\n };\n\nexport const reducer = (\n state: State = {\n loading: false,\n error: false,\n data: {},\n state: OpportunityResultStateEnums.IDLE,\n },\n action: ActionTypes\n): State => {\n switch (action.type) {\n case \"RESULT:FETCH:START\":\n return {\n ...state,\n loading: true,\n error: false,\n state: OpportunityResultStateEnums.FETCHING_DATA,\n };\n case \"RESULT:FETCH:END\":\n case \"RESULT:FETCH:END:CACHE\":\n return {\n ...state,\n loading: false,\n error: false,\n data: {\n ...state.data,\n [action.payload.searchQuery]: action.payload.data,\n },\n state: OpportunityResultStateEnums.IDLE,\n };\n case \"RESULT:FETCH:ERROR\":\n return {\n ...state,\n loading: false,\n error: action.payload.error,\n state: OpportunityResultStateEnums.FETCH_ERROR,\n };\n case \"RESULT:ERROR:RESET\":\n return {\n ...state,\n loading: false,\n error: false,\n state: OpportunityResultStateEnums.IDLE,\n };\n default:\n return state;\n }\n};\n","import * as React from \"react\";\nimport { useThunkReducer } from \"../hooks/useThunkReducer\";\n\nexport type RootViewModel = {\n cache: {\n [url: string]: any;\n };\n};\n\ntype RootViewState = RootViewModel;\n\ntype RootViewDispatch = {\n (action: RootViewActions): void;\n (\n action: (\n dispatch: React.Dispatch,\n getState: () => RootViewModel\n ) => void\n ): void;\n};\n\nconst RootViewStateContext = React.createContext(\n undefined\n);\n\nconst RootViewGetStateContext = React.createContext<\n () => RootViewState | undefined\n>(undefined);\n\nconst RootViewDispatchContext = React.createContext<\n RootViewDispatch | undefined\n>(undefined);\n\ninterface ProviderProps {\n initialState: RootViewModel;\n}\n\ntype RootViewActions =\n | {\n type: \"ADD_VIEW_TO_CACHE\";\n payload: {\n url: string;\n data: any;\n };\n }\n | {\n type: \"UPDATE_CACHED_VIEW\";\n payload: {\n url: string;\n data: any;\n };\n }\n | {\n type: \"URL_VIEW_MODEL_ERROR\";\n payload: {\n url: string;\n error: Error;\n };\n }\n | {\n type: \"REMOVE_CACHED_VIEW\";\n payload: {\n url: string;\n };\n }\n | {\n type: \"REMOVE_CACHED_VIEWS\";\n payload: string[];\n };\n\nconst RootViewReducer = (state: RootViewModel, action: RootViewActions) => {\n switch (action.type) {\n case \"ADD_VIEW_TO_CACHE\":\n return {\n ...state,\n cache: {\n ...state.cache,\n [action.payload.url]: action.payload.data,\n },\n };\n case \"UPDATE_CACHED_VIEW\":\n return {\n ...state,\n cache: {\n ...state.cache,\n [action.payload.url]: Object.assign(\n {},\n state.cache[action.payload.url],\n action.payload.data\n ),\n },\n };\n case \"REMOVE_CACHED_VIEW\":\n return {\n ...state,\n cache: {\n ...state.cache,\n [action.payload.url]: undefined,\n },\n };\n case \"REMOVE_CACHED_VIEWS\": {\n return {\n ...state,\n cache: {\n ...state.cache,\n ...(() => {\n return action.payload.reduce((acc, cur) => {\n acc[cur] = undefined;\n return acc;\n }, {} as Record);\n })(),\n },\n };\n }\n case \"URL_VIEW_MODEL_ERROR\":\n return {\n ...state,\n cache: {\n ...state.cache,\n [action.payload.url]: action.payload.error,\n },\n };\n default:\n return state;\n }\n};\n\nexport const RootViewProvider: React.FC = ({\n initialState,\n children,\n}) => {\n if (!initialState) {\n throw Error(\"No initialState provided to RootViewStateContext.Provider\");\n }\n\n const [getState, dispatch] = useThunkReducer(RootViewReducer, initialState);\n\n // if (process.env.NODE_ENV !== \"production\") {\n // global.RootViewState = getState();\n // }\n\n return (\n \n \n \n {children}\n \n \n \n );\n};\n\nexport const useRootViewGetState = () => {\n const getState = React.useContext(RootViewGetStateContext);\n\n if (!getState) {\n throw Error(\n \"useRootViewGetState used outside a RootViewGetStateContext.Provider\"\n );\n }\n\n return getState;\n};\n\nexport const useRootViewState = () => {\n const state = React.useContext(RootViewStateContext);\n\n if (!state) {\n throw Error(\n \"useRootViewState hook used outside a RootViewStateContext.Provider\"\n );\n }\n\n return state;\n};\n\nexport const useRootViewDispatch = () => {\n const dispatch = React.useContext(RootViewDispatchContext);\n\n if (!dispatch) {\n throw Error(\n \"useRootViewDispatch hook used outside a RootViewDispatchContext.Provider\"\n );\n }\n\n return dispatch;\n};\n\nexport const useRootView = () => {\n const state = useRootViewState();\n const dispatch = useRootViewDispatch();\n const getState = useRootViewGetState();\n\n return [state, dispatch, getState] as const;\n};\n","import * as React from \"react\";\nimport { useRootView } from \"./RootView\";\nimport { PageEnvelope, CustomError } from \"@skv/core\";\nimport { useLocation } from \"react-router-dom\";\n\nexport const getPageData = (\n url: string,\n options?: RequestInit\n) => {\n return fetch(url, {\n headers: {\n \"Content-Type\": \"application/json\",\n ...options?.headers,\n },\n ...options,\n })\n .then>((res) => {\n if (res.ok) {\n return res.json();\n }\n\n throw Error(\"Unhandled network error\");\n })\n .then(({ data, success, errorCode, meta }) => {\n if (success) {\n return data;\n }\n\n throw new CustomError(`Error from server: ${errorCode}`, errorCode, meta);\n });\n};\n\ntype FetchStates = \"idle\" | \"loaded\" | \"loading\" | \"error\";\n\ninterface UseViewModelHookOptions {\n url?: string;\n onClientLoad?: (data: ViewModel) => void;\n cache?: boolean;\n noFetch?: boolean;\n}\n\nexport const useViewModel = (\n options?: UseViewModelHookOptions\n) => {\n const [rootState, rootDispatch, rootGetState] = useRootView();\n const location = useLocation();\n\n const { url, onClientLoad, cache = true, noFetch = false } = options || {};\n\n const onClientLoadRef = React.useRef(onClientLoad);\n\n const _url =\n typeof url === \"undefined\" ? location.pathname + location.search : url;\n\n const status: FetchStates = (() => {\n if (noFetch) {\n return \"idle\";\n }\n\n if (rootState.cache[_url]) {\n if (rootState.cache[_url] instanceof Error) {\n return \"error\";\n }\n\n return \"loaded\";\n }\n return \"loading\";\n })();\n\n // todo : maybe look at setting this to null instead of CustomError (potentially breaking)\n const data: ViewModel = rootState.cache[_url];\n\n const error: CustomError | Error =\n status === \"error\" ? rootState.cache[_url] : null;\n\n const updateViewModel = React.useMemo(() => {\n function updateViewModel(data: ViewModel): ViewModel;\n function updateViewModel(\n callback: (data: ViewModel) => ViewModel\n ): ViewModel;\n function updateViewModel(data: any): ViewModel {\n if (typeof data === \"function\") {\n const nextState = data(rootGetState().cache[_url]);\n rootDispatch((dispatch, getState) => {\n dispatch({\n type: \"UPDATE_CACHED_VIEW\",\n payload: {\n url: _url,\n data: nextState,\n },\n });\n });\n return nextState;\n }\n\n rootDispatch({\n type: \"UPDATE_CACHED_VIEW\",\n payload: {\n url: _url,\n data,\n },\n });\n return data;\n }\n\n return updateViewModel;\n }, [rootDispatch, rootGetState, _url]);\n\n const getViewModel = React.useMemo(() => {\n return () =>\n new Promise((resolve, reject) => {\n rootDispatch((dispatch, getState) => {\n getPageData(_url)\n .then((data) => {\n dispatch({\n type: \"ADD_VIEW_TO_CACHE\",\n payload: {\n url: _url,\n data,\n },\n });\n\n if (onClientLoadRef.current) {\n onClientLoadRef.current(data);\n }\n\n resolve(data);\n })\n .catch((err: Error | CustomError) => {\n dispatch({\n type: \"URL_VIEW_MODEL_ERROR\",\n payload: {\n url: _url,\n error: err,\n },\n });\n\n reject(err);\n });\n });\n });\n }, [_url, onClientLoadRef, rootDispatch]);\n\n React.useEffect(() => {\n rootDispatch((dispatch, getState) => {\n if (getState().cache[_url]) {\n return getState().cache[_url];\n }\n\n if (noFetch === false) {\n getViewModel();\n }\n });\n\n return () => {\n if (cache === false) {\n rootDispatch({\n type: \"REMOVE_CACHED_VIEW\",\n payload: {\n url: _url,\n },\n });\n }\n };\n }, [_url, rootDispatch, noFetch, cache, getViewModel]);\n\n return [\n { data, status, error },\n { updateViewModel, getViewModel },\n ] as const;\n};\n","/* todo : might abstract to @skv/state if other apps need it */\n\nimport * as React from \"react\";\nimport { useThunkReducer } from \"@skv/state\";\n\nexport interface AuthenticatedUserState {\n applicationCount: number;\n email: string | null;\n emailAlertCount: number;\n experienceCount: number;\n favouriteCount: number;\n isAuthenticated: boolean;\n}\n\nconst UserStateContext = React.createContext<\n AuthenticatedUserState | undefined\n>(undefined);\n\n// below is only used to get the dispatch type returned\nconst __DISPATCH__ = () => useThunkReducer(reducer, undefined);\n\ninterface UserDispatchContext {\n dispatch: ReturnType[1];\n updateUser: (\n user:\n | Partial\n | ((user: AuthenticatedUserState) => AuthenticatedUserState)\n ) => void;\n}\n\nconst UserDispatchContext = React.createContext<\n UserDispatchContext | undefined\n>(undefined);\n\ntype Actions = {\n type: \"UPDATE_USER\";\n payload: Partial;\n};\n\nconst reducer = (\n state: AuthenticatedUserState,\n action: Actions\n): AuthenticatedUserState => {\n switch (action.type) {\n case \"UPDATE_USER\":\n return {\n ...state,\n ...action.payload,\n };\n default:\n return state;\n }\n};\n\nexport const UserProvider: React.FC<{\n user: AuthenticatedUserState;\n}> = ({ user, children }) => {\n const [getState, dispatch] = useThunkReducer(reducer, user);\n\n const updateUser = React.useMemo(() => {\n function updateUser(\n cb: (user: AuthenticatedUserState) => AuthenticatedUserState\n ): void;\n function updateUser(user: Partial): void;\n function updateUser(user: any): void {\n if (typeof user === \"function\") {\n const nextState = user(getState()) as AuthenticatedUserState;\n dispatch({\n type: \"UPDATE_USER\",\n payload: nextState,\n });\n return;\n }\n\n dispatch({\n type: \"UPDATE_USER\",\n payload: user,\n });\n }\n\n return updateUser;\n }, [dispatch, getState]);\n\n return (\n \n {\n return { dispatch, updateUser };\n }, [dispatch, updateUser])}\n >\n {children}\n \n \n );\n};\n\nexport const useUserState = (): AuthenticatedUserState => {\n const ctx = React.useContext(UserStateContext);\n\n if (!ctx) {\n throw Error(\"useUser hook used outside a UserStateContextProvider\");\n }\n\n return ctx;\n};\n\nexport const useUserDispatch = (): UserDispatchContext => {\n const ctx = React.useContext(UserDispatchContext);\n\n if (!ctx) {\n throw Error(\"useUserDispatch hook used outside a UserStateContextProvider\");\n }\n\n return ctx;\n};\n\nexport const useUser = () => {\n const state = useUserState();\n const dispatch = useUserDispatch();\n\n return [state, dispatch] as const;\n};\n","import * as React from \"react\";\n\nexport interface EoiFormState {\n email?: string;\n firstName?: string;\n gender?: number;\n lastName?: string;\n location?: string;\n phone?: string;\n qualification?: string;\n yearOfBirth?: number;\n}\n\nconst EoiFormStateContext = React.createContext(\n undefined\n);\n\nconst EoiFormDispatchContext = React.createContext<\n React.Dispatch> | undefined\n>(undefined);\n\ninterface EoiFormProviderProps {\n initialState: null | EoiFormState;\n}\n\nexport const EoiFormProvider: React.FC = ({\n initialState,\n children,\n}) => {\n const [state, setState] = React.useState(() => initialState);\n\n return (\n \n \n {children}\n \n \n );\n};\n\nexport const useEoiFormState = () => {\n const ctx = React.useContext(EoiFormStateContext);\n\n if (!ctx) {\n throw Error(\"useEoiFormState used outside EoiFormProvider\");\n }\n\n return ctx;\n};\n\nexport const useEoiFormDispatch = () => {\n const ctx = React.useContext(EoiFormDispatchContext);\n\n if (!ctx) {\n throw Error(\"useEoiFormDispatch used outside EoiFormProvider\");\n }\n\n return ctx;\n};\n\nexport const useEoiForm = () => {\n const state = useEoiFormState();\n const setState = useEoiFormDispatch();\n\n return [state, setState] as const;\n};\n","import * as React from \"react\";\nimport { Link } from \"react-router-dom\";\nimport styled from \"styled-components\";\nimport { useUserState } from \"~/state\";\n\nconst SignInCtaSection = styled.section`\n display: none;\n @media (min-width: ${(p) => p.theme.lgBreakpoint}) {\n display: block;\n margin-top: 1.5rem;\n margin-bottom: 1.5rem;\n }\n`;\n\nexport const SignInCta = (): JSX.Element => {\n const { isAuthenticated } = useUserState();\n\n return isAuthenticated ? null : (\n \n

    \n ({\n pathname: \"/signin\",\n state: loc.state,\n })}\n >\n Sign in\n {\" \"}\n to view your email alerts and activity\n

    \n
    \n );\n};\n","import classNames from \"classnames\";\n\ninterface FormValidationErrorProps {\n errorId: string;\n className?: string;\n message: React.ReactNode;\n}\n\nexport const ValidationError = (props: FormValidationErrorProps) => {\n return (\n \n \n error\n \n {props.message}\n \n );\n};\n","import * as React from \"react\";\nimport classNames from \"classnames\";\n\nexport interface HelpTextProps {\n helpId: string;\n helpText: React.ReactNode;\n className?: React.HTMLAttributes[\"className\"];\n}\n\nexport const HelpText: React.FC = ({\n helpId,\n helpText,\n className,\n}) => {\n return (\n \n {helpText}\n \n );\n};\n","import * as React from \"react\";\nimport { useFormBag } from \"react-yup\";\nimport { ValidationError } from \"./ValidationError\";\n\nimport classNames from \"classnames\";\nimport { HelpText, HelpTextProps } from \"./HelpText\";\n\ntype LabelProps = React.DetailedHTMLProps<\n React.LabelHTMLAttributes,\n HTMLLabelElement\n>;\n\nexport interface BaseFieldProps {\n id: string;\n name: string;\n label: string;\n labelProps?: LabelProps;\n helpText?: HelpTextProps[\"helpText\"];\n optional?: boolean;\n wrapperProps?: React.DetailedHTMLProps<\n React.HTMLAttributes,\n HTMLElement\n >;\n isInvalid?: boolean;\n}\n\ninterface PureFieldProps extends FieldProps {\n error?: React.ReactNode;\n touched?: boolean;\n}\n\nexport const PureField: React.FC = React.memo(\n ({\n id,\n name,\n label,\n labelProps,\n value,\n optional,\n error,\n touched,\n helpText,\n autoComplete,\n className,\n \"aria-describedby\": ariaDescribedBy,\n ...rest\n }) => {\n return (\n
    \n \n {helpText && (\n \n )}\n x != null)\n .join(\" \")}\n {...rest}\n />\n {error && touched && (\n \n )}\n
    \n );\n }\n);\n\ntype FieldPropsOmit = Omit<\n React.DetailedHTMLProps<\n React.InputHTMLAttributes,\n HTMLInputElement\n >,\n \"id\" | \"name\"\n>;\n\ninterface FieldProps extends FieldPropsOmit, BaseFieldProps {}\n\nexport const Field: React.FC = (props) => {\n const { name } = props;\n const { getValue, getError, isTouched } = useFormBag();\n\n const value = getValue(name) || \"\";\n const error = getError(name);\n const touched = isTouched(name);\n\n return (\n \n );\n};\n\ninterface SplitFieldProps extends PureFieldProps {\n append: JSX.Element | null;\n}\n\nexport const SplitField: React.FC = ({\n id,\n name,\n label,\n labelProps,\n value,\n optional,\n error,\n touched,\n helpText,\n autoComplete,\n append,\n \"aria-describedby\": ariaDescribedBy,\n ...rest\n}) => {\n return (\n
    \n \n {helpText && (\n \n )}\n \n x != null)\n .join(\" \")}\n {...rest}\n />\n {append}\n
    \n {error && touched && (\n \n )}\n \n );\n};\n\ntype TextAreaPropsOmit = Omit<\n React.DetailedHTMLProps<\n React.TextareaHTMLAttributes,\n HTMLTextAreaElement\n >,\n \"id\" | \"name\"\n>;\n\ninterface TextAreaProps extends BaseFieldProps, TextAreaPropsOmit {\n className?: string;\n}\n\ninterface PureTextAreaProps extends BaseFieldProps, TextAreaPropsOmit {\n error?: string;\n touched?: boolean;\n}\n\nexport const PureTextArea: React.FC = ({\n id,\n name,\n label,\n labelProps,\n helpText,\n optional,\n error,\n touched,\n value,\n className,\n ...rest\n}) => {\n return (\n
    \n \n {helpText && (\n \n )}\n\n \n {error && touched && (\n \n )}\n
    \n );\n};\n\nexport const TextArea: React.FC = (props) => {\n const { name } = props;\n const { getValue, getError, isTouched } = useFormBag();\n\n const value = getValue(name) || \"\";\n const error = getError(name);\n const touched = isTouched(name);\n\n return (\n \n );\n};\n\ntype CheckboxPropsOmit = Omit<\n React.DetailedHTMLProps<\n React.InputHTMLAttributes,\n HTMLInputElement\n >,\n \"id\" | \"name\" | \"type\" | \"ref\"\n>;\ninterface CheckboxProps\n extends Omit,\n CheckboxPropsOmit {\n type: \"radio\" | \"checkbox\" | \"switch\";\n inline?: boolean;\n}\n\nexport const Checkbox = React.forwardRef(\n (\n { id, name, type, label, inline = true, wrapperProps, isInvalid, ...rest },\n ref\n ) => {\n return (\n <>\n \n \n {label}\n \n \n );\n }\n);\n\n/*\n TODO : This is a special case for when we want to do something on unmount\n Figure out potentially a better way/move to SKV.AdminAU/pages/Opportunity?\n*/\ninterface CheckWithUnmountProps extends CheckboxProps {\n onUnmount: () => void;\n}\n\nexport const CheckWithUnmount = React.forwardRef<\n HTMLInputElement,\n CheckWithUnmountProps\n>(({ onUnmount, ...props }, ref) => {\n React.useEffect(() => {\n return onUnmount;\n }, []);\n\n return ;\n});\n","import classNames from \"classnames\";\nimport { timingFunctions } from \"polished\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport { useFormBag } from \"react-yup\";\n\nimport { SvgSprite, TooltipPopover } from \"@skv/core\";\nimport { BaseFieldProps, HelpText, ValidationError } from \".\";\n\nimport {\n Select as AriaSelect,\n SelectItem,\n SelectItemCheck,\n SelectLabel,\n SelectPopover,\n SelectState,\n useSelectState,\n} from \"ariakit/select\";\n\ntype SelectPropsOmit = Omit<\n React.DetailedHTMLProps<\n React.SelectHTMLAttributes,\n HTMLSelectElement\n >,\n \"id\" | \"name\"\n>;\n\ninterface SelectProps extends BaseFieldProps, SelectPropsOmit {\n selectProps?: {\n className?: string;\n };\n}\n\nexport const Select: React.FC = ({\n name,\n id,\n label,\n labelProps,\n selectProps,\n helpText,\n optional,\n children,\n ...rest\n}) => {\n const { getValue, getError, isTouched } = useFormBag();\n\n const value = getValue(name) || \"\";\n const error = getError(name);\n const touched = isTouched(name);\n\n return (\n
    \n \n {label}{\" \"}\n {optional ? (optional) : \"*\"}\n \n {helpText && (\n \n )}\n \n {children}\n \n {error && touched && (\n \n )}\n
    \n );\n};\n\ntype BaseItem = {\n id: string;\n name: string;\n};\n\ntype LabelProps = React.DetailedHTMLProps<\n React.LabelHTMLAttributes,\n HTMLLabelElement\n>;\n\ninterface SelectMultiProps {\n id: string;\n label: string;\n labelProps?: LabelProps;\n name: string;\n items: T[];\n defaultValue?: string | string[] | undefined;\n categoryTitle?: string;\n categoryType?: string;\n className?: string;\n onUpdateField: (value: string) => void;\n onClear?: () => void;\n onDropdownOpen?: () => void;\n renderValue?: (\n selectState: SelectState,\n itemMap: Map\n ) => React.ReactNode;\n}\n\nexport const SelectMulti = ({\n id,\n label,\n labelProps,\n items,\n name,\n className,\n categoryTitle = \"Nothing selected\",\n categoryType = \"items selected\",\n onUpdateField,\n renderValue,\n onClear,\n onDropdownOpen,\n defaultValue = [],\n}: SelectMultiProps) => {\n const selectState = useSelectState({\n value: defaultValue,\n sameWidth: true,\n });\n\n const itemMap = useMemo(() => {\n const map = new Map();\n items.forEach((item) => {\n map.set(item.id, item);\n });\n\n return map;\n }, [items]);\n\n const [isTooltipVisible, setIsTooltipVisible] = useState(false);\n\n useEffect(() => {\n if (selectState.mounted) {\n onDropdownOpen && onDropdownOpen();\n }\n }, [selectState.mounted, onDropdownOpen]);\n\n return (\n
    \n \n {label}\n \n \n \n \n \n {(() => {\n if (renderValue) {\n return renderValue(selectState, itemMap);\n }\n\n if (selectState.value.length === 0) {\n return categoryTitle;\n }\n\n if (selectState.value.length === 1) {\n return itemMap.get(selectState.value[0])?.name;\n }\n\n return `${selectState.value.length} ${categoryType}`;\n })()}\n \n \n {selectState.mounted && (\n \n {items.map((x) => (\n {\n onUpdateField(x.id);\n }}\n css={`\n cursor: pointer;\n line-height: 2;\n font-size: 16px;\n font-weight: 400;\n\n text-decoration: underline;\n\n &[data-active-item] {\n background-color: #e5e9ef;\n }\n\n &:hover {\n background-color: #e5e9ef;\n }\n `}\n >\n \n {x.name}\n \n ))}\n \n )}\n
    \n {onClear && (\n // Note - this wrapping div is required for screens zoomed in >= 400% to prevent overflow from the clear button.\n \n setIsTooltipVisible(nextShow)}\n >\n .rounded-circle {\n background-color: ${(p): string => p.theme.gray200};\n box-shadow: 1px 1px 3px ${(p): string => p.theme.gray400};\n }\n `}\n onClick={onClear}\n onKeyDown={(e) => {\n if (e.key === \" \" || e.key === \"Enter\") {\n e.preventDefault();\n onClear();\n setIsTooltipVisible(false);\n }\n }}\n >\n p.theme.gray200};\n box-shadow: 1px 1px 3px ${(p): string => p.theme.gray400};\n }\n `}\n >\n \n \n \n \n \n )}\n \n \n \n );\n};\n","import * as React from \"react\";\nimport { useForm } from \"react-yup\";\nimport styled from \"styled-components\";\nimport * as Yup from \"yup\";\n\nimport { Analytics, CustomError, PageEnvelope, SvgSprite } from \"@skv/core\";\n\nimport { Alert, AlertProps } from \"react-bootstrap\";\nimport { useUserState } from \"~/state\";\nimport { SplitField } from \"~/ui/Form\";\n\nconst SCHEMA = Yup.object({\n email: Yup.string()\n .email(\"Please enter a valid email address.\")\n .required(\"Please enter an email address.\"),\n}).defined();\n\nconst AccountWrapper = styled.section`\n @media (min-width: ${(p) => p.theme.lgBreakpoint}) {\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n }\n`;\n\nconst SignOutWrapper = styled.section`\n @media (min-width: ${(p) => p.theme.lgBreakpoint}) {\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n }\n`;\nconst SignOutDiv = styled.div`\n border-bottom: 1px solid #e1e1e1;\n z-index: 1200;\n @media (min-width: ${(p) => p.theme.lgBreakpoint}) {\n position: absolute;\n top: 5rem;\n border-bottom: none;\n z-index: 1200;\n }\n`;\n\nconst SignInCard = styled.div`\n border-bottom: 1px solid #e1e1e1;\n border-radius: 0px;\n @media (min-width: ${(p) => p.theme.lgBreakpoint}) {\n position: absolute !important;\n top: 3rem;\n width: 376px;\n box-shadow: 0 2px 6px 0 rgba(28, 28, 28, 0.5);\n z-index: 1200;\n }\n`;\n\ninterface SignInPostViewModel {\n email: string;\n emailSent: boolean;\n}\n\nexport const SignInOutPanel = (): JSX.Element => {\n const { email, isAuthenticated } = useUserState();\n\n const alertRef = React.useRef(null);\n const formRef = React.useRef(null);\n\n const {\n values,\n errors,\n touched,\n createSubmitHandler,\n field,\n FormProvider,\n isSubmitting,\n setSubmitting,\n setTouched,\n } = useForm({\n validationSchema: SCHEMA,\n });\n\n const [emailData, setEmailData] = React.useState(() => ({\n email: null,\n emailSent: false,\n }));\n\n const [serverError, setServerError] = React.useState({\n show: false,\n variant: null,\n children: null,\n });\n\n const handleSubmit = React.useMemo(() => {\n return createSubmitHandler((v) => {\n setServerError((prev) => ({ ...prev, show: false }));\n\n fetch(\"/signin\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\",\n },\n body: JSON.stringify(v),\n })\n .then>((res) => {\n if (res.ok) {\n return res.json();\n }\n\n throw Error(\"Response not ok\");\n })\n .then(({ success, data, errorCode, errorMessage }) => {\n if (success) {\n setEmailData({\n email: data.email,\n emailSent: data.emailSent,\n });\n return;\n }\n\n switch (errorCode) {\n case \"error:signin\":\n throw new CustomError(\"ERROR\", errorCode);\n default:\n throw Error(\n \"Response ok, but server did not respond with a known error code\"\n );\n }\n })\n .catch((err: Error | CustomError) => {\n // if (err instanceof CustomError) {\n // setServerError(true);\n // }\n setServerError((prev) => ({\n ...prev,\n show: true,\n variant: \"danger\",\n children: <>An unexpected error has occurred. Please try again.,\n }));\n });\n setSubmitting(false);\n });\n }, [createSubmitHandler, setSubmitting]);\n\n return (\n \n {isAuthenticated ? (\n \n \n \n \n \n {email}\n \n \n \n \n \n ) : (\n \n
    \n {emailData.emailSent ? (\n
    \n

    Email sent

    \n

    We have sent a sign-in email to:

    \n

    \n \n {emailData.email}\n

    \n \n
    \n ) : (\n <>\n

    Sign in

    \n

    \n To view your email alerts and activity.\n
    \n We will send you an email to confirm your email address.\n

    \n \n \n {\n setServerError((prev) => ({\n ...prev,\n show: false,\n }));\n }}\n {...serverError}\n />\n {\n field.onChange(e);\n setTouched((prev) => ({ ...prev, email: false }), true);\n }}\n onBlur={(e) => {\n field.onBlur(e);\n setTouched(\n (prev) => ({ ...prev, email: false }),\n false\n );\n }}\n append={\n \n {isSubmitting ? \"Sending...\" : \"Send email\"}\n \n }\n />\n \n \n \n )}\n
    \n
    \n )}\n
    \n );\n};\n","import * as React from \"react\";\nimport { useLocation } from \"react-router-dom\";\nimport { DefaultTheme, withTheme } from \"styled-components\";\n\nimport bloodLgImg from \"../assets/banner/blood-bikes-lg.jpg\";\nimport bloodLgImg2x from \"../assets/banner/blood-bikes-lg@2x.jpg\";\nimport bloodImg from \"../assets/banner/blood-bikes.jpg\";\nimport bloodImg2x from \"../assets/banner/blood-bikes@2x.jpg\";\n\nimport easterLgImg from \"../assets/banner/easter-show-lg.jpg\";\nimport easterLgImg2x from \"../assets/banner/easter-show-lg@2x.jpg\";\nimport easterImg from \"../assets/banner/easter-show.jpg\";\nimport easterImg2x from \"../assets/banner/easter-show@2x.jpg\";\n\nimport doctorLgImg from \"../assets/banner/royal-flying-doctor-service-lg.jpg\";\nimport doctorLgImg2x from \"../assets/banner/royal-flying-doctor-service-lg@2x.jpg\";\nimport doctorImg from \"../assets/banner/royal-flying-doctor-service.jpg\";\nimport doctorImg2x from \"../assets/banner/royal-flying-doctor-service@2x.jpg\";\n\nimport { CustomError } from \"@skv/core\";\nimport { opportunityStore, organisationStore } from \"@skv/state\";\nimport rescueLgImg from \"../assets/banner/volunteer-rescue-association-lg.jpg\";\nimport rescueLgImg2x from \"../assets/banner/volunteer-rescue-association-lg@2x.jpg\";\nimport rescueImg from \"../assets/banner/volunteer-rescue-association.jpg\";\nimport rescueImg2x from \"../assets/banner/volunteer-rescue-association@2x.jpg\";\n\ninterface BannerProps {\n theme: DefaultTheme;\n}\n\nconst images = [\n {\n img: rescueImg,\n img2x: rescueImg2x,\n imgLg: rescueLgImg,\n imgLg2x: rescueLgImg2x,\n },\n {\n img: bloodImg,\n img2x: bloodImg2x,\n imgLg: bloodLgImg,\n imgLg2x: bloodLgImg2x,\n },\n {\n img: easterImg,\n img2x: easterImg2x,\n imgLg: easterLgImg,\n imgLg2x: easterLgImg2x,\n },\n {\n img: doctorImg,\n img2x: doctorImg2x,\n imgLg: doctorLgImg,\n imgLg2x: doctorLgImg2x,\n },\n];\n\nconst getBannerImage = () => {\n return images[Math.floor(Math.random() * images.length)];\n};\n\nconst getOrgId = (pathname: string) => {\n const match = pathname.match(/\\/volunteering-organisations?\\/(\\d+)\\/\\w+/);\n return match ? match[1] : \"-1\";\n};\n\nconst getOppId = (pathname: string) => {\n const match = pathname.match(/\\/volunteering?\\/(\\d+)\\/\\w+/);\n return match ? match[1] : \"-1\";\n};\n\nconst shouldShowBanner = (\n pathname: string,\n opportunityError: CustomError,\n organisationError: CustomError\n) => {\n switch (true) {\n case !!pathname.match(/\\/volunteering-organisations?\\/(\\d+)\\/\\w+/):\n return !organisationError;\n case !!pathname.match(/\\/volunteering?\\/(\\d+)\\/\\w+/):\n return !opportunityError;\n default:\n return true;\n }\n};\n\nconst BaseBanner: React.FC = ({ theme }) => {\n const location = useLocation();\n const orgId = getOrgId(location.pathname);\n const oppId = getOppId(location.pathname);\n\n const { error: opportunityError } =\n opportunityStore?.hooks?.useOpportunity(oppId);\n const { error: organisationError } =\n organisationStore?.hooks?.useOrganisation(orgId);\n\n const showBanner = shouldShowBanner(\n location.pathname,\n opportunityError,\n organisationError\n );\n\n // Memoize the heroImg based on the route\n const heroImg = React.useMemo(() => {\n return getBannerImage();\n }, [location.pathname]);\n\n if (!showBanner) {\n return null;\n }\n\n return (\n \n \n \n \n );\n};\n\nexport const Banner = withTheme(BaseBanner);\n","export const ROUTE_MY_ACTIVITY = \"/my-activity\";\n\nexport const ROUTE_FAVOURITES = \"/favourites\";\nexport const ROUTES_FAVOURITES = [\n ROUTE_FAVOURITES,\n ROUTE_MY_ACTIVITY + ROUTE_FAVOURITES,\n];\n\nexport const ROUTE_EMAIL_ALERTS = ROUTE_MY_ACTIVITY + \"/subscriptions\";\nexport const ROUTE_EXPERIENCES = ROUTE_MY_ACTIVITY + \"/experiences\";\nexport const ROUTE_APPLICATIONS = ROUTE_MY_ACTIVITY + \"/applications\";\n\nexport const ROUTES_MY_ACTIVITY = [\n ROUTE_MY_ACTIVITY + ROUTE_FAVOURITES,\n ROUTE_EMAIL_ALERTS,\n ROUTE_EXPERIENCES,\n ROUTE_APPLICATIONS,\n ROUTE_MY_ACTIVITY,\n];\n\nexport const ROUTE_OPPORTUNITIES = \"/volunteering\";\nexport const ROUTES_OPPORTUNITIES_SEARCH = [\n \"/*-volunteering\",\n \"/volunteering/in-*\",\n \"/find-opportunities\",\n ROUTE_OPPORTUNITIES,\n];\nexport const ROUTES_OPPORTUNITIES = [\n ...ROUTES_OPPORTUNITIES_SEARCH,\n \"/volunteering/*\",\n];\n\nexport const ROUTE_ORGANISATIONS = \"/volunteering-organisations\";\nexport const ROUTES_ORGANISATIONS_SEARCH = [\n \"/*-volunteering-organisations\",\n \"/volunteering-organisations/in-*\",\n \"/find-organisations\",\n ROUTE_ORGANISATIONS,\n];\nexport const ROUTES_ORGANISATIONS = [\n ...ROUTES_ORGANISATIONS_SEARCH,\n \"/volunteering-organisations/*\",\n];\n\nexport const ROUTE_SIGN_IN = \"/signin\";\n","import { useAppSettings } from \"@skv/state\";\nimport * as React from \"react\";\nimport { Link, useLocation, useRouteMatch } from \"react-router-dom\";\n\nimport {\n ROUTE_APPLICATIONS,\n ROUTE_EMAIL_ALERTS,\n ROUTE_EXPERIENCES,\n ROUTE_OPPORTUNITIES,\n ROUTE_ORGANISATIONS,\n ROUTES_FAVOURITES,\n ROUTES_OPPORTUNITIES,\n ROUTES_ORGANISATIONS,\n} from \"~/constants\";\n\nexport const Breadcrumb: React.FC> = (props) => {\n const { applicationName, homeUrl } = useAppSettings();\n const location = useLocation();\n const isOpp = useRouteMatch(ROUTES_OPPORTUNITIES);\n const isOrg = useRouteMatch(ROUTES_ORGANISATIONS);\n const isFavourites = useRouteMatch(ROUTES_FAVOURITES);\n const isMyEmailAlerts = useRouteMatch(ROUTE_EMAIL_ALERTS);\n const isMyExperiences = useRouteMatch(ROUTE_EXPERIENCES);\n const isMyApplications = useRouteMatch(ROUTE_APPLICATIONS);\n\n const isMyActivity =\n isFavourites || isMyEmailAlerts || isMyExperiences || isMyApplications;\n\n const matchOppDetails = useRouteMatch(\"/volunteering/:id/*\");\n const matchOppApply = useRouteMatch(\"/volunteering/*/apply\");\n\n const isOppDetails = matchOppDetails && matchOppDetails.isExact;\n const isOppApplication = matchOppApply && matchOppApply.isExact;\n\n const matchOrgDetails = useRouteMatch(\"/volunteering-organisations/:id/*\");\n const isOrgDetails = matchOrgDetails && matchOrgDetails.isExact;\n\n function getTitleFromUrl(url: string) {\n const unformattedTitle = url.split(\"/\").pop();\n return unformattedTitle\n .split(\"-\")\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(\" \");\n }\n\n return (\n
    \n \n \n \n
    \n );\n};\n","import * as React from \"react\";\nimport { Link, LinkProps, useRouteMatch, Route } from \"react-router-dom\";\n\nimport { opportunityStore, useThunkDispatch } from \"@skv/state\";\nimport { Analytics, VolunteerSearchLink } from \"@skv/core\";\n\ntype HtmlDivAttributes = React.DetailedHTMLProps<\n React.HTMLAttributes,\n HTMLDivElement\n>;\n\ntype ErrorLayoutProps = React.DetailedHTMLProps<\n React.HTMLAttributes,\n HTMLDivElement\n>;\n\nconst ErrorLayout: React.FC = ({\n children,\n className,\n ...rest\n}) => {\n return (\n
    \n {children}\n
    \n );\n};\n\ninterface DotNetReactRouterStaticContext {\n status?: number;\n}\n\ntype PropertiesOf = {\n [Key in keyof T]: T[Key];\n};\n\ntype WithErrorLayoutProps = {\n wrapperProps?: ErrorLayoutProps;\n} & PropertiesOf;\n\nconst withErrorLayout = (\n Component: React.ComponentType<\n Pick, Exclude>\n >,\n statusCode = 200\n): typeof WithErrorLayout => {\n const displayName = Component.displayName || \"Component\";\n\n const WithErrorLayout = (props: WithErrorLayoutProps): JSX.Element => {\n const { wrapperProps, ...rest } = props;\n\n return (\n <>\n \n \n \n {\n if (props.staticContext) {\n (props.staticContext as DotNetReactRouterStaticContext).status =\n statusCode;\n }\n return null;\n }}\n />\n \n );\n };\n\n WithErrorLayout.displayName = displayName;\n\n return WithErrorLayout;\n};\n\ninterface ErrorContactUsFragmentProps {\n contactUsTo?: string;\n}\n\nexport const Error404Fragment: React.FC = ({\n contactUsTo = \"/help-and-support/contact-us\",\n}) => {\n const isExternal = contactUsTo.slice(0, 4) === \"http\";\n\n return (\n
    \n
    \n \n This page is missing\n \n

    We can’t find the page you were looking for.

    \n
      \n
    • \n {\" \"}\n Check the web address for typos.\n
    • \n
    • \n {\" \"}\n Go back to the previous page.\n
    • \n
    \n

    \n If you're still stuck, let us know by{\" \"}\n {isExternal ? (\n contacting us\n ) : (\n contacting us\n )}\n .\n

    \n
    \n
    \n );\n};\n\nexport const Error404FragmentWithAnalytics = () => {\n return (\n <>\n \n \n \n );\n};\n\nexport const Error404 = withErrorLayout(\n Error404FragmentWithAnalytics,\n 404\n);\n\nexport const Error500Fragment = ({\n contactUsTo = \"/help-and-support/contact-us\",\n}: ErrorContactUsFragmentProps): JSX.Element => {\n const isExternal = contactUsTo.slice(0, 4) === \"http\";\n\n return (\n
    \n
    \n \n Something went wrong...{\" \"}\n \n

    We're not sure what happened, but one of these might help:

    \n
      \n
    • \n Go back to the previous page.\n
    • \n
    • \n Reload the page.\n
    • \n
    • \n Use a different browser or device.\n
    • \n
    \n

    \n If you're still stuck, let us know by{\" \"}\n {isExternal ? (\n contacting us\n ) : (\n contacting us\n )}\n .\n

    \n
    \n
    \n );\n};\n\nexport const Error500 = withErrorLayout(\n Error500Fragment,\n 500\n);\n\nexport const OrganisationDetails404Fragment = (): JSX.Element => {\n return (\n
    \n
    \n \n This organisation isn’t here.\n \n

    Sorry this organisation is no longer available.

    \n

    \n You can{\" \"}\n \n search for other organisations\n \n .\n

    \n
    \n
    \n );\n};\n\nexport const OrganisationDetails404 = withErrorLayout>(\n OrganisationDetails404Fragment,\n 404\n);\n\nexport const OpportunityDetails404Fragment = (): JSX.Element => {\n return (\n
    \n
    \n \n This opportunity has gone.\n \n

    Sorry this opportunity is no longer available.

    \n

    \n You can{\" \"}\n \n search for current opportunities\n \n .\n

    \n
    \n
    \n );\n};\n\nexport const OpportunityDetails404 = withErrorLayout(\n OpportunityDetails404Fragment,\n 404\n);\n\nexport const ErrorEoiLimitReachedFragment = (): JSX.Element => {\n return (\n
    \n
    \n \n You’ve applied for too many applications.\n \n

    \n To help our community organisations manage the volume applications, we\n limit the number of applications you can make in a day.\n

    \n

    Please come back tomorrow.

    \n
    \n
    \n );\n};\n\ninterface ErrorEoiAppliedFragmentProps {\n organisationTo: LinkProps[\"to\"];\n organisationName: React.ReactNode;\n}\n\nexport const ErrorEoiAppliedFragment: React.FC<\n ErrorEoiAppliedFragmentProps\n> = ({ organisationTo, organisationName }) => {\n return (\n
    \n
    \n \n You’ve already applied.\n \n

    \n Thanks for your application.\n
    \n To get an update on your application you can contact{\" \"}\n {organisationName} directly.\n

    \n
    \n
    \n );\n};\n\nexport const ErrorEoiApplied = (): JSX.Element => {\n const match = useRouteMatch<{\n id: string;\n }>();\n\n const { data } = opportunityStore.hooks.useOpportunity(match.params.id);\n\n const { organisation } = data || {};\n\n const dispatch = useThunkDispatch();\n\n React.useEffect(() => {\n return (): void => {\n dispatch({\n type: \"OPPORTUNITY:ERROR:RESET\",\n });\n };\n }, [dispatch]);\n\n return (\n \n \n \n );\n};\n\nexport const ErrorEoiLimitReached = (): JSX.Element => {\n const dispatch = useThunkDispatch();\n\n React.useEffect(() => {\n return (): void => {\n dispatch({\n type: \"OPPORTUNITY:ERROR:RESET\",\n });\n };\n }, [dispatch]);\n\n return (\n \n \n \n );\n};\n","import * as React from \"react\";\nimport {\n Error500 as BaseError500,\n Error404 as BaseError404,\n} from \"./ServerResponse\";\nimport { useAppSettings } from \"@skv/state\";\n\nexport const Error500: React.FC = () => {\n const { seekVolunteerUrl } = useAppSettings();\n\n return (\n \n );\n};\n\nexport const Error404: React.FC = () => {\n const { seekVolunteerUrl } = useAppSettings();\n\n return (\n \n );\n};\n","import React from \"react\";\nimport { useLocation, useHistory } from \"react-router-dom\";\nimport qs from \"qs\";\nimport * as Yup from \"yup\";\nimport { useForm } from \"react-yup\";\nimport { Select } from \"~/ui\";\n\ninterface QueryParams {\n show?: Filter;\n}\n\ntype Filter = \"all\" | \"opp\" | \"org\";\n\nexport const FavouriteInlineSelectForm: React.FC<\n React.HTMLAttributes\n> = (props) => {\n const location = useLocation();\n const { replace } = useHistory();\n\n const currentQuery = React.useMemo(() => {\n return qs.parse(location.search, { ignoreQueryPrefix: true });\n }, [location.search]);\n\n const { FormProvider, field, values, setValue } = useForm({\n validationSchema: Yup.object({\n filter: Yup.string().nullable(),\n }),\n defaultValues: {\n filter: currentQuery.show || \"all\",\n },\n });\n\n React.useEffect(() => {\n setValue(\"filter\", location.search.split(\"=\").pop() || \"all\");\n }, [location.search, setValue]);\n\n const handleChangeFilter = (e: React.ChangeEvent) => {\n const name = \"show\";\n const nextQuery: QueryParams = { ...currentQuery };\n\n if (e.target.value === \"all\") {\n delete nextQuery[name];\n } else {\n nextQuery[name] = e.target.value as Filter;\n }\n\n replace({\n pathname: location.pathname,\n search: qs.stringify(nextQuery),\n });\n };\n\n return (\n \n
    \n \n \n \n \n \n \n
    \n );\n};\n","import { Link } from \"react-router-dom\";\n\nimport { useAppSettings } from \"@skv/state\";\n\nimport { useUserState } from \"~/state\";\n\nimport { ExternalLink } from \"@skv/core\";\nimport lockup from \"~/assets/lockup.svg\";\n\nconst CURRENT_YEAR = new Date().getFullYear();\n\nexport const Footer = (): JSX.Element => {\n const { seekVolunteerUrl } = useAppSettings();\n const { isAuthenticated } = useUserState();\n\n return (\n
    \n
    \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n

    \n We pay respect to the Traditional Custodians and First Peoples of\n NSW, and acknowledge their continued connection to their country and\n culture.\n

    \n
    \n
    \n
    \n © SEEK {CURRENT_YEAR}. All rights reserved.\n
    \n
    \n
    \n
    \n
    \n );\n};\n","// eslint-disable-next-line import/no-extraneous-dependencies\n// import { v4 as uuidv4 } from \"uuid\";\n\n// export const uniqueId = (prefix) => {\n// const prefixValue = prefix === undefined ? \"nsw\" : prefix;\n// const uuid = uuidv4();\n// return `${prefixValue}-${uuid}`;\n// };\n\nexport const focusObjectGenerator = (arr) => {\n const focusableElements = {\n all: arr,\n first: arr[0],\n last: arr[arr.length - 1],\n length: arr.length,\n };\n\n return focusableElements;\n};\n\nexport const getFocusableElement = (el) => {\n const elementArr = [].slice.call(\n el.querySelectorAll(`a[href],button:not([disabled]),\n area[href],input:not([disabled]):not([type=hidden]),\n select:not([disabled]),textarea:not([disabled]),\n iframe,object,embed,*:not(.is-draggabe)[tabindex],\n *[contenteditable]`)\n );\n\n return focusObjectGenerator(elementArr);\n};\n\nexport const getFocusableElementBySelector = (id, selectorArr) => {\n const elements = [];\n for (let i = 0; i < selectorArr.length; i += 1) {\n elements.push(\n [].slice.call(document.querySelectorAll(`#${id} ${selectorArr[i]}`))\n );\n }\n\n const mergedElementArr = [].concat(...elements);\n\n return focusObjectGenerator(mergedElementArr);\n};\n\nexport const trapTabKey = (event, focusObject) => {\n const { activeElement } = document;\n const focusableElement = focusObject;\n\n if (event.keyCode !== 9) return false;\n\n if (focusableElement.length === 1) {\n event.preventDefault();\n } else if (event.shiftKey && activeElement === focusableElement.first) {\n focusableElement.last.focus();\n event.preventDefault();\n } else if (!event.shiftKey && activeElement === focusableElement.last) {\n focusableElement.first.focus();\n event.preventDefault();\n }\n\n return true;\n};\n\nexport function whichTransitionEvent() {\n const el = document.createElement(\"fake-element\");\n\n const transitions = {\n transition: \"transitionend\",\n OTransition: \"oTransitionEnd\",\n MozTransition: \"transitionend\",\n WebkitTransition: \"webkitTransitionEnd\",\n };\n\n const found = Object.keys(transitions).filter(\n (key) => el.style[key] !== undefined\n );\n return transitions[found[0]];\n}\n\nexport const popupWindow = (url, width, height) => {\n const y = window.top.outerHeight / 2 + window.top.screenY - height / 2;\n const x = window.top.outerWidth / 2 + window.top.screenX - width / 2;\n\n window.open(\n url,\n \"\",\n `toolbar=no,location=no,directories=no, status=no,\n menubar=no, scrollbars=no, resizable=no, copyhistory=no,\n width=${width}, height=${height}, top=${y}, left=${x}`\n );\n};\n","import {\n trapTabKey,\n whichTransitionEvent,\n getFocusableElementBySelector,\n} from \".\";\n\nconst NAV_ID = \"main-nav\";\n\nexport function mobileHideMainNav({ propertyName }: { propertyName: string }) {\n const transitionEvent = whichTransitionEvent();\n const mainNav = document.getElementById(\"main-nav\");\n\n if (propertyName !== \"transform\") return;\n\n mainNav.classList.remove(\"active\");\n mainNav.classList.remove(\"closing\");\n\n // while (this.openSubNavElements.length > 0) {\n // const { submenu } = this.whichSubNavLatest();\n // submenu.removeEventListener(\n // \"keydown\",\n // this.mobileSubNavTrapTabKeyEvent,\n // false\n // );\n // submenu.classList.remove(\"active\");\n // submenu.classList.remove(\"closing\");\n // this.openSubNavElements.pop();\n // }\n\n mainNav.removeEventListener(transitionEvent, mobileHideMainNav, false);\n mainNav.removeEventListener(\"keydown\", mobileMainNavTrapTabs, false);\n}\n\nexport function mobileShowMainNav({ propertyName }: { propertyName: string }) {\n const transitionEvent = whichTransitionEvent();\n const mainNav = document.getElementById(\"main-nav\");\n\n if (propertyName !== \"transform\") return;\n getFocusableElementBySelector(\"main-nav\", [\n \"> div button\",\n \"> ul > li > a\",\n ]).all[1].focus();\n mainNav.classList.add(\"active\");\n mainNav.classList.remove(\"activating\");\n mainNav.removeEventListener(transitionEvent, mobileShowMainNav, false);\n mainNav.addEventListener(\"keydown\", mobileMainNavTrapTabs, false);\n}\n\nexport function mobileMainNavTrapTabs(event: KeyboardEvent) {\n const focusableElement = getFocusableElementBySelector(NAV_ID, [\n \"> div button\",\n \"> ul > li > a\",\n ]);\n trapTabKey(event, focusableElement);\n}\n\nexport function escapeClose(e) {\n if (e.key === \"Escape\") {\n // removes handleOutsideClick functionality from docs site\n if (this.nav.closest(\".nsw_app_body\")) return;\n\n const { link } = this.whichSubNavLatest();\n const isExpanded = link.getAttribute(\"aria-expanded\") === \"true\";\n if (isExpanded) {\n this.toggleSubNavDesktop(true);\n e.preventDefault();\n link.focus();\n }\n }\n}\n","import { useRef, useState } from \"react\";\nimport { Link, useRouteMatch } from \"react-router-dom\";\nimport {\n ROUTE_APPLICATIONS,\n ROUTE_EMAIL_ALERTS,\n ROUTE_EXPERIENCES,\n ROUTE_FAVOURITES,\n ROUTE_MY_ACTIVITY,\n ROUTE_OPPORTUNITIES,\n ROUTE_ORGANISATIONS,\n ROUTES_MY_ACTIVITY,\n ROUTES_OPPORTUNITIES,\n ROUTES_ORGANISATIONS,\n} from \"~/constants\";\nimport { useUserState } from \"~/state\";\n\nimport {\n mobileHideMainNav,\n mobileShowMainNav,\n whichTransitionEvent,\n} from \"~/utils\";\n\nimport classNames from \"classnames\";\n\ninterface NavBarProps {\n isMobileMenuOpen: boolean;\n setIsMobileMenuOpen: React.Dispatch>;\n}\n\nexport const NavBar = (props: NavBarProps) => {\n const isOppTab = useRouteMatch(ROUTES_OPPORTUNITIES);\n const isOrgTab = useRouteMatch(ROUTES_ORGANISATIONS);\n const isFavTab = useRouteMatch(ROUTE_FAVOURITES);\n\n const isMyActivityTab = useRouteMatch(ROUTES_MY_ACTIVITY);\n\n const mainNavTogglerRef = useRef(null);\n const { isAuthenticated, favouriteCount } = useUserState();\n const [isMyActivityOpen, setIsMyActivityOpen] = useState(false);\n\n const toggleMainNav = (e: React.MouseEvent) => {\n const { currentTarget } = e;\n const isExpanded = currentTarget.getAttribute(\"aria-expanded\") === \"true\";\n\n const transitionEvent = whichTransitionEvent();\n const mainNav = document?.getElementById(\"main-nav\");\n\n if (mainNav) {\n if (isExpanded) {\n document.body.classList.remove(\"main-nav-active\");\n mainNav.classList.add(\"closing\");\n mainNavTogglerRef.current?.focus();\n mainNav.addEventListener(transitionEvent, mobileHideMainNav, false);\n } else {\n document.body.classList.add(\"main-nav-active\");\n mainNav.classList.add(\"activating\");\n mainNav.addEventListener(transitionEvent, mobileShowMainNav, false);\n }\n }\n\n props.setIsMobileMenuOpen((prev) => !prev);\n };\n\n const hideMobileNav = () => {\n const transitionEvent = whichTransitionEvent();\n const mainNav = document?.getElementById(\"main-nav\");\n const isExpanded = mainNav?.classList.contains(\"active\");\n\n if (isExpanded) {\n document.body.classList.remove(\"main-nav-active\");\n mainNav.classList.add(\"closing\");\n mainNavTogglerRef.current?.focus();\n mainNav.addEventListener(transitionEvent, mobileHideMainNav, false);\n props.setIsMobileMenuOpen(false);\n }\n\n setIsMyActivityOpen(false);\n };\n\n return (\n <>\n
    \n
    \n
    \n
    \n
    \n \n \n \n \n \n \n \n \n NSW government, NSW Volunteering Home\n \n \n
    \n
    \n
    \n \n \n menu\n \n \n {props.isMobileMenuOpen ? \"Close\" : \"Open\"}\n {\" \"}\n Menu\n \n
    \n
    \n
    \n
    \n \n \n \n );\n};\n\ninterface MyActivityAccordionContentProps {\n isOpen: boolean;\n className?: string;\n hideMobileNav: () => void;\n}\n\nconst MyActivityAccordionContentMobile = (\n props: MyActivityAccordionContentProps\n) => {\n return (\n
    \n
    \n \n p.theme.mdBreakpoint}) {\n order: 1;\n }\n `}\n className=\"col-md-7\"\n >\n
    \n \n {organisation.description}\n

    \n
    \n {!!organisation.opportunities.length && (\n
    \n

    \n {organisation.totalCount} volunteer{\" \"}\n {organisation.totalCount === 1\n ? \"opportunity\"\n : \"opportunities\"}{\" \"}\n found\n

    \n\n
      \n {organisation.opportunities.map((opp) => (\n
    • \n ({\n pathname: opp.url,\n state: {\n referrer: {\n ...loc,\n state: {\n referrer: referrer,\n children: \"Back to organisation\",\n },\n },\n },\n })}\n headingProps={{ className: \"h2 mb-0\" }}\n locations={locationSegmentsToReactNode(\n opp.locations,\n opp.onlineRemoteVolunteers\n )}\n category={\n opp.category ? (\n <>\n \n Category:{\" \"}\n \n \n {opp.category.name}\n \n \n ) : undefined\n }\n typesOfWork={\n opp.typesOfWork.length ? (\n <>\n \n Types of work:{\" \"}\n \n {opp.typesOfWork.map((type, idx) => (\n \n {type.url ? (\n \n {type.name}\n \n ) : (\n {type.name}\n )}\n {idx < opp.typesOfWork.length - 1 && (\n , \n )}\n \n ))}\n \n ) : null\n }\n />\n
    • \n ))}\n
    \n
    \n )}\n {!!organisation.totalCount && (\n \n See all opportunities for {organisation.name}\n \n )}\n
    \n p.theme.mdBreakpoint}) {\n order: 2;\n }\n `}\n className=\"col-md-4 ml-auto\"\n >\n \n li {\n margin-bottom: 0.5rem;\n }\n `}\n className=\"list-unstyled\"\n >\n {!!organisation.primaryAddress && (\n
  • \n \n {organisation.primaryAddress.suburb}\n {\", \"}\n {organisation.primaryAddress.state}\n
  • \n )}\n\n
  • \n \n {organisation.category}\n
  • \n \n \n\n \n ({\n ...theme,\n dangerColor: theme.primaryColor,\n })}\n >\n {\n updateUser((prev) => ({\n ...prev,\n favouriteCount: isFavourited\n ? prev.favouriteCount + 1\n : prev.favouriteCount - 1,\n }));\n }}\n />\n \n \n\n {!!organisation.website && (\n \n

    Contact

    \n
    \n {!!organisation.primaryAddress && (\n <>\n {organisation.primaryAddress.street}\n
    \n {organisation.primaryAddress.suburb},{\" \"}\n {organisation.primaryAddress.state}\n
    \n Australia\n \n )}\n
    \n {!!organisation.emailAddress && (\n \n )}\n {!!organisation.website && (\n \n )}\n {!!organisation.phoneNumber && (\n
    \n Phone {organisation.phoneNumber}\n
    \n )}\n
    \n )}\n \n \n \n \n );\n }\n\n return null;\n })()}\n \n );\n};\n\nexport default withTheme(OrganisationDetails);\n","import { debounce } from \"lodash-es\";\nimport * as React from \"react\";\nimport { Link, useLocation } from \"react-router-dom\";\n\nimport { SvgSprite } from \"@skv/core\";\n\nimport { usePageEnvelope } from \"@skv/state\";\n\nlet storeCache = null;\n\nconst reducer = (\n state = {\n loading: false,\n error: false,\n data: null,\n },\n action\n) => {\n switch (action.type) {\n case \"ORG_DIRECTORY:FETCH:START\":\n return {\n ...state,\n loading: true,\n error: false,\n };\n case \"ORG_DIRECTORY:FETCH:END\":\n return {\n ...state,\n loading: false,\n error: false,\n data: {\n ...state.data,\n [action.payload.data.directoryKey]: action.payload.data,\n },\n };\n\n default:\n return state;\n }\n};\n\nconst createInitialStateFromPageEnvelope = (pageEnvelope, key) => {\n if (pageEnvelope.data && pageEnvelope.data[key]) {\n const result = pageEnvelope.data[key];\n\n return {\n loading: false,\n error: false,\n data: {\n [result.directoryKey]: result,\n },\n };\n }\n\n return {\n loading: true,\n error: false,\n data: null,\n };\n};\n\nconst INITIAL_HEIGHT = 340;\n\nconst OrganisationDirectoryCollapse = (props) => {\n const { data } = props;\n\n const location = useLocation();\n const [isReady, setReady] = React.useState(false);\n const [height, setHeight] = React.useState(null);\n const [expanded, setExpanded] = React.useState(false);\n\n const handleViewAllClick = (e) => {\n setExpanded(!expanded);\n };\n\n const showViewAll = height > INITIAL_HEIGHT;\n\n const ulRef = React.useRef(null);\n\n React.useEffect(() => {\n const handleResize = () => {\n setHeight(ulRef.current.clientHeight);\n };\n\n const debouncedHandleResize = debounce(handleResize, 300);\n\n window.addEventListener(\"resize\", debouncedHandleResize, false);\n\n handleResize();\n setReady(true);\n\n return () => {\n window.removeEventListener(\"resize\", debouncedHandleResize, false);\n };\n }, []);\n\n React.useEffect(() => {\n setExpanded(false);\n setHeight(ulRef.current.clientHeight);\n }, [location.pathname, setExpanded]);\n\n return (\n <>\n {/*
    {height}
    */}\n
    \n p.theme.timingFnEaseOut};\n\n &.collapsed {\n &:after {\n content: \"\";\n position: absolute;\n bottom: 0;\n left: 0;\n width: 100%;\n height: 5rem;\n background-image: linear-gradient(0deg, white, transparent);\n pointer-events: none;\n }\n }\n }\n `}\n >\n p.theme.smBreakpoint}) {\n column-count: 2;\n }\n\n @media (min-width: ${(p) => p.theme.mdBreakpoint}) {\n column-count: 3;\n }\n\n > li {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n }\n `}\n className=\"list-unstyled\"\n >\n {data.organisations.map((org) => (\n
  • \n ({\n pathname: org.url,\n state: {\n referrer: loc,\n },\n })}\n >\n {org.name}\n \n
  • \n ))}\n \n
    \n {showViewAll && (\n \n )}\n \n \n );\n};\n\nconst OrganisationDirectoryResults: React.FC<{ letter: string }> = ({\n letter,\n}) => {\n const { pageEnvelope } = usePageEnvelope();\n\n const [state, dispatch] = React.useReducer(\n reducer,\n storeCache ||\n createInitialStateFromPageEnvelope(pageEnvelope, \"organisationDirectory\")\n );\n\n const { data, error, loading } = state;\n console.log(state);\n\n React.useEffect(() => {\n // console.log(data);\n\n if (!data || !data[letter]) {\n dispatch({\n type: \"ORG_DIRECTORY:FETCH:START\",\n payload: {\n letter,\n },\n });\n\n fetch(`/api/organisation/directory/${letter}`)\n .then((res) => {\n if (res.ok) {\n return res.json();\n }\n })\n .then(({ data, errorCode, errorMessage, success }) => {\n if (success) {\n dispatch({\n type: \"ORG_DIRECTORY:FETCH:END\",\n payload: {\n data: data.organisationDirectory,\n },\n });\n }\n console.log(data);\n });\n }\n\n return () => {\n console.log(\"EXITING\");\n storeCache = state;\n };\n }, [data, letter]);\n\n // console.log(state);\n\n return (\n <>\n
    \n {((): React.ReactNode => {\n if (loading) {\n return

    Please wait. Loading...

    ;\n }\n\n if (data[letter] && data[letter].totalCount) {\n return ;\n }\n\n if (data[letter] && data[letter].totalCount === 0) {\n return

    No organisations to display

    ;\n }\n\n return null;\n })()}\n
    \n \n );\n};\n\nexport default OrganisationDirectoryResults;\n","import * as React from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport { Form } from \"react-bootstrap\";\n\nimport { useThunkDispatch, organisationResultStore } from \"@skv/state\";\n\nconst OrganisationDirectorySearchForm: React.FC<{}> = () => {\n const history = useHistory();\n\n const dispatch = useThunkDispatch();\n\n const [keyword, setKeyword] = React.useState(\"\");\n\n const handleSubmit = (e: React.FormEvent): void => {\n e.preventDefault();\n\n dispatch(\n organisationResultStore.actions.fetchOrganisations({\n keyword,\n })\n ).then((data) => {\n history.push(data.canonicalUrl, {\n searchQuery: {\n keyword,\n },\n });\n });\n };\n\n const handleChange = (e): void => setKeyword(e.target.value);\n\n return (\n \n
    \n
    \n \n Search for an organisation\n \n \n
    \n
    \n \n
    \n
    \n \n );\n};\n\nexport default OrganisationDirectorySearchForm;\n","import * as React from \"react\";\nimport { NavLink, useParams } from \"react-router-dom\";\nimport { Helmet } from \"react-helmet\";\n\nimport styled from \"styled-components\";\n\nimport OrganisationDirectoryResults from \"./OrganisationDirectoryResults\";\nimport OrganisationDirectorySearchForm from \"./OrganisationDirectorySearchForm\";\nimport { Analytics } from \"@skv/core\";\n\nconst ALPHABET = \"abcdefghijklmnopqrstuvwxyz\";\n\nconst Glyph = styled.span``;\n\nconst OrgNavLink = styled(NavLink).attrs((props) => ({\n isActive: (match, location) => {\n // console.log(match, location);\n const arr = location.pathname.split(\"/\");\n return arr[arr.length - 1] === props.to;\n },\n}))`\n font-size: ${18 / 16}rem;\n display: block;\n padding: 0.25rem ${10 / 16}rem;\n font-weight: bold;\n\n &:hover {\n text-decoration: none;\n }\n\n &:hover,\n &.active {\n ${Glyph} {\n border-bottom: 2px solid ${(p) => p.theme.darkColor};\n }\n }\n`;\n\nconst ListInlineItem = styled.li`\n display: inline-block;\n`;\n\nconst OrganisationDirectory = () => {\n const params = useParams<{ letter: string }>();\n const letter = String(params.letter).toLowerCase();\n\n return (\n <>\n \n {letter === \"0\" ? (\n {`List of registered organisations starting with a number`}\n ) : (\n {`List of registered organisations starting with ${letter.toUpperCase()}`}\n )}\n \n \n
    \n
    \n
    \n

    Organisation directory

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

    \n \n Showing organisations that start with the letter\n \n {letter === \"0\" ? \"0 - 9\" : letter.toUpperCase()}\n

    \n\n \n
    \n\n
    \n
    \n \n
    \n
    \n
    \n \n );\n};\n\nexport default OrganisationDirectory;\n","import { Redirect, Route, Switch } from \"react-router-dom\";\nimport OrganisationSearch from \"~/ui/OrganisationSearch\";\nimport OrganisationDetails from \"./OrganisationDetails\";\nimport OrganisationDirectory from \"./OrganisationDirectory\";\n\nexport default function Organisations() {\n return (\n \n \n \n \n \n \n \n {\n return ;\n }}\n />\n \n \n \n );\n}\n\nexport const routes = [\n \"/volunteering-organisations\",\n \"/*-volunteering-organisations\",\n \"/volunteering-organisations/in-*\",\n \"/volunteering-organisations/browse\",\n \"/volunteering-organisations/browse/:letter\",\n \"/volunteering-organisations/:orgId\",\n \"/find-organisations\",\n];\n","import * as React from \"react\";\nimport { Helmet } from \"react-helmet\";\nimport { useForm } from \"react-yup\";\nimport * as Yup from \"yup\";\n\nimport { EmailNotificationTypes, Form, VolunteerSearchLink } from \"@skv/core\";\nimport { useAppSettings, usePageEnvelope } from \"@skv/state\";\n\nconst SCHEMA = Yup.object({\n email: Yup.string().email().label(\"Email\").required(),\n}).defined();\n\nconst Unsubscribe = () => {\n const { pageEnvelope } = usePageEnvelope<{\n email: string;\n notificationType: EmailNotificationTypes;\n searchTitle: string;\n }>();\n\n const { seekVolunteerUrl } = useAppSettings();\n\n const { data, errorCode } = pageEnvelope;\n\n const formRef = React.useRef(null);\n\n const { email, notificationType, searchTitle } = data || {};\n\n const { field, values, touched, errors, isSubmitting, createSubmitHandler } =\n useForm({\n validationSchema: SCHEMA,\n defaultErrors: () => {\n const email =\n \"We could not unsubscribe you at this time. Please try again.\";\n return errorCode ? { email } : {};\n },\n defaultTouched: errorCode\n ? {\n email: true,\n }\n : {},\n });\n\n const handleSubmit = React.useMemo(() => {\n return createSubmitHandler(() => {\n formRef.current.submit();\n });\n }, [createSubmitHandler]);\n\n return (\n <>\n \n Unsubscribe\n \n
    \n \n Find opportunities\n \n\n
    \n
    \n {((): React.ReactNode => {\n if (data) {\n let notificationTypeValue;\n\n switch (notificationType) {\n case EmailNotificationTypes.OrganisationSummary:\n notificationTypeValue = \"Organisation Summary emails\";\n break;\n case EmailNotificationTypes.VolunteerOrganisationViewedEoi:\n notificationTypeValue = \"Viewed Application emails\";\n break;\n case EmailNotificationTypes.VolunteerOpportunitySearch:\n notificationTypeValue = searchTitle + \" opportunity emails\";\n break;\n case EmailNotificationTypes.VolunteerAllOpportunitySearches:\n notificationTypeValue = \"new opportunity emails\";\n break;\n default:\n notificationTypeValue = \"new emails\";\n break;\n }\n\n return (\n <>\n

    Done!

    \n

    \n We have unsubscribed {email} from all{\" \"}\n {notificationTypeValue}.\n

    \n \n );\n }\n\n return (\n <>\n

    Unsubscribe

    \n

    \n Enter your email address below to stop receiving new\n opportunities via email.\n

    \n\n \n \n\n

    \n By unsubscribing, you agree to our{\" \"}\n \n privacy statement\n \n .\n

    \n \n {isSubmitting ? \"Unsubscribing...\" : \"Unsubscribe\"}\n \n \n \n );\n })()}\n
    \n
    \n
    \n \n );\n};\n\nexport default Unsubscribe;\n","import Dropdown from \"react-bootstrap/Dropdown\";\nimport { useLocation } from \"react-router-dom\";\n\nimport {\n EmailButton,\n EmailParams,\n FacebookButton,\n FacebookParams,\n LinkedinButton,\n LinkedinParams,\n TwitterButton,\n TwitterParams,\n} from \"@skv/core\";\n\nimport { SvgSprite } from \"@skv/core\";\nimport { useAppSettings } from \"@skv/state\";\n\ninterface ShareSocialProps {\n showEmail?: boolean;\n showFacebook?: boolean;\n showLinkedin?: boolean;\n showTwitter?: boolean;\n emailOptions?: EmailParams;\n linkedinOptions?: LinkedinParams;\n facebookOptions?: FacebookParams;\n twitterOptions?: TwitterParams;\n}\n\nexport const ShareSocialInline = ({\n showEmail,\n emailOptions,\n showFacebook,\n facebookOptions,\n showLinkedin,\n linkedinOptions,\n showTwitter,\n twitterOptions,\n}: ShareSocialProps) => {\n const { pathname } = useLocation();\n const { applicationName, applicationUrl, facebookAppId } = useAppSettings();\n const shareBtnCss = `\n padding: 0.25rem;\n &:hover {\n background-color: #f4f6fe;\n }\n `;\n return (\n
    \n {showFacebook && (\n \n \n \n )}\n {showTwitter && (\n \n \n \n )}\n {showLinkedin && (\n \n \n \n )}\n {showEmail && (\n \n \n \n )}\n
    \n );\n};\n\nexport const ShareSocialDropdown = ({\n showEmail,\n emailOptions,\n showFacebook,\n facebookOptions,\n showLinkedin,\n linkedinOptions,\n showTwitter,\n twitterOptions,\n}: ShareSocialProps) => {\n const { pathname } = useLocation();\n const { applicationName, applicationUrl, facebookAppId } = useAppSettings();\n const shareBtnCss = `\n width: 100%;\n text-align: left;\n padding: 0.25rem 0.5rem;\n transition: all 100ms ease;\n\n &:hover {\n background-color: #F2F2F2;\n }\n `;\n\n return (\n \n \n \n share\n \n \n Share\n \n \n \n {showEmail && (\n \n Email a friend\n \n )}\n {showFacebook && (\n \n Facebook\n \n )}\n {showTwitter && (\n \n Twitter\n \n )}\n {showLinkedin && (\n \n LinkedIn\n \n )}\n \n \n );\n};\n","import * as React from \"react\";\nimport { useParams } from \"react-router-dom\";\nimport styled from \"styled-components\";\n\nimport { SidebarBox, SvgSprite, VolunteerSearchLink } from \"@skv/core\";\n\nimport { opportunityStore } from \"@skv/state\";\nimport { getDateRange } from \"@skv/util\";\nimport { ShareSocialDropdown } from \"~/ui/ShareSocial\";\n\nconst OppListSvgSprite = styled(SvgSprite)`\n vertical-align: text-top;\n margin: 0.15rem 0.35rem 0 0.35rem;\n`;\n\nconst Block = styled(SidebarBox)`\n background-color: ${(p) => p.theme.gray200};\n border: none;\n padding: 1rem;\n margin-bottom: 1rem;\n p:last-child {\n margin-bottom: 0;\n }\n`;\n\nconst OpportunityDetailsAside = (title): JSX.Element => {\n const { id } = useParams<{ id: string }>();\n const { data } = opportunityStore.hooks.useOpportunity(id);\n const {\n locations,\n category,\n typesOfWork,\n suitableFors,\n commitment,\n training,\n timeRequired,\n reimbursement,\n requirements,\n requirementDescription,\n onlineOrRemote,\n eventStartDate,\n eventEndDate,\n } = data;\n\n return (\n \n );\n};\n\nexport default OpportunityDetailsAside;\n","export enum InPageAlertVariant {\n Info = \"nsw-in-page-alert--info\",\n Error = \"nsw-in-page-alert--error\",\n Warning = \"nsw-in-page-alert--warning\",\n Success = \"nsw-in-page-alert--success\",\n}\n\nexport interface InPageAlertProps {\n variant: InPageAlertVariant;\n title?: string;\n message: string | JSX.Element;\n show: boolean;\n isCompact?: boolean;\n}\n\nfunction InPageAlert({\n variant,\n title,\n message,\n show,\n isCompact = true,\n}: InPageAlertProps) {\n if (!show) {\n return null;\n }\n\n const alertClasses = `nsw-in-page-alert mb-3 ${variant} ${\n isCompact ? \"nsw-in-page-alert--compact\" : \"\"\n }`;\n\n return (\n
    \n \n {variant === InPageAlertVariant.Info\n ? \"info\"\n : variant === InPageAlertVariant.Error\n ? \"cancel\"\n : variant === InPageAlertVariant.Warning\n ? \"error\"\n : \"check_circle\"}\n \n
    \n {title &&

    {title}

    }\n
    {message}
    \n
    \n
    \n );\n}\n\nexport default InPageAlert;\n","import { useParams } from \"react-router-dom\";\n\nimport { Analytics } from \"@skv/core\";\nimport { useEffect } from \"react\";\n\ninterface OpportunityDetailsEoiRedirectProps {\n partnerName?: string;\n applicationRedirectUrl?: string;\n}\n\nconst OpportunityDetailsEoiRedirect = (\n props: OpportunityDetailsEoiRedirectProps\n): JSX.Element => {\n const { id: routeOppId, encodedOnlineApplicationId } = useParams<{\n id: string;\n encodedOnlineApplicationId: string;\n }>();\n\n useEffect(() => {\n const timeout = setTimeout(\n () => {\n if (props.applicationRedirectUrl) {\n // Redirect to application form on Third-party website\n window.location.replace(props.applicationRedirectUrl);\n } else {\n // Two-steps redirect to local endpoint to handle redirect with application data\n window.location.replace(\n `/volunteering/${routeOppId}/apply/redirect/${encodedOnlineApplicationId}`\n );\n }\n },\n props.applicationRedirectUrl ? 2000 : 1000\n );\n\n return () => clearTimeout(timeout);\n }, []);\n\n return (\n <>\n {props.applicationRedirectUrl ? (\n

    \n You are being redirected to{\" \"}\n {props.partnerName ? `${props.partnerName}'s website to ` : \"\"}\n complete your application for this opportunity.\n

    \n ) : (\n

    Redirecting...

    \n )}\n\n \n \n );\n};\n\nexport default OpportunityDetailsEoiRedirect;\n","import * as React from \"react\";\n\nimport { Helmet } from \"react-helmet\";\nimport { Prompt, useHistory, useParams, useRouteMatch } from \"react-router-dom\";\n\nimport store from \"store2\";\nimport * as Yup from \"yup\";\n\nimport {\n Analytics,\n AsyncTypeahead,\n CustomError,\n eoiSchema,\n ExternalLink,\n ShareablePasteInput,\n useAsyncTypeahead,\n} from \"@skv/core\";\n\nimport type { Opportunity, PageEnvelope } from \"@skv/core\";\n\nimport {\n opportunityStore,\n useAppSettings,\n useGlobal,\n usePageEnvelope,\n useThunkDispatch,\n} from \"@skv/state\";\nimport { useForm } from \"react-yup\";\nimport { useEoiForm, useUserDispatch } from \"~/state\";\nimport { Checkbox, Field, TextArea, ValidationError } from \"~/ui\";\nimport InPageAlert, {\n InPageAlertProps,\n InPageAlertVariant,\n} from \"~/ui/Alerts/InPageAlert\";\nimport { HelpText } from \"~/ui/Form/HelpText\";\nimport OpportunityDetailsEoiRedirect from \"./OpportunityDetailsEoiRedirect\";\nimport { OpportunityEoiSuccessViewModel } from \"./types\";\n\nconst STORE = store.session.namespace(\"eoiFormUserInput\");\n\ntype FormValues = Yup.InferType;\n\ninterface OpportunityDetailsEoiViewModel {\n opportunity: Opportunity;\n form: FormValues;\n genders: Gender[];\n formErrors: FormErrors;\n}\n\ntype FormErrors = {\n [key in keyof FormValues]?: string[];\n};\n\ninterface Gender {\n id: number;\n name: string;\n}\n\ntype OpportunityEoiFailureViewModel = {\n formErrors: FormErrors;\n};\n\ntype OpportunityEoiResultViewModel =\n | OpportunityEoiSuccessViewModel\n | OpportunityEoiFailureViewModel;\n\nexport const OpportunityDetailsEoi = (props) => {\n const [eoiForm, setEoiForm] = useEoiForm();\n\n const { updateUser } = useUserDispatch();\n const { seekVolunteerUrl, showApplicationNudge } = useAppSettings();\n\n const params = useParams<{ id: string }>();\n\n const dispatch = useThunkDispatch();\n\n const { url } = useRouteMatch();\n const { push } = useHistory();\n\n const { applicationName } = useAppSettings();\n const { genders } = useGlobal();\n\n const alertRef = React.useRef(null);\n\n const { pageEnvelope } = usePageEnvelope();\n\n const [alert, setAlert] = React.useState(() => {\n if (pageEnvelope.errorCode === \"error:application:formvalidation\") {\n return {\n variant: InPageAlertVariant.Error,\n message: (\n <>\n

    Please fix the below errors in your form

    \n
      \n {Object.entries(pageEnvelope.data.formErrors)\n .reduce((acc, cur) => {\n acc = [...acc, ...cur[1]];\n return acc;\n }, [])\n .map((error, idx) => (\n
    • {error}
    • \n ))}\n
    \n \n ),\n show: true,\n };\n }\n\n return {\n variant: InPageAlertVariant.Error,\n message: \"\",\n show: false,\n };\n });\n\n const { data: opportunity } = opportunityStore.hooks.useOpportunity(\n params.id\n );\n const { name, id, locations, onlineOrRemote, organisation } = opportunity;\n\n const {\n isSubmitting,\n values,\n errors,\n touched,\n createSubmitHandler,\n setValue,\n setValues,\n FormProvider,\n field,\n setTouched,\n setSubmitting,\n validateForm,\n } = useForm({\n validationSchema: eoiSchema,\n defaultValues: Object.assign(\n {},\n pageEnvelope.data?.form,\n eoiForm,\n STORE.getAll()\n ),\n defaultErrors: pageEnvelope.data?.formErrors\n ? Object.entries(pageEnvelope.data?.formErrors).reduce((acc, cur) => {\n acc[cur[0]] = cur[1][0];\n return acc;\n }, {})\n : {},\n defaultTouched: pageEnvelope.data?.formErrors\n ? Object.entries(pageEnvelope.data?.formErrors).reduce((acc, cur) => {\n acc[cur[0]] = true;\n return acc;\n }, {})\n : {},\n });\n\n const locationAsyncTypeahead = useAsyncTypeahead<\n string,\n PageEnvelope<{\n locations: string[];\n }>\n >({\n url: (query) => `/api/locations/eoi?q=${query}`,\n onSuccess: (res) => res.data.locations,\n });\n\n const isFormPartiallyFilled = Object.values(values).some((n) => !!n);\n\n React.useEffect(() => {\n const showNudgeWarning = (e: BeforeUnloadEvent) => {\n if (isFormPartiallyFilled) {\n e.preventDefault();\n e.returnValue = \"Are you sure? You have unsaved changes.\";\n return e.returnValue;\n }\n };\n\n if (showApplicationNudge) {\n window.addEventListener(\"beforeunload\", showNudgeWarning);\n\n return () => {\n window.removeEventListener(\"beforeunload\", showNudgeWarning);\n };\n }\n }, [isFormPartiallyFilled, showApplicationNudge]);\n\n const ensureLinkIsHttps = () => {\n if (values.shareableLink && values.shareableLink.includes(\"seek\")) {\n const domainAndPath = values.shareableLink.split(\"seek\")[1];\n const protocolSubdomain = \"https://www.seek\";\n setValue(\"shareableLink\", `${protocolSubdomain}${domainAndPath}`);\n }\n };\n\n const handleSubmit = React.useMemo(() => {\n return createSubmitHandler(async (values) => {\n setAlert((prev) => ({\n ...prev,\n visible: false,\n }));\n\n /* TODO : Do this in onChange handler? */\n setEoiForm((prev) => ({\n ...prev,\n email: values.email,\n firstName: values.firstName,\n lastName: values.lastName,\n gender: values.gender,\n location: values.location,\n phone: values.phone,\n qualification: values.qualification,\n yearOfBirth: values.yearOfBirth,\n }));\n\n await fetch(`/api/opportunity/${params.id}/apply`, {\n method: \"POST\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n ...values,\n shareableLink: values.shareableLink ? values.shareableLink : null,\n }),\n })\n .then>((res) => {\n if (res.ok) {\n return res.json();\n }\n\n throw Error(\"Unhandled network error\");\n })\n .then(({ data: viewModel, errorCode, errorMessage, success }) => {\n if (success) {\n updateUser((prev) => ({\n ...prev,\n applicationCount: prev.applicationCount + 1,\n }));\n setValues(() => ({} as FormValues));\n push(`${url}/success`, viewModel);\n return;\n }\n\n switch (errorCode) {\n case \"error:application:formvalidation\": {\n setAlert((prev) => ({\n ...prev,\n variant: InPageAlertVariant.Error,\n message: (\n <>\n

    Please fix the below errors in your form

    \n
      \n {Object.entries(\n (viewModel as OpportunityEoiFailureViewModel).formErrors\n )\n .reduce((acc, cur) => {\n acc = [...acc, ...cur[1]];\n return acc;\n }, [])\n .map((error, idx) => (\n
    • {error}
    • \n ))}\n
    \n \n ),\n show: true,\n }));\n alertRef.current?.focus();\n break;\n }\n case \"error:application:alreadyexists\":\n case \"error:application:limitreached\": {\n dispatch({\n type: \"OPPORTUNITY:ERROR:SET\",\n payload: {\n error: new CustomError(errorMessage, errorCode),\n },\n });\n break;\n }\n default:\n throw Error(\"Unhandled pageEnvelope errorCode\");\n }\n\n setSubmitting(false);\n })\n .catch((err) => {\n // network error\n setAlert((prev) => ({\n ...prev,\n variant: InPageAlertVariant.Error,\n children: (\n <>\n We could not submit your expression of interest at this time.\n Please try again or{\" \"}\n \n contact support\n \n .\n \n ),\n show: true,\n }));\n\n alertRef.current?.focus();\n setSubmitting(false);\n });\n });\n }, [\n createSubmitHandler,\n setEoiForm,\n params.id,\n setSubmitting,\n updateUser,\n push,\n url,\n dispatch,\n seekVolunteerUrl,\n ]);\n\n /* Wrap field.onChange to track form input and persist the session */\n const fieldProxy = React.useMemo(() => {\n const handleChange = (e) => {\n const { name, value } = e.target;\n\n /* TODO : TEMP FOR GENDER, figure out better way */\n if (name === \"gender\") {\n STORE.set(name, parseInt(value, 10));\n } else {\n STORE.set(name, value);\n }\n field.onChange(e);\n };\n\n return {\n onBlur: field.onBlur,\n onChange: handleChange,\n };\n }, [field]);\n\n const locationFieldProps = React.useMemo(() => {\n const handleChange = (locs) => {\n setValues((v) => {\n v.location = locs[0];\n return v;\n }, true);\n STORE.set(\"location\", locs[0] || \"\");\n };\n\n const handleBlur = (e) => {\n setTouched((t) => {\n t.location = true;\n return t;\n });\n validateForm({ touch: false });\n };\n\n return {\n onChange: handleChange,\n onBlur: handleBlur,\n };\n }, [setTouched, setValues, validateForm]);\n\n const positionLocation = React.useMemo(() => {\n let positions = \"This position is \";\n if (locations.length > 0) {\n positions += `in ${locations.map((n) => n.name).join(\", \")}`;\n }\n if (locations.length === 0 || onlineOrRemote) {\n positions += !!locations.length\n ? \" / Remote Friendly\"\n : \"Online or Remote\";\n }\n return positions;\n }, [locations, onlineOrRemote]);\n\n if (opportunity.applicationRedirectUrl?.length > 0) {\n return (\n \n );\n }\n\n return (\n <>\n \n \n {`Apply for ${name}, ${organisation.name}`}\n \n \n \n \n \n {showApplicationNudge && (\n \n )}\n
    \n

    \n Enter your details below to apply for this opportunity.\n {organisation.twoStepApplication && (\n <>\n
    \n Afterwards, you will be instructed to complete your application\n on the {organisation.name} website.\n \n )}\n

    \n

    \n To apply for volunteer positions, you must reside in{\" \"}\n Australia.\n
    \n {positionLocation}.\n

    \n\n {alert.show && }\n\n \n All fields marked with * are required\n \n {\n ensureLinkIsHttps();\n handleSubmit(e);\n }}\n >\n
    \n
    \n \n
    \n
    \n \n
    \n
    \n\n \n\n \n\n {/* TODO : Autosuggest */}\n
    \n \n \n {errors.location && touched.location && (\n \n )}\n
    \n\n {\n if (text) {\n setTouched((prev) => ({\n ...prev,\n shareableLink: true,\n }));\n setValue(\"shareableLink\", text, true);\n }\n }}\n customValidationError={\n \n }\n />\n\n \n\n
    \n \n \n Gender (optional)\n \n \n \n {genders.map(({ id, name }) => (\n \n ))}\n
    \n \n
    \n\n \n\n
    \n

    \n Your details will be shared with the organisation above.\n
    \n Please refer to our privacy statement if you have any questions.\n

    \n
    \n\n \n By applying, you agree to our{\" \"}\n \n privacy statement\n \n .\n \n\n \n {isSubmitting\n ? \"Sending...\"\n : organisation.twoStepApplication\n ? \"Submit and continue\"\n : \"Apply\"}\n \n \n \n \n
    \n \n );\n};\n","import * as React from \"react\";\nimport { Alert, AlertProps } from \"react-bootstrap\";\nimport { useParams, useLocation } from \"react-router-dom\";\nimport { Helmet } from \"react-helmet\";\nimport * as Yup from \"yup\";\nimport { useForm } from \"react-yup\";\n\nimport { Checkbox, Select } from \"~/ui\";\n\nimport { Analytics } from \"@skv/core\";\nimport { usePageEnvelope, opportunityStore } from \"@skv/state\";\n\nimport InPageAlert, {\n InPageAlertVariant,\n InPageAlertProps,\n} from \"~/ui/Alerts/InPageAlert\";\n\nimport { OpportunityEoiSuccessViewModel } from \"./types\";\n\nconst SCHEMA = Yup.object({\n findUsId: Yup.number().nullable(),\n lowIncome: Yup.boolean().nullable(),\n jobSeeker: Yup.boolean().nullable(),\n nonEnglishBackground: Yup.boolean().nullable(),\n isIndigenous: Yup.boolean().nullable(),\n healthCondition: Yup.boolean().nullable(),\n hasDisability: Yup.boolean().nullable(),\n onlineApplicationId: Yup.number().required(),\n});\n\nconst STATS_QUESTIONS = [\n {\n name: \"lowIncome\",\n label: \"I am on a low income (less than $66,667 a year)\",\n },\n {\n name: \"jobSeeker\",\n label: \"I am looking for work\",\n },\n {\n name: \"nonEnglishBackground\",\n label: \"English was not my first language\",\n },\n {\n name: \"isIndigenous\",\n label: \"I am Aboriginal or Torres Straight Islander\",\n },\n {\n name: \"healthCondition\",\n label: \"I have a chronic health condition\",\n },\n {\n name: \"hasDisability\",\n label: \"I have a disability\",\n },\n];\n\nconst OpportunityDetailsEoiSuccess = (): JSX.Element => {\n const location = useLocation();\n\n const { id: routeOppId } = useParams<{\n id: string;\n }>();\n\n const { state } = location;\n\n const { data: opportunity } =\n opportunityStore.hooks.useOpportunity(routeOppId);\n\n const { pageEnvelope } = usePageEnvelope();\n\n const { data } = pageEnvelope;\n\n const { id, organisation } = opportunity;\n\n const mergedState = Object.assign({}, state, data);\n\n const alertRef = React.useRef(null);\n const [alert, setAlert] = React.useState<\n InPageAlertProps & { status: string }\n >(() => {\n if (mergedState.statsSuccessfullySent) {\n return {\n status: \"sent\",\n variant: InPageAlertVariant.Success,\n message: \"Thank you. Your answers have successfully been sent.\",\n show: true,\n };\n }\n\n return {\n status: \"idle\",\n variant: InPageAlertVariant.Success,\n message: \"\",\n show: false,\n };\n });\n\n const {\n FormProvider,\n field,\n values,\n isChecked,\n errors,\n touched,\n createSubmitHandler,\n isSubmitting,\n setSubmitting,\n } = useForm({\n validationSchema: SCHEMA,\n defaultValues: {\n onlineApplicationId: mergedState.onlineApplicationId,\n findUsId: 0,\n lowIncome: false,\n jobSeeker: false,\n hasDisability: false,\n healthCondition: false,\n isIndigenous: false,\n nonEnglishBackground: false,\n },\n });\n\n const handleSubmit = React.useMemo(() => {\n return createSubmitHandler((values) => {\n fetch(`/api/opportunity/${id}/stats`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(values),\n })\n .then((res) => {\n if (res.ok) {\n return res.json();\n }\n\n throw Error(\"Network error, or response not ok\");\n })\n .then(({ data, success, errorCode, errorMessage, meta }) => {\n if (success) {\n return setAlert((prev) => ({\n ...prev,\n status: \"sent\",\n variant: InPageAlertVariant.Success,\n message: \"Thank you. Your answers have successfully been sent.\",\n show: true,\n }));\n }\n if (errorCode) {\n throw Error(\"An unhandled error code has been sent.\");\n }\n })\n .catch((err) => {\n setAlert((prev) => ({\n ...prev,\n status: \"error\",\n variant: InPageAlertVariant.Error,\n message:\n \"Unfortunately we were not able to submit your answers. Please try again.\",\n show: true,\n }));\n\n setSubmitting(false);\n });\n });\n }, [createSubmitHandler, setSubmitting, id]);\n\n return (\n <>\n \n Thank you for applying\n \n
    \n {mergedState.showTwoStepApplication ? (\n <>\n

    \n Thank you for offering to help with this opportunity –{\" \"}\n {opportunity.name} with {organisation.name}.\n

    \n

    \n The organisation requests that you{\" \"}\n complete your application at their website. Your\n application will not be considered complete otherwise.\n

    \n \n Continue applying on {organisation.name}'s website\n \n \n ) : (\n <>\n

    Thank you for offering to help with this opportunity.

    \n

    \n Your details have been sent to the organisation above. They will\n contact you soon with the next steps and details on how you can\n help.\n

    \n

    \n If you don't hear from them within a week you can contact them\n using the details on their organisation profile.\n

    \n \n )}\n\n {/* Direct message from this organisation */}\n {mergedState.organisationMessage && (\n <>\n

    Direct message from this organisation

    \n p.theme.primaryColor};\n padding-left: 1.5rem;\n `}\n >\n {mergedState.organisationMessage}\n

    \n \n )}\n\n {!mergedState.showTwoStepApplication ? (\n <>\n {alert.status === \"sent\" || alert.status === \"error\" ? (\n \n ) : null}\n\n {/* One more question for statistical purposes*/}\n {mergedState?.statsQuestions && alert.status === \"idle\" && (\n \n \n

    \n One more question for statistical purposes\n

    \n

    \n Your answer to this question will not be included in your\n application. The responses (not your personal details) will\n help secure more support for volunteering.\n

    \n\n
    \n
    \n \n \n Personal background (optional)\n \n \n
    \n {STATS_QUESTIONS.map(({ name, label }, idx) => (\n \n ))}\n
    \n
    \n
    \n\n \n \n {mergedState.statsQuestions.findUsList.map((n) => (\n \n ))}\n \n\n \n\n \n {isSubmitting ? \"Sending...\" : \"Send\"}\n \n \n
    \n )}\n \n ) : null}\n\n \n
    \n \n );\n};\n\nexport default OpportunityDetailsEoiSuccess;\n","import { Link, LinkProps } from \"react-router-dom\";\n\nimport { EventBadge, useInitialFocus } from \"@skv/core\";\nimport { resizeImg } from \"@skv/util\";\n\ninterface OpportunityDetailsHeaderProps {\n title?: string;\n organisationName?: string;\n organisationMemberName?: string;\n imgSrc?: string;\n to: LinkProps[\"to\"];\n eventDate?: string;\n isNew?: boolean;\n focusHeading?: boolean;\n}\n\nexport const OpportunityDetailsHeader = ({\n title,\n organisationName,\n organisationMemberName,\n imgSrc,\n to,\n eventDate,\n isNew = false,\n focusHeading = false,\n}: OpportunityDetailsHeaderProps): JSX.Element => {\n const opportunityHeaderRef = useInitialFocus({\n shouldFocus: focusHeading,\n });\n\n return (\n
    \n
    \n {isNew &&

    New

    }\n {title && (\n \n {title}\n \n )}\n\n

    \n {organisationMemberName && (\n <>\n {organisationMemberName} supported by{\" \"}\n \n )}\n \n {organisationName || \"View organisation\"}\n \n

    \n {eventDate && }\n
    \n
    \n {imgSrc && (\n \n \n \n \n \n )}\n
    \n
    \n );\n};\n","import {\n Analytics,\n FavouriteBtn,\n HelmetCanonical,\n useAnalyticsUtil,\n useInitialFocus,\n} from \"@skv/core\";\nimport { Remark } from \"@skv/react-remark\";\nimport { opportunityStore, useAppSettings } from \"@skv/state\";\nimport { FAVOURITES_ENUM } from \"@skv/state/src/state/favourites\";\nimport * as React from \"react\";\nimport { Helmet } from \"react-helmet\";\nimport { Link, useLocation, useParams, useRouteMatch } from \"react-router-dom\";\nimport { ThemeProvider } from \"styled-components\";\nimport { ValidationError } from \"~/ui/Form\";\n\n/*\n By time we hit this components, opportunity.data already exists,\n as the parent OpportunityDetails page handles loading\n*/\n\ninterface OpportunityDetailsMainProps {\n focusApply?: boolean;\n}\n\nconst OpportunityDetailsMain = ({\n focusApply = false,\n}: OpportunityDetailsMainProps): JSX.Element => {\n const { applicationName, applicationUrl } = useAppSettings();\n\n const applyButtonRef = useInitialFocus({\n shouldFocus: focusApply,\n });\n\n const match = useRouteMatch();\n const params = useParams<{ id: string }>();\n const location = useLocation();\n\n const { trackPageLink } = useAnalyticsUtil();\n\n const { data } = opportunityStore.hooks.useOpportunity(params.id);\n const { id, name, url, description, organisation } = data;\n\n const handleApplyLinkClick = React.useCallback(\n (e: React.MouseEvent) => {\n trackPageLink(\"express-of-interest\");\n },\n [trackPageLink]\n );\n\n return (\n <>\n \n {`${name}, ${organisation.name}`}\n \n \n \n \n\n \n\n
    \n {\n return <>{props.children};\n },\n code: (props) => {\n return <>{props.children};\n },\n pre: (props) => {\n return

    {props.children}

    ;\n },\n },\n }}\n >\n {description}\n \n
    \n\n
    \n
    \n {data.acceptsApplication ? (\n \n Apply\n \n ) : (\n p.theme.gray300};\n }\n `}\n disabled\n >\n Apply\n \n )}\n
    \n {data.acceptsApplication && (\n
    \n ({\n ...theme,\n dangerColor: theme.primaryColor,\n })}\n >\n \n \n
    \n )}\n
    \n {!data.acceptsApplication && (\n \n )}\n\n \n \n );\n};\n\nexport default OpportunityDetailsMain;\n","import { useInitialFocus, useReferrer } from \"@skv/core\";\nimport { opportunityStore } from \"@skv/state\";\nimport * as React from \"react\";\nimport {\n LinkProps,\n Redirect,\n Route,\n Switch,\n useLocation,\n useParams,\n useRouteMatch,\n} from \"react-router-dom\";\nimport { Error500 } from \"~/ui\";\nimport {\n ErrorEoiApplied,\n ErrorEoiLimitReached,\n OpportunityDetails404,\n} from \"~/ui/ServerResponse\";\nimport OpportunityDetailsAside from \"./OpportunityDetailsAside\";\nimport { OpportunityDetailsEoi } from \"./OpportunityDetailsEoi\";\nimport OpportunityDetailsEoiSuccess from \"./OpportunityDetailsEoiSuccess\";\nimport { OpportunityDetailsHeader } from \"./OpportunityDetailsHeader\";\nimport OpportunityDetailsMain from \"./OpportunityDetailsMain\";\n\nconst OpportunityDetails = (): JSX.Element => {\n const match = useRouteMatch();\n const params = useParams<{ id?: string }>();\n const wrappingRef = React.useRef(null);\n\n const { pathname, state: locationState } = useLocation<{\n referer?: LinkProps<{\n pathname?: string;\n }>[\"to\"];\n }>();\n\n const referrerPathname =\n locationState?.referer && typeof locationState?.referer === \"object\"\n ? locationState.referer.pathname\n : locationState?.referer && typeof locationState?.referer === \"string\"\n ? locationState.referer\n : null;\n\n const focus =\n referrerPathname === \"/apply\" ? \"applyButton\" : \"opp-details-heading\";\n\n const twoStepHeadingRef = useInitialFocus({\n shouldFocus: focus === \"opp-details-heading\",\n });\n\n const referrer = useReferrer();\n\n if (!params.id) {\n return ;\n }\n\n const {\n loading,\n error,\n data: opportunity,\n } = opportunityStore.hooks.useOpportunity(params.id);\n\n if (error) {\n switch (error.errorCode) {\n case \"error:opportunity:notfound\":\n return ;\n case \"error:application:alreadyexists\":\n return ;\n case \"error:application:limitreached\":\n return ;\n default:\n return ;\n }\n }\n\n return (\n
    \n {((): React.ReactNode => {\n if (loading) {\n return

    Loading please wait...

    ;\n }\n\n if (opportunity) {\n return (\n
    \n \n \n {opportunity.organisation?.twoStepApplication ? (\n
    \n
    \n

    \n Part one of your two-step application has been sent\n

    \n
    \n
    \n ) : (\n \n )}\n
    \n \n \n \n
    \n\n
    \n {/* Main Content Area */}\n
    \n \n \n \n \n \n \n \n \n \n \n \n
    \n\n {/* Sidebar Area */}\n \n \n {/* Exclude opp sidebar */}\n \n \n \n \n \n
    \n
    \n );\n }\n\n return

    Something went wrong

    ;\n })()}\n
    \n );\n};\n\nexport default OpportunityDetails;\n","import OpportunityDetails from \"./OpportunityDetails\";\n\nexport default OpportunityDetails;\n","import { BrowserUpgradePage } from \"@skv/core\";\n\nexport default BrowserUpgradePage;\n","import * as React from \"react\";\nimport { ActivityDashboard } from \"~/ui/ActivityDashboard\";\nimport { Helmet } from \"react-helmet\";\n\nexport const Dashboard = () => {\n return (\n <>\n \n My Activity\n \n \n \n );\n};\n","import {\n Analytics,\n Error500Fragment,\n PaginatedModel,\n SvgSprite,\n} from \"@skv/core\";\nimport { useViewModel } from \"@skv/state\";\nimport * as React from \"react\";\nimport { Link } from \"react-router-dom\";\n\nimport { SuggestedOpportunity } from \"~/ui/SuggestedOpportunity\";\n\nimport * as qs from \"qs\";\n\nimport classNames from \"classnames\";\n\nimport { pluraliser } from \"@skv/util\";\n\ninterface BasicPaginationProps {\n currentPage: number;\n totalPages: number;\n}\n\nconst BasicPagination: React.FC = ({\n currentPage,\n totalPages,\n}) => {\n return (\n \n {\n const query = qs.parse(loc.search, { ignoreQueryPrefix: true });\n query.page = `${currentPage - 1}`;\n\n return {\n ...loc,\n search: qs.stringify(query),\n state: loc.state,\n };\n }}\n >\n \n Previous\n \n\n \n Page {currentPage} of {totalPages}\n \n {\n const query = qs.parse(loc.search, { ignoreQueryPrefix: true });\n query.page = `${currentPage + 1}`;\n\n return {\n ...loc,\n search: qs.stringify(query),\n state: loc.state,\n };\n }}\n >\n Next\n \n \n \n );\n};\n\ntype SuggestionsViewModel = PaginatedModel<\n {\n id: number;\n name: string;\n organisationName: string;\n url: string;\n },\n \"suggestions\"\n>;\n\nexport const Suggestions = () => {\n const [{ data, error, status }] = useViewModel();\n\n if (status === \"loading\") {\n return

    Loading, please wait...

    ;\n }\n\n if (status === \"error\") {\n return ;\n }\n\n return (\n <>\n
    \n \n {pluraliser(data.totalCount, {\n none: \"You have no suggestions\",\n plural: `You have ${data.totalCount} suggestions`,\n singular: \"You have 1 suggestion\",\n })}\n \n
    \n\n {data.totalCount !== 0 && (\n <>\n
      \n {data.suggestions.map((n) => (\n
    • \n ({\n pathname: n.url,\n state: {\n referrer: {\n ...loc,\n state: {\n children: \"Suggestions\",\n },\n },\n },\n })}\n title={n.name}\n organisation={n.organisationName}\n />\n
    • \n ))}\n
    \n \n\n \n \n )}\n \n );\n};\n","import { Analytics, PageEnvelope } from \"@skv/core\";\nimport { OpportunitySearchQueryState, useViewModel } from \"@skv/state\";\nimport { pluraliser } from \"@skv/util\";\nimport * as React from \"react\";\nimport { Alert, AlertProps } from \"react-bootstrap\";\n\nimport {\n ResultCard,\n ResultCardHeader,\n ResultCardVolunteerSearchLinkHeading,\n ResultCardVolunteerSearchLinkHeadingProps,\n ResultMetaList,\n ResultMetaListItem,\n} from \"~/ui/ResultCard\";\n\nimport { useUserDispatch } from \"~/state\";\n\ninterface SearchSubscriptionProps {\n to: ResultCardVolunteerSearchLinkHeadingProps[\"to\"];\n title: string;\n location: string;\n categories: string | null;\n dayTime: string | null;\n durations: string | null;\n keywords: string | null;\n organisation: string | null;\n suitableFor: string | null;\n typeOfWork: string | null;\n searchCriteria: OpportunitySearchQueryState;\n isSubscribed: boolean;\n onSubscribe: (e: React.FormEvent) => void;\n onDelete: (e: React.MouseEvent) => void;\n}\n\nconst SearchSubscription: React.FC = ({\n to,\n title,\n categories,\n dayTime,\n durations,\n keywords,\n organisation,\n suitableFor,\n typeOfWork,\n location,\n searchCriteria,\n isSubscribed,\n onSubscribe,\n onDelete,\n}) => {\n return (\n \n \n \n \n \n {!!organisation && (\n \n Organisation: {organisation}\n \n )}\n {!!keywords && (\n \n What: {keywords}\n \n )}\n {!!categories && (\n \n Categories: {categories}\n \n )}\n {!!typeOfWork && (\n \n Type of Work: {typeOfWork}\n \n )}\n {!!suitableFor && (\n \n Suitable For: {suitableFor}\n \n )}\n {!!durations && (\n \n Commitment: {durations}\n \n )}\n {!!dayTime && (\n \n Day & Time: {suitableFor}\n \n )}\n {!!location && (\n \n Where: {location}\n \n )}\n \n\n {isSubscribed ? (\n
    \n \n
    \n ) : (\n
    \n \n \n \n \n \n Delete\n \n \n )}\n
    \n );\n};\n\ninterface SubscriptionsViewModel {\n subscriptionCount: number;\n subscriptions: Subscription[];\n}\n\ninterface Subscription {\n id: number;\n title: string;\n isSubscribed: boolean;\n keyword: string | null;\n location: string;\n organisation: string;\n categories: string[];\n typeOfWork: string[];\n suitableFor: string[];\n durations: string[];\n dayTime: string[];\n url: string;\n\n searchCriteria: OpportunitySearchQueryState;\n}\n\nexport const Subscriptions = () => {\n const alertRef = React.useRef();\n const [alertState, setAlertState] = React.useState({\n show: false,\n variant: null,\n children: null,\n dismissible: true,\n });\n\n const { updateUser } = useUserDispatch();\n const [{ data, error, status }, { updateViewModel }] =\n useViewModel();\n\n const createSubscribeHandler =\n (idx: number) =>\n (e: React.FormEvent): void => {\n e.preventDefault();\n const nextViewModel = updateViewModel((prev) => {\n const nextSubscribed = !prev.subscriptions[idx].isSubscribed;\n return {\n ...prev,\n subscriptions: Object.assign([], prev.subscriptions, {\n [idx]: {\n ...prev.subscriptions[idx],\n isSubscribed: nextSubscribed,\n },\n }),\n subscriptionCount: nextSubscribed\n ? prev.subscriptionCount + 1\n : prev.subscriptionCount - 1,\n };\n });\n\n const subscribed = nextViewModel.subscriptions[idx].isSubscribed;\n\n fetch(\"/my-activity/subscription\", {\n method: \"PUT\",\n headers: {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\",\n },\n body: JSON.stringify({\n subscriptionId: nextViewModel.subscriptions[idx].id,\n subscribed,\n }),\n })\n .then<\n PageEnvelope<{\n subscribed: boolean;\n subscriptionId: number;\n }>\n >((res) => {\n if (res.ok) {\n return res.json();\n }\n\n throw Error(\"\");\n })\n .then(({ success, data, errorCode, errorMessage }) => {\n if (success) {\n updateUser((prev) => ({\n ...prev,\n emailAlertCount: subscribed\n ? prev.emailAlertCount + 1\n : prev.emailAlertCount - 1,\n }));\n return;\n } else {\n setAlertState({\n show: true,\n variant: \"danger\",\n children: errorMessage ?? \"An unexpected error occurred\",\n });\n }\n });\n };\n\n const createDeleteHandler =\n (idx: number, subscriptionId: number) =>\n (e: React.MouseEvent): void => {\n const nextViewModel = updateViewModel((prev) => ({\n ...prev,\n subscriptions: prev.subscriptions.filter((_, _idx) => idx !== _idx),\n }));\n\n fetch(`/my-activity/subscription/${subscriptionId}`, {\n method: \"DELETE\",\n headers: {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\",\n },\n })\n .then((res) => {\n if (res.ok) {\n return res.json();\n }\n\n throw Error(\"\");\n })\n .then(({ success, data, errorCode, errorMessage }) => {\n if (success) {\n return;\n }\n });\n };\n\n if (status === \"loading\") {\n return

    Please wait, loading...

    ;\n }\n\n return (\n <>\n {/* TODO: create custom class? .myactivity-heading */}\n \n {pluraliser(data.subscriptionCount, {\n none:\n data.subscriptions.length === 0\n ? \"You have not subscribed to any email alerts\"\n : \"You have no active email alerts\",\n plural: `You have ${data.subscriptionCount} email alerts`,\n singular: \"You have 1 email alert\",\n })}\n \n\n \n\n {data.subscriptions.length > 0 && (\n
      \n {data.subscriptions.map((n, idx) => (\n
    • \n \n
    • \n ))}\n
    \n )}\n\n
    \n {/* TODO: Apply correct style for h3 */}\n

    \n Can't find an application?\n

    \n

    \n If you subscribed using a different email address, please sign in\n using that email address to see your subscriptions.\n

    \n
    \n\n \n \n );\n};\n","import * as React from \"react\";\n\nimport { Analytics, ResultCardSubHeading } from \"@skv/core\";\nimport { useViewModel } from \"@skv/state\";\nimport { pluraliser } from \"@skv/util\";\n\nimport {\n ResultCard,\n ResultCardFooter,\n ResultCardHeader,\n ResultCardLinkHeading,\n ResultCardLinkHeadingProps,\n ResultMetaList,\n ResultMetaListItem,\n} from \"~/ui/ResultCard\";\n\nimport * as dayjs from \"dayjs\";\nimport { Checkbox } from \"~/ui\";\n\ninterface ApplicationsResultCardProps {\n id: number;\n to: ResultCardLinkHeadingProps[\"to\"];\n title: string;\n organisation: string;\n organisationLogo?: string;\n appliedDate: string;\n location: string;\n source: string;\n hasVolunteered: boolean;\n onChange: (event: React.ChangeEvent) => void;\n}\n\n/* TODO : radio inpu change form submissions */\nconst ApplicationsResultCard: React.FC = ({\n id,\n to,\n title,\n location,\n organisation,\n organisationLogo,\n appliedDate,\n source,\n hasVolunteered,\n onChange,\n}) => {\n const chkYesId = `${id}__volunteered__yes`;\n const chkNoId = `${id}__volunteered__no`;\n\n return (\n \n \n
    \n {!!organisationLogo && (\n \n )}\n\n \n\n \n {organisation}\n \n
    \n
    \n \n {!!location && (\n {location}\n )}\n\n \n Applied: {appliedDate}, {source}\n \n \n\n \n
    \n \n Did you volunteer?\n \n
    \n \n \n \n \n
    \n
    \n
    \n
    \n );\n};\n\ninterface ActivityApplicationsViewModel {\n applicationCount: number;\n applications: Application[];\n}\n\ninterface Application {\n applicationId: number;\n applicationDate: string;\n hasVolunteered: boolean;\n location: string;\n opportunityId: number;\n opportunityName: string;\n opportunityUrl: string;\n organisationLogoUrl: string | null;\n organisationName: string;\n source: string;\n}\n\nexport const Applications: React.FC = () => {\n const [{ data, error, status }, { updateViewModel }] =\n useViewModel();\n\n const createChangeHandler =\n (applicationId: number, idx: number) =>\n (e: React.ChangeEvent): void => {\n const { value } = e.target;\n\n const checked = !!parseInt(value, 10);\n\n const nextViewModel = updateViewModel((prev) => ({\n ...prev,\n applications: Object.assign([], prev.applications, {\n [idx]: {\n ...prev.applications[idx],\n hasVolunteered: checked,\n },\n }),\n }));\n\n // TODO : Handle success, error\n fetch(\"/my-activity/application\", {\n method: \"PUT\",\n headers: {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\",\n },\n body: JSON.stringify({\n applicationId: nextViewModel.applications[idx].applicationId,\n hasVolunteered: nextViewModel.applications[idx].hasVolunteered,\n }),\n }).then((res) => {\n if (res.ok) {\n return res.json();\n }\n\n throw Error(\"Unhandled network error\");\n });\n };\n\n /* TODO : status */\n if (status === \"loading\") {\n return

    Loading, please wait...

    ;\n }\n\n /* TODO : Error */\n if (status === \"error\") {\n return

    Error

    ;\n }\n\n return (\n <>\n {/* TODO: create custom class? .myactivity-heading */}\n \n {pluraliser(data.applicationCount, {\n none: \"You have no applications\",\n plural: `You have added ${data.applicationCount} applications`,\n singular: \"You have added 1 application\",\n })}\n \n\n
      \n {data.applications.map((n, idx) => (\n
    • \n ({\n pathname: n.opportunityUrl,\n state: {\n ...loc.state,\n referrer: {\n ...loc,\n state: { ...loc.state, children: \"My Applications\" },\n },\n },\n })}\n hasVolunteered={n.hasVolunteered}\n onChange={createChangeHandler(n.applicationId, idx)}\n />\n
    • \n ))}\n
    \n\n
    \n {/* TODO: Apply correct style for h3 */}\n

    \n Can't find an application?\n

    \n

    \n If you subscribed using a different email address, please sign in\n using that email address to see your applications.\n

    \n
    \n\n \n \n );\n};\n","import * as React from \"react\";\nimport { Link } from \"react-router-dom\";\n\nimport { Analytics, ResultCardSubHeading } from \"@skv/core\";\nimport { useViewModel } from \"@skv/state\";\nimport { pluraliser } from \"@skv/util\";\n\nimport {\n ResultCard,\n ResultCardHeader,\n ResultCardHeading,\n} from \"~/ui/ResultCard\";\n\ninterface ExperienceResultCardProps {\n id: number;\n title: string;\n organisation: string;\n date: string;\n summary: string;\n}\n\nconst ExperienceResultCard: React.FC = ({\n id,\n title,\n organisation,\n date,\n summary,\n}) => {\n return (\n \n
    \n
    \n \n {title}\n \n {organisation}\n \n \n

    {summary}

    \n
    \n\n {/* TODO : Accessibility of these buttons */}\n {/* TODO : functionality of these buttons */}\n\n
    \n
    \n ({\n pathname: `/my-activity/experience/${id}`,\n state: loc.state,\n })}\n >\n Edit\n \n
    \n
    \n
    \n
    \n );\n};\n\ninterface ExperiencesViewModel {\n experienceCount: number;\n experiences: Experience[];\n}\n\ninterface Experience {\n dateCreated: string;\n description: string;\n id: number;\n organisation: string;\n title: string;\n when: string;\n}\n\nexport const Experiences = () => {\n const [{ data, error, status }] = useViewModel();\n\n /* todo : loading? */\n if (status === \"loading\") {\n return

    Loading, please wait...

    ;\n }\n\n /* todo : error */\n if (status === \"error\") {\n return

    Error

    ;\n }\n\n return (\n <>\n
    \n {/* TODO: create custom class? .myactivity-heading */}\n \n {pluraliser(data.experienceCount, {\n none: \"You have not added any experiences\",\n plural: `You have added ${data.experienceCount} experiences`,\n singular: \"You have added 1 experience\",\n })}\n \n
    \n\n
      \n {data.experiences.map((n) => (\n
    • \n \n
    • \n ))}\n
    \n
    \n ({\n pathname: \"/my-activity/experience\",\n state: loc.state,\n })}\n >\n \n add\n \n Add volunteer experience\n \n
    \n\n \n \n );\n};\n","import { useState, useMemo } from \"react\";\nimport { Link, useParams, useHistory } from \"react-router-dom\";\nimport * as Yup from \"yup\";\nimport { useForm } from \"react-yup\";\n\nimport { yupLocale, FormErrors, PageEnvelope, CustomError } from \"@skv/core\";\nimport { useRootViewDispatch, useViewModel } from \"@skv/state\";\nimport { useUserDispatch } from \"~/state\";\nimport { Field, TextArea } from \"~/ui\";\nimport InPageAlert, {\n InPageAlertVariant,\n InPageAlertProps,\n} from \"~/ui/Alerts/InPageAlert\";\n\nYup.setLocale(yupLocale);\n\nconst SCHEMA = Yup.object({\n form: Yup.object({\n title: Yup.string().required().label(\"Role title\").max(100),\n organisation: Yup.string().required().label(\"Organisation name\").max(100),\n when: Yup.string().required().label(\"When\").max(100),\n description: Yup.string().required().label(\"Role description\").max(500),\n }),\n}).defined();\n\ninterface ExperienceFormModel {\n id: number;\n title: string;\n organisation: string;\n when: string;\n description: string;\n dateCreated: string;\n}\ninterface ExperienceViewModel {\n didSave: boolean;\n form: ExperienceFormModel;\n formErrors: FormErrors;\n}\n\nexport const AddExperience = () => {\n const { updateUser } = useUserDispatch();\n const dispatch = useRootViewDispatch();\n const history = useHistory();\n const { id } = useParams<{\n id?: string;\n }>();\n\n const [alert, setAlert] = useState({\n variant: InPageAlertVariant.Error,\n message: \"\",\n show: false,\n });\n\n const isAdd = id === undefined;\n\n const [{ data, error, status }] = useViewModel({\n noFetch: isAdd,\n onClientLoad: (data) => {\n setValues((v) => ({\n ...v,\n form: {\n ...v.form,\n ...data.form,\n },\n }));\n },\n });\n\n const {\n field,\n setValues,\n FormProvider,\n createSubmitHandler,\n isSubmitting,\n setSubmitting,\n } = useForm({\n defaultValues: () => {\n console.log(data);\n\n if (data?.form) {\n return {\n form: {\n ...data.form,\n },\n };\n }\n },\n validationSchema: SCHEMA,\n });\n\n const handleDelete = (e) => {\n e.preventDefault();\n\n fetch(`/my-activity/experience/${id}`, {\n method: \"DELETE\",\n headers: {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\",\n },\n })\n .then>((res) => {\n if (res.ok) {\n return res.json();\n }\n\n throw Error(\"Unhandled network error\");\n })\n .then(({ success, errorCode, errorMessage }) => {\n if (success) {\n updateUser((prev) => ({\n ...prev,\n experienceCount: prev.experienceCount - 1,\n }));\n dispatch({\n type: \"REMOVE_CACHED_VIEWS\",\n payload: [\n \"/my-activity/experiences\",\n `/my-activity/experience/${id}`,\n ],\n });\n history.replace(\"/my-activity/experiences\");\n return;\n }\n\n throw new CustomError(errorMessage, errorCode);\n })\n .catch((err: CustomError | Error) => {\n /* TODO : Probs better error messages */\n if (err instanceof CustomError) {\n switch (err.errorCode) {\n case \"error:experience:delete\":\n setAlert({\n variant: InPageAlertVariant.Error,\n message:\n \"We were not able to delete this experience. Please try again.\",\n show: true,\n });\n break;\n default:\n break;\n }\n }\n setAlert({\n variant: InPageAlertVariant.Error,\n message:\n \"We were not able to delete this experience. Please try again.\",\n show: true,\n });\n });\n };\n\n const handleSubmit = useMemo(() => {\n return createSubmitHandler((v) => {\n fetch(\"/my-activity/experience\", {\n method: isAdd ? \"POST\" : \"PUT\",\n headers: {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\",\n },\n body: JSON.stringify(v),\n })\n .then>((res) => {\n if (res.ok) {\n return res.json();\n }\n\n throw Error(\"Unhandled network error\");\n })\n .then(({ data, success, errorCode, errorMessage }) => {\n if (success) {\n updateUser((prev) => ({\n ...prev,\n experienceCount: prev.experienceCount + 1,\n }));\n\n dispatch({\n type: \"REMOVE_CACHED_VIEWS\",\n payload: [\n \"/my-activity/experiences\",\n `/my-activity/experience/${data.form.id}`,\n ],\n });\n if (isAdd) {\n history.replace(\"/my-activity/experiences\");\n } else {\n history.push(\"/my-activity/experiences\");\n }\n return;\n }\n\n throw new CustomError(errorMessage, errorCode, data);\n })\n .catch((err: Error | CustomError) => {\n function isCustomErrorOfExperienceViewModel(\n err: Error | CustomError\n ): err is CustomError {\n if (err instanceof CustomError && \"formErrors\" in err.meta) {\n return true;\n }\n\n return false;\n }\n\n if (isCustomErrorOfExperienceViewModel(err)) {\n switch (err.errorCode) {\n case \"error:formvalidation\": {\n return setAlert({\n variant: InPageAlertVariant.Error,\n message: (\n <>\n Please fix the errors listed below.\n
      \n {Object.entries(err.meta.formErrors).map((n, idx) =>\n n[1].map((x, idx2) => (\n
    • {x}
    • \n ))\n )}\n
    \n \n ),\n show: true,\n });\n }\n }\n }\n\n setAlert({\n variant: InPageAlertVariant.Error,\n message:\n \"We were not able to update your experience. Please try again.\",\n show: true,\n });\n\n setSubmitting(false);\n });\n });\n }, [createSubmitHandler, isAdd, setSubmitting, history, dispatch]);\n\n if (status === \"loading\") {\n return

    Loading, please wait...

    ;\n }\n\n return (\n <>\n
    \n

    {isAdd ? \"Add\" : \"Edit\"} volunteer experience

    \n

    Enter your details of your experience below.

    \n \n \n
    \n \n \n \n \n\n
    \n \n {isSubmitting ? \"Saving...\" : isAdd ? \"Add\" : \"Save\"}\n \n ({\n pathname: \"/my-activity/experiences\",\n state: loc.state,\n })}\n className=\"btn btn-secondary px-4\"\n >\n Cancel\n \n {!isAdd && (\n \n Delete Experience\n \n )}\n
    \n \n
    \n
    \n \n );\n};\n","// import * as Yup from \"yup\";\n\nexport const yupLocale = {\n mixed: {\n required: \"${path} is required\",\n },\n};\n","import * as React from \"react\";\nimport { Helmet } from \"react-helmet\";\nimport { useLocation } from \"react-router-dom\";\n\nimport {\n Analytics,\n CustomError,\n HelmetCanonical,\n PageEnvelope,\n Pagination,\n VolunteerSearchLink,\n} from \"@skv/core\";\nimport { favouritesStore, useAppSettings, usePageEnvelope } from \"@skv/state\";\n\nimport {\n FavouriteInlineSelectForm,\n OpportunityFavouriteResultCard,\n OrganisationFavouriteResultCard,\n} from \"~/ui\";\n\nimport { FAVOURITES_ENUM } from \"@skv/state/src/state/favourites\";\nimport * as qs from \"qs\";\nimport { ThemeProvider } from \"styled-components\";\nimport { useUserDispatch } from \"~/state\";\nimport { FavouriteResultEntity } from \"../favourites\";\n\ninterface FavouriteResult {\n totalCount: number;\n favourites: FavouriteResultEntity[];\n page: number;\n pageSize: number;\n totalPages: number;\n}\ninterface State {\n loading: boolean;\n error: Error | false | null;\n data: FavouriteResult;\n}\n\ntype Action =\n | {\n type: \"FAVOURITES_RESULT:FETCH:START\";\n }\n | {\n type: \"FAVOURITES_RESULT:FETCH:END\";\n payload: {\n data: any;\n };\n }\n | {\n type: \"FAVOURITES_RESULT:FETCH:ERROR\";\n payload: {\n error: CustomError;\n };\n };\n\nconst reducer = (\n state: State = {\n loading: false,\n error: false,\n data: null,\n },\n action: Action\n): State => {\n switch (action.type) {\n case \"FAVOURITES_RESULT:FETCH:START\":\n return {\n ...state,\n loading: true,\n error: false,\n };\n case \"FAVOURITES_RESULT:FETCH:END\":\n return {\n ...state,\n loading: false,\n error: false,\n data: action.payload.data,\n };\n case \"FAVOURITES_RESULT:FETCH:ERROR\":\n return {\n ...state,\n loading: false,\n error: action.payload.error,\n };\n\n default:\n return state;\n }\n};\n\nexport const Favourites = (): JSX.Element => {\n const { updateUser } = useUserDispatch();\n const location = useLocation();\n\n const { applicationUrl } = useAppSettings();\n\n const { favourites, handleFavourite, handleUnfavourite } =\n favouritesStore.hooks.useFavourites();\n\n const { pageEnvelope } = usePageEnvelope<{\n favouriteResult: FavouriteResult;\n }>();\n\n // localised cache because we want to clear on unmount\n const cache = React.useRef<{\n [key: string]: FavouriteResult;\n }>(\n pageEnvelope.data?.favouriteResult\n ? {\n [location.search]: pageEnvelope.data.favouriteResult,\n }\n : {}\n );\n\n const [state, dispatch] = React.useReducer(\n reducer,\n pageEnvelope.data?.favouriteResult\n ? {\n loading: false,\n error: false,\n data: pageEnvelope.data.favouriteResult,\n }\n : {\n loading: true,\n error: false,\n data: null,\n }\n );\n\n const wrapperRef = React.useRef();\n\n const { loading, error, data } = state;\n\n React.useEffect(() => {\n if (cache.current[location.search]) {\n dispatch({\n type: \"FAVOURITES_RESULT:FETCH:END\",\n payload: {\n data: cache.current[location.search],\n },\n });\n\n return;\n }\n\n dispatch({\n type: \"FAVOURITES_RESULT:FETCH:START\",\n });\n\n fetch(`/api/favourites${location.search}`)\n .then<\n PageEnvelope<{\n favouriteResult: FavouriteResult;\n }>\n >((res) => {\n if (res.ok) {\n return res.json();\n }\n\n throw Error(\"Favourites fetch failed\");\n })\n .then(({ data, errorCode, errorMessage, success }) => {\n if (success) {\n dispatch({\n type: \"FAVOURITES_RESULT:FETCH:END\",\n payload: {\n data: data.favouriteResult,\n },\n });\n\n cache.current[location.search] = data.favouriteResult;\n return;\n }\n\n dispatch({\n type: \"FAVOURITES_RESULT:FETCH:ERROR\",\n payload: {\n error: new CustomError(errorMessage, errorCode),\n },\n });\n })\n .catch((err) => {\n console.log(\"Network error\");\n });\n }, [location.search, pageEnvelope.data]);\n\n const currentParams = qs.parse(location.search, { ignoreQueryPrefix: true });\n\n const currentFavourites = React.useMemo(() => {\n if (currentParams.show === \"org\") {\n return \"organisations\";\n }\n\n if (currentParams.show === \"opp\") {\n return \"opportunities\";\n }\n\n return null;\n }, [currentParams.show]);\n\n return (\n <>\n \n Favourites\n \n \n\n
    \n {/* Main section */}\n
    \n {((): React.ReactNode => {\n if (loading) {\n return

    Please wait. Loading...

    ;\n }\n\n if (data.totalCount) {\n return (\n <>\n
    \n

    \n You have {data.totalCount} favourites\n

    \n {data.totalCount > 0 && (\n
    \n Show:\n \n
    \n )}\n
    \n
      \n {data.favourites?.map((fav) => (\n
    • \n ({\n ...theme,\n dangerColor: theme.primaryColor,\n })}\n >\n {fav.type === \"opp\" ? (\n \n Category: \n \n {fav.category.name}\n \n \n ) : null\n }\n typesOfWork={\n fav.typesOfWork.length ? (\n <>\n \n Types of work:{\" \"}\n \n {fav.typesOfWork.map((type, idx) => (\n \n {type.url ? (\n \n {type.name}\n \n ) : (\n {type.name}\n )}\n {idx < fav.typesOfWork.length - 1 && (\n , \n )}\n \n ))}\n \n ) : null\n }\n to={{\n pathname: fav.url,\n state: {\n referrer: {\n ...location,\n state: {\n ...location.state,\n children: \"Favourites\",\n },\n },\n },\n }}\n locations={(() => {\n if (fav.locations.length) {\n const locations = fav.locations.join(\", \");\n return fav.onlineRemoteVolunteers\n ? `${locations} / Remote Friendly`\n : locations;\n }\n\n return Online or Remote;\n })()}\n logoUrl={fav.organisationLogoUrl}\n isFavourited={!!favourites.opportunities[fav.id]}\n onFavourite={() => {\n handleFavourite(\n fav.id,\n FAVOURITES_ENUM.OPPORTUNITY\n );\n updateUser((prev) => ({\n ...prev,\n favouriteCount: prev.favouriteCount + 1,\n }));\n }}\n onUnfavourite={() => {\n handleUnfavourite(\n fav.id,\n FAVOURITES_ENUM.OPPORTUNITY\n );\n updateUser((prev) => ({\n ...prev,\n favouriteCount: prev.favouriteCount - 1,\n }));\n }}\n />\n ) : (\n {\n if (fav.locations.length) {\n return fav.locations[0];\n }\n\n return undefined;\n })()}\n category={\n fav.category?.url ? (\n <>\n Category: \n \n {fav.category.name}\n \n \n ) : null\n }\n organisationName={fav.organisationName}\n isFavourited={!!favourites.organisations[fav.id]}\n onFavourite={() => {\n handleFavourite(\n fav.id,\n FAVOURITES_ENUM.ORGANISATION\n );\n updateUser((prev) => ({\n ...prev,\n favouriteCount: prev.favouriteCount + 1,\n }));\n }}\n onUnfavourite={() => {\n handleUnfavourite(\n fav.id,\n FAVOURITES_ENUM.ORGANISATION\n );\n updateUser((prev) => ({\n ...prev,\n favouriteCount: prev.favouriteCount - 1,\n }));\n }}\n logoUrl={fav.organisationLogoUrl}\n />\n )}\n \n
    • \n )) || null}\n
    \n \n \n );\n }\n\n if (data.totalCount === 0 && currentFavourites !== null) {\n return (\n <>\n
    \n
    \n

    \n No favourite {currentFavourites}.\n

    \n
    \n
    \n Show:\n \n
    \n
    \n

    \n Save your favourite opportunities and organisations using\n the hearts so you can easily find them again\n

    \n \n );\n }\n\n return (\n <>\n \n You have not saved any favourites\n \n

    \n Save your favourite opportunities and organisations using the\n hearts so you can easily find them again\n

    \n \n );\n })()}\n
    \n
    \n \n \n );\n};\n","import * as React from \"react\";\nimport {\n Switch,\n Route,\n useRouteMatch,\n useLocation,\n Redirect,\n NavLink,\n} from \"react-router-dom\";\n\nimport { Error404 } from \"@skv/core\";\nimport { Helmet } from \"react-helmet\";\n\nimport { Dashboard } from \"./Dashboard\";\nimport { Suggestions } from \"./Suggestions\";\nimport { Subscriptions } from \"./Subscriptions\";\nimport { Applications } from \"./Applications\";\nimport { Experiences } from \"./Experiences\";\n\nimport { useUserState } from \"~/state\";\nimport { AddExperience } from \"./AddExperience\";\nimport { Favourites } from \"./Favourites\";\n\ninterface LayoutProps {\n header?: React.ReactNode;\n main: React.ReactNode;\n title: string;\n}\n\nexport const Layout: React.FC = ({ header, main, title }) => {\n const location = useLocation();\n const isFavouriteTab = useRouteMatch(\"/my-activity/favourites\");\n const isEmailAlertsTab = useRouteMatch(\"/my-activity/subscriptions\");\n const isExperiencesTab = isCurrentPathMatching(location.pathname, [\n \"/my-activity/experiences\",\n \"/my-activity/experience\",\n ]);\n const isApplicationsTab = useRouteMatch(\"/my-activity/applications\");\n\n function isCurrentPathMatching(currentPath, paths) {\n return paths.some((path) => currentPath.startsWith(path));\n }\n\n return (\n <>\n \n {title}\n \n
    {header}
    \n
    \n \n\n
    {main}
    \n
    \n \n );\n};\n\nexport default function MyActivity() {\n const match = useRouteMatch();\n\n const user = useUserState();\n\n if (!user.isAuthenticated) {\n return ;\n }\n\n const LayoutHeader = ({ title, description }) => (\n
    \n

    {title}

    \n

    {description}

    \n
    \n );\n\n return (\n \n \n \n \n {/* edit experience */}\n {/* \n } />\n */}\n {/* add a new experience */}\n \n \n }\n main={}\n />\n \n\n {/* list of experiences */}\n \n \n }\n main={}\n />\n \n \n \n }\n main={}\n />\n \n \n \n }\n main={}\n />\n \n \n \n }\n main={}\n />\n \n \n \n }\n main={}\n />\n \n\n \n \n \n \n );\n}\n","/* eslint-disable import/no-anonymous-default-export */\nimport * as React from \"react\";\nimport { Switch, Route, useRouteMatch, Redirect } from \"react-router-dom\";\nimport { Alert, AlertProps } from \"react-bootstrap\";\nimport { useForm } from \"react-yup\";\nimport * as Yup from \"yup\";\n\nimport { CustomError, PageEnvelope, Analytics } from \"@skv/core\";\nimport { usePageEnvelope } from \"@skv/state\";\nimport { useUserState } from \"~/state\";\nimport { Field } from \"~/ui\";\n\nconst SCHEMA = Yup.object({\n email: Yup.string()\n .email(\"Please enter a valid email address\")\n .required(\"Please enter an email address\")\n .nullable(),\n}).defined();\n\ninterface SignInViewModel {\n email: string;\n emailSent: boolean;\n hasSignedOut: boolean;\n tokenIsExpired: boolean;\n tokenIsInvalid: boolean;\n}\n\nexport default (): ReturnType> => {\n const match = useRouteMatch();\n const { isAuthenticated } = useUserState();\n\n const {\n pageEnvelope: { data },\n } = usePageEnvelope();\n\n const [viewModel, setViewModel] = React.useState(() => {\n if (data) {\n return data;\n }\n\n return {\n email: null,\n emailSent: false,\n };\n });\n const [serverError, setServerError] = React.useState(() => {\n if (data?.tokenIsExpired) {\n return {\n show: true,\n variant: \"danger\",\n children: \"The token provided has expired. Please try again.\",\n };\n }\n\n if (data?.tokenIsInvalid) {\n return {\n show: true,\n variant: \"danger\",\n children: \"The token provided is invalid. Please try again.\",\n };\n }\n\n if (data?.hasSignedOut) {\n return {\n show: true,\n variant: \"success\",\n children: \"You have successfully signed out.\",\n };\n }\n\n return {\n show: false,\n variant: null,\n children: null,\n };\n });\n\n const alertRef = React.useRef(null);\n const formRef = React.useRef(null);\n\n const {\n values,\n FormProvider,\n createSubmitHandler,\n setSubmitting,\n isSubmitting,\n field,\n setTouched,\n } = useForm({\n validationSchema: SCHEMA,\n });\n\n const handleSubmit = React.useMemo(() => {\n return createSubmitHandler((v) => {\n setServerError((prev) => ({\n ...prev,\n show: false,\n }));\n\n fetch(\"/signin\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\",\n },\n body: JSON.stringify(v),\n })\n .then>((res) => {\n if (res.ok) {\n return res.json();\n }\n\n throw Error(\"Response not ok\");\n })\n .then(({ success, data, errorCode, errorMessage }) => {\n if (success) {\n setViewModel({\n email: data.email,\n emailSent: data.emailSent,\n });\n return;\n }\n\n switch (errorCode) {\n default:\n throw Error(\n \"Response ok, but server did not respond with a known error code\"\n );\n }\n })\n .catch((err: Error | CustomError) => {\n // if (err instanceof CustomError) {\n // setServerError(true);\n // }\n setServerError((prev) => ({\n ...prev,\n show: true,\n variant: \"danger\",\n children: (\n <>\n Sorry we could not send an email at this time. Please try again.\n \n ),\n }));\n })\n .finally(() => {\n setSubmitting(false);\n });\n });\n }, [createSubmitHandler, setSubmitting]);\n\n if (isAuthenticated) {\n return ;\n }\n\n const analytics = React.useMemo(() => {\n const _data = {\n subSection: \"signin\",\n subSubSection: \"signin\",\n subSubSubSection: \"signin\",\n pageTitle: \"signin\",\n pageType: \"form\",\n loginStatus: \"loggedout\" as const,\n };\n\n if (data?.tokenIsInvalid) {\n _data.subSubSection += \":invalid\";\n _data.subSubSubSection += \":invalid\";\n }\n\n if (data?.tokenIsExpired) {\n _data.subSubSection += \":expired\";\n _data.subSubSubSection += \":expired\";\n }\n\n if (data?.hasSignedOut) {\n _data.subSubSection += \":signedout\";\n _data.subSubSubSection += \":signedout\";\n }\n\n return _data;\n }, [data]);\n\n const success = !!(viewModel.emailSent && viewModel.email);\n\n return (\n \n \n
    \n \n {!success && (\n
    \n

    Sign in to see your activity

    \n

    \n When you sign in with your email address, you will be able to\n see...\n

    \n
      \n
    • \n all of the searches you have subscribed to using that email\n address.\n
    • \n
    • \n all of your applications using that email address.\n
    • \n
    • \n all of your favourites on different devices.\n
    • \n
    \n
    \n )}\n
    \n
    \n
    \n );\n};\n","import classNames from \"classnames\";\nimport qs from \"qs\";\nimport * as React from \"react\";\nimport { Link } from \"react-router-dom\";\nimport { useForm } from \"react-yup\";\nimport * as Yup from \"yup\";\n\nimport {\n OpportunitySearchQueryState,\n useAppSettings,\n useRootViewDispatch,\n} from \"@skv/state\";\n\nimport { ExternalLink, useAnalyticsUtil } from \"@skv/core\";\nimport { Alert } from \"react-bootstrap\";\nimport { useUserDispatch, useUserState } from \"~/state\";\nimport { SplitField } from \".\";\n\ninterface OpportunityEmailSubscribeFormProps {\n id: string;\n className?: string;\n searchQuery: OpportunitySearchQueryState;\n}\n\nconst OpportunityEmailSubscribeForm: React.FC<\n OpportunityEmailSubscribeFormProps\n> = ({ id, className, searchQuery }) => {\n const [success, setSuccess] = React.useState(false);\n\n const [error, setError] = React.useState(null);\n\n const { trackPageLink } = useAnalyticsUtil();\n\n const { seekVolunteerUrl } = useAppSettings();\n\n const {\n createSubmitHandler,\n field,\n errors,\n touched,\n values,\n isSubmitting,\n FormProvider,\n } = useForm<{\n email: string;\n }>({\n validationSchema: Yup.object({\n email: Yup.string()\n .email(\"Please enter a valid email address\")\n .required(\"Email address is needed to subscribe\"),\n }),\n });\n\n const onSubmit = React.useMemo(() => {\n return createSubmitHandler((data) => {\n const queryString = qs.stringify(searchQuery, {\n arrayFormat: \"repeat\",\n });\n\n return fetch(\"/api/volunteering/subscribe\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n referrer: `/volunteering?${queryString}`,\n body: JSON.stringify(data),\n })\n .then((res) => {\n if (res.ok) {\n return res.json();\n }\n\n throw Error(\"Unhandled error\");\n })\n .then(({ data, errorCode, errorMessage, success }) => {\n if (success) {\n setSuccess(true);\n trackPageLink(\"subscribe-to-new-opportunity-email\");\n }\n\n switch (errorCode) {\n case \"error:subscription:alreadyexists\":\n setSuccess(true); // User doesn't care if they're already subscribed so show success\n break;\n default:\n setError(errorCode);\n break;\n }\n })\n .catch((err) => {\n setError(\"error:emailsub:unhandled\");\n });\n });\n }, [createSubmitHandler, searchQuery, trackPageLink]);\n\n return (\n \n \n {((): React.ReactNode => {\n if (success) {\n return (\n
    \n

    You have saved this search!

    \n

    \n Look out for new opportunities in your email soon.\n

    \n
    \n );\n }\n\n if (error) {\n return (\n \n

    \n Sorry, we could not subscribe you at this time.\n

    \n \n If you're still stuck, let us know by{\" \"}\n \n contacting us\n \n .\n \n \n }\n />\n );\n }\n\n return (\n <>\n

    \n Save this search and receive new opportunities by email.\n

    \n

    \n When new opportunities for this search are posted, we'll send\n you an email.\n

    \n

    \n By saving, you agree to our{\" \"}\n \n privacy statement\n \n

    \n \n {isSubmitting ? \"Saving\" : \"Save\"}\n \n }\n />\n \n );\n })()}\n \n
    \n );\n};\n\ninterface AuthAuthenticatedOpportunityEmailSubscribeFormProps\n extends OpportunityEmailSubscribeFormProps {\n email: string;\n}\n\n/**\n * TODO:\n * - get working via server post too?\n * - Default state, should be persisted across searches based on searchQuery?\n * */\nconst AuthenticatedOpportunityEmailSubscribeForm: React.FC<\n AuthAuthenticatedOpportunityEmailSubscribeFormProps\n> = ({ className, searchQuery, email }) => {\n const { updateUser } = useUserDispatch();\n const dispatch = useRootViewDispatch();\n\n const { trackPageLink } = useAnalyticsUtil();\n\n const { seekVolunteerUrl } = useAppSettings();\n\n enum Status {\n \"SUBSCRIBED\",\n \"NOT_SUBSCRIBED\",\n }\n\n const [state, setState] = React.useState(() => {\n /* TODO : Default state, should be persisted across searches based on searchQuery? */\n return {\n status: Status.NOT_SUBSCRIBED,\n loading: false,\n error: null,\n };\n });\n\n const handleSubmit = (e) => {\n e.preventDefault();\n\n setState((prev) => ({\n ...prev,\n loading: true,\n }));\n\n const queryString = qs.stringify(searchQuery, {\n arrayFormat: \"repeat\",\n });\n\n return fetch(\"/api/volunteering/subscribe\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n referrer: `/volunteering?${queryString}`,\n body: JSON.stringify({\n email,\n }),\n })\n .then((res) => {\n if (res.ok) {\n return res.json();\n }\n\n throw Error(\"Unhandled error\");\n })\n .then(({ data, errorCode, errorMessage, success }) => {\n if (success) {\n setState((prev) => ({\n ...prev,\n loading: false,\n status: Status.SUBSCRIBED,\n }));\n\n updateUser((prev) => ({\n ...prev,\n emailAlertCount: prev.emailAlertCount + 1,\n }));\n\n // invalidate /my-activity/subscriptions\n dispatch({\n type: \"REMOVE_CACHED_VIEW\",\n payload: {\n url: \"/my-activity/subscriptions\",\n },\n });\n\n trackPageLink(\"subscribe-to-new-opportunity-email\");\n\n return;\n }\n\n switch (errorCode) {\n case \"error:subscription:alreadyexists\":\n setState((prev) => ({\n ...prev,\n loading: false,\n status: Status.SUBSCRIBED,\n }));\n break;\n default:\n setState((prev) => ({\n ...prev,\n loading: false,\n error: errorCode,\n }));\n break;\n }\n })\n .catch((err) => {\n setState((prev) => ({\n ...prev,\n loading: false,\n error: \"error:emailsub:unhandled\",\n }));\n });\n };\n\n return (\n \n {((): React.ReactNode => {\n switch (state.status) {\n case Status.SUBSCRIBED:\n return (\n
    \n

    \n You have saved this search!\n

    \n

    \n Go to{\" \"}\n ({\n pathname: \"/my-activity/subscriptions\",\n state: loc.state,\n })}\n >\n Email alerts\n {\" \"}\n to see and manage all your saved searches.\n

    \n
    \n );\n case Status.NOT_SUBSCRIBED:\n default:\n return (\n
    \n
    \n

    \n Save this search and receive new opportunities by email.\n

    \n

    \n When new opportunities for this search are posted, we'll\n send an email to {email}.\n

    \n

    \n By saving, you agree to our{\" \"}\n \n privacy statement\n \n

    \n
    \n
    \n \n {state.loading ? \"Waiting...\" : \"Save\"}\n \n
    \n
    \n );\n }\n })()}\n \n );\n};\n\nconst EmailSubscribeForm: React.FC = (\n props\n) => {\n const { isAuthenticated, email } = useUserState();\n\n if (isAuthenticated) {\n return (\n \n );\n }\n\n return ;\n};\n\nexport default EmailSubscribeForm;\n","import { useInitialFocus } from \"@skv/core\";\nimport { OpportunitySearchResults } from \"@skv/core/src/types\";\nimport { OpportunitySearchQueryState } from \"@skv/state\";\n\ninterface OpportunitySearchResultsHeaderProps {\n searchResults: OpportunitySearchResults;\n searchQuery: OpportunitySearchQueryState;\n}\n\nexport const OpportunitySearchResultsHeader = ({\n searchResults,\n}: OpportunitySearchResultsHeaderProps) => {\n const foundRef = useInitialFocus();\n\n return (\n \n {searchResults.searchSummary}\n \n );\n};\n","import {\n AnalyticsSearchQuery,\n HelmetCanonical,\n OpportunityResultStateEnums,\n Pagination,\n ResultSearchTypeBreak,\n useSearchFilters,\n VolunteerSearchLink,\n} from \"@skv/core\";\nimport {\n favouritesStore,\n opportunityResultStore,\n useAppSettings,\n useOpportunitySearchQuery,\n useThunkDispatch,\n} from \"@skv/state\";\nimport { FAVOURITES_ENUM } from \"@skv/state/src/state/favourites\";\nimport { locationSegmentsToReactNode } from \"@skv/util\";\nimport * as React from \"react\";\nimport { Helmet } from \"react-helmet\";\nimport { useHistory, useLocation } from \"react-router-dom\";\nimport { ThemeProvider } from \"styled-components\";\nimport { useUserDispatch } from \"~/state\";\nimport OpportunityEmailSubscribeForm from \"./OpportunityEmailSubscribeForm\";\nimport { OpportunitySearchResultsHeader } from \"./OpportunitySearchResultsHeader\";\nimport { OpportunityResultCard } from \"./ResultCard\";\nimport SearchFiltersSidebarForm from \"./SearchFiltersSidebarForm\";\n\nconst SearchResults: React.FC> = () => {\n const { updateUser } = useUserDispatch();\n const history = useHistory();\n const location = useLocation<{\n searchQuery?: ReturnType;\n analytics?: {\n didKeywordAutoComplete: boolean;\n didWhereAutoComplete: boolean;\n };\n }>();\n const { push } = history;\n const dispatch = useThunkDispatch();\n\n const wrapperRef = React.useRef(null);\n const searchResultsRef = React.useRef(null);\n\n const searchQuery = useOpportunitySearchQuery();\n const { applicationUrl, applicationName, showFiltersInSearch } =\n useAppSettings();\n\n const { data: searchResults, state } =\n opportunityResultStore.hooks.useOpportunitySearchResult(searchQuery);\n\n const { favourites, handleFavourite, handleUnfavourite } =\n favouritesStore.hooks.useFavourites();\n\n const { filters, handleFiltersChange } = useSearchFilters({\n searchQuery,\n onChange: (nextQuery) => {\n dispatch(\n opportunityResultStore.actions.fetchOpportunities(nextQuery)\n ).then((data) => {\n push(data.canonicalUrl, {\n searchQuery: nextQuery,\n analytics: location.state?.analytics,\n });\n });\n },\n });\n\n const handleReset = (\n e: React.MouseEvent\n ): void => {\n e.preventDefault();\n dispatch(opportunityResultStore.actions.fetchOpportunities()).then(\n (data) => {\n push(data.canonicalUrl, {\n searchQuery: {},\n analytics: location.state?.analytics,\n });\n }\n );\n };\n\n const analytics = React.useMemo(() => {\n return (\n \n );\n }, [searchQuery, searchResults, location.state]);\n\n React.useEffect(() => {\n /* on server load, set current searchQuery to history state if no current searchQuery */\n if (!location.state?.searchQuery) {\n history.replace(history.location.pathname + history.location.search, {\n searchQuery,\n ...location.state,\n });\n }\n\n const handlePopState = (e: PopStateEvent): void => {\n dispatch(\n opportunityResultStore.actions.fetchOpportunities(\n e.state.state?.searchQuery\n )\n );\n };\n\n window.addEventListener(\"popstate\", handlePopState, false);\n\n return (): void => {\n window.removeEventListener(\"popstate\", handlePopState, false);\n };\n }, []);\n\n React.useEffect(() => {\n /**\n * if at any time a user refreshes the page, the cache clears but their history stack is still there\n * if they navigate their history via browser back/forward, and hit the search results view again,\n * we will be in the below state\n */\n if (state === OpportunityResultStateEnums.IDLE && !searchResults) {\n dispatch(opportunityResultStore.actions.fetchOpportunities(searchQuery));\n }\n }, [state, searchResults, dispatch, searchQuery]);\n\n const { category, keyword, where, commitment } = searchQuery || {};\n\n React.useEffect(() => {\n const hasQueries = !!(\n category?.length ||\n keyword ||\n where ||\n commitment?.length\n );\n\n if (hasQueries && searchResultsRef.current) {\n searchResultsRef.current.scrollIntoView({\n behavior: \"auto\",\n block: \"start\",\n });\n } else {\n window.scrollTo({ top: 0 });\n }\n }, [category, keyword, where, commitment, searchResultsRef]);\n\n return (\n <>\n \n \n {searchResults?.pageTitle || \"Volunteer in New South Wales\"}\n \n \n \n \n \n\n {searchResults?.noLocationMatch ||\n !searchResults?.totalCount ||\n searchResults?.page > 1 ? (\n \n \n \n ) : (\n \n )}\n\n
    \n
    \n {/* Sidebar Filters */}\n {showFiltersInSearch ? (\n \n ) : null}\n {/* Results */}\n p.theme.mdBreakpoint}) {\n padding-left: 4rem;\n }\n `\n }\n >\n {((): React.ReactNode => {\n if (state === OpportunityResultStateEnums.FETCH_ERROR) {\n return (\n

    \n Sorry. Something went wrong.\n
    \n Try reloading the page, or changing your search criteria.\n

    \n );\n }\n\n if (state === OpportunityResultStateEnums.FETCHING_DATA) {\n return (\n

    \n Please wait. Loading…\n

    \n );\n }\n\n if (state === OpportunityResultStateEnums.IDLE) {\n if (\n searchResults?.opportunities &&\n searchResults.opportunities.length\n ) {\n /* RESULTS */\n return (\n <>\n
    \n {searchQuery && searchResults && (\n \n )}\n
    \n\n \n\n article {\n border-top: 1px solid\n ${(p): string => p.theme.gray300};\n }\n `}\n >\n {searchResults.opportunities.map((opp, idx) => {\n const resultNumber =\n (searchResults?.page - 1) *\n searchResults?.pageSize +\n (idx + 1);\n\n return (\n \n {searchQuery.where &&\n searchResults?.surroundingOpportunityIndex !==\n 0 &&\n resultNumber ===\n searchResults?.surroundingOpportunityIndex +\n 1 && (\n
  • \n \n
  • \n )}\n
  • \n ({\n ...theme,\n dangerColor: theme.primaryColor,\n })}\n >\n {\n handleFavourite(\n opp.id,\n FAVOURITES_ENUM.OPPORTUNITY\n );\n updateUser((prev) => ({\n ...prev,\n favouriteCount: prev.favouriteCount + 1,\n }));\n }}\n onUnfavourite={() => {\n handleUnfavourite(\n opp.id,\n FAVOURITES_ENUM.OPPORTUNITY\n );\n updateUser((prev) => ({\n ...prev,\n favouriteCount: prev.favouriteCount - 1,\n }));\n }}\n organisationName={opp.organisation.name}\n organisationTo={{\n pathname: opp.organisation.url,\n state: {\n referer: location,\n },\n }}\n logoUrl={opp.organisation.logoUrl}\n locations={locationSegmentsToReactNode(\n opp.locations,\n opp.onlineRemoteVolunteers\n )}\n category={\n opp.category ? (\n \n {opp.category.name}\n \n ) : null\n }\n typesOfWork={\n opp.typesOfWork.length ? (\n <>\n {opp.typesOfWork.map((type, idx) => (\n \n {type.url ? (\n \n {type.name}\n \n ) : (\n {opp.name}\n )}\n {idx <\n opp.typesOfWork.length - 1 && (\n , \n )}\n \n ))}\n \n ) : null\n }\n summary={

    {opp.summary}

    }\n />\n \n
  • \n
    \n );\n })}\n \n\n \n\n \n\n {analytics}\n \n );\n }\n\n /* no results */\n if (searchResults?.totalCount === 0) {\n return (\n
    \n

    \n Sorry, we couldn't find any opportunities that matched\n what you were searching for.\n
    \n Maybe try the following...\n

    \n
      \n
    • \n Change or reset the filters to broaden your search\n
    • \n
    • Check the spelling of your search terms
    • \n {/*
    • Choose a wider search radius, e.g. + 50km
    • */}\n
    \n {analytics}\n
    \n );\n }\n }\n\n return null;\n })()}\n
    \n \n \n \n );\n};\n\nexport default SearchResults;\n","import { useSelector } from \"react-redux\";\nimport { RootState } from \"..\";\nimport { OpportunitySearchQueryState } from \"../context/OpportunitySearchQuery\";\nimport { opportunitySearchQueryToString } from \"./util\";\n\nexport const useOpportunitySearchResult = (\n searchQuery?: OpportunitySearchQueryState\n) => {\n const opportunityResult = useSelector(\n (state: RootState) => state.opportunityResult\n );\n\n const queryString = opportunitySearchQueryToString(searchQuery);\n return {\n ...opportunityResult,\n data: opportunityResult.data[queryString] || null,\n };\n};\n","import * as React from \"react\";\n\nimport qs from \"qs\";\n\nimport {\n AsyncTypeahead,\n MetaSegment,\n PageEnvelope,\n useAsyncTypeahead,\n WorldLocation,\n} from \"@skv/core\";\n\nimport { useHistory, useLocation } from \"react-router-dom\";\n\nimport {\n organisationResultStore,\n OrganisationSearchQueryState,\n usePageEnvelope,\n useThunkDispatch,\n} from \"@skv/state\";\n\ntype CategoryListItem = {\n id: number;\n name: string;\n};\n\ninterface Organisation {\n category: MetaSegment;\n friendlyName: string;\n id: number;\n location: WorldLocation;\n name: string;\n url: string;\n}\n\ninterface OrganisationSearchPageEnvelopeData {\n organisationFilters: {\n categoryList: CategoryListItem[];\n };\n organisationResult: {\n canonicalUrl: string;\n organisations: Organisation[];\n page: number;\n pageSize: number;\n totalCount: number;\n totalPages: number;\n };\n searchCriteria: {\n // todo : category\n category: Array;\n keyword: string;\n page: number | null;\n where: string | null;\n };\n}\n\nconst OrganisationSearchForm: React.FC> = () => {\n const history = useHistory();\n const location = useLocation<{\n searchQuery?: OrganisationSearchQueryState;\n }>();\n\n const { pageEnvelope } =\n usePageEnvelope();\n\n const query = qs.parse(location.search, { ignoreQueryPrefix: true });\n\n const dispatch = useThunkDispatch();\n\n const initialSearchQuery = React.useMemo(() => {\n return Object.assign(\n {},\n pageEnvelope.data?.searchCriteria,\n location.state?.searchQuery\n );\n }, []);\n\n const [keyword, setKeyword] = React.useState(\n initialSearchQuery.keyword || (query.keyword as string) || \"\"\n );\n\n const [where, setWhere] = React.useState(initialSearchQuery.where || \"\");\n const [whereSelected, setWhereSelected] = React.useState(\n initialSearchQuery.where ? [initialSearchQuery.where] : []\n );\n\n const didWhereAutoComplete = !!whereSelected.length;\n\n const locationTypeahead = useAsyncTypeahead<\n string,\n PageEnvelope<{\n locations: string[];\n }>\n >({\n url: (query) => `/api/locations?q=${query}`,\n onSuccess: (res) => {\n return res.data.locations;\n },\n defaultOptions: initialSearchQuery.where ? [initialSearchQuery.where] : [],\n });\n\n const handleSubmit = (e: React.FormEvent): void => {\n e.preventDefault();\n\n const searchQuery = {\n ...location.state?.searchQuery,\n keyword,\n where: whereSelected.length ? whereSelected[0] : where,\n };\n\n dispatch(\n organisationResultStore.actions.fetchOrganisations(searchQuery)\n ).then((data) => {\n history.push(data.canonicalUrl, {\n searchQuery,\n analytics: {\n didWhereAutoComplete,\n },\n });\n });\n };\n\n return (\n
    \n
    \n
    \n \n
    \n \n \n Name or keyword\n setKeyword(e.target.value)}\n placeholder=\"Name or keyword\"\n />\n
    \n \n \n Enter suburb, town or city\n setWhere(text)}\n onSearch={locationTypeahead.onSearch}\n onChange={(selected) => setWhereSelected(selected)}\n isLoading={locationTypeahead.isLoading}\n options={locationTypeahead.options}\n selected={whereSelected}\n placeholder=\"Enter suburb, town or city\"\n />\n
    \n
    \n \n Find\n \n
    \n
    \n \n \n \n
    \n );\n};\n\nexport default OrganisationSearchForm;\n","import * as React from \"react\";\n\nimport {\n Redirect,\n Route,\n Switch,\n useHistory,\n useLocation,\n} from \"react-router-dom\";\n\nimport { Helmet } from \"react-helmet\";\n\nimport SearchForm from \"./ui/SearchForm\";\n\nimport {\n BrowserUpgradeNotificationNsw,\n ErrorBoundary,\n ScrollSink,\n} from \"@skv/core\";\n\nimport { Banner, Breadcrumb, NavBar, SignInCta, SignInOutPanel } from \"./ui\";\n\nimport {\n BrowserUpgrade,\n Favourites,\n Home,\n MyActivity,\n SignIn,\n Unsubscribe,\n Volunteering,\n VolunteeringOrganisations,\n} from \"./pages\";\n\nimport { routes as volunteeringOrganisationsRoutes } from \"./pages/volunteering-organisations\";\n\nimport { Error404, Error500, Footer, SearchFormWithCommitment } from \"~/ui\";\nimport SearchResults from \"./ui/OpportunitySearchResults\";\nimport OrganisationSearchForm from \"./ui/OrganisationSearchForm\";\n\nimport {\n favouritesStore,\n OpportunitySearchQueryState,\n OrganisationSearchQueryState,\n useAppSettings,\n usePageEnvelope,\n useThunkDispatch,\n} from \"@skv/state\";\n\nimport OgImg from \"./assets/og-image.png\";\nimport { ROUTE_FAVOURITES, ROUTE_MY_ACTIVITY } from \"./constants\";\nimport { useUserState } from \"./state\";\n\nconst App = (): JSX.Element => {\n const { isAuthenticated } = useUserState();\n const history = useHistory();\n const location = useLocation();\n const { applicationName, applicationUrl } = useAppSettings();\n const { pageEnvelope } = usePageEnvelope<{\n searchCriteria: OpportunitySearchQueryState | OrganisationSearchQueryState;\n }>();\n\n const [isMobileMenuOpen, setIsMobileMenuOpen] = React.useState(false);\n\n const dispatch = useThunkDispatch();\n\n // fetch initial favourites\n React.useEffect(() => {\n if (typeof window !== \"undefined\") {\n dispatch(favouritesStore.actions.getFavourites());\n\n if (pageEnvelope.data?.searchCriteria) {\n history.replace(`${location.pathname}${location.search}`, {\n searchQuery: pageEnvelope.data.searchCriteria,\n });\n }\n }\n }, []);\n\n return (\n <>\n \n \n {/* Static Meta */}\n \n\n \n \n \n \n \n {/* End Static */}\n\n \n\n \n\n \n \n \n\n \n \n
    \n Skip to navigation\n
    \n
    \n \n
    \n \n Skip to main content\n \n
    \n
    \n \n\n \n\n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n {true ? : }\n \n\n
    \n
    \n \n \n\n \n {/* TODO : Figure out these routes */}\n \n \n \n \n \n \n \n \n \n \n \n \n {isAuthenticated ? (\n \n ) : (\n \n )}\n \n \n \n \n\n \n \n \n\n \n \n \n\n {/* TODO : Look at better routing wildcards */}\n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n
    \n
    \n\n