박민정

[feat] For deploy...

Showing 38 changed files with 151 additions and 53 deletions
1 -node_modules
2 -dev.js
...\ No newline at end of file ...\ No newline at end of file
1 +node_modules
...\ No newline at end of file ...\ No newline at end of file
......
1 -node_modules
2 -dev.js
...\ No newline at end of file ...\ No newline at end of file
1 +node_modules
...\ No newline at end of file ...\ No newline at end of file
......
1 +web: npm start
...\ No newline at end of file ...\ No newline at end of file
1 -# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 -
3 -# dependencies
4 -/node_modules
5 -/.pnp
6 -.pnp.js
7 -
8 -# testing
9 -/coverage
10 -
11 -# production
12 -/build
13 -
14 -# misc
15 -.DS_Store
16 -.env.local
17 -.env.development.local
18 -.env.test.local
19 -.env.production.local
20 -
21 -npm-debug.log*
22 -yarn-debug.log*
23 -yarn-error.log*
1 +{
2 + "files": {
3 + "main.css": "/static/css/main.c9112ef1.chunk.css",
4 + "main.js": "/static/js/main.30dbcb82.chunk.js",
5 + "main.js.map": "/static/js/main.30dbcb82.chunk.js.map",
6 + "runtime~main.js": "/static/js/runtime~main.a8a9905a.js",
7 + "runtime~main.js.map": "/static/js/runtime~main.a8a9905a.js.map",
8 + "static/css/2.b6ac9e22.chunk.css": "/static/css/2.b6ac9e22.chunk.css",
9 + "static/js/2.4d47edc8.chunk.js": "/static/js/2.4d47edc8.chunk.js",
10 + "static/js/2.4d47edc8.chunk.js.map": "/static/js/2.4d47edc8.chunk.js.map",
11 + "index.html": "/index.html",
12 + "precache-manifest.16488c9b14dd1aef91bfa2340fd902da.js": "/precache-manifest.16488c9b14dd1aef91bfa2340fd902da.js",
13 + "service-worker.js": "/service-worker.js",
14 + "static/css/2.b6ac9e22.chunk.css.map": "/static/css/2.b6ac9e22.chunk.css.map",
15 + "static/css/main.c9112ef1.chunk.css.map": "/static/css/main.c9112ef1.chunk.css.map"
16 + }
17 +}
...\ No newline at end of file ...\ No newline at end of file
No preview for this file type
1 +<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="shortcut icon" href="/favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><link rel="manifest" href="/manifest.json"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/css/bootstrap.min.css" integrity="sha384-+0n0xVW2eSR5OomGNYDnhzAbDsOXxcvSN1TPprVMTNDbiYZCxYbOOl7+AMvyTG2x" crossorigin="anonymous"/><title>약 배달 서비스 : 약사</title><link href="/static/css/2.b6ac9e22.chunk.css" rel="stylesheet"><link href="/static/css/main.c9112ef1.chunk.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div><script>!function(l){function e(e){for(var r,t,n=e[0],o=e[1],u=e[2],f=0,i=[];f<n.length;f++)t=n[f],p[t]&&i.push(p[t][0]),p[t]=0;for(r in o)Object.prototype.hasOwnProperty.call(o,r)&&(l[r]=o[r]);for(s&&s(e);i.length;)i.shift()();return c.push.apply(c,u||[]),a()}function a(){for(var e,r=0;r<c.length;r++){for(var t=c[r],n=!0,o=1;o<t.length;o++){var u=t[o];0!==p[u]&&(n=!1)}n&&(c.splice(r--,1),e=f(f.s=t[0]))}return e}var t={},p={1:0},c=[];function f(e){if(t[e])return t[e].exports;var r=t[e]={i:e,l:!1,exports:{}};return l[e].call(r.exports,r,r.exports,f),r.l=!0,r.exports}f.m=l,f.c=t,f.d=function(e,r,t){f.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},f.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},f.t=function(r,e){if(1&e&&(r=f(r)),8&e)return r;if(4&e&&"object"==typeof r&&r&&r.__esModule)return r;var t=Object.create(null);if(f.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:r}),2&e&&"string"!=typeof r)for(var n in r)f.d(t,n,function(e){return r[e]}.bind(null,n));return t},f.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return f.d(r,"a",r),r},f.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},f.p="/";var r=window.webpackJsonp=window.webpackJsonp||[],n=r.push.bind(r);r.push=e,r=r.slice();for(var o=0;o<r.length;o++)e(r[o]);var s=n;a()}([])</script><script src="/static/js/2.4d47edc8.chunk.js"></script><script src="/static/js/main.30dbcb82.chunk.js"></script></body></html>
...\ No newline at end of file ...\ No newline at end of file
1 +{
2 + "short_name": "React App",
3 + "name": "Create React App Sample",
4 + "icons": [
5 + {
6 + "src": "favicon.ico",
7 + "sizes": "64x64 32x32 24x24 16x16",
8 + "type": "image/x-icon"
9 + }
10 + ],
11 + "start_url": ".",
12 + "display": "standalone",
13 + "theme_color": "#000000",
14 + "background_color": "#ffffff"
15 +}
1 +self.__precacheManifest = (self.__precacheManifest || []).concat([
2 + {
3 + "revision": "d9dcd4703f5c7de8e5597152c1420acf",
4 + "url": "/index.html"
5 + },
6 + {
7 + "revision": "816cfabf4853ead8d600",
8 + "url": "/static/css/2.b6ac9e22.chunk.css"
9 + },
10 + {
11 + "revision": "176d56469d43bf1341fe",
12 + "url": "/static/css/main.c9112ef1.chunk.css"
13 + },
14 + {
15 + "revision": "816cfabf4853ead8d600",
16 + "url": "/static/js/2.4d47edc8.chunk.js"
17 + },
18 + {
19 + "revision": "176d56469d43bf1341fe",
20 + "url": "/static/js/main.30dbcb82.chunk.js"
21 + },
22 + {
23 + "revision": "42ac5946195a7306e2a5",
24 + "url": "/static/js/runtime~main.a8a9905a.js"
25 + }
26 +]);
...\ No newline at end of file ...\ No newline at end of file
1 +/**
2 + * Welcome to your Workbox-powered service worker!
3 + *
4 + * You'll need to register this file in your web app and you should
5 + * disable HTTP caching for this file too.
6 + * See https://goo.gl/nhQhGp
7 + *
8 + * The rest of the code is auto-generated. Please don't update this file
9 + * directly; instead, make changes to your Workbox build configuration
10 + * and re-run your build process.
11 + * See https://goo.gl/2aRDsh
12 + */
13 +
14 +importScripts("https://storage.googleapis.com/workbox-cdn/releases/4.3.1/workbox-sw.js");
15 +
16 +importScripts(
17 + "/precache-manifest.16488c9b14dd1aef91bfa2340fd902da.js"
18 +);
19 +
20 +self.addEventListener('message', (event) => {
21 + if (event.data && event.data.type === 'SKIP_WAITING') {
22 + self.skipWaiting();
23 + }
24 +});
25 +
26 +workbox.core.clientsClaim();
27 +
28 +/**
29 + * The workboxSW.precacheAndRoute() method efficiently caches and responds to
30 + * requests for URLs in the manifest.
31 + * See https://goo.gl/S9QRab
32 + */
33 +self.__precacheManifest = [].concat(self.__precacheManifest || []);
34 +workbox.precaching.precacheAndRoute(self.__precacheManifest, {});
35 +
36 +workbox.routing.registerNavigationRoute(workbox.precaching.getCacheKeyForURL("/index.html"), {
37 +
38 + blacklist: [/^\/_/,/\/[^/]+\.[^/]+$/],
39 +});
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
1 +@font-face{font-family:BRBA_B;src:url(https://cdn.jsdelivr.net/gh/projectnoonnu/noonfonts_seven@1.2/BRBA_B.woff) format("woff");font-weight:400;font-style:normal}@font-face{font-family:InfinitySans-RegularA1;src:url(https://cdn.jsdelivr.net/gh/projectnoonnu/noonfonts_20-04@2.1/InfinitySans-RegularA1.woff) format("woff");font-weight:400;font-style:normal}@font-face{font-family:GongGothicMedium;src:url(https://cdn.jsdelivr.net/gh/projectnoonnu/noonfonts_20-10@1.0/GongGothicMedium.woff) format("woff");font-weight:400;font-style:normal}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}code{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:14px;line-height:1.5;color:#24292e;background-color:#fff}.app{flex-direction:column;display:flex;justify-content:center;align-items:center;height:100vh}input.error{border-color:red}.input-feedback{color:red;height:5px;margin-top:-12px}table{font-family:arial,sans-serif;border-collapse:collapse;width:100%}td,th{border:1px solid #ddd;text-align:left;padding:8px}tr:nth-child(2n){background-color:#ddd}h1{font-family:GongGothicMedium}h3{font-family:InfinitySans-RegularA1}.menu{padding:0 20px;border-bottom:1px solid #e8e8e8;overflow:auto;box-shadow:0 0 30px #f3f1f1;background-color:#fff}.menu__logo{width:150px;float:left}.menu__logo a{display:inline-block;font-size:20px;padding:19px 20px}.menu__container .ant-menu-item{padding:0 5px}.menu__container .ant-menu-submenu-title{padding:10px 20px}.menu__container .ant-menu-item a,.menu__container .ant-menu-submenu-title a{padding:10px 15px}.menu__container .ant-menu-horizontal{border-bottom:none}.menu__container .menu_left{float:left}.menu__container .menu_rigth{float:right}.menu__mobile-button{float:right;height:32px;padding:6px;margin-top:8px;display:none!important;background:#d3d3d3}.menu_drawer .ant-drawer-body{padding:0!important}.menu_drawer .ant-drawer-header{padding:14px 24px!important}@media (max-width:767px){.menu__mobile-button{display:inline-block!important}.menu_left,.menu_rigth{display:none}.menu__logo a{margin-left:-20px}.menu__container .ant-menu-item,.menu__container .ant-menu-submenu-title{padding:1px 20px}.menu__logo a{padding:10px 20px}}#test{position:relative}#alert,#test{width:300px;height:200px;border:1px solid #d3d3d3;border-radius:1em;display:flex}#alert{justify-content:center;align-items:center}#test:hover{-webkit-animation:del .2s forwards;animation:del .2s forwards}@-webkit-keyframes del{to{-webkit-filter:brightness(50%);filter:brightness(50%)}}@keyframes del{to{-webkit-filter:brightness(50%);filter:brightness(50%)}}#alert{position:relative;bottom:200px;opacity:0}#alert:hover{background-color:#000;color:#fff;-webkit-animation:fadeInUP 1s forwards;animation:fadeInUP 1s forwards}@-webkit-keyframes fadeInUP{to{opacity:.5}}@keyframes fadeInUP{to{opacity:.5}}
2 +/*# sourceMappingURL=main.c9112ef1.chunk.css.map */
...\ No newline at end of file ...\ No newline at end of file
1 +{"version":3,"sources":["index.css","Navbar.css","FileUpload.css"],"names":[],"mappings":"AACA,WACE,kBAAqB,CACrB,iGACgB,CAChB,eAAmB,CACnB,iBACF,CAEA,WACE,kCAAqC,CACrC,iHACgB,CAChB,eAAmB,CACnB,iBACF,CAEA,WACE,4BAA+B,CAC/B,2GACgB,CAChB,eAAmB,CACnB,iBACF,CAEA,KACE,QAAS,CACT,mIAEY,CACZ,kCAAmC,CACnC,iCACF,CAEA,KACE,uEAEF,CAEA,KACE,iIACsE,CACtE,cAAe,CACf,eAAgB,CAChB,aAAc,CACd,qBACF,CAEA,KACE,qBAAsB,CACtB,YAAa,CACb,sBAAuB,CACvB,kBAAmB,CACnB,YACF,CAEA,YACE,gBACF,CAEA,gBACE,SAAU,CACV,UAAW,CACX,gBACF,CAEA,MACE,4BAA8B,CAC9B,wBAAyB,CACzB,UACF,CAEA,MAEE,qBAAyB,CACzB,eAAgB,CAChB,WACF,CAEA,iBACE,qBACF,CAEA,GACE,4BACF,CAEA,GACE,kCACF,CCvFA,MACE,cAAe,CACf,+BAAgC,CAChC,aAAc,CACd,2BAA4B,CAC5B,qBACF,CAEA,YACE,WAAY,CACZ,UACF,CAEA,cACE,oBAAqB,CACrB,cAAe,CACf,iBACF,CAEA,gCACE,aACF,CAEA,yCACE,iBACF,CAEA,6EAEE,iBACF,CAEA,sCACE,kBACF,CAEA,4BACE,UACF,CAEA,6BACE,WACF,CAEA,qBACE,WAAY,CACZ,WAAY,CACZ,WAAY,CACZ,cAAe,CACf,sBAAwB,CACxB,kBACF,CAEA,8BACE,mBACF,CAGA,gCACE,2BACF,CAEA,yBACE,qBACE,8BACF,CAEA,uBAEE,YACF,CAEA,cACE,iBACF,CAEA,yEAEE,gBACF,CAEA,cACE,iBACF,CACF,CCtFA,MAME,iBACF,CACA,aAPE,WAAY,CACZ,YAAa,CACb,wBAA2B,CAC3B,iBAAkB,CAClB,YAWF,CARA,OAME,sBAAuB,CACvB,kBACF,CAEA,YACE,kCAA4B,CAA5B,0BACF,CAEA,uBACE,GACE,8BAAuB,CAAvB,sBACF,CACF,CAJA,eACE,GACE,8BAAuB,CAAvB,sBACF,CACF,CAEA,OACE,iBAAkB,CAClB,YAAa,CACb,SACF,CAEA,aACE,qBAAuB,CACvB,UAAY,CACZ,sCAA+B,CAA/B,8BACF,CAEA,4BACE,GACE,UACF,CACF,CAJA,oBACE,GACE,UACF,CACF","file":"main.c9112ef1.chunk.css","sourcesContent":["@import \"~react-image-gallery/styles/css/image-gallery.css\";\r\n@font-face {\r\n font-family: \"BRBA_B\";\r\n src: url(\"https://cdn.jsdelivr.net/gh/projectnoonnu/noonfonts_seven@1.2/BRBA_B.woff\")\r\n format(\"woff\");\r\n font-weight: normal;\r\n font-style: normal;\r\n}\r\n\r\n@font-face {\r\n font-family: \"InfinitySans-RegularA1\";\r\n src: url(\"https://cdn.jsdelivr.net/gh/projectnoonnu/noonfonts_20-04@2.1/InfinitySans-RegularA1.woff\")\r\n format(\"woff\");\r\n font-weight: normal;\r\n font-style: normal;\r\n}\r\n\r\n@font-face {\r\n font-family: \"GongGothicMedium\";\r\n src: url(\"https://cdn.jsdelivr.net/gh/projectnoonnu/noonfonts_20-10@1.0/GongGothicMedium.woff\")\r\n format(\"woff\");\r\n font-weight: normal;\r\n font-style: normal;\r\n}\r\n\r\nbody {\r\n margin: 0;\r\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Roboto\", \"Oxygen\",\r\n \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\",\r\n sans-serif;\r\n -webkit-font-smoothing: antialiased;\r\n -moz-osx-font-smoothing: grayscale;\r\n}\r\n\r\ncode {\r\n font-family: source-code-pro, Menlo, Monaco, Consolas, \"Courier New\",\r\n monospace;\r\n}\r\n\r\nbody {\r\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial,\r\n sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\r\n font-size: 14px;\r\n line-height: 1.5;\r\n color: #24292e;\r\n background-color: #fff;\r\n}\r\n\r\n.app {\r\n flex-direction: column;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n height: 100vh;\r\n}\r\n\r\ninput.error {\r\n border-color: red;\r\n}\r\n\r\n.input-feedback {\r\n color: red;\r\n height: 5px;\r\n margin-top: -12px;\r\n}\r\n\r\ntable {\r\n font-family: arial, sans-serif;\r\n border-collapse: collapse;\r\n width: 100%;\r\n}\r\n\r\ntd,\r\nth {\r\n border: 1px solid #dddddd;\r\n text-align: left;\r\n padding: 8px;\r\n}\r\n\r\ntr:nth-child(even) {\r\n background-color: #dddddd;\r\n}\r\n\r\nh1 {\r\n font-family: \"GongGothicMedium\";\r\n}\r\n\r\nh3 {\r\n font-family: \"InfinitySans-RegularA1\";\r\n}\r\n","@import \"~antd/dist/antd.css\";\r\n\r\n.menu {\r\n padding: 0 20px;\r\n border-bottom: solid 1px #e8e8e8;\r\n overflow: auto;\r\n box-shadow: 0 0 30px #f3f1f1;\r\n background-color: white;\r\n}\r\n\r\n.menu__logo {\r\n width: 150px;\r\n float: left;\r\n}\r\n\r\n.menu__logo a {\r\n display: inline-block;\r\n font-size: 20px;\r\n padding: 19px 20px;\r\n}\r\n\r\n.menu__container .ant-menu-item {\r\n padding: 0px 5px;\r\n}\r\n\r\n.menu__container .ant-menu-submenu-title {\r\n padding: 10px 20px;\r\n}\r\n\r\n.menu__container .ant-menu-item a,\r\n.menu__container .ant-menu-submenu-title a {\r\n padding: 10px 15px;\r\n}\r\n\r\n.menu__container .ant-menu-horizontal {\r\n border-bottom: none;\r\n}\r\n\r\n.menu__container .menu_left {\r\n float: left;\r\n}\r\n\r\n.menu__container .menu_rigth {\r\n float: right;\r\n}\r\n\r\n.menu__mobile-button {\r\n float: right;\r\n height: 32px;\r\n padding: 6px;\r\n margin-top: 8px;\r\n display: none !important; /* use of important to overwrite ant-btn */\r\n background: lightgray;\r\n}\r\n\r\n.menu_drawer .ant-drawer-body {\r\n padding: 0 !important;\r\n}\r\n\r\n/* align header of Drawer with header of page */\r\n.menu_drawer .ant-drawer-header {\r\n padding: 14px 24px !important;\r\n}\r\n\r\n@media (max-width: 767px) {\r\n .menu__mobile-button {\r\n display: inline-block !important;\r\n }\r\n\r\n .menu_left,\r\n .menu_rigth {\r\n display: none;\r\n }\r\n\r\n .menu__logo a {\r\n margin-left: -20px;\r\n }\r\n\r\n .menu__container .ant-menu-item,\r\n .menu__container .ant-menu-submenu-title {\r\n padding: 1px 20px;\r\n }\r\n\r\n .menu__logo a {\r\n padding: 10px 20px;\r\n }\r\n}\r\n","#test {\r\n width: 300px;\r\n height: 200px;\r\n border: 1px solid lightgray;\r\n border-radius: 1em;\r\n display: flex;\r\n position: relative;\r\n}\r\n#alert {\r\n width: 300px;\r\n height: 200px;\r\n border: 1px solid lightgray;\r\n border-radius: 1em;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n}\r\n\r\n#test:hover {\r\n animation: del 0.2s forwards;\r\n}\r\n\r\n@keyframes del {\r\n to {\r\n filter: brightness(50%);\r\n }\r\n}\r\n\r\n#alert {\r\n position: relative;\r\n bottom: 200px;\r\n opacity: 0;\r\n}\r\n\r\n#alert:hover {\r\n background-color: black;\r\n color: white;\r\n animation: fadeInUP 1s forwards;\r\n}\r\n\r\n@keyframes fadeInUP {\r\n to {\r\n opacity: 0.5;\r\n }\r\n}\r\n"]}
...\ No newline at end of file ...\ No newline at end of file
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
1 +(window.webpackJsonp=window.webpackJsonp||[]).push([[0],{284:function(e,t,a){e.exports=a(564)},289:function(e,t,a){},548:function(e,t,a){},551:function(e,t,a){},564:function(e,t,a){"use strict";a.r(t);var n=a(0),r=a.n(n),l=a(5),c=a.n(l),i=(a(289),a(65)),o=a(184),s=a.n(o),u=a(252),m=a(20),d=a.n(m),p="login_user",f="register_user",y="auth_user",h="logout_user",E="add_to_cart_user",g="get_cart_items_user",b="remove_cart_item_user",v="on_success_buy_user",O="3.209.242.35/api/users";var j=a(32),x=function(e,t){var a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;return function(l){var c=Object(j.c)(function(e){return e.user}),i=Object(j.b)();return Object(n.useEffect)(function(){i(function(){var e=d.a.get("".concat(O,"/auth")).then(function(e){return e.data});return{type:y,payload:e}}()).then(function(){var e=Object(u.a)(s.a.mark(function e(n){return s.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,!n.payload.isAuth;case 2:if(!e.sent){e.next=6;break}t&&l.history.push("/login"),e.next=7;break;case 6:a&&!n.payload.isAdmin?l.history.push("/"):!1===t&&l.history.push("/");case 7:case"end":return e.stop()}},e)}));return function(t){return e.apply(this,arguments)}}())},[i,l.history,c.googleAuth]),r.a.createElement(e,Object.assign({},l,{user:c}))}},w=a(90),S=a(55),_=a(16),k=a(569),D=a(44),P=a(91),C=a(566);var I=function(e){return r.a.createElement("div",null,r.a.createElement(C.a,{autoplay:!0},e.images.map(function(e,t){return r.a.createElement("div",{key:t},r.a.createElement("img",{style:{width:"100%",maxWidth:"300px",height:"300px"},src:"http://localhost:5000/".concat(e),alt:"productImage"}))})))},A=a(573),T=a(575),N=A.a.Panel;var q=function(e){var t=Object(n.useState)([]),a=Object(_.a)(t,2),l=a[0],c=a[1];return r.a.createElement("div",null,r.a.createElement(A.a,{defaultActiveKey:["0"]},r.a.createElement(N,{header:"\uc57d \uc885\ub958",key:"1"},e.list&&e.list.map(function(t,a){return r.a.createElement(r.a.Fragment,{key:a},r.a.createElement(T.a,{onChange:function(){return function(t){var a=l.indexOf(t),n=Object(S.a)(l);-1===a?n.push(t):n.splice(a,1),c(n),e.handleFilters(n)}(t._id)},type:"checkbox",checked:-1!==l.indexOf(t._id)}),"\xa0\xa0",r.a.createElement("span",null,t.name))}))))},B=[{_id:0,name:"\uc804\uccb4"},{_id:1,name:"\uc9c4\ud1b5\uc81c"},{_id:2,name:"\uc18c\ud654\uc81c"},{_id:3,name:"\uac10\uae30\uc57d"},{_id:4,name:"\ud574\uc5f4\uc81c"},{_id:5,name:"\ud30c\uc2a4\ub958"},{_id:6,name:"\uc0c1\ucc98\uce58\ub8cc"},{_id:7,name:"\uae30\ud0c0"}],F=[{_id:0,name:"Any",array:[]},{_id:1,name:"\ubc30\ub2ec\ube44 \ubb34\ub8cc",array:[0]},{_id:2,name:"\ubc30\ub2ec\ube44 500\uc6d0 ~ 1000\uc6d0",array:[500,1e3]},{_id:3,name:"\ubc30\ub2ec\ube44 1000\uc6d0 ~ 2000\uc6d0",array:[1001,2e3]},{_id:4,name:"\ubc30\ub2ec\ube44 200\uc6d0 ~ 3000\uc6d0",array:[2001,3e3]},{_id:5,name:"3000\uc6d0 \uc774\uc0c1",array:[3e3,15e5]}],R=a(576);R.a.Search;var z=a(567);function M(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),a.push.apply(a,n)}return a}var X=k.a.Meta;var U=function(){var e=Object(n.useState)([]),t=Object(_.a)(e,2),a=t[0],l=t[1],c=Object(n.useState)(0),i=Object(_.a)(c,2),o=i[0],s=i[1],u=Object(n.useState)(8),m=Object(_.a)(u,2),p=m[0],f=(m[1],Object(n.useState)()),y=Object(_.a)(f,2),h=y[0],E=y[1],g=Object(n.useState)(""),b=Object(_.a)(g,2),v=b[0],O=(b[1],Object(n.useState)({medicines:[],price:[]})),j=Object(_.a)(O,2),x=j[0],C=j[1];Object(n.useEffect)(function(){A({skip:o,limit:p})},[]);var A=function(e){d.a.post("/api/product/getProducts",e).then(function(t){t.data.success?(e.loadMore?l([].concat(Object(S.a)(a),Object(S.a)(t.data.products))):l(t.data.products),E(t.data.postSize)):alert("\uc2e4\ud328\ud558\uc600\uc2b5\ub2c8\ub2e4.")})},T=a.map(function(e,t){return r.a.createElement(D.a,{style:{marginTop:"30px"},lg:6,md:8,xs:24},r.a.createElement(k.a,{style:{margin:"5px"},hoverable:!0,cover:r.a.createElement("a",{href:"/product/".concat(e._id)},r.a.createElement(I,{images:e.images}))},r.a.createElement(X,{title:e.title,description:"".concat(e.price,"000\uc6d0")})))}),N=function(e,t){var a=function(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?M(a,!0).forEach(function(t){Object(w.a)(e,t,a[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):M(a).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))})}return e}({},x);if(a[t]=e,"price"===t){var n=function(e){var t=F,a=[];for(var n in t)t[n]._id===parseInt(e,10)&&(a=t[n].array);return console.log("array",a),a}(e);a[t]=n}console.log(a),function(e){A({skip:0,limit:p,filters:e}),s(0)}(a),C(a)};return r.a.createElement("div",{style:{width:"75%",margin:"3rem auto"}},r.a.createElement("div",{style:{textAlign:"center"}},r.a.createElement("img",{src:"/whatmedicine.png",style:{width:"500px"}})),r.a.createElement(z.a,{style:{width:"50%"}},r.a.createElement(q,{list:B,handleFilters:function(e){return N(e,"medicines")}})),0===a.length?r.a.createElement("div",{style:{display:"flex",height:"300px",justifyContent:"center",alignItems:"center"}}):r.a.createElement("div",null,r.a.createElement(P.a,{gutter:[16,16]},T)),r.a.createElement("br",null),r.a.createElement("br",null),h>=p&&r.a.createElement("div",{style:{display:"flex",justifyContent:"center"}},r.a.createElement("button",{onClick:function(){var e=o+p;A({skip:e,limit:p,loadMore:!0,filters:x,searchTerm:v}),s(e)}},"Load More")))},W=a(142),L=a(40),V=a(572),$=a(571),J=a(14),K=a(191),H=V.a.Title;var Q=Object(i.f)(function(e){var t=Object(j.b)(),a=!!localStorage.getItem("rememberMe"),l=Object(n.useState)(""),c=Object(_.a)(l,2),i=c[0],o=c[1],s=Object(n.useState)(a),u=Object(_.a)(s,2),m=u[0];return u[1],r.a.createElement(W.a,{initialValues:{email:"",password:""},validationSchema:L.object().shape({email:L.string().email("\uc774\uba54\uc77c\uc774 \uc720\ud6a8\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.").required("\uc774\uba54\uc77c\uc744 \uc785\ub825\ud574\uc8fc\uc138\uc694."),password:L.string().min(5,"\ube44\ubc00\ubc88\ud638\uac00 \ub108\ubb34 \uc9e7\uc2b5\ub2c8\ub2e4.").required("\ube44\ubc00\ubc88\ud638\ub97c \uc785\ub825\ud574\uc8fc\uc138\uc694.")}),onSubmit:function(a,n){var r=n.setSubmitting;setTimeout(function(){var n={email:a.email,password:a.password};t(function(e){var t=d.a.post("".concat(O,"/login"),e).then(function(e){return e.data});return{type:p,payload:t}}(n)).then(function(t){t.payload.loginSuccess?(window.localStorage.setItem("userId",t.payload.userId),!0===m?window.localStorage.setItem("rememberMe",a.id):localStorage.removeItem("rememberMe"),e.history.push("/")):o("Check out your Account or Password again")}).catch(function(e){o("Check out your Account or Password again"),setTimeout(function(){o("")},3e3)}),r(!1)},500)}},function(e){var t=e.values,a=e.touched,n=e.errors,l=(e.dirty,e.isSubmitting),c=e.handleChange,o=e.handleBlur,s=e.handleSubmit;return e.handleReset,r.a.createElement("div",{className:"app"},r.a.createElement(H,{level:2},"\ub85c\uadf8\uc778"),r.a.createElement("form",{onSubmit:s,style:{width:"350px"}},r.a.createElement($.a.Item,{required:!0},r.a.createElement(R.a,{id:"email",prefix:r.a.createElement(J.a,{type:"user",style:{color:"rgba(0,0,0,.25)"}}),placeholder:"Enter your email",type:"email",value:t.email,onChange:c,onBlur:o,className:n.email&&a.email?"text-input error":"text-input"}),n.email&&a.email&&r.a.createElement("div",{className:"input-feedback"},n.email)),r.a.createElement($.a.Item,{required:!0},r.a.createElement(R.a,{id:"password",prefix:r.a.createElement(J.a,{type:"lock",style:{color:"rgba(0,0,0,.25)"}}),placeholder:"Enter your password",type:"password",value:t.password,onChange:c,onBlur:o,className:n.password&&a.password?"text-input error":"text-input"}),n.password&&a.password&&r.a.createElement("div",{className:"input-feedback"},n.password)),i&&r.a.createElement("label",null,r.a.createElement("p",{style:{color:"#ff0000bf",fontSize:"0.7rem",border:"1px solid",padding:"1rem",borderRadius:"10px"}},i)),r.a.createElement($.a.Item,null,r.a.createElement("div",null,r.a.createElement(K.a,{type:"primary",htmlType:"submit",className:"login-form-button",style:{minWidth:"100%"},disabled:l,onSubmit:s},"\ub85c\uadf8\uc778")))))})}),Y=a(106),Z=a.n(Y),G=R.a.TextArea,ee={labelCol:{xs:{span:24},sm:{span:8}},wrapperCol:{xs:{span:24},sm:{span:16}}},te={wrapperCol:{xs:{span:24,offset:0},sm:{span:16,offset:8}}};var ae=function(e){var t=Object(j.b)();return r.a.createElement(W.a,{initialValues:{email:"",name:"",address:"",password:"",confirmPassword:""},validationSchema:L.object().shape({name:L.string().required("\uc774\ub984\uc744 \uc785\ub825\ud574\uc8fc\uc138\uc694."),email:L.string().email("\uc774\uba54\uc77c \ud615\uc2dd\uc774 \uc62c\ubc14\ub974\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.").required("\uc774\uba54\uc77c\uc744 \uc785\ub825\ud574\uc8fc\uc138\uc694."),password:L.string().min(5,"\ube44\ubc00\ubc88\ud638\ub294 5\uc790\ub9ac \uc774\uc0c1\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4.").required("\ube44\ubc00\ubc88\ud638\ub97c \uc785\ub825\ud574\uc8fc\uc138\uc694."),confirmPassword:L.string().oneOf([L.ref("password"),null],"\ube44\ubc00\ubc88\ud638\uac00 \uc77c\uce58\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.").required("\ube44\ubc00\ubc88\ud638\ub97c \ud55c\ubc88 \ub354 \uc785\ub825\ud574\uc8fc\uc138\uc694."),adress:L.string().required("\uc8fc\uc18c\ub97c \uc785\ub825\ud574\uc8fc\uc138\uc694.")}),onSubmit:function(a,n){var r=n.setSubmitting;setTimeout(function(){var n={email:a.email,password:a.password,name:a.name,adress:a.adress,image:"http://gravatar.com/avatar/".concat(Z()().unix(),"?d=identicon")};t(function(e){var t=d.a.post("".concat(O,"/register"),e).then(function(e){return e.data});return{type:f,payload:t}}(n)).then(function(t){t.payload.success?e.history.push("/login"):alert(t.payload.err.errmsg)}),r(!1)},500)}},function(e){var t=e.values,a=e.touched,n=e.errors,l=(e.dirty,e.isSubmitting),c=e.handleChange,i=e.handleBlur,o=e.handleSubmit;return e.handleReset,r.a.createElement("div",{className:"app"},r.a.createElement("h3",null,"\ud68c\uc6d0\uac00\uc785"),r.a.createElement($.a,Object.assign({style:{minWidth:"375px"}},ee,{onSubmit:o}),r.a.createElement($.a.Item,{required:!0,label:"\uc774\ub984"},r.a.createElement(R.a,{id:"name",placeholder:"\uc774\ub984\uc744 \uc785\ub825\ud558\uc138\uc694",type:"text",value:t.name,onChange:c,onBlur:i,className:n.name&&a.name?"text-input error":"text-input"}),n.name&&a.name&&r.a.createElement("div",{className:"input-feedback"},n.name)),r.a.createElement($.a.Item,{required:!0,label:"\uc774\uba54\uc77c"},r.a.createElement(R.a,{id:"email",placeholder:"\uc774\uba54\uc77c\uc744 \uc785\ub825\ud574\uc8fc\uc138\uc694.",type:"email",value:t.email,onChange:c,onBlur:i,className:n.email&&a.email?"text-input error":"text-input"}),n.email&&a.email&&r.a.createElement("div",{className:"input-feedback"},n.email)),r.a.createElement($.a.Item,{required:!0,label:"\ube44\ubc00\ubc88\ud638"},r.a.createElement(R.a,{id:"password",placeholder:"\ube44\ubc00\ubc88\ud638\ub97c \uc785\ub825\ud574\uc8fc\uc138\uc694.",type:"password",value:t.password,onChange:c,onBlur:i,className:n.password&&a.password?"text-input error":"text-input"}),n.password&&a.password&&r.a.createElement("div",{className:"input-feedback"},n.password)),r.a.createElement($.a.Item,{required:!0,label:"\ube44\ubc00\ubc88\ud638 \ud655\uc778"},r.a.createElement(R.a,{id:"confirmPassword",placeholder:"\ube44\ubc00\ubc88\ud638\ub97c \ud55c\ubc88 \ub354 \uc785\ub825\ud574\uc8fc\uc138\uc694.",type:"password",value:t.confirmPassword,onChange:c,onBlur:i,className:n.confirmPassword&&a.confirmPassword?"text-input error":"text-input"}),n.confirmPassword&&a.confirmPassword&&r.a.createElement("div",{className:"input-feedback"},n.confirmPassword)),r.a.createElement($.a.Item,{required:!0,label:"\uc8fc\uc18c"},r.a.createElement(G,{id:"adress",placeholder:"\uc8fc\uc18c\ub97c \uc785\ub825\ud558\uc138\uc694",type:"text",value:t.adress,onChange:c,onBlur:i,className:n.adress&&a.adress?"text-input error":"text-input"}),n.adress&&a.adress&&r.a.createElement("div",{className:"input-feedback"},n.adress)),r.a.createElement($.a.Item,te,r.a.createElement(K.a,{onClick:o,type:"primary",disabled:l},"\uac00\uc785"))))})},ne=a(574);var re=Object(i.f)(function(e){var t=Object(j.c)(function(e){return e.user});return t.userData&&!t.userData.isAuth?r.a.createElement(ne.a,{style:{paddingTop:"10px"},mode:e.mode},r.a.createElement(ne.a.Item,{key:"mail"},r.a.createElement("a",{href:"/login"},r.a.createElement("h6",null,"\ub85c\uadf8\uc778"))),r.a.createElement(ne.a.Item,{key:"app"},r.a.createElement("a",{href:"/register"},r.a.createElement("h6",null,"\ud68c\uc6d0\uac00\uc785")))):r.a.createElement(ne.a,{mode:e.mode,style:{paddingTop:"5px"}},r.a.createElement(ne.a.Item,{key:"history"},r.a.createElement("a",{href:"/history"},r.a.createElement("h6",null,"\uad6c\ub9e4\ub0b4\uc5ed"))),r.a.createElement(ne.a.Item,{key:"upload"},r.a.createElement("a",{href:"/product/upload"},r.a.createElement("h6",null,"\ub4f1\ub85d\ud558\uae30"))),r.a.createElement(ne.a.Item,{key:"cart",style:{paddingBottom:-4}},r.a.createElement("a",{href:"/user/cart",style:{marginRight:-22,paddingbottom:"30px",color:"#667777"}},r.a.createElement(J.a,{type:"shopping-cart",style:{fontSize:30,marginBottom:3}}))),r.a.createElement(ne.a.Item,{key:"logout"},r.a.createElement("a",{onClick:function(){d.a.get("".concat(O,"/logout")).then(function(t){200===t.status?e.history.push("/login"):alert("\ub85c\uadf8\uc544\uc6c3\uc5d0 \uc2e4\ud328\ud588\uc2b5\ub2c8\ub2e4.")})}},r.a.createElement("h6",null,"\ub85c\uadf8\uc544\uc6c3"))))}),le=a(577),ce=(a(548),a(568)),ie=a(570);var oe=function(){var e=Object(n.useState)(!1),t=Object(_.a)(e,2),a=t[0],l=t[1];return r.a.createElement(ce.a,{bg:"white",variant:"light",style:{position:"fixed",zIndex:5,width:"100%",border:"1px solid lightgray"}},r.a.createElement(z.a,null,r.a.createElement(ce.a.Brand,{href:"/"},r.a.createElement("img",{src:"/logo.png",style:{width:"120px",marginLeft:"50px"}})),r.a.createElement(ie.a,{className:"mx-3",style:{position:"relative",right:"0"}},r.a.createElement("div",{className:"menu__container"},r.a.createElement("div",{className:"menu_left"}),r.a.createElement("div",{className:"menu_rigth"},r.a.createElement(re,{mode:"horizontal"})),r.a.createElement(K.a,{className:"menu__mobile-button",type:"primary",onClick:function(){l(!0)}},r.a.createElement(J.a,{type:"align-right"})),r.a.createElement(le.a,{title:"Basic Drawer",placement:"right",className:"menu_drawer",closable:!1,onClose:function(){l(!1)},visible:a},r.a.createElement(re,{mode:"inline"}))))))};var se=function(){return r.a.createElement("div",{style:{height:"80px",display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",fontSize:"1rem"}},r.a.createElement("p",null," Copyright \xa9 2021 Minjeong Park All rights reserved"))},ue=a(279);a(551);function me(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),a.push.apply(a,n)}return a}function de(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?me(a,!0).forEach(function(t){Object(w.a)(e,t,a[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):me(a).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))})}return e}var pe=function(e){var t=Object(n.useState)([]),a=Object(_.a)(t,2),l=a[0],c=a[1];return r.a.createElement("div",{style:{display:"flex",justifyContent:"space-between"}},r.a.createElement(ue.a,{onDrop:function(t){var a=new FormData;a.append("file",t[0]),d.a.post("/api/product/uploadImage",a,{header:{"content-type":"multipart/form-data"}}).then(function(t){t.data.success?(c([].concat(Object(S.a)(l),[t.data.image])),e.refreshFunction([].concat(Object(S.a)(l),[t.data.image]))):alert("Failed to save the Image in Server")})},multiple:!1,maxSize:8e8},function(e){var t=e.getRootProps,a=e.getInputProps;return r.a.createElement("div",Object.assign({style:{width:"300px",height:"240px",border:"1px solid lightgray",borderRadius:"15px",display:"flex",alignItems:"center",justifyContent:"center"}},t()),console.log("getRootProps",de({},t())),console.log("getInputProps",de({},a())),r.a.createElement("input",a()),r.a.createElement(J.a,{type:"plus",style:{fontSize:"3rem"}}))}),r.a.createElement("div",{style:{display:"flex",width:"350px",height:"240px",overflowX:"scroll"}},l.map(function(t,a){return r.a.createElement("div",{onClick:function(){return function(t){var a=l.indexOf(t),n=Object(S.a)(l);n.splice(a,1),c(n),e.refreshFunction(n)}(t)}},r.a.createElement("img",{id:"test",src:"http://localhost:5000/".concat(t)}),r.a.createElement("div",{id:"alert"},"\ud074\ub9ad\ud558\uba74 \uc0ad\uc81c\ub3fc\uc694!"))})))},fe=R.a.TextArea,ye=[{key:1,value:"\uc9c4\ud1b5\uc81c\x1f"},{key:2,value:"\uc18c\ud654\uc81c\x1f"},{key:3,value:"\uac10\uae30\uc57d"},{key:4,value:"\ud574\uc5f4\uc81c"},{key:5,value:"\ud30c\uc2a4\ub958"},{key:6,value:"\uc0c1\ucc98\uce58\ub8cc\x1f"},{key:7,value:"\uae30\ud0c0"}];var he=function(e){var t=Object(n.useState)(""),a=Object(_.a)(t,2),l=a[0],c=a[1],i=Object(n.useState)(""),o=Object(_.a)(i,2),s=o[0],u=o[1],m=Object(n.useState)(0),p=Object(_.a)(m,2),f=p[0],y=p[1],h=Object(n.useState)(1),E=Object(_.a)(h,2),g=E[0],b=E[1],v=Object(n.useState)([]),O=Object(_.a)(v,2),j=O[0],x=O[1],w=function(t){if(t.preventDefault(),!l||!s||!f||!g||!j)return alert("fill all the fields first!");var a={writer:e.user.userData._id,title:l,description:s,price:f,images:j,medicines:g};d.a.post("/api/product/uploadProduct",a).then(function(t){t.data.success?(alert("Product Successfully Uploaded"),e.history.push("/")):alert("Failed to upload Product")})};return r.a.createElement("div",{style:{maxWidth:"700px",margin:"2rem auto"}},r.a.createElement("div",{style:{textAlign:"center",marginBottom:"2rem"}},r.a.createElement("h3",null,"\uc57d \ub4f1\ub85d\ud558\uae30")),r.a.createElement($.a,{onSubmit:w},r.a.createElement(pe,{refreshFunction:function(e){x(e)}}),r.a.createElement("br",null),r.a.createElement("br",null),r.a.createElement("label",null,"\uc57d \uc774\ub984"),r.a.createElement(R.a,{onChange:function(e){c(e.currentTarget.value)},value:l}),r.a.createElement("br",null),r.a.createElement("br",null),r.a.createElement("label",null,"\uc124\uba85"),r.a.createElement(fe,{onChange:function(e){u(e.currentTarget.value)},value:s}),r.a.createElement("br",null),r.a.createElement("br",null),r.a.createElement("label",null,"\uac00\uaca9($)"),r.a.createElement(R.a,{onChange:function(e){y(e.currentTarget.value)},value:f,type:"number"}),r.a.createElement("br",null),r.a.createElement("br",null),r.a.createElement("select",{onChange:function(e){b(e.currentTarget.value)},value:g},ye.map(function(e){return r.a.createElement("option",{key:e.key,value:e.key},e.value," ")})),r.a.createElement("br",null),r.a.createElement("br",null),r.a.createElement(K.a,{onClick:w},"\ub4f1\ub85d")))},Ee=a(272),ge=a.n(Ee);var be=function(e){var t=Object(n.useState)([]),a=Object(_.a)(t,2),l=a[0],c=a[1];return Object(n.useEffect)(function(){if(e.detail.images&&e.detail.images.length>0){var t=[];e.detail.images&&e.detail.images.map(function(e){t.push({original:"http://localhost:5000/".concat(e),thumbnail:"http://localhost:5000/".concat(e)})}),c(t)}},[e.detail]),r.a.createElement("div",null,r.a.createElement(ge.a,{showFullscreenButton:!1,showPlayButton:!1,items:l}))};var ve=function(e){var t=Object(n.useState)({}),a=Object(_.a)(t,2),l=a[0],c=a[1];return Object(n.useEffect)(function(){c(e.detail)},[e.detail]),r.a.createElement(z.a,{style:{paddingTop:"100px"}},r.a.createElement(z.a,{style:{textAlign:"center"}},r.a.createElement("h3",null,"\uac00\uaca9 : ",l.price,"000 \uc6d0")),r.a.createElement("br",null),r.a.createElement("br",null),r.a.createElement("div",{style:{display:"flex",justifyContent:"center"}},r.a.createElement(K.a,{size:"large",shape:"round",type:"danger",onClick:function(){e.addToCart(e.detail._id)}},r.a.createElement("a",{href:"/user/cart"},"\uc7a5\ubc14\uad6c\ub2c8\uc5d0 \ub2f4\uae30"))))};var Oe=function(e){var t=Object(j.b)(),a=e.match.params.productId,l=Object(n.useState)([]),c=Object(_.a)(l,2),i=c[0],o=c[1];return Object(n.useEffect)(function(){d.a.get("/api/product/products_by_id?id=".concat(a,"&type=single")).then(function(e){o(e.data[0])})},[]),r.a.createElement("div",{className:"postPage",style:{width:"100%",padding:"3rem 4rem"}},r.a.createElement("div",{style:{display:"flex",justifyContent:"center"}},r.a.createElement("h1",null,i.title)),r.a.createElement("br",null),r.a.createElement(P.a,{gutter:[16,16]},r.a.createElement(D.a,{lg:12,xs:24},r.a.createElement(be,{detail:i,style:{width:"300px"}})),r.a.createElement(D.a,{lg:12,xs:24},r.a.createElement(ve,{addToCart:function(e){t(function(e){var t=d.a.get("".concat(O,"/addToCart?productId=").concat(e)).then(function(e){return e.data});return{type:E,payload:t}}(e))},detail:i}))))};var je=function(e){var t=function(e){if(e.length>0){var t=e[0];return"http://localhost:5000/".concat(t)}};return r.a.createElement("div",null,r.a.createElement("table",null,r.a.createElement("thead",null,r.a.createElement("tr",{style:{textAlign:"center"}},r.a.createElement("th",null,"\uc0c1\ud488 \uc774\ubbf8\uc9c0"),r.a.createElement("th",null,"\uc0c1\ud488\uba85"),r.a.createElement("th",null,"\uac1c\uc218"),r.a.createElement("th",null,"\uac00\uaca9"),r.a.createElement("th",null,"\uc7a5\ubc14\uad6c\ub2c8\uc5d0\uc11c \uc0ad\uc81c\ud558\uae30"))),r.a.createElement("tbody",null,e.products&&e.products.map(function(a){return r.a.createElement("tr",{key:a._id,style:{margin:"auto",backgroundColor:"white"}},r.a.createElement("td",{style:{margin:"auto",textAlign:"center"}},r.a.createElement("img",{style:{width:"70px"},alt:"product",src:t(a.images)})),r.a.createElement("td",{style:{margin:"auto",textAlign:"center"}},a.title),r.a.createElement("td",{style:{margin:"auto",textAlign:"center"}},a.quantity," EA"),r.a.createElement("td",{style:{margin:"auto",textAlign:"center"}},"$ ",a.price," "),r.a.createElement("td",{style:{margin:"auto",textAlign:"center"}},r.a.createElement("button",{onClick:function(){return e.removeItem(a._id)}},"\u274c")))}))))},xe=a(578),we=a(92),Se=a(273),_e=a(274),ke=a(280),De=a(275),Pe=a(281),Ce=a(276),Ie=a.n(Ce),Ae=function(e){function t(){return Object(Se.a)(this,t),Object(ke.a)(this,Object(De.a)(t).apply(this,arguments))}return Object(Pe.a)(t,e),Object(_e.a)(t,[{key:"render",value:function(){var e=this,t=this.props.toPay;return r.a.createElement(Ie.a,{env:"sandbox",client:{sandbox:"ASbCsyjZeUzpNCkVbbqseQzcXivFRRoyPfpJK24688vFvIchTR-CCK79Ao5FB6zgqIO2r5Xw-a4Xh-44",production:"YOUR-PRODUCTION-APP-ID"},currency:"USD",total:t,onError:function(e){console.log("Error!",e)},onSuccess:function(t){console.log("The payment was succeeded!",t),e.props.onSuccess(t)},onCancel:function(e){console.log("The payment was cancelled!",e)},style:{size:"large",color:"blue",shape:"rect",label:"checkout"}})}}]),t}(r.a.Component);var Te=function(e){var t=Object(j.b)(),a=Object(n.useState)(0),l=Object(_.a)(a,2),c=l[0],i=l[1],o=Object(n.useState)(!1),s=Object(_.a)(o,2),u=s[0],m=s[1],p=Object(n.useState)(!1),f=Object(_.a)(p,2),y=f[0],h=f[1];Object(n.useEffect)(function(){var a=[];e.user.userData&&e.user.userData.cart&&e.user.userData.cart.length>0&&(e.user.userData.cart.forEach(function(e){a.push(e.id)}),t(function(e,t){var a=d.a.get("/api/product/products_by_id?id=".concat(e,"&type=array")).then(function(e){return t.forEach(function(t){e.data.forEach(function(a,n){t.id===a._id&&(e.data[n].quantity=t.quantity)})}),e.data});return{type:g,payload:a}}(a,e.user.userData.cart)).then(function(e){e.payload.length>0&&E(e.payload)}))},[e.user.userData]);var E=function(e){var t=0;e.map(function(e){t+=parseInt(e.price,10)*e.quantity}),i(t),m(!0)};return r.a.createElement("div",{style:{width:"85%",margin:"3rem auto"}},r.a.createElement("h1",null,"\uc7a5\ubc14\uad6c\ub2c8"),r.a.createElement("div",{style:{marginTop:"30px"}},r.a.createElement(je,{products:e.user.cartDetail,removeItem:function(e){t(function(e){var t=d.a.get("/api/users/removeFromCart?_id=".concat(e)).then(function(e){return e.data.cart.forEach(function(t){e.data.cartDetail.forEach(function(a,n){t.id===a._id&&(e.data.cartDetail[n].quantity=t.quantity)})}),e.data});return{type:b,payload:t}}(e)).then(function(e){e.payload.cartDetail.length<=0?m(!1):E(e.payload.cartDetail)})}}),u?r.a.createElement("div",{style:{marginTop:"3rem",textAlign:"right"}},r.a.createElement("h2",null,"\ucd1d \uae08\uc561: $",c," ")):y?r.a.createElement(xe.a,{status:"success",title:"Successfully Purchased Items"}):r.a.createElement("div",{style:{width:"100%",display:"flex",flexDirection:"column",justifyContent:"center"}},r.a.createElement("br",null),r.a.createElement(we.a,{description:!1}),r.a.createElement("p",null,"\uc7a5\ubc14\uad6c\ub2c8\uac00 \ube44\uc5c8\uc2b5\ub2c8\ub2e4."))),u&&r.a.createElement(z.a,{style:{width:"max-content",marginTop:"100px"}},r.a.createElement(Ae,{sty:!0,toPay:c,onSuccess:function(a){t(function(e){var t=d.a.post("".concat(O,"/successBuy"),e).then(function(e){return e.data});return{type:v,payload:t}}({cartDetail:e.user.cartDetail,paymentData:a})).then(function(e){e.payload.success&&(h(!0),m(!1))})},transactionError:function(){console.log("Paypal error")},transactionCanceled:function(){console.log("Transaction canceled")}})))};var Ne=function(e){return r.a.createElement("div",{style:{width:"80%",margin:"3rem auto"}},r.a.createElement("div",{style:{textAlign:"center"}},r.a.createElement("h1",null,"\uad6c\ub9e4\ub0b4\uc5ed")),r.a.createElement("br",null),r.a.createElement("table",null,r.a.createElement("thead",null,r.a.createElement("tr",null,r.a.createElement("th",{style:{textAlign:"center"}},"\uad6c\ub9e4 ID"),r.a.createElement("th",{style:{textAlign:"center"}},"\uac00\uaca9"),r.a.createElement("th",{style:{textAlign:"center"}},"\uc218\ub7c9"),r.a.createElement("th",{style:{textAlign:"center"}},"\uad6c\ub9e4 \ub0a0\uc9dc"))),r.a.createElement("tbody",null,e.user.userData&&e.user.userData.history&&e.user.userData.history.map(function(e){return r.a.createElement("tr",{key:e.id},r.a.createElement("td",{style:{textAlign:"center",margin:"auto"}},e.id),r.a.createElement("td",{style:{textAlign:"center",margin:"auto"}},e.price),r.a.createElement("td",{style:{textAlign:"center",margin:"auto"}},e.quantity),r.a.createElement("td",{style:{textAlign:"center",margin:"auto"}},e.dateOfPurchase))}))))};var qe=function(e){};var Be=function(){return r.a.createElement(n.Suspense,{fallback:r.a.createElement("div",null,"Loading...")},r.a.createElement(oe,null),r.a.createElement("div",{style:{paddingTop:"75px",minHeight:"calc(100vh - 80px)"}},r.a.createElement(i.c,null,r.a.createElement(i.a,{exact:!0,path:"/",component:x(U,null)}),r.a.createElement(i.a,{exact:!0,path:"/login",component:x(Q,!1)}),r.a.createElement(i.a,{exact:!0,path:"/register",component:x(ae,!1)}),r.a.createElement(i.a,{exact:!0,path:"/product/upload",component:x(he,!0)}),r.a.createElement(i.a,{exact:!0,path:"/product/:productId",component:x(Oe,null)}),r.a.createElement(i.a,{exact:!0,path:"/user/cart",component:x(Te,!0)}),r.a.createElement(i.a,{exact:!0,path:"/history",component:x(Ne,!0)}),r.a.createElement(i.a,{exact:!0,path:"/admin",component:x(qe,!0)}))),r.a.createElement(se,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 Fe=a(101),Re=a(76);function ze(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),a.push.apply(a,n)}return a}function Me(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?ze(a,!0).forEach(function(t){Object(w.a)(e,t,a[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):ze(a).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))})}return e}var Xe=Object(Re.c)({user:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0;switch(t.type){case f:return Me({},e,{register:t.payload});case p:return Me({},e,{loginSucces:t.payload});case y:return Me({},e,{userData:t.payload});case h:return Me({},e);case E:return Me({},e,{userData:Me({},e.userData,{cart:t.payload})});case g:return Me({},e,{cartDetail:t.payload});case b:return Me({},e,{cartDetail:t.payload.cartDetail,userData:Me({},e.userData,{cart:t.payload.cart})});case v:return Me({},e,{userData:Me({},e.userData,{cart:t.payload.cart}),cartDetail:t.payload.cartDetail});default:return e}}}),Ue=a(277),We=a.n(Ue),Le=a(278),Ve=Object(Re.a)(We.a,Le.a)(Re.d);c.a.render(r.a.createElement(j.a,{store:Ve(Xe,window.__REDUX_DEVTOOLS_EXTENSION__&&window.__REDUX_DEVTOOLS_EXTENSION__())},r.a.createElement(Fe.a,null,r.a.createElement(Be,null))),document.getElementById("root")),"serviceWorker"in navigator&&navigator.serviceWorker.ready.then(function(e){e.unregister()})}},[[284,1,2]]]);
2 +//# sourceMappingURL=main.30dbcb82.chunk.js.map
...\ No newline at end of file ...\ No newline at end of file
1 +{"version":3,"sources":["_actions/types.js","components/Config.js","hoc/auth.js","_actions/user_actions.js","components/utils/ImageSlider.js","components/views/LandingPage/Sections/CheckBox.js","components/views/LandingPage/Sections/Datas.js","components/views/LandingPage/Sections/SearchFeature.js","components/views/LandingPage/LandingPage.js","components/views/LoginPage/LoginPage.js","components/views/RegisterPage/RegisterPage.js","components/views/NavBar/Sections/RightMenu.js","components/views/NavBar/NavBar.js","components/views/Footer/Footer.js","components/utils/FileUpload.js","components/views/UploadProductPage/UploadProductPage.js","components/views/DetailProductPage/Sections/ProductImage.js","components/views/DetailProductPage/Sections/ProductInfo.js","components/views/DetailProductPage/DetailProductPage.js","components/views/CartPage/Sections/UserCardBlock.js","components/utils/Paypal.js","components/views/CartPage/CartPage.js","components/views/HistoryPage/HistoryPage.js","components/views/adminPage/adminPage.js","components/App.js","serviceWorker.js","_reducers/user_reducer.js","_reducers/index.js","index.js"],"names":["LOGIN_USER","REGISTER_USER","AUTH_USER","LOGOUT_USER","ADD_TO_CART_USER","GET_CART_ITEMS_USER","REMOVE_CART_ITEM_USER","ON_SUCCESS_BUY_USER","USER_SERVER","hoc_auth","ComposedClass","reload","adminRoute","arguments","length","undefined","props","user","useSelector","state","dispatch","useDispatch","useEffect","request","axios","get","concat","then","response","data","type","payload","auth","_ref","Object","asyncToGenerator","regenerator_default","a","mark","_callee","wrap","_context","prev","next","isAuth","sent","history","push","isAdmin","stop","_x","apply","this","googleAuth","react_default","createElement","assign","ImageSlider","carousel","autoplay","images","map","image","index","key","style","width","maxWidth","height","src","alt","Panel","Collapse","CheckBox","_useState","useState","_useState2","slicedToArray","Checked","setChecked","collapse","defaultActiveKey","header","list","value","Fragment","es_checkbox","onChange","currentIndex","indexOf","newChecked","toConsumableArray","splice","handleFilters","handleToggle","_id","checked","name","medicines","price","array","Input","Search","SearchFeature","Meta","Card","LandingPage","Products","setProducts","_useState3","_useState4","Skip","setSkip","_useState5","_useState6","Limit","_useState7","_useState8","PostSize","setPostSize","_useState9","_useState10","SearchTerms","_useState11","_useState12","Filters","setFilters","getProducts","skip","limit","variables","Axios","post","success","loadMore","products","postSize","alert","renderCards","product","col","marginTop","lg","md","xs","card","margin","hoverable","cover","href","utils_ImageSlider","title","description","filters","category","newFilters","_objectSpread","priceValues","parseInt","console","log","handlePrice","showFilteredResults","textAlign","Container","Sections_CheckBox","display","justifyContent","alignItems","row","gutter","onClick","searchTerm","Title","Typography","withRouter","rememberMeChecked","localStorage","getItem","formErrorMessage","setFormErrorMessage","rememberMe","formik_esm","initialValues","email","password","validationSchema","Yup","shape","required","min","onSubmit","values","setSubmitting","setTimeout","dataToSubmit","loginUser","loginSuccess","window","setItem","userId","id","removeItem","catch","err","touched","errors","isSubmitting","dirty","handleChange","handleBlur","handleSubmit","handleReset","className","level","es_form","Item","input","prefix","icon","color","placeholder","onBlur","fontSize","border","padding","borderRadius","es_button","htmlType","minWidth","disabled","TextArea","formItemLayout","labelCol","span","sm","wrapperCol","tailFormItemLayout","offset","RegisterPage","address","confirmPassword","oneOf","adress","moment","unix","registerUser","errmsg","label","userData","menu","paddingTop","mode","paddingBottom","marginRight","paddingbottom","marginBottom","status","NavBar","visible","setVisible","esm_Navbar","bg","variant","position","zIndex","Brand","marginLeft","Nav","right","Sections_RightMenu","drawer","placement","closable","onClose","Footer","flexDirection","FileUpload","Images","setImages","dist_es","onDrop","files","formData","FormData","append","content-type","refreshFunction","multiple","maxSize","getRootProps","getInputProps","FileUpload_objectSpread","overflowX","newImages","onDelete","Medicines","UploadProductPage","TitleValue","setTitleValue","DescriptionValue","setDescriptionValue","PriceValue","setPriceValue","MedicinesValue","setMedicinesValue","event","preventDefault","writer","utils_FileUpload","currentTarget","UploadProductPage_TextArea","item","ProductImage","detail","original","thumbnail","image_gallery_default","showFullscreenButton","showPlayButton","items","ProductInfo","Product","setProduct","size","addToCart","DetailProductPage","productId","match","params","Sections_ProductImage","Sections_ProductInfo","UserCardBlock","renderCartImage","backgroundColor","quantity","Paypal","_this","total","toPay","react_paypal_express_checkout_default","env","client","sandbox","production","currency","onError","onSuccess","payment","onCancel","React","Component","CartPage","Total","setTotal","ShowTotal","setShowTotal","ShowSuccess","setShowSuccess","cartItems","cart","forEach","userCart","cartItem","productDetail","i","getCartItems","calculateTotal","cartDetail","Sections_UserCardBlock","k","removeCartItem","result","empty","Paypal_Paypal","sty","onSuccessBuy","paymentData","transactionError","transactionCanceled","HistoryPage","dateOfPurchase","adminPage","App","react","fallback","NavBar_NavBar","minHeight","react_router","exact","path","component","Auth","LoginPage","Footer_Footer","Boolean","location","hostname","rootReducer","combineReducers","action","user_reducer_objectSpread","register","loginSucces","createStoreWithMiddleware","applyMiddleware","promiseMiddleware","ReduxThunk","createStore","ReactDOM","render","es","store","Reducer","__REDUX_DEVTOOLS_EXTENSION__","react_router_dom","components_App","document","getElementById","navigator","serviceWorker","ready","registration","unregister"],"mappings":"0SAAaA,EAAa,aACbC,EAAgB,gBAChBC,EAAY,YACZC,EAAc,cACdC,EAAmB,mBACnBC,EAAsB,sBACtBC,EAAwB,wBACxBC,EAAsB,sBCNtBC,EAAc,qCCGZC,EAAA,SAAUC,EAAeC,GAA2B,IAAnBC,EAAmBC,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAN,KA+BzD,OA9BA,SAA6BG,GAEzB,IAAIC,EAAOC,YAAY,SAAAC,GAAK,OAAIA,EAAMF,OAChCG,EAAWC,cAuBjB,OArBAC,oBAAU,WAENF,ECqBL,WACH,IAAMG,EAAUC,IAAMC,IAAN,GAAAC,OAAalB,EAAb,UACXmB,KAAK,SAAAC,GAAQ,OAAIA,EAASC,OAE/B,MAAO,CACHC,KAAM5B,EACN6B,QAASR,GD3BIS,IAAQL,KAAjB,eAAAM,EAAAC,OAAAC,EAAA,EAAAD,CAAAE,EAAAC,EAAAC,KAAsB,SAAAC,EAAMX,GAAN,OAAAQ,EAAAC,EAAAG,KAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,cAAAF,EAAAE,KAAA,GACPf,EAASG,QAAQa,OADV,WAAAH,EAAAI,KAAA,CAAAJ,EAAAE,KAAA,QAEVhC,GACAK,EAAM8B,QAAQC,KAAK,UAHTN,EAAAE,KAAA,eAMV/B,IAAegB,EAASG,QAAQiB,QAChChC,EAAM8B,QAAQC,KAAK,MAGJ,IAAXpC,GACAK,EAAM8B,QAAQC,KAAK,KAXb,wBAAAN,EAAAQ,SAAAV,MAAtB,gBAAAW,GAAA,OAAAjB,EAAAkB,MAAAC,KAAAvC,YAAA,KAiBD,CAACO,EAAUJ,EAAM8B,QAAS7B,EAAKoC,aAG9BC,EAAAjB,EAAAkB,cAAC7C,EAADwB,OAAAsB,OAAA,GAAmBxC,EAAnB,CAA0BC,KAAMA,iEEf7BwC,MAdf,SAAqBzC,GACnB,OACEsC,EAAAjB,EAAAkB,cAAA,WACED,EAAAjB,EAAAkB,cAACG,EAAA,EAAD,CAAUC,UAAQ,GACf3C,EAAM4C,OAAOC,IAAI,SAACC,EAAOC,GAAR,OAChBT,EAAAjB,EAAAkB,cAAA,OAAKS,IAAKD,GACRT,EAAAjB,EAAAkB,cAAA,OAAKU,MAAO,CAAEC,MAAO,OAAQC,SAAU,QAASC,OAAQ,SAAWC,IAAG,yBAAA3C,OAA2BoC,GAASQ,IAAI,yCCNlHC,EAAUC,IAAVD,MA6COE,MA1Cf,SAAkBzD,GAAO,IAAA0D,EAESC,mBAAS,IAFlBC,EAAA1C,OAAA2C,EAAA,EAAA3C,CAAAwC,EAAA,GAEdI,EAFcF,EAAA,GAELG,EAFKH,EAAA,GA+BrB,OACItB,EAAAjB,EAAAkB,cAAA,WACID,EAAAjB,EAAAkB,cAACyB,EAAA,EAAD,CAAUC,iBAAkB,CAAC,MACzB3B,EAAAjB,EAAAkB,cAACgB,EAAD,CAAOW,OAAO,sBAAOlB,IAAI,KAdHhD,EAAMmE,MAAQnE,EAAMmE,KAAKtB,IAAI,SAACuB,EAAOrB,GAAR,OAC3DT,EAAAjB,EAAAkB,cAACD,EAAAjB,EAAMgD,SAAP,CAAgBrB,IAAKD,GACjBT,EAAAjB,EAAAkB,cAAC+B,EAAA,EAAD,CACIC,SAAU,kBAnBD,SAACH,GAElB,IAAMI,EAAeV,EAAQW,QAAQL,GAC/BM,EAAUxD,OAAAyD,EAAA,EAAAzD,CAAO4C,IAED,IAAlBU,EACAE,EAAW3C,KAAKqC,GAEhBM,EAAWE,OAAOJ,EAAc,GAGpCT,EAAWW,GACX1E,EAAM6E,cAAcH,GAOII,CAAaV,EAAMW,MACnCjE,KAAK,WACLkE,SAAyC,IAAhClB,EAAQW,QAAQL,EAAMW,OAJvC,WAMIzC,EAAAjB,EAAAkB,cAAA,YAAO6B,EAAMa,aC/BnBC,EAAY,CAChB,CAAEH,IAAK,EAAGE,KAAM,gBAChB,CACEF,IAAK,EACLE,KAAM,sBAER,CACEF,IAAK,EACLE,KAAM,sBAER,CACEF,IAAK,EACLE,KAAM,sBAER,CACEF,IAAK,EACLE,KAAM,sBAER,CACEF,IAAK,EACLE,KAAM,sBAER,CACEF,IAAK,EACLE,KAAM,4BAER,CACEF,IAAK,EACLE,KAAM,iBAOJE,EAAQ,CACZ,CACEJ,IAAK,EACLE,KAAM,MACNG,MAAO,IAET,CACEL,IAAK,EACLE,KAAM,kCACNG,MAAO,CAAC,IAEV,CACEL,IAAK,EACLE,KAAM,4CACNG,MAAO,CAAC,IAAK,MAEf,CACEL,IAAK,EACLE,KAAM,6CACNG,MAAO,CAAC,KAAM,MAEhB,CACEL,IAAK,EACLE,KAAM,4CACNG,MAAO,CAAC,KAAM,MAEhB,CACEL,IAAK,EACLE,KAAM,0BACNG,MAAO,CAAC,IAAM,iBC/DCC,IAAXC,OAkBOC,6OCZPC,EAASC,IAATD,KAmKOE,MAjKf,WAAuB,IAAAhC,EACWC,mBAAS,IADpBC,EAAA1C,OAAA2C,EAAA,EAAA3C,CAAAwC,EAAA,GACdiC,EADc/B,EAAA,GACJgC,EADIhC,EAAA,GAAAiC,EAEGlC,mBAAS,GAFZmC,EAAA5E,OAAA2C,EAAA,EAAA3C,CAAA2E,EAAA,GAEdE,EAFcD,EAAA,GAERE,EAFQF,EAAA,GAAAG,EAGKtC,mBAAS,GAHduC,EAAAhF,OAAA2C,EAAA,EAAA3C,CAAA+E,EAAA,GAGdE,EAHcD,EAAA,GAAAE,GAAAF,EAAA,GAIWvC,sBAJX0C,EAAAnF,OAAA2C,EAAA,EAAA3C,CAAAkF,EAAA,GAIdE,EAJcD,EAAA,GAIJE,EAJIF,EAAA,GAAAG,EAKiB7C,mBAAS,IAL1B8C,EAAAvF,OAAA2C,EAAA,EAAA3C,CAAAsF,EAAA,GAKdE,EALcD,EAAA,GAAAE,GAAAF,EAAA,GAOS9C,mBAAS,CACrCuB,UAAW,GACXC,MAAO,MATYyB,EAAA1F,OAAA2C,EAAA,EAAA3C,CAAAyF,EAAA,GAOdE,EAPcD,EAAA,GAOLE,EAPKF,EAAA,GAYrBtG,oBAAU,WAMRyG,EALkB,CAChBC,KAAMjB,EACNkB,MAAOd,KAIR,IAEH,IAAMY,EAAc,SAAAG,GAClBC,IAAMC,KAAK,2BAA4BF,GAAWvG,KAAK,SAAAC,GACjDA,EAASC,KAAKwG,SACZH,EAAUI,SACZ1B,EAAW,GAAAlF,OAAAQ,OAAAyD,EAAA,EAAAzD,CAAKyE,GAALzE,OAAAyD,EAAA,EAAAzD,CAAkBN,EAASC,KAAK0G,YAE3C3B,EAAYhF,EAASC,KAAK0G,UAE5BhB,EAAY3F,EAASC,KAAK2G,WAE1BC,MAAM,kDAmBNC,EAAc/B,EAAS9C,IAAI,SAAC8E,EAAS5E,GACzC,OACET,EAAAjB,EAAAkB,cAACqF,EAAA,EAAD,CAAK3E,MAAO,CAAE4E,UAAW,QAAUC,GAAI,EAAGC,GAAI,EAAGC,GAAI,IACnD1F,EAAAjB,EAAAkB,cAAC0F,EAAA,EAAD,CACEhF,MAAO,CAAEiF,OAAQ,OACjBC,WAAW,EACXC,MACE9F,EAAAjB,EAAAkB,cAAA,KAAG8F,KAAI,YAAA3H,OAAciH,EAAQ5C,MAC3BzC,EAAAjB,EAAAkB,cAAC+F,EAAD,CAAa1F,OAAQ+E,EAAQ/E,WAIjCN,EAAAjB,EAAAkB,cAACiD,EAAD,CAAM+C,MAAOZ,EAAQY,MAAOC,YAAW,GAAA9H,OAAKiH,EAAQxC,MAAb,mBA6BzCN,EAAgB,SAAC4D,EAASC,GAC9B,IAAMC,uVAAUC,CAAA,GAAQ/B,GAIxB,GAFA8B,EAAWD,GAAYD,EAEN,UAAbC,EAAsB,CACxB,IAAIG,EAnBY,SAAAzE,GAClB,IAAMvD,EAAOsE,EACTC,EAAQ,GAEZ,IAAK,IAAIpC,KAAOnC,EACVA,EAAKmC,GAAK+B,MAAQ+D,SAAS1E,EAAO,MACpCgB,EAAQvE,EAAKmC,GAAKoC,OAItB,OADA2D,QAAQC,IAAI,QAAS5D,GACdA,EASa6D,CAAYR,GAC9BE,EAAWD,GAAYG,EAGzBE,QAAQC,IAAIL,GAjCc,SAAAF,GAM1B1B,EALkB,CAChBC,KAAM,EACNC,MAAOd,EACPsC,QAASA,IAGXzC,EAAQ,GA4BRkD,CAAoBP,GACpB7B,EAAW6B,IAiBb,OACErG,EAAAjB,EAAAkB,cAAA,OAAKU,MAAO,CAAEC,MAAO,MAAOgF,OAAQ,cAClC5F,EAAAjB,EAAAkB,cAAA,OAAKU,MAAO,CAAEkG,UAAW,WACvB7G,EAAAjB,EAAAkB,cAAA,OAAKc,IAAK,oBAAqBJ,MAAO,CAAEC,MAAO,YASjDZ,EAAAjB,EAAAkB,cAAC6G,EAAA,EAAD,CAAWnG,MAAO,CAAEC,MAAO,QACzBZ,EAAAjB,EAAAkB,cAAC8G,EAAD,CAAUlF,KAAMe,EAAWL,cAAe,SAAA4D,GAAO,OAAI5D,EAAc4D,EAAS,iBAKzD,IAApB9C,EAAS7F,OACRwC,EAAAjB,EAAAkB,cAAA,OAAKU,MAAO,CAAEqG,QAAS,OAAQlG,OAAQ,QAASmG,eAAgB,SAAUC,WAAY,YAKtFlH,EAAAjB,EAAAkB,cAAA,WACED,EAAAjB,EAAAkB,cAACkH,EAAA,EAAD,CAAKC,OAAQ,CAAC,GAAI,KAAMhC,IAG5BpF,EAAAjB,EAAAkB,cAAA,WACAD,EAAAjB,EAAAkB,cAAA,WAEC+D,GAAYH,GACX7D,EAAAjB,EAAAkB,cAAA,OAAKU,MAAO,CAAEqG,QAAS,OAAQC,eAAgB,WAC7CjH,EAAAjB,EAAAkB,cAAA,UAAQoH,QAtHG,WACjB,IAAI3C,EAAOjB,EAAOI,EASlBY,EAPkB,CAChBC,KAAMA,EACNC,MAAOd,EACPmB,UAAU,EACVmB,QAAS5B,EACT+C,WAAYlD,IAGdV,EAAQgB,KA2GF,oEC7JF6C,EAAUC,IAAVD,MA8GOE,kBA5Gf,SAAmB/J,GACjB,IAAMI,EAAWC,cACX2J,IAAoBC,aAAaC,QAAQ,cAFvBxG,EAIwBC,mBAAS,IAJjCC,EAAA1C,OAAA2C,EAAA,EAAA3C,CAAAwC,EAAA,GAIjByG,EAJiBvG,EAAA,GAICwG,EAJDxG,EAAA,GAAAiC,EAKYlC,mBAASqG,GALrBlE,EAAA5E,OAAA2C,EAAA,EAAA3C,CAAA2E,EAAA,GAKjBwE,EALiBvE,EAAA,GAYxB,OAZwBA,EAAA,GAatBxD,EAAAjB,EAAAkB,cAAC+H,EAAA,EAAD,CACEC,cAAe,CACbC,MAAO,GACPC,SAAU,IAEZC,iBAAkBC,WAAaC,MAAM,CACnCJ,MAAOG,WAAaH,MAAM,+EAAmBK,SAAS,kEACtDJ,SAAUE,WAAaG,IAAI,EAAG,yEAAkBD,SAAS,0EAE3DE,SAAU,SAACC,EAAD/J,GAA+B,IAApBgK,EAAoBhK,EAApBgK,cACnBC,WAAW,WACT,IAAIC,EAAe,CACjBX,MAAOQ,EAAOR,MACdC,SAAUO,EAAOP,UAGnBrK,ENhBH,SAAmB+K,GACtB,IAAM5K,EAAUC,IAAM4G,KAAN,GAAA1G,OAAclB,EAAd,UAAmC2L,GAC9CxK,KAAK,SAAAC,GAAQ,OAAIA,EAASC,OAE/B,MAAO,CACHC,KAAM9B,EACN+B,QAASR,GMUE6K,CAAUD,IAChBxK,KAAK,SAAAC,GACAA,EAASG,QAAQsK,cACnBC,OAAOrB,aAAasB,QAAQ,SAAU3K,EAASG,QAAQyK,SACpC,IAAfnB,EACFiB,OAAOrB,aAAasB,QAAQ,aAAcP,EAAOS,IAEjDxB,aAAayB,WAAW,cAE1B1L,EAAM8B,QAAQC,KAAK,MAEnBqI,EAAoB,8CAGvBuB,MAAM,SAAAC,GACLxB,EAAoB,4CACpBc,WAAW,WACTd,EAAoB,KACnB,OAEPa,GAAc,IACb,OAGJ,SAAAjL,GAAS,IACAgL,EAAsGhL,EAAtGgL,OAAQa,EAA8F7L,EAA9F6L,QAASC,EAAqF9L,EAArF8L,OAAeC,GAAsE/L,EAA7EgM,MAA6EhM,EAAtE+L,cAAcE,EAAwDjM,EAAxDiM,aAAcC,EAA0ClM,EAA1CkM,WAAYC,EAA8BnM,EAA9BmM,aAChF,OAD8GnM,EAAhBoM,YAE5F9J,EAAAjB,EAAAkB,cAAA,OAAK8J,UAAU,OACb/J,EAAAjB,EAAAkB,cAACsH,EAAD,CAAOyC,MAAO,GAAd,sBACAhK,EAAAjB,EAAAkB,cAAA,QAAMwI,SAAUoB,EAAclJ,MAAO,CAAEC,MAAO,UAC5CZ,EAAAjB,EAAAkB,cAACgK,EAAA,EAAKC,KAAN,CAAW3B,UAAQ,GACjBvI,EAAAjB,EAAAkB,cAACkK,EAAA,EAAD,CACEhB,GAAG,QACHiB,OAAQpK,EAAAjB,EAAAkB,cAACoK,EAAA,EAAD,CAAM7L,KAAK,OAAOmC,MAAO,CAAE2J,MAAO,qBAC1CC,YAAY,mBACZ/L,KAAK,QACLsD,MAAO4G,EAAOR,MACdjG,SAAU0H,EACVa,OAAQZ,EACRG,UAAWP,EAAOtB,OAASqB,EAAQrB,MAAQ,mBAAqB,eAEjEsB,EAAOtB,OAASqB,EAAQrB,OAASlI,EAAAjB,EAAAkB,cAAA,OAAK8J,UAAU,kBAAkBP,EAAOtB,QAG5ElI,EAAAjB,EAAAkB,cAACgK,EAAA,EAAKC,KAAN,CAAW3B,UAAQ,GACjBvI,EAAAjB,EAAAkB,cAACkK,EAAA,EAAD,CACEhB,GAAG,WACHiB,OAAQpK,EAAAjB,EAAAkB,cAACoK,EAAA,EAAD,CAAM7L,KAAK,OAAOmC,MAAO,CAAE2J,MAAO,qBAC1CC,YAAY,sBACZ/L,KAAK,WACLsD,MAAO4G,EAAOP,SACdlG,SAAU0H,EACVa,OAAQZ,EACRG,UAAWP,EAAOrB,UAAYoB,EAAQpB,SAAW,mBAAqB,eAEvEqB,EAAOrB,UAAYoB,EAAQpB,UAAYnI,EAAAjB,EAAAkB,cAAA,OAAK8J,UAAU,kBAAkBP,EAAOrB,WAGjFN,GACC7H,EAAAjB,EAAAkB,cAAA,aACED,EAAAjB,EAAAkB,cAAA,KAAGU,MAAO,CAAE2J,MAAO,YAAaG,SAAU,SAAUC,OAAQ,YAAaC,QAAS,OAAQC,aAAc,SAAW/C,IAIvH7H,EAAAjB,EAAAkB,cAACgK,EAAA,EAAKC,KAAN,KACElK,EAAAjB,EAAAkB,cAAA,WACED,EAAAjB,EAAAkB,cAAC4K,EAAA,EAAD,CAAQrM,KAAK,UAAUsM,SAAS,SAASf,UAAU,oBAAoBpJ,MAAO,CAAEoK,SAAU,QAAUC,SAAUvB,EAAchB,SAAUoB,GAAtI,gDCjGVoB,EAAalI,IAAbkI,SACFC,GAAiB,CACrBC,SAAU,CACRzF,GAAI,CAAE0F,KAAM,IACZC,GAAI,CAAED,KAAM,IAEdE,WAAY,CACV5F,GAAI,CAAE0F,KAAM,IACZC,GAAI,CAAED,KAAM,MAGVG,GAAqB,CACzBD,WAAY,CACV5F,GAAI,CACF0F,KAAM,GACNI,OAAQ,GAEVH,GAAI,CACFD,KAAM,GACNI,OAAQ,KAqICC,OAhIf,SAAsB/N,GACpB,IAAMI,EAAWC,cACjB,OACEiC,EAAAjB,EAAAkB,cAAC+H,EAAA,EAAD,CACEC,cAAe,CACbC,MAAO,GACPvF,KAAM,GACN+I,QAAS,GACTvD,SAAU,GACVwD,gBAAiB,IAEnBvD,iBAAkBC,WAAaC,MAAM,CACnC3F,KAAM0F,WAAaE,SAAS,4DAC5BL,MAAOG,WAAaH,MAAM,4FAAsBK,SAAS,kEACzDJ,SAAUE,WAAaG,IAAI,EAAG,mGAAwBD,SAAS,wEAC/DoD,gBAAiBtD,WACduD,MAAM,CAACvD,MAAQ,YAAa,MAAO,qFACnCE,SAAS,4FACZsD,OAAQxD,WAAaE,SAAS,8DAEhCE,SAAU,SAACC,EAAD/J,GAA+B,IAApBgK,EAAoBhK,EAApBgK,cACnBC,WAAW,WACT,IAAIC,EAAe,CACjBX,MAAOQ,EAAOR,MACdC,SAAUO,EAAOP,SACjBxF,KAAM+F,EAAO/F,KACbkJ,OAAQnD,EAAOmD,OACfrL,MAAK,8BAAApC,OAAgC0N,MAASC,OAAzC,iBAGPjO,EPjDH,SAAsB+K,GACzB,IAAM5K,EAAUC,IAAM4G,KAAN,GAAA1G,OAAclB,EAAd,aAAsC2L,GACjDxK,KAAK,SAAAC,GAAQ,OAAIA,EAASC,OAE/B,MAAO,CACHC,KAAM7B,EACN8B,QAASR,GO2CE+N,CAAanD,IAAexK,KAAK,SAAAC,GACpCA,EAASG,QAAQsG,QACnBrH,EAAM8B,QAAQC,KAAK,UAEnB0F,MAAM7G,EAASG,QAAQ6K,IAAI2C,UAI/BtD,GAAc,IACb,OAGJ,SAAAjL,GAAS,IACAgL,EAAsGhL,EAAtGgL,OAAQa,EAA8F7L,EAA9F6L,QAASC,EAAqF9L,EAArF8L,OAAeC,GAAsE/L,EAA7EgM,MAA6EhM,EAAtE+L,cAAcE,EAAwDjM,EAAxDiM,aAAcC,EAA0ClM,EAA1CkM,WAAYC,EAA8BnM,EAA9BmM,aAChF,OAD8GnM,EAAhBoM,YAE5F9J,EAAAjB,EAAAkB,cAAA,OAAK8J,UAAU,OACb/J,EAAAjB,EAAAkB,cAAA,sCACAD,EAAAjB,EAAAkB,cAACgK,EAAA,EAADrL,OAAAsB,OAAA,CAAMS,MAAO,CAAEoK,SAAU,UAAeG,GAAxC,CAAwDzC,SAAUoB,IAChE7J,EAAAjB,EAAAkB,cAACgK,EAAA,EAAKC,KAAN,CAAW3B,UAAQ,EAAC2D,MAAM,gBACxBlM,EAAAjB,EAAAkB,cAACkK,EAAA,EAAD,CACEhB,GAAG,OACHoB,YAAY,oDACZ/L,KAAK,OACLsD,MAAO4G,EAAO/F,KACdV,SAAU0H,EACVa,OAAQZ,EACRG,UAAWP,EAAO7G,MAAQ4G,EAAQ5G,KAAO,mBAAqB,eAE/D6G,EAAO7G,MAAQ4G,EAAQ5G,MAAQ3C,EAAAjB,EAAAkB,cAAA,OAAK8J,UAAU,kBAAkBP,EAAO7G,OAK1E3C,EAAAjB,EAAAkB,cAACgK,EAAA,EAAKC,KAAN,CAAW3B,UAAQ,EAAC2D,MAAM,sBACxBlM,EAAAjB,EAAAkB,cAACkK,EAAA,EAAD,CACEhB,GAAG,QACHoB,YAAY,iEACZ/L,KAAK,QACLsD,MAAO4G,EAAOR,MACdjG,SAAU0H,EACVa,OAAQZ,EACRG,UAAWP,EAAOtB,OAASqB,EAAQrB,MAAQ,mBAAqB,eAEjEsB,EAAOtB,OAASqB,EAAQrB,OAASlI,EAAAjB,EAAAkB,cAAA,OAAK8J,UAAU,kBAAkBP,EAAOtB,QAG5ElI,EAAAjB,EAAAkB,cAACgK,EAAA,EAAKC,KAAN,CAAW3B,UAAQ,EAAC2D,MAAM,4BACxBlM,EAAAjB,EAAAkB,cAACkK,EAAA,EAAD,CACEhB,GAAG,WACHoB,YAAY,uEACZ/L,KAAK,WACLsD,MAAO4G,EAAOP,SACdlG,SAAU0H,EACVa,OAAQZ,EACRG,UAAWP,EAAOrB,UAAYoB,EAAQpB,SAAW,mBAAqB,eAEvEqB,EAAOrB,UAAYoB,EAAQpB,UAAYnI,EAAAjB,EAAAkB,cAAA,OAAK8J,UAAU,kBAAkBP,EAAOrB,WAGlFnI,EAAAjB,EAAAkB,cAACgK,EAAA,EAAKC,KAAN,CAAW3B,UAAQ,EAAC2D,MAAM,yCACxBlM,EAAAjB,EAAAkB,cAACkK,EAAA,EAAD,CACEhB,GAAG,kBACHoB,YAAY,2FACZ/L,KAAK,WACLsD,MAAO4G,EAAOiD,gBACd1J,SAAU0H,EACVa,OAAQZ,EACRG,UAAWP,EAAOmC,iBAAmBpC,EAAQoC,gBAAkB,mBAAqB,eAErFnC,EAAOmC,iBAAmBpC,EAAQoC,iBAAmB3L,EAAAjB,EAAAkB,cAAA,OAAK8J,UAAU,kBAAkBP,EAAOmC,kBAGhG3L,EAAAjB,EAAAkB,cAACgK,EAAA,EAAKC,KAAN,CAAW3B,UAAQ,EAAC2D,MAAM,gBACxBlM,EAAAjB,EAAAkB,cAACgL,EAAD,CACE9B,GAAG,SACHoB,YAAY,oDACZ/L,KAAK,OACLsD,MAAO4G,EAAOmD,OACd5J,SAAU0H,EACVa,OAAQZ,EACRG,UAAWP,EAAOqC,QAAUtC,EAAQsC,OAAS,mBAAqB,eAEnErC,EAAOqC,QAAUtC,EAAQsC,QAAU7L,EAAAjB,EAAAkB,cAAA,OAAK8J,UAAU,kBAAkBP,EAAOqC,SAG9E7L,EAAAjB,EAAAkB,cAACgK,EAAA,EAAKC,KAASqB,GACbvL,EAAAjB,EAAAkB,cAAC4K,EAAA,EAAD,CAAQxD,QAASwC,EAAcrL,KAAK,UAAUwM,SAAUvB,GAAxD,gCCnFDhC,mBAzDf,SAAmB/J,GACjB,IAAMC,EAAOC,YAAY,SAAAC,GAAK,OAAIA,EAAMF,OAaxC,OAAIA,EAAKwO,WAAaxO,EAAKwO,SAAS7M,OAGhCU,EAAAjB,EAAAkB,cAACmM,GAAA,EAAD,CAAMzL,MAAO,CAAE0L,WAAY,QAAUC,KAAM5O,EAAM4O,MAC/CtM,EAAAjB,EAAAkB,cAACmM,GAAA,EAAKlC,KAAN,CAAWxJ,IAAI,QACbV,EAAAjB,EAAAkB,cAAA,KAAG8F,KAAK,UAAS/F,EAAAjB,EAAAkB,cAAA,kCAEnBD,EAAAjB,EAAAkB,cAACmM,GAAA,EAAKlC,KAAN,CAAWxJ,IAAI,OACbV,EAAAjB,EAAAkB,cAAA,KAAG8F,KAAK,aAAY/F,EAAAjB,EAAAkB,cAAA,yCAMxBD,EAAAjB,EAAAkB,cAACmM,GAAA,EAAD,CAAME,KAAM5O,EAAM4O,KAAM3L,MAAO,CAAE0L,WAAY,QAC3CrM,EAAAjB,EAAAkB,cAACmM,GAAA,EAAKlC,KAAN,CAAWxJ,IAAI,WACbV,EAAAjB,EAAAkB,cAAA,KAAG8F,KAAK,YACN/F,EAAAjB,EAAAkB,cAAA,wCAIJD,EAAAjB,EAAAkB,cAACmM,GAAA,EAAKlC,KAAN,CAAWxJ,IAAI,UACbV,EAAAjB,EAAAkB,cAAA,KAAG8F,KAAK,mBACN/F,EAAAjB,EAAAkB,cAAA,wCAIJD,EAAAjB,EAAAkB,cAACmM,GAAA,EAAKlC,KAAN,CAAWxJ,IAAI,OAAOC,MAAO,CAAE4L,eAAgB,IAE3CvM,EAAAjB,EAAAkB,cAAA,KAAG8F,KAAK,aAAapF,MAAO,CAAE6L,aAAc,GAAIC,cAAe,OAAQnC,MAAO,YAC5EtK,EAAAjB,EAAAkB,cAACoK,EAAA,EAAD,CAAM7L,KAAK,gBAAgBmC,MAAO,CAAE8J,SAAU,GAAIiC,aAAc,OAKtE1M,EAAAjB,EAAAkB,cAACmM,GAAA,EAAKlC,KAAN,CAAWxJ,IAAI,UACbV,EAAAjB,EAAAkB,cAAA,KAAGoH,QA/CW,WACpBnJ,IAAMC,IAAN,GAAAC,OAAalB,EAAb,YAAmCmB,KAAK,SAAAC,GACd,MAApBA,EAASqO,OACXjP,EAAM8B,QAAQC,KAAK,UAEnB0F,MAAM,4EA0CuBnF,EAAAjB,EAAAkB,cAAA,kFCftB2M,OArCf,WAAkB,IAAAxL,EACcC,oBAAS,GADvBC,EAAA1C,OAAA2C,EAAA,EAAA3C,CAAAwC,EAAA,GACTyL,EADSvL,EAAA,GACAwL,EADAxL,EAAA,GAWhB,OACEtB,EAAAjB,EAAAkB,cAAC8M,GAAA,EAAD,CAAQC,GAAG,QAAQC,QAAQ,QAAQtM,MAAO,CAAEuM,SAAU,QAASC,OAAQ,EAAGvM,MAAO,OAAQ8J,OAAQ,wBAC/F1K,EAAAjB,EAAAkB,cAAC6G,EAAA,EAAD,KACE9G,EAAAjB,EAAAkB,cAAC8M,GAAA,EAAOK,MAAR,CAAcrH,KAAK,KACjB/F,EAAAjB,EAAAkB,cAAA,OAAKc,IAAK,YAAaJ,MAAO,CAAEC,MAAO,QAASyM,WAAW,WAE7DrN,EAAAjB,EAAAkB,cAACqN,GAAA,EAAD,CAAKvD,UAAU,OAAOpJ,MAAO,CAAEuM,SAAU,WAAYK,MAAO,MAC1DvN,EAAAjB,EAAAkB,cAAA,OAAK8J,UAAU,mBACb/J,EAAAjB,EAAAkB,cAAA,OAAK8J,UAAU,cACf/J,EAAAjB,EAAAkB,cAAA,OAAK8J,UAAU,cACb/J,EAAAjB,EAAAkB,cAACuN,GAAD,CAAWlB,KAAK,gBAElBtM,EAAAjB,EAAAkB,cAAC4K,EAAA,EAAD,CAAQd,UAAU,sBAAsBvL,KAAK,UAAU6I,QApB9C,WACjByF,GAAW,KAoBD9M,EAAAjB,EAAAkB,cAACoK,EAAA,EAAD,CAAM7L,KAAK,iBAEbwB,EAAAjB,EAAAkB,cAACwN,GAAA,EAAD,CAAQxH,MAAM,eAAeyH,UAAU,QAAQ3D,UAAU,cAAc4D,UAAU,EAAOC,QAnBlF,WACdd,GAAW,IAkBuGD,QAASA,GAEjH7M,EAAAjB,EAAAkB,cAACuN,GAAD,CAAWlB,KAAK,iBCdfuB,OAjBf,WACE,OACE7N,EAAAjB,EAAAkB,cAAA,OACEU,MAAO,CACLG,OAAQ,OACRkG,QAAS,OACT8G,cAAe,SACf5G,WAAY,SACZD,eAAgB,SAChBwD,SAAU,SAGZzK,EAAAjB,EAAAkB,cAAA,6oBCwDS8N,OAjEf,SAAoBrQ,GAAO,IAAA0D,EACGC,mBAAS,IADZC,EAAA1C,OAAA2C,EAAA,EAAA3C,CAAAwC,EAAA,GAClB4M,EADkB1M,EAAA,GACV2M,EADU3M,EAAA,GA6BzB,OACEtB,EAAAjB,EAAAkB,cAAA,OAAKU,MAAO,CAAEqG,QAAS,OAAQC,eAAgB,kBAC7CjH,EAAAjB,EAAAkB,cAACiO,GAAA,EAAD,CAAUC,OA5BC,SAAAC,GACb,IAAIC,EAAW,IAAIC,SAInBD,EAASE,OAAO,OAAQH,EAAM,IAC9BvJ,IAAMC,KAAK,2BAA4BuJ,EAJxB,CACbzM,OAAQ,CAAE4M,eAAgB,yBAG6BnQ,KAAK,SAAAC,GACxDA,EAASC,KAAKwG,SAChBkJ,EAAS,GAAA7P,OAAAQ,OAAAyD,EAAA,EAAAzD,CAAKoP,GAAL,CAAa1P,EAASC,KAAKiC,SACpC9C,EAAM+Q,gBAAN,GAAArQ,OAAAQ,OAAAyD,EAAA,EAAAzD,CAA0BoP,GAA1B,CAAkC1P,EAASC,KAAKiC,UAEhD2E,MAAM,yCAiBkBuJ,UAAU,EAAOC,QAAS,KACjD,SAAAhQ,GAAA,IAAGiQ,EAAHjQ,EAAGiQ,aAAcC,EAAjBlQ,EAAiBkQ,cAAjB,OACC7O,EAAAjB,EAAAkB,cAAA,MAAArB,OAAAsB,OAAA,CACES,MAAO,CACLC,MAAO,QACPE,OAAQ,QACR4J,OAAQ,sBACRE,aAAc,OACd5D,QAAS,OACTE,WAAY,SACZD,eAAgB,WAEd2H,KAEHnI,QAAQC,IAAI,eAAZoI,GAAA,GAAiCF,MACjCnI,QAAQC,IAAI,gBAAZoI,GAAA,GAAkCD,MACnC7O,EAAAjB,EAAAkB,cAAA,QAAW4O,KACX7O,EAAAjB,EAAAkB,cAACoK,EAAA,EAAD,CAAM7L,KAAK,OAAOmC,MAAO,CAAE8J,SAAU,aAK3CzK,EAAAjB,EAAAkB,cAAA,OAAKU,MAAO,CAAEqG,QAAS,OAAQpG,MAAO,QAASE,OAAQ,QAASiO,UAAW,WACxEf,EAAOzN,IAAI,SAACC,EAAOC,GAAR,OACVT,EAAAjB,EAAAkB,cAAA,OAAKoH,QAAS,kBApCL,SAAA7G,GACf,IAAM0B,EAAe8L,EAAO7L,QAAQ3B,GAEhCwO,EAASpQ,OAAAyD,EAAA,EAAAzD,CAAOoP,GACpBgB,EAAU1M,OAAOJ,EAAc,GAE/B+L,EAAUe,GACVtR,EAAM+Q,gBAAgBO,GA6BIC,CAASzO,KAC3BR,EAAAjB,EAAAkB,cAAA,OAAKkJ,GAAG,OAAOpI,IAAG,yBAAA3C,OAA2BoC,KAC7CR,EAAAjB,EAAAkB,cAAA,OAAKkJ,GAAG,SAAR,4DC1DJ8B,GAAalI,IAAbkI,SAEFiE,GAAY,CAChB,CAAExO,IAAK,EAAGoB,MAAO,0BACjB,CAAEpB,IAAK,EAAGoB,MAAO,0BACjB,CAAEpB,IAAK,EAAGoB,MAAO,sBACjB,CAAEpB,IAAK,EAAGoB,MAAO,sBACjB,CAAEpB,IAAK,EAAGoB,MAAO,sBACjB,CAAEpB,IAAK,EAAGoB,MAAO,gCACjB,CAAEpB,IAAK,EAAGoB,MAAO,iBA6FJqN,OA1Ff,SAA2BzR,GAAO,IAAA0D,EACIC,mBAAS,IADbC,EAAA1C,OAAA2C,EAAA,EAAA3C,CAAAwC,EAAA,GACzBgO,EADyB9N,EAAA,GACb+N,EADa/N,EAAA,GAAAiC,EAEgBlC,mBAAS,IAFzBmC,EAAA5E,OAAA2C,EAAA,EAAA3C,CAAA2E,EAAA,GAEzB+L,EAFyB9L,EAAA,GAEP+L,EAFO/L,EAAA,GAAAG,EAGItC,mBAAS,GAHbuC,EAAAhF,OAAA2C,EAAA,EAAA3C,CAAA+E,EAAA,GAGzB6L,EAHyB5L,EAAA,GAGb6L,EAHa7L,EAAA,GAAAE,EAIYzC,mBAAS,GAJrB0C,EAAAnF,OAAA2C,EAAA,EAAA3C,CAAAkF,EAAA,GAIzB4L,EAJyB3L,EAAA,GAIT4L,EAJS5L,EAAA,GAAAG,EAMJ7C,mBAAS,IANL8C,EAAAvF,OAAA2C,EAAA,EAAA3C,CAAAsF,EAAA,GAMzB8J,EANyB7J,EAAA,GAMjB8J,EANiB9J,EAAA,GA2B1BsE,EAAW,SAAAmH,GAGf,GAFAA,EAAMC,kBAEDT,IAAeE,IAAqBE,IAAeE,IAAmB1B,EACzE,OAAO7I,MAAM,8BAGf,IAAMP,EAAY,CAChBkL,OAAQpS,EAAMC,KAAKwO,SAAS1J,IAC5BwD,MAAOmJ,EACPlJ,YAAaoJ,EACbzM,MAAO2M,EACPlP,OAAQ0N,EACRpL,UAAW8M,GAGb7K,IAAMC,KAAK,6BAA8BF,GAAWvG,KAAK,SAAAC,GACnDA,EAASC,KAAKwG,SAChBI,MAAM,iCACNzH,EAAM8B,QAAQC,KAAK,MAEnB0F,MAAM,+BAKZ,OACEnF,EAAAjB,EAAAkB,cAAA,OAAKU,MAAO,CAAEE,SAAU,QAAS+E,OAAQ,cACvC5F,EAAAjB,EAAAkB,cAAA,OAAKU,MAAO,CAAEkG,UAAW,SAAU6F,aAAc,SAC7C1M,EAAAjB,EAAAkB,cAAA,8CAGJD,EAAAjB,EAAAkB,cAACgK,EAAA,EAAD,CAAMxB,SAAUA,GAEdzI,EAAAjB,EAAAkB,cAAC8P,GAAD,CAAYtB,gBArCG,SAAAO,GACnBf,EAAUe,MAsCNhP,EAAAjB,EAAAkB,cAAA,WACAD,EAAAjB,EAAAkB,cAAA,WACAD,EAAAjB,EAAAkB,cAAA,oCACAD,EAAAjB,EAAAkB,cAACkK,EAAA,EAAD,CAAOlI,SA1DS,SAAA2N,GACpBP,EAAcO,EAAMI,cAAclO,QAyDEA,MAAOsN,IACvCpP,EAAAjB,EAAAkB,cAAA,WACAD,EAAAjB,EAAAkB,cAAA,WACAD,EAAAjB,EAAAkB,cAAA,6BACAD,EAAAjB,EAAAkB,cAACgQ,GAAD,CAAUhO,SA1DY,SAAA2N,GAC1BL,EAAoBK,EAAMI,cAAclO,QAyDKA,MAAOwN,IAChDtP,EAAAjB,EAAAkB,cAAA,WACAD,EAAAjB,EAAAkB,cAAA,WACAD,EAAAjB,EAAAkB,cAAA,gCACAD,EAAAjB,EAAAkB,cAACkK,EAAA,EAAD,CAAOlI,SA1DS,SAAA2N,GACpBH,EAAcG,EAAMI,cAAclO,QAyDEA,MAAO0N,EAAYhR,KAAK,WACxDwB,EAAAjB,EAAAkB,cAAA,WACAD,EAAAjB,EAAAkB,cAAA,WACAD,EAAAjB,EAAAkB,cAAA,UAAQgC,SAzDkB,SAAA2N,GAC9BD,EAAkBC,EAAMI,cAAclO,QAwDSA,MAAO4N,GACrCR,GAAU3O,IAAI,SAAA2P,GAAI,OACflQ,EAAAjB,EAAAkB,cAAA,UAAQS,IAAKwP,EAAKxP,IAAKoB,MAAOoO,EAAKxP,KAAMwP,EAAKpO,MAA9C,QAGR9B,EAAAjB,EAAAkB,cAAA,WACAD,EAAAjB,EAAAkB,cAAA,WACRD,EAAAjB,EAAAkB,cAAC4K,EAAA,EAAD,CAAQxD,QAASoB,GAAjB,wCC1EO0H,OAxBf,SAAsBzS,GAAO,IAAA0D,EACGC,mBAAS,IADZC,EAAA1C,OAAA2C,EAAA,EAAA3C,CAAAwC,EAAA,GAClB4M,EADkB1M,EAAA,GACV2M,EADU3M,EAAA,GAiBzB,OAdAtD,oBAAU,WACN,GAAIN,EAAM0S,OAAO9P,QAAU5C,EAAM0S,OAAO9P,OAAO9C,OAAS,EAAG,CACvD,IAAI8C,EAAS,GAEb5C,EAAM0S,OAAO9P,QAAU5C,EAAM0S,OAAO9P,OAAOC,IAAI,SAAA2P,GAC3C5P,EAAOb,KAAK,CACR4Q,SAAQ,yBAAAjS,OAA2B8R,GACnCI,UAAS,yBAAAlS,OAA2B8R,OAG5CjC,EAAU3N,KAEf,CAAC5C,EAAM0S,SAGNpQ,EAAAjB,EAAAkB,cAAA,WACID,EAAAjB,EAAAkB,cAACsQ,GAAAxR,EAAD,CAAcyR,sBAAsB,EAAOC,gBAAgB,EAAOC,MAAO1C,MCctE2C,OAhCf,SAAqBjT,GAAO,IAAA0D,EACIC,mBAAS,IADbC,EAAA1C,OAAA2C,EAAA,EAAA3C,CAAAwC,EAAA,GACnBwP,EADmBtP,EAAA,GACVuP,EADUvP,EAAA,GAW1B,OARAtD,oBAAU,WACR6S,EAAWnT,EAAM0S,SAChB,CAAC1S,EAAM0S,SAQRpQ,EAAAjB,EAAAkB,cAAC6G,EAAA,EAAD,CAAWnG,MAAO,CAAE0L,WAAY,UAC9BrM,EAAAjB,EAAAkB,cAAC6G,EAAA,EAAD,CAAWnG,MAAO,CAAEkG,UAAW,WAE7B7G,EAAAjB,EAAAkB,cAAA,4BAAU2Q,EAAQ/N,MAAlB,eAGF7C,EAAAjB,EAAAkB,cAAA,WACAD,EAAAjB,EAAAkB,cAAA,WACAD,EAAAjB,EAAAkB,cAAA,OAAKU,MAAO,CAAEqG,QAAS,OAAQC,eAAgB,WAC7CjH,EAAAjB,EAAAkB,cAAC4K,EAAA,EAAD,CAAQiG,KAAK,QAAQxI,MAAM,QAAQ9J,KAAK,SAAS6I,QAf9B,WACvB3J,EAAMqT,UAAUrT,EAAM0S,OAAO3N,OAevBzC,EAAAjB,EAAAkB,cAAA,KAAG8F,KAAK,cAAR,mDCqBKiL,OAzCf,SAA2BtT,GACvB,IAAMI,EAAWC,cACXkT,EAAYvT,EAAMwT,MAAMC,OAAOF,UAFP7P,EAGAC,mBAAS,IAHTC,EAAA1C,OAAA2C,EAAA,EAAA3C,CAAAwC,EAAA,GAGvBwP,EAHuBtP,EAAA,GAGduP,EAHcvP,EAAA,GAkB9B,OAbAtD,oBAAU,WACN6G,IAAM1G,IAAN,kCAAAC,OAA4C6S,EAA5C,iBACK5S,KAAK,SAAAC,GACFuS,EAAWvS,EAASC,KAAK,OAGlC,IAQCyB,EAAAjB,EAAAkB,cAAA,OAAK8J,UAAU,WAAWpJ,MAAO,CAAEC,MAAO,OAAQ+J,QAAS,cAEvD3K,EAAAjB,EAAAkB,cAAA,OAAKU,MAAO,CAAEqG,QAAS,OAAQC,eAAgB,WAC3CjH,EAAAjB,EAAAkB,cAAA,UAAK2Q,EAAQ3K,QAGjBjG,EAAAjB,EAAAkB,cAAA,WAEAD,EAAAjB,EAAAkB,cAACkH,EAAA,EAAD,CAAKC,OAAQ,CAAC,GAAI,KACdpH,EAAAjB,EAAAkB,cAACqF,EAAA,EAAD,CAAKE,GAAI,GAAIE,GAAI,IACb1F,EAAAjB,EAAAkB,cAACmR,GAAD,CAAchB,OAAQQ,EAASjQ,MAAO,CAACC,MAAO,YAElDZ,EAAAjB,EAAAkB,cAACqF,EAAA,EAAD,CAAKE,GAAI,GAAIE,GAAI,IACb1F,EAAAjB,EAAAkB,cAACoR,GAAD,CACIN,UApBK,SAACE,GACtBnT,EfiCD,SAAmB2E,GACtB,IAAMxE,EAAUC,IAAMC,IAAN,GAAAC,OAAalB,EAAb,yBAAAkB,OAAgDqE,IAC3DpE,KAAK,SAAAC,GAAQ,OAAIA,EAASC,OAE/B,MAAO,CACHC,KAAM1B,EACN2B,QAASR,GevCA8S,CAAUE,KAoBHb,OAAQQ,QCGjBU,OA1Cf,SAAuB5T,GACrB,IAAM6T,EAAkB,SAAAjR,GACtB,GAAIA,EAAO9C,OAAS,EAAG,CACrB,IAAIgD,EAAQF,EAAO,GACnB,+BAAAlC,OAAgCoC,KAoBpC,OACER,EAAAjB,EAAAkB,cAAA,WACED,EAAAjB,EAAAkB,cAAA,aACED,EAAAjB,EAAAkB,cAAA,aACED,EAAAjB,EAAAkB,cAAA,MAAIU,MAAO,CAAEkG,UAAW,WACtB7G,EAAAjB,EAAAkB,cAAA,6CACAD,EAAAjB,EAAAkB,cAAA,gCACAD,EAAAjB,EAAAkB,cAAA,0BACAD,EAAAjB,EAAAkB,cAAA,0BACAD,EAAAjB,EAAAkB,cAAA,6EAGJD,EAAAjB,EAAAkB,cAAA,aA3BJvC,EAAMuH,UACNvH,EAAMuH,SAAS1E,IAAI,SAAA8E,GAAO,OACxBrF,EAAAjB,EAAAkB,cAAA,MAAIS,IAAK2E,EAAQ5C,IAAK9B,MAAO,CAAEiF,OAAQ,OAAQ4L,gBAAiB,UAC9DxR,EAAAjB,EAAAkB,cAAA,MAAIU,MAAO,CAAEiF,OAAQ,OAAQiB,UAAW,WACtC7G,EAAAjB,EAAAkB,cAAA,OAAKU,MAAO,CAAEC,MAAO,QAAUI,IAAI,UAAUD,IAAKwQ,EAAgBlM,EAAQ/E,WAE5EN,EAAAjB,EAAAkB,cAAA,MAAIU,MAAO,CAAEiF,OAAQ,OAAQiB,UAAW,WAAaxB,EAAQY,OAC7DjG,EAAAjB,EAAAkB,cAAA,MAAIU,MAAO,CAAEiF,OAAQ,OAAQiB,UAAW,WAAaxB,EAAQoM,SAA7D,OACAzR,EAAAjB,EAAAkB,cAAA,MAAIU,MAAO,CAAEiF,OAAQ,OAAQiB,UAAW,WAAxC,KAAuDxB,EAAQxC,MAA/D,KACA7C,EAAAjB,EAAAkB,cAAA,MAAIU,MAAO,CAAEiF,OAAQ,OAAQiB,UAAW,WACtC7G,EAAAjB,EAAAkB,cAAA,UAAQoH,QAAS,kBAAM3J,EAAM0L,WAAW/D,EAAQ5C,OAAhD,4GClBWiP,yLACR,IAAAC,EAAA7R,KAuBD8R,EAAQ9R,KAAKpC,MAAMmU,MAcvB,OACI7R,EAAAjB,EAAAkB,cAAC6R,GAAA/S,EAAD,CACIgT,IAlBE,UAmBFC,OAdO,CACXC,QAAS,mFACTC,WAAY,0BAaRC,SAnBO,MAoBPP,MAAOA,EACPQ,QA7BQ,SAAC9I,GAEb7C,QAAQC,IAAI,SAAU4C,IA4BlB+I,UA3CU,SAACC,GAEf7L,QAAQC,IAAI,6BAA8B4L,GAE1CX,EAAKjU,MAAM2U,UAAUC,IAwCjBC,SArCS,SAAChU,GAEdkI,QAAQC,IAAI,6BAA8BnI,IAoCtCoC,MAAO,CACHmQ,KAAK,QACLxG,MAAM,OACNhC,MAAO,OACP4D,MAAO,qBAnDSsG,IAAMC,WC2G3BC,OArGf,SAAkBhV,GAChB,IAAMI,EAAWC,cADMqD,EAEGC,mBAAS,GAFZC,EAAA1C,OAAA2C,EAAA,EAAA3C,CAAAwC,EAAA,GAEhBuR,EAFgBrR,EAAA,GAETsR,EAFStR,EAAA,GAAAiC,EAGWlC,oBAAS,GAHpBmC,EAAA5E,OAAA2C,EAAA,EAAA3C,CAAA2E,EAAA,GAGhBsP,EAHgBrP,EAAA,GAGLsP,EAHKtP,EAAA,GAAAG,EAIetC,oBAAS,GAJxBuC,EAAAhF,OAAA2C,EAAA,EAAA3C,CAAA+E,EAAA,GAIhBoP,EAJgBnP,EAAA,GAIHoP,EAJGpP,EAAA,GAMvB5F,oBAAU,WACR,IAAIiV,EAAY,GACZvV,EAAMC,KAAKwO,UAAYzO,EAAMC,KAAKwO,SAAS+G,MACzCxV,EAAMC,KAAKwO,SAAS+G,KAAK1V,OAAS,IACpCE,EAAMC,KAAKwO,SAAS+G,KAAKC,QAAQ,SAAAjD,GAC/B+C,EAAUxT,KAAKyQ,EAAK/G,MAEtBrL,ElB4CD,SAAsBmV,EAAWG,GACpC,IAAMnV,EAAUC,IAAMC,IAAN,kCAAAC,OAA4C6U,EAA5C,gBACX5U,KAAK,SAAAC,GAcF,OARA8U,EAASD,QAAQ,SAAAE,GACb/U,EAASC,KAAK4U,QAAQ,SAACG,EAAeC,GAC9BF,EAASlK,KAAOmK,EAAc7Q,MAC9BnE,EAASC,KAAKgV,GAAG9B,SAAW4B,EAAS5B,cAK1CnT,EAASC,OAGxB,MAAO,CACHC,KAAMzB,EACN0B,QAASR,GkBjEAuV,CAAaP,EAAWvV,EAAMC,KAAKwO,SAAS+G,OAAO7U,KAAK,SAAAC,GAC3DA,EAASG,QAAQjB,OAAS,GAC5BiW,EAAenV,EAASG,aAK/B,CAACf,EAAMC,KAAKwO,WAEf,IAAMsH,EAAiB,SAAAC,GACrB,IAAI9B,EAAQ,EAEZ8B,EAAWnT,IAAI,SAAA2P,GACb0B,GAASpL,SAAS0J,EAAKrN,MAAO,IAAMqN,EAAKuB,WAG3CmB,EAAShB,GACTkB,GAAa,IAmCf,OACE9S,EAAAjB,EAAAkB,cAAA,OAAKU,MAAO,CAAEC,MAAO,MAAOgF,OAAQ,cAClC5F,EAAAjB,EAAAkB,cAAA,sCACAD,EAAAjB,EAAAkB,cAAA,OAAKU,MAAO,CAAE4E,UAAW,SACvBvF,EAAAjB,EAAAkB,cAAC0T,GAAD,CAAe1O,SAAUvH,EAAMC,KAAK+V,WAAYtK,WApC/B,SAAA6H,GACrBnT,ElBmDG,SAAwBqL,GAC3B,IAAMlL,EAAUC,IAAMC,IAAN,iCAAAC,OAA2C+K,IACtD9K,KAAK,SAAAC,GASF,OAPAA,EAASC,KAAK2U,KAAKC,QAAQ,SAAAjD,GACvB5R,EAASC,KAAKmV,WAAWP,QAAQ,SAACS,EAAGL,GAC7BrD,EAAK/G,KAAOyK,EAAEnR,MACdnE,EAASC,KAAKmV,WAAWH,GAAG9B,SAAWvB,EAAKuB,cAIjDnT,EAASC,OAGxB,MAAO,CACHC,KAAMxB,EACNyB,QAASR,GkBnEJ4V,CAAe5C,IAAY5S,KAAK,SAAAC,GACnCA,EAASG,QAAQiV,WAAWlW,QAAU,EACxCsV,GAAa,GAEbW,EAAenV,EAASG,QAAQiV,iBAgC/Bb,EACC7S,EAAAjB,EAAAkB,cAAA,OAAKU,MAAO,CAAE4E,UAAW,OAAQsB,UAAW,UAC1C7G,EAAAjB,EAAAkB,cAAA,mCAAY0S,EAAZ,MAEAI,EACF/S,EAAAjB,EAAAkB,cAAC6T,GAAA,EAAD,CAAQnH,OAAO,UAAU1G,MAAM,iCAE/BjG,EAAAjB,EAAAkB,cAAA,OACEU,MAAO,CACLC,MAAO,OACPoG,QAAS,OACT8G,cAAe,SACf7G,eAAgB,WAGlBjH,EAAAjB,EAAAkB,cAAA,WACAD,EAAAjB,EAAAkB,cAAC8T,GAAA,EAAD,CAAO7N,aAAa,IACpBlG,EAAAjB,EAAAkB,cAAA,6EAKL4S,GACC7S,EAAAjB,EAAAkB,cAAC6G,EAAA,EAAD,CAAWnG,MAAO,CAAEC,MAAO,cAAe2E,UAAW,UACnDvF,EAAAjB,EAAAkB,cAAC+T,GAAD,CAAQC,KAAG,EAACpC,MAAOc,EAAON,UAnDP,SAAA9T,GACzBT,ElB8DG,SAAsBS,GAEzB,IAAMN,EAAUC,IAAM4G,KAAN,GAAA1G,OAAclB,EAAd,eAAwCqB,GACnDF,KAAK,SAAAC,GAAQ,OAAIA,EAASC,OAE/B,MAAO,CACHC,KAAMvB,EACNwB,QAASR,GkBpEXiW,CAAa,CACXR,WAAYhW,EAAMC,KAAK+V,WACvBS,YAAa5V,KAEfF,KAAK,SAAAC,GACDA,EAASG,QAAQsG,UACnBiO,GAAe,GACfF,GAAa,OA0C8CsB,iBArCxC,WACvB3N,QAAQC,IAAI,iBAoCuF2N,oBAjCzE,WAC1B5N,QAAQC,IAAI,8BClCD4N,OAnCf,SAAqB5W,GACnB,OACEsC,EAAAjB,EAAAkB,cAAA,OAAKU,MAAO,CAAEC,MAAO,MAAOgF,OAAQ,cAClC5F,EAAAjB,EAAAkB,cAAA,OAAKU,MAAO,CAAEkG,UAAW,WACvB7G,EAAAjB,EAAAkB,cAAA,uCAEFD,EAAAjB,EAAAkB,cAAA,WAEAD,EAAAjB,EAAAkB,cAAA,aACED,EAAAjB,EAAAkB,cAAA,aACED,EAAAjB,EAAAkB,cAAA,UACED,EAAAjB,EAAAkB,cAAA,MAAIU,MAAO,CAAEkG,UAAW,WAAxB,mBACA7G,EAAAjB,EAAAkB,cAAA,MAAIU,MAAO,CAAEkG,UAAW,WAAxB,gBACA7G,EAAAjB,EAAAkB,cAAA,MAAIU,MAAO,CAAEkG,UAAW,WAAxB,gBACA7G,EAAAjB,EAAAkB,cAAA,MAAIU,MAAO,CAAEkG,UAAW,WAAxB,+BAIJ7G,EAAAjB,EAAAkB,cAAA,aACGvC,EAAMC,KAAKwO,UACVzO,EAAMC,KAAKwO,SAAS3M,SACpB9B,EAAMC,KAAKwO,SAAS3M,QAAQe,IAAI,SAAA2P,GAAI,OAClClQ,EAAAjB,EAAAkB,cAAA,MAAIS,IAAKwP,EAAK/G,IACZnJ,EAAAjB,EAAAkB,cAAA,MAAIU,MAAO,CAAEkG,UAAW,SAAUjB,OAAQ,SAAWsK,EAAK/G,IAC1DnJ,EAAAjB,EAAAkB,cAAA,MAAIU,MAAO,CAAEkG,UAAW,SAAUjB,OAAQ,SAAWsK,EAAKrN,OAC1D7C,EAAAjB,EAAAkB,cAAA,MAAIU,MAAO,CAAEkG,UAAW,SAAUjB,OAAQ,SAAWsK,EAAKuB,UAC1DzR,EAAAjB,EAAAkB,cAAA,MAAIU,MAAO,CAAEkG,UAAW,SAAUjB,OAAQ,SAAWsK,EAAKqE,uBCrB3DC,OAJf,SAAmB9W,KCiCJ+W,OArBf,WACE,OACEzU,EAAAjB,EAAAkB,cAACyU,EAAA,SAAD,CAAUC,SAAU3U,EAAAjB,EAAAkB,cAAA,0BAClBD,EAAAjB,EAAAkB,cAAC2U,GAAD,MACA5U,EAAAjB,EAAAkB,cAAA,OAAKU,MAAO,CAAE0L,WAAY,OAAQwI,UAAW,uBAC3C7U,EAAAjB,EAAAkB,cAAC6U,EAAA,EAAD,KACE9U,EAAAjB,EAAAkB,cAAC6U,EAAA,EAAD,CAAOC,OAAK,EAACC,KAAK,IAAIC,UAAWC,EAAK9R,EAAa,QACnDpD,EAAAjB,EAAAkB,cAAC6U,EAAA,EAAD,CAAOC,OAAK,EAACC,KAAK,SAASC,UAAWC,EAAKC,GAAW,KACtDnV,EAAAjB,EAAAkB,cAAC6U,EAAA,EAAD,CAAOC,OAAK,EAACC,KAAK,YAAYC,UAAWC,EAAKzJ,IAAc,KAC5DzL,EAAAjB,EAAAkB,cAAC6U,EAAA,EAAD,CAAOC,OAAK,EAACC,KAAK,kBAAkBC,UAAWC,EAAK/F,IAAmB,KACvEnP,EAAAjB,EAAAkB,cAAC6U,EAAA,EAAD,CAAOC,OAAK,EAACC,KAAK,sBAAsBC,UAAWC,EAAKlE,GAAmB,QAC3EhR,EAAAjB,EAAAkB,cAAC6U,EAAA,EAAD,CAAOC,OAAK,EAACC,KAAK,aAAaC,UAAWC,EAAKxC,IAAU,KACzD1S,EAAAjB,EAAAkB,cAAC6U,EAAA,EAAD,CAAOC,OAAK,EAACC,KAAK,WAAWC,UAAWC,EAAKZ,IAAa,KAC1DtU,EAAAjB,EAAAkB,cAAC6U,EAAA,EAAD,CAAOC,OAAK,EAACC,KAAK,SAASC,UAAWC,EAAKV,IAAW,OAG1DxU,EAAAjB,EAAAkB,cAACmV,GAAD,QCnBcC,QACW,cAA7BrM,OAAOsM,SAASC,UAEe,UAA7BvM,OAAOsM,SAASC,UAEhBvM,OAAOsM,SAASC,SAASrE,MACvB,yoBCNS,ICLAsE,GAJKC,aAAgB,CAClC9X,KDQa,WAA8B,IAApBE,EAAoBN,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAZ,GAAImY,EAAQnY,UAAAC,OAAA,EAAAD,UAAA,QAAAE,EACzC,OAAQiY,EAAOlX,MACX,KAAK7B,EACD,OAAOgZ,GAAA,GAAK9X,EAAZ,CAAmB+X,SAAUF,EAAOjX,UACxC,KAAK/B,EACD,OAAOiZ,GAAA,GAAK9X,EAAZ,CAAmBgY,YAAaH,EAAOjX,UAC3C,KAAK7B,EACD,OAAO+Y,GAAA,GAAK9X,EAAZ,CAAmBsO,SAAUuJ,EAAOjX,UACxC,KAAK5B,EACD,OAAO8Y,GAAA,GAAK9X,GAChB,KAAKf,EACD,OAAO6Y,GAAA,GACA9X,EADP,CACcsO,SAASwJ,GAAA,GACZ9X,EAAMsO,SADK,CAEd+G,KAAMwC,EAAOjX,YAGzB,KAAK1B,EACD,OAAO4Y,GAAA,GACA9X,EADP,CACc6V,WAAYgC,EAAOjX,UAErC,KAAKzB,EACD,OAAO2Y,GAAA,GACA9X,EADP,CAEI6V,WAAYgC,EAAOjX,QAAQiV,WAC3BvH,SAASwJ,GAAA,GACF9X,EAAMsO,SADL,CAEJ+G,KAAMwC,EAAOjX,QAAQyU,SAIjC,KAAKjW,EACD,OAAO0Y,GAAA,GACA9X,EADP,CAEIsO,SAASwJ,GAAA,GACF9X,EAAMsO,SADL,CAEJ+G,KAAMwC,EAAOjX,QAAQyU,OAEzBQ,WAAYgC,EAAOjX,QAAQiV,aAGnC,QACI,OAAO7V,qCEzCbiY,GAA4BC,aAAgBC,KAAmBC,KAAnCF,CAA+CG,MAEjFC,IAASC,OACPpW,EAAAjB,EAAAkB,cAACoW,EAAA,EAAD,CAAUC,MAAOR,GAA0BS,GAASvN,OAAOwN,8BAAgCxN,OAAOwN,iCAChGxW,EAAAjB,EAAAkB,cAACwW,GAAA,EAAD,KACEzW,EAAAjB,EAAAkB,cAACyW,GAAD,QAGJC,SAASC,eAAe,SH4GpB,kBAAmBC,WACrBA,UAAUC,cAAcC,MAAM1Y,KAAK,SAAA2Y,GACjCA,EAAaC","file":"static/js/main.30dbcb82.chunk.js","sourcesContent":["export const LOGIN_USER = 'login_user';\r\nexport const REGISTER_USER = 'register_user';\r\nexport const AUTH_USER = 'auth_user';\r\nexport const LOGOUT_USER = 'logout_user';\r\nexport const ADD_TO_CART_USER = 'add_to_cart_user';\r\nexport const GET_CART_ITEMS_USER = 'get_cart_items_user';\r\nexport const REMOVE_CART_ITEM_USER = 'remove_cart_item_user';\r\nexport const ON_SUCCESS_BUY_USER = 'on_success_buy_user';","//SERVER ROUTES\r\nexport const USER_SERVER = '3.209.242.35/api/users';\r\n","import React, { useEffect } from 'react';\r\nimport { auth } from '../_actions/user_actions';\r\nimport { useSelector, useDispatch } from \"react-redux\";\r\n\r\nexport default function (ComposedClass, reload, adminRoute = null) {\r\n function AuthenticationCheck(props) {\r\n\r\n let user = useSelector(state => state.user);\r\n const dispatch = useDispatch();\r\n\r\n useEffect(() => {\r\n\r\n dispatch(auth()).then(async response => {\r\n if (await !response.payload.isAuth) {\r\n if (reload) {\r\n props.history.push('/login')\r\n }\r\n } else {\r\n if (adminRoute && !response.payload.isAdmin) {\r\n props.history.push('/')\r\n }\r\n else {\r\n if (reload === false) {\r\n props.history.push('/')\r\n }\r\n }\r\n }\r\n })\r\n \r\n }, [dispatch, props.history, user.googleAuth])\r\n\r\n return (\r\n <ComposedClass {...props} user={user} />\r\n )\r\n }\r\n return AuthenticationCheck\r\n}\r\n\r\n\r\n","import axios from 'axios';\r\nimport {\r\n LOGIN_USER,\r\n REGISTER_USER,\r\n AUTH_USER,\r\n LOGOUT_USER,\r\n ADD_TO_CART_USER,\r\n GET_CART_ITEMS_USER,\r\n REMOVE_CART_ITEM_USER,\r\n ON_SUCCESS_BUY_USER\r\n} from './types';\r\nimport { USER_SERVER } from '../components/Config.js';\r\n\r\nexport function registerUser(dataToSubmit) {\r\n const request = axios.post(`${USER_SERVER}/register`, dataToSubmit)\r\n .then(response => response.data);\r\n\r\n return {\r\n type: REGISTER_USER,\r\n payload: request\r\n }\r\n}\r\n\r\nexport function loginUser(dataToSubmit) {\r\n const request = axios.post(`${USER_SERVER}/login`, dataToSubmit)\r\n .then(response => response.data);\r\n\r\n return {\r\n type: LOGIN_USER,\r\n payload: request\r\n }\r\n}\r\n\r\nexport function auth() {\r\n const request = axios.get(`${USER_SERVER}/auth`)\r\n .then(response => response.data);\r\n\r\n return {\r\n type: AUTH_USER,\r\n payload: request\r\n }\r\n}\r\n\r\nexport function logoutUser() {\r\n const request = axios.get(`${USER_SERVER}/logout`)\r\n .then(response => response.data);\r\n\r\n return {\r\n type: LOGOUT_USER,\r\n payload: request\r\n }\r\n}\r\n\r\n\r\nexport function addToCart(_id) {\r\n const request = axios.get(`${USER_SERVER}/addToCart?productId=${_id}`)\r\n .then(response => response.data);\r\n\r\n return {\r\n type: ADD_TO_CART_USER,\r\n payload: request\r\n }\r\n}\r\n\r\n\r\n\r\nexport function getCartItems(cartItems, userCart) {\r\n const request = axios.get(`/api/product/products_by_id?id=${cartItems}&type=array`)\r\n .then(response => {\r\n\r\n\r\n //Make CartDetail inside Redux Store \r\n // We need to add quantity data to Product Information that come from Product Collection. \r\n\r\n userCart.forEach(cartItem => {\r\n response.data.forEach((productDetail, i) => {\r\n if (cartItem.id === productDetail._id) {\r\n response.data[i].quantity = cartItem.quantity;\r\n }\r\n })\r\n })\r\n\r\n return response.data;\r\n });\r\n\r\n return {\r\n type: GET_CART_ITEMS_USER,\r\n payload: request\r\n }\r\n}\r\n\r\n\r\n\r\n\r\nexport function removeCartItem(id) {\r\n const request = axios.get(`/api/users/removeFromCart?_id=${id}`)\r\n .then(response => {\r\n\r\n response.data.cart.forEach(item => {\r\n response.data.cartDetail.forEach((k, i) => {\r\n if (item.id === k._id) {\r\n response.data.cartDetail[i].quantity = item.quantity\r\n }\r\n })\r\n })\r\n return response.data;\r\n });\r\n\r\n return {\r\n type: REMOVE_CART_ITEM_USER,\r\n payload: request\r\n }\r\n}\r\n\r\n\r\nexport function onSuccessBuy(data) {\r\n\r\n const request = axios.post(`${USER_SERVER}/successBuy`, data)\r\n .then(response => response.data);\r\n\r\n return {\r\n type: ON_SUCCESS_BUY_USER,\r\n payload: request\r\n }\r\n}\r\n\r\n\r\n\r\n\r\n\r\n","import React from \"react\";\r\nimport { Carousel } from \"antd\";\r\n\r\nfunction ImageSlider(props) {\r\n return (\r\n <div>\r\n <Carousel autoplay>\r\n {props.images.map((image, index) => (\r\n <div key={index}>\r\n <img style={{ width: \"100%\", maxWidth: \"300px\", height: \"300px\" }} src={`http://localhost:5000/${image}`} alt=\"productImage\" />\r\n </div>\r\n ))}\r\n </Carousel>\r\n </div>\r\n );\r\n}\r\n\r\nexport default ImageSlider;\r\n","import React, { useState } from 'react'\r\nimport { Checkbox, Collapse } from 'antd';\r\n\r\nconst { Panel } = Collapse\r\n\r\n\r\nfunction CheckBox(props) {\r\n\r\n const [Checked, setChecked] = useState([])\r\n\r\n const handleToggle = (value) => {\r\n\r\n const currentIndex = Checked.indexOf(value);\r\n const newChecked = [...Checked];\r\n\r\n if (currentIndex === -1) {\r\n newChecked.push(value)\r\n } else {\r\n newChecked.splice(currentIndex, 1)\r\n }\r\n\r\n setChecked(newChecked)\r\n props.handleFilters(newChecked)\r\n\r\n }\r\n\r\n const renderCheckboxLists = () => props.list && props.list.map((value, index) => (\r\n <React.Fragment key={index}>\r\n <Checkbox\r\n onChange={() => handleToggle(value._id)}\r\n type=\"checkbox\"\r\n checked={Checked.indexOf(value._id) === -1 ? false : true}\r\n />&nbsp;&nbsp;\r\n <span>{value.name}</span>\r\n </React.Fragment>\r\n ))\r\n\r\n return (\r\n <div>\r\n <Collapse defaultActiveKey={['0']} >\r\n <Panel header=\"약 종류\" key=\"1\">\r\n {renderCheckboxLists()}\r\n </Panel>\r\n </Collapse>\r\n </div>\r\n )\r\n}\r\n\r\nexport default CheckBox","\r\n\r\nconst medicines = [\r\n { _id: 0, name: \"전체\" },\r\n {\r\n _id: 1,\r\n name: \"진통제\",\r\n },\r\n {\r\n _id: 2,\r\n name: \"소화제\",\r\n },\r\n {\r\n _id: 3,\r\n name: \"감기약\",\r\n },\r\n {\r\n _id: 4,\r\n name: \"해열제\",\r\n },\r\n {\r\n _id: 5,\r\n name: \"파스류\",\r\n },\r\n {\r\n _id: 6,\r\n name: \"상처치료\",\r\n },\r\n {\r\n _id: 7,\r\n name: \"기타\",\r\n },\r\n];\r\n\r\n\r\n\r\n\r\nconst price = [\r\n {\r\n _id: 0,\r\n name: \"Any\",\r\n array: [],\r\n },\r\n {\r\n _id: 1,\r\n name: \"배달비 무료\",\r\n array: [0],\r\n },\r\n {\r\n _id: 2,\r\n name: \"배달비 500원 ~ 1000원\",\r\n array: [500, 1000],\r\n },\r\n {\r\n _id: 3,\r\n name: \"배달비 1000원 ~ 2000원\",\r\n array: [1001, 2000],\r\n },\r\n {\r\n _id: 4,\r\n name: \"배달비 200원 ~ 3000원\",\r\n array: [2001, 3000],\r\n },\r\n {\r\n _id: 5,\r\n name: \"3000원 이상\",\r\n array: [3000, 1500000],\r\n },\r\n];\r\n\r\nexport { price, medicines };\r\n","import React, { useState } from \"react\";\r\nimport { Input } from \"antd\";\r\n\r\nconst { Search } = Input;\r\n\r\nfunction SearchFeature(props) {\r\n const [SearchTerms, setSearchTerms] = useState(\"\");\r\n\r\n const onChangeSearch = event => {\r\n setSearchTerms(event.currentTarget.value);\r\n\r\n props.refreshFunction(event.currentTarget.value);\r\n };\r\n\r\n return (\r\n <div style={{ margin: \"auto\" }}>\r\n <Search value={SearchTerms} onChange={onChangeSearch} placeholder=\"상품명\" />\r\n </div>\r\n );\r\n}\r\n\r\nexport default SearchFeature;\r\n","import React, { useEffect, useState } from \"react\";\r\nimport Axios from \"axios\";\r\nimport { Icon, Col, Card, Row } from \"antd\";\r\nimport ImageSlider from \"../../utils/ImageSlider\";\r\nimport CheckBox from \"./Sections/CheckBox\";\r\nimport { medicines, price } from \"./Sections/Datas\";\r\nimport SearchFeature from \"./Sections/SearchFeature\";\r\nimport { Container } from \"react-bootstrap\";\r\n\r\nconst { Meta } = Card;\r\n\r\nfunction LandingPage() {\r\n const [Products, setProducts] = useState([]);\r\n const [Skip, setSkip] = useState(0);\r\n const [Limit, setLimit] = useState(8);\r\n const [PostSize, setPostSize] = useState();\r\n const [SearchTerms, setSearchTerms] = useState(\"\");\r\n\r\n const [Filters, setFilters] = useState({\r\n medicines: [],\r\n price: [],\r\n });\r\n\r\n useEffect(() => {\r\n const variables = {\r\n skip: Skip,\r\n limit: Limit,\r\n };\r\n\r\n getProducts(variables);\r\n }, []);\r\n\r\n const getProducts = variables => {\r\n Axios.post(\"/api/product/getProducts\", variables).then(response => {\r\n if (response.data.success) {\r\n if (variables.loadMore) {\r\n setProducts([...Products, ...response.data.products]);\r\n } else {\r\n setProducts(response.data.products);\r\n }\r\n setPostSize(response.data.postSize);\r\n } else {\r\n alert(\"실패하였습니다.\");\r\n }\r\n });\r\n };\r\n\r\n const onLoadMore = () => {\r\n let skip = Skip + Limit;\r\n\r\n const variables = {\r\n skip: skip,\r\n limit: Limit,\r\n loadMore: true,\r\n filters: Filters,\r\n searchTerm: SearchTerms,\r\n };\r\n getProducts(variables);\r\n setSkip(skip);\r\n };\r\n\r\n const renderCards = Products.map((product, index) => {\r\n return (\r\n <Col style={{ marginTop: \"30px\" }} lg={6} md={8} xs={24}>\r\n <Card\r\n style={{ margin: \"5px\" }}\r\n hoverable={true}\r\n cover={\r\n <a href={`/product/${product._id}`}>\r\n <ImageSlider images={product.images} />\r\n </a>\r\n }\r\n >\r\n <Meta title={product.title} description={`${product.price}000원`} />\r\n </Card>\r\n </Col>\r\n );\r\n });\r\n\r\n const showFilteredResults = filters => {\r\n const variables = {\r\n skip: 0,\r\n limit: Limit,\r\n filters: filters,\r\n };\r\n getProducts(variables);\r\n setSkip(0);\r\n };\r\n\r\n const handlePrice = value => {\r\n const data = price;\r\n let array = [];\r\n\r\n for (let key in data) {\r\n if (data[key]._id === parseInt(value, 10)) {\r\n array = data[key].array;\r\n }\r\n }\r\n console.log(\"array\", array);\r\n return array;\r\n };\r\n\r\n const handleFilters = (filters, category) => {\r\n const newFilters = { ...Filters };\r\n\r\n newFilters[category] = filters;\r\n\r\n if (category === \"price\") {\r\n let priceValues = handlePrice(filters);\r\n newFilters[category] = priceValues;\r\n }\r\n\r\n console.log(newFilters);\r\n\r\n showFilteredResults(newFilters);\r\n setFilters(newFilters);\r\n };\r\n\r\n const updateSearchTerms = newSearchTerm => {\r\n const variables = {\r\n skip: 0,\r\n limit: Limit,\r\n filters: Filters,\r\n searchTerm: newSearchTerm,\r\n };\r\n\r\n setSkip(0);\r\n setSearchTerms(newSearchTerm);\r\n\r\n getProducts(variables);\r\n };\r\n\r\n return (\r\n <div style={{ width: \"75%\", margin: \"3rem auto\" }}>\r\n <div style={{ textAlign: \"center\" }}>\r\n <img src={\"/whatmedicine.png\"} style={{ width: \"500px\" }} />\r\n {/* <h2>\r\n {\" \"}\r\n <Icon type=\"alert\" />\r\n &nbsp; 어떤 약이 필요하신가요?&nbsp;<Icon type=\"alert\" />{\" \"}\r\n </h2> */}\r\n </div>\r\n\r\n\r\n <Container style={{ width: \"50%\" }}>\r\n <CheckBox list={medicines} handleFilters={filters => handleFilters(filters, \"medicines\")} />\r\n </Container>\r\n\r\n {/* Search */}\r\n\r\n {Products.length === 0 ? (\r\n <div style={{ display: \"flex\", height: \"300px\", justifyContent: \"center\", alignItems: \"center\" }}>\r\n \r\n \r\n </div>\r\n ) : (\r\n <div>\r\n <Row gutter={[16, 16]}>{renderCards}</Row>\r\n </div>\r\n )}\r\n <br />\r\n <br />\r\n\r\n {PostSize >= Limit && (\r\n <div style={{ display: \"flex\", justifyContent: \"center\" }}>\r\n <button onClick={onLoadMore}>Load More</button>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n}\r\n\r\nexport default LandingPage;\r\n","import React, { useState } from \"react\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport { loginUser } from \"../../../_actions/user_actions\";\r\nimport { Formik } from \"formik\";\r\nimport * as Yup from \"yup\";\r\nimport { Form, Icon, Input, Button, Checkbox, Typography } from \"antd\";\r\nimport { useDispatch } from \"react-redux\";\r\n\r\nconst { Title } = Typography;\r\n\r\nfunction LoginPage(props) {\r\n const dispatch = useDispatch();\r\n const rememberMeChecked = localStorage.getItem(\"rememberMe\") ? true : false;\r\n\r\n const [formErrorMessage, setFormErrorMessage] = useState(\"\");\r\n const [rememberMe, setRememberMe] = useState(rememberMeChecked);\r\n\r\n const handleRememberMe = () => {\r\n setRememberMe(!rememberMe);\r\n };\r\n\r\n\r\n return (\r\n <Formik\r\n initialValues={{\r\n email: \"\",\r\n password: \"\",\r\n }}\r\n validationSchema={Yup.object().shape({\r\n email: Yup.string().email(\"이메일이 유효하지 않습니다.\").required(\"이메일을 입력해주세요.\"),\r\n password: Yup.string().min(5, \"비밀번호가 너무 짧습니다.\").required(\"비밀번호를 입력해주세요.\"),\r\n })}\r\n onSubmit={(values, { setSubmitting }) => {\r\n setTimeout(() => {\r\n let dataToSubmit = {\r\n email: values.email,\r\n password: values.password,\r\n };\r\n\r\n dispatch(loginUser(dataToSubmit))\r\n .then(response => {\r\n if (response.payload.loginSuccess) {\r\n window.localStorage.setItem(\"userId\", response.payload.userId);\r\n if (rememberMe === true) {\r\n window.localStorage.setItem(\"rememberMe\", values.id);\r\n } else {\r\n localStorage.removeItem(\"rememberMe\");\r\n }\r\n props.history.push(\"/\");\r\n } else {\r\n setFormErrorMessage(\"Check out your Account or Password again\");\r\n }\r\n })\r\n .catch(err => {\r\n setFormErrorMessage(\"Check out your Account or Password again\");\r\n setTimeout(() => {\r\n setFormErrorMessage(\"\");\r\n }, 3000);\r\n });\r\n setSubmitting(false);\r\n }, 500);\r\n }}\r\n >\r\n {props => {\r\n const { values, touched, errors, dirty, isSubmitting, handleChange, handleBlur, handleSubmit, handleReset } = props;\r\n return (\r\n <div className=\"app\">\r\n <Title level={2}>로그인</Title>\r\n <form onSubmit={handleSubmit} style={{ width: \"350px\" }}>\r\n <Form.Item required>\r\n <Input\r\n id=\"email\"\r\n prefix={<Icon type=\"user\" style={{ color: \"rgba(0,0,0,.25)\" }} />}\r\n placeholder=\"Enter your email\"\r\n type=\"email\"\r\n value={values.email}\r\n onChange={handleChange}\r\n onBlur={handleBlur}\r\n className={errors.email && touched.email ? \"text-input error\" : \"text-input\"}\r\n />\r\n {errors.email && touched.email && <div className=\"input-feedback\">{errors.email}</div>}\r\n </Form.Item>\r\n\r\n <Form.Item required>\r\n <Input\r\n id=\"password\"\r\n prefix={<Icon type=\"lock\" style={{ color: \"rgba(0,0,0,.25)\" }} />}\r\n placeholder=\"Enter your password\"\r\n type=\"password\"\r\n value={values.password}\r\n onChange={handleChange}\r\n onBlur={handleBlur}\r\n className={errors.password && touched.password ? \"text-input error\" : \"text-input\"}\r\n />\r\n {errors.password && touched.password && <div className=\"input-feedback\">{errors.password}</div>}\r\n </Form.Item>\r\n\r\n {formErrorMessage && (\r\n <label>\r\n <p style={{ color: \"#ff0000bf\", fontSize: \"0.7rem\", border: \"1px solid\", padding: \"1rem\", borderRadius: \"10px\" }}>{formErrorMessage}</p>\r\n </label>\r\n )}\r\n\r\n <Form.Item>\r\n <div>\r\n <Button type=\"primary\" htmlType=\"submit\" className=\"login-form-button\" style={{ minWidth: \"100%\" }} disabled={isSubmitting} onSubmit={handleSubmit}>\r\n 로그인\r\n </Button>\r\n </div>\r\n </Form.Item>\r\n </form>\r\n </div>\r\n );\r\n }}\r\n </Formik>\r\n );\r\n}\r\n\r\nexport default withRouter(LoginPage);\r\n","import React from \"react\";\r\nimport moment from \"moment\";\r\nimport { Formik } from \"formik\";\r\nimport * as Yup from \"yup\";\r\nimport { registerUser } from \"../../../_actions/user_actions\";\r\nimport { useDispatch } from \"react-redux\";\r\n\r\nimport { Form, Input, Button } from \"antd\";\r\nconst { TextArea } = Input;\r\nconst formItemLayout = {\r\n labelCol: {\r\n xs: { span: 24 },\r\n sm: { span: 8 },\r\n },\r\n wrapperCol: {\r\n xs: { span: 24 },\r\n sm: { span: 16 },\r\n },\r\n};\r\nconst tailFormItemLayout = {\r\n wrapperCol: {\r\n xs: {\r\n span: 24,\r\n offset: 0,\r\n },\r\n sm: {\r\n span: 16,\r\n offset: 8,\r\n },\r\n },\r\n};\r\n\r\nfunction RegisterPage(props) {\r\n const dispatch = useDispatch();\r\n return (\r\n <Formik\r\n initialValues={{\r\n email: \"\",\r\n name: \"\",\r\n address: \"\",\r\n password: \"\",\r\n confirmPassword: \"\",\r\n }}\r\n validationSchema={Yup.object().shape({\r\n name: Yup.string().required(\"이름을 입력해주세요.\"),\r\n email: Yup.string().email(\"이메일 형식이 올바르지 않습니다.\").required(\"이메일을 입력해주세요.\"),\r\n password: Yup.string().min(5, \"비밀번호는 5자리 이상이어야 합니다.\").required(\"비밀번호를 입력해주세요.\"),\r\n confirmPassword: Yup.string()\r\n .oneOf([Yup.ref(\"password\"), null], \"비밀번호가 일치하지 않습니다.\")\r\n .required(\"비밀번호를 한번 더 입력해주세요.\"),\r\n adress: Yup.string().required(\"주소를 입력해주세요.\"),\r\n })}\r\n onSubmit={(values, { setSubmitting }) => {\r\n setTimeout(() => {\r\n let dataToSubmit = {\r\n email: values.email,\r\n password: values.password,\r\n name: values.name,\r\n adress: values.adress,\r\n image: `http://gravatar.com/avatar/${moment().unix()}?d=identicon`,\r\n };\r\n\r\n dispatch(registerUser(dataToSubmit)).then(response => {\r\n if (response.payload.success) {\r\n props.history.push(\"/login\");\r\n } else {\r\n alert(response.payload.err.errmsg);\r\n }\r\n });\r\n\r\n setSubmitting(false);\r\n }, 500);\r\n }}\r\n >\r\n {props => {\r\n const { values, touched, errors, dirty, isSubmitting, handleChange, handleBlur, handleSubmit, handleReset } = props;\r\n return (\r\n <div className=\"app\">\r\n <h3>회원가입</h3>\r\n <Form style={{ minWidth: \"375px\" }} {...formItemLayout} onSubmit={handleSubmit}>\r\n <Form.Item required label=\"이름\">\r\n <Input\r\n id=\"name\"\r\n placeholder=\"이름을 입력하세요\"\r\n type=\"text\"\r\n value={values.name}\r\n onChange={handleChange}\r\n onBlur={handleBlur}\r\n className={errors.name && touched.name ? \"text-input error\" : \"text-input\"}\r\n />\r\n {errors.name && touched.name && <div className=\"input-feedback\">{errors.name}</div>}\r\n </Form.Item>\r\n\r\n \r\n\r\n <Form.Item required label=\"이메일\">\r\n <Input\r\n id=\"email\"\r\n placeholder=\"이메일을 입력해주세요.\"\r\n type=\"email\"\r\n value={values.email}\r\n onChange={handleChange}\r\n onBlur={handleBlur}\r\n className={errors.email && touched.email ? \"text-input error\" : \"text-input\"}\r\n />\r\n {errors.email && touched.email && <div className=\"input-feedback\">{errors.email}</div>}\r\n </Form.Item>\r\n\r\n <Form.Item required label=\"비밀번호\">\r\n <Input\r\n id=\"password\"\r\n placeholder=\"비밀번호를 입력해주세요.\"\r\n type=\"password\"\r\n value={values.password}\r\n onChange={handleChange}\r\n onBlur={handleBlur}\r\n className={errors.password && touched.password ? \"text-input error\" : \"text-input\"}\r\n />\r\n {errors.password && touched.password && <div className=\"input-feedback\">{errors.password}</div>}\r\n </Form.Item>\r\n\r\n <Form.Item required label=\"비밀번호 확인\">\r\n <Input\r\n id=\"confirmPassword\"\r\n placeholder=\"비밀번호를 한번 더 입력해주세요.\"\r\n type=\"password\"\r\n value={values.confirmPassword}\r\n onChange={handleChange}\r\n onBlur={handleBlur}\r\n className={errors.confirmPassword && touched.confirmPassword ? \"text-input error\" : \"text-input\"}\r\n />\r\n {errors.confirmPassword && touched.confirmPassword && <div className=\"input-feedback\">{errors.confirmPassword}</div>}\r\n </Form.Item>\r\n\r\n <Form.Item required label=\"주소\">\r\n <TextArea\r\n id=\"adress\"\r\n placeholder=\"주소를 입력하세요\"\r\n type=\"text\"\r\n value={values.adress}\r\n onChange={handleChange}\r\n onBlur={handleBlur}\r\n className={errors.adress && touched.adress ? \"text-input error\" : \"text-input\"}\r\n />\r\n {errors.adress && touched.adress && <div className=\"input-feedback\">{errors.adress}</div>}\r\n </Form.Item>\r\n\r\n <Form.Item {...tailFormItemLayout}>\r\n <Button onClick={handleSubmit} type=\"primary\" disabled={isSubmitting}>\r\n 가입\r\n </Button>\r\n </Form.Item>\r\n </Form>\r\n </div>\r\n );\r\n }}\r\n </Formik>\r\n );\r\n}\r\n\r\nexport default RegisterPage;\r\n","/* eslint-disable jsx-a11y/anchor-is-valid */\r\nimport React from \"react\";\r\nimport { Menu, Icon, Badge } from \"antd\";\r\nimport axios from \"axios\";\r\nimport { USER_SERVER } from \"../../../Config\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport { useSelector } from \"react-redux\";\r\n\r\nfunction RightMenu(props) {\r\n const user = useSelector(state => state.user);\r\n\r\n const logoutHandler = () => {\r\n axios.get(`${USER_SERVER}/logout`).then(response => {\r\n if (response.status === 200) {\r\n props.history.push(\"/login\");\r\n } else {\r\n alert(\"로그아웃에 실패했습니다.\");\r\n }\r\n });\r\n };\r\n\r\n\r\n if (user.userData && !user.userData.isAuth) {\r\n\r\n return (\r\n <Menu style={{ paddingTop: \"10px\" }} mode={props.mode}>\r\n <Menu.Item key=\"mail\">\r\n <a href=\"/login\"><h6>로그인</h6></a>\r\n </Menu.Item>\r\n <Menu.Item key=\"app\">\r\n <a href=\"/register\"><h6>회원가입</h6></a>\r\n </Menu.Item>\r\n </Menu>\r\n );\r\n } else {\r\n return (\r\n <Menu mode={props.mode} style={{ paddingTop: \"5px\" }}>\r\n <Menu.Item key=\"history\">\r\n <a href=\"/history\">\r\n <h6>구매내역</h6>\r\n </a>\r\n </Menu.Item>\r\n\r\n <Menu.Item key=\"upload\">\r\n <a href=\"/product/upload\">\r\n <h6>등록하기</h6>\r\n </a>\r\n </Menu.Item>\r\n\r\n <Menu.Item key=\"cart\" style={{ paddingBottom: -4 }}>\r\n \r\n <a href=\"/user/cart\" style={{ marginRight: -22, paddingbottom: \"30px\", color: \"#667777\" }}>\r\n <Icon type=\"shopping-cart\" style={{ fontSize: 30, marginBottom: 3 }} />\r\n </a>\r\n \r\n </Menu.Item>\r\n\r\n <Menu.Item key=\"logout\">\r\n <a onClick={logoutHandler}><h6>로그아웃</h6></a>\r\n </Menu.Item>\r\n </Menu>\r\n );\r\n }\r\n}\r\n\r\nexport default withRouter(RightMenu);\r\n","import React, { useState } from \"react\";\r\nimport RightMenu from \"./Sections/RightMenu\";\r\nimport { Drawer, Button, Icon } from \"antd\";\r\nimport \"./Sections/Navbar.css\";\r\nimport { Container, Navbar, Nav } from \"react-bootstrap\";\r\n\r\nfunction NavBar() {\r\n const [visible, setVisible] = useState(false);\r\n\r\n const showDrawer = () => {\r\n setVisible(true);\r\n };\r\n\r\n const onClose = () => {\r\n setVisible(false);\r\n };\r\n\r\n return (\r\n <Navbar bg=\"white\" variant=\"light\" style={{ position: \"fixed\", zIndex: 5, width: \"100%\", border: \"1px solid lightgray\" }}>\r\n <Container>\r\n <Navbar.Brand href=\"/\">\r\n <img src={\"/logo.png\"} style={{ width: \"120px\", marginLeft:\"50px\"}} />\r\n </Navbar.Brand>\r\n <Nav className=\"mx-3\" style={{ position: \"relative\", right: \"0\" }}>\r\n <div className=\"menu__container\">\r\n <div className=\"menu_left\"></div>\r\n <div className=\"menu_rigth\">\r\n <RightMenu mode=\"horizontal\" />\r\n </div>\r\n <Button className=\"menu__mobile-button\" type=\"primary\" onClick={showDrawer}>\r\n <Icon type=\"align-right\" />\r\n </Button>\r\n <Drawer title=\"Basic Drawer\" placement=\"right\" className=\"menu_drawer\" closable={false} onClose={onClose} visible={visible}>\r\n \r\n <RightMenu mode=\"inline\" />\r\n </Drawer>\r\n </div>\r\n </Nav>\r\n </Container>\r\n </Navbar>\r\n );\r\n}\r\n\r\nexport default NavBar;\r\n","import React from \"react\";\r\nimport { Icon } from \"antd\";\r\n\r\nfunction Footer() {\r\n return (\r\n <div\r\n style={{\r\n height: \"80px\",\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n fontSize: \"1rem\",\r\n }}\r\n >\r\n <p> Copyright © 2021 Minjeong Park All rights reserved</p>\r\n </div>\r\n );\r\n}\r\n\r\nexport default Footer;\r\n","import React, { useState } from \"react\";\r\nimport Dropzone from \"react-dropzone\";\r\nimport { Icon } from \"antd\";\r\nimport Axios from \"axios\";\r\nimport \"./FileUpload.css\";\r\n\r\nfunction FileUpload(props) {\r\n const [Images, setImages] = useState([]);\r\n\r\n const onDrop = files => {\r\n let formData = new FormData();\r\n const config = {\r\n header: { \"content-type\": \"multipart/form-data\" },\r\n };\r\n formData.append(\"file\", files[0]);\r\n Axios.post(\"/api/product/uploadImage\", formData, config).then(response => {\r\n if (response.data.success) {\r\n setImages([...Images, response.data.image]);\r\n props.refreshFunction([...Images, response.data.image]);\r\n } else {\r\n alert(\"Failed to save the Image in Server\");\r\n }\r\n });\r\n };\r\n\r\n const onDelete = image => {\r\n const currentIndex = Images.indexOf(image);\r\n\r\n let newImages = [...Images];\r\n newImages.splice(currentIndex, 1);\r\n\r\n setImages(newImages);\r\n props.refreshFunction(newImages);\r\n };\r\n\r\n return (\r\n <div style={{ display: \"flex\", justifyContent: \"space-between\" }}>\r\n <Dropzone onDrop={onDrop} multiple={false} maxSize={800000000}>\r\n {({ getRootProps, getInputProps }) => (\r\n <div\r\n style={{\r\n width: \"300px\",\r\n height: \"240px\",\r\n border: \"1px solid lightgray\",\r\n borderRadius: '15px',\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n }}\r\n {...getRootProps()}\r\n >\r\n {console.log(\"getRootProps\", { ...getRootProps() })}\r\n {console.log(\"getInputProps\", { ...getInputProps() })}\r\n <input {...getInputProps()} />\r\n <Icon type=\"plus\" style={{ fontSize: \"3rem\" }} />\r\n </div>\r\n )}\r\n </Dropzone>\r\n\r\n <div style={{ display: \"flex\", width: \"350px\", height: \"240px\", overflowX: \"scroll\" }}>\r\n {Images.map((image, index) => (\r\n <div onClick={() => onDelete(image)}>\r\n <img id=\"test\" src={`http://localhost:5000/${image}`} />\r\n <div id=\"alert\">클릭하면 삭제돼요!</div>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default FileUpload;\r\n","import React, { useState } from \"react\";\r\nimport {Button, Form, message, Input, Icon } from \"antd\";\r\nimport FileUpload from \"../../utils/FileUpload\";\r\nimport Axios from \"axios\";\r\n\r\nconst { TextArea } = Input;\r\n\r\nconst Medicines = [\r\n { key: 1, value: \"진통제\u001f\" },\r\n { key: 2, value: \"소화제\u001f\" },\r\n { key: 3, value: \"감기약\" },\r\n { key: 4, value: \"해열제\" },\r\n { key: 5, value: \"파스류\" },\r\n { key: 6, value: \"상처치료\u001f\" },\r\n { key: 7, value: \"기타\" }\r\n];\r\n\r\nfunction UploadProductPage(props) {\r\n const [TitleValue, setTitleValue] = useState(\"\");\r\n const [DescriptionValue, setDescriptionValue] = useState(\"\");\r\n const [PriceValue, setPriceValue] = useState(0);\r\n const [MedicinesValue, setMedicinesValue] = useState(1);\r\n\r\n const [Images, setImages] = useState([]);\r\n\r\n const onTitleChange = event => {\r\n setTitleValue(event.currentTarget.value);\r\n };\r\n\r\n const onDescriptionChange = event => {\r\n setDescriptionValue(event.currentTarget.value);\r\n };\r\n\r\n const onPriceChange = event => {\r\n setPriceValue(event.currentTarget.value);\r\n };\r\n\r\n const onMedicinesSelectChange = event => {\r\n setMedicinesValue(event.currentTarget.value);\r\n };\r\n\r\n const updateImages = newImages => {\r\n setImages(newImages);\r\n };\r\n const onSubmit = event => {\r\n event.preventDefault();\r\n\r\n if (!TitleValue || !DescriptionValue || !PriceValue || !MedicinesValue || !Images) {\r\n return alert(\"fill all the fields first!\");\r\n }\r\n\r\n const variables = {\r\n writer: props.user.userData._id,\r\n title: TitleValue,\r\n description: DescriptionValue,\r\n price: PriceValue,\r\n images: Images,\r\n medicines: MedicinesValue,\r\n };\r\n\r\n Axios.post(\"/api/product/uploadProduct\", variables).then(response => {\r\n if (response.data.success) {\r\n alert(\"Product Successfully Uploaded\");\r\n props.history.push(\"/\");\r\n } else {\r\n alert(\"Failed to upload Product\");\r\n }\r\n });\r\n };\r\n\r\n return (\r\n <div style={{ maxWidth: \"700px\", margin: \"2rem auto\" }}>\r\n <div style={{ textAlign: \"center\", marginBottom: \"2rem\" }}>\r\n <h3>약 등록하기</h3>\r\n </div>\r\n\r\n <Form onSubmit={onSubmit}>\r\n {/* DropZone */}\r\n <FileUpload refreshFunction={updateImages} />\r\n\r\n <br />\r\n <br />\r\n <label>약 이름</label>\r\n <Input onChange={onTitleChange} value={TitleValue} />\r\n <br />\r\n <br />\r\n <label>설명</label>\r\n <TextArea onChange={onDescriptionChange} value={DescriptionValue} />\r\n <br />\r\n <br />\r\n <label>가격($)</label>\r\n <Input onChange={onPriceChange} value={PriceValue} type=\"number\" />\r\n <br />\r\n <br />\r\n <select onChange={onMedicinesSelectChange} value={MedicinesValue}>\r\n {Medicines.map(item => (\r\n <option key={item.key} value={item.key}>{item.value} </option>\r\n ))}\r\n </select>\r\n <br />\r\n <br />\r\n <Button onClick={onSubmit}>등록</Button>\r\n </Form>\r\n </div>\r\n );\r\n}\r\n\r\nexport default UploadProductPage;\r\n","import React, { useEffect, useState } from 'react'\r\nimport ImageGallery from 'react-image-gallery';\r\n\r\nfunction ProductImage(props) {\r\n const [Images, setImages] = useState([])\r\n\r\n useEffect(() => {\r\n if (props.detail.images && props.detail.images.length > 0) {\r\n let images = [];\r\n\r\n props.detail.images && props.detail.images.map(item => {\r\n images.push({\r\n original: `http://localhost:5000/${item}`,\r\n thumbnail: `http://localhost:5000/${item}`\r\n })\r\n })\r\n setImages(images)\r\n }\r\n }, [props.detail])\r\n\r\n return (\r\n <div>\r\n <ImageGallery showFullscreenButton={false} showPlayButton={false} items={Images} />\r\n </div>\r\n )\r\n}\r\n\r\nexport default ProductImage\r\n","import React, { useEffect, useState } from \"react\";\r\nimport { Button, Descriptions } from \"antd\";\r\nimport { Container } from \"react-bootstrap\";\r\n\r\nfunction ProductInfo(props) {\r\n const [Product, setProduct] = useState({});\r\n\r\n useEffect(() => {\r\n setProduct(props.detail);\r\n }, [props.detail]);\r\n\r\n const addToCarthandler = () => {\r\n props.addToCart(props.detail._id);\r\n };\r\n\r\n return (\r\n\r\n <Container style={{ paddingTop: \"100px\" }}>\r\n <Container style={{ textAlign: \"center\" }}>\r\n {/* <h7>{Product.description}</h7><br/> */}\r\n <h3>가격 : {Product.price}000 원</h3>\r\n </Container>\r\n\r\n <br />\r\n <br />\r\n <div style={{ display: \"flex\", justifyContent: \"center\" }}>\r\n <Button size=\"large\" shape=\"round\" type=\"danger\" onClick={addToCarthandler}>\r\n <a href=\"/user/cart\">\r\n 장바구니에 담기\r\n </a>\r\n </Button>\r\n </div>\r\n </Container>\r\n );\r\n}\r\n\r\nexport default ProductInfo;\r\n","import React, { useEffect, useState } from 'react'\r\nimport Axios from 'axios'\r\nimport { Row, Col } from 'antd';\r\nimport ProductImage from './Sections/ProductImage';\r\nimport ProductInfo from './Sections/ProductInfo';\r\nimport { addToCart } from '../../../_actions/user_actions';\r\nimport { useDispatch } from 'react-redux';\r\nfunction DetailProductPage(props) {\r\n const dispatch = useDispatch();\r\n const productId = props.match.params.productId\r\n const [Product, setProduct] = useState([])\r\n\r\n useEffect(() => {\r\n Axios.get(`/api/product/products_by_id?id=${productId}&type=single`)\r\n .then(response => {\r\n setProduct(response.data[0])\r\n })\r\n\r\n }, [])\r\n\r\n const addToCartHandler = (productId) => {\r\n dispatch(addToCart(productId))\r\n \r\n }\r\n\r\n return (\r\n <div className=\"postPage\" style={{ width: '100%', padding: '3rem 4rem' }}>\r\n\r\n <div style={{ display: 'flex', justifyContent: 'center' }}>\r\n <h1>{Product.title}</h1>\r\n </div>\r\n\r\n <br />\r\n\r\n <Row gutter={[16, 16]} >\r\n <Col lg={12} xs={24}>\r\n <ProductImage detail={Product} style={{width :\"300px\"}} />\r\n </Col>\r\n <Col lg={12} xs={24}>\r\n <ProductInfo\r\n addToCart={addToCartHandler}\r\n detail={Product} />\r\n </Col>\r\n </Row>\r\n </div>\r\n )\r\n}\r\n\r\nexport default DetailProductPage\r\n","import React from \"react\";\r\n\r\nfunction UserCardBlock(props) {\r\n const renderCartImage = images => {\r\n if (images.length > 0) {\r\n let image = images[0];\r\n return `http://localhost:5000/${image}`;\r\n }\r\n };\r\n\r\n const renderItems = () =>\r\n props.products &&\r\n props.products.map(product => (\r\n <tr key={product._id} style={{ margin: \"auto\", backgroundColor: \"white\" }}>\r\n <td style={{ margin: \"auto\", textAlign: \"center\" }}>\r\n <img style={{ width: \"70px\" }} alt=\"product\" src={renderCartImage(product.images)} />\r\n </td>\r\n <td style={{ margin: \"auto\", textAlign: \"center\" }}>{product.title}</td>\r\n <td style={{ margin: \"auto\", textAlign: \"center\" }}>{product.quantity} EA</td>\r\n <td style={{ margin: \"auto\", textAlign: \"center\" }}>$ {product.price} </td>\r\n <td style={{ margin: \"auto\", textAlign: \"center\" }}>\r\n <button onClick={() => props.removeItem(product._id)}>❌</button>\r\n </td>\r\n </tr>\r\n ));\r\n\r\n return (\r\n <div>\r\n <table>\r\n <thead>\r\n <tr style={{ textAlign: \"center\" }}>\r\n <th>상품 이미지</th>\r\n <th>상품명</th>\r\n <th>개수</th>\r\n <th>가격</th>\r\n <th>장바구니에서 삭제하기</th>\r\n </tr>\r\n </thead>\r\n <tbody>{renderItems()}</tbody>\r\n </table>\r\n </div>\r\n );\r\n}\r\n\r\nexport default UserCardBlock;\r\n","import React from 'react';\r\nimport PaypalExpressBtn from 'react-paypal-express-checkout';\r\n\r\nexport default class Paypal extends React.Component {\r\n render() {\r\n const onSuccess = (payment) => {\r\n // Congratulation, it came here means everything's fine!\r\n console.log(\"The payment was succeeded!\", payment);\r\n // You can bind the \"payment\" object's value to your state or props or whatever here, please see below for sample returned data\r\n this.props.onSuccess(payment); \r\n }\r\n\r\n const onCancel = (data) => {\r\n // User pressed \"cancel\" or close Paypal's popup!\r\n console.log('The payment was cancelled!', data);\r\n // You can bind the \"data\" object's value to your state or props or whatever here, please see below for sample returned data\r\n }\r\n\r\n const onError = (err) => {\r\n // The main Paypal's script cannot be loaded or somethings block the loading of that script!\r\n console.log(\"Error!\", err);\r\n // Because the Paypal's main script is loaded asynchronously from \"https://www.paypalobjects.com/api/checkout.js\"\r\n // => sometimes it may take about 0.5 second for everything to get set, or for the button to appear\r\n }\r\n\r\n let env = 'sandbox'; // you can set here to 'production' for production\r\n let currency = 'USD'; // or you can set this value from your props or state\r\n let total = this.props.toPay; // same as above, this is the total amount (based on currency) to be paid by using Paypal express checkout\r\n // Document on Paypal's currency code: https://developer.paypal.com/docs/classic/api/currency_codes/\r\n\r\n const client = {\r\n sandbox: 'ASbCsyjZeUzpNCkVbbqseQzcXivFRRoyPfpJK24688vFvIchTR-CCK79Ao5FB6zgqIO2r5Xw-a4Xh-44',\r\n production: 'YOUR-PRODUCTION-APP-ID',\r\n }\r\n // In order to get production's app-ID, you will have to send your app to Paypal for approval first\r\n // For sandbox app-ID (after logging into your developer account, please locate the \"REST API apps\" section, click \"Create App\"):\r\n // => https://developer.paypal.com/docs/classic/lifecycle/sb_credentials/\r\n // For production app-ID:\r\n // => https://developer.paypal.com/docs/classic/lifecycle/goingLive/\r\n\r\n // NB. You can also have many Paypal express checkout buttons on page, just pass in the correct amount and they will work!\r\n return (\r\n <PaypalExpressBtn\r\n env={env}\r\n client={client}\r\n currency={currency}\r\n total={total}\r\n onError={onError}\r\n onSuccess={onSuccess}\r\n onCancel={onCancel}\r\n style={{ \r\n size:'large',\r\n color:'blue',\r\n shape: 'rect',\r\n label: 'checkout'\r\n }}\r\n />\r\n );\r\n }\r\n}","import React, { useEffect, useState } from \"react\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport { getCartItems, removeCartItem, onSuccessBuy } from \"../../../_actions/user_actions\";\r\nimport UserCardBlock from \"./Sections/UserCardBlock\";\r\nimport { Result, Empty } from \"antd\";\r\nimport Axios from \"axios\";\r\nimport Paypal from \"../../utils/Paypal\";\r\nimport { Container } from \"react-bootstrap\";\r\n\r\nfunction CartPage(props) {\r\n const dispatch = useDispatch();\r\n const [Total, setTotal] = useState(0);\r\n const [ShowTotal, setShowTotal] = useState(false);\r\n const [ShowSuccess, setShowSuccess] = useState(false);\r\n\r\n useEffect(() => {\r\n let cartItems = [];\r\n if (props.user.userData && props.user.userData.cart) {\r\n if (props.user.userData.cart.length > 0) {\r\n props.user.userData.cart.forEach(item => {\r\n cartItems.push(item.id);\r\n });\r\n dispatch(getCartItems(cartItems, props.user.userData.cart)).then(response => {\r\n if (response.payload.length > 0) {\r\n calculateTotal(response.payload);\r\n }\r\n });\r\n }\r\n }\r\n }, [props.user.userData]);\r\n\r\n const calculateTotal = cartDetail => {\r\n let total = 0;\r\n\r\n cartDetail.map(item => {\r\n total += parseInt(item.price, 10) * item.quantity;\r\n });\r\n\r\n setTotal(total);\r\n setShowTotal(true);\r\n };\r\n\r\n const removeFromCart = productId => {\r\n dispatch(removeCartItem(productId)).then(response => {\r\n if (response.payload.cartDetail.length <= 0) {\r\n setShowTotal(false);\r\n } else {\r\n calculateTotal(response.payload.cartDetail);\r\n }\r\n });\r\n };\r\n\r\n const transactionSuccess = data => {\r\n dispatch(\r\n onSuccessBuy({\r\n cartDetail: props.user.cartDetail,\r\n paymentData: data,\r\n })\r\n ).then(response => {\r\n if (response.payload.success) {\r\n setShowSuccess(true);\r\n setShowTotal(false);\r\n }\r\n });\r\n };\r\n\r\n const transactionError = () => {\r\n console.log(\"Paypal error\");\r\n };\r\n\r\n const transactionCanceled = () => {\r\n console.log(\"Transaction canceled\");\r\n };\r\n\r\n return (\r\n <div style={{ width: \"85%\", margin: \"3rem auto\" }}>\r\n <h1>장바구니</h1>\r\n <div style={{ marginTop: \"30px\" }}>\r\n <UserCardBlock products={props.user.cartDetail} removeItem={removeFromCart} />\r\n {ShowTotal ? (\r\n <div style={{ marginTop: \"3rem\", textAlign: \"right\" }}>\r\n <h2>총 금액: ${Total} </h2>\r\n </div>\r\n ) : ShowSuccess ? (\r\n <Result status=\"success\" title=\"Successfully Purchased Items\" />\r\n ) : (\r\n <div\r\n style={{\r\n width: \"100%\",\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n justifyContent: \"center\",\r\n }}\r\n >\r\n <br />\r\n <Empty description={false} />\r\n <p>장바구니가 비었습니다.</p>\r\n </div>\r\n )}\r\n </div>\r\n\r\n {ShowTotal && (\r\n <Container style={{ width: \"max-content\", marginTop: \"100px\" }}>\r\n <Paypal sty toPay={Total} onSuccess={transactionSuccess} transactionError={transactionError} transactionCanceled={transactionCanceled} />\r\n </Container>\r\n )}\r\n </div>\r\n );\r\n}\r\n\r\nexport default CartPage;\r\n","import React from \"react\";\r\n\r\nfunction HistoryPage(props) {\r\n return (\r\n <div style={{ width: \"80%\", margin: \"3rem auto\" }}>\r\n <div style={{ textAlign: \"center\" }}>\r\n <h1>구매내역</h1>\r\n </div>\r\n <br />\r\n\r\n <table>\r\n <thead>\r\n <tr>\r\n <th style={{ textAlign: \"center\" }}>구매 ID</th>\r\n <th style={{ textAlign: \"center\" }}>가격</th>\r\n <th style={{ textAlign: \"center\" }}>수량</th>\r\n <th style={{ textAlign: \"center\" }}>구매 날짜</th>\r\n </tr>\r\n </thead>\r\n\r\n <tbody>\r\n {props.user.userData &&\r\n props.user.userData.history &&\r\n props.user.userData.history.map(item => (\r\n <tr key={item.id}>\r\n <td style={{ textAlign: \"center\", margin: \"auto\" }}>{item.id}</td>\r\n <td style={{ textAlign: \"center\", margin: \"auto\" }}>{item.price}</td>\r\n <td style={{ textAlign: \"center\", margin: \"auto\" }}>{item.quantity}</td>\r\n <td style={{ textAlign: \"center\", margin: \"auto\" }}>{item.dateOfPurchase}</td>\r\n </tr>\r\n ))}\r\n </tbody>\r\n </table>\r\n </div>\r\n );\r\n}\r\n\r\nexport default HistoryPage;\r\n","import React from \"react\";\r\nimport axios from 'axios';\r\n\r\nfunction adminPage(props) {\r\n \r\n}\r\n\r\nexport default adminPage;\r\n","import React, { Suspense } from \"react\";\r\nimport { Route, Switch } from \"react-router-dom\";\r\nimport Auth from \"../hoc/auth\";\r\n// pages for this product\r\nimport LandingPage from \"./views/LandingPage/LandingPage.js\";\r\nimport LoginPage from \"./views/LoginPage/LoginPage.js\";\r\nimport RegisterPage from \"./views/RegisterPage/RegisterPage.js\";\r\nimport NavBar from \"./views/NavBar/NavBar\";\r\nimport Footer from \"./views/Footer/Footer\";\r\nimport UploadProductPage from \"./views/UploadProductPage/UploadProductPage\";\r\nimport DetailProductPage from \"./views/DetailProductPage/DetailProductPage\";\r\nimport CartPage from \"./views/CartPage/CartPage\";\r\nimport HistoryPage from \"./views/HistoryPage/HistoryPage\";\r\nimport adminPage from \"./views/adminPage/adminPage\";\r\n\r\nfunction App() {\r\n return (\r\n <Suspense fallback={<div>Loading...</div>}>\r\n <NavBar />\r\n <div style={{ paddingTop: \"75px\", minHeight: \"calc(100vh - 80px)\" }}>\r\n <Switch>\r\n <Route exact path=\"/\" component={Auth(LandingPage, null)} />\r\n <Route exact path=\"/login\" component={Auth(LoginPage, false)} />\r\n <Route exact path=\"/register\" component={Auth(RegisterPage, false)} />\r\n <Route exact path=\"/product/upload\" component={Auth(UploadProductPage, true)} />\r\n <Route exact path=\"/product/:productId\" component={Auth(DetailProductPage, null)} />\r\n <Route exact path=\"/user/cart\" component={Auth(CartPage, true)} />\r\n <Route exact path=\"/history\" component={Auth(HistoryPage, true)} />\r\n <Route exact path=\"/admin\" component={Auth(adminPage, true)} />\r\n </Switch>\r\n </div>\r\n <Footer />\r\n </Suspense>\r\n );\r\n}\r\n\r\nexport default App;\r\n","// This optional code is used to register a service worker.\r\n// register() is not called by default.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on subsequent visits to a page, after all the\r\n// existing tabs open on the page have been closed, since previously cached\r\n// resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model and instructions on how to\r\n// opt-in, read https://bit.ly/CRA-PWA\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.1/8 is considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n);\r\n\r\nexport function register(config) {\r\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Let's check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl, config);\r\n\r\n // Add some additional logging to localhost, pointing developers to the\r\n // service worker/PWA documentation.\r\n navigator.serviceWorker.ready.then(() => {\r\n console.log(\r\n 'This web app is being served cache-first by a service ' +\r\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\r\n );\r\n });\r\n } else {\r\n // Is not localhost. Just register service worker\r\n registerValidSW(swUrl, config);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW(swUrl, config) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n if (installingWorker == null) {\r\n return;\r\n }\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the updated precached content has been fetched,\r\n // but the previous service worker will still serve the older\r\n // content until all client tabs are closed.\r\n console.log(\r\n 'New content is available and will be used when all ' +\r\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\r\n );\r\n\r\n // Execute callback\r\n if (config && config.onUpdate) {\r\n config.onUpdate(registration);\r\n }\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log('Content is cached for offline use.');\r\n\r\n // Execute callback\r\n if (config && config.onSuccess) {\r\n config.onSuccess(registration);\r\n }\r\n }\r\n }\r\n };\r\n };\r\n })\r\n .catch(error => {\r\n console.error('Error during service worker registration:', error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker(swUrl, config) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl)\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n const contentType = response.headers.get('content-type');\r\n if (\r\n response.status === 404 ||\r\n (contentType != null && contentType.indexOf('javascript') === -1)\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl, config);\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\r\n 'No internet connection found. App is running in offline mode.'\r\n );\r\n });\r\n}\r\n\r\nexport function unregister() {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister();\r\n });\r\n }\r\n}\r\n","import {\r\n LOGIN_USER,\r\n REGISTER_USER,\r\n AUTH_USER,\r\n LOGOUT_USER,\r\n ADD_TO_CART_USER,\r\n GET_CART_ITEMS_USER,\r\n REMOVE_CART_ITEM_USER,\r\n ON_SUCCESS_BUY_USER\r\n} from '../_actions/types';\r\n\r\n\r\nexport default function (state = {}, action) {\r\n switch (action.type) {\r\n case REGISTER_USER:\r\n return { ...state, register: action.payload }\r\n case LOGIN_USER:\r\n return { ...state, loginSucces: action.payload }\r\n case AUTH_USER:\r\n return { ...state, userData: action.payload }\r\n case LOGOUT_USER:\r\n return { ...state }\r\n case ADD_TO_CART_USER:\r\n return {\r\n ...state, userData: {\r\n ...state.userData,\r\n cart: action.payload\r\n }\r\n }\r\n case GET_CART_ITEMS_USER:\r\n return {\r\n ...state, cartDetail: action.payload\r\n }\r\n case REMOVE_CART_ITEM_USER:\r\n return {\r\n ...state,\r\n cartDetail: action.payload.cartDetail,\r\n userData: {\r\n ...state.userData,\r\n cart: action.payload.cart\r\n }\r\n\r\n }\r\n case ON_SUCCESS_BUY_USER:\r\n return {\r\n ...state,\r\n userData: {\r\n ...state.userData,\r\n cart: action.payload.cart\r\n },\r\n cartDetail: action.payload.cartDetail\r\n }\r\n\r\n default:\r\n return state;\r\n }\r\n}","import { combineReducers } from \"redux\";\r\nimport user from \"./user_reducer\";\r\n\r\nconst rootReducer = combineReducers({\r\n user,\r\n});\r\n\r\nexport default rootReducer;\r\n","import React from \"react\";\r\nimport ReactDOM from \"react-dom\";\r\nimport \"./index.css\";\r\nimport App from \"./components/App\";\r\nimport * as serviceWorker from \"./serviceWorker\";\r\nimport { BrowserRouter } from \"react-router-dom\";\r\n\r\nimport Reducer from \"./_reducers\";\r\nimport { Provider } from \"react-redux\";\r\nimport { createStore, applyMiddleware } from \"redux\";\r\nimport promiseMiddleware from \"redux-promise\";\r\nimport ReduxThunk from \"redux-thunk\";\r\n\r\nconst createStoreWithMiddleware = applyMiddleware(promiseMiddleware, ReduxThunk)(createStore);\r\n\r\nReactDOM.render(\r\n <Provider store={createStoreWithMiddleware(Reducer, window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__())}>\r\n <BrowserRouter>\r\n <App />\r\n </BrowserRouter>\r\n </Provider>,\r\n document.getElementById(\"root\")\r\n);\r\n// If you want your app to work offline and load faster, you can change\r\n// unregister() to register() below. Note this comes with some pitfalls.\r\n// Learn more about service workers: https://bit.ly/CRA-PWA\r\nserviceWorker.unregister();\r\n"],"sourceRoot":""}
...\ No newline at end of file ...\ No newline at end of file
1 +!function(e){function r(r){for(var n,f,i=r[0],l=r[1],a=r[2],c=0,s=[];c<i.length;c++)f=i[c],o[f]&&s.push(o[f][0]),o[f]=0;for(n in l)Object.prototype.hasOwnProperty.call(l,n)&&(e[n]=l[n]);for(p&&p(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,i=1;i<t.length;i++){var l=t[i];0!==o[l]&&(n=!1)}n&&(u.splice(r--,1),e=f(f.s=t[0]))}return e}var n={},o={1:0},u=[];function f(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,f),t.l=!0,t.exports}f.m=e,f.c=n,f.d=function(e,r,t){f.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},f.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},f.t=function(e,r){if(1&r&&(e=f(e)),8&r)return e;if(4&r&&"object"===typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(f.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var n in e)f.d(t,n,function(r){return e[r]}.bind(null,n));return t},f.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return f.d(r,"a",r),r},f.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},f.p="/";var i=window.webpackJsonp=window.webpackJsonp||[],l=i.push.bind(i);i.push=r,i=i.slice();for(var a=0;a<i.length;a++)r(i[a]);var p=l;t()}([]);
2 +//# sourceMappingURL=runtime~main.a8a9905a.js.map
...\ No newline at end of file ...\ No newline at end of file
1 +{"version":3,"sources":["../webpack/bootstrap"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","installedChunks","push","Object","prototype","hasOwnProperty","call","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","window","oldJsonpFunction","slice"],"mappings":"aACA,SAAAA,EAAAC,GAQA,IAPA,IAMAC,EAAAC,EANAC,EAAAH,EAAA,GACAI,EAAAJ,EAAA,GACAK,EAAAL,EAAA,GAIAM,EAAA,EAAAC,EAAA,GACQD,EAAAH,EAAAK,OAAoBF,IAC5BJ,EAAAC,EAAAG,GACAG,EAAAP,IACAK,EAAAG,KAAAD,EAAAP,GAAA,IAEAO,EAAAP,GAAA,EAEA,IAAAD,KAAAG,EACAO,OAAAC,UAAAC,eAAAC,KAAAV,EAAAH,KACAc,EAAAd,GAAAG,EAAAH,IAKA,IAFAe,KAAAhB,GAEAO,EAAAC,QACAD,EAAAU,OAAAV,GAOA,OAHAW,EAAAR,KAAAS,MAAAD,EAAAb,GAAA,IAGAe,IAEA,SAAAA,IAEA,IADA,IAAAC,EACAf,EAAA,EAAiBA,EAAAY,EAAAV,OAA4BF,IAAA,CAG7C,IAFA,IAAAgB,EAAAJ,EAAAZ,GACAiB,GAAA,EACAC,EAAA,EAAkBA,EAAAF,EAAAd,OAA2BgB,IAAA,CAC7C,IAAAC,EAAAH,EAAAE,GACA,IAAAf,EAAAgB,KAAAF,GAAA,GAEAA,IACAL,EAAAQ,OAAApB,IAAA,GACAe,EAAAM,IAAAC,EAAAN,EAAA,KAGA,OAAAD,EAIA,IAAAQ,EAAA,GAKApB,EAAA,CACAqB,EAAA,GAGAZ,EAAA,GAGA,SAAAS,EAAA1B,GAGA,GAAA4B,EAAA5B,GACA,OAAA4B,EAAA5B,GAAA8B,QAGA,IAAAC,EAAAH,EAAA5B,GAAA,CACAK,EAAAL,EACAgC,GAAA,EACAF,QAAA,IAUA,OANAhB,EAAAd,GAAAa,KAAAkB,EAAAD,QAAAC,IAAAD,QAAAJ,GAGAK,EAAAC,GAAA,EAGAD,EAAAD,QAKAJ,EAAAO,EAAAnB,EAGAY,EAAAQ,EAAAN,EAGAF,EAAAS,EAAA,SAAAL,EAAAM,EAAAC,GACAX,EAAAY,EAAAR,EAAAM,IACA1B,OAAA6B,eAAAT,EAAAM,EAAA,CAA0CI,YAAA,EAAAC,IAAAJ,KAK1CX,EAAAgB,EAAA,SAAAZ,GACA,qBAAAa,eAAAC,aACAlC,OAAA6B,eAAAT,EAAAa,OAAAC,YAAA,CAAwDC,MAAA,WAExDnC,OAAA6B,eAAAT,EAAA,cAAiDe,OAAA,KAQjDnB,EAAAoB,EAAA,SAAAD,EAAAE,GAEA,GADA,EAAAA,IAAAF,EAAAnB,EAAAmB,IACA,EAAAE,EAAA,OAAAF,EACA,KAAAE,GAAA,kBAAAF,QAAAG,WAAA,OAAAH,EACA,IAAAI,EAAAvC,OAAAwC,OAAA,MAGA,GAFAxB,EAAAgB,EAAAO,GACAvC,OAAA6B,eAAAU,EAAA,WAAyCT,YAAA,EAAAK,UACzC,EAAAE,GAAA,iBAAAF,EAAA,QAAAM,KAAAN,EAAAnB,EAAAS,EAAAc,EAAAE,EAAA,SAAAA,GAAgH,OAAAN,EAAAM,IAAqBC,KAAA,KAAAD,IACrI,OAAAF,GAIAvB,EAAA2B,EAAA,SAAAtB,GACA,IAAAM,EAAAN,KAAAiB,WACA,WAA2B,OAAAjB,EAAA,SAC3B,WAAiC,OAAAA,GAEjC,OADAL,EAAAS,EAAAE,EAAA,IAAAA,GACAA,GAIAX,EAAAY,EAAA,SAAAgB,EAAAC,GAAsD,OAAA7C,OAAAC,UAAAC,eAAAC,KAAAyC,EAAAC,IAGtD7B,EAAA8B,EAAA,IAEA,IAAAC,EAAAC,OAAA,aAAAA,OAAA,iBACAC,EAAAF,EAAAhD,KAAA2C,KAAAK,GACAA,EAAAhD,KAAAX,EACA2D,IAAAG,QACA,QAAAvD,EAAA,EAAgBA,EAAAoD,EAAAlD,OAAuBF,IAAAP,EAAA2D,EAAApD,IACvC,IAAAU,EAAA4C,EAIAxC","file":"static/js/runtime~main.a8a9905a.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(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 \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 = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\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":""}
...\ No newline at end of file ...\ No newline at end of file
...@@ -5520,8 +5520,7 @@ ...@@ -5520,8 +5520,7 @@
5520 "eventemitter3": { 5520 "eventemitter3": {
5521 "version": "4.0.0", 5521 "version": "4.0.0",
5522 "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.0.tgz", 5522 "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.0.tgz",
5523 - "integrity": "sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg==", 5523 + "integrity": "sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg=="
5524 - "dev": true
5525 }, 5524 },
5526 "eventlistener": { 5525 "eventlistener": {
5527 "version": "0.0.1", 5526 "version": "0.0.1",
...@@ -14468,6 +14467,7 @@ ...@@ -14468,6 +14467,7 @@
14468 "del": "^3.0.0", 14467 "del": "^3.0.0",
14469 "express": "^4.16.2", 14468 "express": "^4.16.2",
14470 "html-entities": "^1.2.0", 14469 "html-entities": "^1.2.0",
14470 + "http-proxy-middleware": "^0.19.1",
14471 "import-local": "^2.0.0", 14471 "import-local": "^2.0.0",
14472 "internal-ip": "^4.2.0", 14472 "internal-ip": "^4.2.0",
14473 "ip": "^1.1.5", 14473 "ip": "^1.1.5",
...@@ -14546,6 +14546,27 @@ ...@@ -14546,6 +14546,27 @@
14546 "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", 14546 "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz",
14547 "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" 14547 "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w=="
14548 }, 14548 },
14549 + "http-proxy": {
14550 + "version": "1.18.1",
14551 + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz",
14552 + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==",
14553 + "requires": {
14554 + "eventemitter3": "^4.0.0",
14555 + "follow-redirects": "^1.0.0",
14556 + "requires-port": "^1.0.0"
14557 + }
14558 + },
14559 + "http-proxy-middleware": {
14560 + "version": "0.19.2",
14561 + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.2.tgz",
14562 + "integrity": "sha512-aYk1rTKqLTus23X3L96LGNCGNgWpG4cG0XoZIT1GUPhhulEHX/QalnO6Vbo+WmKWi4AL2IidjuC0wZtbpg0yhQ==",
14563 + "requires": {
14564 + "http-proxy": "^1.18.1",
14565 + "is-glob": "^4.0.0",
14566 + "lodash": "^4.17.11",
14567 + "micromatch": "^3.1.10"
14568 + }
14569 + },
14549 "is-fullwidth-code-point": { 14570 "is-fullwidth-code-point": {
14550 "version": "1.0.0", 14571 "version": "1.0.0",
14551 "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", 14572 "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
......
1 //SERVER ROUTES 1 //SERVER ROUTES
2 -export const USER_SERVER = '/api/users'; 2 +export const USER_SERVER = '3.209.242.35/api/users';
......
...@@ -3,17 +3,16 @@ ...@@ -3,17 +3,16 @@
3 "version": "1.0.0", 3 "version": "1.0.0",
4 "description": "react boiler plate", 4 "description": "react boiler plate",
5 "main": "index.js", 5 "main": "index.js",
6 - "engine": { 6 + "engines": {
7 - "node": "10.16.0", 7 + "node": "14.15.4",
8 - "npm": "6.9.0" 8 + "npm": "6.14.10"
9 }, 9 },
10 "scripts": { 10 "scripts": {
11 "start": "node server/index.js", 11 "start": "node server/index.js",
12 - "backend": "nodemon server/index.js", 12 + "build" : "cd client && npm install && npm run build",
13 - "frontend": "npm run front --prefix client", 13 + "heroku-postbuild": "npm run build"
14 - "dev": "concurrently \"npm run backend\" \"npm run start --prefix client\""
15 }, 14 },
16 - "author": "John ahn", 15 + "author": "mindyeoi",
17 "license": "ISC", 16 "license": "ISC",
18 "dependencies": { 17 "dependencies": {
19 "async": "^3.1.0", 18 "async": "^3.1.0",
......
1 -dev.js
...\ No newline at end of file ...\ No newline at end of file
1 +module.exports = {
2 + mongoURI: "mongodb+srv://mindyeoi:aaa111@boilerplate.djq4a.mongodb.net/myFirstDatabase?retryWrites=true&w=majority"
3 + };
...\ No newline at end of file ...\ No newline at end of file
...@@ -27,26 +27,19 @@ app.use(cookieParser()); ...@@ -27,26 +27,19 @@ app.use(cookieParser());
27 27
28 app.use('/api/users', require('./routes/users')); 28 app.use('/api/users', require('./routes/users'));
29 app.use('/api/product', require('./routes/product')); 29 app.use('/api/product', require('./routes/product'));
30 +app.use('/uploads', express.static('uploads'));
30 31
32 +const port = process.env.PORT || 5000
31 33
32 -//use this to show the image you have in node js server to client (react js) 34 +app.listen(port, () => {
33 -//https://stackoverflow.com/questions/48914987/send-image-path-from-node-js-express-server-to-react-client 35 + console.log(`Server Running at ${port}`)
34 -app.use('/uploads', express.static('uploads')); 36 +});
35 37
36 -// Serve static assets if in production
37 -if (process.env.NODE_ENV === "production") {
38 38
39 // Set static folder 39 // Set static folder
40 - app.use(express.static("client/build")); 40 + app.use(express.static(path.join("client/build")));
41 41
42 // index.html for all page routes 42 // index.html for all page routes
43 - app.get("*", (req, res) => { 43 + app.get("*", (req, res) => {
44 - res.sendFile(path.resolve(__dirname, "../client", "build", "index.html")); 44 + res.sendFile(path.join(__dirname+ '/../client/build/index.html'));
45 }); 45 });
46 -}
47 -
48 -const port = process.env.PORT || 5000
49 -
50 -app.listen(port, () => {
51 - console.log(`Server Running at ${port}`)
52 -});
...\ No newline at end of file ...\ No newline at end of file
......