{"version":3,"sources":["webpack:///./js/react/Eligibility/SearchForm/index.tsx","webpack:///./js/react/Eligibility/useEligibilityState.tsx","webpack:///./js/react/Eligibility/Button/index.tsx"],"names":["highlightSuggestionValue","suggestion","employerName","highlights","highlight","split","highlightFrom","length","parseInt","highlightTo","substring","substr","employerNameComparison","employer","name","toLowerCase","replace","formatMessage","template","searchValue","SearchForm","initialValue","showMessage","showProductMessage","useEligibilityContext","employers","hasSelectedEmployer","selectedEmployer","accessToken","dispatch","useHabitat","culturecode","errormessage","searchtitle","searchplaceholder","producterrormessage","useState","setSearchValue","suggestions","setSuggestions","loading","setLoading","debouncedSearchValue","useDebounce","triggerSearchTypeEvent","type","event","CustomEvent","detail","document","dispatchEvent","useEffect","getSuggestions","getEmployers","autoSuggestInputClassNames","classNames","undefined","React","createElement","className","onSubmit","htmlFor","Autosuggest","getSuggestionValue","inputProps","id","placeholder","value","onChange","target","onFocus","Event","shouldRenderSuggestions","trim","renderSuggestion","dangerouslySetInnerHTML","__html","onSuggestionSelected","data","onSuggestionsFetchRequested","onSuggestionsClearRequested","Button","text","disabled","salaryFinanceEmployerDetails","limit","inputValue","Array","fetchEmployersFromSFApi","fetchEmployers","preventDefault","find","e","payload","employerNotFound","uniqueIdentifier","fetchEmployerFromSFApi","fetchEmployer","cultureCode","fetch","encodeURIComponent","headers","accept","res","ok","json","response","set","Set","filter","startsWith","forEach","emp","add","indexOf","slice","Authorization","reducerFn","state","action","products","hasSubmitted","fields","fullName","emailAddress","contactNumber","marketing","product","isValidEmployer","productError","fieldData","initialState","EligibilityContext","createContext","EligibilityProvider","children","useReducer","query","fetchAccessToken","token","getToken","querystring","stringify","getData","Provider","useContext","access_token","onClick","xmlns","width","height","viewBox","transform","d","fill","strokeLinecap","strokeLinejoin","strokeWidth"],"mappings":"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","file":"2-b0521c71be63100b8121.js","sourcesContent":["import classNames from 'classnames';\r\nimport React, { useEffect, useState } from 'react';\r\nimport Autosuggest from 'react-autosuggest';\r\nimport { useEligibilityContext } from '@react/Eligibility/useEligibilityState';\r\nimport { useHabitat } from '@react/shared/HabitatContext';\r\nimport { useDebounce } from 'use-debounce/lib';\r\nimport Button from '../Button';\r\nconst SearchForm = ({ initialValue, showMessage = false, showProductMessage = false, }) => {\r\n const [{ employers, hasSelectedEmployer, selectedEmployer, accessToken }, dispatch,] = useEligibilityContext();\r\n const { culturecode, errormessage, searchtitle, searchplaceholder, producterrormessage, } = useHabitat();\r\n const [searchValue, setSearchValue] = useState(initialValue ?? '');\r\n const [suggestions, setSuggestions] = useState([]);\r\n const [loading, setLoading] = useState(false);\r\n const [debouncedSearchValue] = useDebounce(searchValue, 300);\r\n const triggerSearchTypeEvent = (type) => {\r\n const event = new CustomEvent('eligibility-search', { detail: type });\r\n document.dispatchEvent(event);\r\n };\r\n // Update value if the initial value changes.\r\n useEffect(() => {\r\n setSearchValue(initialValue ?? '');\r\n }, [initialValue]);\r\n useEffect(() => {\r\n getEmployers();\r\n async function getEmployers() {\r\n const employers = await getSuggestions(debouncedSearchValue, 10);\r\n setSuggestions(employers);\r\n }\r\n }, [debouncedSearchValue]);\r\n const autoSuggestInputClassNames = classNames({\r\n ['ec-search__form-input']: true,\r\n ['ec-search__form-input--verified']: selectedEmployer !== undefined,\r\n });\r\n return (React.createElement(\"form\", { className: \"ec-search__form form-input-container\", onSubmit: handleSearch },\r\n React.createElement(\"label\", { className: \"ec-search__form-label\", htmlFor: \"employerSearch\" }, searchtitle),\r\n React.createElement(\"div\", { className: \"ec-search__form-field\" },\r\n React.createElement(Autosuggest, { getSuggestionValue: getSuggestionValue, inputProps: {\r\n id: 'employerSearch',\r\n className: autoSuggestInputClassNames,\r\n type: 'text',\r\n placeholder: searchplaceholder,\r\n value: searchValue ?? '',\r\n onChange: (event) => setSearchValue(event.target.value ?? ''),\r\n onFocus: () => {\r\n document.dispatchEvent(new Event('eligibility-input-focus'));\r\n },\r\n }, shouldRenderSuggestions: shouldRenderSuggestions, renderSuggestion: renderSuggestion, suggestions: suggestions, onSuggestionSelected: (event, data) => onSuggestionSelected(event, data, 'autoSuggest'), onSuggestionsFetchRequested: onSuggestionsFetchRequested, onSuggestionsClearRequested: onSuggestionsClearRequested }),\r\n React.createElement(Button, { text: \"Let's go\", disabled: loading })),\r\n showMessage &&\r\n !selectedEmployer?.salaryFinanceEmployerDetails &&\r\n !showProductMessage &&\r\n initialValue && (React.createElement(\"p\", { className: \"ec-search__form-message\" }, formatMessage(errormessage, initialValue))),\r\n showMessage && showProductMessage && initialValue && (React.createElement(\"p\", { className: \"ec-search__form-message\" }, formatMessage(producterrormessage, initialValue)))));\r\n async function getSuggestions(value, limit) {\r\n if (!value?.length) {\r\n return [];\r\n }\r\n const inputValue = value.trim().toLowerCase();\r\n const inputLength = inputValue.length;\r\n if (inputLength === 0) {\r\n return [];\r\n }\r\n let employers = new Array();\r\n switch (culturecode) {\r\n case 'uk':\r\n employers = await fetchEmployersFromSFApi(inputValue, limit);\r\n break;\r\n case 'us':\r\n employers = fetchEmployers(inputValue, limit);\r\n break;\r\n default:\r\n break;\r\n }\r\n return employers;\r\n }\r\n function getSuggestionValue(suggestion) {\r\n return suggestion.employerName ?? '';\r\n }\r\n async function handleSearch(event) {\r\n event.preventDefault();\r\n if (hasSelectedEmployer &&\r\n searchValue.toLowerCase() === selectedEmployer?.employerName?.toLowerCase()) {\r\n return;\r\n }\r\n const employers = await getSuggestions(searchValue, 10);\r\n const suggestion = employers?.find(e => employerNameComparison(e, searchValue));\r\n if (suggestion) {\r\n await onSuggestionSelected(event, { suggestion }, 'button');\r\n }\r\n else {\r\n dispatch({\r\n type: 'SET_SELECTED_EMPLOYEE',\r\n payload: {\r\n searchValue: searchValue,\r\n employer: undefined,\r\n employerNotFound: true,\r\n },\r\n });\r\n }\r\n }\r\n async function onSuggestionSelected(event, { suggestion }, type) {\r\n event.preventDefault();\r\n triggerSearchTypeEvent(type);\r\n // Set autosuggest's textbox with employer name till the employer is fetched\r\n setSearchValue(suggestion.employerName ?? '');\r\n // If we select the already selected employer then update local state.\r\n if (suggestion.uniqueIdentifier === selectedEmployer?.uniqueIdentifier)\r\n return;\r\n setLoading(true);\r\n let employer;\r\n switch (culturecode) {\r\n case 'uk':\r\n employer = await fetchEmployerFromSFApi(suggestion.uniqueIdentifier ?? '');\r\n break;\r\n case 'us':\r\n employer = await fetchEmployer(suggestion.uniqueIdentifier ?? '', culturecode);\r\n break;\r\n default:\r\n break;\r\n }\r\n if (employer) {\r\n const event = new CustomEvent('eligibility-result', {\r\n detail: { type: 'products available' },\r\n });\r\n document.dispatchEvent(event);\r\n // Otherwise update global state.\r\n dispatch({\r\n type: 'SET_SELECTED_EMPLOYEE',\r\n payload: {\r\n employer: employer,\r\n searchValue: employer?.employerName,\r\n },\r\n });\r\n }\r\n setLoading(false);\r\n }\r\n function onSuggestionsClearRequested() {\r\n setSuggestions([]);\r\n }\r\n function onSuggestionsFetchRequested({ value }) {\r\n setSearchValue(value);\r\n }\r\n function renderSuggestion(suggestion) {\r\n return React.createElement(\"div\", { dangerouslySetInnerHTML: { __html: highlightSuggestionValue(suggestion) } });\r\n }\r\n function shouldRenderSuggestions(value) {\r\n if (!value || (hasSelectedEmployer && employerNameComparison(selectedEmployer, value))) {\r\n return false;\r\n }\r\n return value.trim().length > 0;\r\n }\r\n async function fetchEmployer(uniqueIdentifier, cultureCode) {\r\n const res = await fetch(`/umbraco/api/employersapi/getemployer?employerName=${encodeURIComponent(uniqueIdentifier)}&culturecode=${cultureCode}`, {\r\n headers: {\r\n accept: 'application/json',\r\n },\r\n });\r\n if (!res.ok) {\r\n return null;\r\n }\r\n const response = (await res.json());\r\n return response;\r\n }\r\n function fetchEmployers(text, limit) {\r\n // Use a Set to remove duplicates\r\n const set = new Set();\r\n // First get suggestions that start with the input value.\r\n employers\r\n .filter(e => e.employerName?.toLowerCase().startsWith(text.toLowerCase()))\r\n .forEach(emp => set.add(emp));\r\n // Then get suggestions that contain the input value.\r\n employers\r\n .filter(e => e.employerName?.indexOf(text.toLowerCase()) !== -1)\r\n .forEach(emp => set.add(emp));\r\n // Return the top 5 entries.\r\n return [...set].slice(0, limit);\r\n }\r\n async function fetchEmployerFromSFApi(uniqueIdentifier) {\r\n const res = await fetch(`/umbraco/api/employerssearchapi/getemployer?uniqueIdentifier=${uniqueIdentifier}`, {\r\n headers: {\r\n accept: 'application/json',\r\n Authorization: `Bearer ${accessToken}`,\r\n },\r\n });\r\n if (!res.ok) {\r\n return null;\r\n }\r\n const response = (await res.json());\r\n return response;\r\n }\r\n async function fetchEmployersFromSFApi(text, limit) {\r\n const res = await fetch(`/umbraco/api/employerssearchapi/getemployers?name=${encodeURIComponent(text)}&limit=${limit}`, {\r\n headers: {\r\n accept: 'application/json',\r\n Authorization: `Bearer ${accessToken}`,\r\n },\r\n });\r\n if (!res.ok) {\r\n return [];\r\n }\r\n const response = (await res.json());\r\n return response ?? [];\r\n }\r\n};\r\nexport function highlightSuggestionValue(suggestion) {\r\n const employerName = suggestion.employerName;\r\n const highlights = suggestion?.highlight ? suggestion?.highlight.split('-') : [];\r\n const highlightFrom = highlights.length === 2 ? parseInt(highlights[0]) : 0;\r\n const highlightTo = highlights.length === 2 ? parseInt(highlights[1]) : 0;\r\n return `${employerName?.substring(0, highlightFrom)}${employerName?.substring(highlightFrom, highlightTo)}${employerName?.substr(highlightTo)}`;\r\n}\r\nfunction employerNameComparison(employer, name) {\r\n if (!employer || !name?.length) {\r\n return false;\r\n }\r\n return (employer?.employerName?.toLowerCase().replace(' ', '') === name?.toLowerCase().replace(' ', ''));\r\n}\r\nfunction formatMessage(template, searchValue) {\r\n return template.replace('{searchValue}', searchValue);\r\n}\r\nexport default SearchForm;\r\n","import React, { useReducer, useContext, useEffect } from 'react';\r\nimport querystring from 'querystring';\r\nimport { useHabitat } from '@js/react/shared/HabitatContext';\r\nconst reducerFn = (state, action) => {\r\n switch (action.type) {\r\n case 'SET_EMPLOYEES': {\r\n return {\r\n ...state,\r\n employers: action.payload,\r\n };\r\n }\r\n case 'SET_PRODUCTS': {\r\n return {\r\n ...state,\r\n products: action.payload,\r\n };\r\n }\r\n case 'SET_SUBMITTED': {\r\n return {\r\n ...state,\r\n hasSubmitted: action.payload,\r\n };\r\n }\r\n case 'SET_SELECTED_EMPLOYEE': {\r\n const fields = {\r\n fullName: '',\r\n employerName: action.payload?.searchValue ?? '',\r\n emailAddress: '',\r\n contactNumber: '',\r\n marketing: false,\r\n };\r\n if (action.payload.product?.name) {\r\n fields[action.payload.product.name.replace(/\\s/g, '')] = true;\r\n }\r\n return {\r\n ...state,\r\n hasSelectedEmployer: true,\r\n selectedEmployer: action.payload?.employer,\r\n isValidEmployer: action.payload?.employer !== undefined,\r\n productError: action.payload?.productError ?? false,\r\n employerNotFound: action.payload?.employerNotFound ?? false,\r\n fieldData: { fields: fields },\r\n searchValue: action.payload?.searchValue ?? '',\r\n hasSubmitted: false,\r\n };\r\n }\r\n case 'SET_FIELD_DATA': {\r\n return {\r\n ...state,\r\n fieldData: action.payload,\r\n };\r\n }\r\n case 'SET_ACCESS_TOKEN': {\r\n return {\r\n ...state,\r\n accessToken: action.payload,\r\n };\r\n }\r\n default: {\r\n return state;\r\n }\r\n }\r\n};\r\nconst initialState = {\r\n employers: [],\r\n fieldData: {\r\n fields: {\r\n employerName: '',\r\n fullName: '',\r\n emailAddress: '',\r\n contactNumber: '',\r\n marketing: false,\r\n },\r\n },\r\n hasSelectedEmployer: false,\r\n hasSubmitted: false,\r\n isValidEmployer: false,\r\n productError: false,\r\n products: [],\r\n searchValue: '',\r\n accessToken: '',\r\n};\r\n// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\nconst EligibilityContext = React.createContext(undefined);\r\nexport const EligibilityProvider = ({ children }) => {\r\n const [state, dispatch] = useReducer(reducerFn, initialState);\r\n const { culturecode } = useHabitat();\r\n const query = {\r\n culturecode,\r\n };\r\n useEffect(() => {\r\n if (culturecode === 'uk') {\r\n getToken();\r\n }\r\n async function getToken() {\r\n const token = await fetchAccessToken();\r\n dispatch({\r\n type: 'SET_ACCESS_TOKEN',\r\n payload: token,\r\n });\r\n }\r\n }, []);\r\n useEffect(() => {\r\n if (culturecode === 'us') {\r\n getData();\r\n }\r\n async function getData() {\r\n const res = await fetch(`/umbraco/api/employersapi/getallemployers?${querystring.stringify(query)}`, {\r\n headers: { accept: 'application/json' },\r\n });\r\n if (!res.ok) {\r\n return;\r\n }\r\n const response = (await res.json());\r\n dispatch({\r\n type: 'SET_EMPLOYEES',\r\n payload: response,\r\n });\r\n }\r\n }, []);\r\n useEffect(() => {\r\n getData();\r\n async function getData() {\r\n const res = await fetch(`/umbraco/api/productsapi/getallproducts?${querystring.stringify(query)}`, {\r\n headers: { accept: 'application/json' },\r\n });\r\n if (!res.ok) {\r\n return;\r\n }\r\n const response = (await res.json());\r\n dispatch({\r\n type: 'SET_PRODUCTS',\r\n payload: response,\r\n });\r\n }\r\n }, []);\r\n return (React.createElement(EligibilityContext.Provider, { value: [state, dispatch] }, children));\r\n};\r\nexport function useEligibilityContext() {\r\n return useContext(EligibilityContext);\r\n}\r\nexport async function fetchAccessToken() {\r\n const res = await fetch(`/umbraco/api/employerssearchapi/auth/`, {\r\n headers: { accept: 'application/json' },\r\n });\r\n if (!res.ok) {\r\n return '';\r\n }\r\n const response = (await res.json());\r\n return response.access_token || '';\r\n}\r\n","import React from 'react';\r\nconst Button = ({ text, disabled, onClick }) => {\r\n return (React.createElement(\"button\", { className: \"btn ec-btn\", type: \"submit\", disabled: disabled ?? false, onClick: onClick },\r\n React.createElement(\"span\", { className: \"btn__text\" }, text),\r\n React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: \"12.777\", height: \"10.413\", viewBox: \"0 0 12.777 10.413\" },\r\n React.createElement(\"g\", { id: \"Group_3\", \"data-name\": \"Group 3\", transform: \"translate(-2.673 1.031)\" },\r\n React.createElement(\"path\", { id: \"arrow-line\", \"data-name\": \"Path 14\", d: \"M1.5,24H12.777\", transform: \"translate(1.923 -19.825)\", fill: \"none\", strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: \"1.5\" }),\r\n React.createElement(\"path\", { id: \"arrow-head\", \"data-name\": \"Path 15\", d: \"M1.769,13.216l4.094,4.145L1.769,21.507\", transform: \"translate(8.836 -13.186)\", fill: \"none\", strokeLinecap: \"round\", strokeLinejoin: \"round\", strokeWidth: \"1.5\" })))));\r\n};\r\nexport default Button;\r\n"],"sourceRoot":""}