{"version":3,"sources":["webpack:///../../node_modules/@babel/runtime/helpers/esm/typeof.js","webpack:///../../node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack:///../../node_modules/@babel/runtime/helpers/esm/objectSpread.js","webpack:///../../node_modules/@babel/runtime/helpers/esm/classCallCheck.js","webpack:///../../node_modules/@babel/runtime/helpers/esm/createClass.js","webpack:///../../node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","webpack:///../../node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js","webpack:///../../node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","webpack:///../../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","webpack:///../../node_modules/@babel/runtime/helpers/esm/inherits.js","webpack:///../../node_modules/i18next/dist/esm/i18next.js","webpack:///../../node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js","webpack:///../../node_modules/@babel/runtime/helpers/objectWithoutProperties.js","webpack:///../../node_modules/@babel/runtime/helpers/typeof.js","webpack:///../../node_modules/@babel/runtime/helpers/defineProperty.js","webpack:///../../node_modules/@babel/runtime/helpers/classCallCheck.js","webpack:///../../node_modules/@babel/runtime/helpers/createClass.js","webpack:///../../node_modules/react-i18next/dist/es/context.js","webpack:///../../node_modules/react-i18next/dist/es/utils.js","webpack:///../../node_modules/@babel/runtime/helpers/arrayWithHoles.js","webpack:///../../node_modules/@babel/runtime/helpers/iterableToArrayLimit.js","webpack:///../../node_modules/@babel/runtime/helpers/arrayLikeToArray.js","webpack:///../../node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js","webpack:///../../node_modules/@babel/runtime/helpers/nonIterableRest.js","webpack:///../../node_modules/@babel/runtime/helpers/slicedToArray.js","webpack:///../../node_modules/react-i18next/dist/es/useTranslation.js","webpack:///../../src/util/i18n.js","webpack:///../../src/components/ConfigProvider.tsx","webpack:///../../node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js","webpack:///../../node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js","webpack:///../../node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js","webpack:///../../node_modules/@babel/runtime/helpers/esm/nonIterableRest.js","webpack:///../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js","webpack:///../../node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js","webpack:///../../node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js","webpack:///../../node_modules/@babel/runtime/helpers/esm/toConsumableArray.js","webpack:///../../node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js","webpack:///../../node_modules/@babel/runtime/helpers/esm/iterableToArray.js","webpack:///../../node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js","webpack:///../../node_modules/@babel/runtime/regenerator/index.js","webpack:///../../node_modules/regenerator-runtime/runtime.js","webpack:///../../node_modules/axios/lib/helpers/bind.js","webpack:///../../node_modules/axios/lib/utils.js","webpack:///../../node_modules/is-buffer/index.js","webpack:///../../node_modules/axios/lib/core/createError.js","webpack:///../../node_modules/axios/lib/core/enhanceError.js","webpack:///../../node_modules/axios/lib/helpers/buildURL.js","webpack:///../../node_modules/axios/lib/helpers/parseHeaders.js","webpack:///../../node_modules/axios/lib/helpers/isURLSameOrigin.js","webpack:///../../node_modules/axios/lib/helpers/cookies.js","webpack:///../../node_modules/axios/lib/adapters/xhr.js","webpack:///../../node_modules/axios/lib/core/settle.js","webpack:///../../node_modules/axios/lib/defaults.js","webpack:///../../node_modules/axios/lib/helpers/normalizeHeaderName.js","webpack:///../../node_modules/axios/lib/core/InterceptorManager.js","webpack:///../../node_modules/axios/lib/core/transformData.js","webpack:///../../node_modules/axios/lib/cancel/isCancel.js","webpack:///../../node_modules/axios/lib/core/dispatchRequest.js","webpack:///../../node_modules/axios/lib/helpers/combineURLs.js","webpack:///../../node_modules/axios/lib/helpers/isAbsoluteURL.js","webpack:///../../node_modules/axios/lib/core/Axios.js","webpack:///../../node_modules/axios/lib/cancel/Cancel.js","webpack:///../../node_modules/axios/lib/cancel/CancelToken.js","webpack:///../../node_modules/axios/lib/axios.js","webpack:///../../node_modules/axios/lib/helpers/spread.js","webpack:///../../node_modules/axios/index.js","webpack:///../../src/store/Store.ts","webpack:///../../src/models/Search/Rule.ts","webpack:///../../src/models/Search/Pagination.ts","webpack:///../../src/models/Search/Result.ts","webpack:///../../src/models/Search/Sorting.ts","webpack:///../../src/models/Search/Selections.ts","webpack:///../../src/models/Facets/Value.ts","webpack:///../../src/models/Facets/Swatch.ts","webpack:///../../src/models/Facets/Range.ts","webpack:///../../src/models/Facets/Facet.ts","webpack:///../../src/models/Search/Trigger.ts","webpack:///../../src/models/Search/ContentType.ts","webpack:///../../src/models/Search/Merchandising.ts","webpack:///../../src/models/Search/PageContent.ts","webpack:///../../src/models/Search/Response.ts","webpack:///../../src/components/AuthToken.tsx","webpack:///../../src/models/Facets/FacetType.ts","webpack:///../../src/components/TrackingEvent.tsx","webpack:///../../src/net/HawkClient.ts","webpack:///../../src/helpers/utils.ts","webpack:///../../src/store/HawkState.ts","webpack:///../../src/util/MergableState.ts","webpack:///../../src/components/StoreProvider.tsx","webpack:///../../src/models/Autocomplete/Suggestion.ts","webpack:///../../src/components/Hawksearch.tsx","webpack:///../../node_modules/@babel/runtime/helpers/esm/extends.js","webpack:///../../src/models/Autocomplete/Category.ts","webpack:///../../src/models/Autocomplete/Product.ts","webpack:///../../src/models/Autocomplete/Content.ts","webpack:///../../src/models/Autocomplete/Popular.ts","webpack:///../../src/components/ui/Facets/Facet.tsx","webpack:///../../src/components/ui/Facets/FacetTypes/Checkbox.tsx","webpack:///../../src/components/ui/Facets/SliderCalendarInputs.tsx","webpack:///../../src/components/ui/Facets/FacetTypes/SliderDate.tsx","webpack:///../../node_modules/react-number-format/dist/react-number-format.es.js","webpack:///../../src/components/ui/Facets/SliderNumericInputs.tsx","webpack:///../../src/components/ui/Facets/FacetTypes/SliderNumeric.tsx","webpack:///../../src/components/ui/Facets/FacetTypes/SwatchItem.tsx","webpack:///../../src/components/ui/Facets/FacetTypes/NestedItem.tsx","webpack:///../../src/components/ui/Facets/FacetTypes/OpenRangeDatetime.tsx","webpack:///../../src/components/ui/Facets/FacetTypes/OpenRangeNumber.tsx","webpack:///../../src/components/ui/Facets/FacetTypes/SizeItem.tsx","webpack:///../../src/components/ui/Facets/FacetTypes/NestedLinkItem.tsx","webpack:///../../src/components/ui/Facets/Overrides.ts","webpack:///../../src/components/ui/Facets/FacetTypes/Nested.tsx","webpack:///../../src/components/ui/Facets/FacetTypes/Search.tsx","webpack:///../../src/components/ui/Facets/FacetTypes/Link.tsx","webpack:///../../src/components/ui/Facets/FacetTypes/Slider.tsx","webpack:///../../src/components/ui/Facets/FacetTypes/Swatch.tsx","webpack:///../../src/components/ui/Facets/FacetTypes/OpenRange.tsx","webpack:///../../src/components/ui/Facets/FacetTypes/Size.tsx","webpack:///../../src/components/ui/Facets/FacetTypes/NestedLink.tsx","webpack:///../../src/components/ui/Facets/PlaceholderFacetValue.tsx","webpack:///../../src/components/ui/Facets/PlaceholderFacet.tsx","webpack:///../../src/components/ui/Facets/FacetList.tsx","webpack:///../../src/components/svg/XCircleSVG.tsx","webpack:///../../src/components/ui/Facets/Selections.tsx","webpack:///../../src/components/ui/Facets/SearchResultsLabel.tsx","webpack:///../../src/components/ui/Results/Tools/Sorting.tsx","webpack:///../../src/components/ui/Results/Tools/Pager.tsx","webpack:///../../src/components/ui/Results/Tools/ItemsPerPage.tsx","webpack:///../../src/components/ui/Results/Tools/ViewSelector.tsx","webpack:///../../src/components/ui/Results/Tools/Pagination.tsx","webpack:///../../src/components/ui/Results/ToolRow.tsx","webpack:///../../src/components/svg/PlaceholderSVG.tsx","webpack:///../../src/components/ui/Results/PlaceholderImage.tsx","webpack:///../../src/components/ui/Results/PlaceholderItem.tsx","webpack:///../../src/components/ui/Spinner.tsx","webpack:///../../src/components/ui/Results/ResultImage.tsx","webpack:///../../src/components/ui/Results/ResultItem.tsx","webpack:///../../src/components/ui/Results/ResultListing.tsx","webpack:///../../node_modules/resolve-pathname/esm/resolve-pathname.js","webpack:///../../node_modules/history/esm/history.js","webpack:///../../src/util/History.ts","webpack:///../../node_modules/tiny-invariant/dist/tiny-invariant.esm.js","webpack:///../../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","webpack:///../../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js","webpack:///../../src/util/QueryString.ts","webpack:///../../src/components/QueryStringListener.tsx","webpack:///../../src/components/QueryStringListenerSF.tsx","webpack:///../../src/components/ui/AutoCorrect/AutoCorrectSuggestion.tsx","webpack:///./src/store/Store.ts","webpack:///./src/services/AxiosHelper.ts","webpack:///./src/net/PreviewClient.ts","webpack:///./src/AppState.ts","webpack:///./src/models/PreviewFilterType.ts","webpack:///./src/components/StoreProvider.tsx","webpack:///./src/components/HawksearchPreview.tsx","webpack:///./src/components/shared/Spinner.tsx","webpack:///./src/components/hawk-sdk-overrides/ComparisionDialog.tsx","webpack:///./src/components/hawk-sdk-overrides/ExtendedResultItem.tsx","webpack:///./src/components/results/Tabs.tsx","webpack:///./src/components/results/PreviewResults.tsx","webpack:///./src/components/results/PreviewFacetRail.tsx","webpack:///./src/AppConfiguration.ts","webpack:///./src/app/previewSearch.tsx","webpack:///./src/app/preview.tsx","webpack:///./src/components/AppInitializer.tsx","webpack:///./src/utils/history.ts","webpack:///./src/components/preview-autocomplete/models/Request.ts","webpack:///./src/components/preview-autocomplete/models/Suggestion.ts","webpack:///./src/components/preview-autocomplete/models/Category.ts","webpack:///./src/components/preview-autocomplete/models/Product.ts","webpack:///./src/components/preview-autocomplete/models/Content.ts","webpack:///./src/components/preview-autocomplete/models/Popular.ts","webpack:///./src/components/preview-autocomplete/models/Response.ts","webpack:///./src/components/preview-autocomplete/SearchSuggestionListPreview.tsx","webpack:///./src/components/preview-autocomplete/SearchSuggestionsPreview.tsx","webpack:///./src/components/preview-autocomplete/SearchBoxBasePreview.tsx","webpack:///./src/components/preview-autocomplete/SearchBoxPreview.tsx","webpack:///./src/components/preview-autocomplete/CustomSuggestionListPreview.tsx","webpack:///./src/widgets/hawk-searchbox.tsx","webpack:///./src/components/feature-item/FeatureItem.tsx","webpack:///./src/components/merchandising-banner/merchandisingBanner.tsx","webpack:///./src/widgets/hawk-results-page.tsx","webpack:///./src/index.tsx"],"names":["_typeof","obj","Symbol","iterator","constructor","prototype","_defineProperty","key","value","Object","defineProperty","enumerable","configurable","writable","_objectSpread","target","i","arguments","length","source","ownKeys","keys","getOwnPropertySymbols","push","apply","filter","sym","getOwnPropertyDescriptor","forEach","_classCallCheck","instance","Constructor","TypeError","_defineProperties","props","descriptor","_createClass","protoProps","staticProps","_assertThisInitialized","self","ReferenceError","_possibleConstructorReturn","call","assertThisInitialized","_getPrototypeOf","o","setPrototypeOf","getPrototypeOf","__proto__","_setPrototypeOf","p","_inherits","subClass","superClass","create","consoleLogger","type","log","args","this","output","warn","error","console","baseLogger","Logger","concreteLogger","options","undefined","init","prefix","logger","debug","bool","_len","Array","_key","forward","_len2","_key2","_len3","_key3","_len4","_key4","lvl","debugOnly","concat","moduleName","EventEmitter","observers","events","listener","_this","split","event","l","cloned","observer","_cloned","defer","res","rej","promise","Promise","resolve","reject","makeString","object","copy","a","s","t","m","getLastOfPath","path","Empty","cleanKey","indexOf","replace","canNotTraverseDeeper","stack","shift","hasOwnProperty","k","setPath","newValue","_getLastOfPath","getPath","_getLastOfPath3","getPathWithDefaults","data","defaultData","deepExtend","overwrite","prop","String","regexEscape","str","_entityMap","escape","isIE10","window","navigator","userAgent","ResourceStore","_EventEmitter","ns","defaultNS","keySeparator","index","splice","lng","silent","addNamespaces","emit","resources","toString","addResource","deep","pack","hasResourceBundle","removeNamespaces","getResource","compatibilityAPI","postProcessor","processors","addPostProcessor","module","name","handle","translator","processor","process","checkedLoadedFor","Translator","services","language","interpolation","resolved","nsSeparator","namespaces","match","interpolator","nestingRegexp","parts","join","lastKey","_this2","overloadTranslationOptionHandler","isArray","_this$extractFromKey","extractFromKey","namespace","appendNamespaceToCIMode","toLowerCase","resUsedKey","usedKey","resExactUsedKey","exactUsedKey","resType","noObject","joinArrays","handleAsObjectInI18nFormat","i18nFormat","handleAsObject","returnObjects","returnedObjectHandler","resTypeIsArray","newKeyToUse","deepKey","translate","extendTranslation","usedDefault","needsPluralHandling","count","hasDefaultValue","defaultValueSuffix","pluralResolver","getSuffix","defaultValue","isValidLookup","updateMissing","fk","lngs","fallbackLngs","languageUtils","getFallbackCodes","fallbackLng","saveMissingTo","toResolveHierarchy","send","fallbackValue","missingKeyHandler","backendConnector","saveMissing","saveMissingPlurals","getSuffixes","suffix","appendNamespaceToMissingKey","parseMissingKeyHandler","_this3","parse","usedLng","usedNS","skipInterpolation","nestBef","skipOnVariables","nb","defaultVariables","interpolate","na","nest","context","reset","postProcess","postProcessorNames","applyPostProcessor","postProcessPassResolved","i18nResolved","found","_this4","extracted","fallbackNS","needsContextHandling","codes","utils","hasLoadedNamespace","code","pluralSuffix","possibleKey","finalKey","finalKeys","addLookupKeys","contextSeparator","pop","returnNull","returnEmptyString","resourceStore","option","substring","capitalize","string","charAt","toUpperCase","slice","LanguageUtil","whitelist","supportedLngs","formatLanguageCode","specialCases","lowerCaseLng","map","part","cleanCode","deprecate","isSupportedCode","load","nonExplicitSupportedLngs","getLanguagePartFromCode","cleanedLng","lngOnly","find","supportedLng","fallbacks","getScriptPartFromCode","fallbackCode","fallbackCodes","addCode","c","fc","sets","nr","_rulesPluralsTypes","1","n","Number","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","createRules","rules","set","numbers","plurals","PluralResolver","rule","getRule","number","idx","noAbs","Math","abs","simplifyPluralSuffix","returnSuffix","prepend","compatibilityJSON","Interpolator","format","escapeValue","iOpts","useRawValueToEscape","prefixEscaped","suffixEscaped","formatSeparator","unescapePrefix","unescapeSuffix","nestingPrefix","nestingPrefixEscaped","nestingSuffix","nestingSuffixEscaped","nestingOptionsSeparator","maxReplaces","alwaysFormat","resetRegExp","regexpStr","regexp","RegExp","regexpUnescapeStr","regexpUnescape","nestingRegexpStr","replaces","regexSafe","val","handleFormat","trim","f","missingInterpolationHandler","regex","safeValue","todo","exec","temp","lastIndex","clonedOptions","handleHasOptions","inheritedOptions","sep","optionsString","JSON","e","formatters","doReduce","includes","test","r","elem","reduce","v","Connector","backend","store","state","queue","languages","callback","toLoad","pending","toLoadLanguages","toLoadNamespaces","hasAllNamespaces","reload","loaded","errors","err","addResourceBundle","q","_getLastOfPath2","arr","what","remove","done","fcName","tried","wait","setTimeout","read","queueLoad","loadOne","prepareLoading","_this5","isUpdate","get","initImmediate","nonExplicitWhitelist","preload","pluralSeparator","partialBundledLanguages","ret","tDescription","_format","transformOptions","noop","i18next","I18n","modules","external","isInitialized","isClone","createClassOnDemand","ClassOrObject","lu","bind","on","languageDetector","detection","storeApi","_this2$store","storeApiChained","_this2$store2","deferred","finish","changeLanguage","usedCallback","append","Error","isLanguageChangingTo","setLng","getBestMatchFromCodes","cacheUserLanguage","loadResources","async","detect","fixedT","opts","rest","_this$translator","_this$translator2","exists","_this6","lastLng","loadNotPending","loadState","precheck","preResult","_this7","preloaded","newLngs","_this8","mergedOptions","clone","membersToCopy","excluded","sourceKeys","exports","__esModule","objectWithoutPropertiesLoose","sourceSymbolKeys","propertyIsEnumerable","enumerableOnly","symbols","getOwnPropertyDescriptors","defineProperties","i18nInstance","defaultOptions","bindI18n","bindI18nStore","transEmptyNodeValue","transSupportBasicHtmlNodes","transWrapTextNodes","transKeepBasicHtmlNodesFor","useSuspense","I18nContext","React","createContext","getDefaults","ReportNamespaces","usedNamespaces","getI18n","initReactI18next","setDefaults","react","setI18n","_console","alreadyWarned","warnOnce","Date","loadNamespaces","i18n","cb","initialized","off","_i","_s","_e","_arr","_n","_d","next","len","arr2","minLen","arrayLikeToArray","from","arrayWithHoles","iterableToArrayLimit","unsupportedIterableToArray","nonIterableRest","useTranslation","i18nFromProps","_ref","i18nFromContext","defaultNSFromContext","reportNamespaces","notReadyT","retNotReady","ready","i18nOptions","keyPrefix","addUsedNamespaces","initializedStoreOnce","every","getT","getFixedT","nsMode","_useState","_useState2","_slicedToArray","setT","isMounted","boundReset","current","isInitial","ConfigContext","ConfigProvider","config","children","__webpack_public_path__","useHawkConfig","useContext","_arrayLikeToArray","_unsupportedIterableToArray","_toConsumableArray","arrayWithoutHoles","iter","iterableToArray","nonIterableSpread","asyncGeneratorStep","gen","_next","_throw","arg","info","then","_asyncToGenerator","fn","runtime","Op","hasOwn","$Symbol","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","define","wrap","innerFn","outerFn","tryLocsList","protoGenerator","Generator","generator","Context","_invoke","method","doneResult","delegate","delegateResult","maybeInvokeDelegate","ContinueSentinel","sent","_sent","dispatchException","abrupt","record","tryCatch","makeInvokeMethod","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","NativeIteratorPrototype","values","Gp","defineIteratorMethods","AsyncIterator","PromiseImpl","previousPromise","callInvokeWithMethodAndArg","invoke","result","__await","unwrapped","resultName","nextLoc","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","iterable","iteratorMethod","isNaN","displayName","isGeneratorFunction","genFun","ctor","mark","awrap","reverse","skipTempReset","prev","stop","rootRecord","rval","exception","loc","caught","hasCatch","hasFinally","finallyEntry","complete","thrown","delegateYield","regeneratorRuntime","accidentalStrictMode","Function","thisArg","isObject","isFunction","isArrayBuffer","isBuffer","isFormData","FormData","isArrayBufferView","ArrayBuffer","isView","buffer","isString","isNumber","isUndefined","isDate","isFile","isBlob","isStream","pipe","isURLSearchParams","URLSearchParams","isStandardBrowserEnv","product","document","merge","assignValue","extend","b","message","request","response","enhanceError","encode","encodeURIComponent","ignoreDuplicateOf","originURL","msie","urlParsingNode","createElement","resolveURL","url","href","setAttribute","protocol","host","search","hash","hostname","port","pathname","location","requestURL","parsed","write","expires","domain","secure","cookie","toGMTString","decodeURIComponent","now","requestData","requestHeaders","headers","XMLHttpRequest","auth","username","password","Authorization","btoa","open","params","paramsSerializer","serializedParams","toISOString","stringify","buildURL","timeout","onreadystatechange","readyState","status","responseURL","responseHeaders","getAllResponseHeaders","line","substr","responseType","responseText","statusText","validateStatus","createError","settle","onerror","ontimeout","cookies","require$$0","xsrfValue","withCredentials","isURLSameOrigin","xsrfCookieName","xsrfHeaderName","setRequestHeader","onDownloadProgress","addEventListener","onUploadProgress","upload","cancelToken","cancel","abort","DEFAULT_CONTENT_TYPE","setContentTypeIfUnset","adapter","defaults","transformRequest","normalizedName","normalizeHeaderName","transformResponse","maxContentLength","common","InterceptorManager","handlers","use","fulfilled","rejected","eject","id","h","fns","__CANCEL__","throwIfCancellationRequested","throwIfRequested","baseURL","relativeURL","transformData","reason","isCancel","Axios","instanceConfig","interceptors","chain","dispatchRequest","interceptor","unshift","Cancel","CancelToken","executor","resolvePromise","token","createInstance","defaultConfig","axios","require$$1","require$$2","all","promises","spread","FacetSelectionState","SearchStore","isLoading","facetName","facet","facetField","valueValue","facetValue","valueLabel","NotSelected","facetSelections","pendingSearch","selectionIdx","negationIdx","selectedValue","selectionIndex","clientSelections","SearchWithin","searchResults","selections","facets","label","items","fieldName","selectionValues","selectionValue","matchingVal","Path","matchingValue","facetValues","findMatchingValue","Pagination","PaginationItem","Result","Document","Sorting","SortingItem","Selections","selFacet","SelectionFacet","SelectionFacetValue","Value","Swatch","Range","Facet","DisplayType","Values","IsSearch","ParamName","Rule","RuleType","RuleOperatorType","BannerTrigger","FeaturedItems","FeaturedItem","Merchandising","MerchandisingItem","PageContentItem","PageContent","Response","ContentType","AuthToken","refreshToken","accessToken","E_T","P_T","HawkClient","conf","originalRequest","URL","ClientGuid","Token","RefreshToken","axiosInstance","post","cancellationToken","FacetType","SuggestType","SearchType","TrackingEvent","d","hexDigits","nameEQ","ca","pl","EventType","EventData","PageTypeId","RequestPath","Qs","ViewportHeight","ViewportWidth","clientWidth","typeId","queryId","getCookie","QueryId","TrackingId","TypeId","keyword","Url","UniqueId","CampaignId","BannerId","trackingId","OrderNo","ItemList","Total","Tax","SubTotal","Currency","currency","Quantity","Price","ItemsList","ItemIndex","RequestId","WidgetGuid","widgetGuid","Keyword","Name","visitId","visitorId","VisitId","VisitorId","fetch","body","resp","eventName","writePageLoad","writeSearchTracking","writeClick","writeBannerClick","writeBannerImpression","writeSale","writeAdd2Cart","writeAdd2CartMultiple","writeRate","writeRecommendationClick","writeAutoCompleteClick","getVisitorExpiry","getVisitExpiry","createGuid","setCookie","expiry","getInputVal","inputVal","anelement","useHawkState","initialSearch","setState","client","FacetSelections","itemsToCompare","comparedResults","itemsToCompareIds","productDetails","useState","typeConstructor","prevState","newState","setStore","searchParams","IsInPreview","IndexName","indexName","hawkCustomStr","customObj","updatedRequest","ClientData","Custom","UserAgent","PreviewBuckets","localStorage","requestError","selectedFacets","doHistory","setSearch","PageNo","useEffect","cts","actor","toggleFacetValue","negate","selState","valuesToRemoved","item","difference","array1","array2","setSearchSelections","setFacetValues","clearFacet","clearFacetValue","clearAllFacets","setItemsToCompare","itemsArray","resultItem","setComparedResults","clearItemsToCompare","getComparedItems","pinItem","updatePinOrder","rebuildIndex","getProductDetails","setProductDetailsResults","HawkContext","StoreProvider","useHawksearch","Hawksearch","_extends","assign","SuggestionType","CategoryStrategy","ProductStrategy","ContentStrategy","PopularStrategy","FacetRangeDisplayType","FacetContext","searchActor","wrapperRef","useRef","setFilter","isTruncated","setTruncated","isCollapsed","setCollapsed","remainingFacets","valuesBeforeTrunc","selectFacet","negateFacet","setFacets","decimalPrecision","renderer","renderTruncation","onClick","clickOnMoreLess","className","toggleCollapsible","useFacet","formatDate","unixFormat","date","year","SliderCalendarInputs","sliderProps","minValue","setMinValue","maxValue","setMaxValue","min","max","onChange","newMinValue","newMaxValue","replaceHyphen","getTime","SliderDate","range","rangeMin","setMinRange","rangeMax","setMaxRange","rangeStart","setStartRange","rangeEnd","setEndRange","paramName","newRange","minVal","maxVal","formattedMinVal","formattedMaxVal","selection","fallback","onValueChange","currentMinValue","currentMaxValue","onValuesUpdated","newMin","newMax","emptyFunction","emptyFunctionWithReset","resetWarningCache","propTypes","createCommonjsModule","shim","propName","componentName","propFullName","secret","getShim","isRequired","ReactPropTypes","array","func","symbol","any","arrayOf","element","elementType","instanceOf","node","objectOf","oneOf","oneOfType","shape","exact","checkPropTypes","PropTypes","factoryWithThrowingShims","charIsNumber","_char","isNil","escapeRegExp","splitDecimal","numStr","allowNegative","hasNagation","addNegation","beforeDecimal","afterDecimal","limitToScale","scale","fixedDecimalScale","filler","setCaretPosition","el","caretPos","createTextRange","move","select","selectionStart","focus","setSelectionRange","clamp","num","getCurrentCaretPosition","selectionEnd","propTypes$1","thousandSeparator","decimalSeparator","allowedDecimalSeparators","thousandsGroupStyle","decimalScale","displayType","removeFormatting","mask","isNumericString","customInput","allowEmptyFormatting","allowLeadingZeros","onKeyDown","onMouseUp","onFocus","onBlur","isAllowed","renderText","getInputRef","defaultProps","NumberFormat","_React$Component","validateProps","formattedValue","formatValueProp","numAsString","mounted","selectionBeforeInput","prevProps","updateValueIfRequired","clearTimeout","focusTimeout","focusedElm","stateValue","_state$numAsString","lastNumStr","lastValueWithNewFormat","formatNumString","floatValue","parseFloat","lastFloatValue","updateValue","input","_this$getSeparators","getSeparators","numRegex","getNumberRegex","hasNegation","firstDecimalIndex","g","ignoreDecimalSeparator","_this$props","_this$props2","_this$props$mask","_this$getSeparators3","currentValue","direction","_this$props3","firstHashPosition","lastIndexOf","nextPos","caretLeftBound","caretRightBound","inputValue","j","inputNumber","formattedNumber","currentInputChar","currentFormatChar","correctCaretPosition","_this$props4","isNegative","suffixLastIndex","formatArray","start","ln","_this$props5","removePatternFormatting","removePrefixAndSuffix","getFloatString","hashCount","formattedNumberAry","getMaskAtIndex","_this$props6","_this$getSeparators4","hasDecimalSeparator","_splitDecimal","thousandsGroupRegex","getThousandsGroupRegex","applyThousandSeparator","_this$props7","formatWithPattern","formatAsNumber","_this$props8","_this$props9","isNonNumericFalsy","shoudHaveDecimalSeparator","roundedDecimalParts","toFixed","intPart","roundedStr","decimalPart","roundToPrecision","formatInput","negationRegex","doubleNegationRegex","removeNegation","formatNegation","_this$props10","end","isCharacterAFormat","lastValue","_this$props11","_this$getSeparators6","_this$selectionBefore","_findChangedIndex","prevValue","prevLength","newLength","findChangedIndex","separator","leftBound","rightBound","checkIfFormatGotDeleted","numericString","_splitDecimal2","isBeforeDecimalPoint","_params$setCaretPosit","currentCaretPosition","getCaretPosition","setPatchedCaretPosition","getValueObject","correctInputValue","isChangeAllowed","fixLeadingZero","expectedCaretPosition","_el$value","_this$props12","negativeRegex","isPatternFormat","newCaretPosition","preventDefault","isUnitTestRun","_el$value2","caretPosition","persist","_el$value3","keyMaps","filteredObj","_this$props13","_this$state","otherProps","inputProps","inputMode","platform","addInputMode","ref","CustomInput","Component","SliderNumericInputs","SliderNumeric","isCurency","setIsCurrency","currencySymbol","setCurrencySymbol","selectedValues","isCurrency","SwatchItem","swatchUrl","colorSwatchStyle","backgroundColor","Color","listItemClassNames","aria-pressed","isSelected","style","title","src","alt","NestedItem","isExpanded","setIsExpanded","setIsTruncated","hierarchyValue","hierarchyChildren","remainingValues","shouldTruncateChildren","facetArray","matchValue","data-item-id","checked","htmlFor","aria-expanded","selectionState","isNegated","onValueSelected","OpenRangeDatetime","hawkActor","daterange","rangeStartDate","rangeEndDate","minDateValue","setdateStartValue","maxDateValue","setdateEndValue","startVal","endVal","setdateFacetValues","OpenRangeNumber","setStartValue","setEndValue","data-type","SizeItem","size","onSwatchSelected","NestedLinkItem","textDecoration","defaultFacetComponents","facetType","component","correspondingRange","setInput","facetSwatch","isColor","swatchValue","Label","defaultAutocompleteStrategies","SuggestionStrategy","getAutocompleteStrategies","overridedStrategies","suggestionStrategies","sType","autocompleteStrategy","strategyMatch","PlaceholderFacetValue","width","PlaceholderFacet","numValues","FacetList","numPlaceholders","components","overridedComponents","facetComponents","fType","fComponent","getFacetComponents","registeredComponent","XCircleSVG","viewBox","focusable","aria-hidden","fill","negation","clearSelection","displayValue","selectedRange","splittedValues","renderRange","SearchResultsLabel","SortBy","aria-labelledby","sortingItem","selected","Selected","Pager","page","totalPages","onPageChange","setInputValue","hasError","setHasError","pageNo","doInputError","goToPage","goToPreviousPage","parseInt","goToNextPage","ItemsPerPage","MaxPerPage","paginationItem","PageSize","ViewSelector","tabFacet","selectedTabFacetValue","dataDisplayMode","display","ddm-selection","ToolRow","PlaceHolderSVG","x","y","PlaceholderImage","showSpinner","class","PlaceholderItem","Spinner","isVisible","ResultImage","imageTitle","imageUrl","onLoadCallBack","imageLoaded","setImageLoaded","overflow","height","onLoad","ResultItem","itemName","ResultListing","DefaultResultItem","results","isAbsolute","spliceOne","list","createLocation","currentLocation","hashIndex","searchIndex","parsePath","decodeURI","URIError","to","hasTrailingSlash","toParts","fromParts","isToAbs","isFromAbs","mustEndAbs","last","up","resolvePathname","canUseDOM","getConfirmation","confirm","getHistoryState","history","condition","invariant","ua","globalHistory","canUseHistory","needsHashChangeListener","_props","_props$forceRefresh","forceRefresh","_props$getUserConfirm","getUserConfirmation","_props$keyLength","keyLength","basename","stripTrailingSlash","getDOMLocation","historyState","_window$location","hasBasename","stripBasename","createKey","random","prompt","listeners","transitionManager","setPrompt","nextPrompt","confirmTransitionTo","action","appendListener","isActive","notifyListeners","nextState","handlePopState","isExtraneousPopstateEvent","handlePop","handleHashChange","forceNextPop","ok","fromLocation","toLocation","toIndex","allKeys","fromIndex","delta","go","revertPop","initialLocation","createHref","createPath","listenerCount","checkDOMListeners","removeEventListener","isBlocked","pushState","prevIndex","nextKeys","replaceState","goBack","goForward","block","unblock","listen","unlisten","createBrowserHistory","_objectWithoutProperties","parseLocation","searchUrl","customUrl","searchRequest","parseSearchQueryString","checkIfUrlRefsLandingPage","queryObj","multipleValues","parseQueryStringToObject","sort","pg","mpp","lp","PageId","lpurl","searchWithin","is100Coverage","customURL","pageId","CustomUrl","Is100CoverageTurnedOn","Boolean","getSearchQueryString","queryStringValues","escapedValues","unescapedValue","convertObjectToQueryString","QueryStringListener","QueryStringListenerSF","AutoCorrectSuggestion","selectKeyword","AxiosHelper","PreviewClient","baseUrl","apiUrl","previewClientDataUrl","initialDataUrl","getPageLayoutUrl","autocompleteUrl","compareItemsURL","compareItemURL","addToCartURL","bodyFormData","productId","categoryId","PreviewFilterType","initialContext","settings","timeZone","isBoostAndBuryEnabled","isVisibilityRulesEnabled","isPersonalizedBoostEnabled","isPopularityBoostEnabled","isItemPinEnabled","isAdvancedExplanationEnabled","isCoverageEnabled","isKeywordReplacementEnabled","hawkConfig","getElementById","getAttribute","elem2","val2","getSearchAPIURL","dashboardUrl","isInPreview","searchPageUrl","HawkPreviewContext","useHawksearchPreview","HawksearchPreview","ComparisionDialog","isOpen","onToggleModal","showComparison","Modal","zIndex","toggle","ModalHeader","tag","ModalBody","ModalFooter","data-test-selector","data-dismiss","ExtendedResultItem","showComparisionDialog","setShowComparisionDialog","imageURL","getDocumentValue","nameValue","pageURL","sku","bestFragment","BestFragment","contentTypeValue","DrawingUrlClick","filetype","redir","trackClickEvent","track","uniqueId","DocId","getItem","dangerouslySetInnerHTML","__html","pdfDrawingUrl","stepDrawingUrl","dxfDrawingUrl","instock","itemType","descriptionShort","isSnapEda","IsVisible","xlinkHref","getTabCssClassName","tabValues","Tabs","Facets","FieldType","getElementsByClassName","tabValue","classList","add","PreviewResults","matchImageHeight","nodeList","elems","tallest","offsetHeight","matchPriceHeight","Results","VerticalZones","leftBottom","leftTop","featuredLeftBottom","featuredLeftTop","PreviewFacetRail","matchedMerchandisingItems","Items","Zone","aria-controls","role","tabIndex","data-init","AppConfiguration","siteDirectory","clientGUID","trackingAPI","baseAPI","searchAPI","autocompleteAPI","getInstance","PreviewSearch","ThemedStyleSheet","registerInterface","cssInterface","registerTheme","RheostatDefaultTheme","ReactDatesDefaultTheme","browserHistory","Suggestion","suggestionType","Category","Product","Content","Popular","Categories","Products","SearchSuggestionsListPreview","downshift","onViewMatches","SuggestionList","popular","categories","products","content","hasPopular","hasCategories","hasProducts","hasContent","hasAllEmpty","SearchSuggestionsPreview","query","AppState","setResults","setIsLoading","autocomplete","DisplayFullResponse","doAutocomplete","SearchBoxBasePreview","initialValue","onSubmit","strategies","initialInput","setInitialInput","Suspense","stateReducer","changes","itemToString","matchedStrategy","strategy","handleToString","handleItemChange","initialInputValue","getInputProps","openMenu","closeMenu","showSuggestions","placeholder","SearchBoxPreview","initialKeyword","setInitialKeyword","objs","currentTarget","ProductsComponent","ProductHeading","PopularHeading","getItemProps","redirectItemDetails","isAtleastOneExist","searchedKeyword","pageurl","suggestType","TopProductMatches","ProductName","Thumb","Sku","itemtype","description_short","text","maxlength","trimEnd","CustomSuggestionListPreview","CategoryHeading","ContentHeading","hoverKeyword","setSearchedKeyword","hoverProducts","setHoverProducts","hoverPopular","setHoverPopular","getMenuProps","highlightedIndex","getAtLeastOneExist","SearcBox","apiUrlObj","searchApi","autocompleteApi","clientGuid","trackEventUrl","ReactDOM","render","FeatureItem","bannerId","campaignId","trackEvent","MerchandisingBanner","BannerZone","getBannerHtml","matchedMerchandisingItem","Output","merchendisingItem","merchandisingItem","bannerIndex","trackEventPayload","Widget","Image","absoluteUrlTester","ImageUrl","websiteUrl","ForwardUrl","ImageTitle","AltTag","Featured","featuredItem","Title","renderBanner","ResultsPage","dataSiteDirectory","dataSearchQuery","facetNavigationMode","pageType"],"mappings":"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","file":"index.8a44935f.js","sourcesContent":["export default function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof(obj);\n}","export default function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}","import defineProperty from \"./defineProperty.js\";\nexport default function _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? Object(arguments[i]) : {};\n var ownKeys = Object.keys(source);\n\n if (typeof Object.getOwnPropertySymbols === 'function') {\n ownKeys.push.apply(ownKeys, Object.getOwnPropertySymbols(source).filter(function (sym) {\n return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n }));\n }\n\n ownKeys.forEach(function (key) {\n defineProperty(target, key, source[key]);\n });\n }\n\n return target;\n}","export default function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}","function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nexport default function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n}","export default function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}","import _typeof from \"./typeof.js\";\nimport assertThisInitialized from \"./assertThisInitialized.js\";\nexport default function _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n } else if (call !== void 0) {\n throw new TypeError(\"Derived constructors may only return object or undefined\");\n }\n\n return assertThisInitialized(self);\n}","export default function _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n Object.defineProperty(subClass, \"prototype\", {\n writable: false\n });\n if (superClass) setPrototypeOf(subClass, superClass);\n}","import _typeof from '@babel/runtime/helpers/esm/typeof';\nimport _objectSpread from '@babel/runtime/helpers/esm/objectSpread';\nimport _classCallCheck from '@babel/runtime/helpers/esm/classCallCheck';\nimport _createClass from '@babel/runtime/helpers/esm/createClass';\nimport _possibleConstructorReturn from '@babel/runtime/helpers/esm/possibleConstructorReturn';\nimport _getPrototypeOf from '@babel/runtime/helpers/esm/getPrototypeOf';\nimport _assertThisInitialized from '@babel/runtime/helpers/esm/assertThisInitialized';\nimport _inherits from '@babel/runtime/helpers/esm/inherits';\n\nvar consoleLogger = {\n type: 'logger',\n log: function log(args) {\n this.output('log', args);\n },\n warn: function warn(args) {\n this.output('warn', args);\n },\n error: function error(args) {\n this.output('error', args);\n },\n output: function output(type, args) {\n if (console && console[type]) console[type].apply(console, args);\n }\n};\n\nvar Logger = function () {\n function Logger(concreteLogger) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n _classCallCheck(this, Logger);\n\n this.init(concreteLogger, options);\n }\n\n _createClass(Logger, [{\n key: \"init\",\n value: function init(concreteLogger) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n this.prefix = options.prefix || 'i18next:';\n this.logger = concreteLogger || consoleLogger;\n this.options = options;\n this.debug = options.debug;\n }\n }, {\n key: \"setDebug\",\n value: function setDebug(bool) {\n this.debug = bool;\n }\n }, {\n key: \"log\",\n value: function log() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return this.forward(args, 'log', '', true);\n }\n }, {\n key: \"warn\",\n value: function warn() {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n return this.forward(args, 'warn', '', true);\n }\n }, {\n key: \"error\",\n value: function error() {\n for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n\n return this.forward(args, 'error', '');\n }\n }, {\n key: \"deprecate\",\n value: function deprecate() {\n for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n args[_key4] = arguments[_key4];\n }\n\n return this.forward(args, 'warn', 'WARNING DEPRECATED: ', true);\n }\n }, {\n key: \"forward\",\n value: function forward(args, lvl, prefix, debugOnly) {\n if (debugOnly && !this.debug) return null;\n if (typeof args[0] === 'string') args[0] = \"\".concat(prefix).concat(this.prefix, \" \").concat(args[0]);\n return this.logger[lvl](args);\n }\n }, {\n key: \"create\",\n value: function create(moduleName) {\n return new Logger(this.logger, _objectSpread({}, {\n prefix: \"\".concat(this.prefix, \":\").concat(moduleName, \":\")\n }, this.options));\n }\n }]);\n\n return Logger;\n}();\n\nvar baseLogger = new Logger();\n\nvar EventEmitter = function () {\n function EventEmitter() {\n _classCallCheck(this, EventEmitter);\n\n this.observers = {};\n }\n\n _createClass(EventEmitter, [{\n key: \"on\",\n value: function on(events, listener) {\n var _this = this;\n\n events.split(' ').forEach(function (event) {\n _this.observers[event] = _this.observers[event] || [];\n\n _this.observers[event].push(listener);\n });\n return this;\n }\n }, {\n key: \"off\",\n value: function off(event, listener) {\n if (!this.observers[event]) return;\n\n if (!listener) {\n delete this.observers[event];\n return;\n }\n\n this.observers[event] = this.observers[event].filter(function (l) {\n return l !== listener;\n });\n }\n }, {\n key: \"emit\",\n value: function emit(event) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n if (this.observers[event]) {\n var cloned = [].concat(this.observers[event]);\n cloned.forEach(function (observer) {\n observer.apply(void 0, args);\n });\n }\n\n if (this.observers['*']) {\n var _cloned = [].concat(this.observers['*']);\n\n _cloned.forEach(function (observer) {\n observer.apply(observer, [event].concat(args));\n });\n }\n }\n }]);\n\n return EventEmitter;\n}();\n\nfunction defer() {\n var res;\n var rej;\n var promise = new Promise(function (resolve, reject) {\n res = resolve;\n rej = reject;\n });\n promise.resolve = res;\n promise.reject = rej;\n return promise;\n}\nfunction makeString(object) {\n if (object == null) return '';\n return '' + object;\n}\nfunction copy(a, s, t) {\n a.forEach(function (m) {\n if (s[m]) t[m] = s[m];\n });\n}\n\nfunction getLastOfPath(object, path, Empty) {\n function cleanKey(key) {\n return key && key.indexOf('###') > -1 ? key.replace(/###/g, '.') : key;\n }\n\n function canNotTraverseDeeper() {\n return !object || typeof object === 'string';\n }\n\n var stack = typeof path !== 'string' ? [].concat(path) : path.split('.');\n\n while (stack.length > 1) {\n if (canNotTraverseDeeper()) return {};\n var key = cleanKey(stack.shift());\n if (!object[key] && Empty) object[key] = new Empty();\n\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n object = object[key];\n } else {\n object = {};\n }\n }\n\n if (canNotTraverseDeeper()) return {};\n return {\n obj: object,\n k: cleanKey(stack.shift())\n };\n}\n\nfunction setPath(object, path, newValue) {\n var _getLastOfPath = getLastOfPath(object, path, Object),\n obj = _getLastOfPath.obj,\n k = _getLastOfPath.k;\n\n obj[k] = newValue;\n}\nfunction pushPath(object, path, newValue, concat) {\n var _getLastOfPath2 = getLastOfPath(object, path, Object),\n obj = _getLastOfPath2.obj,\n k = _getLastOfPath2.k;\n\n obj[k] = obj[k] || [];\n if (concat) obj[k] = obj[k].concat(newValue);\n if (!concat) obj[k].push(newValue);\n}\nfunction getPath(object, path) {\n var _getLastOfPath3 = getLastOfPath(object, path),\n obj = _getLastOfPath3.obj,\n k = _getLastOfPath3.k;\n\n if (!obj) return undefined;\n return obj[k];\n}\nfunction getPathWithDefaults(data, defaultData, key) {\n var value = getPath(data, key);\n\n if (value !== undefined) {\n return value;\n }\n\n return getPath(defaultData, key);\n}\nfunction deepExtend(target, source, overwrite) {\n for (var prop in source) {\n if (prop !== '__proto__' && prop !== 'constructor') {\n if (prop in target) {\n if (typeof target[prop] === 'string' || target[prop] instanceof String || typeof source[prop] === 'string' || source[prop] instanceof String) {\n if (overwrite) target[prop] = source[prop];\n } else {\n deepExtend(target[prop], source[prop], overwrite);\n }\n } else {\n target[prop] = source[prop];\n }\n }\n }\n\n return target;\n}\nfunction regexEscape(str) {\n return str.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, '\\\\$&');\n}\nvar _entityMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '/': '/'\n};\nfunction escape(data) {\n if (typeof data === 'string') {\n return data.replace(/[&<>\"'\\/]/g, function (s) {\n return _entityMap[s];\n });\n }\n\n return data;\n}\nvar isIE10 = typeof window !== 'undefined' && window.navigator && window.navigator.userAgent && window.navigator.userAgent.indexOf('MSIE') > -1;\n\nvar ResourceStore = function (_EventEmitter) {\n _inherits(ResourceStore, _EventEmitter);\n\n function ResourceStore(data) {\n var _this;\n\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n ns: ['translation'],\n defaultNS: 'translation'\n };\n\n _classCallCheck(this, ResourceStore);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(ResourceStore).call(this));\n\n if (isIE10) {\n EventEmitter.call(_assertThisInitialized(_this));\n }\n\n _this.data = data || {};\n _this.options = options;\n\n if (_this.options.keySeparator === undefined) {\n _this.options.keySeparator = '.';\n }\n\n return _this;\n }\n\n _createClass(ResourceStore, [{\n key: \"addNamespaces\",\n value: function addNamespaces(ns) {\n if (this.options.ns.indexOf(ns) < 0) {\n this.options.ns.push(ns);\n }\n }\n }, {\n key: \"removeNamespaces\",\n value: function removeNamespaces(ns) {\n var index = this.options.ns.indexOf(ns);\n\n if (index > -1) {\n this.options.ns.splice(index, 1);\n }\n }\n }, {\n key: \"getResource\",\n value: function getResource(lng, ns, key) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n var path = [lng, ns];\n if (key && typeof key !== 'string') path = path.concat(key);\n if (key && typeof key === 'string') path = path.concat(keySeparator ? key.split(keySeparator) : key);\n\n if (lng.indexOf('.') > -1) {\n path = lng.split('.');\n }\n\n return getPath(this.data, path);\n }\n }, {\n key: \"addResource\",\n value: function addResource(lng, ns, key, value) {\n var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {\n silent: false\n };\n var keySeparator = this.options.keySeparator;\n if (keySeparator === undefined) keySeparator = '.';\n var path = [lng, ns];\n if (key) path = path.concat(keySeparator ? key.split(keySeparator) : key);\n\n if (lng.indexOf('.') > -1) {\n path = lng.split('.');\n value = ns;\n ns = path[1];\n }\n\n this.addNamespaces(ns);\n setPath(this.data, path, value);\n if (!options.silent) this.emit('added', lng, ns, key, value);\n }\n }, {\n key: \"addResources\",\n value: function addResources(lng, ns, resources) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {\n silent: false\n };\n\n for (var m in resources) {\n if (typeof resources[m] === 'string' || Object.prototype.toString.apply(resources[m]) === '[object Array]') this.addResource(lng, ns, m, resources[m], {\n silent: true\n });\n }\n\n if (!options.silent) this.emit('added', lng, ns, resources);\n }\n }, {\n key: \"addResourceBundle\",\n value: function addResourceBundle(lng, ns, resources, deep, overwrite) {\n var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {\n silent: false\n };\n var path = [lng, ns];\n\n if (lng.indexOf('.') > -1) {\n path = lng.split('.');\n deep = resources;\n resources = ns;\n ns = path[1];\n }\n\n this.addNamespaces(ns);\n var pack = getPath(this.data, path) || {};\n\n if (deep) {\n deepExtend(pack, resources, overwrite);\n } else {\n pack = _objectSpread({}, pack, resources);\n }\n\n setPath(this.data, path, pack);\n if (!options.silent) this.emit('added', lng, ns, resources);\n }\n }, {\n key: \"removeResourceBundle\",\n value: function removeResourceBundle(lng, ns) {\n if (this.hasResourceBundle(lng, ns)) {\n delete this.data[lng][ns];\n }\n\n this.removeNamespaces(ns);\n this.emit('removed', lng, ns);\n }\n }, {\n key: \"hasResourceBundle\",\n value: function hasResourceBundle(lng, ns) {\n return this.getResource(lng, ns) !== undefined;\n }\n }, {\n key: \"getResourceBundle\",\n value: function getResourceBundle(lng, ns) {\n if (!ns) ns = this.options.defaultNS;\n if (this.options.compatibilityAPI === 'v1') return _objectSpread({}, {}, this.getResource(lng, ns));\n return this.getResource(lng, ns);\n }\n }, {\n key: \"getDataByLanguage\",\n value: function getDataByLanguage(lng) {\n return this.data[lng];\n }\n }, {\n key: \"toJSON\",\n value: function toJSON() {\n return this.data;\n }\n }]);\n\n return ResourceStore;\n}(EventEmitter);\n\nvar postProcessor = {\n processors: {},\n addPostProcessor: function addPostProcessor(module) {\n this.processors[module.name] = module;\n },\n handle: function handle(processors, value, key, options, translator) {\n var _this = this;\n\n processors.forEach(function (processor) {\n if (_this.processors[processor]) value = _this.processors[processor].process(value, key, options, translator);\n });\n return value;\n }\n};\n\nvar checkedLoadedFor = {};\n\nvar Translator = function (_EventEmitter) {\n _inherits(Translator, _EventEmitter);\n\n function Translator(services) {\n var _this;\n\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n _classCallCheck(this, Translator);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(Translator).call(this));\n\n if (isIE10) {\n EventEmitter.call(_assertThisInitialized(_this));\n }\n\n copy(['resourceStore', 'languageUtils', 'pluralResolver', 'interpolator', 'backendConnector', 'i18nFormat', 'utils'], services, _assertThisInitialized(_this));\n _this.options = options;\n\n if (_this.options.keySeparator === undefined) {\n _this.options.keySeparator = '.';\n }\n\n _this.logger = baseLogger.create('translator');\n return _this;\n }\n\n _createClass(Translator, [{\n key: \"changeLanguage\",\n value: function changeLanguage(lng) {\n if (lng) this.language = lng;\n }\n }, {\n key: \"exists\",\n value: function exists(key) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n interpolation: {}\n };\n var resolved = this.resolve(key, options);\n return resolved && resolved.res !== undefined;\n }\n }, {\n key: \"extractFromKey\",\n value: function extractFromKey(key, options) {\n var nsSeparator = options.nsSeparator !== undefined ? options.nsSeparator : this.options.nsSeparator;\n if (nsSeparator === undefined) nsSeparator = ':';\n var keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n var namespaces = options.ns || this.options.defaultNS;\n\n if (nsSeparator && key.indexOf(nsSeparator) > -1) {\n var m = key.match(this.interpolator.nestingRegexp);\n\n if (m && m.length > 0) {\n return {\n key: key,\n namespaces: namespaces\n };\n }\n\n var parts = key.split(nsSeparator);\n if (nsSeparator !== keySeparator || nsSeparator === keySeparator && this.options.ns.indexOf(parts[0]) > -1) namespaces = parts.shift();\n key = parts.join(keySeparator);\n }\n\n if (typeof namespaces === 'string') namespaces = [namespaces];\n return {\n key: key,\n namespaces: namespaces\n };\n }\n }, {\n key: \"translate\",\n value: function translate(keys, options, lastKey) {\n var _this2 = this;\n\n if (_typeof(options) !== 'object' && this.options.overloadTranslationOptionHandler) {\n options = this.options.overloadTranslationOptionHandler(arguments);\n }\n\n if (!options) options = {};\n if (keys === undefined || keys === null) return '';\n if (!Array.isArray(keys)) keys = [String(keys)];\n var keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n\n var _this$extractFromKey = this.extractFromKey(keys[keys.length - 1], options),\n key = _this$extractFromKey.key,\n namespaces = _this$extractFromKey.namespaces;\n\n var namespace = namespaces[namespaces.length - 1];\n var lng = options.lng || this.language;\n var appendNamespaceToCIMode = options.appendNamespaceToCIMode || this.options.appendNamespaceToCIMode;\n\n if (lng && lng.toLowerCase() === 'cimode') {\n if (appendNamespaceToCIMode) {\n var nsSeparator = options.nsSeparator || this.options.nsSeparator;\n return namespace + nsSeparator + key;\n }\n\n return key;\n }\n\n var resolved = this.resolve(keys, options);\n var res = resolved && resolved.res;\n var resUsedKey = resolved && resolved.usedKey || key;\n var resExactUsedKey = resolved && resolved.exactUsedKey || key;\n var resType = Object.prototype.toString.apply(res);\n var noObject = ['[object Number]', '[object Function]', '[object RegExp]'];\n var joinArrays = options.joinArrays !== undefined ? options.joinArrays : this.options.joinArrays;\n var handleAsObjectInI18nFormat = !this.i18nFormat || this.i18nFormat.handleAsObject;\n var handleAsObject = typeof res !== 'string' && typeof res !== 'boolean' && typeof res !== 'number';\n\n if (handleAsObjectInI18nFormat && res && handleAsObject && noObject.indexOf(resType) < 0 && !(typeof joinArrays === 'string' && resType === '[object Array]')) {\n if (!options.returnObjects && !this.options.returnObjects) {\n this.logger.warn('accessing an object - but returnObjects options is not enabled!');\n return this.options.returnedObjectHandler ? this.options.returnedObjectHandler(resUsedKey, res, options) : \"key '\".concat(key, \" (\").concat(this.language, \")' returned an object instead of string.\");\n }\n\n if (keySeparator) {\n var resTypeIsArray = resType === '[object Array]';\n var copy = resTypeIsArray ? [] : {};\n var newKeyToUse = resTypeIsArray ? resExactUsedKey : resUsedKey;\n\n for (var m in res) {\n if (Object.prototype.hasOwnProperty.call(res, m)) {\n var deepKey = \"\".concat(newKeyToUse).concat(keySeparator).concat(m);\n copy[m] = this.translate(deepKey, _objectSpread({}, options, {\n joinArrays: false,\n ns: namespaces\n }));\n if (copy[m] === deepKey) copy[m] = res[m];\n }\n }\n\n res = copy;\n }\n } else if (handleAsObjectInI18nFormat && typeof joinArrays === 'string' && resType === '[object Array]') {\n res = res.join(joinArrays);\n if (res) res = this.extendTranslation(res, keys, options, lastKey);\n } else {\n var usedDefault = false;\n var usedKey = false;\n var needsPluralHandling = options.count !== undefined && typeof options.count !== 'string';\n var hasDefaultValue = Translator.hasDefaultValue(options);\n var defaultValueSuffix = needsPluralHandling ? this.pluralResolver.getSuffix(lng, options.count) : '';\n var defaultValue = options[\"defaultValue\".concat(defaultValueSuffix)] || options.defaultValue;\n\n if (!this.isValidLookup(res) && hasDefaultValue) {\n usedDefault = true;\n res = defaultValue;\n }\n\n if (!this.isValidLookup(res)) {\n usedKey = true;\n res = key;\n }\n\n var updateMissing = hasDefaultValue && defaultValue !== res && this.options.updateMissing;\n\n if (usedKey || usedDefault || updateMissing) {\n this.logger.log(updateMissing ? 'updateKey' : 'missingKey', lng, namespace, key, updateMissing ? defaultValue : res);\n\n if (keySeparator) {\n var fk = this.resolve(key, _objectSpread({}, options, {\n keySeparator: false\n }));\n if (fk && fk.res) this.logger.warn('Seems the loaded translations were in flat JSON format instead of nested. Either set keySeparator: false on init or make sure your translations are published in nested format.');\n }\n\n var lngs = [];\n var fallbackLngs = this.languageUtils.getFallbackCodes(this.options.fallbackLng, options.lng || this.language);\n\n if (this.options.saveMissingTo === 'fallback' && fallbackLngs && fallbackLngs[0]) {\n for (var i = 0; i < fallbackLngs.length; i++) {\n lngs.push(fallbackLngs[i]);\n }\n } else if (this.options.saveMissingTo === 'all') {\n lngs = this.languageUtils.toResolveHierarchy(options.lng || this.language);\n } else {\n lngs.push(options.lng || this.language);\n }\n\n var send = function send(l, k, fallbackValue) {\n if (_this2.options.missingKeyHandler) {\n _this2.options.missingKeyHandler(l, namespace, k, updateMissing ? fallbackValue : res, updateMissing, options);\n } else if (_this2.backendConnector && _this2.backendConnector.saveMissing) {\n _this2.backendConnector.saveMissing(l, namespace, k, updateMissing ? fallbackValue : res, updateMissing, options);\n }\n\n _this2.emit('missingKey', l, namespace, k, res);\n };\n\n if (this.options.saveMissing) {\n if (this.options.saveMissingPlurals && needsPluralHandling) {\n lngs.forEach(function (language) {\n _this2.pluralResolver.getSuffixes(language).forEach(function (suffix) {\n send([language], key + suffix, options[\"defaultValue\".concat(suffix)] || defaultValue);\n });\n });\n } else {\n send(lngs, key, defaultValue);\n }\n }\n }\n\n res = this.extendTranslation(res, keys, options, resolved, lastKey);\n if (usedKey && res === key && this.options.appendNamespaceToMissingKey) res = \"\".concat(namespace, \":\").concat(key);\n if (usedKey && this.options.parseMissingKeyHandler) res = this.options.parseMissingKeyHandler(res);\n }\n\n return res;\n }\n }, {\n key: \"extendTranslation\",\n value: function extendTranslation(res, key, options, resolved, lastKey) {\n var _this3 = this;\n\n if (this.i18nFormat && this.i18nFormat.parse) {\n res = this.i18nFormat.parse(res, options, resolved.usedLng, resolved.usedNS, resolved.usedKey, {\n resolved: resolved\n });\n } else if (!options.skipInterpolation) {\n if (options.interpolation) this.interpolator.init(_objectSpread({}, options, {\n interpolation: _objectSpread({}, this.options.interpolation, options.interpolation)\n }));\n var skipOnVariables = options.interpolation && options.interpolation.skipOnVariables || this.options.interpolation.skipOnVariables;\n var nestBef;\n\n if (skipOnVariables) {\n var nb = res.match(this.interpolator.nestingRegexp);\n nestBef = nb && nb.length;\n }\n\n var data = options.replace && typeof options.replace !== 'string' ? options.replace : options;\n if (this.options.interpolation.defaultVariables) data = _objectSpread({}, this.options.interpolation.defaultVariables, data);\n res = this.interpolator.interpolate(res, data, options.lng || this.language, options);\n\n if (skipOnVariables) {\n var na = res.match(this.interpolator.nestingRegexp);\n var nestAft = na && na.length;\n if (nestBef < nestAft) options.nest = false;\n }\n\n if (options.nest !== false) res = this.interpolator.nest(res, function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n if (lastKey && lastKey[0] === args[0] && !options.context) {\n _this3.logger.warn(\"It seems you are nesting recursively key: \".concat(args[0], \" in key: \").concat(key[0]));\n\n return null;\n }\n\n return _this3.translate.apply(_this3, args.concat([key]));\n }, options);\n if (options.interpolation) this.interpolator.reset();\n }\n\n var postProcess = options.postProcess || this.options.postProcess;\n var postProcessorNames = typeof postProcess === 'string' ? [postProcess] : postProcess;\n\n if (res !== undefined && res !== null && postProcessorNames && postProcessorNames.length && options.applyPostProcessor !== false) {\n res = postProcessor.handle(postProcessorNames, res, key, this.options && this.options.postProcessPassResolved ? _objectSpread({\n i18nResolved: resolved\n }, options) : options, this);\n }\n\n return res;\n }\n }, {\n key: \"resolve\",\n value: function resolve(keys) {\n var _this4 = this;\n\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var found;\n var usedKey;\n var exactUsedKey;\n var usedLng;\n var usedNS;\n if (typeof keys === 'string') keys = [keys];\n keys.forEach(function (k) {\n if (_this4.isValidLookup(found)) return;\n\n var extracted = _this4.extractFromKey(k, options);\n\n var key = extracted.key;\n usedKey = key;\n var namespaces = extracted.namespaces;\n if (_this4.options.fallbackNS) namespaces = namespaces.concat(_this4.options.fallbackNS);\n var needsPluralHandling = options.count !== undefined && typeof options.count !== 'string';\n var needsContextHandling = options.context !== undefined && typeof options.context === 'string' && options.context !== '';\n var codes = options.lngs ? options.lngs : _this4.languageUtils.toResolveHierarchy(options.lng || _this4.language, options.fallbackLng);\n namespaces.forEach(function (ns) {\n if (_this4.isValidLookup(found)) return;\n usedNS = ns;\n\n if (!checkedLoadedFor[\"\".concat(codes[0], \"-\").concat(ns)] && _this4.utils && _this4.utils.hasLoadedNamespace && !_this4.utils.hasLoadedNamespace(usedNS)) {\n checkedLoadedFor[\"\".concat(codes[0], \"-\").concat(ns)] = true;\n\n _this4.logger.warn(\"key \\\"\".concat(usedKey, \"\\\" for languages \\\"\").concat(codes.join(', '), \"\\\" won't get resolved as namespace \\\"\").concat(usedNS, \"\\\" was not yet loaded\"), 'This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!');\n }\n\n codes.forEach(function (code) {\n if (_this4.isValidLookup(found)) return;\n usedLng = code;\n var finalKey = key;\n var finalKeys = [finalKey];\n\n if (_this4.i18nFormat && _this4.i18nFormat.addLookupKeys) {\n _this4.i18nFormat.addLookupKeys(finalKeys, key, code, ns, options);\n } else {\n var pluralSuffix;\n if (needsPluralHandling) pluralSuffix = _this4.pluralResolver.getSuffix(code, options.count);\n if (needsPluralHandling && needsContextHandling) finalKeys.push(finalKey + pluralSuffix);\n if (needsContextHandling) finalKeys.push(finalKey += \"\".concat(_this4.options.contextSeparator).concat(options.context));\n if (needsPluralHandling) finalKeys.push(finalKey += pluralSuffix);\n }\n\n var possibleKey;\n\n while (possibleKey = finalKeys.pop()) {\n if (!_this4.isValidLookup(found)) {\n exactUsedKey = possibleKey;\n found = _this4.getResource(code, ns, possibleKey, options);\n }\n }\n });\n });\n });\n return {\n res: found,\n usedKey: usedKey,\n exactUsedKey: exactUsedKey,\n usedLng: usedLng,\n usedNS: usedNS\n };\n }\n }, {\n key: \"isValidLookup\",\n value: function isValidLookup(res) {\n return res !== undefined && !(!this.options.returnNull && res === null) && !(!this.options.returnEmptyString && res === '');\n }\n }, {\n key: \"getResource\",\n value: function getResource(code, ns, key) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n if (this.i18nFormat && this.i18nFormat.getResource) return this.i18nFormat.getResource(code, ns, key, options);\n return this.resourceStore.getResource(code, ns, key, options);\n }\n }], [{\n key: \"hasDefaultValue\",\n value: function hasDefaultValue(options) {\n var prefix = 'defaultValue';\n\n for (var option in options) {\n if (Object.prototype.hasOwnProperty.call(options, option) && prefix === option.substring(0, prefix.length) && undefined !== options[option]) {\n return true;\n }\n }\n\n return false;\n }\n }]);\n\n return Translator;\n}(EventEmitter);\n\nfunction capitalize(string) {\n return string.charAt(0).toUpperCase() + string.slice(1);\n}\n\nvar LanguageUtil = function () {\n function LanguageUtil(options) {\n _classCallCheck(this, LanguageUtil);\n\n this.options = options;\n this.whitelist = this.options.supportedLngs || false;\n this.supportedLngs = this.options.supportedLngs || false;\n this.logger = baseLogger.create('languageUtils');\n }\n\n _createClass(LanguageUtil, [{\n key: \"getScriptPartFromCode\",\n value: function getScriptPartFromCode(code) {\n if (!code || code.indexOf('-') < 0) return null;\n var p = code.split('-');\n if (p.length === 2) return null;\n p.pop();\n if (p[p.length - 1].toLowerCase() === 'x') return null;\n return this.formatLanguageCode(p.join('-'));\n }\n }, {\n key: \"getLanguagePartFromCode\",\n value: function getLanguagePartFromCode(code) {\n if (!code || code.indexOf('-') < 0) return code;\n var p = code.split('-');\n return this.formatLanguageCode(p[0]);\n }\n }, {\n key: \"formatLanguageCode\",\n value: function formatLanguageCode(code) {\n if (typeof code === 'string' && code.indexOf('-') > -1) {\n var specialCases = ['hans', 'hant', 'latn', 'cyrl', 'cans', 'mong', 'arab'];\n var p = code.split('-');\n\n if (this.options.lowerCaseLng) {\n p = p.map(function (part) {\n return part.toLowerCase();\n });\n } else if (p.length === 2) {\n p[0] = p[0].toLowerCase();\n p[1] = p[1].toUpperCase();\n if (specialCases.indexOf(p[1].toLowerCase()) > -1) p[1] = capitalize(p[1].toLowerCase());\n } else if (p.length === 3) {\n p[0] = p[0].toLowerCase();\n if (p[1].length === 2) p[1] = p[1].toUpperCase();\n if (p[0] !== 'sgn' && p[2].length === 2) p[2] = p[2].toUpperCase();\n if (specialCases.indexOf(p[1].toLowerCase()) > -1) p[1] = capitalize(p[1].toLowerCase());\n if (specialCases.indexOf(p[2].toLowerCase()) > -1) p[2] = capitalize(p[2].toLowerCase());\n }\n\n return p.join('-');\n }\n\n return this.options.cleanCode || this.options.lowerCaseLng ? code.toLowerCase() : code;\n }\n }, {\n key: \"isWhitelisted\",\n value: function isWhitelisted(code) {\n this.logger.deprecate('languageUtils.isWhitelisted', 'function \"isWhitelisted\" will be renamed to \"isSupportedCode\" in the next major - please make sure to rename it\\'s usage asap.');\n return this.isSupportedCode(code);\n }\n }, {\n key: \"isSupportedCode\",\n value: function isSupportedCode(code) {\n if (this.options.load === 'languageOnly' || this.options.nonExplicitSupportedLngs) {\n code = this.getLanguagePartFromCode(code);\n }\n\n return !this.supportedLngs || !this.supportedLngs.length || this.supportedLngs.indexOf(code) > -1;\n }\n }, {\n key: \"getBestMatchFromCodes\",\n value: function getBestMatchFromCodes(codes) {\n var _this = this;\n\n if (!codes) return null;\n var found;\n codes.forEach(function (code) {\n if (found) return;\n\n var cleanedLng = _this.formatLanguageCode(code);\n\n if (!_this.options.supportedLngs || _this.isSupportedCode(cleanedLng)) found = cleanedLng;\n });\n\n if (!found && this.options.supportedLngs) {\n codes.forEach(function (code) {\n if (found) return;\n\n var lngOnly = _this.getLanguagePartFromCode(code);\n\n if (_this.isSupportedCode(lngOnly)) return found = lngOnly;\n found = _this.options.supportedLngs.find(function (supportedLng) {\n if (supportedLng.indexOf(lngOnly) === 0) return supportedLng;\n });\n });\n }\n\n if (!found) found = this.getFallbackCodes(this.options.fallbackLng)[0];\n return found;\n }\n }, {\n key: \"getFallbackCodes\",\n value: function getFallbackCodes(fallbacks, code) {\n if (!fallbacks) return [];\n if (typeof fallbacks === 'function') fallbacks = fallbacks(code);\n if (typeof fallbacks === 'string') fallbacks = [fallbacks];\n if (Object.prototype.toString.apply(fallbacks) === '[object Array]') return fallbacks;\n if (!code) return fallbacks[\"default\"] || [];\n var found = fallbacks[code];\n if (!found) found = fallbacks[this.getScriptPartFromCode(code)];\n if (!found) found = fallbacks[this.formatLanguageCode(code)];\n if (!found) found = fallbacks[this.getLanguagePartFromCode(code)];\n if (!found) found = fallbacks[\"default\"];\n return found || [];\n }\n }, {\n key: \"toResolveHierarchy\",\n value: function toResolveHierarchy(code, fallbackCode) {\n var _this2 = this;\n\n var fallbackCodes = this.getFallbackCodes(fallbackCode || this.options.fallbackLng || [], code);\n var codes = [];\n\n var addCode = function addCode(c) {\n if (!c) return;\n\n if (_this2.isSupportedCode(c)) {\n codes.push(c);\n } else {\n _this2.logger.warn(\"rejecting language code not found in supportedLngs: \".concat(c));\n }\n };\n\n if (typeof code === 'string' && code.indexOf('-') > -1) {\n if (this.options.load !== 'languageOnly') addCode(this.formatLanguageCode(code));\n if (this.options.load !== 'languageOnly' && this.options.load !== 'currentOnly') addCode(this.getScriptPartFromCode(code));\n if (this.options.load !== 'currentOnly') addCode(this.getLanguagePartFromCode(code));\n } else if (typeof code === 'string') {\n addCode(this.formatLanguageCode(code));\n }\n\n fallbackCodes.forEach(function (fc) {\n if (codes.indexOf(fc) < 0) addCode(_this2.formatLanguageCode(fc));\n });\n return codes;\n }\n }]);\n\n return LanguageUtil;\n}();\n\nvar sets = [{\n lngs: ['ach', 'ak', 'am', 'arn', 'br', 'fil', 'gun', 'ln', 'mfe', 'mg', 'mi', 'oc', 'pt', 'pt-BR', 'tg', 'tl', 'ti', 'tr', 'uz', 'wa'],\n nr: [1, 2],\n fc: 1\n}, {\n lngs: ['af', 'an', 'ast', 'az', 'bg', 'bn', 'ca', 'da', 'de', 'dev', 'el', 'en', 'eo', 'es', 'et', 'eu', 'fi', 'fo', 'fur', 'fy', 'gl', 'gu', 'ha', 'hi', 'hu', 'hy', 'ia', 'it', 'kn', 'ku', 'lb', 'mai', 'ml', 'mn', 'mr', 'nah', 'nap', 'nb', 'ne', 'nl', 'nn', 'no', 'nso', 'pa', 'pap', 'pms', 'ps', 'pt-PT', 'rm', 'sco', 'se', 'si', 'so', 'son', 'sq', 'sv', 'sw', 'ta', 'te', 'tk', 'ur', 'yo'],\n nr: [1, 2],\n fc: 2\n}, {\n lngs: ['ay', 'bo', 'cgg', 'fa', 'ht', 'id', 'ja', 'jbo', 'ka', 'kk', 'km', 'ko', 'ky', 'lo', 'ms', 'sah', 'su', 'th', 'tt', 'ug', 'vi', 'wo', 'zh'],\n nr: [1],\n fc: 3\n}, {\n lngs: ['be', 'bs', 'cnr', 'dz', 'hr', 'ru', 'sr', 'uk'],\n nr: [1, 2, 5],\n fc: 4\n}, {\n lngs: ['ar'],\n nr: [0, 1, 2, 3, 11, 100],\n fc: 5\n}, {\n lngs: ['cs', 'sk'],\n nr: [1, 2, 5],\n fc: 6\n}, {\n lngs: ['csb', 'pl'],\n nr: [1, 2, 5],\n fc: 7\n}, {\n lngs: ['cy'],\n nr: [1, 2, 3, 8],\n fc: 8\n}, {\n lngs: ['fr'],\n nr: [1, 2],\n fc: 9\n}, {\n lngs: ['ga'],\n nr: [1, 2, 3, 7, 11],\n fc: 10\n}, {\n lngs: ['gd'],\n nr: [1, 2, 3, 20],\n fc: 11\n}, {\n lngs: ['is'],\n nr: [1, 2],\n fc: 12\n}, {\n lngs: ['jv'],\n nr: [0, 1],\n fc: 13\n}, {\n lngs: ['kw'],\n nr: [1, 2, 3, 4],\n fc: 14\n}, {\n lngs: ['lt'],\n nr: [1, 2, 10],\n fc: 15\n}, {\n lngs: ['lv'],\n nr: [1, 2, 0],\n fc: 16\n}, {\n lngs: ['mk'],\n nr: [1, 2],\n fc: 17\n}, {\n lngs: ['mnk'],\n nr: [0, 1, 2],\n fc: 18\n}, {\n lngs: ['mt'],\n nr: [1, 2, 11, 20],\n fc: 19\n}, {\n lngs: ['or'],\n nr: [2, 1],\n fc: 2\n}, {\n lngs: ['ro'],\n nr: [1, 2, 20],\n fc: 20\n}, {\n lngs: ['sl'],\n nr: [5, 1, 2, 3],\n fc: 21\n}, {\n lngs: ['he', 'iw'],\n nr: [1, 2, 20, 21],\n fc: 22\n}];\nvar _rulesPluralsTypes = {\n 1: function _(n) {\n return Number(n > 1);\n },\n 2: function _(n) {\n return Number(n != 1);\n },\n 3: function _(n) {\n return 0;\n },\n 4: function _(n) {\n return Number(n % 10 == 1 && n % 100 != 11 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2);\n },\n 5: function _(n) {\n return Number(n == 0 ? 0 : n == 1 ? 1 : n == 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5);\n },\n 6: function _(n) {\n return Number(n == 1 ? 0 : n >= 2 && n <= 4 ? 1 : 2);\n },\n 7: function _(n) {\n return Number(n == 1 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2);\n },\n 8: function _(n) {\n return Number(n == 1 ? 0 : n == 2 ? 1 : n != 8 && n != 11 ? 2 : 3);\n },\n 9: function _(n) {\n return Number(n >= 2);\n },\n 10: function _(n) {\n return Number(n == 1 ? 0 : n == 2 ? 1 : n < 7 ? 2 : n < 11 ? 3 : 4);\n },\n 11: function _(n) {\n return Number(n == 1 || n == 11 ? 0 : n == 2 || n == 12 ? 1 : n > 2 && n < 20 ? 2 : 3);\n },\n 12: function _(n) {\n return Number(n % 10 != 1 || n % 100 == 11);\n },\n 13: function _(n) {\n return Number(n !== 0);\n },\n 14: function _(n) {\n return Number(n == 1 ? 0 : n == 2 ? 1 : n == 3 ? 2 : 3);\n },\n 15: function _(n) {\n return Number(n % 10 == 1 && n % 100 != 11 ? 0 : n % 10 >= 2 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2);\n },\n 16: function _(n) {\n return Number(n % 10 == 1 && n % 100 != 11 ? 0 : n !== 0 ? 1 : 2);\n },\n 17: function _(n) {\n return Number(n == 1 || n % 10 == 1 && n % 100 != 11 ? 0 : 1);\n },\n 18: function _(n) {\n return Number(n == 0 ? 0 : n == 1 ? 1 : 2);\n },\n 19: function _(n) {\n return Number(n == 1 ? 0 : n == 0 || n % 100 > 1 && n % 100 < 11 ? 1 : n % 100 > 10 && n % 100 < 20 ? 2 : 3);\n },\n 20: function _(n) {\n return Number(n == 1 ? 0 : n == 0 || n % 100 > 0 && n % 100 < 20 ? 1 : 2);\n },\n 21: function _(n) {\n return Number(n % 100 == 1 ? 1 : n % 100 == 2 ? 2 : n % 100 == 3 || n % 100 == 4 ? 3 : 0);\n },\n 22: function _(n) {\n return Number(n == 1 ? 0 : n == 2 ? 1 : (n < 0 || n > 10) && n % 10 == 0 ? 2 : 3);\n }\n};\n\nfunction createRules() {\n var rules = {};\n sets.forEach(function (set) {\n set.lngs.forEach(function (l) {\n rules[l] = {\n numbers: set.nr,\n plurals: _rulesPluralsTypes[set.fc]\n };\n });\n });\n return rules;\n}\n\nvar PluralResolver = function () {\n function PluralResolver(languageUtils) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n _classCallCheck(this, PluralResolver);\n\n this.languageUtils = languageUtils;\n this.options = options;\n this.logger = baseLogger.create('pluralResolver');\n this.rules = createRules();\n }\n\n _createClass(PluralResolver, [{\n key: \"addRule\",\n value: function addRule(lng, obj) {\n this.rules[lng] = obj;\n }\n }, {\n key: \"getRule\",\n value: function getRule(code) {\n return this.rules[code] || this.rules[this.languageUtils.getLanguagePartFromCode(code)];\n }\n }, {\n key: \"needsPlural\",\n value: function needsPlural(code) {\n var rule = this.getRule(code);\n return rule && rule.numbers.length > 1;\n }\n }, {\n key: \"getPluralFormsOfKey\",\n value: function getPluralFormsOfKey(code, key) {\n return this.getSuffixes(code).map(function (suffix) {\n return key + suffix;\n });\n }\n }, {\n key: \"getSuffixes\",\n value: function getSuffixes(code) {\n var _this = this;\n\n var rule = this.getRule(code);\n\n if (!rule) {\n return [];\n }\n\n return rule.numbers.map(function (number) {\n return _this.getSuffix(code, number);\n });\n }\n }, {\n key: \"getSuffix\",\n value: function getSuffix(code, count) {\n var _this2 = this;\n\n var rule = this.getRule(code);\n\n if (rule) {\n var idx = rule.noAbs ? rule.plurals(count) : rule.plurals(Math.abs(count));\n var suffix = rule.numbers[idx];\n\n if (this.options.simplifyPluralSuffix && rule.numbers.length === 2 && rule.numbers[0] === 1) {\n if (suffix === 2) {\n suffix = 'plural';\n } else if (suffix === 1) {\n suffix = '';\n }\n }\n\n var returnSuffix = function returnSuffix() {\n return _this2.options.prepend && suffix.toString() ? _this2.options.prepend + suffix.toString() : suffix.toString();\n };\n\n if (this.options.compatibilityJSON === 'v1') {\n if (suffix === 1) return '';\n if (typeof suffix === 'number') return \"_plural_\".concat(suffix.toString());\n return returnSuffix();\n } else if (this.options.compatibilityJSON === 'v2') {\n return returnSuffix();\n } else if (this.options.simplifyPluralSuffix && rule.numbers.length === 2 && rule.numbers[0] === 1) {\n return returnSuffix();\n }\n\n return this.options.prepend && idx.toString() ? this.options.prepend + idx.toString() : idx.toString();\n }\n\n this.logger.warn(\"no plural rule found for: \".concat(code));\n return '';\n }\n }]);\n\n return PluralResolver;\n}();\n\nvar Interpolator = function () {\n function Interpolator() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n _classCallCheck(this, Interpolator);\n\n this.logger = baseLogger.create('interpolator');\n this.options = options;\n\n this.format = options.interpolation && options.interpolation.format || function (value) {\n return value;\n };\n\n this.init(options);\n }\n\n _createClass(Interpolator, [{\n key: \"init\",\n value: function init() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n if (!options.interpolation) options.interpolation = {\n escapeValue: true\n };\n var iOpts = options.interpolation;\n this.escape = iOpts.escape !== undefined ? iOpts.escape : escape;\n this.escapeValue = iOpts.escapeValue !== undefined ? iOpts.escapeValue : true;\n this.useRawValueToEscape = iOpts.useRawValueToEscape !== undefined ? iOpts.useRawValueToEscape : false;\n this.prefix = iOpts.prefix ? regexEscape(iOpts.prefix) : iOpts.prefixEscaped || '{{';\n this.suffix = iOpts.suffix ? regexEscape(iOpts.suffix) : iOpts.suffixEscaped || '}}';\n this.formatSeparator = iOpts.formatSeparator ? iOpts.formatSeparator : iOpts.formatSeparator || ',';\n this.unescapePrefix = iOpts.unescapeSuffix ? '' : iOpts.unescapePrefix || '-';\n this.unescapeSuffix = this.unescapePrefix ? '' : iOpts.unescapeSuffix || '';\n this.nestingPrefix = iOpts.nestingPrefix ? regexEscape(iOpts.nestingPrefix) : iOpts.nestingPrefixEscaped || regexEscape('$t(');\n this.nestingSuffix = iOpts.nestingSuffix ? regexEscape(iOpts.nestingSuffix) : iOpts.nestingSuffixEscaped || regexEscape(')');\n this.nestingOptionsSeparator = iOpts.nestingOptionsSeparator ? iOpts.nestingOptionsSeparator : iOpts.nestingOptionsSeparator || ',';\n this.maxReplaces = iOpts.maxReplaces ? iOpts.maxReplaces : 1000;\n this.alwaysFormat = iOpts.alwaysFormat !== undefined ? iOpts.alwaysFormat : false;\n this.resetRegExp();\n }\n }, {\n key: \"reset\",\n value: function reset() {\n if (this.options) this.init(this.options);\n }\n }, {\n key: \"resetRegExp\",\n value: function resetRegExp() {\n var regexpStr = \"\".concat(this.prefix, \"(.+?)\").concat(this.suffix);\n this.regexp = new RegExp(regexpStr, 'g');\n var regexpUnescapeStr = \"\".concat(this.prefix).concat(this.unescapePrefix, \"(.+?)\").concat(this.unescapeSuffix).concat(this.suffix);\n this.regexpUnescape = new RegExp(regexpUnescapeStr, 'g');\n var nestingRegexpStr = \"\".concat(this.nestingPrefix, \"(.+?)\").concat(this.nestingSuffix);\n this.nestingRegexp = new RegExp(nestingRegexpStr, 'g');\n }\n }, {\n key: \"interpolate\",\n value: function interpolate(str, data, lng, options) {\n var _this = this;\n\n var match;\n var value;\n var replaces;\n var defaultData = this.options && this.options.interpolation && this.options.interpolation.defaultVariables || {};\n\n function regexSafe(val) {\n return val.replace(/\\$/g, '$$$$');\n }\n\n var handleFormat = function handleFormat(key) {\n if (key.indexOf(_this.formatSeparator) < 0) {\n var path = getPathWithDefaults(data, defaultData, key);\n return _this.alwaysFormat ? _this.format(path, undefined, lng) : path;\n }\n\n var p = key.split(_this.formatSeparator);\n var k = p.shift().trim();\n var f = p.join(_this.formatSeparator).trim();\n return _this.format(getPathWithDefaults(data, defaultData, k), f, lng, options);\n };\n\n this.resetRegExp();\n var missingInterpolationHandler = options && options.missingInterpolationHandler || this.options.missingInterpolationHandler;\n var skipOnVariables = options && options.interpolation && options.interpolation.skipOnVariables || this.options.interpolation.skipOnVariables;\n var todos = [{\n regex: this.regexpUnescape,\n safeValue: function safeValue(val) {\n return regexSafe(val);\n }\n }, {\n regex: this.regexp,\n safeValue: function safeValue(val) {\n return _this.escapeValue ? regexSafe(_this.escape(val)) : regexSafe(val);\n }\n }];\n todos.forEach(function (todo) {\n replaces = 0;\n\n while (match = todo.regex.exec(str)) {\n value = handleFormat(match[1].trim());\n\n if (value === undefined) {\n if (typeof missingInterpolationHandler === 'function') {\n var temp = missingInterpolationHandler(str, match, options);\n value = typeof temp === 'string' ? temp : '';\n } else if (skipOnVariables) {\n value = match[0];\n continue;\n } else {\n _this.logger.warn(\"missed to pass in variable \".concat(match[1], \" for interpolating \").concat(str));\n\n value = '';\n }\n } else if (typeof value !== 'string' && !_this.useRawValueToEscape) {\n value = makeString(value);\n }\n\n str = str.replace(match[0], todo.safeValue(value));\n todo.regex.lastIndex = 0;\n replaces++;\n\n if (replaces >= _this.maxReplaces) {\n break;\n }\n }\n });\n return str;\n }\n }, {\n key: \"nest\",\n value: function nest(str, fc) {\n var _this2 = this;\n\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var match;\n var value;\n\n var clonedOptions = _objectSpread({}, options);\n\n clonedOptions.applyPostProcessor = false;\n delete clonedOptions.defaultValue;\n\n function handleHasOptions(key, inheritedOptions) {\n var sep = this.nestingOptionsSeparator;\n if (key.indexOf(sep) < 0) return key;\n var c = key.split(new RegExp(\"\".concat(sep, \"[ ]*{\")));\n var optionsString = \"{\".concat(c[1]);\n key = c[0];\n optionsString = this.interpolate(optionsString, clonedOptions);\n optionsString = optionsString.replace(/'/g, '\"');\n\n try {\n clonedOptions = JSON.parse(optionsString);\n if (inheritedOptions) clonedOptions = _objectSpread({}, inheritedOptions, clonedOptions);\n } catch (e) {\n this.logger.warn(\"failed parsing options string in nesting for key \".concat(key), e);\n return \"\".concat(key).concat(sep).concat(optionsString);\n }\n\n delete clonedOptions.defaultValue;\n return key;\n }\n\n while (match = this.nestingRegexp.exec(str)) {\n var formatters = [];\n var doReduce = false;\n\n if (match[0].includes(this.formatSeparator) && !/{.*}/.test(match[1])) {\n var r = match[1].split(this.formatSeparator).map(function (elem) {\n return elem.trim();\n });\n match[1] = r.shift();\n formatters = r;\n doReduce = true;\n }\n\n value = fc(handleHasOptions.call(this, match[1].trim(), clonedOptions), clonedOptions);\n if (value && match[0] === str && typeof value !== 'string') return value;\n if (typeof value !== 'string') value = makeString(value);\n\n if (!value) {\n this.logger.warn(\"missed to resolve \".concat(match[1], \" for nesting \").concat(str));\n value = '';\n }\n\n if (doReduce) {\n value = formatters.reduce(function (v, f) {\n return _this2.format(v, f, options.lng, options);\n }, value.trim());\n }\n\n str = str.replace(match[0], value);\n this.regexp.lastIndex = 0;\n }\n\n return str;\n }\n }]);\n\n return Interpolator;\n}();\n\nfunction remove(arr, what) {\n var found = arr.indexOf(what);\n\n while (found !== -1) {\n arr.splice(found, 1);\n found = arr.indexOf(what);\n }\n}\n\nvar Connector = function (_EventEmitter) {\n _inherits(Connector, _EventEmitter);\n\n function Connector(backend, store, services) {\n var _this;\n\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n\n _classCallCheck(this, Connector);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(Connector).call(this));\n\n if (isIE10) {\n EventEmitter.call(_assertThisInitialized(_this));\n }\n\n _this.backend = backend;\n _this.store = store;\n _this.services = services;\n _this.languageUtils = services.languageUtils;\n _this.options = options;\n _this.logger = baseLogger.create('backendConnector');\n _this.state = {};\n _this.queue = [];\n\n if (_this.backend && _this.backend.init) {\n _this.backend.init(services, options.backend, options);\n }\n\n return _this;\n }\n\n _createClass(Connector, [{\n key: \"queueLoad\",\n value: function queueLoad(languages, namespaces, options, callback) {\n var _this2 = this;\n\n var toLoad = [];\n var pending = [];\n var toLoadLanguages = [];\n var toLoadNamespaces = [];\n languages.forEach(function (lng) {\n var hasAllNamespaces = true;\n namespaces.forEach(function (ns) {\n var name = \"\".concat(lng, \"|\").concat(ns);\n\n if (!options.reload && _this2.store.hasResourceBundle(lng, ns)) {\n _this2.state[name] = 2;\n } else if (_this2.state[name] < 0) ; else if (_this2.state[name] === 1) {\n if (pending.indexOf(name) < 0) pending.push(name);\n } else {\n _this2.state[name] = 1;\n hasAllNamespaces = false;\n if (pending.indexOf(name) < 0) pending.push(name);\n if (toLoad.indexOf(name) < 0) toLoad.push(name);\n if (toLoadNamespaces.indexOf(ns) < 0) toLoadNamespaces.push(ns);\n }\n });\n if (!hasAllNamespaces) toLoadLanguages.push(lng);\n });\n\n if (toLoad.length || pending.length) {\n this.queue.push({\n pending: pending,\n loaded: {},\n errors: [],\n callback: callback\n });\n }\n\n return {\n toLoad: toLoad,\n pending: pending,\n toLoadLanguages: toLoadLanguages,\n toLoadNamespaces: toLoadNamespaces\n };\n }\n }, {\n key: \"loaded\",\n value: function loaded(name, err, data) {\n var s = name.split('|');\n var lng = s[0];\n var ns = s[1];\n if (err) this.emit('failedLoading', lng, ns, err);\n\n if (data) {\n this.store.addResourceBundle(lng, ns, data);\n }\n\n this.state[name] = err ? -1 : 2;\n var loaded = {};\n this.queue.forEach(function (q) {\n pushPath(q.loaded, [lng], ns);\n remove(q.pending, name);\n if (err) q.errors.push(err);\n\n if (q.pending.length === 0 && !q.done) {\n Object.keys(q.loaded).forEach(function (l) {\n if (!loaded[l]) loaded[l] = [];\n\n if (q.loaded[l].length) {\n q.loaded[l].forEach(function (ns) {\n if (loaded[l].indexOf(ns) < 0) loaded[l].push(ns);\n });\n }\n });\n q.done = true;\n\n if (q.errors.length) {\n q.callback(q.errors);\n } else {\n q.callback();\n }\n }\n });\n this.emit('loaded', loaded);\n this.queue = this.queue.filter(function (q) {\n return !q.done;\n });\n }\n }, {\n key: \"read\",\n value: function read(lng, ns, fcName) {\n var _this3 = this;\n\n var tried = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n var wait = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 350;\n var callback = arguments.length > 5 ? arguments[5] : undefined;\n if (!lng.length) return callback(null, {});\n return this.backend[fcName](lng, ns, function (err, data) {\n if (err && data && tried < 5) {\n setTimeout(function () {\n _this3.read.call(_this3, lng, ns, fcName, tried + 1, wait * 2, callback);\n }, wait);\n return;\n }\n\n callback(err, data);\n });\n }\n }, {\n key: \"prepareLoading\",\n value: function prepareLoading(languages, namespaces) {\n var _this4 = this;\n\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var callback = arguments.length > 3 ? arguments[3] : undefined;\n\n if (!this.backend) {\n this.logger.warn('No backend was added via i18next.use. Will not load resources.');\n return callback && callback();\n }\n\n if (typeof languages === 'string') languages = this.languageUtils.toResolveHierarchy(languages);\n if (typeof namespaces === 'string') namespaces = [namespaces];\n var toLoad = this.queueLoad(languages, namespaces, options, callback);\n\n if (!toLoad.toLoad.length) {\n if (!toLoad.pending.length) callback();\n return null;\n }\n\n toLoad.toLoad.forEach(function (name) {\n _this4.loadOne(name);\n });\n }\n }, {\n key: \"load\",\n value: function load(languages, namespaces, callback) {\n this.prepareLoading(languages, namespaces, {}, callback);\n }\n }, {\n key: \"reload\",\n value: function reload(languages, namespaces, callback) {\n this.prepareLoading(languages, namespaces, {\n reload: true\n }, callback);\n }\n }, {\n key: \"loadOne\",\n value: function loadOne(name) {\n var _this5 = this;\n\n var prefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n var s = name.split('|');\n var lng = s[0];\n var ns = s[1];\n this.read(lng, ns, 'read', undefined, undefined, function (err, data) {\n if (err) _this5.logger.warn(\"\".concat(prefix, \"loading namespace \").concat(ns, \" for language \").concat(lng, \" failed\"), err);\n if (!err && data) _this5.logger.log(\"\".concat(prefix, \"loaded namespace \").concat(ns, \" for language \").concat(lng), data);\n\n _this5.loaded(name, err, data);\n });\n }\n }, {\n key: \"saveMissing\",\n value: function saveMissing(languages, namespace, key, fallbackValue, isUpdate) {\n var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};\n\n if (this.services.utils && this.services.utils.hasLoadedNamespace && !this.services.utils.hasLoadedNamespace(namespace)) {\n this.logger.warn(\"did not save key \\\"\".concat(key, \"\\\" as the namespace \\\"\").concat(namespace, \"\\\" was not yet loaded\"), 'This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!');\n return;\n }\n\n if (key === undefined || key === null || key === '') return;\n\n if (this.backend && this.backend.create) {\n this.backend.create(languages, namespace, key, fallbackValue, null, _objectSpread({}, options, {\n isUpdate: isUpdate\n }));\n }\n\n if (!languages || !languages[0]) return;\n this.store.addResource(languages[0], namespace, key, fallbackValue);\n }\n }]);\n\n return Connector;\n}(EventEmitter);\n\nfunction get() {\n return {\n debug: false,\n initImmediate: true,\n ns: ['translation'],\n defaultNS: ['translation'],\n fallbackLng: ['dev'],\n fallbackNS: false,\n whitelist: false,\n nonExplicitWhitelist: false,\n supportedLngs: false,\n nonExplicitSupportedLngs: false,\n load: 'all',\n preload: false,\n simplifyPluralSuffix: true,\n keySeparator: '.',\n nsSeparator: ':',\n pluralSeparator: '_',\n contextSeparator: '_',\n partialBundledLanguages: false,\n saveMissing: false,\n updateMissing: false,\n saveMissingTo: 'fallback',\n saveMissingPlurals: true,\n missingKeyHandler: false,\n missingInterpolationHandler: false,\n postProcess: false,\n postProcessPassResolved: false,\n returnNull: true,\n returnEmptyString: true,\n returnObjects: false,\n joinArrays: false,\n returnedObjectHandler: false,\n parseMissingKeyHandler: false,\n appendNamespaceToMissingKey: false,\n appendNamespaceToCIMode: false,\n overloadTranslationOptionHandler: function handle(args) {\n var ret = {};\n if (_typeof(args[1]) === 'object') ret = args[1];\n if (typeof args[1] === 'string') ret.defaultValue = args[1];\n if (typeof args[2] === 'string') ret.tDescription = args[2];\n\n if (_typeof(args[2]) === 'object' || _typeof(args[3]) === 'object') {\n var options = args[3] || args[2];\n Object.keys(options).forEach(function (key) {\n ret[key] = options[key];\n });\n }\n\n return ret;\n },\n interpolation: {\n escapeValue: true,\n format: function format(value, _format, lng, options) {\n return value;\n },\n prefix: '{{',\n suffix: '}}',\n formatSeparator: ',',\n unescapePrefix: '-',\n nestingPrefix: '$t(',\n nestingSuffix: ')',\n nestingOptionsSeparator: ',',\n maxReplaces: 1000,\n skipOnVariables: false\n }\n };\n}\nfunction transformOptions(options) {\n if (typeof options.ns === 'string') options.ns = [options.ns];\n if (typeof options.fallbackLng === 'string') options.fallbackLng = [options.fallbackLng];\n if (typeof options.fallbackNS === 'string') options.fallbackNS = [options.fallbackNS];\n\n if (options.whitelist) {\n if (options.whitelist && options.whitelist.indexOf('cimode') < 0) {\n options.whitelist = options.whitelist.concat(['cimode']);\n }\n\n options.supportedLngs = options.whitelist;\n }\n\n if (options.nonExplicitWhitelist) {\n options.nonExplicitSupportedLngs = options.nonExplicitWhitelist;\n }\n\n if (options.supportedLngs && options.supportedLngs.indexOf('cimode') < 0) {\n options.supportedLngs = options.supportedLngs.concat(['cimode']);\n }\n\n return options;\n}\n\nfunction noop() {}\n\nvar I18n = function (_EventEmitter) {\n _inherits(I18n, _EventEmitter);\n\n function I18n() {\n var _this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var callback = arguments.length > 1 ? arguments[1] : undefined;\n\n _classCallCheck(this, I18n);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(I18n).call(this));\n\n if (isIE10) {\n EventEmitter.call(_assertThisInitialized(_this));\n }\n\n _this.options = transformOptions(options);\n _this.services = {};\n _this.logger = baseLogger;\n _this.modules = {\n external: []\n };\n\n if (callback && !_this.isInitialized && !options.isClone) {\n if (!_this.options.initImmediate) {\n _this.init(options, callback);\n\n return _possibleConstructorReturn(_this, _assertThisInitialized(_this));\n }\n\n setTimeout(function () {\n _this.init(options, callback);\n }, 0);\n }\n\n return _this;\n }\n\n _createClass(I18n, [{\n key: \"init\",\n value: function init() {\n var _this2 = this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var callback = arguments.length > 1 ? arguments[1] : undefined;\n\n if (typeof options === 'function') {\n callback = options;\n options = {};\n }\n\n if (options.whitelist && !options.supportedLngs) {\n this.logger.deprecate('whitelist', 'option \"whitelist\" will be renamed to \"supportedLngs\" in the next major - please make sure to rename this option asap.');\n }\n\n if (options.nonExplicitWhitelist && !options.nonExplicitSupportedLngs) {\n this.logger.deprecate('whitelist', 'options \"nonExplicitWhitelist\" will be renamed to \"nonExplicitSupportedLngs\" in the next major - please make sure to rename this option asap.');\n }\n\n this.options = _objectSpread({}, get(), this.options, transformOptions(options));\n this.format = this.options.interpolation.format;\n if (!callback) callback = noop;\n\n function createClassOnDemand(ClassOrObject) {\n if (!ClassOrObject) return null;\n if (typeof ClassOrObject === 'function') return new ClassOrObject();\n return ClassOrObject;\n }\n\n if (!this.options.isClone) {\n if (this.modules.logger) {\n baseLogger.init(createClassOnDemand(this.modules.logger), this.options);\n } else {\n baseLogger.init(null, this.options);\n }\n\n var lu = new LanguageUtil(this.options);\n this.store = new ResourceStore(this.options.resources, this.options);\n var s = this.services;\n s.logger = baseLogger;\n s.resourceStore = this.store;\n s.languageUtils = lu;\n s.pluralResolver = new PluralResolver(lu, {\n prepend: this.options.pluralSeparator,\n compatibilityJSON: this.options.compatibilityJSON,\n simplifyPluralSuffix: this.options.simplifyPluralSuffix\n });\n s.interpolator = new Interpolator(this.options);\n s.utils = {\n hasLoadedNamespace: this.hasLoadedNamespace.bind(this)\n };\n s.backendConnector = new Connector(createClassOnDemand(this.modules.backend), s.resourceStore, s, this.options);\n s.backendConnector.on('*', function (event) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n _this2.emit.apply(_this2, [event].concat(args));\n });\n\n if (this.modules.languageDetector) {\n s.languageDetector = createClassOnDemand(this.modules.languageDetector);\n s.languageDetector.init(s, this.options.detection, this.options);\n }\n\n if (this.modules.i18nFormat) {\n s.i18nFormat = createClassOnDemand(this.modules.i18nFormat);\n if (s.i18nFormat.init) s.i18nFormat.init(this);\n }\n\n this.translator = new Translator(this.services, this.options);\n this.translator.on('*', function (event) {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n _this2.emit.apply(_this2, [event].concat(args));\n });\n this.modules.external.forEach(function (m) {\n if (m.init) m.init(_this2);\n });\n }\n\n if (this.options.fallbackLng && !this.services.languageDetector && !this.options.lng) {\n var codes = this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);\n if (codes.length > 0 && codes[0] !== 'dev') this.options.lng = codes[0];\n }\n\n if (!this.services.languageDetector && !this.options.lng) {\n this.logger.warn('init: no languageDetector is used and no lng is defined');\n }\n\n var storeApi = ['getResource', 'hasResourceBundle', 'getResourceBundle', 'getDataByLanguage'];\n storeApi.forEach(function (fcName) {\n _this2[fcName] = function () {\n var _this2$store;\n\n return (_this2$store = _this2.store)[fcName].apply(_this2$store, arguments);\n };\n });\n var storeApiChained = ['addResource', 'addResources', 'addResourceBundle', 'removeResourceBundle'];\n storeApiChained.forEach(function (fcName) {\n _this2[fcName] = function () {\n var _this2$store2;\n\n (_this2$store2 = _this2.store)[fcName].apply(_this2$store2, arguments);\n\n return _this2;\n };\n });\n var deferred = defer();\n\n var load = function load() {\n var finish = function finish(err, t) {\n if (_this2.isInitialized) _this2.logger.warn('init: i18next is already initialized. You should call init just once!');\n _this2.isInitialized = true;\n if (!_this2.options.isClone) _this2.logger.log('initialized', _this2.options);\n\n _this2.emit('initialized', _this2.options);\n\n deferred.resolve(t);\n callback(err, t);\n };\n\n if (_this2.languages && _this2.options.compatibilityAPI !== 'v1' && !_this2.isInitialized) return finish(null, _this2.t.bind(_this2));\n\n _this2.changeLanguage(_this2.options.lng, finish);\n };\n\n if (this.options.resources || !this.options.initImmediate) {\n load();\n } else {\n setTimeout(load, 0);\n }\n\n return deferred;\n }\n }, {\n key: \"loadResources\",\n value: function loadResources(language) {\n var _this3 = this;\n\n var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop;\n var usedCallback = callback;\n var usedLng = typeof language === 'string' ? language : this.language;\n if (typeof language === 'function') usedCallback = language;\n\n if (!this.options.resources || this.options.partialBundledLanguages) {\n if (usedLng && usedLng.toLowerCase() === 'cimode') return usedCallback();\n var toLoad = [];\n\n var append = function append(lng) {\n if (!lng) return;\n\n var lngs = _this3.services.languageUtils.toResolveHierarchy(lng);\n\n lngs.forEach(function (l) {\n if (toLoad.indexOf(l) < 0) toLoad.push(l);\n });\n };\n\n if (!usedLng) {\n var fallbacks = this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);\n fallbacks.forEach(function (l) {\n return append(l);\n });\n } else {\n append(usedLng);\n }\n\n if (this.options.preload) {\n this.options.preload.forEach(function (l) {\n return append(l);\n });\n }\n\n this.services.backendConnector.load(toLoad, this.options.ns, usedCallback);\n } else {\n usedCallback(null);\n }\n }\n }, {\n key: \"reloadResources\",\n value: function reloadResources(lngs, ns, callback) {\n var deferred = defer();\n if (!lngs) lngs = this.languages;\n if (!ns) ns = this.options.ns;\n if (!callback) callback = noop;\n this.services.backendConnector.reload(lngs, ns, function (err) {\n deferred.resolve();\n callback(err);\n });\n return deferred;\n }\n }, {\n key: \"use\",\n value: function use(module) {\n if (!module) throw new Error('You are passing an undefined module! Please check the object you are passing to i18next.use()');\n if (!module.type) throw new Error('You are passing a wrong module! Please check the object you are passing to i18next.use()');\n\n if (module.type === 'backend') {\n this.modules.backend = module;\n }\n\n if (module.type === 'logger' || module.log && module.warn && module.error) {\n this.modules.logger = module;\n }\n\n if (module.type === 'languageDetector') {\n this.modules.languageDetector = module;\n }\n\n if (module.type === 'i18nFormat') {\n this.modules.i18nFormat = module;\n }\n\n if (module.type === 'postProcessor') {\n postProcessor.addPostProcessor(module);\n }\n\n if (module.type === '3rdParty') {\n this.modules.external.push(module);\n }\n\n return this;\n }\n }, {\n key: \"changeLanguage\",\n value: function changeLanguage(lng, callback) {\n var _this4 = this;\n\n this.isLanguageChangingTo = lng;\n var deferred = defer();\n this.emit('languageChanging', lng);\n\n var done = function done(err, l) {\n if (l) {\n _this4.language = l;\n _this4.languages = _this4.services.languageUtils.toResolveHierarchy(l);\n\n _this4.translator.changeLanguage(l);\n\n _this4.isLanguageChangingTo = undefined;\n\n _this4.emit('languageChanged', l);\n\n _this4.logger.log('languageChanged', l);\n } else {\n _this4.isLanguageChangingTo = undefined;\n }\n\n deferred.resolve(function () {\n return _this4.t.apply(_this4, arguments);\n });\n if (callback) callback(err, function () {\n return _this4.t.apply(_this4, arguments);\n });\n };\n\n var setLng = function setLng(lngs) {\n var l = typeof lngs === 'string' ? lngs : _this4.services.languageUtils.getBestMatchFromCodes(lngs);\n\n if (l) {\n if (!_this4.language) {\n _this4.language = l;\n _this4.languages = _this4.services.languageUtils.toResolveHierarchy(l);\n }\n\n if (!_this4.translator.language) _this4.translator.changeLanguage(l);\n if (_this4.services.languageDetector) _this4.services.languageDetector.cacheUserLanguage(l);\n }\n\n _this4.loadResources(l, function (err) {\n done(err, l);\n });\n };\n\n if (!lng && this.services.languageDetector && !this.services.languageDetector.async) {\n setLng(this.services.languageDetector.detect());\n } else if (!lng && this.services.languageDetector && this.services.languageDetector.async) {\n this.services.languageDetector.detect(setLng);\n } else {\n setLng(lng);\n }\n\n return deferred;\n }\n }, {\n key: \"getFixedT\",\n value: function getFixedT(lng, ns) {\n var _this5 = this;\n\n var fixedT = function fixedT(key, opts) {\n var options;\n\n if (_typeof(opts) !== 'object') {\n for (var _len3 = arguments.length, rest = new Array(_len3 > 2 ? _len3 - 2 : 0), _key3 = 2; _key3 < _len3; _key3++) {\n rest[_key3 - 2] = arguments[_key3];\n }\n\n options = _this5.options.overloadTranslationOptionHandler([key, opts].concat(rest));\n } else {\n options = _objectSpread({}, opts);\n }\n\n options.lng = options.lng || fixedT.lng;\n options.lngs = options.lngs || fixedT.lngs;\n options.ns = options.ns || fixedT.ns;\n return _this5.t(key, options);\n };\n\n if (typeof lng === 'string') {\n fixedT.lng = lng;\n } else {\n fixedT.lngs = lng;\n }\n\n fixedT.ns = ns;\n return fixedT;\n }\n }, {\n key: \"t\",\n value: function t() {\n var _this$translator;\n\n return this.translator && (_this$translator = this.translator).translate.apply(_this$translator, arguments);\n }\n }, {\n key: \"exists\",\n value: function exists() {\n var _this$translator2;\n\n return this.translator && (_this$translator2 = this.translator).exists.apply(_this$translator2, arguments);\n }\n }, {\n key: \"setDefaultNamespace\",\n value: function setDefaultNamespace(ns) {\n this.options.defaultNS = ns;\n }\n }, {\n key: \"hasLoadedNamespace\",\n value: function hasLoadedNamespace(ns) {\n var _this6 = this;\n\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n if (!this.isInitialized) {\n this.logger.warn('hasLoadedNamespace: i18next was not initialized', this.languages);\n return false;\n }\n\n if (!this.languages || !this.languages.length) {\n this.logger.warn('hasLoadedNamespace: i18n.languages were undefined or empty', this.languages);\n return false;\n }\n\n var lng = this.languages[0];\n var fallbackLng = this.options ? this.options.fallbackLng : false;\n var lastLng = this.languages[this.languages.length - 1];\n if (lng.toLowerCase() === 'cimode') return true;\n\n var loadNotPending = function loadNotPending(l, n) {\n var loadState = _this6.services.backendConnector.state[\"\".concat(l, \"|\").concat(n)];\n\n return loadState === -1 || loadState === 2;\n };\n\n if (options.precheck) {\n var preResult = options.precheck(this, loadNotPending);\n if (preResult !== undefined) return preResult;\n }\n\n if (this.hasResourceBundle(lng, ns)) return true;\n if (!this.services.backendConnector.backend) return true;\n if (loadNotPending(lng, ns) && (!fallbackLng || loadNotPending(lastLng, ns))) return true;\n return false;\n }\n }, {\n key: \"loadNamespaces\",\n value: function loadNamespaces(ns, callback) {\n var _this7 = this;\n\n var deferred = defer();\n\n if (!this.options.ns) {\n callback && callback();\n return Promise.resolve();\n }\n\n if (typeof ns === 'string') ns = [ns];\n ns.forEach(function (n) {\n if (_this7.options.ns.indexOf(n) < 0) _this7.options.ns.push(n);\n });\n this.loadResources(function (err) {\n deferred.resolve();\n if (callback) callback(err);\n });\n return deferred;\n }\n }, {\n key: \"loadLanguages\",\n value: function loadLanguages(lngs, callback) {\n var deferred = defer();\n if (typeof lngs === 'string') lngs = [lngs];\n var preloaded = this.options.preload || [];\n var newLngs = lngs.filter(function (lng) {\n return preloaded.indexOf(lng) < 0;\n });\n\n if (!newLngs.length) {\n if (callback) callback();\n return Promise.resolve();\n }\n\n this.options.preload = preloaded.concat(newLngs);\n this.loadResources(function (err) {\n deferred.resolve();\n if (callback) callback(err);\n });\n return deferred;\n }\n }, {\n key: \"dir\",\n value: function dir(lng) {\n if (!lng) lng = this.languages && this.languages.length > 0 ? this.languages[0] : this.language;\n if (!lng) return 'rtl';\n var rtlLngs = ['ar', 'shu', 'sqr', 'ssh', 'xaa', 'yhd', 'yud', 'aao', 'abh', 'abv', 'acm', 'acq', 'acw', 'acx', 'acy', 'adf', 'ads', 'aeb', 'aec', 'afb', 'ajp', 'apc', 'apd', 'arb', 'arq', 'ars', 'ary', 'arz', 'auz', 'avl', 'ayh', 'ayl', 'ayn', 'ayp', 'bbz', 'pga', 'he', 'iw', 'ps', 'pbt', 'pbu', 'pst', 'prp', 'prd', 'ug', 'ur', 'ydd', 'yds', 'yih', 'ji', 'yi', 'hbo', 'men', 'xmn', 'fa', 'jpr', 'peo', 'pes', 'prs', 'dv', 'sam'];\n return rtlLngs.indexOf(this.services.languageUtils.getLanguagePartFromCode(lng)) >= 0 ? 'rtl' : 'ltr';\n }\n }, {\n key: \"createInstance\",\n value: function createInstance() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var callback = arguments.length > 1 ? arguments[1] : undefined;\n return new I18n(options, callback);\n }\n }, {\n key: \"cloneInstance\",\n value: function cloneInstance() {\n var _this8 = this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop;\n\n var mergedOptions = _objectSpread({}, this.options, options, {\n isClone: true\n });\n\n var clone = new I18n(mergedOptions);\n var membersToCopy = ['store', 'services', 'language'];\n membersToCopy.forEach(function (m) {\n clone[m] = _this8[m];\n });\n clone.services = _objectSpread({}, this.services);\n clone.services.utils = {\n hasLoadedNamespace: clone.hasLoadedNamespace.bind(clone)\n };\n clone.translator = new Translator(clone.services, clone.options);\n clone.translator.on('*', function (event) {\n for (var _len4 = arguments.length, args = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n args[_key4 - 1] = arguments[_key4];\n }\n\n clone.emit.apply(clone, [event].concat(args));\n });\n clone.init(mergedOptions, callback);\n clone.translator.options = clone.options;\n clone.translator.backendConnector.services.utils = {\n hasLoadedNamespace: clone.hasLoadedNamespace.bind(clone)\n };\n return clone;\n }\n }]);\n\n return I18n;\n}(EventEmitter);\n\nvar i18next = new I18n();\n\nexport default i18next;\n","function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nmodule.exports = _objectWithoutPropertiesLoose, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var objectWithoutPropertiesLoose = require(\"./objectWithoutPropertiesLoose.js\");\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n var target = objectWithoutPropertiesLoose(source, excluded);\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nmodule.exports = _objectWithoutProperties, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return (module.exports = _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports), _typeof(obj);\n}\n\nmodule.exports = _typeof, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nmodule.exports = _defineProperty, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nmodule.exports = _classCallCheck, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n}\n\nmodule.exports = _createClass, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nimport React from 'react';\nvar defaultOptions = {\n bindI18n: 'languageChanged',\n bindI18nStore: '',\n transEmptyNodeValue: '',\n transSupportBasicHtmlNodes: true,\n transWrapTextNodes: '',\n transKeepBasicHtmlNodesFor: ['br', 'strong', 'i', 'p'],\n useSuspense: true\n};\nvar i18nInstance;\nexport var I18nContext = React.createContext();\nexport function setDefaults() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n defaultOptions = _objectSpread(_objectSpread({}, defaultOptions), options);\n}\nexport function getDefaults() {\n return defaultOptions;\n}\nexport var ReportNamespaces = function () {\n function ReportNamespaces() {\n _classCallCheck(this, ReportNamespaces);\n\n this.usedNamespaces = {};\n }\n\n _createClass(ReportNamespaces, [{\n key: \"addUsedNamespaces\",\n value: function addUsedNamespaces(namespaces) {\n var _this = this;\n\n namespaces.forEach(function (ns) {\n if (!_this.usedNamespaces[ns]) _this.usedNamespaces[ns] = true;\n });\n }\n }, {\n key: \"getUsedNamespaces\",\n value: function getUsedNamespaces() {\n return Object.keys(this.usedNamespaces);\n }\n }]);\n\n return ReportNamespaces;\n}();\nexport function setI18n(instance) {\n i18nInstance = instance;\n}\nexport function getI18n() {\n return i18nInstance;\n}\nexport var initReactI18next = {\n type: '3rdParty',\n init: function init(instance) {\n setDefaults(instance.options.react);\n setI18n(instance);\n }\n};\nexport function composeInitialProps(ForComponent) {\n return function (ctx) {\n return new Promise(function (resolve) {\n var i18nInitialProps = getInitialProps();\n\n if (ForComponent.getInitialProps) {\n ForComponent.getInitialProps(ctx).then(function (componentsInitialProps) {\n resolve(_objectSpread(_objectSpread({}, componentsInitialProps), i18nInitialProps));\n });\n } else {\n resolve(i18nInitialProps);\n }\n });\n };\n}\nexport function getInitialProps() {\n var i18n = getI18n();\n var namespaces = i18n.reportNamespaces ? i18n.reportNamespaces.getUsedNamespaces() : [];\n var ret = {};\n var initialI18nStore = {};\n i18n.languages.forEach(function (l) {\n initialI18nStore[l] = {};\n namespaces.forEach(function (ns) {\n initialI18nStore[l][ns] = i18n.getResourceBundle(l, ns) || {};\n });\n });\n ret.initialI18nStore = initialI18nStore;\n ret.initialLanguage = i18n.language;\n return ret;\n}","export function warn() {\n if (console && console.warn) {\n var _console;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n if (typeof args[0] === 'string') args[0] = \"react-i18next:: \".concat(args[0]);\n\n (_console = console).warn.apply(_console, args);\n }\n}\nvar alreadyWarned = {};\nexport function warnOnce() {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n if (typeof args[0] === 'string' && alreadyWarned[args[0]]) return;\n if (typeof args[0] === 'string') alreadyWarned[args[0]] = new Date();\n warn.apply(void 0, args);\n}\nexport function loadNamespaces(i18n, ns, cb) {\n i18n.loadNamespaces(ns, function () {\n if (i18n.isInitialized) {\n cb();\n } else {\n var initialized = function initialized() {\n setTimeout(function () {\n i18n.off('initialized', initialized);\n }, 0);\n cb();\n };\n\n i18n.on('initialized', initialized);\n }\n });\n}\nexport function hasLoadedNamespace(ns, i18n) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n if (!i18n.languages || !i18n.languages.length) {\n warnOnce('i18n.languages were undefined or empty', i18n.languages);\n return true;\n }\n\n var lng = i18n.languages[0];\n var fallbackLng = i18n.options ? i18n.options.fallbackLng : false;\n var lastLng = i18n.languages[i18n.languages.length - 1];\n if (lng.toLowerCase() === 'cimode') return true;\n\n var loadNotPending = function loadNotPending(l, n) {\n var loadState = i18n.services.backendConnector.state[\"\".concat(l, \"|\").concat(n)];\n return loadState === -1 || loadState === 2;\n };\n\n if (options.bindI18n && options.bindI18n.indexOf('languageChanging') > -1 && i18n.services.backendConnector.backend && i18n.isLanguageChangingTo && !loadNotPending(i18n.isLanguageChangingTo, ns)) return false;\n if (i18n.hasResourceBundle(lng, ns)) return true;\n if (!i18n.services.backendConnector.backend) return true;\n if (loadNotPending(lng, ns) && (!fallbackLng || loadNotPending(lastLng, ns))) return true;\n return false;\n}\nexport function getDisplayName(Component) {\n return Component.displayName || Component.name || (typeof Component === 'string' && Component.length > 0 ? Component : 'Unknown');\n}","function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\nmodule.exports = _arrayWithHoles, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _iterableToArrayLimit(arr, i) {\n var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"];\n\n if (_i == null) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n\n var _s, _e;\n\n try {\n for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nmodule.exports = _iterableToArrayLimit, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}\n\nmodule.exports = _arrayLikeToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var arrayLikeToArray = require(\"./arrayLikeToArray.js\");\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}\n\nmodule.exports = _unsupportedIterableToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nmodule.exports = _nonIterableRest, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var arrayWithHoles = require(\"./arrayWithHoles.js\");\n\nvar iterableToArrayLimit = require(\"./iterableToArrayLimit.js\");\n\nvar unsupportedIterableToArray = require(\"./unsupportedIterableToArray.js\");\n\nvar nonIterableRest = require(\"./nonIterableRest.js\");\n\nfunction _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();\n}\n\nmodule.exports = _slicedToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","import _slicedToArray from \"@babel/runtime/helpers/slicedToArray\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nimport { useState, useEffect, useContext, useRef } from 'react';\nimport { getI18n, getDefaults, ReportNamespaces, I18nContext } from './context';\nimport { warnOnce, loadNamespaces, hasLoadedNamespace } from './utils';\nexport function useTranslation(ns) {\n var props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var i18nFromProps = props.i18n;\n\n var _ref = useContext(I18nContext) || {},\n i18nFromContext = _ref.i18n,\n defaultNSFromContext = _ref.defaultNS;\n\n var i18n = i18nFromProps || i18nFromContext || getI18n();\n if (i18n && !i18n.reportNamespaces) i18n.reportNamespaces = new ReportNamespaces();\n\n if (!i18n) {\n warnOnce('You will need to pass in an i18next instance by using initReactI18next');\n\n var notReadyT = function notReadyT(k) {\n return Array.isArray(k) ? k[k.length - 1] : k;\n };\n\n var retNotReady = [notReadyT, {}, false];\n retNotReady.t = notReadyT;\n retNotReady.i18n = {};\n retNotReady.ready = false;\n return retNotReady;\n }\n\n if (i18n.options.react && i18n.options.react.wait !== undefined) warnOnce('It seems you are still using the old wait option, you may migrate to the new useSuspense behaviour.');\n\n var i18nOptions = _objectSpread(_objectSpread(_objectSpread({}, getDefaults()), i18n.options.react), props);\n\n var useSuspense = i18nOptions.useSuspense,\n keyPrefix = i18nOptions.keyPrefix;\n var namespaces = ns || defaultNSFromContext || i18n.options && i18n.options.defaultNS;\n namespaces = typeof namespaces === 'string' ? [namespaces] : namespaces || ['translation'];\n if (i18n.reportNamespaces.addUsedNamespaces) i18n.reportNamespaces.addUsedNamespaces(namespaces);\n var ready = (i18n.isInitialized || i18n.initializedStoreOnce) && namespaces.every(function (n) {\n return hasLoadedNamespace(n, i18n, i18nOptions);\n });\n\n function getT() {\n return i18n.getFixedT(null, i18nOptions.nsMode === 'fallback' ? namespaces : namespaces[0], keyPrefix);\n }\n\n var _useState = useState(getT),\n _useState2 = _slicedToArray(_useState, 2),\n t = _useState2[0],\n setT = _useState2[1];\n\n var isMounted = useRef(true);\n useEffect(function () {\n var bindI18n = i18nOptions.bindI18n,\n bindI18nStore = i18nOptions.bindI18nStore;\n isMounted.current = true;\n\n if (!ready && !useSuspense) {\n loadNamespaces(i18n, namespaces, function () {\n if (isMounted.current) setT(getT);\n });\n }\n\n function boundReset() {\n if (isMounted.current) setT(getT);\n }\n\n if (bindI18n && i18n) i18n.on(bindI18n, boundReset);\n if (bindI18nStore && i18n) i18n.store.on(bindI18nStore, boundReset);\n return function () {\n isMounted.current = false;\n if (bindI18n && i18n) bindI18n.split(' ').forEach(function (e) {\n return i18n.off(e, boundReset);\n });\n if (bindI18nStore && i18n) bindI18nStore.split(' ').forEach(function (e) {\n return i18n.store.off(e, boundReset);\n });\n };\n }, [i18n, namespaces.join()]);\n var isInitial = useRef(true);\n useEffect(function () {\n if (isMounted.current && !isInitial.current) {\n setT(getT);\n }\n\n isInitial.current = false;\n }, [i18n]);\n var ret = [t, i18n, ready];\n ret.t = t;\n ret.i18n = i18n;\n ret.ready = ready;\n if (ready) return ret;\n if (!ready && !useSuspense) return ret;\n throw new Promise(function (resolve) {\n loadNamespaces(i18n, namespaces, function () {\n resolve();\n });\n });\n}","import i18n from 'i18next';\r\nimport { initReactI18next } from 'react-i18next';\r\n\r\n// the translations\r\n// TODO: move them in a JSON file and import them\r\nconst resources = {};\r\n\r\ni18n.use(initReactI18next) // passes i18n down to react-i18next\r\n\t.init({\r\n\t\tinterpolation: {\r\n\t\t\tescapeValue: false, // react already safes from xss\r\n\t\t},\r\n\t\tkeySeparator: false, // we do not use keys in form messages.welcome\r\n\t\tlng: 'en',\r\n\t\tresources,\r\n\t});\r\n\r\nexport default i18n;\r\n","import React, { useContext } from 'react';\r\n\r\nimport { HawksearchConfig } from 'types/HawksearchConfig';\r\n\r\nconst ConfigContext = React.createContext({} as ConfigContextValue);\r\n\r\nexport interface ConfigContextValue {\r\n\t/** Global configuration. */\r\n\tconfig: HawksearchConfig;\r\n}\r\n\r\nexport interface ConfigProviderProps {\r\n\tconfig: HawksearchConfig;\r\n\tchildren: React.ReactNode;\r\n}\r\n\r\n// declare webpack's constant to appease typescript\r\ndeclare var __webpack_public_path__: string;\r\n\r\nfunction ConfigProvider({ config, children }: ConfigProviderProps) {\r\n\tif (config.assetPath) {\r\n\t\tlet path = config.assetPath;\r\n\r\n\t\t// ensure the provided path both starts and ends with a slash\r\n\t\tif (!path.startsWith('/')) {\r\n\t\t\tpath = '/' + path;\r\n\t\t}\r\n\t\tif (!path.endsWith('/')) {\r\n\t\t\tpath = path + '/';\r\n\t\t}\r\n\r\n\t\t// allow consumers to tell webpack where to load code split/lazy loaded files from, as they may not be\r\n\t\t// hosting our JS from /assets/ (the default path)\r\n\t\t__webpack_public_path__ = path;\r\n\t}\r\n\r\n\treturn {children};\r\n}\r\n\r\nexport function useHawkConfig() {\r\n\tconst context = useContext(ConfigContext);\r\n\r\n\tif (!context.config) {\r\n\t\tthrow new Error(\r\n\t\t\t'No HawksearchConfig is available, did you forget to wrap your components in a ConfigProvider component?'\r\n\t\t);\r\n\t}\r\n\r\n\treturn context;\r\n}\r\n\r\nexport default ConfigProvider;\r\n","export default function _iterableToArrayLimit(arr, i) {\n var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"];\n\n if (_i == null) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n\n var _s, _e;\n\n try {\n for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}","export default function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}","export default function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","import arrayWithHoles from \"./arrayWithHoles.js\";\nimport iterableToArrayLimit from \"./iterableToArrayLimit.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableRest from \"./nonIterableRest.js\";\nexport default function _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();\n}","export default function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}","export default function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","import arrayWithoutHoles from \"./arrayWithoutHoles.js\";\nimport iterableToArray from \"./iterableToArray.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableSpread from \"./nonIterableSpread.js\";\nexport default function _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}","export default function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\n\nexport default function _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}","module.exports = require(\"regenerator-runtime\");\n","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n return obj[key];\n }\n try {\n // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n define({}, \"\");\n } catch (err) {\n define = function(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunction.displayName = define(\n GeneratorFunctionPrototype,\n toStringTagSymbol,\n \"GeneratorFunction\"\n );\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n define(prototype, method, function(arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n}\n","'use strict';\n\nmodule.exports = function bind(fn, thisArg) {\n return function wrap() {\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n return fn.apply(thisArg, args);\n };\n};\n","'use strict';\n\nvar bind = require('./helpers/bind');\nvar isBuffer = require('is-buffer');\n\n/*global toString:true*/\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n return toString.call(val) === '[object Array]';\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nfunction isArrayBuffer(val) {\n return toString.call(val) === '[object ArrayBuffer]';\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(val) {\n return (typeof FormData !== 'undefined') && (val instanceof FormData);\n}\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n var result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n return typeof val === 'number';\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nfunction isDate(val) {\n return toString.call(val) === '[object Date]';\n}\n\n/**\n * Determine if a value is a File\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nfunction isFile(val) {\n return toString.call(val) === '[object File]';\n}\n\n/**\n * Determine if a value is a Blob\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nfunction isBlob(val) {\n return toString.call(val) === '[object Blob]';\n}\n\n/**\n * Determine if a value is a Function\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nfunction isFunction(val) {\n return toString.call(val) === '[object Function]';\n}\n\n/**\n * Determine if a value is a Stream\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nfunction isStream(val) {\n return isObject(val) && isFunction(val.pipe);\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nfunction isURLSearchParams(val) {\n return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;\n}\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n */\nfunction isStandardBrowserEnv() {\n if (typeof navigator !== 'undefined' && navigator.product === 'ReactNative') {\n return false;\n }\n return (\n typeof window !== 'undefined' &&\n typeof document !== 'undefined'\n );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (var i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n fn.call(null, obj[key], key, obj);\n }\n }\n }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n var result = {};\n function assignValue(val, key) {\n if (typeof result[key] === 'object' && typeof val === 'object') {\n result[key] = merge(result[key], val);\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n * @return {Object} The resulting value of object a\n */\nfunction extend(a, b, thisArg) {\n forEach(b, function assignValue(val, key) {\n if (thisArg && typeof val === 'function') {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n });\n return a;\n}\n\nmodule.exports = {\n isArray: isArray,\n isArrayBuffer: isArrayBuffer,\n isBuffer: isBuffer,\n isFormData: isFormData,\n isArrayBufferView: isArrayBufferView,\n isString: isString,\n isNumber: isNumber,\n isObject: isObject,\n isUndefined: isUndefined,\n isDate: isDate,\n isFile: isFile,\n isBlob: isBlob,\n isFunction: isFunction,\n isStream: isStream,\n isURLSearchParams: isURLSearchParams,\n isStandardBrowserEnv: isStandardBrowserEnv,\n forEach: forEach,\n merge: merge,\n extend: extend,\n trim: trim\n};\n","/*!\n * Determine if an object is a Buffer\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n\nmodule.exports = function isBuffer (obj) {\n return obj != null && obj.constructor != null &&\n typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)\n}\n","'use strict';\n\nvar enhanceError = require('./enhanceError');\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The created error.\n */\nmodule.exports = function createError(message, config, code, request, response) {\n var error = new Error(message);\n return enhanceError(error, config, code, request, response);\n};\n","'use strict';\n\n/**\n * Update an Error with the specified config, error code, and response.\n *\n * @param {Error} error The error to update.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The error.\n */\nmodule.exports = function enhanceError(error, config, code, request, response) {\n error.config = config;\n if (code) {\n error.code = code;\n }\n error.request = request;\n error.response = response;\n return error;\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%40/gi, '@').\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n\n var serializedParams;\n if (paramsSerializer) {\n serializedParams = paramsSerializer(params);\n } else if (utils.isURLSearchParams(params)) {\n serializedParams = params.toString();\n } else {\n var parts = [];\n\n utils.forEach(params, function serialize(val, key) {\n if (val === null || typeof val === 'undefined') {\n return;\n }\n\n if (utils.isArray(val)) {\n key = key + '[]';\n } else {\n val = [val];\n }\n\n utils.forEach(val, function parseValue(v) {\n if (utils.isDate(v)) {\n v = v.toISOString();\n } else if (utils.isObject(v)) {\n v = JSON.stringify(v);\n }\n parts.push(encode(key) + '=' + encode(v));\n });\n });\n\n serializedParams = parts.join('&');\n }\n\n if (serializedParams) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\n// Headers whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nvar ignoreDuplicateOf = [\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n];\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n var parsed = {};\n var key;\n var val;\n var i;\n\n if (!headers) { return parsed; }\n\n utils.forEach(headers.split('\\n'), function parser(line) {\n i = line.indexOf(':');\n key = utils.trim(line.substr(0, i)).toLowerCase();\n val = utils.trim(line.substr(i + 1));\n\n if (key) {\n if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {\n return;\n }\n if (key === 'set-cookie') {\n parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n }\n });\n\n return parsed;\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs have full support of the APIs needed to test\n // whether the request URL is of the same origin as current location.\n (function standardBrowserEnv() {\n var msie = /(msie|trident)/i.test(navigator.userAgent);\n var urlParsingNode = document.createElement('a');\n var originURL;\n\n /**\n * Parse a URL to discover it's components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n var href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n return (parsed.protocol === originURL.protocol &&\n parsed.host === originURL.host);\n };\n })() :\n\n // Non standard browser envs (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n })()\n);\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs support document.cookie\n (function standardBrowserEnv() {\n return {\n write: function write(name, value, expires, path, domain, secure) {\n var cookie = [];\n cookie.push(name + '=' + encodeURIComponent(value));\n\n if (utils.isNumber(expires)) {\n cookie.push('expires=' + new Date(expires).toGMTString());\n }\n\n if (utils.isString(path)) {\n cookie.push('path=' + path);\n }\n\n if (utils.isString(domain)) {\n cookie.push('domain=' + domain);\n }\n\n if (secure === true) {\n cookie.push('secure');\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read: function read(name) {\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove: function remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n };\n })() :\n\n // Non standard browser env (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return {\n write: function write() {},\n read: function read() { return null; },\n remove: function remove() {}\n };\n })()\n);\n","'use strict';\n\nvar utils = require('./../utils');\nvar settle = require('./../core/settle');\nvar buildURL = require('./../helpers/buildURL');\nvar parseHeaders = require('./../helpers/parseHeaders');\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\nvar createError = require('../core/createError');\n\nmodule.exports = function xhrAdapter(config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n var requestData = config.data;\n var requestHeaders = config.headers;\n\n if (utils.isFormData(requestData)) {\n delete requestHeaders['Content-Type']; // Let the browser set it\n }\n\n var request = new XMLHttpRequest();\n\n // HTTP basic authentication\n if (config.auth) {\n var username = config.auth.username || '';\n var password = config.auth.password || '';\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n }\n\n request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n\n // Listen for ready state\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n\n // Prepare the response\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;\n var response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config: config,\n request: request\n };\n\n settle(resolve, reject, response);\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(createError('Network Error', config, null, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n reject(createError('timeout of ' + config.timeout + 'ms exceeded', config, 'ECONNABORTED',\n request));\n\n // Clean up request\n request = null;\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (utils.isStandardBrowserEnv()) {\n var cookies = require('./../helpers/cookies');\n\n // Add xsrf header\n var xsrfValue = (config.withCredentials || isURLSameOrigin(config.url)) && config.xsrfCookieName ?\n cookies.read(config.xsrfCookieName) :\n undefined;\n\n if (xsrfValue) {\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\n }\n }\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n // Remove Content-Type if data is undefined\n delete requestHeaders[key];\n } else {\n // Otherwise add header to the request\n request.setRequestHeader(key, val);\n }\n });\n }\n\n // Add withCredentials to request if needed\n if (config.withCredentials) {\n request.withCredentials = true;\n }\n\n // Add responseType to request if needed\n if (config.responseType) {\n try {\n request.responseType = config.responseType;\n } catch (e) {\n // Expected DOMException thrown by browsers not compatible XMLHttpRequest Level 2.\n // But, this can be suppressed for 'json' type as it can be parsed by default 'transformResponse' function.\n if (config.responseType !== 'json') {\n throw e;\n }\n }\n }\n\n // Handle progress if needed\n if (typeof config.onDownloadProgress === 'function') {\n request.addEventListener('progress', config.onDownloadProgress);\n }\n\n // Not all browsers support upload events\n if (typeof config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', config.onUploadProgress);\n }\n\n if (config.cancelToken) {\n // Handle cancellation\n config.cancelToken.promise.then(function onCanceled(cancel) {\n if (!request) {\n return;\n }\n\n request.abort();\n reject(cancel);\n // Clean up request\n request = null;\n });\n }\n\n if (requestData === undefined) {\n requestData = null;\n }\n\n // Send the request\n request.send(requestData);\n });\n};\n","'use strict';\n\nvar createError = require('./createError');\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n */\nmodule.exports = function settle(resolve, reject, response) {\n var validateStatus = response.config.validateStatus;\n // Note: status is not exposed by XDomainRequest\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(createError(\n 'Request failed with status code ' + response.status,\n response.config,\n null,\n response.request,\n response\n ));\n }\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar normalizeHeaderName = require('./helpers/normalizeHeaderName');\n\nvar DEFAULT_CONTENT_TYPE = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nfunction setContentTypeIfUnset(headers, value) {\n if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n headers['Content-Type'] = value;\n }\n}\n\nfunction getDefaultAdapter() {\n var adapter;\n if (typeof XMLHttpRequest !== 'undefined') {\n // For browsers use XHR adapter\n adapter = require('./adapters/xhr');\n } else if (typeof process !== 'undefined') {\n // For node use HTTP adapter\n adapter = require('./adapters/http');\n }\n return adapter;\n}\n\nvar defaults = {\n adapter: getDefaultAdapter(),\n\n transformRequest: [function transformRequest(data, headers) {\n normalizeHeaderName(headers, 'Content-Type');\n if (utils.isFormData(data) ||\n utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n return data.toString();\n }\n if (utils.isObject(data)) {\n setContentTypeIfUnset(headers, 'application/json;charset=utf-8');\n return JSON.stringify(data);\n }\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n /*eslint no-param-reassign:0*/\n if (typeof data === 'string') {\n try {\n data = JSON.parse(data);\n } catch (e) { /* Ignore */ }\n }\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n }\n};\n\ndefaults.headers = {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n }\n};\n\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n defaults.headers[method] = {};\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\n\nmodule.exports = defaults;\n","'use strict';\n\nvar utils = require('../utils');\n\nmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n utils.forEach(headers, function processHeader(value, name) {\n if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n headers[normalizedName] = value;\n delete headers[name];\n }\n });\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction InterceptorManager() {\n this.handlers = [];\n}\n\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\n this.handlers.push({\n fulfilled: fulfilled,\n rejected: rejected\n });\n return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n};\n\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\nInterceptorManager.prototype.forEach = function forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n};\n\nmodule.exports = InterceptorManager;\n","'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n /*eslint no-param-reassign:0*/\n utils.forEach(fns, function transform(fn) {\n data = fn(data, headers);\n });\n\n return data;\n};\n","'use strict';\n\nmodule.exports = function isCancel(value) {\n return !!(value && value.__CANCEL__);\n};\n","'use strict';\n\nvar utils = require('./../utils');\nvar transformData = require('./transformData');\nvar isCancel = require('../cancel/isCancel');\nvar defaults = require('../defaults');\nvar isAbsoluteURL = require('./../helpers/isAbsoluteURL');\nvar combineURLs = require('./../helpers/combineURLs');\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n // Support baseURL config\n if (config.baseURL && !isAbsoluteURL(config.url)) {\n config.url = combineURLs(config.baseURL, config.url);\n }\n\n // Ensure headers exist\n config.headers = config.headers || {};\n\n // Transform request data\n config.data = transformData(\n config.data,\n config.headers,\n config.transformRequest\n );\n\n // Flatten headers\n config.headers = utils.merge(\n config.headers.common || {},\n config.headers[config.method] || {},\n config.headers || {}\n );\n\n utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n function cleanHeaderConfig(method) {\n delete config.headers[method];\n }\n );\n\n var adapter = config.adapter || defaults.adapter;\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData(\n response.data,\n response.headers,\n config.transformResponse\n );\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData(\n reason.response.data,\n reason.response.headers,\n config.transformResponse\n );\n }\n }\n\n return Promise.reject(reason);\n });\n};\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n};\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nmodule.exports = function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\n};\n","'use strict';\n\nvar defaults = require('./../defaults');\nvar utils = require('./../utils');\nvar InterceptorManager = require('./InterceptorManager');\nvar dispatchRequest = require('./dispatchRequest');\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n */\nfunction Axios(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n}\n\n/**\n * Dispatch a request\n *\n * @param {Object} config The config specific for this request (merged with this.defaults)\n */\nAxios.prototype.request = function request(config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof config === 'string') {\n config = utils.merge({\n url: arguments[0]\n }, arguments[1]);\n }\n\n config = utils.merge(defaults, {method: 'get'}, this.defaults, config);\n config.method = config.method.toLowerCase();\n\n // Hook up interceptors middleware\n var chain = [dispatchRequest, undefined];\n var promise = Promise.resolve(config);\n\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n chain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n while (chain.length) {\n promise = promise.then(chain.shift(), chain.shift());\n }\n\n return promise;\n};\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(utils.merge(config || {}, {\n method: method,\n url: url\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, data, config) {\n return this.request(utils.merge(config || {}, {\n method: method,\n url: url,\n data: data\n }));\n };\n});\n\nmodule.exports = Axios;\n","'use strict';\n\n/**\n * A `Cancel` is an object that is thrown when an operation is canceled.\n *\n * @class\n * @param {string=} message The message.\n */\nfunction Cancel(message) {\n this.message = message;\n}\n\nCancel.prototype.toString = function toString() {\n return 'Cancel' + (this.message ? ': ' + this.message : '');\n};\n\nCancel.prototype.__CANCEL__ = true;\n\nmodule.exports = Cancel;\n","'use strict';\n\nvar Cancel = require('./Cancel');\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @class\n * @param {Function} executor The executor function.\n */\nfunction CancelToken(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n var resolvePromise;\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n var token = this;\n executor(function cancel(message) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new Cancel(message);\n resolvePromise(token.reason);\n });\n}\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nCancelToken.prototype.throwIfRequested = function throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n};\n\n/**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\nCancelToken.source = function source() {\n var cancel;\n var token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token: token,\n cancel: cancel\n };\n};\n\nmodule.exports = CancelToken;\n","'use strict';\n\nvar utils = require('./utils');\nvar bind = require('./helpers/bind');\nvar Axios = require('./core/Axios');\nvar defaults = require('./defaults');\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n * @return {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n var context = new Axios(defaultConfig);\n var instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context);\n\n // Copy context to instance\n utils.extend(instance, context);\n\n return instance;\n}\n\n// Create the default instance to be exported\nvar axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Factory for creating new instances\naxios.create = function create(instanceConfig) {\n return createInstance(utils.merge(defaults, instanceConfig));\n};\n\n// Expose Cancel & CancelToken\naxios.Cancel = require('./cancel/Cancel');\naxios.CancelToken = require('./cancel/CancelToken');\naxios.isCancel = require('./cancel/isCancel');\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\naxios.spread = require('./helpers/spread');\n\nmodule.exports = axios;\n\n// Allow use of default import syntax in TypeScript\nmodule.exports.default = axios;\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n};\n","module.exports = require('./lib/axios');","import { Response, Request, Result } from 'models/Search';\r\nimport { Value, Facet } from 'models/Facets';\r\nimport { ClientSelections, ClientSelectionValue } from 'store/ClientSelections';\r\n\r\nexport enum FacetSelectionState {\r\n\t/** The facet value is not selected. */\r\n\tNotSelected,\r\n\t/** The facet value is selected. */\r\n\tSelected,\r\n\t/** The facet value is selected, but negated. */\r\n\tNegated,\r\n}\r\n\r\nexport interface SelectionInfo {\r\n\t/** The facet value selection state. */\r\n\tstate: FacetSelectionState;\r\n\r\n\t/**\r\n\t * If the facet value is `FacetSelectionState.Selected` or `FacetSelectionState.Negated`, this is the value of\r\n\t * the facet value. For negated facet values this will be prefixed with the negation character `'-'`.\r\n\t */\r\n\tselectedValue?: string;\r\n\t/**\r\n\t * If the facet value is `FacetSelectionState.Selected` or `FacetSelectionState.Negated`, this is the index\r\n\t * into the `pendingSearch.FacetSelections[facetName]` array for this facet value.\r\n\t */\r\n\tselectionIndex?: number;\r\n}\r\n\r\nexport class SearchStore {\r\n\t/** This represents the next search request that will be executed. */\r\n\tpublic pendingSearch: Partial;\r\n\t/**\r\n\t * Whether or not the next search request will perform history actions (pushing the search into browser\r\n\t * history).\r\n\t */\r\n\tpublic doHistory: boolean;\r\n\r\n\t/** Whether or not a search request is waiting for completion. */\r\n\tpublic isLoading: boolean;\r\n\r\n\tpublic itemsToCompare: Result[];\r\n\tpublic itemsToCompareIds: string[];\r\n\tpublic comparedResults: Result[];\r\n\tpublic productDetails: Partial;\r\n\r\n\t/** The results of the last search request, if one has been performed. Otherwise, `undefined`. */\r\n\tpublic searchResults?: Response;\r\n\r\n\tpublic requestError: boolean;\r\n\r\n\tpublic constructor(initial?: Partial) {\r\n\t\tObject.assign(this, initial);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns whether or not this is the initial load of the search results.\r\n\t */\r\n\tpublic get isInitialLoad() {\r\n\t\treturn this.isLoading && !this.searchResults;\r\n\t}\r\n\r\n\t/**\r\n\t * Determines whether or not the given facet and facet value is selected, and returns info regarding the selection.\r\n\t * @param facet The facet for which the facet value will be checked for selection.\r\n\t * @param facetValue The facet value that will be checked for selection.\r\n\t */\r\n\tpublic isFacetSelected(facet: Facet | string, facetValue: Value | string): SelectionInfo {\r\n\t\tconst facetName = typeof facet === 'string' ? facet : facet.Name;\r\n\t\tconst facetField = typeof facet === 'string' ? facet : facet.selectionField;\r\n\r\n\t\tconst valueValue = typeof facetValue === 'string' ? facetValue : facetValue.Value;\r\n\t\tconst valueLabel = typeof facetValue === 'string' ? facetValue : facetValue.Label;\r\n\r\n\t\tif (!valueValue) {\r\n\t\t\tconsole.error(`Facet ${facetName} (${facetField}) has no facet value for ${valueLabel}`);\r\n\t\t\treturn { state: FacetSelectionState.NotSelected };\r\n\t\t}\r\n\r\n\t\tconst facetSelections = this.pendingSearch.FacetSelections;\r\n\r\n\t\tif (!facetSelections || !facetSelections[facetField]) {\r\n\t\t\treturn { state: FacetSelectionState.NotSelected };\r\n\t\t}\r\n\r\n\t\tconst selectionIdx = facetSelections[facetField]!.indexOf(valueValue);\r\n\t\tconst negationIdx = facetSelections[facetField]!.indexOf(`-${valueValue}`);\r\n\r\n\t\tif (selectionIdx !== -1) {\r\n\t\t\t// if the exact facet value exists, then we're normally selected\r\n\t\t\treturn {\r\n\t\t\t\tstate: FacetSelectionState.Selected,\r\n\t\t\t\tselectedValue: valueValue,\r\n\t\t\t\tselectionIndex: selectionIdx,\r\n\t\t\t};\r\n\t\t} else if (negationIdx !== -1) {\r\n\t\t\t// if the facet value is selected but prefixed with a -, then we're negated\r\n\t\t\treturn {\r\n\t\t\t\tstate: FacetSelectionState.Negated,\r\n\t\t\t\tselectedValue: `-${valueValue}`,\r\n\t\t\t\tselectionIndex: negationIdx,\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\treturn { state: FacetSelectionState.NotSelected };\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an object containing the selections that have been made in both the next search request and also\r\n\t * in the previous search request. This should be used when iterating selections instead of pulling the values\r\n\t * out from the search result or pending search - as this will merge the values together and provide an accurate\r\n\t * view of all facet selections.\r\n\t */\r\n\tpublic get facetSelections(): ClientSelections {\r\n\t\tconst {\r\n\t\t\tpendingSearch: { FacetSelections: clientSelections, SearchWithin },\r\n\t\t\tsearchResults,\r\n\t\t} = this;\r\n\t\tconst selections: ClientSelections = {};\r\n\r\n\t\tif (!clientSelections && !SearchWithin) {\r\n\t\t\treturn selections;\r\n\t\t}\r\n\r\n\t\t// if we've made selections on the client, transform these into more detailed selections.\r\n\t\t// the client-side selections are just facet fields and values without any labels - so we\r\n\t\t// need to combine this information with the list of facets received from the server in the\r\n\t\t// previous search in order to return a rich list of selections\r\n\r\n\t\tconst facets = searchResults ? searchResults.Facets : null;\r\n\r\n\t\tif (!facets) {\r\n\t\t\t// but we can only do this if we've received facet information from the server. without this\r\n\t\t\t// info we can't determine what labels should be used\r\n\t\t\treturn selections;\r\n\t\t}\r\n\r\n\t\t// manually handle the `searchWithin` selection, as this doesn't usually behave like a normal facet selection\r\n\t\t// but instead a field on the search request\r\n\t\tif (SearchWithin) {\r\n\t\t\tconst facet = facets.find(f => f.selectionField === 'searchWithin');\r\n\r\n\t\t\tif (facet) {\r\n\t\t\t\tselections.searchWithin = {\r\n\t\t\t\t\tfacet,\r\n\t\t\t\t\tlabel: facet.Name,\r\n\t\t\t\t\titems: [\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tlabel: SearchWithin,\r\n\t\t\t\t\t\t\tvalue: SearchWithin,\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t],\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (!clientSelections) {\r\n\t\t\treturn selections;\r\n\t\t}\r\n\r\n\t\tObject.keys(clientSelections).forEach(fieldName => {\r\n\t\t\tconst selectionValues = clientSelections[fieldName];\r\n\r\n\t\t\tif (!selectionValues) {\r\n\t\t\t\t// if this selection has no values, it's not really selected\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tconst facet = facets.find(f => f.selectionField === fieldName);\r\n\r\n\t\t\tif (!facet) {\r\n\t\t\t\t// if there's no matching facet from the server, we can't show this since we'll have no labels\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tconst items: ClientSelectionValue[] = [];\r\n\r\n\t\t\tif (facet.FieldType === 'range') {\r\n\t\t\t\t// if the facet this selection is for is a range, there won't be a matching value and thus there won't be a label.\r\n\t\t\t\t// so because of this we'll just use the selection value as the label\r\n\r\n\t\t\t\tselectionValues.forEach(selectionValue => {\r\n\t\t\t\t\titems.push({\r\n\t\t\t\t\t\tlabel: selectionValue,\r\n\t\t\t\t\t\tvalue: selectionValue,\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\t\t\t} else if (facet.FieldType === 'tab') {\r\n\t\t\t\t// do not return the selection value for tab facet\r\n\t\t\t\treturn;\r\n\t\t\t} else {\r\n\t\t\t\t// for other types of facets, try to find a matching value\r\n\r\n\t\t\t\tselectionValues.forEach(selectionValue => {\r\n\t\t\t\t\tconst matchingVal = this.findMatchingValue(selectionValue, facet.Values);\r\n\r\n\t\t\t\t\tif (!matchingVal || !matchingVal.Label) {\r\n\t\t\t\t\t\t// if there's no matching value from the server, we cannot display because there would\r\n\t\t\t\t\t\t// be no label - same if there's no label at all\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\titems.push({\r\n\t\t\t\t\t\tlabel: matchingVal.Label,\r\n\t\t\t\t\t\tvalue: selectionValue,\r\n\t\t\t\t\t\tpath: matchingVal.Path,\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tselections[fieldName] = {\r\n\t\t\t\tfacet,\r\n\t\t\t\tlabel: facet.Name,\r\n\t\t\t\titems,\r\n\t\t\t};\r\n\t\t});\r\n\r\n\t\treturn selections;\r\n\t}\r\n\r\n\tprivate findMatchingValue(selectionValue: string, facetValues: Value[]): Value | null {\r\n\t\tlet matchingValue: Value | null = null;\r\n\t\tif (!facetValues || facetValues.length === 0) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tfor (const facetValue of facetValues) {\r\n\t\t\tconst isMatchingVal = facetValue.Value === selectionValue || `-${facetValue.Value}` === selectionValue;\r\n\t\t\t// loop through children\r\n\t\t\tif (!isMatchingVal) {\r\n\t\t\t\tmatchingValue = this.findMatchingValue(selectionValue, facetValue.Children);\r\n\t\t\t} else {\r\n\t\t\t\tmatchingValue = facetValue;\r\n\t\t\t}\r\n\r\n\t\t\tif (matchingValue) {\r\n\t\t\t\treturn matchingValue;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn matchingValue;\r\n\t}\r\n}\r\n","export class Rule {\r\n\tpublic RuleType: RuleType;\r\n\tpublic Field: string;\r\n\tpublic Condition: string;\r\n\tpublic Value: string;\r\n\tpublic Operator: RuleOperatorType;\r\n\r\n\tpublic Rules: Rule[];\r\n\tpublic Parent: Rule;\r\n\tpublic constructor(init: Rule) {\r\n\t\tObject.assign(this, init);\r\n\t\tif (init.Parent) {\r\n\t\t\tthis.Parent = new Rule(init.Parent);\r\n\t\t}\r\n\t\tthis.Rules = init.Rules ? init.Rules.map(i => new Rule(i)) : [];\r\n\t}\r\n}\r\n\r\nexport enum RuleType {\r\n\tGroup = 0,\r\n\tEval = 1,\r\n}\r\n\r\nexport enum RuleOperatorType {\r\n\tAll = 0,\r\n\tAny = 1,\r\n\tNone = 2,\r\n}\r\n","export class Pagination {\r\n\t/** Number of total items in the result set. */\r\n\tpublic NofResults: number;\r\n\r\n\t/** The page number returned. */\r\n\tpublic CurrentPage: number;\r\n\r\n\t/** The number of items returned for the page. */\r\n\tpublic MaxPerPage: number;\r\n\r\n\t/** The total number of pages for the result set - with the current @see MaxPerPage. */\r\n\tpublic NofPages: number;\r\n\r\n\t/** Set of pagination options */\r\n\tpublic Items: PaginationItem[];\r\n\r\n\tpublic constructor(init: Pagination) {\r\n\t\tObject.assign(this, init);\r\n\r\n\t\tthis.Items = init.Items.map(i => new PaginationItem(i));\r\n\t}\r\n}\r\n\r\nexport class PaginationItem {\r\n\t/** Display label for user's pagination option (i.e. 24 per page). */\r\n\tpublic Label: string;\r\n\t/** The maximum number of items that will be returned per page when this option is selected. */\r\n\tpublic PageSize: number;\r\n\r\n\t/** Indicates if this is the option selected. Only one pagination item will have this set to `true`. */\r\n\tpublic Selected: boolean;\r\n\r\n\t/** Indicates if this is the default option. Only one pagination item will have this set to `true`. */\r\n\tpublic Default: boolean;\r\n\r\n\tpublic constructor(init: PaginationItem) {\r\n\t\tObject.assign(this, init);\r\n\t}\r\n}\r\n","import { Explain } from './Explain';\r\n\r\nexport class Result {\r\n\t/** Unique identifier for this search result item. */\r\n\tpublic DocId: string;\r\n\r\n\t/** Calculated relevancy score. */\r\n\tpublic Score: number;\r\n\r\n\t/**\r\n\t * Contains the fields for the search result item, as an object of string keys to an array\r\n\t * of string values. The keys correspond to the name of the field within the hawk dashboard,\r\n\t * and the value of the map is an array of strings for each of the values for that field.\r\n\t */\r\n\tpublic Document?: { [field: string]: string[] };\r\n\r\n\tpublic Explain?: Explain;\r\n\r\n\tpublic IsPin: boolean;\r\n\r\n\tpublic BestFragments: string;\r\n\r\n\tpublic BestFragment: string;\r\n\t/**\r\n\t * Returns a single document value, by the given field name. If the field does not exist in\r\n\t * the document, or has no values, then `undefined` is returned instead.\r\n\t * @param field The field within the result document to retrieve the value of.\r\n\t */\r\n\tpublic getDocumentValue(field: string): string | undefined {\r\n\t\tif (this.Document) {\r\n\t\t\tconst values = this.Document[field];\r\n\r\n\t\t\tif (values && values.length > 0) {\r\n\t\t\t\treturn values[0];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn undefined;\r\n\t}\r\n\r\n\tpublic constructor(init: Result) {\r\n\t\tObject.assign(this, init);\r\n\t}\r\n}\r\n","export class Sorting {\r\n\t/** The sorting items. */\r\n\tpublic Items: SortingItem[];\r\n\r\n\tpublic constructor(init: Sorting) {\r\n\t\tObject.assign(this, init);\r\n\r\n\t\tthis.Items = init.Items.map(i => new SortingItem(i));\r\n\t}\r\n}\r\n\r\nexport class SortingItem {\r\n\t/** Name of the sorting option. This is the label to display to users. */\r\n\tpublic Label: string;\r\n\t/**\r\n\t * The value to be used to specify the sort order once user selects it. This value is passed in the @see Request.SortBy\r\n\t * field in the @see Request object.\r\n\t */\r\n\tpublic Value: string;\r\n\r\n\t/** Indicates if this sorting option was configured to be the default. */\r\n\tpublic IsDefault: boolean;\r\n\t/** Indicates if this sorting option is currently being used for the current result set. */\r\n\tpublic Selected: boolean;\r\n\r\n\tpublic constructor(init: SortingItem) {\r\n\t\tObject.assign(this, init);\r\n\t}\r\n}\r\n","export class Selections {\r\n\t[field: string]: SelectionFacet;\r\n\r\n\tpublic constructor(init: Selections) {\r\n\t\tObject.assign(this, init);\r\n\r\n\t\tObject.keys(init).forEach(key => {\r\n\t\t\tconst selFacet = init[key];\r\n\r\n\t\t\tthis[key] = new SelectionFacet(selFacet);\r\n\t\t});\r\n\t}\r\n}\r\n\r\nexport class SelectionFacet {\r\n\t/** Display name for facet. */\r\n\tpublic Label: string;\r\n\r\n\t/** Will contain an entry for each selection made within the facet. */\r\n\tpublic Items: SelectionFacetValue[];\r\n\r\n\tpublic constructor(init: SelectionFacet) {\r\n\t\tObject.assign(this, init);\r\n\r\n\t\tthis.Items = init.Items.map(i => new SelectionFacetValue(i));\r\n\t}\r\n}\r\n\r\nexport class SelectionFacetValue {\r\n\t/** Display label for facet value. */\r\n\tpublic Label: string;\r\n\r\n\t/** Value for facet value. */\r\n\tpublic Value: string;\r\n\r\n\tpublic constructor(init: SelectionFacetValue) {\r\n\t\tObject.assign(this, init);\r\n\t}\r\n}\r\n","export class Value {\r\n\t/** Label of the value to display. */\r\n\tpublic Label?: string;\r\n\t/** Value to use when setting the facet value selection. */\r\n\tpublic Value?: string;\r\n\r\n\t/** Number of results in current set that have this facet value. */\r\n\tpublic Count: number;\r\n\t/** Indicates if this facet value has been selected. */\r\n\tpublic Selected: boolean;\r\n\r\n\t/**\r\n\t * Used for displaying the slider facet. @see RangeStart indicates what the starting point of the range\r\n\t * to display, either on basis of what the user selected by sliding the slider, or if they have no\r\n\t * selection it reflects the lowest price product.\r\n\t */\r\n\tpublic RangeStart?: string;\r\n\t/**\r\n\t * Used for displaying the slider facet. @see RangeEnd indicates what the end point of the range to\r\n\t * display is, either on basis of what the user selected by sliding the slider, or if they have no\r\n\t * selection, it reflects the highest price product.\r\n\t */\r\n\tpublic RangeEnd?: string;\r\n\r\n\t/**\r\n\t * Used for displaying the slider facet. @see RangeMin indicates lowest value for the range in the list\r\n\t * of products displayed.\r\n\t */\r\n\tpublic RangeMin?: string;\r\n\t/**\r\n\t * Used for displaying the slider facet. @see RangeMax indicates highest value for the range in the list\r\n\t * of products displayed.\r\n\t */\r\n\tpublic RangeMax?: string;\r\n\r\n\t/** Used for nested facets. */\r\n\tpublic Path?: string;\r\n\r\n\t/** Set of pagination options */\r\n\tpublic Children: Value[];\r\n\r\n\tpublic Level: number;\r\n\r\n\tpublic constructor(init: Value) {\r\n\t\tObject.assign(this, init);\r\n\t}\r\n}\r\n","export class Swatch {\r\n\t/** Match this value to the @see Value object in the @see Values array of @see Facet. */\r\n\tpublic Value: string;\r\n\r\n\t/** Name of the asset. */\r\n\tpublic AssetName: string;\r\n\t/** URL of the asset. */\r\n\tpublic AssetUrl: string;\r\n\r\n\t/** Indicates if value is the default. */\r\n\tpublic IsDefault: boolean;\r\n\r\n\t/** Color of the asset. */\r\n\tpublic Color: string;\r\n\r\n\tpublic constructor(init: Swatch) {\r\n\t\tObject.assign(this, init);\r\n\t}\r\n}\r\n","export class Range {\r\n\t/** Label of the value to display. */\r\n\tpublic Label: string;\r\n\t/** Value to use when setting the facet value selection. */\r\n\tpublic Value: string;\r\n\r\n\t/** Indicates if the values are numeric. */\r\n\tpublic IsNumeric: boolean;\r\n\r\n\t/** Lower value of the range. */\r\n\tpublic LBound: string;\r\n\t/** Upper value of the range. */\r\n\tpublic UBound: string;\r\n\t/** Asset Url */\r\n\tpublic AssetFullUrl: string;\r\n\r\n\tpublic constructor(init: Range) {\r\n\t\tObject.assign(this, init);\r\n\t}\r\n}\r\n","import { Value } from './Value';\r\nimport { Swatch } from './Swatch';\r\nimport { Range } from './Range';\r\nimport { FacetType } from 'models/Facets/FacetType';\r\n\r\nexport class Facet {\r\n\t/** Unique identifier of the facet. */\r\n\tpublic FacetId: number;\r\n\r\n\t/** Display name of the facet. */\r\n\tpublic Name: string;\r\n\r\n\t/** The name of the field that is linked to this facet. */\r\n\tpublic Field: string;\r\n\r\n\tpublic FieldType: 'string' | 'range' | 'numeric' | 'search' | 'tab';\r\n\tpublic FacetType: FacetType;\r\n\r\n\tpublic DisplayType: 'default' | 'scrolling' | 'truncating';\r\n\r\n\t/** Indicates the maximum number of facet values that are returned. */\r\n\tpublic MaxCount: number;\r\n\r\n\t/** Indicates the minimum number of results each facet value needs to have in order to be returned. */\r\n\tpublic MinHitCount: number;\r\n\r\n\t/**\r\n\t * If this is set, it is to be used as the facet name if passed in the `FacetSelections`. If not set,\r\n\t * the value of the Field object would be used. (This is only applicable when a slider and range\r\n\t * facets are both configured for the same field.)\r\n\t */\r\n\tpublic ParamName?: string;\r\n\r\n\t/**\r\n\t * Indicates the sorting logic that is used for this facet’s values. The possible values for this\r\n\t * are the parameters for sorting set options that are configured in \"Workbench > Data Configuration\r\n\t * > Sorting/Pagination\".\r\n\t */\r\n\tpublic SortBy: string;\r\n\r\n\t/** Indicates if the user should be able to apply more than one filter value from this facet. */\r\n\tpublic ExpandSelection: boolean;\r\n\r\n\t/** Indicates if facet values are numeric. */\r\n\tpublic IsNumeric: boolean;\r\n\t/** Indicates if facet values are currency (and should be displayed appropriately). */\r\n\tpublic IsCurrency: boolean;\r\n\t/** Indicates currency symbol in case of currency type facets */\r\n\tpublic CurrencySymbol: string;\r\n\t/** Indicates if the facet can be collapsed and expanded by the user. */\r\n\tpublic IsCollapsible: boolean;\r\n\t/** If @see IsCollapsible is `true`, this indicates if the facet should initially be collapsed or expanded. */\r\n\tpublic IsCollapsedDefault: boolean;\r\n\t/** Indicates if the facet is set to be visible. */\r\n\tpublic IsVisible: boolean;\r\n\t/**\r\n\t * Indicates if search is enabled for this facet. If it is enabled, a search box should be available for\r\n\t * users to filter the facet values by typing in the search box.\r\n\t */\r\n\tpublic IsSearch: boolean;\r\n\r\n\t/**\r\n\t * If facet display type is Scrolling, this value is the height in pixels for the window inside scroll box.\r\n\t * Only to be used if @see DisplayType is `\"scrolling\"`.\r\n\t */\r\n\tpublic ScrollHeight: number;\r\n\t/**\r\n\t * If the number of facet values exceeds this number and @see DisplayType is `\"scrolling\"`, then the facet\r\n\t * should be displayed as scrolling list; if not, display as `\"default\"`.\r\n\t */\r\n\tpublic ScrollThreshold: number;\r\n\t/**\r\n\t * If the number of facet values exceeds this number and @see DisplayType is `\"truncate\"`, then the facet\r\n\t * should be displayed as truncated list; if not, display as `\"default\"`.\r\n\t */\r\n\tpublic TruncateThreshold: number;\r\n\t/**\r\n\t * To be used if @see IsSearch is `true`. The number of facet values must be this number or higher for the\r\n\t * facet search box to display.\r\n\t */\r\n\tpublic SearchThreshold: number;\r\n\r\n\t/** Text to display when user hovers over a help icon. */\r\n\tpublic Tooltip?: string;\r\n\r\n\t/**\r\n\t * If `false`, indicates that sometimes this facet will not be returned. The conditions that trigger its\r\n\t * display are maintained in the Workbench.\r\n\t */\r\n\tpublic AlwaysVisible: boolean;\r\n\r\n\t/**\r\n\t * The display order of the facet in the facet list.\r\n\t */\r\n\tpublic SortOrder: number;\r\n\r\n\t/** This is maximum number of values that could be returned for the facet. */\r\n\tpublic NofVisible: number;\r\n\r\n\t/** Will be included if @see FacetType is `\"swatch\"`. */\r\n\tpublic SwatchData: Swatch[];\r\n\r\n\t/** Indicates type of facet range display. */\r\n\tpublic FacetRangeDisplayType: number;\r\n\r\n\t/** Indicates if setting in Workbench is set to On or Off. */\r\n\tpublic PreloadChildren: boolean;\r\n\r\n\t/**\r\n\t * To be used if @see FacetType is `\"slider\"`. If @see ShowSliderInputs is `true`, input boxes should be\r\n\t * available for user to enter values.\r\n\t */\r\n\tpublic ShowSliderInputs: boolean;\r\n\r\n\t/** Always present, but will only be populated if the facet is numeric and not a slider. */\r\n\tpublic Ranges: Range[];\r\n\t/** The values for this facet. */\r\n\tpublic Values: Value[];\r\n\t// Data type for datetime facet type\r\n\tpublic DataType?: string;\r\n\r\n\t/** Whether or not the facet should be rendered as truncated. */\r\n\tpublic get shouldTruncate() {\r\n\t\t// the facet does truncated listing of values if configured for truncating and we have too many facets\r\n\t\treturn this.DisplayType === 'truncating' && this.Values.length > this.TruncateThreshold;\r\n\t}\r\n\t/** Whether or not the facet should have a quick lookup search input. */\r\n\tpublic get shouldSearch() {\r\n\t\t// the facet should have a search box if configured to do so, and the number of facet values is greater\r\n\t\t// than the threshold\r\n\t\treturn this.IsSearch && this.Values.length > this.SearchThreshold;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns the name of the key when using this facet for a selection. This will take into consideration\r\n\t * @see ParamName and @see Field in determining which value should be returned.\r\n\t */\r\n\tpublic get selectionField() {\r\n\t\treturn this.ParamName ? this.ParamName : this.Field;\r\n\t}\r\n\r\n\tpublic constructor(init: Facet) {\r\n\t\tObject.assign(this, init);\r\n\r\n\t\tthis.SwatchData = init.SwatchData.map(s => new Swatch(s));\r\n\t\tthis.Ranges = init.Ranges.map(r => new Range(r));\r\n\t\tthis.Values = init.Values.map(v => new Value(v));\r\n\t}\r\n}\r\n","import { Rule } from './Rule';\r\n\r\nexport class BannerTrigger {\r\n\tpublic BannerGroupId: number;\r\n\tpublic Name: string;\r\n\tpublic SortOrder: number;\r\n\tpublic Rule: Rule;\r\n\r\n\tpublic constructor(init: BannerTrigger) {\r\n\t\tObject.assign(this, init);\r\n\r\n\t\tthis.Rule = new Rule(this.Rule);\r\n\t}\r\n}\r\n","export enum ContentType {\r\n\tImage = 'image',\r\n\tWidget = 'widget',\r\n\tFeatured = 'featured',\r\n\tCustom = 'custom',\r\n\tLandingPage = 'landingPage',\r\n}\r\n","import { ContentType } from './ContentType';\r\nimport { Result } from './Result';\r\nimport { BannerTrigger } from './Trigger';\r\n\r\nexport class FeaturedItems {\r\n\tpublic Items: FeaturedItem[];\r\n\r\n\tpublic constructor(init: FeaturedItems) {\r\n\t\tObject.assign(this, init);\r\n\t\tif (init && init.Items) {\r\n\t\t\tthis.Items = init.Items.map(i => new FeaturedItem(i));\r\n\t\t}\r\n\t}\r\n}\r\n\r\nexport class Merchandising {\r\n\tpublic Items: MerchandisingItem[];\r\n\r\n\tpublic constructor(init: Merchandising) {\r\n\t\tObject.assign(this, init);\r\n\t\tif (init && init.Items) {\r\n\t\t\tthis.Items = init.Items.map(i => new MerchandisingItem(i));\r\n\t\t}\r\n\t}\r\n}\r\n\r\nexport class PageContentItem {\r\n\tpublic Zone: string;\r\n\tpublic ContentType: ContentType;\r\n\tpublic ImageUrl: string;\r\n\tpublic AltTag: string;\r\n\tpublic ForwardUrl: string;\r\n\tpublic Output: any;\r\n\tpublic WidgetArgs: string;\r\n\tpublic Title: string;\r\n\tpublic Name: string;\r\n\tpublic DateFrom: string;\r\n\tpublic DateTo: string;\r\n\tpublic IsMobile: boolean;\r\n\tpublic MobileContentType: string;\r\n\tpublic MobileImageUrl: string;\r\n\tpublic MobileOutput: string;\r\n\tpublic MobileWidgetArgs: string;\r\n\tpublic IsTrackingEnabled: boolean;\r\n\tpublic MobileIsTrackingEnabled?: boolean;\r\n\tpublic FeaturedItems: Result[];\r\n\tpublic Items: Result[];\r\n\tpublic Target: string;\r\n\tpublic MobileTarget: string;\r\n\tpublic MobileAltTag: string;\r\n\tpublic MobileForwardUrl: string;\r\n\tpublic MobileWidth: string;\r\n\tpublic MobileHeight: string;\r\n\tpublic Trigger: BannerTrigger;\r\n\r\n\tpublic constructor(init: PageContentItem) {\r\n\t\tObject.assign(this, init);\r\n\t\tif (init.FeaturedItems) {\r\n\t\t\tthis.FeaturedItems = init.FeaturedItems.map(i => new Result(i));\r\n\t\t}\r\n\t\tif (init.Trigger) {\r\n\t\t\tthis.Trigger = new BannerTrigger(init.Trigger);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nexport class FeaturedItem extends PageContentItem {\r\n\tpublic Items: Result[];\r\n\r\n\tpublic constructor(init: FeaturedItem) {\r\n\t\tsuper(init);\r\n\t\tObject.assign(this, init);\r\n\t\tthis.Items = init.Items.map(i => new Result(i));\r\n\t}\r\n}\r\n\r\nexport class MerchandisingItem extends PageContentItem {\r\n\tpublic constructor(init: MerchandisingItem) {\r\n\t\tsuper(init);\r\n\t\tObject.assign(this, init);\r\n\t}\r\n}\r\n","import { PageContentItem } from './Merchandising';\r\n\r\nexport class PageContent {\r\n\tpublic ZoneName: string;\r\n\tpublic Items: PageContentItem[];\r\n\tpublic constructor(init: PageContent) {\r\n\t\tObject.assign(this, init);\r\n\t\tthis.Items = init.Items.map(i => new PageContentItem(i));\r\n\t}\r\n}\r\n","import { Pagination } from './Pagination';\r\nimport { Result } from './Result';\r\nimport { Sorting } from './Sorting';\r\nimport { Selections } from './Selections';\r\nimport { Facet } from 'models/Facets';\r\nimport { Merchandising, FeaturedItems } from './Merchandising';\r\nimport { StringLiteral } from '@babel/types';\r\nimport { PageContent } from './PageContent';\r\n\r\nexport class Response {\r\n\t/** Indicates if request was successful. */\r\n\tpublic Success: boolean;\r\n\r\n\t/** Summary of pagination details and a set of pagination options. */\r\n\tpublic Pagination: Pagination;\r\n\r\n\t/**\r\n\t * The Keyword value that was sent to Hawksearch in the request. If no Keyword was set in the\r\n\t * request, the value will be empty.\r\n\t */\r\n\tpublic Keyword: string;\r\n\r\n\t/**\r\n\t * If this is populated, it indicates that the Keyword value returned 0 results, but the results\r\n\t * in this response are from this AdjustedKeyword. A message should be displayed to the user\r\n\t * informing them that their search was corrected to this string.\r\n\t *\r\n\t * This is the result of Auto Correct, which is configured in the Workbench > Keyword Search >\r\n\t * Did You Mean.\r\n\t */\r\n\tpublic AdjustedKeyword?: string;\r\n\r\n\t/** An entry in the array for each item returned in search results. */\r\n\tpublic Results: Result[];\r\n\r\n\tpublic Facets: Facet[];\r\n\r\n\t/**\r\n\t * Will contain an entry for each facet that has one or more selections. Will be empty if no facet\r\n\t * selections have been made.\r\n\t */\r\n\tpublic Selections: Selections;\r\n\r\n\tpublic Sorting: Sorting;\r\n\r\n\t/**\r\n\t * If any strings are returned in the array, they should be displayed to the user as suggested\r\n\t * search terms.\r\n\t *\r\n\t * This is the result of Did You Mean, which is configured in the Workbench > Keyword Search >\r\n\t * Did You Mean.\r\n\t */\r\n\tpublic DidYouMean: string[];\r\n\r\n\t/**\r\n\t * Merchandising can be placed by using Campaigns in the Hawksearch Workbench. The Campaign will\r\n\t * determine if the content should appear and in what zone.\r\n\t */\r\n\tpublic Merchandising: Merchandising; // TODO: merchandising object\r\n\tpublic FeaturedItems: FeaturedItems; // TODO: featured items object\r\n\r\n\tpublic SearchDuration: number;\r\n\r\n\tpublic DocExplain?: string;\r\n\r\n\t/**\r\n\t * Properties that gets populated when user requests landing page related results\r\n\t *\r\n\t */\r\n\r\n\tpublic Breadcrumb: string;\r\n\r\n\tpublic CustomHtml: string;\r\n\r\n\tpublic HeaderTitle: string;\r\n\r\n\tpublic MetaDescription: string;\r\n\r\n\tpublic MetaKeywords: string;\r\n\tpublic MetaRobots: string;\r\n\tpublic Name: string;\r\n\tpublic Next: string;\r\n\tpublic Prev: string;\r\n\tpublic PageHeading: string;\r\n\tpublic PageContent: PageContent[];\r\n\tpublic RelCanonical: string;\r\n\tpublic PageLayoutId: number;\r\n\tpublic TrackingId: string;\r\n\tpublic VisitorTargets: Array<{ Id: number; Name: string }>;\r\n\tpublic Redirect: { Location?: string; Target?: string };\r\n\r\n\t// end of landing page related fields\r\n\tpublic constructor(init: Response) {\r\n\t\tObject.assign(this, init);\r\n\r\n\t\tthis.Pagination = new Pagination(init.Pagination);\r\n\t\tthis.Merchandising = new Merchandising(init.Merchandising);\r\n\t\tthis.FeaturedItems = new FeaturedItems(init.FeaturedItems);\r\n\t\tthis.Results = init.Results.map(r => new Result(r));\r\n\t\tthis.Facets = init.Facets.map(f => new Facet(f));\r\n\t\tthis.PageContent = init.PageContent ? init.PageContent.map(p => new PageContent(p)) : [];\r\n\t\tthis.Selections = new Selections(init.Selections);\r\n\t\tthis.Sorting = new Sorting(init.Sorting);\r\n\t}\r\n}\r\n","class AuthToken {\r\n\tprivate static instance: AuthToken;\r\n\tprivate refreshToken: string;\r\n\tprivate accessToken: string;\r\n\r\n\t/**\r\n\t * The Singleton's constructor should always be private to prevent direct\r\n\t * construction calls with the `new` operator.\r\n\t */\r\n\tprivate constructor() {}\r\n\r\n\t/**\r\n\t * The static method that controls the access to the singleton instance.\r\n\t *\r\n\t * This implementation let you subclass the Singleton class while keeping\r\n\t * just one instance of each subclass around.\r\n\t */\r\n\tpublic static getInstance(url?: string): AuthToken {\r\n\t\tif (!AuthToken.instance) {\r\n\t\t\tAuthToken.instance = new AuthToken();\r\n\t\t}\r\n\r\n\t\treturn AuthToken.instance;\r\n\t}\r\n\r\n\tpublic setTokens(accessToken: string, refreshToken: string) {\r\n\t\tthis.refreshToken = refreshToken;\r\n\t\tthis.accessToken = accessToken;\r\n\t}\r\n\r\n\tpublic getTokens() {\r\n\t\treturn {\r\n\t\t\trefreshToken: this.refreshToken,\r\n\t\t\taccessToken: this.accessToken,\r\n\t\t};\r\n\t}\r\n}\r\n\r\nexport default AuthToken.getInstance();\r\n","export enum FacetType {\r\n\tCheckbox = 'checkbox',\r\n\tNestedCheckbox = 'nestedcheckbox',\r\n\tLink = 'link',\r\n\tNestedlink = 'nestedlinklist',\r\n\tSlider = 'slider',\r\n\tSwatch = 'swatch',\r\n\tRating = 'rating',\r\n\tSize = 'size',\r\n\tSearchWithin = 'search',\r\n\tRecentSearches = 'recentsearches',\r\n\tRelatedSearches = 'relatedsearches',\r\n\tOpenRange = 'openRange',\r\n}\r\n","enum E_T {\r\n\tpageLoad = 1,\r\n\tsearch = 2,\r\n\tclick = 3,\r\n\taddToCart = 4,\r\n\trate = 5,\r\n\tsale = 6,\r\n\tbannerClick = 7,\r\n\tbannerImpression = 8,\r\n\trecommendationClick = 10,\r\n\tautoCompleteClick = 11,\r\n\tadd2CartMultiple = 14,\r\n}\r\n\r\nenum P_T {\r\n\titem = 1,\r\n\tlanding = 2,\r\n\tcart = 3,\r\n\torder = 4,\r\n\tcustom = 5,\r\n}\r\n\r\nexport enum SuggestType {\r\n\tPopularSearches = 1,\r\n\tTopCategories = 2,\r\n\tTopProductMatches = 3,\r\n\tTopContentMatches = 4,\r\n}\r\n\r\nexport enum SearchType {\r\n\tInitial = 1,\r\n\tRefinement = 2,\r\n}\r\n\r\nclass TrackingEvent {\r\n\tprivate static instance: TrackingEvent;\r\n\tprivate trackingURL: string;\r\n\tprivate clientGUID: string;\r\n\r\n\t/**\r\n\t * The Singleton's constructor should always be private to prevent direct\r\n\t * construction calls with the `new` operator.\r\n\t */\r\n\tprivate constructor() {}\r\n\r\n\t/**\r\n\t * The static method that controls the access to the singleton instance.\r\n\t *\r\n\t * This implementation let you subclass the Singleton class while keeping\r\n\t * just one instance of each subclass around.\r\n\t */\r\n\tpublic static getInstance(url?: string): TrackingEvent {\r\n\t\tif (!TrackingEvent.instance) {\r\n\t\t\tTrackingEvent.instance = new TrackingEvent();\r\n\t\t}\r\n\r\n\t\treturn TrackingEvent.instance;\r\n\t}\r\n\r\n\t/**\r\n\t * Finally, any singleton should define some business logic, which can be\r\n\t * executed on its instance.\r\n\t */\r\n\r\n\tpublic setTrackingURL(url: string) {\r\n\t\tthis.trackingURL = url;\r\n\t}\r\n\r\n\tpublic getTrackingURL() {\r\n\t\treturn this.trackingURL;\r\n\t}\r\n\r\n\tpublic setClientGUID(guid: string) {\r\n\t\tthis.clientGUID = guid;\r\n\t}\r\n\r\n\tpublic getClientGUID() {\r\n\t\treturn this.getClientGUID;\r\n\t}\r\n\r\n\tprivate getVisitorExpiry() {\r\n\t\tconst d = new Date();\r\n\t\t// 1 year\r\n\t\td.setTime(d.getTime() + 360 * 24 * 60 * 60 * 1000);\r\n\t\treturn d.toUTCString();\r\n\t}\r\n\r\n\tprivate getVisitExpiry() {\r\n\t\tconst d = new Date();\r\n\t\t// 4 hours\r\n\t\td.setTime(d.getTime() + 4 * 60 * 60 * 1000);\r\n\t\treturn d.toUTCString();\r\n\t}\r\n\r\n\tprivate createGuid() {\r\n\t\tconst s: any[] = [];\r\n\t\tconst hexDigits = '0123456789abcdef';\r\n\t\tfor (let i = 0; i < 36; i++) {\r\n\t\t\ts[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1);\r\n\t\t}\r\n\t\ts[14] = '4'; // bits 12-15 of the time_hi_and_version field to 0010\r\n\t\t// tslint:disable-next-line: no-bitwise\r\n\t\ts[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1); // bits 6-7 of the clock_seq_hi_and_reserved to 01\r\n\t\ts[8] = s[13] = s[18] = s[23] = '-';\r\n\r\n\t\tconst uuid = s.join('');\r\n\t\treturn uuid;\r\n\t}\r\n\r\n\tprivate getCookie(name) {\r\n\t\tconst nameEQ = name + '=';\r\n\t\tconst ca = document.cookie.split(';');\r\n\t\t// tslint:disable-next-line: prefer-for-of\r\n\t\tfor (let i = 0; i < ca.length; i++) {\r\n\t\t\tlet c = ca[i];\r\n\t\t\twhile (c.charAt(0) === ' ') {\r\n\t\t\t\tc = c.substring(1, c.length);\r\n\t\t\t}\r\n\t\t\tif (c.indexOf(nameEQ) === 0) {\r\n\t\t\t\treturn c.substring(nameEQ.length, c.length);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn null;\r\n\t}\r\n\r\n\tprivate setCookie(name, value, expiry?) {\r\n\t\tlet expires;\r\n\t\tif (expiry) {\r\n\t\t\texpires = '; expires=' + expiry;\r\n\t\t} else {\r\n\t\t\texpires = '';\r\n\t\t}\r\n\t\tdocument.cookie = name + '=' + value + expires + '; path=/';\r\n\t}\r\n\r\n\tprivate writePageLoad(pageType) {\r\n\t\tconst c = document.documentElement;\r\n\t\tconst pl = {\r\n\t\t\tEventType: E_T.pageLoad,\r\n\t\t\tEventData: btoa(\r\n\t\t\t\tJSON.stringify({\r\n\t\t\t\t\tPageTypeId: P_T[pageType],\r\n\t\t\t\t\tRequestPath: window.location.pathname,\r\n\t\t\t\t\tQs: window.location.search,\r\n\t\t\t\t\tViewportHeight: c.clientHeight,\r\n\t\t\t\t\tViewportWidth: c.clientWidth,\r\n\t\t\t\t})\r\n\t\t\t),\r\n\t\t};\r\n\t\tthis.mr(pl);\r\n\t}\r\n\r\n\tprivate writeSearchTracking(trackingId: string, typeId: number, keyword: string) {\r\n\t\tif (typeId === SearchType.Initial) {\r\n\t\t\tthis.setCookie('hawk_query_id', this.createGuid());\r\n\t\t}\r\n\t\tconst queryId = this.getCookie('hawk_query_id');\r\n\t\tconst c = document.documentElement;\r\n\t\tconst pl = {\r\n\t\t\tEventType: E_T.search,\r\n\t\t\tEventData: btoa(\r\n\t\t\t\tJSON.stringify({\r\n\t\t\t\t\tQueryId: queryId,\r\n\t\t\t\t\tTrackingId: trackingId,\r\n\t\t\t\t\tTypeId: typeId,\r\n\t\t\t\t\tViewportHeight: c.clientHeight,\r\n\t\t\t\t\tViewportWidth: c.clientWidth,\r\n\t\t\t\t\tkeyword,\r\n\t\t\t\t})\r\n\t\t\t),\r\n\t\t};\r\n\t\tthis.mr(pl);\r\n\t}\r\n\r\n\tprivate writeClick(event, uniqueId, trackingId, url) {\r\n\t\tconst c = document.documentElement;\r\n\t\tconst pl = {\r\n\t\t\tEventType: E_T.click,\r\n\t\t\tEventData: btoa(\r\n\t\t\t\tJSON.stringify({\r\n\t\t\t\t\tUrl: url,\r\n\t\t\t\t\tQs: window.location.search,\r\n\t\t\t\t\tRequestPath: window.location.pathname,\r\n\t\t\t\t\tTrackingId: trackingId,\r\n\t\t\t\t\tUniqueId: uniqueId,\r\n\t\t\t\t\tViewportHeight: c.clientHeight,\r\n\t\t\t\t\tViewportWidth: c.clientWidth,\r\n\t\t\t\t})\r\n\t\t\t),\r\n\t\t};\r\n\t\tthis.mr(pl);\r\n\t}\r\n\r\n\tprivate writeBannerClick(bannerId, campaignId, trackingId) {\r\n\t\tconst pl = {\r\n\t\t\tEventType: E_T.bannerClick,\r\n\t\t\tEventData: btoa(\r\n\t\t\t\tJSON.stringify({\r\n\t\t\t\t\tCampaignId: campaignId,\r\n\t\t\t\t\tBannerId: bannerId,\r\n\t\t\t\t\tTrackingId: trackingId,\r\n\t\t\t\t})\r\n\t\t\t),\r\n\t\t};\r\n\t\tthis.mr(pl);\r\n\t}\r\n\r\n\tprivate writeBannerImpression(bannerId, campaignId, trackingId) {\r\n\t\tconst pl = {\r\n\t\t\tEventType: E_T.bannerImpression,\r\n\t\t\tEventData: btoa(\r\n\t\t\t\tJSON.stringify({\r\n\t\t\t\t\tCampaignId: campaignId,\r\n\t\t\t\t\tBannerId: bannerId,\r\n\t\t\t\t\tTrackingId: trackingId,\r\n\t\t\t\t})\r\n\t\t\t),\r\n\t\t};\r\n\t\tthis.mr(pl);\r\n\t}\r\n\tprivate writeSale(orderNo, itemList, total, subTotal, tax, currency) {\r\n\t\tconst pl = {\r\n\t\t\tEventType: E_T.sale,\r\n\t\t\tEventData: btoa(\r\n\t\t\t\tJSON.stringify({\r\n\t\t\t\t\tOrderNo: orderNo,\r\n\t\t\t\t\tItemList: itemList,\r\n\t\t\t\t\tTotal: total,\r\n\t\t\t\t\tTax: tax,\r\n\t\t\t\t\tSubTotal: subTotal,\r\n\t\t\t\t\tCurrency: currency,\r\n\t\t\t\t})\r\n\t\t\t),\r\n\t\t};\r\n\t\tthis.mr(pl);\r\n\t}\r\n\tprivate writeAdd2Cart(uniqueId, price, quantity, currency) {\r\n\t\tconst pl = {\r\n\t\t\tEventType: E_T.addToCart,\r\n\t\t\tEventData: btoa(\r\n\t\t\t\tJSON.stringify({\r\n\t\t\t\t\tUniqueId: uniqueId,\r\n\t\t\t\t\tQuantity: quantity,\r\n\t\t\t\t\tPrice: price,\r\n\t\t\t\t\tCurrency: currency,\r\n\t\t\t\t})\r\n\t\t\t),\r\n\t\t};\r\n\t\tthis.mr(pl);\r\n\t}\r\n\r\n\tprivate writeAdd2CartMultiple(args) {\r\n\t\tconst pl = {\r\n\t\t\tEventType: E_T.add2CartMultiple,\r\n\t\t\tEventData: btoa(\r\n\t\t\t\tJSON.stringify({\r\n\t\t\t\t\tItemsList: args,\r\n\t\t\t\t})\r\n\t\t\t),\r\n\t\t};\r\n\t\tthis.mr(pl);\r\n\t}\r\n\r\n\tprivate writeRate(uniqueId, value) {\r\n\t\tconst pl = {\r\n\t\t\tEventType: E_T.rate,\r\n\t\t\tEventData: btoa(\r\n\t\t\t\tJSON.stringify({\r\n\t\t\t\t\tUniqueId: uniqueId,\r\n\t\t\t\t\tValue: value,\r\n\t\t\t\t})\r\n\t\t\t),\r\n\t\t};\r\n\t\tthis.mr(pl);\r\n\t}\r\n\r\n\tprivate writeRecommendationClick(widgetGuid, uniqueId, itemIndex, requestId) {\r\n\t\tconst pl = {\r\n\t\t\tEventType: E_T.recommendationClick,\r\n\t\t\tEventData: btoa(\r\n\t\t\t\tJSON.stringify({\r\n\t\t\t\t\tItemIndex: itemIndex,\r\n\t\t\t\t\tRequestId: requestId,\r\n\t\t\t\t\tUniqueId: uniqueId,\r\n\t\t\t\t\tWidgetGuid: widgetGuid,\r\n\t\t\t\t})\r\n\t\t\t),\r\n\t\t};\r\n\t\tthis.mr(pl);\r\n\t}\r\n\r\n\tprivate writeAutoCompleteClick(keyword, suggestType, name, url) {\r\n\t\tconst pl = {\r\n\t\t\tEventType: E_T.autoCompleteClick,\r\n\t\t\tEventData: btoa(\r\n\t\t\t\tJSON.stringify({\r\n\t\t\t\t\tKeyword: keyword,\r\n\t\t\t\t\tName: name,\r\n\t\t\t\t\tSuggestType: suggestType,\r\n\t\t\t\t\tUrl: url,\r\n\t\t\t\t})\r\n\t\t\t),\r\n\t\t};\r\n\t\tthis.mr(pl);\r\n\t}\r\n\r\n\tprivate mr(data) {\r\n\t\tlet visitId = this.getCookie('hawk_visit_id');\r\n\t\tlet visitorId = this.getCookie('hawk_visitor_id');\r\n\t\tif (!visitId) {\r\n\t\t\tthis.setCookie('hawk_visit_id', this.createGuid(), this.getVisitExpiry());\r\n\t\t\tvisitId = this.getCookie('hawk_visit_id');\r\n\t\t}\r\n\t\tif (!visitorId) {\r\n\t\t\tthis.setCookie('hawk_visitor_id', this.createGuid(), this.getVisitorExpiry());\r\n\t\t\tvisitorId = this.getCookie('hawk_visitor_id');\r\n\t\t}\r\n\t\tconst pl = Object.assign(\r\n\t\t\t{\r\n\t\t\t\tClientGuid: this.clientGUID,\r\n\t\t\t\tVisitId: visitId,\r\n\t\t\t\tVisitorId: visitorId,\r\n\t\t\t\t// TrackingProperties: hs.Context,\r\n\t\t\t\t// CustomDictionary: hs.Context.Custom,\r\n\t\t\t},\r\n\t\t\tdata\r\n\t\t);\r\n\t\tfetch(this.trackingURL, {\r\n\t\t\tmethod: 'POST',\r\n\t\t\theaders: { 'Content-Type': 'application/json' },\r\n\t\t\tbody: JSON.stringify(pl),\r\n\t\t})\r\n\t\t\t.then(resp => {\r\n\t\t\t\tconsole.log('Success:', resp.status);\r\n\t\t\t})\r\n\t\t\t.catch(error => {\r\n\t\t\t\tconsole.error('Error:', error);\r\n\t\t\t});\r\n\t}\r\n\r\n\tpublic track(eventName, args) {\r\n\t\tif (!this.trackingURL || !this.clientGUID) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tswitch (eventName.toLowerCase()) {\r\n\t\t\tcase 'pageload':\r\n\t\t\t\t// HawkSearch.Context.add(\"uniqueid\", \"123456789\");\r\n\t\t\t\treturn this.writePageLoad(args.pageType);\r\n\t\t\tcase 'searchtracking':\r\n\t\t\t\t// HawkSearch.Tracking.track(\"searchtracking\", {trackingId:\"a9bd6e50-e434-45b9-9f66-489eca07ad0a\", typeId: HawkSearch.Tracking.SearchType.Initial});\r\n\t\t\t\t// HawkSearch.Tracking.track(\"searchtracking\", {trackingId:\"a9bd6e50-e434-45b9-9f66-489eca07ad0a\", typeId: HawkSearch.Tracking.SearchType.Refinement});\r\n\t\t\t\treturn this.writeSearchTracking(args.trackingId, args.typeId, args.keyword); // CHANGED\r\n\t\t\tcase 'click':\r\n\t\t\t\t// HawkSearch.Tracking.track('click',{event: e, uniqueId: \"33333\", trackingId: \"75a0801a-a93c-4bcb-81f1-f4b011f616e3\"});\r\n\t\t\t\treturn this.writeClick(args.event, args.uniqueId, args.trackingId, ''); // CHANGED\r\n\t\t\tcase 'bannerclick':\r\n\t\t\t\t// HawkSearch.Tracking.track('bannerclick',{bannerId: 1, campaignId: 2, trackingId:\"2d652a1e-2e05-4414-9d76-51979109f724\"});\r\n\t\t\t\treturn this.writeBannerClick(args.bannerId, args.campaignId, args.trackingId); // CHANGED\r\n\t\t\tcase 'bannerimpression':\r\n\t\t\t\t// HawkSearch.Tracking.track('bannerimpression',{bannerId: \"2\", campaignId: \"2\", trackingId:\"2d652a1e-2e05-4414-9d76-51979109f724\"});\r\n\t\t\t\treturn this.writeBannerImpression(args.bannerId, args.campaignId, args.trackingId); // CHANGED\r\n\t\t\tcase 'sale':\r\n\t\t\t\t// HawkSearch.Tracking.track('sale', {orderNo: 'order_123',itemList: [{uniqueid: '123456789', itemPrice: 12.99, quantity: 2}], total: 25.98, subTotal: 22, tax: 3.98, currency: 'USD'});\r\n\t\t\t\treturn this.writeSale(args.orderNo, args.itemList, args.total, args.subTotal, args.tax, args.currency);\r\n\t\t\tcase 'add2cart':\r\n\t\t\t\t// HawkSearch.Tracking.track('add2cart',{uniqueId: '123456789', price: 19.99, quantity: 3, currency: 'USD'});\r\n\t\t\t\treturn this.writeAdd2Cart(args.uniqueId, args.price, args.quantity, args.currency);\r\n\t\t\tcase 'add2cartmultiple':\r\n\t\t\t\t// HawkSearch.Tracking.track('add2cartmultiple', [{uniqueId: '123456789',price: 15.97,quantity: 1,currency: 'USD'},{uniqueId: '987465321', price: 18.00, quantity: 1, currency: 'USD'}]);\r\n\t\t\t\treturn this.writeAdd2CartMultiple(args);\r\n\t\t\tcase 'rate':\r\n\t\t\t\t// HawkSearch.Tracking.track('rate', {uniqueId: '123456789',value: 3.00});\r\n\t\t\t\treturn this.writeRate(args.uniqueId, args.value);\r\n\t\t\tcase 'recommendationclick':\r\n\t\t\t\t// HawkSearch.Tracking.track('recommendationclick',{uniqueId: \"223222\", itemIndex: \"222\", widgetGuid:\"2d652a1e-2e05-4414-9d76-51979109f724\", requestId:\"2d652a1e-2e05-4414-9d76-51979109f724\"});\r\n\t\t\t\treturn this.writeRecommendationClick(args.widgetGuid, args.uniqueId, args.itemIndex, args.requestId);\r\n\t\t\tcase 'autocompleteclick':\r\n\t\t\t\t// HawkSearch.Tracking.track('autocompleteclick',{keyword: \"test\", suggestType: HawkSearch.Tracking.SuggestType.PopularSearches, name:\"tester\", url:\"/test\"});\r\n\t\t\t\treturn this.writeAutoCompleteClick(args.keyword, args.suggestType, args.name, args.url); // CHANGED\r\n\t\t}\r\n\t}\r\n}\r\n\r\n// export TrackingEvent.getInstance();\r\nexport default TrackingEvent.getInstance();\r\n","import axios, { CancelToken, AxiosInstance } from 'axios';\r\nimport { Request as SearchRequest, Response as SearchResponse, Result } from 'models/Search';\r\nimport { Request as CompareItemRequest, Response as CompareDataResponse } from 'models/CompareItems';\r\nimport { Request as AutocompleteRequest, Response as AutocompleteResponse } from 'models/Autocomplete';\r\nimport { Request as PinItemRequest } from 'models/PinItems';\r\nimport { Request as ProductDetailsRequest, Response as ProductDetailsResponse } from 'models/ProductDetails';\r\nimport { Request as SortingOrderRequest } from 'models/PinItemsOrder';\r\nimport { Request as RebuildIndexRequest } from 'models/RebuildIndex';\r\nimport { HawksearchConfig } from 'types/HawksearchConfig';\r\nimport AuthToken from 'components/AuthToken';\r\n\r\nclass HawkClient {\r\n\tprivate baseUrl: string;\r\n\tprivate searchUrl: string;\r\n\tprivate dashboardUrl: string;\r\n\tprivate autocompleteUrl: string;\r\n\tprivate compareItemsURL: string;\r\n\tprivate refreshTokenURL: string;\r\n\tprivate pinItemURL: string;\r\n\tprivate updatePinOrderURL: string;\r\n\tprivate rebuildIndexURL: string;\r\n\tprivate productDetailsURL: string;\r\n\tprivate axiosInstance: AxiosInstance = axios.create();\r\n\r\n\tconstructor(config: HawksearchConfig) {\r\n\t\tthis.baseUrl = config.apiUrl || 'https://searchapi-dev.hawksearch.net'; // 'https://searchapi-dev.americaneagle.com';\r\n\t\tthis.dashboardUrl = config.dashboardUrl || 'http://dev.hawksearch.net/'; // 'https://hawk-dev.americaneagle.com';\r\n\t\tthis.searchUrl = config.searchUrl || '/api/v2/search';\r\n\t\tthis.autocompleteUrl = config.autocompleteUrl || '/api/autocomplete';\r\n\t\tthis.compareItemsURL = config.compareItemsURL || '/api/compare';\r\n\t\tthis.refreshTokenURL = config.refreshTokenURL || '/api/internal-preview/refresh-token/';\r\n\t\tthis.pinItemURL = config.pinItemURL || '/api/pinning/set-pinning/';\r\n\t\tthis.updatePinOrderURL = config.updatePinOrderURL || '/api/pinning/update-pin-order/';\r\n\t\tthis.rebuildIndexURL = config.rebuildIndexURL || '/api/internal-preview/rebuild-percolator';\r\n\t\tthis.productDetailsURL = config.productDetailsURL || '/api/internal-preview/item-detail';\r\n\r\n\t\tthis.axiosInstance.interceptors.request.use(\r\n\t\t\tconf => {\r\n\t\t\t\tconst accessToken = AuthToken.getTokens().accessToken;\r\n\t\t\t\tif ((conf.url || '').indexOf('refresh-token') !== -1 || !accessToken) {\r\n\t\t\t\t\tdelete conf.headers.common.Authorization;\r\n\t\t\t\t\tdelete conf.headers.common.ClientGuid;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tconf.headers.Authorization = `Bearer ${accessToken}`;\r\n\t\t\t\t\tconf.headers.ClientGuid = config.clientGuid;\r\n\t\t\t\t}\r\n\t\t\t\treturn conf;\r\n\t\t\t},\r\n\t\t\terror => {\r\n\t\t\t\tPromise.reject(error);\r\n\t\t\t}\r\n\t\t);\r\n\t\tthis.axiosInstance.interceptors.response.use(\r\n\t\t\tresponse => response,\r\n\t\t\terror => {\r\n\t\t\t\tconst originalRequest = error.config;\r\n\r\n\t\t\t\tif (error.response.status === 401 && !originalRequest._retry) {\r\n\t\t\t\t\toriginalRequest._retry = true;\r\n\t\t\t\t\tconst token = AuthToken.getTokens();\r\n\t\t\t\t\treturn this.axiosInstance\r\n\t\t\t\t\t\t.post(new URL(this.refreshTokenURL, this.baseUrl).href, {\r\n\t\t\t\t\t\t\tClientGuid: config.clientGuid,\r\n\t\t\t\t\t\t\tToken: token.accessToken,\r\n\t\t\t\t\t\t\tRefreshToken: token.refreshToken,\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t\t.then(res => {\r\n\t\t\t\t\t\t\tif (res.status === 200) {\r\n\t\t\t\t\t\t\t\tAuthToken.setTokens(res.data.Token, res.data.RefreshToken);\r\n\t\t\t\t\t\t\t\tthis.axiosInstance.defaults.headers.common.Authorization = 'Bearer ' + res.data.Token;\r\n\t\t\t\t\t\t\t\treturn this.axiosInstance(originalRequest);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\treturn Promise.reject(error);\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\tpublic async pinItem(request: PinItemRequest, cancellationToken?: CancelToken): Promise {\r\n\t\tconst result = await this.axiosInstance.post(\r\n\t\t\tnew URL(this.pinItemURL, this.baseUrl).href,\r\n\t\t\trequest,\r\n\t\t\t{\r\n\t\t\t\tcancelToken: cancellationToken,\r\n\t\t\t}\r\n\t\t);\r\n\t\treturn result.data;\r\n\t}\r\n\r\n\tpublic async updatePinOrder(request: SortingOrderRequest, cancellationToken?: CancelToken): Promise {\r\n\t\tconst result = await this.axiosInstance.post(\r\n\t\t\tnew URL(this.updatePinOrderURL, this.baseUrl).href,\r\n\t\t\trequest,\r\n\t\t\t{\r\n\t\t\t\tcancelToken: cancellationToken,\r\n\t\t\t}\r\n\t\t);\r\n\t\treturn result.data;\r\n\t}\r\n\r\n\tpublic async search(request: SearchRequest, cancellationToken?: CancelToken): Promise {\r\n\t\tconst result = await axios.post(new URL(this.searchUrl, this.baseUrl).href, request, {\r\n\t\t\tcancelToken: cancellationToken,\r\n\t\t});\r\n\t\treturn result.data;\r\n\t}\r\n\r\n\tpublic async rebuildIndex(request: RebuildIndexRequest, cancellationToken?: CancelToken): Promise {\r\n\t\tconst result = await this.axiosInstance.post(\r\n\t\t\tnew URL(this.rebuildIndexURL, this.baseUrl).href,\r\n\t\t\trequest,\r\n\t\t\t{\r\n\t\t\t\tcancelToken: cancellationToken,\r\n\t\t\t}\r\n\t\t);\r\n\t\treturn result.data;\r\n\t}\r\n\r\n\tpublic async autocomplete(\r\n\t\trequest: AutocompleteRequest,\r\n\t\tcancellationToken?: CancelToken\r\n\t): Promise {\r\n\t\tconst result = await axios.post(\r\n\t\t\tnew URL(this.autocompleteUrl, this.baseUrl).href,\r\n\t\t\trequest,\r\n\t\t\t{\r\n\t\t\t\tcancelToken: cancellationToken,\r\n\t\t\t}\r\n\t\t);\r\n\r\n\t\treturn result.data;\r\n\t}\r\n\r\n\tpublic async getComparedItems(\r\n\t\trequest: CompareItemRequest,\r\n\t\tcancellationToken?: CancelToken\r\n\t): Promise {\r\n\t\tconst result = await axios.post(\r\n\t\t\tnew URL(this.compareItemsURL, this.baseUrl).href,\r\n\t\t\trequest,\r\n\t\t\t{\r\n\t\t\t\tcancelToken: cancellationToken,\r\n\t\t\t}\r\n\t\t);\r\n\r\n\t\treturn result.data;\r\n\t}\r\n\r\n\tpublic async getProductDetails(\r\n\t\trequest: ProductDetailsRequest,\r\n\t\tcancellationToken?: CancelToken\r\n\t): Promise {\r\n\t\tconst result = await axios.post(new URL(this.productDetailsURL, this.baseUrl).href, request, {\r\n\t\t\tcancelToken: cancellationToken,\r\n\t\t});\r\n\t\treturn new Result(result.data);\r\n\t}\r\n}\r\n\r\nexport default HawkClient;\r\n","export const getVisitorExpiry = () => {\r\n\tconst d = new Date();\r\n\t// 1 year\r\n\td.setTime(d.getTime() + 360 * 24 * 60 * 60 * 1000);\r\n\treturn d.toUTCString();\r\n};\r\n\r\nexport const getVisitExpiry = () => {\r\n\tconst d = new Date();\r\n\t// 4 hours\r\n\td.setTime(d.getTime() + 4 * 60 * 60 * 1000);\r\n\treturn d.toUTCString();\r\n};\r\n\r\nexport const createGuid = () => {\r\n\tconst s: any[] = [];\r\n\tconst hexDigits = '0123456789abcdef';\r\n\tfor (let i = 0; i < 36; i++) {\r\n\t\ts[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1);\r\n\t}\r\n\ts[14] = '4'; // bits 12-15 of the time_hi_and_version field to 0010\r\n\t// tslint:disable-next-line: no-bitwise\r\n\ts[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1); // bits 6-7 of the clock_seq_hi_and_reserved to 01\r\n\ts[8] = s[13] = s[18] = s[23] = '-';\r\n\r\n\tconst uuid = s.join('');\r\n\treturn uuid;\r\n};\r\n\r\nexport const getCookie = name => {\r\n\tconst nameEQ = name + '=';\r\n\tconst ca = document.cookie.split(';');\r\n\t// tslint:disable-next-line: prefer-for-of\r\n\tfor (let i = 0; i < ca.length; i++) {\r\n\t\tlet c = ca[i];\r\n\t\twhile (c.charAt(0) === ' ') {\r\n\t\t\tc = c.substring(1, c.length);\r\n\t\t}\r\n\t\tif (c.indexOf(nameEQ) === 0) {\r\n\t\t\treturn c.substring(nameEQ.length, c.length);\r\n\t\t}\r\n\t}\r\n\treturn null;\r\n};\r\n\r\nexport const setCookie = (name, value, expiry) => {\r\n\tlet expires;\r\n\tif (expiry) {\r\n\t\texpires = '; expires=' + expiry;\r\n\t} else {\r\n\t\texpires = '';\r\n\t}\r\n\tdocument.cookie = name + '=' + value + expires + '; path=/';\r\n};\r\n\r\nexport const getInputVal = name => {\r\n\tlet inputVal = '';\r\n\tconst anelement = document.getElementById(name) as HTMLInputElement;\r\n\tif (anelement !== null) {\r\n\t\tinputVal = anelement.value;\r\n\t}\r\n\tif (inputVal === undefined || inputVal === null) {\r\n\t\treturn '';\r\n\t} else {\r\n\t\treturn inputVal;\r\n\t}\r\n};\r\n","import { useEffect } from 'react';\r\nimport axios, { CancelToken } from 'axios';\r\n\r\nimport { SearchStore, FacetSelectionState } from './Store';\r\nimport HawkClient from 'net/HawkClient';\r\nimport { Response, Request, FacetSelections, Result } from 'models/Search';\r\nimport { useMergableState } from 'util/MergableState';\r\nimport { useHawkConfig } from 'components/ConfigProvider';\r\nimport { Facet, Value } from 'models/Facets';\r\nimport { FacetType } from 'models/Facets/FacetType';\r\nimport { Response as CompareDataResponse, Request as CompareItemRequest } from 'models/CompareItems';\r\nimport { Request as ProductDetailsRequest, Response as ProductDetailsResponse } from 'models/ProductDetails';\r\nimport { Request as PinItemRequest } from 'models/PinItems';\r\nimport { Request as SortingOrderRequest } from 'models/PinItemsOrder';\r\nimport { Request as RebuildIndexRequest } from 'models/RebuildIndex';\r\nimport TrackingEvent, { SearchType } from 'components/TrackingEvent';\r\nimport { getCookie, setCookie, createGuid, getVisitExpiry, getVisitorExpiry, getInputVal } from 'helpers/utils';\r\nimport { ClientSelectionValue } from './ClientSelections';\r\n\r\nexport interface SearchActor {\r\n\t/**\r\n\t * Performs a search with the currently configured pending search request. The search request can be\r\n\t * configured via the `setSearch` method. This method usually doesn't need to be called directly, as\r\n\t * the `StoreProvider` component will usually trigger searches directly in response to calls to\r\n\t * `setSearch`.\r\n\t * @returns A promise that resolves when the search request has been completed.\r\n\t */\r\n\tsearch(cancellationToken?: CancelToken): Promise;\r\n\r\n\t/**\r\n\t * Configures the next search request that will be executed. This will also execute a search in response to\r\n\t * the next search request changing.\r\n\t * @param search The partial search request object. This will be merged with previous calls to `setSearch`.\r\n\t * @param doHistory Whether or not this search request will push a history entry into the browser. If\r\n\t * \t\t\t\t\tnot specified, the default is `true`.\r\n\t */\r\n\tsetSearch(search: Partial, doHistory?: boolean): void;\r\n\r\n\t/**\r\n\t * Toggles a facet value for the next search request that will be executed. If the given facet had previously\r\n\t * been selected, it will be unselected. If the negation state of a selected facet is changed, the selection\r\n\t * will have its negation state changed. Internally, this will call `setSearch` to configure the next search\r\n\t * with this selected facet.\r\n\t * @param facet The facet for which the value is being selected.\r\n\t * @param facetValue The facet value being selected.\r\n\t * @param negate Whether or not this selection is considered a negation.\r\n\t */\r\n\ttoggleFacetValue(facet: Facet | string, facetValue: Value | string, negate?: boolean): void;\r\n\r\n\tsetFacetValues(facet: Facet | string, facetValues: Value[] | string[]): void;\r\n\r\n\t/**\r\n\t * Entirely clears all the values of the given facet from the current selection.\r\n\t * @param facet The facet to clear.\r\n\t */\r\n\tclearFacet(facet: Facet | string): void;\r\n\r\n\t/**\r\n\t * Clears a given facet value of the given facet from the current selection.\r\n\t * @param facet The facet to clear.\r\n\t * @param facetValue The facet value to clear.\r\n\t */\r\n\tclearFacetValue(facet: Facet | string, facetValue?: Value | string): void;\r\n\r\n\t/**\r\n\t * Clears all selected facets from the current selection.\r\n\t */\r\n\tclearAllFacets(): void;\r\n\r\n\t// Store items to make comparision via request\r\n\tsetItemsToCompare(resultItem: Result, isCheck: boolean): void;\r\n\r\n\t// To store items after getting the results from compare request\r\n\tsetComparedResults(comparedResults: Result[]): void;\r\n\r\n\t// To store items after getting the results from compare request\r\n\tsetProductDetailsResults(detailsResult: Result): void;\r\n\r\n\t// Clear stored compared items\r\n\tclearItemsToCompare(): void;\r\n\r\n\t// Get comparision of items from request\r\n\tgetComparedItems(request: CompareItemRequest, cancellationToken?: CancelToken): Promise;\r\n\r\n\t// Pin items\r\n\tpinItem(payload: PinItemRequest, cancellationToken?: CancelToken): Promise;\r\n\r\n\t// update sorting order of pinned items\r\n\tupdatePinOrder(payload: SortingOrderRequest, cancellationToken?: CancelToken): Promise;\r\n\r\n\t// rebuild Index\r\n\trebuildIndex(request: RebuildIndexRequest, cancellationToken?: CancelToken): Promise;\r\n\r\n\t// Get product details\r\n\tgetProductDetails(request: ProductDetailsRequest, cancellationToken?: CancelToken): Promise;\r\n}\r\n\r\nexport function useHawkState(initialSearch?: Partial): [SearchStore, SearchActor] {\r\n\tconst { config } = useHawkConfig();\r\n\r\n\tconst client = new HawkClient(config);\r\n\r\n\tconst [store, setStore] = useMergableState(\r\n\t\tnew SearchStore({\r\n\t\t\tpendingSearch: initialSearch || {\r\n\t\t\t\tFacetSelections: {},\r\n\t\t\t},\r\n\t\t\tisLoading: true,\r\n\t\t\titemsToCompare: [],\r\n\t\t\tcomparedResults: [],\r\n\t\t\titemsToCompareIds: [],\r\n\t\t\tproductDetails: {},\r\n\t\t}),\r\n\t\tSearchStore\r\n\t);\r\n\r\n\tuseEffect(() => {\r\n\t\t// when the pending search changes, trigger a search\r\n\r\n\t\tconst cts = axios.CancelToken.source();\r\n\t\tsearch(cts.token);\r\n\r\n\t\treturn () => {\r\n\t\t\tcts.cancel();\r\n\t\t};\r\n\t}, [store.pendingSearch]);\r\n\r\n\t/**\r\n\t * Performs a search with the currently configured pending search request. The search request can be\r\n\t * configured via the `setSearch` method. This method usually doesn't need to be called directly, as\r\n\t * the `StoreProvider` component will usually trigger searches directly in response to calls to\r\n\t * `setSearch`.\r\n\t * @returns A promise that resolves when the search request has been completed.\r\n\t */\r\n\tasync function search(cancellationToken?: CancelToken): Promise {\r\n\t\tsetStore({ isLoading: true });\r\n\r\n\t\tlet searchResults: Response | null = null;\r\n\t\tconst searchParams = {\r\n\t\t\t// the search request being executed is spread from the pendingSearch\r\n\t\t\t...store.pendingSearch,\r\n\t\t\t// pass parameter for extended response\r\n\t\t\tIsInPreview: false,\r\n\t\t\t// and override some of the request fields with config values\r\n\t\t\tClientGuid: config.clientGuid,\r\n\t\t\tKeyword: store.pendingSearch.Keyword\r\n\t\t\t\t? decodeURIComponent(store.pendingSearch.Keyword || '')\r\n\t\t\t\t: store.pendingSearch.Keyword,\r\n\t\t};\r\n\r\n\t\t// The index name in the configuration takes priority over the one supplied from the URL\r\n\t\tif (config.indexName) {\r\n\t\t\tObject.assign(searchParams, { IndexName: config.indexName });\r\n\t\t}\r\n\r\n\t\t// If the index name is required and no value is provided from the config or the URL, the request is canceled\r\n\t\tif (config.indexNameRequired && !searchParams.IndexName) {\r\n\t\t\tsetStore({ isLoading: false });\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t// Fill clientdata\r\n\t\tlet visitId = getCookie('hawk_visit_id');\r\n\t\tlet visitorId = getCookie('hawk_visitor_id');\r\n\t\tif (!visitId) {\r\n\t\t\tsetCookie('hawk_visit_id', createGuid(), getVisitExpiry());\r\n\t\t\tvisitId = getCookie('hawk_visit_id');\r\n\t\t}\r\n\t\tif (!visitorId) {\r\n\t\t\tsetCookie('hawk_visitor_id', createGuid(), getVisitorExpiry());\r\n\t\t\tvisitorId = getCookie('hawk_visitor_id');\r\n\t\t}\r\n\t\tconst hawkCustomStr: string = getInputVal('hawk_custom');\r\n\t\tconst customObj = JSON.parse(`{\"custom\" : \"${hawkCustomStr}\"}`);\r\n\t\tconst updatedRequest = {\r\n\t\t\tClientData: {\r\n\t\t\t\tVisitorId: visitorId || '',\r\n\t\t\t\tVisitId: visitId || '',\r\n\t\t\t\tCustom: customObj,\r\n\t\t\t\tUserAgent: navigator.userAgent,\r\n\t\t\t\tPreviewBuckets: store.searchResults ? store.searchResults.VisitorTargets.map(v => v.Id) : [],\r\n\t\t\t},\r\n\t\t\t...searchParams,\r\n\t\t};\r\n\t\ttry {\r\n\t\t\tsearchResults = await client.search(updatedRequest, cancellationToken);\r\n\t\t\tlocalStorage.setItem('tracking-id', searchResults.TrackingId);\r\n\t\t} catch (error) {\r\n\t\t\tif (axios.isCancel(error)) {\r\n\t\t\t\t// if the request was cancelled, it's because this component was updated\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tconsole.error('Search request error:', error);\r\n\t\t\tsetStore({ requestError: true });\r\n\t\t}\r\n\r\n\t\tsetStore({ isLoading: false });\r\n\r\n\t\tif (searchResults) {\r\n\t\t\tif (!searchResults.Success) {\r\n\t\t\t\tconsole.error('Search result error:', searchResults);\r\n\t\t\t\tsetStore({ requestError: true });\r\n\t\t\t} else {\r\n\t\t\t\tconst selectedFacets = searchParams.FacetSelections ? Object.keys(searchParams.FacetSelections) : [];\r\n\r\n\t\t\t\tif (\r\n\t\t\t\t\tsearchParams.SortBy ||\r\n\t\t\t\t\tsearchParams.PageNo ||\r\n\t\t\t\t\tsearchParams.MaxPerPage ||\r\n\t\t\t\t\tselectedFacets.length ||\r\n\t\t\t\t\tsearchParams.SearchWithin\r\n\t\t\t\t) {\r\n\t\t\t\t\tTrackingEvent.track('searchtracking', {\r\n\t\t\t\t\t\ttrackingId: searchResults.TrackingId,\r\n\t\t\t\t\t\ttypeId: SearchType.Refinement,\r\n\t\t\t\t\t\tkeyword: searchParams.Keyword,\r\n\t\t\t\t\t});\r\n\t\t\t\t} else {\r\n\t\t\t\t\tTrackingEvent.track('searchtracking', {\r\n\t\t\t\t\t\ttrackingId: searchResults.TrackingId,\r\n\t\t\t\t\t\ttypeId: SearchType.Initial,\r\n\t\t\t\t\t\tkeyword: searchParams.Keyword,\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\tsetStore({\r\n\t\t\t\t\tsearchResults: new Response(searchResults),\r\n\t\t\t\t\trequestError: false,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Performs a comparision between two or more than two products based on ID\r\n\t * user can use this method from view application.\r\n\t * @returns A promise that resolves when the compare request has been completed.\r\n\t */\r\n\tasync function getComparedItems(\r\n\t\trequest: CompareItemRequest,\r\n\t\tcancellationToken?: CancelToken\r\n\t): Promise {\r\n\t\treturn await client.getComparedItems(request, cancellationToken);\r\n\t}\r\n\r\n\tasync function pinItem(request: PinItemRequest, cancellationToken?: CancelToken): Promise {\r\n\t\treturn await client.pinItem(request, cancellationToken);\r\n\t}\r\n\r\n\tasync function updatePinOrder(\r\n\t\trequest: SortingOrderRequest,\r\n\t\tcancellationToken?: CancelToken\r\n\t): Promise {\r\n\t\treturn await client.updatePinOrder(request, cancellationToken);\r\n\t}\r\n\r\n\tasync function rebuildIndex(request: RebuildIndexRequest, cancellationToken?: CancelToken): Promise {\r\n\t\treturn await client.rebuildIndex(request);\r\n\t}\r\n\r\n\t/**\r\n\t * Get product details by ID\r\n\t * @returns A promise that resolves when the product details request has been completed.\r\n\t */\r\n\tasync function getProductDetails(\r\n\t\trequest: ProductDetailsRequest,\r\n\t\tcancellationToken?: CancelToken\r\n\t): Promise {\r\n\t\treturn await client.getProductDetails(request, cancellationToken);\r\n\t}\r\n\r\n\t/**\r\n\t * Configures the next search request that will be executed. This will also execute a search in response to\r\n\t * the next search request changing.\r\n\t * @param search The partial search request object. This will be merged with previous calls to `setSearch`.\r\n\t * @param doHistory Whether or not this search request will push a history entry into the browser. If\r\n\t * \t\t\t\t\tnot specified, the default is `true`.\r\n\t */\r\n\tfunction setSearch(pendingSearch: Partial, doHistory?: boolean): void {\r\n\t\tif (doHistory === undefined) {\r\n\t\t\tdoHistory = true;\r\n\t\t}\r\n\r\n\t\tsetStore(prevState => {\r\n\t\t\t/* \r\n\t\t\tif (prevState.searchResults && prevState.searchResults.TrackingId) {\r\n\t\t\t\tif (prevState.pendingSearch.Keyword !== pendingSearch.Keyword) {\r\n\t\t\t\t\tTrackingEvent.track('searchtracking', {\r\n\t\t\t\t\t\ttrackingId: prevState.searchResults.TrackingId,\r\n\t\t\t\t\t\ttypeId: SearchType.Initial,\r\n\t\t\t\t\t\tkeyword: pendingSearch.Keyword,\r\n\t\t\t\t\t});\r\n\t\t\t\t} else {\r\n\t\t\t\t\tTrackingEvent.track('searchtracking', {\r\n\t\t\t\t\t\ttrackingId: prevState.searchResults.TrackingId,\r\n\t\t\t\t\t\ttypeId: SearchType.Refinement,\r\n\t\t\t\t\t\tkeyword: pendingSearch.Keyword,\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t*/\r\n\t\t\tconst newState = {\r\n\t\t\t\tpendingSearch: { ...prevState.pendingSearch, ...pendingSearch },\r\n\t\t\t\tdoHistory,\r\n\t\t\t};\r\n\t\t\tif (newState.pendingSearch.Keyword === '') {\r\n\t\t\t\tnewState.pendingSearch.Keyword = undefined;\r\n\t\t\t}\r\n\r\n\t\t\treturn newState;\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Sets the facet selections and search within configuration for the next search request. This will also\r\n\t * clear the page number of the next request to display the first page of results.\r\n\t * @param selections The facet selections to set.\r\n\t * @param searchWithin The search within value to set.\r\n\t */\r\n\tfunction setSearchSelections(selections?: FacetSelections, searchWithin?: string) {\r\n\t\tsetSearch({\r\n\t\t\tFacetSelections: selections,\r\n\t\t\tSearchWithin: searchWithin,\r\n\r\n\t\t\t// when we change facet selections, also clear the current page so that we navigate\r\n\t\t\t// back to the first page of results\r\n\t\t\tPageNo: undefined,\r\n\t\t});\r\n\t}\r\n\r\n\t// NOTE: It will return the difference from 1st array\r\n\t// i.e ['a', 'b', 'c'] - ['c', 'd', 'f'] => ['a', 'b']\r\n\tfunction differenceOfArrays(array1: string[], array2: string[]) {\r\n\t\treturn array1.filter(i => {\r\n\t\t\treturn array2.indexOf(i) < 0;\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Toggles a facet value for the next search request that will be executed. Internally, this will call\r\n\t * `setSearch` to configure the next search with this selected facet.\r\n\t * @param facet The facet for which the value is being selected.\r\n\t * @param facetValue The facet value being selected.\r\n\t * @param negate Whether or not this selection is considered a negation.\r\n\t */\r\n\tfunction toggleFacetValue(facet: Facet | string, facetValue: Value | string, negate?: boolean): void {\r\n\t\tif (negate === undefined) {\r\n\t\t\tnegate = false;\r\n\t\t}\r\n\r\n\t\tconst facetName: string = typeof facet === 'string' ? facet : facet.Name;\r\n\t\tconst facetField = typeof facet === 'string' ? facet : facet.selectionField;\r\n\r\n\t\tconst valueValue = typeof facetValue === 'string' ? facetValue : facetValue.Value;\r\n\t\tconst valueLabel = typeof facetValue === 'string' ? facetValue : facetValue.Label;\r\n\r\n\t\tif (!valueValue) {\r\n\t\t\tconsole.error(`Facet ${facetName} (${facetField}) has no facet value for ${valueLabel}`);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlet facetSelections = store.pendingSearch.FacetSelections;\r\n\r\n\t\t// handle `searchWithin` facet, which isn't a facet selection but is instead a field on the\r\n\t\t// search request.\r\n\t\tif (facetField === 'searchWithin') {\r\n\t\t\t// set the search within to the facet value provided\r\n\t\t\tsetSearchSelections(facetSelections, /* searchWithin */ valueValue);\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!facetSelections) {\r\n\t\t\tfacetSelections = {};\r\n\t\t}\r\n\r\n\t\tif (!facetSelections[facetField]) {\r\n\t\t\tfacetSelections[facetField] = [];\r\n\t\t}\r\n\r\n\t\tconst { state: selState, selectionIndex } = store.isFacetSelected(facet, facetValue);\r\n\t\tconst valuesToRemoved = [] as string[];\r\n\t\tconst items = (store.facetSelections[facetField] || {}).items || [];\r\n\t\titems.forEach((item: ClientSelectionValue) => {\r\n\t\t\tif (((item || {}).path || '').indexOf(valueValue) !== -1) {\r\n\t\t\t\tvaluesToRemoved.push(item.value);\r\n\t\t\t}\r\n\t\t});\r\n\t\tconst difference = differenceOfArrays(facetSelections[facetField] || [], valuesToRemoved || []);\r\n\t\tif (selState === FacetSelectionState.Selected || selState === FacetSelectionState.Negated) {\r\n\t\t\t// we're selecting this facet, and it's already selected\r\n\r\n\t\t\t// first, remove it from our selections\r\n\t\t\tfacetSelections[facetField]!.splice(selectionIndex!, 1);\r\n\r\n\t\t\tif (\r\n\t\t\t\t(selState === FacetSelectionState.Selected && negate) ||\r\n\t\t\t\t(selState === FacetSelectionState.Negated && !negate)\r\n\t\t\t) {\r\n\t\t\t\t// if we're toggling from negation to non-negation or vice versa, then push the new selection\r\n\t\t\t\tfacetSelections[facetField]!.push(negate ? `-${valueValue}` : valueValue);\r\n\t\t\t} else {\r\n\t\t\t\tif ((facet as Facet).FacetType === FacetType.NestedCheckbox) {\r\n\t\t\t\t\tfacetSelections[facetField] = difference;\r\n\t\t\t\t}\r\n\t\t\t\t// if we're not toggling the negation, nothing to do because we already removed the selection above\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\t// not selected, so we want to select it\r\n\t\t\tfacetSelections[facetField]!.push(negate ? `-${valueValue}` : valueValue);\r\n\t\t}\r\n\r\n\t\tif (facetSelections[facetField]!.length === 0) {\r\n\t\t\t// clean up any facets that no longer have any selected facet values\r\n\t\t\tdelete facetSelections[facetField];\r\n\t\t}\r\n\r\n\t\tsetSearchSelections(facetSelections, store.pendingSearch.SearchWithin);\r\n\t}\r\n\r\n\tfunction setFacetValues(facet: Facet | string, facetValues: Value[] | string[]): void {\r\n\t\tconst facetName = typeof facet === 'string' ? facet : facet.Name;\r\n\t\tconst facetField = typeof facet === 'string' ? facet : facet.selectionField;\r\n\r\n\t\tlet facetSelections = store.pendingSearch.FacetSelections;\r\n\r\n\t\tif (!facetSelections) {\r\n\t\t\tfacetSelections = {};\r\n\t\t}\r\n\r\n\t\tfacetSelections[facetField] = [];\r\n\r\n\t\tfor (const facetValue of facetValues) {\r\n\t\t\tconst valueValue = typeof facetValue === 'string' ? facetValue : facetValue.Value;\r\n\t\t\tconst valueLabel = typeof facetValue === 'string' ? facetValue : facetValue.Label;\r\n\r\n\t\t\tif (!valueValue) {\r\n\t\t\t\tconsole.error(`Facet ${facetName} (${facetField}) has no facet value for ${valueLabel}`);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tfacetSelections[facetField]!.push(valueValue);\r\n\t\t}\r\n\r\n\t\tsetSearchSelections(facetSelections, store.pendingSearch.SearchWithin);\r\n\t}\r\n\r\n\t/**\r\n\t * Entirely clears all the values of the given facet from the current selection.\r\n\t * @param facet The facet to clear.\r\n\t */\r\n\tfunction clearFacet(facet: Facet | string) {\r\n\t\tconst facetField = typeof facet === 'string' ? facet : facet.selectionField;\r\n\r\n\t\tconst facetSelections = store.pendingSearch.FacetSelections;\r\n\r\n\t\t// handle `searchWithin` facet, which isn't a facet selection but is instead a field on the\r\n\t\t// search request.\r\n\t\tif (facetField === 'searchWithin') {\r\n\t\t\t// set searchWithin to undefined to clear it\r\n\t\t\tsetSearchSelections(facetSelections, /* searchWithin */ undefined);\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!facetSelections || !facetSelections[facetField]) {\r\n\t\t\t// if there are no facet selections or the facet isn't selected at all, there's nothing to clear\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tdelete facetSelections[facetField];\r\n\r\n\t\tsetSearchSelections(facetSelections, store.pendingSearch.SearchWithin);\r\n\t}\r\n\r\n\t/**\r\n\t * Clears a given facet value of the given facet from the current selection.\r\n\t * @param facet The facet to clear.\r\n\t * @param facetValue The facet value to clear.\r\n\t */\r\n\tfunction clearFacetValue(facet: Facet | string, facetValue: Value | string) {\r\n\t\tconst facetName = typeof facet === 'string' ? facet : facet.Name;\r\n\t\tconst facetField = typeof facet === 'string' ? facet : facet.selectionField;\r\n\r\n\t\tconst valueValue = typeof facetValue === 'string' ? facetValue : facetValue.Value;\r\n\t\tconst valueLabel = typeof facetValue === 'string' ? facetValue : facetValue.Label;\r\n\r\n\t\tif (!valueValue) {\r\n\t\t\tconsole.error(`Facet ${facetName} (${facetField}) has no facet value for ${valueLabel}`);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// handle `searchWithin` facet, which isn't a facet selection but is instead a field on the\r\n\t\t// search request.\r\n\t\tif (facetField === 'searchWithin') {\r\n\t\t\t// set searchWithin to undefined to clear it\r\n\t\t\tsetSearchSelections(store.pendingSearch.FacetSelections, /* searchWithin */ undefined);\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst { state: selState, selectionIndex } = store.isFacetSelected(facet, facetValue);\r\n\r\n\t\tif (selState === FacetSelectionState.NotSelected) {\r\n\t\t\t// if there are no facet selections or the facet isn't selected at all, there's nothing to clear\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst facetSelections = store.pendingSearch.FacetSelections!;\r\n\r\n\t\t// remove it from the selections\r\n\t\tfacetSelections[facetField]!.splice(selectionIndex!, 1);\r\n\r\n\t\tif (facetSelections[facetField]!.length === 0) {\r\n\t\t\t// clean up any facets that no longer have any selected facet values\r\n\t\t\tdelete facetSelections[facetField];\r\n\t\t}\r\n\r\n\t\tsetSearchSelections(facetSelections, store.pendingSearch.SearchWithin);\r\n\t}\r\n\r\n\t/**\r\n\t * Clears all selected facets from the current selection.\r\n\t */\r\n\tfunction clearAllFacets(): void {\r\n\t\tsetSearchSelections(undefined, undefined);\r\n\t}\r\n\r\n\tfunction setItemsToCompare(resultItem: Result, isCheck: boolean): void {\r\n\t\tlet itemsArray = [...store.itemsToCompare];\r\n\t\tif (isCheck) {\r\n\t\t\t// append\r\n\t\t\titemsArray = [...itemsArray, ...[resultItem]];\r\n\t\t} else {\r\n\t\t\t// filter out\r\n\t\t\titemsArray = itemsArray.filter(item => item.DocId !== resultItem.DocId);\r\n\t\t}\r\n\t\t// setStore({ itemsToCompare: itemsArray });\r\n\t\tsetStore({\r\n\t\t\titemsToCompare: itemsArray,\r\n\t\t\titemsToCompareIds: itemsArray.map(item => item.DocId),\r\n\t\t});\r\n\t}\r\n\r\n\tfunction setComparedResults(data: Result[]): void {\r\n\t\tsetStore({\r\n\t\t\tcomparedResults: data,\r\n\t\t});\r\n\t}\r\n\r\n\tfunction setProductDetailsResults(data: Result): void {\r\n\t\tsetStore({\r\n\t\t\tproductDetails: data,\r\n\t\t});\r\n\t}\r\n\r\n\tfunction clearItemsToCompare() {\r\n\t\tsetStore({\r\n\t\t\titemsToCompare: [],\r\n\t\t\titemsToCompareIds: [],\r\n\t\t});\r\n\t}\r\n\r\n\tconst actor: SearchActor = {\r\n\t\tsearch,\r\n\t\tsetSearch,\r\n\t\ttoggleFacetValue,\r\n\t\tsetFacetValues,\r\n\t\tclearFacet,\r\n\t\tclearFacetValue,\r\n\t\tclearAllFacets,\r\n\t\tsetItemsToCompare,\r\n\t\tsetComparedResults,\r\n\t\tclearItemsToCompare,\r\n\t\tgetComparedItems,\r\n\t\tpinItem,\r\n\t\tupdatePinOrder,\r\n\t\trebuildIndex,\r\n\t\tgetProductDetails,\r\n\t\tsetProductDetailsResults,\r\n\t};\r\n\r\n\treturn [store, actor];\r\n}\r\n","import { useState, Dispatch } from 'react';\r\n\r\ntype SetStateAction = Partial | ((prevState: T) => Partial);\r\n\r\nexport function useMergableState(\r\n\tinitialValue: T,\r\n\ttypeConstructor: new (init: Partial) => T\r\n): [T, Dispatch>] {\r\n\tconst [state, setState] = useState(new typeConstructor(initialValue));\r\n\r\n\tfunction setStateAndMerge(value: SetStateAction) {\r\n\t\tif (typeof value === 'function') {\r\n\t\t\t// if we're being passed a function, we're setting state in the form of setState(prevState => ...).\r\n\r\n\t\t\tsetState(prevState => {\r\n\t\t\t\t// so we derive the new state from the previous state\r\n\t\t\t\tconst newState = value(prevState);\r\n\r\n\t\t\t\t// and then set the new merged state\r\n\t\t\t\treturn new typeConstructor({ ...prevState, ...newState });\r\n\t\t\t});\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// otherwise, the new state was simply passed in\r\n\t\tsetState(prevState => {\r\n\t\t\t// merge state together and set it\r\n\t\t\treturn new typeConstructor({ ...prevState, ...value });\r\n\t\t});\r\n\t}\r\n\r\n\treturn [state, setStateAndMerge];\r\n}\r\n","import React, { useContext } from 'react';\r\n\r\nimport { SearchStore } from 'store/Store';\r\nimport { useHawkState, SearchActor } from 'store/HawkState';\r\nimport { Request } from 'models/Search';\r\n\r\nconst HawkContext = React.createContext({} as HawkContextValue);\r\n\r\nexport interface HawkContextValue {\r\n\t/** The store of data used throughout the application. */\r\n\tstore: SearchStore;\r\n\t/**\r\n\t * An interface that allows actions to be performed on the store (such as executing searches,\r\n\t * changing pages, etc).\r\n\t */\r\n\tactor: SearchActor;\r\n}\r\n\r\nexport interface HawkStoreProviderProps {\r\n\t/** The initial search to perform when initializing the search components. */\r\n\tinitialSearch?: Partial;\r\n\tchildren: React.ReactNode;\r\n}\r\n\r\n/**\r\n * This component acts as the global store for the hawksearch application state. Only one instance of this component\r\n * should exist, and it should be the root level component.\r\n */\r\nfunction StoreProvider({ initialSearch, children }: HawkStoreProviderProps) {\r\n\tconst [store, actor] = useHawkState(initialSearch);\r\n\r\n\treturn {children};\r\n}\r\n\r\n/**\r\n * Retrieves the global hawk store for use within a component.\r\n */\r\nexport function useHawksearch() {\r\n\treturn useContext(HawkContext);\r\n}\r\n\r\nexport default StoreProvider;\r\n","import { ControllerStateAndHelpers } from 'downshift';\r\n\r\nexport enum SuggestionType {\r\n\tProduct = 'product',\r\n\tCategory = 'category',\r\n\tContent = 'content',\r\n\tPopular = 'popular',\r\n}\r\nexport abstract class Suggestion {\r\n\tpublic SuggestionType: SuggestionType;\r\n\tpublic constructor(suggestionType: SuggestionType) {\r\n\t\tthis.SuggestionType = suggestionType;\r\n\t}\r\n}\r\n\r\nexport interface SuggestionStrategy {\r\n\thandleItemChange(item: Suggestion, downshift: ControllerStateAndHelpers): void;\r\n\ttoString(item: Suggestion): string;\r\n}\r\n\r\nexport interface SuggestionStrategyMatch {\r\n\tSuggestionType: SuggestionType;\r\n\tSuggestionStrategy: SuggestionStrategy;\r\n}\r\n","import React from 'react';\r\n\r\nimport ConfigProvider from 'components/ConfigProvider';\r\nimport StoreProvider from 'components/StoreProvider';\r\nimport { HawksearchConfig } from 'types/HawksearchConfig';\r\nimport { Request } from 'models/Search';\r\nimport TrackingEvent from './TrackingEvent';\r\n\r\nexport interface HawksearchProps {\r\n\t/** Global configuration. */\r\n\tconfig: HawksearchConfig;\r\n\t/** The initial search to perform when initializing the search components. */\r\n\tinitialSearch?: Partial;\r\n\tchildren: React.ReactNode;\r\n}\r\n\r\nfunction Hawksearch(props: HawksearchProps) {\r\n\tif (props.config.trackEventUrl) {\r\n\t\t// Set URL to track event\r\n\t\tTrackingEvent.setTrackingURL(props.config.trackEventUrl);\r\n\t\tTrackingEvent.setClientGUID(props.config.clientGuid);\r\n\t}\r\n\treturn (\r\n\t\t\r\n\t\t\t{props.children}\r\n\t\t\r\n\t);\r\n}\r\n\r\nexport default Hawksearch;\r\n","export default function _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}","import { Suggestion, SuggestionType, SuggestionStrategy } from './Suggestion';\r\nimport { ControllerStateAndHelpers } from 'downshift';\r\n\r\nexport class Category extends Suggestion {\r\n\t/** Display name of category (example: Men » Jackets). */\r\n\tpublic Value: string;\r\n\t/**\r\n\t * URL for displaying contents of the category, ex:\r\n\t * http://dev.hawksearch.net/sites/elasticdemo?department_nest=Jackets_4\r\n\t */\r\n\tpublic Url: string;\r\n\r\n\tpublic constructor(init: Category) {\r\n\t\tsuper(SuggestionType.Category);\r\n\t\tObject.assign(this, init);\r\n\t}\r\n}\r\n\r\nexport class CategoryStrategy implements SuggestionStrategy {\r\n\tpublic handleItemChange(item: Category, downshift: ControllerStateAndHelpers): void {\r\n\t\tlocation.assign(item.Url);\r\n\t}\r\n\r\n\tpublic toString(item: Category): string {\r\n\t\treturn this ? item.Value : '';\r\n\t}\r\n}\r\n","import { Result } from 'models/Search';\r\nimport { Suggestion, SuggestionStrategy, SuggestionType } from './Suggestion';\r\nimport { ControllerStateAndHelpers } from 'downshift';\r\nimport { useHawksearch } from 'components/StoreProvider';\r\n\r\nexport class Product extends Suggestion {\r\n\t/** Name of the item (if applicable). */\r\n\tpublic ProductName: string;\r\n\r\n\t/* Sku of the item (if applicable). */\r\n\tpublic Sku: string;\r\n\r\n\t/** URL of image of the item (if applicable). */\r\n\tpublic Thumb: string;\r\n\r\n\t/** URL of product page (if applicable). */\r\n\tpublic Url: string;\r\n\r\n\t/** HTML to display the item in autocomplete. */\r\n\tpublic Html: string;\r\n\r\n\t/**\r\n\t * This will only be populated if the request parameter @see Request.DisplayFullResponse is sent\r\n\t * as `true`.\r\n\t */\r\n\tpublic Results: Result;\r\n\r\n\tpublic constructor(init: Product) {\r\n\t\tsuper(SuggestionType.Product);\r\n\t\tObject.assign(this, init);\r\n\t}\r\n}\r\n\r\nexport class ProductStrategy implements SuggestionStrategy {\r\n\tpublic handleItemChange(item: Product, downshift: ControllerStateAndHelpers): void {\r\n\t\tlocation.assign(item.Url);\r\n\t}\r\n\r\n\tpublic toString(item: Product): string {\r\n\t\treturn this ? item.ProductName : '';\r\n\t}\r\n}\r\n","import { Result } from 'models/Search';\r\nimport { SuggestionType, Suggestion, SuggestionStrategy } from './Suggestion';\r\nimport { ControllerStateAndHelpers } from 'downshift';\r\n\r\nexport class Content extends Suggestion {\r\n\t/** Display label for the content item in Autocomplete. */\r\n\tpublic Value: string;\r\n\r\n\t/** The URL for the link created. */\r\n\tpublic Url: string;\r\n\r\n\t/** The display label in HTML format, if applicable. */\r\n\tpublic Html: string;\r\n\r\n\tpublic Results: Result;\r\n\r\n\tpublic constructor(init: Content) {\r\n\t\tsuper(SuggestionType.Content);\r\n\t\tObject.assign(this, init);\r\n\t}\r\n}\r\n\r\nexport class ContentStrategy implements SuggestionStrategy {\r\n\tpublic handleItemChange(item: Content, downshift: ControllerStateAndHelpers): void {\r\n\t\tlocation.assign(item.Url);\r\n\t}\r\n\r\n\tpublic toString(item: Content): string {\r\n\t\treturn this ? item.Value : '';\r\n\t}\r\n}\r\n","import { SuggestionType, Suggestion, SuggestionStrategy } from './Suggestion';\r\nimport { ControllerStateAndHelpers } from 'downshift';\r\n\r\nexport class Popular extends Suggestion {\r\n\t/** Display label for the popular search term. */\r\n\tpublic Value: string;\r\n\r\n\t/** The URL for the link created. */\r\n\tpublic Url: string;\r\n\r\n\tpublic constructor(init: Popular) {\r\n\t\tsuper(SuggestionType.Popular);\r\n\t\tObject.assign(this, init);\r\n\t}\r\n}\r\n\r\nexport class PopularStrategy implements SuggestionStrategy {\r\n\tpublic handleItemChange(item: Popular, downshift: ControllerStateAndHelpers): void {\r\n\t\tlocation.assign(item.Url);\r\n\t}\r\n\r\n\tpublic toString(item: Popular): string {\r\n\t\treturn this ? item.Value : '';\r\n\t}\r\n}\r\n","import React, { useContext, useState, useRef, MouseEvent } from 'react';\r\n\r\nimport { Facet as FacetModel, Value } from 'models/Facets';\r\nimport { useHawksearch } from 'components/StoreProvider';\r\nimport PlusSVG from 'components/svg/PlusSVG';\r\nimport MinusSVG from 'components/svg/MinusSVG';\r\nimport QuestionmarkSVG from 'components/svg/QuestionmarkSVG';\r\n\r\nconst FacetContext = React.createContext({} as FacetContextValue);\r\n\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nexport interface FacetProps {\r\n\tfacet: FacetModel;\r\n\tchildren: React.ReactNode;\r\n}\r\n\r\ninterface FacetContextValue {\r\n\t/** The facet model returned from the server for this facet. */\r\n\tfacet: FacetModel;\r\n\r\n\t/** Returns the state of the parent facet container. */\r\n\tstate: FacetState;\r\n\r\n\t/** An actor interface to perform actions for this facet. */\r\n\tactor: FacetActor;\r\n\r\n\trenderer: FacetRenderer;\r\n}\r\n\r\nexport interface FacetState {\r\n\t/**\r\n\t * An array of facet values for this facet. If this facet has a quick lookup search bar, this list\r\n\t * will be filtered by this quick lookup.\r\n\t */\r\n\tfacetValues: Value[];\r\n\r\n\t/**\r\n\t * If the facet is configured for filtering, this is the user's entered filter value. Updated on\r\n\t * immediately when the user types.\r\n\t */\r\n\tfilter: string;\r\n\r\n\t/** Whether or not this facet has its values truncated. */\r\n\tisTruncated: boolean;\r\n\t/** Whether or not this facet is collapsed. */\r\n\tisCollapsed: boolean;\r\n\t/** If filter is enabled, contains the number of facets that are truncated. */\r\n\tremainingFacets: number;\r\n\r\n\t// It shows the decimal count in slider\r\n\tdecimalPrecision: number;\r\n}\r\n\r\nexport interface FacetActor {\r\n\t/** Select the given facet value. */\r\n\tselectFacet(facetValue: Value | string): void;\r\n\t/** Selects and negates the given facet value. */\r\n\tnegateFacet(facetValue: Value | string): void;\r\n\r\n\t/** Sets the selected facet values by replacing existing selections for this facet. */\r\n\tsetFacets(facetValues: Value[] | string[]): void;\r\n\r\n\t/** Sets the filter for this facet container. */\r\n\tsetFilter(filter: string): void;\r\n\r\n\t/** Sets whether or not this facet is currently being truncated. */\r\n\tsetTruncated(truncated: boolean): void;\r\n\t/** Sets whether or not this facet is currently collapsed. */\r\n\tsetCollapsed(collapsed: boolean): void;\r\n}\r\n\r\nexport interface FacetRenderer {\r\n\t/**\r\n\t * Conditionally renders the default truncation UI (the \"Show More\"/\"Show Less\" buttons). Nothing will render\r\n\t * if the facet is configured to not be truncated.\r\n\t */\r\n\trenderTruncation();\r\n}\r\n\r\nfunction Facet({ facet, children }: FacetProps) {\r\n\tconst { actor: searchActor } = useHawksearch();\r\n\tconst wrapperRef = useRef(null);\r\n\tconst [filter, setFilter] = useState('');\r\n\tconst [isTruncated, setTruncated] = useState(facet.shouldTruncate);\r\n\tconst [isCollapsed, setCollapsed] = useState(facet.IsCollapsible && facet.IsCollapsedDefault);\r\n\tconst { t, i18n } = useTranslation();\r\n\r\n\tfunction selectFacet(facetValue: Value | string): void {\r\n\t\tsetFilter('');\r\n\t\tsearchActor.toggleFacetValue(facet, facetValue);\r\n\t}\r\n\r\n\tfunction setFacets(values: Value[] | string[]): void {\r\n\t\tsetFilter('');\r\n\t\tsearchActor.setFacetValues(facet, values);\r\n\t}\r\n\r\n\tfunction negateFacet(facetValue: Value | string): void {\r\n\t\tsetFilter('');\r\n\t\tsearchActor.toggleFacetValue(facet, facetValue, /* negate */ true);\r\n\t}\r\n\tfunction clickOnMoreLess(e) {\r\n\t\tactor.setTruncated(!isTruncated);\r\n\t\te.preventDefault();\r\n\t}\r\n\r\n\tfunction renderTruncation() {\r\n\t\t// only show the toggle button if the facet is configured for truncation and we're not filtering\r\n\r\n\t\treturn (\r\n\t\t\t<>\r\n\t\t\t\t{facet.shouldTruncate && !filter && (\r\n\t\t\t\t\t\r\n\t\t\t\t)}\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n\r\n\t// TODO: sort facet values\r\n\tlet facetValues = facet.Values;\r\n\r\n\t// first, perform any filtering if enabled and a filter has been typed in\r\n\tif (facet.shouldSearch && filter) {\r\n\t\tfacetValues = facet.Values.filter(val => {\r\n\t\t\tif (!val.Label) {\r\n\t\t\t\t// if a facet value doesn't have a label, we can't really filter down to it\r\n\t\t\t\t// so exclude it\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\treturn val.Label.toLowerCase().indexOf(filter.toLowerCase()) !== -1;\r\n\t\t});\r\n\t}\r\n\r\n\t// next, handle truncation\r\n\tlet remainingFacets = 0;\r\n\r\n\tif (facet.shouldTruncate && isTruncated) {\r\n\t\tconst valuesBeforeTrunc = facetValues.length;\r\n\r\n\t\tfacetValues = facetValues.slice(0, facet.TruncateThreshold);\r\n\r\n\t\tremainingFacets = valuesBeforeTrunc - facet.TruncateThreshold;\r\n\t}\r\n\r\n\tconst actor: FacetActor = {\r\n\t\tselectFacet,\r\n\t\tnegateFacet,\r\n\r\n\t\tsetFacets,\r\n\r\n\t\tsetFilter,\r\n\r\n\t\tsetTruncated,\r\n\t\tsetCollapsed,\r\n\t};\r\n\r\n\tconst state: FacetState = {\r\n\t\tfacetValues,\r\n\r\n\t\tfilter,\r\n\r\n\t\tisTruncated,\r\n\t\tisCollapsed,\r\n\t\tremainingFacets,\r\n\t\tdecimalPrecision: 2,\r\n\t};\r\n\r\n\tconst renderer: FacetRenderer = {\r\n\t\trenderTruncation,\r\n\t};\r\n\r\n\tfunction toggleCollapsible(event: MouseEvent) {\r\n\t\tif (wrapperRef.current && wrapperRef.current.contains(event.target as Node)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tsetCollapsed(!isCollapsed);\r\n\t}\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t
\r\n\t\t\t\t
toggleCollapsible(event)}>\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t{facet.Name}\r\n\t\t\t\t\t\r\n\t\t\t\t\t{/* {facet.Tooltip && (\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t)} */}\r\n\t\t\t\t\t{/* {isCollapsed ? (\r\n\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t Expand facet category{' '}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t) : (\r\n\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t Collapse facet category\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t)} */}\r\n\t\t\t\t
\r\n\r\n\t\t\t\t{!isCollapsed && (\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t{/* {facet.shouldSearch && (\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t setFilter(e.currentTarget.value)}\r\n\t\t\t\t\t\t\t\t\ttype=\"text\"\r\n\t\t\t\t\t\t\t\t\tplaceholder={t('Quick Lookup')}\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t)} */}\r\n\r\n\t\t\t\t\t\t{/* render listing component */}\r\n\t\t\t\t\t\t{children}\r\n\t\t\t\t\t
\r\n\t\t\t\t)}\r\n\t\t\t
\r\n\t\t\r\n\t);\r\n}\r\n\r\nexport function useFacet() {\r\n\treturn useContext(FacetContext);\r\n}\r\n\r\nexport default Facet;\r\n","import React from 'react';\r\n\r\nimport { useHawksearch } from 'components/StoreProvider';\r\nimport { useFacet } from 'components/ui/Facets/Facet';\r\nimport { FacetSelectionState } from 'store/Store';\r\nimport DashCircleSVG from 'components/svg/DashCircleSVG';\r\nimport CheckmarkSVG from 'components/svg/CheckmarkSVG';\r\nimport PlusCircleSVG from 'components/svg/PlusCircleSVG';\r\nimport { useHawkConfig } from 'components/ConfigProvider';\r\n\r\nenum FacetRangeDisplayType {\r\n\tText = 1,\r\n\tImage = 2,\r\n\tBoth = 3,\r\n}\r\n\r\nfunction Checkbox() {\r\n\tconst { store } = useHawksearch();\r\n\tconst { config } = useHawkConfig();\r\n\r\n\tconst {\r\n\t\tfacet,\r\n\t\tstate: { facetValues },\r\n\t\tactor,\r\n\t\trenderer,\r\n\t} = useFacet();\r\n\r\n\tfunction renderOptions() {\r\n\t\tif (facet.FieldType === 'range') {\r\n\t\t\treturn facetValues.map(value => {\r\n\t\t\t\tconst correspondingRange = facet.Ranges.find(c => c.Value === value.Value);\r\n\t\t\t\tconst rangeValueAssetUrl = correspondingRange\r\n\t\t\t\t\t? config.dashboardUrl + correspondingRange.AssetFullUrl\r\n\t\t\t\t\t: '';\r\n\r\n\t\t\t\t// facets can be selected or negated, so explicitly check that the facet is not selected\r\n\t\t\t\tconst selectionState = store.isFacetSelected(facet, value).state;\r\n\r\n\t\t\t\tconst isSelected = selectionState !== FacetSelectionState.NotSelected;\r\n\t\t\t\tconst isNegated = selectionState === FacetSelectionState.Negated;\r\n\t\t\t\tconst id = (value.Label || '')\r\n\t\t\t\t\t.toLowerCase()\r\n\t\t\t\t\t.split(' ')\r\n\t\t\t\t\t.join('-');\r\n\r\n\t\t\t\treturn (\r\n\t\t\t\t\t<>\r\n\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t\t actor.selectFacet(value)}\r\n\t\t\t\t\t\t\t\tchecked={isSelected ? true : false}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t{/*
  • \r\n\t\t\t\t\t\t\t actor.selectFacet(value)}\r\n\t\t\t\t\t\t\t\tclassName=\"hawk-facet-rail__facet-btn\"\r\n\t\t\t\t\t\t\t\taria-pressed={isSelected}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{renderCheckMark(isSelected)}\r\n\t\t\t\t\t\t\t\t{rangeValueAssetUrl !== '' ? (\r\n\t\t\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t{FacetRangeDisplayType.Text !== facet.FacetRangeDisplayType && (\r\n\t\t\t\t\t\t\t\t\t\t\t\t{value.Label}\r\n\t\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t\r\n\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t{value.Label} ({value.Count})\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t{value.Label} ({value.Count})\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\r\n\r\n\t\t\t\t\t\t\t{renderFacetActions(value.Value || '', isNegated)}\r\n\t\t\t\t\t\t
  • */}\r\n\t\t\t\t\t\r\n\t\t\t\t);\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\treturn facetValues.map(value => {\r\n\t\t\t\t// facets can be selected or negated, so explicitly check that the facet is not selected\r\n\t\t\t\tconst selectionState = store.isFacetSelected(facet, value).state;\r\n\r\n\t\t\t\tconst isSelected = selectionState !== FacetSelectionState.NotSelected;\r\n\t\t\t\tconst isNegated = selectionState === FacetSelectionState.Negated;\r\n\t\t\t\tconst id = (value.Label || '')\r\n\t\t\t\t\t.toLowerCase()\r\n\t\t\t\t\t.split(' ')\r\n\t\t\t\t\t.join('-');\r\n\t\t\t\treturn (\r\n\t\t\t\t\t<>\r\n\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t\t actor.selectFacet(value)}\r\n\t\t\t\t\t\t\t\tchecked={isSelected ? true : false}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t{/*
  • \r\n\t\t\t\t\t\t\t actor.selectFacet(value)}\r\n\t\t\t\t\t\t\t\tclassName=\"hawk-facet-rail__facet-btn\"\r\n\t\t\t\t\t\t\t\taria-pressed={isSelected}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{renderCheckMark(isSelected)}\r\n\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t{value.Label} ({value.Count})\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\r\n\t\t\t\t\t\t\t{renderFacetActions(value.Value || '', isNegated)}\r\n\t\t\t\t\t\t
  • */}\r\n\t\t\t\t\t\r\n\t\t\t\t);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tfunction renderCheckMark(isSelected: boolean) {\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t{isSelected ? : null}\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n\tfunction renderFacetActions(value: string, isNegated: boolean) {\r\n\t\treturn (\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n\r\n\treturn (\r\n\t\t
    \r\n\t\t\t
    \r\n\t\t\t\t
      {renderOptions()}
    \r\n\t\t\t
    \r\n\r\n\t\t\t{/* render the default truncation control as we don't need to customize this */}\r\n\t\t\t{renderer.renderTruncation()}\r\n\t\t
    \r\n\t);\r\n}\r\n\r\nexport default Checkbox;\r\n","import React, { useState, useEffect } from 'react';\r\n\r\nfunction formatDate(unixFormat: number) {\r\n\tconst date = new Date(unixFormat);\r\n\tconst year = date.getFullYear().toString();\r\n\tconst month = (date.getMonth() + 101).toString().substring(1);\r\n\tconst day = (date.getDate() + 100).toString().substring(1);\r\n\treturn year + '-' + month + '-' + day;\r\n}\r\nexport interface SliderCalendarInputsProps {\r\n\tmin: number;\r\n\tmax: number;\r\n\tvalues: number[];\r\n\tonValueChange(minValue: number, maxValue: number): void;\r\n}\r\nfunction SliderCalendarInputs(sliderProps: SliderCalendarInputsProps) {\r\n\tconst [minValue, setMinValue] = useState(0);\r\n\tconst [maxValue, setMaxValue] = useState(0);\r\n\r\n\tfunction onMinUpdate(event: any) {\r\n\t\tconst value = new Date(event.target.value).getTime();\r\n\r\n\t\tconst newMinValue = Number(value);\r\n\t\tif (isNaN(newMinValue) || minValue === value) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tsetMinValue(value);\r\n\t\tsliderProps.onValueChange(Number(newMinValue), Number(maxValue));\r\n\t}\r\n\r\n\tfunction onMaxUpdate(event: any) {\r\n\t\tconst value = new Date(event.target.value).getTime();\r\n\r\n\t\tconst newMaxValue = Number(value);\r\n\t\tif (isNaN(newMaxValue) || maxValue === value) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tsetMaxValue(value);\r\n\t\tsliderProps.onValueChange(Number(minValue), Number(newMaxValue));\r\n\t}\r\n\r\n\tuseEffect(() => {\r\n\t\tsetMinValue(sliderProps.values[0]);\r\n\t\tsetMaxValue(sliderProps.values[1]);\r\n\t}, [sliderProps]);\r\n\treturn (\r\n\t\t
    \r\n\t\t\t\r\n\r\n\t\t\t\r\n\t\t
    \r\n\t);\r\n}\r\n\r\nexport default SliderCalendarInputs;\r\n","import React, { useState, useEffect } from 'react';\r\nimport { PublicState } from 'rheostat';\r\n\r\nimport { useHawksearch } from 'components/StoreProvider';\r\nimport { useFacet } from 'components/ui/Facets/Facet';\r\nimport SliderCalendarInputs from '../SliderCalendarInputs';\r\n// const Rheostat = React.lazy(() => import(/* webpackChunkName: \"rheostat\" */ 'rheostat'));\r\nimport Rheostat from 'rheostat';\r\n\r\nfunction formatDate(date: Date) {\r\n\tconst year = date.getFullYear().toString();\r\n\tconst month = (date.getMonth() + 101).toString().substring(1);\r\n\tconst day = (date.getDate() + 100).toString().substring(1);\r\n\treturn year + '-' + month + '-' + day;\r\n}\r\n\r\nfunction replaceHyphen(date: string) {\r\n\tif (!date) {\r\n\t\treturn date;\r\n\t}\r\n\treturn date.replace(/-/g, '/');\r\n}\r\n\r\nfunction getTime(date) {\r\n\treturn date && Number(new Date(date || '').getTime());\r\n}\r\n\r\nfunction SliderDate() {\r\n\tconst {\r\n\t\tstore: { facetSelections },\r\n\t} = useHawksearch();\r\n\r\n\tconst {\r\n\t\tstate: { facetValues, decimalPrecision },\r\n\t\tfacet,\r\n\t\tactor,\r\n\t} = useFacet();\r\n\t// the range of the slider is defined by the first facet value. or null if there is no first value\r\n\tconst range = facetValues.length > 0 ? facetValues[0] : null;\r\n\r\n\tconst [rangeMin, setMinRange] = useState(range && getTime(range.RangeMin));\r\n\tconst [rangeMax, setMaxRange] = useState(range && getTime(range.RangeMax));\r\n\tconst [rangeStart, setStartRange] = useState(range && getTime(range.RangeStart));\r\n\tconst [rangeEnd, setEndRange] = useState(range && getTime(range.RangeEnd));\r\n\r\n\t// if there's no range, initialize to zeros\r\n\tconst [minValue, setMinValue] = useState();\r\n\tconst [maxValue, setMaxValue] = useState();\r\n\r\n\tuseEffect(() => {\r\n\t\tconst paramName = facet.ParamName || facet.Field;\r\n\r\n\t\t// clear min and max value if these were cleared\r\n\t\tif (!paramName || !(paramName in facetSelections)) {\r\n\t\t\tsetMinValue(undefined);\r\n\t\t\tsetMaxValue(undefined);\r\n\t\t}\r\n\t}, [facetSelections]);\r\n\r\n\tuseEffect(() => {\r\n\t\tconst newRange = facetValues.length > 0 ? facetValues[0] : null;\r\n\t\tsetMinRange(newRange && getTime(newRange.RangeMin));\r\n\t\tsetMaxRange(newRange && getTime(newRange.RangeMax));\r\n\t\tsetStartRange(newRange && getTime(newRange.RangeStart));\r\n\t\tsetEndRange(newRange && getTime(newRange.RangeEnd));\r\n\t}, [facetValues]);\r\n\r\n\tif (\r\n\t\trangeMin === null ||\r\n\t\tisNaN(rangeMin) ||\r\n\t\trangeMax === null ||\r\n\t\tisNaN(rangeMax) ||\r\n\t\trangeStart === null ||\r\n\t\tisNaN(rangeStart) ||\r\n\t\trangeEnd === null ||\r\n\t\tisNaN(rangeEnd)\r\n\t) {\r\n\t\t// this facet is somehow misconfigured so don't render\r\n\t\treturn null;\r\n\t}\r\n\r\n\tfunction onSliderDrag(state: PublicState) {\r\n\t\tconst [newMin, newMax] = state.values;\r\n\t\tsetMinValue(newMin);\r\n\t\tsetMaxValue(newMax);\r\n\t}\r\n\r\n\tfunction onSliderValueChange(state: PublicState) {\r\n\t\tconst [newMin, newMax] = state.values;\r\n\r\n\t\tsetFacetValues(newMin, newMax);\r\n\t}\r\n\r\n\tfunction onValueChange(newMinValue: number, newMaxValue: number) {\r\n\t\tlet currentMinValue = minValue;\r\n\t\tlet currentMaxValue = maxValue;\r\n\t\t// if min value wasn't yet selected use range start\r\n\t\tif (minValue === undefined && rangeStart !== null) {\r\n\t\t\tcurrentMinValue = rangeStart; // setMinValue(rangeStart);\r\n\t\t}\r\n\r\n\t\t// if max value wasn't yet selected use range end\r\n\t\tif (maxValue === undefined && rangeEnd !== null) {\r\n\t\t\tcurrentMaxValue = rangeEnd;\r\n\t\t}\r\n\r\n\t\tif (currentMinValue === undefined || currentMaxValue === undefined) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (currentMinValue !== newMinValue && newMinValue <= currentMaxValue) {\r\n\t\t\tif (rangeMin !== null && newMinValue <= rangeMin) {\r\n\t\t\t\tcurrentMinValue = rangeMin;\r\n\t\t\t} else {\r\n\t\t\t\tcurrentMinValue = newMinValue;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (currentMaxValue !== newMaxValue && newMaxValue >= currentMinValue) {\r\n\t\t\tif (rangeMax !== null && newMaxValue >= rangeMax) {\r\n\t\t\t\tcurrentMaxValue = rangeMax;\r\n\t\t\t} else {\r\n\t\t\t\tcurrentMaxValue = newMaxValue;\r\n\t\t\t}\r\n\t\t}\r\n\t\tsetFacetValues(currentMinValue, currentMaxValue);\r\n\t}\r\n\r\n\tfunction setFacetValues(minVal: number | undefined, maxVal: number | undefined) {\r\n\t\tif (minVal === undefined || maxVal === undefined || isNaN(minVal) || isNaN(maxVal)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tsetMinValue(minVal);\r\n\t\tsetMaxValue(maxVal);\r\n\r\n\t\tconst formattedMinVal = replaceHyphen(formatDate(new Date(minVal)));\r\n\t\tconst formattedMaxVal = replaceHyphen(formatDate(new Date(maxVal)));\r\n\r\n\t\t// this selection is sent to hawk separated by commas, so build the value here\r\n\t\tconst selection = `${formattedMinVal},${formattedMaxVal}`;\r\n\t\tactor.setFacets([selection]);\r\n\t}\r\n\r\n\treturn (\r\n\t\t
    \r\n\t\t\t
    \r\n\t\t\t\tLoading...
    }>\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t
    \r\n\t\t
    \r\n\t);\r\n}\r\n\r\nexport default SliderDate;\r\n","/**\n * react-number-format - 4.5.3\n * Author : Sudhanshu Yadav\n * Copyright (c) 2016, 2021 to Sudhanshu Yadav, released under the MIT license.\n * https://github.com/s-yadav/react-number-format\n */\n\nimport React from 'react';\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (typeof call === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction createCommonjsModule(fn, module) {\n\treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n}\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nvar ReactPropTypesSecret_1 = ReactPropTypesSecret;\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nvar factoryWithThrowingShims = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret_1) {\n // It is still safe when called from React.\n return;\n }\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n } shim.isRequired = shim;\n function getShim() {\n return shim;\n } // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n var ReactPropTypes = {\n array: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n elementType: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim,\n\n checkPropTypes: emptyFunctionWithReset,\n resetWarningCache: emptyFunction\n };\n\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n\nvar propTypes = createCommonjsModule(function (module) {\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n{\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = factoryWithThrowingShims();\n}\n});\n\n// basic noop function\nfunction noop() {}\nfunction returnTrue() {\n return true;\n}\nfunction charIsNumber(_char) {\n return !!(_char || '').match(/\\d/);\n}\nfunction isNil(val) {\n return val === null || val === undefined;\n}\nfunction escapeRegExp(str) {\n return str.replace(/[-[\\]/{}()*+?.\\\\^$|]/g, \"\\\\$&\");\n}\nfunction getThousandsGroupRegex(thousandsGroupStyle) {\n switch (thousandsGroupStyle) {\n case 'lakh':\n return /(\\d+?)(?=(\\d\\d)+(\\d)(?!\\d))(\\.\\d+)?/g;\n\n case 'wan':\n return /(\\d)(?=(\\d{4})+(?!\\d))/g;\n\n case 'thousand':\n default:\n return /(\\d)(?=(\\d{3})+(?!\\d))/g;\n }\n}\nfunction applyThousandSeparator(str, thousandSeparator, thousandsGroupStyle) {\n var thousandsGroupRegex = getThousandsGroupRegex(thousandsGroupStyle);\n var index = str.search(/[1-9]/);\n index = index === -1 ? str.length : index;\n return str.substring(0, index) + str.substring(index, str.length).replace(thousandsGroupRegex, '$1' + thousandSeparator);\n} //spilt a float number into different parts beforeDecimal, afterDecimal, and negation\n\nfunction splitDecimal(numStr) {\n var allowNegative = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n var hasNagation = numStr[0] === '-';\n var addNegation = hasNagation && allowNegative;\n numStr = numStr.replace('-', '');\n var parts = numStr.split('.');\n var beforeDecimal = parts[0];\n var afterDecimal = parts[1] || '';\n return {\n beforeDecimal: beforeDecimal,\n afterDecimal: afterDecimal,\n hasNagation: hasNagation,\n addNegation: addNegation\n };\n}\nfunction fixLeadingZero(numStr) {\n if (!numStr) return numStr;\n var isNegative = numStr[0] === '-';\n if (isNegative) numStr = numStr.substring(1, numStr.length);\n var parts = numStr.split('.');\n var beforeDecimal = parts[0].replace(/^0+/, '') || '0';\n var afterDecimal = parts[1] || '';\n return \"\".concat(isNegative ? '-' : '').concat(beforeDecimal).concat(afterDecimal ? \".\".concat(afterDecimal) : '');\n}\n/**\n * limit decimal numbers to given scale\n * Not used .fixedTo because that will break with big numbers\n */\n\nfunction limitToScale(numStr, scale, fixedDecimalScale) {\n var str = '';\n var filler = fixedDecimalScale ? '0' : '';\n\n for (var i = 0; i <= scale - 1; i++) {\n str += numStr[i] || filler;\n }\n\n return str;\n}\n/**\n * This method is required to round prop value to given scale.\n * Not used .round or .fixedTo because that will break with big numbers\n */\n\nfunction roundToPrecision(numStr, scale, fixedDecimalScale) {\n //if number is empty don't do anything return empty string\n if (['', '-'].indexOf(numStr) !== -1) return numStr;\n var shoudHaveDecimalSeparator = numStr.indexOf('.') !== -1 && scale;\n\n var _splitDecimal = splitDecimal(numStr),\n beforeDecimal = _splitDecimal.beforeDecimal,\n afterDecimal = _splitDecimal.afterDecimal,\n hasNagation = _splitDecimal.hasNagation;\n\n var floatValue = parseFloat(\"0.\".concat(afterDecimal || '0'));\n var floatValueStr = afterDecimal.length <= scale ? floatValue.toString() : floatValue.toFixed(scale);\n var roundedDecimalParts = floatValueStr.split('.');\n var intPart = beforeDecimal.split('').reverse().reduce(function (roundedStr, current, idx) {\n if (roundedStr.length > idx) {\n return (Number(roundedStr[0]) + Number(current)).toString() + roundedStr.substring(1, roundedStr.length);\n }\n\n return current + roundedStr;\n }, roundedDecimalParts[0]);\n var decimalPart = limitToScale(roundedDecimalParts[1] || '', Math.min(scale, afterDecimal.length), fixedDecimalScale);\n var negation = hasNagation ? '-' : '';\n var decimalSeparator = shoudHaveDecimalSeparator ? '.' : '';\n return \"\".concat(negation).concat(intPart).concat(decimalSeparator).concat(decimalPart);\n}\nfunction omit(obj, keyMaps) {\n var filteredObj = {};\n Object.keys(obj).forEach(function (key) {\n if (!keyMaps[key]) filteredObj[key] = obj[key];\n });\n return filteredObj;\n}\n/** set the caret positon in an input field **/\n\nfunction setCaretPosition(el, caretPos) {\n el.value = el.value; // ^ this is used to not only get \"focus\", but\n // to make sure we don't have it everything -selected-\n // (it causes an issue in chrome, and having it doesn't hurt any other browser)\n\n if (el !== null) {\n if (el.createTextRange) {\n var range = el.createTextRange();\n range.move('character', caretPos);\n range.select();\n return true;\n } // (el.selectionStart === 0 added for Firefox bug)\n\n\n if (el.selectionStart || el.selectionStart === 0) {\n el.focus();\n el.setSelectionRange(caretPos, caretPos);\n return true;\n } // fail city, fortunately this never happens (as far as I've tested) :)\n\n\n el.focus();\n return false;\n }\n}\n/**\n Given previous value and newValue it returns the index\n start - end to which values have changed.\n This function makes assumption about only consecutive\n characters are changed which is correct assumption for caret input.\n*/\n\nfunction findChangedIndex(prevValue, newValue) {\n var i = 0,\n j = 0;\n var prevLength = prevValue.length;\n var newLength = newValue.length;\n\n while (prevValue[i] === newValue[i] && i < prevLength) {\n i++;\n } //check what has been changed from last\n\n\n while (prevValue[prevLength - 1 - j] === newValue[newLength - 1 - j] && newLength - j > i && prevLength - j > i) {\n j++;\n }\n\n return {\n start: i,\n end: prevLength - j\n };\n}\n/*\n Returns a number whose value is limited to the given range\n*/\n\nfunction clamp(num, min, max) {\n return Math.min(Math.max(num, min), max);\n}\nfunction getCurrentCaretPosition(el) {\n /*Max of selectionStart and selectionEnd is taken for the patch of pixel and other mobile device caret bug*/\n return Math.max(el.selectionStart, el.selectionEnd);\n}\nfunction addInputMode(format) {\n return format || !(navigator.platform && /iPhone|iPod/.test(navigator.platform));\n}\n\nvar propTypes$1 = {\n thousandSeparator: propTypes.oneOfType([propTypes.string, propTypes.oneOf([true])]),\n decimalSeparator: propTypes.string,\n allowedDecimalSeparators: propTypes.arrayOf(propTypes.string),\n thousandsGroupStyle: propTypes.oneOf(['thousand', 'lakh', 'wan']),\n decimalScale: propTypes.number,\n fixedDecimalScale: propTypes.bool,\n displayType: propTypes.oneOf(['input', 'text']),\n prefix: propTypes.string,\n suffix: propTypes.string,\n format: propTypes.oneOfType([propTypes.string, propTypes.func]),\n removeFormatting: propTypes.func,\n mask: propTypes.oneOfType([propTypes.string, propTypes.arrayOf(propTypes.string)]),\n value: propTypes.oneOfType([propTypes.number, propTypes.string]),\n defaultValue: propTypes.oneOfType([propTypes.number, propTypes.string]),\n isNumericString: propTypes.bool,\n customInput: propTypes.elementType,\n allowNegative: propTypes.bool,\n allowEmptyFormatting: propTypes.bool,\n allowLeadingZeros: propTypes.bool,\n onValueChange: propTypes.func,\n onKeyDown: propTypes.func,\n onMouseUp: propTypes.func,\n onChange: propTypes.func,\n onFocus: propTypes.func,\n onBlur: propTypes.func,\n type: propTypes.oneOf(['text', 'tel', 'password']),\n isAllowed: propTypes.func,\n renderText: propTypes.func,\n getInputRef: propTypes.oneOfType([propTypes.func, // for legacy refs\n propTypes.shape({\n current: propTypes.any\n })])\n};\nvar defaultProps = {\n displayType: 'input',\n decimalSeparator: '.',\n thousandsGroupStyle: 'thousand',\n fixedDecimalScale: false,\n prefix: '',\n suffix: '',\n allowNegative: true,\n allowEmptyFormatting: false,\n allowLeadingZeros: false,\n isNumericString: false,\n type: 'text',\n onValueChange: noop,\n onChange: noop,\n onKeyDown: noop,\n onMouseUp: noop,\n onFocus: noop,\n onBlur: noop,\n isAllowed: returnTrue\n};\n\nvar NumberFormat =\n/*#__PURE__*/\nfunction (_React$Component) {\n _inherits(NumberFormat, _React$Component);\n\n function NumberFormat(props) {\n var _this;\n\n _classCallCheck(this, NumberFormat);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(NumberFormat).call(this, props));\n var defaultValue = props.defaultValue; //validate props\n\n _this.validateProps();\n\n var formattedValue = _this.formatValueProp(defaultValue);\n\n _this.state = {\n value: formattedValue,\n numAsString: _this.removeFormatting(formattedValue),\n mounted: false\n };\n _this.selectionBeforeInput = {\n selectionStart: 0,\n selectionEnd: 0\n };\n _this.onChange = _this.onChange.bind(_assertThisInitialized(_this));\n _this.onKeyDown = _this.onKeyDown.bind(_assertThisInitialized(_this));\n _this.onMouseUp = _this.onMouseUp.bind(_assertThisInitialized(_this));\n _this.onFocus = _this.onFocus.bind(_assertThisInitialized(_this));\n _this.onBlur = _this.onBlur.bind(_assertThisInitialized(_this));\n return _this;\n }\n\n _createClass(NumberFormat, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n // set mounted state\n // eslint-disable-next-line react/no-did-mount-set-state\n this.setState({\n mounted: true\n });\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate(prevProps) {\n this.updateValueIfRequired(prevProps);\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n clearTimeout(this.focusTimeout);\n }\n }, {\n key: \"updateValueIfRequired\",\n value: function updateValueIfRequired(prevProps) {\n var props = this.props,\n state = this.state,\n focusedElm = this.focusedElm;\n var stateValue = state.value,\n _state$numAsString = state.numAsString,\n lastNumStr = _state$numAsString === void 0 ? '' : _state$numAsString; // If only state changed no need to do any thing\n\n if (prevProps !== props) {\n //validate props\n this.validateProps();\n var lastValueWithNewFormat = this.formatNumString(lastNumStr);\n var formattedValue = isNil(props.value) ? lastValueWithNewFormat : this.formatValueProp();\n var numAsString = this.removeFormatting(formattedValue);\n var floatValue = parseFloat(numAsString);\n var lastFloatValue = parseFloat(lastNumStr);\n\n if ( //while typing set state only when float value changes\n (!isNaN(floatValue) || !isNaN(lastFloatValue)) && floatValue !== lastFloatValue || //can also set state when float value is same and the format props changes\n lastValueWithNewFormat !== stateValue || //set state always when not in focus and formatted value is changed\n focusedElm === null && formattedValue !== stateValue) {\n this.updateValue({\n formattedValue: formattedValue,\n numAsString: numAsString,\n input: focusedElm\n });\n }\n }\n }\n /** Misc methods **/\n\n }, {\n key: \"getFloatString\",\n value: function getFloatString() {\n var num = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n var decimalScale = this.props.decimalScale;\n\n var _this$getSeparators = this.getSeparators(),\n decimalSeparator = _this$getSeparators.decimalSeparator;\n\n var numRegex = this.getNumberRegex(true); //remove negation for regex check\n\n var hasNegation = num[0] === '-';\n if (hasNegation) num = num.replace('-', ''); //if decimal scale is zero remove decimal and number after decimalSeparator\n\n if (decimalSeparator && decimalScale === 0) {\n num = num.split(decimalSeparator)[0];\n }\n\n num = (num.match(numRegex) || []).join('').replace(decimalSeparator, '.'); //remove extra decimals\n\n var firstDecimalIndex = num.indexOf('.');\n\n if (firstDecimalIndex !== -1) {\n num = \"\".concat(num.substring(0, firstDecimalIndex), \".\").concat(num.substring(firstDecimalIndex + 1, num.length).replace(new RegExp(escapeRegExp(decimalSeparator), 'g'), ''));\n } //add negation back\n\n\n if (hasNegation) num = '-' + num;\n return num;\n } //returned regex assumes decimalSeparator is as per prop\n\n }, {\n key: \"getNumberRegex\",\n value: function getNumberRegex(g, ignoreDecimalSeparator) {\n var _this$props = this.props,\n format = _this$props.format,\n decimalScale = _this$props.decimalScale;\n\n var _this$getSeparators2 = this.getSeparators(),\n decimalSeparator = _this$getSeparators2.decimalSeparator;\n\n return new RegExp('\\\\d' + (decimalSeparator && decimalScale !== 0 && !ignoreDecimalSeparator && !format ? '|' + escapeRegExp(decimalSeparator) : ''), g ? 'g' : undefined);\n }\n }, {\n key: \"getSeparators\",\n value: function getSeparators() {\n var decimalSeparator = this.props.decimalSeparator;\n var _this$props2 = this.props,\n thousandSeparator = _this$props2.thousandSeparator,\n allowedDecimalSeparators = _this$props2.allowedDecimalSeparators;\n\n if (thousandSeparator === true) {\n thousandSeparator = ',';\n }\n\n if (!allowedDecimalSeparators) {\n allowedDecimalSeparators = [decimalSeparator, '.'];\n }\n\n return {\n decimalSeparator: decimalSeparator,\n thousandSeparator: thousandSeparator,\n allowedDecimalSeparators: allowedDecimalSeparators\n };\n }\n }, {\n key: \"getMaskAtIndex\",\n value: function getMaskAtIndex(index) {\n var _this$props$mask = this.props.mask,\n mask = _this$props$mask === void 0 ? ' ' : _this$props$mask;\n\n if (typeof mask === 'string') {\n return mask;\n }\n\n return mask[index] || ' ';\n }\n }, {\n key: \"getValueObject\",\n value: function getValueObject(formattedValue, numAsString) {\n var floatValue = parseFloat(numAsString);\n return {\n formattedValue: formattedValue,\n value: numAsString,\n floatValue: isNaN(floatValue) ? undefined : floatValue\n };\n }\n }, {\n key: \"validateProps\",\n value: function validateProps() {\n var mask = this.props.mask; //validate decimalSeparator and thousandSeparator\n\n var _this$getSeparators3 = this.getSeparators(),\n decimalSeparator = _this$getSeparators3.decimalSeparator,\n thousandSeparator = _this$getSeparators3.thousandSeparator;\n\n if (decimalSeparator === thousandSeparator) {\n throw new Error(\"\\n Decimal separator can't be same as thousand separator.\\n thousandSeparator: \".concat(thousandSeparator, \" (thousandSeparator = {true} is same as thousandSeparator = \\\",\\\")\\n decimalSeparator: \").concat(decimalSeparator, \" (default value for decimalSeparator is .)\\n \"));\n } //validate mask\n\n\n if (mask) {\n var maskAsStr = mask === 'string' ? mask : mask.toString();\n\n if (maskAsStr.match(/\\d/g)) {\n throw new Error(\"\\n Mask \".concat(mask, \" should not contain numeric character;\\n \"));\n }\n }\n }\n /** Misc methods end **/\n\n /** caret specific methods **/\n\n }, {\n key: \"setPatchedCaretPosition\",\n value: function setPatchedCaretPosition(el, caretPos, currentValue) {\n /* setting caret position within timeout of 0ms is required for mobile chrome,\n otherwise browser resets the caret position after we set it\n We are also setting it without timeout so that in normal browser we don't see the flickering */\n setCaretPosition(el, caretPos);\n setTimeout(function () {\n if (el.value === currentValue) setCaretPosition(el, caretPos);\n }, 0);\n }\n /* This keeps the caret within typing area so people can't type in between prefix or suffix */\n\n }, {\n key: \"correctCaretPosition\",\n value: function correctCaretPosition(value, caretPos, direction) {\n var _this$props3 = this.props,\n prefix = _this$props3.prefix,\n suffix = _this$props3.suffix,\n format = _this$props3.format; //if value is empty return 0\n\n if (value === '') return 0; //caret position should be between 0 and value length\n\n caretPos = clamp(caretPos, 0, value.length); //in case of format as number limit between prefix and suffix\n\n if (!format) {\n var hasNegation = value[0] === '-';\n return clamp(caretPos, prefix.length + (hasNegation ? 1 : 0), value.length - suffix.length);\n } //in case if custom format method don't do anything\n\n\n if (typeof format === 'function') return caretPos;\n /* in case format is string find the closest # position from the caret position */\n //in case the caretPos have input value on it don't do anything\n\n if (format[caretPos] === '#' && charIsNumber(value[caretPos])) return caretPos; //if caretPos is just after input value don't do anything\n\n if (format[caretPos - 1] === '#' && charIsNumber(value[caretPos - 1])) return caretPos; //find the nearest caret position\n\n var firstHashPosition = format.indexOf('#');\n var lastHashPosition = format.lastIndexOf('#'); //limit the cursor between the first # position and the last # position\n\n caretPos = clamp(caretPos, firstHashPosition, lastHashPosition + 1);\n var nextPos = format.substring(caretPos, format.length).indexOf('#');\n var caretLeftBound = caretPos;\n var caretRightBound = caretPos + (nextPos === -1 ? 0 : nextPos); //get the position where the last number is present\n\n while (caretLeftBound > firstHashPosition && (format[caretLeftBound] !== '#' || !charIsNumber(value[caretLeftBound]))) {\n caretLeftBound -= 1;\n }\n\n var goToLeft = !charIsNumber(value[caretRightBound]) || direction === 'left' && caretPos !== firstHashPosition || caretPos - caretLeftBound < caretRightBound - caretPos;\n\n if (goToLeft) {\n //check if number should be taken after the bound or after it\n //if number preceding a valid number keep it after\n return charIsNumber(value[caretLeftBound]) ? caretLeftBound + 1 : caretLeftBound;\n }\n\n return caretRightBound;\n }\n }, {\n key: \"getCaretPosition\",\n value: function getCaretPosition(inputValue, formattedValue, caretPos) {\n var format = this.props.format;\n var stateValue = this.state.value;\n var numRegex = this.getNumberRegex(true);\n var inputNumber = (inputValue.match(numRegex) || []).join('');\n var formattedNumber = (formattedValue.match(numRegex) || []).join('');\n var j, i;\n j = 0;\n\n for (i = 0; i < caretPos; i++) {\n var currentInputChar = inputValue[i] || '';\n var currentFormatChar = formattedValue[j] || ''; //no need to increase new cursor position if formatted value does not have those characters\n //case inputValue = 1a23 and formattedValue = 123\n\n if (!currentInputChar.match(numRegex) && currentInputChar !== currentFormatChar) continue; //When we are striping out leading zeros maintain the new cursor position\n //Case inputValue = 00023 and formattedValue = 23;\n\n if (currentInputChar === '0' && currentFormatChar.match(numRegex) && currentFormatChar !== '0' && inputNumber.length !== formattedNumber.length) continue; //we are not using currentFormatChar because j can change here\n\n while (currentInputChar !== formattedValue[j] && j < formattedValue.length) {\n j++;\n }\n\n j++;\n }\n\n if (typeof format === 'string' && !stateValue) {\n //set it to the maximum value so it goes after the last number\n j = formattedValue.length;\n } //correct caret position if its outside of editable area\n\n\n j = this.correctCaretPosition(formattedValue, j);\n return j;\n }\n /** caret specific methods ends **/\n\n /** methods to remove formattting **/\n\n }, {\n key: \"removePrefixAndSuffix\",\n value: function removePrefixAndSuffix(val) {\n var _this$props4 = this.props,\n format = _this$props4.format,\n prefix = _this$props4.prefix,\n suffix = _this$props4.suffix; //remove prefix and suffix\n\n if (!format && val) {\n var isNegative = val[0] === '-'; //remove negation sign\n\n if (isNegative) val = val.substring(1, val.length); //remove prefix\n\n val = prefix && val.indexOf(prefix) === 0 ? val.substring(prefix.length, val.length) : val; //remove suffix\n\n var suffixLastIndex = val.lastIndexOf(suffix);\n val = suffix && suffixLastIndex !== -1 && suffixLastIndex === val.length - suffix.length ? val.substring(0, suffixLastIndex) : val; //add negation sign back\n\n if (isNegative) val = '-' + val;\n }\n\n return val;\n }\n }, {\n key: \"removePatternFormatting\",\n value: function removePatternFormatting(val) {\n var format = this.props.format;\n var formatArray = format.split('#').filter(function (str) {\n return str !== '';\n });\n var start = 0;\n var numStr = '';\n\n for (var i = 0, ln = formatArray.length; i <= ln; i++) {\n var part = formatArray[i] || ''; //if i is the last fragment take the index of end of the value\n //For case like +1 (911) 911 91 91 having pattern +1 (###) ### ## ##\n\n var index = i === ln ? val.length : val.indexOf(part, start);\n /* in any case if we don't find the pattern part in the value assume the val as numeric string\n This will be also in case if user has started typing, in any other case it will not be -1\n unless wrong prop value is provided */\n\n if (index === -1) {\n numStr = val;\n break;\n } else {\n numStr += val.substring(start, index);\n start = index + part.length;\n }\n }\n\n return (numStr.match(/\\d/g) || []).join('');\n }\n }, {\n key: \"removeFormatting\",\n value: function removeFormatting(val) {\n var _this$props5 = this.props,\n format = _this$props5.format,\n removeFormatting = _this$props5.removeFormatting;\n if (!val) return val;\n\n if (!format) {\n val = this.removePrefixAndSuffix(val);\n val = this.getFloatString(val);\n } else if (typeof format === 'string') {\n val = this.removePatternFormatting(val);\n } else if (typeof removeFormatting === 'function') {\n //condition need to be handled if format method is provide,\n val = removeFormatting(val);\n } else {\n val = (val.match(/\\d/g) || []).join('');\n }\n\n return val;\n }\n /** methods to remove formattting end **/\n\n /*** format specific methods start ***/\n\n /**\n * Format when # based string is provided\n * @param {string} numStr Numeric String\n * @return {string} formatted Value\n */\n\n }, {\n key: \"formatWithPattern\",\n value: function formatWithPattern(numStr) {\n var format = this.props.format;\n var hashCount = 0;\n var formattedNumberAry = format.split('');\n\n for (var i = 0, ln = format.length; i < ln; i++) {\n if (format[i] === '#') {\n formattedNumberAry[i] = numStr[hashCount] || this.getMaskAtIndex(hashCount);\n hashCount += 1;\n }\n }\n\n return formattedNumberAry.join('');\n }\n /**\n * @param {string} numStr Numeric string/floatString] It always have decimalSeparator as .\n * @return {string} formatted Value\n */\n\n }, {\n key: \"formatAsNumber\",\n value: function formatAsNumber(numStr) {\n var _this$props6 = this.props,\n decimalScale = _this$props6.decimalScale,\n fixedDecimalScale = _this$props6.fixedDecimalScale,\n prefix = _this$props6.prefix,\n suffix = _this$props6.suffix,\n allowNegative = _this$props6.allowNegative,\n thousandsGroupStyle = _this$props6.thousandsGroupStyle;\n\n var _this$getSeparators4 = this.getSeparators(),\n thousandSeparator = _this$getSeparators4.thousandSeparator,\n decimalSeparator = _this$getSeparators4.decimalSeparator;\n\n var hasDecimalSeparator = numStr.indexOf('.') !== -1 || decimalScale && fixedDecimalScale;\n\n var _splitDecimal = splitDecimal(numStr, allowNegative),\n beforeDecimal = _splitDecimal.beforeDecimal,\n afterDecimal = _splitDecimal.afterDecimal,\n addNegation = _splitDecimal.addNegation; // eslint-disable-line prefer-const\n //apply decimal precision if its defined\n\n\n if (decimalScale !== undefined) afterDecimal = limitToScale(afterDecimal, decimalScale, fixedDecimalScale);\n\n if (thousandSeparator) {\n beforeDecimal = applyThousandSeparator(beforeDecimal, thousandSeparator, thousandsGroupStyle);\n } //add prefix and suffix\n\n\n if (prefix) beforeDecimal = prefix + beforeDecimal;\n if (suffix) afterDecimal = afterDecimal + suffix; //restore negation sign\n\n if (addNegation) beforeDecimal = '-' + beforeDecimal;\n numStr = beforeDecimal + (hasDecimalSeparator && decimalSeparator || '') + afterDecimal;\n return numStr;\n }\n }, {\n key: \"formatNumString\",\n value: function formatNumString() {\n var numStr = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n var _this$props7 = this.props,\n format = _this$props7.format,\n allowEmptyFormatting = _this$props7.allowEmptyFormatting;\n var formattedValue = numStr;\n\n if (numStr === '' && !allowEmptyFormatting) {\n formattedValue = '';\n } else if (numStr === '-' && !format) {\n formattedValue = '-';\n } else if (typeof format === 'string') {\n formattedValue = this.formatWithPattern(formattedValue);\n } else if (typeof format === 'function') {\n formattedValue = format(formattedValue);\n } else {\n formattedValue = this.formatAsNumber(formattedValue);\n }\n\n return formattedValue;\n }\n }, {\n key: \"formatValueProp\",\n value: function formatValueProp(defaultValue) {\n var _this$props8 = this.props,\n format = _this$props8.format,\n decimalScale = _this$props8.decimalScale,\n fixedDecimalScale = _this$props8.fixedDecimalScale,\n allowEmptyFormatting = _this$props8.allowEmptyFormatting;\n var _this$props9 = this.props,\n value = _this$props9.value,\n isNumericString = _this$props9.isNumericString; // if value is undefined or null, use defaultValue instead\n\n value = isNil(value) ? defaultValue : value;\n var isNonNumericFalsy = !value && value !== 0;\n\n if (isNonNumericFalsy && allowEmptyFormatting) {\n value = '';\n } // if value is not defined return empty string\n\n\n if (isNonNumericFalsy && !allowEmptyFormatting) return '';\n\n if (typeof value === 'number') {\n value = value.toString();\n isNumericString = true;\n } //change infinity value to empty string\n\n\n if (value === 'Infinity' && isNumericString) {\n value = '';\n } //round the number based on decimalScale\n //format only if non formatted value is provided\n\n\n if (isNumericString && !format && typeof decimalScale === 'number') {\n value = roundToPrecision(value, decimalScale, fixedDecimalScale);\n }\n\n var formattedValue = isNumericString ? this.formatNumString(value) : this.formatInput(value);\n return formattedValue;\n }\n }, {\n key: \"formatNegation\",\n value: function formatNegation() {\n var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n var allowNegative = this.props.allowNegative;\n var negationRegex = new RegExp('(-)');\n var doubleNegationRegex = new RegExp('(-)(.)*(-)'); // Check number has '-' value\n\n var hasNegation = negationRegex.test(value); // Check number has 2 or more '-' values\n\n var removeNegation = doubleNegationRegex.test(value); //remove negation\n\n value = value.replace(/-/g, '');\n\n if (hasNegation && !removeNegation && allowNegative) {\n value = '-' + value;\n }\n\n return value;\n }\n }, {\n key: \"formatInput\",\n value: function formatInput() {\n var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n var format = this.props.format; //format negation only if we are formatting as number\n\n if (!format) {\n value = this.removePrefixAndSuffix(value);\n value = this.formatNegation(value);\n } //remove formatting from number\n\n\n value = this.removeFormatting(value);\n return this.formatNumString(value);\n }\n /*** format specific methods end ***/\n\n }, {\n key: \"isCharacterAFormat\",\n value: function isCharacterAFormat(caretPos, value) {\n var _this$props10 = this.props,\n format = _this$props10.format,\n prefix = _this$props10.prefix,\n suffix = _this$props10.suffix,\n decimalScale = _this$props10.decimalScale,\n fixedDecimalScale = _this$props10.fixedDecimalScale;\n\n var _this$getSeparators5 = this.getSeparators(),\n decimalSeparator = _this$getSeparators5.decimalSeparator; //check within format pattern\n\n\n if (typeof format === 'string' && format[caretPos] !== '#') return true; //check in number format\n\n if (!format && (caretPos < prefix.length || caretPos >= value.length - suffix.length || decimalScale && fixedDecimalScale && value[caretPos] === decimalSeparator)) {\n return true;\n }\n\n return false;\n }\n }, {\n key: \"checkIfFormatGotDeleted\",\n value: function checkIfFormatGotDeleted(start, end, value) {\n for (var i = start; i < end; i++) {\n if (this.isCharacterAFormat(i, value)) return true;\n }\n\n return false;\n }\n /**\n * This will check if any formatting got removed by the delete or backspace and reset the value\n * It will also work as fallback if android chome keyDown handler does not work\n **/\n\n }, {\n key: \"correctInputValue\",\n value: function correctInputValue(caretPos, lastValue, value) {\n var _this$props11 = this.props,\n format = _this$props11.format,\n allowNegative = _this$props11.allowNegative,\n prefix = _this$props11.prefix,\n suffix = _this$props11.suffix,\n decimalScale = _this$props11.decimalScale;\n\n var _this$getSeparators6 = this.getSeparators(),\n allowedDecimalSeparators = _this$getSeparators6.allowedDecimalSeparators,\n decimalSeparator = _this$getSeparators6.decimalSeparator;\n\n var lastNumStr = this.state.numAsString || '';\n var _this$selectionBefore = this.selectionBeforeInput,\n selectionStart = _this$selectionBefore.selectionStart,\n selectionEnd = _this$selectionBefore.selectionEnd;\n\n var _findChangedIndex = findChangedIndex(lastValue, value),\n start = _findChangedIndex.start,\n end = _findChangedIndex.end;\n /** Check for any allowed decimal separator is added in the numeric format and replace it with decimal separator */\n\n\n if (!format && start === end && allowedDecimalSeparators.indexOf(value[selectionStart]) !== -1) {\n var separator = decimalScale === 0 ? '' : decimalSeparator;\n return value.substr(0, selectionStart) + separator + value.substr(selectionStart + 1, value.length);\n }\n /* don't do anyhting if something got added,\n or if value is empty string (when whole input is cleared)\n or whole input is replace with a number\n */\n\n\n var leftBound = !!format ? 0 : prefix.length;\n var rightBound = lastValue.length - (!!format ? 0 : suffix.length);\n\n if (value.length > lastValue.length || !value.length || start === end || selectionStart === 0 && selectionEnd === lastValue.length || start === 0 && end === lastValue.length || selectionStart === leftBound && selectionEnd === rightBound) {\n return value;\n } //if format got deleted reset the value to last value\n\n\n if (this.checkIfFormatGotDeleted(start, end, lastValue)) {\n value = lastValue;\n } //for numbers check if beforeDecimal got deleted and there is nothing after decimal,\n //clear all numbers in such case while keeping the - sign\n\n\n if (!format) {\n var numericString = this.removeFormatting(value);\n\n var _splitDecimal2 = splitDecimal(numericString, allowNegative),\n beforeDecimal = _splitDecimal2.beforeDecimal,\n afterDecimal = _splitDecimal2.afterDecimal,\n addNegation = _splitDecimal2.addNegation; // eslint-disable-line prefer-const\n //clear only if something got deleted\n\n\n var isBeforeDecimalPoint = caretPos < value.indexOf(decimalSeparator) + 1;\n\n if (numericString.length < lastNumStr.length && isBeforeDecimalPoint && beforeDecimal === '' && !parseFloat(afterDecimal)) {\n return addNegation ? '-' : '';\n }\n }\n\n return value;\n }\n /** Update value and caret position */\n\n }, {\n key: \"updateValue\",\n value: function updateValue(params) {\n var formattedValue = params.formattedValue,\n input = params.input,\n _params$setCaretPosit = params.setCaretPosition,\n setCaretPosition = _params$setCaretPosit === void 0 ? true : _params$setCaretPosit;\n var numAsString = params.numAsString,\n caretPos = params.caretPos;\n var onValueChange = this.props.onValueChange;\n var lastValue = this.state.value;\n\n if (input) {\n //set caret position, and value imperatively when element is provided\n if (setCaretPosition) {\n //calculate caret position if not defined\n if (!caretPos) {\n var inputValue = params.inputValue || input.value;\n var currentCaretPosition = getCurrentCaretPosition(input);\n /**\n * set the value imperatively, this is required for IE fix\n * This is also required as if new caret position is beyond the previous value.\n * Caret position will not be set correctly\n */\n\n input.value = formattedValue; //get the caret position\n\n caretPos = this.getCaretPosition(inputValue, formattedValue, currentCaretPosition);\n } //set caret position\n\n\n this.setPatchedCaretPosition(input, caretPos, formattedValue);\n } else {\n /**\n * if we are not setting caret position set the value imperatively.\n * This is required on onBlur method\n */\n input.value = formattedValue;\n }\n } //calculate numeric string if not passed\n\n\n if (numAsString === undefined) {\n numAsString = this.removeFormatting(formattedValue);\n } //update state if value is changed\n\n\n if (formattedValue !== lastValue) {\n this.setState({\n value: formattedValue,\n numAsString: numAsString\n }); // trigger onValueChange synchronously, so parent is updated along with the number format. Fix for #277, #287\n\n onValueChange(this.getValueObject(formattedValue, numAsString));\n }\n }\n }, {\n key: \"onChange\",\n value: function onChange(e) {\n var el = e.target;\n var inputValue = el.value;\n var state = this.state,\n props = this.props;\n var isAllowed = props.isAllowed;\n var lastValue = state.value || '';\n var currentCaretPosition = getCurrentCaretPosition(el);\n inputValue = this.correctInputValue(currentCaretPosition, lastValue, inputValue);\n var formattedValue = this.formatInput(inputValue) || '';\n var numAsString = this.removeFormatting(formattedValue);\n var valueObj = this.getValueObject(formattedValue, numAsString);\n var isChangeAllowed = isAllowed(valueObj);\n\n if (!isChangeAllowed) {\n formattedValue = lastValue;\n }\n\n this.updateValue({\n formattedValue: formattedValue,\n numAsString: numAsString,\n inputValue: inputValue,\n input: el\n });\n\n if (isChangeAllowed) {\n props.onChange(e);\n }\n }\n }, {\n key: \"onBlur\",\n value: function onBlur(e) {\n var props = this.props,\n state = this.state;\n var format = props.format,\n onBlur = props.onBlur,\n allowLeadingZeros = props.allowLeadingZeros;\n var numAsString = state.numAsString;\n var lastValue = state.value;\n this.focusedElm = null;\n clearTimeout(this.focusTimeout);\n\n if (!format) {\n // if the numAsString is not a valid number reset it to empty\n if (isNaN(parseFloat(numAsString))) {\n numAsString = '';\n }\n\n if (!allowLeadingZeros) {\n numAsString = fixLeadingZero(numAsString);\n }\n\n var formattedValue = this.formatNumString(numAsString); //change the state\n\n if (formattedValue !== lastValue) {\n // the event needs to be persisted because its properties can be accessed in an asynchronous way\n this.updateValue({\n formattedValue: formattedValue,\n numAsString: numAsString,\n input: e.target,\n setCaretPosition: false\n });\n onBlur(e);\n return;\n }\n }\n\n onBlur(e);\n }\n }, {\n key: \"onKeyDown\",\n value: function onKeyDown(e) {\n var el = e.target;\n var key = e.key;\n var selectionStart = el.selectionStart,\n selectionEnd = el.selectionEnd,\n _el$value = el.value,\n value = _el$value === void 0 ? '' : _el$value;\n var expectedCaretPosition;\n var _this$props12 = this.props,\n decimalScale = _this$props12.decimalScale,\n fixedDecimalScale = _this$props12.fixedDecimalScale,\n prefix = _this$props12.prefix,\n suffix = _this$props12.suffix,\n format = _this$props12.format,\n onKeyDown = _this$props12.onKeyDown;\n var ignoreDecimalSeparator = decimalScale !== undefined && fixedDecimalScale;\n var numRegex = this.getNumberRegex(false, ignoreDecimalSeparator);\n var negativeRegex = new RegExp('-');\n var isPatternFormat = typeof format === 'string';\n this.selectionBeforeInput = {\n selectionStart: selectionStart,\n selectionEnd: selectionEnd\n }; //Handle backspace and delete against non numerical/decimal characters or arrow keys\n\n if (key === 'ArrowLeft' || key === 'Backspace') {\n expectedCaretPosition = selectionStart - 1;\n } else if (key === 'ArrowRight') {\n expectedCaretPosition = selectionStart + 1;\n } else if (key === 'Delete') {\n expectedCaretPosition = selectionStart;\n } //if expectedCaretPosition is not set it means we don't want to Handle keyDown\n //also if multiple characters are selected don't handle\n\n\n if (expectedCaretPosition === undefined || selectionStart !== selectionEnd) {\n onKeyDown(e);\n return;\n }\n\n var newCaretPosition = expectedCaretPosition;\n var leftBound = isPatternFormat ? format.indexOf('#') : prefix.length;\n var rightBound = isPatternFormat ? format.lastIndexOf('#') + 1 : value.length - suffix.length;\n\n if (key === 'ArrowLeft' || key === 'ArrowRight') {\n var direction = key === 'ArrowLeft' ? 'left' : 'right';\n newCaretPosition = this.correctCaretPosition(value, expectedCaretPosition, direction);\n } else if (key === 'Delete' && !numRegex.test(value[expectedCaretPosition]) && !negativeRegex.test(value[expectedCaretPosition])) {\n while (!numRegex.test(value[newCaretPosition]) && newCaretPosition < rightBound) {\n newCaretPosition++;\n }\n } else if (key === 'Backspace' && !numRegex.test(value[expectedCaretPosition])) {\n /* NOTE: This is special case when backspace is pressed on a\n negative value while the cursor position is after prefix. We can't handle it on onChange because\n we will not have any information of keyPress\n */\n if (selectionStart <= leftBound + 1 && value[0] === '-' && typeof format === 'undefined') {\n var newValue = value.substring(1);\n this.updateValue({\n formattedValue: newValue,\n caretPos: newCaretPosition,\n input: el\n });\n } else if (!negativeRegex.test(value[expectedCaretPosition])) {\n while (!numRegex.test(value[newCaretPosition - 1]) && newCaretPosition > leftBound) {\n newCaretPosition--;\n }\n\n newCaretPosition = this.correctCaretPosition(value, newCaretPosition, 'left');\n }\n }\n\n if (newCaretPosition !== expectedCaretPosition || expectedCaretPosition < leftBound || expectedCaretPosition > rightBound) {\n e.preventDefault();\n this.setPatchedCaretPosition(el, newCaretPosition, value);\n }\n /* NOTE: this is just required for unit test as we need to get the newCaretPosition,\n Remove this when you find different solution */\n\n\n if (e.isUnitTestRun) {\n this.setPatchedCaretPosition(el, newCaretPosition, value);\n }\n\n onKeyDown(e);\n }\n /** required to handle the caret position when click anywhere within the input **/\n\n }, {\n key: \"onMouseUp\",\n value: function onMouseUp(e) {\n var el = e.target;\n /**\n * NOTE: we have to give default value for value as in case when custom input is provided\n * value can come as undefined when nothing is provided on value prop.\n */\n\n var selectionStart = el.selectionStart,\n selectionEnd = el.selectionEnd,\n _el$value2 = el.value,\n value = _el$value2 === void 0 ? '' : _el$value2;\n\n if (selectionStart === selectionEnd) {\n var caretPosition = this.correctCaretPosition(value, selectionStart);\n\n if (caretPosition !== selectionStart) {\n this.setPatchedCaretPosition(el, caretPosition, value);\n }\n }\n\n this.props.onMouseUp(e);\n }\n }, {\n key: \"onFocus\",\n value: function onFocus(e) {\n var _this2 = this;\n\n // Workaround Chrome and Safari bug https://bugs.chromium.org/p/chromium/issues/detail?id=779328\n // (onFocus event target selectionStart is always 0 before setTimeout)\n e.persist();\n this.focusedElm = e.target;\n this.focusTimeout = setTimeout(function () {\n var el = e.target;\n var selectionStart = el.selectionStart,\n selectionEnd = el.selectionEnd,\n _el$value3 = el.value,\n value = _el$value3 === void 0 ? '' : _el$value3;\n\n var caretPosition = _this2.correctCaretPosition(value, selectionStart); //setPatchedCaretPosition only when everything is not selected on focus (while tabbing into the field)\n\n\n if (caretPosition !== selectionStart && !(selectionStart === 0 && selectionEnd === value.length)) {\n _this2.setPatchedCaretPosition(el, caretPosition, value);\n }\n\n _this2.props.onFocus(e);\n }, 0);\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props13 = this.props,\n type = _this$props13.type,\n displayType = _this$props13.displayType,\n customInput = _this$props13.customInput,\n renderText = _this$props13.renderText,\n getInputRef = _this$props13.getInputRef,\n format = _this$props13.format;\n var _this$state = this.state,\n value = _this$state.value,\n mounted = _this$state.mounted;\n var otherProps = omit(this.props, propTypes$1); // add input mode on element based on format prop and device once the component is mounted \n\n var inputMode = mounted && addInputMode(format) ? 'numeric' : undefined;\n\n var inputProps = _extends({\n inputMode: inputMode\n }, otherProps, {\n type: type,\n value: value,\n onChange: this.onChange,\n onKeyDown: this.onKeyDown,\n onMouseUp: this.onMouseUp,\n onFocus: this.onFocus,\n onBlur: this.onBlur\n });\n\n if (displayType === 'text') {\n return renderText ? renderText(value, otherProps) || null : React.createElement(\"span\", _extends({}, otherProps, {\n ref: getInputRef\n }), value);\n } else if (customInput) {\n var CustomInput = customInput;\n return React.createElement(CustomInput, _extends({}, inputProps, {\n ref: getInputRef\n }));\n }\n\n return React.createElement(\"input\", _extends({}, inputProps, {\n ref: getInputRef\n }));\n }\n }]);\n\n return NumberFormat;\n}(React.Component);\n\nNumberFormat.propTypes = propTypes$1;\nNumberFormat.defaultProps = defaultProps;\n\nexport default NumberFormat;\n","import React, { useState, useEffect } from 'react';\r\nimport NumberFormat from 'react-number-format';\r\n\r\nexport interface SliderNumericInputsProps {\r\n\tmin: number;\r\n\tmax: number;\r\n\tvalues: number[];\r\n\tisCurrency: boolean;\r\n\tcurrencySymbol: string;\r\n\tdecimalPrecision: number;\r\n\tonValueChange(minValue: number, maxValue: number): void;\r\n}\r\nfunction SliderNumericInputs(sliderProps: SliderNumericInputsProps) {\r\n\tconst [minValue, setMinValue] = useState('' as string);\r\n\tconst [maxValue, setMaxValue] = useState('' as string);\r\n\r\n\tfunction onMinUpdate(values: any) {\r\n\t\tconst { formattedValue, value } = values;\r\n\r\n\t\tconst newMinValue = Number(value);\r\n\t\tif (isNaN(newMinValue) || minValue === value) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tsetMinValue(value);\r\n\t}\r\n\r\n\tfunction onMaxUpdate(values: any) {\r\n\t\tconst { formattedValue, value } = values;\r\n\r\n\t\tconst newMaxValue = Number(value);\r\n\t\tif (isNaN(newMaxValue) || maxValue === value) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tsetMaxValue(value);\r\n\t}\r\n\tfunction reloadFacets(event: React.FormEvent) {\r\n\t\tsliderProps.onValueChange(Number(minValue), Number(maxValue));\r\n\t}\r\n\r\n\tuseEffect(() => {\r\n\t\tsetMinValue(sliderProps.values[0].toString());\r\n\t\tsetMaxValue(sliderProps.values[1].toString());\r\n\t}, [sliderProps]);\r\n\r\n\treturn (\r\n\t\t
    \r\n\t\t\t\r\n\r\n\t\t\t\r\n\t\t
    \r\n\t);\r\n}\r\n\r\nexport default SliderNumericInputs;\r\n","import React, { useState, useEffect } from 'react';\r\nimport { PublicState } from 'rheostat';\r\n\r\nimport { useHawksearch } from 'components/StoreProvider';\r\nimport { useFacet } from 'components/ui/Facets/Facet';\r\nimport SliderNumericInputs from 'components/ui/Facets/SliderNumericInputs';\r\n// const Rheostat = React.lazy(() => import(/* webpackChunkName: \"rheostat\" */ 'rheostat'));\r\nimport Rheostat from 'rheostat';\r\n\r\nfunction SliderNumeric() {\r\n\tconst {\r\n\t\tstore: { facetSelections },\r\n\t} = useHawksearch();\r\n\r\n\tconst {\r\n\t\tstate: { facetValues, decimalPrecision },\r\n\t\tfacet,\r\n\t\tactor,\r\n\t} = useFacet();\r\n\t// the range of the slider is defined by the first facet value. or null if there is no first value\r\n\tconst range = facetValues.length > 0 ? facetValues[0] : null;\r\n\r\n\tconst [rangeMin, setMinRange] = useState(range && Number(parseFloat(range.RangeMin || '').toFixed(2)));\r\n\tconst [rangeMax, setMaxRange] = useState(range && Number(parseFloat(range.RangeMax || '').toFixed(2)));\r\n\tconst [rangeStart, setStartRange] = useState(range && Number(parseFloat(range.RangeStart || '').toFixed(2)));\r\n\tconst [rangeEnd, setEndRange] = useState(range && Number(parseFloat(range.RangeEnd || '').toFixed(2)));\r\n\r\n\t// if there's no range, initialize to zeros\r\n\tconst [minValue, setMinValue] = useState();\r\n\tconst [maxValue, setMaxValue] = useState();\r\n\r\n\tconst [isCurency, setIsCurrency] = useState(facet.IsCurrency);\r\n\tconst [currencySymbol, setCurrencySymbol] = useState(facet.CurrencySymbol);\r\n\r\n\tuseEffect(() => {\r\n\t\tsetCurrencySymbol(facet.CurrencySymbol || '$');\r\n\t\tsetIsCurrency(facet.IsCurrency);\r\n\t}, [facet]);\r\n\r\n\tuseEffect(() => {\r\n\t\tconst paramName = facet.ParamName || facet.Field;\r\n\r\n\t\t// clear min and max value if these were cleared\r\n\t\tif (!paramName || !(paramName in facetSelections)) {\r\n\t\t\tsetMinValue(undefined);\r\n\t\t\tsetMaxValue(undefined);\r\n\t\t} else if (\r\n\t\t\tparamName in facetSelections &&\r\n\t\t\tfacetSelections[paramName].items &&\r\n\t\t\tfacetSelections[paramName].items.length > 0\r\n\t\t) {\r\n\t\t\tconst selectedValues = facetSelections[paramName].items[0].value.split(',');\r\n\t\t\tsetMinValue(Number(selectedValues[0]));\r\n\t\t\tsetMaxValue(Number(selectedValues[1]));\r\n\t\t}\r\n\t}, [facetSelections]);\r\n\r\n\tuseEffect(() => {\r\n\t\tconst newRange = facetValues.length > 0 ? facetValues[0] : null;\r\n\t\tsetMinRange(newRange && Number(parseFloat(newRange.RangeMin || '').toFixed(2)));\r\n\t\tsetMaxRange(newRange && Number(parseFloat(newRange.RangeMax || '').toFixed(2)));\r\n\t\tsetStartRange(newRange && Number(parseFloat(newRange.RangeStart || '').toFixed(2)));\r\n\t\tsetEndRange(newRange && Number(parseFloat(newRange.RangeEnd || '').toFixed(2)));\r\n\t}, [facetValues]);\r\n\r\n\tif (\r\n\t\trangeMin === null ||\r\n\t\tisNaN(rangeMin) ||\r\n\t\trangeMax === null ||\r\n\t\tisNaN(rangeMax) ||\r\n\t\trangeStart === null ||\r\n\t\tisNaN(rangeStart) ||\r\n\t\trangeEnd === null ||\r\n\t\tisNaN(rangeEnd)\r\n\t) {\r\n\t\t// this facet is somehow misconfigured so don't render\r\n\t\treturn null;\r\n\t}\r\n\r\n\tfunction onSliderValueChange(state: PublicState) {\r\n\t\tconst [newMin, newMax] = state.values;\r\n\r\n\t\tsetFacetValues(newMin, newMax);\r\n\t}\r\n\r\n\tfunction onValueChange(newMinValue: number, newMaxValue: number) {\r\n\t\tlet currentMinValue = minValue;\r\n\t\tlet currentMaxValue = maxValue;\r\n\t\t// if min value wasn't yet selected use range start\r\n\t\tif (minValue === undefined && rangeStart !== null) {\r\n\t\t\tcurrentMinValue = rangeStart; // setMinValue(rangeStart);\r\n\t\t}\r\n\r\n\t\t// if max value wasn't yet selected use range end\r\n\t\tif (maxValue === undefined && rangeEnd !== null) {\r\n\t\t\tcurrentMaxValue = rangeEnd;\r\n\t\t}\r\n\r\n\t\tif (currentMinValue === undefined || currentMaxValue === undefined) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (currentMinValue !== newMinValue && newMinValue <= currentMaxValue) {\r\n\t\t\tif (rangeMin !== null && newMinValue <= rangeMin) {\r\n\t\t\t\tcurrentMinValue = rangeMin;\r\n\t\t\t} else {\r\n\t\t\t\tcurrentMinValue = newMinValue;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (currentMaxValue !== newMaxValue && newMaxValue >= currentMinValue) {\r\n\t\t\tif (rangeMax !== null && newMaxValue >= rangeMax) {\r\n\t\t\t\tcurrentMaxValue = rangeMax;\r\n\t\t\t} else {\r\n\t\t\t\tcurrentMaxValue = newMaxValue;\r\n\t\t\t}\r\n\t\t}\r\n\t\tsetMinValue(currentMinValue);\r\n\t\tsetMaxValue(currentMaxValue);\r\n\t\tsetFacetValues(currentMinValue, currentMaxValue);\r\n\t}\r\n\r\n\tfunction setFacetValues(minVal: number | undefined, maxVal: number | undefined) {\r\n\t\tif (minVal === undefined || maxVal === undefined || isNaN(minVal) || isNaN(maxVal)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tsetMinValue(minVal);\r\n\t\tsetMaxValue(maxVal);\r\n\r\n\t\t// this selection is sent to hawk separated by commas, so build the value here\r\n\t\tconst selection = `${minVal},${maxVal}`;\r\n\r\n\t\tactor.setFacets([selection]);\r\n\t}\r\n\r\n\treturn (\r\n\t\t
    \r\n\t\t\t
    \r\n\t\t\t\tLoading...
    }>\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t
    \r\n\t\t\r\n\t);\r\n}\r\n\r\nexport default SliderNumeric;\r\n","import React, { useState } from 'react';\r\n\r\nimport { Value } from 'models/Facets/Value';\r\nimport { Swatch } from 'models/Facets';\r\nimport { useHawkConfig } from 'components/ConfigProvider';\r\n\r\nexport interface SwatchItemProps {\r\n\tswatchValue: Value;\r\n\tfacetSwatch: Swatch;\r\n\tisNegated: boolean;\r\n\tisSelected: boolean;\r\n\tisColor: boolean;\r\n\tonSwatchSelected(facetValue: string, isNegated: boolean): void;\r\n}\r\n\r\nfunction SwatchItem(item: SwatchItemProps) {\r\n\tconst { config } = useHawkConfig();\r\n\r\n\tconst facetValue = item.swatchValue.Value || '';\r\n\r\n\t// facets can be selected or negated, so explicitly check that the facet is not selected\r\n\tconst swatchUrl =\r\n\t\tconfig.dashboardUrl + (!item.facetSwatch.AssetUrl ? item.facetSwatch.AssetName : item.facetSwatch.AssetUrl);\r\n\r\n\tconst colorSwatchStyle = {\r\n\t\tbackgroundColor: item.facetSwatch.Color,\r\n\t};\r\n\r\n\tconst listItemClassNames =\r\n\t\t'hawk-facet-rail__facet-list-item' +\r\n\t\t(item.isSelected ? ' hawkFacet-active' : '') +\r\n\t\t(item.isNegated ? ' hawkFacet-negative' : '');\r\n\r\n\treturn (\r\n\t\t
  • \r\n\t\t\t item.onSwatchSelected(facetValue, false)}\r\n\t\t\t\tclassName=\"hawk-facet-rail__facet-btn hawk-styleSwatch\"\r\n\t\t\t\taria-pressed={item.isSelected}\r\n\t\t\t>\r\n\t\t\t\t\r\n\t\t\t\t\t{item.isColor ? (\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t) : (\r\n\t\t\t\t\t\t{item.facetSwatch.Value}\r\n\t\t\t\t\t)}\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t
  • \r\n\t);\r\n}\r\n\r\nexport default SwatchItem;\r\n","import React, { useEffect, useState } from 'react';\r\n\r\nimport { useHawksearch } from 'components/StoreProvider';\r\nimport { FacetSelectionState } from 'store/Store';\r\nimport { useFacet } from 'components/ui/Facets/Facet';\r\nimport CheckmarkSVG from 'components/svg/CheckmarkSVG';\r\nimport { Value } from 'models/Facets';\r\nimport PlusCircleSVG from 'components/svg/PlusCircleSVG';\r\nimport DashCircleSVG from 'components/svg/DashCircleSVG';\r\nimport { ClientSelectionValue } from 'store/ClientSelections';\r\n\r\nexport interface NestedItemProps {\r\n\thierarchyValue: Value;\r\n\tisNegated: boolean;\r\n\tisSelected: boolean;\r\n\tonValueSelected(facetValue: Value, isNegated: boolean): void;\r\n}\r\n\r\nfunction checkChildSelections(facetArray, matchValue) {\r\n\tconst matchedValue = facetArray.find((i: ClientSelectionValue) => {\r\n\t\treturn (i.path || '').split('/').indexOf(matchValue) !== -1;\r\n\t});\r\n\treturn !matchedValue ? false : true;\r\n}\r\n\r\nfunction NestedItem(item: NestedItemProps) {\r\n\tconst { store } = useHawksearch();\r\n\tconst { facet } = useFacet();\r\n\tconst [isExpanded, setIsExpanded] = useState(false);\r\n\tconst [isTruncated, setIsTruncated] = useState(facet.shouldTruncate);\r\n\r\n\tconst hierarchyValue = item.hierarchyValue || '';\r\n\tlet hierarchyChildren = item.hierarchyValue.Children || [];\r\n\r\n\tlet remainingValues = 0;\r\n\r\n\tconst shouldTruncateChildren =\r\n\t\tfacet.DisplayType === 'truncating' && hierarchyChildren.length > facet.TruncateThreshold;\r\n\r\n\tif (shouldTruncateChildren && isTruncated) {\r\n\t\tconst valuesBeforeTrunc = hierarchyChildren.length;\r\n\r\n\t\thierarchyChildren = hierarchyChildren.slice(0, facet.TruncateThreshold);\r\n\r\n\t\tremainingValues = valuesBeforeTrunc - facet.TruncateThreshold;\r\n\t}\r\n\r\n\tfunction renderChildTruncation() {\r\n\t\treturn (\r\n\t\t\t<>\r\n\t\t\t\t{shouldTruncateChildren && (\r\n\t\t\t\t\t
  • \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
  • \r\n\t\t\t\t)}\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n\r\n\tuseEffect(() => {\r\n\t\tconst isPartialSelection = checkChildSelections(\r\n\t\t\t(store.facetSelections[facet.Field] || {}).items || [],\r\n\t\t\titem.hierarchyValue.Value\r\n\t\t);\r\n\t\tif (isPartialSelection) {\r\n\t\t\tsetIsExpanded(true);\r\n\t\t}\r\n\t}, [item]);\r\n\r\n\tfunction setSelection() {\r\n\t\titem.onValueSelected(hierarchyValue, false);\r\n\t\tif (!isExpanded) {\r\n\t\t\tsetIsExpanded(true);\r\n\t\t}\r\n\t}\r\n\r\n\tconst id = (item.hierarchyValue.Label || '')\r\n\t\t.toLowerCase()\r\n\t\t.split(' ')\r\n\t\t.join('-');\r\n\r\n\treturn (\r\n\t\t
  • \r\n\t\t\t
    \r\n\t\t\t\t setSelection()}\r\n\t\t\t\t\tclassName=\"hawk-facet-rail__facet-btn\"\r\n\t\t\t\t\taria-pressed={item.isSelected}\r\n\t\t\t\t>\r\n\t\t\t\t\t setSelection()}\r\n\t\t\t\t\t\tchecked={item.isSelected ? true : false}\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t\r\n\t\t\t\t\t{/* \r\n\t\t\t\t\t\t{item.isSelected ? : null}\r\n\t\t\t\t\t\r\n\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t{item.hierarchyValue.Label} ({item.hierarchyValue.Count})\r\n\t\t\t\t\t */}\r\n\t\t\t\t
    \r\n\r\n\t\t\t\t{/* item.onValueSelected(hierarchyValue, true)}\r\n\t\t\t\t\tclassName=\"hawk-facet-rail__facet-btn-exclude\"\r\n\t\t\t\t>\r\n\t\t\t\t\t{item.isNegated ? (\r\n\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tInclude facet\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t) : (\r\n\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tExclude facet\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t)}\r\n\t\t\t\t */}\r\n\t\t\t\t{hierarchyChildren.length > 0 ? (\r\n\t\t\t\t\t setIsExpanded(!isExpanded)}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{isExpanded ? '-' : '+'}\r\n\t\t\t\t\t\r\n\t\t\t\t) : null}\r\n\t\t\t\r\n\t\t\t{isExpanded && hierarchyChildren ? (\r\n\t\t\t\t
    \r\n\t\t\t\t\t
      \r\n\t\t\t\t\t\t{hierarchyChildren.map(value => {\r\n\t\t\t\t\t\t\tconst selectionState = store.isFacetSelected(facet, value).state;\r\n\t\t\t\t\t\t\tconst isNegated = selectionState === FacetSelectionState.Negated;\r\n\t\t\t\t\t\t\tconst isSelected = selectionState !== FacetSelectionState.NotSelected;\r\n\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t{renderChildTruncation()}\r\n\t\t\t\t\t
    \r\n\t\t\t\t
    \r\n\t\t\t) : (\r\n\t\t\t\t<>\r\n\t\t\t)}\r\n\t\t
  • \r\n\t);\r\n}\r\n\r\nexport default NestedItem;\r\n","import React, { useState } from 'react';\r\nimport { useHawksearch } from 'components/StoreProvider';\r\nimport { useFacet } from 'components/ui/Facets/Facet';\r\n\r\nfunction replaceHyphen(date: string) {\r\n\tif (!date) {\r\n\t\treturn date;\r\n\t}\r\n\treturn date.replace(/-/g, '/');\r\n}\r\n\r\nfunction OpenRangeDatetime() {\r\n\tconst { actor: hawkActor } = useHawksearch();\r\n\r\n\tconst {\r\n\t\tstate: { facetValues },\r\n\t\tfacet,\r\n\t\tactor,\r\n\t} = useFacet();\r\n\r\n\tconst daterange = facetValues.length > 0 ? facetValues[0] : null;\r\n\tconst rangeStartDate = daterange && daterange.RangeStart ? daterange.RangeStart.slice(0, 16) : '';\r\n\tconst rangeEndDate = daterange && daterange.RangeEnd ? daterange.RangeEnd.slice(0, 16) : '';\r\n\r\n\t// if there's no range, initialize to empty strings\r\n\tconst [minDateValue, setdateStartValue] = useState(rangeStartDate || '');\r\n\tconst [maxDateValue, setdateEndValue] = useState(rangeEndDate || '');\r\n\t// the open range boundary values are defined by the first facet value. or null if there is no first value\r\n\r\n\tconst range = facetValues.length > 0 ? facetValues[0] : null;\r\n\r\n\tconst rangeStart = (range && range.RangeStart) || '';\r\n\tconst rangeEnd = (range && range.RangeEnd) || '';\r\n\r\n\tif (rangeStart === null || rangeEnd === null) {\r\n\t\t// this facet is somehow misconfigured so don't render\r\n\t\treturn null;\r\n\t}\r\n\r\n\tfunction ondateRangeStartChange(event: React.FormEvent) {\r\n\t\tsetdateFacetValues(event.currentTarget.value, maxDateValue);\r\n\t}\r\n\r\n\tfunction ondateRangeEndChange(event: React.FormEvent) {\r\n\t\tsetdateFacetValues(minDateValue, event.currentTarget.value);\r\n\t}\r\n\r\n\tfunction setdateFacetValues(startVal: string, endVal: string) {\r\n\t\tsetdateStartValue(startVal);\r\n\t\tsetdateEndValue(endVal);\r\n\r\n\t\t// this selection is sent to hawk separated by commas, so build the value here\r\n\r\n\t\tif (startVal === '' && endVal === '') {\r\n\t\t\thawkActor.clearFacet(facet);\r\n\t\t} else {\r\n\t\t\tconst selection = `${replaceHyphen(startVal)},${replaceHyphen(endVal)}`;\r\n\t\t\tactor.setFacets([selection]);\r\n\t\t}\r\n\t}\r\n\r\n\treturn (\r\n\t\t
    \r\n\t\t\t
    \r\n\t\t\t\t
    \r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t
    \r\n\t\t
    \r\n\t);\r\n}\r\n\r\nexport default OpenRangeDatetime;\r\n","import React, { useState } from 'react';\r\nimport { useHawksearch } from 'components/StoreProvider';\r\nimport { useFacet } from 'components/ui/Facets/Facet';\r\n\r\nfunction OpenRangeNumber() {\r\n\tconst { actor: hawkActor } = useHawksearch();\r\n\r\n\tconst {\r\n\t\tstate: { facetValues },\r\n\t\tfacet,\r\n\t\tactor,\r\n\t} = useFacet();\r\n\r\n\t// the open range boundary values are defined by the first facet value. or null if there is no first value\r\n\tconst range = facetValues.length > 0 ? facetValues[0] : null;\r\n\r\n\tconst rangeStart = (range && range.RangeStart) || '';\r\n\tconst rangeEnd = (range && range.RangeEnd) || '';\r\n\r\n\t// if there's no range, initialize to empty strings\r\n\tconst [minValue, setStartValue] = useState(rangeStart || '');\r\n\tconst [maxValue, setEndValue] = useState(rangeEnd || '');\r\n\r\n\tfunction onRangeStartChange(event: React.FormEvent) {\r\n\t\tsetFacetValues(event.currentTarget.value, maxValue);\r\n\t}\r\n\r\n\tfunction onRangeEndChange(event: React.FormEvent) {\r\n\t\tsetFacetValues(minValue, event.currentTarget.value);\r\n\t}\r\n\r\n\tfunction setFacetValues(startVal: string, endVal: string) {\r\n\t\tsetStartValue(startVal);\r\n\t\tsetEndValue(endVal);\r\n\r\n\t\t// this selection is sent to hawk separated by commas, so build the value here\r\n\r\n\t\tif (startVal === '' && endVal === '') {\r\n\t\t\thawkActor.clearFacet(facet);\r\n\t\t} else {\r\n\t\t\tconst selection = `${startVal},${endVal}`;\r\n\t\t\tactor.setFacets([selection]);\r\n\t\t}\r\n\t}\r\n\r\n\tif (rangeStart === null || rangeEnd === null) {\r\n\t\t// this facet is somehow misconfigured so don't render\r\n\t\treturn null;\r\n\t}\r\n\r\n\treturn (\r\n\t\t
    \r\n\t\t\t
    \r\n\t\t\t\t
    \r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t
    \r\n\t\t
    \r\n\t);\r\n}\r\n\r\nexport default OpenRangeNumber;\r\n","import React from 'react';\r\n\r\ninterface SizeItemProps {\r\n\tsize: {\r\n\t\tValue: string;\r\n\t\tLabel: string;\r\n\t\tSelected: boolean;\r\n\t};\r\n\tisNegated: boolean;\r\n\tonSwatchSelected: (a: string, b: boolean) => void;\r\n}\r\n\r\nconst SizeItem = React.memo(({ size, onSwatchSelected, isNegated }: SizeItemProps) => {\r\n\treturn (\r\n\t\t onSwatchSelected(size.Value, isNegated)}\r\n\t\t>\r\n\t\t\t
    {size.Label}
    \r\n\t\t\r\n\t);\r\n});\r\n\r\nexport default SizeItem;\r\n","import React, { useState } from 'react';\r\n\r\nimport { useHawksearch } from 'components/StoreProvider';\r\nimport { FacetSelectionState } from 'store/Store';\r\nimport { useFacet } from 'components/ui/Facets/Facet';\r\nimport { Value } from 'models/Facets';\r\nexport interface NestedLinkItemProps {\r\n\thierarchyValue: Value;\r\n\tisNegated: boolean;\r\n\tisSelected: boolean;\r\n\tonValueSelected(facetValue: Value, isNegated: boolean): void;\r\n}\r\n\r\nfunction NestedLinkItem(item: NestedLinkItemProps) {\r\n\tconst { store } = useHawksearch();\r\n\tconst { facet } = useFacet();\r\n\r\n\tconst [isExpanded, setIsExpanded] = useState(false);\r\n\tconst [isTruncated, setIsTruncated] = useState(facet.shouldTruncate);\r\n\r\n\tconst hierarchyValue = item.hierarchyValue || '';\r\n\tlet hierarchyChildren = item.hierarchyValue.Children || [];\r\n\r\n\tlet remainingValues = 0;\r\n\r\n\tconst shouldTruncateChildren =\r\n\t\tfacet.DisplayType === 'truncating' && hierarchyChildren.length > facet.TruncateThreshold;\r\n\r\n\tif (shouldTruncateChildren && isTruncated) {\r\n\t\tconst valuesBeforeTrunc = hierarchyChildren.length;\r\n\r\n\t\thierarchyChildren = hierarchyChildren.slice(0, facet.TruncateThreshold);\r\n\r\n\t\tremainingValues = valuesBeforeTrunc - facet.TruncateThreshold;\r\n\t}\r\n\r\n\tfunction renderChildTruncation() {\r\n\t\treturn (\r\n\t\t\t<>\r\n\t\t\t\t{shouldTruncateChildren && (\r\n\t\t\t\t\t
  • \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
  • \r\n\t\t\t\t)}\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n\r\n\treturn (\r\n\t\t
  • \r\n\t\t\t
    \r\n\t\t\t\t item.onValueSelected(hierarchyValue, false)}\r\n\t\t\t\t\tclassName=\"hawk-facet-rail__facet-btn\"\r\n\t\t\t\t\taria-pressed={item.isSelected}\r\n\t\t\t\t>\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t{item.hierarchyValue.Label} ({item.hierarchyValue.Count})\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t{hierarchyChildren.length > 0 ? (\r\n\t\t\t\t\t setIsExpanded(!isExpanded)}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t \r\n\t\t\t\t\t\r\n\t\t\t\t) : null}\r\n\t\t\t
    \r\n\t\t\t{isExpanded && hierarchyChildren ? (\r\n\t\t\t\t
    \r\n\t\t\t\t\t
      \r\n\t\t\t\t\t\t{hierarchyChildren.map(value => {\r\n\t\t\t\t\t\t\tconst selectionState = store.isFacetSelected(facet, value).state;\r\n\t\t\t\t\t\t\tconst isNegated = selectionState === FacetSelectionState.Negated;\r\n\t\t\t\t\t\t\tconst isSelected = selectionState !== FacetSelectionState.NotSelected;\r\n\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t{renderChildTruncation()}\r\n\t\t\t\t\t
    \r\n\t\t\t\t
    \r\n\t\t\t) : (\r\n\t\t\t\t<>\r\n\t\t\t)}\r\n\t\t
  • \r\n\t);\r\n}\r\n\r\nexport default NestedLinkItem;\r\n","import {\r\n\tCheckbox as DefaultCheckbox,\r\n\tNestedCheckbox as DefaultNestedCheckbox,\r\n\tSearch as DefaultSearch,\r\n\tLink as DefaultLink,\r\n\tSlider as DefaultSlider,\r\n\tSwatch as DefaultSwatch,\r\n\tOpenRange as DefaultOpenRange,\r\n\tSize as DefaultSize,\r\n\tNestedLink as DefaultNestedLink,\r\n} from 'components/ui/Facets/FacetTypes';\r\nimport { FacetComponent } from 'types/FacetComponent';\r\nimport { FacetType } from 'models/Facets/FacetType';\r\nimport { SuggestionStrategyMatch, SuggestionType } from 'models/Autocomplete/Suggestion';\r\nimport { ProductStrategy, CategoryStrategy, PopularStrategy, ContentStrategy } from 'models/Autocomplete';\r\n\r\n// the default set of facet components that we support\r\nconst defaultFacetComponents: FacetComponent[] = [\r\n\t{ facetType: FacetType.Checkbox, component: DefaultCheckbox },\r\n\t{ facetType: FacetType.NestedCheckbox, component: DefaultNestedCheckbox },\r\n\t{ facetType: FacetType.SearchWithin, component: DefaultSearch },\r\n\t{ facetType: FacetType.Link, component: DefaultLink },\r\n\t{ facetType: FacetType.Slider, component: DefaultSlider },\r\n\t{ facetType: FacetType.Swatch, component: DefaultSwatch },\r\n\t{ facetType: FacetType.OpenRange, component: DefaultOpenRange },\r\n\t{ facetType: FacetType.Size, component: DefaultSize },\r\n\t{ facetType: FacetType.Nestedlink, component: DefaultNestedLink },\r\n];\r\n\r\nconst defaultAutocompleteStrategies: SuggestionStrategyMatch[] = [\r\n\t{ SuggestionType: SuggestionType.Product, SuggestionStrategy: new ProductStrategy() },\r\n\t{ SuggestionType: SuggestionType.Category, SuggestionStrategy: new CategoryStrategy() },\r\n\t{ SuggestionType: SuggestionType.Popular, SuggestionStrategy: new PopularStrategy() },\r\n\t{ SuggestionType: SuggestionType.Content, SuggestionStrategy: new ContentStrategy() },\r\n];\r\n\r\n/**\r\n * Builds a list of all supported facet components by also taking into consideration overridden components.\r\n */\r\nexport function getFacetComponents(overridedComponents: FacetComponent[]) {\r\n\tconst facetComponents: FacetComponent[] = [];\r\n\r\n\t// tslint:disable-next-line:forin\r\n\tfor (const key in FacetType) {\r\n\t\tconst fType = FacetType[key];\r\n\r\n\t\tconst fComponent =\r\n\t\t\t// check to see if the facet is overridden\r\n\t\t\toverridedComponents.find(component => component.facetType === fType) ||\r\n\t\t\t// otherwise, pull from defaults\r\n\t\t\tdefaultFacetComponents.find(component => component.facetType === fType);\r\n\r\n\t\tif (fComponent) {\r\n\t\t\tfacetComponents.push(fComponent);\r\n\t\t}\r\n\t}\r\n\r\n\treturn facetComponents;\r\n}\r\n\r\n/**\r\n * Builds a list of all supported autocomplete suggestion strategiesby also taking into consideration overridden strategies.\r\n */\r\nexport function getAutocompleteStrategies(overridedStrategies: SuggestionStrategyMatch[]): SuggestionStrategyMatch[] {\r\n\tconst suggestionStrategies: SuggestionStrategyMatch[] = [];\r\n\r\n\t// tslint:disable-next-line:forin\r\n\tfor (const key in SuggestionType) {\r\n\t\tconst sType = SuggestionType[key];\r\n\r\n\t\tconst autocompleteStrategy =\r\n\t\t\t// check to see if the facet is overridden\r\n\t\t\toverridedStrategies.find(strategyMatch => strategyMatch.SuggestionType === sType) ||\r\n\t\t\t// otherwise, pull from defaults\r\n\t\t\tdefaultAutocompleteStrategies.find(strategyMatch => strategyMatch.SuggestionType === sType);\r\n\r\n\t\tif (autocompleteStrategy) {\r\n\t\t\tsuggestionStrategies.push(autocompleteStrategy);\r\n\t\t}\r\n\t}\r\n\treturn suggestionStrategies;\r\n}\r\n","import React from 'react';\r\n\r\nimport { useHawksearch } from 'components/StoreProvider';\r\nimport { FacetSelectionState } from 'store/Store';\r\nimport { useFacet } from 'components/ui/Facets/Facet';\r\nimport NestedItem from './NestedItem';\r\nimport { Value } from 'models/Facets/Value';\r\n\r\nfunction Nested() {\r\n\tconst { store } = useHawksearch();\r\n\tconst {\r\n\t\tfacet,\r\n\t\tstate: { facetValues },\r\n\t\tactor,\r\n\t\trenderer,\r\n\t} = useFacet();\r\n\r\n\tfunction onValueSelected(facetValue: Value, isNegated: boolean) {\r\n\t\tisNegated ? actor.negateFacet(facetValue) : actor.selectFacet(facetValue);\r\n\t}\r\n\r\n\treturn (\r\n\t\t
    \r\n\t\t\t
    \r\n\t\t\t\t
      \r\n\t\t\t\t\t{facetValues.map(value => {\r\n\t\t\t\t\t\t// facets can be selected or negated, so explicitly check that the facet is not selected\r\n\t\t\t\t\t\tconst selectionState = store.isFacetSelected(facet, value).state;\r\n\r\n\t\t\t\t\t\tconst isSelected = selectionState !== FacetSelectionState.NotSelected;\r\n\t\t\t\t\t\tconst isNegated = selectionState === FacetSelectionState.Negated;\r\n\r\n\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t})}\r\n\t\t\t\t
    \r\n\t\t\t
    \r\n\r\n\t\t\t{/* render the default truncation control as we don't need to customize this */}\r\n\t\t\t{renderer.renderTruncation()}\r\n\t\t
    \r\n\t);\r\n}\r\n\r\nexport default Nested;\r\n","import React, { useState } from 'react';\r\n\r\nimport { useHawksearch } from 'components/StoreProvider';\r\nimport { useFacet } from 'components/ui/Facets/Facet';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nfunction Search() {\r\n\tconst { store, actor: hawkActor } = useHawksearch();\r\n\tconst { facet, actor } = useFacet();\r\n\r\n\tconst [input, setInput] = useState(undefined);\r\n\r\n\tconst { t, i18n } = useTranslation();\r\n\r\n\tfunction onKeyDown(event: React.KeyboardEvent) {\r\n\t\tif (event.key === 'Enter') {\r\n\t\t\tsetInput(undefined); // clear the user's entered value as we want to be driven by the store again\r\n\r\n\t\t\tactor.selectFacet(event.currentTarget.value);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction clearFacet() {\r\n\t\tsetInput(undefined); // clear the user's entered value as we want to be driven by the store again\r\n\r\n\t\thawkActor.clearFacet(facet);\r\n\t}\r\n\r\n\tfunction getInputValue() {\r\n\t\tif (input !== undefined) {\r\n\t\t\t// if the user type an input, that's the value for the input\r\n\t\t\treturn input;\r\n\t\t}\r\n\r\n\t\t// otherwise, use the value from the store\r\n\t\treturn store.pendingSearch.SearchWithin || '';\r\n\t}\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t
    \r\n\t\t\t\t
    \r\n\t\t\t\t\t setInput(e.currentTarget.value)}\r\n\t\t\t\t\t\tonKeyDown={onKeyDown}\r\n\t\t\t\t\t\tclassName=\"filter-search-input\"\r\n\t\t\t\t\t\ttype=\"text\"\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t
    \r\n\t\t\t{store.pendingSearch.SearchWithin && (\r\n\t\t\t\t
    \r\n\t\t\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t)}\r\n\t\t\r\n\t);\r\n}\r\n\r\nexport default Search;\r\n","import React from 'react';\r\n\r\nimport { useHawksearch } from 'components/StoreProvider';\r\nimport { useFacet } from 'components/ui/Facets/Facet';\r\nimport { FacetSelectionState } from 'store/Store';\r\n\r\nfunction Link() {\r\n\tconst { store } = useHawksearch();\r\n\tconst {\r\n\t\tfacet,\r\n\t\tstate: { facetValues },\r\n\t\tactor,\r\n\t\trenderer,\r\n\t} = useFacet();\r\n\r\n\treturn (\r\n\t\t
    \r\n\t\t\t
    \r\n\t\t\t\t
      \r\n\t\t\t\t\t{facetValues.map(value => {\r\n\t\t\t\t\t\t// facets can be selected or negated, so explicitly check that the facet is not selected\r\n\t\t\t\t\t\tconst selectionState = store.isFacetSelected(facet, value).state;\r\n\r\n\t\t\t\t\t\tconst isSelected = selectionState !== FacetSelectionState.NotSelected;\r\n\r\n\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t
    • \r\n\t\t\t\t\t\t\t\t actor.selectFacet(value)}\r\n\t\t\t\t\t\t\t\t\tclassName=\"hawk-facet-rail__facet-btn\"\r\n\t\t\t\t\t\t\t\t\taria-pressed={isSelected}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t{value.Label} ({value.Count})\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t})}\r\n\t\t\t\t\r\n\t\t\t
    \r\n\r\n\t\t\t{/* render the default truncation control as we don't need to customize this */}\r\n\t\t\t{renderer.renderTruncation()}\r\n\t\t\r\n\t);\r\n}\r\n\r\nexport default Link;\r\n","import React from 'react';\r\n\r\nimport { useFacet } from 'components/ui/Facets/Facet';\r\nimport SliderDate from './SliderDate';\r\nimport SliderNumeric from './SliderNumeric';\r\n\r\nfunction Slider() {\r\n\tconst { facet } = useFacet();\r\n\tif (facet.DataType && facet.DataType === 'datetime') {\r\n\t\treturn ;\r\n\t}\r\n\treturn ;\r\n}\r\n\r\nexport default Slider;\r\n","import React, { useState } from 'react';\r\n\r\nimport { useHawksearch } from 'components/StoreProvider';\r\nimport { useFacet } from 'components/ui/Facets/Facet';\r\nimport { FacetSelectionState } from 'store/Store';\r\nimport SwatchItem from './SwatchItem';\r\n\r\nfunction Swatch() {\r\n\tconst { store } = useHawksearch();\r\n\tconst {\r\n\t\tfacet,\r\n\t\tactor,\r\n\t\tstate: { facetValues },\r\n\t\trenderer,\r\n\t} = useFacet();\r\n\r\n\tfunction onSwatchSelected(facetValue: string, isNegated: boolean) {\r\n\t\tisNegated ? actor.negateFacet(facetValue) : actor.selectFacet(facetValue);\r\n\t}\r\n\r\n\treturn (\r\n\t\t
    \r\n\t\t\t
    \r\n\t\t\t\t
      \r\n\t\t\t\t\t{facet.SwatchData &&\r\n\t\t\t\t\t\tfacetValues.map(value => {\r\n\t\t\t\t\t\t\tconst facetValue = value.Value || '';\r\n\t\t\t\t\t\t\t// find swatch that is corresponding with value\r\n\t\t\t\t\t\t\tconst facetSwatch =\r\n\t\t\t\t\t\t\t\tfacet.SwatchData &&\r\n\t\t\t\t\t\t\t\tfacet.SwatchData.find(s => s.Value.toLowerCase() === facetValue.toLowerCase());\r\n\t\t\t\t\t\t\tif (!facetSwatch) {\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tconst selectionState = store.isFacetSelected(facet, value).state;\r\n\t\t\t\t\t\t\tconst isNegated = selectionState === FacetSelectionState.Negated;\r\n\t\t\t\t\t\t\tconst isSelected = selectionState !== FacetSelectionState.NotSelected;\r\n\r\n\t\t\t\t\t\t\tconst isColor = !!facetSwatch.Color;\r\n\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t})}\r\n\t\t\t\t
    \r\n\t\t\t
    \r\n\r\n\t\t\t{/* render the default truncation control as we don't need to customize this */}\r\n\t\t\t{renderer.renderTruncation()}\r\n\t\t
    \r\n\t);\r\n}\r\n\r\nexport default Swatch;\r\n","import React, { useState } from 'react';\r\nimport { useHawksearch } from 'components/StoreProvider';\r\nimport { useFacet } from 'components/ui/Facets/Facet';\r\nimport OpenRangeDatetime from './OpenRangeDatetime';\r\nimport OpenRangeNumber from './OpenRangeNumber';\r\n\r\nfunction OpenRange() {\r\n\tconst { facet } = useFacet();\r\n\r\n\tif (facet.DataType && facet.DataType === 'datetime') {\r\n\t\treturn ;\r\n\t}\r\n\r\n\treturn ;\r\n}\r\n\r\nexport default OpenRange;\r\n","import React, { useState } from 'react';\r\n\r\nimport { useHawksearch } from 'components/StoreProvider';\r\nimport { useFacet } from 'components/ui/Facets/Facet';\r\nimport { FacetSelectionState } from 'store/Store';\r\nimport SizeItem from './SizeItem';\r\n\r\nfunction Size() {\r\n\tconst { store } = useHawksearch();\r\n\tconst {\r\n\t\tfacet,\r\n\t\tactor,\r\n\t\tstate: { facetValues },\r\n\t} = useFacet();\r\n\r\n\tfunction onSwatchSelected(facetValue: string, isNegated: boolean) {\r\n\t\tisNegated ? actor.negateFacet(facetValue) : actor.selectFacet(facetValue);\r\n\t}\r\n\treturn (\r\n\t\t
    \r\n\t\t\t
    \r\n\t\t\t\t
      \r\n\t\t\t\t\t{facet.Values &&\r\n\t\t\t\t\t\tfacetValues.map(value => {\r\n\t\t\t\t\t\t\tconst selectionState = store.isFacetSelected(facet, value).state;\r\n\t\t\t\t\t\t\tconst isNegated = selectionState === FacetSelectionState.Negated;\r\n\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t})}\r\n\t\t\t\t
    \r\n\t\t\t
    \r\n\t\t
    \r\n\t);\r\n}\r\n\r\nexport default Size;\r\n","import React from 'react';\r\n\r\nimport { useHawksearch } from 'components/StoreProvider';\r\nimport { FacetSelectionState } from 'store/Store';\r\nimport { useFacet } from 'components/ui/Facets/Facet';\r\nimport NestedLinkItem from './NestedLinkItem';\r\nimport { Value } from 'models/Facets/Value';\r\n\r\nfunction NestedLink() {\r\n\tconst { store } = useHawksearch();\r\n\tconst {\r\n\t\tfacet,\r\n\t\tstate: { facetValues },\r\n\t\tactor,\r\n\t\trenderer,\r\n\t} = useFacet();\r\n\r\n\tfunction onValueSelected(facetValue: Value, isNegated: boolean) {\r\n\t\tisNegated ? actor.negateFacet(facetValue) : actor.selectFacet(facetValue);\r\n\t}\r\n\r\n\treturn (\r\n\t\t
    \r\n\t\t\t
    \r\n\t\t\t\t
      \r\n\t\t\t\t\t{facetValues.map(value => {\r\n\t\t\t\t\t\t// facets can be selected or negated, so explicitly check that the facet is not selected\r\n\t\t\t\t\t\tconst selectionState = store.isFacetSelected(facet, value).state;\r\n\r\n\t\t\t\t\t\tconst isSelected = selectionState !== FacetSelectionState.NotSelected;\r\n\t\t\t\t\t\tconst isNegated = selectionState === FacetSelectionState.Negated;\r\n\r\n\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t})}\r\n\t\t\t\t
    \r\n\t\t\t
    \r\n\r\n\t\t\t{/* render the default truncation control as we don't need to customize this */}\r\n\t\t\t{renderer.renderTruncation()}\r\n\t\t
    \r\n\t);\r\n}\r\n\r\nexport default NestedLink;\r\n","import React, { useState } from 'react';\r\n\r\nfunction PlaceholderFacetValue() {\r\n\tconst [width] = useState(Math.round(Math.random() * (200 - 100) + 100));\r\n\r\n\treturn (\r\n\t\t
  • \r\n\t\t\t\r\n\r\n\t\t\t\r\n\t\t
  • \r\n\t);\r\n}\r\n\r\nexport default PlaceholderFacetValue;\r\n","import React, { useState } from 'react';\r\n\r\nimport PlaceholderFacetValue from './PlaceholderFacetValue';\r\n\r\nfunction PlaceholderFacet() {\r\n\tconst [width] = useState(Math.round(Math.random() * (250 - 125) + 125));\r\n\tconst [numValues] = useState(Math.round(Math.random() * (8 - 1) + 1));\r\n\r\n\treturn (\r\n\t\t
    \r\n\t\t\t
    \r\n\t\t\t\t
    \r\n\t\t\t
    \r\n\t\t\t
    \r\n\t\t\t\t
    \r\n\t\t\t\t\t
    \r\n\t\t\t\t\t\t
      \r\n\t\t\t\t\t\t\t{[...Array(numValues)].map((_, i) => (\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t
    \r\n\t\t\t\t\t
    \r\n\t\t\t\t
    \r\n\t\t\t
    \r\n\t\t
    \r\n\t);\r\n}\r\n\r\nexport default PlaceholderFacet;\r\n","import React, { useState } from 'react';\r\n\r\nimport { useHawksearch } from 'components/StoreProvider';\r\nimport { useHawkConfig } from 'components/ConfigProvider';\r\nimport Facet from './Facet';\r\nimport PlaceholderFacet from './PlaceholderFacet';\r\nimport { getFacetComponents } from 'components/ui/Facets/Overrides';\r\nimport Selections from './Selections';\r\n\r\nfunction FacetList() {\r\n\tconst {\r\n\t\tstore: { searchResults },\r\n\t} = useHawksearch();\r\n\r\n\tconst { config } = useHawkConfig();\r\n\r\n\t// the number of random placeholders to render while we wait for results\r\n\tconst [numPlaceholders] = useState(Math.round(Math.random() * (5 - 3) + 3));\r\n\r\n\tconst components = getFacetComponents(config.facetOverrides || []);\r\n\r\n\treturn (\r\n\t\t
    \r\n\t\t\t
    \r\n\t\t\t\t{searchResults\r\n\t\t\t\t\t? // if there are search results, render the facets\r\n\t\t\t\t\t searchResults.Facets.map(facet => {\r\n\t\t\t\t\t\t\tif (!facet.IsVisible) {\r\n\t\t\t\t\t\t\t\treturn null;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tif (facet.FieldType === 'tab') {\r\n\t\t\t\t\t\t\t\treturn null;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tconst registeredComponent = components.find(\r\n\t\t\t\t\t\t\t\tcomponent => component.facetType === facet.FacetType\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\tconst Component = !registeredComponent ? null : registeredComponent.component;\r\n\r\n\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t{Component ? (\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t\t\t\t{facet.FieldType} {facet.FacetType} is not implemented!\r\n\t\t\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t })\r\n\t\t\t\t\t: // otherwise render a couple placeholders\r\n\t\t\t\t\t [...Array(numPlaceholders)].map((_, i) => )}\r\n\t\t\t
    \r\n\t\t
    \r\n\t);\r\n}\r\n\r\nexport default FacetList;\r\n","import * as React from 'react';\r\n\r\ninterface XCircleSVGProps {\r\n\tclass?: string;\r\n}\r\n\r\n/**\r\n * X Circle SVG\r\n *\r\n * @returns\r\n */\r\nfunction XCircleSVG(props: XCircleSVGProps) {\r\n\treturn (\r\n\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t);\r\n}\r\n\r\nexport default XCircleSVG;\r\n","import React from 'react';\r\n\r\nimport { useHawksearch } from 'components/StoreProvider';\r\nimport XCircleSVG from 'components/svg/XCircleSVG';\r\nimport { ClientSelectionValue, ClientSelection } from 'store/ClientSelections';\r\nimport { Facet, Range } from 'models/Facets';\r\n\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nfunction Selections() {\r\n\tconst {\r\n\t\tstore: { facetSelections, pendingSearch },\r\n\t\tactor,\r\n\t} = useHawksearch();\r\n\r\n\tconst { t, i18n } = useTranslation();\r\n\r\n\t// Added filter to hide selection for Tabs\r\n\tconst keys = Object.keys(facetSelections).filter(key => key !== 'it');\r\n\tif (keys.length === 0) {\r\n\t\t// no selections, so render nothing\r\n\t\treturn null;\r\n\t}\r\n\r\n\tfunction clearSelection(facet: string, value?: ClientSelectionValue) {\r\n\t\tif (value) {\r\n\t\t\tactor.clearFacetValue(facet, value.value);\r\n\t\t} else {\r\n\t\t\tactor.clearFacet(facet);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction clearAll() {\r\n\t\tactor.clearAllFacets();\r\n\t}\r\n\r\n\tfunction renderRange(value: ClientSelectionValue, facet: Facet) {\r\n\t\tconst displayValue = value.value;\r\n\r\n\t\tif (!displayValue || displayValue.indexOf(',') === -1) {\r\n\t\t\t// range facet selection values should include a comma, so if they don't then this likely isn't a valid\r\n\t\t\t// range value that we want to render\r\n\t\t\tconst selectedRange = facet.Ranges.find((range: Range) => range.Value === value.value);\r\n\t\t\treturn selectedRange ? selectedRange.Label : displayValue;\r\n\t\t}\r\n\r\n\t\tconst splittedValues = displayValue.split(',');\r\n\t\tif (facet.IsCurrency && splittedValues.length > 1) {\r\n\t\t\treturn `${facet.CurrencySymbol} ${splittedValues[0]} - ${facet.CurrencySymbol} ${splittedValues[1]}`;\r\n\t\t}\r\n\r\n\t\t// return a prettier display value for ranges\r\n\t\treturn displayValue.replace(',', ' - ');\r\n\t}\r\n\t// return (\r\n\t// \t
    \r\n\t// \t\t
    \r\n\t// \t\t\t
    \r\n\t// \t\t\t\tYou've selected\r\n\t// \t\t\t\t\r\n\t// \t\t\t
    \r\n\t// \t\t\t
      \r\n\t// \t\t\t\t{keys.map(key => {\r\n\t// \t\t\t\t\tconst selection = facetSelections[key];\r\n\r\n\t// \t\t\t\t\treturn selection.items.map(item => {\r\n\t// \t\t\t\t\t\tconst negation = item.value.startsWith('-');\r\n\r\n\t// \t\t\t\t\t\treturn (\r\n\t// \t\t\t\t\t\t\t
    • \r\n\t// \t\t\t\t\t\t\t\t\r\n\t// \t\t\t\t\t\t\t\t\t{selection.facet.FieldType === 'range'\r\n\t// \t\t\t\t\t\t\t\t\t\t? // render ranges in a specific way\r\n\t// \t\t\t\t\t\t\t\t\t\t renderRange(item, selection.facet)\r\n\t// \t\t\t\t\t\t\t\t\t\t: // other facets can have their labels rendered directly\r\n\t// \t\t\t\t\t\t\t\t\t\t item.label}\r\n\t// \t\t\t\t\t\t\t\t\r\n\t// \t\t\t\t\t\t\t\t clearSelection(key, item)}\r\n\t// \t\t\t\t\t\t\t\t>\r\n\t// \t\t\t\t\t\t\t\t\tx\r\n\t// \t\t\t\t\t\t\t\t\r\n\t// \t\t\t\t\t\t\t
    • \r\n\t// \t\t\t\t\t\t);\r\n\t// \t\t\t\t\t});\r\n\t// \t\t\t\t})}\r\n\t// \t\t\t
    \r\n\t// \t\t
    \r\n\t// \t
    \r\n\t// );\r\n\r\n\treturn (\r\n\t\t
    \r\n\t\t\t

    {t(\"You've Selected\")}

    \r\n\t\t\t
      \r\n\t\t\t\t{keys.map(key => {\r\n\t\t\t\t\tconst selection = facetSelections[key];\r\n\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t
    • \r\n\t\t\t\t\t\t\t
      \r\n\t\t\t\t\t\t\t\t{selection.label}:\r\n\r\n\t\t\t\t\t\t\t\t
        \r\n\t\t\t\t\t\t\t\t\t{selection.items.map(item => {\r\n\t\t\t\t\t\t\t\t\t\tconst negation = item.value.startsWith('-');\r\n\r\n\t\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t\t
      • \r\n\t\t\t\t\t\t\t\t\t\t\t\t clearSelection(key, item)}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"hawk-selections__item-remove\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tUnselect facet {selection.label} {item.label}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{selection.facet.FieldType === 'range'\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? // render ranges in a specific way\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t renderRange(item, selection.facet)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: // other facets can have their labels rendered directly\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t item.label}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t
      • \r\n\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t\t\t
      \r\n\t\t\t\t\t\t\t
      \r\n\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t
    • \r\n\t\t\t\t\t);\r\n\t\t\t\t})}\r\n\r\n\t\t\t\t
    • \r\n\t\t\t\t\t\r\n\t\t\t\t
    • \r\n\t\t\t
    \r\n\t\t
    \r\n\t);\r\n}\r\n\r\nexport default Selections;\r\n","import React from 'react';\r\n\r\nimport { useHawksearch } from 'components/StoreProvider';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nfunction SearchResultsLabel() {\r\n\tconst {\r\n\t\tstore: { pendingSearch },\r\n\t} = useHawksearch();\r\n\r\n\tconst { t, i18n } = useTranslation();\r\n\r\n\tif (!pendingSearch.Keyword) {\r\n\t\t// no selections, so render nothing\r\n\t\treturn null;\r\n\t}\r\n\r\n\treturn (\r\n\t\t
    \r\n\t\t\t

    \r\n\t\t\t\t{pendingSearch.Keyword\r\n\t\t\t\t\t? t('Results for') + ' ' + decodeURIComponent(pendingSearch.Keyword)\r\n\t\t\t\t\t: t('Results')}\r\n\t\t\t

    \r\n\t\t
    \r\n\t);\r\n}\r\n\r\nexport default SearchResultsLabel;\r\n","import React from 'react';\r\n\r\nimport { useHawksearch } from 'components/StoreProvider';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nfunction Sorting() {\r\n\tconst {\r\n\t\tstore: { searchResults, pendingSearch },\r\n\t\tactor,\r\n\t} = useHawksearch();\r\n\r\n\tconst { t, i18n } = useTranslation();\r\n\r\n\tfunction onChange(event: React.ChangeEvent) {\r\n\t\tactor.setSearch({\r\n\t\t\tSortBy: event.currentTarget.value,\r\n\t\t});\r\n\t}\r\n\r\n\treturn (\r\n\t\t
    \r\n\t\t\t\r\n\t\t\t\t{t('Sort By')}\r\n\t\t\t\r\n\r\n\t\t\t\r\n\t\t
    \r\n\t\t//
    \r\n\t\t// \t{t('Sort By')}\r\n\t\t// \t
    \r\n\t\t// \t\t\r\n\t\t// \t
    \r\n\t\t//
    \r\n\t);\r\n}\r\n\r\nexport default Sorting;\r\n","import React, { useState } from 'react';\r\n\r\nimport { LeftChevronSVG, RightChevronSVG } from 'components/svg';\r\n\r\ninterface PagerProps {\r\n\tpage: number;\r\n\ttotalPages: number;\r\n\r\n\tonPageChange: (page: number) => void;\r\n}\r\n\r\nfunction Pager({ page, totalPages, onPageChange }: PagerProps) {\r\n\tconst [inputValue, setInputValue] = useState(undefined);\r\n\tconst [hasError, setHasError] = useState(false);\r\n\r\n\tfunction goToPreviousPage(e) {\r\n\t\tgoToPage(page - 1);\r\n\t\te.preventDefault();\r\n\t}\r\n\r\n\tfunction goToNextPage(e) {\r\n\t\tgoToPage(page + 1);\r\n\t\te.preventDefault();\r\n\t}\r\n\r\n\tfunction goToPage(pageNo: number) {\r\n\t\tif (isNaN(pageNo)) {\r\n\t\t\t// not a valid number\r\n\t\t\tdoInputError();\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (pageNo < 1) {\r\n\t\t\t// can't go beyond the first page\r\n\t\t\tdoInputError();\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (pageNo > totalPages) {\r\n\t\t\t// can't go beyond the last page\r\n\t\t\tdoInputError();\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// once we've determined that we *do* want to do this page change, clear the user's input\r\n\t\t// because the input should be driven by props again\r\n\t\tsetInputValue(undefined);\r\n\r\n\t\t// inform the consumer that we've changed pages\r\n\t\tonPageChange(pageNo);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns the input value for the pager input control. If the user has typed in a value into the input then\r\n\t * that value will be returned; otherwise, the page value passed in via props will be returned.\r\n\t */\r\n\tfunction getInputValue() {\r\n\t\tif (inputValue !== undefined) {\r\n\t\t\t// if the user typed an input, that's the page value for the control\r\n\t\t\treturn inputValue || '';\r\n\t\t}\r\n\r\n\t\t// otherwise, fall back to what's passed in through props\r\n\t\treturn page;\r\n\t}\r\n\r\n\tfunction onKeyDown(event: React.KeyboardEvent) {\r\n\t\tif (event.key === 'Enter') {\r\n\t\t\tconst wantedPageNo = parseInt(event.currentTarget.value, 10);\r\n\t\t\tgoToPage(wantedPageNo);\r\n\t\t\tevent.preventDefault();\r\n\t\t}\r\n\t}\r\n\r\n\tfunction doInputError() {\r\n\t\tsetHasError(true);\r\n\r\n\t\t// in 500ms, clear the error animation\r\n\t\tsetTimeout(() => {\r\n\t\t\tsetHasError(false);\r\n\t\t}, 500);\r\n\t}\r\n\r\n\tfunction onChange(event: React.ChangeEvent) {\r\n\t\tsetInputValue(event.currentTarget.value);\r\n\t}\r\n\r\n\treturn (\r\n\t\t
    \r\n\t\t\t\r\n\t\t\t\r\n\t\t\t  of {totalPages}\r\n\t\t\t\r\n\t\t
    \r\n\t);\r\n}\r\n\r\nexport default Pager;\r\n","import React from 'react';\r\n\r\nimport { useHawksearch } from 'components/StoreProvider';\r\n\r\nfunction ItemsPerPage() {\r\n\tconst {\r\n\t\tstore: { searchResults, pendingSearch },\r\n\t\tactor,\r\n\t} = useHawksearch();\r\n\r\n\tfunction onChange(event: React.ChangeEvent) {\r\n\t\tactor.setSearch({\r\n\t\t\tMaxPerPage: Number(event.currentTarget.value),\r\n\t\t\tPageNo: 1, // if we change our max items per page, reset to page 1\r\n\t\t});\r\n\t}\r\n\r\n\treturn (\r\n\t\t
    \r\n\t\t\t
    \r\n\t\t\t\t\r\n\t\t\t
    \r\n\t\t
    \r\n\t);\r\n}\r\n\r\nexport default ItemsPerPage;\r\n","import React from 'react';\r\n\r\nimport { useHawksearch } from 'components/StoreProvider';\r\nimport ReactDOM from 'react-dom';\r\nimport { isLet } from '@babel/types';\r\n\r\nfunction ViewSelector() {\r\n\tconst {\r\n\t\tstore: { searchResults, pendingSearch },\r\n\t\tactor,\r\n\t} = useHawksearch();\r\n\tconst tabFacet = searchResults && searchResults.Facets.find(facet => facet.FieldType === 'tab');\r\n\tconst selectedTabFacetValue = tabFacet && tabFacet.Values.find(value => value.Selected === true);\r\n\tconst component = document.getElementById('react-app');\r\n\tconst dataDisplayMode = component && component.getAttribute('data-display-mode');\r\n\tconst element = document.getElementsByClassName('hawk-results__listing');\r\n\treturn (\r\n\t\t\r\n\t\t\t {\r\n\t\t\t\t\tif (element) {\r\n\t\t\t\t\t\telement[0].classList.remove('list');\r\n\t\t\t\t\t\telement[0].classList.add('grid');\r\n\t\t\t\t\t\tif (component) {\r\n\t\t\t\t\t\t\tcomponent.setAttribute('data-display-mode', 'grid');\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}}\r\n\t\t\t\tclassName=\"listing-display-option link-icon active\"\r\n\t\t\t\tddm-selection=\"grid\"\r\n\t\t\t>\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t \r\n\t\t\t {\r\n\t\t\t\t\tif (element) {\r\n\t\t\t\t\t\telement[0].classList.remove('grid');\r\n\t\t\t\t\t\telement[0].classList.add('list');\r\n\t\t\t\t\t\tif (component) {\r\n\t\t\t\t\t\t\tcomponent.setAttribute('data-display-mode', 'list');\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}}\r\n\t\t\t\tclassName=\"listing-display-option link-icon\"\r\n\t\t\t\tddm-selection=\"list\"\r\n\t\t\t>\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t
    \r\n\t);\r\n}\r\n\r\nexport default ViewSelector;\r\n","import React from 'react';\r\n\r\nimport { useHawksearch } from 'components/StoreProvider';\r\nimport Pager from './Pager';\r\nimport ItemsPerPage from './ItemsPerPage';\r\nimport ViewSelector from './ViewSelector';\r\n\r\nfunction Pagination() {\r\n\tconst {\r\n\t\tstore: { searchResults, pendingSearch },\r\n\t\tactor,\r\n\t} = useHawksearch();\r\n\r\n\tfunction onPageChange(pageNo: number) {\r\n\t\t// when the pager's page changes, trigger a new search\r\n\t\tactor.setSearch({\r\n\t\t\tPageNo: pageNo,\r\n\t\t});\r\n\t}\r\n\r\n\treturn (\r\n\t\t
    \r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t
    \r\n\t);\r\n}\r\n\r\nexport default Pagination;\r\n","import React from 'react';\r\n\r\nimport { Sorting, Pagination } from './Tools';\r\n\r\nfunction ToolRow() {\r\n\treturn (\r\n\t\t
    \r\n\t\t\t
    \r\n\t\t\t\t\r\n\t\t\t
    \r\n\r\n\t\t\t
    \r\n\t\t\t\t\r\n\t\t\t
    \r\n\t\t
    \r\n\t);\r\n}\r\n\r\nexport default ToolRow;\r\n","import * as React from 'react';\r\n\r\ninterface PlaceHolderSVGProps {\r\n\tclass: string;\r\n}\r\n\r\n/**\r\n * Plus SVG\r\n *\r\n * @returns\r\n */\r\n\r\nfunction PlaceHolderSVG(props: PlaceHolderSVGProps) {\r\n\treturn (\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t);\r\n}\r\n\r\nexport default PlaceHolderSVG;\r\n","import React from 'react';\r\nimport PlaceHolderSVG from 'components/svg/PlaceholderSVG';\r\n\r\nexport interface PlaceholderImageProps {\r\n\t/** Whether or not to display a spinner in the center of the placeholder. */\r\n\tshowSpinner: boolean;\r\n}\r\n\r\nfunction PlaceholderImage({ showSpinner }: PlaceholderImageProps) {\r\n\treturn (\r\n\t\t
    \r\n\t\t\t\r\n\t\t
    \r\n\t);\r\n}\r\n\r\nexport default PlaceholderImage;\r\n","import React from 'react';\r\n\r\nimport PlaceholderImage from './PlaceholderImage';\r\n\r\nfunction PlaceholderItem() {\r\n\treturn (\r\n\t\t
    \r\n\t\t\t
    \r\n\t\t\t\t\r\n\t\t\t
    \r\n\r\n\t\t\t
    \r\n\t\t\t\t
    \r\n\t\t\t
    \r\n\t\t
    \r\n\t);\r\n}\r\n\r\nexport default PlaceholderItem;\r\n","import React from 'react';\r\n\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nexport interface SpinnerProps {\r\n\tisVisible: boolean;\r\n}\r\n\r\nfunction Spinner({ isVisible }: SpinnerProps) {\r\n\tconst { t, i18n } = useTranslation();\r\n\r\n\tif (!isVisible) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\treturn (\r\n\t\t
    \r\n\t\t\t
    {t('Loading')}...
    \r\n\t\t
    \r\n\t);\r\n}\r\n\r\nexport default Spinner;\r\n","import React, { useState } from 'react';\r\n\r\nimport { Result } from 'models/Search';\r\nimport PlaceholderImage from './PlaceholderImage';\r\n\r\nexport interface ResultImageProps {\r\n\titem: Result;\r\n\twebsiteUrl?: string;\r\n\titemTitleFieldName?: string;\r\n\timageUrlFieldName?: string;\r\n\timageTitle?: string;\r\n\timageUrl?: string;\r\n\tonLoadCallBack?: () => void;\r\n}\r\n\r\nfunction ResultImage({ imageTitle, imageUrl, onLoadCallBack }: ResultImageProps) {\r\n\tconst [imageLoaded, setImageLoaded] = useState(false);\r\n\r\n\treturn (\r\n\t\t
    \r\n\t\t\t
    \r\n\t\t\t\t {\r\n\t\t\t\t\t\tif (onLoadCallBack) {\r\n\t\t\t\t\t\t\tonLoadCallBack();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tsetImageLoaded(true);\r\n\t\t\t\t\t}}\r\n\t\t\t\t\tsrc={imageUrl}\r\n\t\t\t\t\talt={`Image for ${imageTitle}`}\r\n\t\t\t\t\tclassName=\"product-img img-responsive b-lazy b-error\"\r\n\t\t\t\t/>\r\n\t\t\t
    \r\n\r\n\t\t\t{!imageLoaded ? (\r\n\t\t\t\t// if the main image hasn't loaded yet, show a placeholder\r\n\t\t\t\t\r\n\t\t\t) : null}\r\n\t\t
    \r\n\t);\r\n}\r\n\r\nexport default ResultImage;\r\n","import React from 'react';\r\n\r\nimport { Result } from 'models/Search';\r\nimport ResultImage from './ResultImage';\r\n\r\nexport interface ResultItemProps {\r\n\titem: Result;\r\n}\r\n\r\nfunction ResultItem({ item }: ResultItemProps) {\r\n\tconst itemName = item.getDocumentValue('itemname');\r\n\r\n\treturn (\r\n\t\t
    \r\n\t\t\t\r\n\r\n\t\t\t
    \r\n\t\t\t\t{itemName}\r\n\t\t\t
    \r\n\t\t
    \r\n\t);\r\n}\r\n\r\nexport default ResultItem;\r\n","import React from 'react';\r\nimport PlaceholderItem from './PlaceholderItem';\r\nimport Spinner from 'components/ui/Spinner';\r\nimport { default as DefaultResultItem, ResultItemProps } from './ResultItem';\r\nimport { useHawksearch } from 'components/StoreProvider';\r\n\r\nexport interface ResultsListingProps {\r\n\tResultItem: React.ComponentType;\r\n}\r\n\r\nfunction ResultListing({ ResultItem = DefaultResultItem }: ResultsListingProps) {\r\n\tconst {\r\n\t\tstore: { isLoading, searchResults },\r\n\t} = useHawksearch();\r\n\r\n\tconst results = searchResults ? searchResults.Results : [];\r\n\tconst component = document.getElementById('react-app');\r\n\t//
      \r\n\treturn (\r\n\t\t\r\n\t\t\t\r\n\r\n\t\t\t{results.length\r\n\t\t\t\t? // if we have results, display them\r\n\t\t\t\t results.map(result => )\r\n\t\t\t\t: // otherwise display placeholder items as we're loading\r\n\t\t\t\t [...Array(12)].map((_, i) => )}\r\n\t\t
    \r\n\t);\r\n}\r\n\r\nexport default ResultListing;\r\n","function isAbsolute(pathname) {\n return pathname.charAt(0) === '/';\n}\n\n// About 1.5x faster than the two-arg version of Array#splice()\nfunction spliceOne(list, index) {\n for (var i = index, k = i + 1, n = list.length; k < n; i += 1, k += 1) {\n list[i] = list[k];\n }\n\n list.pop();\n}\n\n// This implementation is based heavily on node's url.parse\nfunction resolvePathname(to, from) {\n if (from === undefined) from = '';\n\n var toParts = (to && to.split('/')) || [];\n var fromParts = (from && from.split('/')) || [];\n\n var isToAbs = to && isAbsolute(to);\n var isFromAbs = from && isAbsolute(from);\n var mustEndAbs = isToAbs || isFromAbs;\n\n if (to && isAbsolute(to)) {\n // to is absolute\n fromParts = toParts;\n } else if (toParts.length) {\n // to is relative, drop the filename\n fromParts.pop();\n fromParts = fromParts.concat(toParts);\n }\n\n if (!fromParts.length) return '/';\n\n var hasTrailingSlash;\n if (fromParts.length) {\n var last = fromParts[fromParts.length - 1];\n hasTrailingSlash = last === '.' || last === '..' || last === '';\n } else {\n hasTrailingSlash = false;\n }\n\n var up = 0;\n for (var i = fromParts.length; i >= 0; i--) {\n var part = fromParts[i];\n\n if (part === '.') {\n spliceOne(fromParts, i);\n } else if (part === '..') {\n spliceOne(fromParts, i);\n up++;\n } else if (up) {\n spliceOne(fromParts, i);\n up--;\n }\n }\n\n if (!mustEndAbs) for (; up--; up) fromParts.unshift('..');\n\n if (\n mustEndAbs &&\n fromParts[0] !== '' &&\n (!fromParts[0] || !isAbsolute(fromParts[0]))\n )\n fromParts.unshift('');\n\n var result = fromParts.join('/');\n\n if (hasTrailingSlash && result.substr(-1) !== '/') result += '/';\n\n return result;\n}\n\nexport default resolvePathname;\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport resolvePathname from 'resolve-pathname';\nimport valueEqual from 'value-equal';\nimport warning from 'tiny-warning';\nimport invariant from 'tiny-invariant';\n\nfunction addLeadingSlash(path) {\n return path.charAt(0) === '/' ? path : '/' + path;\n}\nfunction stripLeadingSlash(path) {\n return path.charAt(0) === '/' ? path.substr(1) : path;\n}\nfunction hasBasename(path, prefix) {\n return path.toLowerCase().indexOf(prefix.toLowerCase()) === 0 && '/?#'.indexOf(path.charAt(prefix.length)) !== -1;\n}\nfunction stripBasename(path, prefix) {\n return hasBasename(path, prefix) ? path.substr(prefix.length) : path;\n}\nfunction stripTrailingSlash(path) {\n return path.charAt(path.length - 1) === '/' ? path.slice(0, -1) : path;\n}\nfunction parsePath(path) {\n var pathname = path || '/';\n var search = '';\n var hash = '';\n var hashIndex = pathname.indexOf('#');\n\n if (hashIndex !== -1) {\n hash = pathname.substr(hashIndex);\n pathname = pathname.substr(0, hashIndex);\n }\n\n var searchIndex = pathname.indexOf('?');\n\n if (searchIndex !== -1) {\n search = pathname.substr(searchIndex);\n pathname = pathname.substr(0, searchIndex);\n }\n\n return {\n pathname: pathname,\n search: search === '?' ? '' : search,\n hash: hash === '#' ? '' : hash\n };\n}\nfunction createPath(location) {\n var pathname = location.pathname,\n search = location.search,\n hash = location.hash;\n var path = pathname || '/';\n if (search && search !== '?') path += search.charAt(0) === '?' ? search : \"?\" + search;\n if (hash && hash !== '#') path += hash.charAt(0) === '#' ? hash : \"#\" + hash;\n return path;\n}\n\nfunction createLocation(path, state, key, currentLocation) {\n var location;\n\n if (typeof path === 'string') {\n // Two-arg form: push(path, state)\n location = parsePath(path);\n location.state = state;\n } else {\n // One-arg form: push(location)\n location = _extends({}, path);\n if (location.pathname === undefined) location.pathname = '';\n\n if (location.search) {\n if (location.search.charAt(0) !== '?') location.search = '?' + location.search;\n } else {\n location.search = '';\n }\n\n if (location.hash) {\n if (location.hash.charAt(0) !== '#') location.hash = '#' + location.hash;\n } else {\n location.hash = '';\n }\n\n if (state !== undefined && location.state === undefined) location.state = state;\n }\n\n try {\n location.pathname = decodeURI(location.pathname);\n } catch (e) {\n if (e instanceof URIError) {\n throw new URIError('Pathname \"' + location.pathname + '\" could not be decoded. ' + 'This is likely caused by an invalid percent-encoding.');\n } else {\n throw e;\n }\n }\n\n if (key) location.key = key;\n\n if (currentLocation) {\n // Resolve incomplete/relative pathname relative to current location.\n if (!location.pathname) {\n location.pathname = currentLocation.pathname;\n } else if (location.pathname.charAt(0) !== '/') {\n location.pathname = resolvePathname(location.pathname, currentLocation.pathname);\n }\n } else {\n // When there is no prior location and pathname is empty, set it to /\n if (!location.pathname) {\n location.pathname = '/';\n }\n }\n\n return location;\n}\nfunction locationsAreEqual(a, b) {\n return a.pathname === b.pathname && a.search === b.search && a.hash === b.hash && a.key === b.key && valueEqual(a.state, b.state);\n}\n\nfunction createTransitionManager() {\n var prompt = null;\n\n function setPrompt(nextPrompt) {\n process.env.NODE_ENV !== \"production\" ? warning(prompt == null, 'A history supports only one prompt at a time') : void 0;\n prompt = nextPrompt;\n return function () {\n if (prompt === nextPrompt) prompt = null;\n };\n }\n\n function confirmTransitionTo(location, action, getUserConfirmation, callback) {\n // TODO: If another transition starts while we're still confirming\n // the previous one, we may end up in a weird state. Figure out the\n // best way to handle this.\n if (prompt != null) {\n var result = typeof prompt === 'function' ? prompt(location, action) : prompt;\n\n if (typeof result === 'string') {\n if (typeof getUserConfirmation === 'function') {\n getUserConfirmation(result, callback);\n } else {\n process.env.NODE_ENV !== \"production\" ? warning(false, 'A history needs a getUserConfirmation function in order to use a prompt message') : void 0;\n callback(true);\n }\n } else {\n // Return false from a transition hook to cancel the transition.\n callback(result !== false);\n }\n } else {\n callback(true);\n }\n }\n\n var listeners = [];\n\n function appendListener(fn) {\n var isActive = true;\n\n function listener() {\n if (isActive) fn.apply(void 0, arguments);\n }\n\n listeners.push(listener);\n return function () {\n isActive = false;\n listeners = listeners.filter(function (item) {\n return item !== listener;\n });\n };\n }\n\n function notifyListeners() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n listeners.forEach(function (listener) {\n return listener.apply(void 0, args);\n });\n }\n\n return {\n setPrompt: setPrompt,\n confirmTransitionTo: confirmTransitionTo,\n appendListener: appendListener,\n notifyListeners: notifyListeners\n };\n}\n\nvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\nfunction getConfirmation(message, callback) {\n callback(window.confirm(message)); // eslint-disable-line no-alert\n}\n/**\n * Returns true if the HTML5 history API is supported. Taken from Modernizr.\n *\n * https://github.com/Modernizr/Modernizr/blob/master/LICENSE\n * https://github.com/Modernizr/Modernizr/blob/master/feature-detects/history.js\n * changed to avoid false negatives for Windows Phones: https://github.com/reactjs/react-router/issues/586\n */\n\nfunction supportsHistory() {\n var ua = window.navigator.userAgent;\n if ((ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) && ua.indexOf('Mobile Safari') !== -1 && ua.indexOf('Chrome') === -1 && ua.indexOf('Windows Phone') === -1) return false;\n return window.history && 'pushState' in window.history;\n}\n/**\n * Returns true if browser fires popstate on hash change.\n * IE10 and IE11 do not.\n */\n\nfunction supportsPopStateOnHashChange() {\n return window.navigator.userAgent.indexOf('Trident') === -1;\n}\n/**\n * Returns false if using go(n) with hash history causes a full page reload.\n */\n\nfunction supportsGoWithoutReloadUsingHash() {\n return window.navigator.userAgent.indexOf('Firefox') === -1;\n}\n/**\n * Returns true if a given popstate event is an extraneous WebKit event.\n * Accounts for the fact that Chrome on iOS fires real popstate events\n * containing undefined state when pressing the back button.\n */\n\nfunction isExtraneousPopstateEvent(event) {\n return event.state === undefined && navigator.userAgent.indexOf('CriOS') === -1;\n}\n\nvar PopStateEvent = 'popstate';\nvar HashChangeEvent = 'hashchange';\n\nfunction getHistoryState() {\n try {\n return window.history.state || {};\n } catch (e) {\n // IE 11 sometimes throws when accessing window.history.state\n // See https://github.com/ReactTraining/history/pull/289\n return {};\n }\n}\n/**\n * Creates a history object that uses the HTML5 history API including\n * pushState, replaceState, and the popstate event.\n */\n\n\nfunction createBrowserHistory(props) {\n if (props === void 0) {\n props = {};\n }\n\n !canUseDOM ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Browser history needs a DOM') : invariant(false) : void 0;\n var globalHistory = window.history;\n var canUseHistory = supportsHistory();\n var needsHashChangeListener = !supportsPopStateOnHashChange();\n var _props = props,\n _props$forceRefresh = _props.forceRefresh,\n forceRefresh = _props$forceRefresh === void 0 ? false : _props$forceRefresh,\n _props$getUserConfirm = _props.getUserConfirmation,\n getUserConfirmation = _props$getUserConfirm === void 0 ? getConfirmation : _props$getUserConfirm,\n _props$keyLength = _props.keyLength,\n keyLength = _props$keyLength === void 0 ? 6 : _props$keyLength;\n var basename = props.basename ? stripTrailingSlash(addLeadingSlash(props.basename)) : '';\n\n function getDOMLocation(historyState) {\n var _ref = historyState || {},\n key = _ref.key,\n state = _ref.state;\n\n var _window$location = window.location,\n pathname = _window$location.pathname,\n search = _window$location.search,\n hash = _window$location.hash;\n var path = pathname + search + hash;\n process.env.NODE_ENV !== \"production\" ? warning(!basename || hasBasename(path, basename), 'You are attempting to use a basename on a page whose URL path does not begin ' + 'with the basename. Expected path \"' + path + '\" to begin with \"' + basename + '\".') : void 0;\n if (basename) path = stripBasename(path, basename);\n return createLocation(path, state, key);\n }\n\n function createKey() {\n return Math.random().toString(36).substr(2, keyLength);\n }\n\n var transitionManager = createTransitionManager();\n\n function setState(nextState) {\n _extends(history, nextState);\n\n history.length = globalHistory.length;\n transitionManager.notifyListeners(history.location, history.action);\n }\n\n function handlePopState(event) {\n // Ignore extraneous popstate events in WebKit.\n if (isExtraneousPopstateEvent(event)) return;\n handlePop(getDOMLocation(event.state));\n }\n\n function handleHashChange() {\n handlePop(getDOMLocation(getHistoryState()));\n }\n\n var forceNextPop = false;\n\n function handlePop(location) {\n if (forceNextPop) {\n forceNextPop = false;\n setState();\n } else {\n var action = 'POP';\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (ok) {\n setState({\n action: action,\n location: location\n });\n } else {\n revertPop(location);\n }\n });\n }\n }\n\n function revertPop(fromLocation) {\n var toLocation = history.location; // TODO: We could probably make this more reliable by\n // keeping a list of keys we've seen in sessionStorage.\n // Instead, we just default to 0 for keys we don't know.\n\n var toIndex = allKeys.indexOf(toLocation.key);\n if (toIndex === -1) toIndex = 0;\n var fromIndex = allKeys.indexOf(fromLocation.key);\n if (fromIndex === -1) fromIndex = 0;\n var delta = toIndex - fromIndex;\n\n if (delta) {\n forceNextPop = true;\n go(delta);\n }\n }\n\n var initialLocation = getDOMLocation(getHistoryState());\n var allKeys = [initialLocation.key]; // Public interface\n\n function createHref(location) {\n return basename + createPath(location);\n }\n\n function push(path, state) {\n process.env.NODE_ENV !== \"production\" ? warning(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to push when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : void 0;\n var action = 'PUSH';\n var location = createLocation(path, state, createKey(), history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n var href = createHref(location);\n var key = location.key,\n state = location.state;\n\n if (canUseHistory) {\n globalHistory.pushState({\n key: key,\n state: state\n }, null, href);\n\n if (forceRefresh) {\n window.location.href = href;\n } else {\n var prevIndex = allKeys.indexOf(history.location.key);\n var nextKeys = allKeys.slice(0, prevIndex + 1);\n nextKeys.push(location.key);\n allKeys = nextKeys;\n setState({\n action: action,\n location: location\n });\n }\n } else {\n process.env.NODE_ENV !== \"production\" ? warning(state === undefined, 'Browser history cannot push state in browsers that do not support HTML5 history') : void 0;\n window.location.href = href;\n }\n });\n }\n\n function replace(path, state) {\n process.env.NODE_ENV !== \"production\" ? warning(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to replace when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : void 0;\n var action = 'REPLACE';\n var location = createLocation(path, state, createKey(), history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n var href = createHref(location);\n var key = location.key,\n state = location.state;\n\n if (canUseHistory) {\n globalHistory.replaceState({\n key: key,\n state: state\n }, null, href);\n\n if (forceRefresh) {\n window.location.replace(href);\n } else {\n var prevIndex = allKeys.indexOf(history.location.key);\n if (prevIndex !== -1) allKeys[prevIndex] = location.key;\n setState({\n action: action,\n location: location\n });\n }\n } else {\n process.env.NODE_ENV !== \"production\" ? warning(state === undefined, 'Browser history cannot replace state in browsers that do not support HTML5 history') : void 0;\n window.location.replace(href);\n }\n });\n }\n\n function go(n) {\n globalHistory.go(n);\n }\n\n function goBack() {\n go(-1);\n }\n\n function goForward() {\n go(1);\n }\n\n var listenerCount = 0;\n\n function checkDOMListeners(delta) {\n listenerCount += delta;\n\n if (listenerCount === 1 && delta === 1) {\n window.addEventListener(PopStateEvent, handlePopState);\n if (needsHashChangeListener) window.addEventListener(HashChangeEvent, handleHashChange);\n } else if (listenerCount === 0) {\n window.removeEventListener(PopStateEvent, handlePopState);\n if (needsHashChangeListener) window.removeEventListener(HashChangeEvent, handleHashChange);\n }\n }\n\n var isBlocked = false;\n\n function block(prompt) {\n if (prompt === void 0) {\n prompt = false;\n }\n\n var unblock = transitionManager.setPrompt(prompt);\n\n if (!isBlocked) {\n checkDOMListeners(1);\n isBlocked = true;\n }\n\n return function () {\n if (isBlocked) {\n isBlocked = false;\n checkDOMListeners(-1);\n }\n\n return unblock();\n };\n }\n\n function listen(listener) {\n var unlisten = transitionManager.appendListener(listener);\n checkDOMListeners(1);\n return function () {\n checkDOMListeners(-1);\n unlisten();\n };\n }\n\n var history = {\n length: globalHistory.length,\n action: 'POP',\n location: initialLocation,\n createHref: createHref,\n push: push,\n replace: replace,\n go: go,\n goBack: goBack,\n goForward: goForward,\n block: block,\n listen: listen\n };\n return history;\n}\n\nvar HashChangeEvent$1 = 'hashchange';\nvar HashPathCoders = {\n hashbang: {\n encodePath: function encodePath(path) {\n return path.charAt(0) === '!' ? path : '!/' + stripLeadingSlash(path);\n },\n decodePath: function decodePath(path) {\n return path.charAt(0) === '!' ? path.substr(1) : path;\n }\n },\n noslash: {\n encodePath: stripLeadingSlash,\n decodePath: addLeadingSlash\n },\n slash: {\n encodePath: addLeadingSlash,\n decodePath: addLeadingSlash\n }\n};\n\nfunction stripHash(url) {\n var hashIndex = url.indexOf('#');\n return hashIndex === -1 ? url : url.slice(0, hashIndex);\n}\n\nfunction getHashPath() {\n // We can't use window.location.hash here because it's not\n // consistent across browsers - Firefox will pre-decode it!\n var href = window.location.href;\n var hashIndex = href.indexOf('#');\n return hashIndex === -1 ? '' : href.substring(hashIndex + 1);\n}\n\nfunction pushHashPath(path) {\n window.location.hash = path;\n}\n\nfunction replaceHashPath(path) {\n window.location.replace(stripHash(window.location.href) + '#' + path);\n}\n\nfunction createHashHistory(props) {\n if (props === void 0) {\n props = {};\n }\n\n !canUseDOM ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Hash history needs a DOM') : invariant(false) : void 0;\n var globalHistory = window.history;\n var canGoWithoutReload = supportsGoWithoutReloadUsingHash();\n var _props = props,\n _props$getUserConfirm = _props.getUserConfirmation,\n getUserConfirmation = _props$getUserConfirm === void 0 ? getConfirmation : _props$getUserConfirm,\n _props$hashType = _props.hashType,\n hashType = _props$hashType === void 0 ? 'slash' : _props$hashType;\n var basename = props.basename ? stripTrailingSlash(addLeadingSlash(props.basename)) : '';\n var _HashPathCoders$hashT = HashPathCoders[hashType],\n encodePath = _HashPathCoders$hashT.encodePath,\n decodePath = _HashPathCoders$hashT.decodePath;\n\n function getDOMLocation() {\n var path = decodePath(getHashPath());\n process.env.NODE_ENV !== \"production\" ? warning(!basename || hasBasename(path, basename), 'You are attempting to use a basename on a page whose URL path does not begin ' + 'with the basename. Expected path \"' + path + '\" to begin with \"' + basename + '\".') : void 0;\n if (basename) path = stripBasename(path, basename);\n return createLocation(path);\n }\n\n var transitionManager = createTransitionManager();\n\n function setState(nextState) {\n _extends(history, nextState);\n\n history.length = globalHistory.length;\n transitionManager.notifyListeners(history.location, history.action);\n }\n\n var forceNextPop = false;\n var ignorePath = null;\n\n function locationsAreEqual$$1(a, b) {\n return a.pathname === b.pathname && a.search === b.search && a.hash === b.hash;\n }\n\n function handleHashChange() {\n var path = getHashPath();\n var encodedPath = encodePath(path);\n\n if (path !== encodedPath) {\n // Ensure we always have a properly-encoded hash.\n replaceHashPath(encodedPath);\n } else {\n var location = getDOMLocation();\n var prevLocation = history.location;\n if (!forceNextPop && locationsAreEqual$$1(prevLocation, location)) return; // A hashchange doesn't always == location change.\n\n if (ignorePath === createPath(location)) return; // Ignore this change; we already setState in push/replace.\n\n ignorePath = null;\n handlePop(location);\n }\n }\n\n function handlePop(location) {\n if (forceNextPop) {\n forceNextPop = false;\n setState();\n } else {\n var action = 'POP';\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (ok) {\n setState({\n action: action,\n location: location\n });\n } else {\n revertPop(location);\n }\n });\n }\n }\n\n function revertPop(fromLocation) {\n var toLocation = history.location; // TODO: We could probably make this more reliable by\n // keeping a list of paths we've seen in sessionStorage.\n // Instead, we just default to 0 for paths we don't know.\n\n var toIndex = allPaths.lastIndexOf(createPath(toLocation));\n if (toIndex === -1) toIndex = 0;\n var fromIndex = allPaths.lastIndexOf(createPath(fromLocation));\n if (fromIndex === -1) fromIndex = 0;\n var delta = toIndex - fromIndex;\n\n if (delta) {\n forceNextPop = true;\n go(delta);\n }\n } // Ensure the hash is encoded properly before doing anything else.\n\n\n var path = getHashPath();\n var encodedPath = encodePath(path);\n if (path !== encodedPath) replaceHashPath(encodedPath);\n var initialLocation = getDOMLocation();\n var allPaths = [createPath(initialLocation)]; // Public interface\n\n function createHref(location) {\n var baseTag = document.querySelector('base');\n var href = '';\n\n if (baseTag && baseTag.getAttribute('href')) {\n href = stripHash(window.location.href);\n }\n\n return href + '#' + encodePath(basename + createPath(location));\n }\n\n function push(path, state) {\n process.env.NODE_ENV !== \"production\" ? warning(state === undefined, 'Hash history cannot push state; it is ignored') : void 0;\n var action = 'PUSH';\n var location = createLocation(path, undefined, undefined, history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n var path = createPath(location);\n var encodedPath = encodePath(basename + path);\n var hashChanged = getHashPath() !== encodedPath;\n\n if (hashChanged) {\n // We cannot tell if a hashchange was caused by a PUSH, so we'd\n // rather setState here and ignore the hashchange. The caveat here\n // is that other hash histories in the page will consider it a POP.\n ignorePath = path;\n pushHashPath(encodedPath);\n var prevIndex = allPaths.lastIndexOf(createPath(history.location));\n var nextPaths = allPaths.slice(0, prevIndex + 1);\n nextPaths.push(path);\n allPaths = nextPaths;\n setState({\n action: action,\n location: location\n });\n } else {\n process.env.NODE_ENV !== \"production\" ? warning(false, 'Hash history cannot PUSH the same path; a new entry will not be added to the history stack') : void 0;\n setState();\n }\n });\n }\n\n function replace(path, state) {\n process.env.NODE_ENV !== \"production\" ? warning(state === undefined, 'Hash history cannot replace state; it is ignored') : void 0;\n var action = 'REPLACE';\n var location = createLocation(path, undefined, undefined, history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n var path = createPath(location);\n var encodedPath = encodePath(basename + path);\n var hashChanged = getHashPath() !== encodedPath;\n\n if (hashChanged) {\n // We cannot tell if a hashchange was caused by a REPLACE, so we'd\n // rather setState here and ignore the hashchange. The caveat here\n // is that other hash histories in the page will consider it a POP.\n ignorePath = path;\n replaceHashPath(encodedPath);\n }\n\n var prevIndex = allPaths.indexOf(createPath(history.location));\n if (prevIndex !== -1) allPaths[prevIndex] = path;\n setState({\n action: action,\n location: location\n });\n });\n }\n\n function go(n) {\n process.env.NODE_ENV !== \"production\" ? warning(canGoWithoutReload, 'Hash history go(n) causes a full page reload in this browser') : void 0;\n globalHistory.go(n);\n }\n\n function goBack() {\n go(-1);\n }\n\n function goForward() {\n go(1);\n }\n\n var listenerCount = 0;\n\n function checkDOMListeners(delta) {\n listenerCount += delta;\n\n if (listenerCount === 1 && delta === 1) {\n window.addEventListener(HashChangeEvent$1, handleHashChange);\n } else if (listenerCount === 0) {\n window.removeEventListener(HashChangeEvent$1, handleHashChange);\n }\n }\n\n var isBlocked = false;\n\n function block(prompt) {\n if (prompt === void 0) {\n prompt = false;\n }\n\n var unblock = transitionManager.setPrompt(prompt);\n\n if (!isBlocked) {\n checkDOMListeners(1);\n isBlocked = true;\n }\n\n return function () {\n if (isBlocked) {\n isBlocked = false;\n checkDOMListeners(-1);\n }\n\n return unblock();\n };\n }\n\n function listen(listener) {\n var unlisten = transitionManager.appendListener(listener);\n checkDOMListeners(1);\n return function () {\n checkDOMListeners(-1);\n unlisten();\n };\n }\n\n var history = {\n length: globalHistory.length,\n action: 'POP',\n location: initialLocation,\n createHref: createHref,\n push: push,\n replace: replace,\n go: go,\n goBack: goBack,\n goForward: goForward,\n block: block,\n listen: listen\n };\n return history;\n}\n\nfunction clamp(n, lowerBound, upperBound) {\n return Math.min(Math.max(n, lowerBound), upperBound);\n}\n/**\n * Creates a history object that stores locations in memory.\n */\n\n\nfunction createMemoryHistory(props) {\n if (props === void 0) {\n props = {};\n }\n\n var _props = props,\n getUserConfirmation = _props.getUserConfirmation,\n _props$initialEntries = _props.initialEntries,\n initialEntries = _props$initialEntries === void 0 ? ['/'] : _props$initialEntries,\n _props$initialIndex = _props.initialIndex,\n initialIndex = _props$initialIndex === void 0 ? 0 : _props$initialIndex,\n _props$keyLength = _props.keyLength,\n keyLength = _props$keyLength === void 0 ? 6 : _props$keyLength;\n var transitionManager = createTransitionManager();\n\n function setState(nextState) {\n _extends(history, nextState);\n\n history.length = history.entries.length;\n transitionManager.notifyListeners(history.location, history.action);\n }\n\n function createKey() {\n return Math.random().toString(36).substr(2, keyLength);\n }\n\n var index = clamp(initialIndex, 0, initialEntries.length - 1);\n var entries = initialEntries.map(function (entry) {\n return typeof entry === 'string' ? createLocation(entry, undefined, createKey()) : createLocation(entry, undefined, entry.key || createKey());\n }); // Public interface\n\n var createHref = createPath;\n\n function push(path, state) {\n process.env.NODE_ENV !== \"production\" ? warning(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to push when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : void 0;\n var action = 'PUSH';\n var location = createLocation(path, state, createKey(), history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n var prevIndex = history.index;\n var nextIndex = prevIndex + 1;\n var nextEntries = history.entries.slice(0);\n\n if (nextEntries.length > nextIndex) {\n nextEntries.splice(nextIndex, nextEntries.length - nextIndex, location);\n } else {\n nextEntries.push(location);\n }\n\n setState({\n action: action,\n location: location,\n index: nextIndex,\n entries: nextEntries\n });\n });\n }\n\n function replace(path, state) {\n process.env.NODE_ENV !== \"production\" ? warning(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to replace when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : void 0;\n var action = 'REPLACE';\n var location = createLocation(path, state, createKey(), history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n history.entries[history.index] = location;\n setState({\n action: action,\n location: location\n });\n });\n }\n\n function go(n) {\n var nextIndex = clamp(history.index + n, 0, history.entries.length - 1);\n var action = 'POP';\n var location = history.entries[nextIndex];\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (ok) {\n setState({\n action: action,\n location: location,\n index: nextIndex\n });\n } else {\n // Mimic the behavior of DOM histories by\n // causing a render after a cancelled POP.\n setState();\n }\n });\n }\n\n function goBack() {\n go(-1);\n }\n\n function goForward() {\n go(1);\n }\n\n function canGo(n) {\n var nextIndex = history.index + n;\n return nextIndex >= 0 && nextIndex < history.entries.length;\n }\n\n function block(prompt) {\n if (prompt === void 0) {\n prompt = false;\n }\n\n return transitionManager.setPrompt(prompt);\n }\n\n function listen(listener) {\n return transitionManager.appendListener(listener);\n }\n\n var history = {\n length: entries.length,\n action: 'POP',\n location: entries[index],\n index: index,\n entries: entries,\n createHref: createHref,\n push: push,\n replace: replace,\n go: go,\n goBack: goBack,\n goForward: goForward,\n canGo: canGo,\n block: block,\n listen: listen\n };\n return history;\n}\n\nexport { createBrowserHistory, createHashHistory, createMemoryHistory, createLocation, locationsAreEqual, parsePath, createPath };\n","import { createBrowserHistory } from 'history';\r\n\r\nexport const history = createBrowserHistory();\r\n","var isProduction = process.env.NODE_ENV === 'production';\nvar prefix = 'Invariant failed';\nfunction invariant(condition, message) {\n if (condition) {\n return;\n }\n if (isProduction) {\n throw new Error(prefix);\n }\n throw new Error(prefix + \": \" + (message || ''));\n}\n\nexport default invariant;\n","export default function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}","import objectWithoutPropertiesLoose from \"./objectWithoutPropertiesLoose.js\";\nexport default function _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n var target = objectWithoutPropertiesLoose(source, excluded);\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}","import { Request } from 'models/Search/Request';\r\n\r\n/** Represents parts of the browser query string that are fixed and are always single strings. */\r\ninterface ParsedQueryStringFixed {\r\n\tkeyword?: string;\r\n\tsort?: string;\r\n\tpg?: string;\r\n\tlp?: string;\r\n\tPageId?: string;\r\n\tlpurl?: string;\r\n\tmpp?: string;\r\n\tsearchWithin?: string;\r\n\tis100Coverage?: string;\r\n\tindexName?: string;\r\n\tcustomURL?: string;\r\n}\r\n\r\n/**\r\n * Represents the parts of the browser query string that are dynamic (the selected facets). Facets\r\n * can have multiple values, so the value of these is always an array of strings.\r\n */\r\ninterface ParsedQueryStringDynamic {\r\n\t[key: string]: string[];\r\n}\r\n\r\ntype ParsedQueryString = ParsedQueryStringFixed & ParsedQueryStringDynamic;\r\n\r\n/**\r\n * Parses the input query string and returns an object that can be used to build a search request.\r\n * The object returned will usually have the keys: `keyword`, `sort`, `pg`,`lp`,`lpurl`, `mpp`, and then more keys\r\n * for every selected facet.\r\n * @param search The input query string.\r\n */\r\nfunction parseQueryStringToObject(search: string) {\r\n\tconst params = new URLSearchParams(search);\r\n\r\n\tconst parsed: ParsedQueryString = {};\r\n\r\n\tparams.forEach((value, key) => {\r\n\t\tif (\r\n\t\t\tkey === 'keyword' ||\r\n\t\t\tkey === 'sort' ||\r\n\t\t\tkey === 'pg' ||\r\n\t\t\tkey === 'lp' ||\r\n\t\t\tkey === 'PageId' ||\r\n\t\t\tkey === 'lpurl' ||\r\n\t\t\tkey === 'mpp' ||\r\n\t\t\tkey === 'searchWithin' ||\r\n\t\t\tkey === 'is100Coverage' ||\r\n\t\t\tkey === 'indexName'\r\n\t\t) {\r\n\t\t\t// `keyword` is special and should never be turned into an array\r\n\t\t\tparsed[key] = encodeURIComponent(value);\r\n\t\t} else {\r\n\t\t\t// everything else should be turned into an array\r\n\r\n\t\t\tif (!value) {\r\n\t\t\t\t// no useful value for this query param, so skip it\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// multiple selections are split by commas, so split into an array\r\n\t\t\tconst multipleValues = value.split(',');\r\n\r\n\t\t\t// and now handle any comma escaping - any single value that contained a comma is escaped to '::'\r\n\t\t\tfor (let x = 0; x < multipleValues.length; ++x) {\r\n\t\t\t\tmultipleValues[x] = multipleValues[x]\r\n\t\t\t\t\t.replace(/::/g, ',')\r\n\t\t\t\t\t.replace(/:o:/g, '°')\r\n\t\t\t\t\t.replace(/:plus:/g, '+')\r\n\t\t\t\t\t.replace(/:and:/g, '&');\r\n\t\t\t}\r\n\r\n\t\t\tparsed[key] = multipleValues;\r\n\t\t}\r\n\t});\r\n\r\n\treturn parsed;\r\n}\r\n\r\n/**\r\n * Parses the abosulte url into a `HawkClient` client search request object.\r\n * @param location The input location\r\n * @param searchUrl The input searchUrl\r\n * @param customUrl The input customUrl\r\n */\r\nexport function parseLocation(location: Location, searchUrl: string = '/search', customUrl?: string): Partial {\r\n\tconst searchRequest = parseSearchQueryString(location.search);\r\n\tif (customUrl) {\r\n\t\tsearchRequest.Keyword = undefined;\r\n\t\tsearchRequest.CustomUrl = customUrl;\r\n\t\treturn searchRequest;\r\n\t}\r\n\tif (checkIfUrlRefsLandingPage(location.pathname, searchUrl)) {\r\n\t\tsearchRequest.Keyword = undefined;\r\n\t\tsearchRequest.CustomUrl = location.pathname.replace(searchUrl, '');\r\n\t}\r\n\treturn searchRequest;\r\n}\r\n/**\r\n * Parses the input query string into a `HawkClient` client search request object.\r\n * @param search The input query string.\r\n */\r\nexport function parseSearchQueryString(search: string, customUrl?: string): Partial {\r\n\tconst queryObj = parseQueryStringToObject(search);\r\n\r\n\t// extract out components, including facet selections\r\n\tconst {\r\n\t\tkeyword,\r\n\t\tsort,\r\n\t\tpg,\r\n\t\tmpp,\r\n\t\tlp,\r\n\t\tPageId,\r\n\t\tlpurl,\r\n\t\tsearchWithin,\r\n\t\tis100Coverage,\r\n\t\tindexName,\r\n\t\tcustomURL,\r\n\t\t...facetSelections\r\n\t} = queryObj;\r\n\r\n\t// ignore landing pages if keyword is passed\r\n\tconst pageId = lp || PageId;\r\n\treturn {\r\n\t\tKeyword: lpurl || pageId ? '' : keyword,\r\n\r\n\t\tSortBy: sort,\r\n\t\tPageNo: pg ? Number(pg) : undefined,\r\n\t\tMaxPerPage: mpp ? Number(mpp) : undefined,\r\n\t\tPageId: pageId ? Number(pageId) : undefined,\r\n\t\tCustomUrl: customURL || customUrl,\r\n\t\tSearchWithin: searchWithin,\r\n\t\tIs100CoverageTurnedOn: is100Coverage ? Boolean(is100Coverage) : undefined,\r\n\t\tFacetSelections: facetSelections,\r\n\t\tIndexName: indexName,\r\n\t};\r\n}\r\n\r\nexport function checkIfUrlRefsLandingPage(path: string, searchUrl: string): boolean {\r\n\tif (!path) {\r\n\t\t// if there's no path, this request can't be for a landing page\r\n\t\treturn false;\r\n\t}\r\n\r\n\tif (!path.endsWith('/')) {\r\n\t\tpath = path + '/';\r\n\t}\r\n\r\n\tif (!searchUrl.endsWith('/')) {\r\n\t\tsearchUrl = searchUrl + '/';\r\n\t}\r\n\r\n\treturn path !== searchUrl;\r\n}\r\n\r\n/**\r\n * Converts a search query object (such as one returned from `parseSearchQueryString`) and converts\r\n * it into a browser query string\r\n * @param queryObj The query object to convert to a query string.\r\n */\r\nfunction convertObjectToQueryString(queryObj: ParsedQueryString) {\r\n\tconst queryStringValues: string[] = [];\r\n\r\n\tfor (const key in queryObj) {\r\n\t\tif (queryObj.hasOwnProperty(key)) {\r\n\t\t\tif (\r\n\t\t\t\tkey === 'keyword' ||\r\n\t\t\t\tkey === 'sort' ||\r\n\t\t\t\tkey === 'pg' ||\r\n\t\t\t\tkey === 'mpp' ||\r\n\t\t\t\tkey === 'searchWithin' ||\r\n\t\t\t\tkey === 'is100Coverage' ||\r\n\t\t\t\tkey === 'indexName'\r\n\t\t\t) {\r\n\t\t\t\tconst value = queryObj[key];\r\n\r\n\t\t\t\tif (value === undefined || value === null) {\r\n\t\t\t\t\t// if any of the special keys just aren't defined or are null, don't include them in\r\n\t\t\t\t\t// the query string\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (typeof value !== 'string') {\r\n\t\t\t\t\tthrow new Error(`${key} must be a string`);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// certain strings are special and are never arrays\r\n\t\t\t\tqueryStringValues.push(key + '=' + value);\r\n\t\t\t} else {\r\n\t\t\t\tconst values = queryObj[key];\r\n\r\n\t\t\t\t// handle comma escaping - if any of the values contains a comma, they need to be escaped first\r\n\t\t\t\tconst escapedValues: string[] = [];\r\n\r\n\t\t\t\tfor (const unescapedValue of values) {\r\n\t\t\t\t\tescapedValues.push(\r\n\t\t\t\t\t\tunescapedValue\r\n\t\t\t\t\t\t\t.replace(/,/g, '::')\r\n\t\t\t\t\t\t\t.replace(/°/g, ':o:')\r\n\t\t\t\t\t\t\t.replace(/\\+/g, ':plus:')\r\n\t\t\t\t\t\t\t.replace(/&/g, ':and:')\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t\tqueryStringValues.push(key + '=' + escapedValues.join(','));\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn '?' + queryStringValues.join('&');\r\n}\r\n\r\n/**\r\n * Converts a partial search request object into a browser query string.\r\n * @param searchRequest The search request object to convert.\r\n */\r\nexport function getSearchQueryString(searchRequest: Partial) {\r\n\tconst searchQuery = {\r\n\t\tkeyword: searchRequest.Keyword,\r\n\r\n\t\tsort: searchRequest.SortBy,\r\n\t\tpg: searchRequest.PageNo ? String(searchRequest.PageNo) : undefined,\r\n\t\tmpp: searchRequest.MaxPerPage ? String(searchRequest.MaxPerPage) : undefined,\r\n\t\tis100Coverage: searchRequest.Is100CoverageTurnedOn ? String(searchRequest.Is100CoverageTurnedOn) : undefined,\r\n\t\tsearchWithin: searchRequest.SearchWithin,\r\n\t\tindexName: searchRequest.IndexName,\r\n\r\n\t\t...searchRequest.FacetSelections,\r\n\t} as ParsedQueryString;\r\n\r\n\treturn convertObjectToQueryString(searchQuery);\r\n}\r\n","import { useEffect } from 'react';\r\n\r\nimport { useHawksearch } from './StoreProvider';\r\nimport { history } from 'util/History';\r\nimport { parseSearchQueryString, getSearchQueryString } from 'util/QueryString';\r\nimport AuthToken from './AuthToken';\r\n\r\nlet doSearch = true;\r\n\r\nfunction QueryStringListener() {\r\n\tconst { store, actor } = useHawksearch();\r\n\r\n\tuseEffect(() => {\r\n\t\t// listen to history so that when we navigate backward/forward, trigger a new search based off\r\n\t\t// the new query string\r\n\t\tconst unlisten = history.listen(location => {\r\n\t\t\t// if (!doSearch) {\r\n\t\t\t// \t// if the previous history change specified that we shouldn't do a search, clear the flag and bail\r\n\t\t\t// \tdoSearch = true;\r\n\t\t\t// \treturn;\r\n\t\t\t// }\r\n\r\n\t\t\tconst searchRequest = parseSearchQueryString(location.search);\r\n\r\n\t\t\tactor.setSearch(\r\n\t\t\t\tsearchRequest,\r\n\t\t\t\t// explicitly flag this next search as not needing to push additional history, since this search\r\n\t\t\t\t// _is_ the result of history.\r\n\t\t\t\t/*doHistory*/ false\r\n\t\t\t);\r\n\t\t});\r\n\r\n\t\treturn () => {\r\n\t\t\tunlisten();\r\n\t\t};\r\n\t});\r\n\r\n\tuseEffect(() => {\r\n\t\t// listen to changes in the pending search so that history records can be pushed to the browser's\r\n\t\t// query string\r\n\r\n\t\tif (store.doHistory) {\r\n\t\t\t// if we're pushing history, we don't want to to trigger a search as a result of this history\r\n\t\t\t// change\r\n\t\t\tdoSearch = false;\r\n\r\n\t\t\thistory.push({\r\n\t\t\t\tsearch: getSearchQueryString(store.pendingSearch),\r\n\t\t\t});\r\n\t\t}\r\n\t}, [store.pendingSearch]);\r\n\r\n\t// Extract access token and refresh token from query string on load\r\n\tuseEffect(() => {\r\n\t\tconst params = new URLSearchParams(location.search);\r\n\t\tAuthToken.setTokens(params.get('token') || '', (params.get('refreshToken') || '').replace(' ', '+') || '');\r\n\t}, []);\r\n\r\n\treturn null;\r\n}\r\n\r\nexport default QueryStringListener;\r\n","import { useEffect } from 'react';\r\n\r\nimport { useHawksearch } from './StoreProvider';\r\nimport { history } from 'util/History';\r\nimport { parseSearchQueryString, getSearchQueryString } from 'util/QueryString';\r\n\r\nlet doSearch = true;\r\n\r\nfunction QueryStringListenerSF() {\r\n\tconst { store, actor } = useHawksearch();\r\n\r\n\tuseEffect(() => {\r\n\t\t// listen to history so that when we navigate backward/forward, trigger a new search based off\r\n\t\t// the new query string\r\n\t\tconst unlisten = history.listen(location => {\r\n\t\t\tconst searchRequest = parseSearchQueryString(location.search, store.pendingSearch.CustomUrl);\r\n\r\n\t\t\tactor.setSearch(\r\n\t\t\t\tsearchRequest,\r\n\t\t\t\t// explicitly flag this next search as not needing to push additional history, since this search\r\n\t\t\t\t// _is_ the result of history.\r\n\t\t\t\t/*doHistory*/ false\r\n\t\t\t);\r\n\t\t});\r\n\r\n\t\treturn () => {\r\n\t\t\tunlisten();\r\n\t\t};\r\n\t});\r\n\r\n\tuseEffect(() => {\r\n\t\t// listen to changes in the pending search so that history records can be pushed to the browser's\r\n\t\t// query string\r\n\r\n\t\tif (store.doHistory) {\r\n\t\t\t// if we're pushing history, we don't want to to trigger a search as a result of this history\r\n\t\t\t// change\r\n\t\t\tdoSearch = false;\r\n\r\n\t\t\thistory.push({\r\n\t\t\t\tsearch: getSearchQueryString(store.pendingSearch),\r\n\t\t\t});\r\n\t\t}\r\n\t}, [store.pendingSearch]);\r\n\r\n\treturn null;\r\n}\r\n\r\nexport default QueryStringListenerSF;\r\n","import React, { useState } from 'react';\r\nimport { useHawksearch } from 'components/StoreProvider';\r\n\r\nfunction AutoCorrectSuggestion() {\r\n\tconst {\r\n\t\tstore: { searchResults },\r\n\t\tactor: hawkActor,\r\n\t} = useHawksearch();\r\n\tfunction selectKeyword(keyword: string) {\r\n\t\thawkActor.setSearch({\r\n\t\t\tKeyword: keyword,\r\n\t\t});\r\n\t}\r\n\treturn (\r\n\t\t
    \r\n\t\t\t{searchResults && searchResults.DidYouMean ? (\r\n\t\t\t\t
      \r\n\t\t\t\t\t

      Did you mean?

      \r\n\t\t\t\t\t{searchResults.DidYouMean.map((keyword: string, index: number) => (\r\n\t\t\t\t\t\t
    • selectKeyword(keyword)} key={index}>\r\n\t\t\t\t\t\t\t{keyword}\r\n\t\t\t\t\t\t
    • \r\n\t\t\t\t\t))}\r\n\t\t\t\t
    \r\n\t\t\t) : null}\r\n\t\t
    \r\n\t);\r\n}\r\n\r\nexport default AutoCorrectSuggestion;\r\n","import { Result } from 'react-hawksearch';\r\nimport { PreviewDataResponse } from 'models/PreviewDataResponse';\r\nimport { AppSettings } from 'types';\r\nimport { VisitorTarget } from 'models/VisitorTarget';\r\n\r\nexport class PreviewStore {\r\n\tpublic isLoading: boolean;\r\n\r\n\tpublic visitorId: string;\r\n\r\n\tpublic currentResult?: Result;\r\n\r\n\tpublic siteDirectory: string;\r\n\r\n\tpublic clientGuid?: string;\r\n\r\n\tpublic websiteUrl?: string;\r\n\r\n\tpublic fieldsData?: Map;\r\n\r\n\tpublic fieldsMapping?: Map;\r\n\r\n\tpublic visitorsTarget?: VisitorTarget[];\r\n\r\n\tpublic isUsingDefaultSimilarityAlgorithm: boolean;\r\n\r\n\tpublic preselectedVisitors?: number[];\r\n\r\n\tpublic settings: AppSettings;\r\n\r\n\tpublic clientIndexes: string[];\r\n\r\n\tpublic itemsToCompare: Result[];\r\n\tpublic currentSearchIndex: string;\r\n\r\n\tpublic cartItems: Result[];\r\n\tpublic showCartPopup: boolean;\r\n\tpublic constructor(initial?: Partial) {\r\n\t\tObject.assign(this, initial);\r\n\t}\r\n\r\n\tpublic get isInitialLoad() {\r\n\t\treturn this.isLoading && !this.currentResult;\r\n\t}\r\n}\r\n","import axios, { AxiosInstance, AxiosError, AxiosResponse, AxiosRequestConfig } from 'axios';\r\n\r\n/**\r\n * Helper that creates and configures an instance of Axios to be used throughout\r\n * the client application. This will also handle forbidden (403) errors via interceptors.\r\n */\r\nconst AxiosHelper: AxiosInstance = axios.create({\r\n\twithCredentials: false,\r\n});\r\n\r\nexport default AxiosHelper;\r\n\r\nexport const addAccessDeniedInterceptor = history => {\r\n\t// this allows us to act when any request going through axios succeeds or fails.\r\n\tAxiosHelper.interceptors.response.use(\r\n\t\t(response: AxiosResponse) => {\r\n\t\t\treturn response;\r\n\t\t},\r\n\t\t(error: AxiosError) => {\r\n\t\t\tconst config: AxiosRequestConfig = error.config;\r\n\r\n\t\t\tif (config && error.response && error.response.status === 403) {\r\n\t\t\t\thistory.replace('/access-denied');\r\n\t\t\t}\r\n\r\n\t\t\tif (error.response && error.response.status === 401) {\r\n\t\t\t\twindow.location.replace('/access-denied');\r\n\t\t\t}\r\n\r\n\t\t\treturn Promise.reject(error);\r\n\t\t}\r\n\t);\r\n};\r\n","import axios, { CancelToken } from 'axios';\r\n\r\nimport { ClientDataRequest } from 'models/ClientDataRequest';\r\nimport { PreviewDataRequest } from 'models/PreviewDataRequest';\r\nimport { PreviewDataResponse } from 'models/PreviewDataResponse';\r\nimport { PreviewConfig } from 'types';\r\nimport { ClientDataResponse } from '../models/ClientDataResponse';\r\nimport AxiosHelper from 'services/AxiosHelper';\r\nimport { PageLayoutRequest } from 'models/PageLayoutRequest';\r\nimport { AutocompleteRequest, AutocompleteResponse } from 'models/AutocompleteResponse';\r\nimport { CompareItemRequest } from 'models/CompareItemRequest';\r\nimport { CompareDataResponse } from 'models/CompareDataResponse';\r\n\r\nclass PreviewClient {\r\n\tprivate baseUrl: string;\r\n\tprivate previewClientDataUrl: string;\r\n\tprivate initialDataUrl: string;\r\n\tprivate getPageLayoutUrl: string;\r\n\tprivate autocompleteUrl: string;\r\n\tprivate compareItemsURL: string;\r\n\tprivate addToCartURL: string;\r\n\tprivate compareItemURL: string;\r\n\tconstructor(config: PreviewConfig) {\r\n\t\tthis.baseUrl = config.apiUrl || 'https://searchapi-dev.americaneagle.com';\r\n\t\tthis.previewClientDataUrl = '/api/internal-preview/get-client-data';\r\n\t\tthis.initialDataUrl = '/api/internal-preview/get-preview-data';\r\n\t\tthis.getPageLayoutUrl = '/api/internal-preview/page-layout';\r\n\t\tthis.autocompleteUrl = '/api/autocomplete';\r\n\t\tthis.compareItemsURL = config.compareItemsURL || '/api/compare';\r\n\t\tthis.compareItemURL = config.compareItemURL;\r\n\t\tthis.addToCartURL = config.addToCartURL;\r\n\t}\r\n\r\n\tpublic async getClientData(\r\n\t\trequest: ClientDataRequest,\r\n\t\tcancellationToken?: CancelToken\r\n\t): Promise {\r\n\t\tconst result = await AxiosHelper.post(\r\n\t\t\tnew URL(this.previewClientDataUrl, this.baseUrl).href,\r\n\t\t\trequest,\r\n\t\t\t{\r\n\t\t\t\tcancelToken: cancellationToken,\r\n\t\t\t}\r\n\t\t);\r\n\t\treturn result.data;\r\n\t}\r\n\r\n\tpublic async getPageLayout(request: PageLayoutRequest, cancellationToken?: CancelToken): Promise {\r\n\t\tconst result = await AxiosHelper.post(new URL(this.getPageLayoutUrl, this.baseUrl).href, request, {\r\n\t\t\tcancelToken: cancellationToken,\r\n\t\t});\r\n\r\n\t\treturn result.data;\r\n\t}\r\n\r\n\tpublic async getInitialData(\r\n\t\trequest: PreviewDataRequest,\r\n\t\tcancellationToken?: CancelToken\r\n\t): Promise {\r\n\t\tconst result = await AxiosHelper.post(\r\n\t\t\tnew URL(this.initialDataUrl, this.baseUrl).href,\r\n\t\t\trequest,\r\n\t\t\t{\r\n\t\t\t\tcancelToken: cancellationToken,\r\n\t\t\t}\r\n\t\t);\r\n\r\n\t\treturn result.data;\r\n\t}\r\n\r\n\tpublic async getComparedItems(\r\n\t\trequest: CompareItemRequest,\r\n\t\tcancellationToken?: CancelToken\r\n\t): Promise {\r\n\t\tconst result = await AxiosHelper.post(\r\n\t\t\tnew URL(this.compareItemsURL, this.baseUrl).href,\r\n\t\t\trequest,\r\n\t\t\t{\r\n\t\t\t\tcancelToken: cancellationToken,\r\n\t\t\t}\r\n\t\t);\r\n\r\n\t\treturn result.data;\r\n\t}\r\n\r\n\tpublic async autocomplete(\r\n\t\trequest: AutocompleteRequest,\r\n\t\tcancellationToken?: CancelToken\r\n\t): Promise {\r\n\t\tconst result = await axios.post(\r\n\t\t\tnew URL(this.autocompleteUrl, this.baseUrl).href,\r\n\t\t\trequest,\r\n\t\t\t{\r\n\t\t\t\tcancelToken: cancellationToken,\r\n\t\t\t}\r\n\t\t);\r\n\r\n\t\treturn result.data;\r\n\t}\r\n\r\n\tpublic async addToCart(bodyFormData) {\r\n\t\treturn axios({\r\n\t\t\tmethod: 'post',\r\n\t\t\turl: this.addToCartURL,\r\n\t\t\tdata: bodyFormData,\r\n\t\t\theaders: {\r\n\t\t\t\t'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',\r\n\t\t\t\t// Cookie: document.cookie,\r\n\t\t\t},\r\n\t\t});\r\n\t}\r\n\r\n\tpublic async addComparision(productId, categoryId) {\r\n\t\treturn axios({\r\n\t\t\tmethod: 'get',\r\n\t\t\turl: `${this.compareItemURL}?productId=${productId}&categoryId=${categoryId}&_=1611753293510`,\r\n\t\t\theaders: {\r\n\t\t\t\t'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',\r\n\t\t\t\t// Cookie: document.cookie,\r\n\t\t\t},\r\n\t\t});\r\n\t}\r\n}\r\n\r\nexport default PreviewClient;\r\n","import { AppSettings, PreviewConfig } from 'types';\r\nimport { HawksearchConfig } from 'react-hawksearch';\r\n\r\nconst getDashboardUrl = () => {\r\n\tif (window.location.href) {\r\n\t\treturn (window.location.href.match(/https:/g) || []).length\r\n\t\t\t? process.env.REACT_APP_HAWK_DASHBOARD_SECURE_URL\r\n\t\t\t: process.env.REACT_APP_HAWK_DASHBOARD_URL;\r\n\t}\r\n\treturn process.env.REACT_APP_HAWK_DASHBOARD_URL;\r\n};\r\n\r\nconst getSearchAPIURL = () => {\r\n\tconst elem = document.getElementById('react-app');\r\n\tif (elem) {\r\n\t\tconst val = elem.getAttribute('data-hawksearch-search-api');\r\n\t\tif (val) {\r\n\t\t\treturn val;\r\n\t\t} else {\r\n\t\t\treturn elem.getAttribute('data-base-api');\r\n\t\t}\r\n\t} else {\r\n\t\tconst elem2 = document.getElementById('react-app-autocomplete');\r\n\t\tif (elem2) {\r\n\t\t\tconst val2 = elem2.getAttribute('data-hawksearch-search-api');\r\n\t\t\tif (val2) {\r\n\t\t\t\treturn val2;\r\n\t\t\t} else {\r\n\t\t\t\treturn elem2.getAttribute('data-base-api');\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\treturn '';\r\n};\r\n\r\n// handle the initial settings here\r\nconst initialContext: AppState = {\r\n\tsettings: {\r\n\t\ttimeZone: 'America/New_York',\r\n\r\n\t\tisBoostAndBuryEnabled: true,\r\n\t\tisVisibilityRulesEnabled: true,\r\n\t\tisPersonalizedBoostEnabled: true,\r\n\t\tisPopularityBoostEnabled: true,\r\n\t\tisItemPinEnabled: true,\r\n\t\tisAdvancedExplanationEnabled: true,\r\n\t\tisCoverageEnabled: false,\r\n\t\tisKeywordReplacementEnabled: true,\r\n\t},\r\n\thawkConfig: {\r\n\t\t// apiUrl: process.env.REACT_APP_HAWK_API_URL,\r\n\t\tapiUrl: getSearchAPIURL(),\r\n\t\tdashboardUrl: getDashboardUrl(),\r\n\t\tisInPreview: true,\r\n\t\tsearchPageUrl: 'index.html',\r\n\t},\r\n\tconfig: {\r\n\t\tapiUrl: process.env.REACT_APP_HAWK_PREVIEW_API_URL,\r\n\t\taddToCartURL: '',\r\n\t\tcompareItemURL: '',\r\n\t},\r\n};\r\n\r\n// This is dangerous if the state ever changes. If it is ever found out that we do change AppContextState, this export of the initial state isn't sufficient.\r\nexport default initialContext;\r\n\r\n/**\r\n * Interface for the global application context\r\n */\r\nexport interface AppState {\r\n\tsettings: AppSettings;\r\n\tconfig: PreviewConfig;\r\n\thawkConfig: HawksearchConfig;\r\n}\r\n","export enum PreviewFilterType {\r\n\tBoostAndBury = 'boostandbury',\r\n\tVisibilityRules = 'visibilityrules',\r\n\tPersonalizedBoost = 'personalizedboost',\r\n\tPopularityBoost = 'popularityboost',\r\n\tItemPin = 'itempin',\r\n\tAdvancedExplenation = 'advancedexplenation',\r\n\tFacetCoverage = 'facetcoverage',\r\n\tKeywordReplacement = 'keywordreplacement',\r\n}\r\n","import React, { useContext } from 'react';\r\n\r\nimport { usePreviewState, PreviewActor } from 'store/PreviewState';\r\nimport { PreviewStore } from 'store/Store';\r\n\r\nconst HawkPreviewContext = React.createContext({} as HawkPreviewContextValue);\r\n\r\nexport interface HawkPreviewContextValue {\r\n\t/** The store of data used throughout the application. */\r\n\tstore: PreviewStore;\r\n\t/**\r\n\t * An interface that allows actions to be performed on the store (such as performing API calls,\r\n\t * changing pages, etc).\r\n\t */\r\n\tactor: PreviewActor;\r\n}\r\n\r\nexport interface HawkStoreProviderProps {\r\n\tsiteDirectory: string;\r\n\tchildren: React.ReactNode;\r\n}\r\n\r\n/**\r\n * This component acts as the global store for the hawksearch application state. Only one instance of this component\r\n * should exist, and it should be the root level component.\r\n */\r\nfunction StoreProvider({ siteDirectory, children }: HawkStoreProviderProps) {\r\n\tconst [store, actor] = usePreviewState(siteDirectory);\r\n\r\n\treturn {children};\r\n}\r\n\r\n/**\r\n * Retrieves the global hawk preview store for use within a component.\r\n */\r\nexport function useHawksearchPreview() {\r\n\treturn useContext(HawkPreviewContext);\r\n}\r\n\r\nexport default StoreProvider;\r\n","import React from 'react';\r\nimport StoreProvider from './StoreProvider';\r\nimport PreviewConfigProvider from './PreviewConfigProvider';\r\nimport { PreviewConfig, AppSettings } from 'types';\r\n\r\nexport interface HawksearchPreviewProps {\r\n\tconfig: PreviewConfig;\r\n\tsettings: AppSettings;\r\n\tsiteDirectory: string;\r\n\tchildren: React.ReactNode;\r\n}\r\n\r\nfunction HawksearchPreview(props: HawksearchPreviewProps) {\r\n\treturn (\r\n\t\t\r\n\t\t\t{props.children}\r\n\t\t\r\n\t);\r\n}\r\n\r\nexport default HawksearchPreview;\r\n","import React from 'react';\r\n\r\nexport interface SpinnerProps {\r\n\tisVisible: boolean;\r\n}\r\n\r\nfunction Spinner({ isVisible }: SpinnerProps) {\r\n\tif (!isVisible) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\treturn (\r\n\t\t
    \r\n\t\t\t
    Loading...
    \r\n\t\t
    \r\n\t);\r\n}\r\n\r\nexport default Spinner;\r\n","import * as React from 'react';\r\nimport { Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap';\r\n\r\nexport interface ComparisionDialogProps {\r\n\tisOpen: boolean;\r\n\tonToggleModal: (isopen: boolean) => void;\r\n\tshowComparison: boolean;\r\n}\r\n\r\nfunction ComparisionDialog({ isOpen, onToggleModal, showComparison }: ComparisionDialogProps) {\r\n\tfunction redirectToComparePage() {\r\n\t\twindow.location.href = '/Product/ViewComparison';\r\n\t}\r\n\treturn (\r\n\t\t<>\r\n\t\t\t onToggleModal(false)} className=\"modal-md\">\r\n\t\t\t\t onToggleModal(false)}>\r\n\t\t\t\t\tProduct Compare\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t

    The selected product has been added to your comparison list.

    \r\n\t\t\t\t
    \r\n\t\t\t\t\r\n\t\t\t\t\t
    \r\n\t\t\t\t\t\t onToggleModal(false)}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\tAdd More\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t{showComparison && (\r\n\t\t\t\t\t\t\t redirectToComparePage()}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\tView Comparison\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t
    \r\n\t\t\t\t
    \r\n\t\t\t
    \r\n\t\t\r\n\t);\r\n}\r\n\r\nexport default ComparisionDialog;\r\n","import React, { useState, useEffect } from 'react';\r\n\r\nimport { useHawksearch, ResultItemProps, ResultImage, TrackingEvent } from 'react-hawksearch';\r\nimport ComparisionDialog from './ComparisionDialog';\r\n\r\nfunction ExtendedResultItem({ item }: ResultItemProps) {\r\n\tconst [showComparison, setShowComparison] = useState(false);\r\n\tconst [showComparisionDialog, setShowComparisionDialog] = useState(false);\r\n\r\n\tconst imageURL = item.getDocumentValue('image') || '';\r\n\r\n\tconst nameValue = item.getDocumentValue('name') || '';\r\n\tconst pageURL = item.getDocumentValue('url_detail') || '';\r\n\tconst sku = item.getDocumentValue('sku') || '';\r\n\tconst bestFragment = item.BestFragment || '';\r\n\tconst contentTypeValue = item.getDocumentValue('content_type') || '';\r\n\r\n\tfunction DrawingUrlClick(e, filetype: string, url: string, redir: string) {\r\n\t\twindow['drawing_file_url_click'](filetype, url, redir, sku);\r\n\t\te.preventDefault();\r\n\t}\r\n\tfunction trackClickEvent(e, url = '') {\r\n\t\tTrackingEvent.track('click', {\r\n\t\t\tevent: e,\r\n\t\t\tuniqueId: item.DocId,\r\n\t\t\ttrackingId: localStorage.getItem('tracking-id'),\r\n\t\t\turl,\r\n\t\t});\r\n\t}\r\n\r\n\tif (item.getDocumentValue('it') === 'Content') {\r\n\t\treturn (\r\n\t\t\t
  • \r\n\t\t\t\t\r\n\t\t\t\t\t
    trackClickEvent(e, pageURL)} className=\"title\">\r\n\t\t\t\t\t\t{nameValue}\r\n\t\t\t\t\t
    \r\n\t\t\t\t
    \r\n\t\t\t\t

    {contentTypeValue}

    \r\n\t\t\t\t{bestFragment ? (\r\n\t\t\t\t\t
    \r\n\t\t\t\t) : null}\r\n\t\t\t
  • \r\n\t\t);\r\n\t} else {\r\n\t\tconst retailPrice = null; // item.getDocumentValue('price_retail'); // pricing section is disabled per PM request\r\n\t\tconst salePrice = null; // getSalesPriceStr(docSalePrice); // pricing section is disabled per PM request\r\n\t\tconst pdfDrawingUrl = item.getDocumentValue('pdf_drawing_url');\r\n\t\tconst stepDrawingUrl = item.getDocumentValue('step_drawing_url');\r\n\t\tconst dxfDrawingUrl = item.getDocumentValue('dxf_drawing_url');\r\n\t\tconst instock = item.getDocumentValue('instock');\r\n\t\tconst itemType = item.getDocumentValue('itemtype');\r\n\t\tconst descriptionShort = item.getDocumentValue('description_short');\r\n\t\tconst isSnapEda = item.getDocumentValue('is_snapeda_available');\r\n\r\n\t\treturn (\r\n\t\t\t
  • \r\n\t\t\t\t
    \r\n\t\t\t\t\t
    \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
    \r\n\t\t\t\t\t
    \r\n\t\t\t\t\t\t{sku ? (\r\n\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t trackClickEvent(e, pageURL)}>\r\n\t\t\t\t\t\t\t\t\t\t{itemType === 'Parent' ? nameValue : sku}\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t{itemType === 'Parent' ? descriptionShort : nameValue}\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t{retailPrice ? (\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\tRetail Price: \r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t{new Intl.NumberFormat('en-US', {\r\n\t\t\t\t\t\t\t\t\t\t\tstyle: 'currency',\r\n\t\t\t\t\t\t\t\t\t\t\tcurrency: 'USD',\r\n\t\t\t\t\t\t\t\t\t\t}).format(retailPrice)}\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t) : null}\r\n\t\t\t\t\t\t\t{salePrice ? (\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\tSale Price: \r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t{new Intl.NumberFormat('en-US', {\r\n\t\t\t\t\t\t\t\t\t\t\tstyle: 'currency',\r\n\t\t\t\t\t\t\t\t\t\t\tcurrency: 'USD',\r\n\t\t\t\t\t\t\t\t\t\t}).format(salePrice)}\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t) : null}\r\n\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t{instock ? (\r\n\t\t\t\t\t\t\tinstock === 'Yes' ? (\r\n\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t\tIn stock\r\n\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t\tout of stock\r\n\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t) : null}\r\n\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t{pdfDrawingUrl ? (\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\tDrawingUrlClick(e, 'pdf', pdfDrawingUrl, location.pathname + location.search)\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\tPDF\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t) : null}\r\n\t\t\t\t\t\t\t{stepDrawingUrl ? (\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\tDrawingUrlClick(e, 'step', stepDrawingUrl, location.pathname + location.search)\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\tstep\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t) : null}\r\n\t\t\t\t\t\t\t{dxfDrawingUrl ? (\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\tDrawingUrlClick(e, 'dxf', dxfDrawingUrl, location.pathname + location.search)\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\tdfx\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t) : null}\r\n\t\t\t\t\t\t\t{isSnapEda ? (\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\tpcb\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t) : null}\r\n\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tView Details\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
  • \r\n\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n}\r\n\r\nexport default ExtendedResultItem;\r\n","import React from 'react';\r\nimport { useHawksearch } from 'react-hawksearch';\r\n\r\nfunction getTabCssClassName(tabValues, index: number): string {\r\n\tconst tabSelectedValue = tabValues.filter(t => t.Selected);\r\n\tconst bootstrapClasses = 'tab-item-link';\r\n\t// // Make default selection\r\n\tif (tabSelectedValue.length === 0 && index === 0) {\r\n\t\treturn `${bootstrapClasses} active`;\r\n\t}\r\n\tif (tabValues[index].Selected) {\r\n\t\treturn `${bootstrapClasses} active`;\r\n\t}\r\n\treturn `${bootstrapClasses}`;\r\n}\r\nfunction Tabs() {\r\n\tconst {\r\n\t\tstore: { searchResults },\r\n\t\tactor,\r\n\t} = useHawksearch();\r\n\r\n\tconst tabFacet = searchResults && searchResults.Facets.find(facet => facet.FieldType === 'tab');\r\n\tconst element = document.getElementsByClassName('hawk-results__listing');\r\n\tconst component = document.getElementById('react-app');\r\n\tif (!tabFacet) {\r\n\t\treturn null;\r\n\t}\r\n\treturn (\r\n\t\t
    \r\n\t\t\t
      \r\n\t\t\t\t{tabFacet.Values.map((tabValue, index, tabValues) => {\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t
    • \r\n\t\t\t\t\t\t\t {\r\n\t\t\t\t\t\t\t\t\tactor.setFacetValues(tabFacet, [tabValue]);\r\n\t\t\t\t\t\t\t\t\tif (tabValue.Label === 'Content') {\r\n\t\t\t\t\t\t\t\t\t\tif (element) {\r\n\t\t\t\t\t\t\t\t\t\t\telement[0].classList.remove('grid');\r\n\t\t\t\t\t\t\t\t\t\t\telement[0].classList.remove('list');\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\tif (component && component.getAttribute('data-display-mode') === 'grid') {\r\n\t\t\t\t\t\t\t\t\t\t\tif (element) {\r\n\t\t\t\t\t\t\t\t\t\t\t\telement[0].classList.add('grid');\r\n\t\t\t\t\t\t\t\t\t\t\t\telement[0].classList.remove('list');\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t} else if (\r\n\t\t\t\t\t\t\t\t\t\t\tcomponent &&\r\n\t\t\t\t\t\t\t\t\t\t\tcomponent.getAttribute('data-display-mode') === 'list'\r\n\t\t\t\t\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\t\t\t\t\tif (element) {\r\n\t\t\t\t\t\t\t\t\t\t\t\telement[0].classList.add('list');\r\n\t\t\t\t\t\t\t\t\t\t\t\telement[0].classList.remove('grid');\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{tabValue.Label}\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t
    • \r\n\t\t\t\t\t);\r\n\t\t\t\t})}\r\n\t\t\t
    \r\n\t\t
    \r\n\t);\r\n}\r\n\r\nexport default Tabs;\r\n","import React, { useState, useEffect } from 'react';\r\nimport {\r\n\tuseHawksearch,\r\n\tToolRow,\r\n\tResultListing,\r\n\tAutoCorrectSuggestion,\r\n\tSearchResultsLabel,\r\n\tSelections,\r\n} from 'react-hawksearch';\r\nimport ExtendedResultItem from 'components/hawk-sdk-overrides/ExtendedResultItem';\r\nimport Tabs from 'components/results/Tabs';\r\nfunction PreviewResults() {\r\n\tconst {\r\n\t\tstore: { isLoading, searchResults },\r\n\t} = useHawksearch();\r\n\t// end of overrides\r\n\tconst matchImageHeight = () => {\r\n\t\tconst nodeList = document.getElementsByClassName('match-image-height');\r\n\t\tconst elems = [].slice.call(nodeList);\r\n\t\tconst tallest = Math.max.apply(\r\n\t\t\tMath,\r\n\t\t\telems.map((elem, index) => {\r\n\t\t\t\telem.style.height = ''; // clean first\r\n\t\t\t\treturn elem.offsetHeight;\r\n\t\t\t})\r\n\t\t);\r\n\t\telems.forEach((elem, index, arr) => {\r\n\t\t\telem.style.height = tallest + 'px';\r\n\t\t});\r\n\t};\r\n\r\n\tconst matchPriceHeight = () => {\r\n\t\tconst nodeList = document.getElementsByClassName('match-price-height');\r\n\t\tconst elems = [].slice.call(nodeList);\r\n\t\tconst tallest = Math.max.apply(\r\n\t\t\tMath,\r\n\t\t\telems.map((elem, index) => {\r\n\t\t\t\telem.style.height = ''; // clean first\r\n\t\t\t\treturn elem.offsetHeight;\r\n\t\t\t})\r\n\t\t);\r\n\t\telems.forEach((elem, index, arr) => {\r\n\t\t\telem.style.height = tallest + 'px';\r\n\t\t});\r\n\t};\r\n\r\n\twindow.addEventListener('resize', matchImageHeight);\r\n\twindow.addEventListener('resize', matchPriceHeight);\r\n\tuseEffect(() => {\r\n\t\tmatchImageHeight();\r\n\t\tmatchPriceHeight();\r\n\t});\r\n\r\n\tif ((!searchResults || searchResults.Results.length === 0) && !isLoading) {\r\n\t\treturn (\r\n\t\t\t
    \r\n\t\t\t\t
    \r\n\t\t\t\t\t\r\n\t\t\t\t\t

    No Results Available

    \r\n\t\t\t\t
    \r\n\t\t\t
    \r\n\t\t);\r\n\t}\r\n\r\n\treturn (\r\n\t\t
    \r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t
    \r\n\t\t\t\t\r\n\t\t\t
    \r\n\t\t\t\r\n\t\t\t
    \r\n\t\t\t\t\r\n\t\t\t
    \r\n\t\t
    \r\n\t);\r\n}\r\n\r\nexport default PreviewResults;\r\n","import React from 'react';\r\nimport { FacetList, useHawksearch, PageContentItem } from 'react-hawksearch';\r\n\r\nconst VerticalZones = {\r\n\tleftBottom: 'LeftBottom',\r\n\tleftTop: 'LeftTop',\r\n\tfeaturedLeftBottom: 'FeaturedLeftBottom',\r\n\tfeaturedLeftTop: 'FeaturedLeftTop',\r\n};\r\n\r\nfunction PreviewFacetRail() {\r\n\tconst {\r\n\t\tstore: { searchResults },\r\n\t} = useHawksearch();\r\n\tlet matchedMerchandisingItems: PageContentItem[] = searchResults\r\n\t\t? searchResults.Merchandising.Items.filter(i => Object.values(VerticalZones).includes(i.Zone))\r\n\t\t: [];\r\n\r\n\tmatchedMerchandisingItems = matchedMerchandisingItems.concat(\r\n\t\tsearchResults\r\n\t\t\t? searchResults.FeaturedItems.Items.filter(i => Object.values(VerticalZones).includes(i.Zone))\r\n\t\t\t: []\r\n\t);\r\n\tif (searchResults && !searchResults.Results.length && matchedMerchandisingItems.length === 0) {\r\n\t\treturn null;\r\n\t}\r\n\treturn (\r\n\t\t
    \r\n\t\t\t
    \r\n\t\t\t\t\r\n\t\t\t\t\tFilter by:\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t
    \r\n\t\t
    \r\n\t);\r\n}\r\n\r\nexport default PreviewFacetRail;\r\n","interface ConfigurationInterface {\r\n\tsiteDirectory: string;\r\n\tclientGUID: string;\r\n\tindexName: string;\r\n\ttrackingAPI: string;\r\n\tbaseAPI: string;\r\n\tsearchAPI: string;\r\n\tautocompleteAPI: string;\r\n}\r\n\r\nclass AppConfiguration {\r\n\tprivate static instance: AppConfiguration;\r\n\tprivate siteDirectory: string;\r\n\tprivate clientGUID: string;\r\n\tprivate indexName: string;\r\n\tprivate trackingAPI: string;\r\n\tprivate baseAPI: string;\r\n\tprivate searchAPI: string;\r\n\tprivate autocompleteAPI: string;\r\n\r\n\t/**\r\n\t * The Singleton's constructor should always be private to prevent direct\r\n\t * construction calls with the `new` operator.\r\n\t */\r\n\tprivate constructor() {}\r\n\r\n\t/**\r\n\t * The static method that controls the access to the singleton instance.\r\n\t *\r\n\t * This implementation let you subclass the Singleton class while keeping\r\n\t * just one instance of each subclass around.\r\n\t */\r\n\tpublic static getInstance(url?: string): AppConfiguration {\r\n\t\tif (!AppConfiguration.instance) {\r\n\t\t\tAppConfiguration.instance = new AppConfiguration();\r\n\t\t}\r\n\r\n\t\treturn AppConfiguration.instance;\r\n\t}\r\n\r\n\tpublic setAppConfiguration(data: ConfigurationInterface) {\r\n\t\tthis.siteDirectory = data.siteDirectory;\r\n\t\tthis.clientGUID = data.clientGUID;\r\n\t\tthis.indexName = data.indexName;\r\n\t\tthis.trackingAPI = data.trackingAPI;\r\n\t\tthis.baseAPI = data.baseAPI;\r\n\t\tthis.searchAPI = data.searchAPI;\r\n\t\tthis.autocompleteAPI = data.autocompleteAPI;\r\n\t}\r\n\r\n\tpublic getAppConfiguration(): ConfigurationInterface {\r\n\t\treturn {\r\n\t\t\tsiteDirectory: this.siteDirectory,\r\n\t\t\tclientGUID: this.clientGUID,\r\n\t\t\tindexName: this.indexName,\r\n\t\t\ttrackingAPI: this.trackingAPI,\r\n\t\t\tbaseAPI: this.baseAPI,\r\n\t\t\tsearchAPI: this.searchAPI,\r\n\t\t\tautocompleteAPI: this.autocompleteAPI,\r\n\t\t};\r\n\t}\r\n}\r\n\r\nexport default AppConfiguration.getInstance();\r\n","import React from 'react';\r\nimport 'react-hawksearch/dist/esm/react-hawksearch.css';\r\nimport AppState from 'AppState';\r\nimport { Hawksearch, parseLocation } from 'react-hawksearch';\r\nimport { History, Location } from 'history';\r\nimport Spinner from 'components/shared/Spinner';\r\nimport { useHawksearchPreview } from 'components/StoreProvider';\r\nimport { Route, Switch } from 'react-router-dom';\r\nimport HawksearchPage from 'pages/HawksearchPage';\r\nimport CompareItemsPage from 'pages/CompareItemsPage';\r\nimport ProductDetailsPage from 'pages/ProductDetailsPage';\r\n\r\ninterface PreviewSearchProps {\r\n\thistory: History;\r\n\tlocation: Location;\r\n}\r\n\r\nfunction PreviewSearch(props: PreviewSearchProps) {\r\n\tconst { store: previewStore } = useHawksearchPreview();\r\n\tconst searchRequest = parseLocation(location, '/' + previewStore.siteDirectory);\r\n\treturn (\r\n\t\t<>\r\n\t\t\t{AppState.hawkConfig.clientGuid ? (\r\n\t\t\t\t\r\n\t\t\t\t\t{/* \r\n\t\t\t\t\t\t } />\r\n\t\t\t\t\t\t } />\r\n\t\t\t\t\t\t } />\r\n\t\t\t\t\t */}\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t) : (\r\n\t\t\t\t\r\n\t\t\t)}\r\n\t\t\r\n\t);\r\n}\r\n\r\nexport default PreviewSearch;\r\n","import React, { useState } from 'react';\r\nimport 'react-hawksearch/dist/esm/react-hawksearch.css';\r\n\r\nimport HawksearchPreview from 'components/HawksearchPreview';\r\nimport PreviewSearch from './previewSearch';\r\nimport PreviewClient from 'net/PreviewClient';\r\n\r\nimport 'rheostat/css/rheostat.css';\r\nimport 'react-dates/lib/css/_datepicker.css';\r\n\r\nimport ThemedStyleSheet from 'react-with-styles/lib/ThemedStyleSheet';\r\nimport cssInterface from 'react-with-styles-interface-css';\r\nimport RheostatDefaultTheme from 'rheostat/lib/themes/DefaultTheme';\r\nimport ReactDatesDefaultTheme from 'react-dates/lib/theme/DefaultTheme';\r\nimport AppState from 'AppState';\r\nimport Spinner from 'components/shared/Spinner';\r\nimport { ClientDataResponse } from '../models/ClientDataResponse';\r\n\r\nThemedStyleSheet.registerInterface(cssInterface);\r\nThemedStyleSheet.registerTheme({\r\n\t...RheostatDefaultTheme,\r\n\t...ReactDatesDefaultTheme,\r\n});\r\n\r\nasync function getClientGuid(\r\n\tsiteDirectory: string,\r\n\tsetClientGuid: React.Dispatch>\r\n): Promise {\r\n\tlet clientData = {} as ClientDataResponse;\r\n\tconst client = new PreviewClient(AppState.config);\r\n\r\n\ttry {\r\n\t\tclientData = await client.getClientData({\r\n\t\t\tSiteDirectory: siteDirectory || '',\r\n\t\t});\r\n\t} catch (error) {\r\n\t\tconsole.error('Detect client request error:', error);\r\n\t}\r\n\tif (!clientData.ClientGuid) {\r\n\t\tconsole.error(\"Couldn't detect client identifier!\");\r\n\t} else {\r\n\t\tAppState.config.clientGuid = clientData.ClientGuid;\r\n\t\tsetClientGuid(clientData.ClientGuid);\r\n\t\tAppState.config.clientIndexes = clientData.ClientIndexes;\r\n\t\tAppState.config.currentSearchIndex = clientData.CurrentIndex;\r\n\t\tAppState.hawkConfig.indexName = clientData.CurrentIndex;\r\n\t}\r\n}\r\n\r\nfunction Preview(props) {\r\n\t// const [clientGuid, setClientGuid] = useState('');\r\n\t// getClientGuid(props.siteDirectory, setClientGuid);\r\n\r\n\tAppState.config.clientGuid = props.clientGuid;\r\n\tAppState.hawkConfig.clientGuid = props.clientGuid;\r\n\tAppState.config.clientIndexes = [];\r\n\tAppState.config.currentSearchIndex = props.indexName;\r\n\tAppState.hawkConfig.indexName = props.indexName;\r\n\t// AppState.config.compareItemsURL = '/api/compare';\r\n\t// AppState.hawkConfig.trackEventUrl = process.env.REACT_APP_HAWK_TRACK_EVENT_URL;\r\n\r\n\tif (props.clientGuid) {\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t);\r\n\t} else {\r\n\t\treturn ;\r\n\t}\r\n}\r\n\r\nexport default Preview;\r\n","import * as React from 'react';\r\nimport GlobalState, { AppState } from 'AppState';\r\n\r\n/**\r\n * state for the app initializer for now\r\n */\r\ninterface AppInitializerState {\r\n\t// in case the settings would change in the meantime\r\n\tappContext: AppState;\r\n\tisInitializing: boolean;\r\n}\r\n\r\n/**\r\n * Component responsible for the initialization of the react app\r\n */\r\nclass AppInitializer extends React.Component {\r\n\tconstructor(props: any) {\r\n\t\tsuper(props);\r\n\r\n\t\tconst preloadedState: AppState = GlobalState;\r\n\r\n\t\tthis.state = {\r\n\t\t\tappContext: preloadedState,\r\n\t\t\tisInitializing: true,\r\n\t\t};\r\n\t}\r\n\r\n\t/**\r\n\t * Place to trigger front end initialization\r\n\t */\r\n\tpublic componentDidMount() {\r\n\t\tthis.setState({ isInitializing: false }, () => {\r\n\t\t\tconst loaderWrapper = document.getElementById('spinner-wrapper');\r\n\r\n\t\t\t// Remove loader after setting hidden class for transition.\r\n\t\t\tif (loaderWrapper) {\r\n\t\t\t\tloaderWrapper.classList.add('hidden');\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tpublic render() {\r\n\t\tif (this.state.isInitializing) {\r\n\t\t\treturn null;\r\n\t\t} else {\r\n\t\t\treturn <>{this.props.children};\r\n\t\t}\r\n\t}\r\n}\r\n\r\nexport default AppInitializer;\r\n","import { createBrowserHistory } from 'history';\r\n\r\nconst browserHistory = (window as any).browserHistory || createBrowserHistory();\r\nexport default browserHistory;\r\n","export class Request {\r\n\t/**\r\n\t * API Client Guid. Usually comes from the \"Tracking Key\" in the \"Account Info\" section of the hawk dashboard.\r\n\t */\r\n\tpublic ClientGuid: string;\r\n\r\n\t/**\r\n\t * Search term entered by a user. If keyword is not included, all items configured to be returned will be\r\n\t * returned. When this parameter is populated, the results will be matched against this term by the search\r\n\t * engine.\r\n\t */\r\n\tpublic Keyword?: string;\r\n\r\n\t/**\r\n\t * This is used by the Hawksearch Preview to set to true will display elements in a preview mode.\r\n\t *\r\n\t * You can use this if you desire additional score information returned.\r\n\t */\r\n\tpublic IsInPreview?: boolean;\r\n\r\n\tpublic Type?: 'Category' | 'Product' | 'Content' | 'Popular';\r\n\r\n\t/** The maximum number of results to return for selected @see Type */\r\n\tpublic ProductCount?: number;\r\n\r\n\t/** Flag set to true will display also full Document object from Elastic for Products and Content suggestions. */\r\n\tpublic DisplayFullResponse?: boolean;\r\n\r\n\t/**\r\n\t * An array of field names that will be returned in the response. If provided, only the fields listed will\r\n\t * be returned. If no FieldOverride value is sent, the Workbench configuration will be used.\r\n\t *\r\n\t * If the Skip from Custom flag is turned “on” for a field, it will not be returned in the response, even if\r\n\t * set in the FieldOverride parameter.\r\n\t */\r\n\tpublic FieldOverride?: string[];\r\n\r\n\t/** Client data. */\r\n\tpublic ClientData?: any;\r\n\r\n\tpublic IndexName?: string;\r\n}\r\n","import { ControllerStateAndHelpers } from 'downshift';\r\n\r\nexport enum SuggestionType {\r\n\tProduct = 'product',\r\n\tCategory = 'category',\r\n\tContent = 'content',\r\n\tPopular = 'popular',\r\n}\r\nexport abstract class Suggestion {\r\n\tpublic SuggestionType: SuggestionType;\r\n\tpublic constructor(suggestionType: SuggestionType) {\r\n\t\tthis.SuggestionType = suggestionType;\r\n\t}\r\n}\r\n\r\nexport interface SuggestionStrategy {\r\n\thandleItemChange(item: Suggestion, downshift: ControllerStateAndHelpers): void;\r\n\ttoString(item: Suggestion): string;\r\n}\r\n\r\nexport interface SuggestionStrategyMatch {\r\n\tSuggestionType: SuggestionType;\r\n\tSuggestionStrategy: SuggestionStrategy;\r\n}\r\n","import { Suggestion, SuggestionType, SuggestionStrategy } from './Suggestion';\r\nimport { ControllerStateAndHelpers } from 'downshift';\r\n\r\nexport class Category extends Suggestion {\r\n\t/** Display name of category (example: Men » Jackets). */\r\n\tpublic Value: string;\r\n\t/**\r\n\t * URL for displaying contents of the category, ex:\r\n\t * http://dev.hawksearch.net/sites/elasticdemo?department_nest=Jackets_4\r\n\t */\r\n\tpublic Url: string;\r\n\r\n\tpublic constructor(init: Category) {\r\n\t\tsuper(SuggestionType.Category);\r\n\t\tObject.assign(this, init);\r\n\t}\r\n}\r\n\r\nexport class CategoryStrategy implements SuggestionStrategy {\r\n\tpublic handleItemChange(item: Category, downshift: ControllerStateAndHelpers): void {\r\n\t\tlocation.assign(item.Url);\r\n\t}\r\n\r\n\tpublic toString(item: Category): string {\r\n\t\treturn this ? item.Value : '';\r\n\t}\r\n}\r\n","import { Suggestion, SuggestionStrategy, SuggestionType } from './Suggestion';\r\nimport { ControllerStateAndHelpers } from 'downshift';\r\n\r\nexport class Product extends Suggestion {\r\n\t/** Name of the item (if applicable). */\r\n\tpublic ProductName: string;\r\n\r\n\t/* Sku of the item (if applicable). */\r\n\tpublic Sku: string;\r\n\r\n\t/** URL of image of the item (if applicable). */\r\n\tpublic Thumb: string;\r\n\r\n\t/** URL of product page (if applicable). */\r\n\tpublic Url: string;\r\n\r\n\t/** HTML to display the item in autocomplete. */\r\n\tpublic Html: string;\r\n\r\n\t/**\r\n\t * This will only be populated if the request parameter @see Request.DisplayFullResponse is sent\r\n\t * as `true`.\r\n\t */\r\n\tpublic Results: any;\r\n\r\n\tpublic constructor(init: Product) {\r\n\t\tsuper(SuggestionType.Product);\r\n\t\tObject.assign(this, init);\r\n\t}\r\n}\r\n\r\nexport class ProductStrategy implements SuggestionStrategy {\r\n\tpublic handleItemChange(item: Product, downshift: ControllerStateAndHelpers): void {\r\n\t\tlocation.assign(item.Url);\r\n\t}\r\n\r\n\tpublic toString(item: Product): string {\r\n\t\treturn this ? item.ProductName : '';\r\n\t}\r\n}\r\n","import { SuggestionType, Suggestion, SuggestionStrategy } from './Suggestion';\r\nimport { ControllerStateAndHelpers } from 'downshift';\r\n\r\nexport class Content extends Suggestion {\r\n\t/** Display label for the content item in Autocomplete. */\r\n\tpublic Value: string;\r\n\r\n\t/** The URL for the link created. */\r\n\tpublic Url: string;\r\n\r\n\t/** The display label in HTML format, if applicable. */\r\n\tpublic Html: string;\r\n\r\n\tpublic Results: any;\r\n\r\n\tpublic constructor(init: Content) {\r\n\t\tsuper(SuggestionType.Content);\r\n\t\tObject.assign(this, init);\r\n\t}\r\n}\r\n\r\nexport class ContentStrategy implements SuggestionStrategy {\r\n\tpublic handleItemChange(item: Content, downshift: ControllerStateAndHelpers): void {\r\n\t\tlocation.assign(item.Url);\r\n\t}\r\n\r\n\tpublic toString(item: Content): string {\r\n\t\treturn this ? item.Value : '';\r\n\t}\r\n}\r\n","import { SuggestionType, Suggestion, SuggestionStrategy } from './Suggestion';\r\nimport { ControllerStateAndHelpers } from 'downshift';\r\n\r\nexport class Popular extends Suggestion {\r\n\t/** Display label for the popular search term. */\r\n\tpublic Value: string;\r\n\r\n\t/** The URL for the link created. */\r\n\tpublic Url: string;\r\n\r\n\tpublic constructor(init: Popular) {\r\n\t\tsuper(SuggestionType.Popular);\r\n\t\tObject.assign(this, init);\r\n\t}\r\n}\r\n\r\nexport class PopularStrategy implements SuggestionStrategy {\r\n\tpublic handleItemChange(item: Popular, downshift: ControllerStateAndHelpers): void {\r\n\t\tlocation.assign(item.Url);\r\n\t}\r\n\r\n\tpublic toString(item: Popular): string {\r\n\t\treturn this ? item.Value : '';\r\n\t}\r\n}\r\n","import { Category } from './Category';\r\nimport { Product } from './Product';\r\nimport { Content } from './Content';\r\nimport { Popular } from './Popular';\r\n\r\nexport class Response {\r\n\t/** Number of products that would be in search results if search was executed. */\r\n\tpublic Count: number;\r\n\t/** Number of content items that would be in search results if search was executed. */\r\n\tpublic ContentCount: number;\r\n\r\n\t/**\r\n\t * Pairs of display values and URLs for matching category names. The number of categories returned\r\n\t * is configured in the Hawksearch Workbench unless overridden by the request parameters.\r\n\t */\r\n\tpublic Categories: Category[];\r\n\r\n\tpublic Products: Product[];\r\n\r\n\t/**\r\n\t * A set of objects for each content item returned. The number returned is configured in the\r\n\t * Hawksearch Workbench > Keyword Search > Auto-complete > Update Top Content.\r\n\t */\r\n\tpublic Content: Content[];\r\n\r\n\t/**\r\n\t * A set of Value and Url for each popular search term. The definition of Popular can be defined in\r\n\t * the Hawksearch Workbench > Keyword Search > Auto-complete > Update Popular Searches.\r\n\t */\r\n\tpublic Popular: Popular[];\r\n\r\n\t/** Search website URL to be used to complete links. */\r\n\tpublic SearchWebsiteUrl: string;\r\n\r\n\t/** The name of the parameter used to pass the keyword entered by user. */\r\n\tpublic KeywordField: string;\r\n\r\n\t/**\r\n\t * Will be included in the response if there are results to display. The `CategoryHeading` contains\r\n\t * the text to display above the list of categories to display in Autocomplete.\r\n\t */\r\n\tpublic CategoryHeading?: string;\r\n\r\n\t/**\r\n\t * Will be included in the response if there are results to display. The `ContentHeading` contains\r\n\t * the text to display above the list of content items to display in Autocomplete.\r\n\t */\r\n\tpublic ContentHeading?: string;\r\n\r\n\t/**\r\n\t * Will be included in the response if there are results to display. The `ProductHeading` contains\r\n\t * the text to display above the list of products to display in Autocomplete.\r\n\t */\r\n\tpublic ProductHeading?: string;\r\n\r\n\t/**\r\n\t * Will be included in the response if there are results to display. The `PopularHeading` contains\r\n\t * the text to display above the list of popular search terms to display in Autocomplete.\r\n\t */\r\n\tpublic PopularHeading?: string;\r\n\r\n\t/**\r\n\t * Will be included in the response if there are results to display. The `ViewAllButtonLabel` contains\r\n\t * the text to display for the link to return all results from searching with the term entered.\r\n\t */\r\n\tpublic ViewAllButtonLabel?: string;\r\n\r\n\tpublic constructor(init: Response) {\r\n\t\tObject.assign(this, init);\r\n\r\n\t\tthis.Categories = init.Categories.map(r => new Category(r));\r\n\t\tthis.Products = init.Products.map(r => new Product(r));\r\n\t\tthis.Popular = init.Popular.map(r => new Popular(r));\r\n\t\tthis.Content = init.Content.map(r => new Content(r));\r\n\t}\r\n}\r\n\r\nexport interface ResponseProps {\r\n\tCount: number;\r\n\tContentCount: number;\r\n\tCategories: Category[];\r\n\tProducts: Product[];\r\n\tContent: Content[];\r\n\tPopular: Popular[];\r\n\tSearchWebsiteUrl: string;\r\n\tKeywordField: string;\r\n\tCategoryHeading?: string;\r\n\tContentHeading?: string;\r\n\tProductHeading?: string;\r\n\tPopularHeading?: string;\r\n\tViewAllButtonLabel?: string;\r\n}\r\n","import React from 'react';\r\nimport { ControllerStateAndHelpers } from 'downshift';\r\n\r\nimport { Response, Product, Popular, Category, Content } from './models/index';\r\nimport { Suggestion } from './models/Suggestion';\r\nimport { CustomSuggestionListProps } from './models/CustomSuggestionList';\r\n\r\nexport interface SearchSuggestionsListPreviewProps {\r\n\tisLoading: boolean;\r\n\tsearchResults: Response;\r\n\tdownshift: ControllerStateAndHelpers;\r\n\tonViewMatches: (downshift: ControllerStateAndHelpers) => void;\r\n\tSuggestionList?: React.ComponentType;\r\n}\r\n\r\nfunction hasAllEmpty(popular: Popular[], categories: Category[], products: Product[], content: Content[]) {\r\n\tconst hasPopular = popular && popular.length === 0;\r\n\tconst hasCategories = categories && categories.length === 0;\r\n\tconst hasProducts = products && products.length === 0;\r\n\tconst hasContent = content && content.length === 0;\r\n\treturn hasPopular && hasCategories && hasProducts && hasContent;\r\n}\r\n\r\nfunction SearchSuggestionsListPreview({\r\n\tisLoading,\r\n\tsearchResults,\r\n\tdownshift,\r\n\tonViewMatches,\r\n\tSuggestionList,\r\n}: SearchSuggestionsListPreviewProps) {\r\n\tconst { Popular: popular, Categories: categories, Products: products, Content: content } = searchResults;\r\n\r\n\tconst isRecordEmpty = hasAllEmpty(popular, categories, products, content);\r\n\r\n\tif (isRecordEmpty) {\r\n\t\treturn null;\r\n\t}\r\n\treturn SuggestionList ? (\r\n\t\t\r\n\t) : null;\r\n}\r\n\r\nexport default SearchSuggestionsListPreview;\r\n","import React, { useState, useEffect } from 'react';\r\nimport { ControllerStateAndHelpers } from 'downshift';\r\nimport axios, { CancelToken } from 'axios';\r\n\r\nimport { HawkClient } from 'react-hawksearch';\r\nimport { Response } from './models/index';\r\nimport { HawksearchConfig } from 'react-hawksearch';\r\n// import AppState from 'AppState';\r\nimport AppState from '../../AppState';\r\n// import { useHawkConfig } from 'components/ConfigProvider';\r\n// import SearchSuggestionsList from './SearchSuggestionsList';\r\nimport { Suggestion } from './models/Suggestion';\r\nimport { CustomSuggestionListProps } from './models/CustomSuggestionList';\r\nimport SearchSuggestionsListPreview from './SearchSuggestionListPreview';\r\n\r\nexport interface SearchSuggestionsPreviewProps {\r\n\t/** The user entered search string in the autocomplete text input. */\r\n\tquery: string;\r\n\r\n\t/** Downshift's render prop parameter. */\r\n\tdownshift: ControllerStateAndHelpers;\r\n\r\n\tonViewMatches: (downshift: ControllerStateAndHelpers) => void;\r\n\tSuggestionList?: React.ComponentType;\r\n}\r\n\r\nfunction SearchSuggestionsPreview({ query, downshift, onViewMatches, SuggestionList }: SearchSuggestionsPreviewProps) {\r\n\t// const { config } = useHawkConfig();\r\n\r\n\tconst client = new HawkClient(AppState.hawkConfig);\r\n\r\n\tconst [results, setResults] = useState({} as Response);\r\n\tconst [isLoading, setIsLoading] = useState(false);\r\n\r\n\t// debounce the input search string so that we only do an autocomplete query every so often\r\n\tuseEffect(() => {\r\n\t\t// default to 200ms if not specified\r\n\t\tconst debounceMs = 200;\r\n\r\n\t\tconst cts = axios.CancelToken.source();\r\n\t\tconst timeout = setTimeout(() => doAutocomplete(query, cts.token), debounceMs);\r\n\r\n\t\treturn () => {\r\n\t\t\tcts.cancel();\r\n\t\t\tclearTimeout(timeout);\r\n\t\t};\r\n\t}, [query]);\r\n\r\n\t/**\r\n\t * Performs an autocomplete request to the Hawk API and populates the result set of this component.\r\n\t * @param input The user entered search string that results will be autocompleted for.\r\n\t */\r\n\tasync function doAutocomplete(input: string, cancellationToken?: CancelToken) {\r\n\t\tsetIsLoading(true);\r\n\r\n\t\tlet response: Response | null = null;\r\n\t\tconst component = document.getElementById('react-app-autocomplete');\r\n\t\ttry {\r\n\t\t\tresponse = await client\r\n\t\t\t\t.autocomplete(\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tClientGuid: component\r\n\t\t\t\t\t\t\t? component.getAttribute('data-client-guid')\r\n\t\t\t\t\t\t\t: '58796d6827c24966b5fd586d565e773f',\r\n\t\t\t\t\t\tKeyword: decodeURIComponent(input),\r\n\t\t\t\t\t\tIndexName: '',\r\n\t\t\t\t\t\tDisplayFullResponse: true,\r\n\t\t\t\t\t},\r\n\t\t\t\t\tcancellationToken\r\n\t\t\t\t)\r\n\t\t\t\t.then(o => {\r\n\t\t\t\t\t// ensure, returned object will return response\r\n\t\t\t\t\t// since by default, axios uses JSON.parse to parse an object,\r\n\t\t\t\t\t// it doesn't recognize it as Response type - this line is to prevent it\r\n\t\t\t\t\treturn Object.assign(new Response(o));\r\n\t\t\t\t});\r\n\t\t} catch (error) {\r\n\t\t\tif (axios.isCancel(error)) {\r\n\t\t\t\t// if the request was cancelled, it's because this component was updated\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tconsole.error('Autocomplete request error:', error);\r\n\t\t}\r\n\r\n\t\tsetIsLoading(false);\r\n\r\n\t\tif (response) {\r\n\t\t\tsetResults(response);\r\n\t\t}\r\n\t}\r\n\r\n\treturn (\r\n\t\t
    \r\n\t\t\t\r\n\t\t
    \r\n\t);\r\n}\r\n\r\nexport default SearchSuggestionsPreview;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { DownshiftState, StateChangeOptions, ControllerStateAndHelpers } from 'downshift';\r\n\r\nimport SearchSuggestionsPreview from './SearchSuggestionsPreview';\r\nimport { Suggestion, SuggestionStrategyMatch } from './models/Suggestion';\r\nimport { getAutocompleteStrategies } from 'react-hawksearch';\r\nimport { CustomSuggestionListProps } from './models/CustomSuggestionList';\r\n\r\nimport Downshift from 'downshift';\r\n\r\nexport interface SearchBoxBasePreviewProps {\r\n\tinitialValue?: string;\r\n\tonSubmit: (event: React.KeyboardEvent, downshift: ControllerStateAndHelpers) => void;\r\n\tonViewMatches: (downshift: ControllerStateAndHelpers) => void;\r\n\tSuggestionList?: React.ComponentType;\r\n}\r\n\r\nfunction SearchBoxBasePreview({ initialValue, onSubmit, onViewMatches, SuggestionList }: SearchBoxBasePreviewProps) {\r\n\tconst strategies = getAutocompleteStrategies([]);\r\n\tconst [initialInput, setInitialInput] = useState('');\r\n\r\n\tuseEffect(() => {\r\n\t\tsetInitialInput(decodeURIComponent(initialValue || ''));\r\n\t}, [initialValue]);\r\n\r\n\t/** Called when the internal state of downshift changes - we're handling a couple custom behaviors here */\r\n\tfunction handleStateChange(\r\n\t\tstate: DownshiftState,\r\n\t\tchanges: StateChangeOptions\r\n\t): Partial> {\r\n\t\tif (\r\n\t\t\t// NOTE: these strings are hardcoded to support code splitting downshift.\r\n\t\t\t// using the constants from the package will prevent code splitting from operating correctly\r\n\t\t\tchanges.type === '__autocomplete_mouseup__' ||\r\n\t\t\tchanges.type === '__autocomplete_keydown_enter__' ||\r\n\t\t\tchanges.type === '__autocomplete_click_item__'\r\n\t\t) {\r\n\t\t\t// when:\r\n\t\t\t//\r\n\t\t\t// 1. the mouse the clicked outside of downshift\r\n\t\t\t// 2. enter is pressed on the keyboard\r\n\t\t\t// 3. an item is selected from the dropdown\r\n\t\t\t//\r\n\t\t\t// then we want to retain the input value that was originally typed in. by default downshift\r\n\t\t\t// will clear the input value, so we're overriding this behavior here.\r\n\t\t\treturn { ...changes, inputValue: state.inputValue };\r\n\t\t}\r\n\r\n\t\treturn changes;\r\n\t}\r\n\r\n\t/** Called when an item has been selected from the autocomplete results. */\r\n\tfunction handleItemChange(item: Suggestion, downshift: ControllerStateAndHelpers) {\r\n\t\tif (!item) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst matchedStrategy = strategies.find(strategy => strategy.SuggestionType === item.SuggestionType);\r\n\t\tif (!matchedStrategy) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t(matchedStrategy as SuggestionStrategyMatch).SuggestionStrategy.handleItemChange(item, downshift);\r\n\t}\r\n\r\n\tfunction handleToString(item: Suggestion): string {\r\n\t\tif (!item) {\r\n\t\t\treturn '';\r\n\t\t}\r\n\t\tconst matchedStrategy = strategies.find(strategy => strategy.SuggestionType === item.SuggestionType);\r\n\t\tif (!matchedStrategy) {\r\n\t\t\treturn '';\r\n\t\t}\r\n\t\treturn (matchedStrategy as SuggestionStrategyMatch).SuggestionStrategy.toString(item);\r\n\t}\r\n\r\n\treturn (\r\n\t\t{'Loading'}...}>\r\n\t\t\t handleToString(item)}\r\n\t\t\t\tonChange={handleItemChange}\r\n\t\t\t\tinitialInputValue={decodeURIComponent(initialValue || '')}\r\n\t\t\t\tinputValue={initialInput}\r\n\t\t\t>\r\n\t\t\t\t{(options: ControllerStateAndHelpers) => {\r\n\t\t\t\t\tconst { isOpen, inputValue, getInputProps, openMenu, closeMenu } = options;\r\n\r\n\t\t\t\t\tconst showSuggestions = isOpen && inputValue && inputValue.length > 0;\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t {\r\n\t\t\t\t\t\t\t\t\t\t\tif (onSubmit) {\r\n\t\t\t\t\t\t\t\t\t\t\t\tonSubmit(event, options);\r\n\t\t\t\t\t\t\t\t\t\t\t\tcloseMenu();\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\r\n\t\t\t\t\t\t\t\t\t\t// when the input is focused again, reopen the downshift menu\r\n\t\t\t\t\t\t\t\t\t\tonFocus: () => {\r\n\t\t\t\t\t\t\t\t\t\t\tif (inputValue && inputValue.length > 0) {\r\n\t\t\t\t\t\t\t\t\t\t\t\topenMenu();\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\tonChange: event => {\r\n\t\t\t\t\t\t\t\t\t\t\tsetInitialInput(event.target.value);\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\r\n\t\t\t\t\t\t\t\t\t\tplaceholder: 'What can we help you find?',\r\n\t\t\t\t\t\t\t\t\t\t'aria-labelledby': 'autocomplete-search-box',\r\n\t\t\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t{showSuggestions ? (\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t) : null}\r\n\t\t\t\t\t\t
    \r\n\t\t\t\t\t);\r\n\t\t\t\t}}\r\n\t\t\t\r\n\t\t
    \r\n\t);\r\n}\r\n\r\nexport default SearchBoxBasePreview;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { ControllerStateAndHelpers } from 'downshift';\r\nimport { history, parseSearchQueryString } from 'react-hawksearch';\r\nimport { Product } from './models/index';\r\nimport { CustomSuggestionListProps } from './models/CustomSuggestionList';\r\nimport SearchBoxBasePreview from './SearchBoxBasePreview';\r\n\r\n/**\r\n * This component is the search input box (with autosuggest) that should be utilized on search pages. For a simple\r\n * search input box that is meant to be used on non-search pages (or globally), see `GlobalSearchBox`.\r\n */\r\n\r\ninterface SearchBoxPreviewProps {\r\n\tSuggestionList?: React.ComponentType;\r\n}\r\n\r\nfunction SearchBoxPreview({ SuggestionList }: SearchBoxPreviewProps) {\r\n\t// const { store, actor } = useHawksearch();\r\n\tconst [initialKeyword, setInitialKeyword] = useState('');\r\n\r\n\tuseEffect(() => {\r\n\t\tconst objs = parseSearchQueryString(location.search);\r\n\t\tsetInitialKeyword(objs.Keyword);\r\n\t}, []);\r\n\r\n\tfunction handleSubmit(event: React.KeyboardEvent, downshift: ControllerStateAndHelpers) {\r\n\t\tif (event.key === 'Enter') {\r\n\t\t\tif (location.pathname.indexOf('search') !== -1) {\r\n\t\t\t\thistory.push({\r\n\t\t\t\t\tsearch: `?keyword=${event.currentTarget.value}`,\r\n\t\t\t\t});\r\n\t\t\t} else {\r\n\t\t\t\t// redirect if it's not on search page\r\n\t\t\t\twindow.location.href = `/search?keyword=${encodeURIComponent(event.currentTarget.value)}`;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// On Select view all matches from suggestion list\r\n\tfunction handleViewAllMatches(downshift: ControllerStateAndHelpers) {\r\n\t\tconst { inputValue, closeMenu } = downshift;\r\n\t\thistory.push({\r\n\t\t\tsearch: `?keyword=${inputValue}`,\r\n\t\t});\r\n\t\tcloseMenu();\r\n\t}\r\n\r\n\treturn (\r\n\t\t
    \r\n\t\t\t\r\n\t\t
    \r\n\t);\r\n}\r\n\r\nexport default SearchBoxPreview;\r\n","import React, { useEffect, useState } from 'react';\r\nimport axios, { CancelToken } from 'axios';\r\nimport PreviewClient from 'net/PreviewClient';\r\nimport { TrackingEvent } from 'react-hawksearch';\r\nimport { AutocompleteResponse } from './../../models/AutocompleteResponse';\r\nimport browserHistory from 'utils/history';\r\n\r\nfunction limitStrLength(text, maxlength) {\r\n\tif (text.length > maxlength - 3) {\r\n\t\treturn text.substring(0, maxlength).trimEnd() + '...';\r\n\t} else {\r\n\t\treturn text;\r\n\t}\r\n}\r\n\r\nfunction getAtLeastOneExist(popular, categories, products, content) {\r\n\tconst hasPopular = popular && popular.length > 0;\r\n\tconst hasCategories = categories && categories.length > 0;\r\n\tconst hasProducts = products && products.length > 0;\r\n\tconst hasContent = content && content.length > 0;\r\n\treturn hasPopular || hasCategories || hasProducts || hasContent;\r\n}\r\n\r\nenum SuggestType {\r\n\tPopularSearches = 1,\r\n\tTopCategories = 2,\r\n\tTopProductMatches = 3,\r\n\tTopContentMatches = 4,\r\n}\r\n\r\nfunction ProductsComponent({\r\n\tproducts,\r\n\tpopular,\r\n\tProductHeading,\r\n\tPopularHeading,\r\n\tgetItemProps,\r\n\tredirectItemDetails,\r\n\tisAtleastOneExist,\r\n\tonViewMatches,\r\n\tdownshift,\r\n\tsearchedKeyword,\r\n}) {\r\n\treturn (\r\n\t\t
      \r\n\t\t\t{products && products.length ? (\r\n\t\t\t\t<>\r\n\t\t\t\t\t

      {ProductHeading}

      \r\n\t\t\t\t\t{products.map((item, index) => (\r\n\t\t\t\t\t\t {\r\n\t\t\t\t\t\t\t\t\tredirectItemDetails(item.Results.pageurl);\r\n\t\t\t\t\t\t\t\t\tTrackingEvent.track('autocompleteclick', {\r\n\t\t\t\t\t\t\t\t\t\tkeyword: downshift.inputValue,\r\n\t\t\t\t\t\t\t\t\t\tsuggestType: SuggestType.TopProductMatches,\r\n\t\t\t\t\t\t\t\t\t\tname: item.ProductName,\r\n\t\t\t\t\t\t\t\t\t\turl: item.Url,\r\n\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t
      \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t{item.Sku\r\n\t\t\t\t\t\t\t\t\t? item.Results.Document.itemtype[0] === 'Parent'\r\n\t\t\t\t\t\t\t\t\t\t? item.ProductName\r\n\t\t\t\t\t\t\t\t\t\t: item.Sku\r\n\t\t\t\t\t\t\t\t\t: null}\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t{item.Results.Document.itemtype[0] === 'Parent' &&\r\n\t\t\t\t\t\t\t\titem.Results.Document.description_short\r\n\t\t\t\t\t\t\t\t\t? limitStrLength(item.Results.Document.description_short[0], 150)\r\n\t\t\t\t\t\t\t\t\t: item.ProductName}\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t))}\r\n\t\t\t\t\r\n\t\t\t) : null}\r\n\t\t\t{popular && popular.length ? (\r\n\t\t\t\t<>\r\n\t\t\t\t\t

      {PopularHeading}

      \r\n\t\t\t\t\t{popular.map((item, index) => (\r\n\t\t\t\t\t\t {\r\n\t\t\t\t\t\t\t\t\tredirectItemDetails(item.Url);\r\n\t\t\t\t\t\t\t\t\tTrackingEvent.track('autocompleteclick', {\r\n\t\t\t\t\t\t\t\t\t\tkeyword: downshift.inputValue,\r\n\t\t\t\t\t\t\t\t\t\tsuggestType: SuggestType.TopProductMatches,\r\n\t\t\t\t\t\t\t\t\t\tname: item.Value,\r\n\t\t\t\t\t\t\t\t\t\turl: item.Url,\r\n\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t
      \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t))}\r\n\t\t\t\t\r\n\t\t\t) : null}\r\n\t\t
    \r\n\t);\r\n}\r\n\r\nfunction CustomSuggestionListPreview({ downshift, searchResults, onViewMatches, isLoading }) {\r\n\tconst {\r\n\t\tPopular: popular,\r\n\t\tCategories: categories,\r\n\t\tProducts: products,\r\n\t\tContent: content,\r\n\t\tPopularHeading,\r\n\t\tCategoryHeading,\r\n\t\tProductHeading,\r\n\t\tContentHeading,\r\n\t} = searchResults;\r\n\r\n\t// const { actor, store } = useHawksearch();\r\n\tconst [hoverKeyword, setHoverKeyword] = useState('');\r\n\tconst [searchedKeyword, setSearchedKeyword] = useState('');\r\n\tconst [hoverProducts, setHoverProducts] = useState([] as Array<{ Value: string; Url: string }>);\r\n\tconst [hoverPopular, setHoverPopular] = useState([] as Array<{ Value: string; Url: string }>);\r\n\tconst { getItemProps, getMenuProps, highlightedIndex, getInputProps } = downshift;\r\n\tconst isAtleastOneExist = getAtLeastOneExist(popular, categories, products, content);\r\n\tuseEffect(() => {\r\n\t\tconst cts = axios.CancelToken.source();\r\n\t\tif (hoverKeyword) {\r\n\t\t\tdoAutocomplete(hoverKeyword, cts.token);\r\n\t\t}\r\n\t\treturn () => {\r\n\t\t\tcts.cancel();\r\n\t\t};\r\n\t}, [hoverKeyword]);\r\n\r\n\tasync function doAutocomplete(input: string, cancellationToken?: CancelToken) {\r\n\t\tconst component = document.getElementById('react-app-autocomplete');\r\n\t\tlet baseAPI = '';\r\n\t\tlet clientGUID = '';\r\n\t\tif (component) {\r\n\t\t\tbaseAPI = component.getAttribute('data-base-api') || '';\r\n\t\t\tclientGUID = component.getAttribute('data-client-guid') || '';\r\n\t\t}\r\n\t\tsetSearchedKeyword(input);\r\n\t\tconst client = new PreviewClient({\r\n\t\t\tapiUrl: baseAPI,\r\n\t\t\tcompareItemsURL: '',\r\n\t\t\tcompareItemURL: '',\r\n\t\t\taddToCartURL: '',\r\n\t\t});\r\n\r\n\t\tlet response: AutocompleteResponse | null = null;\r\n\r\n\t\ttry {\r\n\t\t\tresponse = await client.autocomplete(\r\n\t\t\t\t{\r\n\t\t\t\t\tClientGuid: clientGUID,\r\n\t\t\t\t\tKeyword: decodeURIComponent(input),\r\n\t\t\t\t\tIndexName: '',\r\n\t\t\t\t\tDisplayFullResponse: true,\r\n\t\t\t\t\tFacetSelections: {},\r\n\t\t\t\t},\r\n\t\t\t\tcancellationToken\r\n\t\t\t);\r\n\t\t} catch (error) {\r\n\t\t\tif (axios.isCancel(error)) {\r\n\t\t\t\t// if the request was cancelled, it's because this component was updated\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tconsole.error('Autocomplete request error:', error);\r\n\t\t}\r\n\r\n\t\tif (response) {\r\n\t\t\tsetHoverProducts(response.Products);\r\n\t\t\tsetHoverPopular(response.Popular);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction setKeyword(keyword: string) {\r\n\t\tsetHoverKeyword(keyword);\r\n\t}\r\n\r\n\tfunction redirectItemDetails(url: string) {\r\n\t\tbrowserHistory.push({\r\n\t\t\tpathname: url,\r\n\t\t});\r\n\t}\r\n\treturn (\r\n\t\t
      \r\n\t\t\t{isLoading &&
    • Loading...
    • }\r\n\t\t\t{hoverProducts && hoverProducts.length ? (\r\n\t\t\t\t\r\n\t\t\t) : (\r\n\t\t\t\t\r\n\t\t\t)}\r\n\t\t
    \r\n\t);\r\n}\r\n\r\nexport default CustomSuggestionListPreview;\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { parseLocation } from 'react-hawksearch';\r\nimport SearchBoxPreview from 'components/preview-autocomplete/SearchBoxPreview';\r\nimport CustomSuggestionListPreview from 'components/preview-autocomplete/CustomSuggestionListPreview';\r\n\r\nwindow.addEventListener('load', () => {\r\n\tconst component = document.getElementById('react-app-autocomplete');\r\n\tif (component) {\r\n\t\tconst baseAPI = component.getAttribute('data-base-api');\r\n\t\tconst apiUrlObj = {\r\n\t\t\tsearchApi: component.getAttribute('data-search-api'),\r\n\t\t\tautocompleteApi: component.getAttribute('data-autocomplete-api'),\r\n\t\t};\r\n\r\n\t\tif (!baseAPI || !apiUrlObj) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tconst hawkConfig = {\r\n\t\t\tclientGuid: component.getAttribute('data-client-guid'),\r\n\t\t\tbaseAPI,\r\n\t\t\tsearchPageUrl: component.getAttribute('data-search-page'),\r\n\t\t\tindexName: component.getAttribute('data-index-name'),\r\n\t\t\ttrackEventUrl: component.getAttribute('data-tracking-api'),\r\n\t\t\t...apiUrlObj,\r\n\t\t};\r\n\r\n\t\tfunction SearcBox() {\r\n\t\t\tconst searchRequest = parseLocation(location);\r\n\t\t\treturn (\r\n\t\t\t\t<>\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t);\r\n\t\t}\r\n\t\tReactDOM.render(, component);\r\n\t}\r\n\treturn;\r\n});\r\n","import React, { useState } from 'react';\r\n\r\nimport { ResultImage, ResultItemProps, useHawksearch, TrackingEvent } from 'react-hawksearch';\r\n\r\nfunction FeatureItem({ item, bannerId, campaignId }: ResultItemProps) {\r\n\tconst {\r\n\t\tstore: { searchResults },\r\n\t} = useHawksearch();\r\n\tconst price = parseFloat(item.getDocumentValue('price') || '');\r\n\tconst imageURL = item.getDocumentValue('image') || '';\r\n\r\n\tconst nameValue = item.getDocumentValue('name') || '';\r\n\tconst pageURL = item.getDocumentValue('url_detail') || '';\r\n\tconst sku = item.getDocumentValue('sku') || '';\r\n\tconst bestFragment = item.BestFragment || '';\r\n\tconst contentTypeValue = item.getDocumentValue('content_type') || '';\r\n\tconst itemType = item.getDocumentValue('itemtype');\r\n\tconst descriptionShort = item.getDocumentValue('description_short');\r\n\tfunction trackEvent(type: string) {\r\n\t\tif (searchResults && searchResults.TrackingId) {\r\n\t\t\tTrackingEvent.track('bannerclick', {\r\n\t\t\t\tbannerId,\r\n\t\t\t\tcampaignId,\r\n\t\t\t\ttrackingId: searchResults.TrackingId,\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\tfunction onImageLoad() {\r\n\t\ttrackEvent('bannerimpression');\r\n\t}\r\n\tfunction trackClickEvent(e, url = '') {\r\n\t\tTrackingEvent.track('click', {\r\n\t\t\tevent: e,\r\n\t\t\tuniqueId: item.DocId,\r\n\t\t\ttrackingId: localStorage.getItem('tracking-id'),\r\n\t\t\turl,\r\n\t\t});\r\n\t}\r\n\treturn (\r\n\t\t
    trackEvent('bannerclick')}>\r\n\t\t\t\r\n\t\t\t
    \r\n\t\t\t\t
    {item.getDocumentValue('sku') || ''}
    \r\n\t\t\t\t
    {item.getDocumentValue('name') || ''}
    \r\n\t\t\t\t trackClickEvent(e, pageURL)} href=\"{{pageURL}}\" className=\"more\">\r\n\t\t\t\t\tView Details\r\n\t\t\t\t\r\n\t\t\t
    \r\n\t\t
    \r\n\t);\r\n}\r\n\r\nexport default FeatureItem;\r\n","import * as React from 'react';\r\nimport { Tooltip, Button } from 'reactstrap';\r\nimport {\r\n\tPageContentItem,\r\n\tResult,\r\n\tFeaturedItem,\r\n\tContentType,\r\n\tTrigger as HawkTrigger,\r\n\tuseHawksearch,\r\n\tTrackingEvent,\r\n} from 'react-hawksearch';\r\nimport Spinner from 'components/shared/Spinner';\r\nimport FeatureItem from 'components/feature-item/FeatureItem';\r\nimport TriggerDescriptionTooltip from './triggerDescriptionTooltip';\r\nimport HelpSVG from 'components/shared/svg/help';\r\nimport { useHawksearchPreview } from 'components/StoreProvider';\r\n\r\nexport interface MerchandisingBannerProps {\r\n\tBannerZone: string;\r\n}\r\n\r\ninterface TrackEventPayloadProps {\r\n\tbannerId: number;\r\n\tcampaignId: number;\r\n\ttrackingId?: string;\r\n}\r\n\r\nfunction MerchandisingBanner({ BannerZone }: MerchandisingBannerProps) {\r\n\tconst {\r\n\t\tstore: { isLoading, searchResults },\r\n\t} = useHawksearch();\r\n\tconst { store } = useHawksearchPreview();\r\n\r\n\tlet matchedMerchandisingItems: PageContentItem[] = searchResults\r\n\t\t? searchResults.Merchandising.Items.filter(i => i.Zone === BannerZone)\r\n\t\t: [];\r\n\r\n\tmatchedMerchandisingItems = matchedMerchandisingItems.concat(\r\n\t\tsearchResults ? searchResults.FeaturedItems.Items.filter(i => i.Zone === BannerZone) : []\r\n\t);\r\n\r\n\tfunction getBannerHtml(matchedMerchandisingItem: PageContentItem) {\r\n\t\treturn { __html: matchedMerchandisingItem.Output };\r\n\t}\r\n\r\n\tfunction renderBanner(merchandisingItem: PageContentItem, bannerIndex: number) {\r\n\t\tfunction trackEvent(type: string, trackEventPayload: TrackEventPayloadProps) {\r\n\t\t\tif (searchResults && searchResults.TrackingId) {\r\n\t\t\t\tTrackingEvent.track(type, {\r\n\t\t\t\t\t...trackEventPayload,\r\n\t\t\t\t\ttrackingId: searchResults.TrackingId,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tswitch (merchandisingItem.ContentType) {\r\n\t\t\tcase ContentType.Custom:\r\n\t\t\t\treturn (\r\n\t\t\t\t\t
    \r\n\t\t\t\t\t\t {\r\n\t\t\t\t\t\t\t\ttrackEvent('bannerclick', {\r\n\t\t\t\t\t\t\t\t\tbannerId: merchandisingItem.BannerId,\r\n\t\t\t\t\t\t\t\t\tcampaignId: merchandisingItem.CampaignId,\r\n\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\tclassName=\"text-left\"\r\n\t\t\t\t\t\t\tdangerouslySetInnerHTML={getBannerHtml(merchandisingItem)}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t
    \r\n\t\t\t\t);\r\n\t\t\tcase ContentType.Widget:\r\n\t\t\t\treturn (\r\n\t\t\t\t\t
    \r\n\t\t\t\t\t\t {\r\n\t\t\t\t\t\t\t\ttrackEvent('bannerclick', {\r\n\t\t\t\t\t\t\t\t\tbannerId: merchandisingItem.BannerId,\r\n\t\t\t\t\t\t\t\t\tcampaignId: merchandisingItem.CampaignId,\r\n\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\tclassName=\"text-left\"\r\n\t\t\t\t\t\t\tdangerouslySetInnerHTML={getBannerHtml(merchandisingItem)}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t
    \r\n\t\t\t\t);\r\n\t\t\tcase ContentType.Image:\r\n\t\t\t\tconst absoluteUrlTester = new RegExp('^https?://|^//', 'i');\r\n\t\t\t\tlet imageURL = merchandisingItem.ImageUrl;\r\n\t\t\t\tif (!absoluteUrlTester.test(merchandisingItem.ImageUrl) && store.websiteUrl) {\r\n\t\t\t\t\timageURL = store.websiteUrl + imageURL;\r\n\t\t\t\t}\r\n\t\t\t\treturn (\r\n\t\t\t\t\t
    \r\n\t\t\t\t\t\t {\r\n\t\t\t\t\t\t\t\ttrackEvent('bannerclick', {\r\n\t\t\t\t\t\t\t\t\tbannerId: merchandisingItem.BannerId,\r\n\t\t\t\t\t\t\t\t\tcampaignId: merchandisingItem.CampaignId,\r\n\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\thref={merchandisingItem.ForwardUrl}\r\n\t\t\t\t\t\t\ttitle={merchandisingItem.ImageTitle}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t {\r\n\t\t\t\t\t\t\t\t\ttrackEvent('bannerimpression', {\r\n\t\t\t\t\t\t\t\t\t\tbannerId: merchandisingItem.BannerId,\r\n\t\t\t\t\t\t\t\t\t\tcampaignId: merchandisingItem.CampaignId,\r\n\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\tsrc={imageURL}\r\n\t\t\t\t\t\t\t\ttitle={merchandisingItem.ImageTitle}\r\n\t\t\t\t\t\t\t\talt={merchandisingItem.AltTag}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
    \r\n\t\t\t\t);\r\n\t\t\tcase ContentType.Featured:\r\n\t\t\t\tconst featuredItem = merchandisingItem as FeaturedItem;\r\n\t\t\t\treturn (\r\n\t\t\t\t\t
    \r\n\t\t\t\t\t\t

    {featuredItem.Title}

    \r\n\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t{featuredItem.Items.length\r\n\t\t\t\t\t\t\t\t? featuredItem.Items.map((result: Result) => {\r\n\t\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t })\r\n\t\t\t\t\t\t\t\t: null}\r\n\t\t\t\t\t\t
    \r\n\t\t\t\t\t
    \r\n\t\t\t\t);\r\n\t\t\tdefault:\r\n\t\t\t\treturn null;\r\n\t\t}\r\n\t}\r\n\tif (isLoading) {\r\n\t\treturn ;\r\n\t} else if (matchedMerchandisingItems.length > 0) {\r\n\t\treturn (\r\n\t\t\t
    \r\n\t\t\t\t{matchedMerchandisingItems.map((merchendisingItem, index) => {\r\n\t\t\t\t\treturn renderBanner(merchendisingItem, index);\r\n\t\t\t\t})}\r\n\t\t\t
    \r\n\t\t);\r\n\t} else {\r\n\t\treturn null;\r\n\t}\r\n}\r\n\r\nexport default MerchandisingBanner;\r\n","import React, { useEffect } from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport 'react-hawksearch/dist/esm/react-hawksearch.css';\r\n\r\nimport { parseLocation, Hawksearch, QueryStringListenerSF, TrackingEvent } from 'react-hawksearch';\r\nimport PreviewFacetRail from 'components/results/PreviewFacetRail';\r\nimport PreviewResults from 'components/results/PreviewResults';\r\nimport MerchandisingBanner from 'components/merchandising-banner/merchandisingBanner';\r\n\r\ninterface ResultsPageProps {\r\n\tdataDisplayMode: string | null;\r\n}\r\n\r\nwindow.addEventListener('load', () => {\r\n\tconst component = document.getElementById('react-app');\r\n\tif (component) {\r\n\t\tconst baseAPI = component.getAttribute('data-base-api');\r\n\t\tconst apiUrlObj = {\r\n\t\t\tsearchApi: component.getAttribute('data-search-api'),\r\n\t\t\tautocompleteApi: component.getAttribute('data-autocomplete-api'),\r\n\t\t};\r\n\r\n\t\tif (!baseAPI || !apiUrlObj) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tconst hawkConfig = {\r\n\t\t\tclientGuid: component.getAttribute('data-client-guid'),\r\n\t\t\tbaseAPI,\r\n\t\t\tsearchPageUrl: component.getAttribute('data-search-page'),\r\n\t\t\tindexName: component.getAttribute('data-index-name'),\r\n\t\t\ttrackEventUrl: component.getAttribute('data-tracking-api'),\r\n\t\t\taddToCartURL: component.getAttribute('data-addtocart-api'),\r\n\t\t\tcompareItemURL: component.getAttribute('data-compare-api'),\r\n\t\t\tdataSiteDirectory: component.getAttribute('data-site-directory'),\r\n\t\t\tdataSearchQuery: component.getAttribute('data-search-query'),\r\n\t\t\tdataDisplayMode: component.getAttribute('data-display-mode'),\r\n\t\t\tfacetNavigationMode: component.getAttribute('facet-navigation-mode'),\r\n\t\t\t...apiUrlObj,\r\n\t\t};\r\n\r\n\t\tfunction ResultsPage({ dataDisplayMode }: ResultsPageProps) {\r\n\t\t\tconst searchRequest = parseLocation(location, '/search', hawkConfig.dataSiteDirectory);\r\n\t\t\tsearchRequest.query = hawkConfig.dataSearchQuery;\r\n\r\n\t\t\tif (!hawkConfig.facetNavigationMode) {\r\n\t\t\t\thawkConfig.facetNavigationMode = 'leftfacetnav';\r\n\t\t\t} else if (hawkConfig.facetNavigationMode !== 'topfacetnav') {\r\n\t\t\t\thawkConfig.facetNavigationMode = 'leftfacetnav';\r\n\t\t\t}\r\n\r\n\t\t\tuseEffect(() => {\r\n\t\t\t\tTrackingEvent.track('pageload', { pageType: 'custom' });\r\n\t\t\t}, []);\r\n\t\t\treturn (\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t
    \r\n\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t
    \r\n\t\t\t\t\t
    \r\n\t\t\t\t\r\n\t\t\t);\r\n\t\t}\r\n\t\tReactDOM.render(, component);\r\n\t}\r\n\r\n\treturn;\r\n});\r\n","import '@babel/polyfill';\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport Preview from 'app/preview';\r\nimport { addAccessDeniedInterceptor } from './services/AxiosHelper';\r\n\r\nimport 'styles/app.scss';\r\nimport 'bootstrap/dist/css/bootstrap.min.css';\r\nimport 'react-hawksearch/dist/esm/react-hawksearch.css';\r\n\r\nimport { Router, Route, Switch } from 'react-router-dom';\r\nimport AccessDenied from 'components/access-denied/AccessDenied';\r\nimport PageNotFound from 'components/not-found/PageNotFound';\r\nimport AppInitializer from 'components/AppInitializer';\r\nimport browserHistory from 'utils/history';\r\nimport AppConfiguration from 'AppConfiguration';\r\nimport './widgets/hawk-searchbox';\r\nimport './widgets/hawk-results-page';\r\n\r\nif (!(window as any).browserHistory) {\r\n\t(window as any).browserHistory = browserHistory;\r\n}\r\n\r\naddAccessDeniedInterceptor(browserHistory);\r\n\r\nfunction App({ id }) {\r\n\tconst elem = document.getElementById(id);\r\n\tlet clientGuid = '';\r\n\tlet siteDirectory = '';\r\n\tlet indexName = '';\r\n\tif (elem) {\r\n\t\tclientGuid = elem.getAttribute('data-client-guid') || clientGuid;\r\n\t\tsiteDirectory = elem.getAttribute('data-site-directory') || siteDirectory;\r\n\t\tindexName = elem.getAttribute('data-index-name') || indexName;\r\n\t\tAppConfiguration.setAppConfiguration({\r\n\t\t\tsiteDirectory,\r\n\t\t\tclientGUID: clientGuid,\r\n\t\t\tindexName,\r\n\t\t\ttrackingAPI: elem.getAttribute('data-tracking-api') || '',\r\n\t\t\tbaseAPI: elem.getAttribute('data-base-api') || '',\r\n\t\t\tsearchAPI: elem.getAttribute('data-search-api') || '',\r\n\t\t\tautocompleteAPI: elem.getAttribute('data-autocomplete-api') || '',\r\n\t\t});\r\n\t}\r\n\treturn (\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t{/* \r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t */}\r\n\t\t\t\t\t (\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t/>\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t);\r\n}\r\n\r\n// if (document.getElementById('react-app')) {\r\n// \tReactDOM.render(, document.getElementById('react-app'));\r\n// }\r\n"],"sourceRoot":""}