{"version":3,"file":"87763.86ea2086c7f7c2598853.js","mappings":"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","sources":["webpack://platform/./app/components/lib/therapist_search/history.jsx","webpack://platform/./app/components/lib/therapist_search/loader/index.jsx","webpack://platform/./app/components/lib/therapist_search/loader/index.css?548c","webpack://platform/./app/components/therapist_search/index.entry.jsx","webpack://platform/./app/assets/lib/harley_event/collectors/base.js","webpack://platform/./app/assets/lib/harley_event/collectors/facebook.js","webpack://platform/./app/assets/lib/harley_event/collectors/facebook_custom.js","webpack://platform/./app/assets/lib/harley_event/collectors/google_analytics.js","webpack://platform/./app/assets/lib/harley_event/collectors/harley.js","webpack://platform/./app/assets/lib/harley_event/collectors/intercom.js","webpack://platform/./app/assets/lib/harley_event/index.js","webpack://platform/./app/assets/lib/utils/to_boolean.js","webpack://platform/./app/components/lib/therapist_search/model.js"],"sourcesContent":["import { useEffect } from 'react'\nimport PropTypes from 'prop-types'\nimport exact from 'prop-types-exact'\nimport history from 'history/browser'\n\nimport useModel from './model'\n\nconst History = ({ children }) => {\n const { params, popParams } = useModel()\n\n useEffect(() => {\n // If state is undefined, set it now so we have a default.\n history.replace(history.location, params.$unproxiedState)\n\n // Listen for history changes.\n return history.listen(({ location }) => popParams(location.state))\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n return children\n}\n\nHistory.propTypes = exact({\n children: PropTypes.object.isRequired\n})\n\nexport default History\n","import { CSSTransition } from 'react-transition-group'\nimport PropTypes from 'prop-types'\nimport exact from 'prop-types-exact'\n\nimport useModel from '../model'\n\nimport styles from './index.css'\n\nconst Loader = ({ children }) => {\n const { isLoading } = useModel()\n\n return (\n <>\n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n \n {children}\n \n )\n}\n\nLoader.propTypes = exact({\n children: PropTypes.object.isRequired\n})\n\nexport default Loader\n","// extracted by mini-css-extract-plugin\nexport default {\"overlay\":\"-cm_e669e531\",\"loading\":\"-cm_009e6fba\",\"ballClipRotateMultipleRotate\":\"-cm_910af371\",\"enter\":\"-cm_251088e2\",\"enterDone\":\"-cm_0e10637a\",\"enterActive\":\"-cm_595148c9\"};","import { lazy } from 'react'\nimport PropTypes from 'prop-types'\nimport exact from 'prop-types-exact'\n\nimport useMatchMedia from 'assets/lib/hooks/use_match_media'\nimport History from 'components/lib/therapist_search/history'\nimport Loader from 'components/lib/therapist_search/loader'\nimport useModel from 'components/lib/therapist_search/model'\nconst Mobile = lazy(() => import('./mobile'))\nconst Desktop = lazy(() => import('./desktop'))\n\nconst TherapistSearch = ({ excludeFilters, ...props }) => {\n useModel(props)\n const isMobile = useMatchMedia('mobile', 'tablet')\n\n return (\n \n \n {isMobile ? : }\n \n \n )\n}\n\nTherapistSearch.propTypes = exact({\n therapistsPath: PropTypes.string.isRequired,\n params: PropTypes.object.isRequired,\n excludeFilters: PropTypes.array,\n hidePricing: PropTypes.bool,\n results: PropTypes.exact({\n title: PropTypes.string.isRequired,\n subTitle: PropTypes.string.isRequired,\n therapists: PropTypes.array.isRequired,\n message: PropTypes.string,\n suggestionsMessage: PropTypes.string,\n nextPageNumber: PropTypes.number,\n previousPageNumber: PropTypes.number,\n pageNumber: PropTypes.number\n }).isRequired\n})\n\nTherapistSearch.defaultProps = {\n hidePricing: false\n}\n\nexport default TherapistSearch\n","export default class EventBase {\n static supportsBatching = false\n\n constructor(environment, params) {\n this.environment = environment\n this.collectors = params.collectors\n this.event = this.buildEvent(params.event)\n this.data = params.data\n\n this.log()\n this.send()\n }\n\n buildEvent(event) {\n return event.join('-')\n }\n\n log() {\n if (this.environment != 'production') {\n let title = 'HarleyEvent'\n if (Array.isArray(this.data)) {\n title += ' (batched)'\n }\n\n // eslint-disable-next-line no-console\n console.debug(title, this.constructor.name, {\n event: this.event,\n data: this.data\n })\n }\n }\n}\n","/* global fbq */\n\nimport EventBase from './base.js'\n\nexport default class FacebookEvent extends EventBase {\n buildEvent(event) {\n return event.join('.')\n }\n\n send() {\n this.environment === 'production' &&\n typeof fbq !== 'undefined' &&\n fbq('track', this.event, { ...this.data })\n }\n}\n","/* global fbq */\n\nimport EventBase from './base.js'\n\nexport default class FacebookCustomEvent extends EventBase {\n buildEvent(event) {\n return event.join('.')\n }\n\n send() {\n this.environment === 'production' &&\n typeof fbq !== 'undefined' &&\n fbq('trackCustom', this.event, { ...this.data })\n }\n}\n","/* global dataLayer */\n\nimport EventBase from './base.js'\n\nexport default class GoogleAnalyticsEvent extends EventBase {\n buildEvent(event) {\n return event.join('.')\n }\n\n send() {\n typeof dataLayer !== 'undefined' && dataLayer.push({ event: this.event, ...this.data })\n }\n}\n","/* global HarleyEventStore */\n\nimport { captureException } from '@sentry/react'\n\nimport EventBase from './base.js'\n\nexport default class HarleyTherapyEventStore extends EventBase {\n static supportsBatching = true\n\n buildEvent(event) {\n return typeof event === 'object' ? event.join('.') : event\n }\n\n // If an array is given as the data, it is assumed that each element in the array is a data object\n // for a single event, and will be sent to the server in a single request. The server will then\n // turn that into multiple events per array element.\n send() {\n // If batching, send an object with two keys: `data` and `collectors`.\n const data = Array.isArray(this.data) ? { data: Array.from(this.data) } : this.data\n data.collectors = this.collectors\n\n try {\n typeof HarleyEventStore !== 'undefined' && HarleyEventStore.track(this.event, data)\n } catch (error) {\n captureException(error)\n }\n }\n}\n","/* global Intercom */\n\nimport EventBase from './base.js'\n\nexport default class IntercomEvent extends EventBase {\n send() {\n typeof Intercom !== 'undefined' && Intercom('trackEvent', this.event, this.data)\n }\n}\n","import FacebookEvent from './collectors/facebook.js'\nimport FacebookCustomEvent from './collectors/facebook_custom.js'\nimport GoogleAnalyticsEvent from './collectors/google_analytics.js'\nimport HarleyTherapyEventStore from './collectors/harley.js'\nimport IntercomEvent from './collectors/intercom.js'\n\nexport default class HarleyEvent {\n allCollectors = {\n GoogleAnalytics: GoogleAnalyticsEvent,\n Intercom: IntercomEvent,\n Facebook: FacebookEvent,\n FacebookCustom: FacebookCustomEvent,\n Harley: HarleyTherapyEventStore\n }\n\n static initialize() {\n if (typeof document === 'undefined') return\n\n // Track links that need event reporting.\n const elements = document.querySelectorAll('[data-harley-event]')\n for (let i = elements.length - 1; i >= 0; i--) {\n elements[i].addEventListener('click', function () {\n new HarleyEvent(JSON.parse(this.dataset.harleyEvent))\n })\n }\n\n document.dispatchEvent(new CustomEvent('HarleyEventReady'))\n }\n\n constructor(params) {\n const collectors = this.collectors(params.collectors)\n\n params.data = params.data === undefined ? {} : params.data\n\n const env = document.getElementsByName('htp:environment')[0].content\n\n // Ensure `event` is an array.\n params.event = Array.isArray(params.event) ? params.event : [params.event]\n\n // Prefix the event with admin if path starts with `/admin`.`\n if (window.location.hostname.startsWith('admin-')) {\n params.event.splice(0, 0, 'admin-')\n } else if (window.location.hostname.startsWith('admin')) {\n params.event.splice(0, 0, 'admin')\n }\n\n // pick up subdomains if there is one and prefix the event with this\n const domainParts = window.location.hostname.split('.')\n if (domainParts.length > 2) {\n params.data.subdomain = domainParts[0]\n }\n\n const { event, data } = params\n collectors.forEach(c => {\n // Not all collectors support batching, so we check here.\n if (Array.isArray(data) && !this.allCollectors[c].supportsBatching) {\n data.forEach(d => {\n new this.allCollectors[c](env, { data: d, event, collectors })\n })\n } else {\n new this.allCollectors[c](env, { event, data, collectors })\n }\n })\n }\n\n collectors(value) {\n return value.length === 0 ? ['Harley'] : Array.from(new Set(value.concat(['Harley'])))\n }\n}\n\nif (typeof window !== 'undefined' && window.HarleyEvent === undefined) {\n window.HarleyEvent = HarleyEvent\n}\n","import { isString } from 'lodash'\n\nexport default value => {\n if (isString(value)) {\n switch (value) {\n case 'true':\n case '1': {\n return true\n }\n case 'false':\n case '0': {\n return false\n }\n }\n } else if (value === 0) {\n return false\n } else if (value === 1) {\n return true\n } else {\n return value\n }\n}\n","import { deepEqual } from 'fast-equals'\nimport history from 'history/browser'\nimport { createModel, trackFunction } from 'ibiza'\nimport Cookies from 'js-cookie'\nimport { compact, forEach, isEmpty, isNil, isObject, isString, omit, size, transform } from 'lodash'\n\nimport { DISABLE_OFFLINE_LOCATIONS, EMPTY_SEARCH_FILTERS } from 'assets/lib/constants'\nimport HarleyEvent from 'assets/lib/harley_event'\nimport fetch from 'assets/lib/utils/fetch'\nimport toBoolean from 'assets/lib/utils/to_boolean'\n\nconst isAdmin = location.host.startsWith('admin.') || location.host.startsWith('admin-')\nlet searchParams = new URLSearchParams(document.location.search)\n\nexport default createModel('therapistSearch', (_, props) => {\n // Make sure `therapist` param is an array.\n if (!Array.isArray(props.params.therapist)) {\n props.params.therapist = compact([props.params.therapist])\n }\n\n // Make sure page has a default.\n if (props.params.page === undefined) {\n props.params.page = 1\n }\n\n if (isEmpty(props.params.specialism)) {\n props.params.specialism = null\n }\n\n if (isString(props.params.locationType)) {\n const types = props.params.locationType.split(',')\n\n // If offline locations are disabled, remove the offline type.\n const offlineIndex = types.indexOf('offline')\n if (DISABLE_OFFLINE_LOCATIONS && offlineIndex > -1) {\n delete types[offlineIndex]\n }\n\n props.params.locationType = compact(types).join(',')\n }\n\n if (!isAdmin && props.results?.therapists?.length > 0) {\n // Batch the \"therapist.appearedInSearch\" event, by giving the `data` an array of events.\n const data = props.results.therapists.map((th, i) => {\n return {\n therapistId: th.id,\n page: props.results.pageNumber,\n isMatch: !th.suggestion,\n position: i + 1\n }\n })\n\n new HarleyEvent({\n event: ['therapist', 'appearedInSearch'],\n collectors: ['GoogleAnalytics'],\n data\n })\n }\n\n return {\n // Should we perform a search and update URL params when changing filters?\n shouldSearchOnFilterChange: true,\n\n get hasResults() {\n return !isEmpty(this.results?.therapists)\n },\n\n get hasSuggestions() {\n return this.results?.therapists && this.results.therapists[0].suggestion\n },\n\n get locationGiven() {\n return this.params?.location?.latitude !== null\n },\n\n ...props,\n\n async search() {\n this.isLoading = true\n const urlParams = new URLSearchParams(document.location.search)\n let newResults\n\n try {\n newResults = await fetch(`${this.therapistsPath}?${urlParams.toString()}`, {\n isCritical: true\n }).json()\n } finally {\n this.isLoading = false\n }\n\n trackSearch(this.params.$unproxiedState, newResults.therapists, newResults.pageNumber)\n this.results = newResults\n\n // Scroll to top, as list will have changed, but the browser maintains the current scroll\n // position.\n window.scrollTo({ top: 0, left: 0 })\n },\n\n pushParams(_, params) {\n if (this.shouldSearchOnFilterChange) {\n let shouldDeletePageParam = true\n\n // Update the URL search params.\n forEach(params, (value, key) => {\n if (key == 'page' && value > 1) {\n shouldDeletePageParam = false\n }\n\n if (key == 'location') {\n const hasValues = compact(Object.values(value)).length > 0\n value = hasValues ? `${value.latitude},${value.longitude}` : null\n }\n\n isNil(value) || value === '' ? searchParams.delete(key) : searchParams.set(key, value)\n })\n\n // Delete the pagination param if any other params have changed.\n shouldDeletePageParam && searchParams.delete('page')\n }\n\n forEach(params, (val, key) => void (this.params[key] = val))\n\n // Push the URL search params onto the browser history.\n if (this.shouldSearchOnFilterChange) {\n history.push({ search: `?${searchParams.toString()}` }, params)\n }\n\n // We use raw unproxied params, to prevent React from treating this function as changed,\n // resulting in extra rendering.\n Cookies.set('filterState', JSON.stringify(this.params.$unproxiedState))\n\n // Don't run the search if the result of the listened action is `false`.\n this.shouldSearchOnFilterChange && this.search()\n },\n\n popParams(_, params) {\n const thisParams = this.params.$unproxiedState\n\n // Safari triggers a popstate history event when navigating back from another page, which we\n // don't want. So here we compare the history state and the popped params, and only if not equal\n // do we continue.\n if (deepEqual(params, thisParams)) return false\n\n // Update `searchParams` manually as URL will have changed.\n searchParams = new URLSearchParams(document.location.search)\n\n forEach(params, (val, key) => void (this.params[key] = val))\n\n Cookies.set('filterState', JSON.stringify(thisParams))\n\n // Don't run the search if the result of the listened action is `false`.\n this.shouldSearchOnFilterChange && this.search()\n },\n\n get wantsFreeSupportSessions() {\n return toBoolean(this.params.freeSupportSessions)\n },\n\n // Returns a count of the number of filters that are actually applied to the search. This is\n // basically a comparison of the `params` and `emptyParams` state.\n appliedFiltersCount: trackFunction(function (_, excludedParams = []) {\n !excludedParams.includes('revenuePerClient') && excludedParams.push('revenuePerClient')\n !excludedParams.includes('page') && excludedParams.push('page')\n\n return _difference(\n omit(this.params, excludedParams),\n omit(EMPTY_SEARCH_FILTERS, excludedParams)\n )\n }),\n\n reset() {\n this.isLoading = true\n\n Cookies.remove('filterState')\n location = location.pathname\n }\n }\n})\n\nfunction _difference(object, base) {\n function changes(object, base) {\n const result = transform(object, function (result, value, key) {\n if (key === 'sort') return\n\n value = value === '' ? null : value\n const baseValue = base[key] === '' ? null : base[key]\n\n if (!deepEqual(value, baseValue)) {\n result[key] = isObject(value) && isObject(baseValue) ? changes(value, baseValue) : value\n }\n })\n\n return size(result)\n }\n\n return changes(object, base)\n}\n\nfunction trackSearch(params, therapists, pageNumber) {\n if (isAdmin) return\n\n const searchResultsDisplayedData = { params, pageNumber, matchesOnPage: 0 }\n\n if (therapists.length === 0) {\n new HarleyEvent({\n event: ['therapist', 'searchResultsEmpty'],\n collectors: ['GoogleAnalytics', 'Intercom'],\n data: { params }\n })\n } else {\n // Batch the \"therapist.appearedInSearch\" event, by giving the `data` an array of events.\n const data = therapists.map((th, i) => ({\n therapistId: th.id,\n page: pageNumber,\n position: i + 1\n }))\n\n new HarleyEvent({\n event: ['therapist', 'appearedInSearch'],\n collectors: ['GoogleAnalytics'],\n data\n })\n\n searchResultsDisplayedData.matchesOnPage = therapists.filter(x => !x.suggestion).length\n searchResultsDisplayedData.closestTherapistDistance =\n therapists[0].offlineLocations?.[0].distance\n }\n\n new HarleyEvent({\n event: ['therapist', 'searchResultsDisplayed'],\n collectors: ['GoogleAnalytics', 'Intercom'],\n data: searchResultsDisplayedData\n })\n\n new HarleyEvent({\n event: 'Search',\n collectors: ['Facebook'],\n data: {\n search_string: location.search\n }\n })\n}\n"],"names":["History","children","params","popParams","useModel","useEffect","history","replace","location","$unproxiedState","listen","state","propTypes","exact","PropTypes","isRequired","Loader","isLoading","_jsxs","_Fragment","_jsx","CSSTransition","mountOnEnter","unmountOnExit","classNames","enter","enterDone","enterActive","in","timeout","className","_div","Mobile","lazy","Desktop","TherapistSearch","excludeFilters","props","isMobile","useMatchMedia","defaultProps","hidePricing","EventBase","static","constructor","environment","this","collectors","event","buildEvent","data","log","send","join","title","Array","isArray","console","debug","name","FacebookEvent","fbq","FacebookCustomEvent","GoogleAnalyticsEvent","dataLayer","push","HarleyTherapyEventStore","from","HarleyEventStore","track","error","captureException","IntercomEvent","Intercom","HarleyEvent","allCollectors","GoogleAnalytics","Facebook","FacebookCustom","Harley","initialize","document","elements","querySelectorAll","i","length","addEventListener","JSON","parse","dataset","harleyEvent","dispatchEvent","CustomEvent","undefined","env","getElementsByName","content","window","hostname","startsWith","splice","domainParts","split","subdomain","forEach","c","supportsBatching","d","value","Set","concat","isString","isAdmin","host","searchParams","URLSearchParams","search","createModel","_","therapist","compact","page","isEmpty","specialism","locationType","types","offlineIndex","indexOf","DISABLE_OFFLINE_LOCATIONS","results","therapists","map","th","therapistId","id","pageNumber","isMatch","suggestion","position","shouldSearchOnFilterChange","hasResults","hasSuggestions","locationGiven","latitude","urlParams","newResults","fetch","therapistsPath","toString","isCritical","json","searchResultsDisplayedData","matchesOnPage","filter","x","closestTherapistDistance","offlineLocations","distance","search_string","trackSearch","scrollTo","top","left","pushParams","shouldDeletePageParam","key","Object","values","longitude","isNil","delete","set","val","Cookies","stringify","thisParams","deepEqual","wantsFreeSupportSessions","toBoolean","freeSupportSessions","appliedFiltersCount","trackFunction","excludedParams","includes","object","omit","base","EMPTY_SEARCH_FILTERS","changes","result","transform","baseValue","isObject","size","reset","remove","pathname"],"sourceRoot":""}