@nyris/nyris-webapp 0.3.4 → 0.3.9
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 +18 -32
- package/build/index.html +1 -1
- package/build/{precache-manifest.9800bdc87f5a2c5d6d8a5d1a5287598f.js → precache-manifest.a97813497ab8d37548141e5e2618d0dc.js} +13 -89
- package/build/service-worker.js +1 -1
- package/build/static/css/2.43a1c8b7.chunk.css +2 -0
- package/build/static/css/2.43a1c8b7.chunk.css.map +1 -0
- package/build/static/css/main.0481043c.chunk.css +2 -0
- package/build/static/css/main.0481043c.chunk.css.map +1 -0
- package/build/static/js/2.6e13adbe.chunk.js +3 -0
- package/build/static/js/2.6e13adbe.chunk.js.LICENSE.txt +79 -0
- package/build/static/js/2.6e13adbe.chunk.js.map +1 -0
- package/build/static/js/main.f5da7aa4.chunk.js +2 -0
- package/build/static/js/main.f5da7aa4.chunk.js.map +1 -0
- package/build/static/js/{runtime-main.b418ff16.js → runtime-main.f5553a9b.js} +1 -1
- package/build/static/js/{runtime-main.b418ff16.js.map → runtime-main.f5553a9b.js.map} +1 -1
- package/package.json +7 -30
- package/src/App.css +64 -20
- package/src/App.test.tsx +49 -0
- package/src/App.tsx +242 -17
- package/src/AppMD.tsx +320 -0
- package/src/actions/nyrisAppActions.ts +76 -0
- package/src/actions/searchActions.ts +217 -0
- package/src/components/ExampleImages.tsx +17 -32
- package/src/components/Feedback.tsx +48 -87
- package/src/components/FiltersList.tsx +67 -0
- package/src/components/Header.tsx +17 -32
- package/src/components/Result.tsx +113 -186
- package/src/components/Sidebar.tsx +42 -0
- package/src/defaults.ts +3 -4
- package/src/epics/feedback.ts +59 -0
- package/src/epics/index.ts +154 -0
- package/src/epics/search.ts +164 -0
- package/src/epics/types.ts +12 -0
- package/src/{common/assets/fonts → fonts}/roboto-bold-webfont.woff +0 -0
- package/src/{common/assets/fonts → fonts}/roboto-bold-webfont.woff2 +0 -0
- package/src/{common/assets/fonts → fonts}/roboto-italic-webfont.woff +0 -0
- package/src/{common/assets/fonts → fonts}/roboto-italic-webfont.woff2 +0 -0
- package/src/{common/assets/fonts → fonts}/roboto-regular-webfont.woff +0 -0
- package/src/{common/assets/fonts → fonts}/roboto-regular-webfont.woff2 +0 -0
- package/src/{common/assets/fonts → fonts}/robotocondensed-bold-webfont.woff +0 -0
- package/src/{common/assets/fonts → fonts}/robotocondensed-bold-webfont.woff2 +0 -0
- package/src/{common/assets/fonts → fonts}/robotocondensed-bolditalic-webfont.woff +0 -0
- package/src/{common/assets/fonts → fonts}/robotocondensed-bolditalic-webfont.woff2 +0 -0
- package/src/{common/assets/images → images}/fav/android-icon-192x192.png +0 -0
- package/src/{common/assets/images → images}/fav/apple-icon-114x114.png +0 -0
- package/src/{common/assets/images → images}/fav/apple-icon-120x120.png +0 -0
- package/src/{common/assets/images → images}/fav/apple-icon-144x144.png +0 -0
- package/src/{common/assets/images → images}/fav/apple-icon-152x152.png +0 -0
- package/src/{common/assets/images → images}/fav/apple-icon-180x180.png +0 -0
- package/src/{common/assets/images → images}/fav/apple-icon-57x57.png +0 -0
- package/src/{common/assets/images → images}/fav/apple-icon-60x60.png +0 -0
- package/src/{common/assets/images → images}/fav/apple-icon-72x72.png +0 -0
- package/src/{common/assets/images → images}/fav/apple-icon-76x76.png +0 -0
- package/src/{common/assets/images → images}/fav/browserconfig.xml +0 -0
- package/src/{common/assets/images → images}/fav/favicon-16x16.png +0 -0
- package/src/{common/assets/images → images}/fav/favicon-32x32.png +0 -0
- package/src/{common/assets/images → images}/fav/favicon-96x96.png +0 -0
- package/src/{common/assets/images → images}/fav/manifest.json +0 -0
- package/src/{common/assets/images → images}/ic_cam.png +0 -0
- package/src/{common/assets/images → images}/ic_cam.svg +0 -0
- package/src/{common/assets/images → images}/ic_cam_large.png +0 -0
- package/src/{common/assets/images → images}/ic_cam_large.svg +0 -0
- package/src/{common/assets/images → images}/ic_cam_large_noimage.png +0 -0
- package/src/{common/assets/images → images}/ic_close_feedback.png +0 -0
- package/src/{common/assets/images → images}/ic_close_feedback.svg +0 -0
- package/src/{common/assets/images → images}/ic_shopNow.png +0 -0
- package/src/{common/assets/images → images}/ic_shopNow.svg +0 -0
- package/src/{common/assets/images → images}/ic_shopNowLight.png +0 -0
- package/src/{common/assets/images → images}/ic_shopNowLight.svg +0 -0
- package/src/{common/assets/images → images}/nyris_logo.png +0 -0
- package/src/{common/assets/images → images}/rewe.svg +0 -0
- package/src/{common/assets/images → images}/sectionTransBack.png +0 -0
- package/src/{common/assets/images → images}/sectionTransBack.svg +0 -0
- package/src/{common/assets/images → images}/sectionTransTop.png +0 -0
- package/src/{common/assets/images → images}/sectionTransTop.svg +0 -0
- package/src/index.css +415 -572
- package/src/index.tsx +191 -39
- package/src/types.ts +3 -42
- package/tsconfig.json +8 -3
- package/build/js/settings.example.js +0 -31
- package/build/js/test.js +0 -56
- package/build/static/css/2.8285176a.chunk.css +0 -2
- package/build/static/css/2.8285176a.chunk.css.map +0 -1
- package/build/static/css/main.6676fe1f.chunk.css +0 -2
- package/build/static/css/main.6676fe1f.chunk.css.map +0 -1
- package/build/static/js/2.29ddd567.chunk.js +0 -3
- package/build/static/js/2.29ddd567.chunk.js.LICENSE.txt +0 -124
- package/build/static/js/2.29ddd567.chunk.js.map +0 -1
- package/build/static/js/main.c35ded37.chunk.js +0 -2
- package/build/static/js/main.c35ded37.chunk.js.map +0 -1
- package/build/static/media/Fill.37094b44.svg +0 -3
- package/build/static/media/Montserrat-Bold.5a052e98.otf +0 -0
- package/build/static/media/Montserrat-Light.21789e89.otf +0 -0
- package/build/static/media/Montserrat-Medium.a53e0373.otf +0 -0
- package/build/static/media/Montserrat-Regular.71cdc681.otf +0 -0
- package/build/static/media/Montserrat-SemiBold.f613d915.otf +0 -0
- package/build/static/media/Rectangle.4dd8b747.png +0 -0
- package/build/static/media/admin.9529c7f6.svg +0 -3
- package/build/static/media/bg-support-page.6ac55268.svg +0 -9
- package/build/static/media/book_mark.8e294c0b.svg +0 -3
- package/build/static/media/icon_dislike.94607ca6.svg +0 -3
- package/build/static/media/icon_like.a4fb1b18.svg +0 -3
- package/build/static/media/icon_modal_image.3068d0ea.svg +0 -21
- package/build/static/media/icon_search_image.c2c728c0.svg +0 -3
- package/build/static/media/nyris_logo.22d8f250.svg +0 -3
- package/build/static/media/reload_icon.4b579a74.svg +0 -3
- package/build/static/media/save_search.bebaeebf.svg +0 -3
- package/build/static/media/support.289c3a3c.svg +0 -3
- package/build/static/media/translate_icon.f0492297.svg +0 -3
- package/public/js/settings.example.js +0 -31
- package/public/js/test.js +0 -56
- package/src/Router.tsx +0 -97
- package/src/Store/Auth.ts +0 -44
- package/src/Store/Nyris.ts +0 -77
- package/src/Store/Search.ts +0 -270
- package/src/Store/Store.ts +0 -53
- package/src/Store/common.d.ts +0 -10
- package/src/common/assets/fonts/Montserrat_OTF/Montserrat-Bold.otf +0 -0
- package/src/common/assets/fonts/Montserrat_OTF/Montserrat-Light.otf +0 -0
- package/src/common/assets/fonts/Montserrat_OTF/Montserrat-Medium.otf +0 -0
- package/src/common/assets/fonts/Montserrat_OTF/Montserrat-Regular.otf +0 -0
- package/src/common/assets/fonts/Montserrat_OTF/Montserrat-SemiBold.otf +0 -0
- package/src/common/assets/icons/Fill.png +0 -0
- package/src/common/assets/icons/Fill.svg +0 -3
- package/src/common/assets/icons/Icon_wechat.png +0 -0
- package/src/common/assets/icons/Icon_whatsapp.png +0 -0
- package/src/common/assets/icons/admin.png +0 -0
- package/src/common/assets/icons/admin.svg +0 -3
- package/src/common/assets/icons/book_mark.png +0 -0
- package/src/common/assets/icons/book_mark.svg +0 -3
- package/src/common/assets/icons/icon_barcode.png +0 -0
- package/src/common/assets/icons/icon_camera.png +0 -0
- package/src/common/assets/icons/icon_dislike.svg +0 -3
- package/src/common/assets/icons/icon_disslike.png +0 -0
- package/src/common/assets/icons/icon_email.png +0 -0
- package/src/common/assets/icons/icon_like.png +0 -0
- package/src/common/assets/icons/icon_like.svg +0 -3
- package/src/common/assets/icons/icon_modal_image.png +0 -0
- package/src/common/assets/icons/icon_modal_image.svg +0 -21
- package/src/common/assets/icons/icon_picture.png +0 -0
- package/src/common/assets/icons/icon_search_image.png +0 -0
- package/src/common/assets/icons/icon_search_image.svg +0 -3
- package/src/common/assets/icons/nyris_logo.svg +0 -3
- package/src/common/assets/icons/reload_icon.png +0 -0
- package/src/common/assets/icons/reload_icon.svg +0 -3
- package/src/common/assets/icons/save_search.png +0 -0
- package/src/common/assets/icons/save_search.svg +0 -3
- package/src/common/assets/icons/setting_search_icon.png +0 -0
- package/src/common/assets/icons/support.png +0 -0
- package/src/common/assets/icons/support.svg +0 -3
- package/src/common/assets/icons/translate_icon.png +0 -0
- package/src/common/assets/icons/translate_icon.svg +0 -3
- package/src/common/assets/icons/view_off.png +0 -0
- package/src/common/assets/images/Rectangle.png +0 -0
- package/src/common/assets/images/bg-support-page.svg +0 -9
- package/src/common/assets/images/image_test.png +0 -0
- package/src/components/CustomHits/index.tsx +0 -57
- package/src/components/DetailItem.tsx +0 -175
- package/src/components/DragDropFile.tsx +0 -188
- package/src/components/FilterComponent.tsx +0 -33
- package/src/components/Footer.tsx +0 -29
- package/src/components/FooterMD.tsx +0 -54
- package/src/components/FooterNewVersion.tsx +0 -12
- package/src/components/FooterResult.tsx +0 -47
- package/src/components/HeaderMd.tsx +0 -38
- package/src/components/HeaderNewVersion.tsx +0 -92
- package/src/components/Layout.tsx +0 -46
- package/src/components/LoadingScreen/index.tsx +0 -29
- package/src/components/Navigation.tsx +0 -34
- package/src/components/Panigation/Pagination.tsx +0 -140
- package/src/components/Panigation/cx.js +0 -3
- package/src/components/Panigation/isModifierClick.js +0 -10
- package/src/components/Saved/AllItem.tsx +0 -32
- package/src/components/Saved/Category.tsx +0 -16
- package/src/components/carousel/DefaultCarousel.tsx +0 -48
- package/src/components/common.d.ts +0 -9
- package/src/components/common.scss +0 -54
- package/src/components/default-select.tsx +0 -44
- package/src/components/hitItem/hits.tsx +0 -50
- package/src/components/hitItem/infinitiHits.tsx +0 -33
- package/src/components/input/inputSearch.tsx +0 -77
- package/src/components/modal/DefaultModal.tsx +0 -28
- package/src/components/results/ItemResult.tsx +0 -155
- package/src/components/search/ListSearch.tsx +0 -209
- package/src/modules/LandingPage/App.tsx +0 -318
- package/src/modules/LandingPage/AppMD.tsx +0 -399
- package/src/modules/LandingPage/common.scss +0 -1304
- package/src/modules/LandingPage/index.tsx +0 -193
- package/src/modules/LandingPage/indexNewVersion.tsx +0 -110
- package/src/modules/LandingPage/propsType.ts +0 -43
- package/src/page/Auth/login.tsx +0 -7
- package/src/page/Exception/404.tsx +0 -11
- package/src/page/History/index.tsx +0 -76
- package/src/page/Profile/index.tsx +0 -87
- package/src/page/Saved/MockData.ts +0 -223
- package/src/page/Saved/index.tsx +0 -166
- package/src/page/Support/index.tsx +0 -160
- package/src/page/result/MockData.ts +0 -36
- package/src/page/result/index.tsx +0 -468
- package/src/services/Feedback.ts +0 -65
- package/src/services/findByImage.ts +0 -24
- package/src/services/findRegionsCustom.ts +0 -15
- package/src/services/image.ts +0 -107
- package/src/services/nyris.ts +0 -123
- package/src/services/session.ts +0 -20
- package/src/services/types.ts +0 -82
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
(this["webpackJsonp@nyris/nyris-webapp"]=this["webpackJsonp@nyris/nyris-webapp"]||[]).push([[0],{302:function(e,t,a){"use strict";var n=this&&this.__awaiter||function(e,t,a,n){return new(a||(a=Promise))((function(r,i){function c(e){try{s(n.next(e))}catch(t){i(t)}}function o(e){try{s(n.throw(e))}catch(t){i(t)}}function s(e){var t;e.done?r(e.value):(t=e.value,t instanceof a?t:new a((function(e){e(t)}))).then(c,o)}s((n=n.apply(e,t||[])).next())}))},r=this&&this.__generator||function(e,t){var a,n,r,i,c={label:0,sent:function(){if(1&r[0])throw r[1];return r[1]},trys:[],ops:[]};return i={next:o(0),throw:o(1),return:o(2)},"function"===typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function o(i){return function(o){return function(i){if(a)throw new TypeError("Generator is already executing.");for(;c;)try{if(a=1,n&&(r=2&i[0]?n.return:i[0]?n.throw||((r=n.return)&&r.call(n),0):n.next)&&!(r=r.call(n,i[1])).done)return r;switch(n=0,r&&(i=[2&i[0],r.value]),i[0]){case 0:case 1:r=i;break;case 4:return c.label++,{value:i[1],done:!1};case 5:c.label++,n=i[1],i=[0];continue;case 7:i=c.ops.pop(),c.trys.pop();continue;default:if(!(r=(r=c.trys).length>0&&r[r.length-1])&&(6===i[0]||2===i[0])){c=0;continue}if(3===i[0]&&(!r||i[1]>r[0]&&i[1]<r[3])){c.label=i[1];break}if(6===i[0]&&c.label<r[1]){c.label=r[1],r=i;break}if(r&&c.label<r[2]){c.label=r[2],c.ops.push(i);break}r[2]&&c.ops.pop(),c.trys.pop();continue}i=t.call(e,c)}catch(o){i=[6,o],n=0}finally{a=r=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,o])}}},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var c=i(a(608));function o(e,t){return{x1:e.x1*t.w,x2:e.x2*t.w,y1:e.y1*t.h,y2:e.y2*t.h}}function s(e){return{w:e.x2-e.x1,h:e.y2-e.y1}}function l(e){var t=e,a=e;return{w:t.naturalWidth||a.videoWidth||e.width,h:t.naturalHeight||a.videoHeight||e.height}}t.selectFirstCenteredRegion=function(e,t,a){var n=e.filter((function(e){return function(e,t){var a=e[0],n=e[1],r=t[0],i=t[1];return Math.sqrt(Math.pow(a-r,2)+Math.pow(n-i,2))}([.5,.5],function(e){var t=e.x1,a=e.x2,n=e.y1;return[(a-t)/2+t,(e.y2-n)/2+n]}(e.normalizedRect))<t}));return 0===n.length?a:n[0].normalizedRect},t.getUrlParam=function(e){var t=new RegExp("[?&]"+e+"(=([^&#]*))?(&|$|#)","i").exec(window.location.href);return t&&t[2]?(console.log("has value",e,t[2]),decodeURIComponent(t[2])):!!t||void 0},t.getThumbSizeArea=function(e,t,a){var n=e*t,r=Math.sqrt(n*a);return{w:r,h:r/a}},t.getThumbSizeLongestEdge=function(e,t,a,n){return e/t>a/n?{w:a*t/n,h:t}:{w:e,h:n*e/a}},t.scaleRect=o,t.getRectSize=s,t.getRectAspectRatio=function(e,t){var a=s(o(e,t));return a.w/a.h},t.getElementSize=l,t.elementToCanvas=function(e,t,a){var n=l(e),r=n.w,i=n.h,c=a||{x1:0,x2:1,y1:0,y2:1},o=c.x1,s=c.x2,u=c.y1,p=r*o,m=r*(s-o),d=i*u,f=i*(c.y2-u),h=t&&t.w||r,g=t&&t.h||i,E=document.createElement("canvas");E.width=h,E.height=g;var b=E.getContext("2d");if(!b)throw Error("Error converting element to canvas: Can not get 2d context");return b.fillStyle="rgb(255, 255,255)",b.fillRect(0,0,h,g),b.drawImage(e,p,d,m,f,0,0,h,g),E},t.urlOrBlobToCanvas=function(e){return new Promise((function(t,a){c.default(e,(function(e){e?t(e):a()}),{canvas:!0,orientation:!0,crossOrigin:"anonymous"})}))},t.canvasToJpgBlob=function(e,t){return new Promise((function(a,n){e.toBlob((function(e){e?a(e):n()}),"image/jpeg",t)}))},t.cadExtensions=[".stp",".step",".stl",".obj",".glb",".gltf"],t.isCadFile=function(e){return t.cadExtensions.some((function(t){return e.name.endsWith(t)}))},t.isImageFile=function(e){return e.type.startsWith("image/")},t.timePromise=function(e){return n(this,void 0,void 0,(function(){var t,a,n;return r(this,(function(r){switch(r.label){case 0:return t=Date.now(),[4,e];case 1:return a=r.sent(),n=Date.now(),[2,{res:a,durationSeconds:(n-t)/1e3}]}}))}))}},336:function(e,t,a){e.exports=a(635)},43:function(e,t,a){"use strict";var n=this&&this.__assign||function(){return(n=Object.assign||function(e){for(var t,a=1,n=arguments.length;a<n;a++)for(var r in t=arguments[a])Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r]);return e}).apply(this,arguments)},r=this&&this.__awaiter||function(e,t,a,n){return new(a||(a=Promise))((function(r,i){function c(e){try{s(n.next(e))}catch(t){i(t)}}function o(e){try{s(n.throw(e))}catch(t){i(t)}}function s(e){var t;e.done?r(e.value):(t=e.value,t instanceof a?t:new a((function(e){e(t)}))).then(c,o)}s((n=n.apply(e,t||[])).next())}))},i=this&&this.__generator||function(e,t){var a,n,r,i,c={label:0,sent:function(){if(1&r[0])throw r[1];return r[1]},trys:[],ops:[]};return i={next:o(0),throw:o(1),return:o(2)},"function"===typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function o(i){return function(o){return function(i){if(a)throw new TypeError("Generator is already executing.");for(;c;)try{if(a=1,n&&(r=2&i[0]?n.return:i[0]?n.throw||((r=n.return)&&r.call(n),0):n.next)&&!(r=r.call(n,i[1])).done)return r;switch(n=0,r&&(i=[2&i[0],r.value]),i[0]){case 0:case 1:r=i;break;case 4:return c.label++,{value:i[1],done:!1};case 5:c.label++,n=i[1],i=[0];continue;case 7:i=c.ops.pop(),c.trys.pop();continue;default:if(!(r=(r=c.trys).length>0&&r[r.length-1])&&(6===i[0]||2===i[0])){c=0;continue}if(3===i[0]&&(!r||i[1]>r[0]&&i[1]<r[3])){c.label=i[1];break}if(6===i[0]&&c.label<r[1]){c.label=r[1],r=i;break}if(r&&c.label<r[2]){c.label=r[2],c.ops.push(i);break}r[2]&&c.ops.pop(),c.trys.pop();continue}i=t.call(e,c)}catch(o){i=[6,o],n=0}finally{a=r=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,o])}}};var c=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),a(607);var o=a(302),s=c(a(613));!function(e){for(var a in e)t.hasOwnProperty(a)||(t[a]=e[a])}(a(302));var l=function(){function e(e){if(this.httpClient=s.default.create(),!e.apiKey)throw new Error("The api-key is not set.");this.apiKey=e.apiKey;var t=e.baseUrl||"https://api.nyris.io";this.imageMatchingUrl=t+"/find/v1",this.imageMatchingUrlWithFilters=t+"/find/v2",this.cadMatchingUrl=t+"/cad/find/v0.1",this.imageMatchingUrlBySku=t+"/recommend/v1/",this.imageMatchingSubmitManualUrl=t+"/find/v1/manual/",this.feedbackUrl=t+"/feedback/v1/",this.regionProposalUrl=t+"/find/v1/regions/",this.findFilters=t+"/find/v1/filters",this.responseFormat=e.responseFormat||"application/offers.complete+json",this.maxHeight=e.maxHeight||500,this.maxWidth=e.maxWidth||500,this.jpegQuality=e.jpegQuality||.92,this.customSearchRequest=e.customSearchRequest,this.responseHook=e.responseHook,this.xOptions=e.xOptions}return e.prototype.prepareImage=function(e,t){return r(this,void 0,void 0,(function(){var a,n,r,c,s;return i(this,(function(i){switch(i.label){case 0:return a=t||{x1:0,x2:1,y1:0,y2:1},n=o.getElementSize(e),r=o.getRectAspectRatio(a,n),c=o.getThumbSizeArea(this.maxWidth,this.maxHeight,r),s=o.elementToCanvas(e,c,a),[4,o.canvasToJpgBlob(s,this.jpegQuality)];case 1:return[2,i.sent()]}}))}))},e.prototype.getSearchRequestHeaders=function(e){var t={"X-Api-Key":this.apiKey,"Accept-Language":"de,*;q=0.5",Accept:this.responseFormat,"Content-Type":e||"application/octet-stream"},a=[];return this.xOptions&&a.push(this.xOptions),a.length>0&&(t["X-Options"]=a.join(" ")),t},e.prototype.getRegionRequestHeaders=function(e){var t={"X-Api-Key":this.apiKey,"Content-Type":e||"application/octet-stream"},a=[];return this.xOptions&&a.push(this.xOptions),a.length>0&&(t["X-Options"]=a.join(" ")),t},e.prototype.getParams=function(e){return e.geoLocation?{lat:e.geoLocation.lat.toString(),lon:e.geoLocation.lon.toString(),dist:e.geoLocation.dist.toString()}:{}},e.prototype.parseCategoryPredictions=function(e){return Object.entries(e||{}).map((function(e){return{name:e[0],score:e[1]}})).sort((function(e,t){return t.score-e.score}))},e.prototype.parseSearchResult=function(e,t){var a=this.parseCategoryPredictions(e.data.predicted_category),r=e.data.barcodes||[],i=this.responseHook?this.responseHook(e.data):e.data,c="offerInfos"in i?i.offerInfos.map((function(e,t){return console.log(e),n(n({},e),{position:t})})):i.results.map((function(e,t){return console.log(e),{position:t,sku:e.sku,title:e.title,img:e.images&&e.images[0]?{url:e.images[0]}:void 0,l:e.links?e.links.main:void 0,p:e.price?{vi:100*parseFloat(e.price),c:e.price.split(" ")[1]}:void 0}}));return console.log(c),{results:c,requestId:e.headers["x-matching-request"],duration:"durationSeconds"in e.data?e.data.durationSeconds:t,categoryPredictions:a,codes:r}},e.prototype.findByCad=function(e,t){return r(this,void 0,void 0,(function(){var a,n,r,c,s,l;return i(this,(function(i){switch(i.label){case 0:return a=e.type,n=this.getSearchRequestHeaders(a),r=this.getParams(t),[4,o.timePromise(this.httpClient.request({method:"POST",url:this.cadMatchingUrl,data:e,params:r,headers:n,responseType:"json"}))];case 1:return c=i.sent(),s=c.res,l=c.durationSeconds,[2,this.parseSearchResult(s,l)]}}))}))},e.prototype.findByImage=function(e,t){return r(this,void 0,void 0,(function(){var a,n,r,c,s,l,u;return i(this,(function(i){switch(i.label){case 0:return[4,this.prepareImage(e,t.cropRect)];case 1:return a=i.sent(),this.customSearchRequest?[2,this.customSearchRequest(a,this.httpClient)]:(n=this.getSearchRequestHeaders("image/jpeg"),r=this.getParams(t),(c=new FormData).append("image",a),[4,o.timePromise(this.httpClient.request({method:"POST",url:this.imageMatchingUrlWithFilters,data:c,params:r,headers:n,responseType:"json"}))]);case 2:return s=i.sent(),l=s.res,u=s.durationSeconds,[2,this.parseSearchResult(l,u)]}}))}))},e.prototype.findByImageWithFilters=function(e,t,a){return r(this,void 0,void 0,(function(){var n,r,c,s,l,u,p,m,d,f;return i(this,(function(i){switch(i.label){case 0:return[4,this.prepareImage(e,t.cropRect)];case 1:if(n=i.sent(),this.customSearchRequest)return[2,this.customSearchRequest(n,this.httpClient)];if(r=this.getSearchRequestHeaders("image/jpeg"),c=this.getParams(t),s=new Array,a&&a.forEach((function(e){s.push({key:e.key,values:e.values})})),console.log(s),(l=new FormData).append("image",n),a)for(u=0;u<s.length;u++)for(l.append("filters["+u+"].filterType",s[u].key),p=0;p<s[u].values.length;p++)l.append("filters["+u+"].filterValues["+p+"]",s[u].values[p]);return[4,o.timePromise(this.httpClient.request({method:"POST",url:this.imageMatchingUrlWithFilters,data:l,params:c,headers:r,responseType:"json"}))];case 2:return m=i.sent(),d=m.res,f=m.durationSeconds,[2,this.parseSearchResult(d,f)]}}))}))},e.prototype.findBySku=function(e,t){return r(this,void 0,void 0,(function(){var a,n,r;return i(this,(function(i){switch(i.label){case 0:return a=this.getSearchRequestHeaders(),n=""+this.imageMatchingUrlBySku+encodeURIComponent(e)+"/"+encodeURIComponent(t),[4,this.httpClient.get(n,{headers:a,responseType:"json"})];case 1:return r=i.sent(),this.responseHook&&(r=this.responseHook),[2,r]}}))}))},e.prototype.findRegions=function(e){return r(this,void 0,void 0,(function(){var t,a,n,r,c,s,l,u;return i(this,(function(i){switch(i.label){case 0:return t=o.getElementSize(e),a=t.w,n=t.h,r=o.getThumbSizeArea(this.maxWidth,this.maxHeight,a/n),c=o.elementToCanvas(e,r),[4,o.canvasToJpgBlob(c,this.jpegQuality)];case 1:return s=i.sent(),l=this.getRegionRequestHeaders("image/jpeg"),[4,this.httpClient.request({method:"POST",url:this.regionProposalUrl,data:s,headers:l})];case 2:return u=i.sent(),[2,u.data.map((function(e){return{className:e.className,confidence:e.confidence,normalizedRect:{x1:e.region.left/r.w,x2:e.region.right/r.w,y1:e.region.top/r.h,y2:e.region.bottom/r.h}}}))]}}))}))},e.prototype.sendFeedback=function(e,t,a){return r(this,void 0,void 0,(function(){var r,c;return i(this,(function(i){switch(i.label){case 0:return r={"X-Api-Key":this.apiKey,"Content-Type":"application/json"},c=n({request_id:t,timestamp:new Date,session_id:e},a),[4,this.httpClient.request({method:"POST",url:this.feedbackUrl,headers:r,data:c})];case 1:return i.sent(),[2]}}))}))},e.prototype.getFilters=function(){return r(this,void 0,void 0,(function(){var e,t,a;return i(this,(function(n){switch(n.label){case 0:return e=this.getSearchRequestHeaders(),t=""+this.findFilters,[4,this.httpClient.get(t,{headers:e,responseType:"json"})];case 1:return 200==(a=n.sent()).status?(console.log(a.data),a.data.forEach((function(e){"CategoryNo"==e.key&&e.values.unshift("00136")})),[2,a.data]):(console.log("error in fetching filters"),[2,a.data])}}))}))},e}();t.default=l},532:function(e,t,a){},635:function(e,t,a){"use strict";a.r(t);var n=a(6),r=(a(337),a(346),a(0)),i=a.n(r),c=a(49),o=a.n(c),s=(a(532),a(169)),l=a(659),u=a(637),p=a(661),m=a(662),d=a(663),f=a(664),h=a(665),g=a(687),E=a(667),b=a(669),y=a(670),v=a(671),O=a(672),S=a(673),k=a(674),C=a(676),w=a(666),x=a(668),j=a(677),R=a(675),I=a(87),_=a(76),T=a.n(_),A=a(97),N=a(43),F=a.n(N),D=Object(l.a)((function(e){return{icon:{marginRight:e.spacing(2)},heroContent:{backgroundColor:e.palette.background.paper,padding:e.spacing(8,0,6),transition:"all 300ms",overflow:"hidden",height:500},heroContentClosed:{height:0,padding:0},heroButtons:{marginTop:e.spacing(4)},cardGrid:{paddingTop:e.spacing(8),paddingBottom:e.spacing(8),minHeight:600,overflow:"hidden",transition:"all 300ms"},cardGridCollapsed:{height:0,opacity:0,minHeight:0,paddingTop:0,paddingBottom:0},card:{height:"100%",display:"flex",flexDirection:"column"},cardMedia:{paddingTop:"56.25%",backgroundSize:"contain"},cardContent:{flexGrow:1,paddingBottom:0},footer:{backgroundColor:e.palette.background.paper,padding:e.spacing(6)},withElipsis:{textOverflow:"ellipsis",overflow:"hidden",whiteSpace:"nowrap"},loading:{margin:e.spacing(2)},fabContainer:{position:"fixed",bottom:e.spacing(2)},fab:{marginLeft:e.spacing(2)}}})),L=function(e){return function(t){var a=t.dataTransfer&&t.dataTransfer.files[0]||t.target.files[0];t.target&&t.target.value&&(t.target.value=""),a&&e(a)}};function U(){return r.createElement(u.a,{variant:"body2",color:"textSecondary",align:"center"},"Powered by ",r.createElement(p.a,{color:"inherit",href:"https://nyris.io/",component:"a",target:"_blank"},"nyris.io"))}var H=function(e){var t=e.settings,a=e.handlers,n=e.showPart,i=e.previewImage,c=e.loading,o=e.search,l=o.results,p=o.regions,_=o.previewSelection,F=o.requestId,H=(o.duration,e.mdSettings),P=D(),M=Object(s.a)({onDrop:function(e){return a.onFileDropped(e[0])}}),W=M.getRootProps,q=M.getInputProps,B=M.isDragActive,G=Math.floor(.45*window.innerHeight),Q=Math.max(400,G),K=["image/*"].concat(t.cadSearch?N.cadExtensions:[]).join(",");return r.createElement(r.Fragment,null,H.resultLinkIcon&&r.createElement("link",{rel:"stylesheet",href:"https://fonts.googleapis.com/icon?family=Material+Icons"}),r.createElement(m.a,null),"camera"===n&&r.createElement(A.Capture,{onCaptureComplete:a.onCaptureComplete,onCaptureCanceled:a.onCaptureCanceled,useAppText:"Use default camera app"}),r.createElement(d.a,{position:"relative",style:{backgroundColor:H.appBarCustomBackgroundColor}},r.createElement(f.a,{maxWidth:"md",style:{flexDirection:"row",display:"flex"}},r.createElement("img",{src:H.appBarLogoUrl,style:{height:"2em",minHeight:"64px",display:"flex"},alt:"Logo"}),r.createElement(h.a,{component:"span"},r.createElement(u.a,{style:{color:H.appBarCustomTextColor}},H.appBarTitle)))),r.createElement("main",null,r.createElement("div",{className:T()(P.heroContent,"results"===n?P.heroContentClosed:null)},r.createElement(f.a,{maxWidth:"md"},r.createElement("div",null,r.createElement(g.a,{mdUp:!0},r.createElement("div",{style:{textAlign:"center"}},r.createElement(w.a,{style:{fontSize:"20em",color:"#cccccc"}})),r.createElement("div",{style:{textAlign:"center"}},r.createElement(E.a,{variant:"contained",color:"primary",onClick:a.onCameraClick},"Take a picture")),r.createElement("div",{style:{textAlign:"center"}},r.createElement(u.a,null,"or")),r.createElement("div",{style:{textAlign:"center"}},r.createElement("input",{accept:K,id:"raised-button-file",type:"file",onChange:L(a.onSelectFile),style:{width:".1px",height:".1px",overflow:"hidden",opacity:0}}),r.createElement("label",{htmlFor:"raised-button-file"},r.createElement(E.a,{variant:"contained",color:"primary",component:"span"},"Select a file")))),r.createElement(g.a,{smDown:!0},r.createElement("div",Object.assign({style:{borderStyle:"dashed",borderWidth:5,borderColor:B?"#ccc":"#eee",borderRadius:10,padding:10,paddingBottom:30}},W({onClick:function(e){e.stopPropagation()}})),r.createElement("div",{style:{textAlign:"center"}},r.createElement(x.a,{style:{fontSize:"20em",color:"#cccccc"}})),r.createElement("div",{style:{textAlign:"center"}},r.createElement(u.a,{variant:"body2"},"DROP AN IMAGE")),r.createElement("div",{style:{textAlign:"center"}},r.createElement(u.a,{variant:"subtitle2"},"or")),r.createElement("div",{style:{textAlign:"center"}},r.createElement("input",Object.assign({accept:K,id:"raised-button-file",type:"file"},q(),{onChange:L(a.onSelectFile),style:{width:".1px",height:".1px",overflow:"hidden",opacity:0}})),r.createElement("label",{htmlFor:"raised-button-file"},r.createElement(E.a,{variant:"contained",color:"primary",component:"span"},"Select an image")))))))),r.createElement(f.a,{className:T()(P.cardGrid,"results"!==n&&P.cardGridCollapsed),maxWidth:"md"},i&&r.createElement(b.a,{style:{marginBottom:"4em"},raised:!0},r.createElement(A.Preview,{key:i.id,maxWidth:document.body.clientWidth,maxHeight:Q,dotColor:H.primaryColor,onSelectionChange:a.onSelectionChange,regions:p,selection:_,image:i.canvas})),c&&r.createElement("div",{style:{textAlign:"center"}},r.createElement(y.a,{className:P.loading})),r.createElement(v.a,{container:!0,spacing:4},r.createElement(I.NodeGroup,{data:l,keyAccessor:function(e){return e.position+e.sku},start:function(e,t){return{opacity:0,translateX:-100}},enter:function(e,t){return{opacity:[1],translateX:[0],timing:{delay:100*t,duration:300}}}},(function(e){return r.createElement(r.Fragment,null,e.map((function(e){var n=e.key,i=e.data,c=e.state;return r.createElement(v.a,{item:!0,key:n,xs:12,sm:4,md:3},r.createElement(b.a,{className:P.card,style:{opacity:c.opacity,position:"relative",transform:"translateX(".concat(c.translateX,"%)")}},r.createElement(O.a,{className:P.cardMedia,image:i.img&&i.img.url||t.noImageUrl,title:i.title}),r.createElement(S.a,{className:P.cardContent},r.createElement(u.a,{gutterBottom:!0,variant:"subtitle2",component:"h5",className:P.withElipsis},i[H.resultFirstRowProperty]),r.createElement(u.a,{variant:"body2",className:P.withElipsis},i[H.resultSecondRowProperty])),i.l&&r.createElement(k.a,null,r.createElement(E.a,{variant:"outlined",style:{marginLeft:"auto"},size:"small",color:"primary",onClick:function(){return a.onLinkClick(i.position,i.l)},onAuxClick:function(){return a.onLinkClick(i.position,i.l)}},H.resultLinkIcon&&r.createElement(r.Fragment,null,r.createElement(R.a,null,H.resultLinkIcon)," "),H.resultLinkText))))})))}))),0===l.length&&"results"===n&&!c&&r.createElement(u.a,{variant:"h3",align:"center"},"We did not find anything")),"start"!==n&&r.createElement(f.a,{maxWidth:"lg"},r.createElement("div",{className:P.fabContainer},r.createElement(C.a,{"aria-label":"back",className:P.fab,color:"primary",onClick:a.onShowStart},r.createElement(j.a,null))))),r.createElement("footer",{className:P.footer},r.createElement(u.a,{variant:"subtitle1",align:"center",color:"textSecondary"},F&&"results"===n&&r.createElement("div",{style:{textAlign:"center",fontSize:"0.7em",paddingTop:"0.8em"}},"Request identifier ",F)),r.createElement(U,null)))};Boolean("localhost"===window.location.hostname||"[::1]"===window.location.hostname||window.location.hostname.match(/^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/));var P=a(96),M=a(89),W={results:[],regions:[],selectedRegion:{x1:.1,x2:.9,y1:.1,y2:.9},requestImage:void 0,fetchingResults:!1,fetchingRegions:!1,filterOptions:[],categoryPredictions:[],codes:[],errorMessage:"",filters:[],selectedFilters:new Map},q=function(e){return{type:"LOAD_FILE",file:e}},B=function(e){return{type:"LOAD_IMAGE",url:e}},G=function(e){return{type:"LOAD_IMAGE",image:e}},Q=function(e,t){return{type:"IMAGE_LOADED",image:{canvas:e,id:t}}},K=function(e,t){return{type:"CAD_LOADED",file:e}},z=function(e){return{type:"REGION_CHANGED",normalizedRect:e}},V=function(e){return{type:"REGION_REQUEST_START",image:e}},X=function(e,t,a){return{type:"SEARCH_REQUEST_START",image:e,normalizedRect:t,selectedFilters:a}},J=function(e){return{type:"SEARCH_REQUEST_START",file:e}},Y=function(){return{type:"FEEDBACK_SUBMIT_POSITIVE"}},$=function(){return{type:"FEEDBACK_SUBMIT_NEGATIVE"}};function Z(e,t,a){if(e){var n=e.get(t);n?n.push(a):n=new Array(a),e.set(t,n)}return console.log(e),e}function ee(e,t,a){if(e){var n=e.get(t);n&&(n=n.filter((function(e){return e!==a})),e.set(t,n))}return console.log(e),e}var te=function(){return{type:"SHOW_CAMERA"}},ae=function(){return{type:"SHOW_START"}},ne=function(){return{type:"SHOW_RESULTS"}},re=function(){return{type:"SHOW_FEEDBACK"}},ie=function(){return{type:"HIDE_FEEDBACK"}},ce={showPart:"start",feedbackState:"hidden"};function oe(e){var t=new RegExp("[?&]".concat(e,"(=([^&#]*))?(&|$|#)"),"i").exec(window.location.href);return t&&t[2]?(console.log("has value",e,t[2]),decodeURIComponent(t[2])):!!t||void 0}var se=a(319),le=a(683),ue=a(322),pe=a(682),me=(a(634),{appBarLogoUrl:"images/nyris-logo.svg",appBarCustomBackgroundColor:"#f4f4f4",appBarCustomTextColor:"#ccc",appBarTitle:"",primaryColor:"#e2001a",secondaryColor:"#777777",resultFirstRowProperty:"title",resultSecondRowProperty:"sku",resultLinkText:"Info",customFontFamily:"Helvetica"}),de=a(20),fe=a.n(de),he=a(44),ge=a(34),Ee=a(324),be=a(688),ye=a(678),ve=a(689),Oe=a(679),Se=a(166),ke=a(690),Ce=a(681),we=a(680),xe=Object(be.a)((function(e,t,a){var n=a.api;return e.pipe(Object(Ee.a)("FEEDBACK_SUBMIT_POSITIVE","FEEDBACK_SUBMIT_NEGATIVE"),Object(ye.a)(t),Object(ve.a)(function(){var e=Object(he.a)(fe.a.mark((function e(t){var a,r,i,c,o;return fe.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(a=Object(ge.a)(t,2),r=a[0].type,i=a[1],c="FEEDBACK_SUBMIT_POSITIVE"===r,!(o=i.search.sessionId||i.search.requestId)||!i.search.requestId){e.next=6;break}return e.next=6,n.sendFeedback(o,i.search.requestId,{event:"feedback",data:{success:c}});case 6:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}()),Object(Oe.a)())}),(function(e,t,a){var n=a.api;return e.pipe(Object(Ee.a)("REGION_CHANGED"),Object(we.a)(1200),Object(ye.a)(t),Object(ve.a)(function(){var e=Object(he.a)(fe.a.mark((function e(t){var a,r,i,c,o,s,l,u,p;return fe.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(a=Object(ge.a)(t,2),r=a[0],i=a[1],"REGION_CHANGED"!==r.type){e.next=7;break}if(c=r.normalizedRect,o=c.x1,s=c.x2,l=c.y1,u=c.y2,!(p=i.search.sessionId||i.search.requestId)||!i.search.requestId){e.next=7;break}return e.next=7,n.sendFeedback(p,i.search.requestId,{event:"region",data:{rect:{x:o,y:l,w:s-o,h:u-l}}});case 7:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}()),Object(Oe.a)())}),(function(e,t,a){var n=a.api;return e.pipe(Object(Ee.a)("RESULT_LINK_CLICKED","RESULT_IMAGE_CLICKED"),Object(ye.a)(t),Object(ve.a)(function(){var e=Object(he.a)(fe.a.mark((function e(t){var a,r,i,c,o;return fe.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(a=Object(ge.a)(t,2),r=a[0],i=a[1],"RESULT_LINK_CLICKED"!==r.type&&"RESULT_IMAGE_CLICKED"!==r.type){e.next=7;break}if(c=r.position,!(o=i.search.sessionId||i.search.requestId)||!i.search.requestId){e.next=7;break}return e.next=7,n.sendFeedback(o,i.search.requestId,{event:"click",data:{positions:[c]}});case 7:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}()),Object(Oe.a)())})),je=Object(be.a)((function(e,t,a){var n=a.api;return e.pipe(Object(Ee.a)("SEARCH_REQUEST_START"),Object(ye.a)(t),Object(Ce.a)(function(){var e=Object(he.a)(fe.a.mark((function e(t){var a,r,i,c,o,s,l,u,p,m,d,f,h,g,E,b,y,v,O,S,k,C,w,x,j,R,I;return fe.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(a=Object(ge.a)(t,2),r=a[0],i=a[1],"SEARCH_REQUEST_START"===r.type){e.next=3;break}throw new Error("Wrong action type ".concat(r.type));case 3:if(console.log("state search "),console.log(i.search.selectedFilters),!("image"in r)){e.next=41;break}if(c=r.image,o=r.normalizedRect,console.log("Selected Filters"),s=new Array,i.search.selectedFilters.size>0&&i.search.selectedFilters.forEach((function(e,t){var a={key:t,values:e};s.push(a)})),l={cropRect:o},e.prev=11,!(s&&s.length>0)){e.next=25;break}return console.log("With Filters"),e.next=16,n.findByImageWithFilters(c,l,s);case 16:return u=e.sent,p=u.results,m=u.duration,d=u.requestId,f=u.categoryPredictions,h=u.codes,e.abrupt("return",{type:"SEARCH_REQUEST_SUCCEED",results:p,requestId:d,duration:m,categoryPredictions:f,codes:h});case 25:return console.log("Without Filters"),e.next=28,n.findByImage(c,l);case 28:return g=e.sent,E=g.results,b=g.duration,y=g.requestId,v=g.categoryPredictions,O=g.codes,e.abrupt("return",{type:"SEARCH_REQUEST_SUCCEED",results:E,requestId:y,duration:b,categoryPredictions:v,codes:O});case 35:e.next=41;break;case 37:return e.prev=37,e.t0=e.catch(11),console.warn("search failed",e.t0),e.abrupt("return",{type:"SEARCH_REQUEST_FAIL",reason:e.t0.message,exception:e.t0});case 41:if(!("file"in r)){e.next=61;break}return console.log("file"),S=r.file,k={},e.prev=45,e.next=48,n.findByCad(S,k);case 48:return C=e.sent,w=C.results,x=C.duration,j=C.requestId,R=C.categoryPredictions,I=C.codes,e.abrupt("return",{type:"SEARCH_REQUEST_SUCCEED",results:w,requestId:j,duration:x,categoryPredictions:R,codes:I});case 57:return e.prev=57,e.t1=e.catch(45),console.warn("search failed",e.t1),e.abrupt("return",{type:"SEARCH_REQUEST_FAIL",reason:e.t1.message,exception:e.t1});case 61:throw new Error("Wrong action content ".concat(r));case 62:case"end":return e.stop()}}),e,null,[[11,37],[45,57]])})));return function(t){return e.apply(this,arguments)}}()))}),(function(e,t,a){var n=a.api;return e.pipe(Object(Ee.a)("REGION_REQUEST_START"),Object(ye.a)(t),Object(Ce.a)(function(){var e=Object(he.a)(fe.a.mark((function e(t){var a,r,i,c;return fe.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(a=Object(ge.a)(t,2),r=a[0],a[1].settings,"REGION_REQUEST_START"===r.type){e.next=3;break}throw new Error("Wrong action type ".concat(r.type));case 3:return i=r.image,e.prev=4,e.next=7,n.findRegions(i);case 7:return c=e.sent,e.abrupt("return",{type:"REGION_REQUEST_SUCCEED",regions:c});case 11:return e.prev=11,e.t0=e.catch(4),console.error(e.t0),e.abrupt("return",{type:"REGION_REQUEST_FAIL",reason:e.t0.message,exception:e.t0});case 15:case"end":return e.stop()}}),e,null,[[4,11]])})));return function(t){return e.apply(this,arguments)}}()))}),(function(e){return e.pipe(Object(Ee.a)("LOAD_FILE"),Object(Ce.a)(function(){var e=Object(he.a)(fe.a.mark((function e(t){var a,n;return fe.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if("LOAD_FILE"===t.type){e.next=2;break}throw new Error("Wrong action type ".concat(t.type));case 2:if(a=Math.random().toString(),!("file"in t)){e.next=14;break}if(n=t.file,!Object(N.isImageFile)(n)){e.next=12;break}return e.t0=Q,e.next=9,Object(N.urlOrBlobToCanvas)(n);case 9:return e.t1=e.sent,e.t2=a,e.abrupt("return",(0,e.t0)(e.t1,e.t2));case 12:if(!Object(N.isCadFile)(n)){e.next=14;break}return e.abrupt("return",K(n));case 14:throw new Error("LOAD_FILE action wrong properties ".concat(Object.keys(t).join(",")));case 15:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}()))}),(function(e){return e.pipe(Object(Ee.a)("LOAD_IMAGE"),Object(Ce.a)(function(){var e=Object(he.a)(fe.a.mark((function e(t){var a;return fe.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if("LOAD_IMAGE"===t.type){e.next=2;break}throw new Error("Wrong action type ".concat(t.type));case 2:if(a=Math.random().toString(),!("url"in t)){e.next=10;break}return e.t0=Q,e.next=7,Object(N.urlOrBlobToCanvas)(t.url);case 7:return e.t1=e.sent,e.t2=a,e.abrupt("return",(0,e.t0)(e.t1,e.t2));case 10:if(!("file"in t)){e.next=17;break}return e.t3=Q,e.next=14,Object(N.urlOrBlobToCanvas)(t.file);case 14:return e.t4=e.sent,e.t5=a,e.abrupt("return",(0,e.t3)(e.t4,e.t5));case 17:if(!("image"in t)){e.next=19;break}return e.abrupt("return",Q(t.image,a));case 19:throw new Error("LOAD_IMAGE action wrong properties ".concat(Object.keys(t).join(",")));case 20:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}()))}),(function(e,t,a){var n=a.api;return e.pipe(Object(Ee.a)("LOAD_FILTERS"),Object(ye.a)(t),Object(Ce.a)(function(){var e=Object(he.a)(fe.a.mark((function e(t){var a,r,i;return fe.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(a=Object(ge.a)(t,2),r=a[0],a[1],"LOAD_FILTERS"===r.type){e.next=3;break}throw new Error("Wrong action type ".concat(r.type));case 3:return e.prev=3,e.next=6,n.getFilters();case 6:return i=(i=e.sent).slice(0,3),console.log(i),e.abrupt("return",{type:"LOAD_FILTERS_SUCCESS",filters:i});case 12:return e.prev=12,e.t0=e.catch(3),console.error(e.t0),e.abrupt("return",{type:"LOAD_FILTERS_FAIL",reason:e.t0.message,exception:e.t0});case 16:case"end":return e.stop()}}),e,null,[[3,12]])})));return function(t){return e.apply(this,arguments)}}()))})),Re=Object(be.a)(je,xe,(function(e,t,a){var n=a.history;return e.pipe(Object(Ee.a)("SHOW_RESULTS","SHOW_START"),Object(ye.a)(t),Object(ve.a)((function(e){var t=Object(ge.a)(e,2),a=t[0],r=t[1],i=a.type;console.log("action"),console.log(r.search.selectedFilters),"SHOW_RESULTS"===i&&"/results"!==n.location.pathname&&n.push("/results"),"SHOW_START"===i&&"/"!==n.location.pathname&&n.goBack()})),Object(Oe.a)())}),(function(e,t){return e.pipe(Object(Ee.a)("IMAGE_LOADED"),Object(ye.a)(t),Object(Ce.a)(function(){var e=Object(he.a)(fe.a.mark((function e(t){var a,n,r,i;return fe.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(a=Object(ge.a)(t,2),n=a[0],r=a[1].settings,"IMAGE_LOADED"===n.type){e.next=3;break}throw new Error("Wrong action type ".concat(n.type));case 3:if(i=n.image,!r.regions){e.next=6;break}return e.abrupt("return",V(i.canvas));case 6:return e.abrupt("return",X(i.canvas));case 7:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}()))}),(function(e,t){return e.pipe(Object(Ee.a)("CAD_LOADED"),Object(ye.a)(t),Object(Ce.a)(function(){var e=Object(he.a)(fe.a.mark((function e(t){var a,n,r;return fe.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(a=Object(ge.a)(t,2),n=a[0],a[1].settings,"CAD_LOADED"===n.type){e.next=3;break}throw new Error("Wrong action type ".concat(n.type));case 3:return r=n.file,e.abrupt("return",J(r));case 5:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}()))}),(function(e,t){return e.pipe(Object(Ee.a)("REGION_REQUEST_SUCCEED"),Object(ye.a)(t),Object(Ce.a)(function(){var e=Object(he.a)(fe.a.mark((function e(t){var a,n,r,i,c;return fe.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(a=Object(ge.a)(t,2),n=a[0],r=a[1].search.requestImage,"REGION_REQUEST_SUCCEED"===n.type){e.next=3;break}throw new Error("Wrong action type ".concat(n.type));case 3:if(r){e.next=5;break}throw new Error("No requestImage");case 5:return i=n.regions,c=Object(N.selectFirstCenteredRegion)(i,.3,{x1:0,x2:1,y1:0,y2:1}),e.abrupt("return",X(r.canvas,c));case 8:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}()))}),(function(e,t){return e.pipe(Object(Ee.a)("REGION_REQUEST_FAIL"),Object(ye.a)(t),Object(Ce.a)(function(){var e=Object(he.a)(fe.a.mark((function e(t){var a,n,r;return fe.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(a=Object(ge.a)(t,2),n=a[0],r=a[1].search.requestImage,"REGION_REQUEST_FAIL"===n.type){e.next=3;break}throw new Error("Wrong action type ".concat(n.type));case 3:if(r){e.next=5;break}throw new Error("No requestImage");case 5:return e.abrupt("return",X(r.canvas));case 6:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}()))}),(function(e,t){return e.pipe(Object(Ee.a)("REGION_CHANGED"),Object(we.a)(1200),Object(ye.a)(t),Object(Ce.a)(function(){var e=Object(he.a)(fe.a.mark((function e(t){var a,n,r,i;return fe.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(a=Object(ge.a)(t,2),n=a[0],r=a[1].search.requestImage,"REGION_CHANGED"===n.type){e.next=3;break}throw new Error("Wrong action type ".concat(n.type));case 3:if(r){e.next=5;break}throw new Error("No requestImage");case 5:return i=n.normalizedRect,e.abrupt("return",X(r.canvas,i));case 7:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}()))}),(function(e){return e.pipe(Object(Ee.a)("SEARCH_REQUEST_SUCCEED"),Object(Se.a)(ne))}),(function(e){return e.pipe(Object(Ee.a)("SEARCH_REQUEST_SUCCEED"),Object(ke.a)(3e3),Object(Se.a)(re))}),(function(e,t){return e.pipe(Object(Ee.a)("SEARCH_REQUEST_SUCCEED"),Object(ye.a)(t),Object(ve.a)((function(e){var t=Object(ge.a)(e,2),a=t[0],n=t[1].settings;if("SEARCH_REQUEST_SUCCEED"===a.type&&a.results&&1===a.results.length){var r=a.results[0].l;n.instantRedirectPatterns.find((function(e){return new RegExp(e).test(r)}))&&(window.location.href=r)}})),Object(Oe.a)())})),Ie=a(323),_e=a(684),Te=a(685),Ae=a(686),Ne=function(e){var t=e.result,a=e.style,r=e.template,c=e.onImageClick,o=e.onLinkClick,s={onImageClick:function(e){e.preventDefault(),c(t.position,t.img.url)},onLinkClick:function(e){e.preventDefault(),o(t.position,t.l)},noImageUrl:e.noImageUrl||"images/ic_cam_large_noimage.png",result:t},l=null;switch(r){case"snr":l=function(e){var t=e.result,a=e.noImageUrl,n=e.onImageClick,r=e.onLinkClick;return i.a.createElement(i.a.Fragment,null,i.a.createElement("a",{href:t.l,className:"imageLink",onClick:n,onAuxClick:r},i.a.createElement("div",{className:"prdctImg"},i.a.createElement("div",{className:"imgWrap"},i.a.createElement("img",{src:t.img&&t.img.url+"?r=512x512"||a,alt:t.title})))),i.a.createElement("div",{className:"prdctDetailsWrap"},i.a.createElement("div",null,i.a.createElement("div",{className:"prdctTitle"},t.sku),i.a.createElement("div",{className:"prdctMeta",style:{height:"5em",whiteSpace:"normal"}},t.title),i.a.createElement("a",{style:{backgroundImage:"none",paddingLeft:"10px"},className:"prdctShopLink",href:t.l,target:"_blank",rel:"noopener noreferrer",onClick:r,onAuxClick:r},"Info"))))}(s);break;case"snr-multilink":l=function(e,t){var a=e.result,n=e.noImageUrl,r=e.onImageClick;return i.a.createElement(i.a.Fragment,null,i.a.createElement("a",{href:a.l,className:"imageLink",onClick:r,onAuxClick:r},i.a.createElement("div",{className:"prdctImg"},i.a.createElement("div",{className:"imgWrap"},i.a.createElement("img",{src:a.img&&a.img.url+"?r=512x512"||n,alt:a.title})))),i.a.createElement("div",{className:"prdctDetailsWrap"},i.a.createElement("div",null,i.a.createElement("div",{className:"prdctTitle"},a.sku),i.a.createElement("div",{className:"prdctMeta",style:{height:"5em",whiteSpace:"normal"}},a.title),a.l.map((function(e){return i.a.createElement("a",{style:{backgroundImage:"none",paddingLeft:"10px"},className:"prdctShopLink",href:e.href,onClick:function(){return t(e.href)},onAuxClick:function(){return t(e.href)},target:"_blank",key:e.href,rel:"noopener noreferrer"},e.text)})))))}(s,(function(e){return o(t.position,e)}));break;case"default":default:l=function(e){var t=e.result,a=e.noImageUrl,n=e.onImageClick,r=e.onLinkClick;return i.a.createElement(i.a.Fragment,null,i.a.createElement("a",{href:t.l,className:"imageLink",title:"Click the image so see similar products",onClick:n,onAuxClick:r},i.a.createElement("div",{className:"prdctImg"},i.a.createElement("div",{className:"imgWrap"},i.a.createElement("img",{src:t.img&&t.img.url+"?r=512x512"||a,alt:t.title})))),i.a.createElement("div",{className:"prdctDetailsWrap"},i.a.createElement("div",null,i.a.createElement("div",{className:"prdctTitle"},t.title),i.a.createElement("div",{className:"prdctMeta"},i.a.createElement("span",{className:"prdctPrice"},function(e){return e.p?(e.p.vi/100).toFixed(2)+" "+e.p.c:""}(t))),i.a.createElement("a",{onClick:r,onAuxClick:r,className:"prdctShopLink",href:t.l,target:"_blank",rel:"noopener noreferrer"},"Buy Now"))))}(s)}return i.a.createElement("div",{className:"prdctItem",style:Object(n.a)({},a)},l)},Fe=a(170),De=function(e){var t=e.filter,a=e.selectedValues,n=Object(P.c)();return t&&t.values&&t.key&&t.values.length>0?i.a.createElement("div",null,i.a.createElement("div",{className:"item"},i.a.createElement(Fe.a,{className:"sidebar-icon"}),i.a.createElement("span",{className:"sidebar-text"}," ",t.key)),i.a.createElement("div",{className:"item"},i.a.createElement("div",{className:"list-container"},t.values.slice(0,6).map((function(e,r){var c=a&&a.includes(e);return i.a.createElement("div",{key:r},i.a.createElement("input",{value:e,checked:!!c,type:"checkbox",onChange:function(a){return function(e,a){e.target.checked?t.key&&n(function(e,t){return{type:"ADD_TO_SELECTEDFILTERS",key:e,value:t}}(t.key,a)):t.key&&n(function(e,t){return{type:"REMOVE_FROM_SELECTEDFILTERS",key:e,value:t}}(t.key,a))}(a,e)}}),i.a.createElement("label",{className:"itemLabel"},e))}))))):i.a.createElement("div",null,"No filter to load")},Le=function(e){var t=e.filters,a=e.selectedFilters,n=Object(r.useState)(!1),c=Object(ge.a)(n,2),o=c[0],s=c[1];return i.a.createElement("div",{className:o?"sidebar":"Sidebar collapsed"},i.a.createElement("div",{className:"sidebarContent"},i.a.createElement("div",{className:"sidebarHeader"},i.a.createElement(Fe.b,{className:"sidebar-icon",onClick:function(){s(!o)}}),i.a.createElement("h1",{className:o?"sidebar-logo":"sidebar-logo collapsedHide"}," Select Filters ")),i.a.createElement("div",{className:o?"Sidebar-items":"Sidebar-items collapsedHide"},t&&t.map((function(e){var t=e.key?a.get(e.key):void 0;return i.a.createElement(De,{filter:e,selectedValues:t})})))))},Ue=function(){return i.a.createElement("div",{id:"header"},i.a.createElement("section",{id:"branding"}),i.a.createElement("div",{id:"menu",className:"menuWrap",role:"navigation"},i.a.createElement("ul",null,i.a.createElement("li",null,i.a.createElement("a",{href:"https://nyris.io/imprint/#privacy",target:"_blank",rel:"noopener noreferrer"},"Privacy Policy")),i.a.createElement("li",null,i.a.createElement("a",{href:"https://nyris.io/",target:"_blank",rel:"noopener noreferrer"},"Visit our Website")))))},He=function(e){var t=e.feedbackState,a=e.onPositiveFeedback,n=e.onNegativeFeedback,r=e.onClose,c=null;switch(t){case"question":c=i.a.createElement("div",{className:"feedbackForm"},i.a.createElement("p",null,"Did you find what you were looking for?"),i.a.createElement("div",{className:"btn primary positiveFeedback",onClick:a},"Yes"),i.a.createElement("div",{className:"btn secondary negativeFeedback",onClick:n},"No"));break;case"positive":c=i.a.createElement("div",{className:"feedbackMessage positive"},"Great, thank you for your feedback!");break;case"negative":c=i.a.createElement("div",{className:"feedbackMessage negative"},"We saved your request so we can track down the issue and improve the search experience. Your Feedback helps us to make our service better for everyone, thank you!",i.a.createElement("br",null),i.a.createElement("div",{className:"btn dismiss",onClick:r},"Dismiss"));break;default:c=null}return i.a.createElement(I.Animate,{show:"hidden"!==t,start:{y:100,opacity:0},enter:{y:[0],opacity:[1]},leave:{y:[100],opacity:[0]}},(function(e){var t=e.y,a=e.opacity;return i.a.createElement("section",{className:"feedback",style:{transform:"translateY(".concat(t,"%)"),opacity:a}},i.a.createElement("div",{className:"wrapper"},c),i.a.createElement("div",{className:"closeFeedbackContainer"},i.a.createElement("div",{className:"closeFeedback",onClick:r})))}))},Pe=function(e){var t=e.cats;return 0===t.length?null:i.a.createElement("div",{id:"catlist",style:{textAlign:"center"}},t.map((function(e){return i.a.createElement("a",{key:e,href:"#top"},e)})))},Me=function(e){var t=e.codes;return i.a.createElement(i.a.Fragment,null,i.a.createElement("div",{className:"codes",style:{textAlign:"center"}},t.length>0&&i.a.createElement("span",{style:{fontSize:"0.8em"}},"Codes",i.a.createElement("br",null)," "),t.map((function(e,t){return i.a.createElement("small",{key:t,title:e.type},e.value)}))))},We=function(e){var t=e.cs;return i.a.createElement(i.a.Fragment,null,t.map((function(e){return i.a.createElement("small",{key:e.name},""===e.name?"No category":e.name.split(" > ").slice(-1)[0],":",(100*e.score).toFixed(0),"%")})))},qe=function(e){var t=e.images,a=e.onExampleImageClicked;return 0===t.length?null:i.a.createElement("section",{className:"useExampleImg"},"You can also try one of these pictures:",i.a.createElement("div",{className:"exampleImages"},i.a.createElement("div",{className:"exImagesWrap"},t.map((function(e){return i.a.createElement("img",{key:e,src:e,alt:"",onClick:function(){return a(e)}})})))))},Be=function(e){var t=e.search,a=t.results,c=t.regions,o=t.previewSelection,l=t.requestId,u=t.duration,p=t.errorMessage,m=t.filterOptions,d=t.categoryPredictions,f=t.codes,h=t.toastErrorMessage,g=t.filters,E=t.selectedFilters,b=e.showPart,y=e.settings,v=e.handlers,O=e.loading,S=e.previewImage,k=e.feedbackState,C=Object(s.a)({onDrop:function(e){return v.onFileDropped(e[0])}}),w=C.getRootProps,x=C.getInputProps,j=C.isDragActive,R=Math.floor(.45*window.innerHeight),_=Math.max(400,R),F=Object(r.useState)(!1),D=Object(ge.a)(F,2),L=D[0],U=D[1],H=Object(P.c)(),M=["image/*"].concat(y.cadSearch?N.cadExtensions:[]).join(",");return Object(r.useEffect)((function(){""!==h&&U(!0)}),[h]),Object(r.useEffect)((function(){H({type:"LOAD_FILTERS"})}),[b,H]),i.a.createElement(i.a.Fragment,null,i.a.createElement(Ue,null),i.a.createElement("div",{className:"wrapperBody"},i.a.createElement(Le,{filters:g,selectedFilters:E}),i.a.createElement("div",{className:"mainContent"},"camera"===b&&i.a.createElement(A.Capture,{onCaptureComplete:v.onCaptureComplete,onCaptureCanceled:v.onCaptureCanceled,useAppText:"Use default camera app"}),i.a.createElement("div",{className:T()("headSection",{hidden:"results"===b}),id:"headSection"},i.a.createElement("div",Object.assign({},w({onClick:function(e){e.stopPropagation()}}),{className:T()("wrapper","dragAndDropActionArea",{fileIsHover:j})}),i.a.createElement("div",{className:T()("contentWrap")},i.a.createElement(_e.a,{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"center",minHeight:"100vh"},i.a.createElement("section",{className:"uploadImage"},i.a.createElement("input",{type:"button",name:"file",id:"capture",className:"inputfile",accept:"image/*",capture:"environment",onClick:v.onCameraClick}),i.a.createElement("input",{type:"file",name:"file",id:"capture_file",className:"inputfile",accept:M,capture:"environment"}),i.a.createElement("input",Object.assign({},x(),{type:"file",name:"file",id:"select_file",className:"inputfile",accept:M,onChange:Object(A.makeFileHandler)(v.onSelectFile)})),i.a.createElement("div",{className:"onDesktop"},"Drop an image",i.a.createElement("div",{className:"smallText"},"or")),i.a.createElement("div",{className:"onMobile camIcon"},i.a.createElement("img",{src:"./images/ic_cam_large.svg",alt:"Camera"})),i.a.createElement("label",{htmlFor:"capture",className:"btn primary onMobile",style:{marginBottom:"2em",width:"12em"}},i.a.createElement("span",{className:"onMobile"},"Take a picture")),i.a.createElement("br",null),i.a.createElement("label",{htmlFor:"select_file",className:"btn primary",style:{width:"12em"}},i.a.createElement("span",null,"Select a file")),i.a.createElement("label",{htmlFor:"capture",className:"mobileUploadHandler onMobile"})),i.a.createElement(qe,{images:y.exampleImages,onExampleImageClicked:v.onExampleImageClick})))),i.a.createElement("div",{className:"headerSeparatorTop"}),i.a.createElement("div",{className:"headerSeparatorBack"}),i.a.createElement("div",{className:T()("tryDifferent",{hidden:"results"!==b}),onClick:v.onShowStart},i.a.createElement("div",{className:"icIcon"}),i.a.createElement("div",{className:"textDesc"}," Try a different image"),i.a.createElement("br",{style:{clear:"both"}}))),i.a.createElement("section",{className:T()({hideResults:"results"!==b},"results",{resultsActive:"results"===b},1===a.length?"singleProduct":"multipleProducts")},p&&i.a.createElement("div",{className:"errorMsg"},p,i.a.createElement("div",{style:{textAlign:"center",fontSize:"0\xdf.7em",paddingTop:"0.8em"}},i.a.createElement("span",null,"Make sure to include the request ID when reporting a problem: ",l))),i.a.createElement(I.Animate,{show:O,start:{opacity:0},enter:{opacity:[1],timing:{duration:300}},leave:{opacity:[0],timing:{duration:300}}},(function(e){return i.a.createElement("div",{className:"loadingOverlay",style:Object(n.a)({},e)},i.a.createElement("div",{className:"loading"}))})),y.preview&&S&&i.a.createElement("div",{className:"preview"},i.a.createElement(A.Preview,{key:S.id,maxWidth:document.body.clientWidth,maxHeight:_,dotColor:"#4C8F9F",onSelectionChange:v.onSelectionChange,regions:c,selection:o,image:S.canvas})),i.a.createElement("div",{className:"predicted-categories"},i.a.createElement(We,{cs:d})),i.a.createElement("div",{className:"predicted-categories"},i.a.createElement(Me,{codes:f})),i.a.createElement(Pe,{cats:m}),i.a.createElement("div",{className:"wrapper"},i.a.createElement(I.NodeGroup,{data:a,keyAccessor:function(e){return e.sku},start:function(e,t){return{opacity:0,translateX:-100}},enter:function(e,t){return{opacity:[1],translateX:[0],timing:{delay:100*t,duration:300}}}},(function(e){return i.a.createElement(i.a.Fragment,null,e.map((function(e){var t=e.key,a=e.data,n=e.state;return i.a.createElement(Ne,{key:t,noImageUrl:y.noImageUrl,template:y.resultTemplate,onImageClick:v.onImageClick,onLinkClick:v.onLinkClick,result:a,style:{opacity:n.opacity,transform:"translateX(".concat(n.translateX,"%)")}})})))})),0===a.length&&"results"===b&&!O&&i.a.createElement("div",{className:"noResults"},"We did not find anything ",i.a.createElement("span",{role:"img","aria-label":"sad face"},"\ud83d\ude15")),i.a.createElement("br",{style:{clear:"both"}}),u&&"results"===b&&i.a.createElement("div",{style:{textAlign:"center",fontSize:"0.7em",paddingTop:"0.8em"}},"Search took ",u.toFixed(2)," seconds"),l&&"results"===b&&i.a.createElement("div",{style:{textAlign:"center",fontSize:"0.7em",paddingTop:"0.8em"}},"Request identifier ",l))),i.a.createElement(Te.a,{open:L,autoHideDuration:3e3,onClose:function(){return U(!1)}},i.a.createElement(Ae.a,{onClose:function(){return U(!1)},severity:"error"},h)))),i.a.createElement("section",{className:"footnote"},i.a.createElement("div",{className:"wrapper"},"\xa9 2017 - 2019 ",i.a.createElement("a",{href:"https://nyris.io"},"nyris GmbH")," - All rights reserved - ",i.a.createElement("a",{href:"https://nyris.io/imprint/"},"Imprint"))),i.a.createElement(He,{feedbackState:k,onPositiveFeedback:v.onPositiveFeedback,onNegativeFeedback:v.onNegativeFeedback,onClose:v.onCloseFeedback}))};var Ge=Object(n.a)(Object(n.a)({},{xOptions:!1,apiKey:"UNSET",exampleImages:[],preview:!0,regions:!1,maxWidth:500,maxHeight:500,jpegQuality:.92,baseUrl:"https://api.nyris.io",instantRedirectPatterns:["^https?://(www.)?youtube.com/","^https?://(www.)?youtu.be/","^https?://(www.)?vimeo.com/","^https?://(www.)?dailymotion.com/","^https?://(www.)?dai.ly/"]}),settings);Ge=Object(n.a)(Object(n.a)({},Ge),{},{apiKey:oe("apiKey")||Ge.apiKey,xOptions:oe("xOptions")||Ge.xOptions,regions:oe("use.regions")||Ge.regions,preview:oe("use.preview")||Ge.preview}),document.title=window.location.host;var Qe=new F.a(Ge),Ke=Object(Ie.a)(),ze=Object(le.a)({dependencies:{api:Qe,history:Ke}}),Ve=Object(M.combineReducers)({settings:function(){return Ge},nyrisDesign:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:ce,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case"SHOW_START":return Object(n.a)(Object(n.a)({},e),{},{showPart:"start"});case"SHOW_CAMERA":return Object(n.a)(Object(n.a)({},e),{},{showPart:"camera"});case"SEARCH_REQUEST_START":case"REGION_REQUEST_START":case"SHOW_RESULTS":return Object(n.a)(Object(n.a)({},e),{},{showPart:"results"});case"SHOW_FEEDBACK":return Object(n.a)(Object(n.a)({},e),{},{feedbackState:"question"});case"HIDE_FEEDBACK":return Object(n.a)(Object(n.a)({},e),{},{feedbackState:"hidden"});case"FEEDBACK_SUBMIT_POSITIVE":return Object(n.a)(Object(n.a)({},e),{},{feedbackState:"positive"});case"FEEDBACK_SUBMIT_NEGATIVE":return Object(n.a)(Object(n.a)({},e),{},{feedbackState:"negative"});default:return e}},search:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:W,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case"IMAGE_LOADED":var a=t.image;return console.log("image",a),Object(n.a)(Object(n.a)({},W),{},{requestImage:a,selectedFilters:e.selectedFilters});case"CAD_LOADED":var r=t.file;return Object(n.a)(Object(n.a)({},W),{},{requestCadFile:r});case"REGION_REQUEST_START":return Object(n.a)(Object(n.a)({},e),{},{fetchingRegions:!0});case"REGION_REQUEST_SUCCEED":return Object(n.a)(Object(n.a)({},e),{},{fetchingRegions:!1,regions:t.regions,selectedRegion:Object(N.selectFirstCenteredRegion)(t.regions,.3,e.selectedRegion)});case"REGION_REQUEST_FAIL":return Object(n.a)(Object(n.a)({},e),{},{fetchingRegions:!1,errorMessage:t.exception.response.data.detail});case"SEARCH_REQUEST_START":return Object(n.a)(Object(n.a)({},e),{},{fetchingResults:!0});case"SEARCH_REQUEST_SUCCEED":var i=t.results,c=t.requestId,o=t.duration,s=t.categoryPredictions,l=t.codes;return Object(n.a)(Object(n.a)({},e),{},{results:i,requestId:c,fetchingResults:!1,sessionId:e.sessionId||c,categoryPredictions:s,codes:l,duration:o});case"SEARCH_REQUEST_FAIL":return Object(n.a)(Object(n.a)({},e),{},{fetchingResults:!1,errorMessage:t.reason});case"REGION_CHANGED":return Object(n.a)(Object(n.a)({},e),{},{selectedRegion:t.normalizedRect});case"LOAD_FILTERS_SUCCESS":return Object(n.a)(Object(n.a)({},e),{},{filters:t.filters});case"LOAD_FILTERS_FAIL":return Object(n.a)(Object(n.a)({},e),{},{errorMessage:t.exception.response.data.detail});case"ADD_TO_SELECTEDFILTERS":return Object(n.a)(Object(n.a)({},e),{},{selectedFilters:Z(e.selectedFilters,t.key,t.value)});case"REMOVE_FROM_SELECTEDFILTERS":return Object(n.a)(Object(n.a)({},e),{},{selectedFilters:ee(e.selectedFilters,t.key,t.value)});case"CLEAR_SELECTED_FILTERS":return Object(n.a)(Object(n.a)({},e),{},{selectedFilters:new Map})}return e}}),Xe=Object(M.createStore)(Ve,Object(se.composeWithDevTools)(Object(M.applyMiddleware)(ze)));ze.run(Re),Ke.listen((function(e,t){if(console.log("history",e,t),"PUSH"!==t)switch(e.pathname){case"/results":Xe.dispatch({type:"SHOW_RESULTS"}),Xe.dispatch({type:"LOAD_FILTERS"});break;case"/":Xe.dispatch({type:"SHOW_START"})}}));window.addEventListener("message",(function(e){var t=e.data;"image"===t.type&&Xe.dispatch(B(t.image))}));var Je=void 0!==settings.materialDesign,Ye=Object(n.a)(Object(n.a)({},me),settings.materialDesign),$e=Object(ue.a)({typography:{fontFamily:Ye.customFontFamily},palette:{primary:{main:Ye.primaryColor},secondary:{main:Ye.secondaryColor}}}),Ze=Je?H:Be,et=Object(P.b)((function(e){return{showPart:e.nyrisDesign.showPart,search:{results:e.search.results,categoryPredictions:e.search.categoryPredictions,codes:e.search.codes,filterOptions:e.search.filterOptions,previewSelection:e.search.selectedRegion,regions:e.search.regions,duration:e.search.duration,requestId:e.search.requestId,toastErrorMessage:e.search.errorMessage,filters:e.search.filters,selectedFilters:e.search.selectedFilters},settings:e.settings,previewImage:e.search.requestImage,loading:e.search.fetchingRegions||e.search.fetchingResults,feedbackState:e.nyrisDesign.feedbackState,mdSettings:e.settings.materialDesign||me}}),(function(e){return{handlers:Object(n.a)(Object(n.a)({},Object(M.bindActionCreators)({onPositiveFeedback:Y,onNegativeFeedback:$,onCameraClick:te,onCaptureCanceled:ae,onCaptureComplete:G,onSelectFile:q,onExampleImageClick:B,onFileDropped:q,onSelectionChange:z,onCloseFeedback:ie},e)),{},{onImageClick:function(t,a){e({type:"RESULT_IMAGE_CLICKED",position:t,url:a}),e(B(a))},onLinkClick:function(t,a){e({type:"RESULT_LINK_CLICKED",position:t,url:a}),a&&window.open(a)},onShowStart:function(){e({type:"SHOW_START"}),e({type:"CLEAR_SELECTED_FILTERS"}),e({type:"LOAD_FILTERS"}),window.scrollTo({top:0,left:0,behavior:"smooth"})}})}}))(Ze);o.a.render(i.a.createElement(P.a,{store:Xe},i.a.createElement(pe.a,{theme:$e},i.a.createElement(et,null))),document.getElementById("root")),"serviceWorker"in navigator&&navigator.serviceWorker.ready.then((function(e){e.unregister()}))}},[[336,1,2]]]);
|
|
2
|
+
//# sourceMappingURL=main.f5da7aa4.chunk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../utils.ts","../../index.ts","AppMD.tsx","serviceWorker.ts","actions/searchActions.ts","actions/nyrisAppActions.ts","utils.ts","defaults.ts","epics/feedback.ts","epics/search.ts","epics/index.ts","components/Result.tsx","components/FiltersList.tsx","components/Sidebar.tsx","components/Header.tsx","components/Feedback.tsx","components/CategoryFilter.tsx","components/Codes.tsx","components/PredictedCategories.tsx","components/ExampleImages.tsx","App.tsx","index.tsx"],"names":["r","exports","this","baseUrl","i","bodyFormData","append","useStyles","makeStyles","theme","icon","marginRight","spacing","heroContent","backgroundColor","palette","background","paper","padding","transition","overflow","height","heroContentClosed","heroButtons","marginTop","cardGrid","paddingTop","paddingBottom","minHeight","cardGridCollapsed","opacity","card","display","flexDirection","cardMedia","backgroundSize","cardContent","flexGrow","footer","withElipsis","textOverflow","whiteSpace","loading","margin","fabContainer","position","bottom","fab","marginLeft","makeFileHandler","action","e","file","dataTransfer","files","target","value","Copyright","Typography","variant","color","align","Link","href","component","AppMD","settings","handlers","showPart","previewImage","search","results","regions","previewSelection","requestId","mdSettings","duration","classes","useDropzone","onDrop","fs","onFileDropped","getRootProps","getInputProps","isDragActive","halfOfTheScreenHeight","Math","floor","window","innerHeight","maxPreviewHeight","max","acceptTypes","concat","cadSearch","cadExtensions","join","resultLinkIcon","rel","CssBaseline","onCaptureComplete","onCaptureCanceled","useAppText","AppBar","style","appBarCustomBackgroundColor","Container","maxWidth","src","appBarLogoUrl","alt","Toolbar","appBarCustomTextColor","appBarTitle","className","classNames","Hidden","mdUp","textAlign","PhotoCamera","fontSize","Button","onClick","onCameraClick","accept","id","type","onChange","onSelectFile","width","htmlFor","smDown","borderStyle","borderWidth","borderColor","borderRadius","stopPropagation","Image","Card","marginBottom","raised","key","document","body","clientWidth","maxHeight","dotColor","primaryColor","onSelectionChange","selection","image","canvas","CircularProgress","Grid","container","data","keyAccessor","sku","start","translateX","enter","timing","delay","rs","map","result","state","item","xs","sm","md","transform","CardMedia","img","url","noImageUrl","title","CardContent","gutterBottom","resultFirstRowProperty","resultSecondRowProperty","l","CardActions","size","onLinkClick","onAuxClick","Icon","resultLinkText","length","Fab","aria-label","onShowStart","ArrowBack","Boolean","location","hostname","match","initialState","selectedRegion","x1","x2","y1","y2","requestImage","undefined","fetchingResults","fetchingRegions","filterOptions","categoryPredictions","codes","errorMessage","filters","selectedFilters","Map","loadFile","loadUrl","loadCanvas","imageLoaded","cadFileLoaded","selectionChanged","normalizedRect","searchRegions","searchOffersForImage","searchOffersForCad","submitPositiveFeedback","submitNegativeFeedback","ADDtoSelectedfilters","values","get","push","Array","set","console","log","RemoveFromSelectedFilters","filter","x","showCamera","showStart","showResults","showFeedback","hideFeedback","initialNyrisState","feedbackState","getUrlParam","name","RegExp","exec","decodeURIComponent","defaultMdSettings","secondaryColor","customFontFamily","combineEpics","action$","state$","api","pipe","ofType","withLatestFrom","tap","a","success","sessionId","sendFeedback","event","ignoreElements","debounceTime","rect","y","w","h","positions","switchMap","Error","forEach","filterObj","options","cropRect","findByImageWithFilters","findByImage","warn","reason","message","exception","findByCad","findRegions","error","randomId","random","toString","isImageFile","urlOrBlobToCanvas","isCadFile","Object","keys","getFilters","slice","rootEpic","searchEpics","feedbackEpics","history","pathname","goBack","selectFirstCenteredRegion","firstLink","instantRedirectPatterns","find","test","Result","template","onImageClick","preventDefault","resultInner","backgroundImage","paddingLeft","renderSnr","text","renderSnrMultilink","p","vi","toFixed","c","renderPrice","renderDefault","FiltersList","selectedValues","dispatch","useDispatch","index","checked","includes","addToSelectedFilters","removeFromSelectedFilters","onFilterChanged","Sidebar","useState","isExpanded","setIsExpanded","Header","role","Feedback","onPositiveFeedback","onNegativeFeedback","onClose","inner","show","leave","CategoryFilter","cats","s","Codes","PredictedCategories","cs","split","score","ExampleImages","images","onExampleImageClicked","Demo2","toastErrorMessage","toastOpen","setToastOpen","useEffect","Fragment","hidden","Box","justifyContent","alignItems","capture","exampleImages","onExampleImageClick","clear","hideResults","resultsActive","preview","resultTemplate","Snackbar","open","autoHideDuration","Alert","severity","onCloseFeedback","normalizedSettings","xOptions","apiKey","jpegQuality","host","NyrisAPI","createHashHistory","epicMiddleware","createEpicMiddleware","dependencies","rootReducer","combineReducers","nyrisDesign","requestCadFile","response","detail","store","createStore","composeWithDevTools","applyMiddleware","run","listen","addEventListener","evt","msg","useMd","materialDesign","createMuiTheme","typography","fontFamily","primary","main","secondary","SelectedApp","App","ConnectedApp","connect","bindActionCreators","scrollTo","top","left","behavior","ReactDOM","render","getElementById","navigator","serviceWorker","ready","then","registration","unregister"],"mappings":"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","file":"static/js/main.f5da7aa4.chunk.js","sourcesContent":["\"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","\"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\";\n this.imageMatchingUrlWithFilters = baseUrl + \"/find/v2\";\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/v1/regions/\";\n this.findFilters = baseUrl + \"/find/v1/filters\";\n this.responseFormat = 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 ;\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 ;\n NyrisAPI.prototype.getParams = function (options) {\n var params = options.geoLocation ? {\n lat: options.geoLocation.lat.toString(),\n lon: options.geoLocation.lon.toString(),\n dist: options.geoLocation.dist.toString()\n } : {};\n return params;\n };\n NyrisAPI.prototype.parseCategoryPredictions = function (categoryPredictionResponse) {\n return Object.entries(categoryPredictionResponse || {}).map(function (_a) {\n var name = _a[0], score = _a[1];\n return ({\n name: name,\n score: score\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.responseHook ? this.responseHook(res.data) : res.data;\n var results = 'offerInfos' in responseData ?\n responseData.offerInfos.map(function (r, i) {\n console.log(r);\n return (__assign(__assign({}, r), { position: i }));\n })\n : responseData.results.map(function (r, i) {\n console.log(r);\n 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 ? { vi: parseFloat(r.price) * 100, c: r.price.split(\" \")[1] } : undefined\n });\n });\n console.log(results);\n var requestId = res.headers[\"x-matching-request\"];\n var duration = 'durationSeconds' in res.data ? res.data.durationSeconds : 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 options See [[ImageSearchOptions]].\n */\n NyrisAPI.prototype.findByImage = function (canvas, options) {\n return __awaiter(this, void 0, void 0, function () {\n var imageBytes, headers, params, bodyFormData, _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 bodyFormData = new FormData();\n bodyFormData.append('image', imageBytes);\n return [4 /*yield*/, utils_1.timePromise(this.httpClient.request({\n method: 'POST',\n url: this.imageMatchingUrlWithFilters,\n data: bodyFormData,\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 NyrisAPI.prototype.findByImageWithFilters = function (canvas, options, filters) {\n return __awaiter(this, void 0, void 0, function () {\n var imageBytes, headers, params, selectedFilters, bodyFormData, 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 selectedFilters = new Array();\n if (filters) {\n filters.forEach(function (x) {\n selectedFilters.push({ key: x.key, values: x.values });\n });\n }\n console.log(selectedFilters);\n bodyFormData = new FormData();\n bodyFormData.append('image', imageBytes);\n if (filters) {\n for (i = 0; i < selectedFilters.length; i++) {\n bodyFormData.append(\"filters[\" + i + \"].filterType\", selectedFilters[i].key);\n for (j = 0; j < selectedFilters[i].values.length; j++) {\n bodyFormData.append(\"filters[\" + i + \"].filterValues[\" + j + \"]\", selectedFilters[i].values[j]);\n }\n }\n }\n return [4 /*yield*/, utils_1.timePromise(this.httpClient.request({\n method: 'POST',\n url: this.imageMatchingUrlWithFilters,\n data: bodyFormData,\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, { headers: headers, responseType: 'json' })];\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;\n return [2 /*return*/, regions.map(function (r) { return ({\n className: r.className,\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 () {\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.findFilters;\n return [4 /*yield*/, this.httpClient.get(url, { headers: headers, responseType: 'json' })];\n case 1:\n r = _a.sent();\n if (r.status == 200) {\n console.log(r.data);\n r.data.forEach(function (x) {\n if (x.key == 'CategoryNo') {\n x.values.unshift('00136');\n }\n });\n return [2 /*return*/, r.data];\n }\n else {\n console.log(\"error in fetching filters\");\n }\n return [2 /*return*/, r.data];\n }\n });\n });\n };\n return NyrisAPI;\n}());\nexports.default = NyrisAPI;\n//# sourceMappingURL=index.js.map","import {AppProps} from \"./App\";\nimport {useDropzone} from \"react-dropzone\";\nimport {\n makeStyles,\n AppBar,\n Button, Card, CardActions, CardContent,\n CardMedia, CircularProgress,\n Container,\n CssBaseline, Fab,\n Grid, Hidden,\n Link,\n Toolbar,\n Typography\n} from \"@material-ui/core\";\nimport {PhotoCamera, ArrowBack, Image} from \"@material-ui/icons\";\nimport Icon from \"@material-ui/core/Icon\";\nimport * as React from \"react\";\nimport {NodeGroup} from \"react-move\";\nimport classNames from 'classnames';\nimport {Capture, Preview} from \"@nyris/nyris-react-components\";\nimport {cadExtensions} from \"@nyris/nyris-api\";\n\n\nconst useStyles = makeStyles(theme => ({\n icon: {\n marginRight: theme.spacing(2),\n },\n heroContent: {\n backgroundColor: theme.palette.background.paper,\n padding: theme.spacing(8, 0, 6),\n transition: 'all 300ms',\n overflow: 'hidden',\n height: 500\n },\n heroContentClosed: {\n height: 0,\n padding: 0\n },\n heroButtons: {\n marginTop: theme.spacing(4),\n },\n cardGrid: {\n paddingTop: theme.spacing(8),\n paddingBottom: theme.spacing(8),\n minHeight: 600,\n overflow: 'hidden',\n transition: 'all 300ms',\n },\n cardGridCollapsed: {\n height: 0,\n opacity: 0,\n minHeight: 0,\n paddingTop: 0,\n paddingBottom: 0,\n },\n card: {\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n },\n cardMedia: {\n paddingTop: '56.25%', // 16:9\n backgroundSize: 'contain'\n },\n cardContent: {\n flexGrow: 1,\n paddingBottom: 0\n },\n footer: {\n backgroundColor: theme.palette.background.paper,\n padding: theme.spacing(6),\n },\n withElipsis: {\n textOverflow: 'ellipsis',\n overflow: 'hidden',\n whiteSpace: 'nowrap'\n },\n loading: {\n margin: theme.spacing(2),\n },\n fabContainer: {\n position: 'fixed',\n bottom: theme.spacing(2),\n\n },\n fab: {\n marginLeft: theme.spacing(2),\n },\n}));\n\nconst makeFileHandler = (action: any) => (e: any) => {\n let file = (e.dataTransfer && e.dataTransfer.files[0]) || e.target.files[0];\n if (e.target && e.target.value) {\n e.target.value = \"\";\n }\n\n if (file) {\n action(file);\n }\n};\n\nfunction Copyright() {\n return (\n\n <Typography variant=\"body2\" color=\"textSecondary\" align=\"center\">\n {'Powered by '}\n <Link color=\"inherit\" href=\"https://nyris.io/\" component='a' target=\"_blank\">\n nyris.io\n </Link>\n </Typography>\n );\n}\n\n\nconst AppMD: React.FC<AppProps> = ({settings, handlers, showPart, previewImage, loading, search: {results, regions, previewSelection, requestId, duration}, mdSettings}) => {\n const classes = useStyles();\n const {getRootProps, getInputProps, isDragActive} = useDropzone({onDrop: (fs: File[]) => handlers.onFileDropped(fs[0])});\n\n const minPreviewHeight = 400;\n const halfOfTheScreenHeight = Math.floor(window.innerHeight * 0.45);\n const maxPreviewHeight = Math.max(minPreviewHeight, halfOfTheScreenHeight);\n const acceptTypes =\n [ 'image/*' ].concat(\n settings.cadSearch ? cadExtensions : []\n ).join(',');\n\n return (\n <React.Fragment>\n {mdSettings.resultLinkIcon && <link rel=\"stylesheet\" href=\"https://fonts.googleapis.com/icon?family=Material+Icons\" />}\n <CssBaseline/>\n {showPart === 'camera' &&\n <Capture onCaptureComplete={handlers.onCaptureComplete} onCaptureCanceled={handlers.onCaptureCanceled}\n useAppText='Use default camera app'/>}\n <AppBar position={\"relative\"} style={{backgroundColor: mdSettings.appBarCustomBackgroundColor}}>\n\n <Container maxWidth='md' style={{flexDirection: 'row', display: 'flex'}}>\n <img src={mdSettings.appBarLogoUrl} style={{height: '2em', minHeight: '64px', display: 'flex'}} alt=\"Logo\"/>\n <Toolbar component=\"span\">\n <Typography style={{color: mdSettings.appBarCustomTextColor}}>\n { mdSettings.appBarTitle }\n </Typography>\n </Toolbar>\n </Container>\n </AppBar>\n\n <main>\n <div\n className={classNames(classes.heroContent, showPart === 'results' ? classes.heroContentClosed : null)}>\n <Container maxWidth='md'>\n <div>\n <Hidden mdUp>\n <div style={{textAlign: 'center'}}>\n <PhotoCamera style={{fontSize: '20em', color: '#cccccc'}}/>\n </div>\n <div style={{textAlign: 'center'}}>\n <Button variant={\"contained\"} color={\"primary\"} onClick={handlers.onCameraClick}>Take\n a\n picture</Button>\n </div>\n <div style={{textAlign: 'center'}}>\n <Typography>\n or\n </Typography>\n </div>\n <div style={{textAlign: 'center'}}>\n <input\n accept={acceptTypes}\n id=\"raised-button-file\"\n type=\"file\"\n onChange={makeFileHandler(handlers.onSelectFile)}\n style={{width: '.1px', height: '.1px', overflow: 'hidden', opacity: 0}}\n />\n <label htmlFor=\"raised-button-file\">\n <Button variant={\"contained\"} color={\"primary\"} component=\"span\">\n Select a file\n </Button>\n </label>\n </div>\n </Hidden>\n <Hidden smDown>\n <div style={{borderStyle: 'dashed', borderWidth: 5, borderColor: isDragActive ? '#ccc' : '#eee', borderRadius: 10, padding: 10, paddingBottom: 30}}\n {...getRootProps({ onClick: e => { e.stopPropagation() }}) }>\n <div style={{textAlign: 'center'}}>\n <Image style={{fontSize: '20em', color: '#cccccc'}}/>\n </div>\n <div style={{textAlign: 'center'}}>\n <Typography variant='body2'>\n DROP AN IMAGE\n </Typography>\n </div>\n <div style={{textAlign: 'center'}}>\n <Typography variant=\"subtitle2\">\n or\n </Typography>\n </div>\n <div style={{textAlign: 'center'}}>\n <input\n accept={acceptTypes}\n id=\"raised-button-file\"\n type=\"file\"\n {...getInputProps()}\n onChange={makeFileHandler(handlers.onSelectFile)}\n style={{width: '.1px', height: '.1px', overflow: 'hidden', opacity: 0}}\n />\n <label htmlFor=\"raised-button-file\">\n <Button variant={\"contained\"} color={\"primary\"} component=\"span\">\n Select an image\n </Button>\n </label>\n </div>\n </div>\n </Hidden>\n </div>\n </Container>\n </div>\n <Container className={classNames(classes.cardGrid, showPart !== 'results' && classes.cardGridCollapsed)}\n maxWidth=\"md\">\n\n { previewImage &&\n <Card style={{marginBottom: '4em'}} raised={true}>\n <Preview key={previewImage.id}\n maxWidth={document.body.clientWidth}\n maxHeight={maxPreviewHeight}\n dotColor={mdSettings.primaryColor}\n onSelectionChange={handlers.onSelectionChange} regions={regions}\n selection={previewSelection} image={previewImage.canvas}/>\n </Card>\n }\n\n {loading && <div style={{textAlign: 'center'}}>\n <CircularProgress className={classes.loading}/>\n </div>}\n\n <Grid container spacing={4}>\n <NodeGroup data={results}\n keyAccessor={r => r.position + r.sku}\n start={(r, i) => ({opacity: 0, translateX: -100})}\n enter={(r, i) => ({\n opacity: [1],\n translateX: [0],\n timing: {delay: i * 100, duration: 300}\n })}>\n {rs =>\n <>\n {rs.map(({key, data: result, state}) =>\n <Grid item key={key} xs={12} sm={4} md={3}>\n <Card className={classes.card} style={{\n opacity: state.opacity,\n position: 'relative',\n transform: `translateX(${state.translateX}%)`\n }}>\n <CardMedia\n className={classes.cardMedia}\n image={(result.img && result.img.url) || settings.noImageUrl}\n title={result.title}\n />\n <CardContent className={classes.cardContent}>\n <Typography gutterBottom variant=\"subtitle2\" component=\"h5\"\n className={classes.withElipsis}>\n {result[mdSettings.resultFirstRowProperty]}\n </Typography>\n <Typography variant=\"body2\" className={classes.withElipsis}>\n {result[mdSettings.resultSecondRowProperty]}\n </Typography>\n </CardContent>\n {result.l &&\n <CardActions>\n <Button variant=\"outlined\" style={{marginLeft: 'auto'}}\n size=\"small\" color=\"primary\"\n onClick={() => handlers.onLinkClick(result.position, result.l)}\n onAuxClick={() => handlers.onLinkClick(result.position, result.l)} >\n { mdSettings.resultLinkIcon && <React.Fragment>\n <Icon>{ mdSettings.resultLinkIcon }</Icon>\n {' '}\n </React.Fragment> }\n {mdSettings.resultLinkText}\n </Button>\n </CardActions>\n }\n </Card>\n </Grid>\n )}\n </>\n }\n\n </NodeGroup>\n\n </Grid>\n\n {results.length === 0 && showPart === 'results' && !loading && (\n <Typography variant=\"h3\" align=\"center\">We did not find anything</Typography>\n )}\n\n\n </Container>\n {showPart !== 'start' &&\n <Container maxWidth='lg'>\n <div className={classes.fabContainer}>\n <Fab aria-label='back' className={classes.fab} color='primary' onClick={handlers.onShowStart}>\n <ArrowBack/>\n </Fab>\n </div>\n </Container>\n }\n\n </main>\n\n <footer className={classes.footer}>\n\n <Typography variant=\"subtitle1\" align=\"center\" color=\"textSecondary\">\n {requestId && showPart === 'results' && <div style={{textAlign: 'center', fontSize: '0.7em', paddingTop: '0.8em'}}>Request\n identifier {requestId}</div>}\n </Typography>\n <Copyright/>\n </footer>\n </React.Fragment>\n );\n};\n\nexport default AppMD;\n","// 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","import {CanvasWithId} from \"../types\";\nimport {Code, RectCoords, Region, selectFirstCenteredRegion,Filter} from '@nyris/nyris-api';\n\nexport type ImageSourceType =\n | { url: string }\n | { file: File }\n | { image: HTMLCanvasElement }\n\nexport type SearchAction =\n | { type: 'FEEDBACK_SUBMIT_POSITIVE' }\n | { type: 'FEEDBACK_SUBMIT_NEGATIVE' }\n | { type: 'IMAGE_LOADED', image: CanvasWithId, }\n | { type: 'REGION_REQUEST_START', image: HTMLCanvasElement }\n | { type: 'REGION_REQUEST_SUCCEED', regions: Region[] }\n | { type: 'REGION_REQUEST_FAIL', reason: string, exception: any }\n | { type: 'SEARCH_REQUEST_START', image: HTMLCanvasElement, normalizedRect?: RectCoords , selectedFilters?: Filter[] }\n | { type: 'SEARCH_REQUEST_START', file: File }\n | { type: 'SEARCH_REQUEST_SUCCEED', results: any[], requestId: string, duration: number, categoryPredictions: CategoryPrediction[], codes: Code[] }\n | { type: 'SEARCH_REQUEST_FAIL', reason: string, exception?: any }\n | { type: 'REGION_CHANGED', normalizedRect: RectCoords}\n | { type: 'LOAD_IMAGE'} & ImageSourceType\n | { type: 'LOAD_FILE', file: File}\n | { type: 'CAD_LOADED', file: File}\n | { type: 'LOAD_FILTERS'}\n | { type: 'LOAD_FILTERS_SUCCESS', filters: Filter[]}\n | { type: 'LOAD_FILTERS_FAIL', reason: string, exception: any}\n | { type: 'ADD_TO_SELECTEDFILTERS', key: string, value : string}\n | { type: 'REMOVE_FROM_SELECTEDFILTERS', key: string , value: string}\n | { type: 'CLEAR_SELECTED_FILTERS'}\n\n\ninterface CategoryPrediction {\n name: string,\n score: number\n}\n\nexport interface SearchState {\n results: any[]\n duration?: number\n requestId?: string\n sessionId?: string\n regions: Region[]\n selectedRegion: RectCoords\n fetchingRegions: boolean\n fetchingResults: boolean\n filterOptions: string[]\n requestImage?: CanvasWithId\n requestCadFile?: File\n categoryPredictions: CategoryPrediction[]\n codes: Code[],\n errorMessage: string,\n filters:Filter[],\n selectedFilters: Map<string, string[]>\n}\n\nconst initialState : SearchState = {\n results: [],\n regions: [],\n selectedRegion: {x1: 0.1, x2: 0.9, y1: 0.1, y2: 0.9},\n requestImage: undefined,\n fetchingResults: false,\n fetchingRegions: false,\n filterOptions: [],\n categoryPredictions: [],\n codes: [],\n errorMessage: '',\n filters: [],\n selectedFilters: new Map<string,string[]>()\n};\n\n\nexport const loadFile = (file: File ): SearchAction => ({ type: 'LOAD_FILE', file });\nexport const loadUrl = (url: string): SearchAction => ({ type: 'LOAD_IMAGE', url });\nexport const loadCanvas = (image: HTMLCanvasElement): SearchAction => ({ type: 'LOAD_IMAGE', image });\nexport const imageLoaded = (image: HTMLCanvasElement, id: string): SearchAction => ({ type: 'IMAGE_LOADED', image: {canvas: image, id: id} });\nexport const cadFileLoaded = (file: File, id: string): SearchAction => ({ type: 'CAD_LOADED', file});\nexport const selectionChanged = (normalizedRect: RectCoords) : SearchAction => ({ type: 'REGION_CHANGED', normalizedRect });\nexport const searchRegions = (image: HTMLCanvasElement): SearchAction => ({ type: 'REGION_REQUEST_START', image });\nexport const searchOffersForImage = (image: HTMLCanvasElement, normalizedRect?: RectCoords, selectedFilters?: Filter[]) : SearchAction => ({\n type: 'SEARCH_REQUEST_START',\n image,\n normalizedRect,\n selectedFilters\n});\nexport const searchOffersForCad = (file: File) : SearchAction => ({\n type: 'SEARCH_REQUEST_START',\n file\n});\nexport const submitPositiveFeedback = () : SearchAction => ({ type: 'FEEDBACK_SUBMIT_POSITIVE'});\nexport const submitNegativeFeedback = () : SearchAction => ({ type: 'FEEDBACK_SUBMIT_NEGATIVE'});\nexport const loadFilters = (): SearchAction => ({type: 'LOAD_FILTERS'});\nexport const addToSelectedFilters =(key: string , value: string): SearchAction => ({type : 'ADD_TO_SELECTEDFILTERS' , key , value});\nexport const removeFromSelectedFilters = (key: string, value: string) : SearchAction => ({type: 'REMOVE_FROM_SELECTEDFILTERS', key, value});\nexport const reducer = (state : SearchState = initialState, action: SearchAction) => {\n switch (action.type) {\n case \"IMAGE_LOADED\":\n let { image } = action;\n console.log('image', image)\n return {\n ...initialState,\n requestImage: image,\n selectedFilters: state.selectedFilters\n\n };\n case \"CAD_LOADED\":\n let { file } = action;\n return {\n ...initialState,\n requestCadFile: file\n }\n case 'REGION_REQUEST_START':\n return {\n ...state,\n fetchingRegions: true\n };\n case \"REGION_REQUEST_SUCCEED\":\n return {\n ...state,\n fetchingRegions: false,\n regions: action.regions,\n selectedRegion: selectFirstCenteredRegion(action.regions, 0.3, state.selectedRegion)\n };\n case \"REGION_REQUEST_FAIL\":\n return {\n ...state,\n fetchingRegions: false,\n errorMessage: action.exception.response.data.detail\n };\n case \"SEARCH_REQUEST_START\":\n return {\n ...state,\n fetchingResults: true\n };\n case \"SEARCH_REQUEST_SUCCEED\":\n let { results, requestId, duration, categoryPredictions, codes } = action;\n return {\n ...state,\n results,\n requestId,\n fetchingResults: false,\n sessionId: state.sessionId || requestId,\n categoryPredictions,\n codes,\n duration\n };\n case \"SEARCH_REQUEST_FAIL\":\n return {\n ...state,\n fetchingResults: false,\n errorMessage: action.reason\n };\n case \"REGION_CHANGED\":\n return {\n ...state,\n selectedRegion: action.normalizedRect\n };\n case \"LOAD_FILTERS_SUCCESS\":\n return {\n ...state, \n filters: action.filters\n };\n case \"LOAD_FILTERS_FAIL\":\n return {\n ...state,\n errorMessage: action.exception.response.data.detail\n }\n case \"ADD_TO_SELECTEDFILTERS\":\n return {\n ...state,\n selectedFilters : ADDtoSelectedfilters(state.selectedFilters, action.key, action.value)\n }\n case \"REMOVE_FROM_SELECTEDFILTERS\":\n return {\n ...state,\n selectedFilters : RemoveFromSelectedFilters(state.selectedFilters, action.key, action.value)\n }\n case \"CLEAR_SELECTED_FILTERS\":\n return {\n ...state,\n selectedFilters : new Map<string,string[]>()\n }\n\n }\n return state;\n};\n\n function ADDtoSelectedfilters(selectedFilters: Map<string, string[]>, key: string, value: string): Map<string, string[]> { \n if(selectedFilters) \n {\n let values = selectedFilters.get(key);\n if (values){\n values.push(value);\n }\n else\n {\n values = new Array<string>(value);\n }\n selectedFilters.set(key, values); \n } \n console.log(selectedFilters);\n return selectedFilters;\n}\n\nfunction RemoveFromSelectedFilters(selectedFilters: Map<string, string[]>, key: string, value: string): Map<string, string[]> {\n if(selectedFilters) \n {\n let values = selectedFilters.get(key);\n if (values) \n {\n values = values.filter(x => x!== value);\n selectedFilters.set(key, values); \n }\n \n } \n console.log(selectedFilters);\n return selectedFilters;\n}\n","import {AppAction} from \"../types\";\n\n\nexport type NyrisAppPart = 'start' | 'camera' | 'results';\nexport type NyrisFeedbackState = 'hidden' | 'question' | 'positive' | 'negative';\n\n\nexport interface NyrisAppState {\n showPart: NyrisAppPart,\n feedbackState: NyrisFeedbackState\n}\n\nexport type NyrisAction =\n | { type: 'SHOW_START' }\n | { type: 'SHOW_CAMERA' }\n | { type: 'SHOW_RESULTS' }\n | { type: 'SHOW_FEEDBACK' }\n | { type: 'HIDE_FEEDBACK' }\n | { type: 'RESULT_LINK_CLICKED', position: number, url: string}\n | { type: 'RESULT_IMAGE_CLICKED', position: number, url: string}\n\n\nexport const showCamera = () :NyrisAction => ({type: 'SHOW_CAMERA'});\nexport const showStart = () :NyrisAction => ({type: 'SHOW_START'});\nexport const showResults = () :NyrisAction => ({type: 'SHOW_RESULTS'});\nexport const showFeedback = () :NyrisAction => ({type: 'SHOW_FEEDBACK'});\nexport const hideFeedback = () :NyrisAction => ({type: 'HIDE_FEEDBACK'});\n\nconst initialNyrisState : NyrisAppState = {\n showPart: 'start',\n feedbackState: 'hidden'\n};\n\nexport function reducer(state : NyrisAppState = initialNyrisState, action: AppAction) : NyrisAppState {\n switch (action.type) {\n case 'SHOW_START':\n return {\n ...state,\n showPart: 'start'\n };\n case 'SHOW_CAMERA':\n return {\n ...state,\n showPart: 'camera'\n };\n case 'SEARCH_REQUEST_START':\n case 'REGION_REQUEST_START':\n case 'SHOW_RESULTS':\n return {\n ...state,\n showPart: 'results'\n };\n case 'SHOW_FEEDBACK':\n return {\n ...state,\n feedbackState: 'question'\n };\n case 'HIDE_FEEDBACK':\n return {\n ...state,\n feedbackState: 'hidden'\n };\n case 'FEEDBACK_SUBMIT_POSITIVE':\n return {\n ...state,\n feedbackState: 'positive'\n };\n case 'FEEDBACK_SUBMIT_NEGATIVE':\n return {\n ...state,\n feedbackState: 'negative'\n };\n default:\n return state;\n }\n}\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')\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}\n\nexport function getThumbSizeLongestEdge(maxW: number, maxH: number, iW: number, iH: number): 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\n","import {AppSettings} from \"./types\";\n\nexport const defaultSettings : AppSettings = {\n\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};\n\nexport const defaultMdSettings = {\n appBarLogoUrl: 'images/nyris-logo.svg',\n appBarCustomBackgroundColor: '#f4f4f4',\n appBarCustomTextColor: '#ccc',\n appBarTitle: '',\n primaryColor: '#e2001a',\n secondaryColor: '#777777',\n\n resultFirstRowProperty: 'title',\n resultSecondRowProperty: 'sku',\n resultLinkText: 'Info',\n\n customFontFamily: 'Helvetica',\n};\n","import {combineEpics, ofType} from \"redux-observable\";\nimport {debounceTime, ignoreElements, tap, withLatestFrom} from \"rxjs/operators\";\nimport {EpicConf} from \"./types\";\n\nconst feedbackSuccessEpic: EpicConf = (action$, state$, {api}) => action$.pipe(\n ofType('FEEDBACK_SUBMIT_POSITIVE', \"FEEDBACK_SUBMIT_NEGATIVE\"),\n withLatestFrom(state$),\n tap(async ([{type}, state]) => {\n const success = type === 'FEEDBACK_SUBMIT_POSITIVE';\n const sessionId = state.search.sessionId || state.search.requestId;\n if (sessionId && state.search.requestId) {\n await api.sendFeedback(sessionId, state.search.requestId, {\n event: 'feedback', data: {success}\n });\n }\n }),\n ignoreElements()\n);\n\nconst feedbackRegionEpic: EpicConf = (action$, state$, {api}) => action$.pipe(\n ofType('REGION_CHANGED'),\n debounceTime(1200),\n withLatestFrom(state$),\n tap(async ([action, state]) => {\n if (action.type === 'REGION_CHANGED') {\n let {normalizedRect: {x1, x2, y1, y2}} = action;\n const sessionId = state.search.sessionId || state.search.requestId;\n if (sessionId && state.search.requestId) {\n await api.sendFeedback(sessionId, state.search.requestId, {\n event: 'region', data: {rect: {x: x1, y: y1, w: x2 - x1, h: y2 - y1}}\n });\n }\n }\n }),\n ignoreElements()\n);\n\nconst feedbackClickEpic: EpicConf = (action$, state$, {api}) => action$.pipe(\n ofType('RESULT_LINK_CLICKED', 'RESULT_IMAGE_CLICKED'),\n withLatestFrom(state$),\n tap(async ([action, state]) => {\n if (action.type === 'RESULT_LINK_CLICKED' || action.type === 'RESULT_IMAGE_CLICKED') {\n let {position} = action;\n const sessionId = state.search.sessionId || state.search.requestId;\n if (sessionId && state.search.requestId) {\n await api.sendFeedback(sessionId, state.search.requestId, {\n event: 'click', data: {positions: [position]}\n });\n }\n }\n }),\n ignoreElements()\n);\n\nexport default combineEpics(\n feedbackSuccessEpic,\n feedbackRegionEpic,\n feedbackClickEpic\n);\n","import {EpicConf} from \"./types\";\nimport {combineEpics, ofType} from \"redux-observable\";\nimport {switchMap, withLatestFrom} from \"rxjs/operators\";\nimport {AppAction} from \"../types\";\nimport {ImageSearchOptions, urlOrBlobToCanvas, isCadFile, isImageFile, Filter } from \"@nyris/nyris-api\";\nimport {imageLoaded, cadFileLoaded} from \"../actions/searchActions\";\n\nconst imageSearch: EpicConf = (action$, state$, {api}) => action$.pipe(\n ofType('SEARCH_REQUEST_START'),\n withLatestFrom(state$),\n switchMap(async ([action, state]) : Promise<AppAction> => {\n if (action.type !== 'SEARCH_REQUEST_START') {\n throw new Error(`Wrong action type ${action.type}`);\n }\n console.log(\"state search \");\n console.log(state.search.selectedFilters);\n \n if ('image' in action) {\n let { image, normalizedRect} = action;\n console.log(\"Selected Filters\");\n let selectedFilters = new Array<Filter>();\n if(state.search.selectedFilters.size > 0 ){ \n state.search.selectedFilters.forEach((values, key) => {\n let filterObj: Filter ={\n key : key,\n values : values\n }\n selectedFilters.push(filterObj);\n });\n }\n \n let options : ImageSearchOptions = {\n cropRect: normalizedRect\n };\n\n try {\n if(selectedFilters && selectedFilters.length> 0)\n {\n console.log(\"With Filters\");\n const {results, duration, requestId, categoryPredictions, codes} = await api.findByImageWithFilters(image, options, selectedFilters);\n return ({ type: 'SEARCH_REQUEST_SUCCEED', results, requestId, duration, categoryPredictions, codes });\n \n }\n else{\n console.log(\"Without Filters\");\n const {results, duration, requestId, categoryPredictions, codes} = await api.findByImage(image, options);\n return ({ type: 'SEARCH_REQUEST_SUCCEED', results, requestId, duration, categoryPredictions, codes }); \n }\n } catch (e) {\n console.warn('search failed', e);\n return ({ type: 'SEARCH_REQUEST_FAIL', reason: e.message, exception: e });\n }\n }\n\n if ('file' in action) {\n console.log('file');\n let { file } = action;\n\n let options : ImageSearchOptions = { };\n\n try {\n const {results, duration, requestId, categoryPredictions, codes} = await api.findByCad(file, options);\n return ({ type: 'SEARCH_REQUEST_SUCCEED', results, requestId, duration, categoryPredictions, codes });\n } catch (e) {\n console.warn('search failed', e);\n return ({ type: 'SEARCH_REQUEST_FAIL', reason: e.message, exception: e });\n }\n }\n throw new Error(`Wrong action content ${action}`);\n })\n);\n\nconst regionSearch: EpicConf = (action$, state$, {api}) => action$.pipe(\n ofType('REGION_REQUEST_START'),\n withLatestFrom(state$),\n switchMap(async ([action, {settings}]) : Promise<AppAction> => {\n if (action.type !== 'REGION_REQUEST_START') {\n throw new Error(`Wrong action type ${action.type}`);\n }\n\n let { image } = action;\n\n try {\n let regions = await api.findRegions(image);\n return {type: 'REGION_REQUEST_SUCCEED', regions };\n\n } catch (e) {\n console.error(e);\n return {type: 'REGION_REQUEST_FAIL', reason: e.message, exception: e};\n }\n })\n);\n\nconst loadFile: EpicConf = (action$) => action$.pipe(\n ofType('LOAD_FILE'),\n switchMap(async (action) : Promise<AppAction> => {\n if (action.type !== 'LOAD_FILE') {\n throw new Error(`Wrong action type ${action.type}`);\n }\n const randomId = Math.random().toString();\n if ('file' in action) {\n const file = action.file;\n if (isImageFile(file)) {\n return imageLoaded(await urlOrBlobToCanvas(file), randomId);\n }\n if (isCadFile(file)) {\n return cadFileLoaded(file, randomId);\n }\n }\n throw new Error(`LOAD_FILE action wrong properties ${Object.keys(action).join(',')}`);\n })\n);\n\nconst loadImage: EpicConf = (action$) => action$.pipe(\n ofType('LOAD_IMAGE'),\n switchMap(async (action) : Promise<AppAction> => {\n if (action.type !== 'LOAD_IMAGE') {\n throw new Error(`Wrong action type ${action.type}`);\n }\n const randomId = Math.random().toString();\n if ('url' in action) {\n return imageLoaded(await urlOrBlobToCanvas(action.url), randomId);\n }\n if ('file' in action) {\n return imageLoaded(await urlOrBlobToCanvas(action.file), randomId);\n }\n if ('image' in action) {\n return imageLoaded(action.image, randomId);\n }\n throw new Error(`LOAD_IMAGE action wrong properties ${Object.keys(action).join(',')}`);\n })\n);\n\n\nconst loadFilters: EpicConf = (action$, state$, {api}) => action$.pipe(\n ofType('LOAD_FILTERS'),\n withLatestFrom(state$),\n switchMap(async ([action, state]) : Promise<AppAction> => {\n if(action.type !== 'LOAD_FILTERS'){\n throw new Error(`Wrong action type ${action.type}`);\n }\n try {\n // use find filters\n\n let filters = await api.getFilters();\n \n filters= filters.slice(0, 3);\n console.log(filters); \n return {type: 'LOAD_FILTERS_SUCCESS', filters };\n\n } catch (e) {\n console.error(e);\n return {type: 'LOAD_FILTERS_FAIL', reason: e.message, exception: e};\n }\n })\n);\n\n\nexport default combineEpics(\n imageSearch,\n regionSearch,\n loadFile,\n loadImage,\n loadFilters);\n","import {combineEpics, ofType} from \"redux-observable\";\nimport {debounceTime, delay, ignoreElements, map, switchMap, tap, withLatestFrom} from \"rxjs/operators\";\nimport {showFeedback, showResults} from \"../actions/nyrisAppActions\";\nimport {EpicConf} from \"./types\";\nimport feedbackEpics from \"./feedback\";\nimport searchEpics from \"./search\";\nimport {searchOffersForImage, searchOffersForCad, searchRegions} from \"../actions/searchActions\";\nimport {AppAction} from \"../types\";\nimport {selectFirstCenteredRegion} from \"@nyris/nyris-api\";\n\n\n\nconst historyEpic: EpicConf = (action$, state$, {history}) => action$.pipe(\n ofType('SHOW_RESULTS', 'SHOW_START'),\n withLatestFrom(state$),\n tap(([action, state]) => {\n let { type } = action;\n console.log(\"action\");\n console.log(state.search.selectedFilters);\n // action to clear all filters\n if (type === 'SHOW_RESULTS' && history.location.pathname !== '/results') {\n history.push('/results');\n }\n if (type === 'SHOW_START' && history.location.pathname !== '/') {\n \n history.goBack();\n }\n }),\n ignoreElements()\n);\n\nconst onSearchSuccessShowResults: EpicConf = (action$) => action$.pipe(\n ofType('SEARCH_REQUEST_SUCCEED'),\n map(showResults)\n);\n\nconst onSearchSuccessRedirectToSite: EpicConf = (action$, state$) => action$.pipe(\n ofType('SEARCH_REQUEST_SUCCEED'),\n withLatestFrom(state$),\n tap(([action, {settings}]) => {\n if (action.type !== 'SEARCH_REQUEST_SUCCEED' || !action.results || action.results.length !== 1) {\n return;\n }\n\n const firstLink = action.results[0].l;\n const instantRedirectPatterns = settings.instantRedirectPatterns;\n if (!instantRedirectPatterns.find(r => new RegExp(r).test(firstLink))) {\n return;\n }\n window.location.href = firstLink;\n }),\n ignoreElements()\n);\n\nconst onSearchSuccessShowFeedbackDelayed: EpicConf = (action$) => action$.pipe(\n ofType('SEARCH_REQUEST_SUCCEED'),\n delay(3000),\n map(showFeedback)\n);\n\n\nconst startSearchOnImageLoaded: EpicConf = (action$, state$) => action$.pipe(\n ofType('IMAGE_LOADED'),\n withLatestFrom(state$),\n switchMap(async ([action, {settings}]) : Promise<AppAction> => {\n if (action.type !== 'IMAGE_LOADED') {\n throw new Error(`Wrong action type ${action.type}`);\n }\n\n let { image } = action;\n \n if (settings.regions) {\n return searchRegions(image.canvas);\n }\n return searchOffersForImage(image.canvas);\n })\n);\n\nconst startSearchOnCadLoaded: EpicConf = (action$, state$) => action$.pipe(\n ofType('CAD_LOADED'),\n withLatestFrom(state$),\n switchMap(async ([action, {settings}]) : Promise<AppAction> => {\n if (action.type !== 'CAD_LOADED') {\n throw new Error(`Wrong action type ${action.type}`);\n }\n let { file } = action;\n return searchOffersForCad(file);\n })\n);\n\nconst startSearchOnRegionsSuccessful: EpicConf = (action$, state$) => action$.pipe(\n ofType('REGION_REQUEST_SUCCEED'),\n withLatestFrom(state$),\n switchMap(async ([action, { search: { requestImage}}]) : Promise<AppAction> => {\n if (action.type !== 'REGION_REQUEST_SUCCEED') {\n throw new Error(`Wrong action type ${action.type}`);\n }\n if (!requestImage) {\n throw new Error(`No requestImage`);\n }\n let { regions } = action;\n\n let selection = selectFirstCenteredRegion(regions, 0.3, {x1: 0, x2: 1, y1: 0, y2: 1});\n return searchOffersForImage(requestImage.canvas, selection);\n })\n);\n\nconst startSearchOnRegionsFailed: EpicConf = (action$, state$) => action$.pipe(\n ofType('REGION_REQUEST_FAIL'),\n withLatestFrom(state$),\n switchMap(async ([action, { search: { requestImage}}]) : Promise<AppAction> => {\n if (action.type !== 'REGION_REQUEST_FAIL') {\n throw new Error(`Wrong action type ${action.type}`);\n }\n if (!requestImage) {\n throw new Error(`No requestImage`);\n }\n\n return searchOffersForImage(requestImage.canvas);\n })\n);\n\nconst startSearchOnRegionChange: EpicConf = (action$, state$) => action$.pipe(\n ofType('REGION_CHANGED'),\n debounceTime(1200),\n withLatestFrom(state$),\n switchMap(async ([action, { search: { requestImage}}]) : Promise<AppAction> => {\n if (action.type !== 'REGION_CHANGED') {\n throw new Error(`Wrong action type ${action.type}`);\n }\n if (!requestImage) {\n throw new Error(`No requestImage`);\n }\n let { normalizedRect } = action;\n return searchOffersForImage(requestImage.canvas, normalizedRect);\n })\n);\n\n\nconst rootEpic = combineEpics(\n searchEpics,\n feedbackEpics,\n historyEpic,\n startSearchOnImageLoaded,\n startSearchOnCadLoaded,\n startSearchOnRegionsSuccessful,\n startSearchOnRegionsFailed,\n startSearchOnRegionChange,\n onSearchSuccessShowResults,\n onSearchSuccessShowFeedbackDelayed,\n onSearchSuccessRedirectToSite\n);\n\nexport default rootEpic;\n","import React from 'react';\nimport {OfferNyrisResult as ResultData} from \"@nyris/nyris-api\";\n\n// TODO this needs refactoring: Make it one block with parameters for first line, second line, image url ..\n\ninterface Options {\n result: any,\n noImageUrl: string,\n onImageClick: (e: React.MouseEvent) => void,\n onLinkClick: (e: React.MouseEvent) => void\n}\n\nconst renderPrice = (result: ResultData) =>\n result.p ? '' + (result.p.vi / 100).toFixed(2) + ' ' + result.p.c : '';\n\nconst renderDefault = ({result, noImageUrl, onImageClick, onLinkClick}: Options) => {\n return (\n <>\n <a href={result.l} className=\"imageLink\" title=\"Click the image so see similar products\"\n onClick={onImageClick}\n onAuxClick={onLinkClick}>\n <div className=\"prdctImg\">\n <div className=\"imgWrap\">\n <img src={(result.img && result.img.url + '?r=512x512') || noImageUrl} alt={result.title}/>\n </div>\n </div>\n </a>\n <div className=\"prdctDetailsWrap\">\n <div>\n <div className=\"prdctTitle\">{result.title}</div>\n <div className=\"prdctMeta\">\n <span className=\"prdctPrice\">{renderPrice(result)}</span>\n </div>\n <a onClick={onLinkClick} onAuxClick={onLinkClick} className=\"prdctShopLink\" href={result.l}\n target=\"_blank\" rel=\"noopener noreferrer\">Buy Now</a>\n </div>\n </div>\n </>\n );\n};\n\nconst renderSnr = ({result, noImageUrl, onImageClick, onLinkClick}: Options) => (\n <>\n <a href={result.l} className=\"imageLink\" onClick={onImageClick} onAuxClick={onLinkClick}>\n <div className=\"prdctImg\">\n <div className=\"imgWrap\">\n <img src={(result.img && result.img.url + '?r=512x512') || noImageUrl} alt={result.title}/>\n </div>\n </div>\n </a>\n <div className=\"prdctDetailsWrap\">\n <div>\n <div className=\"prdctTitle\">{result.sku}</div>\n <div className=\"prdctMeta\" style={{height: '5em', whiteSpace: 'normal'}}>\n {result.title}\n </div>\n <a style={{backgroundImage: 'none', paddingLeft: '10px'}} className=\"prdctShopLink\" href={result.l}\n target=\"_blank\" rel=\"noopener noreferrer\"\n onClick={onLinkClick} onAuxClick={onLinkClick}>Info</a>\n </div>\n </div>\n </>\n);\n\nconst renderSnrMultilink = ({result, noImageUrl, onImageClick}: Options, onLinkClick: (url: string) => void) => (\n <>\n <a href={result.l} className=\"imageLink\"\n onClick={onImageClick} onAuxClick={onImageClick}>\n <div className=\"prdctImg\">\n <div className=\"imgWrap\">\n <img src={(result.img && result.img.url + '?r=512x512') || noImageUrl} alt={result.title}/>\n </div>\n </div>\n </a>\n <div className=\"prdctDetailsWrap\">\n <div>\n <div className=\"prdctTitle\">{result.sku}</div>\n <div className=\"prdctMeta\" style={{height: '5em', whiteSpace: 'normal'}}>\n {result.title}\n </div>\n {result.l.map((l: { text: string, href: string }) =>\n <a style={{backgroundImage: 'none', paddingLeft: '10px'}} className=\"prdctShopLink\" href={l.href}\n onClick={() => onLinkClick(l.href)} onAuxClick={() => onLinkClick(l.href)} target=\"_blank\"\n key={l.href}\n rel=\"noopener noreferrer\">{l.text}</a>\n )}\n </div>\n </div>\n </>\n);\n\nexport interface ResultProps {\n result: any,\n style: any,\n template?: string,\n onImageClick: (pos: number, url: string) => void,\n onLinkClick: (pos: number, url: string) => void,\n noImageUrl?: string\n}\n\nconst Result: React.FC<ResultProps> = ({result, style, template, onImageClick, onLinkClick, noImageUrl}) => {\n let options: Options = {\n onImageClick: (e: React.MouseEvent) => {\n e.preventDefault();\n onImageClick(result.position, result.img.url);\n },\n onLinkClick: (e: React.MouseEvent) => {\n e.preventDefault();\n onLinkClick(result.position, result.l);\n },\n noImageUrl: noImageUrl || 'images/ic_cam_large_noimage.png',\n result\n };\n\n let resultInner = null;\n switch (template) {\n case \"snr\":\n resultInner = renderSnr(options);\n break;\n case \"snr-multilink\":\n resultInner = renderSnrMultilink(options, (url) => onLinkClick(result.position, url));\n break;\n case 'default':\n default:\n resultInner = renderDefault(options);\n break;\n }\n\n return (\n <div className=\"prdctItem\" style={{...style}}>\n {resultInner}\n </div>\n );\n};\n\n\nexport default Result;\n","\nimport React from 'react';\nimport {Filter} from '../../../nyris-api/index';\nimport { addToSelectedFilters, removeFromSelectedFilters } from '../actions/searchActions';\nimport { useDispatch } from 'react-redux';\nimport { RiLayoutGridLine} from 'react-icons/ri';\n\ninterface FilterProps {\n filter : Filter,\n selectedValues?: string[]\n}\n\n\n\nconst FiltersList : React.FC<FilterProps> = ({filter, selectedValues})=>{\n const dispatch = useDispatch();\n\n const onFilterChanged=(e: React.ChangeEvent<HTMLInputElement>,value:string) =>{ \n if (e.target.checked) {\n if(filter.key)\n dispatch(addToSelectedFilters(filter.key , value));\n } else {\n if(filter.key)\n dispatch(removeFromSelectedFilters(filter.key, value));\n }\n }\n \n if(filter && filter.values && filter.key && filter.values.length > 0){ \n \n return (\n <div>\n <div className='item'>\n <RiLayoutGridLine className=\"sidebar-icon\" />\n <span className=\"sidebar-text\"> {filter.key}</span>\n </div>\n \n <div className='item'>\n <div className=\"list-container\">\n \n {filter.values.slice(0, 6).map((item, index) => { \n const checked = selectedValues && selectedValues.includes(item); \n return ( \n \n <div key={index}>\n \n <input value={item} checked={checked ? true: false} type=\"checkbox\" onChange={(e)=>onFilterChanged(e,item)} /> \n <label className='itemLabel'>{item}</label>\n </div>\n )\n })}\n </div> \n </div>\n \n </div>\n\n );\n }\n else{\n return (\n <div>\n No filter to load\n </div>\n );\n } \n}\n\nexport default FiltersList;","import React, { useState } from 'react';\nimport {RiMenuLine} from 'react-icons/ri';\nimport { Filter } from '../../../nyris-api/index';\nimport FiltersList from './FiltersList';\n\ninterface SidebarProps {\n filters: Filter[],\n selectedFilters: Map<string, string[]>\n}\n\nconst Sidebar: React.FC<SidebarProps> = ({filters, selectedFilters}) =>{\n const [isExpanded, setIsExpanded] = useState(false);\n const handleToggler =()=>{\n if(isExpanded){\n setIsExpanded(false);\n return;\n }\n setIsExpanded(true);\n }\n return (\n\n <div className={isExpanded ? \"sidebar\" : \"Sidebar collapsed\"}>\n <div className=\"sidebarContent\" >\n <div className=\"sidebarHeader\">\n <RiMenuLine className=\"sidebar-icon\" onClick={handleToggler}/>\n <h1 className={isExpanded ? \"sidebar-logo\" : \"sidebar-logo collapsedHide\"}> Select Filters </h1>\n </div>\n <div className={isExpanded ? \"Sidebar-items\" : \"Sidebar-items collapsedHide\"}>\n {filters && filters.map((x) => {\n let selectedValues = x.key ? selectedFilters.get(x.key): undefined\n return <FiltersList filter={x} selectedValues={selectedValues}/>\n })\n } \n </div>\n </div> \n </div>\n \n \n )\n}\n\nexport default Sidebar","import React from \"react\";\n\nconst Header = () =>{\nreturn (\n <div id=\"header\">\n \n <section id=\"branding\"></section>\n <div id=\"menu\" className=\"menuWrap\" role=\"navigation\" >\n <ul>\n <li><a href=\"https://nyris.io/imprint/#privacy\" target=\"_blank\"\n rel=\"noopener noreferrer\">Privacy Policy</a></li>\n <li><a href=\"https://nyris.io/\" target=\"_blank\" rel=\"noopener noreferrer\">Visit our\n Website</a></li>\n </ul>\n </div>\n</div>\n);\n\n}\nexport default Header;","import React from 'react';\nimport {NyrisFeedbackState} from \"../actions/nyrisAppActions\";\nimport {Animate} from \"react-move\";\n\ninterface FeedbackProps {\n feedbackState: NyrisFeedbackState,\n onPositiveFeedback?: () => void,\n onNegativeFeedback?: () => void,\n onClose?: () => void\n}\n\nconst Feedback: React.FC<FeedbackProps> = ({feedbackState, onPositiveFeedback, onNegativeFeedback, onClose}) => {\n let inner : any = null;\n switch (feedbackState) {\n case 'question':\n inner =\n <div className=\"feedbackForm\">\n <p>Did you find what you were looking for?</p>\n <div className=\"btn primary positiveFeedback\" onClick={onPositiveFeedback}>Yes</div>\n <div className=\"btn secondary negativeFeedback\" onClick={onNegativeFeedback}>No</div>\n </div>;\n break;\n case 'positive':\n inner = <div className=\"feedbackMessage positive\">Great, thank you for your feedback!</div>\n break;\n case 'negative':\n inner =\n <div className=\"feedbackMessage negative\">We saved your request so we can track down the\n issue and improve the search experience. Your Feedback helps us to make our service\n better for everyone,\n thank you!<br/>\n <div className=\"btn dismiss\" onClick={onClose}>Dismiss</div>\n </div>;\n break;\n default:\n inner = null;\n break;\n }\n return (\n <Animate show={feedbackState !== 'hidden'} start={{y: 100, opacity: 0}} enter={{y: [0], opacity: [1]}} leave={{y: [100], opacity: [0] }}>\n {({y, opacity}) =>\n <section className=\"feedback\" style={{transform: `translateY(${y}%)`, opacity }}>\n <div className=\"wrapper\">\n {inner}\n </div>\n <div className=\"closeFeedbackContainer\">\n <div className=\"closeFeedback\" onClick={onClose}/>\n </div>\n </section>\n }\n </Animate>\n );\n};\n\nexport default Feedback;\n","import React from 'react';\n\n\nconst CategoryFilter = ({cats}: {cats: string[]}) => {\n if (cats.length === 0) {\n return null;\n }\n return (\n <div id=\"catlist\" style={{'textAlign': 'center'}}>\n {\n cats.map((s) => <a key={s} href=\"#top\">{s}</a>) // TODO fix link\n }\n </div>\n );\n};\n\nexport default CategoryFilter;\n","import React from 'react';\nimport {Code} from '@nyris/nyris-api';\n\ninterface Props {\n codes: Code[]\n}\nconst Codes = ({codes}: Props) =>\n <>\n <div className=\"codes\" style={{textAlign: 'center'}}>\n {codes.length > 0 && <span style={{fontSize: '0.8em'}}>Codes<br/> </span> }\n {codes.map((c, i) =>\n <small key={i} title={c.type}>\n {c.value}\n </small>)}\n </div>\n </>\n;\n\n\nexport default Codes;\n","import React from 'react';\n\nconst PredictedCategories = ({cs}: {cs: {name: string, score: number}[]}) =>\n <>\n {cs.map((c) =>\n <small key={c.name}>\n {c.name === \"\" ? \"No category\" : c.name.split(\" > \").slice(-1)[0]}:\n {(c.score * 100).toFixed(0)}%\n </small>)}\n </>\n;\n\n\nexport default PredictedCategories;\n","import React from 'react';\n\ninterface ExampleImagesProps {\n images: string[],\n onExampleImageClicked: (url: string) => void\n}\n\nconst ExampleImages : React.FC<ExampleImagesProps> = ({images, onExampleImageClicked}) => {\n if (images.length === 0) {\n return null;\n }\n return (\n <section className=\"useExampleImg\">\n You can also try one of these pictures:\n <div className=\"exampleImages\">\n <div className=\"exImagesWrap\">\n {images.map((i) => (<img key={i} src={i} alt=\"\" onClick={() => onExampleImageClicked(i)}/>))}\n </div>\n </div>\n </section>\n );\n};\n\nexport default ExampleImages;\n","import React, { useEffect, useState } from \"react\";\nimport { useDispatch } from \"react-redux\";\nimport { Animate, NodeGroup } from \"react-move\";\nimport { useDropzone} from \"react-dropzone\";\nimport {\n Box,\n Snackbar\n} from \"@material-ui/core\";\nimport { Alert } from \"@material-ui/lab\";\nimport classNames from \"classnames\";\nimport { loadFilters } from \"./actions/searchActions\";\nimport Result from \"./components/Result\";\nimport Sidebar from \"./components/Sidebar\";\nimport Header from \"./components/Header\";\nimport Feedback from \"./components/Feedback\";\nimport CategoryFilter from \"./components/CategoryFilter\";\nimport Codes from \"./components/Codes\";\nimport PredictedCategories from \"./components/PredictedCategories\";\nimport ExampleImages from \"./components/ExampleImages\";\nimport {makeFileHandler, Capture, Preview} from \"@nyris/nyris-react-components\";\nimport { RectCoords, cadExtensions, CategoryPrediction, Code, Region, Filter} from \"@nyris/nyris-api\";\nimport { AppSettings, CanvasWithId, MDSettings } from \"./types\";\nimport { NyrisAppPart, NyrisFeedbackState } from \"./actions/nyrisAppActions\";\n\nexport interface AppHandlers {\n onExampleImageClick: (url: string) => void,\n onImageClick: (position: number, url: string) => void,\n onLinkClick: (position: number, url: string) => void,\n onFileDropped: (file: File) => void,\n onCaptureComplete: (image: HTMLCanvasElement) => void,\n onCaptureCanceled: () => void,\n onSelectFile: (f: File) => void,\n onCameraClick: () => void,\n onShowStart: () => void,\n onSelectionChange: (r: RectCoords) => void,\n onPositiveFeedback: () => void,\n onNegativeFeedback: () => void,\n onCloseFeedback: () => void\n}\nexport interface AppProps {\n search: {\n results: any[],\n requestId?: string,\n duration?: number,\n categoryPredictions: CategoryPrediction[],\n codes: Code[],\n filterOptions: string[],\n errorMessage?: string,\n regions: Region[],\n previewSelection: RectCoords,\n toastErrorMessage?: string,\n filters: Filter[],\n selectedFilters: Map<string,string[]>\n },\n previewImage?: CanvasWithId,\n settings: AppSettings,\n loading: boolean,\n showPart: NyrisAppPart,\n feedbackState: NyrisFeedbackState,\n handlers: AppHandlers,\n mdSettings: MDSettings\n}\n\nconst Demo2: React.FC<AppProps> = ({\n search: {results, regions, previewSelection, requestId, duration, errorMessage, filterOptions, categoryPredictions, codes, toastErrorMessage, filters, selectedFilters},\n showPart, settings, handlers, loading, previewImage, feedbackState\n}) => {\n \n const {getRootProps, getInputProps, isDragActive} = useDropzone({onDrop: (fs: File[]) => handlers.onFileDropped(fs[0])});\n \n const minPreviewHeight = 400;\n const halfOfTheScreenHeight = Math.floor(window.innerHeight * 0.45);\n const maxPreviewHeight = Math.max(minPreviewHeight, halfOfTheScreenHeight);\n const [toastOpen, setToastOpen] = useState(false);\n const dispatch = useDispatch();\n\n const acceptTypes =[ 'image/*' ].concat( settings.cadSearch ? cadExtensions : [] ).join(',');\n\n\n useEffect(() => {\n if (toastErrorMessage !== '') {\n setToastOpen(true);\n }\n }, [toastErrorMessage])\n \n useEffect(() =>{\n dispatch(loadFilters());\n }, [showPart, dispatch])\n \n return (\n <React.Fragment>\n <Header/>\n <div className=\"wrapperBody\"> \n <Sidebar filters={filters} selectedFilters={selectedFilters}/>\n \n <div className=\"mainContent\">\n {showPart === 'camera' &&\n <Capture onCaptureComplete={handlers.onCaptureComplete} onCaptureCanceled={handlers.onCaptureCanceled}\n useAppText='Use default camera app'/>}\n\n \n <div className={classNames('headSection', {hidden: showPart === 'results'})} id=\"headSection\"> \n <div {...getRootProps({\n onClick: e => {\n e.stopPropagation();\n }\n })} className={classNames('wrapper', 'dragAndDropActionArea', {'fileIsHover': isDragActive})}>\n \n <div className={classNames('contentWrap')}>\n <Box display=\"flex\" flexDirection=\"column\" justifyContent=\"center\" alignItems=\"center\" minHeight=\"100vh\">\n <section className=\"uploadImage\">\n <input type=\"button\" name=\"file\" id=\"capture\" className=\"inputfile\" accept=\"image/*\"\n capture=\"environment\" onClick={handlers.onCameraClick}/>\n <input type=\"file\" name=\"file\" id=\"capture_file\" className=\"inputfile\" accept={acceptTypes}\n capture=\"environment\"/>\n <input {...getInputProps()} type=\"file\" name=\"file\" id=\"select_file\" className=\"inputfile\"\n accept={acceptTypes}\n onChange={makeFileHandler(handlers.onSelectFile)}\n />\n <div className=\"onDesktop\">\n Drop an image\n <div className=\"smallText\">or</div>\n </div>\n <div className=\"onMobile camIcon\">\n <img src=\"./images/ic_cam_large.svg\" alt=\"Camera\"/>\n </div>\n <label htmlFor=\"capture\" className=\"btn primary onMobile\"\n style={{marginBottom: '2em', width: '12em'}}>\n <span className=\"onMobile\">Take a picture</span>\n </label>\n <br/>\n <label htmlFor=\"select_file\" className=\"btn primary\" style={{width: '12em'}}>\n <span>Select a file</span>\n </label>\n <label htmlFor=\"capture\" className=\"mobileUploadHandler onMobile\"/>\n </section>\n <ExampleImages images={settings.exampleImages} onExampleImageClicked={handlers.onExampleImageClick}/>\n \n </Box>\n </div>\n </div>\n \n <div className=\"headerSeparatorTop\"/>\n <div className=\"headerSeparatorBack\"/>\n <div className={classNames('tryDifferent', {hidden: showPart !== 'results'})}\n onClick={handlers.onShowStart}>\n <div className=\"icIcon\">\n </div>\n <div className=\"textDesc\"> Try a different image</div>\n <br style={{clear: 'both'}}/>\n </div>\n </div>\n \n <section className={classNames({hideResults: showPart !== 'results'},'results', {resultsActive: showPart === 'results'}, (results.length === 1 ? 'singleProduct' : 'multipleProducts'))}>\n {errorMessage &&\n <div className=\"errorMsg\">\n {errorMessage}\n <div style={{textAlign: 'center', fontSize: '0ß.7em', paddingTop: '0.8em'}}><span>Make sure to include the request ID when reporting a problem: {requestId}</span>\n </div>\n </div>\n }\n <Animate show={loading} start={{opacity: 0.0}} enter={{opacity: [1.0], timing: {duration: 300}}}\n leave={{opacity: [0.0], timing: {duration: 300}}}>\n {s =>\n <div className=\"loadingOverlay\" style={{...s}}>\n <div className=\"loading\"/>\n </div>\n }\n </Animate>\n {settings.preview && previewImage &&\n <div className=\"preview\">\n <Preview key={previewImage.id}\n maxWidth={document.body.clientWidth} maxHeight={maxPreviewHeight}\n dotColor=\"#4C8F9F\"\n onSelectionChange={handlers.onSelectionChange} regions={regions}\n selection={previewSelection} image={previewImage.canvas}/>\n </div>\n }\n <div className=\"predicted-categories\">\n <PredictedCategories cs={categoryPredictions}/>\n </div>\n <div className=\"predicted-categories\">\n <Codes codes={codes}/>\n </div>\n <CategoryFilter cats={filterOptions}/>\n\n <div className=\"wrapper\">\n <NodeGroup data={results}\n keyAccessor={r => r.sku}\n start={(r, i) => ({opacity: 0, translateX: -100})}\n enter={(r, i) => ({\n opacity: [1],\n translateX: [0],\n timing: {delay: i * 100, duration: 300}\n })}\n >\n {rs => <>{rs.map(({key, data, state}) => <Result\n key={key}\n noImageUrl={settings.noImageUrl}\n template={settings.resultTemplate}\n onImageClick={handlers.onImageClick}\n onLinkClick={handlers.onLinkClick}\n result={data}\n style={{opacity: state.opacity, transform: `translateX(${state.translateX}%)`}}/>)}</>}\n </NodeGroup>\n\n {results.length === 0 && showPart === 'results' && !loading && (\n\n <div className=\"noResults\">We did not find anything <span role=\"img\"\n aria-label=\"sad face\">😕</span></div>\n )}\n\n <br style={{clear: 'both'}}/>\n\n {duration && showPart === 'results' && (<div style={{textAlign: 'center', fontSize: '0.7em', paddingTop: '0.8em'}}>Search\n took {duration.toFixed(2)} seconds</div>)}\n\n {requestId && showPart === 'results' && <div style={{textAlign: 'center', fontSize: '0.7em', paddingTop: '0.8em'}}>Request\n identifier {requestId}</div>}\n </div>\n </section>\n\n <Snackbar open={toastOpen} autoHideDuration={3000} onClose={() => setToastOpen(false)}>\n <Alert onClose={() => setToastOpen(false)} severity=\"error\">\n {toastErrorMessage}\n </Alert>\n </Snackbar> \n \n </div>\n </div> \n <section className=\"footnote\">\n <div className=\"wrapper\">\n © 2017 - 2019 <a href=\"https://nyris.io\">nyris GmbH</a> - All rights reserved - <a\n href=\"https://nyris.io/imprint/\">Imprint</a>\n </div>\n </section>\n <Feedback feedbackState={feedbackState} onPositiveFeedback={handlers.onPositiveFeedback}\n onNegativeFeedback={handlers.onNegativeFeedback} onClose={handlers.onCloseFeedback}/>\n \n </React.Fragment>\n );\n}\n\nexport default Demo2;\n","// Some people are still using internet explorer\nimport 'react-app-polyfill/ie11';\nimport 'react-app-polyfill/stable';\n\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport './index.css';\nimport AppMD from './AppMD';\nimport * as serviceWorker from './serviceWorker';\n\nimport {connect, Provider} from 'react-redux';\nimport {applyMiddleware, bindActionCreators, combineReducers, createStore, Dispatch} from 'redux';\nimport {\n loadCanvas,\n loadFile,\n loadUrl,\n loadFilters,\n reducer as searchReducer,\n selectionChanged, submitNegativeFeedback, submitPositiveFeedback\n} from './actions/searchActions';\nimport {\n hideFeedback,\n reducer as nyrisReducer,\n showCamera,\n showStart\n} from './actions/nyrisAppActions';\nimport { getUrlParam } from \"./utils\";\nimport {composeWithDevTools} from \"redux-devtools-extension\";\nimport {AppAction, AppSettings, AppState, MDSettings} from \"./types\";\nimport {createEpicMiddleware} from \"redux-observable\";\nimport NyrisAPI from \"@nyris/nyris-api\";\nimport {createMuiTheme, MuiThemeProvider} from \"@material-ui/core\";\nimport 'typeface-roboto';\nimport {defaultMdSettings, defaultSettings} from \"./defaults\";\nimport rootEpic from \"./epics\";\nimport { createHashHistory } from 'history';\nimport App from './App';\n\n\ndeclare var settings: AppSettings;\n\n\nfunction scrollTop() {\n // TODO might require polyfill for ios and edge\n window.scrollTo({top: 0, left: 0, behavior: \"smooth\"});\n}\n\n\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: getUrlParam('use.regions') as boolean || normalizedSettings.regions,\n preview: getUrlParam('use.preview') as boolean || normalizedSettings.preview,\n\n};\n\ndocument.title = window.location.host;\n\nconst api = new NyrisAPI(normalizedSettings);\nconst history = createHashHistory();\n\nconst epicMiddleware = createEpicMiddleware<AppAction, AppAction, AppState>({\n dependencies: {api, history}\n});\n\nconst rootReducer = combineReducers({\n settings: () => normalizedSettings as AppSettings,\n nyrisDesign: nyrisReducer,\n search: searchReducer\n});\n\n\nconst store = createStore(rootReducer, composeWithDevTools(\n applyMiddleware(epicMiddleware)\n));\nepicMiddleware.run(rootEpic);\n\n\nhistory.listen((location, action) => {\n console.log('history', location, action)\n if (action === 'PUSH') {\n return;\n }\n switch (location.pathname) {\n case '/results':\n store.dispatch({type: 'SHOW_RESULTS'});\n store.dispatch({type: 'LOAD_FILTERS'});\n break;\n case '/': \n store.dispatch({type: 'SHOW_START'}); \n break;\n }\n});\n\n\n// Here comes the really dirty code of the composition-root\n\nconst mapStateToProps = (state: AppState) => ({\n showPart: state.nyrisDesign.showPart,\n search: {\n results: state.search.results,\n categoryPredictions: state.search.categoryPredictions,\n codes: state.search.codes,\n filterOptions: state.search.filterOptions,\n previewSelection: state.search.selectedRegion,\n regions: state.search.regions,\n duration: state.search.duration,\n requestId: state.search.requestId,\n toastErrorMessage: state.search.errorMessage,\n filters: state.search.filters,\n selectedFilters: state.search.selectedFilters\n },\n settings: state.settings,\n previewImage: state.search.requestImage,\n loading: state.search.fetchingRegions || state.search.fetchingResults,\n feedbackState: state.nyrisDesign.feedbackState,\n mdSettings: state.settings.materialDesign || defaultMdSettings,\n});\n\n\nconst mapDispatchToProps = (dispatch: Dispatch<AppAction>) => {\n return {\n handlers: {\n ...bindActionCreators({\n onPositiveFeedback: submitPositiveFeedback,\n onNegativeFeedback: submitNegativeFeedback,\n onCameraClick: showCamera,\n onCaptureCanceled: showStart,\n onCaptureComplete: loadCanvas,\n onSelectFile: loadFile,\n onExampleImageClick: loadUrl,\n onFileDropped: loadFile,\n onSelectionChange: selectionChanged,\n onCloseFeedback: hideFeedback\n }, dispatch),\n onImageClick: (position: number, url: string) => {\n dispatch({ type: \"RESULT_IMAGE_CLICKED\", position, url});\n dispatch(loadUrl(url));\n },\n onLinkClick: (position: number, url: string) => {\n dispatch({type: 'RESULT_LINK_CLICKED', position, url});\n if (url) {\n window.open(url);\n }\n },\n onShowStart: () => {\n dispatch(showStart());\n dispatch({type: \"CLEAR_SELECTED_FILTERS\"});\n dispatch(loadFilters());\n scrollTop();\n },\n }\n };\n};\n\n\n// chrome plugin communication\nfunction onMessage(evt: MessageEvent) {\n let msg = evt.data;\n if (msg.type === \"image\") {\n store.dispatch(loadUrl(msg.image));\n }\n}\nwindow.addEventListener('message', onMessage);\n\n\n\n\nlet useMd = settings.materialDesign !== undefined;\nlet md: MDSettings = {\n ...defaultMdSettings,\n ...settings.materialDesign\n};\nlet theme = createMuiTheme({\n typography: {\n fontFamily: md.customFontFamily,\n },\n palette: {\n primary: {\n main: md.primaryColor,\n },\n secondary: {\n main: md.secondaryColor\n }\n }\n});\nconst SelectedApp = useMd ? AppMD : App;\nconst ConnectedApp = connect(mapStateToProps, mapDispatchToProps)(SelectedApp);\n\nReactDOM.render(<Provider store={store}><MuiThemeProvider\n theme={theme}><ConnectedApp/></MuiThemeProvider></Provider>, document.getElementById('root'));\n\n\n\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":""}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
!function(e){function r(r){for(var n,i,p=r[0],l=r[1],a=r[2],c=0,s=[];c<p.length;c++)i=p[c],Object.prototype.hasOwnProperty.call(o,i)&&o[i]&&s.push(o[i][0]),o[i]=0;for(n in l)Object.prototype.hasOwnProperty.call(l,n)&&(e[n]=l[n]);for(f&&f(r);s.length;)s.shift()();return u.push.apply(u,a||[]),t()}function t(){for(var e,r=0;r<u.length;r++){for(var t=u[r],n=!0,p=1;p<t.length;p++){var l=t[p];0!==o[l]&&(n=!1)}n&&(u.splice(r--,1),e=i(i.s=t[0]))}return e}var n={},o={1:0},u=[];function i(r){if(n[r])return n[r].exports;var t=n[r]={i:r,l:!1,exports:{}};return e[r].call(t.exports,t,t.exports,i),t.l=!0,t.exports}i.m=e,i.c=n,i.d=function(e,r,t){i.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},i.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,r){if(1&r&&(e=i(e)),8&r)return e;if(4&r&&"object"===typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(i.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var n in e)i.d(t,n,function(r){return e[r]}.bind(null,n));return t},i.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(r,"a",r),r},i.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},i.p="./";var p=this["webpackJsonp@nyris/nyris-webapp"]=this["webpackJsonp@nyris/nyris-webapp"]||[],l=p.push.bind(p);p.push=r,p=p.slice();for(var a=0;a<p.length;a++)r(p[a]);var f=l;t()}([]);
|
|
2
|
-
//# sourceMappingURL=runtime-main.
|
|
2
|
+
//# sourceMappingURL=runtime-main.f5553a9b.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../webpack/bootstrap"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","1","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","this","oldJsonpFunction","slice"],"mappings":"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","file":"static/js/runtime-main.
|
|
1
|
+
{"version":3,"sources":["../webpack/bootstrap"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","1","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","this","oldJsonpFunction","slice"],"mappings":"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","file":"static/js/runtime-main.f5553a9b.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t1: 0\n \t};\n\n \tvar deferredModules = [];\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 \tvar jsonpArray = this[\"webpackJsonp@nyris/nyris-webapp\"] = this[\"webpackJsonp@nyris/nyris-webapp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// run deferred modules from other chunks\n \tcheckDeferredModules();\n"],"sourceRoot":""}
|