@nyris/nyris-webapp 0.3.29 → 0.3.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/asset-manifest.json +10 -9
- package/build/index.html +1 -1
- package/build/{precache-manifest.d72c397d9b869dc1470447b80ddb6f57.js → precache-manifest.f764cb62c8d24f8090a273fa02dd1a7a.js} +12 -8
- package/build/service-worker.js +1 -1
- package/build/static/css/main.d0b21fa5.chunk.css +2 -0
- package/build/static/css/main.d0b21fa5.chunk.css.map +1 -0
- package/build/static/js/main.1edd044c.chunk.js +3 -0
- package/build/static/js/main.1edd044c.chunk.js.map +1 -0
- package/build/static/media/icon_search.373c3cc4.svg +3 -0
- package/build/static/media/info-tooltip.5feeef22.svg +3 -0
- package/package.json +3 -3
- package/src/Store/constants.ts +13 -0
- package/src/common/assets/icons/icon_search.svg +2 -2
- package/src/common/assets/icons/info-tooltip.svg +3 -0
- package/src/components/DetailItem.tsx +25 -23
- package/src/components/appMobile.scss +12 -6
- package/src/components/drawer/cameraCustom.tsx +1 -1
- package/src/components/input/inputSearch.tsx +11 -8
- package/src/components/results/ItemResult.tsx +181 -183
- package/src/page/landingPage/common.scss +50 -27
- package/src/page/result/index.tsx +154 -52
- package/src/translations.ts +3 -3
- package/src/types.ts +15 -0
- package/build/static/css/main.0d30f026.chunk.css +0 -2
- package/build/static/css/main.0d30f026.chunk.css.map +0 -1
- package/build/static/js/main.972dc9a3.chunk.js +0 -3
- package/build/static/js/main.972dc9a3.chunk.js.map +0 -1
- package/build/static/media/icon_search.418decdc.svg +0 -3
- /package/build/static/js/{main.972dc9a3.chunk.js.LICENSE.txt → main.1edd044c.chunk.js.LICENSE.txt} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../nyris-react-components/webpack/bootstrap","../webpack:/nyris-react-components/external \"react\"","../webpack:/nyris-react-components/external \"@nyris/nyris-api\"","../nyris-react-components/src/index.tsx","../nyris-react-components/src/components/Preview/Preview.tsx","../webpack:/nyris-react-components/external \"react-konva\"","../webpack:/nyris-react-components/external \"konva\"","../webpack:/nyris-react-components/external \"react-move\"","../nyris-react-components/src/components/Capture/Capture.tsx","../nyris-react-components/src/components/Capture/Capture.css?1149","../nyris-react-components/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js","../nyris-react-components/src/components/Capture/Capture.css","../nyris-react-components/node_modules/css-loader/dist/runtime/api.js","../nyris-react-components/src/components/Capture/images/capture.svg","../nyris-react-components/src/components/Capture/images/arrow_back.svg","../nyris-react-components/src/utils.ts","common/assets/icons/icon_search.svg","common/assets/icons/support3.svg","common/assets/icons/Union.svg","common/assets/images/unnamed.png","../../utils.ts","common/assets/icons/reverse_camera.svg","common/assets/icons/camera.svg","common/assets/images/Icon_Upload.svg","common/assets/icons/email_share.svg","../../index.ts","serviceWorker.ts","constants.ts","Store/search/search.initialState.ts","Store/search/Search.ts","Store/auth/Auth.ts","utils.ts","Store/nyris/Nyris.ts","Store/Store.ts","Store/constants.ts","common/assets/icons/icon_camera_mobile.svg","services/image.ts","components/drawer/cameraCustom.tsx","common/assets/icons/home.svg","components/FooterMobile.tsx","common/assets/icons/filter_settings.svg","hooks/useQuery.ts","components/modal/DefaultModal.tsx","services/filter.ts","helpers/truncateString.ts","components/pre-filter/index.tsx","components/input/inputSearch.tsx","webpack:///./src/common/assets/icons/icon_search.svg?1356","components/HeaderMobile.tsx","components/Header.tsx","components/clear-refinements/clear-refinements.tsx","components/dynamic-widgets/dynamic-widgets.tsx","components/icon-label/icon-label.tsx","components/collapse/collapse.tsx","components/PanelResult/virtual-state-results.ts","components/PanelResult/expandable-panel.tsx","components/PanelResult/index.tsx","components/PanelResult/refinements.ts","services/session.ts","components/Layout.tsx","components/DragDropFile.tsx","page/landingPage/AppMD.tsx","components/ExampleImages.tsx","helpers/ToastHelper.ts","services/Feedback.ts","page/landingPage/AppMobile.tsx","App.tsx","translations.ts","components/chip/chip.tsx","components/current-refinements/current-refinements.tsx","components/current-refinements/getCurrentRefinement.ts","components/FooterResult.tsx","common/assets/icons/Fill.svg","common/assets/icons/expand.svg","common/assets/icons/icon_dislike.svg","common/assets/icons/icon_like.svg","common/assets/icons/icon_search_image2.svg","components/carousel/ImagePreviewCarousel.tsx","components/DetailItem.tsx","helpers/CommonHelper.ts","components/ShareModal.tsx","components/results/ItemResult.tsx","components/ProductList/index.tsx","page/result/index.tsx","Router.tsx","components/Toaster.tsx","index.tsx"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","require","default","getCursor","state","dotHover","tlHover","trHover","blHover","brHover","rectHover","selection","image","maxWidth","maxHeight","onSelectionChange","regions","dotColor","w","h","width","height","x1","x2","y1","y2","minX","minY","selectionRef","useRef","replaceState","setState","assign","handleDragMove","elem","evt","target","Stage","x","y","newRect","newX","newY","elemWidth","elemHeight","newState","notifySelection","useEffect","current","a","Animation","frame","angleDiff","time","dashOffset","getLayer","start","stop","handleDragMoveRect","handleDragMoveTl","handleDragMoveTr","handleDragMoveBl","handleDragMoveBr","dots","map","region","style","cursor","margin","Layer","Image","Rect","stroke","strokeWidth","draggable","onDragMove","dragBoundFunc","Math","max","min","onMouseOver","onMouseOut","opacity","dash","ref","fill","offsetX","offsetY","NodeGroup","data","keyAccessor","enter","timing","delay","duration","ds","Circle","onClick","normalizedRect","onTap","radius","position","onCaptureComplete","onCaptureCanceled","useAppText","video","u","stream","setStream","navigator","mediaDevices","getUserMedia","facingMode","then","vid","srcObject","catch","reason","alert","getVideoTracks","getAudioTracks","className","autoPlay","playsInline","type","id","accept","capture","onChange","e","fileInput","files","urlOrBlobToCanvas","file","htmlFor","src","alt","elementToCanvas","api","content","locals","memo","getTarget","styleTarget","document","querySelector","window","HTMLIFrameElement","contentDocument","head","stylesInDom","getIndexByIdentifier","identifier","result","length","modulesToDom","list","options","idCountMap","identifiers","item","base","count","concat","index","obj","css","media","sourceMap","references","updater","push","addStyle","insertStyleElement","createElement","attributes","nonce","keys","forEach","setAttribute","insert","Error","appendChild","textStore","replaceText","replacement","filter","Boolean","join","applyToSingletonTag","remove","styleSheet","cssText","cssNode","createTextNode","childNodes","removeChild","insertBefore","applyToTag","removeAttribute","btoa","unescape","encodeURIComponent","JSON","stringify","firstChild","singleton","singletonCounter","update","styleIndex","parentNode","newObj","all","atob","lastIdentifiers","newList","toString","newLastIdentifiers","_i","_index","splice","___CSS_LOADER_API_IMPORT___","useSourceMap","this","base64","cssMapping","sourceMapping","sourceURLs","sources","source","sourceRoot","mediaQuery","dedupe","alreadyImportedModules","_extends","arguments","apply","_ref","_ref2","xlinkHref","transform","_ref3","fillOpacity","SvgCapture","props","SvgArrowBack","makeFileHandler","fh","changeEvent","dragEvent","dataTransfer","location","hostname","match","DEFAULT_REGION","showHits","label","initialState","results","selectedRegion","undefined","requestImage","fetchingResults","fetchingRegions","filterOptions","categoryPredictions","codes","errorMessage","valueTextSearch","configure","filters","page","refinementList","resultSearchText","configureFilter","loadingSearchAlgolia","imageThumbSearchInput","textSearchInputMobile","isShowModalDetailItemMobile","keyFilter","preFilterDropdown","searchSlice","createSlice","reducers","setSearchResults","payload","requestId","sessionId","setRegions","setSelectedRegion","setRequestImage","canvas","random","selectionChanged","loadFileSelectRegion","loadingActionResults","loadingActionRegions","searchFileImageNonRegion","changeValueTextSearch","updateResults","reset","onResetRequestImage","setUpdateSession","updateResultChangePosition","setError","setImageSearchInput","updateStatusLoading","updateValueTextSearchMobile","onToggleModalItemDetail","setUpdateKeyFilterDesktop","setPreFilterDropdown","actions","authSlice","accessToken","role","login","logout","jscookie","getUrlParam","RegExp","exec","href","console","log","decodeURIComponent","nyrisSlice","showPart","feedbackState","showStart","showCamera","showResults","showFeedback","hideFeedback","feedbackSubmitPositive","feedbackNegative","normalizedSettings","xOptions","apiKey","exampleImages","preview","jpegQuality","baseUrl","instantRedirectPatterns","theme","settings","_path","combineReducers","auth","Auth","search","Search","nyris","Nyris","store","configureStore","reducer","devTools","process","useAppDispatch","useDispatch","useAppSelector","useSelector","_excluded","_objectWithoutProperties","excluded","sourceKeys","indexOf","_objectWithoutPropertiesLoose","getOwnPropertySymbols","sourceSymbolKeys","propertyIsEnumerable","svgRef","title","viewBox","fillRule","clipRule","ForwardRef","forwardRef","createImage","fileOrUrl","HTMLCanvasElement","getRegionByMaxConfidence","reduce","prev","confidence","findRegions","nyrisApi","NyrisAPI","isEqual","findByImage","cropRect","CameraCustom","isToggle","onToggleModal","webcamRef","useState","setFacingMode","scaleCamera","setScaleCamera","stateGlobal","history","useHistory","dispatch","handleClick","useCallback","prevState","handlerFindImage","pathname","imageConvert","handlerCloseModal","res","preFilter","visualSearchFilterKey","values","sku","score","getInputProps","useDropzone","onDrop","fs","URL","createObjectURL","setTimeout","Box","Drawer","anchor","open","onClose","backgroundColor","primaryColor","fontSize","color","xmlns","display","justifyContent","alignItems","overflow","audio","imageSmoothing","screenshotFormat","forceScreenshotSourceSize","videoConstraints","aspectRatio","objectFit","screenshotQuality","getScreenshot","imageSrc","cx","cy","ReverseCamera","secondaryColor","stopPropagation","IconButton","aria-label","component","borderRadius","padding","enableBackground","FooterMobile","isOpenModalCamera","setOpenModalCamera","activeClassName","to","background","Button","useQuery","useLocation","useMemo","URLSearchParams","DefaultModal","children","openModal","handleClose","classNameModal","classNameComponentChild","Modal","overflowY","getFilters","number","searchFilters","settingsNyris","newValue","truncateString","str","num","slice","PreFilterComponent","keyFilterState","resultFilter","setResultFilter","setKeyFilter","isLoading","setLoading","columns","setColumns","isMobile","useMediaQuery","query","getDataFilterDesktop","dataResultFilter","newResult","find","sort","k","toLocaleUpperCase","finally","handleAlignment","event","filterSearchHandler","onHandlerSubmitData","flexDirection","Typography","fontWeight","paddingLeft","marginBottom","marginTop","preFilterTitle","justifyItems","marginRight","IconSearch","placeholder","columnCount","paddingBottom","entries","ToggleButtonGroup","exclusive","Tooltip","placement","arrow","disableHoverListener","ToggleButton","Array","_","mb","Skeleton","animation","isEmpty","bottom","left","CustomSearchBox","connectSearchBox","refine","onToggleFilterMobile","focusInp","valueInput","setValueInput","isOpenModalFilterDesktop","setToggleModalFilterDesktop","useTranslation","focus","searchQuery","searchOrRedirect","debounce","noValidate","action","order","border","marginLeft","fontStyle","currentTarget","preFilterOption","IconCamera","HeaderMobile","containerRefInputMobile","isShowInputSearch","setShowInputSearch","isShowFilter","setShowFilter","borderBottom","headerColor","lineHeight","appBarLogoUrl","logoWidth","logoHeight","postFilterOption","columnGap","paddingRight","Input","element","getElementById","inputEventFn","keyboardEvent","blur","addEventListener","removeEventListener","outline","Header","ClearRefinements","connectCurrentRefinements","items","handleButtonClick","disabled","textTransform","DynamicWidgetsCT","enabled","isOpen","setOpen","IconLabel","icon","labelPosition","classNameLabel","tagIcon","setTagIcon","variants","collapsed","shouldReduceMotion","pointerEvents","transitionEnd","expanded","transition","ease","Collapse","isCollapsed","useReducedMotion","motion","div","initial","animate","classNames","custom","stateResultsAtom","atom","searchResults","isSearchStalled","searchResultsAtom","selectAtom","connectStateResults","setStateResults","useUpdateAtom","ExpandablePanelCustom","header","isOpened","onToggle","hasRefinements","facets","disjunctiveFacets","hierarchicalFacets","found","facet","attribute","useHasRefinements","useAtomValue","hidden","aria-expanded","fontFamily","getRefinementPanelId","refinement","getPanelId","widgets","panelId","refinementWidget","getRefinementPanelAttribute","refinementsPanelsExpandedAtom","refinementsPanelsAtom","v","set","panels","val","acc","panelKey","WidgetPanel","onToggleMemoized","ExpandablePanelComponent","dynamicWidgets","onToogleApplyFillter","refinements","useAtom","setPanels","refinementsPanelsExpanded","setRefinementsPanelsExpanded","prevPanels","isExpanded","RefinementList","translations","noResults","transformItems","orderBy","widgetsPanels","widget","panelAttributes","getPanelAttributes","onTogglePanelsClick","httpClient","axios","createSessionByApi","headers","request","method","url","response","session","HeaderApp","FooterApp","algolia","appId","indexName","isOpenFilter","setOpenFilter","isShowHeaderMobile","createSession","appTitle","classNameBoxVersion","conditionalQuery","searchClient","algoliasearch","initIndex","requests","every","params","endsWith","Promise","resolve","hits","nbHits","nbPages","processingTimeMS","zIndex","top","InstantSearch","searchState","onSearchStateChange","acceptTypes","onChangeLoading","isLoadingLoadFile","setLoadingLoadFile","getRootProps","isDragActive","IconUpload","AppMD","cadSearch","cadExtensions","CustomInfiniteHits","connectInfiniteHits","IconSupport","headerText","ExampleImages","images","onExampleImageClicked","ToastHelper","msg","toast","success","feedbackSuccessEpic","sendFeedbackByApi","feedbackClickEpic","positions","sendFeedback","AppMobile","getUrlToCanvasFile","searchRegion","err","mobileFooterImageColor","onToggleModalCamera","i18n","use","initReactI18next","init","resources","en","translation","de","fallbackLng","interpolation","escapeValue","returnNull","App","language","changeLanguage","SelectedApp","ChipComponent","selected","closeIcon","CurrentRefinements","statusSwitchButton","newItems","setListItems","config","refinementConfig","refinementOptions","getRefinementConfig","category","getCurrentRefinement","li","FooterResult","connectPagination","Grid","container","minWidth","_ellipse","_path2","rx","ry","_g","_defs","ImagePreviewCarousel","imgItem","onSearchImage","mainRef","thumbsRef","contentWidth","modalWidth","mainOptions","perPage","perMove","gap","pagination","arrows","thumbsOptions","rewind","fixedWidth","fixedHeight","cover","isNavigation","renderSlides","thumbs","slide","minHeight","React","splide","sync","maskUnits","mask","filterUnits","colorInterpolationFilters","floodOpacity","in","stdDeviation","in2","gradientUnits","stopColor","offset","DetailItem","dataItem","handlerFeedback","collapDescription","setCollapDescription","main_offer_link","product_link","brand","dataImageCarousel","setDataImageCarouSel","feedback","setFeedback","urlImage","setUrlImage","checkDataItemResult","handlerCheckUrlImage","timeout","img","onerror","onabort","clearTimeout","timer","onload","valueKey","newObject","includes","prepareImageList","NoImage","borderBottomLeftRadius","borderBottomRightRadius","xs","itemIdLabel","keyword_1","warehouseVariant","custom_id_key_3","custom_id_value_3","brandName","wordWrap","keyword","htmlColor","paddingTop","showMoreInfo","boxShadow","mt","align","letterSpacing","productCtaText","IconOpenLink","gridGap","custom_id_key_2","custom_id_value_2","custom_id_key_1","custom_id_value_1","showFeedbackAndShare","shareOption","ShareModal","setModalState","main_image_link","Paper","whiteSpace","textOverflow","clipboard","writeText","IconEmail","isHover","handlerGroupItem","isGroupItem","handlerCloseGroup","indexItem","isOpenModalImage","setOpenModalImage","isOpenModalShare","setOpenModalShare","collap","onHandlerModalShare","preventDefault","wordBreak","ProductList","allSearchResults","sendFeedBackAction","moreInfoText","hitGroups","setHitGroups","itemShowDefault","setItemShowDefault","algoliaRequest","setAlgoliaRequest","listHistDefaultGroups","setListHitDefault","newArrayShowGroup","newArrayShowItem","groupHits","hit","group_id","groups","groupBy","isGroup","renderItem","hitItem","newItemList","firstArr","secondArr","otherItemsInGroup","shift","textAlign","refBoxResult","toggleColLeft","setToggleColLeft","imageSelection","setImageSelection","executeScroll","scrollIntoView","filterString","setFilterString","findImageByApiNyris","findItemsInSelection","nonEmptyFilter","filterSkus","reverse","f","filterSkusString","alogoliaFilterField","debouncedOnImageSelectionChange","Configure","showFirst","previous","next","HitsPerPage","defaultRefinement","PrivateRoute","Component","authed","rest","render","exact","strict","path","ResultComponent","Toaster","containerStyle","resolveValue","message","dismiss","host","createTheme","overrides","MuiTooltip","tooltip","ReactDOM","serviceWorker","ready","registration","unregister"],"mappings":"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","file":"static/js/main.972dc9a3.chunk.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 2);\n","module.exports = require(\"react\");","module.exports = require(\"@nyris/nyris-api\");","export {default as Preview} from \"./components/Preview/Preview\";\nexport {default as Capture} from \"./components/Capture/Capture\";\n\nexport * from './utils';\n\n","import React, {useEffect, useRef, useState} from 'react';\nimport {Layer, Stage, Image, Circle, Rect} from \"react-konva\";\nimport {RectCoords, Region, getThumbSizeLongestEdge} from \"@nyris/nyris-api\";\nimport Konva from 'konva';\nimport {NodeGroup} from \"react-move\";\n\n\ntype PreviewElem =\n | 'tl'\n | 'tr'\n | 'bl'\n | 'br'\n | 'rect';\n\n/** Properties of the Preview Component. */\ninterface PreviewProps {\n /** A canvas to render as the image. */\n image: HTMLCanvasElement,\n /** Initial selection on the image, setting this, won't send a selection change event. */\n selection: RectCoords,\n /** List of regions to display on the image */\n regions: Region[],\n /** Handler for changed selection. */\n onSelectionChange?: (r: RectCoords) => void,\n /** Maximal width of the image to display in pixels. */\n maxWidth: number,\n /** Maximal height of the image to display in pixels. */\n maxHeight: number,\n /** Color of the dot, which is rendered center of not selected regions. */\n dotColor: string\n}\n\n/** @internal State of the Preview component */\ninterface PreviewState {\n tlHover: boolean,\n trHover: boolean,\n blHover: boolean,\n brHover: boolean,\n dotHover: boolean,\n rectHover: boolean\n}\n\nconst getCursor = (state: PreviewState) => {\n if (state.dotHover) {\n return 'pointer';\n }\n if (state.tlHover) {\n return 'nw-resize';\n }\n if (state.trHover) {\n return 'ne-resize';\n }\n if (state.blHover) {\n return 'sw-resize';\n }\n if (state.brHover) {\n return 'se-resize';\n }\n if (state.rectHover) {\n return 'move';\n }\n return 'default';\n};\n\nconst calcNewRect = ({x1, x2, y1, y2}: RectCoords, elem: PreviewElem, newX: number, newY: number, elemWidth: number, elemHeight: number) => {\n switch (elem) {\n case 'rect':\n return {\n x1: newX,\n y1: newY,\n x2: newX+elemWidth,\n y2: newY+elemHeight\n };\n case 'tl':\n return {\n x1: newX,\n y1: newY,\n x2, y2\n };\n case 'tr':\n return {\n x2: newX,\n y1: newY,\n x1, y2\n };\n case 'bl':\n return {\n x1: newX,\n y2: newY,\n x2, y1\n };\n case 'br':\n return {\n x2: newX,\n y2: newY,\n x1, y1\n };\n }\n};\n\n\nfunction scaleToPreviewPixels(width: number, height: number, {x1, x2, y1, y2} : RectCoords) {\n return {\n x1: x1*width,\n x2: x2*width,\n y1: y1*height,\n y2: y2*height\n };\n}\n\n\n/** The Preview component. */\nconst Preview = ({\n selection, image, maxWidth, maxHeight,\n onSelectionChange, regions, dotColor}: PreviewProps) => {\n\n let {w: width, h: height} = getThumbSizeLongestEdge(maxWidth, maxHeight, image.width, image.height);\n const {x1, y1, x2, y2} = scaleToPreviewPixels(width, height, selection);\n let [minX, minY ] = [ 100, 100];\n\n const handleDragBoundTl = ({x, y}: {x: number,y: number}) => {\n return {\n x: Math.max(Math.min(x, x2-minX), 0),\n y: Math.max(Math.min(y, y2-minY), 0)\n\n };\n };\n\n const handleDragBoundTr = ({x, y}: {x: number,y: number}) => {\n return {\n x: Math.min(Math.max(x, x1+minX), width),\n y: Math.max(Math.min(y, y2-minY), 0)\n\n };\n };\n\n const handleDragBoundBl = ({x, y}: {x: number,y: number}) => {\n return {\n x: Math.max(Math.min(x, x2-minX), 0),\n y: Math.min(Math.max(y, y1+minY), height)\n };\n };\n\n const handleDragBoundBr = ({x, y}: {x: number,y: number}) => {\n return {\n x: Math.min(Math.max(x, x1+minX), width),\n y: Math.min(Math.max(y, y1+minY), height)\n };\n };\n\n const handleDragBoundRect = ({x, y}: {x: number,y: number}) => {\n let elemWidth = x2-x1;\n let elemHeight = y2-y1;\n return {\n x: Math.max(Math.min(x, width-elemWidth), 0),\n y: Math.max(Math.min(y, height-elemHeight), 0)\n };\n };\n\n const selectionRef = useRef<Konva.Rect>(null);\n const [state, replaceState] = useState<PreviewState>({\n tlHover: false,\n trHover: false,\n blHover: false,\n brHover: false,\n dotHover: false,\n rectHover: false\n });\n\n const setState = (s: any) => {\n let o = {};\n Object.assign(o, state, s);\n replaceState(o as PreviewState);\n };\n\n\n\n const handleDragMove = (elem: PreviewElem, evt: Konva.KonvaEventObject<DragEvent>) => {\n if (evt.target instanceof Konva.Stage) {\n return;\n }\n\n let {x: newX, y: newY} = evt.target.getAbsolutePosition();\n let {width: elemWidth, height: elemHeight} = evt.target.getSize();\n const newRect = calcNewRect({x1, x2, y1, y2}, elem, newX, newY, elemWidth, elemHeight);\n let newState = {\n x1: newRect.x1/width,\n x2: newRect.x2/width,\n y1: newRect.y1/height,\n y2: newRect.y2/height\n };\n notifySelection(newState);\n }\n\n // animate selection\n useEffect(() => {\n let speed = 40;\n if (!selectionRef.current) {return;}\n let a = new Konva.Animation((frame) => {\n if (!frame) {\n return;\n }\n if (!selectionRef.current) {return;}\n let angleDiff = (frame.time * speed) / 1000;\n selectionRef.current.dashOffset(-angleDiff);\n }, selectionRef.current.getLayer());\n a.start();\n\n return () => {\n a && a.stop();\n };\n }, [selectionRef]);\n\n\n const handleDragMoveRect = handleDragMove.bind(null, 'rect');\n const handleDragMoveTl = handleDragMove.bind(null, 'tl');\n const handleDragMoveTr = handleDragMove.bind(null, 'tr');\n const handleDragMoveBl = handleDragMove.bind(null, 'bl');\n const handleDragMoveBr = handleDragMove.bind(null, 'br');\n\n const notifySelection = (r: RectCoords) => {\n if (onSelectionChange) {\n onSelectionChange(r);\n }\n };\n\n\n if (!image) {\n return null;\n }\n\n const dots = regions.map((region, i) => {\n let {x1, x2, y1, y2} = region.normalizedRect;\n let x = width* ((x2-x1)/2 + x1);\n let y = height* ((y2-y1)/2+ y1);\n return { // get middle of box and map to pixels\n region,\n key: `${x}-${y}`,\n x,\n y,\n };\n });\n\n let gripSize = 40;\n let gripOpacity = 0.3;\n let gripOpacityOver = 0.6;\n let darkOpacity = 0.3;\n\n\n return (\n <Stage width={width} height={height} style={{cursor: getCursor(state), width: width, height: height, margin: 'auto'}}>\n <Layer key='img'>\n <Image image={image} width={width} height={height}/>\n </Layer>\n <Layer key='selection'>\n {/* Selection box */}\n <Rect stroke='white' strokeWidth={2} x={x1} y={y1} width={x2-x1} height={y2-y1} />\n <Rect stroke='black' draggable={true} onDragMove={handleDragMoveRect} dragBoundFunc={handleDragBoundRect}\n onMouseOver={() => setState({rectHover: true})}\n onMouseOut={() => setState({rectHover: false})}\n opacity={0.8} strokeWidth={2} x={x1} y={y1} width={x2-x1} height={y2-y1} dash={[15, 15]} ref={selectionRef} />\n {/* grips */}\n <Rect fill='black' draggable={true} onDragMove={handleDragMoveTl} dragBoundFunc={handleDragBoundTl}\n onMouseOver={() => setState({tlHover: true})} onMouseOut={() => setState({tlHover: false})} opacity={state.tlHover ? gripOpacityOver : gripOpacity} width={gripSize} height={gripSize} x={x1} y={y1} />\n <Rect fill='black' draggable={true} onDragMove={handleDragMoveTr} dragBoundFunc={handleDragBoundTr}\n onMouseOver={() => setState({trHover: true})} onMouseOut={() => setState({trHover: false})} opacity={state.trHover ? gripOpacityOver : gripOpacity} width={gripSize} height={gripSize} x={x2} y={y1} offsetX={gripSize} />\n <Rect fill='black' draggable={true} onDragMove={handleDragMoveBl} dragBoundFunc={handleDragBoundBl}\n onMouseOver={() => setState({blHover: true})} onMouseOut={() => setState({blHover: false})} opacity={state.blHover ? gripOpacityOver : gripOpacity} width={gripSize} height={gripSize} x={x1} y={y2} offsetY={gripSize} />\n <Rect fill='black' draggable={true} onDragMove={handleDragMoveBr} dragBoundFunc={handleDragBoundBr}\n onMouseOver={() => setState({brHover: true})} onMouseOut={() => setState({brHover: false})} opacity={state.brHover ? gripOpacityOver : gripOpacity} width={gripSize} height={gripSize} x={x2} y={y2} offsetY={gripSize} offsetX={gripSize} />\n {/* Dark areas */}\n <Rect fill='black' opacity={darkOpacity} x={0} y={0} width={width} height={y1} />\n <Rect fill='black' opacity={darkOpacity} x={0} y={y2} width={width} height={height-y2} />\n <Rect fill='black' opacity={darkOpacity} x={0} y={y1} width={x1} height={y2-y1} />\n <Rect fill='black' opacity={darkOpacity} x={x2} y={y1} width={width - x2} height={y2-y1} />\n </Layer>\n <NodeGroup data={dots}\n keyAccessor={r => r.key}\n start={(d, i) => ({opacity: 0, x: -100, y: d.y})}\n enter={(d, i) => ({opacity: [1], x: [d.x], y: d.y, timing: {delay: i*100, duration: 300}})}>\n {ds => <Layer key='dots'>{ds.map(({key, data, state: position}) =>\n <Circle onClick={() => notifySelection(data.region.normalizedRect)}\n onTap={() => notifySelection(data.region.normalizedRect)}\n onMouseOver={() => setState({dotHover: true})}\n onMouseOut={() => setState({dotHover: false})}\n key={key} radius={7} {...position} stroke={dotColor} fill=\"white\" strokeWidth={4}/>)}</Layer>}\n </NodeGroup>\n </Stage>\n );\n};\n\nexport default Preview;\n","module.exports = require(\"react-konva\");","module.exports = require(\"konva\");","module.exports = require(\"react-move\");","import React, {ChangeEvent, useEffect, useRef, useState} from 'react';\nimport './Capture.css';\nimport {urlOrBlobToCanvas, elementToCanvas} from \"@nyris/nyris-api\";\nimport captureSvg from './images/capture.svg';\nimport arrowBackSvg from './images/arrow_back.svg';\n\nexport interface CaptureProps {\n onCaptureComplete: (image: HTMLCanvasElement) => void\n onCaptureCanceled: () => void\n useAppText: string\n}\n\n\nconst Capture = ({onCaptureComplete, onCaptureCanceled, useAppText} : CaptureProps) => {\n const video = useRef<HTMLVideoElement>(null);\n const [stream, setStream] = useState<MediaStream>();\n\n const grabFrame = () => {\n if (video.current) {\n let frame = elementToCanvas(video.current);\n onCaptureComplete(frame);\n }\n };\n\n const onFileSelected = async (e: ChangeEvent) => {\n let fileInput = e.target as HTMLInputElement;\n if (fileInput && fileInput.files) {\n let file = await urlOrBlobToCanvas(fileInput.files[0]);\n onCaptureComplete(file);\n }\n };\n\n useEffect(() => {\n navigator.mediaDevices.getUserMedia({\n video: {\n facingMode: 'environment', // prefers wrong entry on old android: facingMode: ['environment', 'user'],\n width: 640//this.settings.maxWidth,// unsupported on ios {ideal: settings.maxWidth},\n //height: this.settings.maxHeight\n }\n }).then(stream => {\n let vid = video.current;\n if (vid) {\n vid.srcObject = stream;\n setStream(stream);\n }\n }).catch(reason => {\n switch (reason.name) {\n case 'NotFoundError':\n alert('Camera not found. Try with a file instead.');\n break;\n case 'NotAllowedError':\n alert('You have to allow using the camera in order to take pictures. If you are not asked again for permissions, go to site settings and reset permissions there.');\n break;\n default:\n alert(`Sorry, something has gone wrong while enabeling the camera. (${reason})`);\n break;\n }\n });\n }, [video]);\n\n useEffect(() => () => {\n if (!stream) {\n return;\n }\n if (stream.getVideoTracks && stream.getAudioTracks) {\n stream.getVideoTracks().map(track => track.stop());\n stream.getAudioTracks().map(track => track.stop());\n } else {\n ((stream as unknown) as MediaStreamTrack).stop();\n }\n }, [stream]);\n\n return (\n <div className=\"nyris-capture-captureUi\">\n <video autoPlay playsInline ref={video} className=\"nyris-capture-video\"/>\n <input type=\"file\" name=\"file\" id=\"capture_file\" className='nyris-capture-inputFile' accept=\"image/*\"\n capture=\"environment\" onChange={onFileSelected}/>\n <label className=\"nyris-capture-app-button\" htmlFor=\"capture_file\">{useAppText}</label>\n <button className=\"nyris-capture-backBtn\" onClick={onCaptureCanceled}><img src={arrowBackSvg}\n alt=\"back\"\n width=\"72\"/></button>\n <button className=\"nyris-capture-searchBtn\" onClick={grabFrame}><img src={captureSvg}\n alt=\"capture\"/>\n </button>\n </div>\n );\n};\n\n\nexport default Capture;\n","var api = require(\"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n var content = require(\"!!../../../node_modules/css-loader/dist/cjs.js??ref--6-1!../../../node_modules/postcss-loader/src/index.js!./Capture.css\");\n\n content = content.__esModule ? content.default : content;\n\n if (typeof content === 'string') {\n content = [[module.id, content, '']];\n }\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nmodule.exports = content.locals || {};","\"use strict\";\n\nvar isOldIE = function isOldIE() {\n var memo;\n return function memorize() {\n if (typeof memo === 'undefined') {\n // Test for IE <= 9 as proposed by Browserhacks\n // @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805\n // Tests for existence of standard globals is to allow style-loader\n // to operate correctly into non-standard environments\n // @see https://github.com/webpack-contrib/style-loader/issues/177\n memo = Boolean(window && document && document.all && !window.atob);\n }\n\n return memo;\n };\n}();\n\nvar getTarget = function getTarget() {\n var memo = {};\n return function memorize(target) {\n if (typeof memo[target] === 'undefined') {\n var styleTarget = document.querySelector(target); // Special case to return head of iframe instead of iframe itself\n\n if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n try {\n // This will throw an exception if access to iframe is blocked\n // due to cross-origin restrictions\n styleTarget = styleTarget.contentDocument.head;\n } catch (e) {\n // istanbul ignore next\n styleTarget = null;\n }\n }\n\n memo[target] = styleTarget;\n }\n\n return memo[target];\n };\n}();\n\nvar stylesInDom = [];\n\nfunction getIndexByIdentifier(identifier) {\n var result = -1;\n\n for (var i = 0; i < stylesInDom.length; i++) {\n if (stylesInDom[i].identifier === identifier) {\n result = i;\n break;\n }\n }\n\n return result;\n}\n\nfunction modulesToDom(list, options) {\n var idCountMap = {};\n var identifiers = [];\n\n for (var i = 0; i < list.length; i++) {\n var item = list[i];\n var id = options.base ? item[0] + options.base : item[0];\n var count = idCountMap[id] || 0;\n var identifier = \"\".concat(id, \" \").concat(count);\n idCountMap[id] = count + 1;\n var index = getIndexByIdentifier(identifier);\n var obj = {\n css: item[1],\n media: item[2],\n sourceMap: item[3]\n };\n\n if (index !== -1) {\n stylesInDom[index].references++;\n stylesInDom[index].updater(obj);\n } else {\n stylesInDom.push({\n identifier: identifier,\n updater: addStyle(obj, options),\n references: 1\n });\n }\n\n identifiers.push(identifier);\n }\n\n return identifiers;\n}\n\nfunction insertStyleElement(options) {\n var style = document.createElement('style');\n var attributes = options.attributes || {};\n\n if (typeof attributes.nonce === 'undefined') {\n var nonce = typeof __webpack_nonce__ !== 'undefined' ? __webpack_nonce__ : null;\n\n if (nonce) {\n attributes.nonce = nonce;\n }\n }\n\n Object.keys(attributes).forEach(function (key) {\n style.setAttribute(key, attributes[key]);\n });\n\n if (typeof options.insert === 'function') {\n options.insert(style);\n } else {\n var target = getTarget(options.insert || 'head');\n\n if (!target) {\n throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");\n }\n\n target.appendChild(style);\n }\n\n return style;\n}\n\nfunction removeStyleElement(style) {\n // istanbul ignore if\n if (style.parentNode === null) {\n return false;\n }\n\n style.parentNode.removeChild(style);\n}\n/* istanbul ignore next */\n\n\nvar replaceText = function replaceText() {\n var textStore = [];\n return function replace(index, replacement) {\n textStore[index] = replacement;\n return textStore.filter(Boolean).join('\\n');\n };\n}();\n\nfunction applyToSingletonTag(style, index, remove, obj) {\n var css = remove ? '' : obj.media ? \"@media \".concat(obj.media, \" {\").concat(obj.css, \"}\") : obj.css; // For old IE\n\n /* istanbul ignore if */\n\n if (style.styleSheet) {\n style.styleSheet.cssText = replaceText(index, css);\n } else {\n var cssNode = document.createTextNode(css);\n var childNodes = style.childNodes;\n\n if (childNodes[index]) {\n style.removeChild(childNodes[index]);\n }\n\n if (childNodes.length) {\n style.insertBefore(cssNode, childNodes[index]);\n } else {\n style.appendChild(cssNode);\n }\n }\n}\n\nfunction applyToTag(style, options, obj) {\n var css = obj.css;\n var media = obj.media;\n var sourceMap = obj.sourceMap;\n\n if (media) {\n style.setAttribute('media', media);\n } else {\n style.removeAttribute('media');\n }\n\n if (sourceMap && btoa) {\n css += \"\\n/*# sourceMappingURL=data:application/json;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), \" */\");\n } // For old IE\n\n /* istanbul ignore if */\n\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n while (style.firstChild) {\n style.removeChild(style.firstChild);\n }\n\n style.appendChild(document.createTextNode(css));\n }\n}\n\nvar singleton = null;\nvar singletonCounter = 0;\n\nfunction addStyle(obj, options) {\n var style;\n var update;\n var remove;\n\n if (options.singleton) {\n var styleIndex = singletonCounter++;\n style = singleton || (singleton = insertStyleElement(options));\n update = applyToSingletonTag.bind(null, style, styleIndex, false);\n remove = applyToSingletonTag.bind(null, style, styleIndex, true);\n } else {\n style = insertStyleElement(options);\n update = applyToTag.bind(null, style, options);\n\n remove = function remove() {\n removeStyleElement(style);\n };\n }\n\n update(obj);\n return function updateStyle(newObj) {\n if (newObj) {\n if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap) {\n return;\n }\n\n update(obj = newObj);\n } else {\n remove();\n }\n };\n}\n\nmodule.exports = function (list, options) {\n options = options || {}; // Force single-tag solution on IE6-9, which has a hard limit on the # of <style>\n // tags it will allow on a page\n\n if (!options.singleton && typeof options.singleton !== 'boolean') {\n options.singleton = isOldIE();\n }\n\n list = list || [];\n var lastIdentifiers = modulesToDom(list, options);\n return function update(newList) {\n newList = newList || [];\n\n if (Object.prototype.toString.call(newList) !== '[object Array]') {\n return;\n }\n\n for (var i = 0; i < lastIdentifiers.length; i++) {\n var identifier = lastIdentifiers[i];\n var index = getIndexByIdentifier(identifier);\n stylesInDom[index].references--;\n }\n\n var newLastIdentifiers = modulesToDom(newList, options);\n\n for (var _i = 0; _i < lastIdentifiers.length; _i++) {\n var _identifier = lastIdentifiers[_i];\n\n var _index = getIndexByIdentifier(_identifier);\n\n if (stylesInDom[_index].references === 0) {\n stylesInDom[_index].updater();\n\n stylesInDom.splice(_index, 1);\n }\n }\n\n lastIdentifiers = newLastIdentifiers;\n };\n};","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".nyris-capture-app-button {\\n position: fixed;\\n top: 0;\\n right: 0;\\n color: white;\\n margin: 10px;\\n padding: 10px;\\n background-color: rgba(255,255,255,0.3);\\n border-radius: 2px;\\n text-shadow: 1px 1px 3px #000;\\n line-height: 1em;\\n box-shadow: 1px 1px 3px rgba(0, 0, 0,0.5);\\n}\\n\\n.nyris-capture-inputFile {\\n visibility: hidden;\\n}\\n\\n.nyris-capture-captureUi {\\n position: fixed;\\n top: 0;\\n left: 0;\\n bottom: 0;\\n height: 100%;\\n width: 100%;\\n background-color: black;\\n z-index: 10000;\\n}\\n\\n.nyris-capture-video {\\n position: fixed;\\n min-height: 100%;\\n min-width: 100%;\\n top: 50%;\\n left: 50%;\\n transform: translateX(-50%) translateY(-50%);\\n width: auto;\\n height: auto;\\n}\\n\\n.nyris-capture-searchBtn {\\n position: fixed;\\n bottom: 0;\\n right: 0;\\n z-index: 10001;\\n left: 50%;\\n transform: translateX(-50%);\\n\\n color: black;\\n background-color: transparent;\\n text-transform: uppercase;\\n border: 0;\\n margin: auto;\\n display: block;\\n -webkit-filter: drop-shadow( 1px 1px 5px #000 );\\n filter: drop-shadow( 1px 1px 5px #000 );\\n\\n}\\n\\n.nyris-capture-backBtn {\\n position: fixed;\\n bottom: 0;\\n left: 0;\\n z-index: 10001;\\n color: white;\\n background-color: transparent;\\n border: 0;\\n\\n text-transform: uppercase;\\n border-radius: 50%;\\n display: block;\\n padding: 0;\\n font-size: 16px;\\n margin-bottom: 5px;\\n margin-left: 5px;\\n -webkit-filter: drop-shadow( 1px 1px 5px #000 );\\n filter: drop-shadow( 1px 1px 5px #000 );\\n}\\n\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n","\"use strict\";\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\n// eslint-disable-next-line func-names\nmodule.exports = function (useSourceMap) {\n var list = []; // return the list of modules as css string\n\n list.toString = function toString() {\n return this.map(function (item) {\n var content = cssWithMappingToString(item, useSourceMap);\n\n if (item[2]) {\n return \"@media \".concat(item[2], \" {\").concat(content, \"}\");\n }\n\n return content;\n }).join('');\n }; // import a list of modules into the list\n // eslint-disable-next-line func-names\n\n\n list.i = function (modules, mediaQuery, dedupe) {\n if (typeof modules === 'string') {\n // eslint-disable-next-line no-param-reassign\n modules = [[null, modules, '']];\n }\n\n var alreadyImportedModules = {};\n\n if (dedupe) {\n for (var i = 0; i < this.length; i++) {\n // eslint-disable-next-line prefer-destructuring\n var id = this[i][0];\n\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n }\n\n for (var _i = 0; _i < modules.length; _i++) {\n var item = [].concat(modules[_i]);\n\n if (dedupe && alreadyImportedModules[item[0]]) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (mediaQuery) {\n if (!item[2]) {\n item[2] = mediaQuery;\n } else {\n item[2] = \"\".concat(mediaQuery, \" and \").concat(item[2]);\n }\n }\n\n list.push(item);\n }\n };\n\n return list;\n};\n\nfunction cssWithMappingToString(item, useSourceMap) {\n var content = item[1] || ''; // eslint-disable-next-line prefer-destructuring\n\n var cssMapping = item[3];\n\n if (!cssMapping) {\n return content;\n }\n\n if (useSourceMap && typeof btoa === 'function') {\n var sourceMapping = toComment(cssMapping);\n var sourceURLs = cssMapping.sources.map(function (source) {\n return \"/*# sourceURL=\".concat(cssMapping.sourceRoot || '').concat(source, \" */\");\n });\n return [content].concat(sourceURLs).concat([sourceMapping]).join('\\n');\n }\n\n return [content].join('\\n');\n} // Adapted from convert-source-map (MIT)\n\n\nfunction toComment(sourceMap) {\n // eslint-disable-next-line no-undef\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));\n var data = \"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(base64);\n return \"/*# \".concat(data, \" */\");\n}","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport * as React from \"react\";\n\nvar _ref = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"path\", {\n id: \"capture_svg__a\",\n d: \"M150 540a30 30 0 1160 0 30 30 0 01-60 0z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n id: \"capture_svg__b\",\n d: \"M144 540a36 36 0 1172 0 36 36 0 01-72 0zm36 33.95a33.94 33.94 0 100-67.89 33.94 33.94 0 000 67.89z\"\n}));\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"use\", {\n fill: \"#c00\",\n xlinkHref: \"#capture_svg__a\",\n transform: \"translate(-144 -504)\"\n});\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"use\", {\n fill: \"#c00\",\n fillOpacity: 0.9,\n xlinkHref: \"#capture_svg__b\",\n opacity: 0.7,\n transform: \"translate(-144 -504)\"\n});\n\nfunction SvgCapture(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 72,\n height: 72\n }, props), _ref, _ref2, _ref3);\n}\n\nexport default \"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iNzIiIGhlaWdodD0iNzIiIHZpZXdCb3g9IjAgMCA3MiA3MiI+PGRlZnM+PHBhdGggaWQ9IjFoN3JhIiBkPSJNMTUwIDU0MGEzMCAzMCAwIDEgMSA2MCAwIDMwIDMwIDAgMCAxLTYwIDB6Ii8+PHBhdGggaWQ9IjFoN3JiIiBkPSJNMTQ0IDU0MGEzNiAzNiAwIDEgMSA3MiAwIDM2IDM2IDAgMCAxLTcyIDB6bTM2IDMzLjk1YTMzLjk0IDMzLjk0IDAgMSAwIDAtNjcuODkgMzMuOTQgMzMuOTQgMCAwIDAgMCA2Ny44OXoiLz48L2RlZnM+PGc+PGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTE0NCAtNTA0KSI+PHVzZSBmaWxsPSIjYzAwIiB4bGluazpocmVmPSIjMWg3cmEiLz48L2c+PGcgb3BhY2l0eT0iLjciIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0xNDQgLTUwNCkiPjx1c2UgZmlsbD0iI2MwMCIgZmlsbC1vcGFjaXR5PSIuOSIgeGxpbms6aHJlZj0iIzFoN3JiIi8+PC9nPjwvZz48L3N2Zz4=\";\nexport { SvgCapture as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport * as React from \"react\";\n\nvar _ref = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 0h24v24H0z\",\n fill: \"none\"\n});\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 13H20v-2z\",\n fill: \"#fff\"\n});\n\nfunction SvgArrowBack(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 24,\n height: 24\n }, props), _ref, _ref2);\n}\n\nexport default \"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz4KICAgIDxwYXRoIGQ9Ik0yMCAxMUg3LjgzbDUuNTktNS41OUwxMiA0bC04IDggOCA4IDEuNDEtMS40MUw3LjgzIDEzSDIwdi0yeiIgZmlsbD0id2hpdGUiLz4KPC9zdmc+Cg==\";\nexport { SvgArrowBack as ReactComponent };","import {ChangeEvent} from \"react\";\n\nexport type FileHandler = (f: File) => void;\n\nexport const makeFileHandler = (fh: FileHandler) => (e: ChangeEvent | DragEvent) => {\n let file = null;\n\n const changeEvent = e as ChangeEvent;\n if (changeEvent && changeEvent.target) {\n const fileInput = changeEvent.target as HTMLInputElement;\n if (fileInput.files && fileInput.files[0]) {\n file = fileInput.files[0];\n }\n\n // reset input\n if (fileInput.value) {\n fileInput.value = \"\";\n }\n if (file) {\n return fh(file);\n }\n }\n\n const dragEvent = e as DragEvent;\n if (dragEvent) {\n file = (dragEvent.dataTransfer && dragEvent.dataTransfer.files[0]);\n }\n\n if (file) {\n return fh(file);\n }\n};\n","module.exports = __webpack_public_path__ + \"static/media/icon_search.418decdc.svg\";","module.exports = __webpack_public_path__ + \"static/media/support3.4a17f96e.svg\";","module.exports = __webpack_public_path__ + \"static/media/Union.3c6afbb0.svg\";","module.exports = __webpack_public_path__ + \"static/media/unnamed.f7f1b5cb.png\";","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar blueimp_load_image_1 = __importDefault(require(\"blueimp-load-image\"));\n/**\n * Calculates the center of a [[RectCoords]].\n * @param rect The [[RectCoords]] to calculate the center coordinate from.\n */\nfunction rectCenter(_a) {\n var x1 = _a.x1, x2 = _a.x2, y1 = _a.y1, y2 = _a.y2;\n return [\n ((x2 - x1) / 2 + x1),\n ((y2 - y1) / 2 + y1)\n ];\n}\n/**\n * Calculate distance between two points\n * @param x1 The x coordinate of the first point.\n * @param y1 The y coordinate of the first point.\n * @param x2 The x coordinate of the second point.\n * @param y2 The y coordinate of the second point.\n */\nvar dist2d = function (_a, _b) {\n var x1 = _a[0], y1 = _a[1];\n var x2 = _b[0], y2 = _b[1];\n return Math.sqrt(Math.pow((x1 - x2), 2) + Math.pow((y1 - y2), 2));\n};\n/**\n * Return first `Rect` from list `regions` with center-point which has a maximal distance of `maxDistance` from\n * the center. Otherwise return `defaultRect`\n * @param regions\n * @param maxDistance\n * @param defaultRect\n */\nfunction selectFirstCenteredRegion(regions, maxDistance, defaultRect) {\n var centeredRegion = regions.filter(function (r) {\n var dist = dist2d([0.5, 0.5], rectCenter(r.normalizedRect));\n return dist < maxDistance;\n });\n if (centeredRegion.length === 0) {\n return defaultRect;\n }\n return centeredRegion[0].normalizedRect;\n}\nexports.selectFirstCenteredRegion = selectFirstCenteredRegion;\n/**\n * Gets url parameter values by name.\n * @param name The parameter name.\n * @returns string value if it has value assigned with `=`, true if it is specified but without value or `undefined` if not present\n */\nfunction getUrlParam(name) {\n var results = new RegExp(\"[?&]\" + name + \"(=([^&#]*))?(&|$|#)\", 'i')\n .exec(window.location.href);\n if (results && results[2]) { // has value\n console.log('has value', name, results[2]);\n return decodeURIComponent(results[2]);\n }\n return (results && true) // present but without value\n || undefined; // not present\n}\nexports.getUrlParam = getUrlParam;\n/**\n * Calculate the size of a thumbnail image while keeping proportions, based on pixel area.\n * This leads to better results in cases, where the aspect ratio is extreme.\n * @param targetWidth The desired width of the image.\n * @param targetHeight The desired height of the image.\n * @param aspectRatio Aspect ratio of the image.\n */\nfunction getThumbSizeArea(targetWidth, targetHeight, aspectRatio) {\n var targetArea = targetWidth * targetHeight;\n var width = Math.sqrt(targetArea * aspectRatio);\n return {\n w: width,\n h: width / aspectRatio\n };\n}\nexports.getThumbSizeArea = getThumbSizeArea;\n/**\n * Calculate the size of a thumbnail image to fit in `maxWith` and `maxHeight` while preserving the aspect ratio.\n * @param maxWidth\n * @param maxHeight\n * @param originalWidth\n * @param originalHeight\n */\nfunction getThumbSizeLongestEdge(maxWidth, maxHeight, originalWidth, originalHeight) {\n var iR = originalWidth / originalHeight;\n var dR = maxWidth / maxHeight;\n if (dR > iR) {\n return {\n w: originalWidth * maxHeight / originalHeight,\n h: maxHeight\n };\n }\n return {\n w: maxWidth,\n h: originalHeight * maxWidth / originalWidth\n };\n}\nexports.getThumbSizeLongestEdge = getThumbSizeLongestEdge;\nfunction scaleRect(r, size) {\n return {\n x1: r.x1 * size.w,\n x2: r.x2 * size.w,\n y1: r.y1 * size.h,\n y2: r.y2 * size.h\n };\n}\nexports.scaleRect = scaleRect;\n/**\n * Calculates the size of a rect.\n * @param r The [[RectCoords]].\n */\nfunction getRectSize(r) {\n return {\n w: r.x2 - r.x1,\n h: r.y2 - r.y1\n };\n}\nexports.getRectSize = getRectSize;\n/**\n * Get aspect ratio of a rect\n * @param rect The normalized rect.\n * @param size The original image size.\n */\nfunction getRectAspectRatio(rect, size) {\n var scaledRect = scaleRect(rect, size);\n var _a = getRectSize(scaledRect), w = _a.w, h = _a.h;\n return w / h;\n}\nexports.getRectAspectRatio = getRectAspectRatio;\nfunction getElementSize(elem) {\n var img = elem;\n var video = elem;\n return {\n w: img.naturalWidth || video.videoWidth || elem.width,\n h: img.naturalHeight || video.videoHeight || elem.height\n };\n}\nexports.getElementSize = getElementSize;\nfunction elementToCanvas(elem, newSize, normalizedRect) {\n var _a = getElementSize(elem), ow = _a.w, oh = _a.h;\n var _b = normalizedRect ? normalizedRect : {\n x1: 0,\n x2: 1,\n y1: 0,\n y2: 1\n }, x1 = _b.x1, x2 = _b.x2, y1 = _b.y1, y2 = _b.y2;\n var w = x2 - x1;\n var h = y2 - y1;\n // scale to absolute pixels\n var sx = ow * x1;\n var sw = ow * w;\n var sy = oh * y1;\n var sh = oh * h;\n var dw = (newSize && newSize.w) || ow;\n var dh = (newSize && newSize.h) || oh;\n var canvas = document.createElement('canvas');\n canvas.width = dw;\n canvas.height = dh;\n var context = canvas.getContext('2d');\n if (!context) {\n throw Error(\"Error converting element to canvas: Can not get 2d context\");\n }\n // fill with white first to\n context.fillStyle = \"rgb(255, 255,255)\";\n context.fillRect(0, 0, dw, dh);\n context.drawImage(elem, sx, sy, sw, sh, 0, 0, // dx dy\n dw, dh);\n return canvas;\n}\nexports.elementToCanvas = elementToCanvas;\nfunction urlOrBlobToCanvas(file) {\n return new Promise(function (resolve, reject) {\n // File can also be an image element\n blueimp_load_image_1.default(file, (function (data) {\n var c = data;\n if (c) {\n resolve(c);\n }\n else {\n reject();\n }\n }), {\n canvas: true,\n orientation: true,\n crossOrigin: 'anonymous'\n });\n });\n}\nexports.urlOrBlobToCanvas = urlOrBlobToCanvas;\nfunction canvasToJpgBlob(canvas, quality) {\n return new Promise(function (resolve, reject) {\n canvas.toBlob(function (blob) {\n if (blob) {\n resolve(blob);\n }\n else {\n reject();\n }\n }, 'image/jpeg', quality);\n });\n}\nexports.canvasToJpgBlob = canvasToJpgBlob;\nexports.cadExtensions = ['.stp', '.step', '.stl', '.obj', '.glb', '.gltf'];\nfunction isCadFile(file) {\n return exports.cadExtensions.some(function (ex) { return file.name.endsWith(ex); });\n}\nexports.isCadFile = isCadFile;\nfunction isImageFile(file) {\n return file.type.startsWith('image/');\n}\nexports.isImageFile = isImageFile;\n/**\n * Measures time remaining for a promise to resolve.\n * @param promise The promise\n */\nfunction timePromise(promise) {\n return __awaiter(this, void 0, void 0, function () {\n var t1, res, t2;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n t1 = Date.now();\n return [4 /*yield*/, promise];\n case 1:\n res = _a.sent();\n t2 = Date.now();\n return [2 /*return*/, { res: res, durationSeconds: (t2 - t1) / 1000 }];\n }\n });\n });\n}\nexports.timePromise = timePromise;\n//# sourceMappingURL=utils.js.map","module.exports = __webpack_public_path__ + \"static/media/reverse_camera.28c80509.svg\";","module.exports = __webpack_public_path__ + \"static/media/camera.ae3f4f51.svg\";","module.exports = __webpack_public_path__ + \"static/media/Icon_Upload.ebf185b4.svg\";","module.exports = __webpack_public_path__ + \"static/media/email_share.92bbfb8b.svg\";","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nfunction __export(m) {\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nrequire(\"blueimp-canvas-to-blob\");\nvar utils_1 = require(\"./utils\");\nvar axios_1 = __importDefault(require(\"axios\"));\n// re-export utils\n__export(require(\"./utils\"));\nvar NyrisAPI = /** @class */ (function () {\n function NyrisAPI(settings) {\n this.httpClient = axios_1.default.create();\n if (!settings.apiKey) {\n throw new Error(\"The api-key is not set.\");\n }\n this.apiKey = settings.apiKey;\n var baseUrl = settings.baseUrl || \"https://api.nyris.io\";\n this.imageMatchingUrl = baseUrl + \"/find/v1.1\";\n this.cadMatchingUrl = baseUrl + \"/cad/find/v0.1\";\n this.imageMatchingUrlBySku = baseUrl + \"/recommend/v1/\";\n this.imageMatchingSubmitManualUrl = baseUrl + \"/find/v1/manual/\";\n this.feedbackUrl = baseUrl + \"/feedback/v1/\";\n this.regionProposalUrl = baseUrl + \"/find/v2/regions/\";\n this.findFilters = baseUrl + \"/find/v1/filters\";\n this.responseFormat =\n settings.responseFormat || \"application/offers.complete+json\";\n this.maxHeight = settings.maxHeight || 500;\n this.maxWidth = settings.maxWidth || 500;\n this.jpegQuality = settings.jpegQuality || 0.92;\n this.customSearchRequest = settings.customSearchRequest;\n this.responseHook = settings.responseHook;\n this.xOptions = settings.xOptions;\n }\n NyrisAPI.prototype.prepareImage = function (canvas, cropRect) {\n return __awaiter(this, void 0, void 0, function () {\n var crop, originalSize, aspectRatio, scaledSize, resizedCroppedCanvas;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n crop = cropRect || {\n x1: 0,\n x2: 1,\n y1: 0,\n y2: 1,\n };\n originalSize = utils_1.getElementSize(canvas);\n aspectRatio = utils_1.getRectAspectRatio(crop, originalSize);\n scaledSize = utils_1.getThumbSizeArea(this.maxWidth, this.maxHeight, aspectRatio);\n resizedCroppedCanvas = utils_1.elementToCanvas(canvas, scaledSize, crop);\n return [4 /*yield*/, utils_1.canvasToJpgBlob(resizedCroppedCanvas, this.jpegQuality)];\n case 1: return [2 /*return*/, _a.sent()];\n }\n });\n });\n };\n NyrisAPI.prototype.getSearchRequestHeaders = function (contentType) {\n // Create headers\n var headers = {\n \"X-Api-Key\": this.apiKey,\n \"Accept-Language\": \"de,*;q=0.5\",\n Accept: this.responseFormat,\n \"Content-Type\": contentType || \"application/octet-stream\",\n };\n // Add options\n var xOptions = [];\n if (this.xOptions)\n xOptions.push(this.xOptions);\n if (xOptions.length > 0)\n headers[\"X-Options\"] = xOptions.join(\" \");\n return headers;\n };\n NyrisAPI.prototype.getRegionRequestHeaders = function (contentType) {\n // Create headers\n var headers = {\n \"X-Api-Key\": this.apiKey,\n \"Content-Type\": contentType || \"application/octet-stream\",\n };\n // Add options\n var xOptions = [];\n if (this.xOptions)\n xOptions.push(this.xOptions);\n if (xOptions.length > 0)\n headers[\"X-Options\"] = xOptions.join(\" \");\n return headers;\n };\n NyrisAPI.prototype.getParams = function (options) {\n var params = options.geoLocation\n ? {\n lat: options.geoLocation.lat.toString(),\n lon: options.geoLocation.lon.toString(),\n dist: options.geoLocation.dist.toString(),\n }\n : {};\n return params;\n };\n NyrisAPI.prototype.parseCategoryPredictions = function (categoryPredictionResponse) {\n return Object.entries(categoryPredictionResponse || {})\n .map(function (_a) {\n var name = _a[0], score = _a[1];\n return ({\n name: name,\n score: score,\n });\n })\n .sort(function (a, b) { return b.score - a.score; });\n };\n NyrisAPI.prototype.parseSearchResult = function (res, durationSeconds) {\n var categoryPredictions = this.parseCategoryPredictions(res.data.predicted_category);\n var codes = res.data.barcodes || [];\n var responseData = this\n .responseHook\n ? this.responseHook(res.data)\n : res.data;\n var results = \"offerInfos\" in responseData\n ? responseData.offerInfos.map(function (r, i) { return (__assign(__assign({}, r), { position: i })); })\n : responseData.results.map(function (r, i) { return ({\n position: i,\n sku: r.sku,\n title: r.title,\n img: r.images && r.images[0] ? { url: r.images[0] } : undefined,\n l: r.links ? r.links.main : undefined,\n p: r.price\n ? { vi: parseFloat(r.price) * 100, c: r.price.split(\" \")[1] }\n : undefined,\n score: r.score,\n }); });\n var requestId = res.headers[\"x-matching-request\"];\n var duration = \"durationSeconds\" in res.data\n ? res.data.durationSeconds\n : durationSeconds;\n return { results: results, requestId: requestId, duration: duration, categoryPredictions: categoryPredictions, codes: codes };\n };\n /**\n * Search using the experimental CAD API\n * @param file - A CAD file\n * @param options - Image search options\n * @deprecated This is a prototype API and might be removed/changed at any time.\n */\n NyrisAPI.prototype.findByCad = function (file, options) {\n return __awaiter(this, void 0, void 0, function () {\n var fileType, headers, params, _a, res, durationSeconds;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n fileType = file.type;\n headers = this.getSearchRequestHeaders(fileType);\n params = this.getParams(options);\n return [4 /*yield*/, utils_1.timePromise(this.httpClient.request({\n method: \"POST\",\n url: this.cadMatchingUrl,\n data: file,\n params: params,\n headers: headers,\n responseType: \"json\",\n }))];\n case 1:\n _a = _b.sent(), res = _a.res, durationSeconds = _a.durationSeconds;\n return [2 /*return*/, this.parseSearchResult(res, durationSeconds)];\n }\n });\n });\n };\n /**\n * Search for an image.\n * @param canvas Image, Video (frame) or Canvas to use use for image search.\n * @param filters key values of filters\n * @param options See [[ImageSearchOptions]].\n */\n NyrisAPI.prototype.findByImage = function (canvas, options, filters) {\n return __awaiter(this, void 0, void 0, function () {\n var imageBytes, headers, params, requestBody, i, j, _a, res, durationSeconds;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0: return [4 /*yield*/, this.prepareImage(canvas, options.cropRect)];\n case 1:\n imageBytes = _b.sent();\n if (this.customSearchRequest)\n return [2 /*return*/, this.customSearchRequest(imageBytes, this.httpClient)];\n headers = this.getSearchRequestHeaders(\"image/jpeg\");\n params = this.getParams(options);\n requestBody = new FormData();\n requestBody.append(\"image\", imageBytes);\n if (filters && filters.length > 0) {\n for (i = 0; i < filters.length; i++) {\n requestBody.append(\"filters[\" + i + \"].filterType\", filters[i].key);\n for (j = 0; j < filters[i].values.length; j++) {\n requestBody.append(\"filters[\" + i + \"].filterValues[\" + j + \"]\", filters[i].values[j]);\n }\n }\n }\n return [4 /*yield*/, utils_1.timePromise(this.httpClient.request({\n method: \"POST\",\n url: this.imageMatchingUrl,\n data: requestBody,\n params: params,\n headers: headers,\n responseType: \"json\",\n }))];\n case 2:\n _a = _b.sent(), res = _a.res, durationSeconds = _a.durationSeconds;\n return [2 /*return*/, this.parseSearchResult(res, durationSeconds)];\n }\n });\n });\n };\n /**\n * Search by SKU (itemID)\n * @param sku The SKU or ID of the item.\n * @param mid The index ID.\n */\n NyrisAPI.prototype.findBySku = function (sku, mid) {\n return __awaiter(this, void 0, void 0, function () {\n var headers, url, r;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n headers = this.getSearchRequestHeaders();\n url = \"\" + this.imageMatchingUrlBySku + encodeURIComponent(sku) + \"/\" + encodeURIComponent(mid);\n return [4 /*yield*/, this.httpClient.get(url, {\n headers: headers,\n responseType: \"json\",\n })];\n case 1:\n r = _a.sent();\n if (this.responseHook) {\n r = this.responseHook;\n }\n return [2 /*return*/, r];\n }\n });\n });\n };\n /**\n * Find significant sections in the image.\n * @param canvas Canvas, video or image to search with.\n * @returns A list of regions, see [[Region]].\n */\n NyrisAPI.prototype.findRegions = function (canvas) {\n return __awaiter(this, void 0, void 0, function () {\n var _a, origW, origH, scaledSize, resizedCroppedCanvas, blob, headers, response, regions;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _a = utils_1.getElementSize(canvas), origW = _a.w, origH = _a.h;\n scaledSize = utils_1.getThumbSizeArea(this.maxWidth, this.maxHeight, origW / origH);\n resizedCroppedCanvas = utils_1.elementToCanvas(canvas, scaledSize);\n return [4 /*yield*/, utils_1.canvasToJpgBlob(resizedCroppedCanvas, this.jpegQuality)];\n case 1:\n blob = _b.sent();\n headers = this.getRegionRequestHeaders(\"image/jpeg\");\n return [4 /*yield*/, this.httpClient.request({\n method: \"POST\",\n url: this.regionProposalUrl,\n data: blob,\n headers: headers,\n })];\n case 2:\n response = _b.sent();\n regions = response.data.regions;\n return [2 /*return*/, regions.map(function (r) { return ({\n classId: r.classId,\n confidence: r.confidence,\n normalizedRect: {\n x1: r.region.left / scaledSize.w,\n x2: r.region.right / scaledSize.w,\n y1: r.region.top / scaledSize.h,\n y2: r.region.bottom / scaledSize.h,\n },\n }); })];\n }\n });\n });\n };\n /**\n * Send feedback event.\n * @param sessionId ID of the session. Usually the first request ID returned.\n * @param requestId The request ID to submit the feedback event to.\n * @param payload See [[FeedbackEventPayload]].\n */\n NyrisAPI.prototype.sendFeedback = function (sessionId, requestId, payload) {\n return __awaiter(this, void 0, void 0, function () {\n var headers, data;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n headers = {\n \"X-Api-Key\": this.apiKey,\n \"Content-Type\": \"application/json\",\n };\n data = __assign({ request_id: requestId, timestamp: new Date(), session_id: sessionId }, payload);\n return [4 /*yield*/, this.httpClient.request({\n method: \"POST\",\n url: this.feedbackUrl,\n headers: headers,\n data: data,\n })];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n NyrisAPI.prototype.getFilters = function (limit) {\n return __awaiter(this, void 0, void 0, function () {\n var headers, url, response;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n headers = this.getSearchRequestHeaders();\n url = this.findFilters + \"?limit=\" + limit;\n return [4 /*yield*/, this.httpClient.get(url, {\n headers: headers,\n responseType: \"json\",\n })];\n case 1:\n response = _a.sent();\n return [2 /*return*/, response.data];\n }\n });\n });\n };\n NyrisAPI.prototype.searchFilters = function (key, value, limit) {\n if (limit === void 0) { limit = 100; }\n return __awaiter(this, void 0, void 0, function () {\n var headers, url, response;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n headers = this.getSearchRequestHeaders();\n url = this.findFilters + \"/\" + key + \"/\" + value + \"?limit=\" + limit;\n return [4 /*yield*/, this.httpClient.get(url, {\n headers: headers,\n responseType: \"json\",\n })];\n case 1:\n response = _a.sent();\n return [2 /*return*/, response.data];\n }\n });\n });\n };\n return NyrisAPI;\n}());\nexports.default = NyrisAPI;\n//# sourceMappingURL=index.js.map","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.1/8 is considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\ntype Config = {\n onSuccess?: (registration: ServiceWorkerRegistration) => void;\n onUpdate?: (registration: ServiceWorkerRegistration) => void;\n};\n\nexport function register(config?: Config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(\n (process as { env: { [key: string]: string } }).env.PUBLIC_URL,\n window.location.href\n );\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl: string, config?: Config) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl: string, config?: Config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl)\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister();\n });\n }\n}\n","export const DEFAULT_REGION = { x1: 0, x2: 1, y1: 0, y2: 1 };\nexport const showHits = [\n { value: 10, label: '10' },\n { value: 20, label: '20' },\n { value: 30, label: '30' },\n { value: 40, label: '40' },\n { value: 50, label: '50' },\n { value: 60, label: '60' },\n { value: 70, label: '70' },\n { value: 80, label: '80' },\n { value: 90, label: '90' },\n { value: 100, label: '100' },\n];\n","import { SearchState } from './types';\n\nexport const initialState: SearchState = {\n results: [],\n regions: [],\n selectedRegion: undefined,\n requestImage: undefined,\n fetchingResults: false,\n fetchingRegions: false,\n filterOptions: [],\n categoryPredictions: [],\n codes: [],\n errorMessage: '',\n valueTextSearch: {\n configure: { filters: '' },\n page: 1,\n refinementList: '',\n },\n resultSearchText: [],\n filters: [],\n configureFilter: {},\n loadingSearchAlgolia: false,\n imageThumbSearchInput: '',\n textSearchInputMobile: '',\n isShowModalDetailItemMobile: false,\n keyFilter: '',\n preFilterDropdown: false,\n};\n","import { RectCoords, Region } from '@nyris/nyris-api';\nimport { createSlice, PayloadAction } from '@reduxjs/toolkit';\nimport { DEFAULT_REGION } from '../../constants';\nimport { initialState } from './search.initialState';\n\nexport const searchSlice = createSlice({\n name: 'search',\n initialState,\n reducers: {\n setSearchResults: (state, data) => {\n const { payload } = data;\n const {\n results,\n requestId,\n categoryPredictions,\n codes,\n duration,\n filters,\n } = payload;\n\n return {\n ...state,\n filters,\n results,\n requestId,\n categoryPredictions,\n codes,\n duration,\n sessionId: state.sessionId || requestId,\n fetchingResults: false,\n };\n },\n\n setRegions: (state, data: PayloadAction<Region[]>) => ({\n ...state,\n regions: data.payload,\n }),\n\n setSelectedRegion: (state, data: PayloadAction<RectCoords | undefined>) => {\n return {\n ...state,\n selectedRegion: data.payload,\n };\n },\n\n setRequestImage: (state, data: PayloadAction<any>) => ({\n ...state,\n requestImage: {\n canvas: data.payload,\n id: Math.random().toString(),\n },\n regions: [],\n }),\n\n selectionChanged: (state, data: PayloadAction<RectCoords>) => {\n const { payload } = data;\n return {\n ...state,\n selectedRegion: payload,\n };\n },\n\n loadFileSelectRegion: (state, data: PayloadAction<any>) => {\n const { payload } = data;\n\n const { results, requestId, categoryPredictions, codes, duration } =\n payload;\n return {\n ...state,\n results,\n requestId,\n categoryPredictions,\n codes,\n duration,\n sessionId: state.sessionId || requestId,\n fetchingRegions: false,\n };\n },\n\n loadingActionResults: state => {\n return {\n ...state,\n fetchingResults: true,\n };\n },\n\n loadingActionRegions: state => {\n return {\n ...state,\n fetchingRegions: true,\n };\n },\n\n searchFileImageNonRegion: (state, data: PayloadAction<any>) => {\n const { payload } = data;\n const { results, requestId, duration, categoryPredictions, codes } =\n payload;\n return {\n ...state,\n results,\n requestId,\n duration,\n categoryPredictions,\n codes,\n fetchingResults: false,\n };\n },\n\n changeValueTextSearch: (state, data: PayloadAction<any>) => {\n const { payload } = data;\n return {\n ...state,\n valueTextSearch: payload,\n };\n },\n\n resultSearchText: (state, data: PayloadAction<any>) => {\n const { payload } = data;\n return {\n ...state,\n resultSearchText: payload,\n };\n },\n\n updateResults: (state, data: PayloadAction<any>) => {\n const { payload } = data;\n return {\n ...state,\n results: payload,\n };\n },\n\n reset: (state, data: PayloadAction<any>) => {\n return {\n results: [],\n regions: [],\n selectedRegion: DEFAULT_REGION,\n requestImage: undefined,\n fetchingResults: false,\n fetchingRegions: false,\n filterOptions: [],\n categoryPredictions: [],\n codes: [],\n errorMessage: '',\n valueTextSearch: {},\n resultSearchText: [],\n filters: [],\n loadingSearchAlgolia: false,\n imageThumbSearchInput: '',\n textSearchInputMobile: '',\n isShowModalDetailItemMobile: false,\n keyFilter: state.keyFilter || '',\n preFilterDropdown: false,\n };\n },\n\n onResetRequestImage: (state, data: PayloadAction<any>) => {\n return {\n ...state,\n requestImage: undefined,\n imageThumbSearchInput: '',\n results: [],\n regions: [],\n };\n },\n\n configureFilter: (state, data: PayloadAction<any>) => {\n const { payload } = data;\n return {\n ...state,\n configureFilter: payload,\n };\n },\n\n setUpdateSession: (state, data: PayloadAction<string>) => {\n const { payload } = data;\n return {\n ...state,\n sessionId: payload,\n };\n },\n\n updateResultChangePosition: (state, data: PayloadAction<any>) => {\n const { payload } = data;\n const { results } = payload;\n return {\n ...state,\n fetchingResults: false,\n results,\n };\n },\n\n setError: (state, data: PayloadAction<string>) => {\n return {\n ...state,\n fetchingRegions: false,\n fetchingResults: false,\n errorMessage: data.payload,\n };\n },\n\n setImageSearchInput: (state, data: PayloadAction<string>) => {\n const { payload } = data;\n return {\n ...state,\n imageThumbSearchInput: payload,\n };\n },\n updateStatusLoading: (state, data: PayloadAction<any>) => {\n const { payload } = data;\n return {\n ...state,\n loadingSearchAlgolia: payload,\n };\n },\n updateValueTextSearchMobile: (state, data: PayloadAction<string>) => {\n const { payload } = data;\n return {\n ...state,\n textSearchInputMobile: payload,\n };\n },\n onToggleModalItemDetail: (state, data: PayloadAction<boolean>) => {\n const { payload } = data;\n\n return {\n ...state,\n isShowModalDetailItemMobile: payload,\n };\n },\n setUpdateKeyFilterDesktop: (state, data: PayloadAction<string>) => {\n const { payload } = data;\n return {\n ...state,\n keyFilter: payload,\n };\n },\n setPreFilterDropdown: (state, data: PayloadAction<boolean>) => {\n return {\n ...state,\n preFilterDropdown: data.payload,\n };\n },\n },\n});\n\nexport const {\n setSearchResults,\n selectionChanged,\n setRequestImage,\n loadFileSelectRegion,\n setRegions,\n setSelectedRegion,\n loadingActionResults,\n loadingActionRegions,\n searchFileImageNonRegion,\n changeValueTextSearch,\n resultSearchText,\n updateResults,\n reset,\n configureFilter,\n setUpdateSession,\n updateResultChangePosition,\n setError,\n setImageSearchInput,\n updateStatusLoading,\n updateValueTextSearchMobile,\n onToggleModalItemDetail,\n onResetRequestImage,\n setUpdateKeyFilterDesktop,\n setPreFilterDropdown,\n} = searchSlice.actions;\nexport default searchSlice.reducer;\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit';\nimport jscookie from 'js-cookie';\nimport { InitialStateTypes, LoginResponse } from './types';\n\nconst initialState: InitialStateTypes = {\n accessToken: null,\n name: null,\n role: null,\n};\n\nexport const authSlice = createSlice({\n name: 'auth',\n initialState,\n reducers: {\n login: (state, data: PayloadAction<LoginResponse>) => {\n // state.accessToken = payload.access_token;\n // state.name = payload.name;\n // state.role = payload.role;\n // if (payload.access_token) {\n // jscookie.set(\"token\", payload?.access_token);\n // }\n },\n logout: state => {\n state.accessToken = null;\n state.name = null;\n state.role = null;\n jscookie.remove('token');\n },\n },\n});\n\nexport const { login, logout } = authSlice.actions;\nexport default authSlice.reducer;\n","import { WH } from '@nyris/nyris-api';\n\n/**\n * Gets url parameter values by name.\n * @param name The parameter name.\n * @returns string value if it has value assigned with `=`, true if it is specified but without value or `undefined` if not present\n */\nexport function getUrlParam(name: string): string | boolean | undefined {\n let results = new RegExp(`[?&]${name}(=([^&#]*))?(&|$|#)`, 'i').exec(\n window.location.href,\n );\n if (results && results[2]) {\n // has value\n console.log('has value', name, results[2]);\n return decodeURIComponent(results[2]);\n }\n return (\n (results && true) || // present but without value\n undefined\n ); // not present\n}\n\nexport function getThumbSizeLongestEdge(\n maxW: number,\n maxH: number,\n iW: number,\n iH: number,\n): WH {\n let iR = iW / iH;\n let dR = maxW / maxH;\n if (dR > iR) {\n return {\n w: (iW * maxH) / iH,\n h: maxH,\n };\n }\n return {\n w: maxW,\n h: (iH * maxW) / iW,\n };\n}\n","import { createSlice } from '@reduxjs/toolkit';\nimport { NyrisAppState, NyrisFeedbackState } from './types';\n\nconst initialState: NyrisAppState | NyrisFeedbackState = {\n showPart: 'start',\n feedbackState: 'hidden',\n};\n\nexport const nyrisSlice = createSlice({\n name: 'nyris',\n initialState,\n reducers: {\n showStart: state => {\n return {\n ...state,\n showPart: 'start',\n };\n },\n showCamera: state => {\n return {\n ...state,\n showPart: 'camera',\n };\n },\n showResults: state => {\n return {\n ...state,\n showPart: 'results',\n };\n },\n showFeedback: state => {\n return {\n ...state,\n feedbackState: 'question',\n };\n },\n hideFeedback: state => {\n return {\n ...state,\n feedbackState: 'hidden',\n };\n },\n feedbackSubmitPositive: state => {\n return {\n ...state,\n feedbackState: 'positive',\n };\n },\n feedbackNegative: state => {\n return {\n ...state,\n feedbackState: 'negative',\n };\n },\n },\n});\n\nexport const {\n showStart,\n showCamera,\n showResults,\n showFeedback,\n hideFeedback,\n feedbackSubmitPositive,\n feedbackNegative,\n} = nyrisSlice.actions;\nexport default nyrisSlice.reducer;\n","import { configureStore } from '@reduxjs/toolkit';\nimport { TypedUseSelectorHook, useDispatch, useSelector } from 'react-redux';\nimport { combineReducers } from 'redux';\nimport Auth from 'Store/auth/Auth';\nimport { AppSettings } from 'types';\nimport { getUrlParam } from 'utils';\nimport Search from 'Store/search/Search';\nimport Nyris from 'Store/nyris/Nyris';\nimport { defaultSettings } from './constants';\n\ndeclare var settings: AppSettings;\n\nlet normalizedSettings: AppSettings = {\n ...defaultSettings,\n ...settings,\n};\n\nnormalizedSettings = {\n ...normalizedSettings,\n apiKey: (getUrlParam('apiKey') as string) || normalizedSettings.apiKey,\n xOptions: (getUrlParam('xOptions') as string) || normalizedSettings.xOptions,\n regions:\n (getUrlParam('use.regions') as boolean) || normalizedSettings.regions,\n preview:\n (getUrlParam('use.preview') as boolean) || normalizedSettings.preview,\n};\n\nconst reducers = combineReducers({\n auth: Auth,\n settings: () => normalizedSettings,\n search: Search,\n nyris: Nyris,\n});\n\nexport const store = configureStore({\n reducer: reducers,\n devTools: process.env.NODE_ENV !== 'production',\n});\n\nexport type RootState = ReturnType<typeof store.getState>;\nexport type AppDispatch = typeof store.dispatch;\n\nexport const useAppDispatch = () => useDispatch<AppDispatch>();\nexport const useAppSelector: TypedUseSelectorHook<RootState> = useSelector;\n","import { AppSettings } from '../types';\n\nexport const defaultSettings: AppSettings = {\n xOptions: false,\n apiKey: 'UNSET',\n exampleImages: [],\n preview: true,\n regions: false,\n maxWidth: 500,\n maxHeight: 500,\n jpegQuality: 0.92,\n baseUrl: 'https://api.nyris.io',\n instantRedirectPatterns: [\n '^https?://(www.)?youtube.com/',\n '^https?://(www.)?youtu.be/',\n '^https?://(www.)?vimeo.com/',\n '^https?://(www.)?dailymotion.com/',\n '^https?://(www.)?dai.ly/',\n ],\n theme: {},\n};\n","var _path;\nvar _excluded = [\"svgRef\", \"title\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from \"react\";\nvar SvgIconCameraMobile = function SvgIconCameraMobile(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 28,\n height: 28,\n viewBox: \"0 0 28 28\",\n fill: \"currentColor\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M28 24C28 24.5523 27.5523 25 27 25H1C0.447715 25 0 24.5523 0 24V7C0 6.44772 0.447715 6 1 6H7.46L9.17 3.45C9.35398 3.17061 9.66548 3.00173 10 3H18C18.3345 3.00173 18.646 3.17061 18.83 3.45L20.54 6H27C27.5523 6 28 6.44772 28 7V24ZM2 23H26V8H20C19.6655 7.99827 19.354 7.82939 19.17 7.55L17.46 5H10.54L8.83 7.55C8.64602 7.82939 8.33452 7.99827 8 8H2V23ZM14 21C10.6863 21 8 18.3137 8 15C8 11.6863 10.6863 9 14 9C17.3137 9 20 11.6863 20 15C20 18.3137 17.3137 21 14 21ZM14 11C11.7909 11 10 12.7909 10 15C10 17.2091 11.7909 19 14 19C16.2091 19 18 17.2091 18 15C18 12.7909 16.2091 11 14 11Z\",\n fill: \"currentColor\"\n })));\n};\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgIconCameraMobile, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/icon_camera_mobile.4d7a272f.svg\";\nexport { ForwardRef as ReactComponent };","import NyrisAPI, {\n NyrisAPISettings,\n RectCoords,\n Region,\n urlOrBlobToCanvas,\n} from '@nyris/nyris-api';\nimport { isEqual } from 'lodash';\nimport { DEFAULT_REGION } from '../constants';\nexport interface Filter {\n key?: string;\n values: string[];\n}\n\nexport const createImage = async (\n fileOrUrl: File | string | HTMLCanvasElement,\n) => {\n const image =\n fileOrUrl instanceof HTMLCanvasElement\n ? fileOrUrl\n : await urlOrBlobToCanvas(fileOrUrl);\n return image;\n};\n\nconst getRegionByMaxConfidence = (regions: Region[]) => {\n if (regions.length === 0) {\n return DEFAULT_REGION;\n }\n const regionWithMaxConfidence = regions.reduce((prev, current) => {\n prev.confidence = prev.confidence || 0;\n current.confidence = current.confidence || 0;\n return prev.confidence >= current.confidence ? prev : current;\n });\n return regionWithMaxConfidence.normalizedRect;\n};\n\nexport const findRegions = async (\n image: HTMLCanvasElement,\n settings: NyrisAPISettings,\n) => {\n const nyrisApi = new NyrisAPI(settings);\n let regions = await nyrisApi.findRegions(image);\n const selectedRegion = getRegionByMaxConfidence(regions);\n return {\n selectedRegion: isEqual(selectedRegion, DEFAULT_REGION)\n ? DEFAULT_REGION\n : selectedRegion,\n regions,\n };\n};\n\nexport const findByImage = ({\n image,\n settings,\n region,\n filters,\n}: {\n image: HTMLCanvasElement;\n settings: NyrisAPISettings;\n region?: RectCoords;\n filters?: Filter[];\n}) => {\n const nyrisApi = new NyrisAPI(settings);\n let options = {};\n\n if (region) {\n options = { cropRect: region };\n }\n return nyrisApi.findByImage(image, options, filters);\n};\n\nexport const findByCadFile = (file: File, settings: NyrisAPISettings) => {\n const nyrisApi = new NyrisAPI(settings);\n return nyrisApi.findByCad(file, {});\n};\n","import { Box, Drawer } from '@material-ui/core';\nimport IconButton from '@material-ui/core/IconButton';\nimport CloseIcon from '@material-ui/icons/Close';\nimport PhotoLibraryIcon from '@material-ui/icons/PhotoLibrary';\nimport { RectCoords } from '@nyris/nyris-api';\nimport ReverseCamera from 'common/assets/icons/reverse_camera.svg';\nimport React, { useCallback, useRef, useState } from 'react';\nimport { useDropzone } from 'react-dropzone';\nimport { useHistory } from 'react-router-dom';\nimport Webcam from 'react-webcam';\nimport { createImage, findByImage, findRegions } from 'services/image';\nimport {\n onToggleModalItemDetail,\n setImageSearchInput,\n setRequestImage,\n setSearchResults,\n updateStatusLoading,\n loadingActionResults,\n setRegions,\n setSelectedRegion,\n} from 'Store/search/Search';\nimport { useAppDispatch, useAppSelector } from 'Store/Store';\n\ninterface Props {\n isToggle: boolean;\n onToggleModal?: any;\n}\n\nconst FACING_MODE_USER = 'environment';\nconst FACING_MODE_ENVIRONMENT = 'user';\n\nfunction CameraCustom(props: Props) {\n const { isToggle, onToggleModal } = props;\n const webcamRef: any = useRef(null);\n const [facingMode, setFacingMode] = useState(FACING_MODE_USER);\n const [scaleCamera, setScaleCamera] = useState<number>(1);\n const stateGlobal = useAppSelector(state => state);\n const { search, settings } = stateGlobal;\n const history = useHistory();\n const dispatch = useAppDispatch();\n const { keyFilter } = search;\n\n const videoConstraints = {\n width: 1080,\n height: 1080,\n aspectRatio: 1.33333333333,\n };\n const handleClick = useCallback(() => {\n setFacingMode(prevState =>\n prevState === FACING_MODE_USER\n ? FACING_MODE_ENVIRONMENT\n : FACING_MODE_USER,\n );\n }, []);\n\n const handlerFindImage = async (image: any) => {\n dispatch(updateStatusLoading(true));\n dispatch(loadingActionResults());\n if (history.location.pathname !== '/result') {\n history.push('/result');\n }\n let region: RectCoords | undefined;\n let imageConvert = await createImage(image);\n dispatch(setRequestImage(imageConvert));\n dispatch(setImageSearchInput(image));\n dispatch(onToggleModalItemDetail(false));\n handlerCloseModal();\n\n if (settings.regions) {\n let res = await findRegions(imageConvert, settings);\n dispatch(setRegions(res.regions));\n region = res.selectedRegion;\n dispatch(setSelectedRegion(region));\n }\n\n const preFilter = [\n {\n key: settings.visualSearchFilterKey,\n values: [`${keyFilter}`],\n },\n ];\n let filters: any[] = [];\n\n findByImage({\n image: imageConvert,\n settings,\n filters: keyFilter ? preFilter : undefined,\n region,\n })\n .then((res: any) => {\n res?.results.map((item: any) => {\n filters.push({\n sku: item.sku,\n score: item.score,\n });\n });\n const payload = {\n ...res,\n filters,\n };\n dispatch(setSearchResults(payload));\n dispatch(updateStatusLoading(false));\n })\n .catch((e: any) => {\n console.log('error input search', e);\n dispatch(updateStatusLoading(false));\n });\n };\n\n const handlerCloseModal = () => {\n setFacingMode('environment');\n setScaleCamera(1);\n onToggleModal();\n };\n\n const { getInputProps } = useDropzone({\n onDrop: async (fs: File[]) => {\n let payload: any;\n let filters: any[] = [];\n let region: RectCoords | undefined;\n dispatch(setImageSearchInput(URL.createObjectURL(fs[0])));\n let image = await createImage(fs[0]);\n dispatch(setRequestImage(image));\n if (settings.regions) {\n let res = await findRegions(image, settings);\n dispatch(setRegions(res.regions));\n region = res.selectedRegion;\n dispatch(setSelectedRegion(region));\n }\n dispatch(updateStatusLoading(true));\n return findByImage({ image, settings, region })\n .then((res: any) => {\n res?.results.map((item: any) => {\n filters.push({\n sku: item.sku,\n score: item.score,\n });\n });\n payload = {\n ...res,\n filters,\n };\n dispatch(setSearchResults(payload));\n setTimeout(() => {\n dispatch(updateStatusLoading(false));\n handlerCloseModal();\n history.push('/result');\n }, 500);\n })\n .catch((e: any) => {\n console.log('err camera_custom', e);\n dispatch(updateStatusLoading(false));\n handlerCloseModal();\n });\n },\n });\n\n return (\n <Box className=\"box-camera-custom\">\n <Drawer\n anchor={'bottom'}\n open={isToggle}\n onClose={handlerCloseModal}\n className=\"modal-togggle-cam\"\n >\n <Box className=\"wrap-camera\">\n <button\n className=\"btn-close-modal right\"\n style={{\n backgroundColor: settings.theme?.primaryColor,\n }}\n onClick={handlerCloseModal}\n >\n <CloseIcon style={{ fontSize: 20, color: '#fff' }} />\n </button>\n <button\n className=\"btn-close-modal left\"\n style={{\n backgroundColor: settings.theme?.primaryColor,\n }}\n onClick={handlerCloseModal}\n >\n <svg\n width=\"18\"\n height=\"10\"\n viewBox=\"0 0 18 10\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M9 9.5L0 1.60526L1.26 0.5L9 7.28947L16.74 0.5L18 1.60526L9 9.5Z\"\n fill=\"white\"\n />\n </svg>\n </button>\n <div\n style={{\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n overflow: 'hidden',\n height: '100svh',\n width: '100%',\n }}\n >\n <Webcam\n audio={false}\n height={'100svh'}\n width={'100%'}\n imageSmoothing={true}\n screenshotFormat=\"image/jpeg\"\n forceScreenshotSourceSize={true}\n videoConstraints={{\n ...videoConstraints,\n facingMode,\n }}\n ref={webcamRef}\n style={{\n height: '100%',\n width: '100%',\n objectFit: 'cover',\n transform: `scale(${scaleCamera})`,\n }}\n screenshotQuality={1}\n >\n {({ getScreenshot }: any) => (\n <button\n onClick={() => {\n const imageSrc = getScreenshot();\n handlerFindImage(imageSrc);\n }}\n className=\"btn-capture-camera\"\n >\n <svg\n width=\"63\"\n height=\"63\"\n viewBox=\"0 0 63 63\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle cx=\"31.5\" cy=\"31.5\" r=\"31.5\" fill=\"white\" />\n </svg>\n </button>\n )}\n </Webcam>\n </div>\n\n <button className=\"btn-switch-camera\" onClick={handleClick}>\n <img src={ReverseCamera} alt=\"\" width={52} height={52} />\n </button>\n\n <div\n className=\"box-scale-camera\"\n style={{\n backgroundColor: settings.theme?.secondaryColor,\n }}\n >\n <button\n className={`${scaleCamera === 1 && 'active'}`}\n style={{\n backgroundColor:\n scaleCamera === 1 && 'active'\n ? settings.theme?.primaryColor\n : '',\n }}\n onClick={() => setScaleCamera(1)}\n >\n 1\n </button>\n <button\n className={`${scaleCamera === 1.5 && 'active'}`}\n style={{\n backgroundColor:\n scaleCamera === 1.5 && 'active'\n ? settings.theme?.primaryColor\n : '',\n }}\n onClick={() => setScaleCamera(1.5)}\n >\n 1.5\n </button>\n <button\n className={`${scaleCamera === 2 && 'active'}`}\n style={{\n backgroundColor:\n scaleCamera === 2 && 'active'\n ? settings.theme?.primaryColor\n : '',\n }}\n onClick={() => setScaleCamera(2)}\n >\n 2\n </button>\n </div>\n <div className=\"wrap-box-input-mobile custom-library\">\n <input\n id=\"icon-button-file\"\n type=\"file\"\n style={{ display: 'none' }}\n {...getInputProps({\n accept: 'image/png,image/jpeg',\n onClick: e => {\n e.stopPropagation();\n },\n })}\n />\n <label htmlFor=\"icon-button-file\">\n <IconButton\n color=\"primary\"\n aria-label=\"upload picture\"\n component=\"span\"\n style={{\n width: 32,\n height: 32,\n borderRadius: '100%',\n padding: 7,\n backgroundColor: '#F3F3F5',\n }}\n >\n <PhotoLibraryIcon style={{ fontSize: 20, color: 'red' }} />\n </IconButton>\n </label>\n </div>\n </Box>\n </Drawer>\n </Box>\n );\n}\n\nexport default CameraCustom;\n","var _path;\nvar _excluded = [\"svgRef\", \"title\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from \"react\";\nvar SvgHome = function SvgHome(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 24,\n height: 22,\n viewBox: \"0 0 22 21\",\n style: {\n enableBackground: \"new 0 0 22 20.28\"\n },\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n className: \"st3\",\n d: \"M 10.959 1.845 C 11.109 1.845 11.266 1.886 11.408 1.96 L 19.66 6.661 C 19.935 6.825 20.101 7.112 20.101 7.424 L 20.101 15.776 C 20.101 16.111 19.91 16.415 19.61 16.562 L 15.912 18.384 C 15.787 18.449 15.646 18.474 15.513 18.474 C 15.347 18.474 15.189 18.433 15.048 18.343 C 14.782 18.178 14.624 17.9 14.624 17.596 L 14.624 10.041 L 10.959 7.957 L 7.294 10.041 L 7.294 17.605 C 7.294 17.908 7.136 18.196 6.87 18.351 C 6.728 18.441 6.562 18.483 6.405 18.483 C 6.272 18.483 6.13 18.449 6.006 18.392 L 2.307 16.57 C 2.008 16.415 1.817 16.111 1.817 15.776 L 1.817 7.424 C 1.817 7.112 1.983 6.817 2.265 6.661 L 10.519 1.96 C 10.651 1.886 10.801 1.845 10.959 1.845 M 10.959 0.205 C 10.51 0.205 10.069 0.32 9.679 0.541 L 1.426 5.242 C 0.645 5.693 0.155 6.529 0.155 7.424 L 0.155 15.776 C 0.155 16.735 0.695 17.596 1.568 18.031 L 5.266 19.852 C 5.615 20.025 6.014 20.115 6.405 20.115 C 6.878 20.115 7.343 19.984 7.742 19.738 C 8.499 19.278 8.956 18.474 8.956 17.596 L 8.956 10.984 L 10.959 9.844 L 12.962 10.984 L 12.962 17.596 C 12.962 18.474 13.41 19.278 14.175 19.738 C 14.583 19.984 15.039 20.115 15.522 20.115 C 15.912 20.115 16.311 20.025 16.66 19.852 L 20.359 18.031 C 21.231 17.605 21.771 16.735 21.771 15.776 L 21.771 7.424 C 21.771 6.529 21.281 5.693 20.492 5.242 L 12.239 0.541 C 11.848 0.32 11.408 0.205 10.959 0.205 Z\",\n fill: \"currentColor\",\n transform: \"matrix(0.999999, 0.00121, -0.00121, 0.999999, 0.012302, -0.013258)\"\n })));\n};\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgHome, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/home.defd14bf.svg\";\nexport { ForwardRef as ReactComponent };","import { Box, Button } from '@material-ui/core';\nimport React, { useState } from 'react';\nimport { ReactComponent as IconCameraMobile } from 'common/assets/icons/icon_camera_mobile.svg';\nimport CameraCustom from './drawer/cameraCustom';\nimport { ReactComponent as Home } from 'common/assets/icons/home.svg';\nimport { NavLink, useHistory } from 'react-router-dom';\nimport { useAppSelector } from 'Store/Store';\n\ninterface Props {\n onLoadingMobile?: any;\n}\n\nfunction FooterMobile(props: Props): JSX.Element {\n const [isOpenModalCamera, setOpenModalCamera] = useState<boolean>(false);\n const history = useHistory();\n const { settings } = useAppSelector(state => state);\n\n return (\n <Box\n className=\"box-footer-mobile\"\n display={'flex'}\n position={'relative'}\n alignItems={'center'}\n height={'100%'}\n >\n <NavLink\n style={{\n width: '70px',\n display: 'flex',\n justifyContent: 'center',\n height: '100%',\n alignItems: 'center',\n backgroundColor:\n history.location.pathname === '/'\n ? `${settings.theme?.primaryColor}21`\n : '',\n }}\n activeClassName=\"active\"\n to={'/'}\n className=\"nav-link p-0 menu-children rounded-0\"\n >\n <Home\n color={\n history.location.pathname === '/'\n ? settings.theme?.primaryColor\n : '#000'\n }\n />\n </NavLink>\n <Box\n style={{ background: settings.theme?.primaryColor }}\n className=\"box-icon-camera-mobile\"\n >\n <Button\n onClick={() => {\n setOpenModalCamera(!isOpenModalCamera);\n }}\n >\n <IconCameraMobile color=\"#FFFF\" />\n </Button>\n </Box>\n\n <Box className=\"box-screenshot-camera\">\n <CameraCustom\n isToggle={isOpenModalCamera}\n onToggleModal={() => {\n setOpenModalCamera(!isOpenModalCamera);\n }}\n />\n </Box>\n </Box>\n );\n}\n\nexport default FooterMobile;\n","var _path;\nvar _excluded = [\"svgRef\", \"title\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from \"react\";\nvar SvgFilterSettings = function SvgFilterSettings(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 16,\n height: 16,\n viewBox: \"0 0 16 16\",\n fill: \"currentColor\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M15 4H12.95C12.7 2.85 11.7 2 10.5 2C9.3 2 8.3 2.85 8.05 4H1V5H8.05C8.3 6.15 9.3 7 10.5 7C11.7 7 12.7 6.15 12.95 5H15V4ZM10.5 6C9.65 6 9 5.35 9 4.5C9 3.65 9.65 3 10.5 3C11.35 3 12 3.65 12 4.5C12 5.35 11.35 6 10.5 6ZM1 12H3.05C3.3 13.15 4.3 14 5.5 14C6.7 14 7.7 13.15 7.95 12H15V11H7.95C7.7 9.85 6.7 9 5.5 9C4.3 9 3.3 9.85 3.05 11H1V12ZM5.5 10C6.35 10 7 10.65 7 11.5C7 12.35 6.35 13 5.5 13C4.65 13 4 12.35 4 11.5C4 10.65 4.65 10 5.5 10Z\",\n fill: \"currentColor\"\n })));\n};\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgFilterSettings, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/filter_settings.fa0682a5.svg\";\nexport { ForwardRef as ReactComponent };","import { useMemo } from \"react\";\nimport { useLocation } from \"react-router-dom\";\n\nexport const useQuery = () => {\n const { search } = useLocation();\n return useMemo(() => new URLSearchParams(search), [search]);\n}","import React from 'react';\nimport Modal from '@material-ui/core/Modal';\n\ninterface Props {\n children: JSX.Element;\n openModal: boolean;\n handleClose: (e: any) => void;\n classNameModal?: string;\n classNameComponentChild?: string;\n}\n\nfunction DefaultModal(props: Props): JSX.Element {\n const {\n children,\n openModal = false,\n handleClose,\n classNameModal,\n classNameComponentChild,\n } = props;\n\n return (\n <Modal\n open={openModal}\n onClose={handleClose}\n className={`modal-container ${classNameModal || ''}`}\n style={{\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n }}\n // BackdropProps={{\n // style: {\n // backgroundColor: '#2B2C46',\n // opacity: 0.85,\n // },\n // }}\n >\n <div\n className={classNameComponentChild}\n style={{ overflowY: 'hidden', maxHeight: '95vh', borderRadius: 12 }}\n >\n {children}\n </div>\n </Modal>\n );\n}\n\nexport default DefaultModal;\n","import NyrisAPI, { NyrisAPISettings } from '@nyris/nyris-api';\n\nexport interface Filter {\n key?: string;\n values: string[];\n}\n\nexport const getFilters = async (\n number: number = 10,\n settings: NyrisAPISettings,\n) => {\n const nyrisApi = new NyrisAPI(settings);\n return nyrisApi.getFilters(number);\n};\n\nexport const searchFilters = async (\n key: any = '',\n value: string,\n settingsNyris: NyrisAPISettings,\n) => {\n const nyrisApi = new NyrisAPI(settingsNyris);\n const newValue = value ? value : '';\n return nyrisApi.searchFilters(key, newValue);\n};\n","export function truncateString(str: string, num: number): string {\n if (str?.length > num) {\n return str?.slice(0, num) + '...';\n } else {\n return str;\n }\n}\n","import { Box, Button, Tooltip, Typography } from '@material-ui/core';\nimport React, { useEffect, useState } from 'react';\nimport CloseIcon from '@material-ui/icons/Close';\nimport IconSearch from 'common/assets/icons/icon_search.svg';\nimport { getFilters, searchFilters } from 'services/filter';\nimport { useAppDispatch, useAppSelector } from 'Store/Store';\nimport { setUpdateKeyFilterDesktop } from 'Store/search/Search';\nimport { ToggleButton, ToggleButtonGroup } from '@material-ui/lab';\nimport { useMediaQuery } from 'react-responsive';\nimport { isEmpty } from 'lodash';\nimport { Skeleton } from '@material-ui/lab';\nimport { truncateString } from 'helpers/truncateString';\n\ninterface Props {\n handleClose?: any;\n // onChangeKeyFilter?: any;\n}\n\nfunction PreFilterComponent(props: Props) {\n const { handleClose } = props;\n const dispatch = useAppDispatch();\n const stateGlobal = useAppSelector(state => state);\n const {\n settings,\n search: { keyFilter: keyFilterState },\n } = stateGlobal;\n const [resultFilter, setResultFilter] = useState<any>([]);\n const [keyFilter, setKeyFilter] = useState<string>(keyFilterState || '');\n const [isLoading, setLoading] = useState<boolean>(false);\n const [columns, setColumns] = useState<number>(0);\n const isMobile = useMediaQuery({ query: '(max-width: 776px)' });\n\n const getDataFilterDesktop = async () => {\n setLoading(true);\n const dataResultFilter = getFilters(1000, settings)\n .then(res => {\n const arrResult =\n res.find(value => value.key === settings.visualSearchFilterKey)\n ?.values || [];\n const newResult = arrResult.sort().reduce((a: any, c: any) => {\n let k = c[0].toLocaleUpperCase();\n if (a[k]) a[k].push(c);\n else a[k] = [c];\n return a;\n }, {});\n setResultFilter(newResult);\n setColumns(Object.keys(newResult).length);\n })\n .catch((e: any) => {\n console.log('err getDataFilterDesktop', e);\n })\n .finally(() => {\n setLoading(false);\n });\n\n return dataResultFilter;\n };\n\n useEffect(() => {\n getDataFilterDesktop();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const handleAlignment = (\n event: React.MouseEvent<HTMLElement>,\n value: any,\n ) => {\n setKeyFilter(value);\n };\n\n const filterSearchHandler = async (value: any) => {\n if (!value) {\n getDataFilterDesktop();\n return;\n }\n const data = await searchFilters(\n settings.visualSearchFilterKey,\n encodeURIComponent(value),\n settings,\n )\n .then(res => {\n // console.log(\"res\", res);\n if (res.length > 0) {\n setResultFilter({ [res[0][0].toLocaleUpperCase()]: res });\n if (res.length <= 20) setColumns(1);\n else if (res.length <= 40) setColumns(2);\n else setColumns(4);\n } else {\n setResultFilter({});\n setColumns(4);\n }\n return;\n })\n .catch((e: any) => {\n console.log('err filterSearchHandler', e);\n });\n return data;\n };\n\n const onHandlerSubmitData = () => {\n dispatch(setUpdateKeyFilterDesktop(keyFilter));\n handleClose();\n };\n\n return (\n <Box\n className=\"box-child-component-filter-desktop\"\n display={'flex'}\n flexDirection={'column'}\n style={{ position: 'relative' }}\n >\n <Typography\n style={{\n color: '#000',\n fontSize: '24px',\n fontWeight: 700,\n paddingLeft: isMobile ? '0px' : '14px',\n marginBottom: isMobile ? '0px' : '-8px',\n marginTop: isMobile ? '0px' : '24px',\n }}\n >\n {settings.preFilterTitle}\n </Typography>\n\n <Box\n className=\"box-top\"\n style={isMobile ? { padding: 0 } : undefined}\n display={'flex'}\n justifyContent={'space-between'}\n alignItems={'center'}\n >\n <Box\n className=\"box-input-search-filter\"\n display={'flex'}\n justifyItems={'center'}\n style={isMobile ? { width: '100%' } : undefined}\n >\n {(!keyFilter || isMobile) && (\n <Box\n className=\"icon-search\"\n style={{ marginRight: 11 }}\n display={'flex'}\n justifyContent={'center'}\n alignItems={'center'}\n >\n <img\n style={{ maxWidth: 'fit-content' }}\n src={IconSearch}\n alt=\"\"\n width={18}\n height={18}\n />\n </Box>\n )}\n\n {keyFilter && !isMobile && (\n <Box display={'flex'} className=\"box-keyFilter\">\n <Typography className=\"keyFilter max-line-1\">\n {keyFilter}\n </Typography>\n <Button style={{ padding: 0 }} onClick={() => setKeyFilter('')}>\n <CloseIcon style={{ fontSize: 12, color: '#2B2C46' }} />\n </Button>\n </Box>\n )}\n\n <input\n className=\"input-search-filter\"\n placeholder=\"Search\"\n onChange={(e: any) => {\n filterSearchHandler(e.target.value);\n }}\n />\n </Box>\n\n {!isMobile && (\n <Button onClick={handleClose}>\n <CloseIcon />\n </Button>\n )}\n </Box>\n\n <Box style={{ margin: '10px 16px' }}>\n {keyFilter && isMobile && (\n <Box\n display={'flex'}\n className=\"box-keyFilter\"\n style={{ display: 'inline-flex' }}\n >\n <Typography className=\"keyFilter\">{keyFilter}</Typography>\n <Button style={{ padding: 0 }} onClick={() => setKeyFilter('')}>\n <CloseIcon style={{ fontSize: 12, color: '#2B2C46' }} />\n </Button>\n </Box>\n )}\n </Box>\n <Box\n className=\"box-bottom\"\n height={'100%'}\n style={\n isMobile\n ? { columnCount: 1, marginBottom: keyFilter ? '50px' : '0px' }\n : columns <= 4\n ? { columnCount: columns, height: '100%', paddingBottom: 20 }\n : { columnCount: 4, paddingBottom: 20 }\n }\n >\n {Object.entries(resultFilter).map(([key, value]: any, i: any) => {\n return (\n <Box\n className=\"box-group-items\"\n style={\n columns <= 4 ? { width: 'fit-content' } : { width: '100%' }\n }\n >\n <Typography\n style={{ fontWeight: 'bold', color: '#000', paddingLeft: 11 }}\n >\n {key}\n </Typography>\n\n <ToggleButtonGroup\n value={keyFilter}\n exclusive\n onChange={handleAlignment}\n aria-label=\"\"\n className=\"box-btn-group\"\n >\n {value.map((item: any, index: any) => {\n return (\n <Tooltip\n key={item}\n title={item}\n placement=\"top\"\n arrow={true}\n disableHoverListener={item.length < 20}\n >\n <ToggleButton\n value={item}\n aria-label={item}\n className=\"item-btn\"\n onChange={() => {\n setKeyFilter(item);\n }}\n >\n {truncateString(item, !isMobile ? 20 : 35)}\n </ToggleButton>\n </Tooltip>\n );\n })}\n </ToggleButtonGroup>\n </Box>\n );\n })}\n {isLoading && (\n <Box style={{ columnCount: isMobile ? 1 : 4 }}>\n {Array(12)\n .fill('')\n .map((_, index) => {\n return (\n <Box key={index} mb={5}>\n <Skeleton animation={'pulse'} height={30} width={60} />\n {Array(6)\n .fill('')\n .map((_, index) => (\n <Skeleton animation={'pulse'} height={30} />\n ))}\n </Box>\n );\n })}\n </Box>\n )}\n {isEmpty(resultFilter) && !isLoading && (\n <Typography>No result found</Typography>\n )}\n </Box>\n {keyFilter && !isMobile && (\n <Box\n className=\"footer\"\n style={{ height: 64, marginTop: 'auto' }}\n display={'flex'}\n >\n <Button\n className=\"button-left\"\n style={{\n width: '50%',\n backgroundColor: '#000000',\n color: '#fff',\n borderRadius: 0,\n justifyContent: 'flex-start',\n }}\n onClick={() => handleClose()}\n >\n Cancel\n </Button>\n <Button\n className=\"button-right\"\n style={{\n width: '50%',\n backgroundColor: settings.theme?.primaryColor,\n color: '#fff',\n borderRadius: 0,\n justifyContent: 'flex-start',\n }}\n onClick={() => onHandlerSubmitData()}\n >\n Apply\n </Button>\n </Box>\n )}\n {keyFilter && isMobile && (\n <Box\n className=\"footer\"\n style={{\n height: 64,\n marginTop: 'auto',\n position: 'fixed',\n bottom: '0px',\n left: '0px',\n width: '100vw',\n }}\n display={'flex'}\n >\n <Button\n className=\"button-left\"\n style={{\n width: '50%',\n backgroundColor: '#000000',\n color: '#fff',\n borderRadius: 0,\n justifyContent: 'flex-start',\n }}\n onClick={() => handleClose()}\n >\n Cancel\n </Button>\n <Button\n className=\"button-right\"\n style={{\n width: '50%',\n backgroundColor: settings.theme?.primaryColor,\n color: '#fff',\n borderRadius: 0,\n justifyContent: 'flex-start',\n }}\n onClick={() => onHandlerSubmitData()}\n >\n Apply\n </Button>\n </Box>\n )}\n </Box>\n );\n}\n\nexport default PreFilterComponent;\n","import { Box, Button, Tooltip, Typography } from '@material-ui/core';\nimport IconButton from '@material-ui/core/IconButton';\nimport ClearOutlinedIcon from '@material-ui/icons/ClearOutlined';\nimport CloseIcon from '@material-ui/icons/Close';\nimport IconCamera from 'common/assets/icons/camera.svg';\nimport IconSearch from 'common/assets/icons/icon_search.svg';\nimport { useQuery } from 'hooks/useQuery';\nimport { debounce, isEmpty } from 'lodash';\nimport React, { memo, useCallback, useEffect, useRef, useState } from 'react';\nimport { useDropzone } from 'react-dropzone';\nimport { connectSearchBox } from 'react-instantsearch-dom';\nimport { useMediaQuery } from 'react-responsive';\nimport { useHistory } from 'react-router-dom';\nimport { createImage, findByImage, findRegions } from 'services/image';\nimport { ReactComponent as IconFilter } from 'common/assets/icons/filter_settings.svg';\n\nimport {\n reset,\n setImageSearchInput,\n setRequestImage,\n setSearchResults,\n updateStatusLoading,\n setUpdateKeyFilterDesktop,\n loadingActionResults,\n setRegions,\n setSelectedRegion,\n} from 'Store/search/Search';\nimport { useAppDispatch, useAppSelector } from 'Store/Store';\nimport DefaultModal from 'components/modal/DefaultModal';\nimport PreFilterComponent from 'components/pre-filter';\nimport { RectCoords } from '@nyris/nyris-api';\nimport { truncateString } from 'helpers/truncateString';\nimport { useTranslation } from 'react-i18next';\n\nconst SearchBox = (props: any) => {\n const { refine, onToggleFilterMobile }: any = props;\n // const containerRefInputMobile = useRef<HTMLDivElement>(null);\n const stateGlobal = useAppSelector(state => state);\n const { search, settings } = stateGlobal;\n const { imageThumbSearchInput, keyFilter } = search;\n const focusInp: any = useRef<HTMLDivElement | null>(null);\n const history = useHistory();\n const [valueInput, setValueInput] = useState<string>('');\n const dispatch = useAppDispatch();\n const isMobile = useMediaQuery({ query: '(max-width: 776px)' });\n const query = useQuery();\n const [isOpenModalFilterDesktop, setToggleModalFilterDesktop] =\n useState<boolean>(false);\n const { t } = useTranslation();\n useEffect(() => {\n if (focusInp?.current) {\n focusInp?.current.focus();\n }\n }, [focusInp]);\n\n useEffect(() => {\n const searchQuery = query.get('query') || '';\n if (!isEmpty(searchQuery)) {\n setValueInput(searchQuery);\n refine(searchQuery);\n // not an ideal solution: fixes text search not working from landing page\n setTimeout(() => {\n refine(searchQuery);\n }, 100);\n }\n }, [query, refine]);\n\n useEffect(() => {\n if (imageThumbSearchInput) {\n setValueInput('');\n refine('');\n history.push('/result');\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [imageThumbSearchInput]);\n\n const searchOrRedirect = useCallback(\n debounce((value: any) => {\n if (value) {\n history.push({\n pathname: '/result',\n search: `?query=${value}`,\n });\n } else {\n history.push('/result');\n }\n }, 500),\n [],\n );\n\n const { getInputProps } = useDropzone({\n onDrop: async (fs: File[]) => {\n dispatch(updateStatusLoading(true));\n dispatch(loadingActionResults());\n if (history.location.pathname !== '/result') {\n history.push('/result');\n }\n let payload: any;\n let filters: any[] = [];\n let region: RectCoords | undefined;\n dispatch(setImageSearchInput(URL.createObjectURL(fs[0])));\n let image = await createImage(fs[0]);\n dispatch(setRequestImage(image));\n const preFilter = [\n {\n key: settings.visualSearchFilterKey,\n values: [`${keyFilter}`],\n },\n ];\n\n if (settings.regions) {\n let res = await findRegions(image, settings);\n dispatch(setRegions(res.regions));\n region = res.selectedRegion;\n dispatch(setSelectedRegion(region));\n }\n\n return findByImage({\n image,\n settings,\n filters: keyFilter ? preFilter : undefined,\n region,\n })\n .then((res: any) => {\n res?.results.map((item: any) => {\n filters.push({\n sku: item.sku,\n score: item.score,\n });\n });\n payload = {\n ...res,\n filters,\n };\n dispatch(setSearchResults(payload));\n dispatch(updateStatusLoading(false));\n })\n .catch((e: any) => {\n console.log('error input search', e);\n dispatch(updateStatusLoading(false));\n });\n },\n });\n\n const onChangeText = (event: any) => {\n setValueInput(event.currentTarget.value);\n // debounceSearch(event.currentTarget.value);\n searchOrRedirect(event.currentTarget.value);\n if (event.currentTarget.value === '') {\n setValueInput('');\n refine('');\n }\n };\n\n return (\n <Box className=\"wrap-input-search\">\n <div style={{ padding: 10 }} className=\"box-input-search d-flex\">\n <form noValidate action=\"\" role=\"search\">\n <Box className=\"box-inp\">\n <Box\n style={{\n height: '100%',\n order: 1,\n paddingLeft: imageThumbSearchInput || keyFilter ? 0 : 10,\n }}\n >\n {imageThumbSearchInput && (\n <Box\n style={{\n border: `2px solid ${settings.theme?.secondaryColor}c7`,\n backgroundColor: `${settings.theme?.secondaryColor}26`,\n marginRight: '5px',\n }}\n className=\"box-image-search-thumb\"\n display={'flex'}\n >\n <img\n src={imageThumbSearchInput}\n style={{ objectFit: 'contain' }}\n alt=\"img_search\"\n />\n <Tooltip\n title=\"Clear image search\"\n placement=\"top\"\n arrow={true}\n >\n <button\n onClick={() => {\n if (!valueInput) {\n dispatch(reset(''));\n history.push('/');\n }\n dispatch(reset(''));\n refine(valueInput);\n }}\n >\n <CloseIcon\n style={{\n fontSize: 20,\n color: settings.theme?.secondaryColor,\n }}\n />\n </button>\n </Tooltip>\n </Box>\n )}\n </Box>\n\n {!valueInput && (\n <Box\n className=\"icon-search\"\n style={\n imageThumbSearchInput\n ? { order: 2, marginLeft: 5 }\n : { order: 2 }\n }\n >\n <img src={IconSearch} alt=\"\" width={24} height={24} />\n </Box>\n )}\n\n {keyFilter && !isMobile && (\n <Box\n className=\"box-key-filter\"\n style={{ order: 0, marginRight: 5 }}\n >\n <Tooltip\n title={keyFilter}\n placement=\"top\"\n arrow={true}\n disableHoverListener={keyFilter.length < 16}\n >\n <Typography>{truncateString(keyFilter, 15)}</Typography>\n </Tooltip>\n\n <Tooltip title=\"Remove pre-filter\" placement=\"top\" arrow={true}>\n <Button\n onClick={() => dispatch(setUpdateKeyFilterDesktop(''))}\n style={{ padding: '6px 2px' }}\n >\n <CloseIcon\n style={{\n fontSize: 12,\n color: '#2B2C46',\n }}\n />\n </Button>\n </Tooltip>\n </Box>\n )}\n\n <input\n style={{\n border: '0px',\n width: '100%',\n fontSize: 14,\n color: '#2B2C46',\n fontStyle: 'italic',\n }}\n className=\"input-search\"\n placeholder={t('Search')}\n value={valueInput}\n onChange={onChangeText}\n ref={focusInp}\n />\n </Box>\n\n {history.location.pathname === '/result' && valueInput && (\n <Button\n className=\"btn-clear-text\"\n style={{ marginRight: 5 }}\n onClick={() => {\n if (imageThumbSearchInput) {\n setValueInput('');\n refine('');\n return;\n }\n setValueInput('');\n refine('');\n dispatch(reset(''));\n history.push('/');\n }}\n >\n <Tooltip\n title={t('Clear text search')}\n placement=\"top\"\n arrow={true}\n >\n <ClearOutlinedIcon style={{ fontSize: 16, color: '#2B2C46' }} />\n </Tooltip>\n </Button>\n )}\n {!isMobile ? (\n <div className=\"wrap-box-input-mobile d-flex\">\n {settings.preFilterOption && (\n <Tooltip\n title=\"Add or change pre-filter\"\n placement=\"top\"\n arrow={true}\n style={{ backgroundColor: '#000000' }}\n >\n <Button\n onClick={() => setToggleModalFilterDesktop(true)}\n style={{\n width: 32,\n height: 32,\n borderRadius: '100%',\n backgroundColor: '#fff',\n marginRight: 7,\n }}\n >\n <IconFilter />\n </Button>\n </Tooltip>\n )}\n <input\n accept=\"image/*\"\n id=\"icon-button-file\"\n type=\"file\"\n style={{ display: 'none' }}\n {...getInputProps({\n onClick: e => {\n e.stopPropagation();\n },\n })}\n />\n <Tooltip\n title={t('Search with an image')}\n placement=\"top\"\n arrow={true}\n >\n <label htmlFor=\"icon-button-file\">\n <IconButton\n color=\"primary\"\n aria-label=\"upload picture\"\n component=\"span\"\n style={{\n width: 32,\n height: 32,\n borderRadius: '100%',\n backgroundColor: '#fff',\n padding: 7,\n }}\n >\n <img src={IconCamera} alt=\"\" width={18} height={18} />\n </IconButton>\n </label>\n </Tooltip>\n </div>\n ) : (\n <Box>\n <Button\n className=\"btn-mobile-filter\"\n onClick={onToggleFilterMobile}\n >\n <IconFilter width={18} height={18} />\n </Button>\n </Box>\n )}\n </form>\n </div>\n\n {settings.preFilterOption && (\n <DefaultModal\n openModal={isOpenModalFilterDesktop}\n handleClose={() => setToggleModalFilterDesktop(false)}\n classNameModal=\"wrap-filter-destop\"\n classNameComponentChild=\"bg-white box-filter-destop\"\n >\n <PreFilterComponent\n handleClose={() => setToggleModalFilterDesktop(false)}\n />\n </DefaultModal>\n )}\n </Box>\n );\n};\n\nconst CustomSearchBox = connectSearchBox<any>(memo(SearchBox));\nexport default CustomSearchBox;\n","var _path;\nvar _excluded = [\"svgRef\", \"title\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from \"react\";\nvar SvgIconSearch = function SvgIconSearch(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M24 22.7447L17.2958 16.0405C18.9068 14.1064 19.7101 11.6258 19.5387 9.11455C19.3672 6.60331 18.2342 4.25484 16.3754 2.55768C14.5165 0.860522 12.0749 -0.0546567 9.55849 0.00252705C7.04206 0.0597108 4.64455 1.08485 2.8647 2.8647C1.08485 4.64455 0.0597108 7.04206 0.00252705 9.55849C-0.0546567 12.0749 0.860522 14.5165 2.55768 16.3754C4.25484 18.2342 6.60331 19.3672 9.11455 19.5387C11.6258 19.7101 14.1064 18.9068 16.0405 17.2958L22.7447 24L24 22.7447ZM1.80687 9.7964C1.80687 8.21622 2.27545 6.67152 3.15335 5.35765C4.03125 4.04378 5.27904 3.01974 6.73894 2.41504C8.19883 1.81033 9.80526 1.65211 11.3551 1.96039C12.9049 2.26866 14.3285 3.02959 15.4458 4.14695C16.5632 5.2643 17.3241 6.6879 17.6324 8.23772C17.9407 9.78753 17.7825 11.394 17.1778 12.8539C16.573 14.3138 15.549 15.5615 14.2351 16.4394C12.9213 17.3173 11.3766 17.7859 9.7964 17.7859C7.67816 17.7836 5.64736 16.9411 4.14954 15.4433C2.65173 13.9454 1.80922 11.9146 1.80687 9.7964Z\",\n fill: \"#55566B\"\n })));\n};\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgIconSearch, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/icon_search.418decdc.svg\";\nexport { ForwardRef as ReactComponent };","import { Box, Button, Typography } from '@material-ui/core';\nimport CloseIcon from '@material-ui/icons/Close';\nimport { ReactComponent as IconFilter } from 'common/assets/icons/filter_settings.svg';\n\nimport React, { memo, useCallback, useEffect, useRef, useState } from 'react';\nimport { connectSearchBox } from 'react-instantsearch-dom';\nimport { useMediaQuery } from 'react-responsive';\nimport { NavLink, useHistory } from 'react-router-dom';\nimport {\n onResetRequestImage,\n reset,\n setImageSearchInput,\n updateValueTextSearchMobile,\n setUpdateKeyFilterDesktop,\n setPreFilterDropdown,\n} from 'Store/search/Search';\nimport { useAppDispatch, useAppSelector } from 'Store/Store';\nimport { AppState } from 'types';\nimport CustomSearchBox from './input/inputSearch';\nimport { ReactComponent as IconSearch } from 'common/assets/icons/icon_search.svg';\nimport { debounce, isEmpty } from 'lodash';\nimport { useQuery } from 'hooks/useQuery';\n\ninterface Props {\n onToggleFilterMobile?: any;\n refine?: any;\n}\n\nfunction HeaderMobileComponent(props: Props): JSX.Element {\n const { onToggleFilterMobile, refine } = props;\n const dispatch = useAppDispatch();\n const stateGlobal = useAppSelector(state => state);\n const { search } = stateGlobal;\n const {\n imageThumbSearchInput,\n textSearchInputMobile,\n keyFilter,\n preFilterDropdown,\n } = search;\n const query = useQuery();\n const isMobile = useMediaQuery({ query: '(max-width: 776px)' });\n const containerRefInputMobile = useRef<HTMLDivElement>(null);\n const [isShowInputSearch, setShowInputSearch] = useState<boolean>(false);\n const [isShowFilter, setShowFilter] = useState<boolean>(false);\n const history = useHistory();\n const { settings } = useAppSelector<AppState>((state: any) => state);\n\n useEffect(() => {\n if (history.location?.pathname === '/result') {\n setShowFilter(true);\n } else {\n setShowFilter(false);\n }\n }, [history.location]);\n\n useEffect(() => {\n if (imageThumbSearchInput !== '') {\n history.push('/result');\n dispatch(updateValueTextSearchMobile(''));\n refine('');\n }\n }, [imageThumbSearchInput, dispatch, refine, history]);\n\n useEffect(() => {\n if (\n history.location?.pathname === '/result' ||\n history.location?.pathname === '/'\n ) {\n setShowInputSearch(true);\n } else {\n setShowInputSearch(false);\n }\n }, [history.location]);\n\n useEffect(() => {\n const searchQuery = query.get('query') || '';\n if (!isEmpty(searchQuery)) {\n dispatch(updateValueTextSearchMobile(searchQuery));\n refine(searchQuery);\n // not an ideal solution: fixes text search not working from landing page\n setTimeout(() => {\n refine(searchQuery);\n }, 100);\n }\n }, [query, refine, dispatch]);\n\n const searchOrRedirect = useCallback(\n debounce((value: any) => {\n if (value) {\n history.push({\n pathname: '/result',\n search: `?query=${value}`,\n });\n } else {\n history.push('/result');\n }\n }, 500),\n [],\n );\n\n const onChangeText = (event: any) => {\n // debounceSearch(event.currentTarget.value);\n searchOrRedirect(event.currentTarget.value);\n if (event.currentTarget.value === '') {\n dispatch(updateValueTextSearchMobile(''));\n refine('');\n } else {\n dispatch(updateValueTextSearchMobile(event.currentTarget.value));\n }\n };\n return (\n <Box style={{ width: '100%' }}>\n <Box\n className=\"box-content\"\n style={{\n display: 'flex',\n alignItems: 'center',\n height: '50px',\n borderBottom: '1px solid #e9e9ec',\n background: settings.theme?.headerColor,\n }}\n >\n <NavLink\n to=\"/\"\n style={{ lineHeight: 0, paddingLeft: '10px' }}\n onClick={() => {\n dispatch(reset(''));\n }}\n >\n <img\n src={settings.theme?.appBarLogoUrl}\n alt=\"logo\"\n style={{\n aspectRatio: 1,\n width: settings.theme?.logoWidth,\n height: settings.theme?.logoHeight,\n }}\n />\n </NavLink>\n </Box>\n <Box className=\"wrap-header-mobile\">\n {!isMobile ? (\n <CustomSearchBox onToggleFilterMobile={onToggleFilterMobile} />\n ) : (\n <>\n <div style={{ display: 'flex', alignItems: 'center' }}>\n {imageThumbSearchInput && (\n <div\n style={{\n border: `2px solid ${settings.theme?.secondaryColor}c7`,\n backgroundColor: `${settings.theme?.secondaryColor}26`,\n }}\n className=\"box-image-search-thumb-mobile\"\n >\n <img\n src={imageThumbSearchInput}\n style={{ maxWidth: '39px', objectFit: 'contain' }}\n alt=\"img_search\"\n />\n <button\n style={{\n backgroundColor: `${settings.theme?.secondaryColor}26`,\n }}\n onClick={() => {\n if (textSearchInputMobile) {\n dispatch(setImageSearchInput(''));\n dispatch(onResetRequestImage(''));\n // setTimeout(() => {\n // refine(textSearchInputMobile);\n // }, 300);\n // setTimeout(() => {\n // setResetImage(false);\n // }, 1000);\n return;\n }\n dispatch(reset(''));\n history.push('/');\n }}\n >\n <CloseIcon\n style={{\n fontSize: 20,\n color: settings.theme?.secondaryColor,\n fontWeight: 700,\n }}\n />\n </button>\n </div>\n )}\n {isShowInputSearch && (\n <>\n <div\n ref={containerRefInputMobile}\n id=\"box-input-search\"\n className=\"d-flex w-100\"\n style={{\n alignItems: 'center',\n }}\n >\n {!textSearchInputMobile && (\n <Box\n style={{\n paddingLeft: '8px',\n display: 'flex',\n alignItems: 'center',\n }}\n >\n <IconSearch width={20} height={20} />\n </Box>\n )}\n <Input\n value={textSearchInputMobile}\n onChange={onChangeText}\n />\n\n {isShowFilter && settings.postFilterOption && (\n <Box className=\"box-button-input-mobile\">\n <Button\n className=\"btn-mobile-filter\"\n onClick={onToggleFilterMobile}\n >\n {/* <img src={IconFilter} alt=\"\" width={18} height={18} /> */}\n <IconFilter />\n </Button>\n </Box>\n )}\n {history.location?.pathname !== '/' &&\n textSearchInputMobile && (\n <Box\n className=\"btn-close-header\"\n style={{ backgroundColor: '#fff' }}\n >\n <button\n onClick={() => {\n if (imageThumbSearchInput) {\n history.push('/result');\n dispatch(updateValueTextSearchMobile(''));\n refine('');\n return;\n }\n dispatch(updateValueTextSearchMobile(''));\n dispatch(reset(''));\n refine('');\n history.push('/');\n }}\n style={{\n backgroundColor: '#fff',\n border: 0,\n display: 'flex',\n }}\n >\n <CloseIcon\n style={{\n fontSize: 20,\n color: settings.theme?.secondaryColor,\n }}\n />\n </button>\n </Box>\n )}\n </div>\n </>\n )}\n {settings.preFilterOption && (\n <Button\n onClick={() => {\n dispatch(setPreFilterDropdown(!preFilterDropdown));\n }}\n style={{\n order: 3,\n width: 32,\n height: 32,\n borderRadius: '100%',\n backgroundColor:\n preFilterDropdown || keyFilter\n ? `${settings.theme?.secondaryColor}26`\n : '#f3f3f5',\n margin: '0 12px',\n }}\n >\n {preFilterDropdown ? (\n <CloseIcon\n style={{\n fontSize: 16,\n color: settings.theme?.secondaryColor,\n }}\n />\n ) : (\n <IconFilter\n color={\n keyFilter ? settings.theme?.secondaryColor : '#000'\n }\n />\n )}\n </Button>\n )}\n </div>\n </>\n )}\n </Box>\n {keyFilter && isMobile && (\n <Box\n className=\"ml-auto mr-auto\"\n style={{\n display: 'flex',\n columnGap: '16px',\n alignItems: 'center',\n // justifyContent: 'space-between',\n // margin: '12px 12px 5px 12px',\n marginTop: '12px',\n marginBottom: '5px',\n paddingLeft: '16px',\n paddingRight: '16px',\n }}\n >\n <Typography color=\"textPrimary\">Pre-filter:</Typography>\n <Box\n className=\"box-key-filter\"\n style={{\n display: 'inline-flex',\n border: '2px solid black',\n borderRadius: 3,\n padding: '2px 5px',\n background: '#efefef',\n color: 'black',\n alignItems: 'center',\n }}\n >\n <Typography>{keyFilter}</Typography>\n <Button\n style={{ paddingRight: '0px' }}\n onClick={() => dispatch(setUpdateKeyFilterDesktop(''))}\n >\n <CloseIcon\n style={{\n fontSize: 16,\n color: '#2B2C46',\n }}\n />\n </Button>\n </Box>\n </Box>\n )}\n </Box>\n );\n}\n\nconst HeaderMobile = connectSearchBox<any>(memo(HeaderMobileComponent));\nexport default HeaderMobile;\n\nconst INPUT_ID = 'mobile-input-search';\n\nconst Input = ({ value, onChange }: any) => {\n useEffect(() => {\n const element = document.getElementById(INPUT_ID);\n const inputEventFn = (keyboardEvent: any) => {\n if (keyboardEvent.key === 'Enter') {\n element?.blur();\n }\n };\n\n element?.addEventListener('keyup', inputEventFn, false);\n\n return () => {\n element?.removeEventListener('scroll', inputEventFn, false);\n };\n }, []);\n\n return (\n <input\n style={{\n border: '0px',\n width: '100%',\n fontSize: 14,\n paddingLeft: '12px',\n paddingRight: '4px',\n color: '#2B2C46',\n fontStyle: 'italic',\n outline: 'none',\n }}\n className=\"input-search\"\n placeholder=\"Search\"\n value={value}\n onChange={onChange}\n id={INPUT_ID}\n />\n );\n};\n","import { Box } from '@material-ui/core';\nimport React from 'react';\nimport { NavLink } from 'react-router-dom';\nimport './common.scss';\nimport { useAppDispatch, useAppSelector } from 'Store/Store';\nimport { reset } from 'Store/search/Search';\n\nfunction Header(): JSX.Element {\n const dispatch = useAppDispatch();\n const { settings } = useAppSelector(state => state);\n return (\n <Box className=\"box-content\" display={'flex'}>\n <NavLink\n to=\"/\"\n style={{ lineHeight: 0, paddingLeft: '10px' }}\n onClick={() => {\n dispatch(reset(''));\n }}\n >\n <img\n src={settings.theme?.appBarLogoUrl}\n alt=\"logo\"\n style={{\n aspectRatio: 1,\n width: settings.theme?.logoWidth,\n height: settings.theme?.logoHeight,\n }}\n />\n </NavLink>\n </Box>\n );\n}\n\nexport default Header;\n","import React from 'react';\nimport { Button } from '@material-ui/core';\nimport { memo, useCallback } from 'react';\nimport isEqual from 'react-fast-compare';\nimport type { CurrentRefinementsProvided } from 'react-instantsearch-core';\nimport { connectCurrentRefinements } from 'react-instantsearch-dom';\nimport { useAppSelector } from 'Store/Store';\nimport { AppState } from 'types';\n\nexport type ClearRefinementsProps = CurrentRefinementsProvided & {\n children: React.ReactNode;\n type?: any;\n className?: string;\n};\n\nfunction ClearRefinementsComponent({\n children,\n type = 'native',\n className,\n items,\n refine,\n}: ClearRefinementsProps) {\n const handleButtonClick = useCallback(() => refine(items), [refine, items]);\n const { settings } = useAppSelector<AppState>((state: any) => state);\n\n return (\n <Button\n type={type}\n disabled={!items.length}\n className={className}\n onClick={handleButtonClick}\n style={{\n color: settings.theme.secondaryColor,\n fontWeight: 'bold',\n textTransform: 'capitalize',\n padding: 0,\n }}\n >\n {children}\n </Button>\n );\n}\n\nexport const ClearRefinements = connectCurrentRefinements<any>(\n memo(ClearRefinementsComponent, isEqual),\n);\n","import React, { useEffect, useState } from \"react\";\nexport type DynamicWidgetsProps = {\n children: React.ReactNode;\n enabled?: boolean;\n [index: string]: any;\n};\n\nexport function DynamicWidgetsCT({\n children,\n enabled = true,\n ...props\n}: DynamicWidgetsProps): JSX.Element {\n const [isOpen, setOpen] = useState<boolean>();\n useEffect(() => {\n setOpen(enabled);\n }, [enabled]);\n\n return isOpen ? <div {...props}>{children}</div> : <></>;\n}\n","import React, { useEffect, useState } from \"react\";\nimport RemoveIcon from \"@material-ui/icons/Remove\";\nimport AddIcon from \"@material-ui/icons/Add\";\nimport { Typography } from \"@material-ui/core\";\n\nexport type LabelPosition = \"bottom\" | \"left\" | \"right\" | \"top\";\n\nexport type IconLabelProps = {\n icon?: any;\n label?: string;\n labelPosition?: LabelPosition;\n className?: string;\n classNameLabel?: string;\n};\n\nexport default function IconLabel({\n icon,\n label,\n labelPosition = \"bottom\",\n className = \"gap-1\",\n classNameLabel = \"\",\n}: IconLabelProps) {\n const [tagIcon, setTagIcon] = useState<string>(\"\");\n // let classNamePosition: string;\n // switch (labelPosition) {\n // case \"top\":\n // classNamePosition = \"flex-col-reverse\";\n // break;\n // case \"left\":\n // classNamePosition = \"flex-row-reverse\";\n // break;\n // case \"right\":\n // classNamePosition = \"flex-row\";\n // break;\n // case \"bottom\":\n // default:\n // classNamePosition = \"flex-col\";\n // break;\n // }\n useEffect(() => {\n setTagIcon(icon);\n }, [icon]);\n\n return (\n <div style={{ display: \"flex\", alignItems: 'center' }}>\n {label && (\n <div className={classNameLabel}>\n <Typography\n style={{\n textTransform: \"none\",\n fontSize: 12,\n color: \"#55566B\",\n fontWeight: 600,\n }}\n >\n {label}\n </Typography>\n </div>\n )}\n {tagIcon === \"remove\" ? (\n <RemoveIcon style={{ color: \"#55566B\" }} />\n ) : (\n <AddIcon style={{ color: \"#55566B\" }} />\n )}\n </div>\n );\n}\n","import React from \"react\";\nimport classNames from \"classnames\";\nimport type { Variants } from \"framer-motion\";\nimport { useReducedMotion, motion } from \"framer-motion\";\n\nexport type CollapseProps = {\n isCollapsed: boolean;\n className?: string;\n children: React.ReactNode;\n};\n\nconst variants: Variants = {\n collapsed: (shouldReduceMotion: boolean) => {\n return {\n height: shouldReduceMotion ? \"auto\" : 0,\n opacity: 0,\n pointerEvents: \"none\",\n transitionEnd: { display: \"none\" },\n };\n },\n expanded: (shouldReduceMotion: boolean) => {\n return {\n height: shouldReduceMotion ? \"auto\" : \"auto\",\n opacity: 1,\n pointerEvents: \"auto\",\n display: \"block\",\n };\n },\n};\n\nconst transition = {\n ease: [0.16, 1, 0.3, 1],\n duration: 0.6,\n};\n\nexport function Collapse({\n isCollapsed,\n className,\n children,\n}: CollapseProps): JSX.Element {\n const shouldReduceMotion = useReducedMotion();\n\n return (\n <>\n <motion.div\n key=\"collapse\"\n initial=\"collapsed\"\n animate={isCollapsed ? \"collapsed\" : \"expanded\"}\n variants={variants}\n className={classNames(\"overflow-hidden\", className)}\n transition={transition}\n custom={shouldReduceMotion}\n >\n {children}\n </motion.div>\n </>\n );\n}\n","import { atom } from 'jotai'\nimport { selectAtom, useUpdateAtom } from 'jotai/utils'\nimport { memo, useEffect } from 'react'\nimport isEqual from 'react-fast-compare'\nimport type { StateResultsProvided } from 'react-instantsearch-core'\nimport { connectStateResults } from 'react-instantsearch-dom'\n\nexport type VirtualStateResultsProps = StateResultsProvided\n\nexport type VirtualStateResultsAtomValue = Partial<\n Pick<VirtualStateResultsProps, 'isSearchStalled' | 'searchResults'>\n>\n\nexport const stateResultsAtom = atom<VirtualStateResultsAtomValue>({\n searchResults: undefined,\n isSearchStalled: undefined,\n})\n\nexport const searchResultsAtom = selectAtom(\n stateResultsAtom,\n ({ searchResults }) => searchResults,\n isEqual\n)\nexport const isSearchStalledAtom = selectAtom(\n stateResultsAtom,\n ({ isSearchStalled }) => isSearchStalled\n)\n\nfunction VirtualStateResultsComponent({\n searchResults,\n isSearchStalled,\n}: VirtualStateResultsProps) {\n const setStateResults = useUpdateAtom(stateResultsAtom)\n\n useEffect(() => {\n setStateResults({ searchResults, isSearchStalled })\n }, [setStateResults, searchResults, isSearchStalled])\n\n return null\n}\n\nexport const VirtualStateResults = connectStateResults(\n memo(VirtualStateResultsComponent, isEqual)\n)\n","import { Box, Button, Typography } from \"@material-ui/core\";\nimport AddIcon from \"@material-ui/icons/Add\";\nimport RemoveIcon from \"@material-ui/icons/Remove\";\nimport classNames from \"classnames\";\nimport { Collapse } from \"components/collapse/collapse\";\nimport { useAtomValue } from \"jotai/utils\";\nimport type { MouseEventHandler } from \"react\";\nimport React, { memo } from \"react\";\nimport type {\n CurrentRefinementsProvided,\n SearchResults,\n} from \"react-instantsearch-core\";\nimport { connectCurrentRefinements } from \"react-instantsearch-dom\";\nimport { useMediaQuery } from \"react-responsive\";\nimport { useHasRefinements } from \".\";\nimport { searchResultsAtom } from \"./virtual-state-results\";\n\nexport type ExpandablePanelProps = CurrentRefinementsProvided & {\n children: React.ReactNode;\n className?: string;\n header?: React.ReactNode | string;\n footer?: string;\n attributes?: string[];\n isOpened?: boolean;\n onToggle?: MouseEventHandler;\n};\n\nfunction ExpandablePanelComponent({\n children,\n className,\n header,\n attributes = [],\n isOpened = false,\n items,\n onToggle,\n}: ExpandablePanelProps) {\n const searchResults = useAtomValue(searchResultsAtom) as SearchResults;\n const hasRefinements = useHasRefinements(searchResults, attributes);\n const isMobile = useMediaQuery({ query: \"(max-width: 776px)\" });\n\n return (\n <Box>\n <div\n className={classNames(\n \"border-neutral-light\",\n {\n hidden: !hasRefinements,\n },\n className\n )}\n >\n <Button\n className=\"w-full flex items-center justify-between group\"\n aria-expanded={isOpened}\n style={{ paddingLeft: 0 }}\n onClick={(e) => {\n if (typeof onToggle === \"function\") {\n onToggle(e);\n }\n }}\n >\n <div className=\"flex items-center w-full subhead\">\n <Typography\n className=\"fw-700\"\n style={{\n textTransform: \"none\",\n fontFamily: \"Montserrat !important\",\n fontSize: 14,\n }}\n >\n {header || attributes[0]}\n </Typography>\n </div>\n {!isMobile && (\n <div className=\"text-neutral-dark can-hover:transition-colors can-hover:group-hover:text-neutral-light\">\n {isOpened ? <RemoveIcon /> : <AddIcon />}\n </div>\n )}\n </Button>\n\n <Collapse isCollapsed={!isOpened}>\n <div className=\"mt-4\">{children}</div>\n </Collapse>\n </div>\n </Box>\n );\n}\n\nexport const ExpandablePanelCustom = connectCurrentRefinements<any>(\n memo(ExpandablePanelComponent)\n);\n","import { Box, Button } from '@material-ui/core';\nimport { ClearRefinements } from 'components/clear-refinements/clear-refinements';\nimport { DynamicWidgetsCT } from 'components/dynamic-widgets/dynamic-widgets';\nimport IconLabel from 'components/icon-label/icon-label';\nimport { atom, useAtom } from 'jotai';\nimport { orderBy } from 'lodash';\nimport React, { useCallback, useEffect, useMemo } from 'react';\nimport type {\n CurrentRefinementsProvided,\n SearchResults,\n} from 'react-instantsearch-core';\nimport { RefinementList } from 'react-instantsearch-dom';\nimport { useMediaQuery } from 'react-responsive';\nimport { useHistory } from 'react-router-dom';\nimport { useAppSelector } from 'Store/Store';\nimport { ExpandablePanelCustom } from './expandable-panel';\nimport { getPanelAttributes, getPanelId } from './refinements';\n\nexport type ExpandablePanelProps = CurrentRefinementsProvided & {\n children: React.ReactNode;\n className?: string;\n header?: React.ReactNode | string;\n attributes?: string[];\n isOpened?: boolean;\n onToggle?: any;\n};\n\nexport type Panels = {\n [key: string]: boolean;\n};\n\nexport function useHasRefinements(\n searchResults: SearchResults,\n attributes: string[] = [],\n) {\n const facets = useMemo(() => {\n const disjunctiveFacets = searchResults?.disjunctiveFacets || [];\n const hierarchicalFacets = searchResults?.hierarchicalFacets || [];\n return [...disjunctiveFacets, ...hierarchicalFacets];\n }, [searchResults]);\n\n const hasRefinements = useMemo(() => {\n let found = !attributes.length;\n\n facets.forEach(facet => {\n attributes?.forEach(attribute => {\n if (facet.name === attribute && facet.data) {\n found = true;\n }\n });\n });\n\n return found;\n }, [facets, attributes]);\n\n return hasRefinements;\n}\n\nfunction togglePanels(panels: Panels, val: boolean) {\n return Object.keys(panels).reduce(\n (acc, panelKey) => ({ ...acc, [panelKey]: val }),\n {},\n );\n}\n\nexport const refinementsPanelsExpandedAtom = atom(\n get =>\n Boolean(Object.values(get(refinementsPanelsAtom)).find(v => v === true)),\n (get, set, update: (prev: boolean) => boolean) => {\n const expanded = update(get(refinementsPanelsExpandedAtom));\n set(\n refinementsPanelsAtom,\n togglePanels(get(refinementsPanelsAtom), expanded),\n );\n },\n);\n\nexport const refinementsPanelsAtom = atom<Panels>({});\n\nfunction WidgetPanel({ children, onToggle, panelId, ...props }: any) {\n const onToggleMemoized = useCallback(\n () => onToggle(panelId),\n [onToggle, panelId],\n );\n\n return (\n <ExpandablePanelCustom onToggle={onToggleMemoized} {...props}>\n {children}\n </ExpandablePanelCustom>\n );\n}\n\nexport default function ExpandablePanelComponent({\n dynamicWidgets = true,\n onToogleApplyFillter,\n}: any) {\n const stateGlobal = useAppSelector(state => state);\n const { settings } = stateGlobal;\n const { refinements } = settings;\n const [panels, setPanels] = useAtom(refinementsPanelsAtom);\n const [refinementsPanelsExpanded, setRefinementsPanelsExpanded] = useAtom(\n refinementsPanelsExpandedAtom,\n );\n const history = useHistory();\n const isMobile = useMediaQuery({ query: '(max-width: 776px)' });\n // Set initial panels value\n useEffect(() => {\n setPanels(prevPanels => ({\n ...prevPanels,\n ...refinements.reduce(\n (acc: any, current: any) => ({\n ...acc,\n [getPanelId(current)]: Boolean(current.isExpanded),\n }),\n {},\n ),\n }));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const onToggle = useCallback(\n (panelId: string) => {\n setPanels(prevPanels => {\n return {\n ...prevPanels,\n [panelId]: !prevPanels[panelId],\n };\n });\n },\n [setPanels],\n );\n\n const widgets = useMemo(\n () =>\n refinements.map((refinement: any) => {\n return (\n <RefinementList\n className=\"box-refinement-list\"\n attribute={refinement.attribute}\n {...refinement.options}\n translations={{\n noResults: 'No results',\n placeholder: '',\n }}\n transformItems={(items: any) => orderBy(items, 'label', 'asc')}\n />\n );\n }),\n [refinements],\n );\n\n const widgetsPanels = useMemo(\n () =>\n widgets.map((widget: any, i: any) => {\n const refinement = refinements[i];\n const panelId = getPanelId(refinement);\n const panelAttributes = getPanelAttributes(refinement);\n\n return widget ? (\n <WidgetPanel\n key={panelId}\n panelId={panelId}\n attributes={panelAttributes}\n header={refinement.header}\n isOpened={isMobile ? !panels[panelId] : panels[panelId]}\n onToggle={onToggle}\n >\n {widget}\n </WidgetPanel>\n ) : (\n <></>\n );\n }),\n [widgets, refinements, onToggle, panels, isMobile],\n );\n\n const onTogglePanelsClick = useCallback(() => {\n setRefinementsPanelsExpanded((expanded: boolean) => !expanded);\n }, [setRefinementsPanelsExpanded]);\n\n const handlerApplyfillter = () => {\n onToogleApplyFillter();\n if (history.location.pathname !== '/result') {\n history.push('/result');\n }\n };\n\n return (\n <>\n <div className=\"wrap-main-header-panel\">\n {!isMobile && (\n <Box style={{ borderBottom: '1px solid #E0E0E0' }}>\n <Button\n className=\"text-neutral-darkest\"\n onClick={onTogglePanelsClick}\n style={{ justifyContent: 'flex-end' }}\n >\n <IconLabel\n icon={refinementsPanelsExpanded ? 'remove' : 'add'}\n label={`${\n refinementsPanelsExpanded ? 'Collapse' : 'Expand'\n } all`}\n />\n </Button>\n </Box>\n )}\n </div>\n {isMobile && (\n <Box className=\"box-top-filter\" style={{ paddingBottom: 10 }}>\n <ClearRefinements>Reset Filters</ClearRefinements>\n </Box>\n )}\n <Box className=\"box-center-filter\">\n <DynamicWidgetsCT enabled={dynamicWidgets}>\n {widgetsPanels}\n </DynamicWidgetsCT>\n </Box>\n\n {isMobile && (\n <Box className=\"box-footer-filter\">\n <Button\n className=\"text-white\"\n style={{\n width: '100%',\n backgroundColor: settings.theme?.secondaryColor,\n fontWeight: 700,\n fontSize: 14,\n borderRadius: 0,\n }}\n onClick={handlerApplyfillter}\n >\n APPLY\n </Button>\n </Box>\n )}\n </>\n );\n}\n","import type { Refinement, RefinementWidget } from \"./refinements-type\";\n\nexport function getRefinementPanelId(\n refinement: Refinement | RefinementWidget\n) {\n return refinement?.attributes\n ? refinement.options?.attributes.join(\":\")\n : refinement?.attribute;\n}\n\nexport function getPanelId(refinement: Refinement | RefinementWidget) {\n const widgets = (refinement as Refinement).widgets;\n\n const panelId = [];\n if (widgets?.length) {\n widgets.forEach((refinementWidget: RefinementWidget) =>\n panelId.push(getRefinementPanelId(refinementWidget))\n );\n } else {\n panelId.push(getRefinementPanelId(refinement));\n }\n\n return panelId.join(\":\");\n}\n\nexport function getRefinementPanelAttribute(\n refinement: Refinement | RefinementWidget\n) {\n return refinement?.attribute;\n}\n\nexport function getPanelAttributes(refinement: Refinement | RefinementWidget) {\n const widgets = (refinement as Refinement)?.widgets;\n\n const panelAttributes = [];\n if (widgets?.length) {\n widgets.forEach((refinementWidget: RefinementWidget) =>\n panelAttributes.push(getRefinementPanelAttribute(refinementWidget))\n );\n } else {\n panelAttributes.push(getRefinementPanelAttribute(refinement));\n }\n return panelAttributes;\n}\n","import axios from \"axios\";\nimport {NyrisAPISettings} from \"@nyris/nyris-api\";\n\nconst httpClient = axios.create();\n\nexport const createSessionByApi = async (settings: NyrisAPISettings) => {\n const { apiKey, baseUrl} = settings;\n let headers = {\n \"X-Api-Key\": apiKey,\n };\n let response = await httpClient.request({\n method: \"POST\",\n url: `${baseUrl}/find/v1/session`,\n headers,\n });\n return response.data.session;\n};\n","import { Box } from '@material-ui/core';\nimport { MultipleQueriesQuery } from '@algolia/client-search';\nimport algoliasearch from 'algoliasearch/lite';\nimport { ReactNode } from 'components/common';\nimport React, { memo, useEffect, useMemo, useState } from 'react';\nimport { InstantSearch } from 'react-instantsearch-dom';\nimport { useMediaQuery } from 'react-responsive';\nimport { useHistory } from 'react-router-dom';\nimport {\n changeValueTextSearch,\n onResetRequestImage,\n setPreFilterDropdown,\n setUpdateSession,\n} from 'Store/search/Search';\nimport { useAppDispatch, useAppSelector } from 'Store/Store';\nimport { AlgoliaSettings, AppState } from '../types';\nimport './appMobile.scss';\nimport './common.scss';\nimport FooterMobile from './FooterMobile';\nimport HeaderMobile from './HeaderMobile';\nimport Header from './Header';\nimport ExpandablePanelComponent from './PanelResult';\nimport PreFilterComponent from 'components/pre-filter';\nimport { createSessionByApi } from 'services/session';\n\nfunction Layout({ children }: ReactNode): JSX.Element {\n const dispatch = useAppDispatch();\n const { settings, search } = useAppSelector<AppState>((state: any) => state);\n const { valueTextSearch, loadingSearchAlgolia, preFilterDropdown } = search;\n const { apiKey, appId, indexName } = settings.algolia as AlgoliaSettings;\n const isMobile = useMediaQuery({ query: '(max-width: 776px)' });\n const [isOpenFilter, setOpenFilter] = useState<boolean>(false);\n const history = useHistory();\n let isShowHeaderMobile =\n (isMobile && history.location?.pathname === '/result') ||\n history.location?.pathname === '/';\n\n useEffect(() => {\n const createSession = async () => {\n let payload = await createSessionByApi(settings);\n dispatch(setUpdateSession(payload));\n };\n\n createSession().catch(console.log);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n if (history.location?.pathname === '/') {\n document.title = settings.appTitle || '';\n dispatch(onResetRequestImage(''));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [history.location]);\n\n let HeaderApp: any;\n let FooterApp: any;\n let classNameBoxVersion: string = 'newVersion';\n if (isMobile) {\n classNameBoxVersion = 'mobile';\n FooterApp = FooterMobile;\n HeaderApp = HeaderMobile;\n } else {\n HeaderApp = Header;\n }\n\n const conditionalQuery = useMemo(() => {\n const searchClient = algoliasearch(appId, apiKey);\n searchClient.initIndex(indexName);\n return {\n ...searchClient,\n search(requests: MultipleQueriesQuery[]) {\n if (\n requests.every(\n (request: MultipleQueriesQuery) =>\n !request.params?.query &&\n (!request.params?.filters ||\n request.params?.filters.endsWith('<score=1>')),\n )\n ) {\n // Here we have to do something else\n return Promise.resolve({\n results: requests.map(() => ({\n hits: [],\n nbHits: 0,\n nbPages: 0,\n processingTimeMS: 0,\n })),\n });\n }\n return searchClient.search(requests);\n },\n };\n }, [apiKey, appId, indexName]);\n\n return (\n <Box position={'relative'} className=\"wrap-mobile\">\n {loadingSearchAlgolia && (\n <Box className=\"box-wrap-loading\" style={{ zIndex: 99999999 }}>\n <Box className=\"loadingSpinCT\" style={{ top: 0, bottom: 0 }}>\n <Box className=\"box-content-spin\"></Box>\n </Box>\n </Box>\n )}\n <InstantSearch\n indexName={indexName}\n searchClient={conditionalQuery}\n searchState={valueTextSearch}\n onSearchStateChange={state => {\n if (state.page && state.query !== undefined) {\n dispatch(changeValueTextSearch(state));\n }\n }}\n >\n <div className={`layout-main-${classNameBoxVersion}`}>\n <div\n className={\n !isMobile\n ? `box-header-${classNameBoxVersion}-main`\n : isShowHeaderMobile\n ? `box-header-${classNameBoxVersion}-main`\n : ''\n }\n style={{\n ...(classNameBoxVersion === 'newVersion'\n ? { background: settings.theme?.headerColor }\n : {}),\n }}\n >\n <HeaderApp\n onToggleFilterMobile={() => {\n setOpenFilter(!isOpenFilter);\n }}\n />\n </div>\n\n <div className={`box-body-${classNameBoxVersion}-wrap-main`}>\n {children}\n </div>\n {isMobile && (\n <div className=\"footer-wrap-main\">\n <FooterApp />\n </div>\n )}\n </div>\n {isMobile && (\n <Box\n className={`box-fillter ${isOpenFilter ? 'open' : 'close'} `}\n position={'absolute'}\n >\n <ExpandablePanelComponent\n onToogleApplyFillter={() => {\n setOpenFilter(!isOpenFilter);\n }}\n />\n </Box>\n )}\n {isMobile && preFilterDropdown && (\n <Box\n className={`box-fillter open`}\n position={'absolute'}\n style={{ top: '97px' }}\n >\n <div\n style={{ width: !isMobile ? '90%' : '100%' }}\n className={'wrap-filter-destop'}\n >\n <div className={'bg-white box-filter-destop isMobile'}>\n <PreFilterComponent\n handleClose={() =>\n dispatch(setPreFilterDropdown(!preFilterDropdown))\n }\n />\n </div>\n </div>\n </Box>\n )}\n </InstantSearch>\n </Box>\n );\n}\n\nexport default memo(Layout);\n","import { Box, Typography } from '@material-ui/core';\nimport React, { memo } from 'react';\nimport { useDropzone } from 'react-dropzone';\nimport { makeFileHandler } from '@nyris/nyris-react-components';\nimport { useAppDispatch, useAppSelector } from 'Store/Store';\nimport { createImage, findByImage, findRegions } from 'services/image';\nimport {\n setSearchResults,\n setRequestImage,\n setImageSearchInput,\n updateStatusLoading,\n loadingActionResults,\n setRegions,\n setSelectedRegion,\n} from 'Store/search/Search';\nimport { showFeedback } from 'Store/nyris/Nyris';\nimport { useHistory } from 'react-router-dom';\nimport { useState } from 'react';\nimport IconUpload from 'common/assets/images/Icon_Upload.svg';\nimport { RectCoords } from '@nyris/nyris-api';\nimport { useTranslation } from 'react-i18next';\n\ninterface Props {\n acceptTypes: any;\n onChangeLoading?: any;\n isLoading?: boolean;\n}\n\nfunction DragDropFile(props: Props) {\n const history = useHistory();\n const dispatch = useAppDispatch();\n const { acceptTypes, onChangeLoading, isLoading } = props;\n const searchState = useAppSelector(state => state);\n const {\n settings,\n search: { keyFilter },\n } = searchState;\n const [isLoadingLoadFile, setLoadingLoadFile] = useState<any>(false);\n const { t } = useTranslation();\n const { getRootProps, getInputProps, isDragActive } = useDropzone({\n onDrop: async (fs: File[]) => {\n history.push('/result');\n dispatch(updateStatusLoading(true));\n dispatch(loadingActionResults());\n onChangeLoading(true);\n let payload: any;\n let filters: any[] = [];\n setLoadingLoadFile(true);\n console.log('fs', fs);\n dispatch(setImageSearchInput(URL.createObjectURL(fs[0])));\n let image = await createImage(fs[0]);\n dispatch(setRequestImage(image));\n const preFilter = [\n {\n key: settings.visualSearchFilterKey,\n values: [`${keyFilter}`],\n },\n ];\n let region: RectCoords | undefined;\n if (settings.regions) {\n let res = await findRegions(image, settings);\n dispatch(setRegions(res.regions));\n region = res.selectedRegion;\n dispatch(setSelectedRegion(region));\n }\n\n return findByImage({\n image,\n settings,\n region,\n filters: keyFilter ? preFilter : undefined,\n }).then((res: any) => {\n res?.results.map((item: any) => {\n filters.push({\n sku: item.sku,\n score: item.score,\n });\n });\n payload = {\n ...res,\n filters,\n };\n dispatch(setSearchResults(payload));\n setLoadingLoadFile(false);\n onChangeLoading(false);\n dispatch(updateStatusLoading(false));\n return dispatch(showFeedback());\n });\n },\n });\n\n return (\n <Box\n className={\n !isDragActive && !isLoadingLoadFile\n ? `box-content-main`\n : `box-content-main-drop`\n }\n >\n {isLoading && (\n <Box className=\"loadingSpinCT\">\n <Box className=\"box-content-spin\"></Box>\n </Box>\n )}\n\n <div\n className={`box-border`}\n style={{ position: 'relative' }}\n {...getRootProps({\n onClick: e => {\n e.stopPropagation();\n },\n })}\n >\n {isDragActive ? (\n <Box>\n <Typography className=\"text-drop-file\">\n DRAG <span className=\"tractor\">&</span> DROP\n </Typography>\n <input\n {...getInputProps({\n onClick: e => {\n e.stopPropagation();\n },\n })}\n type=\"file\"\n name=\"file\"\n id=\"select_file\"\n placeholder=\"Choose photo\"\n accept={acceptTypes}\n onChange={makeFileHandler(e => {})}\n />\n </Box>\n ) : (\n <>\n <Box\n className=\"box-content-drop\"\n {...getRootProps({\n onClick: e => {\n e.stopPropagation();\n },\n })}\n >\n <Box style={{ marginBottom: 16 }}>\n <img src={IconUpload} alt=\"\" width={48} height={48} />\n </Box>\n <label\n htmlFor=\"select_file\"\n className=\"\"\n style={{ color: '#2B2C46', fontSize: 14 }}\n >\n <span className=\"fw-700\" style={{ paddingRight: '4px' }}>\n {t('Choose an image')}\n </span>\n {t('or drag it here')}\n </label>\n <input\n {...getInputProps()}\n type=\"file\"\n name=\"file\"\n id=\"select_file\"\n className=\"inputFile\"\n placeholder=\"Choose photo\"\n style={{ display: 'block' }}\n />\n </Box>\n </>\n )}\n </div>\n </Box>\n );\n}\n\nexport default memo(DragDropFile);\n","import { Box } from '@material-ui/core';\nimport React, { useState } from 'react';\nimport './common.scss';\nimport { cadExtensions } from '@nyris/nyris-api';\nimport algoliasearch from 'algoliasearch/lite';\nimport IconSupport from 'common/assets/icons/support3.svg';\nimport DragDropFile from 'components/DragDropFile';\nimport CustomSearchBox from 'components/input/inputSearch';\nimport { connectInfiniteHits } from 'react-instantsearch-dom';\nimport { useMediaQuery } from 'react-responsive';\nimport { Link } from 'react-router-dom';\nimport { useAppSelector } from 'Store/Store';\nimport { AlgoliaSettings } from '../../types';\n\nfunction AppMD() {\n const { settings } = useAppSelector(state => state);\n const [isLoading, setLoading] = useState<boolean>(false);\n const { apiKey, appId, indexName } = settings.algolia as AlgoliaSettings;\n const searchClient = algoliasearch(appId, apiKey);\n searchClient.initIndex(indexName);\n const isMobile = useMediaQuery({ query: '(max-width: 776px)' });\n\n const acceptTypes = ['image/*']\n .concat(settings.cadSearch ? cadExtensions : [])\n .join(',');\n\n const InfiniteHits = ({ hits }: any) => {\n return <div></div>;\n };\n\n const onChangeLoading = (value: boolean) => {\n setLoading(value);\n };\n\n const CustomInfiniteHits = connectInfiniteHits(InfiniteHits);\n\n return (\n <Box className={`box-content-main ${isLoading ? 'loading' : ''}`}>\n {isMobile && (\n <Box className=\"btn-open-support\">\n <Link to={'/support'} style={{ color: '#3E36DC' }}>\n <img src={IconSupport} alt=\"\" width={16} height={16} />\n </Link>\n </Box>\n )}\n <Box className=\"box-content_top\">\n <Box className=\"fw-700 text-f32 text-dark2\">\n <h1>{settings.headerText}</h1>\n </Box>\n <div className=\"box-input\">\n <div className=\"wrap-input-search\">\n <div style={{ display: 'none' }}>\n <CustomInfiniteHits />\n </div>\n <CustomSearchBox />\n </div>\n </div>\n </Box>\n <Box className=\"box-content_bottom\">\n <DragDropFile\n acceptTypes={acceptTypes}\n isLoading={isLoading}\n onChangeLoading={onChangeLoading}\n />\n </Box>\n </Box>\n );\n}\n\nexport default AppMD;\n","import { Typography } from \"@material-ui/core\";\nimport React from \"react\";\nimport { useMediaQuery } from \"react-responsive\";\ninterface ExampleImagesProps {\n images: string[];\n onExampleImageClicked: (url: string) => void;\n onToggleModalCamera?: any;\n}\n\nconst ExampleImages: React.FC<ExampleImagesProps> = ({\n images,\n onExampleImageClicked,\n}) => {\n const isMobile = useMediaQuery({ query: \"(max-width: 776px)\" });\n\n if (images.length === 0) {\n return null;\n }\n return (\n <section className=\"useExampleImg\">\n {!isMobile && (\n <Typography className=\"title-box text-center\">\n You can also try one of these pictures:\n </Typography>\n )}\n\n <div className=\"exampleImages d-flex justify-center\">\n <div className=\"exImagesWrap\">\n {images.map((i) => {\n return (\n <img\n key={i}\n src={i}\n alt=\"\"\n onClick={() => onExampleImageClicked(i)}\n />\n );\n })}\n </div>\n </div>\n </section>\n );\n};\n\nexport default ExampleImages;\n","import toast from 'react-hot-toast';\n\nexport class ToastHelper {\n static success(msg: string) {\n toast.success(msg, {\n duration: 3000,\n style: {\n background: '#1E1F31',\n color: '#fff',\n },\n });\n }\n}\n","import NyrisAPI, {\n FeedbackEventPayload,\n NyrisAPISettings,\n RectCoords,\n} from '@nyris/nyris-api';\nimport { RootState } from '../Store/Store';\nimport { ToastHelper } from '../helpers/ToastHelper';\n\nexport const feedbackSuccessEpic = async (\n state: RootState,\n success: boolean,\n) => {\n const { search, settings } = state;\n const sessionId = search.sessionId;\n const requestId = search.requestId || search.sessionId;\n\n try {\n const res = await sendFeedbackByApi(settings, sessionId, requestId, {\n event: 'feedback',\n data: { success },\n });\n ToastHelper.success('Thank you for your feedback.');\n return res;\n } catch (err: any) {\n console.log(err);\n }\n};\n\nexport const feedbackClickEpic = async (state: RootState, position: number) => {\n const { search, settings } = state;\n return await sendFeedbackByApi(settings, search.sessionId, search.requestId, {\n event: 'click',\n data: { positions: [position] },\n });\n};\n\nexport const feedbackRegionEpic = async (\n state: RootState,\n region: RectCoords,\n) => {\n const { settings, search } = state;\n const { sessionId, requestId } = search;\n const { x1, x2, y1, y2 } = region;\n const payload: FeedbackEventPayload = {\n event: 'region',\n data: { rect: { x: x1, y: y1, w: x2 - x1, h: y2 - y1 } },\n };\n return await sendFeedbackByApi(settings, sessionId, requestId, payload);\n};\n\nexport const sendFeedbackByApi = async (\n settings: NyrisAPISettings,\n sessionId: string | undefined,\n requestId: string | undefined,\n payload: FeedbackEventPayload,\n) => {\n const api = new NyrisAPI(settings);\n if (sessionId && requestId) {\n try {\n await api.sendFeedback(sessionId, requestId, payload).then(res => {});\n } catch (error) {\n console.log('error sendFeedbackByApi321', error);\n }\n }\n};\n","import { Box, Typography } from '@material-ui/core';\nimport { RectCoords } from '@nyris/nyris-api';\nimport CameraCustom from 'components/drawer/cameraCustom';\nimport ExampleImages from 'components/ExampleImages';\nimport React, { useEffect, useState } from 'react';\nimport { useHistory } from 'react-router-dom';\nimport { feedbackClickEpic } from 'services/Feedback';\nimport { createImage, findByImage, findRegions } from 'services/image';\nimport { showFeedback, showResults } from 'Store/nyris/Nyris';\nimport {\n loadingActionResults,\n reset,\n setImageSearchInput,\n setRegions,\n setRequestImage,\n setSearchResults,\n setSelectedRegion,\n updateStatusLoading,\n} from 'Store/search/Search';\nimport { useAppDispatch, useAppSelector } from 'Store/Store';\n\nfunction AppMobile(): JSX.Element {\n const history = useHistory();\n const dispatch = useAppDispatch();\n const searchState = useAppSelector(state => state);\n const {\n settings,\n search: { keyFilter },\n } = searchState;\n const [isOpenModalCamera, setOpenModalCamera] = useState<boolean>(false);\n\n useEffect(() => {\n dispatch(reset(''));\n }, [dispatch]);\n\n const getUrlToCanvasFile = async (url: string, position?: number) => {\n if (history.location?.pathname === '/') {\n history.push('/result');\n }\n dispatch(updateStatusLoading(true));\n dispatch(showResults());\n dispatch(loadingActionResults());\n dispatch(setImageSearchInput(url));\n if (position) {\n feedbackClickEpic(searchState, position);\n }\n let image = await createImage(url);\n dispatch(setRequestImage(image));\n let searchRegion: RectCoords | undefined = undefined;\n if (settings.regions) {\n let res = await findRegions(image, settings);\n dispatch(setRegions(res.regions));\n searchRegion = res.selectedRegion;\n dispatch(setSelectedRegion(searchRegion));\n }\n const preFilter = [\n {\n key: settings.visualSearchFilterKey,\n values: [`${keyFilter}`],\n },\n ];\n findByImage({\n image,\n settings,\n region: searchRegion,\n filters: keyFilter ? preFilter : undefined,\n })\n .then(res => {\n dispatch(setSearchResults(res));\n dispatch(updateStatusLoading(false));\n dispatch(showFeedback());\n return;\n })\n .catch((err: any) => {\n console.log('err getUrlToCanvasFile mobile', err);\n });\n };\n\n return (\n <>\n <Box className=\"wrap-content-body\" style={{ position: 'relative' }}>\n <div\n style={{\n position: 'absolute',\n top: '1px',\n height: '100%',\n width: '100%',\n zIndex: 1,\n background: `${settings.theme?.mobileFooterImageColor}`,\n }}\n ></div>\n <Box style={{ position: 'inherit', zIndex: 100 }} className=\"title-top\">\n <Typography className=\"text-center text-white\">\n Snap a photo or attach any image in the <br /> following formats:\n </Typography>\n <Typography className=\"text-center text-white\">\n jpg, png, svg, pdf or tiff\n </Typography>\n </Box>\n <Box\n style={{ position: 'inherit', zIndex: 100 }}\n className=\"box-drag-mobile\"\n >\n <ExampleImages\n images={settings.exampleImages}\n onExampleImageClicked={(url: string) => {\n return getUrlToCanvasFile(url);\n }}\n onToggleModalCamera={() => {\n setOpenModalCamera(!isOpenModalCamera);\n }}\n />\n </Box>\n <Box className=\"box-screenshot-camera\">\n <CameraCustom\n isToggle={isOpenModalCamera}\n onToggleModal={() => {\n setOpenModalCamera(!isOpenModalCamera);\n }}\n />\n </Box>\n </Box>\n </>\n );\n}\n\nexport default AppMobile;\n","import 'react-app-polyfill/ie11';\nimport 'react-app-polyfill/stable';\nimport React from 'react';\nimport 'typeface-roboto';\nimport 'index.css';\n\nimport { useMediaQuery } from 'react-responsive';\nimport AppMD from 'page/landingPage/AppMD';\nimport AppMobile from 'page/landingPage/AppMobile';\nimport i18n from 'i18next';\nimport { initReactI18next } from 'react-i18next';\nimport { useAppSelector } from 'Store/Store';\nimport { translations } from 'translations';\n\ni18n.use(initReactI18next).init({\n resources: translations,\n fallbackLng: 'en',\n interpolation: {\n escapeValue: false,\n },\n returnNull: false,\n});\n\nfunction App(): JSX.Element {\n const language = useAppSelector(state => state.settings.language);\n\n i18n.changeLanguage(language);\n\n const isMobile = useMediaQuery({ query: '(max-width: 776px)' });\n let SelectedApp: any = isMobile ? AppMobile : AppMD;\n\n return <SelectedApp />;\n}\n\nexport default App;\n","export const translations = {\n en: {\n translation: {\n Search: 'Search',\n 'Choose an image': 'Choose an image',\n 'or drag it here': 'or drag it here',\n 'Manufacturer Number': 'Manufacturer Number',\n 'Close group': 'Close group',\n 'Show group': 'Show group',\n 'Adjust the selection frame for better results':\n 'Adjust the selection frame for better results',\n 'Items per page': 'Items per page',\n 'Search with an image': 'Search with an image',\n 'Clear text search': 'Clear text search',\n },\n },\n de: {\n translation: {\n Search: 'Suche',\n 'Choose an image': 'Bild wählen',\n 'or drag it here': 'oder hierhin ziehen',\n 'Manufacturer Number': 'Herst. Teile-Nr.',\n 'Close group': 'Schließe Gruppe',\n 'Show group': 'Zeige Gruppe',\n 'Adjust the selection frame for better results':\n 'Anpassen des Rahmens für bessere Ergebnisse',\n 'Items per page': 'Artikel pro Seite',\n 'Search with an image': 'Bildsuche',\n 'Clear text search': 'Suchtext löschen',\n },\n },\n};\n","import React from 'react';\nimport { Button } from '@material-ui/core';\nimport CloseOutlinedIcon from '@material-ui/icons/CloseOutlined';\n\nexport default function ChipComponent({\n children,\n className,\n selected,\n closeIcon = false,\n ...props\n}: any) {\n return (\n <Button type=\"native\" className={className} {...props}>\n {children}\n {closeIcon && (\n <CloseOutlinedIcon style={{ fontSize: '16px', fontWeight: 'bold' }} />\n )}\n </Button>\n );\n}\n","import React, { useEffect, useState } from 'react';\nimport classNames from 'classnames';\nimport { m } from 'framer-motion';\nimport { atom } from 'jotai';\nimport { useMemo } from 'react';\nimport type {\n CurrentRefinementsProvided,\n RefinementValue,\n} from 'react-instantsearch-core';\nimport { connectCurrentRefinements } from 'react-instantsearch-dom';\nimport { getCurrentRefinement } from './getCurrentRefinement';\nimport { ClearRefinements } from 'components/clear-refinements/clear-refinements';\nimport ChipComponent from 'components/chip/chip';\nimport { useAppSelector } from 'Store/Store';\n\nexport type CurrentRefinementsProps = CurrentRefinementsProvided & {\n header?: string;\n className?: string;\n statusSwitchButton?: boolean;\n};\n\nexport type CurrentRefinement = {\n category?: string;\n label: string;\n value: RefinementValue;\n};\n\nexport const refinementCountAtom = atom(0);\n\nfunction CurrentRefinementsComponent({\n items,\n refine,\n className,\n statusSwitchButton,\n}: CurrentRefinementsProps) {\n const stateGlobal = useAppSelector(state => state);\n const { settings } = stateGlobal;\n const [newItems, setListItems] = useState<any[]>([]);\n\n useEffect(() => {\n if (!statusSwitchButton) return;\n setListItems(items);\n }, [items, statusSwitchButton]);\n\n const refinements = useMemo(\n () =>\n newItems.reduce((acc: CurrentRefinement[], current) => {\n return [\n ...acc,\n ...getCurrentRefinement(current, settings?.refinements),\n ];\n }, []),\n [settings, newItems],\n );\n\n if (!refinements.length) {\n return null;\n }\n\n return (\n <div\n className={className}\n style={{\n marginBottom: refinements.length > 0 ? '10px' : '0px',\n marginTop: refinements.length > 0 ? '16px' : '0px',\n }}\n >\n <ul className=\"flex flex-wrap gap-3\">\n {refinements.map(refinement => {\n return (\n <m.li key={[refinement.category, refinement.label].join(':')}>\n <ChipComponent\n closeIcon={true}\n onClick={() => refine(refinement.value)}\n >\n {refinement.category && (\n <div className=\"text-f12\">{refinement.category}:</div>\n )}\n <div\n className=\"capitalize fw-700\"\n style={{\n marginLeft: 5,\n textTransform: 'capitalize',\n marginRight: 10,\n }}\n >\n {refinement.label}\n </div>\n </ChipComponent>\n </m.li>\n );\n })}\n <li\n key=\"clear\"\n className={classNames('flex items-center', {\n hidden: refinements.length < 2,\n })}\n >\n <ClearRefinements className=\"text-f12 fw-600\">\n Clear all\n </ClearRefinements>\n </li>\n </ul>\n </div>\n );\n}\n\nexport const CurrentRefinements = connectCurrentRefinements<any>(\n CurrentRefinementsComponent,\n);\n","import type { CurrentRefinement } from \"./current-refinements\";\n\nfunction getRefinementConfig(r: any, refinement: any) {\n const refinementOptions = r.attribute;\n\n return refinementOptions?.attributes\n ? refinementOptions?.attributes[0] === refinement.attribute\n : refinementOptions === refinement.attribute;\n}\n\nexport function getCurrentRefinement(\n refinement: any,\n config: any\n): CurrentRefinement[] {\n let refinementConfig: any;\n config.forEach((r: any) => {\n if (getRefinementConfig(r, refinement)) {\n refinementConfig = r;\n }\n });\n \n switch (refinementConfig?.type) {\n case \"size\":\n case \"list\": {\n return (\n refinement?.items?.map((item: any) => ({\n category: refinementConfig?.header,\n label: item.label,\n value: item.value,\n })) || []\n );\n }\n default: {\n return [];\n }\n }\n}\n","import { Grid } from '@material-ui/core';\nimport React from 'react';\nimport { connectPagination } from 'react-instantsearch-dom';\n\nfunction Pagination({ children }: any) {\n return (\n <Grid\n container\n justifyContent=\"space-between\"\n alignItems=\"center\"\n style={{ height: '100%' }}\n >\n {children}\n\n {/* <Grid item className=\"item-notify\">\n <Typography className=\"text-f12 text-center\">\n <span className=\"fw-600\" style={{ color: '#2B2C46' }}>\n Didn’t find what you were looking for?\n </span>\n <span style={{ color: '#2B2C46' }}>Share your search with our</span>\n <Link\n to={'/support'}\n style={{ color: settings.theme?.secondaryColor }}\n >\n product experts\n </Link>\n </Typography>\n </Grid> */}\n <Grid item className=\"item-notify-right\" style={{ minWidth: 32 }}></Grid>\n </Grid>\n );\n}\nconst FooterResult = connectPagination(Pagination);\n\nexport default FooterResult;\n","var _path;\nvar _excluded = [\"svgRef\", \"title\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from \"react\";\nvar SvgFill = function SvgFill(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 10,\n height: 11,\n viewBox: \"0 0 10 11\",\n fill: \"currentColor\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M6.56905 7.91401C6.92789 7.46225 7.47234 7.19773 8.04926 7.19483C9.10003 7.19483 9.95185 8.04665 9.95185 9.09742C9.95185 10.1482 9.10003 11 8.04926 11C6.99849 11 6.14667 10.1482 6.14667 9.09742C6.14847 8.92726 6.17408 8.75819 6.22277 8.59513L3.44118 6.85616C2.93785 7.48979 2.0888 7.73571 1.32474 7.46917C0.560687 7.20264 0.0488281 6.48196 0.0488281 5.67275C0.0488281 4.86354 0.560687 4.14287 1.32474 3.87633C2.0888 3.60979 2.93785 3.85571 3.44118 4.48934L6.22277 2.75037C6.17408 2.58732 6.14847 2.41825 6.14667 2.24809C6.14083 1.32028 6.80508 0.523574 7.7188 0.36244C8.63252 0.201306 9.52922 0.722744 9.84111 1.59657C10.153 2.4704 9.78909 3.44177 8.97983 3.89559C8.17057 4.34941 7.15198 4.15332 6.56905 3.4315L3.78746 5.17047C3.88883 5.49765 3.88883 5.84785 3.78746 6.17504L6.56905 7.91401ZM9.19066 2.24808C9.19066 1.61762 8.67957 1.10653 8.04911 1.10653C7.41864 1.10653 6.90755 1.61762 6.90755 2.24808C6.90755 2.87855 7.41864 3.38964 8.04911 3.38964C8.67957 3.38964 9.19066 2.87855 9.19066 2.24808ZM1.96089 6.81431C1.33043 6.81431 0.819336 6.30322 0.819336 5.67275C0.819336 5.04229 1.33043 4.5312 1.96089 4.5312C2.59136 4.5312 3.10245 5.04229 3.10245 5.67275C3.10245 6.30322 2.59136 6.81431 1.96089 6.81431ZM6.90755 9.09742C6.90755 9.72788 7.41864 10.239 8.04911 10.239C8.67957 10.239 9.19066 9.72788 9.19066 9.09742C9.19066 8.46695 8.67957 7.95586 8.04911 7.95586C7.41864 7.95586 6.90755 8.46695 6.90755 9.09742Z\",\n fill: \"currentColor\"\n })));\n};\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgFill, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/Fill.619a9d98.svg\";\nexport { ForwardRef as ReactComponent };","var _ellipse, _path, _path2;\nvar _excluded = [\"svgRef\", \"title\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from \"react\";\nvar SvgExpand = function SvgExpand(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 33,\n height: 32,\n viewBox: \"0 0 33 32\",\n fill: \"none\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ellipse || (_ellipse = /*#__PURE__*/React.createElement(\"ellipse\", {\n cx: 16.1684,\n cy: 16,\n rx: 16.1684,\n ry: 16,\n fill: \"#F3F3F5\"\n })), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M19.0497 9.14286C18.7341 9.14286 18.4783 8.88702 18.4783 8.57143C18.4783 8.25584 18.7341 8 19.0497 8H23.6527C23.9841 8 24.2527 8.26863 24.2527 8.6V13.1368C24.2527 13.4558 23.9942 13.7143 23.6753 13.7143C23.3564 13.7143 23.0979 13.4558 23.0979 13.1368V11.3887C23.0979 10.8557 22.4547 10.5873 22.0758 10.9622L18.545 14.4563C18.3207 14.6783 17.9594 14.678 17.7354 14.4557C17.5085 14.2305 17.5088 13.8635 17.7361 13.6387L21.2435 10.1694C21.6246 9.79241 21.3577 9.14286 20.8215 9.14286H19.0497ZM13.7959 17.5429C14.0199 17.3215 14.3806 17.322 14.6038 17.5442C14.8296 17.7689 14.8291 18.1345 14.6026 18.3585L11.0932 21.8306C10.7121 22.2076 10.9791 22.8571 11.5152 22.8571H13.2872C13.6028 22.8571 13.8587 23.113 13.8587 23.4286C13.8587 23.7441 13.6028 24 13.2872 24H8.68423C8.35286 24 8.08423 23.7313 8.08423 23.4V18.8631C8.08423 18.5442 8.34276 18.2857 8.66167 18.2857C8.98059 18.2857 9.23912 18.5442 9.23912 18.8631V20.612C9.23912 21.1449 9.88207 21.4133 10.261 21.0386L13.7959 17.5429Z\",\n fill: \"currentColor\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M9.23911 13.1368C9.23911 13.4557 8.98058 13.7142 8.66167 13.7142C8.34276 13.7142 8.08423 13.4557 8.08423 13.1368L8.08423 8.59991C8.08423 8.26854 8.35286 7.99991 8.68423 7.99991L13.2872 7.99991C13.6028 7.99991 13.8587 8.25575 13.8587 8.57134C13.8587 8.88693 13.6028 9.14277 13.2872 9.14277L11.5149 9.14277C10.9789 9.14277 10.7119 9.79219 11.0929 10.1693L14.5999 13.6397C14.8276 13.865 14.8273 14.2329 14.5993 14.4578C14.3751 14.6791 14.0146 14.6788 13.7908 14.4571L10.2613 10.9627C9.88241 10.5877 9.23911 10.856 9.23911 11.3891L9.23911 13.1368ZM17.7362 18.3563C17.509 18.1313 17.5096 17.7641 17.7375 17.5399C17.9612 17.3198 18.3202 17.3203 18.5433 17.5411L22.0757 21.0375C22.4545 21.4125 23.0977 21.1441 23.0977 20.611L23.0977 18.8632C23.0977 18.5442 23.3563 18.2857 23.6752 18.2857C23.9941 18.2857 24.2526 18.5442 24.2526 18.8632L24.2526 23.4C24.2526 23.7314 23.984 24 23.6526 24L19.0496 24C18.734 24 18.4782 23.7442 18.4782 23.4286C18.4782 23.113 18.734 22.8571 19.0496 22.8571L20.8226 22.8571C21.3586 22.8571 21.6257 22.2079 21.2448 21.8308L17.7362 18.3563Z\",\n fill: \"currentColor\"\n })));\n};\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgExpand, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/expand.06cebf40.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nvar _excluded = [\"svgRef\", \"title\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from \"react\";\nvar SvgIconDislike = function SvgIconDislike(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 11,\n height: 11,\n viewBox: \"0 0 11 11\",\n fill: \"currentColor\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M1.53059 7.14308H3.81466V9.11675C3.7348 9.90592 4.28699 10.6128 5.04806 10.6957C5.14416 10.7075 5.24128 10.7075 5.33738 10.6957H5.93504C6.19675 10.6882 6.42056 10.4984 6.47941 10.2338V10.1865L6.86009 7.68387L8.20769 5.56415H10.6669V0.0378923H3.43399C0.601741 0.0378923 0.00788307 1.75498 0.00788307 3.19576V5.56415C-0.0719852 6.35332 0.480213 7.06022 1.24128 7.14308C1.33738 7.15493 1.43449 7.15493 1.53059 7.14308ZM8.38276 0.827361H9.90548V4.77469H8.38276V0.827361ZM3.43384 0.827355C1.6142 0.827355 0.769092 1.5813 0.769092 3.19575V5.56415C0.769092 6.13256 0.982271 6.35361 1.53045 6.35361H4.57587V9.11674C4.57587 9.68516 4.78905 9.90621 5.33723 9.90621H5.76739L5.82069 9.51148L6.09858 7.39176L7.6213 5.051V0.827355H3.43384Z\",\n fill: \"currentColor\"\n })));\n};\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgIconDislike, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/icon_dislike.0533c64a.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nvar _excluded = [\"svgRef\", \"title\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from \"react\";\nvar SvgIconLike = function SvgIconLike(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 12,\n height: 11,\n viewBox: \"0 0 12 11\",\n fill: \"currentColor\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M9.80278 3.59938H7.51871V1.62572C7.59858 0.836545 7.04638 0.129649 6.28531 0.0467847C6.18921 0.0349422 6.0921 0.0349422 5.996 0.0467847H5.39833C5.13662 0.0542197 4.91282 0.244093 4.85396 0.508622V0.55599L4.47329 3.0586L3.12568 5.17831H0.666504V10.7046H7.89939C10.7316 10.7046 11.3255 8.98748 11.3255 7.54671V5.17831C11.4054 4.38914 10.8532 3.68224 10.0921 3.59938C9.99599 3.58754 9.89888 3.58754 9.80278 3.59938ZM2.95061 9.9151H1.4279V5.96777H2.95061V9.9151ZM7.89954 9.9151C9.71918 9.9151 10.5643 9.16116 10.5643 7.5467V5.1783C10.5643 4.60989 10.3511 4.38884 9.80293 4.38884H6.7575V1.62571C6.7575 1.05729 6.54432 0.836243 5.99615 0.836243H5.56598L5.51268 1.23098L5.23479 3.35069L3.71208 5.69146V9.9151H7.89954Z\",\n fill: \"currentColor\"\n })));\n};\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgIconLike, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/icon_like.80c66e3a.svg\";\nexport { ForwardRef as ReactComponent };","var _g, _defs;\nvar _excluded = [\"svgRef\", \"title\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React from \"react\";\nvar SvgIconSearchImage2 = function SvgIconSearchImage2(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 40,\n height: 40,\n viewBox: \"0 0 40 40\",\n fill: \"none\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n filter: \"url(#filter0_d_573_4241)\"\n }, /*#__PURE__*/React.createElement(\"circle\", {\n cx: 20,\n cy: 20,\n r: 16,\n fill: \"url(#paint0_linear_573_4241)\"\n }), /*#__PURE__*/React.createElement(\"mask\", {\n id: \"path-2-outside-1_573_4241\",\n maskUnits: \"userSpaceOnUse\",\n x: 11,\n y: 11,\n width: 18,\n height: 18,\n fill: \"black\"\n }, /*#__PURE__*/React.createElement(\"rect\", {\n fill: \"white\",\n x: 11,\n y: 11,\n width: 18,\n height: 18\n }), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M12.5013 12C12.2249 12 12 12.2249 12 12.5013V16.0246C12 16.301 12.2249 16.5259 12.5013 16.5259H12.5528C12.8292 16.5259 13.0541 16.301 13.0541 16.0246V13.2203C13.0541 13.1003 13.1518 13.0026 13.2718 13.0026H16.0967C16.3731 13.0026 16.598 12.7777 16.598 12.5013C16.598 12.2249 16.3731 12 16.0967 12H12.5013ZM28 16.0246C28 16.301 27.7751 16.5259 27.4987 16.5259H27.4472C27.1708 16.5259 26.9459 16.301 26.9459 16.0246V13.2203C26.9459 13.1003 26.8482 13.0026 26.7282 13.0026H23.9033C23.6269 13.0026 23.402 12.7777 23.402 12.5013C23.402 12.2249 23.6269 12 23.9033 12H27.4987C27.7751 12 28 12.2249 28 12.5013V16.0246ZM28 27.4987C28 27.7751 27.7751 28 27.4987 28H23.9033C23.6269 28 23.402 27.7751 23.402 27.4987C23.402 27.2223 23.6269 26.9974 23.9033 26.9974H26.7282C26.8482 26.9974 26.9459 26.8997 26.9459 26.7797V23.9757C26.9459 23.6993 27.1708 23.4744 27.4472 23.4744H27.4987C27.7751 23.4744 28 23.6993 28 23.9757V27.4987ZM16.0967 28H12.5013C12.2249 28 12 27.7751 12 27.4987V23.9757C12 23.6993 12.2249 23.4744 12.5013 23.4744H12.5528C12.8292 23.4744 13.0541 23.6993 13.0541 23.9757V26.7797C13.0541 26.8997 13.1518 26.9974 13.2718 26.9974H16.0967C16.3731 26.9974 16.598 27.2223 16.598 27.4987C16.598 27.7751 16.3731 28 16.0967 28ZM23.2482 22.3423L24.5784 23.6725C24.8282 23.9223 24.8282 24.3285 24.5784 24.5784C24.4574 24.6993 24.2961 24.7662 24.1253 24.7662C23.9544 24.7662 23.7935 24.6993 23.6725 24.5784L22.342 23.2482L22.2079 23.3374C21.5564 23.7711 20.7931 24.0007 20 24.0007C18.9315 24.0007 17.9272 23.5843 17.1715 22.8289C16.4161 22.0734 15.9997 21.0692 15.9997 20.0003C15.9997 18.9315 16.4161 17.9272 17.1715 17.1715C17.9272 16.4161 18.9315 16 20 16C21.0685 16 22.0731 16.4161 22.8289 17.1715C23.5843 17.9272 24.0003 18.9315 24.0003 20.0003C24.0003 20.7931 23.7712 21.5564 23.3374 22.2079L23.2482 22.3423ZM21.9639 21.879L21.9708 21.8715C22.4535 21.3636 22.719 20.699 22.719 20.0003C22.719 18.501 21.499 17.2813 20 17.2813C18.501 17.2813 17.281 18.5013 17.281 20.0003C17.281 21.4993 18.501 22.7193 20 22.7193C20.699 22.7193 21.3636 22.4534 21.8715 21.9708L21.8787 21.9639L21.8853 21.9561C21.8964 21.9433 21.9079 21.9308 21.9194 21.9193C21.9312 21.9075 21.9433 21.8964 21.9561 21.8856L21.9639 21.879Z\"\n })), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M12.5013 12C12.2249 12 12 12.2249 12 12.5013V16.0246C12 16.301 12.2249 16.5259 12.5013 16.5259H12.5528C12.8292 16.5259 13.0541 16.301 13.0541 16.0246V13.2203C13.0541 13.1003 13.1518 13.0026 13.2718 13.0026H16.0967C16.3731 13.0026 16.598 12.7777 16.598 12.5013C16.598 12.2249 16.3731 12 16.0967 12H12.5013ZM28 16.0246C28 16.301 27.7751 16.5259 27.4987 16.5259H27.4472C27.1708 16.5259 26.9459 16.301 26.9459 16.0246V13.2203C26.9459 13.1003 26.8482 13.0026 26.7282 13.0026H23.9033C23.6269 13.0026 23.402 12.7777 23.402 12.5013C23.402 12.2249 23.6269 12 23.9033 12H27.4987C27.7751 12 28 12.2249 28 12.5013V16.0246ZM28 27.4987C28 27.7751 27.7751 28 27.4987 28H23.9033C23.6269 28 23.402 27.7751 23.402 27.4987C23.402 27.2223 23.6269 26.9974 23.9033 26.9974H26.7282C26.8482 26.9974 26.9459 26.8997 26.9459 26.7797V23.9757C26.9459 23.6993 27.1708 23.4744 27.4472 23.4744H27.4987C27.7751 23.4744 28 23.6993 28 23.9757V27.4987ZM16.0967 28H12.5013C12.2249 28 12 27.7751 12 27.4987V23.9757C12 23.6993 12.2249 23.4744 12.5013 23.4744H12.5528C12.8292 23.4744 13.0541 23.6993 13.0541 23.9757V26.7797C13.0541 26.8997 13.1518 26.9974 13.2718 26.9974H16.0967C16.3731 26.9974 16.598 27.2223 16.598 27.4987C16.598 27.7751 16.3731 28 16.0967 28ZM23.2482 22.3423L24.5784 23.6725C24.8282 23.9223 24.8282 24.3285 24.5784 24.5784C24.4574 24.6993 24.2961 24.7662 24.1253 24.7662C23.9544 24.7662 23.7935 24.6993 23.6725 24.5784L22.342 23.2482L22.2079 23.3374C21.5564 23.7711 20.7931 24.0007 20 24.0007C18.9315 24.0007 17.9272 23.5843 17.1715 22.8289C16.4161 22.0734 15.9997 21.0692 15.9997 20.0003C15.9997 18.9315 16.4161 17.9272 17.1715 17.1715C17.9272 16.4161 18.9315 16 20 16C21.0685 16 22.0731 16.4161 22.8289 17.1715C23.5843 17.9272 24.0003 18.9315 24.0003 20.0003C24.0003 20.7931 23.7712 21.5564 23.3374 22.2079L23.2482 22.3423ZM21.9639 21.879L21.9708 21.8715C22.4535 21.3636 22.719 20.699 22.719 20.0003C22.719 18.501 21.499 17.2813 20 17.2813C18.501 17.2813 17.281 18.5013 17.281 20.0003C17.281 21.4993 18.501 22.7193 20 22.7193C20.699 22.7193 21.3636 22.4534 21.8715 21.9708L21.8787 21.9639L21.8853 21.9561C21.8964 21.9433 21.9079 21.9308 21.9194 21.9193C21.9312 21.9075 21.9433 21.8964 21.9561 21.8856L21.9639 21.879Z\",\n fill: \"currentColor\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M24.5784 23.6725L24.7198 23.531L24.5784 23.6725ZM23.2482 22.3423L23.0815 22.2317L22.9911 22.368L23.1068 22.4837L23.2482 22.3423ZM23.6725 24.5784L23.8139 24.4369L23.8139 24.4369L23.6725 24.5784ZM22.342 23.2482L22.4834 23.1068L22.3676 22.991L22.2312 23.0817L22.342 23.2482ZM22.2079 23.3374L22.0971 23.1708L22.097 23.1709L22.2079 23.3374ZM17.1715 22.8289L17.0301 22.9703L17.0301 22.9703L17.1715 22.8289ZM17.1715 17.1715L17.0301 17.03L17.03 17.0301L17.1715 17.1715ZM22.8289 17.1715L22.9703 17.0301L22.9703 17.03L22.8289 17.1715ZM23.3374 22.2079L23.1709 22.097L23.1707 22.0973L23.3374 22.2079ZM21.9708 21.8715L21.8258 21.7337L21.8231 21.7366L21.9708 21.8715ZM21.9639 21.879L22.092 22.0327L22.1025 22.0239L22.1117 22.0139L21.9639 21.879ZM21.8715 21.9708L22.0093 22.1158L22.0096 22.1155L21.8715 21.9708ZM21.8787 21.9639L22.0168 22.1086L22.025 22.1007L22.0323 22.092L21.8787 21.9639ZM21.8853 21.9561L21.7345 21.8246L21.7316 21.828L21.8853 21.9561ZM21.9194 21.9193L21.7779 21.7779L21.7779 21.7779L21.9194 21.9193ZM21.9561 21.8856L21.828 21.7319L21.8269 21.7329L21.9561 21.8856ZM12.2 12.5013C12.2 12.3354 12.3354 12.2 12.5013 12.2V11.8C12.1145 11.8 11.8 12.1145 11.8 12.5013H12.2ZM12.2 16.0246V12.5013H11.8V16.0246H12.2ZM12.5013 16.3259C12.3354 16.3259 12.2 16.1905 12.2 16.0246H11.8C11.8 16.4114 12.1145 16.7259 12.5013 16.7259V16.3259ZM12.5528 16.3259H12.5013V16.7259H12.5528V16.3259ZM12.8541 16.0246C12.8541 16.1905 12.7187 16.3259 12.5528 16.3259V16.7259C12.9396 16.7259 13.2541 16.4114 13.2541 16.0246H12.8541ZM12.8541 13.2203V16.0246H13.2541V13.2203H12.8541ZM13.2718 12.8026C13.0413 12.8026 12.8541 12.9899 12.8541 13.2203H13.2541C13.2541 13.2108 13.2623 13.2026 13.2718 13.2026V12.8026ZM16.0967 12.8026H13.2718V13.2026H16.0967V12.8026ZM16.398 12.5013C16.398 12.6672 16.2627 12.8026 16.0967 12.8026V13.2026C16.4836 13.2026 16.798 12.8882 16.798 12.5013H16.398ZM16.0967 12.2C16.2627 12.2 16.398 12.3354 16.398 12.5013H16.798C16.798 12.1145 16.4836 11.8 16.0967 11.8V12.2ZM12.5013 12.2H16.0967V11.8H12.5013V12.2ZM27.4987 16.7259C27.8855 16.7259 28.2 16.4114 28.2 16.0246H27.8C27.8 16.1905 27.6646 16.3259 27.4987 16.3259V16.7259ZM27.4472 16.7259H27.4987V16.3259H27.4472V16.7259ZM26.7459 16.0246C26.7459 16.4114 27.0604 16.7259 27.4472 16.7259V16.3259C27.2813 16.3259 27.1459 16.1905 27.1459 16.0246H26.7459ZM26.7459 13.2203V16.0246H27.1459V13.2203H26.7459ZM26.7282 13.2026C26.7377 13.2026 26.7459 13.2108 26.7459 13.2203H27.1459C27.1459 12.9899 26.9586 12.8026 26.7282 12.8026V13.2026ZM23.9033 13.2026H26.7282V12.8026H23.9033V13.2026ZM23.202 12.5013C23.202 12.8882 23.5164 13.2026 23.9033 13.2026V12.8026C23.7373 12.8026 23.602 12.6672 23.602 12.5013H23.202ZM23.9033 11.8C23.5164 11.8 23.202 12.1145 23.202 12.5013H23.602C23.602 12.3354 23.7373 12.2 23.9033 12.2V11.8ZM27.4987 11.8H23.9033V12.2H27.4987V11.8ZM28.2 12.5013C28.2 12.1145 27.8855 11.8 27.4987 11.8V12.2C27.6646 12.2 27.8 12.3354 27.8 12.5013H28.2ZM28.2 16.0246V12.5013H27.8V16.0246H28.2ZM27.4987 28.2C27.8855 28.2 28.2 27.8855 28.2 27.4987H27.8C27.8 27.6646 27.6646 27.8 27.4987 27.8V28.2ZM23.9033 28.2H27.4987V27.8H23.9033V28.2ZM23.202 27.4987C23.202 27.8855 23.5164 28.2 23.9033 28.2V27.8C23.7373 27.8 23.602 27.6646 23.602 27.4987H23.202ZM23.9033 26.7974C23.5164 26.7974 23.202 27.1118 23.202 27.4987H23.602C23.602 27.3328 23.7373 27.1974 23.9033 27.1974V26.7974ZM26.7282 26.7974H23.9033V27.1974H26.7282V26.7974ZM26.7459 26.7797C26.7459 26.7892 26.7377 26.7974 26.7282 26.7974V27.1974C26.9586 27.1974 27.1459 27.0101 27.1459 26.7797H26.7459ZM26.7459 23.9757V26.7797H27.1459V23.9757H26.7459ZM27.4472 23.2744C27.0604 23.2744 26.7459 23.5889 26.7459 23.9757H27.1459C27.1459 23.8098 27.2813 23.6744 27.4472 23.6744V23.2744ZM27.4987 23.2744H27.4472V23.6744H27.4987V23.2744ZM28.2 23.9757C28.2 23.5889 27.8855 23.2744 27.4987 23.2744V23.6744C27.6646 23.6744 27.8 23.8098 27.8 23.9757H28.2ZM28.2 27.4987V23.9757H27.8V27.4987H28.2ZM12.5013 28.2H16.0967V27.8H12.5013V28.2ZM11.8 27.4987C11.8 27.8855 12.1145 28.2 12.5013 28.2V27.8C12.3354 27.8 12.2 27.6646 12.2 27.4987H11.8ZM11.8 23.9757V27.4987H12.2V23.9757H11.8ZM12.5013 23.2744C12.1145 23.2744 11.8 23.5889 11.8 23.9757H12.2C12.2 23.8098 12.3354 23.6744 12.5013 23.6744V23.2744ZM12.5528 23.2744H12.5013V23.6744H12.5528V23.2744ZM13.2541 23.9757C13.2541 23.5889 12.9396 23.2744 12.5528 23.2744V23.6744C12.7187 23.6744 12.8541 23.8098 12.8541 23.9757H13.2541ZM13.2541 26.7797V23.9757H12.8541V26.7797H13.2541ZM13.2718 26.7974C13.2623 26.7974 13.2541 26.7892 13.2541 26.7797H12.8541C12.8541 27.0101 13.0413 27.1974 13.2718 27.1974V26.7974ZM16.0967 26.7974H13.2718V27.1974H16.0967V26.7974ZM16.798 27.4987C16.798 27.1118 16.4836 26.7974 16.0967 26.7974V27.1974C16.2627 27.1974 16.398 27.3328 16.398 27.4987H16.798ZM16.0967 28.2C16.4836 28.2 16.798 27.8855 16.798 27.4987H16.398C16.398 27.6646 16.2627 27.8 16.0967 27.8V28.2ZM24.7198 23.531L23.3896 22.2009L23.1068 22.4837L24.4369 23.8139L24.7198 23.531ZM24.7198 24.7198C25.0477 24.3918 25.0477 23.859 24.7198 23.531L24.4369 23.8139C24.6087 23.9856 24.6087 24.2652 24.4369 24.4369L24.7198 24.7198ZM24.1253 24.9662C24.3492 24.9662 24.5614 24.8782 24.7198 24.7198L24.4369 24.4369C24.3534 24.5205 24.2429 24.5662 24.1253 24.5662V24.9662ZM23.531 24.7198C23.6894 24.8781 23.9012 24.9662 24.1253 24.9662V24.5662C24.0077 24.5662 23.8975 24.5206 23.8139 24.4369L23.531 24.7198ZM22.2006 23.3896L23.5311 24.7198L23.8139 24.4369L22.4834 23.1068L22.2006 23.3896ZM22.3186 23.5039L22.4527 23.4147L22.2312 23.0817L22.0971 23.1708L22.3186 23.5039ZM20 24.2007C20.8321 24.2007 21.634 23.9598 22.3187 23.5039L22.097 23.1709C21.4788 23.5825 20.7542 23.8007 20 23.8007V24.2007ZM17.0301 22.9703C17.8233 23.7632 18.8784 24.2007 20 24.2007V23.8007C18.9846 23.8007 18.0312 23.4054 17.3129 22.6874L17.0301 22.9703ZM15.7997 20.0003C15.7997 21.1223 16.2372 22.1774 17.0301 22.9703L17.3129 22.6874C16.595 21.9695 16.1997 21.0161 16.1997 20.0003H15.7997ZM17.03 17.0301C16.2372 17.8233 15.7997 18.8784 15.7997 20.0003H16.1997C16.1997 18.9846 16.595 18.0311 17.3129 17.3129L17.03 17.0301ZM20 15.8C18.8784 15.8 17.8233 16.2371 17.0301 17.03L17.3129 17.3129C18.0311 16.595 18.9845 16.2 20 16.2V15.8ZM22.9703 17.03C22.177 16.2371 21.1216 15.8 20 15.8V16.2C21.0155 16.2 21.9692 16.595 22.6875 17.3129L22.9703 17.03ZM24.2003 20.0003C24.2003 18.8784 23.7632 17.8233 22.9703 17.0301L22.6874 17.3129C23.4053 18.0311 23.8003 18.9845 23.8003 20.0003H24.2003ZM23.5039 22.3187C23.9598 21.6339 24.2003 20.832 24.2003 20.0003H23.8003C23.8003 20.7542 23.5825 21.4788 23.1709 22.097L23.5039 22.3187ZM23.4149 22.4529L23.504 22.3184L23.1707 22.0973L23.0815 22.2317L23.4149 22.4529ZM21.8231 21.7366L21.8162 21.7442L22.1117 22.0139L22.1185 22.0063L21.8231 21.7366ZM22.519 20.0003C22.519 20.6476 22.2732 21.2629 21.8258 21.7337L22.1158 22.0092C22.6337 21.4643 22.919 20.7504 22.919 20.0003H22.519ZM20 17.4813C21.3886 17.4813 22.519 18.6115 22.519 20.0003H22.919C22.919 18.3905 21.6095 17.0813 20 17.0813V17.4813ZM17.481 20.0003C17.481 18.6118 18.6114 17.4813 20 17.4813V17.0813C18.3905 17.0813 17.081 18.3909 17.081 20.0003H17.481ZM20 22.5193C18.6114 22.5193 17.481 21.3889 17.481 20.0003H17.081C17.081 21.6098 18.3905 22.9193 20 22.9193V22.5193ZM21.7337 21.8258C21.2629 22.2732 20.6476 22.5193 20 22.5193V22.9193C20.7505 22.9193 21.4643 22.6336 22.0093 22.1158L21.7337 21.8258ZM21.7406 21.8193L21.7334 21.8261L22.0096 22.1155L22.0168 22.1086L21.7406 21.8193ZM21.7316 21.828L21.7251 21.8359L22.0323 22.092L22.0389 22.0841L21.7316 21.828ZM21.7779 21.7779C21.7625 21.7933 21.7479 21.8092 21.7345 21.8246L22.036 22.0875C22.0449 22.0773 22.0532 22.0683 22.0608 22.0608L21.7779 21.7779ZM21.8269 21.7329C21.8099 21.7472 21.7937 21.7621 21.7779 21.7779L22.0608 22.0608C22.0686 22.0529 22.0766 22.0456 22.0853 22.0383L21.8269 21.7329ZM21.8359 21.7254L21.828 21.7319L22.0841 22.0392L22.092 22.0327L21.8359 21.7254Z\",\n fill: \"currentColor\",\n mask: \"url(#path-2-outside-1_573_4241)\"\n }))), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"filter\", {\n id: \"filter0_d_573_4241\",\n x: 0,\n y: 0,\n width: 40,\n height: 40,\n filterUnits: \"userSpaceOnUse\",\n colorInterpolationFilters: \"sRGB\"\n }, /*#__PURE__*/React.createElement(\"feFlood\", {\n floodOpacity: 0,\n result: \"BackgroundImageFix\"\n }), /*#__PURE__*/React.createElement(\"feColorMatrix\", {\n in: \"SourceAlpha\",\n type: \"matrix\",\n values: \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\",\n result: \"hardAlpha\"\n }), /*#__PURE__*/React.createElement(\"feOffset\", null), /*#__PURE__*/React.createElement(\"feGaussianBlur\", {\n stdDeviation: 2\n }), /*#__PURE__*/React.createElement(\"feColorMatrix\", {\n type: \"matrix\",\n values: \"0 0 0 0 0.333333 0 0 0 0 0.337255 0 0 0 0 0.419608 0 0 0 0.502974 0\"\n }), /*#__PURE__*/React.createElement(\"feBlend\", {\n mode: \"normal\",\n in2: \"BackgroundImageFix\",\n result: \"effect1_dropShadow_573_4241\"\n }), /*#__PURE__*/React.createElement(\"feBlend\", {\n mode: \"normal\",\n in: \"SourceGraphic\",\n in2: \"effect1_dropShadow_573_4241\",\n result: \"shape\"\n })), /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"paint0_linear_573_4241\",\n x1: 20,\n y1: 4,\n x2: 20,\n y2: 36,\n gradientUnits: \"userSpaceOnUse\"\n }, /*#__PURE__*/React.createElement(\"stop\", {\n stopColor: \"white\"\n }), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"#F4F4F6\"\n })))));\n};\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgIconSearchImage2, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/icon_search_image2.e46fdfc5.svg\";\nexport { ForwardRef as ReactComponent };","import { Options, Splide, SplideSlide } from '@splidejs/react-splide';\nimport React, { useMemo, useRef } from 'react';\nimport '@splidejs/react-splide/dist/css/splide-core.min.css';\nimport '@splidejs/react-splide/dist/css/splide.min.css';\nimport './ImagePreviewCarousel.scss';\nimport { useMediaQuery } from 'react-responsive';\n\ninterface Props {\n imgItem: any[];\n onSearchImage?: any;\n handlerCloseModal?: any;\n}\n\nexport const ImagePreviewCarousel = (props: Props) => {\n let { imgItem, onSearchImage, handlerCloseModal } = props;\n const isMobile = useMediaQuery({ query: '(max-width: 776px)' });\n const mainRef: any = useRef(null);\n const thumbsRef: any = useRef(null);\n\n const maxWidth = useMemo(() => {\n const contentWidth = 75 + 58 * imgItem.length;\n const modalWidth = isMobile ? 340 : 400;\n return contentWidth < modalWidth ? contentWidth : modalWidth;\n }, [imgItem.length, isMobile]);\n\n const mainOptions: Options = useMemo(\n () => ({\n type: 'loop',\n perPage: 1,\n perMove: 1,\n gap: '1rem',\n pagination: false,\n arrows: false,\n width: isMobile ? 340 : 370,\n }),\n [isMobile],\n );\n\n const thumbsOptions: Options = useMemo(\n () => ({\n type: 'slide',\n rewind: true,\n gap: '1rem',\n pagination: false,\n fixedWidth: 40,\n fixedHeight: 40,\n cover: true,\n focus: 'center',\n isNavigation: true,\n arrows: imgItem.length > 1,\n width: maxWidth,\n }),\n [imgItem.length, maxWidth],\n );\n\n const renderSlides = (thumbs = false) => {\n return imgItem.map(slide => (\n <SplideSlide key={slide.url} className={thumbs ? '' : 'img-container'}>\n <img\n style={{ objectFit: 'contain', minHeight: '400px' }}\n alt=\"preview\"\n src={slide.url}\n onClick={() => {\n if (!thumbs) {\n handlerCloseModal();\n onSearchImage(slide.url);\n }\n }}\n />\n </SplideSlide>\n ));\n };\n\n React.useEffect(() => {\n if (mainRef.current && thumbsRef.current && thumbsRef.current?.splide) {\n mainRef.current.sync(thumbsRef.current.splide);\n }\n }, []);\n\n return (\n <>\n <Splide options={mainOptions} ref={mainRef}>\n {renderSlides()}\n </Splide>\n\n <div className={`thumbs-list ${imgItem.length <= 1 ? 'd-none' : ''}`}>\n <Splide options={thumbsOptions} ref={thumbsRef}>\n {renderSlides(true)}\n </Splide>\n </div>\n </>\n );\n};\n","import React, { useEffect, useState } from 'react';\nimport { Box, Button, Collapse, Grid, Typography } from '@material-ui/core';\nimport CloseOutlinedIcon from '@material-ui/icons/CloseOutlined';\nimport IconOpenLink from 'common/assets/icons/Union.svg';\nimport KeyboardArrowDownIcon from '@material-ui/icons/KeyboardArrowDown';\nimport { useMediaQuery } from 'react-responsive';\nimport { ImagePreviewCarousel } from './carousel/ImagePreviewCarousel';\nimport { ReactComponent as IconSearchImage } from 'common/assets/icons/icon_search_image2.svg';\nimport { ReactComponent as IconShare } from 'common/assets/icons/Fill.svg';\nimport { ReactComponent as IconDisLike } from 'common/assets/icons/icon_dislike.svg';\nimport { ReactComponent as IconLike } from 'common/assets/icons/icon_like.svg';\nimport { AppState } from 'types';\nimport { useAppSelector } from 'Store/Store';\nimport { prepareImageList } from '../helpers/CommonHelper';\nimport KeyboardArrowUpIcon from '@material-ui/icons/KeyboardArrowUp';\nimport NoImage from '../common/assets/images/unnamed.png';\nimport { useTranslation } from 'react-i18next';\n\ninterface Props {\n numberResult?: number;\n handlerCloseModal?: () => void;\n dataItem?: any;\n onHandlerModalShare?: () => void;\n onSearchImage?: any;\n moreInfoText?: string;\n handlerFeedback: any;\n}\n\nfunction DetailItem(props: Props) {\n const {\n handlerCloseModal,\n dataItem,\n onSearchImage,\n // onHandlerModalShare,\n handlerFeedback,\n } = props;\n const [collapDescription, setCollapDescription] = useState(false);\n const { title, sku, main_offer_link, product_link, brand } = dataItem;\n const [dataImageCarousel, setDataImageCarouSel] = useState<any[]>([]);\n const isMobile = useMediaQuery({ query: '(max-width: 776px)' });\n const { settings } = useAppSelector<AppState>((state: any) => state);\n const [feedback, setFeedback] = useState('none');\n const [urlImage, setUrlImage] = useState<string>('');\n useEffect(() => {\n if (dataItem) {\n checkDataItemResult(dataItem);\n handlerCheckUrlImage(\n dataItem['image(main_similarity)'] || dataItem['main_image_link'],\n );\n }\n }, [dataItem]);\n\n const handlerCheckUrlImage = (url: any, timeout?: number) => {\n timeout = timeout || 5000;\n var timedOut = false,\n timer: any;\n var img = new Image();\n img.onerror = img.onabort = function () {\n if (!timedOut) {\n clearTimeout(timer);\n setUrlImage('');\n }\n };\n img.onload = function () {\n if (!timedOut) {\n clearTimeout(timer);\n setUrlImage(url);\n return;\n }\n };\n img.src = url;\n };\n\n const checkDataItemResult = (dataItem: any) => {\n const valueKey = prepareImageList(dataItem);\n\n setDataImageCarouSel(valueKey);\n };\n const { t } = useTranslation();\n\n return (\n <Box\n className=\"box-modal-default\"\n borderRadius={12}\n style={isMobile ? { margin: 0 } : {}}\n >\n <Box className=\"ml-auto\" style={{ width: 'fit-content', marginRight: 4 }}>\n <Button style={{ padding: 0 }} onClick={() => handlerCloseModal?.()}>\n <CloseOutlinedIcon style={{ fontSize: 20, color: '#55566B' }} />\n </Button>\n </Box>\n <Box style={{ overflowY: 'auto', maxHeight: '90svh' }}>\n <Box\n className=\"box-carosel\"\n style={\n dataImageCarousel.length === 0\n ? { display: 'flex', justifyContent: 'center' }\n : {}\n }\n >\n {dataImageCarousel.length > 0 ? (\n <ImagePreviewCarousel\n imgItem={dataImageCarousel}\n onSearchImage={onSearchImage}\n handlerCloseModal={() => handlerCloseModal?.()}\n />\n ) : (\n <img\n src={NoImage}\n alt=\"image_item\"\n className=\"img-style\"\n style={{ width: '300px', height: '300px', padding: '8px' }}\n />\n )}\n {!isMobile && dataImageCarousel.length > 0 && (\n <Button\n className=\"icon-style\"\n onClick={() => {\n if (urlImage.length > 1) {\n onSearchImage(urlImage);\n handlerCloseModal?.();\n return;\n }\n }}\n >\n <IconSearchImage color={settings.theme?.secondaryColor} />\n </Button>\n )}\n </Box>\n\n <Box\n className=\"box-content\"\n display={'flex'}\n style={{\n flexDirection: 'column',\n borderBottomLeftRadius: 12,\n borderBottomRightRadius: 12,\n paddingBottom: 19,\n backgroundColor: '#F3F3F5',\n }}\n >\n <Box className=\"box-top\">\n <Grid container justifyContent=\"space-between\">\n <Grid item xs={12}>\n <Typography className=\"text-f13 fw-500 max-line-1\">\n {settings.itemIdLabel || 'SKU'}: {sku}\n </Typography>\n {dataItem.keyword_1 && (\n <Typography\n className=\"text-f13 fw-500 max-line-1\"\n style={{ marginTop: '8px' }}\n >\n {t('Manufacturer Number')}: {dataItem.keyword_1}\n </Typography>\n )}\n {settings.warehouseVariant && (\n <Typography\n className=\"text-f13 max-line-1 fw-500\"\n style={{\n marginTop: 10,\n display: 'inline-block',\n }}\n >\n <span style={{ marginRight: 3 }}>\n {dataItem.custom_id_key_3}:\n </span>\n <span\n style={{\n color: dataItem.custom_id_value_3\n ? '#00C070'\n : '#c54545',\n fontWeight: 600,\n }}\n >\n {dataItem.custom_id_value_3 || 0}\n </span>\n </Typography>\n )}\n {(brand || settings.brandName) && (\n <Box\n borderRadius={16}\n style={{\n backgroundColor: `${settings.theme?.secondaryColor}26`,\n width: 'fit-content',\n padding: '3px 5px',\n marginTop: 8,\n }}\n >\n <Typography\n style={{\n color: settings.theme?.secondaryColor,\n fontSize: 12,\n fontWeight: 700,\n }}\n >\n {brand || settings.brandName}\n </Typography>\n </Box>\n )}\n {!settings.warehouseVariant && (\n <Typography\n className={\n isMobile\n ? 'fw-600 text-dark'\n : 'text-f22 fw-600 text-dark'\n }\n style={{\n margin: '8px 0px 0 0px',\n display: 'inline-block',\n maxWidth: '100%',\n wordWrap: 'break-word',\n }}\n >\n {title}\n </Typography>\n )}\n </Grid>\n <Grid item xs={12}>\n {dataItem?.keyword && (\n <Box className=\"w-100\">\n <Button\n className=\"w-100\"\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n color: settings.theme?.secondaryColor,\n fontSize: 14,\n textTransform: 'initial',\n paddingLeft: 5,\n marginTop: 5,\n }}\n onClick={() => setCollapDescription(e => !e)}\n >\n View details\n {collapDescription ? (\n <KeyboardArrowUpIcon\n htmlColor={settings.theme?.secondaryColor}\n />\n ) : (\n <KeyboardArrowDownIcon\n htmlColor={settings.theme?.secondaryColor}\n />\n )}\n </Button>\n <Collapse in={collapDescription}>\n <Typography style={{ fontSize: 14, paddingTop: 5 }}>\n {dataItem?.keyword}\n </Typography>\n </Collapse>\n </Box>\n )}\n {(settings.showMoreInfo || settings.warehouseVariant) && (\n <Box\n style={{\n background: `linear-gradient(270deg, ${settings.theme?.primaryColor}bb 0%, ${settings.theme?.primaryColor} 100%)`,\n // marginBottom: 25,\n boxShadow: '0px 4px 4px rgba(0, 0, 0, 0.25)',\n borderRadius: 4,\n }}\n display={'flex'}\n justifyContent={'space-between'}\n alignItems={'center'}\n mt={2}\n className=\"btn-detail-item\"\n >\n <Button\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n width: '100%',\n padding: '0px 12px',\n minHeight: !settings.warehouseVariant ? 48 : 64,\n }}\n onClick={() =>\n window.open(\n `${product_link || main_offer_link}`,\n '_blank',\n )\n }\n >\n <Typography\n className=\"text-f18 fw-700 text-white max-line-2\"\n align=\"left\"\n style={{\n textTransform: !settings.warehouseVariant\n ? 'uppercase'\n : 'none',\n letterSpacing: '0.55px',\n }}\n >\n {settings.warehouseVariant\n ? title\n : settings.productCtaText || 'MORE INFO'}\n </Typography>\n <img\n src={IconOpenLink}\n alt=\"\"\n style={{ width: 23, marginLeft: 5 }}\n />\n </Button>\n </Box>\n )}\n </Grid>\n </Grid>\n </Box>\n\n {settings.warehouseVariant && (\n <Box\n display=\"flex\"\n justifyContent={'space-between'}\n mt={2}\n style={{ color: '#2B2C46' }}\n gridGap={20}\n >\n <Box\n style={{\n backgroundColor: `${settings.theme?.secondaryColor}26`,\n padding: '5px 10px',\n borderRadius: 4,\n width: '100%',\n }}\n >\n <div style={{ fontSize: 15, fontWeight: 500 }}>\n {dataItem.custom_id_key_2}\n </div>\n <div style={{ fontSize: 17, fontWeight: 700 }}>\n {dataItem.custom_id_value_2 || 'N/A'}\n </div>\n </Box>\n <Box\n style={{\n backgroundColor: `${settings.theme?.secondaryColor}26`,\n padding: '5px 10px',\n borderRadius: 4,\n width: '100%',\n }}\n >\n <div style={{ fontSize: 15, fontWeight: 500 }}>\n {dataItem.custom_id_key_1}\n </div>\n <div style={{ fontSize: 17, fontWeight: 700 }}>\n {dataItem.custom_id_value_1 || 'N/A'}\n </div>\n </Box>\n </Box>\n )}\n\n {settings.showFeedbackAndShare && (\n <Box\n className=\"box-bottom\"\n style={{ marginBottom: 6, marginTop: 28 }}\n >\n <Grid\n container\n justifyContent={\n settings.shareOption ? 'space-between' : 'space-around'\n }\n alignItems=\"center\"\n >\n <Grid item>\n <Box display={'flex'} alignItems={'center'}>\n <Button\n className=\"btn-item\"\n onClick={() => {\n handlerFeedback('like');\n setFeedback('like');\n }}\n >\n <IconLike\n width={30}\n height={30}\n color={feedback === 'like' ? '#3E36DC' : '#000000'}\n />\n </Button>\n </Box>\n </Grid>\n <Grid item>\n <Box display={'flex'} alignItems={'center'}>\n <Button\n className=\"btn-item\"\n onClick={() => {\n handlerFeedback('dislike');\n setFeedback('dislike');\n }}\n >\n <IconDisLike\n width={30}\n height={30}\n color={feedback === 'dislike' ? '#CC1854' : '#000000'}\n />\n </Button>\n </Box>\n </Grid>\n {settings.shareOption && (\n <Grid item>\n <Box display={'flex'} alignItems={'center'}>\n <Button className=\"btn-item\" onClick={() => false}>\n <IconShare width={30} height={30} color=\"gray\" />\n </Button>\n </Box>\n </Grid>\n )}\n {/* <Grid item>\n <Box display={'flex'} alignItems={'center'}>\n <Button className=\"btn-item\">\n <Box\n className=\"\"\n display={'flex'}\n justifyContent={'center'}\n alignItems={'center'}\n >\n <img\n src={IconSupport}\n alt=\"image_item\"\n className=\"icon_support\"\n style={{ width: '30px' }}\n />\n </Box>\n </Button>\n </Box>\n </Grid> */}\n </Grid>\n </Box>\n )}\n </Box>\n </Box>\n </Box>\n );\n}\n\nexport default DetailItem;\n","import { isEmpty } from 'lodash';\n\nexport const prepareImageList = (dataItem: any) => {\n let valueKey = [];\n const newObject = dataItem;\n\n if (!dataItem) {\n return [];\n }\n\n for (let key in newObject) {\n if (\n key?.includes('image(recognition)') ||\n key?.includes('additional_image_link')\n ) {\n if (!isEmpty(newObject[key])) {\n if (newObject[key]) {\n valueKey.push({\n url: newObject[key],\n });\n }\n }\n } else {\n if (key === 'image(main_similarity)' || key === 'main_image_link') {\n if (newObject[key]) {\n valueKey.push({\n url: newObject[key],\n });\n }\n }\n }\n }\n return valueKey;\n};\n","import { Box, Button, IconButton, Paper, Typography } from '@material-ui/core';\nimport CloseOutlinedIcon from '@material-ui/icons/CloseOutlined';\nimport FileCopyOutlinedIcon from '@material-ui/icons/FileCopyOutlined';\nimport IconEmail from '../common/assets/icons/email_share.svg';\nimport DefaultModal from './modal/DefaultModal';\nimport React, { Dispatch } from 'react';\n\ntype PropsType = {\n dataItem: any;\n isOpen: boolean;\n setModalState: Dispatch<React.SetStateAction<boolean>>;\n};\n\nexport const ShareModal = (props: PropsType) => {\n const { dataItem, isOpen, setModalState } = props;\n const main_image_link =\n dataItem['image(main_similarity)'] || dataItem['main_image_link'];\n return (\n <DefaultModal openModal={isOpen} handleClose={() => setModalState(false)}>\n <Box\n className=\"box-modal-default box-modal-share\"\n style={{ padding: '4px' }}\n >\n <Box\n className=\"ml-auto\"\n style={{ width: 'fit-content', marginRight: 5 }}\n >\n <Button style={{ padding: 0 }} onClick={() => setModalState(false)}>\n <CloseOutlinedIcon style={{ fontSize: 16, color: '#55566B' }} />\n </Button>\n </Box>\n <Box className=\"box-content-box-share\">\n <Typography\n className=\"text-f12 text-gray text-bold\"\n style={{ marginBottom: '5px' }}\n >\n Share\n </Typography>\n {main_image_link && (\n <Paper component=\"form\" className=\"box-input\">\n <Box\n className=\"text-f9 text-gray\"\n style={{\n width: '100%',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n paddingRight: '10px',\n }}\n >\n {main_image_link}\n </Box>\n <IconButton\n color=\"secondary\"\n aria-label=\"directions\"\n style={{ padding: '4px' }}\n onClick={() => {\n navigator.clipboard.writeText(main_image_link);\n }}\n >\n <FileCopyOutlinedIcon style={{ fontSize: 14 }} />\n </IconButton>\n </Paper>\n )}\n\n <Paper\n component=\"form\"\n className=\"box-input\"\n style={{ marginTop: '12px', marginBottom: '8px' }}\n >\n <Box\n className=\"text-f9 text-gray\"\n style={{\n width: '100%',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n paddingRight: '10px',\n display: 'flex',\n alignItems: 'center',\n }}\n >\n <span style={{ fontWeight: 'bold', paddingRight: '4px' }}>\n SKU:\n </span>{' '}\n {dataItem.sku}\n </Box>\n <IconButton\n color=\"secondary\"\n aria-label=\"directions\"\n style={{ padding: '4px' }}\n onClick={() => {\n navigator.clipboard.writeText(dataItem.sku);\n }}\n >\n <FileCopyOutlinedIcon style={{ fontSize: 14 }} />\n </IconButton>\n </Paper>\n <Box\n className=\"box-media-share\"\n display={'flex'}\n style={{ marginTop: '18px' }}\n >\n <a\n style={{ padding: 0 }}\n href={`mailto:support@nyris.io?subject=GF-Sparepart-Search&body= ${encodeURIComponent(\n 'SKU: ' +\n dataItem.sku +\n '\\r\\n' +\n (main_image_link ? `Image Link: ${main_image_link}` : ''),\n )} `}\n >\n <Box display={'flex'} alignItems={'center'}>\n <img width={40} height={40} src={IconEmail} alt=\"icon_email\" />\n </Box>\n </a>\n {/* <Button style={{ padding: 0, margin: '0 20px' }}>\n <Box display={'flex'} alignItems={'center'}>\n <img\n src={IconWeChat}\n width={40}\n height={40}\n alt=\"icon_email\"\n />\n </Box>\n </Button>\n <Button style={{ padding: 0 }}>\n <Box display={'flex'} alignItems={'center'}>\n <img\n src={IconWhatsApp}\n width={40}\n height={40}\n alt=\"icon_email\"\n />\n </Box>\n </Button> */}\n </Box>\n </Box>\n </Box>\n </DefaultModal>\n );\n};\n","import { Box, Button, Grid, Tooltip, Typography } from '@material-ui/core';\nimport ChevronRightOutlinedIcon from '@material-ui/icons/ChevronRightOutlined';\nimport IconOpenLink from 'common/assets/icons/Union.svg';\nimport { ReactComponent as IconShare } from 'common/assets/icons/Fill.svg';\nimport { ReactComponent as Expand } from 'common/assets/icons/expand.svg';\nimport { ReactComponent as IconDisLike } from 'common/assets/icons/icon_dislike.svg';\nimport { ReactComponent as IconLike } from 'common/assets/icons/icon_like.svg';\nimport React, { memo, useEffect, useState } from 'react';\nimport NoImage from 'common/assets/images/unnamed.png';\nimport { AppState } from 'types';\nimport { useAppDispatch, useAppSelector } from 'Store/Store';\nimport DefaultModal from 'components/modal/DefaultModal';\nimport DetailItem from 'components/DetailItem';\nimport {\n onToggleModalItemDetail,\n updateStatusLoading,\n} from 'Store/search/Search';\nimport { ShareModal } from '../ShareModal';\nimport { truncateString } from 'helpers/truncateString';\nimport { useTranslation } from 'react-i18next';\n\ninterface Props {\n dataItem: any;\n handlerToggleModal?: any;\n handleClose?: () => void;\n isHover?: boolean;\n indexItem?: number;\n onSearchImage?: any;\n handlerFeedback?: any;\n handlerGroupItem?: any;\n isGroupItem?: boolean;\n moreInfoText?: string;\n handlerCloseGroup?: any;\n main_image_link?: any;\n}\n\nfunction ItemResult(props: Props) {\n const {\n dataItem,\n isHover = false,\n onSearchImage,\n handlerGroupItem,\n handlerFeedback,\n isGroupItem,\n handlerCloseGroup,\n main_image_link,\n indexItem,\n } = props;\n const dispatch = useAppDispatch();\n const [urlImage, setUrlImage] = useState<string>('');\n const { settings } = useAppSelector<AppState>((state: any) => state);\n const [isOpenModalImage, setOpenModalImage] = useState<boolean>(false);\n const [isOpenModalShare, setOpenModalShare] = useState<boolean>(false);\n const [feedback, setFeedback] = useState('none');\n const { t } = useTranslation();\n const { sku, title, brand, main_offer_link, product_link, collap } = dataItem;\n useEffect(() => {\n if (main_image_link) {\n handlerCheckUrlImage(main_image_link);\n }\n }, [main_image_link]);\n\n const handlerShowGroup = () => {\n handlerGroupItem(dataItem, indexItem);\n };\n\n const handlerHideGroup = () => {\n handlerCloseGroup(dataItem, indexItem);\n };\n\n const handlerCheckUrlImage = (url: any, timeout?: number) => {\n timeout = timeout || 5000;\n var timedOut = false,\n timer: any;\n var img = new Image();\n img.onerror = img.onabort = function () {\n if (!timedOut) {\n clearTimeout(timer);\n setUrlImage('');\n }\n };\n img.onload = function () {\n if (!timedOut) {\n clearTimeout(timer);\n setUrlImage(url);\n return;\n }\n };\n img.src = url;\n };\n\n const handlerToggleModal = (item: any) => {\n setOpenModalImage(true);\n dispatch(onToggleModalItemDetail(true));\n dispatch(updateStatusLoading(true));\n setTimeout(() => {\n dispatch(updateStatusLoading(false));\n }, 400);\n };\n return (\n <Box className=\"wrap-main-item-result\">\n <DefaultModal\n openModal={isOpenModalImage}\n handleClose={(e: any) => {\n setOpenModalImage(false);\n }}\n >\n <DetailItem\n handlerCloseModal={() => {\n setOpenModalImage(false);\n }}\n handlerFeedback={handlerFeedback}\n dataItem={dataItem}\n onHandlerModalShare={() => setOpenModalShare(true)}\n onSearchImage={(url: string) => {\n dispatch(updateStatusLoading(true));\n onSearchImage(url);\n }}\n />\n </DefaultModal>\n\n <ShareModal\n setModalState={setOpenModalShare}\n dataItem={dataItem}\n isOpen={isOpenModalShare}\n />\n <Box className=\"box-top\">\n {isGroupItem && collap && (\n <Box className=\"btn-show-result\">\n <Button onClick={handlerShowGroup}>\n {t('Show group')}\n <ChevronRightOutlinedIcon style={{ fontSize: '10px' }} />\n </Button>\n </Box>\n )}\n {isGroupItem && !collap && (\n <Box className=\"btn-show-result\">\n <Button onClick={handlerHideGroup}>\n {t('Close group')}\n <ChevronRightOutlinedIcon style={{ fontSize: '10px' }} />\n </Button>\n </Box>\n )}\n {!isHover && (\n <Box className=\"box-icon-modal\">\n <Button\n style={{ width: '100%', height: '100%', padding: 0, zIndex: 9 }}\n onClick={() => handlerToggleModal(dataItem)}\n >\n <Expand color={settings.theme?.secondaryColor} />\n </Button>\n </Box>\n )}\n <Box className=\"box-image\">\n <Button\n style={{ width: '100%', height: '100%' }}\n onClick={(e: any) => {\n e.preventDefault();\n if (urlImage.length > 1) {\n onSearchImage(main_image_link);\n }\n }}\n >\n {main_image_link ? (\n <img\n src={main_image_link}\n key={main_image_link}\n alt=\"image_item\"\n className=\"img-style\"\n style={{ width: '100%', height: '100%', objectFit: 'contain' }}\n />\n ) : (\n <img\n src={NoImage}\n alt=\"image_item\"\n className=\"img-style\"\n style={{ width: '100%', height: '100%', objectFit: 'cover' }}\n />\n )}\n </Button>\n {isHover && (\n <Box className=\"box-hover\">\n <Button>View item</Button>\n </Box>\n )}\n </Box>\n </Box>\n\n <Box\n className=\"box-content\"\n display={'flex'}\n style={{\n flexDirection: 'column',\n backgroundColor: '#F3F3F5',\n }}\n >\n <Box\n className=\"box-top\"\n style={{ minHeight: settings.showMoreInfo ? '150px' : '90px' }}\n >\n <Grid container justifyContent=\"space-between\">\n <Grid item xs={12}>\n <Tooltip\n title={sku}\n placement=\"top\"\n arrow={true}\n disableHoverListener={sku?.length < 19 || !sku}\n >\n <Typography\n className=\"text-f12 max-line-1 fw-400\"\n style={{\n color: '#2B2C46',\n marginTop: 10,\n display: 'inline-block',\n }}\n >\n <span style={{ marginRight: 3 }}>\n {settings.itemIdLabel || 'SKU'}:\n </span>\n {truncateString(sku, 19)}\n </Typography>\n </Tooltip>\n\n {settings.warehouseVariant && (\n <Box>\n <Typography\n className=\"text-f12 max-line-1 fw-400\"\n style={{\n color: '#2B2C46',\n marginTop: 10,\n display: 'inline-block',\n }}\n >\n <span style={{ marginRight: 3 }}>\n {dataItem.custom_id_key_3}:\n </span>\n <span\n style={{\n color: dataItem.custom_id_value_3\n ? '#00C070'\n : '#c54545',\n fontWeight: 600,\n }}\n >\n {dataItem.custom_id_value_3 || 0}\n </span>\n </Typography>\n </Box>\n )}\n\n {(!!brand || !!settings.brandName) && (\n <Tooltip\n title={brand}\n placement=\"top\"\n arrow={true}\n disableHoverListener={brand?.length < 22 || !brand}\n >\n <Box\n mt={1}\n style={{\n background: `${settings.theme?.secondaryColor}26`,\n borderRadius: '6px',\n display: 'flex',\n width: 'fit-content',\n padding: '2px 5px',\n }}\n >\n <Typography\n className=\"fw-700\"\n style={{\n color: settings.theme?.secondaryColor,\n fontSize: 10,\n letterSpacing: '1px',\n maxWidth: '160px',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }}\n >\n {truncateString(brand, 22) || settings.brandName}\n </Typography>\n </Box>\n </Tooltip>\n )}\n {!settings.warehouseVariant && (\n <Typography\n className=\"text-f13 fw-600 max-line-3\"\n style={{ color: '#1E1F31', marginTop: 15 }}\n >\n {title}\n </Typography>\n )}\n\n {(settings.showMoreInfo || settings.warehouseVariant) && (\n <Tooltip\n title={title}\n placement=\"top\"\n arrow={true}\n disableHoverListener={\n title.length < 35 || !settings.warehouseVariant\n }\n >\n <Box\n style={{\n boxShadow: '-2px 2px 4px rgba(170, 171, 181, 0.5)',\n // marginBottom: 22,\n height: 40,\n background: `linear-gradient(270deg, ${settings.theme?.primaryColor}bb 0%, ${settings.theme?.primaryColor} 100%)`,\n borderRadius: 4,\n padding: '0px 8px',\n }}\n display={'flex'}\n justifyItems={'center'}\n alignItems={'center'}\n justifyContent={'space-between'}\n mt={2}\n >\n <Button\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n width: '100%',\n padding: 0,\n }}\n onClick={() =>\n window.open(\n `${product_link || main_offer_link}`,\n '_blank',\n )\n }\n >\n <Typography\n className=\"text-white max-line-2\"\n style={{\n textTransform: !settings.warehouseVariant\n ? 'uppercase'\n : 'none',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n fontWeight: !settings.warehouseVariant ? 700 : 500,\n fontSize: !settings.warehouseVariant\n ? '12px'\n : '11px',\n letterSpacing: '0.27px',\n wordBreak: !settings.warehouseVariant\n ? 'normal'\n : 'break-all',\n maxWidth: '136px',\n paddingRight: '8px',\n }}\n align=\"left\"\n >\n {settings.warehouseVariant\n ? truncateString(title, 35)\n : settings.productCtaText || 'MORE INFO'}\n </Typography>\n <img src={IconOpenLink} alt=\"more-info\" width={20} />\n </Button>\n </Box>\n </Tooltip>\n )}\n </Grid>\n </Grid>\n </Box>\n\n {settings.warehouseVariant && (\n <Box\n display=\"flex\"\n justifyContent={'space-between'}\n style={{ color: '#2B2C46', marginTop: '12px' }}\n gridGap={10}\n >\n <Box\n style={{\n backgroundColor: `${settings.theme?.secondaryColor}26`,\n padding: '5px 10px',\n borderRadius: 4,\n width: '100%',\n }}\n >\n <div style={{ fontSize: 10, fontWeight: 500 }}>\n {dataItem.custom_id_key_2}\n </div>\n <div\n style={{\n fontSize: 13,\n fontWeight: 700,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }}\n >\n {dataItem.custom_id_value_2 || 'N/A'}\n </div>\n </Box>\n\n <Box\n style={{\n backgroundColor: `${settings.theme?.secondaryColor}26`,\n padding: '5px 10px',\n borderRadius: 4,\n width: '100%',\n }}\n >\n <div style={{ fontSize: 10, fontWeight: 500 }}>\n {dataItem.custom_id_key_1}\n </div>\n <div\n style={{\n fontSize: 13,\n fontWeight: 700,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }}\n >\n {dataItem.custom_id_value_1 || 'N/A'}\n </div>\n </Box>\n </Box>\n )}\n\n {settings.showFeedbackAndShare && (\n <Box\n className=\"box-bottom\"\n style={{ marginBottom: 6, marginTop: 10 }}\n >\n <Grid\n container\n justifyContent={\n settings.shareOption ? 'space-between' : 'space-around'\n }\n alignItems=\"center\"\n >\n <Grid item>\n <Box display={'flex'} alignItems={'center'}>\n <Button\n className=\"btn-item\"\n style={{ padding: '6px' }}\n onClick={() => {\n handlerFeedback('like');\n setFeedback('like');\n }}\n >\n <IconLike\n width={16}\n height={16}\n color={feedback === 'like' ? '#3E36DC' : '#000000'}\n />\n </Button>\n </Box>\n </Grid>\n <Grid item>\n <Box display={'flex'} alignItems={'center'}>\n <Button\n style={{ padding: '6px' }}\n className=\"btn-item\"\n onClick={() => {\n handlerFeedback('dislike');\n setFeedback('dislike');\n }}\n >\n <IconDisLike\n width={16}\n height={16}\n color={feedback === 'dislike' ? '#CC1854' : '#000000'}\n />\n </Button>\n </Box>\n </Grid>\n {settings.shareOption && (\n <Grid item>\n <Box display={'flex'} alignItems={'center'}>\n <Button\n style={{ padding: '6px' }}\n className=\"btn-item\"\n onClick={() => false}\n >\n <IconShare width={16} height={16} color=\"#808080\" />\n </Button>\n </Box>\n </Grid>\n )}\n {/* <Grid item>\n <Box display={'flex'} alignItems={'center'}>\n <Button className=\"btn-item\">\n <Box\n className=\"\"\n display={'flex'}\n justifyContent={'center'}\n alignItems={'center'}\n >\n <img\n src={IconShare}\n alt=\"image_item\"\n className=\"icon_support\"\n style={{ width: '1rem' }}\n />\n </Box>\n </Button>\n </Box>\n </Grid> */}\n </Grid>\n </Box>\n )}\n </Box>\n </Box>\n );\n}\n\nexport default memo(ItemResult);\n","import { Box } from '@material-ui/core';\nimport ItemResult from 'components/results/ItemResult';\nimport { groupBy } from 'lodash';\nimport React, { memo, useEffect, useMemo, useState } from 'react';\nimport { connectStateResults } from 'react-instantsearch-dom';\nimport { useAppSelector } from 'Store/Store';\nimport { AppState } from 'types';\n\ninterface Props {\n allSearchResults: any;\n getUrlToCanvasFile: any;\n setLoading?: any;\n sendFeedBackAction: any;\n moreInfoText: any;\n requestImage?: any;\n searchQuery?: string;\n}\n\nfunction ProductListComponent({\n allSearchResults,\n getUrlToCanvasFile,\n sendFeedBackAction,\n moreInfoText,\n searchQuery,\n requestImage,\n isSearchStalled,\n}: any): JSX.Element {\n const { search } = useAppSelector<AppState>((state: any) => state);\n const { loadingSearchAlgolia } = search;\n const [hitGroups, setHitGroups] = useState<any>({});\n const [itemShowDefault, setItemShowDefault] = useState<any[]>([]);\n const [algoliaRequest, setAlgoliaRequest] = useState(false);\n\n useEffect(() => {\n if (isSearchStalled) {\n setAlgoliaRequest(true);\n }\n }, [isSearchStalled]);\n\n useEffect(() => {\n if (!allSearchResults?.hits?.length) {\n setItemShowDefault([]);\n return;\n }\n setAlgoliaRequest(false);\n const listHistDefaultGroups = setListHitDefault(allSearchResults?.hits);\n setItemShowDefault(listHistDefaultGroups);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [allSearchResults?.hits, search?.valueTextSearch]);\n\n const setListHitDefault = (hits: any) => {\n let newArrayShowGroup: any = [];\n let newArrayShowItem: any = [];\n\n const groupHits = hits.filter(\n (hit: { group_id: string }) => hit.group_id && hit.group_id !== '',\n );\n const groups = groupBy(groupHits, 'group_id');\n setHitGroups(groups);\n newArrayShowGroup = Object.values(groups);\n if (newArrayShowGroup.length === 0) {\n return hits;\n }\n newArrayShowGroup.forEach((item: any) => {\n let payload: any;\n if (item.length >= 2) {\n payload = {\n ...item[0],\n isGroup: true,\n collap: true,\n };\n newArrayShowItem.push(payload);\n } else {\n payload = {\n ...item[0],\n isGroup: false,\n collap: null,\n };\n newArrayShowItem.push(payload);\n }\n });\n return newArrayShowItem;\n };\n\n const handlerGroupItem = (hit: any, index: number) => {\n const group_id = hit.group_id;\n let newItemList = [...itemShowDefault];\n const firstArr = newItemList.slice(0, index + 1);\n firstArr.filter(item => item.group_id === group_id)[0].collap = false;\n let secondArr = newItemList.slice(index + 1, newItemList.length);\n let otherItemsInGroup = [...hitGroups[group_id]];\n otherItemsInGroup.shift();\n secondArr = otherItemsInGroup.concat(secondArr);\n setItemShowDefault(firstArr.concat(secondArr));\n };\n const handlerCloseGroup = (hit: any, index: number) => {\n const group_id = hit.group_id;\n let newItemList = [...itemShowDefault];\n const firstArr = newItemList.slice(0, index + 1);\n firstArr.filter(item => item.group_id === group_id)[0].collap = true;\n let secondArr = newItemList.slice(index + 1, newItemList.length);\n secondArr = secondArr.filter(item => {\n return item.group_id !== group_id;\n });\n setItemShowDefault(firstArr.concat(secondArr));\n };\n\n const renderItem = useMemo(() => {\n if (!requestImage && !search.valueTextSearch.query && !isSearchStalled) {\n return (\n <Box style={{ marginTop: '50px', width: '100%', textAlign: 'center' }}>\n Please upload an image or enter a keyword to search.\n </Box>\n );\n }\n if (\n itemShowDefault.length === 0 &&\n !loadingSearchAlgolia &&\n !isSearchStalled &&\n (algoliaRequest || requestImage)\n ) {\n return (\n <Box style={{ marginTop: '50px', width: '100%', textAlign: 'center' }}>\n No products were found matching your search criteria.\n </Box>\n );\n }\n return itemShowDefault.map((hit: any, i: number) => {\n return (\n <Box key={i}>\n <ItemResult\n dataItem={hit}\n indexItem={i}\n isHover={false}\n onSearchImage={(url: string) => {\n getUrlToCanvasFile(url);\n }}\n handlerFeedback={(value: string) => {\n sendFeedBackAction(value);\n }}\n handlerGroupItem={(hitItem: any, index: number) =>\n handlerGroupItem(hitItem, index)\n }\n handlerCloseGroup={(hitItem: any, index: number) =>\n handlerCloseGroup(hitItem, index)\n }\n isGroupItem={hit?.isGroup}\n moreInfoText={moreInfoText}\n main_image_link={\n hit['image(main_similarity)'] || hit['main_image_link']\n }\n />\n </Box>\n );\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n itemShowDefault,\n searchQuery,\n requestImage,\n search.valueTextSearch,\n isSearchStalled,\n algoliaRequest,\n loadingSearchAlgolia,\n ]);\n\n return <>{renderItem}</>;\n}\n\nconst ProductList = connectStateResults<Props>(memo(ProductListComponent));\nexport default ProductList;\n","import React, { memo, useCallback, useEffect, useRef, useState } from 'react';\nimport { Box, Button, Typography } from '@material-ui/core';\nimport ArrowBackIosOutlinedIcon from '@material-ui/icons/ArrowBackIosOutlined';\nimport ArrowLeftIcon from '@material-ui/icons/ArrowLeft';\nimport ArrowRightIcon from '@material-ui/icons/ArrowRight';\nimport KeyboardArrowRightOutlinedIcon from '@material-ui/icons/KeyboardArrowRightOutlined';\nimport { RectCoords } from '@nyris/nyris-api';\nimport { Preview } from '@nyris/nyris-react-components';\nimport IconSupport from 'common/assets/icons/support3.svg';\nimport { CurrentRefinements } from 'components/current-refinements/current-refinements';\nimport FooterResult from 'components/FooterResult';\nimport CustomSearchBox from 'components/input/inputSearch';\nimport ProductList from 'components/ProductList';\nimport ExpandablePanelComponent from 'components/PanelResult';\nimport { debounce, isEmpty } from 'lodash';\nimport {\n Configure,\n connectStateResults,\n HitsPerPage,\n Pagination,\n} from 'react-instantsearch-dom';\nimport { useMediaQuery } from 'react-responsive';\nimport { Link } from 'react-router-dom';\nimport { feedbackClickEpic, feedbackSuccessEpic } from 'services/Feedback';\nimport { createImage, findByImage, findRegions } from 'services/image';\nimport { showFeedback, showResults } from 'Store/nyris/Nyris';\nimport {\n loadingActionResults,\n onToggleModalItemDetail,\n selectionChanged,\n setImageSearchInput,\n setRegions,\n setRequestImage,\n setSearchResults,\n setSelectedRegion,\n updateResultChangePosition,\n updateStatusLoading,\n} from 'Store/search/Search';\nimport { useAppDispatch, useAppSelector } from 'Store/Store';\nimport { showHits } from '../../constants';\nimport { DEFAULT_REGION } from '../../constants';\nimport { useTranslation } from 'react-i18next';\n\ninterface Props {\n allSearchResults: any;\n}\n\nfunction ResultComponent(props: Props) {\n const dispatch = useAppDispatch();\n const refBoxResult: any = useRef(null);\n const stateGlobal = useAppSelector((state: any) => state);\n const { search, settings } = stateGlobal;\n const { requestImage, regions, selectedRegion, keyFilter } = search;\n const moreInfoText = settings?.productCtaText;\n const [toggleColLeft, setToggleColLeft] = useState<boolean>(false);\n const isMobile = useMediaQuery({ query: '(max-width: 776px)' });\n const [imageSelection, setImageSelection] = useState<any>(null);\n const executeScroll = () => refBoxResult.current.scrollIntoView('-100px');\n const [filterString, setFilterString] = useState<string>();\n const { t } = useTranslation();\n useEffect(() => {\n if (selectedRegion) {\n setImageSelection(selectedRegion);\n }\n }, [selectedRegion]);\n\n useEffect(() => {\n if (requestImage) {\n executeScroll();\n setImageSelection(DEFAULT_REGION);\n }\n }, [requestImage]);\n\n const findImageByApiNyris = useCallback(\n async (canvas: any, r?: RectCoords) => {\n const preFilter = [\n {\n key: settings.visualSearchFilterKey,\n values: [`${keyFilter}`],\n },\n ];\n dispatch(loadingActionResults());\n return findByImage({\n image: canvas,\n settings,\n region: r,\n filters: keyFilter ? preFilter : undefined,\n })\n .then(res => {\n dispatch(updateStatusLoading(false));\n return {\n ...res,\n };\n })\n .catch((e: any) => {\n dispatch(updateStatusLoading(false));\n console.log('error call api change selection find image', e);\n });\n },\n [settings, dispatch, keyFilter],\n );\n\n // TODO: Search offers for image:\n const findItemsInSelection = useCallback(\n debounce(async (r: RectCoords) => {\n if (!requestImage) {\n return;\n }\n dispatch(updateStatusLoading(true));\n const { canvas }: any = requestImage;\n findImageByApiNyris(canvas, r).then((res: any) => {\n dispatch(updateResultChangePosition(res));\n });\n return dispatch(showFeedback());\n }, 250),\n [requestImage, findImageByApiNyris],\n );\n\n // TODO: Handler like dislike\n const sendFeedBackAction = async (type: string) => {\n feedbackSuccessEpic(stateGlobal, type === 'like');\n };\n\n // TODO: Search image with url or file\n const getUrlToCanvasFile = async (url: string, position?: number) => {\n dispatch(updateStatusLoading(true));\n if (isMobile) {\n executeScroll();\n // setOpenModalImage(false);\n dispatch(onToggleModalItemDetail(false));\n }\n dispatch(showResults());\n dispatch(loadingActionResults());\n dispatch(setImageSearchInput(url));\n let image = await createImage(url);\n dispatch(setRequestImage(image));\n\n if (position) {\n feedbackClickEpic(stateGlobal, position);\n return;\n }\n let searchRegion: RectCoords | undefined = undefined;\n\n if (settings.regions) {\n let res = await findRegions(image, settings);\n searchRegion = res.selectedRegion;\n dispatch(setRegions(res.regions));\n dispatch(setSelectedRegion(searchRegion));\n }\n const preFilter = [\n {\n key: settings.visualSearchFilterKey,\n values: [`${keyFilter}`],\n },\n ];\n findByImage({\n image,\n settings,\n region: searchRegion,\n filters: keyFilter ? preFilter : undefined,\n }).then(res => {\n dispatch(setSearchResults(res));\n dispatch(showFeedback());\n dispatch(updateStatusLoading(false));\n return;\n });\n };\n const nonEmptyFilter: any[] = !requestImage\n ? []\n : ['sku:DOES_NOT_EXIST<score=1>'];\n const filterSkus: any = search?.results\n ? search?.results\n .slice()\n .reverse()\n .map((f: any, i: number) => `sku:'${f.sku}'<score=${i}> `)\n : '';\n const filterSkusString = [...nonEmptyFilter, ...filterSkus].join(' OR ');\n\n useEffect(() => {\n document.title = 'Search results';\n\n if (requestImage || isEmpty(search.valueTextSearch.query)) return;\n\n const filter = keyFilter\n ? `${settings.alogoliaFilterField}:'${keyFilter}'`\n : '';\n setFilterString(filter);\n }, [\n keyFilter,\n requestImage,\n search.valueTextSearch.query,\n settings.alogoliaFilterField,\n ]);\n\n useEffect(() => {\n if (!requestImage) {\n return;\n }\n dispatch(updateStatusLoading(true));\n const { canvas }: any = requestImage;\n findImageByApiNyris(canvas).then((res: any) => {\n // setPreFilter(keyFilter);\n dispatch(updateResultChangePosition(res));\n });\n dispatch(showFeedback());\n\n return () => {};\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [keyFilter]);\n\n useEffect(() => {\n if (!requestImage) return;\n const filter = keyFilter\n ? filterSkusString\n ? `(${filterSkusString}) AND ${settings.alogoliaFilterField}:'${keyFilter}'`\n : `${settings.alogoliaFilterField}:'${keyFilter}'`\n : filterSkusString;\n setFilterString(filter);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [filterSkusString, settings.alogoliaFilterField]);\n\n const debouncedOnImageSelectionChange = useCallback(\n debounce((r: RectCoords) => {\n dispatch(selectionChanged(r));\n findItemsInSelection(r);\n }, 500),\n [findItemsInSelection],\n );\n\n return (\n <div\n className={`wrap-main-result loading`}\n id=\"wrap-main-result\"\n ref={refBoxResult}\n >\n <>\n {filterString && (\n <Configure\n query={search.valueTextSearch.query}\n filters={filterString}\n ></Configure>\n )}\n <Box className=\"box-wrap-result-component\">\n {!isMobile && (\n <div className=\"box-search\">\n <CustomSearchBox />\n </div>\n )}\n <Box className=\"box-result\">\n <>\n <Box className=\"btn-open-support\">\n <Link to={'/support'} style={{ color: '#3E36DC' }}>\n <img src={IconSupport} alt=\"\" width={16} height={16} />\n </Link>\n </Box>\n {!isMobile && (\n <>\n {((!settings.postFilterOption && requestImage) ||\n settings.postFilterOption) && (\n <Box\n className={`wrap-main-col-left ${\n toggleColLeft ? 'toggle' : ''\n }`}\n >\n <Box className=\"box-toggle-coloumn\">\n <Button\n style={\n requestImage && !toggleColLeft\n ? { color: '#fff' }\n : { color: '#55566b' }\n }\n onClick={() => {\n setToggleColLeft(!toggleColLeft);\n }}\n >\n {toggleColLeft ? (\n <KeyboardArrowRightOutlinedIcon\n style={{ fontSize: 30 }}\n />\n ) : (\n <ArrowBackIosOutlinedIcon\n style={{ fontSize: 20 }}\n />\n )}\n </Button>\n </Box>\n {settings.preview && requestImage && (\n <Box\n className=\"col-left\"\n style={{\n backgroundColor: settings?.theme?.primaryColor,\n }}\n >\n <Box className=\"box-preview\">\n <Box\n className=\"preview-item\"\n style={{ backgroundColor: 'white' }}\n >\n <Preview\n key={requestImage?.id}\n onSelectionChange={(r: RectCoords) => {\n setImageSelection(r);\n debouncedOnImageSelectionChange(r);\n }}\n image={requestImage?.canvas}\n selection={imageSelection || DEFAULT_REGION}\n regions={regions}\n maxWidth={320}\n maxHeight={320}\n dotColor=\"#FBD914\"\n />\n </Box>\n </Box>\n <Box className=\"box-title_col-left\">\n <Typography style={{ fontSize: 11, color: '#fff' }}>\n {t(\n 'Adjust the selection frame for better results',\n )}\n .\n </Typography>\n </Box>\n </Box>\n )}\n {/* TODO: Filter list Choose */}\n {settings.postFilterOption && (\n <Box className=\"col-left__bottom\">\n <ExpandablePanelComponent />\n </Box>\n )}\n </Box>\n )}\n </>\n )}\n\n <Box\n className={`col-right ${\n settings.preview && 'ml-auto mr-auto'\n } ${isMobile && 'col-right-result-mobile'}`}\n style={{\n marginTop:\n keyFilter && isMobile ? '105px' : isMobile ? '60px' : '0px',\n }}\n >\n <Box className=\"wrap-box-refinements\">\n <CurrentRefinements statusSwitchButton={true} />\n </Box>\n {isMobile && settings.preview && requestImage && (\n <Box\n className=\"col-left\"\n style={{\n backgroundColor: settings?.theme?.primaryColor,\n marginBottom: '15px',\n }}\n >\n {\n <Box className=\"box-preview\">\n <Box\n className=\"preview-item\"\n style={{ backgroundColor: 'white' }}\n >\n <Preview\n key={requestImage?.id}\n onSelectionChange={(r: RectCoords) => {\n setImageSelection(r);\n debouncedOnImageSelectionChange(r);\n }}\n image={requestImage?.canvas}\n selection={imageSelection || DEFAULT_REGION}\n regions={regions}\n maxWidth={320}\n maxHeight={320}\n dotColor=\"#3E36DC\"\n />\n </Box>\n </Box>\n }\n </Box>\n )}\n\n <Box className={'box-item-result ml-auto mr-auto'}>\n <ProductList\n getUrlToCanvasFile={getUrlToCanvasFile}\n setLoading={false}\n sendFeedBackAction={sendFeedBackAction}\n moreInfoText={moreInfoText}\n requestImage={requestImage}\n searchQuery={search.valueTextSearch.query}\n />\n <Box\n className=\"pagination-result\"\n style={{\n width: '100%',\n margin: '20px auto',\n padding: '0 20%',\n }}\n >\n {props.allSearchResults?.hits.length > 0 &&\n (requestImage || search.valueTextSearch.query) && (\n <Pagination\n showFirst={false}\n translations={{\n previous: (\n <ArrowLeftIcon style={{ color: '#161616' }} />\n ),\n next: (\n <ArrowRightIcon style={{ color: '#161616' }} />\n ),\n }}\n />\n )}\n </Box>\n {/* {isMobile && (\n <Box\n className=\"box-title_col-left\"\n style={{\n height: 86,\n background:\n 'linear-gradient(360deg, #56577C 0%, #2B2C46 100%)',\n width: '100%',\n }}\n >\n <Typography\n style={{\n fontSize: 11,\n color: '#fff',\n textAlign: 'center',\n marginTop: 18,\n }}\n >\n <span className=\"fw-700\">Wrong results?</span> share\n your search with our{' '}\n <span style={{ textDecoration: 'underline' }}>\n <a href=\"/#\" className=\"fw-700 text-white\">\n product experts\n </a>\n </span>\n </Typography>\n </Box>\n )} */}\n </Box>\n </Box>\n </>\n </Box>\n {!isMobile && (\n <Box>\n <Box className=\"box-notify\">\n <FooterResult search={search}>\n <Box\n display={'flex'}\n style={{ padding: '0 20px' }}\n className=\"box-change-hit-items\"\n >\n <span style={{ paddingRight: '10px' }}>\n {t('Items per page')}:\n </span>\n <HitsPerPage items={showHits} defaultRefinement={20} />\n </Box>\n </FooterResult>\n </Box>\n </Box>\n )}\n </Box>\n </>\n </div>\n );\n}\n\nexport default connectStateResults<Props>(memo(ResultComponent));\n","import React, { memo } from 'react';\nimport { Route, Switch, Redirect } from 'react-router-dom';\nimport Layout from 'components/Layout';\nimport { ReactNode } from 'components/common';\nimport App from 'App';\nimport ResultComponent from 'page/result';\n\ninterface PrivateRouteProps {\n component: ReactNode;\n authed: boolean;\n [key: string]: any;\n}\n\nconst PrivateRoute = ({\n component: Component,\n authed,\n ...rest\n}: PrivateRouteProps) => {\n return (\n <Route\n {...rest}\n render={() => (authed ? <Component /> : <Redirect to=\"/login\" />)}\n />\n );\n};\n\nfunction Router(): JSX.Element {\n const accessToken = true;\n\n return (\n <Switch>\n <Layout>\n <Switch>\n <PrivateRoute\n authed={!!accessToken}\n exact\n strict\n path=\"/\"\n component={App}\n />\n <PrivateRoute\n authed={!!accessToken}\n exact\n strict\n path=\"/result\"\n component={ResultComponent}\n />\n </Switch>\n </Layout>\n </Switch>\n );\n}\n\nexport default memo(Router);\n","import React from 'react';\nimport toast, {\n resolveValue,\n ToastBar,\n Toaster as ReactHotToaster,\n} from 'react-hot-toast';\nimport CloseOutlinedIcon from '@material-ui/icons/CloseOutlined';\nimport { useMediaQuery } from 'react-responsive';\n\nexport const Toaster = () => {\n const isMobile = useMediaQuery({ query: '(max-width: 776px)' });\n\n return (\n <ReactHotToaster\n containerStyle={!isMobile ? { top: 60 } : { bottom: 80 }}\n position={isMobile ? 'bottom-center' : 'top-right'}\n >\n {t => (\n <ToastBar toast={t} style={{ padding: 0, borderRadius: 0 }}>\n {({ icon }) => (\n <>\n <span\n style={{\n width: 5,\n height: '100%',\n background: t.type === 'success' ? '#61d345' : 'transparent',\n marginRight: 7,\n }}\n />\n <span style={{ padding: 15, display: 'inline-flex' }}>\n {icon}\n <span\n style={{\n fontSize: 15,\n fontWeight: 300,\n margin: '0 10px',\n }}\n >\n {' '}\n {resolveValue(t.message, t)}\n </span>\n {t.type !== 'loading' && (\n <span style={{ display: 'flex', alignItems: 'center' }}>\n <CloseOutlinedIcon\n fontSize=\"small\"\n style={{ cursor: 'pointer', marginLeft: 10 }}\n onClick={() => toast.dismiss(t.id)}\n />\n </span>\n )}\n </span>\n </>\n )}\n </ToastBar>\n )}\n </ReactHotToaster>\n );\n};\n","// Some people are still using internet explorer\nimport 'react-app-polyfill/ie11';\nimport 'react-app-polyfill/stable';\nimport React, { Fragment } from 'react';\nimport ReactDOM from 'react-dom';\nimport * as serviceWorker from './serviceWorker';\nimport { Provider } from 'react-redux';\nimport { MuiThemeProvider } from '@material-ui/core';\nimport 'typeface-roboto';\nimport { HashRouter } from 'react-router-dom';\nimport Router from 'Router';\nimport { store } from 'Store/Store';\nimport 'react-responsive-carousel/lib/styles/carousel.min.css';\nimport { createTheme } from '@material-ui/core/styles';\nimport { Toaster } from 'components/Toaster';\n\ndocument.title = window.location.host;\n\nlet theme = createTheme({\n overrides: {\n MuiTooltip: {\n arrow: {\n color: 'black',\n },\n tooltip: {\n backgroundColor: 'black',\n },\n },\n },\n});\n\nReactDOM.render(\n <Fragment>\n <Toaster />\n <Provider store={store}>\n <MuiThemeProvider theme={theme}>\n <HashRouter>\n <Router />\n </HashRouter>\n </MuiThemeProvider>\n </Provider>\n </Fragment>,\n document.getElementById('root'),\n);\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister();\n"],"sourceRoot":""}
|