{"version":3,"file":"js/search-182cb106cf1c0669d570.js","mappings":"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","sources":["webpack://uk-b2c/./app/javascript/src/Components/Search/BodyPartsInput.tsx","webpack://uk-b2c/./app/javascript/src/Components/Search/ScanTypeInput.tsx","webpack://uk-b2c/./app/javascript/src/Search/ServiceSearchForm.tsx","webpack://uk-b2c/./app/javascript/packs/search.tsx","webpack://uk-b2c/./app/javascript/src/Components/Search/LocationInput.tsx","webpack://uk-b2c/./app/javascript/src/Components/Search/styles.ts","webpack://uk-b2c/./app/javascript/src/withGoogleScriptsLibraries.tsx"],"sourcesContent":["import { Combobox } from \"@headlessui/react\";\nimport { IconChevronDown, IconSearch } from \"@tabler/icons-react\";\nimport React from \"react\";\nimport { SystemMessage } from \"../../shared/SystemMessage\";\n\nimport classNames from \"classnames\";\nimport { partition } from \"fp-ts/lib/Array\";\n\nimport { pipe } from \"fp-ts/lib/function\";\nimport type { BodyPart } from \"../../api\";\nimport {\n getItemStyles,\n inputStyles,\n labelStyles,\n optionsStyles,\n} from \"./styles\";\n\ninterface BodyPartInputProps {\n name?: string;\n availableBodyParts: BodyPart[];\n maxBodyParts?: number;\n selectedBodyPartIds: BodyPart[\"id\"][];\n setSelectedBodyPartIds: (id: BodyPart[\"id\"][]) => void;\n errorId?: string;\n isGrouped?: boolean;\n className?: string;\n inputClassName?: string;\n}\n\nexport function BodyPartInput({\n name = \"body-parts\",\n availableBodyParts,\n maxBodyParts = 4,\n selectedBodyPartIds,\n setSelectedBodyPartIds,\n errorId,\n className,\n inputClassName,\n}: BodyPartInputProps) {\n const comboButton = React.useRef(null);\n const [query, setQuery] = React.useState(\"\");\n\n const filterByQuery = (items: BodyPart[]) => {\n return Boolean(query)\n ? items.filter(({ name }) =>\n name.toLowerCase().includes(query.toLowerCase())\n )\n : items;\n };\n\n const { unselectedParts, selectedParts } = pipe(\n availableBodyParts,\n partition(({ id }) => selectedBodyPartIds?.includes(id)),\n ({ left, right }) => ({\n selectedParts: right,\n unselectedParts: filterByQuery(left),\n })\n );\n\n const warningId = `${name}-warning`;\n\n const totalParts = selectedBodyPartIds.length;\n const partLimitExceeded = totalParts >= maxBodyParts;\n\n React.useEffect(() => {\n // Allow tab to focus to work.\n if (comboButton.current) {\n comboButton.current.setAttribute(\"tabindex\", \"auto\");\n }\n }, [comboButton]);\n\n return (\n {\n setQuery(\"\");\n setSelectedBodyPartIds(value);\n if (comboButton.current) comboButton.current.click();\n }}\n >\n \n
\n {Boolean(totalParts) && (\n
\n Body Parts\n \n {totalParts}\n \n
\n )}\n \n {selectedParts.map(({ name }) => name || \"\").join(\", \") ||\n \"Body Parts\"}\n \n
\n \n \n \n
\n \n query}\n onChange={(e) => setQuery(e.target.value)}\n className=\"w-full focus:outline-none\"\n />\n
\n\n {partLimitExceeded && (\n \n )}\n\n {unselectedParts.length === 0 && !selectedParts.length && (\n

\n No body parts found\n

\n )}\n\n {selectedParts.map((bp) => (\n \n \n {bp.name}\n \n ))}\n\n {!partLimitExceeded &&\n unselectedParts.map((bp) => (\n \n \n {bp.name}\n \n ))}\n
\n \n );\n}\n","import { Listbox } from \"@headlessui/react\";\nimport { IconChevronDown } from \"@tabler/icons-react\";\nimport classNames from \"classnames\";\nimport React from \"react\";\nimport { ScanType } from \"../../api\";\nimport {\n getItemStyles,\n inputStyles,\n labelStyles,\n optionsStyles,\n} from \"./styles\";\n\ninterface ScanTypeInputProps {\n name?: string;\n errorId?: string;\n availableScanTypes: ScanType[];\n selectedScanTypeId: string;\n setScanType: (id: string) => void;\n displayValue?: string;\n className?: string;\n inputClassName?: string;\n}\n\nexport function ScanTypeInput({\n name = \"scanType\",\n errorId,\n availableScanTypes,\n setScanType,\n selectedScanTypeId,\n displayValue,\n className,\n inputClassName,\n}: ScanTypeInputProps) {\n return (\n \n \n
\n {displayValue &&
Scan Type
}\n {displayValue || \"Scan Type\"}\n
\n \n
\n \n {availableScanTypes.map(({ id, name }) => (\n \n {name}\n \n ))}\n \n \n );\n}\n","import * as React from \"react\";\n\nimport type { ScanType } from \"../api\";\n\nimport { SubmitHandler, useForm, Controller } from \"react-hook-form\";\n\nimport { Button, SystemMessage } from \"@scandotcom/react\";\nimport { useBodyParts } from \"../NewSearchResults/SearchForm/useBodyParts\";\nimport { BodyPartInput } from \"../Components/Search/BodyPartsInput\";\nimport { ScanTypeInput } from \"../Components/Search/ScanTypeInput\";\nimport { LocationInput } from \"../Components/Search/LocationInput\";\n\ninterface Props {\n scanTypes: ScanType[];\n selectedScanType: Pick;\n}\n\nexport interface SearchFormFields {\n location: string;\n bodyPartIds: number[];\n scanTypeId: string;\n}\n\nconst csrfToken = document\n .querySelector(\"meta[name='csrf-token']\")\n ?.getAttribute(\"content\");\n\n/**\n * A variant of the Search component that is tailored for searches\n * from service pages. A service may or may not have the scan-type\n * pre-set to a single option\n *\n * @param props\n * @returns\n */\nexport const ServiceSearchForm: React.FC = (props) => {\n const [loading, setLoading] = React.useState(false);\n\n const formRef = React.useRef(null);\n\n const form = useForm({\n defaultValues: {\n location: \"\",\n bodyPartIds: [],\n scanTypeId: props.selectedScanType.id,\n },\n });\n\n const onSubmit: SubmitHandler = () => {\n setLoading(true);\n if (formRef.current) {\n formRef.current.submit();\n return;\n }\n setLoading(false);\n };\n\n const selectedScanTypeId = form.watch(\"scanTypeId\");\n\n const { bodyParts } = useBodyParts({\n initialBodyParts: [],\n selectedScanTypeId: selectedScanTypeId,\n onFetchSuccess: (bodyParts) => {\n // when the available body parts changes, update the selections in the form to\n // include only the body parts that are valid for the current scan type. Also\n // adjust the max selected body parts for the scan type\n const currentBodyPartIds = form.getValues(\"bodyPartIds\");\n const availableBodyPartIds = bodyParts.map(({ id }) => id);\n\n form.setValue(\n \"bodyPartIds\",\n currentBodyPartIds\n .filter((id) => availableBodyPartIds.includes(id))\n .slice(0, props.selectedScanType?.max_allowed_body_parts || 4)\n );\n },\n });\n\n const selectedScanType = props.scanTypes.find(\n ({ id }) => selectedScanTypeId === id\n );\n\n return (\n \n {csrfToken ? (\n \n ) : null}\n \n\n
\n
\n (\n \n )}\n />\n\n {form.watch(\"bodyPartIds\").map((item) => (\n \n \n \n \n ))}\n\n (\n
\n \n {fieldState.error && (\n \n {fieldState.error.message}\n \n )}\n
\n )}\n />\n
\n {\n return (\n
\n \n {fieldState.error && (\n \n {fieldState.error.message}\n \n )}\n
\n );\n }}\n />\n
\n \n Search\n \n
\n
\n \n );\n};\n","import * as ReactDOM from \"react-dom/client\";\nimport * as React from \"react\";\nimport { define } from \"remount\";\n\nimport Bugsnag from \"@bugsnag/js\";\nimport BugsnagPluginReact from \"@bugsnag/plugin-react\";\nimport { GoogleScriptsProvider } from \"../src/shared/GoogleScriptsContext\";\nimport { ServiceSearchForm } from \"../src/Search/ServiceSearchForm\";\nimport { ModalitySearch } from \"../src/ModalitySearch/ModalitySearch\";\nimport { withGoogleScriptsLibraries } from \"../src/withGoogleScriptsLibraries\";\n\nBugsnag.start({\n apiKey: window.AppConfig.BUGSNAG_FRONTEND_API_KEY || \"invalid\",\n plugins: [new BugsnagPluginReact()],\n releaseStage: window.AppConfig.RAILS_ENV,\n enabledReleaseStages: [\"production\", \"staging\"],\n});\n\nconst googleScriptsLibraries = [\"places\" as const];\n\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n const node = document.getElementById(\"search\");\n\n if (!node) {\n return;\n }\n\n const data = JSON.parse(node.getAttribute(\"data\") || \"{}\");\n\n const area = data.area;\n const selectedScanType = data.selectedScanType;\n const availableBodyParts = data.availableBodyParts ?? [];\n const selectedBodyParts = data.selectedBodyParts ?? [];\n const isSearchBar = data.isSearchBar ?? false;\n const cta = data.cta;\n const ctaStyles = data.ctaStyles;\n const facilities = data.facilities;\n const showConsultationFooter = Boolean(data.showConsultationFooter);\n\n const root = ReactDOM.createRoot(node);\n\n root.render(\n \n \n \n );\n});\n\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n define({\n \"service-search-form\": withGoogleScriptsLibraries(ServiceSearchForm),\n });\n});\n","import { Combobox } from \"@headlessui/react\";\nimport { IconButton } from \"@scandotcom/react\";\nimport { IconMapPin } from \"@tabler/icons-react\";\nimport classNames from \"classnames\";\nimport React from \"react\";\nimport { useLocation } from \"../../shared/useLocation\";\nimport {\n getItemStyles,\n inputStyles,\n labelStyles,\n optionsStyles,\n} from \"./styles\";\n\ninterface LocationInputProps {\n name?: string;\n defaultValue?: string;\n errorId?: string;\n className?: string;\n inputClassName?: string;\n onChange?: (value: string) => void;\n}\n\nexport const LocationInput = React.forwardRef<\n HTMLInputElement,\n LocationInputProps\n>((props, ref) => {\n const {\n getLocation,\n searchPlaces,\n suggestions,\n scriptLoaded,\n location,\n setLocation,\n } = useLocation(props.defaultValue ?? \"\");\n\n function updateLocation(value: string) {\n setLocation(value);\n props.onChange && props.onChange(value);\n }\n\n React.useEffect(() => {\n if (props.onChange) {\n props.onChange(location);\n }\n }, [location]);\n\n return (\n \n
\n
\n Location\n {\n updateLocation(event.target.value);\n searchPlaces(event.target.value);\n }}\n displayValue={(_) => location}\n />\n
\n \n
\n {Boolean(suggestions.length) && scriptLoaded && (\n \n \n\n {suggestions?.map((loc) => {\n const name = loc.description.replace(\", UK\", \"\");\n return (\n \n {name}\n \n );\n })}\n \n )}\n \n );\n});\n","import classNames from \"classnames\";\n\nexport const inputStyles = \"flex w-full items-center gap-x-2.5 text-start\";\n\nexport const labelStyles = \"flex gap-x-1 text-sm text-neutral-500 font-medium\";\n\nexport const optionsStyles =\n \"ring-primary-300 absolute left-0 mt-2 space-y-px overflow-auto rounded-lg border border-neutral-200 bg-white p-2 text-sm font-medium text-neutral-700 shadow-lg focus:outline-none focus-visible:ring-2 min-w-full z-20\";\n\nexport const getItemStyles = (item: { selected: boolean; active: boolean }) =>\n classNames(\n item.active && \"bg-neutral-100\",\n \"cursor-pointer rounded-md p-2.5 flex items-center gap-2 select-none\"\n );\n","import React from \"react\";\nimport { GoogleScriptsProvider } from \"./shared/GoogleScriptsContext\";\n\nconst googleScriptsLibraries = [\"places\" as const];\n\nexport function withGoogleScriptsLibraries

(\n Component: React.ComponentType

\n) {\n return (props: P) => (\n \n \n \n );\n}\n"],"names":["BodyPartInput","_ref","_ref$name","name","availableBodyParts","_ref$maxBodyParts","maxBodyParts","selectedBodyPartIds","setSelectedBodyPartIds","errorId","className","inputClassName","comboButton","React","_React$useState2","_slicedToArray","query","setQuery","_pipe","pipe","partition","_ref3","id","includes","_ref4","items","left","selectedParts","right","unselectedParts","Boolean","filter","_ref2","toLowerCase","warningId","concat","totalParts","length","partLimitExceeded","current","setAttribute","Combobox","as","classNames","value","multiple","onChange","click","Button","ref","inputStyles","labelStyles","map","_ref5","join","IconChevronDown","Options","optionsStyles","IconSearch","Input","displayValue","e","target","SystemMessage","message","type","role","bp","Option","key","getItemStyles","defaultChecked","readOnly","ScanTypeInput","availableScanTypes","setScanType","selectedScanTypeId","Listbox","defaultValue","csrfToken","_document$querySelect","document","querySelector","getAttribute","ServiceSearchForm","props","loading","setLoading","formRef","form","useForm","defaultValues","location","bodyPartIds","scanTypeId","selectedScanType","watch","_useBodyParts","useBodyParts","initialBodyParts","onFetchSuccess","bodyParts","_props$selectedScanTy","currentBodyPartIds","getValues","availableBodyPartIds","setValue","slice","max_allowed_body_parts","scanTypes","find","action","acceptCharset","method","onSubmit","handleSubmit","submit","Controller","control","rules","required","render","_fieldState$error","_ref3$field","field","fieldState","error","undefined","item","_props$selectedScanTy2","_ref4$field","isGrouped","LocationInput","kind","disabled","Bugsnag","apiKey","window","AppConfig","BUGSNAG_FRONTEND_API_KEY","plugins","BugsnagPluginReact","releaseStage","RAILS_ENV","enabledReleaseStages","googleScriptsLibraries","addEventListener","_data$availableBodyPa","_data$selectedBodyPar","_data$isSearchBar","node","getElementById","data","JSON","parse","area","selectedBodyParts","isSearchBar","cta","ctaStyles","facilities","showConsultationFooter","ReactDOM","GoogleScriptsProvider","libraries","ModalitySearch","initialArea","scanType","define","withGoogleScriptsLibraries","_props$defaultValue","_props$name","_useLocation","useLocation","getLocation","searchPlaces","suggestions","scriptLoaded","setLocation","updateLocation","Label","placeholder","autoComplete","event","_","IconButton","icon","IconMapPin","label","onClick","loc","description","replace","place_id","active","Component"],"sourceRoot":""}