{"version":3,"sources":["assets/svg/icons/home.svg","components/breadcrumb/breadcrumb.tsx","components/_common/accordion/accordion.tsx","components/_common/form/select-input/select-input.tsx","components/_common/form/select-input/index.tsx","utilities/safe-parse.tsx","utilities/filter-solutions.tsx","components/search-empty-results/index.tsx","components/data-filter/data-filter-options/data-filter-option/data-filter-option.tsx","components/data-filter/data-filter-options/data-filter-options.tsx","components/data-filter/data-filter.tsx","components/data-sort-options/data-sort-options.tsx","assets/svg/icons/sort.svg","components/data-sort/data-sort.tsx","assets/svg/icons/close-icon.svg","components/data-controls-panel/lozenge-filter-options/lozenge-filter-options.tsx","components/data-controls-panel/data-filters-dropdown/data-filters-dropdown.tsx","components/tile-grid/tile-grid.tsx","components/dataset-search/dataset-search.tsx","components/_providers/search-provider/search-provider.tsx","components/product-finder-promo/product-finder-promo.tsx","components/product-preview-section/product-preview-section.tsx","components/data-controls-panel/data-controls-panel.tsx","routes/solutions/solutions.tsx","routes/solutions/solutions.container.tsx"],"names":["_extends","Object","assign","bind","target","i","arguments","length","source","key","prototype","hasOwnProperty","call","apply","this","_objectWithoutProperties","excluded","sourceKeys","keys","indexOf","_objectWithoutPropertiesLoose","getOwnPropertySymbols","sourceSymbolKeys","propertyIsEnumerable","_ref2","createElement","fillRule","clipRule","d","fill","_ref","svgRef","props","width","height","viewBox","ref","ForwardRef","forwardRef","homeText","getText","langCode","React","pathData","noMargin","sanitizeSuperScript","showTruncated","aria-label","className","cn","data-testid","itemScope","itemType","Link","to","concat","itemProp","title","onClick","event","Event","document","dispatchEvent","HomeIcon","map","pathItem","index","text","url","aria-current","current","total","undefined","superScriptSanitizer","value","truncatedValue","substring","lastSpaceIndex","lastIndexOf","getUpdatedPath","content","toString","spgVariables","SPGVariables","useStyles","makeStyles","root","border","expansionPanels","borderBottom","paddingRight","alignItems","icon","color","expandIcon","padding","position","SimpleExpansionPanel","children","_props$borderBottomTi","borderBottomTitle","closeIcon","_props$isInitiallyExp","isInitiallyExpanded","onChange","_props$disabled","disabled","_props$expandable","expandable","classes","linkListClass","headingClass","ExpandIcon","ExpandMoreIcon","CloseIcon","_React$useState","useState","IS_CRAWLER_REQUEST","_React$useState2","_slicedToArray","expanded","setExpanded","ExpansionPanel","ExpansionPanelSummary","ExpansionPanelDetails","theme","createStyles","errorMessage","palette","error","main","display","textAlign","fontSize","typography","pxToRem","defaultValue","controlledValue","errorObject","isDisabled","_ref$isFullWidth","isFullWidth","isRequired","label","name","options","autocomplete","defaultSelection","setValue","labelIdValue","FormControl","fullWidth","required","variant","InputLabel","id","Select","labelId","IconComponent","CaretDownIcon","input","FilledInput","inputProps","autoComplete","SelectDisplayProps","role","update","item","MenuItem","message","str","output","JSON","parse","console","filterSolutions","list","onlySolutions","filter","filterDatasetsSolutionsBlueprints","onlyBlueprints","mainContainer","minWidth","containerNew","maxHeight","overflowY","backgroundColor","borderRadius","container","row","colors","lightGray","endAdornment","marginRight","marginBottom","justifyContent","formField","margin","checkbox","radio","DataFilterOption","filterKey","filterItems","filterTitle","onUpdate","isRadio","showSearch","dataItems","open","state","setState","_React$useState3","_React$useState4","filterList","setFilterList","_React$useState5","_React$useState6","filterValue","setFilterValue","handleChange","isSearch","itemId","checked","itemIndex","findIndex","x","_objectSpread","useEffect","toLowerCase","includes","numberOfFilters","Accordion","Fragment","TextField","newValue","currentTarget","replace","newList","InputProps","InputAdornment","SearchIcon","InputLabelProps","shrink","FormGroup","FormControlLabel","control","Radio","checkedState","forEach","handleRadioChange","Checkbox","labelPlacement","clearAllText","applyText","filterText","filterOptions","getConfig","DataFilterOptions","applyFilters","filters","handleClearAll","onCloseContext","ModalContext","localFilters","cloneDeep","history","items","Divider","Button","hasIcon","preventDefault","type","DataFilter","modalIsOpen","setModalOpen","filterCount","FilterIcon","Modal","onClose","isFullScreen","window","innerWidth","sortBy","queryString","sortOptions","updateQueryString","data","sort","SortIcon","DataSortOptions","_ref3","style","enableBackground","xmlSpace","myStyles","flexWrap","spacing","LozengeFilterOptions","filterItem","some","filterIndex","updateItems","newUpdatedItems","_defineProperty","$set","newState","onDelete","filterTitles","DataFiltersDropDown","isFiltersActive","Filter","dataTileDefaults","showAll","getIntialLoad","breakPoints","numberOfTiles","TileGrid","_React$Component","_this","_classCallCheck","_possibleConstructorReturn","_getPrototypeOf","show","handleAddMore","_assertThisInitialized","_inherits","_createClass","prevState","additionalLoad","_this$state","_this$props","loading","maxShow","slice","SolutionTile","KeyPlatformService","solution","card","BlueprintTile","KeyMarketplaceBlueprint","dataProfile","DatasetTile","searchAllFilter","datasetsFilter","solutionsFilter","bluePrintFilter","queriesFilter","kenshoIconTooltip","textField","HtmlTooltip","withStyles","tooltip","white","black","maxWidth","grey80","Tooltip","searchValue","updateSearchValue","isSearching","placeholder","searchResults","lists","activeTab","onFilterChanged","urlPath","isLLMSearch","handleSearchSubmit","hideFilter","onFocusEvent","showInput","setShowInput","searchValueLocal","setSearchValueLocal","searchFilterState","setSearchFilterState","_React$useState7","_React$useState8","currPlaceholderIndex","setCurrPlaceholderIndex","searchCompRef","textFieldRef","selectBarRef","enabledBlueprintFlag","useSelector","get","user","isLoggedIn","_React$useState9","_React$useState10","currLogoutPlaceholderIndex","setCurrLogoutPlaceholderIndex","_React$useState11","_React$useState12","setMaxChars","_React$useState13","_React$useState14","maxCharErrMsg","setMaxCharErrMsg","_React$useState15","_React$useState16","isTextArea","setIsTextArea","_React$useState17","_React$useState18","isTabbed","setisTabbed","cursorPositionRef","_React$useState19","_React$useState20","isInitial","setIsInitial","localeCode","genAIPlaceholder","genAILogoutPlaceholder","globalSearchPage","location","href","toggleInput","setTimeout","inp","click","interval","setInterval","element","getElementById","classList","remove","add","prev","clearInterval","handleBlur","resetSearchValue","keyPressHandler","HTMLElement","getAttribute","Element","shiftKey","d5","focus","d1","d2","d3","stopPropagation","blpBtn","addEventListener","removeEventListener","setSelectionRange","tm","filterBtnIconFill","isActive","handleFilterChanged","filterState","clearTimeout","selTab","scrollableWrapper","getElementsByClassName","scrollLeft","getCount","result","res","timer","handleKeyEvent","keyCode","activeElement","estimatedMaxChars","Math","floor","offsetWidth","updateMaxChars","useClickAway","interactive","placement","arrow","enterTouchDelay","leaveTouchDelay","tabIndex","HtmlContent","html","KenshoIcon","Waypoint","onLeave","w","viewportTop","waypointTop","handleScroll","autoFocus","selectionStart","regex","multiline","onFocus","isContentWidthExceeded","context","getContext","inputElement","font","getComputedStyle","measureText","checkContentWidth","focusElement","l","activateTextAreaOrInput","onBlur","inputRef","Spinner","disable","e","ClearIcon","onKeyUp","SearchAllFilterIcon","DatasetsFilterIcon","SolutionsFilterIcon","BlueprintFilterIcon","aria-hidden","QueryLibraryFilterImage","Window","dataLayer","defaultSort","defaultSortQueryLibrary","defaultSortAllPages","debounceDuration","env","ENV","initialState","search","filterString","listLength","status","initialResponse","selectComponent","searchComponent","filterComponent","lozengeFilterComponent","mobileSelectComponent","mobileFilterComponent","hasGenAISearchError","sortedList","sortDescByDate","sortQLAsc","sortQLDesc","sortDesc","sortAsc","sortByEnhanced","a","b","sortIndex","parseFilters","filterArray","entries","filterKeyColumn","option","Array","push","_toConsumableArray","header","keyColumn","hydrateStateFromUrl","deepLinkedSearch","QST","getSearch","filterQuery","parsedFilterQuery","safeParse","getActiveTab","updateSearchUrl","debounce","dispatch","getSearchItem","setSearchItem","updateSortUrl","updateFiltersURL","updatedFilters","optionArray","filtersAsString","stringify","removeSearchItem","addIndex","arr","reducer","action","payload","parsedFilters","Error","logGAevent","resultsCount","searchContext","searchTerm","searchFilters","searchResultsCount","render","bookmarks","queryFilter","bookmarksLoaded","filterType","updateSearchType","_React$useReducer","_React$useReducer2","rootState","stateRS","userEmail","userInfo","Email","response","setIsLLMSearch","genAISubmit","setGenAISubmit","genAIResponse","setGenAIResponse","setHasGenAISearchError","feedback","setFeedback","clearFeedbackFlag","setClearFeedbackFlag","isValidUser","validInternalUser","tileNameList","tileNamesGt25CharsList","TileNames","getSearchStrategy","createSearchStrategyFactory","getSearchType","isDefault","searchText","trim","searchtype","SearchType","openSearch","searchStrategy","decide","llmSearch","handleSuccess","log","handleEmailError","sendEmail","errorBody","errorSubject","includeKensho","APIManager","KENSHOLLMEmailList","LLMEmailList","isSuccess","successCallback","sendSearchFailedEmail","reason","errorData","errorText","toUpperCase","handleGenAIError","isRequestManuallyCanceled","onGenAISearchClick","userType","query","user_type","getQueryData","searchQuestion","getLLMAccessToken","then","token","getChatiqSearchById","AccessToken","response_uuid","isCanceled","axios","isCancel","er","isReqCanceled","sendFeedbackFailedEmail","handleFeedback","flag","feedback_flag","sendChatiqSearchFeedbackById","clearFeedbackDoneNotify","onTabPressed","Store","flags","hideFooterFlag","SET_FLAGS","hydratedState","hasBookmarkFilter","f","bookmark","dataProfileCards","mapSearchResultToDataProfileCard","_source","dataSetIds","datasets","dataset","keyId","warn","solutionCards","mapSearchResultToSolution","solutionIds","solutions","hit","isType","mapSearchResultToBluePrint","searchResult","mapSearchResultsToQuery","queryIds","queries","qry","queryId","bluePrintCards","bluePrintIds","blueprints","blueprint","historyListener","HistoryInstance","listen","pathname","newSearch","newFilters","isReset","isNewSearch","resetFilters","defaultSortOptions","useLocation","SelectInput","isLLMSubmitted","authLists","authdata","hideFilterFlag","DatasetSearch","searchType","val","tab","isSubmit","clearAll","updateFilter","DataFiltersDropdown","oldFilters","parsedOldFilters","updateFilterURL","DataSort","linkText","linkUrl","CustomLink","gaLabel","linkTheme","isUpperCase","Carousel","ProductPreviewSection","description","_props$productPreview","productPreviewSectionConfig","carouselSettings","carouselOptions","DataControlsPanel","_React$PureComponent","Media","metaDataText","pageText","Solutions","fetchInitialSolutions","keyPage","startDate","pageTextsData","hasSolutions","hasFilters","noResultsSection","getPageTextsSection","noResultSection","noresults","datasetSection","productFinderPromo","HelmetManager","metaData","Breadcrumb","SearchProvider","DataSetControlsPanel","Loader","minHeight","SearchEmptyResults","noResultsFound","otherPages","isModified","DataTile","ProductFinderPromo","PageLoaded","connect","featuredData","bookmarkPreference","bookMarks","_bookmarkPreference$b","_bookmarkPreference$b2","bookmarkFiletr","catagories","category","vendor","datasetTiles","FormOrder","ds","find","filterdataset","KeyMarketplaceDataset","KeyMarketplaceDatasetBundle","KeyOnlinePage","keyPageIds","solutionsPage"],"mappings":"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","file":"static/js/solutions.23cbf35b.chunk.js","sourcesContent":["function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from \"react\";\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n  fillRule: \"evenodd\",\n  clipRule: \"evenodd\",\n  d: \"M5 12L12 6L19 12L17 12V15V18H13V15H11V18H7V15V12L5 12Z\",\n  fill: \"currentColor\"\n});\nvar SvgHome = function SvgHome(_ref) {\n  var svgRef = _ref.svgRef,\n    props = _objectWithoutProperties(_ref, [\"svgRef\"]);\n  return React.createElement(\"svg\", _extends({\n    width: 24,\n    height: 24,\n    viewBox: \"0 0 24 24\",\n    fill: \"none\",\n    ref: svgRef\n  }, props), _ref2);\n};\nvar ForwardRef = React.forwardRef(function (props, ref) {\n  return React.createElement(SvgHome, _extends({\n    svgRef: ref\n  }, props));\n});\nexport default __webpack_public_path__ + \"static/media/home.702186aa.svg\";\nexport { ForwardRef as ReactComponent };","import * as React from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport { cn, getText, superScriptSanitizer } from '../../helpers';\r\nimport { ReactComponent as HomeIcon } from '../../assets/svg/icons/home.svg';\r\n\r\nfunction isLast(current: number, total: number): boolean {\r\n    return current === total - 1;\r\n}\r\n\r\nconst homeText = getText('generic.home');\r\nconst langCode = getText('langCode');\r\n\r\nconst BreadCrumb = function PureComponent(props: BreadcrumbItemArray) {\r\n    const { pathData, noMargin, sanitizeSuperScript, showTruncated } = props;\r\n\r\n    const onHomeBtnClick = () => {\r\n        const event = new Event('HomeButtonClick');\r\n        document.dispatchEvent(event);\r\n    };\r\n\r\n    const getUpdatedPath = (value: string) => {\r\n        if (value.length > 75 && showTruncated) {\r\n            const truncatedValue = value.substring(0, 75);\r\n            const lastSpaceIndex = truncatedValue.lastIndexOf(' ');\r\n            return `${truncatedValue.substring(0, lastSpaceIndex)}...`;\r\n        }\r\n        return value;\r\n    };\r\n\r\n    return (\r\n        <nav aria-label=\"Breadcrumb\" className={cn('breadcrumb', 'page-section', { 'breadcrumb--no-margin': noMargin })} data-testid=\"breadcrumb\">\r\n            <div className=\"page-section__inner\">\r\n                <ol\r\n                    className=\"breadcrumb__list\"\r\n                    itemScope\r\n                    itemType=\"https://schema.org/BreadcrumbList\"\r\n                >\r\n                    <li className=\"breadcrumb__item breadcrumb__item--home\" data-testid=\"breadcrumb-item\">\r\n                        <Link to={`/${langCode}`} className=\"breadcrumb__link\" itemProp=\"url\" title={homeText} onClick={onHomeBtnClick}>\r\n                            <HomeIcon aria-label={homeText} />\r\n                        </Link>\r\n                    </li>\r\n                    {pathData &&\r\n                        pathData.map((pathItem: BreadcrumbItem, index: number) => (\r\n                            <li\r\n                                key={pathItem.text}\r\n                                className=\"breadcrumb__item\"\r\n                                data-testid=\"breadcrumb-item\"\r\n                                itemProp=\"itemListElement\"\r\n                                itemScope\r\n                                itemType=\"https://schema.org/ListItem\"\r\n                            >\r\n                                <Link\r\n                                    to={`/${langCode}${pathItem.url}`}\r\n                                    className=\"breadcrumb__link\"\r\n                                    itemProp=\"item\"\r\n                                    aria-current={isLast(index, pathData.length) ? 'page' : undefined}\r\n                                    title=\"\"\r\n                                >\r\n                                    <span itemProp=\"name\">{sanitizeSuperScript ? superScriptSanitizer(getUpdatedPath(pathItem.text)) : pathItem.text}</span>\r\n                                    <meta content={index.toString()} itemProp=\"position\" />\r\n                                </Link>\r\n                            </li>\r\n                        ))}\r\n                </ol>\r\n            </div>\r\n        </nav>\r\n    );\r\n};\r\n\r\nexport default React.memo(BreadCrumb);\r\n","import React from 'react';\r\nimport ExpansionPanel from '@material-ui/core/ExpansionPanel';\r\nimport ExpansionPanelSummary from '@material-ui/core/ExpansionPanelSummary';\r\nimport ExpansionPanelDetails from '@material-ui/core/ExpansionPanelDetails';\r\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport SPGVariables from '../../../utilities/spg-variables';\r\n\r\nimport { cn } from '../../../helpers';\r\n\r\nconst spgVariables = SPGVariables();\r\n\r\nconst useStyles = makeStyles(() => ({\r\n    root: {\r\n        border: 'none'\r\n    },\r\n    expansionPanels: {\r\n        borderBottom: '2px solid #000',\r\n        paddingRight: '2px',\r\n        alignItems: 'flex-start'\r\n    },\r\n    icon: {\r\n        color: 'black'\r\n    },\r\n    expandIcon: {\r\n        padding: '0',\r\n        position: 'relative'\r\n    }\r\n}));\r\n\r\nexport default function SimpleExpansionPanel(props: AccordionProps) {\r\n    const {\r\n        children,\r\n        title,\r\n        className,\r\n        borderBottomTitle = false,\r\n        expandIcon,\r\n        closeIcon,\r\n        isInitiallyExpanded = false,\r\n        onChange,\r\n        disabled = false,\r\n        expandable = true\r\n    } = props;\r\n    const classes = useStyles();\r\n    const linkListClass = borderBottomTitle ? 'accordion--link-list' : '';\r\n    const headingClass = borderBottomTitle ? 'subheading' : '';\r\n    const ExpandIcon = expandIcon || ExpandMoreIcon;\r\n    const CloseIcon = closeIcon || ExpandMoreIcon;\r\n    const [expanded, setExpanded] = React.useState<boolean>(!!spgVariables.IS_CRAWLER_REQUEST || isInitiallyExpanded);\r\n\r\n    const getChangedValue = () => {\r\n        if (onChange) {\r\n            onChange(!expanded);\r\n        }\r\n        setExpanded(expandable && !expanded);\r\n        return !expanded;\r\n    };\r\n\r\n    return (\r\n        <ExpansionPanel\r\n            disabled={disabled}\r\n            onChange={getChangedValue}\r\n            className={cn('accordion', className, linkListClass, classes.root)}\r\n            expanded={expanded}\r\n        >\r\n            <ExpansionPanelSummary\r\n                className={borderBottomTitle ? classes.expansionPanels : ''}\r\n                expandIcon={\r\n                    expandable &&\r\n                    (expanded ? (\r\n                        <CloseIcon className={cn(classes.icon, classes.expandIcon)} />\r\n                    ) : (\r\n                        <ExpandIcon className={cn(classes.icon, classes.expandIcon)} />\r\n                    ))\r\n                }\r\n            >\r\n                <h5 className={cn('accordion__heading', headingClass)}>{title}</h5>\r\n            </ExpansionPanelSummary>\r\n\r\n            <ExpansionPanelDetails>{children}</ExpansionPanelDetails>\r\n        </ExpansionPanel>\r\n    );\r\n}\r\n","/* eslint-disable react/display-name */\r\nimport * as React from 'react';\r\nimport FormControl from '@material-ui/core/FormControl';\r\nimport Select from '@material-ui/core/Select';\r\nimport InputLabel from '@material-ui/core/InputLabel';\r\nimport FilledInput from '@material-ui/core/FilledInput';\r\nimport MenuItem from '@material-ui/core/MenuItem';\r\nimport { createStyles, Theme, makeStyles } from '@material-ui/core/styles';\r\nimport { ReactComponent as CaretDownIcon } from '../../../../assets/svg/icons/caret-down.svg';\r\n\r\nconst useStyles = makeStyles((theme: Theme) => {\r\n    return createStyles({\r\n        errorMessage: {\r\n            color: theme.palette.error.main,\r\n            display: 'block',\r\n            textAlign: 'right',\r\n            fontSize: theme.typography.pxToRem(12)\r\n        }\r\n    });\r\n});\r\n\r\nconst selectInput = function SelectInput({\r\n    className,\r\n    defaultValue,\r\n    controlledValue,\r\n    errorObject,\r\n    isDisabled,\r\n    isFullWidth = true,\r\n    isRequired,\r\n    label,\r\n    name,\r\n    onChange,\r\n    options,\r\n    autocomplete\r\n}: SelectInputProps) {\r\n    const classes = useStyles(0);\r\n    const defaultSelection = (defaultValue !== undefined ? defaultValue : '');\r\n    const [value, setValue] = React.useState<number | string>(defaultSelection);\r\n    const labelIdValue = `combo-label-${name}`;\r\n\r\n    function handleChange(event: React.ChangeEvent<{ name?: string | undefined; value: unknown }>) {\r\n        const update: string = event.target.value as string;\r\n        setValue(update);\r\n        onChange(name, update);\r\n    }\r\n\r\n    return (\r\n        <FormControl\r\n            className={className}\r\n            disabled={isDisabled}\r\n            error={errorObject !== undefined}\r\n            fullWidth={isFullWidth}\r\n            required={isRequired}\r\n            variant=\"filled\"\r\n        >\r\n            <InputLabel id={labelIdValue}>{label}</InputLabel>\r\n            <Select\r\n                labelId={labelIdValue}\r\n                IconComponent={CaretDownIcon}\r\n                input={\r\n                    <FilledInput\r\n                        name={name}\r\n                        id={name}\r\n                        inputProps={{\r\n                            'data-testid': name\r\n                        }}\r\n                        autoComplete={autocomplete}\r\n                    />\r\n                }\r\n                SelectDisplayProps={{\r\n                    role: 'combobox',\r\n                    'aria-required': isRequired,\r\n                    'aria-expanded': false,\r\n                }}\r\n                onChange={handleChange}\r\n                value={controlledValue || value}\r\n                autoComplete={autocomplete}\r\n            >\r\n                {options.map((item: StringNumberIDObject) => (\r\n                    <MenuItem key={item.id} value={item.id} disabled={item.disabled}>\r\n                        {item.text}\r\n                    </MenuItem>\r\n                ))}\r\n            </Select>\r\n            {errorObject && <span className={classes.errorMessage}>{errorObject.message}</span>}\r\n        </FormControl>\r\n    );\r\n};\r\n\r\nexport default React.memo(selectInput);\r\n","export { default } from './select-input';\r\n","export default (str: string) => {\r\n    let output: undefined | AnonymousObject | AnonymousObject[];\r\n    try {\r\n        output = JSON.parse(str);\r\n    } catch (error) {\r\n        console.error('safe-parse', error);\r\n    }\r\n    return output;\r\n};\r\n","export const filterSolutions = (list: (DataProfileCard | APISolution | APIBlueprint)[], onlySolutions = false) => {\r\n    return list.filter((item: DataProfileCard | APISolution | APIBlueprint) => {\r\n        return 'MktplaceSolutionName' in item === onlySolutions;\r\n    });\r\n};\r\n\r\nexport const filterDatasetsSolutionsBlueprints = (list: (DataProfileCard | APISolution | APIBlueprint)[], onlySolutions = false, onlyBlueprints = false) => {\r\n    return list.filter((item: DataProfileCard | APISolution | APIBlueprint) => {\r\n        if (onlySolutions && !onlyBlueprints) {\r\n            return 'MktplaceSolutionName' in item === onlySolutions;\r\n        }\r\n        if (!onlySolutions && onlyBlueprints) {\r\n            return 'MarketplaceBlueprintName' in item === onlyBlueprints;\r\n        }\r\n        return 'MarketplaceBlueprintName' in item === onlyBlueprints && 'MktplaceSolutionName' in item === onlySolutions;\r\n    });\r\n};\r\n","import './search-empty-results.style.scss';\r\n\r\nexport { default } from './search-empty-results';\r\n","/* eslint-disable react/jsx-wrap-multilines */\r\nimport React from 'react';\r\nimport Checkbox from '@material-ui/core/Checkbox';\r\nimport Radio from '@material-ui/core/Radio';\r\nimport { TextField, InputAdornment } from '@material-ui/core';\r\n\r\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\r\nimport FormGroup from '@material-ui/core/FormGroup';\r\nimport { createStyles, makeStyles } from '@material-ui/core/styles';\r\nimport Accordion from '../../../_common/accordion';\r\nimport { colors } from '../../../../theme/theme';\r\nimport { cn } from '../../../../helpers';\r\nimport { ReactComponent as SearchIcon } from '../../../../assets/svg/icons/search-grey.svg';\r\n\r\nconst useStyles = makeStyles(\r\n    createStyles({\r\n        mainContainer: {\r\n            minWidth: '250px',\r\n            width: '100%'\r\n        },\r\n        containerNew: {\r\n            width: '100%',\r\n            maxHeight: '560px', // 600px\r\n            paddingRight: '22px',\r\n            overflowY: 'auto',\r\n            '&::-webkit-scrollbar': {\r\n                width: '0.4em'\r\n            },\r\n            '&::-webkit-scrollbar-thumb': {\r\n                backgroundColor: '#4169e1',\r\n                borderRadius: '10px'\r\n            }\r\n        },\r\n        container: {\r\n            minWidth: '250px',\r\n            width: '100%'\r\n        },\r\n        row: {\r\n            borderBottom: `1px solid ${colors.lightGray}`,\r\n            padding: '15px 0',\r\n            '&:last-child': {\r\n                borderBottom: 0\r\n            }\r\n        },\r\n        endAdornment: {\r\n            marginRight: '8px',\r\n            marginBottom: '15px',\r\n            display: 'flex',\r\n            alignItems: 'center',\r\n            justifyContent: 'center',\r\n            height: '100%'\r\n        },\r\n        formField: {\r\n            justifyContent: 'space-between',\r\n            margin: '0',\r\n            width: '100%'\r\n        },\r\n        checkbox: {\r\n            padding: '0'\r\n        },\r\n        radio: {\r\n            padding: '0'\r\n        }\r\n    })\r\n);\r\n\r\n\r\nconst DataFilterOption = ({ filterKey, filterItems, filterTitle, onUpdate, isRadio, showSearch }: FilterProps) => {\r\n    const [state, setState] = React.useState({\r\n        dataItems: filterItems,\r\n        open: false\r\n    });\r\n\r\n    const [filterList, setFilterList] = React.useState<FilterCheckBoxItem[]>([]);\r\n    const [filterValue, setFilterValue] = React.useState<string>('');\r\n\r\n    const handleChange = (index: number, isSearch: boolean, itemId: string) => (event: React.ChangeEvent<HTMLElement>, checked: boolean) => {\r\n        const { dataItems } = state;\r\n        let itemIndex = index;\r\n        if (isSearch && filterValue) {\r\n            itemIndex = dataItems.findIndex(x => x.name === itemId);\r\n        }\r\n        dataItems[itemIndex].checked = checked;\r\n        setState({ ...state, dataItems });\r\n        onUpdate(dataItems, filterKey);\r\n    };\r\n\r\n    const handleRadioChange = (index: number) => {\r\n        const { dataItems } = state;\r\n        const checkedState = dataItems[index].checked;\r\n\r\n        dataItems.forEach(item => {\r\n            item.checked = false;\r\n        });\r\n        dataItems[index].checked = !checkedState;\r\n        setState({ ...state, dataItems });\r\n        onUpdate(dataItems, filterKey);\r\n    };\r\n\r\n    const onValueChange = (event: React.ChangeEvent) => {\r\n        const { dataItems } = state;\r\n        const { value } = event.currentTarget as HTMLInputElement;\r\n        const regex = /^\\s+/g;\r\n        const newValue = value.replace(regex, '');\r\n        const newList = dataItems.filter((item => item.name.toLowerCase().includes(newValue.toLowerCase())));\r\n        setFilterValue(newValue);\r\n        setFilterList(newList);\r\n    };\r\n\r\n    React.useEffect(() => {\r\n        const { dataItems } = state;\r\n        if (filterValue) {\r\n            setFilterList(dataItems.filter(item => item.name.toLowerCase().includes(filterValue.toLowerCase())));\r\n        }\r\n        setFilterList(dataItems);\r\n    }, [filterItems]);\r\n\r\n    const { dataItems } = state;\r\n    const numberOfFilters = dataItems.filter(item => item.checked).length;\r\n    const title = numberOfFilters > 0 ? `${filterTitle} (${numberOfFilters})` : filterTitle;\r\n    const classes = useStyles(0);\r\n\r\n    const dataInputProps = {\r\n        'data-testid': 'data-filter-option-dataset-search',\r\n        'aria-label': 'data filter option dataset search'\r\n    };\r\n\r\n    return (\r\n        <div className=\"page-section__inner\">\r\n            <Accordion title={title}>\r\n                <div className={classes.container}>\r\n                    { showSearch && (\r\n                        <>\r\n                            <TextField\r\n                                id=\"data-filter-option-dataset-search\"\r\n                                label=\"Search by...\"\r\n                                autoComplete=\"off\"\r\n                                onChange={onValueChange}\r\n                                value={filterValue}\r\n                                InputProps={{\r\n                                    endAdornment: <InputAdornment position=\"end\" className={classes.endAdornment}><SearchIcon /></InputAdornment>,\r\n                                    ...dataInputProps\r\n                                }}\r\n                                InputLabelProps={{ shrink: true }}\r\n                                className=\"data-filter-option__textfield\"\r\n                            />\r\n                        </>\r\n                    )}\r\n                    <div className={cn(showSearch ? classes.containerNew : classes.container)}>\r\n                        {filterList.map((item, index) => (\r\n                            <FormGroup row key={item.name} className={classes.row}>\r\n                                <FormControlLabel\r\n                                    key={item.name}\r\n                                    className={classes.formField}\r\n                                    control={isRadio ? <Radio\r\n                                        key={item.name}\r\n                                        checked={item.checked}\r\n                                        onClick={() => handleRadioChange(index)}\r\n                                        value={item.name}\r\n                                        name={item.name}\r\n                                        className={classes.radio}\r\n                                        color=\"primary\"\r\n                                    /> : <Checkbox\r\n                                        key={item.name}\r\n                                        checked={item.checked}\r\n                                        onChange={handleChange(index, showSearch || false, item.name)}\r\n                                        value={item.name}\r\n                                        name={item.name}\r\n                                        className={classes.checkbox}\r\n                                        color=\"primary\"\r\n                                    />}\r\n                                    label={item.name}\r\n                                    labelPlacement=\"start\"\r\n                                    data-testid={`filter-item-${item.id}`}\r\n                                />\r\n                            </FormGroup>\r\n                        ))}\r\n                    </div>\r\n                </div>\r\n            </Accordion>\r\n        </div>\r\n    );\r\n};\r\nexport default DataFilterOption;\r\n","import * as React from 'react';\r\nimport Divider from '@material-ui/core/Divider';\r\nimport { getText, cloneDeep, getConfig } from '../../../helpers';\r\nimport DataFilterOption from './data-filter-option';\r\nimport Button from '../../_common/button';\r\nimport { ModalContext } from '../../_common/modal/modal';\r\n\r\nconst clearAllText = getText('generic.clearAll');\r\nconst applyText = getText('generic.apply');\r\nconst filterText = getText('generic.filter');\r\nconst filterOptions = getConfig('components.filterOptions');\r\n\r\nconst DataFilterOptions = ({ applyFilters, filters, handleClearAll }: DataFiltersProps) => {\r\n    const onCloseContext = React.useContext(ModalContext);\r\n\r\n    const localFilters = cloneDeep(filters);\r\n\r\n    const onClearAll = (event: React.SyntheticEvent) => {\r\n        event.preventDefault();\r\n        handleClearAll();\r\n        onCloseContext();\r\n    };\r\n\r\n    const onApply = (event: React.SyntheticEvent) => {\r\n        event.preventDefault();\r\n        applyFilters(localFilters);\r\n        onCloseContext();\r\n    };\r\n\r\n    const onUpdate = () => {\r\n        // const onUpdate = (filterItems: FilterCheckBoxItem[], filterTitle: string) => {\r\n        // console.log(filterItems, filterTitle);\r\n    };\r\n\r\n    return (\r\n        <div className=\"data-filter\" data-testid=\"data-filter\">\r\n            <div className=\"page-section\">\r\n                <div className=\"collapse data-filter__title-container page-section__inner\">\r\n                    <h5 className=\"data-filter__title\">{filterText}</h5>\r\n                </div>\r\n                <div className=\"data-filter__container\">\r\n                    {localFilters.map((filter: FilterObjects) => {\r\n                        return (\r\n                            <div key={filter.filterKey}>\r\n                                <div className=\"data-filter__options\">\r\n                                    <DataFilterOption\r\n                                        isRadio={filter.filterKey === filterOptions.history.filterKey}\r\n                                        filterKey={filter.filterKey}\r\n                                        filterTitle={getText(`pages.dataSets.filterOptions.${filter.filterKey}.text`)}\r\n                                        filterItems={filter.items}\r\n                                        onUpdate={onUpdate}\r\n                                        showSearch={filter.showSearch}\r\n                                    />\r\n                                </div>\r\n                                <Divider />\r\n                            </div>\r\n                        );\r\n                    })}\r\n                </div>\r\n                <div className=\"data-filter-button-panel\">\r\n                    <Button\r\n                        text={applyText}\r\n                        hasIcon={false}\r\n                        className=\"data-filter__apply\"\r\n                        theme=\"primary\"\r\n                        isFullWidth\r\n                        onClick={onApply}\r\n                    />\r\n                    <button\r\n                        type=\"button\"\r\n                        className=\"data-filter__clear-all links--secondary\"\r\n                        onClick={onClearAll}\r\n                        data-testid=\"data-filter-clear-all\"\r\n                    >\r\n                        {clearAllText}\r\n                    </button>\r\n                </div>\r\n            </div>\r\n        </div>\r\n    );\r\n};\r\n\r\nexport default DataFilterOptions;\r\n","import * as React from 'react';\r\n\r\nimport Modal from '../_common/modal';\r\nimport DataFilterOptions from './data-filter-options';\r\nimport { ReactComponent as FilterIcon } from '../../assets/svg/icons/filter.svg';\r\nimport { getText } from '../../helpers';\r\n\r\nconst filter = getText('generic.filter');\r\nexport default function DataFilter(props: DataFiltersProps) {\r\n    const [modalIsOpen, setModalOpen] = React.useState<boolean>(false);\r\n\r\n    const { filterCount, filters } = props;\r\n\r\n    return (filters && filters.length > 0) ? (\r\n\r\n        <>\r\n            <button\r\n                className=\"button--select-control data-controls__button\"\r\n                type=\"button\"\r\n                onClick={() => setModalOpen(true)}\r\n            >\r\n                <FilterIcon />\r\n                {filterCount > 0 ? `${filter} (${filterCount})` : filter}\r\n            </button>\r\n            <Modal\r\n                open={modalIsOpen}\r\n                onClose={() => setModalOpen(false)}\r\n                isFullScreen={window.innerWidth < 1024}\r\n            >\r\n                <DataFilterOptions {...props} />\r\n            </Modal>\r\n        </>\r\n    ) : <></>;\r\n}\r\n","import * as React from 'react';\r\nimport { cn, getText } from '../../helpers';\r\n\r\nconst sortBy = getText('generic.sortBy');\r\nconst DataSortOptions = function DataSortOptions(props: DataSortOptionsProps) {\r\n    const { queryString, sortOptions, updateQueryString } = props;\r\n\r\n    return (\r\n        <div className=\"data-sort__options\">\r\n            <div className=\"page-section\">\r\n                <div className=\"collapse data-sort__title-container page-section__inner\">\r\n                    <h5 className=\"data-sort__title\">{sortBy}</h5>\r\n                </div>\r\n                <div className=\"page-section__inner\">\r\n                    {sortOptions.map(data => (\r\n                        <button\r\n                            type=\"button\"\r\n                            key={data.text}\r\n                            className={cn('data-sort__option', { 'data-sort__option--active': queryString === data.id })}\r\n                            title={data.text}\r\n                            onClick={() => updateQueryString('sort', data.id)}\r\n                        >\r\n                            {data.text}\r\n                        </button>\r\n                    ))}\r\n                </div>\r\n            </div>\r\n        </div>\r\n    );\r\n};\r\n\r\nexport default React.memo(DataSortOptions);\r\n","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from \"react\";\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n  fillRule: \"evenodd\",\n  clipRule: \"evenodd\",\n  d: \"M11 9V11H9H5H3V9V5V3H5H9H11V5V9ZM9 5H5V9H9V5ZM11 19V21H9H5H3V19V15V13H5H9H11V15V19ZM9 15H5V19H9V15ZM16 3V16H13.5361L17.0002 21.25L20.4643 16H18V3H16Z\",\n  fill: \"currentColor\"\n});\nvar SvgSort = function SvgSort(_ref) {\n  var svgRef = _ref.svgRef,\n    props = _objectWithoutProperties(_ref, [\"svgRef\"]);\n  return React.createElement(\"svg\", _extends({\n    width: 24,\n    height: 24,\n    viewBox: \"0 0 24 24\",\n    fill: \"none\",\n    ref: svgRef\n  }, props), _ref2);\n};\nvar ForwardRef = React.forwardRef(function (props, ref) {\n  return React.createElement(SvgSort, _extends({\n    svgRef: ref\n  }, props));\n});\nexport default __webpack_public_path__ + \"static/media/sort.624a8cc7.svg\";\nexport { ForwardRef as ReactComponent };","import * as React from 'react';\r\nimport Modal from '../_common/modal';\r\nimport DataSortOptions from '../data-sort-options';\r\nimport { ReactComponent as SortIcon } from '../../assets/svg/icons/sort.svg';\r\nimport { getText } from '../../helpers';\r\n\r\nconst sort = getText('generic.sort');\r\n\r\nfunction DataSort(props: DataSortProps) {\r\n    const [modalIsOpen, setModalOpen] = React.useState<boolean>(false);\r\n    const { queryString, updateQueryString, sortOptions, disabled } = props;\r\n\r\n    return (\r\n        <>\r\n            <button className=\"button--select-control data-controls__button\" type=\"button\" onClick={() => setModalOpen(true)} disabled={disabled}>\r\n                <SortIcon />\r\n                {sort}\r\n            </button>\r\n            <Modal open={modalIsOpen} onClose={() => setModalOpen(false)} isFullScreen={window.innerWidth < 1024}>\r\n                <DataSortOptions\r\n                    queryString={queryString}\r\n                    updateQueryString={(name: string, id: string) => {\r\n                        setModalOpen(false);\r\n                        updateQueryString(name, id);\r\n                    }}\r\n                    sortOptions={sortOptions}\r\n                />\r\n            </Modal>\r\n        </>\r\n    );\r\n}\r\n\r\nexport default React.memo(DataSort);\r\n","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from \"react\";\nvar _ref2 = /*#__PURE__*/React.createElement(\"g\", {\n  id: \"info\"\n});\nvar _ref3 = /*#__PURE__*/React.createElement(\"g\", {\n  id: \"icons\"\n}, React.createElement(\"path\", {\n  d: \"M14.8,12l3.6-3.6c0.8-0.8,0.8-2,0-2.8c-0.8-0.8-2-0.8-2.8,0L12,9.2L8.4,5.6c-0.8-0.8-2-0.8-2.8,0   c-0.8,0.8-0.8,2,0,2.8L9.2,12l-3.6,3.6c-0.8,0.8-0.8,2,0,2.8C6,18.8,6.5,19,7,19s1-0.2,1.4-0.6l3.6-3.6l3.6,3.6   C16,18.8,16.5,19,17,19s1-0.2,1.4-0.6c0.8-0.8,0.8-2,0-2.8L14.8,12z\",\n  id: \"exit\"\n}));\nvar SvgCloseIcon = function SvgCloseIcon(_ref) {\n  var svgRef = _ref.svgRef,\n    props = _objectWithoutProperties(_ref, [\"svgRef\"]);\n  return React.createElement(\"svg\", _extends({\n    style: {\n      width: 24,\n      enableBackground: \"new 0 0 24 24\"\n    },\n    viewBox: \"0 0 24 24\",\n    xmlSpace: \"preserve\",\n    ref: svgRef\n  }, props), _ref2, _ref3);\n};\nvar ForwardRef = React.forwardRef(function (props, ref) {\n  return React.createElement(SvgCloseIcon, _extends({\n    svgRef: ref\n  }, props));\n});\nexport default __webpack_public_path__ + \"static/media/close-icon.a852bd91.svg\";\nexport { ForwardRef as ReactComponent };","/* eslint-disable implicit-arrow-linebreak */\r\nimport * as React from 'react';\r\nimport { createStyles, Theme, makeStyles } from '@material-ui/core/styles';\r\nimport update from 'immutability-helper';\r\nimport { ReactComponent as CloseIcon } from '../../../assets/svg/icons/close-icon.svg';\r\n\r\nconst myStyles = makeStyles((theme: Theme) => {\r\n    return createStyles({\r\n        root: {\r\n            display: 'flex',\r\n            border: 'none',\r\n            flexWrap: 'wrap',\r\n            padding: theme.spacing(0.5)\r\n        }\r\n    });\r\n});\r\n\r\nconst LozengeFilterOptions = ({ filters, onUpdate }: LozengeFilterOptionsProps) => {\r\n    const classes = myStyles(0);\r\n\r\n    const onDelete = (filterIndex: number, index: number) => {\r\n        const updateItems = filters[filterIndex].items;\r\n        const newUpdatedItems = update(updateItems, { [index]: { checked: { $set: false } } });\r\n        const newState = update(filters, { [filterIndex]: { items: { $set: newUpdatedItems } } });\r\n        onUpdate(newState);\r\n    };\r\n\r\n    return (\r\n        <>\r\n            {filters.filter((filterItem: FilterObjects) => filterItem.items.some(item => item.checked === true)).length > 0 && (\r\n                <div className={classes.root}>\r\n                    {filters.map((filterItem, filterIndex) => {\r\n                        return filterItem.items.map((item, index) => {\r\n                            return (\r\n                                item.checked && (\r\n                                    <div className=\"lozenge-filter-options\" key={item.name}>\r\n                                        <div className=\"lozenge-filter-options__text\"> {item.name} </div>\r\n                                        <div className=\"lozenge-filter-options__close\">\r\n                                            <CloseIcon onClick={() => onDelete(filterIndex, index)} />\r\n                                        </div>\r\n                                    </div>\r\n                                )\r\n                            );\r\n                        });\r\n                    })}\r\n                </div>\r\n            )}\r\n        </>\r\n    );\r\n};\r\n\r\nexport default LozengeFilterOptions;\r\n","import * as React from 'react';\r\n\r\nimport Filter from '../../_common/filter';\r\nimport { getText, getConfig } from '../../../helpers';\r\n\r\nconst clearAllText = getText('generic.clearAll');\r\nconst filterTitles = getText('pages.dataSets.filterOptions');\r\nconst filterOptions = getConfig('components.filterOptions');\r\n\r\nconst DataFiltersDropDown = ({ filters, onUpdate, handleClearAll, isFiltersActive }: DataFiltersDropdownProps) => {\r\n    const onClearAll = (event: React.SyntheticEvent) => {\r\n        event.preventDefault();\r\n        handleClearAll();\r\n    };\r\n    return (\r\n        <>\r\n            <div className=\"data-filters-dropdown\">\r\n                {filters.map((filter: FilterObjects) => (\r\n                    <Filter\r\n                        isRadio={filter.filterKey === filterOptions.history.filterKey}\r\n                        key={filter.filterKey}\r\n                        filterKey={filter.filterKey}\r\n                        filterTitle={filterTitles[filter.filterKey].text}\r\n                        filterItems={filter.items}\r\n                        onUpdate={onUpdate}\r\n                        showSearch={filter.showSearch}\r\n                    />\r\n                ))}\r\n                {isFiltersActive && (\r\n                    <button type=\"button\" className=\"button data-filters-dropdown__clear-all\" onClick={onClearAll} data-testid=\"data-filters-dropdown-clear-all\">\r\n                        {clearAllText}\r\n                    </button>\r\n                )}\r\n            </div>\r\n        </>\r\n    );\r\n};\r\nexport default DataFiltersDropDown;\r\n","import * as React from 'react';\r\nimport Button from '../_common/button';\r\nimport { cn, getText, getConfig } from '../../helpers';\r\n\r\nimport DatasetTile from '../tile/dataset-tile';\r\nimport SolutionTile from '../tile/solution-tile';\r\nimport BlueprintTile from '../tile/blueprint-tile';\r\n\r\nconst dataTileDefaults = getConfig('components.tile-grid');\r\nconst showAll = getText('generic.showAll');\r\n\r\nfunction getIntialLoad() {\r\n    const { breakPoints } = dataTileDefaults;\r\n    const width = window.innerWidth;\r\n    let numberOfTiles = breakPoints[0].value;\r\n    for (let i = 0; i < breakPoints.length; i++) {\r\n        if (breakPoints[i].minWidth > width) break;\r\n        numberOfTiles = breakPoints[i].value;\r\n    }\r\n    return numberOfTiles;\r\n}\r\n\r\nexport default class TileGrid extends React.Component<TileGridProps, TileGridState> {\r\n    private constructor(props: TileGridProps) {\r\n        super(props);\r\n        const { list } = this.props;\r\n        this.state = {\r\n            show: getIntialLoad(),\r\n            total: list.length,\r\n            update: false\r\n        };\r\n        this.handleAddMore = this.handleAddMore.bind(this);\r\n    }\r\n\r\n    static getDerivedStateFromProps(props: TileGridProps, state: TileGridState) {\r\n        if (state.update) {\r\n            return {\r\n                show: state.show,\r\n                update: false\r\n            };\r\n        }\r\n        return {\r\n            show: getIntialLoad(),\r\n            total: props.list.length,\r\n            update: false\r\n        };\r\n    }\r\n\r\n    private handleAddMore(event: React.SyntheticEvent) {\r\n        event.preventDefault();\r\n        this.setState((prevState: TileGridState) => {\r\n            return {\r\n                show: prevState.show + dataTileDefaults.additionalLoad,\r\n                update: true\r\n            };\r\n        });\r\n    }\r\n\r\n    public render() {\r\n        const { show, total } = this.state;\r\n        const { list, loading } = this.props;\r\n        const maxShow = show > total ? total : show;\r\n        return (\r\n            <section className=\"page-section\">\r\n                <div className={cn('tile-grid', 'page-section__inner', { 'tile-grid--loading': loading })}>\r\n                    {/* <p>{`Showing ${maxShow} of ${total}`}</p> */}\r\n                    <div className=\"tile-grid__wrapper\">\r\n                        {list.slice(0, show).map((item: DataProfileCard | APISolution | APIBlueprint) => {\r\n                            if ('MktplaceSolutionName' in item) {\r\n                                return <SolutionTile key={item.KeyPlatformService} solution={item} />;\r\n                            } if ('KeyMarketplaceBlueprint' in item) {\r\n                                const card = item as APIBlueprint;\r\n                                return <BlueprintTile key={card.KeyMarketplaceBlueprint} dataProfile={card} />;\r\n                            }\r\n                            return (\r\n                                <DatasetTile key={item.id + item.name} dataProfile={item} /> // appended name in id to handle conflict between bundle and dataset\r\n                            );\r\n                        })}\r\n                        {/* list of dummy items to achieve correct last items stretching */}\r\n                        <div className=\"tile dummy-tile\" />\r\n                        <div className=\"tile dummy-tile\" />\r\n                        <div className=\"tile dummy-tile\" />\r\n                    </div>\r\n                    {maxShow < total && (\r\n                        <Button\r\n                            text={showAll}\r\n                            theme=\"secondary\"\r\n                            className=\"tile-grid__show-more\"\r\n                            isFullWidth\r\n                            onClick={this.handleAddMore}\r\n                            data-testid=\"showmore-button\"\r\n                        />\r\n                    )}\r\n                </div>\r\n            </section>\r\n        );\r\n    }\r\n}\r\n","/* eslint-disable no-nested-ternary */\r\nimport * as React from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport { Waypoint } from 'react-waypoint';\r\nimport { makeStyles, withStyles, Theme } from '@material-ui/core/styles';\r\nimport Tooltip from '@material-ui/core/Tooltip';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport { useClickAway } from 'react-use';\r\nimport { colors } from '../../theme/theme';\r\nimport { cn, getConfig, getText, get } from '../../helpers';\r\nimport HtmlContent from '../_common/html-content';\r\nimport { ReactComponent as SearchIcon } from '../../assets/svg/icons/search.svg';\r\nimport Spinner from '../_common/spinner';\r\nimport { ReactComponent as ClearIcon } from '../../assets/svg/icons/close.svg';\r\nimport { ReactComponent as SearchAllFilterIcon } from '../../assets/svg/icons/search-all-filter.svg';\r\nimport { ReactComponent as DatasetsFilterIcon } from '../../assets/svg/icons/datasets-filter.svg';\r\nimport { ReactComponent as SolutionsFilterIcon } from '../../assets/svg/icons/solutions-filter.svg';\r\nimport { ReactComponent as BlueprintFilterIcon } from '../../assets/svg/icons/blueprint-filter.svg';\r\nimport { ReactComponent as KenshoIcon } from '../../assets/svg/icons/kensho.svg';\r\nimport { filterDatasetsSolutionsBlueprints } from '../../utilities/filter-solutions';\r\nimport { ReactComponent as CaretRightIcon } from '../../assets/svg/icons/caret-right.svg';\r\nimport { ReactComponent as QueryLibraryFilterImage } from '../../assets/svg/icons/query-library.svg';\r\n\r\nconst searchAllFilter = getText('globalSearchFilters.searchAllText');\r\nconst datasetsFilter = getText('globalSearchFilters.DatasetsText');\r\nconst solutionsFilter = getText('globalSearchFilters.SolutionsText');\r\nconst bluePrintFilter = getText('globalSearchFilters.BlueprintsText');\r\nconst queriesFilter = getText('globalSearchFilters.QueriesText');\r\nconst kenshoIconTooltip = getText('pages.llm.tooltip');\r\n\r\nconst useStyles = makeStyles(() => ({\r\n    textField: {\r\n        '& :before': {\r\n            content: 'none'\r\n        },\r\n        '& :after': {\r\n            content: 'none'\r\n        }\r\n    }\r\n}));\r\n\r\nconst HtmlTooltip = withStyles((theme: Theme) => ({\r\n    tooltip: {\r\n        backgroundColor: colors.white,\r\n        color: colors.black,\r\n        maxWidth: theme.typography.pxToRem(400),\r\n        fontSize: theme.typography.pxToRem(14),\r\n        border: `${theme.typography.pxToRem(1)} solid ${colors.grey80}`\r\n    }\r\n}))(Tooltip);\r\n\r\nfunction DatasetSearch(props: DatasetSearchProps) {\r\n    const { searchValue, updateSearchValue, isSearching, placeholder, searchResults, lists, activeTab, onFilterChanged, urlPath, isLLMSearch, handleSearchSubmit, hideFilter, onFocusEvent } = props;\r\n    const [showInput, setShowInput] = React.useState<boolean>(false);\r\n    const [searchValueLocal, setSearchValueLocal] = React.useState<string>(searchValue); // we need it to avoid useless event emittments, and performance improvement\r\n    const [searchFilterState, setSearchFilterState] = React.useState<string>('All Results');\r\n    const [currPlaceholderIndex, setCurrPlaceholderIndex] = React.useState<number>(0);\r\n    const searchCompRef: React.RefObject<HTMLDivElement> = React.useRef(null);\r\n    const textFieldRef: React.RefObject<HTMLInputElement> = React.useRef(null);\r\n    const selectBarRef: React.RefObject<HTMLInputElement> = React.useRef(null);\r\n    const enabledBlueprintFlag = useSelector((state: RootStoreState) => get(state, 'shared.flags.enabledBlueprintFlag', false));\r\n    const user = useSelector((state: RootStoreState) => get(state, 'user', ''));\r\n    const isLoggedIn = user && user.isLoggedIn ? user.isLoggedIn : false;\r\n    const [currLogoutPlaceholderIndex, setCurrLogoutPlaceholderIndex] = React.useState<number>(0);\r\n    const [maxChars, setMaxChars] = React.useState<number>(20);\r\n    const [maxCharErrMsg, setMaxCharErrMsg] = React.useState<string>('');\r\n    const [isTextArea, setIsTextArea] = React.useState(false);\r\n    const [isTabbed, setisTabbed] = React.useState(true);\r\n    const cursorPositionRef = React.useRef<number>(0);\r\n    const [isInitial, setIsInitial] = React.useState<boolean>(true);\r\n\r\n    const localeCode = getText('langCode');\r\n    const genAIPlaceholder = getText('pages.home.genAIprompt');\r\n    const genAILogoutPlaceholder = getText('pages.home.genAILogoutprompt');\r\n    const globalSearchPage = window.location.href.includes('search-results');\r\n\r\n    const toggleInput = (value: boolean) => {\r\n        // we need this timeout to handle another events in scope of search bar\r\n        if (showInput) {\r\n            setTimeout(() => {\r\n                setShowInput(value);\r\n            }, 100);\r\n        } else {\r\n            setShowInput(value);\r\n            setTimeout(() => {\r\n                const inp: any = textFieldRef.current;\r\n                if (inp) inp.click();\r\n            }, 100);\r\n        }\r\n    };\r\n\r\n    React.useEffect(() => {\r\n        if (searchValue.length === 0) {\r\n            setIsTextArea(false);\r\n        }\r\n        if (searchValue !== searchValueLocal) setSearchValueLocal(searchValue);\r\n    }, [searchValue]);\r\n\r\n    React.useEffect(() => {\r\n        const interval = setInterval(() => {\r\n            const element = document.getElementById('dataset-search__placeholder');\r\n            if (element && !isLoggedIn && urlPath && urlPath.includes('search-results')) {\r\n                element.classList.remove('text-show');\r\n                element.classList.add('text-fade');\r\n                if (genAILogoutPlaceholder) {\r\n                    setTimeout(() => {\r\n                        setCurrLogoutPlaceholderIndex((prev => (prev + 1) % genAILogoutPlaceholder.length));\r\n                        element.classList.remove('text-fade');\r\n                        element.classList.add('text-show');\r\n                    }, 1000);\r\n                }\r\n            } else {\r\n                setCurrLogoutPlaceholderIndex(0);\r\n            }\r\n        }, 4000);\r\n        return () => clearInterval(interval);\r\n    }, []);\r\n\r\n    const handleBlur = () => {\r\n        setTimeout(() => {\r\n            setIsTextArea(false);\r\n        }, 100);\r\n    };\r\n\r\n    const getLogoutPlaceholder = () => {\r\n        if (isLoggedIn) return placeholder;\r\n        return genAILogoutPlaceholder && genAILogoutPlaceholder[currLogoutPlaceholderIndex];\r\n    };\r\n\r\n    const resetSearchValue = () => {\r\n        updateSearchValue('');\r\n        setMaxCharErrMsg('');\r\n        setCurrLogoutPlaceholderIndex(0);\r\n        toggleInput(false);\r\n        handleBlur();\r\n    };\r\n\r\n    const keyPressHandler = (event: KeyboardEvent) => {\r\n        let itemId = '';\r\n        if (event.key === 'Enter') {\r\n            setShowInput(false);\r\n            if (event.target instanceof HTMLElement) {\r\n                itemId = event.target.getAttribute('id') || '';\r\n            }\r\n            if (itemId && itemId === 'clearicon-btn') {\r\n                resetSearchValue();\r\n            }\r\n            if (itemId && itemId === 'data-search-bar') {\r\n                if (handleSearchSubmit && !(maxCharErrMsg.length > 0)) handleSearchSubmit(true);\r\n            }\r\n        }\r\n\r\n        if (event.key === 'Escape') {\r\n            const element = document.getElementById('clearicon-btn');\r\n            if (element) element.click();\r\n        }\r\n        if (!isLLMSearch && event.key === 'Tab' && urlPath && urlPath.includes('search-results')) {\r\n            if (event.target instanceof Element) {\r\n                itemId = event.target.getAttribute('id') || '';\r\n            }\r\n            if (itemId && itemId === 'data-search-bar' && !event.shiftKey) {\r\n                setTimeout(() => {\r\n                    const d5 = document.getElementById('clearicon-btn');\r\n                    if (d5) d5.focus();\r\n                }, 100);\r\n                event.preventDefault();\r\n                if (searchFilterState === 'All Results') {\r\n                    const d = document.getElementById('all-result-btn');\r\n                    if (d) d.focus();\r\n                }\r\n                if (searchFilterState === 'Datasets') {\r\n                    const d1 = document.getElementById('dataset-btn');\r\n                    if (d1) d1.focus();\r\n                }\r\n                if (searchFilterState === 'Solutions') {\r\n                    const d2 = document.getElementById('solution-btn');\r\n                    if (d2) d2.focus();\r\n                }\r\n                if (searchFilterState === 'Blueprints') {\r\n                    const d3 = document.getElementById('clearicon-btn');\r\n                    if (d3) d3.focus();\r\n                }\r\n            }\r\n            if (itemId && itemId === 'blueprint-btn' && !event.shiftKey) {\r\n                event.stopPropagation();\r\n                event.preventDefault();\r\n                const d3 = document.getElementById('all-result-btn');\r\n                if (d3) d3.focus();\r\n            }\r\n            if (itemId && itemId === 'all-result-btn' && event.shiftKey) {\r\n                event.preventDefault();\r\n                const blpBtn = document.getElementById('blueprint-btn');\r\n                if (blpBtn) blpBtn.focus();\r\n            }\r\n        }\r\n        if (event.target instanceof Element) {\r\n            itemId = event.target.getAttribute('id') || '';\r\n        }\r\n        setisTabbed(true);\r\n        if (itemId && itemId === 'data-search-bar' && event.key === 'Tab') {\r\n            setisTabbed(false);\r\n        }\r\n        if (itemId && itemId === 'kenshoIcon' && !event.shiftKey) {\r\n            toggleInput(true);\r\n            setisTabbed(true);\r\n            const element = document.getElementById('data-search-bar-btn');\r\n            if (element) {\r\n                element.focus();\r\n                element.click();\r\n            }\r\n            setTimeout(() => {\r\n                const d = document.getElementById('data-search-bar');\r\n                if (d) d.focus();\r\n            }, 100);\r\n        }\r\n        if (itemId && itemId === 'clearicon-btn' && event.shiftKey) {\r\n            toggleInput(true);\r\n            setisTabbed(true);\r\n            const element = document.getElementById('data-search-bar-btn');\r\n            if (element) {\r\n                element.focus();\r\n                element.click();\r\n            }\r\n            setTimeout(() => {\r\n                const d = document.getElementById('data-search-bar');\r\n                if (d) d.focus();\r\n            }, 100);\r\n        }\r\n\r\n        if (itemId && itemId === 'clearicon-btn' && event.key === 'Tab') {\r\n            toggleInput(false);\r\n        }\r\n    };\r\n\r\n    React.useEffect(() => {\r\n        if (urlPath) { // && !urlPath.includes('search-results')\r\n            if (activeTab === 1) setSearchFilterState('Datasets');\r\n            else if (activeTab === 2) setSearchFilterState('Solutions');\r\n            else if (activeTab === 3) setSearchFilterState('Blueprints');\r\n            else if (activeTab === 4) setSearchFilterState('Queries');\r\n            else setSearchFilterState('All Results');\r\n        }\r\n    }, [activeTab]);\r\n\r\n    React.useEffect(() => {\r\n        const container = searchCompRef ? searchCompRef.current : null;\r\n        if (container) container.addEventListener('keydown', keyPressHandler);\r\n        return () => {\r\n            if (container) {\r\n                container.removeEventListener('keydown', keyPressHandler);\r\n            }\r\n        };\r\n    });\r\n\r\n    React.useEffect(() => {\r\n        if (textFieldRef.current) {\r\n            textFieldRef.current.setSelectionRange(cursorPositionRef.current, cursorPositionRef.current);\r\n        }\r\n    }, [searchValue]);\r\n\r\n    const filterBtnIconFill = (isActive: boolean) => {\r\n        return isActive ? '#D6002A' : '#515151';\r\n    };\r\n\r\n    // we need this timeout to not trigger search, if user is clickeng several times\r\n    let tm: any;\r\n    const handleFilterChanged = (filterState: string) => {\r\n        if (tm) clearTimeout(tm);\r\n        setSearchFilterState(filterState);\r\n        tm = setTimeout(() => {\r\n            let selTab = 0;\r\n            if (filterState === 'Datasets') selTab = 1;\r\n            if (filterState === 'Solutions') selTab = 2;\r\n            if (filterState === 'Blueprints') selTab = 3;\r\n            const scrollableWrapper = document.getElementsByClassName('dataset-search__searchfilterbar')[0];\r\n            if (filterState === 'All Results' && scrollableWrapper) {\r\n                scrollableWrapper.scrollLeft -= 100;\r\n            }\r\n            if (filterState === 'Blueprints' && scrollableWrapper) {\r\n                scrollableWrapper.scrollLeft += 100;\r\n            }\r\n            if (onFilterChanged && !isLLMSearch) onFilterChanged(selTab);\r\n        }, 500);\r\n    };\r\n\r\n    const getCount = (value: string) => {\r\n        if (value === 'Datasets') {\r\n            const result = lists || [];\r\n            const dataset = filterDatasetsSolutionsBlueprints(result);\r\n            return dataset.length;\r\n        }\r\n        if (value === 'Solutions') {\r\n            const res = lists || [];\r\n            const solution = filterDatasetsSolutionsBlueprints(res, true);\r\n            return solution.length;\r\n        }\r\n        if (value === 'Blueprints') {\r\n            const res = lists || [];\r\n            const bluePrint = filterDatasetsSolutionsBlueprints(res, false, true);\r\n            return bluePrint.length;\r\n        }\r\n        return (lists || []).length;\r\n    };\r\n\r\n    const handleOnChange = (event: React.ChangeEvent) => {\r\n        const { value, selectionStart } = event.currentTarget as HTMLInputElement;\r\n        cursorPositionRef.current = selectionStart || 0;\r\n        const regex = /^\\s+/g;\r\n        setSearchValueLocal(value.replace(regex, ''));\r\n        const newSearch = value.replace(regex, '');\r\n        if (newSearch.length > 500) {\r\n            setMaxCharErrMsg('The maximum 500 characters has been exceeded.  Please shorten your query.');\r\n        } else if (maxCharErrMsg.length > 0) setMaxCharErrMsg('');\r\n\r\n    };\r\n\r\n    React.useEffect(() => {\r\n        const timeDuration = (globalSearchPage && !isInitial) ? 0 : 500;\r\n        const timer = setTimeout(() => {\r\n            const regex = /^\\s+/g;\r\n            if (handleSearchSubmit) handleSearchSubmit(false);\r\n            if (searchValueLocal !== undefined && !isInitial) {\r\n                updateSearchValue(searchValueLocal);\r\n            } else {\r\n                setIsInitial(false);\r\n            }\r\n        }, timeDuration);\r\n        return () => clearTimeout(timer);\r\n    }, [searchValueLocal]);\r\n\r\n    const checkContentWidth = (element: Element) => {\r\n        const canvas = document.createElement('canvas');\r\n        const context = canvas.getContext('2d');\r\n\r\n        if (context && element) {\r\n            const inputElement = element as HTMLElement;\r\n            context.font = getComputedStyle(inputElement).font;\r\n            const contentWidth = context.measureText(searchValue).width;\r\n            return contentWidth > (inputElement.offsetWidth - 40);\r\n        }\r\n        return false;\r\n    };\r\n\r\n    const activateTextAreaOrInput = (isContentWidthExceeded: boolean) => {\r\n        const focusElement = () => {\r\n            setTimeout(() => {\r\n                const inp: any = textFieldRef.current;\r\n                if (inp) {\r\n                    const l: any = inp.value.length;\r\n                    inp.focus();\r\n                    inp.setSelectionRange(l, l);\r\n                }\r\n            }, 100);\r\n        };\r\n        if (isContentWidthExceeded) {\r\n            setIsTextArea(true);\r\n            focusElement();\r\n        } else if (isTextArea) {\r\n            setIsTextArea(false);\r\n            focusElement();\r\n        }\r\n    };\r\n\r\n    const handleScroll = (w: Waypoint.CallbackArgs) => {\r\n        if (w.viewportTop > w.waypointTop) {\r\n            if (showInput) toggleInput(false);\r\n        }\r\n    };\r\n\r\n    const classes = useStyles();\r\n\r\n    const clearSearchValue = (e: React.MouseEvent) => {\r\n        e.stopPropagation();\r\n        resetSearchValue();\r\n    };\r\n\r\n\r\n    const handleKeyEvent = (event: React.KeyboardEvent) => {\r\n        if (event.keyCode === 8) {\r\n            toggleInput(true);\r\n            setisTabbed(true);\r\n            const element = document.getElementById('data-search-bar-btn');\r\n            if (element) element.focus();\r\n        }\r\n    };\r\n\r\n    const handleOnFocus = (event: React.FocusEvent) => {\r\n        setCurrPlaceholderIndex(0);\r\n        let itemId = '';\r\n        let isContentWidthExceeded = false;\r\n        if (event.target instanceof HTMLElement) {\r\n            itemId = event.target.getAttribute('id') || '';\r\n        }\r\n        if (itemId && itemId === 'data-search-bar') {\r\n            isContentWidthExceeded = checkContentWidth(event.target);\r\n        }\r\n        activateTextAreaOrInput(isContentWidthExceeded);\r\n        if (onFocusEvent) onFocusEvent(event);\r\n    };\r\n\r\n    function filterOptionAllresult() {\r\n        return (\r\n            <>\r\n                <div className={`dataset-search__searchfilterbar ${localeCode === 'ja' ? 'jaLang' : ''}`}>\r\n                    <div role=\"button\" id=\"all-result-btn\" className={getCount('All Results') === 0 ? 'dataset-search__disabled' : 'dataset-search__enabled'} onClick={() => handleFilterChanged('All Results')} onFocus={() => { handleFilterChanged('All Results'); }} onKeyUp={e => { handleKeyEvent(e); }} tabIndex={0} data-testid=\"search-all\">\r\n                        <div className={`${searchFilterState === 'All Results' ? 'dataset-search__searchfilterbtn__enable icon' : 'dataset-search__searchfilterbtn__inactive icon'}`}>\r\n                            <SearchAllFilterIcon className=\"icon\" fill={filterBtnIconFill(searchFilterState === 'All Results')} />\r\n                            <div className=\"dataset-search__searchfilterbar__searchFiltersText\">\r\n                                {searchAllFilter} {getCount('All Results')}\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                    <div role=\"button\" id=\"dataset-btn\" className={getCount('Datasets') === 0 ? 'dataset-search__disabled' : 'dataset-search__enabled'} onClick={() => handleFilterChanged('Datasets')} onFocus={() => { handleFilterChanged('Datasets'); }} onKeyUp={e => { handleKeyEvent(e); }} tabIndex={0} data-testid=\"search-dataset\">\r\n                        <div className={`${searchFilterState === 'Datasets' ? 'dataset-search__searchfilterbtn__enable icon' : 'dataset-search__searchfilterbtn__inactive icon'}`}>\r\n                            <DatasetsFilterIcon className=\"icon\" fill={filterBtnIconFill(searchFilterState === 'Datasets')} />\r\n                            <div className=\"dataset-search__searchfilterbar__searchFiltersText\">\r\n                                {datasetsFilter} {getCount('Datasets')}\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                    <div role=\"button\" id=\"solution-btn\" className={getCount('Solutions') === 0 ? 'dataset-search__disabled' : 'dataset-search__enabled'} onClick={() => handleFilterChanged('Solutions')} onFocus={() => { handleFilterChanged('Solutions'); }} onKeyUp={e => { handleKeyEvent(e); }} tabIndex={0} data-testid=\"search-solution\">\r\n                        <div className={`${searchFilterState === 'Solutions' ? 'dataset-search__searchfilterbtn__enable icon' : 'dataset-search__searchfilterbtn__inactive icon'}`}>\r\n                            <SolutionsFilterIcon className=\"icon\" fill={filterBtnIconFill(searchFilterState === 'Solutions')} />\r\n                            <div className=\"dataset-search__searchfilterbar__searchFiltersText\">\r\n                                {solutionsFilter} {getCount('Solutions')}\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                    {enabledBlueprintFlag && (\r\n                        <div role=\"button\" id=\"blueprint-btn\" className={getCount('Blueprints') === 0 ? 'dataset-search__disabled' : 'dataset-search__enabled'} onClick={() => handleFilterChanged('Blueprints')} onFocus={() => { handleFilterChanged('Blueprints'); }} onKeyUp={e => { handleKeyEvent(e); }} tabIndex={0} data-testid=\"search-blueprint\">\r\n                            <div className={`${searchFilterState === 'Blueprints' ? 'dataset-search__searchfilterbtn__enable icon' : 'dataset-search__searchfilterbtn__inactive icon'}`}>\r\n                                <BlueprintFilterIcon className=\"icon\" fill={filterBtnIconFill(searchFilterState === 'Blueprints')} />\r\n                                <div className=\"dataset-search__searchfilterbar__searchFiltersText\">\r\n                                    {bluePrintFilter} {getCount('Blueprints')}\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n                    )}\r\n                </div>\r\n                <div className=\"dataset-search__searchfilterbar--a\" />\r\n            </>\r\n        );\r\n    }\r\n    function filterOptionDatasets() {\r\n        return (\r\n            <div className={`dataset-search__searchfilterbar dataset-search__filter-mrgn-dataset-sol ${localeCode === 'ja' ? 'jaLang' : ''}`}>\r\n                <div role=\"button\" id=\"dataset-btn\" className={getCount('Datasets') === 0 ? 'dataset-search__disabled' : 'dataset-search__enabled'} onKeyUp={() => {}} tabIndex={-1}>\r\n                    <div className={`${searchFilterState === 'Datasets' ? 'dataset-search__searchfilterbtn__enable icon' : 'dataset-search__searchfilterbtn__inactive icon'}`}>\r\n                        <DatasetsFilterIcon className=\"icon\" fill={filterBtnIconFill(searchFilterState === 'Datasets')} />\r\n                        <div className=\"dataset-search__searchfilterbar__searchFiltersText\">\r\n                            {datasetsFilter} {getCount('Datasets')}\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        );\r\n    }\r\n\r\n    function filterOptionSolutions() {\r\n        return (\r\n            <div className={`dataset-search__searchfilterbar dataset-search__filter-mrgn-dataset-sol ${localeCode === 'ja' ? 'jaLang' : ''}`}>\r\n                <div role=\"button\" id=\"solution-btn\" className={getCount('Solutions') === 0 ? 'dataset-search__disabled' : 'dataset-search__enabled'} onKeyUp={() => {}} tabIndex={-1}>\r\n                    <div className={`${searchFilterState === 'Solutions' ? 'dataset-search__searchfilterbtn__enable icon' : 'dataset-search__searchfilterbtn__inactive icon'}`}>\r\n                        <SolutionsFilterIcon className=\"icon\" fill={filterBtnIconFill(searchFilterState === 'Solutions')} />\r\n                        <div className=\"dataset-search__searchfilterbar__searchFiltersText\">{solutionsFilter} {getCount('Solutions')}</div>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        );\r\n\r\n    }\r\n\r\n    function filterOptionBlueprints() {\r\n        return (\r\n            <div className={`dataset-search__searchfilterbar dataset-search__filter-mrgn-dataset-sol ${localeCode === 'ja' ? 'jaLang' : ''}`}>\r\n                <div role=\"tab\" id=\"blueprint-btn\" className={getCount('Blueprints') === 0 ? 'dataset-search__disabled' : 'dataset-search__enabled'} onKeyUp={() => {}} tabIndex={-1} aria-hidden=\"true\">\r\n                    <div className={`${searchFilterState === 'Blueprints' ? 'dataset-search__searchfilterbtn__enable icon' : 'dataset-search__searchfilterbtn__inactive icon'}`}>\r\n                        <BlueprintFilterIcon className=\"icon\" fill={filterBtnIconFill(searchFilterState === 'Blueprints')} tabIndex={-1} aria-hidden=\"true\" />\r\n                        <div className=\"dataset-search__searchfilterbar__searchFiltersText\">{bluePrintFilter} {getCount('Blueprints')}</div>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        );\r\n\r\n    }\r\n\r\n    function filterOptionQueries() {\r\n        return (\r\n            <div className={`dataset-search__searchfilterbar dataset-search__filter-mrgn-dataset-sol ${localeCode === 'ja' ? 'jaLang' : ''}`}>\r\n                <div role=\"tab\" id=\"queries-btn\" className={getCount('Queries') === 0 ? 'dataset-search__disabled' : 'dataset-search__enabled'} onKeyUp={() => {}} tabIndex={-1} aria-hidden=\"true\">\r\n                    <div className={`${searchFilterState === 'Queries' ? 'dataset-search__searchfilterbtn__enable icon' : 'dataset-search__searchfilterbtn__inactive icon'}`}>\r\n                        <QueryLibraryFilterImage className=\"icon\" fill={filterBtnIconFill(searchFilterState === 'Queries')} tabIndex={-1} aria-hidden=\"true\" />\r\n                        <div className=\"dataset-search__searchfilterbar__searchFiltersText\">{queriesFilter} {getCount('Queries')}</div>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        );\r\n\r\n    }\r\n\r\n    React.useEffect(() => {\r\n        const interval = setInterval(() => {\r\n            const element = document.getElementById('dataset-search__placeholder');\r\n            if (element && element !== document.activeElement && urlPath && urlPath.includes('search-results')) {\r\n                element.classList.remove('text-show');\r\n                element.classList.add('text-fade');\r\n                if (genAIPlaceholder) {\r\n                    setTimeout(() => {\r\n                        setCurrPlaceholderIndex((prev => (prev + 1) % genAIPlaceholder.length));\r\n                        element.classList.remove('text-fade');\r\n                        element.classList.add('text-show');\r\n                    }, 1000);\r\n                }\r\n            } else {\r\n                setCurrPlaceholderIndex(0);\r\n            }\r\n        }, 4000);\r\n        return () => clearInterval(interval);\r\n    }, []);\r\n\r\n    const getPlaceholder = () => {\r\n        return genAIPlaceholder && genAIPlaceholder[currPlaceholderIndex];\r\n    };\r\n\r\n    // max number of characters till input text overflow\r\n    // 6.5 is estimated avarage char width for current font size\r\n    const updateMaxChars = () => {\r\n        if (searchCompRef.current) {\r\n            const inp: any = searchCompRef.current;\r\n            const estimatedMaxChars = Math.floor(inp.offsetWidth) / 6.5 - 10;\r\n            setMaxChars(estimatedMaxChars);\r\n        }\r\n    };\r\n\r\n    React.useEffect(() => {\r\n        updateMaxChars();\r\n    });\r\n\r\n    useClickAway(selectBarRef, () => toggleInput(false));\r\n\r\n    const focusSearchBar = (event: React.KeyboardEvent) => {\r\n        if (event.keyCode === 9) {\r\n            toggleInput(true);\r\n            const element = document.getElementById('data-search-bar-btn');\r\n            if (element) {\r\n                element.focus();\r\n                element.click();\r\n            }\r\n            setTimeout(() => {\r\n                const d = document.getElementById('data-search-bar');\r\n                if (d) d.focus();\r\n            }, 100);\r\n        }\r\n    };\r\n\r\n\r\n    const showToolTipIcon = () => {\r\n        return (\r\n            <div\r\n                onClick={() => { setShowInput(false); }}\r\n                role=\"presentation\"\r\n                className=\"dataset-search__logo-wrap\"\r\n            >\r\n                <HtmlTooltip\r\n                    interactive\r\n                    placement=\"top\"\r\n                    arrow\r\n                    enterTouchDelay={0}\r\n                    leaveTouchDelay={4000}\r\n                    tabIndex={0}\r\n                    aria-label=\"info tooltip\"\r\n                    role=\"button\"\r\n                    className=\"react-tooltip-clickable-link\"\r\n                    title={\r\n                        <HtmlContent className=\"tooltip-content\" html={kenshoIconTooltip} />\r\n                    }\r\n                >\r\n                    <KenshoIcon tabIndex={0} id=\"kenshoIcon\" className=\"dataset-search__kenshoicon\" />\r\n                </HtmlTooltip>\r\n            </div>\r\n        );\r\n    };\r\n\r\n    return (\r\n        <div className=\"dataset-search page-section\" ref={searchCompRef}>\r\n            <div className=\"dataset-search__wrapcomp page-section__inner\">\r\n                <div className={`dataset-search__bar ${localeCode === 'ja' ? 'jaLang' : ''} ${isTextArea && 'textarea-state'} ${urlPath && urlPath.includes('search-results') ? 'search-res-page' : ''}`} ref={selectBarRef}>\r\n                    {urlPath && urlPath.includes('search-results') && showToolTipIcon()}\r\n                    {showInput ? (\r\n                        <Waypoint onLeave={(w: Waypoint.CallbackArgs) => handleScroll(w)}>\r\n                            <TextField\r\n                                type=\"search\"\r\n                                id=\"data-search-bar\"\r\n                                autoComplete=\"off\"\r\n                                autoFocus={isTabbed}\r\n                                fullWidth\r\n                                onChange={handleOnChange}\r\n                                value={searchValueLocal}\r\n                                multiline={isTextArea}\r\n                                onFocus={handleOnFocus}\r\n                                onBlur={handleBlur}\r\n                                placeholder={isLoggedIn && urlPath && urlPath.includes('search-results') && genAIPlaceholder && genAIPlaceholder[0]}\r\n                                className={cn(classes.textField, 'dataset-search__input')}\r\n                                inputRef={textFieldRef}\r\n                                inputProps={{\r\n                                    'data-testid': 'dataset-search-input',\r\n                                }}\r\n                            />\r\n                        </Waypoint>\r\n                    ) : (\r\n                        <button type=\"button\" onFocus={() => toggleInput(true)} onClick={() => toggleInput(true)} className={`dataset-search__button ${urlPath && urlPath.includes('search-results') ? 'search-res-page' : ''}`} data-testid=\"search-button\" id=\"data-search-bar-btn\">\r\n                            {searchValue && searchValue.length ? (\r\n                                <p className=\"search-result-summary\" data-testid=\"search-result-summary\">\r\n                                    {searchResults}\r\n                                    &#8220;\r\n                                    <span>{searchValue}</span>\r\n                                    &#8221;\r\n                                </p>\r\n                            ) : (\r\n                                <>\r\n                                    {!(urlPath && urlPath.includes('search-results')) ? (\r\n                                        <p className=\"dataset-search__placeholder\" data-testid=\"search-placeholder\" id=\"dataset-search__placeholder\">\r\n                                            {placeholder}\r\n                                        </p>\r\n                                    ) : isLoggedIn ? (\r\n                                        <p className=\"dataset-search__placeholder\" data-testid=\"search-placeholder\" id=\"dataset-search__placeholder\">\r\n                                            {getPlaceholder()}\r\n                                        </p>\r\n                                    ) : (\r\n                                        <p className=\"dataset-search__placeholder\" data-testid=\"search-placeholder\" id=\"dataset-search__placeholder\">\r\n                                            {getLogoutPlaceholder()}\r\n                                        </p>\r\n                                    )}\r\n                                </>\r\n                            )}\r\n                        </button>\r\n                    )}\r\n                    { !isLLMSearch && showInput && <Spinner disable={!isSearching} />}\r\n                    {(!showInput || (showInput && !searchValue.length)) ? (\r\n                        <div\r\n                            className={cn('dataset-search__icon')}\r\n                        >\r\n                            <SearchIcon />\r\n                        </div>\r\n                    ) : (\r\n                        <div className=\"dataset-search__tab\">\r\n                            <button\r\n                                onClick={clearSearchValue}\r\n                                type=\"button\"\r\n                                className={cn('button button--icon-only dataset-search__clearicon', isLLMSearch ? 'dataset-search__clearicon-red' : '')}\r\n                                aria-label=\"clear-icon\"\r\n                                id=\"clearicon-btn\"\r\n                                data-testid=\"dataset-search-clearicon-btn\"\r\n                                tabIndex={0}\r\n                            >\r\n                                <ClearIcon />\r\n                            </button>\r\n                        </div>\r\n                    )}\r\n                </div>\r\n                {maxCharErrMsg && maxCharErrMsg.length > 0 && (<span className=\"dataset-search__error-message\">{maxCharErrMsg}</span>)}\r\n                {!hideFilter && urlPath && urlPath.includes('search-results') &&\r\n                    (filterOptionAllresult())}\r\n                {!hideFilter && urlPath && urlPath.includes('datasets') &&\r\n                    filterOptionDatasets()}\r\n                {!hideFilter && urlPath && urlPath.includes('solutions') &&\r\n                    filterOptionSolutions()}\r\n                {!hideFilter && enabledBlueprintFlag && urlPath && urlPath.includes('blueprints') &&\r\n                    filterOptionBlueprints()}\r\n                {!hideFilter && urlPath && urlPath.includes('query-library') &&\r\n                    filterOptionQueries()}\r\n            </div>\r\n            {!hideFilter && (\r\n                <hr className=\"dataset-search__bottomline\" />\r\n            )}\r\n        </div>\r\n    );\r\n}\r\n\r\nexport default React.memo(DatasetSearch);\r\n","/* eslint-disable no-underscore-dangle */\r\nimport * as React from 'react';\r\nimport axios from 'axios';\r\nimport update from 'immutability-helper';\r\nimport { useSelector } from 'react-redux';\r\nimport { useLocation } from 'react-router-dom';\r\nimport Store from '../../../redux/store';\r\nimport { SET_FLAGS } from '../../../redux/actionTypes';\r\nimport SelectInput from '../../_common/form/select-input';\r\nimport DatasetSearch from '../../dataset-search';\r\nimport DataFiltersDropdown from '../../data-controls-panel/data-filters-dropdown';\r\nimport DataSort from '../../data-sort';\r\nimport DataFilter from '../../data-filter';\r\nimport LozengeFilterOptions from '../../data-controls-panel/lozenge-filter-options';\r\n\r\nimport QST from '../../../utilities/query-string-manager';\r\nimport APIManager from '../../../utilities/api-manager';\r\nimport HistoryInstance from '../../../utilities/history';\r\nimport { get, getText, getConfig, sortDesc, sortAsc, sortDescByDate, sortByEnhanced, debounce, authdata, createSearchStrategyFactory, SearchType, validInternalUser } from '../../../helpers';\r\nimport { mapSearchResultToDataProfileCard, mapSearchResultsToQuery, mapSearchResultToSolution, mapSearchResultToBluePrint } from '../../../utilities/data-mappers';\r\nimport safeParse from '../../../utilities/safe-parse';\r\nimport SPGVariables from '../../../utilities/spg-variables';\r\nimport { sortQLAsc, sortQLDesc } from '../../../helpers/sort';\r\n\r\nconst filterOptions = getConfig('components.filterOptions');\r\nconst Window = window as AnonymousObject;\r\nWindow.dataLayer = Window.dataLayer || [];\r\nlet defaultSort = getConfig('components.tile-grid.defaultSort');\r\nconst defaultSortQueryLibrary = getConfig('components.tile-grid.defaultSort_querylibrary');\r\nconst defaultSortAllPages = getConfig('components.tile-grid.defaultSort');\r\nconst sortBy = getText('generic.sortBy');\r\nconst debounceDuration = getConfig('components.typeaheadThrottleDuration');\r\nconst spgVariables = SPGVariables();\r\nconst env = spgVariables.ENV;\r\n\r\nconst initialState: SearchProviderState = {\r\n    sort: defaultSort,\r\n    search: '',\r\n    filters: [],\r\n    filterString: [],\r\n    filterCount: 0,\r\n    list: [],\r\n    listLength: 0,\r\n    status: 'initial-load'\r\n};\r\n\r\nconst initialResponse = {\r\n    selectComponent: null,\r\n    searchComponent: null,\r\n    filterComponent: null,\r\n    lozengeFilterComponent: null,\r\n    mobileSelectComponent: null,\r\n    mobileFilterComponent: null,\r\n    sort: '',\r\n    search: '',\r\n    isSearching: false,\r\n    list: [],\r\n    listLength: 0,\r\n    filterCount: 0,\r\n    status: '',\r\n    hasGenAISearchError: false\r\n};\r\n\r\nconst sortedList = (sort: string, type: SearchProductType, list: (DataProfileCard | APISolution)[] | Query[]) => {\r\n    if (!list.length) return list;\r\n    if (sort === 'recently-added' && type === 'querylibrary') return sortDescByDate(list, 'versiondate');\r\n    if (sort === 'dataset-asc' && type === 'querylibrary') return sortQLAsc(list, 'datasets');\r\n    if (sort === 'dataset-desc' && type === 'querylibrary') return sortQLDesc(list, 'datasets');\r\n    if (sort === 'recently-added' && (type === 'dataSets' || type === 'combinedProducts' || type === 'solutions')) return sortDescByDate(list, 'addedDate');\r\n    if (sort === 'dataset-desc' || sort === 'name-desc' || sort === 'solution-desc' || sort === 'query-desc') return sortDesc(list, 'name');\r\n    if (sort === 'dataset-asc' || sort === 'name-asc' || sort === 'solution-asc' || sort === 'query-asc') return sortAsc(list, 'name');\r\n    if (sort === 'vendor-desc') return sortDesc(list, 'dataProvider', 'name');\r\n    if (sort === 'vendor-asc') return sortAsc(list, 'dataProvider', 'name');\r\n    if (sort === 'recently-enhanced') return sortByEnhanced(list);\r\n    if (sort === 'relevance') {\r\n        return list.sort((a: AnonymousObject, b: AnonymousObject) => {\r\n            if (a.sortIndex < b.sortIndex) return -1;\r\n            if (a.sortIndex > b.sortIndex) return 1;\r\n            return 0;\r\n        });\r\n    }\r\n    return list;\r\n};\r\n\r\nconst parseFilters = (filters: FilterObjects[]) => {\r\n    let filterCount = 0;\r\n    const filterArray: string[] = [];\r\n    Object.entries(filters).forEach((filter: AnonymousObject) => {\r\n        const filterKeyColumn = filter[1].filterKey as string;\r\n        const options: FilterCheckBoxItem[] = filter[1].items;\r\n        options.forEach(option => {\r\n            if (option.checked) {\r\n                if (option.value instanceof Array) {\r\n                    filterArray.push(...option.value);\r\n                } else {\r\n                    const header = filterOptions[filterKeyColumn];\r\n                    filterArray.push(`${header.keyColumn}:${option.value}`);\r\n                }\r\n                ++filterCount;\r\n            }\r\n        });\r\n    });\r\n    return {\r\n        filterArray,\r\n        filterCount\r\n    };\r\n};\r\n\r\nconst hydrateStateFromUrl = () => {\r\n    const newState: AnonymousObject = {};\r\n\r\n    const deepLinkedSearch = QST.getSearch();\r\n\r\n    if (deepLinkedSearch.search) newState.search = deepLinkedSearch.search as string;\r\n\r\n    if (deepLinkedSearch.sort) newState.sort = deepLinkedSearch.sort as string;\r\n\r\n    if (deepLinkedSearch.filters) {\r\n        const filterQuery = (deepLinkedSearch.filters as string) || '';\r\n        const parsedFilterQuery = safeParse(filterQuery || '{}') || [];\r\n        newState.filters = [...initialState.filters].map((filter: AnonymousObject) => {\r\n            const hasMatch = !!parsedFilterQuery[filter.filterKey];\r\n            if (hasMatch) {\r\n                // if this filter is found in the filter query lets parse it\r\n                return {\r\n                    ...filter,\r\n                    items: filter.items.map((item: FilterCheckBoxItem) => ({\r\n                        ...item,\r\n                        checked: parsedFilterQuery[filter.filterKey].includes(item.name)\r\n                    }))\r\n                };\r\n            }\r\n            return { ...filter };\r\n        });\r\n    }\r\n\r\n    return newState;\r\n};\r\n\r\nconst selectComponent = (type: SearchProductType, controlledValue: string, isDisabled: boolean, onChange: (name: string, value: string) => void) => {\r\n    const defaultSortOptions = getText(`pages.${type}.sortOptions`);\r\n    defaultSort = useLocation().pathname.includes('query-library') ? defaultSortQueryLibrary : defaultSortAllPages;\r\n\r\n    return (\r\n        <SelectInput\r\n            label={sortBy}\r\n            name=\"sort\"\r\n            options={defaultSortOptions}\r\n            controlledValue={controlledValue}\r\n            isDisabled={isDisabled}\r\n            onChange={onChange}\r\n        />\r\n    );\r\n};\r\n\r\nconst getActiveTab = (type: SearchProductType, activeTab: number) => {\r\n    if (type === 'combinedProducts' && activeTab !== 0) return activeTab;\r\n    if (type === 'dataSets') return 1;\r\n    if (type === 'solutions') return 2;\r\n    if (type === 'blueprints') return 3;\r\n    if (type === 'querylibrary') return 4;\r\n    return 0;\r\n};\r\n\r\nconst searchComponent = (type: SearchProductType, activeTab: number, lists: (DataProfileCard | APISolution | APIBlueprint)[] | Query[], searchValue: string, isSearching: boolean, updateSearchValue: (value: string) => void, onFilterChanged: (selTab: number) => void, urlPath: string, isLLMSearch: boolean, handleSearchSubmit: (isSubmit: boolean) => void, isLLMSubmitted: boolean, genAIResponse: any) => {\r\n    const placeholder = getText(`pages.${type}.searchPlaceholder`);\r\n    const searchResults = getText(`pages.${type}.searchResultsSummary`);\r\n    const user = useSelector((rootState: RootStoreState) => get(rootState, 'user', ''));\r\n    const userEmail = user && user.userInfo && user.userInfo.Email ? user.userInfo.Email : '';\r\n    const authLists = authdata(lists as (APISolution)[], userEmail);\r\n    const hideFilterFlag = isLLMSubmitted || (isLLMSearch && genAIResponse);\r\n    return (\r\n        <DatasetSearch\r\n            placeholder={placeholder}\r\n            searchResults={searchResults}\r\n            searchValue={searchValue}\r\n            isSearching={isSearching}\r\n            updateSearchValue={updateSearchValue}\r\n            lists={authLists.length < lists.length ? authLists : lists as (DataProfileCard | APISolution | APIBlueprint)[]}\r\n            activeTab={getActiveTab(type, activeTab)}\r\n            onFilterChanged={onFilterChanged}\r\n            urlPath={urlPath}\r\n            isLLMSearch={isLLMSearch}\r\n            handleSearchSubmit={handleSearchSubmit}\r\n            hideFilter={hideFilterFlag}\r\n        />\r\n    );\r\n};\r\n\r\nconst filterComponent = (\r\n    filters: FilterObjects[],\r\n    clearAll: () => void,\r\n    isFiltersActive: boolean,\r\n    updateFilter: (filterItems: FilterCheckBoxItem[], filterKey: string) => void\r\n) => <DataFiltersDropdown filters={filters} handleClearAll={clearAll} isFiltersActive={isFiltersActive} onUpdate={updateFilter} />;\r\n\r\nconst lozengeFilterComponent = (filters: FilterObjects[], updateFilter: (filterItems: FilterObjects[]) => void) => (\r\n    <LozengeFilterOptions filters={filters} onUpdate={updateFilter} />\r\n);\r\n\r\nconst mobileSelectComponent = (type: SearchProductType, controlledValue: string, isDisabled: boolean, onChange: (name: string, value: string) => void) => {\r\n    const defaultSortOptions = getText(`pages.${type}.sortOptions`);\r\n    return <DataSort queryString={controlledValue} updateQueryString={onChange} sortOptions={defaultSortOptions} disabled={isDisabled} />;\r\n};\r\n\r\nconst mobileFilterComponent = (\r\n    filters: FilterObjects[],\r\n    clearAll: () => void,\r\n    filterCount: number,\r\n    applyFilters: (filters: FilterObjects[]) => void\r\n) => <DataFilter filters={filters} handleClearAll={clearAll} applyFilters={applyFilters} filterCount={filterCount} />;\r\n\r\nconst updateSearchUrl = debounce((search, dispatch) => {\r\n    const currentSearch = QST.getSearchItem('search');\r\n    if (currentSearch !== search) QST.setSearchItem({ search });\r\n    dispatch();\r\n}, debounceDuration);\r\n\r\nconst updateSortUrl = (sort: string) => {\r\n    QST.setSearchItem({ sort }, true);\r\n};\r\n\r\nconst updateFilterURL = (filterItems: FilterCheckBoxItem[], filterKey: string) => {\r\n    const oldFilters = (QST.getSearchItem('filters') as string) || '';\r\n    const parsedOldFilters = safeParse(oldFilters || '{}') || [];\r\n    // get array of options as names\r\n    const optionArray = filterItems.filter(item => item.checked).map(item => item.name);\r\n    // if array has length add to the filters / otherwise delete\r\n    if (optionArray.length) parsedOldFilters[filterKey] = optionArray;\r\n    else delete parsedOldFilters[filterKey];\r\n    // convert to string - remove if string === {}\r\n    const filtersAsString = JSON.stringify(parsedOldFilters);\r\n    // finally update the state\r\n    if (filtersAsString !== '{}') QST.setSearchItem({ filters: filtersAsString });\r\n    else QST.removeSearchItem('filters');\r\n};\r\n\r\nconst updateFiltersURL = (filters: FilterObjects[]) => {\r\n    const updatedFilters: AnonymousObject = {};\r\n    filters.forEach((filter: FilterObjects) => {\r\n        const optionArray = filter.items.filter((item: FilterCheckBoxItem) => item.checked).map((item: FilterCheckBoxItem) => item.name);\r\n        if (optionArray.length) updatedFilters[filter.filterKey] = optionArray;\r\n    });\r\n    // convert to string - remove if string === {}\r\n    const filtersAsString = JSON.stringify(updatedFilters);\r\n    // finally update the state\r\n    if (filtersAsString !== '{}') QST.setSearchItem({ filters: filtersAsString });\r\n    else QST.removeSearchItem('filters');\r\n};\r\n\r\nconst addIndex = (arr: AnonymousObject) => {\r\n    return arr.map((item: DataProfileCard | APISolution | Query, index: number) => {\r\n        item.sortIndex = index;\r\n        return item;\r\n    });\r\n};\r\n\r\nconst reducer: React.Reducer<SearchProviderState, SearchProviderAction> = (state, action) => {\r\n    switch (action.type) {\r\n        case 'update-search': {\r\n            const search = action.payload;\r\n            return {\r\n                ...state,\r\n                search,\r\n                status: 'updated-search'\r\n            };\r\n        }\r\n        case 'update-search-debounced': {\r\n            return {\r\n                ...state,\r\n                status: 'updated-search-debounced'\r\n            };\r\n        }\r\n        case 'update-sort':\r\n            return {\r\n                ...state,\r\n                sort: action.payload\r\n            };\r\n        case 'update-filter': {\r\n            const index = state.filters.findIndex((filter: FilterObjects) => filter.filterKey === action.payload.filterKey);\r\n            const newState = update(state, { filters: { [index]: { items: { $set: action.payload.filterItems } } } });\r\n            const parsedFilters = parseFilters(newState.filters);\r\n            newState.filterString = parsedFilters.filterArray;\r\n            newState.filterCount = parsedFilters.filterCount;\r\n            newState.status = 'updated-filters';\r\n            return newState;\r\n        }\r\n        case 'update-filters': {\r\n            const parsedFilters = parseFilters(action.payload);\r\n            return update(state, {\r\n                filters: { $set: action.payload },\r\n                filterString: { $set: parsedFilters.filterArray },\r\n                filterCount: { $set: parsedFilters.filterCount },\r\n                status: { $set: 'updated-filters' }\r\n            });\r\n        }\r\n        case 'update-lozenge-filters': {\r\n            const newState = update(state, { filters: { $set: action.payload } });\r\n            const parsedFilters = parseFilters(newState.filters);\r\n            newState.filterString = parsedFilters.filterArray;\r\n            newState.filterCount = parsedFilters.filterCount;\r\n            newState.status = 'updated-filters';\r\n            return newState;\r\n        }\r\n        case 'reset-filters':\r\n            return update(state, {\r\n                filters: { $set: initialState.filters },\r\n                filterString: { $set: initialState.filterString },\r\n                filterCount: { $set: initialState.filterCount },\r\n                status: { $set: 'updated-filters' }\r\n            });\r\n        case 'search-starting':\r\n            return {\r\n                ...state,\r\n                status: 'searching'\r\n            };\r\n        case 'bookmarks-loading':\r\n            return {\r\n                ...state,\r\n                status: 'searching'\r\n            };\r\n        case 'search-complete': {\r\n            if (state.status !== 'searching') return state;\r\n            const sort = (QST.getSearchItem('sort') as string) || defaultSort;\r\n            return update(state, {\r\n                list: { $set: addIndex(action.payload) },\r\n                listLength: { $set: action.payload.length },\r\n                status: { $set: 'loaded-results' },\r\n                sort: { $set: sort }\r\n            });\r\n        }\r\n        case 'refined-search-complete': {\r\n            if (state.status !== 'searching') return state;\r\n            const sort = (QST.getSearchItem('sort') as string) || 'relevance';\r\n            return update(state, {\r\n                list: { $set: addIndex(action.payload) },\r\n                listLength: { $set: action.payload.length },\r\n                status: { $set: 'loaded-results' },\r\n                sort: { $set: sort }\r\n            });\r\n        }\r\n        case 'rehydrate-state': {\r\n            const search = action.payload.search || '';\r\n            const sort = action.payload.sort || defaultSort;\r\n            const filters = action.payload.filters || initialState.filters;\r\n            const parsedFilters = parseFilters(filters);\r\n            return update(state, {\r\n                search: { $set: search },\r\n                sort: { $set: sort },\r\n                filters: { $set: filters },\r\n                filterString: { $set: parsedFilters.filterArray },\r\n                filterCount: { $set: parsedFilters.filterCount },\r\n                status: { $set: 'rehydrating' }\r\n            });\r\n        }\r\n        default:\r\n            throw new Error();\r\n    }\r\n};\r\n\r\nconst logGAevent = (search: string, type: SearchProductType, resultsCount: number) => {\r\n    const filters = (QST.getSearchItem('filters') as string) || '';\r\n    let searchContext = '';\r\n    if (type === 'combinedProducts') searchContext = '';\r\n    if (type === 'querylibrary') searchContext = 'Query Library';\r\n    if (search && filters) {\r\n        Window.dataLayer.push({\r\n            event: 'searchSubmit',\r\n            searchTerm: search,\r\n            searchContext,\r\n            searchFilters: filters,\r\n            searchResultsCount: resultsCount\r\n        });\r\n    } else if (search) {\r\n        Window.dataLayer.push({\r\n            event: 'searchSubmit',\r\n            searchContext,\r\n            searchTerm: search,\r\n            searchFilters: undefined,\r\n            searchResultsCount: resultsCount\r\n        });\r\n    } else {\r\n        Window.dataLayer.push({\r\n            event: 'searchSubmit',\r\n            searchContext,\r\n            searchFilters: filters,\r\n            searchTerm: undefined,\r\n            searchResultsCount: resultsCount\r\n        });\r\n    }\r\n};\r\n\r\nconst searchProvider = function SearchProvider(props: SearchProviderProps) {\r\n\r\n    const { filters, render, bookmarks, type, urlPath, queryFilter, bookmarksLoaded, filterType, activeTab, updateSearchType } = props;\r\n    const [state, dispatch] = React.useReducer(reducer, { ...initialState, filters });\r\n    const user = useSelector((rootState: RootStoreState) => get(rootState, 'user', ''));\r\n    const enabledBlueprintFlag = useSelector((stateRS: RootStoreState) => get(stateRS, 'shared.flags.enabledBlueprintFlag', false));\r\n\r\n    const userEmail = user && user.userInfo && user.userInfo.Email ? user.userInfo.Email : '';\r\n    const response: SearchProviderResponse = initialResponse;\r\n\r\n    const [isLLMSearch, setIsLLMSearch] = React.useState<boolean>(false);\r\n    const [genAISubmit, setGenAISubmit] = React.useState<boolean>(false);\r\n    const [genAIResponse, setGenAIResponse] = React.useState<any>();\r\n    const [hasGenAISearchError, setHasGenAISearchError] = React.useState<boolean>(false);\r\n    const [feedback, setFeedback] = React.useState<string>('');\r\n    const [clearFeedbackFlag, setClearFeedbackFlag] = React.useState<boolean>(false);\r\n    const isLoggedIn = user && user.isLoggedIn ? user.isLoggedIn : false;\r\n    const isValidUser = user ? validInternalUser(user) : false;\r\n    const tileNameList = useSelector((stateRS: RootStoreState) => get(stateRS, 'shared.tileNamesGt25Chars', {}));\r\n    const tileNamesGt25CharsList = tileNameList && tileNameList.data && tileNameList.data.TileNames ? tileNameList.data.TileNames : [];\r\n\r\n    const { getSearchStrategy } = createSearchStrategyFactory();\r\n\r\n    const decide = (searchText: string) => {\r\n        if (type !== 'combinedProducts') return SearchType.openSearch;\r\n        const searchStrategy = getSearchStrategy(searchText.trim(), tileNamesGt25CharsList);\r\n        if (searchStrategy) return searchStrategy.apply();\r\n        return SearchType.openSearch;\r\n    };\r\n\r\n    const getSearchType = (value: string, isDefault: boolean) => {\r\n        setIsLLMSearch(false);\r\n        const searchText = isDefault ? state.search : value;\r\n        if (searchText && searchText.trim() && searchText.trim().length > 0) {\r\n            const searchtype = decide(searchText);\r\n            if (searchtype === SearchType.llmSearch) setIsLLMSearch(true);\r\n            return searchtype;\r\n        }\r\n        return SearchType.openSearch;\r\n    };\r\n\r\n    // Example success callback function\r\n    const handleSuccess = () => {\r\n        console.log('Email request succeeded');\r\n    };\r\n\r\n    // Example error callback function\r\n    const handleEmailError = (errorMessage: any) => {\r\n        console.error(`Email request failed: ${errorMessage}`);\r\n    };\r\n\r\n    const emailStatusCallback = (hasRequestSuccess: boolean, successCallback: () => void, error: (error: string) => void) => {\r\n        if (hasRequestSuccess) {\r\n            successCallback();\r\n        } else {\r\n            error('Email request  failed');\r\n        }\r\n    };\r\n\r\n    const sendEmail = (errorBody: string, errorSubject: string, includeKensho: boolean) => {\r\n        APIManager.sendEmail(\r\n            errorBody,\r\n            errorSubject,\r\n            includeKensho ? spgVariables.KENSHOLLMEmailList : spgVariables.LLMEmailList,\r\n            (isSuccess: boolean) => {\r\n                emailStatusCallback(isSuccess, handleSuccess, handleEmailError);\r\n            }\r\n        );\r\n    };\r\n\r\n    const sendSearchFailedEmail = (value: string, reason: any, includeKensho: boolean) => {\r\n        const errorData = '<br>SearchValue - '.concat(value);\r\n        const errorText = '<br>Reason - '.concat(JSON.stringify(reason));\r\n        const errorBody = 'Gen AI Search service error: '.concat(errorData).concat(errorText);\r\n        const errorSubject = (env ? env.toUpperCase().concat(' - ') : '').concat('Marketplace Gen AI Search Service Error');\r\n        sendEmail(errorBody, errorSubject, includeKensho);\r\n    };\r\n\r\n    const getQueryData = () => {\r\n        let userType;\r\n        if (!isLoggedIn) {\r\n            userType = 'not_authenticated';\r\n        } else if (isValidUser) {\r\n            userType = 'internal';\r\n        } else {\r\n            userType = 'external';\r\n        }\r\n        const data = {\r\n            query: state.search,\r\n            /* eslint-disable @typescript-eslint/camelcase */\r\n            user_type: userType\r\n        };\r\n        return data;\r\n    };\r\n\r\n    const handleGenAIError = (isRequestManuallyCanceled = false) => {\r\n        setGenAISubmit(false);\r\n        if (!isRequestManuallyCanceled) {\r\n            setHasGenAISearchError(true);\r\n            setGenAIResponse([]);\r\n        }\r\n    };\r\n\r\n    const onGenAISearchClick = () => {\r\n        if (state.search) {\r\n            const data = getQueryData();\r\n            Window.dataLayer.push({\r\n                event: 'globalSearchSubmitLLM',\r\n                searchQuestion: data.query,\r\n            });\r\n            APIManager.getLLMAccessToken().then(token => {\r\n                APIManager.getChatiqSearchById(data, token && token.data && token.data.AccessToken ? token.data.AccessToken : '').then(res => {\r\n                    setGenAISubmit(false);\r\n                    if (res.data) {\r\n                        if (res.data.response_uuid && res.data.response) {\r\n                            setGenAIResponse(res.data);\r\n                            setHasGenAISearchError(false);\r\n                        } else {\r\n                            setHasGenAISearchError(true);\r\n                            setGenAIResponse([]);\r\n                            sendSearchFailedEmail(state.search, res.data, true);\r\n                        }\r\n                    }\r\n                }).catch(error => {\r\n                    const isCanceled = axios.isCancel(error);\r\n                    handleGenAIError(isCanceled);\r\n                    if (!isCanceled) sendSearchFailedEmail(state.search, error && error.message ? error.message : 'Search Service Error', true);\r\n                });\r\n            }).catch(er => {\r\n                const isReqCanceled = axios.isCancel(er);\r\n                handleGenAIError(isReqCanceled);\r\n                if (!isReqCanceled) sendSearchFailedEmail(state.search, 'LLM Access Token Service Error', false);\r\n            });\r\n        }\r\n    };\r\n\r\n    const sendFeedbackFailedEmail = (data: any, reason: any, includeKensho: boolean) => {\r\n        console.log('Gen AI Feedback service error, data=', JSON.stringify(data));\r\n        const errorData = '<br>Data - '.concat(JSON.stringify(data));\r\n        const errorText = '<br>Reason - '.concat(JSON.stringify(reason));\r\n        const errorBody = 'Gen AI Feedback service error:'.concat(errorData).concat(errorText);\r\n        const errorSubject = (env ? env.toUpperCase().concat(' - ') : '').concat('Marketplace Gen AI Feedback Service Error');\r\n        sendEmail(errorBody, errorSubject, includeKensho);\r\n    };\r\n\r\n    response.handleFeedback = (id: string, flag: string) => {\r\n        setFeedback(flag);\r\n        const data = {\r\n            response_uuid: id,\r\n            feedback_flag: flag\r\n        };\r\n        APIManager.getLLMAccessToken().then(token => {\r\n            APIManager.sendChatiqSearchFeedbackById(data, token && token.data && token.data.AccessToken ? token.data.AccessToken : '').then(res => {\r\n                if (!(res.status === 200 && res.data === '')) {\r\n                    sendFeedbackFailedEmail(data, res.data, true);\r\n                }\r\n            }).catch(error => {\r\n                sendFeedbackFailedEmail(data, error && error.message ? error.message : 'Feedback Service Error', true);\r\n            });\r\n        }).catch(() => {\r\n            sendFeedbackFailedEmail(data, 'LLM Access Token Service Error', false);\r\n            console.log('Gen AI Feedback service access token error, data=', JSON.stringify(data));\r\n        });\r\n    };\r\n\r\n    response.clearFeedbackDoneNotify = () => {\r\n        setClearFeedbackFlag(false);\r\n    };\r\n\r\n    response.onTabPressed = (value: string) => {\r\n        let d;\r\n        if (value === 'gen-ai-result-end') {\r\n            d = document.getElementById('kenshoIcon');\r\n        }\r\n        if (d && isLLMSearch) d.focus();\r\n    };\r\n\r\n    const resetGenAIAttribute = () => {\r\n        setIsLLMSearch(false);\r\n        setGenAISubmit(false);\r\n        setGenAIResponse(null);\r\n        setHasGenAISearchError(false);\r\n        setClearFeedbackFlag(false);\r\n        setFeedback('');\r\n    };\r\n\r\n    React.useEffect(() => {\r\n        if (isLLMSearch) {\r\n            dispatch({ type: 'search-complete', payload: [] });\r\n            setGenAIResponse(null);\r\n        }\r\n        Store.dispatch({ flags: { hideFooterFlag: isLLMSearch }, type: SET_FLAGS });\r\n        if (updateSearchType) updateSearchType(isLLMSearch);\r\n    }, [isLLMSearch]);\r\n\r\n    React.useEffect(() => {\r\n        if (isLLMSearch && genAISubmit) {\r\n            onGenAISearchClick();\r\n        }\r\n    }, [genAISubmit]);\r\n\r\n    React.useEffect(() => {\r\n        initialState.filters = filters;\r\n        const hydratedState = hydrateStateFromUrl() as SearchProviderState;\r\n        const hasBookmarkFilter =\r\n            hydratedState.filters &&\r\n            hydratedState.filters.some(f => f.filterKey === filterOptions.bookmark.filterKey && f.items.length > 0 && f.items[0].checked);\r\n        if (hasBookmarkFilter && !bookmarksLoaded) {\r\n            dispatch({ type: 'bookmarks-loading' });\r\n        } else {\r\n            dispatch({ type: 'rehydrate-state', payload: hydratedState });\r\n        }\r\n    }, [bookmarksLoaded, queryFilter, filterType]);\r\n\r\n    React.useEffect(() => {\r\n        if (state.status === 'rehydrating' || state.status === 'updated-search-debounced' || state.status === 'updated-filters') {\r\n            dispatch({ type: 'search-starting' });\r\n\r\n            const hasBookmarkFilter = state.filters.some(\r\n                f => f.filterKey === filterOptions.bookmark.filterKey && f.items.length > 0 && f.items[0].checked\r\n            );\r\n\r\n            if (type === 'dataSets') {\r\n                APIManager.search(state.search, state.filterString, ['isType:Dataset OR isType:Bundle']).then(res => {\r\n                    let dataProfileCards = get(res, 'data.hits.hits', []);\r\n                    dataProfileCards = dataProfileCards.map((item: Hit) => mapSearchResultToDataProfileCard(item._source));\r\n                    if (hasBookmarkFilter) {\r\n                        const dataSetIds = bookmarks.datasets.map(dataset => dataset.keyId.toString());\r\n                        dataProfileCards = (dataProfileCards as DataProfileCard[]).filter(dataset => dataSetIds.includes(dataset.id.toString()));\r\n                    }\r\n                    if (state.search.length > 0 || state.filterString.length > 0) {\r\n                        logGAevent(state.search, type, dataProfileCards.length);\r\n                        dispatch({ type: 'refined-search-complete', payload: dataProfileCards });\r\n                    } else {\r\n                        dispatch({ type: 'search-complete', payload: dataProfileCards });\r\n                    }\r\n                }).catch(error => {\r\n                    if (!(error && error.message && error.message === 'Search canceled due to new request.')) {\r\n                        console.warn(error);\r\n                    }\r\n                });\r\n            } else if (type === 'solutions') {\r\n                APIManager.search(state.search, state.filterString, ['isType:Solution']).then(res => {\r\n                    let solutionCards = get(res, 'data.hits.hits', []);\r\n                    solutionCards = solutionCards.map((item: Hit) => mapSearchResultToSolution(item._source));\r\n                    if (hasBookmarkFilter) {\r\n                        const solutionIds = bookmarks.solutions.map(solution => solution.keyId.toString());\r\n                        solutionCards = (solutionCards as APISolution[]).filter(solution => solutionIds.includes(solution.KeyPlatformService.toString()));\r\n                    }\r\n                    if (state.search.length > 0 || state.filterString.length > 0) {\r\n                        logGAevent(state.search, type, solutionCards.length);\r\n                        dispatch({ type: 'refined-search-complete', payload: solutionCards });\r\n                    } else {\r\n                        dispatch({ type: 'search-complete', payload: solutionCards });\r\n                    }\r\n                }).catch(error => {\r\n                    if (!(error && error.message && error.message === 'Search canceled due to new request.')) {\r\n                        console.warn(error);\r\n                    }\r\n                });\r\n            } else if (type === 'combinedProducts') {\r\n                const searchtype = getSearchType('', true);\r\n                if (updateSearchType) updateSearchType(searchtype === SearchType.llmSearch);\r\n                if (searchtype === SearchType.openSearch) {\r\n                    resetGenAIAttribute();\r\n                    APIManager.search(state.search, state.filterString, undefined, queryFilter).then(res => {\r\n                        let data = get(res, 'data.hits.hits', []).map((hit: Hit) => {\r\n                            if (hit._source.isType === 'Solution') {\r\n                                return mapSearchResultToSolution(hit._source);\r\n                            }\r\n                            if (hit._source.isType === 'Blueprint') {\r\n                                return mapSearchResultToBluePrint(hit._source);\r\n                            }\r\n                            return mapSearchResultToDataProfileCard(hit._source);\r\n                        });\r\n                        if (!enabledBlueprintFlag) {\r\n                            data = data.filter((x: any) => x.KeyMarketplaceBlueprint === undefined);\r\n                        }\r\n                        if (hasBookmarkFilter) {\r\n                            if (filterType === 'datasets') {\r\n                                const dataSetIds = bookmarks.datasets.map(dataset => dataset.keyId.toString());\r\n                                data = (data as DataProfileCard[]).filter(dataset => 'id' in dataset)\r\n                                    .filter(dataset => dataSetIds.includes(dataset.id.toString()));\r\n                            } else {\r\n                                const solutionIds = bookmarks.solutions.map(solution => solution.keyId.toString());\r\n                                data = (data as APISolution[]).filter(solution => 'KeyPlatformService' in solution)\r\n                                    .filter(solution => solutionIds.includes(solution.KeyPlatformService));\r\n                            }\r\n                        }\r\n                        if (state.search.length > 0 || state.filterString.length > 0) {\r\n                            logGAevent(state.search, type, data.length);\r\n                            dispatch({ type: 'refined-search-complete', payload: data });\r\n                        } else {\r\n                            dispatch({ type: 'search-complete', payload: data });\r\n                        }\r\n                    });\r\n                } else if (searchtype === SearchType.llmSearch) {\r\n                    setIsLLMSearch(true);\r\n                    if (state.status === 'rehydrating') setGenAISubmit(true);\r\n                }\r\n            } else if (type === 'querylibrary') {\r\n                APIManager.search(state.search, state.filterString, ['isType:Query']).then(res => {\r\n                    let searchResult = get(res, 'data.hits.hits', []);\r\n                    searchResult = searchResult.map((item: Hit) => mapSearchResultsToQuery(item._source));\r\n                    if (hasBookmarkFilter) {\r\n                        const queryIds = bookmarks.queries ? bookmarks.queries.map(queries => queries.keyId.toString()) : [];\r\n                        searchResult = (searchResult as Query[]).filter(qry => queryIds.includes(qry.queryId.toString()));\r\n                    }\r\n                    if (state.search.length > 0 || state.filterString.length > 0) {\r\n                        logGAevent(state.search, type, searchResult.length);\r\n                        dispatch({ type: 'refined-search-complete', payload: searchResult });\r\n                    } else {\r\n                        dispatch({ type: 'search-complete', payload: searchResult });\r\n                    }\r\n                });\r\n            } else if (type === 'blueprints') {\r\n                APIManager.search(state.search, state.filterString, ['isType:Blueprint']).then(res => {\r\n                    let bluePrintCards = get(res, 'data.hits.hits', []);\r\n                    bluePrintCards = bluePrintCards.map((item: Hit) => mapSearchResultToBluePrint(item._source));\r\n                    if (hasBookmarkFilter) {\r\n                        const bluePrintIds = bookmarks.blueprints && bookmarks.blueprints.map(blueprint => blueprint.keyId.toString());\r\n                        bluePrintCards = (bluePrintCards as APIBlueprint[]).filter(blueprint => bluePrintIds && bluePrintIds.includes(blueprint.KeyMarketplaceBlueprint.toString()));\r\n                    }\r\n                    if (state.search.length > 0 || state.filterString.length > 0) {\r\n                        logGAevent(state.search, type, bluePrintCards.length);\r\n                        dispatch({ type: 'refined-search-complete', payload: bluePrintCards });\r\n                    } else {\r\n                        dispatch({ type: 'search-complete', payload: bluePrintCards });\r\n                    }\r\n                }).catch(error => {\r\n                    if (!(error && error.message && error.message === 'Search canceled due to new request.')) {\r\n                        console.warn(error);\r\n                    }\r\n                });\r\n            }\r\n        }\r\n        const historyListener = HistoryInstance.listen((location, action) => {\r\n            if (location.pathname === urlPath) {\r\n                const newSearch = QST.getSearchItem('search') || '';\r\n                const newFilters = QST.getSearchItem('filters') || '';\r\n                // if action = POP (back) or is refresh (click top menu) then rehydrate!\r\n                const isReset = action === 'PUSH' && newSearch === '' && newFilters === '';\r\n                const isNewSearch = action === 'PUSH' && newSearch !== state.search;\r\n                if (action === 'POP' || isReset || isNewSearch) {\r\n                    dispatch({ type: 'rehydrate-state', payload: hydrateStateFromUrl() });\r\n                }\r\n            }\r\n        });\r\n        return () => {\r\n            historyListener();\r\n        };\r\n    }, [state.status, state.search]);\r\n\r\n    const resetFilters = () => {\r\n        if (state.filterCount === 0) return;\r\n        dispatch({ type: 'reset-filters' });\r\n        QST.removeSearchItem('filters');\r\n    };\r\n\r\n    response.selectComponent = selectComponent(type, state.sort, state.listLength < 1, (name: string, value: string) => {\r\n        dispatch({ type: 'update-sort', payload: value });\r\n        updateSortUrl(value);\r\n    });\r\n\r\n    response.searchComponent = searchComponent(type, activeTab || 0, isLLMSearch ? [] : state.list, state.search, state.status === 'searching', (value: string) => {\r\n        const payload = value.replace(/ {2,}/g, ' ');\r\n        const searchType = getSearchType(payload, false);\r\n        if (updateSearchType) updateSearchType(searchType === SearchType.llmSearch);\r\n        dispatch({ type: 'update-search', payload });\r\n        if (hasGenAISearchError) setHasGenAISearchError(false);\r\n        if (searchType === SearchType.llmSearch && genAIResponse && feedback !== '') {\r\n            setClearFeedbackFlag(true);\r\n            setFeedback('');\r\n        }\r\n        updateSearchUrl(payload, () => dispatch({ type: 'update-search-debounced' }));\r\n    }, (val: number) => {\r\n        if (resetFilters) resetFilters();\r\n        QST.setSearchItem({ tab: val }, true);\r\n    },\r\n    urlPath, isLLMSearch,\r\n    (isSubmit: boolean) => {\r\n        const value = getSearchType('', true);\r\n        if (value === SearchType.llmSearch && isSubmit) {\r\n            setGenAISubmit(isSubmit);\r\n        }\r\n    }, genAISubmit, genAIResponse);\r\n\r\n    response.filterComponent = filterComponent(\r\n        state.filters,\r\n        resetFilters,\r\n        state.filterCount > 0,\r\n        (filterItems: FilterCheckBoxItem[], filterKey: string) => {\r\n            dispatch({ type: 'update-filter', payload: { filterItems, filterKey } });\r\n\r\n            updateFilterURL(filterItems, filterKey);\r\n        }\r\n    );\r\n\r\n    response.lozengeFilterComponent = lozengeFilterComponent(state.filters, (filterItems: FilterObjects[]) => {\r\n        dispatch({ type: 'update-lozenge-filters', payload: filterItems });\r\n        updateFiltersURL(filterItems);\r\n    });\r\n\r\n    response.mobileSelectComponent = mobileSelectComponent(type, state.sort, state.listLength < 1, (name: string, value: string) => {\r\n        dispatch({ type: 'update-sort', payload: value });\r\n        updateSortUrl(value);\r\n    });\r\n\r\n    response.mobileFilterComponent = mobileFilterComponent(state.filters, resetFilters, state.filterCount, (newFilters: FilterObjects[]) => {\r\n        dispatch({ type: 'update-filters', payload: newFilters });\r\n        updateFiltersURL(newFilters);\r\n    });\r\n\r\n    return (\r\n        <>\r\n            {render({\r\n                ...response,\r\n                sort: state.sort,\r\n                search: state.search,\r\n                isSearching: isLLMSearch ? isLLMSearch && genAISubmit : state.status === 'searching' || state.status === 'initial-load' || state.status === 'rehydrating',\r\n                listLength: state.listLength,\r\n                list: authdata(sortedList(state.sort, type, state.list), userEmail),\r\n                filterCount: state.filterCount,\r\n                status: state.status,\r\n                resetFilters,\r\n                isLLMSearch,\r\n                genAIResponse,\r\n                hasGenAISearchError,\r\n                clearFeedbackFlag\r\n            })}\r\n        </>\r\n    );\r\n};\r\n\r\nexport default React.memo(searchProvider);\r\n","import * as React from 'react';\r\nimport HtmlContent from '../_common/html-content';\r\nimport CustomLink from '../_common/custom-link';\r\n\r\nconst gaLabel = 'Product Finder Promo';\r\n\r\nfunction ProductFinderPromo(props: PageSectionData) {\r\n    const { title, content, linkText, linkUrl } = props;\r\n    return (\r\n        <section className=\"product-finder-promo page-section\">\r\n            <div className=\"page-section__inner\">\r\n                <div className=\"product-finder-promo__content\">\r\n                    <HtmlContent html={`${title}${content}`} />\r\n                    <CustomLink text={linkText} gaLabel={gaLabel} url={linkUrl} linkTheme=\"alternative\" hasIcon isUpperCase />\r\n                </div>\r\n            </div>\r\n        </section>\r\n    );\r\n}\r\n\r\nexport default React.memo(ProductFinderPromo);\r\n","import * as React from 'react';\r\nimport { getConfig } from '../../helpers';\r\nimport CustomLink from '../_common/custom-link';\r\nimport './product-preview-section.style.scss';\r\n\r\nconst Carousel = React.lazy(() => import('../_common/carousel'));\r\n\r\nexport default function ProductPreviewSection(props: ProductPreviewSectionProps) {\r\n    const { title, description, linkUrl, linkText, children, productPreviewSectionConfig = getConfig('components.product-preview-section') } = props;\r\n\r\n    return (\r\n        <section className=\"product-preview-section page-section\">\r\n            <div className=\"product-preview-section__inner page-section__inner\">\r\n                <div className=\"product-preview-section__intro\">\r\n                    <div>\r\n                        <h2>{title}</h2>\r\n                        <p className=\"p--large\">{description}</p>\r\n                    </div>\r\n                    <CustomLink url={linkUrl} text={linkText} linkTheme=\"alternative\" hasIcon isUpperCase />\r\n                </div>\r\n                <div className=\"product-preview-section__preview\">\r\n                    <Carousel carouselSettings={productPreviewSectionConfig.carouselOptions}>{children}</Carousel>\r\n                </div>\r\n            </div>\r\n        </section>\r\n    );\r\n}\r\n","import * as React from 'react';\r\nimport Media from 'react-media';\r\n\r\nexport default class DataControlsPanel extends React.PureComponent<DataControlPanelProps> {\r\n    public render() {\r\n        const {\r\n            filterComponent,\r\n            selectComponent,\r\n            mobileFilterComponent,\r\n            mobileSelectComponent,\r\n            lozengeFilterComponent\r\n        } = this.props;\r\n        return (\r\n            <section className=\"data-controls page-section\">\r\n                <Media query={{ maxWidth: 1023 }}>\r\n                    <div className=\"data-controls__panel data-controls__panel--mobile page-section__inner\">\r\n                        {mobileFilterComponent}\r\n                        {mobileSelectComponent}\r\n                    </div>\r\n                </Media>\r\n                <Media query={{ minWidth: 1024 }}>\r\n                    <div className=\"page-section\">\r\n                        <div className=\"data-controls__panel data-controls__panel--desktop page-section__inner\">\r\n                            {filterComponent}\r\n                            <div className=\"data-controls__dropdown\">{selectComponent}</div>\r\n                        </div>\r\n                        <div className=\"data-controls__lozenge-panel page-section__inner\">{lozengeFilterComponent}</div>\r\n                    </div>\r\n                </Media>\r\n            </section>\r\n        );\r\n    }\r\n}\r\n","/* eslint-disable no-useless-constructor */\r\nimport * as React from 'react';\r\nimport HelmetManager from '../../components/_common/helmet-manager';\r\nimport { getText, getConfig, getPageTextsSection } from '../../helpers';\r\nimport Breadcrumb from '../../components/breadcrumb';\r\nimport DataSetControlsPanel from '../../components/data-controls-panel';\r\nimport SearchEmptyResults from '../../components/search-empty-results';\r\nimport ProductPreviewSection from '../../components/product-preview-section';\r\nimport ProductFinderPromo from '../../components/product-finder-promo';\r\nimport DataTile from '../../components/tile/dataset-tile';\r\nimport TileGrid from '../../components/tile-grid';\r\nimport Loader from '../../components/_common/loader';\r\nimport PageLoaded from '../../components/_common/page-loaded';\r\nimport SearchProvider from '../../components/_providers/search-provider/search-provider';\r\n\r\nconst metaDataText = getText('pages.solutions.metaData');\r\nconst productPreviewSectionConfig = getConfig('routes.solutions.product-preview-section');\r\n\r\nconst pageText = getConfig('pagetext.solutions');\r\nconst langCode = getText('langCode');\r\n\r\nexport default class Solutions extends React.PureComponent<PageProps & SolutionsProps & SolutionsActions, {}> {\r\n    public constructor(props: PageProps & SolutionsProps & SolutionsActions) {\r\n        super(props);\r\n    }\r\n\r\n    public componentDidMount() {\r\n        const { fetchInitialSolutions } = this.props;\r\n        fetchInitialSolutions();\r\n    }\r\n\r\n    public render() {\r\n        const { solutions, datasets, keyPage, startDate, pageTextsData, bookmarks, bookmarksLoaded, filters } = this.props;\r\n        const hasSolutions = solutions && solutions.length > 0;\r\n        const hasFilters = !!filters.length;\r\n        const noResultsSection = getPageTextsSection(pageText.noResultSection.noresults, pageTextsData);\r\n        const datasetSection = getPageTextsSection(pageText.datasetSection, pageTextsData);\r\n        const productFinderPromo = getPageTextsSection(pageText.productFinderPromo, pageTextsData) as PageSectionData;\r\n        if (!hasSolutions && !hasFilters) return <Loader minHeight=\"50vh\" />;\r\n\r\n        return (\r\n            <article className=\"page page--noMargin solutions\">\r\n                <HelmetManager metaData={metaDataText} />\r\n                <Breadcrumb pathData={[{ text: getText('generic.solutions'), url: '/solutions' }]} noMargin />\r\n                {hasSolutions && hasFilters && (\r\n                    <> <SearchProvider\r\n                        type=\"solutions\"\r\n                        bookmarks={bookmarks}\r\n                        bookmarksLoaded={bookmarksLoaded}\r\n                        filters={filters}\r\n                        urlPath={`/${langCode}/solutions`}\r\n                        render={(response: SearchProviderResponse) => (\r\n                            <>\r\n                                {response.searchComponent}\r\n\r\n                                <DataSetControlsPanel\r\n                                    selectComponent={response.selectComponent}\r\n                                    filterComponent={response.filterComponent}\r\n                                    lozengeFilterComponent={response.lozengeFilterComponent}\r\n                                    mobileSelectComponent={response.mobileSelectComponent}\r\n                                    mobileFilterComponent={response.mobileFilterComponent}\r\n                                />\r\n\r\n                                {!response.list.length && response.isSearching && <Loader minHeight=\"80vh\" />}\r\n\r\n                                {!response.list.length && !response.isSearching && (\r\n                                    <>\r\n                                        <SearchEmptyResults\r\n                                            noResultsFound={noResultsSection.title}\r\n                                            message={noResultsSection.content}\r\n                                            otherPages\r\n                                            isModified\r\n                                        />\r\n                                    </>\r\n                                )}\r\n\r\n                                {!!response.list.length && <TileGrid list={response.list as APISolution[]} loading={response.isSearching} />}\r\n\r\n                                <hr />\r\n                                {datasets &&\r\n                                <ProductPreviewSection\r\n                                    title={datasetSection.title}\r\n                                    description={datasetSection.content}\r\n                                    linkText={datasetSection.linkText}\r\n                                    linkUrl={datasetSection.linkUrl}\r\n                                    productPreviewSectionConfig={productPreviewSectionConfig}\r\n                                >\r\n                                    {datasets.map((dataProfile: DataProfileCard) => (\r\n                                        <DataTile key={dataProfile.id} dataProfile={dataProfile} />\r\n                                    ))}\r\n                                </ProductPreviewSection>}\r\n\r\n                                <ProductFinderPromo {...productFinderPromo} />\r\n\r\n                                {hasSolutions &&\r\n                                        response.status === 'loaded-results' &&\r\n                                        response.search === '' &&\r\n                                        response.filterCount === 0 && <PageLoaded keyPage={keyPage} startDate={startDate} />}\r\n                            </>\r\n                        )}\r\n                    />\r\n                    </>)}\r\n                {/* {hasSolutions ? (\r\n                    <TileGrid\r\n                        list={solutions}\r\n                    />\r\n                ) : (\r\n                    <Loader minHeight=\"500px\" />\r\n                )}\r\n                <hr />\r\n                <ProductPreviewSection\r\n                    title={datasetSection.title}\r\n                    description={datasetSection.content}\r\n                    linkText={datasetSection.linkText}\r\n                    linkUrl={datasetSection.linkUrl}\r\n                    productPreviewSectionConfig={productPreviewSectionConfig}\r\n                >\r\n                    {datasets.map((dataProfile: DataProfileCard) => (\r\n                        <DataTile key={dataProfile.id} dataProfile={dataProfile} />\r\n                    ))}\r\n                </ProductPreviewSection>\r\n                <ProductFinderPromo {...productFinderPromo} /> */}\r\n                {/* {solutions.length > 0 && <PageLoaded keyPage={keyPage} startDate={startDate} />} */}\r\n            </article>\r\n        );\r\n    }\r\n}\r\n","import { connect } from 'react-redux';\r\nimport { AnyAction } from 'redux';\r\nimport { ThunkDispatch } from 'redux-thunk';\r\nimport { fetchInitialSolutions } from '../../redux/solutions/solutions.actions';\r\nimport { authdata, get, getConfig } from '../../helpers';\r\nimport Solutions from './solutions';\r\nimport keyPageIds from '../../utilities/key-pages';\r\n\r\nconst mapStateToProps = (state: RootStoreState) => {\r\n    const isLoggedIn = get(state, 'user.isLoggedIn', false);\r\n    const datasets = get(state, 'datasets.all.response', []) as DataProfileCard[];\r\n    let solutions = get(state, 'solutions.all.response', []) as APISolution[];\r\n    const userEmail = state && state.user && state.user.userInfo ? state.user.userInfo.Email : '';\r\n    solutions = authdata(solutions, userEmail);\r\n    const featuredData = get(state, 'filters.featuredDatasets', []) as DatasetFeaturedAlternative[];\r\n    const filterOptions = getConfig('components.filterOptions');\r\n    const pageTextsData = get(state, 'shared.pageSections.data', []) as PageSections[];\r\n    const bookmarkPreference = get(state.user, 'bookmarkPreference', { bookMarks: { datasets: [], solutions: [], queries: [], blueprints: [] }, bookmarksLoaded: false });\r\n    const { bookMarks = { datasets: [], solutions: [], queries: [], blueprints: [] }, bookmarksLoaded = false } = bookmarkPreference;\r\n    let filters: FilterObjects[] = [];\r\n    const bookmarkFiletr = {\r\n        filterKey: filterOptions.bookmark.filterKey,\r\n        items: get(state, 'filters.bookmark', [])\r\n    };\r\n\r\n\r\n    const catagories = get(state, 'filters.solutionCategories', []);\r\n\r\n    if (catagories.length) {\r\n        filters = [\r\n            {\r\n                filterKey: filterOptions.category.filterKey,\r\n                items: catagories\r\n            },\r\n            {\r\n                filterKey: filterOptions.vendor.filterKey,\r\n                items: get(state, 'filters.solutionVendors', [])\r\n            }\r\n        ];\r\n        if (isLoggedIn) {\r\n            filters.push(bookmarkFiletr);\r\n        }\r\n    }\r\n    const datasetTiles: DataProfileCard[] = [];\r\n    featuredData.sort((a, b) => a.FormOrder - b.FormOrder).forEach(dataset => {\r\n        const ds = datasets.find(filterdataset => filterdataset.id === dataset.KeyMarketplaceDataset || filterdataset.id === dataset.KeyMarketplaceDatasetBundle);\r\n        if (ds) datasetTiles.push(ds);\r\n    });\r\n    return {\r\n        solutions,\r\n        bookmarks: bookMarks,\r\n        bookmarksLoaded,\r\n        filters,\r\n        datasets: datasetTiles,\r\n        isLoggedIn: state.user.isLoggedIn,\r\n        pageTextsData: pageTextsData.filter(x => x.KeyOnlinePage === keyPageIds.solutionsPage)\r\n    };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch: ThunkDispatch<{}, {}, AnyAction>): SolutionsActions => ({\r\n    fetchInitialSolutions: () => dispatch(fetchInitialSolutions())\r\n});\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(Solutions);\r\n"],"sourceRoot":""}