{"version":3,"file":"static/js/ce8fafcea0dab834fe7c.bundle.js","mappings":";yNA6BO,MAAMA,EAAiBC,IAC1B,MAAM,UACFC,EAAS,kBACTC,EAAiB,gBACjBC,EAAe,gBACfC,EAAe,SACfC,EAAQ,oBACRC,EAAmB,gBACnBC,EAAe,gBACfC,EAAe,gBACfC,GACAT,EAEEU,EAAaP,EAWfQ,EAAAA,cAAA,SACIC,UAAU,0BACVC,KAAK,OAAM,aACCL,EACZM,KAAMb,EACNc,YAAab,EACbc,IAAKZ,IAhBTO,EAAAA,cAAA,SACIC,UAAU,0BACVC,KAAK,OAAM,aACCL,EACZM,KAAMb,EACNc,YAAab,EACbc,IAAKZ,EACLa,UAAWZ,IAaba,GAAiBZ,GAAuBK,EAAAA,cAACQ,EAAAA,OAAM,CAACP,UAAU,+BAA8B,aAAaH,IAU3G,MAAO,CAAEW,MAAOV,EAAWW,UAPvBV,EAAAA,cAACQ,EAAAA,OAAM,CACHP,UAAYN,EAAuD,uCAAjC,+BAAuE,aAC7FC,EACZM,KAAK,WAIwCS,UAAWJ,SCtD7D,MAAMK,EAAkBvB,IAC3B,MAAM,iBACFwB,EAAgB,sBAChBC,EAAqB,qBACrBC,EAAoB,WACpBC,EAAU,qBACVC,EAAoB,gBACpBzB,EAAe,iBACf0B,GACA7B,EACE8B,GAAUC,EAAAA,EAAAA,kBAAiB,QAASF,EAAkBF,EAAY,IAClEK,GAAaC,EAAAA,EAAAA,wBAAuBJ,EAAkBC,GAE5D,OACInB,EAAAA,cAAA,OAAKC,UAAWY,GACZb,EAAAA,cAACQ,EAAAA,OAAMe,OAAAC,OAAA,CACHvB,UAAU,kBAAiB,gBACZc,EAAoB,aACvBD,EACZW,SAAUR,GACNI,IAEF7B,GACEQ,EAAAA,cAAA,QAAMC,UAAU,uBAAsB,kBACjCe,2kBCqBzB,MAAMU,UAAe1B,EAAAA,UAsBjB2B,YAAmBtC,GACfuC,MAAMvC,GA8GO,KAAAwC,mBAAqB,CAACC,EAAeC,EAAeC,KACjE,IAAKC,EAAAA,QAASC,UACV,MAAO,GAGX,MAAMC,EAAW,IAAIC,IAAIN,EAAOO,OAAOC,SAASC,MAKhD,OAJIP,GAAOD,GACPI,EAASK,aAAaC,IAAIT,EAAKD,GAG5BI,EAASI,MAvHhBG,KAAKjD,gBAAkBO,EAAAA,YACvB0C,KAAKzB,qBAAuBjB,EAAAA,YAC5B0C,KAAKC,iCAAmC3C,EAAAA,YACxC0C,KAAKE,qBAAuB5C,EAAAA,YAC5B0C,KAAKG,cAAgB7C,EAAAA,YACrB0C,KAAKI,MAAQ,CACT/B,sBAAsB,EACtBgC,WAAY,GACZC,0BAA2B,kCAC3BC,0BAA2B,kCAC3BC,2BAA4B,mCAC5BC,iBAAaC,EACbC,oBAAgBD,EAChBE,qBAAsB,GACtBC,gBAAgB,EAChBC,sBAAsB,GAE1Bd,KAAKhD,SACAgD,KAAKrD,MAAMoE,SACRf,KAAKrD,MAAMoE,QAAQC,KACnBhB,KAAKrD,MAAMoE,QAAQC,IAAIC,QACvBjB,KAAKrD,MAAMoE,QAAQC,IAAIC,OAAOC,sBAClC,GAEJlB,KAAKmB,gBAAkB,kBACvBnB,KAAK7B,iBAAmB,mBACxB6B,KAAKxB,kBAAmB4C,EAAAA,EAAAA,oBACpBpB,KAAKrD,MAAMoE,QAAQM,QAAQC,kBAC3BtB,KAAKrD,MAAM4E,aACXvB,KAAKrD,MAAM6E,WAKZC,SACH,MAAM,QACFV,EACAW,WAAW,WAAEpD,EAAU,sBAAEF,EAAqB,mBAAEuD,EAAkB,mBAAEC,EAAkB,mBAAEC,GACxFZ,QAAQ,gBAAEnE,EAAe,oBAAEG,EAAmB,sBAAE6E,EAAqB,UAAEvE,EAAY,GAAE,mBAAEwE,EAAkB,oBAAEC,IAC3GhC,KAAKrD,OAEH,qBAAE0B,EAAoB,WAAEgC,GAAeL,KAAKI,MAE5CxD,EAAamE,GAAWA,EAAQC,KAAOD,EAAQC,IAAIC,QAAUF,EAAQC,IAAIC,OAAOgB,4BAA+B,IAC/GC,GAAgBC,EAAAA,EAAAA,IAAW,SAAUpB,GAAWA,EAAQqB,gBAAkB,GAC1EC,EAAYrC,KAAKb,mBAAmB+C,EAAe7B,EAAYzD,GAC/DC,EAAoBiF,GAAyBA,EAAsBQ,OAAS,EAAIR,EAAwB,qBAExGS,EAASC,EAAAA,EAAA,GACPxC,KAAKrD,OAA6C,IAEtDqC,OAAQ,CACJyD,YAAazC,KAAKrD,MAClBY,UAAW,GAAGmF,GAAAA,CAAW,YAAanF,MAAcN,EAAsB,YAAc,iBAE5F0F,qBAAsB,CAClBC,IAAK,MACLrF,UAAW,iCACX,YAAa,YACbI,IAAKqC,KAAKC,kCAEd4C,yBAA0B7C,KAAKI,MAAMQ,qBACrCP,WAAYL,KAAKI,MAAMC,WACvByC,YAAa,CACTnF,IAAKqC,KAAKE,qBACV3C,UAAW,0BAEfwF,WAAY,CACRxF,UAAW,GAAGyC,KAAKmB,mBAAmB9C,EAAuB,UAAY,aAE7E2E,YAAa,CACTJ,IAAK,OACLjF,IAAKqC,KAAKG,cACV5C,UAAW,wBACX,aAAc,SACdE,KAAM,aACNwF,KAAM,SACNC,OAAQb,EACRc,aAAc,OAElBC,MAAOlF,EAAe,CAClBG,qBAAAA,EACAF,iBAAkB,GAAG6B,KAAK7B,oBAAoBE,EAAuB,UAAY,YACjFC,WAAAA,EACAF,sBAAAA,EACAG,qBAAsByB,KAAKzB,qBAC3BzB,gBAAAA,EACA0B,iBAAkBwB,KAAKxB,mBAE3B6E,KAAM3G,EAAc,CAChBQ,gBAAiByE,EACjBxE,gBAAiByE,EACjBxE,gBAAiByE,EACjB/E,gBAAAA,EACAC,gBAAiBiD,KAAKjD,gBACtBE,oBAAAA,EACAD,SAAUgD,KAAKhD,SACfJ,UAAAA,EACAC,kBAAAA,EACAwC,MAAOgB,IAEX0B,mBAAoBA,EACpBC,oBAAqBA,EACrB3D,qBAAsB2B,KAAKI,MAAM/B,uBAGrC,OAAO2B,KAAKrD,MAAM2G,WAAWf,IAiBrC,sFCnMA,MA+BMgB,EAAcA,CAChBF,EACAN,EACAC,EACAjB,EACAC,IAGI1E,EAAAA,cAACkG,EAAAA,KAAI3E,OAAAC,OAAA,GAAKiE,GACNzF,EAAAA,cAACkG,EAAAA,KAAI3E,OAAAC,OAAA,GAAKkE,GACLK,EAAKtF,MAELsF,EAAKpF,WAGVX,EAAAA,cAACmG,EAAAA,GAAe,KACX1B,GAAsBzE,EAAAA,cAAA,4BAAwB,UAAUoG,IAAK3B,IAC7DC,GAAuB1E,EAAAA,cAAA,0BAAsB,UAAUqG,IAAI,aAAa9D,KAAMmC,MAM/F,EAtD+CrF,IAAQ,IAAAiH,EAAAC,EACnD,MAAM,OACF7E,EAAM,qBACN2D,EAAoB,yBACpBE,EAAwB,WACxBxC,EAAU,YACVyC,EAAW,KACXO,EAAI,WACJN,EAAU,YACVC,EAAW,MACXI,EAAK,mBACLrB,EAAkB,oBAClBC,GACArF,EAEEmH,EAAsD,QAAjDF,EAAGjH,EAAMoE,QAAQC,IAAIC,OAAO8C,6BAAqB,IAAAH,EAAAA,EAAI7B,EAC1DiC,EAAwD,QAAlDH,EAAGlH,EAAMoE,QAAQC,IAAIC,OAAOgD,8BAAsB,IAAAJ,EAAAA,EAAI7B,EAIlE,OACI1E,EAAAA,cAAC4G,EAAAA,OAAMrF,OAAAC,OAAA,GAAKE,GACPoE,EACAG,EAAYF,EAA8BN,EAAYC,EAAac,EAAOE,GAC3E1G,EAAAA,cAACkG,EAAAA,KAAI3E,OAAAC,OAAA,GAAKgE,GACLzC,GAAcA,EAAWiC,OAAS,EAAIhF,EAAAA,cAACkG,EAAAA,KAAI3E,OAAAC,OAAA,GAAK6D,GAAuBE,GAAmC,2mBCzC3H,MAAMsB,EAAU,CAAEC,QAAS,GAAIC,YAAa,IAEvCF,EAAQC,QAAQ,gBAAkB,CAC/BE,EAAGA,IAAMC,EAAQ,MACjBC,MAAO,gBACPC,GAAI,GAEJC,KAAK,EACLC,GAAI,YACJC,EAAG,eACHC,EAAG,YAEHC,IAAK,GAGLC,GAAI,4BAKRpF,OAAOqF,aAAerF,OAAOqF,cAAgB,GAC7CrF,OAAOqF,aAAaZ,QAAO5B,EAAAA,EAAA,GACpB7C,OAAOqF,aAAaZ,SAAW,IAC/BD,EAAQC,SAGXzE,OAAOqF,aAAaX,YAAW7B,EAAAA,EAAA,GAC5B7C,OAAOqF,aAAaX,aAAe,IACnCF,EAAQE,aAEY,MAAMY,EAAiB,GAC9BA,EAAe,yDAA2D,CAClFX,EAAGA,IAAMC,EAAQ,MACjBW,GAAI,oCAEpBvF,OAAOqF,aAAerF,OAAOqF,cAAgB,GAC7CrF,OAAOqF,aAAaC,eAAczC,EAAAA,EAAA,GACP7C,OAAOqF,aAAaC,gBAAkB,IACtCA,UCtC3BE,EAAOC,QAAU9H,cCAjB6H,EAAOC,QAAUC","sources":["webpack://henrys-ecommerce/./src/modules/unbxd-search/components/unbxd-search.form.tsx?ab7d","webpack://henrys-ecommerce/./src/modules/unbxd-search/components/unbxd-search.label.tsx?a889","webpack://henrys-ecommerce/./src/modules/unbxd-search/unbxd-search.tsx?b815","webpack://henrys-ecommerce/./src/modules/unbxd-search/unbxd-search.view.tsx?41ad","webpack://henrys-ecommerce/./lib/unbxd-search/module-registration.js?850d","webpack://henrys-ecommerce/external var \"React\"?0d3b","webpack://henrys-ecommerce/external var \"ReactDOM\"?853b"],"sourcesContent":["/*!\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\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}\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\nexport const FormComponent = (props: ISearchFormProps): ISearchFormViewProps => {\r\n const {\r\n searchQsp,\r\n searchPlaceholder,\r\n hideSearchLabel,\r\n searchTextInput,\r\n maxChars,\r\n disableSubmitSearch,\r\n ariaLabelCancel,\r\n ariaLabelSearch,\r\n ariaLabelSubmit\r\n } = props;\r\n\r\n const inputNode = !hideSearchLabel ? (\r\n \r\n ) : (\r\n \r\n );\r\n\r\n const submitBtnNode = !disableSubmitSearch && \r\n \r\n );\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\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 { getTelemetryObject, IModuleProps, INodeProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\n\r\nimport { FormComponent, LabelComponent } from './components';\r\nimport { IUnbxdSearchData } from './unbxd-search.data';\r\nimport { IUnbxdSearchProps } from './unbxd-search.props.autogenerated';\r\n\r\nexport interface ISearchState {\r\n isSearchFormExpanded: boolean;\r\n searchText: string;\r\n searchKeywordSuggestClass: string;\r\n searchProductSuggestClass: string;\r\n searchCategorySuggestClass: string;\r\n suggestions: Autosuggestions | undefined;\r\n searchRefiners?: ProductRefiner[] | undefined;\r\n autoSuggestAriaLabel: string;\r\n isInitialState: boolean;\r\n isLoadingAutoSuggest?: boolean;\r\n}\r\n\r\nexport interface ISearchViewProps extends IUnbxdSearchProps {\r\n Search: IModuleProps;\r\n AutoSuggestAriaLabel: INodeProps;\r\n AutoSuggestAriaLabelText: string;\r\n searchText: string;\r\n AutoSuggest: INodeProps;\r\n // KeywordSuggest: INodeProps;\r\n // ProductSuggest: INodeProps;\r\n // CategorySuggest: INodeProps;\r\n SearchForm: INodeProps;\r\n FormWrapper: INodeProps;\r\n // UlKeyword: INodeProps;\r\n // UlProduct: INodeProps;\r\n // UlCategory: INodeProps;\r\n label: React.ReactNode;\r\n form: React.ReactNode;\r\n // autosuggestKeyword?: ISearchKeywordViewProps;\r\n // autosuggestProduct?: ISearchProductViewProps;\r\n // autosuggestCategory?: ISearchCategoryViewProps;\r\n // callbacks: {\r\n // handleCancelSearchChange(): void;\r\n // };\r\n isSearchFormExpanded: boolean;\r\n // isLoadingAutoSuggest?: boolean;\r\n // isLoadingNode?: React.ReactNode;\r\n unbxdAutosuggestJs: string | undefined;\r\n unbxdAutosuggestCss: string | undefined;\r\n}\r\n\r\n/**\r\n *\r\n * Search module.\r\n * @extends {React.Component, ISearchState>}\r\n */\r\nclass Search 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 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 searchLabelClass: string;\r\n\r\n private readonly telemetryContent: ITelemetryContent;\r\n\r\n // @ts-expect-error\r\n private cancellabelDebounce: debounce;\r\n\r\n public constructor(props: IUnbxdSearchProps) {\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 searchKeywordSuggestClass: 'ms-search__autoSuggest__keyword',\r\n searchProductSuggestClass: 'ms-search__autoSuggest__product',\r\n searchCategorySuggestClass: 'ms-search__autoSuggest__category',\r\n suggestions: undefined,\r\n searchRefiners: undefined,\r\n autoSuggestAriaLabel: '',\r\n isInitialState: true,\r\n isLoadingAutoSuggest: false\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\r\n this.searchFormClass = 'ms-search__form';\r\n this.searchLabelClass = 'ms-search__label';\r\n this.telemetryContent = getTelemetryObject(\r\n this.props.context.request.telemetryPageName!,\r\n this.props.friendlyName,\r\n this.props.telemetry\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, className = '', unbxdAutosuggestJs, unbxdAutosuggestCss }\r\n } = this.props;\r\n\r\n const { isSearchFormExpanded, searchText } = this.state;\r\n\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 const searchURL = this._appendQueryParams(searchPageURL, searchText, searchQsp);\r\n const searchPlaceholder = searchplaceholderText && searchplaceholderText.length > 0 ? searchplaceholderText : 'Search in Fabrikam';\r\n\r\n const viewProps: ISearchViewProps = {\r\n ...(this.props as IUnbxdSearchProps),\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 AutoSuggest: {\r\n ref: this.autoSuggestResultDiv,\r\n className: 'ms-search__autoSuggest'\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 },\r\n label: LabelComponent({\r\n isSearchFormExpanded,\r\n searchLabelClass: `${this.searchLabelClass} ${isSearchFormExpanded ? 'bx-hide' : 'bx-show'}`,\r\n searchtext,\r\n searchLabelArialLabel,\r\n searchCollapsedLabel: this.searchCollapsedLabel,\r\n hideSearchLabel,\r\n telemetryContent: this.telemetryContent\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 maxChars: this.maxChars,\r\n searchQsp,\r\n searchPlaceholder,\r\n query: searchText\r\n }),\r\n unbxdAutosuggestJs: unbxdAutosuggestJs,\r\n unbxdAutosuggestCss: unbxdAutosuggestCss,\r\n isSearchFormExpanded: this.state.isSearchFormExpanded\r\n };\r\n\r\n return this.props.renderView(viewProps) as React.ReactElement;\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\r\n return queryUrl.href;\r\n };\r\n}\r\n\r\nexport default Search;\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\n/* eslint-disable no-duplicate-imports */\r\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport { HtmlHeadInclude } from '@msdyn365-commerce/core';\r\nimport * as React from 'react';\r\n\r\nimport { ISearchFormViewProps } from './components';\r\nimport { ISearchViewProps } from './unbxd-search';\r\n\r\n// const defaultUnbxdAutosuggestJs = 'https://sandbox.unbxd.io/stage-henrys-com700951507546414_autosuggest.js';\r\n// const defaultUnbxdAutosuggestCss = 'https://sandbox.unbxd.io/stage-henrys-com700951507546414_autosuggest.css';\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 label,\r\n unbxdAutosuggestJs,\r\n unbxdAutosuggestCss\r\n } = props;\r\n\r\n const jsUri = props.context.app.config.heiUnbxdAutosuggestJs ?? unbxdAutosuggestJs;\r\n const cssUri = props.context.app.config.heiUnbxdAutosuggestCss ?? unbxdAutosuggestCss;\r\n\r\n process.env.NODE_ENV === 'development' && console.log('Unbxd', 'SearchView', jsUri, cssUri);\r\n\r\n return (\r\n \r\n {label}\r\n {_renderForm(form as ISearchFormViewProps, SearchForm, FormWrapper, jsUri, cssUri)}\r\n \r\n {searchText && searchText.length > 0 ? {AutoSuggestAriaLabelText} : ''}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderForm = (\r\n form: ISearchFormViewProps,\r\n SearchForm: INodeProps,\r\n FormWrapper: INodeProps,\r\n unbxdAutosuggestJs: string | undefined,\r\n unbxdAutosuggestCss: string | undefined\r\n) => {\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 {unbxdAutosuggestJs &&