{"version":3,"file":"static/js/3a9e813cee688cbaacab.bundle.js","mappings":"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","sources":["webpack://mattressfirm/./src/Utilities/allRegex.ts?9889","webpack://mattressfirm/./src/Utilities/get-zipcode.ts?4f03","webpack://mattressfirm/./src/actions/get-soci-data.action.ts?ce73","webpack://mattressfirm/./src/data-actions/store-selector-state-data-action.ts?6df6","webpack://mattressfirm/./src/modules/mfrm-autosuggest/actions/get-unbxd-search-autosuggest.action.ts?8fd0","webpack://mattressfirm/./src/modules/mfrm-autosuggest/components/mfrm-autosuggest.form.tsx?1339","webpack://mattressfirm/./src/modules/mfrm-autosuggest/mfrm-autosuggest.tsx?e2d0","webpack://mattressfirm/./src/modules/mfrm-autosuggest/components/search-result-item/search-result-item.tsx?a7a1","webpack://mattressfirm/./src/modules/mfrm-autosuggest/components/search-result-product/search-result-product.tsx?7a3f","webpack://mattressfirm/./src/modules/mfrm-autosuggest/components/search-result-category/search-result-category.tsx?2594","webpack://mattressfirm/./src/modules/mfrm-autosuggest/components/search-result-store-item/search-result-store-item.tsx?024e","webpack://mattressfirm/./src/modules/mfrm-autosuggest/components/search-result-stores/search-result-stores.tsx?a513","webpack://mattressfirm/./src/Utilities/set-cookies.ts?15c8","webpack://mattressfirm/./src/modules/mfrm-autosuggest/components/search-result-container/search-result-container.tsx?6368","webpack://mattressfirm/./src/modules/mfrm-autosuggest/mfrm-autosuggest.view.tsx?ddbb","webpack://mattressfirm/./src/modules/mfrm-search-result-container/actions/base-collection-action.ts?d7f5","webpack://mattressfirm/./src/modules/mfrm-search-result-container/actions/url-utils.ts?05d8","webpack://mattressfirm/./src/modules/mfrm-search/actions/get-full-products-by-search.ts?40b0","webpack://mattressfirm/./lib/mfrm-autosuggest/module-registration.js?969f","webpack://mattressfirm/./src/search-state.ts?dd10","webpack://mattressfirm/./src/search-state-data-action.ts?8223","webpack://mattressfirm/external var \"React\"?0d3b","webpack://mattressfirm/external var \"ReactDOM\"?853b"],"sourcesContent":["import { ICoreContext } from '@msdyn365-commerce/core';\r\nexport const emailRegex = (emailValue: string) => {\r\n // eslint-disable-next-line security/detect-unsafe-regex\r\n const validationEmail = /^[-a-z0-9!#$%&'*+/=?^_`{|}~]+(?:\\.[-a-z0-9!#$%&'*+/=?^_`{|}~]+)*@(?:[a-z0-9]+(?:-+[a-z0-9]+)*\\.)+(?:xn--[a-z0-9]+|[a-z]{2,16})$/i;\r\n\r\n return validationEmail.test(emailValue);\r\n};\r\n\r\n/**\r\n * Method to remove special characters for product name from product URL\r\n * @param str string\r\n * @param ctx ICoreContext\r\n * @returns string\r\n */\r\n\r\nexport const removeSpecialChars = (str: string, ctx: ICoreContext): string => {\r\n if (ctx && ctx.request.app?.config.removeSpecialCharsPDP) {\r\n return str?.replace(/[^a-zA-Z0-9- ]/g, '');\r\n }\r\n return str;\r\n};\r\n\r\n\r\n/**\r\n * Method to remove special characters for product URL's path\r\n * @param str string\r\n * @param ctx ICoreContext\r\n * @returns string\r\n */\r\n\r\nexport const removeSpecialCharsFromURLPath = (str: string, ctx: ICoreContext): string => {\r\n if (ctx && ctx.request.app?.config.removeSpecialCharsPDP) {\r\n const urlPath = decodeURIComponent(str.split('.p')[0])?.replace(/[^a-zA-Z0-9-/ ]/g, '');\r\n return `${urlPath}.p`;\r\n }\r\n return str;\r\n};\r\n\r\n// Following phone format is used on customer info section at checkout page\r\nexport const customerInfoPhoneRegex = /^\\(?([2-9][0-8][0-9])\\)?[ . ]?([2-9][0-9]{2})[\\-\\. ]?([0-9]{4})(\\s*x[0-9]+)?$/; // Valid USA number in format (xxx) xxx-xxxx\r\n\r\n/*\r\nThis regex object has 2 patterns:\r\n'nameRegex' matches names with letters, spaces, apostrophes, periods, and dashes.\r\n'addressInputRegex' matches alphanumeric characters and printable ASCII symbols.\r\n*/\r\nexport const inputRegexObj = {\r\n nameRegex: /^[\\p{L}\\s.'-]+$/u,\r\n addressInputRegex: /^[a-zA-Z0-9\\x20-\\x7E]*$/,\r\n phoneNumerRegex: customerInfoPhoneRegex\r\n};\r\n\r\n// This regex allows us to effectively validate and extract delivery messages\r\nexport const cartDeliveryMsgRegex = /[A-Za-z]{3} \\d{1,2}(?: - [A-Za-z]{3} \\d{1,2})?/;","import { IActionContext } from '@msdyn365-commerce/core';\r\nimport Cookies from 'universal-cookie';\r\nexport const getZipCode = (ctx: IActionContext): string | undefined => {\r\n //@ts-ignore\r\n const geolocationZipCode = ctx.requestContext.geoLocation?.zipCode ? ctx.requestContext.geoLocation.zipCode : ctx.requestContext.geoLocation?.res?.zipCode;\r\n const cookie = new Cookies();\r\n const zipcode = cookie.get('zip_code') ? cookie.get('zip_code') : geolocationZipCode;\r\n return zipcode ?? undefined;\r\n};\r\nexport const getGeoLocationZipCode = (ctx: IActionContext): string | undefined => {\r\n //@ts-ignore\r\n const zipCode = ctx.requestContext.geoLocation?.zipCode ? ctx.requestContext.geoLocation.zipCode : ctx.requestContext.geoLocation?.res?.zipCode;\r\n return zipCode ?? null;\r\n};\r\n","import { IGeneric, IAny } from '@msdyn365-commerce/core';\r\n/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport axios from 'axios';\r\nimport { getZipCode } from '../Utilities/get-zipcode';\r\n\r\n/**\r\n * GetSociData Input Action\r\n */\r\nexport class GetSociDataInput implements Msdyn365.IActionInput {\r\n public searchradius?: number | undefined;\r\n public searchLimit?: number | undefined;\r\n public zipCode?: string | undefined;\r\n constructor(searchradius?: number | undefined, searchLimit?: number | undefined, zipCode?: string | undefined) {\r\n this.searchradius = searchradius;\r\n this.searchLimit = searchLimit;\r\n this.zipCode = zipCode;\r\n }\r\n\r\n public getCacheKey = () => `SociLocations-${this.zipCode}`;\r\n public getCacheObjectType = () => 'SociLocations';\r\n public dataCacheType = (): Msdyn365.CacheType => 'request';\r\n}\r\n\r\n/**\r\n * Use this function to create the input required to make the action call\r\n */\r\nconst createInput = (args: Msdyn365.ICreateActionContext>): Msdyn365.IActionInput => {\r\n return new GetSociDataInput(args?.config?.lookupRadius, args?.config?.maxNoOfFranchise ?? 4);\r\n};\r\n\r\n/**\r\n * Use this function to call your action and process the results as needed\r\n */\r\nasync function getSociData(input: GetSociDataInput, ctx: Msdyn365.IActionContext): Promise {\r\n try {\r\n const zipCode = input?.zipCode ? input.zipCode : getZipCode(ctx);\r\n if (!zipCode) {\r\n return null;\r\n }\r\n let geoLoc = [];\r\n if(/^[0-9]+$/.test(zipCode)){\r\n geoLoc = [\r\n {\r\n \"postalcode\": zipCode\r\n }\r\n ];\r\n } else{\r\n geoLoc = [\r\n {\r\n \"state\": zipCode,\r\n \"city\": zipCode\r\n }\r\n ];\r\n }\r\n const response = await axios.post(`https://api.slippymap.com/rest/locatorsearch`, {\r\n \"request\": {\r\n \"appkey\": \"F147ADC0-8099-11EC-AC1B-273DC403F339\",\r\n \"formdata\": {\r\n \"dataview\": \"store_default\",\r\n \"limit\": input.searchLimit ?? 4,\r\n \"geolocs\": {\r\n \"geoloc\": geoLoc\r\n },\r\n \"searchradius\": input.searchradius?.toString() ?? \"50\"\r\n }\r\n }\r\n }\r\n , {\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n }\r\n });\r\n if (response.data) {\r\n return response.data;\r\n }\r\n else { return null; }\r\n } catch (e) {\r\n // will be removed after unit test and deployment on lower environment\r\n console.log('error for soci api', e);\r\n return null;\r\n }\r\n}\r\n\r\nexport default Msdyn365.createObservableDataAction({\r\n action: >getSociData,\r\n id: 'GetSociData',\r\n input: createInput\r\n // Uncomment the below line if this is a meant to be a batched data action\r\n // isBatched: true\r\n});\r\n","import MsDyn365, {\r\n CacheType,\r\n createObservableDataAction,\r\n IAction,\r\n IActionContext,\r\n IActionInput,\r\n IAny,\r\n ICreateActionContext,\r\n IGeneric\r\n} from '@msdyn365-commerce/core';\r\nimport { OrgUnitLocation } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\nimport { IStoreSelectorState } from './store-selector-state';\r\n/**\r\n * storeSelectorState - action input\r\n */\r\nexport class StoreSelectorStateInput implements IActionInput {\r\n public getCacheKey = () => `storeSelectorState`;\r\n public getCacheObjectType = () => 'storeSelectorState';\r\n public dataCacheType = (): CacheType => 'application';\r\n}\r\n\r\n/**\r\n * StoreSelectorStateInput - action\r\n */\r\nexport async function storeSelectorStateAction(input: StoreSelectorStateInput, ctx: IActionContext): Promise {\r\n const prefferedStore: OrgUnitLocation =\r\n MsDyn365.isBrowser && localStorage.getItem('_mfrm__prefferedStore_')\r\n ? JSON.parse(localStorage.getItem('_mfrm__prefferedStore_') || '')\r\n : {};\r\n return { isModalOpen: false, prefferedStore: prefferedStore };\r\n}\r\n\r\n/**\r\n * StoreSelectorStateInput - create new input for create action\r\n */\r\nconst createInput = (inputData: ICreateActionContext>): IActionInput => {\r\n return new StoreSelectorStateInput();\r\n};\r\n\r\n/**\r\n * StoreSelectorStateInput - create action\r\n */\r\nexport default createObservableDataAction({\r\n id: 'StoreSelectorState',\r\n action: >storeSelectorStateAction,\r\n input: createInput\r\n});\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport Cookies from 'universal-cookie';\r\nexport class GetUnbxdSearchAutoSuggestDataInput implements Msdyn365.IActionInput {\r\n public queryText?: string | undefined;\r\n public popularProducts?: number | undefined;\r\n public inFields?: number | undefined;\r\n public topQueries?: number | undefined;\r\n public keywordSuggestions?: number | undefined;\r\n public promotedSuggestion?: number | undefined;\r\n\r\n public getCacheKey = () => `Unbxd-autoSuggest-data-${this.queryText}`;\r\n public getCacheObjectType = () => 'Unbxd-autoSuggest-data';\r\n public dataCacheType = (): Msdyn365.CacheType => 'request';\r\n\r\n constructor(queryText?: string | undefined, popularProducts?: number | undefined, inFields?: number | undefined, topQueries?: number | undefined, keywordSuggestions?: number | undefined, promotedSuggestion?: number\r\n | undefined) {\r\n this.queryText = queryText;\r\n this.popularProducts = popularProducts;\r\n this.inFields = inFields;\r\n this.topQueries = topQueries;\r\n this.keywordSuggestions = keywordSuggestions;\r\n this.promotedSuggestion = promotedSuggestion;\r\n }\r\n}\r\n\r\n/**\r\n * Use this function to call your action and process the results as needed\r\n */\r\nasync function getUnbxdSearchAutoSuggestData(input: GetUnbxdSearchAutoSuggestDataInput, ctx: Msdyn365.IActionContext): Promise {\r\n const cookies = new Cookies();\r\n const unbxdUid = cookies.get('unbxd.userId');\r\n const queryText = input?.queryText ? input.queryText : \"\";\r\n const popularProductsCount = input?.popularProducts ? input.popularProducts : 0;\r\n const inFieldsCount = input?.inFields ? input.inFields : 0;\r\n const topQueriesCount = input?.topQueries ? input.topQueries : 0;\r\n const keywordSuggestionsCount = input?.keywordSuggestions ? input.keywordSuggestions : 0;\r\n const promotedSuggestionCount = input?.promotedSuggestion ? input.promotedSuggestion : 0;\r\n const unbxdApiKey = ctx.requestContext.app.config.unbxdApiKey;\r\n const unbxdSiteKey = ctx.requestContext.app.config.unbxdSiteKey;\r\n try {\r\n const unbxdUrl = `https://search.unbxd.io/${unbxdApiKey}/${unbxdSiteKey}/autosuggest?q=${queryText}&popularProducts.count=${popularProductsCount}&inFields.count=${inFieldsCount}&topQueries.count=${topQueriesCount}&keywordSuggestions.count=${keywordSuggestionsCount}&promotedSuggestion.count=${promotedSuggestionCount}&uid=${unbxdUid}`;\r\n const response = await Msdyn365.sendRequest(unbxdUrl, 'get');\r\n if (response) {\r\n return response.data;\r\n }\r\n else { return null; }\r\n } catch (e) {\r\n return null;\r\n }\r\n}\r\n\r\nexport default Msdyn365.createObservableDataAction({\r\n action: >getUnbxdSearchAutoSuggestData,\r\n id: 'getUnbxdSearchAutoSuggestData'\r\n});\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { Button } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nexport interface ISearchFormProps {\r\n hideSearchLabel: boolean | undefined;\r\n isSearchFormExpanded?: boolean | undefined;\r\n disableSubmitSearch: boolean | undefined;\r\n searchTextInput: React.RefObject;\r\n maxChars: number;\r\n searchQsp: string;\r\n searchPlaceholder: string;\r\n query: string;\r\n ariaLabelCancel: string;\r\n ariaLabelSearch: string;\r\n ariaLabelSubmit: string;\r\n handleCancelSearchChange(): void;\r\n handleInputChange(query: string): void;\r\n handleFocused(): void;\r\n onSubmit(e: React.MouseEvent | React.KeyboardEvent | React.FormEvent, eventType?: string): Promise;\r\n isParentCustomModule?: boolean;\r\n iconURL?: string;\r\n}\r\n\r\nexport interface ISearchFormViewProps {\r\n input: React.ReactNode;\r\n submitBtn: React.ReactNode;\r\n cancelBtn: React.ReactNode;\r\n}\r\n\r\n/**\r\n * On Input Change functionality.\r\n * @param handleInputChange -Input change function.\r\n * @returns Set updated input value.\r\n */\r\nconst onInputChangeFunction = (handleInputChange: (query: string) => void) => (event: React.ChangeEvent) => {\r\n handleInputChange(event.target.value || '');\r\n};\r\nexport const FormComponent = (props: ISearchFormProps): ISearchFormViewProps => {\r\n const {\r\n searchQsp,\r\n searchPlaceholder,\r\n hideSearchLabel,\r\n searchTextInput,\r\n handleInputChange,\r\n maxChars,\r\n disableSubmitSearch,\r\n handleCancelSearchChange,\r\n query,\r\n ariaLabelCancel,\r\n ariaLabelSearch,\r\n ariaLabelSubmit,\r\n handleFocused,\r\n onSubmit,\r\n isParentCustomModule,\r\n iconURL\r\n } = props;\r\n\r\n const onInputChange = onInputChangeFunction(handleInputChange);\r\n const handleKeyDown = (e: React.KeyboardEvent) => {\r\n if (e.key === 'Enter') {\r\n e.preventDefault();\r\n const element = document.getElementById(\"ms-search-submit\") as HTMLElement;\r\n element?.click();\r\n }\r\n return false;\r\n };\r\n\r\n const inputNode = !hideSearchLabel ? (\r\n \r\n ) : (\r\n \r\n );\r\n\r\n const submitBtnNode = !disableSubmitSearch &&\r\n (isParentCustomModule ? ) => onSubmit(e, 'search-box-icon')}\r\n tabIndex={-1}\r\n > search icon \r\n : ) => onSubmit(e, 'search-box-icon')}\r\n tabIndex={-1} />);\r\n\r\n const cancelBtNoden = (\r\n \r\n );\r\n\r\n return { input: inputNode, cancelBtn: cancelBtNoden, submitBtn: submitBtnNode };\r\n};","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { Autosuggestions } from '@msdyn365-commerce/commerce-entities';\r\nimport MsDyn365, { getUrlSync } from '@msdyn365-commerce/core';\r\nimport { ProductRefiner } from '@msdyn365-commerce/retail-proxy';\r\nimport { createSearchStateInput } from '@msdyn365-commerce-modules/search-utilities';\r\nimport getUnbxdSearchAutoSuggestData, { GetUnbxdSearchAutoSuggestDataInput } from './actions/get-unbxd-search-autosuggest.action';\r\nimport {IModuleProps, INodeProps, KeyCodes} from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport { debounce } from 'lodash';\r\nimport { Spinner, SpinnerSize } from 'office-ui-fabric-react';\r\nimport * as React from 'react';\r\nimport Cookies from 'universal-cookie';\r\nimport { FormComponent } from './components/mfrm-autosuggest.form';\r\nimport { IMfrmAutosuggestData } from './mfrm-autosuggest.data';\r\nimport { IMfrmAutosuggestProps } from './mfrm-autosuggest.props.autogenerated';\r\nimport getSearchProducts, { GetFullProductsBySearchInput } from '../mfrm-search/actions/get-full-products-by-search';\r\nimport getSociData, { GetSociDataInput } from '../../actions/get-soci-data.action';\r\n\r\nexport interface ISearchState {\r\n isSearchFormExpanded: boolean;\r\n searchText: string;\r\n selectedQuery: string;\r\n suggestions: Autosuggestions | undefined | any;\r\n searchRefiners?: ProductRefiner[] | undefined;\r\n autoSuggestAriaLabel: string;\r\n isInitialState: boolean;\r\n isLoadingAutoSuggest?: boolean;\r\n isFocused?: boolean;\r\n sociLocationsList?: any[];\r\n}\r\n\r\nexport interface IMfrmAutosuggestViewProps extends IMfrmAutosuggestProps {\r\n Search: IModuleProps;\r\n AutoSuggestAriaLabel: INodeProps;\r\n AutoSuggestAriaLabelText: string;\r\n searchText: string;\r\n selectedQuery: string;\r\n AutoSuggest: INodeProps;\r\n SearchForm: INodeProps;\r\n FormWrapper: INodeProps;\r\n form: React.ReactNode;\r\n callbacks: {\r\n handleCancelSearchChange(): void;\r\n };\r\n isSearchFormExpanded: boolean;\r\n isLoadingAutoSuggest?: boolean;\r\n isLoadingNode?: React.ReactNode;\r\n suggestions?: any;\r\n suggestedSociLocations?: any[];\r\n isFocused?: boolean;\r\n handleCloseDialog(e: React.MouseEvent): void;\r\n recentlySearched?: string[];\r\n buildLink(searchTerm: string): string;\r\n handleUnbxdRedirect(query: string): Promise;\r\n setFormText(e: React.MouseEvent, searchText: string): void;\r\n}\r\n\r\n/**\r\n *\r\n * Search module.\r\n * @extends {React.Component, ISearchState>}\r\n */\r\nclass MfrmAutosuggest extends React.Component, ISearchState> {\r\n private readonly searchTextInput: React.RefObject;\r\n\r\n private readonly searchCollapsedLabel: React.RefObject;\r\n\r\n private readonly formReference: React.RefObject;\r\n\r\n private readonly maxChars: number;\r\n\r\n private readonly waitTime: number = 500;\r\n\r\n private readonly autoSuggestResultScreenReaderDiv: React.RefObject;\r\n\r\n private readonly autoSuggestResultDiv: React.RefObject;\r\n\r\n private readonly searchFormClass: string;\r\n\r\n // private readonly telemetryContent: ITelemetryContent;\r\n\r\n // @ts-expect-error\r\n private cancellabelDebounce: debounce;\r\n public cookies: Cookies = new Cookies();\r\n public recentlySearched: [] = [];\r\n\r\n\r\n constructor(props: IMfrmAutosuggestProps) {\r\n super(props);\r\n this.searchTextInput = React.createRef();\r\n this.searchCollapsedLabel = React.createRef();\r\n this.autoSuggestResultScreenReaderDiv = React.createRef();\r\n this.autoSuggestResultDiv = React.createRef();\r\n this.formReference = React.createRef();\r\n this.state = {\r\n isSearchFormExpanded: false,\r\n searchText: '',\r\n suggestions: undefined,\r\n autoSuggestAriaLabel: '',\r\n isInitialState: true,\r\n isLoadingAutoSuggest: false,\r\n isFocused: false,\r\n selectedQuery: '',\r\n sociLocationsList: []\r\n };\r\n this.maxChars =\r\n (this.props.context &&\r\n this.props.context.app &&\r\n this.props.context.app.config &&\r\n this.props.context.app.config.searchInputMaxLength) ||\r\n 50;\r\n this.searchFormClass = 'ms-search__form';\r\n this.setFormText = this.setFormText.bind(this);\r\n }\r\n\r\n public async componentDidMount(): Promise {\r\n document.body && document.body.addEventListener('mousedown', this._focusOutTarget);\r\n window && window.addEventListener('keyup', this._keyup);\r\n this.recentlySearched = this.cookies.get('ReacentlySearches');\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n document.body && document.body.removeEventListener('mousedown', this._focusOutTarget, false);\r\n window && window.removeEventListener('keyup', this._keyup, false);\r\n }\r\n\r\n public async componentDidUpdate(): Promise {\r\n const {\r\n config: { hideSearchLabel }\r\n } = this.props;\r\n const { isSearchFormExpanded, isInitialState, searchText, sociLocationsList } = this.state;\r\n if (!this.props.context.request.params.isEditor) {\r\n if (!hideSearchLabel && isSearchFormExpanded) {\r\n this.searchTextInput && this.searchTextInput.current && this.searchTextInput.current.focus();\r\n } else if (!isInitialState) {\r\n this.searchCollapsedLabel && this.searchCollapsedLabel.current && this.searchCollapsedLabel.current.focus();\r\n }\r\n }\r\n if (!searchText && !this.state.suggestions) {\r\n void this._getSearchSuggestionsData('*', 3, 0, 3, 0, 0); // initial query with overrides for proper suggestions\r\n sociLocationsList?.length! > 0 && this.setState({ sociLocationsList: [] });\r\n }\r\n }\r\n\r\n public shouldComponentUpdate(nextProps: IMfrmAutosuggestProps, nextState: ISearchState): boolean {\r\n if (this.state === nextState && this.props === nextProps) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n public setFormText(e: any, selectedQuery: string): void {\r\n this.setState({ selectedQuery },\r\n () => this._handleSubmit(e)\r\n );\r\n }\r\n\r\n // eslint-disable-next-line complexity -- ignore complexity.\r\n public render(): JSX.Element {\r\n const {\r\n context,\r\n resources: { /*searchtext, searchLabelArialLabel, */cancelBtnAriaLabel, searchBtnAriaLabel, submitBtnAriaLabel },\r\n config: { hideSearchLabel, disableSubmitSearch, searchplaceholderText, isParentCustomModule, iconURL, className = '' }\r\n } = this.props;\r\n const {\r\n isSearchFormExpanded,\r\n searchText,\r\n suggestions,\r\n isLoadingAutoSuggest,\r\n isFocused,\r\n sociLocationsList\r\n } = this.state;\r\n const searchQsp = (context && context.app && context.app.config && context.app.config.searchQueryStringParameter) || 'q';\r\n const searchURL = getUrlSync('search', context && context.actionContext) || '';\r\n const searchPlaceholder = searchplaceholderText && searchplaceholderText.length > 0 ? searchplaceholderText : 'Search in Fabrikam';\r\n const classSearchModal = `${sociLocationsList?.length && suggestions?.response?.numberOfProducts > 0 ?\r\n 'ms-search__autoSuggest search-result-stores-product-suggestion' : sociLocationsList?.length && !this.recentlySearched ?\r\n 'ms-search__autoSuggest search-result-only-stores' : sociLocationsList?.length && this.recentlySearched ?\r\n 'ms-search__autoSuggest' :\r\n 'ms-search__autoSuggest'}`;\r\n const viewProps: IMfrmAutosuggestViewProps = {\r\n ...(this.props as IMfrmAutosuggestProps),\r\n\r\n Search: {\r\n moduleProps: this.props,\r\n className: `${classnames('ms-search', className)} ${disableSubmitSearch ? 'no-submit' : 'with-submit'}`\r\n },\r\n AutoSuggestAriaLabel: {\r\n tag: 'div',\r\n className: 'msc-autoSuggest__screen-reader',\r\n 'aria-live': 'assertive',\r\n ref: this.autoSuggestResultScreenReaderDiv\r\n },\r\n AutoSuggestAriaLabelText: this.state.autoSuggestAriaLabel,\r\n searchText: this.state.searchText,\r\n selectedQuery: this.state.selectedQuery,\r\n AutoSuggest: {\r\n ref: this.autoSuggestResultDiv,\r\n className: classSearchModal\r\n },\r\n SearchForm: {\r\n className: `${this.searchFormClass} ${isSearchFormExpanded ? 'bx-show' : 'bx-hide'}`\r\n },\r\n FormWrapper: {\r\n tag: 'form',\r\n ref: this.formReference,\r\n className: 'ms-search__searchForm',\r\n 'aria-label': 'Search',\r\n name: 'searchForm',\r\n role: 'search',\r\n action: searchURL,\r\n autoComplete: 'off',\r\n onSubmit: this._handleSubmit\r\n },\r\n form: FormComponent({\r\n ariaLabelCancel: cancelBtnAriaLabel,\r\n ariaLabelSearch: searchBtnAriaLabel,\r\n ariaLabelSubmit: submitBtnAriaLabel,\r\n hideSearchLabel,\r\n searchTextInput: this.searchTextInput,\r\n disableSubmitSearch,\r\n handleInputChange: this._handleInputChange,\r\n handleCancelSearchChange: this._handleCancelSearchChange,\r\n maxChars: this.maxChars,\r\n searchQsp,\r\n searchPlaceholder,\r\n query: searchText,\r\n handleFocused: this.handleFocused,\r\n onSubmit: this._handleSubmit,\r\n isParentCustomModule: isParentCustomModule,\r\n iconURL: iconURL\r\n }),\r\n callbacks: {\r\n handleCancelSearchChange: this._handleCancelSearchChange\r\n },\r\n isSearchFormExpanded: this.state.isSearchFormExpanded,\r\n isLoadingAutoSuggest,\r\n isLoadingNode: this._isLoadingNode(),\r\n suggestions,\r\n suggestedSociLocations: sociLocationsList ?? [],\r\n isFocused,\r\n handleCloseDialog: this.handleCloseDialog,\r\n recentlySearched: this.recentlySearched,\r\n buildLink: this.buildLink,\r\n handleUnbxdRedirect: this._handleUnbxdRedirect,\r\n setFormText: this.setFormText\r\n };\r\n\r\n return this.props.renderView(viewProps) as React.ReactElement;\r\n }\r\n\r\n private buildLink = (searchTerm: string) => {\r\n const { context } = this.props;\r\n const params = MsDyn365.isBrowser && window.location;\r\n const origin = params && params.origin === 'https://localhost:4000' ? params.origin : context.request.url.requestUrl.origin;\r\n const searchQsp = (context && context.app && context.app.config && context.app.config.searchQueryStringParameter) || 'q';\r\n const searchPageURL = getUrlSync('search', context && context.actionContext) || '';\r\n return `${origin}${searchPageURL}?${searchQsp}=${searchTerm.split(' ').join('%20')}`;\r\n };\r\n\r\n /**\r\n * Function to create the ReactNode for loading Autosuggest result.\r\n * @returns ReachNode for loading Autosuggest result.\r\n */\r\n private readonly _isLoadingNode = (): React.ReactNode => {\r\n const loadingText = this.props.resources.autoSuggestResultLoadingMessage;\r\n return ;\r\n };\r\n\r\n private readonly _focusOutTarget = (e: any): void => {\r\n if (e.target.closest('.ms-search') === null) {\r\n this._clearAutoSuggestState();\r\n }\r\n };\r\n\r\n private readonly _keyup = (e: KeyboardEvent): void => {\r\n const { suggestions } = this.state;\r\n\r\n if (suggestions && suggestions.AllSearchResults && e.keyCode === KeyCodes.Escape) {\r\n this._clearAutoSuggestState();\r\n } else if (this.state.isSearchFormExpanded && e.keyCode === KeyCodes.Escape) {\r\n if (this.state.isSearchFormExpanded) {\r\n this.setState({ isSearchFormExpanded: false });\r\n }\r\n }\r\n\r\n if (\r\n !(\r\n (this.formReference.current && this.formReference.current.contains((e.target as unknown) as Node)) ||\r\n (this.autoSuggestResultDiv.current && this.autoSuggestResultDiv.current.contains((e.target as unknown) as Node))\r\n )\r\n ) {\r\n if (suggestions && suggestions.AllSearchResults) {\r\n this._clearAutoSuggestState();\r\n }\r\n\r\n if (this.state.isSearchFormExpanded) {\r\n this.setState({ isSearchFormExpanded: false });\r\n }\r\n\r\n if (this.state.searchText.length === 0) {\r\n this._clearAutoSuggestState();\r\n }\r\n }\r\n };\r\n\r\n private readonly _clearAutoSuggestState = (): void => {\r\n const {\r\n context: { actionContext },\r\n data: { searchState }\r\n } = this.props;\r\n\r\n if (this.searchTextInput.current && this.searchTextInput.current.value.length > 0) {\r\n searchState.searchText = '';\r\n searchState.defaultBasicSearchUrl = '';\r\n searchState.searchQueryStringParameter = '';\r\n actionContext ? actionContext.update(createSearchStateInput(searchState), searchState) : null;\r\n this.searchTextInput.current.value = '';\r\n }\r\n document.body.classList.remove('no-scroll');\r\n\r\n this.setState({ isFocused: false, searchText: '', suggestions: undefined, searchRefiners: undefined, sociLocationsList: [] });\r\n };\r\n\r\n private handleFocused = (): void => {\r\n const { isFocused } = this.state;\r\n if (!isFocused) {\r\n this.setState({ isFocused: true });\r\n }\r\n document.body.classList.add('no-scroll');\r\n };\r\n\r\n private handleCloseDialog = (e: any) => {\r\n e.preventDefault();\r\n this._clearAutoSuggestState();\r\n };\r\n\r\n private readonly _handleInputChange = (query: string): void => {\r\n\r\n const {\r\n context\r\n } = this.props;\r\n\r\n if (!query || query.length <= this.maxChars) {\r\n if (!query && this.state.suggestions) {\r\n this.setState({ suggestions: undefined });\r\n }\r\n this.setState({ searchText: query }, () => {\r\n if (context) {\r\n if (query && query.length > 0) {\r\n if (query.length > this.maxChars) {\r\n return;\r\n }\r\n const { searchText } = this.state;\r\n this.cancellabelDebounce = debounce(() => {\r\n this.setState({ isLoadingAutoSuggest: true });\r\n void this._getSearchSuggestionsData(\r\n searchText,\r\n this.props.config.popularProductCount,\r\n this.props.config.inFieldCount,\r\n this.props.config.topQueriesCount,\r\n this.props.config.keyWordSuggestionCount,\r\n this.props.config.promotedSuggestionCount\r\n );\r\n void this._getSociStore();\r\n }, this.waitTime);\r\n\r\n setTimeout(() => {\r\n this.cancellabelDebounce();\r\n }, 0);\r\n }\r\n }\r\n });\r\n }\r\n\r\n if (this.cancellabelDebounce) {\r\n this.cancellabelDebounce.cancel();\r\n }\r\n };\r\n\r\n private readonly _handleSubmit = async (\r\n e: React.MouseEvent | React.KeyboardEvent | React.FormEvent, eventType?: string\r\n ): Promise => {\r\n const {\r\n config: { disableSubmitSearch },\r\n context: {\r\n actionContext,\r\n app: {\r\n config: { searchQueryStringParameter }\r\n }\r\n }\r\n } = this.props;\r\n\r\n const query = (this.state.selectedQuery.length > 0 && this.state.selectedQuery) || (this.searchTextInput.current && this.searchTextInput.current.value);\r\n\r\n if (!query || (query && query.length === 0) || disableSubmitSearch) {\r\n this.searchTextInput && this.searchTextInput.current && this.searchTextInput.current.focus();\r\n e.preventDefault();\r\n } else {\r\n // @ts-ignore\r\n if ('utag' in window) {\r\n // @ts-ignore\r\n utag.link({\r\n event: 'site_search',\r\n event_type: \"site_search\",\r\n search_term: query,\r\n search_type: eventType === 'search-box-icon' ? 'search-box-icon' : 'search-box-enter'\r\n });\r\n }\r\n this._setRecentSearches(query);\r\n const searchQsp = searchQueryStringParameter || 'q';\r\n const searchURL = this._appendQueryParams(getUrlSync('search', actionContext) || '', query, searchQsp);\r\n const redirectUrl = await this._handleUnbxdRedirect(query);\r\n\r\n if (query && MsDyn365.isBrowser) {\r\n document.location.href = (redirectUrl ? redirectUrl : searchURL)?.replace(`/${this.props.app.config.wmapPageUrlSuffix}`, '');\r\n }\r\n\r\n }\r\n };\r\n\r\n private _handleUnbxdRedirect = async (query: string): Promise => {\r\n const input = new GetFullProductsBySearchInput(\r\n 'Search',\r\n this.props.context.request.apiSettings,\r\n {\r\n Paging: {\r\n Top: 1,\r\n Skip: 0\r\n },\r\n count: true,\r\n Sorting: {}\r\n },\r\n [],\r\n + (this.props.context.request.urlTokens.itemId || 0),\r\n query,\r\n false,\r\n this.props.context.request.locale,\r\n this.props.context.request.url.requestUrl.pathname\r\n );\r\n let redirectUrl = '';\r\n if (input?.searchText) {\r\n const productResults = await getSearchProducts(input, this.props.context.actionContext);\r\n const extProperties = productResults.products && productResults.products.length > 0 && productResults.products[0]?.ExtensionProperties;\r\n const redirectUrlValue = extProperties && extProperties?.find(obj => obj?.Key === 'RedirectURL')?.Value?.StringValue;\r\n redirectUrlValue && redirectUrlValue.length ? redirectUrl = redirectUrlValue : redirectUrl = '';\r\n return redirectUrl;\r\n }\r\n return redirectUrl;\r\n };\r\n\r\n private _setRecentSearches = (query: string): void => {\r\n const cookies = new Cookies();\r\n let inserted = false;\r\n\r\n let recentlySearches = cookies.get(`ReacentlySearches`);\r\n if (query !== undefined) {\r\n if (recentlySearches === undefined || recentlySearches.length === 0) {\r\n const recentlySearches = [];\r\n recentlySearches.push(query);\r\n cookies.set(`ReacentlySearches`, recentlySearches, { path: '/' });\r\n } else {\r\n recentlySearches?.map((item: string, index: number) => {\r\n if (item === query) {\r\n recentlySearches?.splice(index, 1);\r\n recentlySearches = [query]?.concat(recentlySearches);\r\n cookies.set(`ReacentlySearches`, recentlySearches, { path: '/' });\r\n inserted = true;\r\n }\r\n });\r\n\r\n if (!inserted) {\r\n if (recentlySearches.length >= 3) {\r\n recentlySearches?.splice(-1);\r\n recentlySearches = [query]?.concat(recentlySearches);\r\n cookies.set(`ReacentlySearches`, recentlySearches, { path: '/' });\r\n } else {\r\n recentlySearches = [query]?.concat(recentlySearches);\r\n cookies.set(`ReacentlySearches`, recentlySearches, { path: '/' });\r\n }\r\n inserted = false;\r\n }\r\n }\r\n }\r\n };\r\n\r\n private readonly _handleCancelSearchChange = (): void => {\r\n const { isSearchFormExpanded, suggestions } = this.state;\r\n\r\n if (!isSearchFormExpanded) {\r\n this.setState({\r\n isSearchFormExpanded: true,\r\n searchText: '',\r\n isInitialState: false\r\n });\r\n } else {\r\n if (suggestions && suggestions.AllSearchResults) {\r\n this._clearAutoSuggestState();\r\n }\r\n\r\n this.setState({ isSearchFormExpanded: false });\r\n }\r\n };\r\n\r\n private readonly _appendQueryParams = (route: string, query: string, qsp: string): string => {\r\n if (!MsDyn365.isBrowser) {\r\n return '';\r\n }\r\n\r\n const queryUrl = new URL(route, window.location.href);\r\n if (qsp && query) {\r\n queryUrl.searchParams.set(qsp, query);\r\n }\r\n return queryUrl.href;\r\n };\r\n\r\n private _getSearchSuggestionsData = async (\r\n searchText: string,\r\n popularProductCount: number | undefined,\r\n inFieldCount: number | undefined,\r\n topQueryCount: number | undefined,\r\n keywordCount: number | undefined,\r\n promoCount: number | undefined\r\n ): Promise => {\r\n try {\r\n getUnbxdSearchAutoSuggestData(\r\n new GetUnbxdSearchAutoSuggestDataInput(\r\n searchText,\r\n popularProductCount,\r\n inFieldCount,\r\n topQueryCount,\r\n keywordCount,\r\n promoCount\r\n ),\r\n this.props.context.actionContext\r\n ).then((data: any) => {\r\n if (data) {\r\n this.setState({ suggestions: data });\r\n }\r\n }).catch((e: any) => console.error(e));\r\n } catch (error) {\r\n console.error('Unbxd API error', Error);\r\n }\r\n };\r\n\r\n private _sortSociLocations = (stores: any) => {\r\n const preferredStore = localStorage?.getItem('_mfrm__prefferedStore_') || null;\r\n if (stores?.length !== 0 && preferredStore) {\r\n const parsedPreferredStore = JSON.parse(preferredStore);\r\n const selectedStoreIndex = stores?.findIndex((store: any) => parsedPreferredStore?.name === store.name);\r\n const selectedStore = stores?.splice(selectedStoreIndex, 1);\r\n stores.unshift(selectedStore[0]);\r\n return [...new Set(stores)];\r\n }\r\n return stores;\r\n };\r\n\r\n private _getSociStore = async (): Promise => {\r\n try {\r\n const { maxNoOfSociLocations, lookupRadius } = this.props.config;\r\n const { searchText } = this.state;\r\n getSociData(new GetSociDataInput(lookupRadius, maxNoOfSociLocations, searchText), this.props.context.actionContext).then((data: any) => {\r\n if (data) {\r\n const sociAvailableStores = data.response.collection && data.response.collection.filter((store: { opening_status: string; }) => store?.opening_status !== 'permanently_closed') || [];\r\n const sortedLocations = this._sortSociLocations(sociAvailableStores);\r\n this.setState({ sociLocationsList: sortedLocations });\r\n }\r\n }).catch((e) => console.error(e));\r\n\r\n } catch (error) {\r\n console.error('Soci API error', Error);\r\n }\r\n };\r\n}\r\n\r\nexport default MfrmAutosuggest;","import React from 'react';\r\n\r\nconst SearchResultItem = React.memo((props: any) => {\r\n const { productName } = props;\r\n const handleClick = (e: React.MouseEvent) => {\r\n props.onClick(productName);\r\n };\r\n const handleKeyDown = (e: {key: string}) => {\r\n if (e.key === 'Enter') {\r\n props.onClick(productName);\r\n }\r\n };\r\n return (\r\n
\r\n

\r\n {props.productName}\r\n

\r\n
\r\n );\r\n});\r\n\r\nexport default SearchResultItem;\r\n","import React from 'react';\r\nimport { RatingComponent } from '@msdyn365-commerce/components';\r\nimport { ICoreContext, Image } from '@msdyn365-commerce/core';\r\nimport { getFallbackImageUrl } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { removeSpecialChars } from '../../../../Utilities/allRegex';\r\n\r\nconst _buildImageUrl = (baseImgUrl: string, imgUrl: string) => {\r\n if (imgUrl) {\r\n return `${baseImgUrl}${imgUrl}`;\r\n }\r\n return \"\";\r\n};\r\n\r\nconst SearchResultProduct = React.memo((props: any) => {\r\n const {\r\n productName,\r\n baseUrl,\r\n basePrice,\r\n AdjustedPrice,\r\n CustomerContextualPrice,\r\n context,\r\n uniqueId,\r\n AverageRatingOverall,\r\n AverageRatingCountOverall,\r\n recordId,\r\n defaultVariantId\r\n } = props;\r\n\r\n const buildURL = (baseUrl: string, productName: string, recordId: number) => {\r\n const filteredName = removeSpecialChars(productName, context);\r\n const lowercaseProduct = filteredName.toLowerCase().split(' ').join('-');\r\n return `${baseUrl}/${lowercaseProduct}/${recordId}.p${defaultVariantId ? `?variantid=${defaultVariantId}` : ''}`;\r\n };\r\n\r\n const renderRating = (\r\n context: ICoreContext,\r\n typeName: string,\r\n id: string,\r\n avgRating?: number,\r\n totalRatings?: number\r\n ): JSX.Element | null => {\r\n const numRatings = (totalRatings && totalRatings.toString()) || '0';\r\n if (avgRating || avgRating === 0) {\r\n // const ratingAriaLabel = getRatingAriaLabel(avgRating, ariaLabel);\r\n return (\r\n \r\n );\r\n } else {\r\n return (\r\n \r\n );\r\n }\r\n };\r\n\r\n const handleClick = (e: React.MouseEvent) => {\r\n props.onClick();\r\n };\r\n\r\n const emptyPlaceHolderImage = props.context.app.config.placeholderImageName as string;\r\n let fallbackImage = getFallbackImageUrl(props.uniqueId, props.context.request.apiSettings);\r\n\r\n if (emptyPlaceHolderImage && fallbackImage) {\r\n fallbackImage = `${fallbackImage},${emptyPlaceHolderImage}`;\r\n }\r\n\r\n return (\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n

\r\n {`${props.brandName && props.brandName.length > 0 ? props.brandName : ''} ${props.productName}`}\r\n

\r\n {\r\n basePrice ? (\r\n
\r\n {\r\n AdjustedPrice && CustomerContextualPrice && CustomerContextualPrice < AdjustedPrice\r\n ? <>\r\n ${CustomerContextualPrice}\r\n \r\n \r\n ${AdjustedPrice}\r\n \r\n \r\n \r\n : \r\n ${basePrice}\r\n \r\n }\r\n
\r\n ) : null\r\n }\r\n {\r\n renderRating(\r\n context,\r\n \"mfrm-autosuggest\",\r\n uniqueId,\r\n AverageRatingOverall,\r\n AverageRatingCountOverall\r\n )\r\n }\r\n
\r\n
\r\n
\r\n );\r\n});\r\n\r\nexport default SearchResultProduct;\r\n","import React from 'react';\r\nimport SearchResultItem from '../search-result-item/search-result-item';\r\nimport SearchResultProduct from '../search-result-product/search-result-product';\r\nimport partialRight from 'lodash/partialRight';\r\n\r\nenum CategoryTitleHeader {\r\n 'Suggestions' = 'suggestions-category-header',\r\n 'Popular Searches' = 'suggestions-category-header',\r\n 'Recent Searches' = 'suggestions-category-header',\r\n}\r\n\r\nenum SearchSuggestionsProducts {\r\n 'Suggestions' = 'search-result__suggestions',\r\n 'Popular Searches' = 'search-result__suggestions',\r\n 'Recent Searches' = 'search-result__suggestions',\r\n}\r\nconst _renderItemsByType = (suggestions: any) => {\r\n const handleClick = (e: React.MouseEvent, suggestion: any) => {\r\n suggestions.onClickItem(suggestion);\r\n suggestions.setQuery(e, suggestion);\r\n };\r\n const handleKeyDown = (e: { key: string }, suggestion: any) => {\r\n if (e.key === 'Enter') {\r\n suggestions.onClickItem(suggestion);\r\n suggestions.setQuery(e, suggestion);\r\n }\r\n };\r\n if (suggestions && typeof suggestions?.data[0] === \"string\") {\r\n return suggestions.data.map((suggestion: string) => (\r\n \r\n

{suggestion}

\r\n \r\n ));\r\n }\r\n\r\n if (suggestions && suggestions.data[0]?.type === \"text\") {\r\n return suggestions.data.map(\r\n (textSuggestion: any) => (\r\n \r\n ));\r\n }\r\n if (suggestions.data && suggestions.data[0]?.type === \"product\") {\r\n return suggestions.data.map(\r\n (productSuggestion: any) => (\r\n \r\n ));\r\n }\r\n};\r\n\r\nconst SearchResultCategory = React.memo((props: any) => {\r\n const items = _renderItemsByType(props);\r\n return (\r\n
\r\n
\r\n {props.categoryTitle}\r\n
\r\n {\r\n props.data && props.data.length > 0 && items\r\n }\r\n
\r\n );\r\n});\r\n\r\nexport default SearchResultCategory;\r\n","import React from 'react';\r\nimport dayjs from 'dayjs';\r\n\r\nconst SociStoresItem = (props: any) => {\r\n const { address1, address2, city, _distance, name, project_meta, postalcode, state, website_url, bho } = props.location;\r\n const storeHours = JSON.parse(bho)?.[dayjs().day()];\r\n const opensAt = dayjs(`1/1/1 ${storeHours[0].slice(0, 2)}:${storeHours[0].slice(2)}`).format('hh:mm A');\r\n const closedAt = dayjs(`1/1/1 ${storeHours[1].slice(0, 2)}:${storeHours[1].slice(2)}`).format('hh:mm A');\r\n const isStoreOpen = (storeHours[0].slice(0, 2) < dayjs().hour() && storeHours[1].slice(0, 2) > dayjs().hour()) ? true : false;\r\n const isFranchise = JSON.parse(project_meta)?.Division === 'Franchise' || false;\r\n const projectMetaSoci = props.location ? JSON.parse(project_meta) : '';\r\n const sociStore = projectMetaSoci ? projectMetaSoci['Corporate ID'] : '';\r\n const sociStoreID = sociStore && (sociStore?.length > 6 ? sociStore : `000000${sociStore}`?.slice(-6)) || '';\r\n const isPreferredStore = props.preferredStore ? props.preferredStore === sociStoreID : false;\r\n\r\n const handleTealium = () => {\r\n // @ts-ignore\r\n if ('utag' in window) {\r\n const pageURL = window.location.pathname;\r\n // @ts-ignore\r\n utag.link({\r\n event_category: \"store locator slideout\",\r\n event_action: \"search bar zip store details click\",\r\n event_label: `from: ${pageURL}`,\r\n event_noninteraction: \"false\"\r\n });\r\n }\r\n };\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {name}\r\n {isFranchise ? Franchise : <>}\r\n
\r\n
\r\n {bho && {isStoreOpen ? `Open until ${closedAt}` : `Open at ${opensAt}`}}\r\n {_distance && {_distance} {props?.resources?.autoSuggestStoreMiles ?? 'mi'}}\r\n
\r\n
\r\n

{address1}

\r\n

{address2}

\r\n

{city}, {state}\r\n {postalcode}\r\n

\r\n
\r\n
\r\n {isPreferredStore && !isFranchise &&
{props?.resources?.autoSuggestMyStore ?? 'My Store'}
}\r\n handleTealium()} target='_blank'>{props?.resources?.autoSuggestStoreDetails ?? 'Store Details'}\r\n
\r\n
\r\n
\r\n );\r\n};\r\nexport default SociStoresItem;","import React from 'react';\r\nimport SociStoresItems from '../search-result-store-item';\r\n\r\nconst SociStoresComponent = React.memo((props: any) => {\r\n return (\r\n
\r\n
\r\n {props.resources?.autoSuggestStoreHeading ?? 'Stores'}\r\n
\r\n {props.data.map((location: any, i: number) => )}\r\n
\r\n\r\n );\r\n});\r\n\r\nexport default SociStoresComponent;","import Cookies from 'universal-cookie';\r\nimport { isEqual } from 'lodash';\r\nexport const updatePopularSearchesCookie = (textSuggestions: any): any => {\r\n const cookies = new Cookies();\r\n let finalSuggestions = textSuggestions;\r\n if (finalSuggestions?.length > 0) {\r\n if (!isEqual(finalSuggestions, cookies?.get('popularSearches'))) {\r\n const date = new Date();\r\n date.setDate(date.getDate() + 1);\r\n cookies.set(`popularSearches`, finalSuggestions, { path: '/', expires: date, secure: true });\r\n }\r\n return finalSuggestions;\r\n } else {\r\n finalSuggestions = cookies.get('popularSearches');\r\n return finalSuggestions;\r\n }\r\n};","import React from 'react';\r\nimport { getUrlSync } from '@msdyn365-commerce/core-internal';\r\nimport MsDyn365, { ICoreContext } from '@msdyn365-commerce/core';\r\nimport SearchResultCategory from '../search-result-category';\r\nimport partialRight from 'lodash/partialRight';\r\nimport SociStoresComponent from '../search-result-stores';\r\nimport { updatePopularSearchesCookie } from '../../../../Utilities/set-cookies';\r\n\r\nconst _getKeywordSuggestions = (suggestions: any, context: ICoreContext) =>\r\n\tsuggestions.response?.products?.length > 0 && suggestions.response?.products?.map((suggestion: any) => {\r\n\t\tconst params = MsDyn365.isBrowser && window.location;\r\n\t\tconst origin = params && params.origin === 'https://localhost:4000' ? params.origin : context.request.url.requestUrl.origin;\r\n\t\tif (suggestion.doctype === \"KEYWORD_SUGGESTION\" || suggestion.doctype === \"TOP_SEARCH_QUERIES\") {\r\n\t\t\tconst keywordSuggestion = {\r\n\t\t\t\tkeyword: suggestion['autosuggest'],\r\n\t\t\t\tproductName: suggestion['autosuggest'],\r\n\t\t\t\tbaseUrl: origin,\r\n\t\t\t\tdoctype: suggestion.doctype,\r\n\t\t\t\tbaseImgUrl: context.request.apiSettings.baseImageUrl,\r\n\t\t\t\ttype: \"text\"\r\n\t\t\t};\r\n\t\t\treturn keywordSuggestion;\r\n\t\t}\r\n\t\treturn null;\r\n\t}).filter((rec: any) => rec);\r\n\r\nconst _getProductSuggestions = (suggestions: any, context: ICoreContext) =>\r\n\tsuggestions.response?.products?.length > 0 && suggestions.response?.products?.map((suggestion: any) => {\r\n\t\tconst params = MsDyn365.isBrowser && window.location;\r\n\t\tconst origin = params && params.origin === 'https://localhost:4000' ? params.origin : context.request.url.requestUrl.origin;\r\n\t\tif (suggestion.doctype === \"POPULAR_PRODUCTS\") {\r\n\t\t\tconst productSuggestion = {\r\n\t\t\t\tkeyword: suggestion['autosuggest'],\r\n\t\t\t\tproductName: suggestion['ProductName'], // product name\r\n\t\t\t\tbaseUrl: origin,\r\n\t\t\t\timgUrl: suggestion[\"PrimaryImageUrl\"] ? suggestion[\"PrimaryImageUrl\"] : null,\r\n\t\t\t\tdoctype: suggestion.doctype,\r\n\t\t\t\tbaseImgUrl: context.request.apiSettings.baseImageUrl,\r\n\t\t\t\tAdjustedPrice: suggestion.lowest_variant_adjustedPrice,\r\n\t\t\t\tCustomerContextualPrice: suggestion.CustomerContextualPrice,\r\n\t\t\t\tbasePrice: suggestion.BasePrice,\r\n\t\t\t\tcontext: context,\r\n\t\t\t\tuniqueId: suggestion.uniqueId,\r\n\t\t\t\ttype: \"product\",\r\n\t\t\t\tAverageRatingOverall: suggestion.AverageRatingOverall,\r\n\t\t\t\tAverageRatingCountOverall: suggestion.AverageRatingCountOverall,\r\n\t\t\t\tdefaultVariantId: suggestion.Unbxd_DefaultVariantID,\r\n\t\t\t\trecordId: suggestion.RecordId,\r\n\t\t\t\tbrandName: suggestion[\"Attr_5637145355\"] || \"\", // brand name\r\n\t\t\t\tretailVariantId: suggestion?.Unbxd_DefaultVariantRetailVariantId ?? \"\"\r\n\t\t\t};\r\n\t\t\treturn productSuggestion;\r\n\t\t}\r\n\t\treturn null;\r\n\t}).filter((rec: any) => rec);\r\n\r\nconst SearchResultContainer = React.memo((props: any) => {\r\n\tconst { suggestedSociLocations, preferredStore } = props;\r\n\tlet textSuggestions = _getKeywordSuggestions(props.data, props.context) || [];\r\n\tif (props.isSearchBarEmpty) {\r\n\t\ttextSuggestions = updatePopularSearchesCookie(textSuggestions);\r\n\t}\r\n\tconst productSuggestions = _getProductSuggestions(props.data, props.context) || [];\r\n\tconst searchQsp = (\r\n\t\tprops.context && props.context.app\r\n\t\t&& props.context.app.config &&\r\n\t\tprops.context.app.config.searchQueryStringParameter\r\n\t) || '';\r\n\r\n\tconst keywordSearchPageURL = getUrlSync(\r\n\t\t'/search',\r\n\t\tprops.context && props.context.actionContext\r\n\t) || '';\r\n\treturn (\r\n\t\t
\r\n\t\t\t{(props.recentlySearched && props.recentlySearched.length > 0 || textSuggestions && textSuggestions.length > 0) ?
\r\n\t\t\t\t{\r\n\t\t\t\t\tprops.recentlySearched && props.recentlySearched.length > 0\r\n\t\t\t\t\t\t? \r\n\t\t\t\t\t\t: null\r\n\t\t\t\t}\r\n\t\t\t\t{\r\n\t\t\t\t\ttextSuggestions && textSuggestions.length > 0\r\n\t\t\t\t\t\t?\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t: null\r\n\t\t\t\t}\r\n\t\t\t
: null}\r\n\t\t\t{\r\n\t\t\t\tproductSuggestions && productSuggestions.length > 0\r\n\t\t\t\t\t? \r\n\t\t\t\t\t: null\r\n\t\t\t}\r\n\t\t\t{suggestedSociLocations && suggestedSociLocations.length > 0 && }\r\n\t\t\t{\r\n\t\t\t\tproductSuggestions.length === 0 && textSuggestions.length === 0 && suggestedSociLocations.length === 0\r\n\t\t\t\t\t?
No results found.
\r\n\t\t\t\t\t: null\r\n\t\t\t}\r\n\t\t
\r\n\t);\r\n});\r\n\r\nexport default SearchResultContainer;","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { /*ISearchCategoryViewProps, */ ISearchFormViewProps /*, ISearchKeywordViewProps, ISearchProductViewProps */ } from './components';\r\nimport { IMfrmAutosuggestViewProps } from './mfrm-autosuggest';\r\nimport SearchResultContainer from './components/search-result-container';\r\n\r\nconst SearchView: React.FC = props => {\r\n const {\r\n Search,\r\n AutoSuggestAriaLabel,\r\n AutoSuggestAriaLabelText,\r\n searchText,\r\n AutoSuggest,\r\n form,\r\n SearchForm,\r\n FormWrapper,\r\n suggestions,\r\n isFocused,\r\n handleCloseDialog,\r\n recentlySearched,\r\n setFormText,\r\n suggestedSociLocations,\r\n data: {\r\n storeSelectorState: { result: storeSelectorState }\r\n }\r\n } = props;\r\n const handleClickProduct = async (product: any) => {\r\n\r\n const obj = {\r\n event:'site_search',\r\n event_type: 'site_search',\r\n search_term: searchText,\r\n search_type: 'related-products-search',\r\n product_name: [`${product.productName}`],\r\n product_id: [`${product.uniqueId}`],\r\n product_variant_id: [`${product.retailVariantId}`]\r\n };\r\n\r\n // @ts-ignore\r\n utag.link(obj);\r\n\r\n var u_payload = {\r\n query: 'ProductName',\r\n autosuggestParams: {\r\n unbxdAttr: 'autosuggest',\r\n unbxdParam_autosuggestType: 'POPULAR_PRODUCTS',\r\n unbxdParam_pid: product.recordId,\r\n unbxdParam_autosuggestSuggestion: product.productName\r\n }\r\n };\r\n if (u_payload.hasOwnProperty('query')) {\r\n //@ts-ignore\r\n Unbxd.track('search', u_payload);\r\n }\r\n };\r\n\r\n const handleClickItem = (term: string, type: string) => {\r\n if (type === \"Popular Searches\") {\r\n var u_payload = {\r\n query: term,\r\n autosuggestParams: {\r\n unbxdAttr: \"autosuggest\",\r\n unbxdParam_autosuggestType: \"TOP_SEARCH_QUERIES\",\r\n unbxdParam_autosuggestSuggestion: term\r\n }\r\n };\r\n if (u_payload.hasOwnProperty('query')) {\r\n //@ts-ignore\r\n Unbxd.track('search', u_payload);\r\n }\r\n // @ts-ignore\r\n utag.link({\r\n event: 'site_search',\r\n event_type: \"site_search\",\r\n search_term: term,\r\n search_type: \"top-search-queries\"\r\n });\r\n }\r\n else if (type === \"Suggestions\") {\r\n var u_payload = {\r\n query: term,\r\n autosuggestParams: {\r\n unbxdAttr: \"autosuggest\",\r\n unbxdParam_autosuggestType: \"KEYWORD_SUGGESTION\",\r\n unbxdParam_autosuggestSuggestion: term\r\n }\r\n };\r\n\r\n if (u_payload.hasOwnProperty('query')) {\r\n\r\n // @ts-ignore\r\n utag.link({\r\n event: 'site_search',\r\n event_type: \"site_search\",\r\n search_term: term,\r\n search_type: \"keyword_suggestion\"\r\n });\r\n\r\n //@ts-ignore\r\n Unbxd.track('search', u_payload);\r\n }\r\n }\r\n };\r\n\r\n return (\r\n \r\n = 0) ? 'show' : 'hide'}`} />\r\n \r\n {_renderForm(form as ISearchFormViewProps, SearchForm, FormWrapper)}\r\n \r\n {(isFocused || searchText && searchText.length >= 0) && !onblur ? (\r\n \r\n {searchText && searchText.length > 0 ? {AutoSuggestAriaLabelText} : ''}\r\n \r\n
\r\n {\r\n searchText && searchText.length > 0\r\n ?
\r\n

Search for “{searchText}”?

\r\n
\r\n : null\r\n }\r\n {\r\n suggestions?.response\r\n && \r\n }\r\n
\r\n
\r\n ) : (\r\n <>\r\n )}\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nconst _renderForm = (form: ISearchFormViewProps, SearchForm: INodeProps, FormWrapper: INodeProps) => {\r\n return (\r\n \r\n \r\n {form.input}\r\n {form.cancelBtn}\r\n {form.submitBtn}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default SearchView;","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { buildCacheKey, QueryResultSettingsProxy } from '@msdyn365-commerce-modules/retail-actions';\r\nimport {\r\n CacheType,\r\n IActionInput,\r\n IAny,\r\n getCatalogId,\r\n ICommerceApiSettings,\r\n ICreateActionContext,\r\n IGeneric\r\n} from '@msdyn365-commerce/core';\r\n/* tslint:disable: no-duplicate-imports */\r\nimport { convertToString, IQueryResultSettings, ProductRefinerValue, SortColumn } from '@msdyn365-commerce/retail-proxy';\r\nimport { toJS } from 'mobx';\r\nimport { hydrateRefinersFromUrl } from './url-utils';\r\n\r\nexport type listPageType = 'Category' | 'Search' | 'Unknown';\r\n\r\n/**\r\n * Get include attributes from config.\r\n */\r\nfunction getIncludeAttributes(inputData: ICreateActionContext, IGeneric>): boolean {\r\n if (inputData &&\r\n inputData.config &&\r\n inputData.config.includeAttributes !== undefined &&\r\n inputData.config.includeAttributes === true) {\r\n return true;\r\n }\r\n return false;\r\n}\r\n/**\r\n * Get updateRefinerPanel from config.\r\n * @param inputData - ICreateActionContext.\r\n * @returns Boolean.\r\n */\r\nfunction getUpdateRefinerPanel(inputData: ICreateActionContext, IGeneric>): boolean {\r\n return !!inputData.config?.updateRefinerPanel;\r\n}\r\n/**\r\n * BaseCollection Action Input\r\n */\r\nexport class BaseCollectionInput implements IActionInput {\r\n public pageType: listPageType;\r\n public category: number | undefined;\r\n public searchText: string | undefined;\r\n public refiners: ProductRefinerValue[];\r\n public queryResultSettings: IQueryResultSettings;\r\n public apiSettings: ICommerceApiSettings;\r\n public includeAttributes: boolean | undefined;\r\n public locale?: string;\r\n // VSI Customization 7924 Start\r\n public urlPathName?: string;\r\n // VSI Customization 7924 End\r\n public isSizeRefinerAndCategory?: boolean | undefined;\r\n public isUpdateRefinerPanel?: boolean | undefined;\r\n public catalogId?: number | undefined;\r\n constructor(\r\n pageType: listPageType,\r\n apiSettings: ICommerceApiSettings,\r\n queryResultSettings: IQueryResultSettings,\r\n refiners: ProductRefinerValue[],\r\n category: number | undefined,\r\n searchText: string | undefined,\r\n includeAttributes: boolean | undefined,\r\n locale?: string,\r\n // VSI Customization 7924 Start\r\n urlPathName?: string,\r\n // VSI Customization 7924 End\r\n isSizeRefinerAndCategory?: boolean | undefined,\r\n isUpdateRefinerPanel?: boolean | undefined,\r\n catalogId?: number | undefined\r\n ) {\r\n this.pageType = pageType;\r\n this.apiSettings = apiSettings;\r\n this.category = category;\r\n this.searchText = searchText;\r\n this.queryResultSettings = queryResultSettings;\r\n this.refiners = refiners;\r\n this.includeAttributes = includeAttributes;\r\n this.locale = locale;\r\n // VSI Customization 7924 Start\r\n this.urlPathName = urlPathName;\r\n // VSI Customization 7924 End\r\n this.isSizeRefinerAndCategory = isSizeRefinerAndCategory;\r\n this.isUpdateRefinerPanel = isUpdateRefinerPanel;\r\n this.catalogId = catalogId ?? 0;\r\n if (this.refiners && this.refiners.length > 0) {\r\n this.refiners[0].ExtensionProperties = [\r\n {\r\n Key: 'ISREQUESTOVERRIDE',\r\n Value: {\r\n BooleanValue: (!isSizeRefinerAndCategory || isSizeRefinerAndCategory === undefined ? false : true),\r\n ByteValue: undefined,\r\n DateTimeOffsetValue: undefined,\r\n DecimalValue: undefined,\r\n IntegerValue: undefined,\r\n LongValue: undefined,\r\n StringValue: undefined\r\n }\r\n }\r\n ];\r\n }\r\n }\r\n public getCacheKey = () => {\r\n const queryResultSettings = {\r\n ...this.queryResultSettings.Paging,\r\n ...toJS(this.queryResultSettings.Sorting)\r\n };\r\n\r\n return buildCacheKey(\r\n `${this.pageType}-${this.locale}-${this.category || this.searchText}-${this.refiners.map(refiner => `${refiner.RefinerRecordId}${refiner.LeftValueBoundString || ''}${refiner.RightValueBoundString || ''}-`)}-${convertToString(queryResultSettings)}-${this.urlPathName}`,\r\n this.apiSettings, this.locale\r\n );\r\n };\r\n\r\n public getCacheObjectType = () => 'CollectionActionResult';\r\n public dataCacheType = (): CacheType => 'application';\r\n}\r\n\r\n\r\n// Create a data model here or import one to capture the response of the action\r\nexport interface IGetFullProductsByCollectionData {\r\n text: string;\r\n}\r\n\r\nexport type CollectionClassConstructor = new (\r\n pageType: listPageType,\r\n apiSettings: ICommerceApiSettings,\r\n queryResultSettings: IQueryResultSettings,\r\n refiners: ProductRefinerValue[],\r\n category: number | undefined,\r\n searchText: string | undefined,\r\n includeAttributes: boolean | undefined,\r\n locale?: string,\r\n // VSI Customization 7924 Start\r\n urlPathName?: string,\r\n // VSI Customization 7924 End\r\n isSizeRefinerAndCategory?: boolean | undefined,\r\n isUpdateRefinerPanel?: boolean | undefined,\r\n catalogId?: number | undefined,\r\n\r\n) => BaseCollectionInput;\r\n\r\n/**\r\n * Use this function to create the input required to make the action call\r\n */\r\nexport const createBaseCollectionInput = (\r\n args: ICreateActionContext,\r\n inputClassConstuctor: CollectionClassConstructor\r\n): BaseCollectionInput => {\r\n const pageType =\r\n args.requestContext.urlTokens.pageType === 'Category' || (args.requestContext.query && args.requestContext.query.categoryId)\r\n ? 'Category'\r\n : 'Search';\r\n\r\n const queryResultSettings = QueryResultSettingsProxy.fromInputData(args).QueryResultSettings;\r\n const queryRefiners = hydrateRefinersFromUrl(args.requestContext);\r\n const includeAttributes = getIncludeAttributes(args);\r\n // VSI Customization 7924 Start\r\n const pathName = args.requestContext.url.requestUrl.pathname;\r\n // VSI Customization 7924 End\r\n\r\n const isUpdateRefinerPanel = getUpdateRefinerPanel(args);\r\n const catalogId = getCatalogId(args.requestContext);\r\n\r\n if (args.requestContext.query && args.requestContext.query.sorting) {\r\n queryResultSettings.Sorting = { Columns: JSON.parse(decodeURIComponent(args.requestContext.query.sorting)) };\r\n }\r\n\r\n if (pageType === 'Category') {\r\n return new inputClassConstuctor(\r\n pageType,\r\n args.requestContext.apiSettings,\r\n queryResultSettings,\r\n queryRefiners,\r\n +(args.requestContext.urlTokens.itemId || (args.requestContext.query && args.requestContext.query.categoryId) || 0),\r\n undefined,\r\n includeAttributes,\r\n args.requestContext.locale,\r\n pathName, undefined, isUpdateRefinerPanel, catalogId\r\n );\r\n } else if (pageType === 'Search' && args.requestContext.query && args.requestContext.query.q) {\r\n return new inputClassConstuctor(\r\n pageType,\r\n args.requestContext.apiSettings,\r\n queryResultSettings,\r\n queryRefiners,\r\n undefined,\r\n args.requestContext.query.q,\r\n includeAttributes,\r\n args.requestContext.locale, undefined, undefined, isUpdateRefinerPanel, catalogId\r\n );\r\n } else if (pageType === 'Search' && args.requestContext.query && args.requestContext.query.productId) {\r\n return new inputClassConstuctor(\r\n pageType,\r\n args.requestContext.apiSettings,\r\n queryResultSettings,\r\n queryRefiners,\r\n undefined,\r\n args.requestContext.query.productId,\r\n includeAttributes,\r\n args.requestContext.locale, undefined, undefined, isUpdateRefinerPanel, catalogId\r\n );\r\n }\r\n\r\n throw new Error('[getFullProductsForCollection]Unable to create input');\r\n};","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n/* tslint:disable: no-duplicate-imports */\r\nimport MsDyn365, { IRequestContext } from '@msdyn365-commerce/core';\r\nimport { ProductRefinerValue, SortColumn } from '@msdyn365-commerce/retail-proxy';\r\n\r\n/**\r\n * Refiner Compression:\r\n * Refiners contains a non-trivial amount of data that is required to successfully make\r\n * a refiner-based API call. To allow for deep-linking of refiners in the URL, refiner data\r\n * must be compressed so that URL max length is not exceeded. Refiners will be compressed into\r\n * the following array style index-based format:\r\n * [DataTypeValue, LeftValueBoundString, RefinerRecordId, RefinerSourceValue, RightValueBoundString, UnitText]\r\n */\r\nconst compressedRefinerKeys = ['DataTypeValue', 'LeftValueBoundString', 'RefinerRecordId', 'RefinerSourceValue', 'RightValueBoundString', 'UnitText'];\r\n\r\n/**\r\n * Hydrates compressed refiner data from URL\r\n * @param fullUrl The full URL of the page\r\n */\r\nexport const hydrateRefinersFromUrl = (requestContext: IRequestContext): ProductRefinerValue[] => {\r\n const compressedRefinerArray = parseQueryParam<(string | number)[][]>('refiners', requestContext);\r\n if (!compressedRefinerArray || !compressedRefinerArray.length) {\r\n return [];\r\n }\r\n\r\n return compressedRefinerArray.map((compressedRefiner) => {\r\n try {\r\n const parsedRefiner: ProductRefinerValue = {};\r\n compressedRefinerKeys.forEach((refinerKey, index) => {\r\n // @ts-ignore: This line is intentionally not typesafe\r\n parsedRefiner[refinerKey] = compressedRefiner[index];\r\n });\r\n return parsedRefiner;\r\n } catch(e) {\r\n return undefined;\r\n }\r\n }).filter(Boolean);\r\n};\r\n\r\n/**\r\n * Compressed a list of refiners for use in URLs\r\n * @param refiners The uncompressed refiners\r\n */\r\nexport const compressRefiners = (refiners: ProductRefinerValue[]) => {\r\n const compressedRefiners: (string | number)[][] = [];\r\n\r\n refiners.forEach((refiner) => {\r\n const compressedRefiner: (string | number)[] = [];\r\n compressedRefinerKeys.forEach((refinerKey) => {\r\n // @ts-ignore: This line is intentionally not typesafe\r\n compressedRefiner.push(refiner[refinerKey]);\r\n });\r\n compressedRefiners.push(compressedRefiner);\r\n });\r\n\r\n return compressedRefiners;\r\n};\r\n\r\n/**\r\n * Method which creates a URL contiaining serialized active refiners\r\n * @param fullUrl The Current URL of the page\r\n * @param refiners The refiners which should be added to the URL\r\n */\r\nexport const buildListPageUrl = (fullUrl: URL, refiners?: ProductRefinerValue[], sortingColumns?: SortColumn[], skipCount?: number) => {\r\n // Refiner Change flow\r\n if (refiners !== undefined) {\r\n if (!refiners.length) {\r\n fullUrl.searchParams.delete('refiners');\r\n } else {\r\n fullUrl.searchParams.set('refiners', JSON.stringify(compressRefiners(refiners)));\r\n }\r\n\r\n // Adding or removing a refiner means we want to always load page 1\r\n fullUrl.searchParams.delete('skip');\r\n return fullUrl.href;\r\n }\r\n\r\n if (sortingColumns !== undefined) {\r\n if(!sortingColumns.length) {\r\n fullUrl.searchParams.delete('sorting');\r\n } else {\r\n fullUrl.searchParams.set('sorting', JSON.stringify(sortingColumns));\r\n }\r\n\r\n // Changing the sort means always load page 1\r\n fullUrl.searchParams.delete('skip');\r\n return fullUrl.href;\r\n }\r\n\r\n if (skipCount) {\r\n fullUrl.searchParams.set('skip', skipCount.toString());\r\n }\r\n\r\n return fullUrl.href;\r\n};\r\n\r\n/**\r\n * Parses a query param from the query object of the request context\r\n * @param key The query parameter key\r\n * @param requestContext The request context\r\n */\r\nexport const parseQueryParam = (key: string, requestContext: IRequestContext): T | null => {\r\n if(requestContext.query && requestContext.query[key]) {\r\n return JSON.parse(decodeURIComponent(requestContext.query[key]));\r\n }\r\n return null;\r\n};\r\n\r\n/**\r\n * Gets the current URL of the page from the request context\r\n * @param requestContext The request context\r\n */\r\nexport const getCurrentUrl = (requestContext: IRequestContext): URL => {\r\n if(MsDyn365.isBrowser) {\r\n return new URL(window.location.href);\r\n } else {\r\n // NOTE: Typing on requestURL is incorrect\r\n if (requestContext.url.requestUrl.href) {\r\n return new URL(requestContext.url.requestUrl.href);\r\n } else {\r\n return new URL((requestContext.url.requestUrl));\r\n }\r\n }\r\n};\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\n/* tslint:disable: no-duplicate-imports */\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { generateProductImageUrl } from '@msdyn365-commerce-modules/retail-actions';\r\nimport {\r\n createObservableDataAction,\r\n IAction,\r\n IActionContext,\r\n IActionInput,\r\n ICreateActionContext\r\n} from '@msdyn365-commerce/core';\r\nimport { ProductSearchCriteria, ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\r\nimport { searchByCriteriaAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\r\nimport {\r\n BaseCollectionInput,\r\n createBaseCollectionInput\r\n} from '../../mfrm-search-result-container/actions/base-collection-action';\r\nimport { IFullProductsSearchResultsWithCount } from './IFullProductsSearchResultsWithCount';\r\n\r\n/**\r\n * GetFullProductsByCollection Action Input\r\n */\r\nexport class GetFullProductsBySearchInput extends BaseCollectionInput implements IActionInput {\r\n public getCacheObjectType = () => 'FullProductSearchResultBySearch';\r\n public dataCacheType = (): Msdyn365.CacheType => 'application';\r\n}\r\n\r\n/**\r\n * createInput function which creates and actionInput used to fetch products for a list page.\r\n */\r\nconst createInput = (args: ICreateActionContext<{ itemsPerPage: number; includedAttributes: boolean | undefined }>): IActionInput => {\r\n const input = createBaseCollectionInput(args, GetFullProductsBySearchInput);\r\n\r\n // Set Top\r\n if (input.queryResultSettings.Paging && args.config) {\r\n input.queryResultSettings.Paging.Top = args.config.itemsPerPage || 1;\r\n }\r\n\r\n // Set Skip\r\n if (input.queryResultSettings.Paging && args.requestContext.query && args.requestContext.query.skip) {\r\n input.queryResultSettings.Paging.Skip = +args.requestContext.query.skip;\r\n }\r\n\r\n input.queryResultSettings.count = true;\r\n\r\n return input;\r\n};\r\n\r\n/**\r\n * Action function to fetch products for a list page\r\n */\r\n// tslint:disable-next-line: max-func-body-length cyclomatic-complexity\r\nasync function action(\r\n input: GetFullProductsBySearchInput,\r\n ctx: IActionContext\r\n): Promise {\r\n // let promise: AsyncResult;\r\n // let searchProductId;\r\n const searchCriteriaInput: ProductSearchCriteria = {};\r\n searchCriteriaInput.Context = { ChannelId: ctx.requestContext.apiSettings.channelId, CatalogId: ctx.requestContext.apiSettings.catalogId };\r\n searchCriteriaInput.Refinement = [];\r\n searchCriteriaInput.IncludeAttributes = false;\r\n searchCriteriaInput.SkipVariantExpansion = true;\r\n\r\n searchCriteriaInput.SearchCondition = input.searchText;\r\n const promise = searchByCriteriaAsync(\r\n {\r\n callerContext: ctx,\r\n queryResultSettings: input.queryResultSettings\r\n },\r\n searchCriteriaInput\r\n );\r\n\r\n const productSearchResults : ProductSearchResult[] = await promise;\r\n\r\n const mappedProducts = productSearchResults.map(productSearchResult => {\r\n const newImageUrl = generateProductImageUrl(\r\n productSearchResult,\r\n ctx.requestContext.apiSettings\r\n );\r\n\r\n if (newImageUrl) {\r\n productSearchResult.PrimaryImageUrl = newImageUrl;\r\n }\r\n\r\n return (productSearchResult);\r\n });\r\n\r\n\r\n return {\r\n products: mappedProducts,\r\n count: promise.metadata.count || 0,\r\n // VSI Customization 7294 Start\r\n virtualRefiners: searchCriteriaInput.Refinement,\r\n minusVirtualRefiner: input.refiners\r\n // VSI Customization 7294 End\r\n };\r\n}\r\n\r\nexport default createObservableDataAction({\r\n id: '@msdyn365-commerce-modules/search/get-full-products-by-search',\r\n action: >action,\r\n input: createInput\r\n});\r\n","const binding = { modules: {}, dataActions: {} };\n\n const registerActionId = (actionPath) => {\n if (binding.dataActions[actionPath] &&\n binding.dataActions[actionPath].default &&\n binding.dataActions[actionPath].default.prototype &&\n binding.dataActions[actionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[actionPath].default.prototype.id] = binding.dataActions[actionPath];\n } else {\n Object.keys(binding.dataActions[actionPath] || {}).forEach(exportName => {\n if (binding.dataActions[actionPath][exportName] &&\n binding.dataActions[actionPath][exportName].prototype &&\n binding.dataActions[actionPath][exportName].prototype.Action) {\n binding.dataActions[binding.dataActions[actionPath][exportName].prototype.id] = binding.dataActions[actionPath][exportName];\n }\n })\n }\n };\n\n const registerSanitizedActionPath = (sanitizedActionPath, dataAction) => {\n if (process.env.NODE_ENV === 'development') {\n if (!dataAction.default) {\n throw new Error('Data action path does not have a default export');\n }\n if (!(dataAction.default.prototype.id && binding.dataActions[dataAction.default.prototype.id]) || !binding.dataActions[sanitizedActionPath]) {\n binding.dataActions[sanitizedActionPath] = dataAction;\n }\n } else {\n binding.dataActions[sanitizedActionPath] = dataAction;\n if (!binding.dataActions[sanitizedActionPath].default) {\n throw new Error('Data action path ' + sanitizedActionPath + ' does not have a default export');\n }\n binding.dataActions[sanitizedActionPath].default.prototype.RegistrationId = sanitizedActionPath;\n if (binding.dataActions[sanitizedActionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[sanitizedActionPath].default.prototype.id] = sanitizedActionPath;\n }\n }\n };\n \n\n (binding.modules['mfrm-autosuggest'] = {\n c: () => require('partner/modules/mfrm-autosuggest/mfrm-autosuggest.tsx'),\n $type: 'contentModule',\n da: [{name:'searchState', path:'@msdyn365-commerce-modules/search-utilities/dist/lib/search-state-data-action', runOn: 1},{name:'storeSelectorState', path:'data-actions/store-selector-state-data-action', runOn: 0}],\n \n iNM: false,\n ns: '__local__',\n n: 'mfrm-autosuggest',\n p: '__local__',\n \n pdp: '',\n \n \n md: 'src/modules/mfrm-autosuggest'\n });\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/search-utilities/dist/lib/search-state-data-action';\n let dataAction = require('@msdyn365-commerce-modules/search-utilities/dist/lib/search-state-data-action');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = 'data-actions/store-selector-state-data-action';\n let dataAction = require('partner/data-actions/store-selector-state-data-action');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n \n window.__bindings__ = window.__bindings__ || {};\n window.__bindings__.modules = {\n ...window.__bindings__.modules || {},\n ...binding.modules\n };\n \n window.__bindings__.dataActions = {\n ...window.__bindings__.dataActions || {},\n ...binding.dataActions\n };\n export const viewDictionary = {};\n viewDictionary['__local__|__local__|modules|mfrm-autosuggest|mfrm-autosuggest'] = {\n c: () => require('partner/modules/mfrm-autosuggest/mfrm-autosuggest.view.tsx'),\n cn: '__local__-__local__-mfrm-autosuggest'\n };\nwindow.__bindings__ = window.__bindings__ || {};\nwindow.__bindings__.viewDictionary = {\n ...window.__bindings__.viewDictionary || {},\n ...viewDictionary\n };","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { observable } from 'mobx';\n\n/**\n * State information related to what is needed to succesfully perform a autosuggest.\n */\nexport class SearchState {\n @observable public searchText?: string;\n\n @observable public defaultBasicSearchUrl?: string;\n\n @observable public searchQueryStringParameter?: string;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { createObservableDataAction, IAction, IActionInput, IAny, ICreateActionContext, IGeneric } from '@msdyn365-commerce/core';\nimport { GenericInput, getGenericAction } from '@msdyn365-commerce-modules/retail-actions';\n\nimport { SearchState } from './search-state';\n\nexport function createSearchStateInput(result: SearchState): GenericInput {\n return new GenericInput('searchState', result, 'SearchState');\n}\n\nconst createsearchStateInputInternal = (inputData: ICreateActionContext>): IActionInput => {\n return createSearchStateInput({ searchText: '' });\n};\n\nexport const getGenericActionDataAction = createObservableDataAction({\n action: >getGenericAction,\n input: createsearchStateInputInternal\n});\n\nexport default getGenericActionDataAction;\n","module.exports = React;","module.exports = ReactDOM;"],"names":["emailRegex","emailValue","test","removeSpecialChars","str","ctx","_ctx$request$app","request","app","config","removeSpecialCharsPDP","replace","removeSpecialCharsFromURLPath","_ctx$request$app2","_decodeURIComponent","decodeURIComponent","split","customerInfoPhoneRegex","inputRegexObj","nameRegex","addressInputRegex","phoneNumerRegex","cartDeliveryMsgRegex","getZipCode","_ctx$requestContext$g","_ctx$requestContext$g2","geolocationZipCode","requestContext","geoLocation","zipCode","res","cookie","Cookies","zipcode","get","undefined","getGeoLocationZipCode","_ctx$requestContext$g3","_ctx$requestContext$g4","GetSociDataInput","constructor","searchradius","searchLimit","getCacheKey","this","getCacheObjectType","dataCacheType","Msdyn365","action","async","input","_input$searchLimit","_input$searchradius$t","_input$searchradius","geoLoc","response","axios","toString","headers","data","e","console","log","id","args","_args$config","_args$config$maxNoOfF","_args$config2","lookupRadius","maxNoOfFranchise","StoreSelectorStateInput","storeSelectorStateAction","isModalOpen","prefferedStore","MsDyn365","isBrowser","localStorage","getItem","JSON","parse","createObservableDataAction","inputData","GetUnbxdSearchAutoSuggestDataInput","queryText","popularProducts","inFields","topQueries","keywordSuggestions","promotedSuggestion","unbxdUid","popularProductsCount","inFieldsCount","topQueriesCount","keywordSuggestionsCount","promotedSuggestionCount","unbxdApiKey","unbxdSiteKey","unbxdUrl","FormComponent","props","searchQsp","searchPlaceholder","hideSearchLabel","searchTextInput","handleInputChange","maxChars","disableSubmitSearch","handleCancelSearchChange","query","ariaLabelCancel","ariaLabelSearch","ariaLabelSubmit","handleFocused","onSubmit","isParentCustomModule","iconURL","onInputChange","event","target","value","onInputChangeFunction","handleKeyDown","key","preventDefault","element","document","getElementById","click","inputNode","React","className","type","name","placeholder","ref","onChange","onFocus","onKeyDown","maxLength","submitBtnNode","Button","onClick","tabIndex","src","alt","width","height","cancelBtn","submitBtn","MfrmAutosuggest","super","waitTime","cookies","recentlySearched","buildLink","searchTerm","context","params","window","location","origin","url","requestUrl","searchQueryStringParameter","getUrlSync","actionContext","join","_isLoadingNode","loadingText","resources","autoSuggestResultLoadingMessage","Spinner","label","size","SpinnerSize","medium","labelPosition","_focusOutTarget","closest","_clearAutoSuggestState","_keyup","suggestions","state","AllSearchResults","keyCode","KeyCodes","Escape","isSearchFormExpanded","setState","formReference","current","contains","autoSuggestResultDiv","searchText","length","searchState","defaultBasicSearchUrl","update","createSearchStateInput","body","classList","remove","isFocused","searchRefiners","sociLocationsList","add","handleCloseDialog","_handleInputChange","cancellabelDebounce","_debounce","isLoadingAutoSuggest","_getSearchSuggestionsData","popularProductCount","inFieldCount","keyWordSuggestionCount","_getSociStore","setTimeout","cancel","_handleSubmit","eventType","selectedQuery","focus","utag","link","event_type","search_term","search_type","_setRecentSearches","searchURL","_appendQueryParams","redirectUrl","_handleUnbxdRedirect","_ref","href","wmapPageUrlSuffix","GetFullProductsBySearchInput","apiSettings","Paging","Top","Skip","count","Sorting","urlTokens","itemId","locale","pathname","_productResults$produ","_extProperties$find","productResults","getSearchProducts","extProperties","products","ExtensionProperties","redirectUrlValue","find","obj","Key","Value","StringValue","inserted","recentlySearches","push","set","path","_recentlySearches","map","item","index","_recentlySearches2","_ref2","splice","concat","_recentlySearches3","_ref3","_ref4","_handleCancelSearchChange","isInitialState","route","qsp","queryUrl","URL","searchParams","topQueryCount","keywordCount","promoCount","getUnbxdSearchAutoSuggestData","then","catch","error","Error","_sortSociLocations","stores","_localStorage","preferredStore","parsedPreferredStore","selectedStoreIndex","findIndex","store","selectedStore","unshift","Set","maxNoOfSociLocations","getSociData","sociAvailableStores","collection","filter","opening_status","sortedLocations","searchCollapsedLabel","autoSuggestResultScreenReaderDiv","autoSuggestAriaLabel","searchInputMaxLength","searchFormClass","setFormText","bind","addEventListener","componentWillUnmount","removeEventListener","isEditor","shouldComponentUpdate","nextProps","nextState","render","_suggestions$response","cancelBtnAriaLabel","searchBtnAriaLabel","submitBtnAriaLabel","searchplaceholderText","classSearchModal","numberOfProducts","viewProps","_objectSpread","Search","moduleProps","classnames","AutoSuggestAriaLabel","tag","AutoSuggestAriaLabelText","AutoSuggest","SearchForm","FormWrapper","role","autoComplete","form","callbacks","isLoadingNode","suggestedSociLocations","handleUnbxdRedirect","renderView","productName","baseUrl","basePrice","AdjustedPrice","CustomerContextualPrice","uniqueId","AverageRatingOverall","AverageRatingCountOverall","recordId","defaultVariantId","emptyPlaceHolderImage","placeholderImageName","fallbackImage","getFallbackImageUrl","buildURL","toLowerCase","Image","baseImgUrl","imgUrl","fallBackSrc","gridSettings","bypassHideOnFailure","brandName","renderRating","typeName","avgRating","totalRatings","numRatings","RatingComponent","Math","round","ratingCount","readOnly","ariaLabel","_buildImageUrl","CategoryTitleHeader","SearchSuggestionsProducts","_SearchSuggestionsPro","_CategoryTitleHeader$","items","_suggestions$data$","_suggestions$data$2","handleClick","suggestion","onClickItem","setQuery","partialRight","textSuggestion","SearchResultItem","searchPageUrl","productSuggestion","SearchResultProduct","onClickProduct","_renderItemsByType","categoryTitle","_JSON$parse","_JSON$parse2","_props$resources$auto","_props$resources","_props$resources$auto2","_props$resources2","_props$resources$auto3","_props$resources3","address1","address2","city","_distance","project_meta","postalcode","website_url","bho","storeHours","dayjs","day","opensAt","slice","format","closedAt","isStoreOpen","hour","isFranchise","Division","projectMetaSoci","sociStore","sociStoreID","isPreferredStore","autoSuggestStoreMiles","autoSuggestMyStore","handleTealium","pageURL","event_category","event_action","event_label","event_noninteraction","autoSuggestStoreDetails","autoSuggestStoreHeading","i","SociStoresItems","textSuggestions","_suggestions$response2","doctype","keyword","baseImageUrl","rec","_getKeywordSuggestions","isSearchBarEmpty","_finalSuggestions","finalSuggestions","_isEqual","date","Date","setDate","getDate","expires","secure","updatePopularSearchesCookie","productSuggestions","_getProductSuggestions","_suggestions$response3","_suggestions$response4","_suggestion$Unbxd_Def","lowest_variant_adjustedPrice","BasePrice","Unbxd_DefaultVariantID","RecordId","retailVariantId","Unbxd_DefaultVariantRetailVariantId","keywordSearchPageURL","SearchResultCategory","queryParams","SociStoresComponent","StoreId","_renderForm","Node","Object","assign","storeSelectorState","result","Module","onblur","SearchResultContainer","product_name","product","product_id","product_variant_id","u_payload","autosuggestParams","unbxdAttr","unbxdParam_autosuggestType","unbxdParam_pid","unbxdParam_autosuggestSuggestion","hasOwnProperty","Unbxd","track","handleClickItem","term","sociPreferredStore","BaseCollectionInput","pageType","queryResultSettings","refiners","category","includeAttributes","urlPathName","isSizeRefinerAndCategory","isUpdateRefinerPanel","catalogId","toJS","buildCacheKey","refiner","RefinerRecordId","LeftValueBoundString","RightValueBoundString","convertToString","BooleanValue","ByteValue","DateTimeOffsetValue","DecimalValue","IntegerValue","LongValue","createBaseCollectionInput","inputClassConstuctor","categoryId","QueryResultSettingsProxy","fromInputData","QueryResultSettings","queryRefiners","hydrateRefinersFromUrl","pathName","_inputData$config","updateRefinerPanel","getUpdateRefinerPanel","getCatalogId","sorting","Columns","q","productId","compressedRefinerKeys","compressedRefinerArray","parseQueryParam","compressedRefiner","parsedRefiner","forEach","refinerKey","Boolean","buildListPageUrl","fullUrl","sortingColumns","skipCount","stringify","compressedRefiners","compressRefiners","delete","getCurrentUrl","searchCriteriaInput","Context","ChannelId","channelId","CatalogId","Refinement","IncludeAttributes","SkipVariantExpansion","SearchCondition","promise","searchByCriteriaAsync","callerContext","productSearchResult","newImageUrl","generateProductImageUrl","PrimaryImageUrl","metadata","virtualRefiners","minusVirtualRefiner","itemsPerPage","skip","binding","modules","dataActions","registerSanitizedActionPath","sanitizedActionPath","dataAction","default","prototype","RegistrationId","c","require","$type","da","runOn","iNM","ns","n","p","pdp","md","__bindings__","viewDictionary","cn","SearchState","__decorate","observable","GenericInput","getGenericActionDataAction","getGenericAction","module","exports","ReactDOM"],"sourceRoot":""}