{"version":3,"sources":["webpack:///./js/react/shared/Localize.jsx","webpack:///./js/react/cta-banner/queries/GetOptionsForArticles.gql","webpack:///./js/react/cta-banner/queries/GetOptionsForEvents.gql","webpack:///./js/react/cta-banner/queries/GetOptionsForProfiles.gql","webpack:///./js/utils/sanitizeResourceKey.js","webpack:///./js/react/cta-banner/CtaBannerSearch.jsx","webpack:///./js/react/cta-banner/CtaBannerSearchRoot.jsx"],"names":["Localize","_ref","id","otherProps","_objectWithoutProperties","sanitizedId","sanitizeResourceKey","defaultLocale","useLocales","react__WEBPACK_IMPORTED_MODULE_1___default","a","createElement","eo_locale__WEBPACK_IMPORTED_MODULE_0__","Text","_extends","defaultMessage","messages","propTypes","PropTypes","string","isRequired","module","exports","__webpack_require__","d","__webpack_exports__","SANITIZATION_REGEX","indexOf","result","exec","length","CtaBannerSearch","translator","useTranslator","_useHabitat","useHabitat","caption","ctaTarget","ctaText","ctaUrl","cultureCode","initialSearchText","searchText","targetUrl","type","query","toLowerCase","GetOptionsForArticlesQuery","GetOptionsForEventsQuery","GetOptionsForProfilesQuery","getQuery","data","useQuery","variables","_useState2","_slicedToArray","useState","setSearchText","_useState4","suggestions","setSuggestions","inputProps","className","placeholder","translate","value","onChange","_","newValue","onKeyDown","event","key","currentSuggestions","getSuggestions","window","location","href","url","concat","react_default","react","role","dist_default","getSuggestionValue","renderSuggestion","suggestion","_ref2","isHighlighted","classNames","suggestions__item-inner","selected","dangerouslySetInnerHTML","__html","theme","suggestionsList","onSuggestionSelected","_ref3","onSuggestionsClearRequested","onSuggestionsFetchRequested","_ref4","viewBox","xlinkHref","target","inputValue","trim","inputLength","allSuggestions","get","getPropertyName","filter","slice","_suggestion$name","_suggestion$title","name","title","client","GraphQLClient","CtaBannerSearchRoot","graphql_hooks","Provider","cta_banner_CtaBannerSearch","default"],"mappings":"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","file":"cta-banner-addbf23c43082e5e050e.js","sourcesContent":["import { EOLocale } from 'eo-locale';\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport useLocales from '@react/hooks/useLocales';\r\nimport sanitizeResourceKey from '@utils/sanitizeResourceKey';\r\n\r\nconst Localize = ({ id, ...otherProps }) => {\r\n const sanitizedId = sanitizeResourceKey(id);\r\n const { defaultLocale } = useLocales();\r\n const getDefaultMessage = () => {\r\n if (defaultLocale) {\r\n return defaultLocale.messages[sanitizedId] || sanitizedId;\r\n }\r\n return sanitizedId;\r\n };\r\n\r\n return ;\r\n};\r\n\r\nLocalize.propTypes = {\r\n id: PropTypes.string.isRequired,\r\n};\r\n\r\nexport default Localize;\r\n","module.exports = \"query GetOptionsForArticles {\\r\\n suggestArticles {\\r\\n id\\r\\n title\\r\\n url\\r\\n }\\r\\n}\\r\\n\"","module.exports = \"query GetOptionsForEvents {\\r\\n suggestEvents {\\r\\n id\\r\\n title\\r\\n url\\r\\n }\\r\\n}\\r\\n\"","module.exports = \"query GetOptionsForProfiles {\\r\\n suggestProfiles {\\r\\n id\\r\\n name\\r\\n url\\r\\n }\\r\\n}\\r\\n\"","export const SANITIZATION_REGEX = /(\\{\\$|\\$\\$)(.+)(\\$\\}|\\$\\$)/;\r\n\r\n/**\r\n * Sanitize the resource string key, handles removing localization macro syntax.\r\n * @param {String} id\r\n */\r\nexport default function sanitizeResourceKey(id) {\r\n // If id contains a space then it isn't a resource key.\r\n if (id.indexOf(' ') >= 0) {\r\n return id;\r\n }\r\n\r\n // If id doesn't contain a '$' then it isn't a macro.\r\n if (id.indexOf('$') === -1) {\r\n return id;\r\n }\r\n\r\n const result = SANITIZATION_REGEX.exec(id);\r\n\r\n if (result && result.length > 1) {\r\n return result[2];\r\n }\r\n\r\n return id;\r\n}\r\n","import classNames from 'classnames';\r\nimport { useTranslator } from 'eo-locale';\r\nimport { useQuery } from 'graphql-hooks';\r\nimport get from 'lodash/get';\r\nimport React, { useState, Fragment } from 'react';\r\nimport Autosuggest from 'react-autosuggest';\r\n\r\nimport GetOptionsForArticlesQuery from '@react/cta-banner/queries/GetOptionsForArticles.gql';\r\nimport GetOptionsForEventsQuery from '@react/cta-banner/queries/GetOptionsForEvents.gql';\r\nimport GetOptionsForProfilesQuery from '@react/cta-banner/queries/GetOptionsForProfiles.gql';\r\n\r\nimport { useHabitat } from '@react/shared/HabitatContext';\r\nimport Localize from '@react/shared/Localize';\r\n\r\nconst CtaBannerSearch = () => {\r\n const translator = useTranslator();\r\n\r\n const {\r\n caption,\r\n ctaTarget,\r\n ctaText,\r\n ctaUrl,\r\n cultureCode,\r\n searchText: initialSearchText,\r\n targetUrl,\r\n type,\r\n } = useHabitat();\r\n\r\n const query = getQuery(type);\r\n\r\n const { data } = useQuery(query, {\r\n variables: {\r\n cultureCode,\r\n },\r\n });\r\n\r\n const [searchText, setSearchText] = useState(initialSearchText);\r\n const [suggestions, setSuggestions] = useState([]);\r\n\r\n const inputProps = {\r\n className: 'form-input',\r\n placeholder: translator.translate('ff.search-cta.placeholder'),\r\n value: searchText,\r\n onChange: (_, { newValue }) => setSearchText(newValue),\r\n onKeyDown,\r\n };\r\n\r\n return (\r\n \r\n
\r\n
\r\n
\r\n

{caption}

\r\n\r\n \r\n\r\n \r\n\r\n \r\n
\r\n
\r\n
\r\n {ctaUrl?.length && ctaText?.length ? (\r\n
\r\n \r\n {ctaText}\r\n \r\n \r\n \r\n \r\n
\r\n ) : null}\r\n
\r\n );\r\n\r\n /**\r\n * Apply filtering to suggestion list.\r\n */\r\n function getSuggestions(value) {\r\n const inputValue = value.trim().toLowerCase();\r\n const inputLength = inputValue.length;\r\n\r\n const allSuggestions = get(data, getPropertyName(type));\r\n\r\n return inputLength === 0\r\n ? []\r\n : allSuggestions.filter(\r\n suggestion =>\r\n getSuggestionValue(suggestion)\r\n .toLowerCase()\r\n .slice(0, inputLength) === inputValue,\r\n );\r\n }\r\n\r\n /**\r\n * Get the suggestion value to filter and display.\r\n */\r\n function getSuggestionValue(suggestion) {\r\n if (suggestion.name?.length) {\r\n return suggestion.name;\r\n }\r\n\r\n if (suggestion.title?.length) {\r\n return suggestion.title;\r\n }\r\n\r\n return '(blank)';\r\n }\r\n\r\n /**\r\n * Render suggestion\r\n */\r\n function renderSuggestion(suggestion, { isHighlighted }) {\r\n const className = classNames({\r\n 'suggestions__item-inner': true,\r\n selected: isHighlighted,\r\n });\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n /**\r\n * Handle input keydown event.\r\n * @param {KeyboardEvent} event\r\n */\r\n function onKeyDown(event) {\r\n if (event.key !== 'Enter') {\r\n return;\r\n }\r\n\r\n // Ignore empty search text/\r\n if (!searchText?.length) {\r\n return;\r\n }\r\n\r\n // Check if there is only one suggestion currently.\r\n const currentSuggestions = getSuggestions(searchText);\r\n\r\n if (currentSuggestions?.length === 1) {\r\n window.location.href = currentSuggestions[0].url;\r\n return;\r\n }\r\n\r\n // Otherwise redirect to filtered results.\r\n window.location.href = `${targetUrl}?searchText=${searchText}`;\r\n }\r\n\r\n /** Handle suggestion selection */\r\n function onSuggestionSelected(_, { suggestion }) {\r\n window.location.href = suggestion.url;\r\n }\r\n\r\n /** Handle suggestions clear */\r\n function onSuggestionsClearRequested() {\r\n setSuggestions([]);\r\n }\r\n\r\n /** Handle suggestions fetch */\r\n function onSuggestionsFetchRequested({ value }) {\r\n setSuggestions(getSuggestions(value));\r\n }\r\n};\r\n\r\nCtaBannerSearch.propTypes = {};\r\n\r\nexport default CtaBannerSearch;\r\n\r\n/** Get property name to access data in GraphQL query result. */\r\nfunction getPropertyName(type) {\r\n switch (type.toLowerCase()) {\r\n case 'ff.articlepage':\r\n return 'suggestArticles';\r\n\r\n case 'ff.eventpage':\r\n return 'suggestEvents';\r\n\r\n case 'ff.profilepage':\r\n return 'suggestProfiles';\r\n\r\n default:\r\n return '';\r\n }\r\n}\r\n\r\n/** Get GraphQL query. */\r\nfunction getQuery(type) {\r\n switch (type.toLowerCase()) {\r\n case 'ff.articlepage':\r\n return GetOptionsForArticlesQuery;\r\n\r\n case 'ff.eventpage':\r\n return GetOptionsForEventsQuery;\r\n\r\n case 'ff.profilepage':\r\n return GetOptionsForProfilesQuery;\r\n\r\n default:\r\n return null;\r\n }\r\n}\r\n","import { ClientContext, GraphQLClient } from 'graphql-hooks';\r\nimport React from 'react';\r\n\r\nimport CtaBannerSearch from '@react/cta-banner/CtaBannerSearch';\r\n\r\nconst client = new GraphQLClient({\r\n url: '/api/graphql',\r\n});\r\n\r\nconst CtaBannerSearchRoot = () => (\r\n \r\n \r\n \r\n);\r\n\r\nexport default CtaBannerSearchRoot;\r\n"],"sourceRoot":""}