Showing
38 changed files
with
151 additions
and
53 deletions
We-Shop/Procfile
0 → 100644
1 | +web: npm start | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
We-Shop/client/.gitignore
deleted
100644 → 0
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* |
We-Shop/client/build/asset-manifest.json
0 → 100644
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 |
We-Shop/client/build/favicon.ico
0 → 100644
No preview for this file type
We-Shop/client/build/index.html
0 → 100644
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 |
We-Shop/client/build/logo.png
0 → 100644

14.7 KB
We-Shop/client/build/manifest.json
0 → 100644
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 |
We-Shop/client/build/service-worker.js
0 → 100644
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":"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","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 /> \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 어떤 약이 필요하신가요? <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 |
We-Shop/client/build/whatmedicine.png
0 → 100644

7.47 KB
... | @@ -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", | ... | ... |
... | @@ -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", | ... | ... |
We-Shop/server/config/.gitignore
deleted
100644 → 0
1 | -dev.js | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
We-Shop/server/config/dev.js
0 → 100644
... | @@ -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 | ... | ... |
We-Shop/uploads/1624107657050_geborin.jpg
0 → 100644

233 KB
We-Shop/uploads/1624107685888_husidin.png
0 → 100644

86.1 KB
We-Shop/uploads/1624107707194_jintongje.png
0 → 100644

335 KB
We-Shop/uploads/1624107728745_pas.jpg
0 → 100644

149 KB
We-Shop/uploads/1624107758932_sohwaje.jpg
0 → 100644

137 KB
We-Shop/uploads/1624107780839_traflu.jpg
0 → 100644

49.7 KB
We-Shop/uploads/1624107872606_band.jpg
0 → 100644

94.2 KB
We-Shop/uploads/1624107913268_band.jpg
0 → 100644

64.1 KB
We-Shop/uploads/1624107996881_band.jpg
0 → 100644

43.2 KB
We-Shop/uploads/1624108083340_madecasol.JPG
0 → 100644
44.1 KB
-
Please register or login to post a comment