{"version":3,"file":"core.dd06a8625c570ddf7c4f.bundle.js","mappings":"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","sources":["webpack://elc-service-search/./src/internal/constants/Search.ts","webpack://elc-service-search/./src/internal/interfaces/ISearchInterfaces.ts","webpack://elc-service-search/./src/service-setup/ConfigStore.tsx","webpack://elc-service-search/./src/api/DataMappings.ts","webpack://elc-service-search/./src/api/SearchApiSdk.ts","webpack://elc-service-search/./src/service-setup/ServiceBusController.ts","webpack://elc-service-search/./src/service-setup/SearchService.ts","webpack://elc-service-search/./src/internal/domain/entities/SearchCatalog.ts","webpack://elc-service-search/./src/internal/domain/entities/SearchFiltersCatalog.ts","webpack://elc-service-search/./src/internal/domain/entities/SearchPaginationCatalog.ts","webpack://elc-service-search/./src/internal/domain/entities/SearchTypeaheadCatalog.ts","webpack://elc-service-search/./src/internal/domain/entities/SearchContentCatalog.ts","webpack://elc-service-search/./src/internal/domain/entities/SearchArticleCatalog.ts","webpack://elc-service-search/./src/internal/repositories/SearchRepository.ts","webpack://elc-service-search/./src/internal/use-cases/SearchLoadedUseCase.ts","webpack://elc-service-search/./src/internal/use-cases/SearchContentLoadedUseCase.ts","webpack://elc-service-search/./src/internal/controllers/SearchResultsViewController.ts","webpack://elc-service-search/./src/internal/use-cases/SearchTypeaheadUseCase.ts","webpack://elc-service-search/./src/internal/controllers/SearchGnavInputFieldViewController.ts","webpack://elc-service-search/./src/internal/controllers/VoiceSearchViewController.ts","webpack://elc-service-search/./src/internal/domain/entities/Config.ts","webpack://elc-service-search/./src/internal/repositories/ConfigRepository.ts","webpack://elc-service-search/./src/internal/use-cases/SearchServiceStartedUseCase.ts","webpack://elc-service-search/./src/service-setup/diContainer.tsx"],"sourcesContent":["const { name } = __serviceInfo__;\n\nexport const SERVICE_NAME = name;\n\nexport const ENDECA_URL_GUIDEDSEARCH_PREFIX =\n 'https://integration.ncsa.sdapi.io/guidedsearch-v0/genienaen';\n\nexport const ENDECA_URL_TYPEAHEAD_PREFIX =\n 'https://integration.ncsa.sdapi.io/typeahead-v0/genienaen';\n\nexport const ENDECA_PARAMS = 'Ntk=All&Ntt=';\n\nexport const ENDECA_REDIRECT = 'endeca:redirect';\n\nexport const SEARCH_PARAM = '?search=';\n\nexport const SEARCH_TYPE_PARAM = '&search_type=';\n\nexport const SEARCH_TYPE_PARAM_EXTERN = '?search_type=';\n\nexport const VOICE_SEARCH_PARAM = 'voice_search';\n\nexport const GNAV_SEARCH_TAG_BLOCKS = 'gnav-search__tags-body';\n\nexport const STATE_PARAM = '&state=';\n\nexport const NR_PARAM = '&Nr=buid:';\n\nexport const PARAM_OR = 'OR';\n\nexport const NR_PARAM_AND = '&Nr=AND(buid:';\n\nexport const TYPE_PARAM = 'type:';\n\nexport const WILDCARD_CHAR = '*';\n\nexport const HIDE_CTA = 'hide_cta';\n\nexport const ADD_TO_BAG = 'add_to_bag';\n\nexport const SHOP_NOW = 'shop_now';\n\nexport const MIN_SEARCH_LENGTH = 3;\n\nexport const DEBOUNCE_LIMIT = 350;\n\nexport const OVERLAY_PRODUCT_RESULTS_LIMIT = 4;\n\nexport const CONTENT_SEARCH_ITEMS_LIMIT = 3;\n\nexport const DISPLAY_PRODUCT_IDS = 'display_product_ids';\n\nexport const DISPLAY_SKU_IDS = 'display_sku_ids';\n\nexport const PREDICTIVE_SEARCH_PARAM = 'predictive_';\n\nexport const STANDARD_SEARCH_PARAM = 'standard';\n\nexport const TAGS_SEARCH_PARAM = 'attributes';\n\nexport const FILTERS_SEARCH_PARAM = 'filters';\n\nexport const SEARCH_TEXT_PARAM = 'text';\n\nexport const SEARCH_REDIRECT_PARAM = 'redirect';\n\nexport const PREDICTIVE_CONTENT_SEARCH_PARAM = 'predictive_content';\n\nexport const PREDICTIVE_VIEWCONTENT_SEARCH_PARAM = 'predictive_viewcontent';\n\nexport const PREDICTIVE_PRODUCTS_SEARCH_PARAM = 'predictive_text';\n\nexport const STANDARD_PRODUCTS_SEARCH_PARAM = 'standard_text';\n\nexport const STANDARD_CONTENT_SEARCH_PARAM = 'standard_content';\n\nexport const STANDARD_VIEWCONTENT_SEARCH_PARAM = 'standard_viewcontent';\n\nexport const TRENDING_SEARCH_PARAM = 'trendingterms';\n\nexport const CONTENT_PARAM_FALSE = 'content:false';\n\nexport const CONTENT_PARAM_TRUE = 'content:true';\n\nexport const ENDLESS_SCROLL_DEBOUNCE_LIMIT = 500;\n\nexport const ENDLESS_SCROLL_ALLOWED_PIXELS = 400;\n\nexport const SPEAK_SCREEN_LIMIT = 2000;\n\nexport const ratingProps = Object.freeze({\n percentageRating: 50, // reviews.average_rating\n reviewsNumber: 100, // reviews.number_of_reviews\n selectedRating: 3,\n showReviews: true,\n showReadReviews: false,\n isDisabled: true,\n readReviewsLabel: '',\n numberOfStars: 5\n});\n\nexport enum RESULTS_MESSAGE {\n NO_MESSAGE = -1,\n NO_RESULTS = 0,\n RESULTS_FOUND = 1,\n RESULTS_FOUND_OVERLAY = 2,\n RESULTS_ADJUSTMENT = 3,\n STORIES_RESULT_OVERLAY = 4,\n STORIES_RESULT_PAGE = 5\n}\n\nexport const TOUT_COUNT = 5;\n\nexport const SEARCH_TERM = '::search_term::';\n\nexport const RECS_COUNT = '::recs_count::';\n\nexport const RESULTS_COUNT = '::results_count::';\n\nexport const ADJUSTED_SEARCH_TERM = '::adjusted_search_term::';\n\nexport enum SEARCH_VIEW {\n OVERLAY = 1,\n RESULTS_PAGE = 2,\n VOICE_SEARCH = 3,\n OVERLAY_ARTICLES = 4,\n PAGE_ARTICLES = 5,\n ENHANCED_SEARCH_OVERLAY = 6,\n ENHANCED_SEARCH_RESULTS_PAGE = 7\n}\n\nexport enum VIEW_TYPE {\n GNAV = 'Overlay',\n PAGE = 'Results'\n}\n\nexport enum contentSize {\n small = 'small',\n large = 'large',\n wide = 'wide',\n tall = 'tall',\n full = 'full'\n}\n\nexport enum TOGGLE_TYPE {\n CHECKBOX = 'checkbox',\n SWITCH = 'switch'\n}\n\nexport enum RESULT_TYPE {\n TOUT = 'tout',\n ARTICLE = 'article',\n VIDEO = 'video',\n BANNER = 'banner'\n}\n\nexport enum RESULT_TYPE_QUERY {\n TOUT_TYPE = 'type:tout',\n ARTICLE_TYPE = 'type:article',\n VIDEO_TYPE = 'type:video',\n BANNER_TYPE = 'type:banner'\n}\n\nexport enum TAB_TYPE {\n PRODUCTS = 'products',\n STORIES = 'stories'\n}\n\nexport enum FILTER_TYPES {\n CHIPS = 'chips',\n CHECKED = 'check_boxes'\n}\n\nexport const CONTROL_DISPLAY_CONDITIONS = {\n hide: { table: { disable: true } },\n disable: { control: { disable: true } }\n};\n\nexport const CONTROL_TYPES = {\n boolean: { summary: 'boolean' },\n object: { summary: 'object' },\n array: { summary: 'array' },\n string: { summary: 'text' }\n};\n\nexport const CONTROL_DEFAULT_VALUES = {\n true: { summary: 'TRUE' },\n false: { summary: 'FALSE' }\n};\n","import { contentSize } from '../constants/Search';\n\nexport interface ISearchResult {\n resultsList: IRecords;\n navigation: INavigation;\n breadcrumbs: IBreadcrumb;\n 'endeca:redirect': IUrl;\n searchAdjustments: ISearchAdjustments;\n}\n\nexport interface ISearchAdjustments {\n adjustedSearches: IAdjustedSearches;\n originalTerms: string[];\n adjustedTerms: string;\n}\n\nexport interface IAdjustedSearches {\n [key: string]: IAdjustedSearchesObject[];\n}\n\nexport interface IAdjustedSearchesObject {\n autoPhrased: boolean;\n adjustedTerms: string;\n spellCorrected: boolean;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const SearchSortingTranslations: any = {\n Relevance: 'sortTopRated',\n 'Price (Ascending)': 'sortPriceLowHigh',\n 'Price (Descending)': 'sortPriceHighLow'\n};\n\nexport interface ITypeaheadResult {\n children: IDimensionSearchGroups[];\n}\nexport interface IDimensionSearchGroups {\n dimensionSearchGroups: IDimensionSearchValues[];\n}\n\nexport interface IDimensionSearchValues {\n dimensionSearchValues: IItemTypeahead[];\n}\n\nexport interface IItemTypeahead {\n link: string;\n label: string;\n count: number;\n}\n\nexport interface IRecords {\n recsPerPage: number;\n totalNumRecs: number;\n firstRecNum: number;\n lastRecNum: number;\n pagingActionTemplate: ILink;\n records: IRecord[];\n sortOptions: ISortOption[];\n}\n\nexport interface IRecord {\n attributes: IAttributes;\n records: ISubRecord[];\n}\n\nexport interface IAttributes {\n p_product_id: string[];\n s_sku_id: string[];\n content: string[];\n type: string[];\n c_node_id: string[];\n}\n\nexport interface ISubRecord {\n attributes: ISubAttributes;\n}\n\nexport interface ISubAttributes {\n s_sku_id: string[];\n c_template_title: string[];\n c_uri: string[];\n c_url_alias: string[];\n // @todo Needs to be updated after DRUPALPLAT-5595 is done\n c_meta_og_description?: string[];\n}\n\nexport interface ILink {\n link: string;\n}\n\nexport interface IUrl {\n link: {\n url: string;\n };\n}\n\nexport interface ISortOption {\n label: string;\n link: string;\n selected: boolean;\n}\n\nexport interface INavigation {\n navigation: INavigationItem[];\n}\n\nexport interface INavigationItem {\n dimensionName: string;\n refinements: IRefinement[];\n}\n\nexport interface IRefinement {\n count: number;\n label: string;\n link: string;\n}\n\nexport interface INavigationFilter {\n dimensionName: string;\n refinementsValues: IRefinement[];\n}\n\nexport interface IBreadcrumb {\n refinementCrumbs: IBreadcrumbFilter[];\n}\n\nexport interface IBreadCrumbItem {\n dimensionName: string;\n label: string;\n link: string;\n removeAction: ILink;\n}\n\nexport interface IBreadcrumbFilter {\n dimensionName: string;\n label: string;\n link: string;\n removeAction: ILink;\n}\n\nexport interface IProdObjListItem {\n productId: string;\n defaultSkuId: string;\n skuIds: string[];\n}\n\nexport interface IContentObjListItem {\n type: string;\n nId: string;\n articles: ISubRecord[];\n}\n\nexport interface IArticleObjItem {\n nId: string;\n templateTitle: string;\n uri: string;\n urlAlias: string;\n shortDescription?: string;\n}\n\nexport enum ItemTypes {\n sku = 'sku',\n product = 'product'\n}\n\ninterface IItemParams {\n id: string;\n}\nexport interface IProductParams extends IItemParams {\n defaultSkuId?: string;\n skusToDisplay?: string[];\n featured?: boolean;\n}\nexport type ISkuParams = IItemParams;\n\ntype ItemByType = { [K in ItemTypes]: ISkuParams[] | IProductParams[] };\n\nexport interface IItemByType extends ItemByType {\n [K: string]: ISkuParams[] | IProductParams[];\n}\n\nexport interface IItem {\n type: ItemTypes;\n params: ISkuParams | IProductParams;\n}\n\nexport interface ISearchPaths {\n guidedSearch: string;\n typeahead: string;\n}\n\nexport interface ISearchConfig {\n assemblerUrl: string;\n assemblerPaths: ISearchPaths;\n assemblerName: string;\n}\n\nexport interface INumRecs {\n totalNumRecs: number;\n lastRecNum: number;\n}\n\nexport interface IToutItem {\n nId: number | string;\n nPsn: number;\n nSize: contentSize;\n}\n\nexport interface ITrendingTermItem {\n trendingTerm: string;\n link?: string;\n searchTerm?: string;\n}\n\nexport interface IEnhancedConfig {\n toutItem?: IToutItem[];\n favoriteProducts?: IItem[];\n terms?: ITrendingTermItem[];\n}\n\nexport interface IPropsSearchConfig {\n enhancedConfig?: IEnhancedConfig;\n minSearchLength?: number;\n searchDisplayFormat: string;\n enableContentSearch?: boolean;\n contentEnabledConfig?: IContentEnabledConfig;\n}\n\nexport interface IContentEnabledConfig {\n enableContentArticle?: boolean;\n enableContentBanner?: boolean;\n enableContentTout?: boolean;\n enableContentVideo?: boolean;\n}\n\nexport interface IProductGridBreakpoints {\n numColumnsMobile: number;\n numColumnsDesktop: number;\n numColumnsLargeScreen: number;\n numColumnsExtraLargeScreen: number;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { observable, action } from 'mobx';\n\nexport class ConfigStore {\n @observable public config: any = {};\n\n constructor(config: any) {\n this.updateConfig(config);\n }\n\n @action\n public updateConfig(config: any) {\n this.config = { ...this.config, ...config };\n }\n}\n","import { ISearchPagination } from '../internal/domain/entities/SearchPaginationCatalog';\nimport {\n ISearchResult,\n ISortOption,\n INavigationItem,\n INavigationFilter,\n IRefinement,\n IBreadCrumbItem,\n IBreadcrumbFilter,\n ITypeaheadResult,\n IDimensionSearchValues,\n IItemTypeahead,\n IProdObjListItem,\n IContentObjListItem\n} from '../internal/interfaces/ISearchInterfaces';\nimport { ENDECA_REDIRECT } from '../internal/constants/Search';\n\nconst DataMappings = {\n results: {\n response(resp: ISearchResult) {\n if (resp.hasOwnProperty(ENDECA_REDIRECT)) {\n const {\n 'endeca:redirect': {\n link: { url }\n }\n } = resp;\n\n return { url: url.trim() };\n } else {\n const {\n resultsList: {\n records,\n sortOptions,\n recsPerPage,\n totalNumRecs,\n firstRecNum,\n lastRecNum,\n pagingActionTemplate: { link: paginationLink }\n },\n navigation: { navigation },\n breadcrumbs: { refinementCrumbs },\n searchAdjustments: { adjustedSearches, originalTerms }\n } = resp;\n\n const pagination: ISearchPagination = {\n recsPerPage,\n totalNumRecs: totalNumRecs || 0,\n firstRecNum: firstRecNum || 0,\n lastRecNum: lastRecNum || 0,\n link: paginationLink.replace(/&jsonp=jsonp/g, '')\n };\n\n const contentObjListItems: IContentObjListItem[] = [];\n const prodObjListItems: IProdObjListItem[] = [];\n\n records.forEach((record) => {\n if (\n record.attributes.content &&\n record.attributes.content.length > 0 &&\n record.attributes.content[0] === 'true'\n ) {\n const content: IContentObjListItem = {\n type: record.attributes.type[0],\n nId: record.attributes.c_node_id[0],\n articles: record.records\n };\n contentObjListItems.push(content);\n } else {\n const product: IProdObjListItem = {\n productId: record.attributes.p_product_id[0],\n defaultSkuId: record.attributes.s_sku_id[0],\n skuIds: record.attributes.s_sku_id\n };\n prodObjListItems.push(product);\n }\n });\n\n const sortByOptions = sortOptions.map(\n (item: ISortOption): ISortOption => {\n const { label, selected } = item;\n let { link } = item;\n link = link.replace(/.jsonp=jsonp/g, '');\n\n return {\n link,\n label,\n selected\n };\n }\n );\n\n const navigationFilters = navigation.map(\n (item: INavigationItem): INavigationFilter => {\n const { dimensionName, refinements } = item;\n const refinementsValues = refinements.map(\n (refinementItem: IRefinement): IRefinement => {\n const { label, count } = refinementItem;\n let { link } = refinementItem;\n link = link.replace(/.jsonp=jsonp/g, '');\n\n return {\n label,\n link,\n count\n };\n }\n );\n\n return {\n dimensionName,\n refinementsValues\n };\n }\n );\n\n const breadcrumbsFilters = refinementCrumbs.map(\n (item: IBreadCrumbItem): IBreadcrumbFilter => {\n const { dimensionName, label, removeAction } = item;\n let { link } = removeAction;\n link = link.replace(/.jsonp=jsonp/g, '');\n\n return {\n dimensionName,\n label,\n link,\n removeAction\n };\n }\n );\n\n let adjustedTerm = '';\n\n if (adjustedSearches) {\n const originalTerm = originalTerms[0];\n if (adjustedSearches[originalTerm][0].spellCorrected) {\n adjustedTerm = adjustedSearches[originalTerm][0].adjustedTerms;\n }\n }\n\n return {\n prodObjListItems,\n contentObjListItems,\n sortByOptions,\n pagination,\n navigationFilters,\n breadcrumbsFilters,\n totalNumRecs,\n lastRecNum,\n firstRecNum,\n adjustedTerm\n };\n }\n }\n },\n typeahead: {\n response(resp: ITypeaheadResult) {\n const { children } = resp;\n const { dimensionSearchGroups } = children[0];\n const dimensionsTypeahead = dimensionSearchGroups.map(\n (item: IDimensionSearchValues) => {\n const { dimensionSearchValues } = item;\n\n const dimensionTypeahead = dimensionSearchValues.map(\n (dimensionProp: IItemTypeahead) => {\n const { label, count } = dimensionProp;\n\n let { link } = dimensionProp;\n\n link = link.replace(/.jsonp=jsonp/g, '');\n\n return {\n label,\n link,\n count\n };\n }\n );\n\n return dimensionTypeahead;\n }\n );\n\n return dimensionsTypeahead;\n }\n }\n};\n\nexport default DataMappings;\n","import { HttpTransport, DataMapper } from '@estee/elc-http-transport';\nimport {\n ENDECA_PARAMS,\n WILDCARD_CHAR,\n ENDECA_URL_GUIDEDSEARCH_PREFIX,\n ENDECA_URL_TYPEAHEAD_PREFIX,\n NR_PARAM,\n NR_PARAM_AND,\n CONTENT_PARAM_TRUE,\n CONTENT_PARAM_FALSE,\n PARAM_OR,\n RESULT_TYPE_QUERY\n} from '../internal/constants/Search';\nimport DataMappings from './DataMappings';\nimport { ISearchPaths, IContentEnabledConfig } from '../internal/interfaces/ISearchInterfaces';\n\nexport interface IPayload {\n searchTerm: string;\n wildCard?: boolean;\n queryState?: string;\n}\n\nexport interface IContentPayload {\n searchTerm: string;\n contentEnabledConfig?: IContentEnabledConfig;\n wildCard?: boolean;\n}\n\nexport interface ISearchApiSdk {\n httpTransport: HttpTransport;\n assemblerUrl?: string | undefined;\n assemblerName?: string | undefined;\n assemblerPaths?: ISearchPaths | undefined;\n buid: string;\n}\n\nexport class SearchApiSdk {\n protected httpTransport: HttpTransport;\n protected dataMapper: DataMapper;\n protected assemblerUrl: string | undefined;\n protected assemblerName: string | undefined;\n protected assemblerPaths: ISearchPaths | undefined;\n protected buid: string;\n\n constructor(props: ISearchApiSdk) {\n this.httpTransport = props.httpTransport;\n this.dataMapper = new DataMapper(DataMappings);\n this.assemblerUrl = props.assemblerUrl;\n this.assemblerName = props.assemblerName;\n this.assemblerPaths = props.assemblerPaths;\n this.buid = props.buid;\n }\n\n public getSearchResults = async (payload: IPayload) => {\n let endecaUrl = `${ENDECA_URL_GUIDEDSEARCH_PREFIX}`;\n\n if (!!this.assemblerUrl && !!this.assemblerName && !!this.assemblerPaths) {\n endecaUrl = `${this.assemblerUrl}${this.assemblerPaths.guidedSearch}/${this.assemblerName}`;\n }\n\n let url = endecaUrl;\n\n if (payload.queryState) {\n const token = payload.queryState.includes('?') ? '&' : '?';\n url = `${endecaUrl}${payload.queryState}${token}${ENDECA_PARAMS}${encodeURI(\n payload.searchTerm\n )}`;\n } else {\n url = `${url}?${ENDECA_PARAMS}${encodeURI(payload.searchTerm)}`;\n }\n\n if (payload.wildCard) {\n url = `${url}${WILDCARD_CHAR}`;\n }\n\n url = `${url}${NR_PARAM_AND}${this.buid},${CONTENT_PARAM_FALSE})`;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const response: any = await this.httpTransport.jsonp(url);\n\n return this.dataMapper.mapResponse('results', response);\n };\n\n public getContentSearchResults = async (contentPayload: IContentPayload) => {\n const { contentEnabledConfig = {} } = contentPayload;\n\n let endecaUrl = `${ENDECA_URL_GUIDEDSEARCH_PREFIX}`;\n\n if (!!this.assemblerUrl && !!this.assemblerName && !!this.assemblerPaths) {\n endecaUrl = `${this.assemblerUrl}${this.assemblerPaths.guidedSearch}/${this.assemblerName}`;\n }\n\n const paramsList = [];\n\n if (contentEnabledConfig.enableContentArticle) {\n paramsList.push(RESULT_TYPE_QUERY.ARTICLE_TYPE);\n }\n if (contentEnabledConfig.enableContentTout) {\n paramsList.push(RESULT_TYPE_QUERY.TOUT_TYPE);\n }\n if (contentEnabledConfig.enableContentVideo) {\n paramsList.push(RESULT_TYPE_QUERY.VIDEO_TYPE);\n }\n if (contentEnabledConfig.enableContentBanner) {\n paramsList.push(RESULT_TYPE_QUERY.BANNER_TYPE);\n }\n\n let url = `${endecaUrl}?${ENDECA_PARAMS}${encodeURI(contentPayload.searchTerm)}`;\n\n if (contentPayload.wildCard) {\n url = `${url}${WILDCARD_CHAR}`;\n }\n\n if (Boolean(paramsList.length)) {\n url = `${url}${NR_PARAM_AND}${this.buid},${PARAM_OR}(${paramsList.toString()}))`;\n } else {\n url = `${url}${NR_PARAM_AND}${this.buid},${CONTENT_PARAM_TRUE})`;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const contentResponse: any = await this.httpTransport.jsonp(url);\n\n return this.dataMapper.mapResponse('results', contentResponse);\n };\n\n public getTypeaheadResults = async (payload: IPayload) => {\n let endecaUrl = `${ENDECA_URL_TYPEAHEAD_PREFIX}`;\n\n if (!!this.assemblerUrl && !!this.assemblerName && !!this.assemblerPaths) {\n endecaUrl = `${this.assemblerUrl}${this.assemblerPaths.typeahead}/${this.assemblerName}`;\n }\n\n const url = `${endecaUrl}?${ENDECA_PARAMS}${encodeURI(payload.searchTerm)}${NR_PARAM}${\n this.buid\n }`;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const typeaheadResponse: any = await this.httpTransport.jsonp(url);\n\n return this.dataMapper.mapResponse('typeahead', typeaheadResponse);\n };\n}\n","// eslint-disable-next-line @typescript-eslint/no-extraneous-class\nexport class ServiceBusController {\n constructor() {}\n}\n","import { Service } from '@estee/elc-service';\nimport {\n SEARCH_RESULTS,\n SEARCH_GNAV_INPUT_FIELD,\n VOICE_SEARCH\n} from '@estee/elc-service-view-names';\nimport { ServiceInitializer } from '@estee/elc-universal-utils';\n\nconst { name, version } = __serviceInfo__;\n\nexport class SearchService extends Service {\n constructor(serviceIntializer: ServiceInitializer) {\n super(name, version, serviceIntializer);\n this.registerView(SEARCH_RESULTS, () => import('../exported/search/SearchResults'));\n this.registerView(SEARCH_GNAV_INPUT_FIELD, () =>\n import('../exported/search/SearchGnavInputField')\n );\n this.registerView(VOICE_SEARCH, () => import('../exported/search/VoiceSearch'));\n }\n}\n","import { observable, set, computed } from 'mobx';\nimport { ISortOption, IProdObjListItem } from '../../interfaces/ISearchInterfaces';\n\nexport interface ISearchCatalog {\n prodObjListItems: IProdObjListItem[];\n sortByOptions: ISortOption[];\n totalNumRecs: number;\n}\n\nexport class SearchCatalog {\n @observable public sortByOptions: ISortOption[] = [];\n @observable public totalNumRecs: number;\n @observable public lastRecNum: number;\n @observable public originalTerm: string;\n @observable public adjustedTerm: string;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n @observable public endecaRedirectUrl: any;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n @observable public adjustedSearches: any;\n @observable public productIds: string[] = [];\n @observable public productsNumber: number;\n @observable public sortOptions: ISortOption[] = [];\n @observable public prodObjListItems: IProdObjListItem[] = [];\n @observable public defaultSkuIds: string[] = [];\n @observable public skuIds: string[] = [];\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public static fromJSON(data: any): SearchCatalog {\n const searchCatalog = new SearchCatalog();\n set(searchCatalog, data);\n\n return searchCatalog;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public update = (data: any) => {\n set(this, data);\n this.productsNumber = data.totalNumRecs;\n this.sortOptions = data.sortByOptions;\n this.totalNumRecs = data.totalNumRecs;\n this.lastRecNum = data.lastRecNum;\n this.originalTerm = data.originalTerm;\n this.adjustedTerm = data.adjustedTerm;\n this.adjustedSearches = data.adjustedSearches;\n this.prodObjListItems = [];\n this.productIds = [];\n this.defaultSkuIds = [];\n this.skuIds = [];\n\n const catalog: ISearchCatalog = {\n prodObjListItems: data.prodObjListItems,\n sortByOptions: data.sortByOptions,\n totalNumRecs: data.totalNumRecs\n };\n\n if (catalog.prodObjListItems.length > 0) {\n this.prodObjListItems = catalog.prodObjListItems;\n\n this.prodObjListItems.forEach((prodObjListItem) => {\n this.productIds.push(prodObjListItem.productId);\n this.defaultSkuIds.push(prodObjListItem.defaultSkuId);\n prodObjListItem.skuIds.forEach((skuId) => {\n this.skuIds.push(skuId);\n });\n });\n }\n\n if (catalog.totalNumRecs) {\n this.totalNumRecs = catalog.totalNumRecs;\n }\n };\n\n @computed\n public get numRecs() {\n return {\n totalNumRecs: this.totalNumRecs,\n contentTotalNumRecs: this.totalNumRecs,\n lastRecNum: this.lastRecNum\n };\n }\n}\n","import { observable, computed, set } from 'mobx';\nimport { INavigationFilter, IBreadcrumbFilter } from '../../interfaces/ISearchInterfaces';\n\nexport class SearchFiltersCatalog {\n @observable public navigationFilters: INavigationFilter[] = [];\n @observable public breadcrumbsFilters: IBreadcrumbFilter[] = [];\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public static fromJSON(data: any) {\n const searchCatalog = new SearchFiltersCatalog();\n set(searchCatalog, data);\n\n return searchCatalog;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public update = (data: any) => {\n set(this, data);\n this.navigationFilters = data.navigationFilters;\n this.breadcrumbsFilters = data.breadcrumbsFilters;\n };\n\n public getFiltersByDimensionName(uniqueDimensionName: string) {\n return this.breadcrumbsFilters.filter(\n (filter) => filter.dimensionName === uniqueDimensionName\n );\n }\n\n @computed\n public get uniqueDimensionName() {\n return [...new Set(this.breadcrumbsFilters.map((item) => item.dimensionName))];\n }\n}\n","import { observable, action, computed } from 'mobx';\n\nexport interface ISearchPagination {\n recsPerPage: number;\n totalNumRecs: number;\n firstRecNum: number;\n lastRecNum: number;\n link: string;\n}\n\nexport class SearchPaginationCatalog {\n @observable public numberOfPages: number;\n @observable public numberOfCurrentPage: number;\n @observable public viewAllLink: string;\n @observable public previousPageLink: string;\n @observable public nextPageLink: string;\n\n @action\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public searchPagination(data: any) {\n const pagination: ISearchPagination = {\n recsPerPage: data.pagination.recsPerPage,\n totalNumRecs: data.pagination.totalNumRecs,\n firstRecNum: data.pagination.firstRecNum,\n lastRecNum: data.pagination.lastRecNum,\n link: data.pagination.link\n };\n\n if (pagination.recsPerPage) {\n this.numberOfPages = Math.ceil(pagination.totalNumRecs / pagination.recsPerPage);\n this.numberOfCurrentPage = Math.ceil(pagination.firstRecNum / pagination.recsPerPage);\n this.viewAllLink = '';\n this.previousPageLink = '';\n this.nextPageLink = '';\n\n if (this.numberOfPages > 1) {\n this.viewAllLink = pagination.link\n .replace(/%7Boffset%7D/g, '0')\n .replace(/%7BrecordsPerPage%7D/g, pagination.totalNumRecs.toString());\n }\n if (this.numberOfCurrentPage > 1) {\n const offset = pagination.firstRecNum - pagination.recsPerPage - 1;\n this.previousPageLink = pagination.link\n .replace(/%7Boffset%7D/g, offset.toString())\n .replace(/%7BrecordsPerPage%7D/g, pagination.recsPerPage.toString());\n }\n if (this.numberOfCurrentPage < this.numberOfPages) {\n const offset = pagination.firstRecNum + pagination.recsPerPage - 1;\n this.nextPageLink = pagination.link\n .replace(/%7Boffset%7D/g, offset.toString())\n .replace(/%7BrecordsPerPage%7D/g, pagination.recsPerPage.toString());\n }\n }\n }\n\n @computed\n public get hasMoreResults() {\n return this.nextPageLink ? true : false;\n }\n}\n","import { observable, set } from 'mobx';\nimport { IItemTypeahead } from '../../interfaces/ISearchInterfaces';\n\nexport class SearchTypeaheadCatalog {\n @observable public dimensionsTypeahead: IItemTypeahead[] = [];\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public static fromJSON(data: any) {\n const searchTypeaheadCatalog = new SearchTypeaheadCatalog();\n set(searchTypeaheadCatalog, data);\n\n return searchTypeaheadCatalog;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public update = (data: any) => {\n set(this, data);\n this.dimensionsTypeahead = [];\n data.map((items: IItemTypeahead[]) => {\n items.map((item: IItemTypeahead) => {\n this.dimensionsTypeahead.push(item);\n });\n });\n };\n}\n","import { observable, set, computed } from 'mobx';\nimport { IContentObjListItem, IToutItem } from '../../interfaces/ISearchInterfaces';\nimport { RESULT_TYPE, contentSize, TOUT_COUNT } from '../../constants/Search';\n\nexport interface ISearchContentCatalog {\n contentObjListItems: IContentObjListItem[];\n firstRecNum: number;\n lastRecNum: number;\n totalNumRecs: number;\n}\n\nexport class SearchContentCatalog {\n @observable private contentItems: IContentObjListItem[] = [];\n @observable private toutItems: IToutItem[] = [];\n @observable private firstRecNum: number;\n @observable private lastRecNum: number;\n @observable private toutGridPlacement: number;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public static fromJSON(data: any): SearchContentCatalog {\n const searchContentCatalog = new SearchContentCatalog();\n set(searchContentCatalog, data);\n\n return searchContentCatalog;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public update = (data: any) => {\n set(this, data);\n this.contentItems = [];\n this.toutItems = [];\n this.toutGridPlacement = 1;\n this.firstRecNum = data.firstRecNum;\n this.lastRecNum = data.lastRecNum;\n\n const catalog: ISearchContentCatalog = {\n contentObjListItems: data.contentObjListItems,\n firstRecNum: data.firstRecNum,\n lastRecNum: data.lastRecNum,\n totalNumRecs: data.totalNumRecs\n };\n\n if (catalog.contentObjListItems.length) {\n this.contentItems = catalog.contentObjListItems;\n\n this.contentItems.forEach((contentObjListItem) => {\n switch (contentObjListItem.type) {\n case RESULT_TYPE.TOUT:\n const tout = this.createTout(contentObjListItem);\n this.toutItems.push(tout);\n this.toutGridPlacement++;\n break;\n case RESULT_TYPE.VIDEO:\n const videoTout = this.createTout(contentObjListItem);\n this.toutItems.push(videoTout);\n this.toutGridPlacement++;\n break;\n default:\n }\n });\n }\n\n if (catalog.firstRecNum) {\n this.firstRecNum = catalog.firstRecNum;\n }\n\n if (catalog.lastRecNum) {\n this.lastRecNum = catalog.lastRecNum;\n }\n\n if (catalog.totalNumRecs) {\n this.lastRecNum = catalog.totalNumRecs;\n }\n };\n\n private createTout(toutItem: IContentObjListItem): IToutItem {\n const pageRecords = this.lastRecNum - this.firstRecNum;\n\n if (pageRecords < TOUT_COUNT) {\n this.toutGridPlacement = this.toutGridPlacement + 2;\n } else {\n this.toutGridPlacement = this.toutGridPlacement + Math.round(pageRecords / TOUT_COUNT);\n }\n\n const tout: IToutItem = {\n nId: toutItem.nId,\n nPsn: this.toutGridPlacement,\n nSize: contentSize.small\n };\n\n return tout;\n }\n\n @computed\n public get content() {\n return this.contentItems;\n }\n\n @computed\n public get touts() {\n return this.toutItems;\n }\n\n @computed\n public get numContentRecs() {\n return {\n toutsRecNumber: this.toutItems.length,\n contentRecNumber: this.contentItems.length\n };\n }\n}\n","import { observable, set, computed } from 'mobx';\nimport {\n IContentObjListItem,\n IArticleObjItem,\n ISubAttributes\n} from '../../interfaces/ISearchInterfaces';\nimport { RESULT_TYPE } from '../../constants/Search';\n\nexport interface ISearchArticleCatalog {\n contentObjListItems: IContentObjListItem[];\n}\n\nexport class SearchArticleCatalog {\n @observable private contentItems: IContentObjListItem[] = [];\n @observable private articleItems: IArticleObjItem[] = [];\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public static fromJSON(data: any): SearchArticleCatalog {\n const searchArticleCatalog = new SearchArticleCatalog();\n set(searchArticleCatalog, data);\n\n return searchArticleCatalog;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public update = (data: any) => {\n set(this, data);\n this.contentItems = [];\n this.articleItems = [];\n\n const catalog: ISearchArticleCatalog = {\n contentObjListItems: data.contentObjListItems\n };\n\n if (catalog.contentObjListItems.length) {\n this.contentItems = catalog.contentObjListItems;\n\n this.contentItems.forEach((contentObjListItem) => {\n switch (contentObjListItem.type) {\n case RESULT_TYPE.ARTICLE:\n if (this.isArticleValid(contentObjListItem.articles[0].attributes)) {\n const article = this.createArticle(contentObjListItem);\n this.articleItems.push(article);\n }\n break;\n\n default:\n }\n });\n }\n };\n\n private isArticleValid(articleAttributes: ISubAttributes): boolean {\n let isValid = false;\n\n if (\n articleAttributes.c_template_title &&\n articleAttributes.c_uri &&\n articleAttributes.c_url_alias\n ) {\n isValid = true;\n }\n\n return isValid;\n }\n\n private createArticle(articleItem: IContentObjListItem): IArticleObjItem {\n const {\n c_meta_og_description = '',\n c_template_title,\n c_uri,\n c_url_alias\n } = articleItem.articles[0].attributes;\n\n const article: IArticleObjItem = {\n nId: articleItem.nId,\n templateTitle: c_template_title[0],\n uri: c_uri[0],\n urlAlias: c_url_alias[0],\n // @todo This is a temporary mapping. Needs to be updated after DRUPALPLAT-5595 is done\n shortDescription: c_meta_og_description[0]\n };\n\n return article;\n }\n\n @computed\n public get content() {\n return this.contentItems;\n }\n\n @computed\n public get articles() {\n return this.articleItems;\n }\n\n @computed\n public get numContentRecs() {\n return {\n articlesRecNumber: this.articleItems.length\n };\n }\n}\n","import { observable, action, computed } from 'mobx';\nimport { root } from '@estee/elc-universal-utils';\nimport { ELCLogger, TriggerType } from '@estee/elc-logging';\nimport { SearchApiSdk } from '../../api/SearchApiSdk';\nimport { SearchCatalog } from '../domain/entities/SearchCatalog';\nimport { SearchFiltersCatalog } from '../domain/entities/SearchFiltersCatalog';\nimport { SearchPaginationCatalog } from '../domain/entities/SearchPaginationCatalog';\nimport { SearchTypeaheadCatalog } from '../domain/entities/SearchTypeaheadCatalog';\nimport { SearchContentCatalog } from '../domain/entities/SearchContentCatalog';\nimport { SearchArticleCatalog } from '../domain/entities/SearchArticleCatalog';\nimport {\n IItem,\n ItemTypes,\n IProdObjListItem,\n IContentEnabledConfig\n} from '../interfaces/ISearchInterfaces';\nimport { DISPLAY_SKU_IDS } from '../constants/Search';\n\nconst { name, version } = __serviceInfo__;\n\nexport interface ISearchQuery {\n searchTerm: string;\n wildCard?: boolean;\n searchDisplayFormat: string;\n}\n\nexport interface IContentSearchQuery {\n searchTerm: string;\n contentEnabledConfig?: IContentEnabledConfig;\n wildCard?: boolean;\n}\n\nexport interface ISearchRepository {\n searchApiSdk: SearchApiSdk;\n}\n\nexport class SearchRepository {\n private searchApiSdk: SearchApiSdk;\n @observable private searchCatalog: SearchCatalog;\n @observable private searchFiltersCatalog: SearchFiltersCatalog;\n @observable private searchPaginationCatalog: SearchPaginationCatalog;\n @observable public searchTypeaheadCatalog: SearchTypeaheadCatalog;\n @observable public searchContentCatalog: SearchContentCatalog;\n @observable public searchArticleCatalog: SearchArticleCatalog;\n @observable public items: IItem[] = [];\n @observable public searchResultsLoaded: boolean = false;\n @observable public searchContentResultsLoaded: boolean = false;\n @observable public searchTypeaheadLoaded: boolean = false;\n private readonly logger: ELCLogger = new ELCLogger({\n serviceName: name,\n environment: root.env,\n buid: root.buid,\n serviceVersion: version\n });\n\n constructor(props: ISearchRepository) {\n this.searchApiSdk = props.searchApiSdk;\n this.searchCatalog = new SearchCatalog();\n this.searchFiltersCatalog = new SearchFiltersCatalog();\n this.searchPaginationCatalog = new SearchPaginationCatalog();\n this.searchTypeaheadCatalog = new SearchTypeaheadCatalog();\n this.searchContentCatalog = new SearchContentCatalog();\n this.searchArticleCatalog = new SearchArticleCatalog();\n }\n\n @computed\n public get isTypeaheadProductsLoaded() {\n return this.searchResultsLoaded && this.searchTypeaheadLoaded;\n }\n\n @action\n public setSearchResultsLoaded = (isLoaded: boolean) => {\n this.searchResultsLoaded = isLoaded;\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private updateRedirectUrl = (results: any) => {\n if (results.hasOwnProperty('url')) {\n this.searchCatalog.endecaRedirectUrl = results.url;\n\n return true;\n }\n\n return false;\n };\n\n @action\n public getContentSearchResults = async (contentSearch: IContentSearchQuery) => {\n this.searchContentResultsLoaded = false;\n\n try {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const searchContentResults: any = await this.searchApiSdk.getContentSearchResults(\n contentSearch\n );\n this.updateRedirectUrl(searchContentResults);\n this.updatefromJsonContent(searchContentResults);\n\n if (this.content.content.length || this.articles.articles.length) {\n this.searchContentResultsLoaded = true;\n }\n\n if (\n !contentSearch.wildCard &&\n this.content.content.length === 0 &&\n this.articles.articles.length === 0\n ) {\n contentSearch.wildCard = true;\n const wildCardContentSearchResults = await this.searchApiSdk.getContentSearchResults(\n contentSearch\n );\n this.updatefromJsonContent(wildCardContentSearchResults);\n this.searchContentResultsLoaded = true;\n }\n } catch (error) {\n this.logger.error({\n message: error.message,\n triggerType: TriggerType.api,\n payload: {\n error\n }\n });\n }\n };\n\n @action\n public getSearchResults = async (search: ISearchQuery) => {\n this.searchResultsLoaded = false;\n\n try {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const searchResults: any = await this.searchApiSdk.getSearchResults(search);\n\n if (!this.updateRedirectUrl(searchResults)) {\n this.searchCatalog.endecaRedirectUrl = null;\n this.updatefromJsonProducts(searchResults);\n this.searchDisplayResults(search.searchDisplayFormat);\n\n if (\n this.searchResults.prodObjListItems.length ||\n this.searchCatalog.skuIds.length\n ) {\n this.searchResultsLoaded = true;\n }\n\n if (\n !search.wildCard &&\n (this.searchResults.prodObjListItems.length === 0 ||\n this.searchCatalog.skuIds.length === 0)\n ) {\n search.wildCard = true;\n const wildCardSearchResults = await this.searchApiSdk.getSearchResults(search);\n this.updatefromJsonProducts(wildCardSearchResults);\n this.searchDisplayResults(search.searchDisplayFormat);\n this.searchResultsLoaded = true;\n }\n }\n } catch (error) {\n this.logger.error({\n message: error.message,\n triggerType: TriggerType.api,\n payload: {\n error\n }\n });\n }\n };\n\n @action\n public getTypeaheadResults = async (search: ISearchQuery) => {\n this.searchTypeaheadLoaded = false;\n try {\n const searchTypeaheadResults = await this.searchApiSdk.getTypeaheadResults(search);\n this.searchTypeaheadCatalog.update(searchTypeaheadResults);\n this.searchTypeaheadLoaded = true;\n } catch (error) {\n this.logger.error({\n message: error.message,\n triggerType: TriggerType.api,\n payload: {\n error\n }\n });\n }\n };\n\n @action\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public updatefromJsonProducts = (searchResults: any) => {\n this.searchCatalog.update(searchResults);\n this.searchFiltersCatalog.update(searchResults);\n this.searchPaginationCatalog.searchPagination(searchResults);\n };\n\n @action\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public updatefromJsonContent = (searchContentResults: any) => {\n this.searchContentCatalog.update(searchContentResults);\n this.searchArticleCatalog.update(searchContentResults);\n };\n\n public searchDisplayResults(searchDisplayFormat: string) {\n const productList = this.searchCatalog.prodObjListItems;\n const skuList = this.searchCatalog.skuIds;\n\n if (searchDisplayFormat === DISPLAY_SKU_IDS) {\n this.items.push(\n ...skuList.map(\n (skuId: string): IItem => ({\n type: ItemTypes.sku,\n params: {\n id: skuId\n }\n })\n )\n );\n } else {\n this.items.push(\n ...productList.map(\n (itemProp: IProdObjListItem): IItem => ({\n type: ItemTypes.product,\n params: {\n id: itemProp.productId,\n defaultSkuId: itemProp.defaultSkuId\n }\n })\n )\n );\n }\n\n return this.items;\n }\n\n @action\n public clearRepositoryItems() {\n this.items = [];\n }\n\n @computed\n public get searchResults() {\n return this.searchCatalog;\n }\n\n @computed\n public get filters() {\n return this.searchFiltersCatalog;\n }\n\n @computed\n public get pagination() {\n return this.searchPaginationCatalog;\n }\n\n @computed\n public get typeahead() {\n return this.searchTypeaheadCatalog;\n }\n\n @computed\n public get content() {\n return this.searchContentCatalog;\n }\n\n @computed\n public get articles() {\n return this.searchArticleCatalog;\n }\n}\n","import { ISearchQuery, SearchRepository } from '../repositories/SearchRepository';\n\nexport class SearchLoadedUseCase {\n private searchRepository: SearchRepository;\n private searchQuery: ISearchQuery;\n\n constructor(searchRepository: SearchRepository, searchQuery: ISearchQuery) {\n this.searchRepository = searchRepository;\n this.searchQuery = searchQuery;\n }\n\n public execute = async () => {\n await this.searchRepository.getSearchResults(this.searchQuery);\n };\n}\n","import { IContentSearchQuery, SearchRepository } from '../repositories/SearchRepository';\n\nexport class SearchContentLoadedUseCase {\n private searchRepository: SearchRepository;\n private contentSearchQuery: IContentSearchQuery;\n\n constructor(searchRepository: SearchRepository, contentSearchQuery: IContentSearchQuery) {\n this.searchRepository = searchRepository;\n this.contentSearchQuery = contentSearchQuery;\n }\n\n public execute = async () => {\n await this.searchRepository.getContentSearchResults(this.contentSearchQuery);\n };\n}\n","import { ViewController } from '@estee/elc-service';\nimport { SearchLoadedUseCase } from '../use-cases/SearchLoadedUseCase';\nimport { SearchContentLoadedUseCase } from '../use-cases/SearchContentLoadedUseCase';\nimport { SearchRepository } from '../repositories/SearchRepository';\nimport { computed, action, observable } from 'mobx';\nimport {\n ENDLESS_SCROLL_DEBOUNCE_LIMIT,\n ENDLESS_SCROLL_ALLOWED_PIXELS,\n STANDARD_SEARCH_PARAM,\n VOICE_SEARCH_PARAM,\n PREDICTIVE_SEARCH_PARAM,\n TAGS_SEARCH_PARAM,\n SEARCH_PARAM,\n SEARCH_TEXT_PARAM,\n FILTERS_SEARCH_PARAM,\n SEARCH_TYPE_PARAM,\n SEARCH_REDIRECT_PARAM,\n TAB_TYPE,\n PREDICTIVE_CONTENT_SEARCH_PARAM,\n STANDARD_PRODUCTS_SEARCH_PARAM,\n STANDARD_CONTENT_SEARCH_PARAM,\n TRENDING_SEARCH_PARAM,\n CONTENT_SEARCH_ITEMS_LIMIT,\n RESULTS_MESSAGE\n} from '../constants/Search';\nimport { root } from '@estee/elc-universal-utils';\nimport { events, emit } from '@estee/elc-service-bus';\nimport { ISortOption } from '../interfaces/ISearchInterfaces';\nimport {\n IEnhancedConfig,\n IPropsSearchConfig,\n IContentEnabledConfig\n} from '../../internal/interfaces/ISearchInterfaces';\nconst {\n NO_RESULTS,\n RESULTS_FOUND,\n RESULTS_ADJUSTMENT,\n STORIES_RESULT_PAGE,\n NO_MESSAGE\n} = RESULTS_MESSAGE;\n\nexport class SearchResultsViewController extends ViewController {\n @observable private searchTerm: string;\n @observable private queryState: string;\n @observable private sortOptionName: string;\n @observable private searchRepository: SearchRepository;\n @observable private resultsLoaded: boolean = false;\n @observable private isSortOverlayOpen: boolean = false;\n @observable private isFiltersOverlayOpen: boolean = false;\n @observable private searchDisplayFormat: string;\n @observable private currentTab: string | null;\n @observable private currentContentTab: string = TAB_TYPE.PRODUCTS;\n @observable private isLoadingMore: boolean = false;\n @observable private searchedTerm: string = '';\n @observable private isEmptySearch: boolean = false;\n @observable private isRedirectSearch: boolean = true;\n @observable private searchType: string;\n @observable private enableContentSearch: boolean = false;\n @observable private onlyFavoritesEnabled: boolean = false;\n @observable private onlyTrendingTermsEnabled: boolean = false;\n @observable private showEnhancedSearch: boolean = false;\n @observable private enableContentArticle: boolean = false;\n @observable private enableContentTout: boolean = false;\n @observable private enableContentVideo: boolean = false;\n @observable private enableContentBanner: boolean = false;\n private endlessScrollTimeout: number;\n\n constructor(searchRepository: SearchRepository) {\n super();\n this.searchRepository = searchRepository;\n this.isLoading = false;\n }\n\n @computed\n get data() {\n return {\n productIds: this.productIds,\n skuIds: this.skuIds,\n items: this.items,\n sortOptions: this.sortOptions,\n sortOptionSelected: this.sortOptionSelected,\n isSortOverlayOpen: this.isSortOverlayOpen,\n isFiltersOverlayOpen: this.isFiltersOverlayOpen,\n breadcrumbs: this.breadcrumbs,\n navigationFilters: this.navigationFilters,\n uniqueDimensionName: this.uniqueDimensionName,\n resultsLoaded: this.resultsLoaded,\n isLoadingMore: this.isLoadingMore,\n searchTerm: this.searchTerm,\n currentTab: this.currentTab,\n canLoadMoreResults: this.canLoadMoreResults,\n numRecs: this.numRecs,\n searchedTerm: this.searchedTerm,\n adjustedTerm: this.adjustedTerm,\n totalNumRecs: this.totalNumRecs,\n typeaheadResults: this.typeaheadResults,\n isEmptySearch: this.isEmptySearch,\n queryState: this.queryState,\n dynamicTouts: this.dynamicTouts,\n dynamicArticles: this.dynamicArticles,\n currentContentTab: this.getCurrentContentTab,\n contentRecs: this.contentRecs,\n articlesRecsNum: this.articlesRecsNum,\n productRecsNum: this.productRecsNum,\n onlyFavoritesEnabled: this.onlyFavoritesEnabled,\n onlyTrendingTermsEnabled: this.onlyTrendingTermsEnabled,\n showEnhancedSearch: this.showEnhancedSearch,\n resultType: this.resultType,\n isResultSortable: this.isResultSortable,\n areFiltersEmpty: this.areFiltersEmpty\n };\n }\n\n @computed\n private get typeaheadResults() {\n return this.searchRepository.typeahead.dimensionsTypeahead || [];\n }\n\n @action\n public setCurrentTab = (dimensionName: string | null) => {\n if (this.currentTab === dimensionName) {\n this.currentTab = null;\n } else {\n this.currentTab = dimensionName;\n }\n };\n\n @action\n public toggleFiltersOverlay = () => {\n this.isFiltersOverlayOpen = !this.isFiltersOverlayOpen;\n const body = document.body;\n const html = document.documentElement;\n if (this.isFiltersOverlayOpen) {\n body.style.overflow = 'hidden';\n html.style.overflow = 'hidden';\n } else {\n body.style.overflowY = 'auto';\n html.style.overflowY = 'auto';\n }\n };\n\n @action\n public toggleSortOverlay = () => {\n this.isSortOverlayOpen = !this.isSortOverlayOpen;\n };\n\n public setContentSearch(\n enableContentSearch: boolean,\n contentEnabledConfig: IContentEnabledConfig = {}\n ) {\n this.enableContentSearch = enableContentSearch;\n\n if (contentEnabledConfig.enableContentArticle) {\n this.enableContentArticle = contentEnabledConfig.enableContentArticle;\n }\n if (contentEnabledConfig.enableContentTout) {\n this.enableContentTout = contentEnabledConfig.enableContentTout;\n }\n if (contentEnabledConfig.enableContentVideo) {\n this.enableContentVideo = contentEnabledConfig.enableContentVideo;\n }\n if (contentEnabledConfig.enableContentBanner) {\n this.enableContentBanner = contentEnabledConfig.enableContentBanner;\n }\n }\n\n public get searchUrlParam() {\n const location = root.location;\n const params = new URLSearchParams(location.search);\n\n return params.get('search') || '';\n }\n\n @computed\n public set searchUrlParam(value: string) {\n this.urlUpdateState('search', value);\n }\n\n public get searchTypeUrlParam() {\n const location = root.location;\n const params = new URLSearchParams(location.search);\n\n return params.get('search_type') || '';\n }\n\n @computed\n public set searchTypeUrlParam(value: string) {\n this.urlUpdateState('search_type', value);\n }\n\n @computed\n public get navigationStateUrlParam() {\n const location = root.location;\n const params = new URLSearchParams(location.search);\n\n return params.get('state') || '';\n }\n\n public set navigationStateUrlParam(value: string) {\n this.urlUpdateState('state', value);\n }\n\n @action\n public urlUpdateState = (searchKey: string, searchValue: string) => {\n const location = root.location;\n const urlParams = new URLSearchParams(location.search);\n\n if (!!searchValue) {\n urlParams.set(searchKey, searchValue);\n } else {\n urlParams.delete(searchKey);\n }\n\n window.history.replaceState({}, '', `${window.location.pathname}?${urlParams.toString()}`);\n };\n\n @action\n public searchParam(value: string, queryState: string) {\n this.searchTerm = value;\n this.queryState = queryState;\n this.searchResults();\n }\n\n @computed\n private get numRecs() {\n const records = {\n contentTotalNumRecs: -1,\n lastRecNum: -1,\n totalNumRecs: -1\n };\n const { numRecs } = this.searchRepository.searchResults;\n const { totalNumRecs } = numRecs;\n\n records.totalNumRecs = totalNumRecs - this.dynamicTouts.length;\n\n if (this.enableContentSearch) {\n records.totalNumRecs = totalNumRecs + this.articlesRecsNum;\n }\n\n records.contentTotalNumRecs = this.searchRepository.searchResults.numRecs.contentTotalNumRecs;\n records.lastRecNum = this.searchRepository.searchResults.lastRecNum;\n\n return records;\n }\n\n @computed\n private get adjustedTerm() {\n return this.searchRepository.searchResults.adjustedTerm;\n }\n\n private get totalNumRecs() {\n return this.searchRepository.searchResults.productsNumber || 0;\n }\n\n @computed\n private get productIds() {\n return this.searchRepository.searchResults.productIds || [];\n }\n\n @computed\n private get skuIds() {\n return this.searchRepository.searchResults.skuIds || [];\n }\n\n @computed\n private get items() {\n return this.searchRepository.items || [];\n }\n\n @computed\n private get sortOptions() {\n return this.searchRepository.searchResults.sortByOptions || [];\n }\n\n @computed\n public get resultType() {\n if (isNaN(this.numRecs.totalNumRecs)) {\n return NO_MESSAGE;\n }\n if (this.adjustedTerm) {\n return RESULTS_ADJUSTMENT;\n }\n if (this.articlesRecsNum && this.currentContentTab === TAB_TYPE.STORIES) {\n return STORIES_RESULT_PAGE;\n }\n if (this.numRecs.totalNumRecs === 0) {\n return NO_RESULTS;\n }\n\n return RESULTS_FOUND;\n }\n\n @computed\n private get sortOptionSelected() {\n if (this.sortOptions.length > 0) {\n const selectedValue = this.sortOptions.find(\n (sortOption: ISortOption) => sortOption.selected === true\n );\n\n return selectedValue ? selectedValue.label : this.sortOptionName;\n }\n\n return this.sortOptionName;\n }\n\n @computed\n private get breadcrumbs() {\n return this.searchRepository.filters.breadcrumbsFilters || [];\n }\n\n @computed\n private get navigationFilters() {\n return this.searchRepository.filters.navigationFilters || [];\n }\n\n @computed\n private get dynamicTouts() {\n return this.searchRepository.searchContentCatalog.touts || [];\n }\n\n @computed\n private get dynamicArticles() {\n return this.searchRepository.searchArticleCatalog.articles || [];\n }\n\n @computed\n private get uniqueDimensionName() {\n return this.searchRepository.filters.uniqueDimensionName || [];\n }\n\n public getFiltersByDimensionName = (dimension: string) => {\n return this.searchRepository.filters.getFiltersByDimensionName(dimension);\n };\n\n @action\n public sortByQuery = (inputName: string, value: string) => {\n this.sortOptionName = inputName;\n this.queryState = value.replace(/&Ntt=.*/g, '');\n this.searchResults();\n };\n\n @action\n public refinementQuery = (ev: string) => {\n this.queryState = ev.replace(/&Ntt=.*|&jsonp=jsonp/g, '');\n this.searchResults();\n };\n\n @action\n public searchQuery = (ev: React.FormEvent) => {\n this.searchTerm = ev.currentTarget.value;\n this.queryState = '';\n };\n\n @action\n public clearFilters = () => {\n this.queryState = `${'?'}${this.queryState.replace(/(^.*)?\\?/g, '')}`;\n this.searchResults();\n };\n\n public debounceEndlessScrolling = () => {\n if (this.endlessScrollTimeout) {\n clearTimeout(this.endlessScrollTimeout);\n }\n this.endlessScrollTimeout = window.setTimeout(\n this.handleEndlessScrolling,\n ENDLESS_SCROLL_DEBOUNCE_LIMIT\n );\n };\n\n @action\n private handleEndlessScrolling = async () => {\n if (this.shouldLoadMoreResults) {\n this.queryState = this.searchRepository.pagination.nextPageLink.replace(/&Ntt=.*/g, '');\n await this.loadMoreResults();\n this.queryState = '';\n }\n };\n\n @action\n public initialize = (props: IPropsSearchConfig) => {\n this.setSearchDisplayFormat(props.searchDisplayFormat);\n\n if (props.enableContentSearch) {\n this.setContentSearch(props.enableContentSearch, props.contentEnabledConfig);\n }\n\n if (props.enhancedConfig) {\n this.setShowEnhancedSearch(props.enhancedConfig);\n }\n };\n\n @action\n public setEnhancedSearchFormat = (config: IEnhancedConfig) => {\n const { favoriteProducts, terms } = config;\n\n if (!terms || !terms.length) {\n this.onlyFavoritesEnabled = true;\n }\n\n if (!favoriteProducts || !favoriteProducts.length) {\n this.onlyTrendingTermsEnabled = true;\n }\n };\n\n private setShowEnhancedSearch = (config: IEnhancedConfig) => {\n const { toutItem, favoriteProducts, terms } = config;\n\n const hasProducts =\n favoriteProducts && favoriteProducts.length >= CONTENT_SEARCH_ITEMS_LIMIT;\n const hasToutItem = toutItem && toutItem.length;\n const hasProductsAndToutItem =\n favoriteProducts && favoriteProducts.length >= 2 && hasToutItem;\n const hasTerms = terms && terms.length;\n\n this.showEnhancedSearch = Boolean(hasProducts || hasProductsAndToutItem || hasTerms);\n\n if (this.showEnhancedSearch) {\n this.setEnhancedSearchFormat(config);\n }\n };\n\n @computed\n public get canLoadMoreResults() {\n return !this.isLoadingMore && this.searchRepository.pagination.hasMoreResults;\n }\n\n @computed\n private get shouldLoadMoreResults() {\n const element = document.documentElement;\n const scrollTop = window.scrollY;\n\n if (!this.canLoadMoreResults) {\n return false;\n } else if (\n element.scrollHeight - Math.ceil(scrollTop) - ENDLESS_SCROLL_ALLOWED_PIXELS <=\n element.clientHeight\n ) {\n return true;\n }\n\n return false;\n }\n\n public loadMoreResults = async () => {\n try {\n this.isLoadingMore = true;\n this.fetchResults();\n } finally {\n this.isLoadingMore = false;\n }\n };\n\n @computed\n public get endecaRedirectUrl() {\n return this.searchRepository.searchResults.endecaRedirectUrl;\n }\n\n @action\n public setSearchDisplayFormat(value: string) {\n this.searchDisplayFormat = value;\n }\n\n @action\n private checkSearchType() {\n switch (this.searchTypeUrlParam) {\n case VOICE_SEARCH_PARAM:\n this.searchType = VOICE_SEARCH_PARAM;\n break;\n case `${PREDICTIVE_SEARCH_PARAM}${SEARCH_TEXT_PARAM}`:\n this.searchType = `${PREDICTIVE_SEARCH_PARAM}${SEARCH_TEXT_PARAM}`;\n break;\n case TAGS_SEARCH_PARAM:\n this.searchType = TAGS_SEARCH_PARAM;\n break;\n case `${PREDICTIVE_SEARCH_PARAM}${FILTERS_SEARCH_PARAM}`:\n this.searchType = `${PREDICTIVE_SEARCH_PARAM}${FILTERS_SEARCH_PARAM}`;\n break;\n case `${PREDICTIVE_CONTENT_SEARCH_PARAM}`:\n this.searchType = `${PREDICTIVE_CONTENT_SEARCH_PARAM}`;\n break;\n case `${PREDICTIVE_SEARCH_PARAM}${TRENDING_SEARCH_PARAM}`:\n this.searchType = `${PREDICTIVE_SEARCH_PARAM}${TRENDING_SEARCH_PARAM}`;\n break;\n case `${STANDARD_SEARCH_PARAM}_${TRENDING_SEARCH_PARAM}`:\n this.searchType = `${STANDARD_SEARCH_PARAM}_${TRENDING_SEARCH_PARAM}`;\n break;\n default:\n this.searchType = STANDARD_SEARCH_PARAM;\n }\n\n this.isRedirectSearch = false;\n }\n\n @action\n public searchResults = async () => {\n try {\n this.currentTab = null;\n this.isLoading = true;\n this.resultsLoaded = false;\n this.setCurrentContentTab(TAB_TYPE.PRODUCTS);\n this.searchRepository.clearRepositoryItems();\n\n await this.fetchResults();\n this.trackSearchResults();\n\n if (this.items.length === 0 && this.dynamicArticles.length) {\n this.setCurrentContentTab(TAB_TYPE.STORIES);\n }\n } finally {\n this.isLoading = false;\n this.resultsLoaded = true;\n }\n };\n\n @action\n private fetchResults = async () => {\n if (!!this.searchTerm) {\n this.searchedTerm = this.searchTerm;\n\n if (!!this.isRedirectSearch) {\n this.checkSearchType();\n if (this.searchType === PREDICTIVE_CONTENT_SEARCH_PARAM) {\n this.setCurrentContentTab(TAB_TYPE.STORIES);\n }\n } else {\n this.contentRecs && this.productRecsNum\n ? (this.searchType = STANDARD_PRODUCTS_SEARCH_PARAM)\n : (this.searchType = STANDARD_SEARCH_PARAM);\n }\n\n const search = {\n searchTerm: this.searchTerm,\n queryState: this.queryState,\n searchDisplayFormat: this.searchDisplayFormat\n };\n\n this.navigationStateUrlParam = this.queryState;\n const searchLoadedUseCase = new SearchLoadedUseCase(this.searchRepository, search);\n await searchLoadedUseCase.execute();\n\n if (this.enableContentSearch) {\n const contentSearch = {\n searchTerm: this.searchTerm,\n contentEnabledConfig: {\n enableContentArticle: this.enableContentArticle,\n enableContentTout: this.enableContentTout,\n enableContentVideo: this.enableContentVideo,\n enableContentBanner: this.enableContentBanner\n }\n };\n const searchContentLoadedUseCase = new SearchContentLoadedUseCase(\n this.searchRepository,\n contentSearch\n );\n await searchContentLoadedUseCase.execute();\n }\n\n if (!!this.endecaRedirectUrl) {\n emit(events.CHANGE_LOCATION, {\n redirectUrl: `${this.endecaRedirectUrl}${SEARCH_PARAM}${this.searchTerm}${SEARCH_TYPE_PARAM}${STANDARD_SEARCH_PARAM}_${SEARCH_REDIRECT_PARAM}`\n });\n } else {\n this.searchUrlParam = this.searchTerm;\n this.searchTypeUrlParam = this.searchType;\n }\n\n if (this.items.length === 0) {\n this.queryState = '';\n }\n this.isEmptySearch = false;\n } else {\n this.urlUpdateState('search', '');\n this.urlUpdateState('state', '');\n this.urlUpdateState('search_type', '');\n this.isEmptySearch = true;\n }\n };\n\n private trackSearchResults() {\n const eventArgs = {\n searchTerm: this.searchTerm,\n searchType: STANDARD_SEARCH_PARAM,\n productIds: this.productIds\n };\n\n emit(events.SEARCH_PRODUCTS_QUERIED, eventArgs);\n }\n\n public clear() {\n this.queryState = '';\n this.navigationStateUrlParam = this.queryState;\n }\n\n @action\n public setCurrentContentTab = (id: string) => {\n this.currentContentTab = id;\n };\n\n @computed\n public get getCurrentContentTab() {\n return this.currentContentTab;\n }\n\n public onTabSelect = (id: string) => {\n this.setCurrentContentTab(id);\n if (id === TAB_TYPE.STORIES) {\n this.searchType = STANDARD_CONTENT_SEARCH_PARAM;\n this.searchTypeUrlParam = this.searchType;\n }\n };\n\n @computed\n private get contentRecs() {\n return this.searchRepository.searchContentCatalog.numContentRecs.contentRecNumber;\n }\n\n @computed\n private get articlesRecsNum() {\n return this.searchRepository.searchArticleCatalog.numContentRecs.articlesRecNumber;\n }\n\n @computed\n private get productRecsNum() {\n return (\n this.searchRepository.searchResults.numRecs.contentTotalNumRecs -\n this.dynamicTouts.length\n );\n }\n\n @computed\n private get isResultSortable() {\n return this.totalNumRecs > 1;\n }\n\n @computed\n private get areFiltersEmpty() {\n return this.navigationFilters.length === 0;\n }\n}\n","import { ISearchQuery, SearchRepository } from '../repositories/SearchRepository';\n\nexport class SearchTypeaheadUseCase {\n private searchRepository: SearchRepository;\n private searchQuery: ISearchQuery;\n\n constructor(searchRepository: SearchRepository, searchQuery: ISearchQuery) {\n this.searchRepository = searchRepository;\n this.searchQuery = searchQuery;\n }\n\n public execute = async () => {\n await this.searchRepository.getTypeaheadResults(this.searchQuery);\n };\n}\n","import { ViewController } from '@estee/elc-service';\nimport { SearchLoadedUseCase } from '../use-cases/SearchLoadedUseCase';\nimport { SearchContentLoadedUseCase } from '../use-cases/SearchContentLoadedUseCase';\nimport { SearchTypeaheadUseCase } from '../use-cases/SearchTypeaheadUseCase';\nimport { SearchRepository } from '../repositories/SearchRepository';\nimport { computed, action, observable } from 'mobx';\nimport {\n MIN_SEARCH_LENGTH,\n DEBOUNCE_LIMIT,\n SEARCH_TYPE_PARAM,\n PREDICTIVE_SEARCH_PARAM,\n SEARCH_TEXT_PARAM,\n TAB_TYPE,\n PREDICTIVE_CONTENT_SEARCH_PARAM,\n PREDICTIVE_PRODUCTS_SEARCH_PARAM,\n CONTENT_SEARCH_ITEMS_LIMIT,\n RESULTS_MESSAGE,\n OVERLAY_PRODUCT_RESULTS_LIMIT,\n SEARCH_REDIRECT_PARAM,\n SEARCH_PARAM\n} from '../constants/Search';\nimport {\n IEnhancedConfig,\n IPropsSearchConfig,\n IContentEnabledConfig\n} from '../../internal/interfaces/ISearchInterfaces';\nimport { events, emit } from '@estee/elc-service-bus';\nimport { Config } from '../domain/entities/Config';\n\nconst {\n NO_RESULTS,\n RESULTS_FOUND_OVERLAY,\n RESULTS_ADJUSTMENT,\n STORIES_RESULT_OVERLAY,\n NO_MESSAGE\n} = RESULTS_MESSAGE;\n\nexport class SearchGnavInputFieldViewController extends ViewController {\n @observable private searchTerm: string;\n @observable private searchRepository: SearchRepository;\n @observable public isSearchOverlayOpen: boolean = false;\n @observable public shouldFocusOverlayInput: boolean = false;\n @observable private inputValue: string = '';\n @observable private disableInput: boolean = false;\n @observable private searchDisplayFormat: string;\n @observable private currentTab: string = TAB_TYPE.PRODUCTS;\n @observable public configSearch: Config;\n @observable private enableContentSearch: boolean = false;\n @observable private onlyFavoritesEnabled: boolean = false;\n @observable private onlyTrendingTermsEnabled: boolean = false;\n @observable private enhancedSearchEnabled: boolean = false;\n @observable private enableContentArticle: boolean = false;\n @observable private enableContentTout: boolean = false;\n @observable private enableContentVideo: boolean = false;\n @observable private enableContentBanner: boolean = false;\n\n private minSearchLength: number = MIN_SEARCH_LENGTH;\n private debounceLimit: number = DEBOUNCE_LIMIT;\n private searchResetTimeout: number;\n\n constructor(searchRepository: SearchRepository, config: Config) {\n super();\n this.searchRepository = searchRepository;\n this.configSearch = config;\n this.isLoading = false;\n }\n\n @computed\n get data() {\n return {\n productIds: this.productIds,\n skuIds: this.skuIds,\n limitItems: this.limitItems,\n items: this.items,\n isSearchOverlayOpen: this.isSearchOverlayOpen,\n shouldFocusOverlayInput: this.shouldFocusOverlayInput,\n inputValue: this.inputValue,\n resultsLoaded: this.searchRepository.isTypeaheadProductsLoaded,\n disableInput: this.disableInput,\n typeaheadResults: this.typeaheadResults,\n limitedTypeaheadResults: this.limitedTypeaheadResults,\n numRecs: this.numRecs,\n adjustedTerm: this.adjustedTerm,\n configSearch: this.configSearch.config,\n dynamicTouts: this.dynamicTouts,\n dynamicArticles: this.dynamicArticles,\n contentRecs: this.contentRecs,\n currentTab: this.getCurrentTab,\n articlesRecsNum: this.articlesRecsNum,\n productRecsNum: this.productRecsNum,\n isSearchButtonVisible: this.isSearchButtonVisible,\n searchType: this.searchType,\n onlyFavoritesEnabled: this.onlyFavoritesEnabled,\n onlyTrendingTermsEnabled: this.onlyTrendingTermsEnabled,\n showEnhancedSearch: this.showEnhancedSearch,\n resultType: this.resultType,\n overlayArticlesRecordCount: this.overlayArticlesRecordCount,\n overlayProductsRecordCount: this.overlayProductsRecordCount,\n showSearchGrid: this.showSearchGrid\n };\n }\n\n @computed\n public get searchType() {\n const isStoriesTab = this.currentTab === TAB_TYPE.STORIES;\n if (this.enableContentSearch && isStoriesTab) {\n return PREDICTIVE_CONTENT_SEARCH_PARAM;\n }\n\n return PREDICTIVE_SEARCH_PARAM.concat(SEARCH_TEXT_PARAM);\n }\n\n @computed\n private get isSearchButtonVisible() {\n return Boolean(\n (this.productRecsNum || this.articlesRecsNum || this.endecaRedirectUrl) &&\n this.inputValue.length\n );\n }\n\n @computed\n public get endecaRedirectUrl() {\n return this.searchRepository.searchResults.endecaRedirectUrl;\n }\n\n private get showEnhancedSearch() {\n return this.enhancedSearchEnabled && !(this.endecaRedirectUrl && this.inputValue);\n }\n\n @computed\n public get showSearchGrid() {\n return this.isLoading || this.searchRepository.isTypeaheadProductsLoaded;\n }\n\n @computed\n private get productIds() {\n return this.searchRepository.searchResults.productIds || [];\n }\n\n @computed\n private get skuIds() {\n return this.searchRepository.searchResults.skuIds || [];\n }\n\n @computed\n private get items() {\n return this.searchRepository.items || [];\n }\n\n @computed\n private get limitItems() {\n return this.items.slice(0, OVERLAY_PRODUCT_RESULTS_LIMIT);\n }\n\n @computed\n private get limitProductIds() {\n return this.productIds.slice(0, OVERLAY_PRODUCT_RESULTS_LIMIT);\n }\n\n @computed\n private get dynamicTouts() {\n return this.searchRepository.searchContentCatalog.touts || [];\n }\n\n @computed\n private get dynamicArticles() {\n return this.searchRepository.searchArticleCatalog.articles || [];\n }\n\n @action\n public setMinSearchLength(value: number) {\n this.minSearchLength = value;\n }\n\n @action\n public setSearchDisplayFormat(value: string) {\n this.searchDisplayFormat = value;\n }\n\n @computed\n private get typeaheadResults() {\n return this.searchRepository.typeahead.dimensionsTypeahead || [];\n }\n\n @action\n public setContentSearch(\n enableContentSearch: boolean,\n contentEnabledConfig: IContentEnabledConfig = {}\n ) {\n this.enableContentSearch = enableContentSearch;\n\n if (contentEnabledConfig.enableContentArticle) {\n this.enableContentArticle = contentEnabledConfig.enableContentArticle;\n }\n if (contentEnabledConfig.enableContentTout) {\n this.enableContentTout = contentEnabledConfig.enableContentTout;\n }\n if (contentEnabledConfig.enableContentVideo) {\n this.enableContentVideo = contentEnabledConfig.enableContentVideo;\n }\n if (contentEnabledConfig.enableContentBanner) {\n this.enableContentBanner = contentEnabledConfig.enableContentBanner;\n }\n }\n\n @computed\n private get limitedTypeaheadResults() {\n return this.typeaheadResults.slice(0, 5);\n }\n\n @action\n public setCurrentContentTab = (id: string) => {\n this.currentTab = id;\n };\n\n @action\n public searchResults = async () => {\n if (!!this.searchTerm) {\n const search = {\n searchTerm: this.searchTerm,\n searchDisplayFormat: this.searchDisplayFormat\n };\n\n const searchLoadedUseCase = new SearchLoadedUseCase(this.searchRepository, search);\n const searchTypeaheadUseCase = new SearchTypeaheadUseCase(\n this.searchRepository,\n search\n );\n try {\n this.isLoading = true;\n this.searchRepository.clearRepositoryItems();\n this.searchRepository.searchTypeaheadCatalog.dimensionsTypeahead = [];\n this.setCurrentContentTab(TAB_TYPE.PRODUCTS);\n await searchLoadedUseCase.execute();\n await searchTypeaheadUseCase.execute();\n if (this.enableContentSearch) {\n const contentSearch = {\n searchTerm: this.searchTerm,\n contentEnabledConfig: {\n enableContentArticle: this.enableContentArticle,\n enableContentTout: this.enableContentTout,\n enableContentVideo: this.enableContentVideo,\n enableContentBanner: this.enableContentBanner\n }\n };\n const searchContentLoadedUseCase = new SearchContentLoadedUseCase(\n this.searchRepository,\n contentSearch\n );\n await searchContentLoadedUseCase.execute();\n }\n\n if (this.items.length === 0 && this.dynamicArticles.length) {\n this.setCurrentContentTab(TAB_TYPE.STORIES);\n }\n\n this.trackSearchResults();\n } finally {\n this.isLoading = false;\n }\n }\n };\n\n @action\n public toggleSearchOverlay = () => {\n if (this.isSearchOverlayOpen) {\n this.closeSearchOverlay();\n } else {\n this.openSearchOverlay();\n }\n };\n\n @action\n public openSearchOverlay = () => {\n this.isSearchOverlayOpen = true;\n this.setShouldFocusOverlayInput(true);\n };\n\n @action\n public closeSearchOverlay = () => {\n this.clearInputValue();\n this.isSearchOverlayOpen = false;\n };\n\n @action\n public setShouldFocusOverlayInput = (shouldFocusOverlayInput: boolean) => {\n this.shouldFocusOverlayInput = shouldFocusOverlayInput;\n };\n\n public searchTermSelected = (searchTerm: string) => () => {\n this.trackSearchTermSelected(searchTerm);\n };\n\n @action\n public clearInputValue = () => {\n this.inputValue = '';\n };\n\n @action\n private debounceSearchResults = () => {\n clearTimeout(this.searchResetTimeout);\n this.searchResetTimeout = window.setTimeout(() => this.searchResults(), this.debounceLimit);\n };\n\n public searchQuery(value: string) {\n this.searchTerm = value;\n }\n\n @action\n public initialize = (props: IPropsSearchConfig) => {\n this.setSearchDisplayFormat(props.searchDisplayFormat);\n\n if (props.minSearchLength) {\n this.setMinSearchLength(props.minSearchLength);\n }\n\n if (props.enableContentSearch) {\n this.setContentSearch(props.enableContentSearch, props.contentEnabledConfig);\n }\n\n if (props.enhancedConfig) {\n this.setEnhancedSearchFormat(props.enhancedConfig);\n }\n };\n\n @action\n public setEnhancedSearchFormat = (config: IEnhancedConfig) => {\n const { favoriteProducts, terms } = config;\n\n if (!terms || !terms.length) {\n this.onlyFavoritesEnabled = true;\n }\n\n if (!favoriteProducts || !favoriteProducts.length) {\n this.onlyTrendingTermsEnabled = true;\n }\n\n this.setShowEnhancedSearch(config);\n };\n\n private setShowEnhancedSearch = (config: IEnhancedConfig) => {\n const { toutItem, favoriteProducts, terms } = config;\n\n const hasProducts =\n favoriteProducts && favoriteProducts.length >= CONTENT_SEARCH_ITEMS_LIMIT;\n const hasToutItem = toutItem && toutItem.length;\n const hasProductsAndToutItem =\n favoriteProducts && favoriteProducts.length >= 2 && hasToutItem;\n const hasTerms = terms && terms.length;\n\n this.enhancedSearchEnabled = Boolean(hasProducts || hasProductsAndToutItem || hasTerms);\n };\n\n @action\n public handleChange = (event: { value: string }): void => {\n this.searchRepository.setSearchResultsLoaded(false);\n this.inputValue = event.value;\n if (this.inputValue.length >= this.minSearchLength) {\n if (!this.isSearchOverlayOpen) {\n this.toggleSearchOverlay();\n }\n this.searchTerm = this.inputValue;\n this.debounceSearchResults();\n }\n };\n\n @computed\n private get numRecs() {\n const records = {\n contentTotalNumRecs: -1,\n lastRecNum: -1,\n totalNumRecs: -1\n };\n const { totalNumRecs } = this.searchRepository.searchResults;\n\n records.totalNumRecs = totalNumRecs;\n records.contentTotalNumRecs = this.searchRepository.searchResults.numRecs.contentTotalNumRecs;\n records.lastRecNum = this.searchRepository.searchResults.lastRecNum;\n\n return records;\n }\n\n @computed\n private get overlayArticlesRecordCount() {\n return this.articlesRecsNum > CONTENT_SEARCH_ITEMS_LIMIT\n ? CONTENT_SEARCH_ITEMS_LIMIT\n : this.articlesRecsNum;\n }\n\n @computed\n private get overlayProductsRecordCount() {\n return this.numRecs.totalNumRecs > OVERLAY_PRODUCT_RESULTS_LIMIT\n ? OVERLAY_PRODUCT_RESULTS_LIMIT\n : this.numRecs.totalNumRecs;\n }\n\n @computed\n public get resultType() {\n if (isNaN(this.numRecs.totalNumRecs)) {\n return NO_MESSAGE;\n }\n if (this.adjustedTerm && this.getCurrentTab === TAB_TYPE.STORIES) {\n return STORIES_RESULT_OVERLAY;\n }\n if (this.adjustedTerm) {\n return RESULTS_ADJUSTMENT;\n }\n if (this.numRecs.totalNumRecs === 0 && this.articlesRecsNum) {\n return STORIES_RESULT_OVERLAY;\n }\n if (this.numRecs.totalNumRecs === 0) {\n return NO_RESULTS;\n }\n\n return RESULTS_FOUND_OVERLAY;\n }\n\n @computed\n private get contentRecs() {\n return this.searchRepository.searchContentCatalog.numContentRecs.contentRecNumber;\n }\n\n @computed\n private get articlesRecsNum() {\n return this.searchRepository.searchArticleCatalog.numContentRecs.articlesRecNumber;\n }\n\n @computed\n private get productRecsNum() {\n return (\n this.searchRepository.searchResults.numRecs.contentTotalNumRecs -\n this.dynamicTouts.length\n );\n }\n\n @computed\n private get adjustedTerm() {\n return this.searchRepository.searchResults.adjustedTerm;\n }\n\n @action\n public onKeyUp = (\n event: { key: string; value: string },\n siteUrl: string,\n redirect: boolean,\n enableContentSearch: boolean\n ): void => {\n const isSearchValid = Boolean(event.key === 'Enter' && event.value);\n let redirectUrl = siteUrl;\n\n const conditionalSearch = (\n validSearch: boolean,\n isNotRedirect: boolean,\n callback: () => void\n ) => {\n if (validSearch) {\n this.disableInput = true;\n if (isNotRedirect) {\n callback();\n }\n emit(events.CHANGE_LOCATION, { redirectUrl });\n }\n };\n\n conditionalSearch(isSearchValid, !redirect, () => {\n if (enableContentSearch) {\n redirectUrl = `${siteUrl}${SEARCH_TYPE_PARAM}${\n this.getCurrentTab === TAB_TYPE.PRODUCTS\n ? PREDICTIVE_PRODUCTS_SEARCH_PARAM\n : PREDICTIVE_CONTENT_SEARCH_PARAM\n }`;\n } else {\n redirectUrl = `${siteUrl}${SEARCH_TYPE_PARAM}${PREDICTIVE_SEARCH_PARAM}${SEARCH_TEXT_PARAM}`;\n }\n });\n };\n\n @action\n public onSearchButtonClick = (siteUrl: string): void => {\n let redirectUrl = siteUrl;\n\n if (this.endecaRedirectUrl) {\n redirectUrl = `${this.endecaRedirectUrl}${SEARCH_PARAM}${this.inputValue}${SEARCH_TYPE_PARAM}${PREDICTIVE_SEARCH_PARAM}${SEARCH_REDIRECT_PARAM}`;\n }\n\n emit(events.CHANGE_LOCATION, { redirectUrl });\n };\n\n @action\n public setCurrentTab = (id: string) => {\n this.currentTab = id;\n };\n\n @computed\n public get getCurrentTab() {\n return this.currentTab;\n }\n\n private trackSearchResults() {\n const eventArgs = {\n searchTerm: this.searchTerm,\n searchType: 'predictive',\n productIds: this.limitProductIds\n };\n\n emit(events.SEARCH_PRODUCTS_QUERIED, eventArgs);\n }\n\n private trackSearchTermSelected(searchTerm: string) {\n emit(events.SEARCH_TERM_SELECTED, { searchTerm });\n }\n}\n","import { ViewController } from '@estee/elc-service';\nimport { computed, observable, action } from 'mobx';\nimport { SPEAK_SCREEN_LIMIT } from '../constants/Search';\nimport {\n SEARCH_TYPE_PARAM,\n VOICE_SEARCH_PARAM,\n SEARCH_PARAM\n} from '../../internal/constants/Search';\nimport { events, emit } from '@estee/elc-service-bus';\nimport { Config } from '../domain/entities/Config';\n\nexport class VoiceSearchViewController extends ViewController {\n @observable public isSpeakScreenOpen: boolean = false;\n @observable public allowPermission: boolean = false;\n @observable public voiceSearchFailure: boolean = false;\n @observable public showMicrophone: boolean = false;\n @observable public searching: boolean = false;\n @observable public configSearch: Config;\n\n public speakScreenLimit: number = SPEAK_SCREEN_LIMIT;\n private speakScreenhResetTimeout: number;\n private voiceSearchTerm: string = '';\n private searchUrl: string = '';\n\n constructor(config: Config) {\n super();\n this.configSearch = config;\n this.isLoading = false;\n }\n\n @computed\n get data() {\n return {\n isSpeakScreenOpen: this.isSpeakScreenOpen,\n voiceSearchTerm: this.voiceSearchTerm,\n voiceSearchFailure: this.voiceSearchFailure,\n allowPermission: this.allowPermission,\n searching: this.searching,\n config: this.configSearch.config\n };\n }\n\n @action\n public setSearchUrl(value: string) {\n this.searchUrl = value;\n }\n\n @action\n public closeSpeakScreen = () => {\n this.isSpeakScreenOpen = false;\n };\n\n @action\n public transcriptionCallback = (error: string, result: string) => {\n if (error || result === '') {\n this.voiceSearchFailure = true;\n this.searching = false;\n if (this.isSpeakScreenOpen) {\n this.hideSpeakScreen();\n }\n } else {\n this.searching = true;\n this.voiceSearchTerm = result;\n this.voiceSearchFailure = false;\n this.onSuccessResults();\n }\n };\n\n @action\n public onErrorCallback = () => {\n this.isSpeakScreenOpen = true;\n this.allowPermission = true;\n this.voiceSearchFailure = false;\n this.hideSpeakScreen();\n };\n\n @action\n public onSuccessCallback = () => {\n this.isSpeakScreenOpen = true;\n this.allowPermission = false;\n this.voiceSearchFailure = false;\n };\n\n @action\n public hideSpeakScreen = () => {\n clearTimeout(this.speakScreenhResetTimeout);\n this.speakScreenhResetTimeout = window.setTimeout(\n () => (this.isSpeakScreenOpen = false),\n this.speakScreenLimit\n );\n };\n\n @action\n public onSuccessResults = () => {\n const siteUrl = `${this.searchUrl}${SEARCH_PARAM}${this.voiceSearchTerm}${SEARCH_TYPE_PARAM}${VOICE_SEARCH_PARAM}`;\n emit(events.CHANGE_LOCATION, { redirectUrl: siteUrl });\n };\n}\n","import { observable, action } from 'mobx';\n\nexport interface IConfig {\n voiceSearch: {\n enabled: boolean;\n google: {\n apiKey: string;\n languageCode: string;\n };\n };\n}\n\nexport class Config {\n @observable public config: IConfig;\n\n @action\n public updateConfig(config: Partial) {\n this.config = { ...this.config, ...config };\n }\n}\n","import { Config } from '../domain/entities/Config';\nimport { diContainer, serviceNames } from '../../service-setup/diContainer';\nimport { query, serviceQueries } from '@estee/elc-service-bus';\n\nexport class ConfigRepository {\n private config: Config;\n\n constructor() {\n this.config = diContainer.get(serviceNames.config);\n }\n\n public getConfigs = async (configs: string[]) => {\n const config = await query(serviceQueries.GET_CONFIG, configs);\n\n this.config.updateConfig(config);\n };\n}\n","import { ConfigRepository } from '../repositories/ConfigRepository';\n\nexport class SearchServiceStartedUseCase {\n // eslint-disable-next-line @typescript-eslint/no-parameter-properties\n constructor(private configs: string[], private configRepository: ConfigRepository) {}\n\n public execute = async () => {\n await this.configRepository.getConfigs(this.configs);\n };\n}\n","import { ConfigStore } from './ConfigStore';\nimport { Container } from 'hypo-container';\nimport { root, IAppConfig } from '@estee/elc-universal-utils';\nimport { SearchApiSdk } from '../api/SearchApiSdk';\nimport { ServiceBusController } from './ServiceBusController';\nimport { SearchService } from './SearchService';\nimport { getDecorators } from '@estee/elc-service';\nimport { SearchRepository } from '../internal/repositories/SearchRepository';\nimport { SearchResultsViewController } from '../internal/controllers/SearchResultsViewController';\nimport { SearchGnavInputFieldViewController } from '../internal/controllers/SearchGnavInputFieldViewController';\nimport { VoiceSearchViewController } from '../internal/controllers/VoiceSearchViewController';\nimport { Config } from '../internal/domain/entities/Config';\nimport { ConfigRepository } from '../internal/repositories/ConfigRepository';\nimport { HttpTransport } from '@estee/elc-http-transport';\nimport { SearchServiceStartedUseCase } from '../internal/use-cases/SearchServiceStartedUseCase';\n\nexport const diContainer = new Container();\nexport const serviceNames = {\n searchApiSdk: 'SEARCH_API_SDK',\n apiSdk: 'API_SDK',\n configStore: 'CONFIG_STORE',\n httpTransport: 'HTTP_TRANSPORT',\n ratingStore: 'RATING_STORE',\n serviceBusController: 'SERVICE_BUS_CONTROLLER',\n searchService: 'SEARCH_SERVICE',\n searchResultsViewController: 'SEARCH_RESULTS_VIEW_CONTROLLER',\n searchGnavInputFieldViewController: 'SEARCH_GNAV_INPUT_FIELD_VIEW_CONTROLLER',\n voiceSearchViewController: 'VOICE_SEARCH_VIEW_CONTROLLER',\n searchRepository: 'SEARCH_REPOSITORY',\n config: 'CONFIG',\n configRepository: 'CONFIG_REPOSITORY'\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const setConfig = (configJSON: any) => {\n diContainer.config = configJSON;\n};\n\ndiContainer\n .register(\n serviceNames.configStore,\n diContainer.factory((c) => new ConfigStore(c.config))\n )\n .register(serviceNames.configRepository, () => new ConfigRepository())\n .register(serviceNames.config, () => new Config())\n .register(serviceNames.serviceBusController, () => new ServiceBusController())\n .register(serviceNames.httpTransport, () => root.HttpTransport)\n .register(serviceNames.searchApiSdk, (c) => {\n const httpTransport = new HttpTransport();\n const configStore = c.get(serviceNames.configStore);\n const { searchConfig = {}, businessUnitId } = configStore.config;\n const {\n assemblerUrl,\n assemblerPaths,\n buidToEndecaAssemblerName,\n useSquareBrackets = false\n } = searchConfig;\n let { assemblerName } = searchConfig;\n\n if (buidToEndecaAssemblerName) {\n assemblerName = buidToEndecaAssemblerName[businessUnitId];\n }\n\n const config = {\n httpTransport,\n assemblerUrl,\n assemblerName,\n assemblerPaths,\n buid: businessUnitId,\n useSquareBrackets\n };\n\n return new SearchApiSdk(config);\n })\n .register(\n serviceNames.searchRepository,\n diContainer.factory(\n (c) =>\n new SearchRepository({\n searchApiSdk: c.get(serviceNames.searchApiSdk)\n })\n )\n )\n .register(\n serviceNames.searchResultsViewController,\n (c) => new SearchResultsViewController(c.get(serviceNames.searchRepository))\n )\n .register(\n serviceNames.searchGnavInputFieldViewController,\n (c) =>\n new SearchGnavInputFieldViewController(\n c.get(serviceNames.searchRepository),\n c.get(serviceNames.config)\n )\n )\n .register(\n serviceNames.voiceSearchViewController,\n (c) => new VoiceSearchViewController(c.get(serviceNames.config))\n )\n .register(\n serviceNames.searchService,\n (c) =>\n new SearchService(async (config: IAppConfig) => {\n setConfig(config);\n\n c.get(serviceNames.serviceBusController);\n const configRepository = c.get(serviceNames.configRepository);\n await new SearchServiceStartedUseCase(['voiceSearch'], configRepository).execute();\n })\n );\n\nconst { lazyInject } = getDecorators(diContainer);\n\nexport { lazyInject };\n"],"names":["name","ENDECA_URL_GUIDEDSEARCH_PREFIX","ENDECA_URL_TYPEAHEAD_PREFIX","ENDECA_PARAMS","ENDECA_REDIRECT","SEARCH_PARAM","SEARCH_TYPE_PARAM","VOICE_SEARCH_PARAM","GNAV_SEARCH_TAG_BLOCKS","STATE_PARAM","NR_PARAM","PARAM_OR","NR_PARAM_AND","WILDCARD_CHAR","MIN_SEARCH_LENGTH","DEBOUNCE_LIMIT","OVERLAY_PRODUCT_RESULTS_LIMIT","CONTENT_SEARCH_ITEMS_LIMIT","DISPLAY_SKU_IDS","PREDICTIVE_SEARCH_PARAM","STANDARD_SEARCH_PARAM","TAGS_SEARCH_PARAM","FILTERS_SEARCH_PARAM","SEARCH_TEXT_PARAM","SEARCH_REDIRECT_PARAM","PREDICTIVE_CONTENT_SEARCH_PARAM","PREDICTIVE_VIEWCONTENT_SEARCH_PARAM","PREDICTIVE_PRODUCTS_SEARCH_PARAM","STANDARD_PRODUCTS_SEARCH_PARAM","STANDARD_CONTENT_SEARCH_PARAM","STANDARD_VIEWCONTENT_SEARCH_PARAM","TRENDING_SEARCH_PARAM","CONTENT_PARAM_FALSE","CONTENT_PARAM_TRUE","ENDLESS_SCROLL_DEBOUNCE_LIMIT","ENDLESS_SCROLL_ALLOWED_PIXELS","SPEAK_SCREEN_LIMIT","Object","freeze","percentageRating","reviewsNumber","selectedRating","showReviews","showReadReviews","isDisabled","readReviewsLabel","numberOfStars","RESULTS_MESSAGE","TOUT_COUNT","SEARCH_TERM","RECS_COUNT","RESULTS_COUNT","ADJUSTED_SEARCH_TERM","SEARCH_VIEW","VIEW_TYPE","contentSize","RESULT_TYPE","RESULT_TYPE_QUERY","TAB_TYPE","FILTER_TYPES","SearchSortingTranslations","Relevance","ItemTypes","ConfigStore","constructor","config","this","updateConfig","results","response","resp","hasOwnProperty","link","url","trim","resultsList","records","sortOptions","recsPerPage","totalNumRecs","firstRecNum","lastRecNum","pagingActionTemplate","paginationLink","navigation","breadcrumbs","refinementCrumbs","searchAdjustments","adjustedSearches","originalTerms","pagination","replace","contentObjListItems","prodObjListItems","forEach","record","attributes","content","length","type","nId","c_node_id","articles","push","product","productId","p_product_id","defaultSkuId","s_sku_id","skuIds","sortByOptions","map","item","label","selected","navigationFilters","dimensionName","refinements","refinementsValues","refinementItem","count","breadcrumbsFilters","removeAction","adjustedTerm","originalTerm","spellCorrected","adjustedTerms","typeahead","children","dimensionSearchGroups","dimensionSearchValues","dimensionProp","SearchApiSdk","props","getSearchResults","payload","endecaUrl","assemblerUrl","assemblerName","assemblerPaths","guidedSearch","queryState","token","includes","encodeURI","searchTerm","wildCard","buid","httpTransport","jsonp","dataMapper","mapResponse","getContentSearchResults","contentPayload","contentEnabledConfig","paramsList","enableContentArticle","enableContentTout","enableContentVideo","enableContentBanner","Boolean","toString","contentResponse","getTypeaheadResults","typeaheadResponse","DataMapper","ServiceBusController","version","SearchService","Service","serviceIntializer","super","registerView","productIds","defaultSkuIds","update","data","set","productsNumber","catalog","prodObjListItem","skuId","fromJSON","searchCatalog","numRecs","contentTotalNumRecs","SearchCatalog","getFiltersByDimensionName","uniqueDimensionName","filter","Set","SearchFiltersCatalog","SearchPaginationCatalog","searchPagination","numberOfPages","Math","ceil","numberOfCurrentPage","viewAllLink","previousPageLink","nextPageLink","offset","hasMoreResults","dimensionsTypeahead","items","searchTypeaheadCatalog","SearchTypeaheadCatalog","contentItems","toutItems","toutGridPlacement","contentObjListItem","tout","createTout","videoTout","searchContentCatalog","toutItem","pageRecords","round","nPsn","nSize","touts","numContentRecs","toutsRecNumber","contentRecNumber","SearchContentCatalog","articleItems","isArticleValid","article","createArticle","searchArticleCatalog","articleAttributes","isValid","c_template_title","c_uri","c_url_alias","articleItem","c_meta_og_description","templateTitle","uri","urlAlias","shortDescription","articlesRecNumber","SearchArticleCatalog","SearchRepository","searchResultsLoaded","searchContentResultsLoaded","searchTypeaheadLoaded","logger","ELCLogger","serviceName","environment","serviceVersion","setSearchResultsLoaded","isLoaded","updateRedirectUrl","endecaRedirectUrl","contentSearch","searchContentResults","searchApiSdk","updatefromJsonContent","wildCardContentSearchResults","error","message","triggerType","TriggerType","search","searchResults","updatefromJsonProducts","searchDisplayResults","searchDisplayFormat","wildCardSearchResults","searchTypeaheadResults","searchFiltersCatalog","searchPaginationCatalog","isTypeaheadProductsLoaded","productList","skuList","params","id","itemProp","clearRepositoryItems","filters","SearchLoadedUseCase","searchRepository","searchQuery","execute","SearchContentLoadedUseCase","contentSearchQuery","NO_RESULTS","RESULTS_FOUND","RESULTS_ADJUSTMENT","STORIES_RESULT_PAGE","NO_MESSAGE","SearchResultsViewController","ViewController","resultsLoaded","isSortOverlayOpen","isFiltersOverlayOpen","currentContentTab","isLoadingMore","searchedTerm","isEmptySearch","isRedirectSearch","enableContentSearch","onlyFavoritesEnabled","onlyTrendingTermsEnabled","showEnhancedSearch","setCurrentTab","currentTab","toggleFiltersOverlay","body","document","html","documentElement","style","overflow","overflowY","toggleSortOverlay","urlUpdateState","searchKey","searchValue","location","urlParams","URLSearchParams","delete","window","history","replaceState","pathname","dimension","sortByQuery","inputName","value","sortOptionName","refinementQuery","ev","currentTarget","clearFilters","debounceEndlessScrolling","endlessScrollTimeout","clearTimeout","setTimeout","handleEndlessScrolling","shouldLoadMoreResults","loadMoreResults","initialize","setSearchDisplayFormat","setContentSearch","enhancedConfig","setShowEnhancedSearch","setEnhancedSearchFormat","favoriteProducts","terms","hasProducts","hasToutItem","hasProductsAndToutItem","hasTerms","fetchResults","isLoading","setCurrentContentTab","trackSearchResults","dynamicArticles","checkSearchType","searchType","contentRecs","productRecsNum","navigationStateUrlParam","searchLoadedUseCase","searchContentLoadedUseCase","emit","events","redirectUrl","searchUrlParam","searchTypeUrlParam","onTabSelect","sortOptionSelected","canLoadMoreResults","typeaheadResults","dynamicTouts","getCurrentContentTab","articlesRecsNum","resultType","isResultSortable","areFiltersEmpty","get","searchParam","isNaN","selectedValue","find","sortOption","element","scrollTop","scrollY","scrollHeight","clientHeight","eventArgs","clear","SearchTypeaheadUseCase","RESULTS_FOUND_OVERLAY","STORIES_RESULT_OVERLAY","SearchGnavInputFieldViewController","isSearchOverlayOpen","shouldFocusOverlayInput","inputValue","disableInput","enhancedSearchEnabled","minSearchLength","debounceLimit","searchTypeaheadUseCase","toggleSearchOverlay","closeSearchOverlay","openSearchOverlay","setShouldFocusOverlayInput","clearInputValue","searchTermSelected","trackSearchTermSelected","debounceSearchResults","searchResetTimeout","setMinSearchLength","handleChange","event","onKeyUp","siteUrl","redirect","isSearchValid","key","validSearch","isNotRedirect","callback","conditionalSearch","getCurrentTab","onSearchButtonClick","configSearch","limitItems","limitedTypeaheadResults","isSearchButtonVisible","overlayArticlesRecordCount","overlayProductsRecordCount","showSearchGrid","isStoriesTab","slice","limitProductIds","VoiceSearchViewController","isSpeakScreenOpen","allowPermission","voiceSearchFailure","showMicrophone","searching","speakScreenLimit","voiceSearchTerm","searchUrl","closeSpeakScreen","transcriptionCallback","result","hideSpeakScreen","onSuccessResults","onErrorCallback","onSuccessCallback","speakScreenhResetTimeout","setSearchUrl","Config","ConfigRepository","getConfigs","configs","query","serviceQueries","diContainer","serviceNames","SearchServiceStartedUseCase","configRepository","Container","apiSdk","configStore","ratingStore","serviceBusController","searchService","searchResultsViewController","searchGnavInputFieldViewController","voiceSearchViewController","setConfig","configJSON","register","factory","c","HttpTransport","searchConfig","businessUnitId","buidToEndecaAssemblerName","useSquareBrackets","lazyInject"],"sourceRoot":""}