박민정

hoxy..

{
"files": {
"main.css": "/static/css/main.c9112ef1.chunk.css",
"main.js": "/static/js/main.30dbcb82.chunk.js",
"main.js.map": "/static/js/main.30dbcb82.chunk.js.map",
"main.js": "/static/js/main.53397765.chunk.js",
"main.js.map": "/static/js/main.53397765.chunk.js.map",
"runtime~main.js": "/static/js/runtime~main.a8a9905a.js",
"runtime~main.js.map": "/static/js/runtime~main.a8a9905a.js.map",
"static/css/2.b6ac9e22.chunk.css": "/static/css/2.b6ac9e22.chunk.css",
"static/js/2.4d47edc8.chunk.js": "/static/js/2.4d47edc8.chunk.js",
"static/js/2.4d47edc8.chunk.js.map": "/static/js/2.4d47edc8.chunk.js.map",
"index.html": "/index.html",
"precache-manifest.16488c9b14dd1aef91bfa2340fd902da.js": "/precache-manifest.16488c9b14dd1aef91bfa2340fd902da.js",
"precache-manifest.ed18e22bdef77bdd64652676558ebe94.js": "/precache-manifest.ed18e22bdef77bdd64652676558ebe94.js",
"service-worker.js": "/service-worker.js",
"static/css/2.b6ac9e22.chunk.css.map": "/static/css/2.b6ac9e22.chunk.css.map",
"static/css/main.c9112ef1.chunk.css.map": "/static/css/main.c9112ef1.chunk.css.map"
......
<!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
<!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.53397765.chunk.js"></script></body></html>
\ No newline at end of file
......
self.__precacheManifest = (self.__precacheManifest || []).concat([
{
"revision": "d9dcd4703f5c7de8e5597152c1420acf",
"revision": "893edd1e601abaa38178d56e61a9ed06",
"url": "/index.html"
},
{
......@@ -8,7 +8,7 @@ self.__precacheManifest = (self.__precacheManifest || []).concat([
"url": "/static/css/2.b6ac9e22.chunk.css"
},
{
"revision": "176d56469d43bf1341fe",
"revision": "cdbaada5321baee264a1",
"url": "/static/css/main.c9112ef1.chunk.css"
},
{
......@@ -16,8 +16,8 @@ self.__precacheManifest = (self.__precacheManifest || []).concat([
"url": "/static/js/2.4d47edc8.chunk.js"
},
{
"revision": "176d56469d43bf1341fe",
"url": "/static/js/main.30dbcb82.chunk.js"
"revision": "cdbaada5321baee264a1",
"url": "/static/js/main.53397765.chunk.js"
},
{
"revision": "42ac5946195a7306e2a5",
......
......@@ -14,7 +14,7 @@
importScripts("https://storage.googleapis.com/workbox-cdn/releases/4.3.1/workbox-sw.js");
importScripts(
"/precache-manifest.16488c9b14dd1aef91bfa2340fd902da.js"
"/precache-manifest.ed18e22bdef77bdd64652676558ebe94.js"
);
self.addEventListener('message', (event) => {
......
(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]]]);
//# sourceMappingURL=main.30dbcb82.chunk.js.map
\ No newline at end of file
{"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 />&nbsp;&nbsp;\r\n <span>{value.name}</span>\r\n </React.Fragment>\r\n ))\r\n\r\n return (\r\n <div>\r\n <Collapse defaultActiveKey={['0']} >\r\n <Panel header=\"약 종류\" key=\"1\">\r\n {renderCheckboxLists()}\r\n </Panel>\r\n </Collapse>\r\n </div>\r\n )\r\n}\r\n\r\nexport default CheckBox","\r\n\r\nconst medicines = [\r\n { _id: 0, name: \"전체\" },\r\n {\r\n _id: 1,\r\n name: \"진통제\",\r\n },\r\n {\r\n _id: 2,\r\n name: \"소화제\",\r\n },\r\n {\r\n _id: 3,\r\n name: \"감기약\",\r\n },\r\n {\r\n _id: 4,\r\n name: \"해열제\",\r\n },\r\n {\r\n _id: 5,\r\n name: \"파스류\",\r\n },\r\n {\r\n _id: 6,\r\n name: \"상처치료\",\r\n },\r\n {\r\n _id: 7,\r\n name: \"기타\",\r\n },\r\n];\r\n\r\n\r\n\r\n\r\nconst price = [\r\n {\r\n _id: 0,\r\n name: \"Any\",\r\n array: [],\r\n },\r\n {\r\n _id: 1,\r\n name: \"배달비 무료\",\r\n array: [0],\r\n },\r\n {\r\n _id: 2,\r\n name: \"배달비 500원 ~ 1000원\",\r\n array: [500, 1000],\r\n },\r\n {\r\n _id: 3,\r\n name: \"배달비 1000원 ~ 2000원\",\r\n array: [1001, 2000],\r\n },\r\n {\r\n _id: 4,\r\n name: \"배달비 200원 ~ 3000원\",\r\n array: [2001, 3000],\r\n },\r\n {\r\n _id: 5,\r\n name: \"3000원 이상\",\r\n array: [3000, 1500000],\r\n },\r\n];\r\n\r\nexport { price, medicines };\r\n","import React, { useState } from \"react\";\r\nimport { Input } from \"antd\";\r\n\r\nconst { Search } = Input;\r\n\r\nfunction SearchFeature(props) {\r\n const [SearchTerms, setSearchTerms] = useState(\"\");\r\n\r\n const onChangeSearch = event => {\r\n setSearchTerms(event.currentTarget.value);\r\n\r\n props.refreshFunction(event.currentTarget.value);\r\n };\r\n\r\n return (\r\n <div style={{ margin: \"auto\" }}>\r\n <Search value={SearchTerms} onChange={onChangeSearch} placeholder=\"상품명\" />\r\n </div>\r\n );\r\n}\r\n\r\nexport default SearchFeature;\r\n","import React, { useEffect, useState } from \"react\";\r\nimport Axios from \"axios\";\r\nimport { Icon, Col, Card, Row } from \"antd\";\r\nimport ImageSlider from \"../../utils/ImageSlider\";\r\nimport CheckBox from \"./Sections/CheckBox\";\r\nimport { medicines, price } from \"./Sections/Datas\";\r\nimport SearchFeature from \"./Sections/SearchFeature\";\r\nimport { Container } from \"react-bootstrap\";\r\n\r\nconst { Meta } = Card;\r\n\r\nfunction LandingPage() {\r\n const [Products, setProducts] = useState([]);\r\n const [Skip, setSkip] = useState(0);\r\n const [Limit, setLimit] = useState(8);\r\n const [PostSize, setPostSize] = useState();\r\n const [SearchTerms, setSearchTerms] = useState(\"\");\r\n\r\n const [Filters, setFilters] = useState({\r\n medicines: [],\r\n price: [],\r\n });\r\n\r\n useEffect(() => {\r\n const variables = {\r\n skip: Skip,\r\n limit: Limit,\r\n };\r\n\r\n getProducts(variables);\r\n }, []);\r\n\r\n const getProducts = variables => {\r\n Axios.post(\"/api/product/getProducts\", variables).then(response => {\r\n if (response.data.success) {\r\n if (variables.loadMore) {\r\n setProducts([...Products, ...response.data.products]);\r\n } else {\r\n setProducts(response.data.products);\r\n }\r\n setPostSize(response.data.postSize);\r\n } else {\r\n alert(\"실패하였습니다.\");\r\n }\r\n });\r\n };\r\n\r\n const onLoadMore = () => {\r\n let skip = Skip + Limit;\r\n\r\n const variables = {\r\n skip: skip,\r\n limit: Limit,\r\n loadMore: true,\r\n filters: Filters,\r\n searchTerm: SearchTerms,\r\n };\r\n getProducts(variables);\r\n setSkip(skip);\r\n };\r\n\r\n const renderCards = Products.map((product, index) => {\r\n return (\r\n <Col style={{ marginTop: \"30px\" }} lg={6} md={8} xs={24}>\r\n <Card\r\n style={{ margin: \"5px\" }}\r\n hoverable={true}\r\n cover={\r\n <a href={`/product/${product._id}`}>\r\n <ImageSlider images={product.images} />\r\n </a>\r\n }\r\n >\r\n <Meta title={product.title} description={`${product.price}000원`} />\r\n </Card>\r\n </Col>\r\n );\r\n });\r\n\r\n const showFilteredResults = filters => {\r\n const variables = {\r\n skip: 0,\r\n limit: Limit,\r\n filters: filters,\r\n };\r\n getProducts(variables);\r\n setSkip(0);\r\n };\r\n\r\n const handlePrice = value => {\r\n const data = price;\r\n let array = [];\r\n\r\n for (let key in data) {\r\n if (data[key]._id === parseInt(value, 10)) {\r\n array = data[key].array;\r\n }\r\n }\r\n console.log(\"array\", array);\r\n return array;\r\n };\r\n\r\n const handleFilters = (filters, category) => {\r\n const newFilters = { ...Filters };\r\n\r\n newFilters[category] = filters;\r\n\r\n if (category === \"price\") {\r\n let priceValues = handlePrice(filters);\r\n newFilters[category] = priceValues;\r\n }\r\n\r\n console.log(newFilters);\r\n\r\n showFilteredResults(newFilters);\r\n setFilters(newFilters);\r\n };\r\n\r\n const updateSearchTerms = newSearchTerm => {\r\n const variables = {\r\n skip: 0,\r\n limit: Limit,\r\n filters: Filters,\r\n searchTerm: newSearchTerm,\r\n };\r\n\r\n setSkip(0);\r\n setSearchTerms(newSearchTerm);\r\n\r\n getProducts(variables);\r\n };\r\n\r\n return (\r\n <div style={{ width: \"75%\", margin: \"3rem auto\" }}>\r\n <div style={{ textAlign: \"center\" }}>\r\n <img src={\"/whatmedicine.png\"} style={{ width: \"500px\" }} />\r\n {/* <h2>\r\n {\" \"}\r\n <Icon type=\"alert\" />\r\n &nbsp; 어떤 약이 필요하신가요?&nbsp;<Icon type=\"alert\" />{\" \"}\r\n </h2> */}\r\n </div>\r\n\r\n\r\n <Container style={{ width: \"50%\" }}>\r\n <CheckBox list={medicines} handleFilters={filters => handleFilters(filters, \"medicines\")} />\r\n </Container>\r\n\r\n {/* Search */}\r\n\r\n {Products.length === 0 ? (\r\n <div style={{ display: \"flex\", height: \"300px\", justifyContent: \"center\", alignItems: \"center\" }}>\r\n \r\n \r\n </div>\r\n ) : (\r\n <div>\r\n <Row gutter={[16, 16]}>{renderCards}</Row>\r\n </div>\r\n )}\r\n <br />\r\n <br />\r\n\r\n {PostSize >= Limit && (\r\n <div style={{ display: \"flex\", justifyContent: \"center\" }}>\r\n <button onClick={onLoadMore}>Load More</button>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n}\r\n\r\nexport default LandingPage;\r\n","import React, { useState } from \"react\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport { loginUser } from \"../../../_actions/user_actions\";\r\nimport { Formik } from \"formik\";\r\nimport * as Yup from \"yup\";\r\nimport { Form, Icon, Input, Button, Checkbox, Typography } from \"antd\";\r\nimport { useDispatch } from \"react-redux\";\r\n\r\nconst { Title } = Typography;\r\n\r\nfunction LoginPage(props) {\r\n const dispatch = useDispatch();\r\n const rememberMeChecked = localStorage.getItem(\"rememberMe\") ? true : false;\r\n\r\n const [formErrorMessage, setFormErrorMessage] = useState(\"\");\r\n const [rememberMe, setRememberMe] = useState(rememberMeChecked);\r\n\r\n const handleRememberMe = () => {\r\n setRememberMe(!rememberMe);\r\n };\r\n\r\n\r\n return (\r\n <Formik\r\n initialValues={{\r\n email: \"\",\r\n password: \"\",\r\n }}\r\n validationSchema={Yup.object().shape({\r\n email: Yup.string().email(\"이메일이 유효하지 않습니다.\").required(\"이메일을 입력해주세요.\"),\r\n password: Yup.string().min(5, \"비밀번호가 너무 짧습니다.\").required(\"비밀번호를 입력해주세요.\"),\r\n })}\r\n onSubmit={(values, { setSubmitting }) => {\r\n setTimeout(() => {\r\n let dataToSubmit = {\r\n email: values.email,\r\n password: values.password,\r\n };\r\n\r\n dispatch(loginUser(dataToSubmit))\r\n .then(response => {\r\n if (response.payload.loginSuccess) {\r\n window.localStorage.setItem(\"userId\", response.payload.userId);\r\n if (rememberMe === true) {\r\n window.localStorage.setItem(\"rememberMe\", values.id);\r\n } else {\r\n localStorage.removeItem(\"rememberMe\");\r\n }\r\n props.history.push(\"/\");\r\n } else {\r\n setFormErrorMessage(\"Check out your Account or Password again\");\r\n }\r\n })\r\n .catch(err => {\r\n setFormErrorMessage(\"Check out your Account or Password again\");\r\n setTimeout(() => {\r\n setFormErrorMessage(\"\");\r\n }, 3000);\r\n });\r\n setSubmitting(false);\r\n }, 500);\r\n }}\r\n >\r\n {props => {\r\n const { values, touched, errors, dirty, isSubmitting, handleChange, handleBlur, handleSubmit, handleReset } = props;\r\n return (\r\n <div className=\"app\">\r\n <Title level={2}>로그인</Title>\r\n <form onSubmit={handleSubmit} style={{ width: \"350px\" }}>\r\n <Form.Item required>\r\n <Input\r\n id=\"email\"\r\n prefix={<Icon type=\"user\" style={{ color: \"rgba(0,0,0,.25)\" }} />}\r\n placeholder=\"Enter your email\"\r\n type=\"email\"\r\n value={values.email}\r\n onChange={handleChange}\r\n onBlur={handleBlur}\r\n className={errors.email && touched.email ? \"text-input error\" : \"text-input\"}\r\n />\r\n {errors.email && touched.email && <div className=\"input-feedback\">{errors.email}</div>}\r\n </Form.Item>\r\n\r\n <Form.Item required>\r\n <Input\r\n id=\"password\"\r\n prefix={<Icon type=\"lock\" style={{ color: \"rgba(0,0,0,.25)\" }} />}\r\n placeholder=\"Enter your password\"\r\n type=\"password\"\r\n value={values.password}\r\n onChange={handleChange}\r\n onBlur={handleBlur}\r\n className={errors.password && touched.password ? \"text-input error\" : \"text-input\"}\r\n />\r\n {errors.password && touched.password && <div className=\"input-feedback\">{errors.password}</div>}\r\n </Form.Item>\r\n\r\n {formErrorMessage && (\r\n <label>\r\n <p style={{ color: \"#ff0000bf\", fontSize: \"0.7rem\", border: \"1px solid\", padding: \"1rem\", borderRadius: \"10px\" }}>{formErrorMessage}</p>\r\n </label>\r\n )}\r\n\r\n <Form.Item>\r\n <div>\r\n <Button type=\"primary\" htmlType=\"submit\" className=\"login-form-button\" style={{ minWidth: \"100%\" }} disabled={isSubmitting} onSubmit={handleSubmit}>\r\n 로그인\r\n </Button>\r\n </div>\r\n </Form.Item>\r\n </form>\r\n </div>\r\n );\r\n }}\r\n </Formik>\r\n );\r\n}\r\n\r\nexport default withRouter(LoginPage);\r\n","import React from \"react\";\r\nimport moment from \"moment\";\r\nimport { Formik } from \"formik\";\r\nimport * as Yup from \"yup\";\r\nimport { registerUser } from \"../../../_actions/user_actions\";\r\nimport { useDispatch } from \"react-redux\";\r\n\r\nimport { Form, Input, Button } from \"antd\";\r\nconst { TextArea } = Input;\r\nconst formItemLayout = {\r\n labelCol: {\r\n xs: { span: 24 },\r\n sm: { span: 8 },\r\n },\r\n wrapperCol: {\r\n xs: { span: 24 },\r\n sm: { span: 16 },\r\n },\r\n};\r\nconst tailFormItemLayout = {\r\n wrapperCol: {\r\n xs: {\r\n span: 24,\r\n offset: 0,\r\n },\r\n sm: {\r\n span: 16,\r\n offset: 8,\r\n },\r\n },\r\n};\r\n\r\nfunction RegisterPage(props) {\r\n const dispatch = useDispatch();\r\n return (\r\n <Formik\r\n initialValues={{\r\n email: \"\",\r\n name: \"\",\r\n address: \"\",\r\n password: \"\",\r\n confirmPassword: \"\",\r\n }}\r\n validationSchema={Yup.object().shape({\r\n name: Yup.string().required(\"이름을 입력해주세요.\"),\r\n email: Yup.string().email(\"이메일 형식이 올바르지 않습니다.\").required(\"이메일을 입력해주세요.\"),\r\n password: Yup.string().min(5, \"비밀번호는 5자리 이상이어야 합니다.\").required(\"비밀번호를 입력해주세요.\"),\r\n confirmPassword: Yup.string()\r\n .oneOf([Yup.ref(\"password\"), null], \"비밀번호가 일치하지 않습니다.\")\r\n .required(\"비밀번호를 한번 더 입력해주세요.\"),\r\n adress: Yup.string().required(\"주소를 입력해주세요.\"),\r\n })}\r\n onSubmit={(values, { setSubmitting }) => {\r\n setTimeout(() => {\r\n let dataToSubmit = {\r\n email: values.email,\r\n password: values.password,\r\n name: values.name,\r\n adress: values.adress,\r\n image: `http://gravatar.com/avatar/${moment().unix()}?d=identicon`,\r\n };\r\n\r\n dispatch(registerUser(dataToSubmit)).then(response => {\r\n if (response.payload.success) {\r\n props.history.push(\"/login\");\r\n } else {\r\n alert(response.payload.err.errmsg);\r\n }\r\n });\r\n\r\n setSubmitting(false);\r\n }, 500);\r\n }}\r\n >\r\n {props => {\r\n const { values, touched, errors, dirty, isSubmitting, handleChange, handleBlur, handleSubmit, handleReset } = props;\r\n return (\r\n <div className=\"app\">\r\n <h3>회원가입</h3>\r\n <Form style={{ minWidth: \"375px\" }} {...formItemLayout} onSubmit={handleSubmit}>\r\n <Form.Item required label=\"이름\">\r\n <Input\r\n id=\"name\"\r\n placeholder=\"이름을 입력하세요\"\r\n type=\"text\"\r\n value={values.name}\r\n onChange={handleChange}\r\n onBlur={handleBlur}\r\n className={errors.name && touched.name ? \"text-input error\" : \"text-input\"}\r\n />\r\n {errors.name && touched.name && <div className=\"input-feedback\">{errors.name}</div>}\r\n </Form.Item>\r\n\r\n \r\n\r\n <Form.Item required label=\"이메일\">\r\n <Input\r\n id=\"email\"\r\n placeholder=\"이메일을 입력해주세요.\"\r\n type=\"email\"\r\n value={values.email}\r\n onChange={handleChange}\r\n onBlur={handleBlur}\r\n className={errors.email && touched.email ? \"text-input error\" : \"text-input\"}\r\n />\r\n {errors.email && touched.email && <div className=\"input-feedback\">{errors.email}</div>}\r\n </Form.Item>\r\n\r\n <Form.Item required label=\"비밀번호\">\r\n <Input\r\n id=\"password\"\r\n placeholder=\"비밀번호를 입력해주세요.\"\r\n type=\"password\"\r\n value={values.password}\r\n onChange={handleChange}\r\n onBlur={handleBlur}\r\n className={errors.password && touched.password ? \"text-input error\" : \"text-input\"}\r\n />\r\n {errors.password && touched.password && <div className=\"input-feedback\">{errors.password}</div>}\r\n </Form.Item>\r\n\r\n <Form.Item required label=\"비밀번호 확인\">\r\n <Input\r\n id=\"confirmPassword\"\r\n placeholder=\"비밀번호를 한번 더 입력해주세요.\"\r\n type=\"password\"\r\n value={values.confirmPassword}\r\n onChange={handleChange}\r\n onBlur={handleBlur}\r\n className={errors.confirmPassword && touched.confirmPassword ? \"text-input error\" : \"text-input\"}\r\n />\r\n {errors.confirmPassword && touched.confirmPassword && <div className=\"input-feedback\">{errors.confirmPassword}</div>}\r\n </Form.Item>\r\n\r\n <Form.Item required label=\"주소\">\r\n <TextArea\r\n id=\"adress\"\r\n placeholder=\"주소를 입력하세요\"\r\n type=\"text\"\r\n value={values.adress}\r\n onChange={handleChange}\r\n onBlur={handleBlur}\r\n className={errors.adress && touched.adress ? \"text-input error\" : \"text-input\"}\r\n />\r\n {errors.adress && touched.adress && <div className=\"input-feedback\">{errors.adress}</div>}\r\n </Form.Item>\r\n\r\n <Form.Item {...tailFormItemLayout}>\r\n <Button onClick={handleSubmit} type=\"primary\" disabled={isSubmitting}>\r\n 가입\r\n </Button>\r\n </Form.Item>\r\n </Form>\r\n </div>\r\n );\r\n }}\r\n </Formik>\r\n );\r\n}\r\n\r\nexport default RegisterPage;\r\n","/* eslint-disable jsx-a11y/anchor-is-valid */\r\nimport React from \"react\";\r\nimport { Menu, Icon, Badge } from \"antd\";\r\nimport axios from \"axios\";\r\nimport { USER_SERVER } from \"../../../Config\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport { useSelector } from \"react-redux\";\r\n\r\nfunction RightMenu(props) {\r\n const user = useSelector(state => state.user);\r\n\r\n const logoutHandler = () => {\r\n axios.get(`${USER_SERVER}/logout`).then(response => {\r\n if (response.status === 200) {\r\n props.history.push(\"/login\");\r\n } else {\r\n alert(\"로그아웃에 실패했습니다.\");\r\n }\r\n });\r\n };\r\n\r\n\r\n if (user.userData && !user.userData.isAuth) {\r\n\r\n return (\r\n <Menu style={{ paddingTop: \"10px\" }} mode={props.mode}>\r\n <Menu.Item key=\"mail\">\r\n <a href=\"/login\"><h6>로그인</h6></a>\r\n </Menu.Item>\r\n <Menu.Item key=\"app\">\r\n <a href=\"/register\"><h6>회원가입</h6></a>\r\n </Menu.Item>\r\n </Menu>\r\n );\r\n } else {\r\n return (\r\n <Menu mode={props.mode} style={{ paddingTop: \"5px\" }}>\r\n <Menu.Item key=\"history\">\r\n <a href=\"/history\">\r\n <h6>구매내역</h6>\r\n </a>\r\n </Menu.Item>\r\n\r\n <Menu.Item key=\"upload\">\r\n <a href=\"/product/upload\">\r\n <h6>등록하기</h6>\r\n </a>\r\n </Menu.Item>\r\n\r\n <Menu.Item key=\"cart\" style={{ paddingBottom: -4 }}>\r\n \r\n <a href=\"/user/cart\" style={{ marginRight: -22, paddingbottom: \"30px\", color: \"#667777\" }}>\r\n <Icon type=\"shopping-cart\" style={{ fontSize: 30, marginBottom: 3 }} />\r\n </a>\r\n \r\n </Menu.Item>\r\n\r\n <Menu.Item key=\"logout\">\r\n <a onClick={logoutHandler}><h6>로그아웃</h6></a>\r\n </Menu.Item>\r\n </Menu>\r\n );\r\n }\r\n}\r\n\r\nexport default withRouter(RightMenu);\r\n","import React, { useState } from \"react\";\r\nimport RightMenu from \"./Sections/RightMenu\";\r\nimport { Drawer, Button, Icon } from \"antd\";\r\nimport \"./Sections/Navbar.css\";\r\nimport { Container, Navbar, Nav } from \"react-bootstrap\";\r\n\r\nfunction NavBar() {\r\n const [visible, setVisible] = useState(false);\r\n\r\n const showDrawer = () => {\r\n setVisible(true);\r\n };\r\n\r\n const onClose = () => {\r\n setVisible(false);\r\n };\r\n\r\n return (\r\n <Navbar bg=\"white\" variant=\"light\" style={{ position: \"fixed\", zIndex: 5, width: \"100%\", border: \"1px solid lightgray\" }}>\r\n <Container>\r\n <Navbar.Brand href=\"/\">\r\n <img src={\"/logo.png\"} style={{ width: \"120px\", marginLeft:\"50px\"}} />\r\n </Navbar.Brand>\r\n <Nav className=\"mx-3\" style={{ position: \"relative\", right: \"0\" }}>\r\n <div className=\"menu__container\">\r\n <div className=\"menu_left\"></div>\r\n <div className=\"menu_rigth\">\r\n <RightMenu mode=\"horizontal\" />\r\n </div>\r\n <Button className=\"menu__mobile-button\" type=\"primary\" onClick={showDrawer}>\r\n <Icon type=\"align-right\" />\r\n </Button>\r\n <Drawer title=\"Basic Drawer\" placement=\"right\" className=\"menu_drawer\" closable={false} onClose={onClose} visible={visible}>\r\n \r\n <RightMenu mode=\"inline\" />\r\n </Drawer>\r\n </div>\r\n </Nav>\r\n </Container>\r\n </Navbar>\r\n );\r\n}\r\n\r\nexport default NavBar;\r\n","import React from \"react\";\r\nimport { Icon } from \"antd\";\r\n\r\nfunction Footer() {\r\n return (\r\n <div\r\n style={{\r\n height: \"80px\",\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n fontSize: \"1rem\",\r\n }}\r\n >\r\n <p> Copyright © 2021 Minjeong Park All rights reserved</p>\r\n </div>\r\n );\r\n}\r\n\r\nexport default Footer;\r\n","import React, { useState } from \"react\";\r\nimport Dropzone from \"react-dropzone\";\r\nimport { Icon } from \"antd\";\r\nimport Axios from \"axios\";\r\nimport \"./FileUpload.css\";\r\n\r\nfunction FileUpload(props) {\r\n const [Images, setImages] = useState([]);\r\n\r\n const onDrop = files => {\r\n let formData = new FormData();\r\n const config = {\r\n header: { \"content-type\": \"multipart/form-data\" },\r\n };\r\n formData.append(\"file\", files[0]);\r\n Axios.post(\"/api/product/uploadImage\", formData, config).then(response => {\r\n if (response.data.success) {\r\n setImages([...Images, response.data.image]);\r\n props.refreshFunction([...Images, response.data.image]);\r\n } else {\r\n alert(\"Failed to save the Image in Server\");\r\n }\r\n });\r\n };\r\n\r\n const onDelete = image => {\r\n const currentIndex = Images.indexOf(image);\r\n\r\n let newImages = [...Images];\r\n newImages.splice(currentIndex, 1);\r\n\r\n setImages(newImages);\r\n props.refreshFunction(newImages);\r\n };\r\n\r\n return (\r\n <div style={{ display: \"flex\", justifyContent: \"space-between\" }}>\r\n <Dropzone onDrop={onDrop} multiple={false} maxSize={800000000}>\r\n {({ getRootProps, getInputProps }) => (\r\n <div\r\n style={{\r\n width: \"300px\",\r\n height: \"240px\",\r\n border: \"1px solid lightgray\",\r\n borderRadius: '15px',\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n }}\r\n {...getRootProps()}\r\n >\r\n {console.log(\"getRootProps\", { ...getRootProps() })}\r\n {console.log(\"getInputProps\", { ...getInputProps() })}\r\n <input {...getInputProps()} />\r\n <Icon type=\"plus\" style={{ fontSize: \"3rem\" }} />\r\n </div>\r\n )}\r\n </Dropzone>\r\n\r\n <div style={{ display: \"flex\", width: \"350px\", height: \"240px\", overflowX: \"scroll\" }}>\r\n {Images.map((image, index) => (\r\n <div onClick={() => onDelete(image)}>\r\n <img id=\"test\" src={`http://localhost:5000/${image}`} />\r\n <div id=\"alert\">클릭하면 삭제돼요!</div>\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default FileUpload;\r\n","import React, { useState } from \"react\";\r\nimport {Button, Form, message, Input, Icon } from \"antd\";\r\nimport FileUpload from \"../../utils/FileUpload\";\r\nimport Axios from \"axios\";\r\n\r\nconst { TextArea } = Input;\r\n\r\nconst Medicines = [\r\n { key: 1, value: \"진통제\u001f\" },\r\n { key: 2, value: \"소화제\u001f\" },\r\n { key: 3, value: \"감기약\" },\r\n { key: 4, value: \"해열제\" },\r\n { key: 5, value: \"파스류\" },\r\n { key: 6, value: \"상처치료\u001f\" },\r\n { key: 7, value: \"기타\" }\r\n];\r\n\r\nfunction UploadProductPage(props) {\r\n const [TitleValue, setTitleValue] = useState(\"\");\r\n const [DescriptionValue, setDescriptionValue] = useState(\"\");\r\n const [PriceValue, setPriceValue] = useState(0);\r\n const [MedicinesValue, setMedicinesValue] = useState(1);\r\n\r\n const [Images, setImages] = useState([]);\r\n\r\n const onTitleChange = event => {\r\n setTitleValue(event.currentTarget.value);\r\n };\r\n\r\n const onDescriptionChange = event => {\r\n setDescriptionValue(event.currentTarget.value);\r\n };\r\n\r\n const onPriceChange = event => {\r\n setPriceValue(event.currentTarget.value);\r\n };\r\n\r\n const onMedicinesSelectChange = event => {\r\n setMedicinesValue(event.currentTarget.value);\r\n };\r\n\r\n const updateImages = newImages => {\r\n setImages(newImages);\r\n };\r\n const onSubmit = event => {\r\n event.preventDefault();\r\n\r\n if (!TitleValue || !DescriptionValue || !PriceValue || !MedicinesValue || !Images) {\r\n return alert(\"fill all the fields first!\");\r\n }\r\n\r\n const variables = {\r\n writer: props.user.userData._id,\r\n title: TitleValue,\r\n description: DescriptionValue,\r\n price: PriceValue,\r\n images: Images,\r\n medicines: MedicinesValue,\r\n };\r\n\r\n Axios.post(\"/api/product/uploadProduct\", variables).then(response => {\r\n if (response.data.success) {\r\n alert(\"Product Successfully Uploaded\");\r\n props.history.push(\"/\");\r\n } else {\r\n alert(\"Failed to upload Product\");\r\n }\r\n });\r\n };\r\n\r\n return (\r\n <div style={{ maxWidth: \"700px\", margin: \"2rem auto\" }}>\r\n <div style={{ textAlign: \"center\", marginBottom: \"2rem\" }}>\r\n <h3>약 등록하기</h3>\r\n </div>\r\n\r\n <Form onSubmit={onSubmit}>\r\n {/* DropZone */}\r\n <FileUpload refreshFunction={updateImages} />\r\n\r\n <br />\r\n <br />\r\n <label>약 이름</label>\r\n <Input onChange={onTitleChange} value={TitleValue} />\r\n <br />\r\n <br />\r\n <label>설명</label>\r\n <TextArea onChange={onDescriptionChange} value={DescriptionValue} />\r\n <br />\r\n <br />\r\n <label>가격($)</label>\r\n <Input onChange={onPriceChange} value={PriceValue} type=\"number\" />\r\n <br />\r\n <br />\r\n <select onChange={onMedicinesSelectChange} value={MedicinesValue}>\r\n {Medicines.map(item => (\r\n <option key={item.key} value={item.key}>{item.value} </option>\r\n ))}\r\n </select>\r\n <br />\r\n <br />\r\n <Button onClick={onSubmit}>등록</Button>\r\n </Form>\r\n </div>\r\n );\r\n}\r\n\r\nexport default UploadProductPage;\r\n","import React, { useEffect, useState } from 'react'\r\nimport ImageGallery from 'react-image-gallery';\r\n\r\nfunction ProductImage(props) {\r\n const [Images, setImages] = useState([])\r\n\r\n useEffect(() => {\r\n if (props.detail.images && props.detail.images.length > 0) {\r\n let images = [];\r\n\r\n props.detail.images && props.detail.images.map(item => {\r\n images.push({\r\n original: `http://localhost:5000/${item}`,\r\n thumbnail: `http://localhost:5000/${item}`\r\n })\r\n })\r\n setImages(images)\r\n }\r\n }, [props.detail])\r\n\r\n return (\r\n <div>\r\n <ImageGallery showFullscreenButton={false} showPlayButton={false} items={Images} />\r\n </div>\r\n )\r\n}\r\n\r\nexport default ProductImage\r\n","import React, { useEffect, useState } from \"react\";\r\nimport { Button, Descriptions } from \"antd\";\r\nimport { Container } from \"react-bootstrap\";\r\n\r\nfunction ProductInfo(props) {\r\n const [Product, setProduct] = useState({});\r\n\r\n useEffect(() => {\r\n setProduct(props.detail);\r\n }, [props.detail]);\r\n\r\n const addToCarthandler = () => {\r\n props.addToCart(props.detail._id);\r\n };\r\n\r\n return (\r\n\r\n <Container style={{ paddingTop: \"100px\" }}>\r\n <Container style={{ textAlign: \"center\" }}>\r\n {/* <h7>{Product.description}</h7><br/> */}\r\n <h3>가격 : {Product.price}000 원</h3>\r\n </Container>\r\n\r\n <br />\r\n <br />\r\n <div style={{ display: \"flex\", justifyContent: \"center\" }}>\r\n <Button size=\"large\" shape=\"round\" type=\"danger\" onClick={addToCarthandler}>\r\n <a href=\"/user/cart\">\r\n 장바구니에 담기\r\n </a>\r\n </Button>\r\n </div>\r\n </Container>\r\n );\r\n}\r\n\r\nexport default ProductInfo;\r\n","import React, { useEffect, useState } from 'react'\r\nimport Axios from 'axios'\r\nimport { Row, Col } from 'antd';\r\nimport ProductImage from './Sections/ProductImage';\r\nimport ProductInfo from './Sections/ProductInfo';\r\nimport { addToCart } from '../../../_actions/user_actions';\r\nimport { useDispatch } from 'react-redux';\r\nfunction DetailProductPage(props) {\r\n const dispatch = useDispatch();\r\n const productId = props.match.params.productId\r\n const [Product, setProduct] = useState([])\r\n\r\n useEffect(() => {\r\n Axios.get(`/api/product/products_by_id?id=${productId}&type=single`)\r\n .then(response => {\r\n setProduct(response.data[0])\r\n })\r\n\r\n }, [])\r\n\r\n const addToCartHandler = (productId) => {\r\n dispatch(addToCart(productId))\r\n \r\n }\r\n\r\n return (\r\n <div className=\"postPage\" style={{ width: '100%', padding: '3rem 4rem' }}>\r\n\r\n <div style={{ display: 'flex', justifyContent: 'center' }}>\r\n <h1>{Product.title}</h1>\r\n </div>\r\n\r\n <br />\r\n\r\n <Row gutter={[16, 16]} >\r\n <Col lg={12} xs={24}>\r\n <ProductImage detail={Product} style={{width :\"300px\"}} />\r\n </Col>\r\n <Col lg={12} xs={24}>\r\n <ProductInfo\r\n addToCart={addToCartHandler}\r\n detail={Product} />\r\n </Col>\r\n </Row>\r\n </div>\r\n )\r\n}\r\n\r\nexport default DetailProductPage\r\n","import React from \"react\";\r\n\r\nfunction UserCardBlock(props) {\r\n const renderCartImage = images => {\r\n if (images.length > 0) {\r\n let image = images[0];\r\n return `http://localhost:5000/${image}`;\r\n }\r\n };\r\n\r\n const renderItems = () =>\r\n props.products &&\r\n props.products.map(product => (\r\n <tr key={product._id} style={{ margin: \"auto\", backgroundColor: \"white\" }}>\r\n <td style={{ margin: \"auto\", textAlign: \"center\" }}>\r\n <img style={{ width: \"70px\" }} alt=\"product\" src={renderCartImage(product.images)} />\r\n </td>\r\n <td style={{ margin: \"auto\", textAlign: \"center\" }}>{product.title}</td>\r\n <td style={{ margin: \"auto\", textAlign: \"center\" }}>{product.quantity} EA</td>\r\n <td style={{ margin: \"auto\", textAlign: \"center\" }}>$ {product.price} </td>\r\n <td style={{ margin: \"auto\", textAlign: \"center\" }}>\r\n <button onClick={() => props.removeItem(product._id)}>❌</button>\r\n </td>\r\n </tr>\r\n ));\r\n\r\n return (\r\n <div>\r\n <table>\r\n <thead>\r\n <tr style={{ textAlign: \"center\" }}>\r\n <th>상품 이미지</th>\r\n <th>상품명</th>\r\n <th>개수</th>\r\n <th>가격</th>\r\n <th>장바구니에서 삭제하기</th>\r\n </tr>\r\n </thead>\r\n <tbody>{renderItems()}</tbody>\r\n </table>\r\n </div>\r\n );\r\n}\r\n\r\nexport default UserCardBlock;\r\n","import React from 'react';\r\nimport PaypalExpressBtn from 'react-paypal-express-checkout';\r\n\r\nexport default class Paypal extends React.Component {\r\n render() {\r\n const onSuccess = (payment) => {\r\n // Congratulation, it came here means everything's fine!\r\n console.log(\"The payment was succeeded!\", payment);\r\n // You can bind the \"payment\" object's value to your state or props or whatever here, please see below for sample returned data\r\n this.props.onSuccess(payment); \r\n }\r\n\r\n const onCancel = (data) => {\r\n // User pressed \"cancel\" or close Paypal's popup!\r\n console.log('The payment was cancelled!', data);\r\n // You can bind the \"data\" object's value to your state or props or whatever here, please see below for sample returned data\r\n }\r\n\r\n const onError = (err) => {\r\n // The main Paypal's script cannot be loaded or somethings block the loading of that script!\r\n console.log(\"Error!\", err);\r\n // Because the Paypal's main script is loaded asynchronously from \"https://www.paypalobjects.com/api/checkout.js\"\r\n // => sometimes it may take about 0.5 second for everything to get set, or for the button to appear\r\n }\r\n\r\n let env = 'sandbox'; // you can set here to 'production' for production\r\n let currency = 'USD'; // or you can set this value from your props or state\r\n let total = this.props.toPay; // same as above, this is the total amount (based on currency) to be paid by using Paypal express checkout\r\n // Document on Paypal's currency code: https://developer.paypal.com/docs/classic/api/currency_codes/\r\n\r\n const client = {\r\n sandbox: 'ASbCsyjZeUzpNCkVbbqseQzcXivFRRoyPfpJK24688vFvIchTR-CCK79Ao5FB6zgqIO2r5Xw-a4Xh-44',\r\n production: 'YOUR-PRODUCTION-APP-ID',\r\n }\r\n // In order to get production's app-ID, you will have to send your app to Paypal for approval first\r\n // For sandbox app-ID (after logging into your developer account, please locate the \"REST API apps\" section, click \"Create App\"):\r\n // => https://developer.paypal.com/docs/classic/lifecycle/sb_credentials/\r\n // For production app-ID:\r\n // => https://developer.paypal.com/docs/classic/lifecycle/goingLive/\r\n\r\n // NB. You can also have many Paypal express checkout buttons on page, just pass in the correct amount and they will work!\r\n return (\r\n <PaypalExpressBtn\r\n env={env}\r\n client={client}\r\n currency={currency}\r\n total={total}\r\n onError={onError}\r\n onSuccess={onSuccess}\r\n onCancel={onCancel}\r\n style={{ \r\n size:'large',\r\n color:'blue',\r\n shape: 'rect',\r\n label: 'checkout'\r\n }}\r\n />\r\n );\r\n }\r\n}","import React, { useEffect, useState } from \"react\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport { getCartItems, removeCartItem, onSuccessBuy } from \"../../../_actions/user_actions\";\r\nimport UserCardBlock from \"./Sections/UserCardBlock\";\r\nimport { Result, Empty } from \"antd\";\r\nimport Axios from \"axios\";\r\nimport Paypal from \"../../utils/Paypal\";\r\nimport { Container } from \"react-bootstrap\";\r\n\r\nfunction CartPage(props) {\r\n const dispatch = useDispatch();\r\n const [Total, setTotal] = useState(0);\r\n const [ShowTotal, setShowTotal] = useState(false);\r\n const [ShowSuccess, setShowSuccess] = useState(false);\r\n\r\n useEffect(() => {\r\n let cartItems = [];\r\n if (props.user.userData && props.user.userData.cart) {\r\n if (props.user.userData.cart.length > 0) {\r\n props.user.userData.cart.forEach(item => {\r\n cartItems.push(item.id);\r\n });\r\n dispatch(getCartItems(cartItems, props.user.userData.cart)).then(response => {\r\n if (response.payload.length > 0) {\r\n calculateTotal(response.payload);\r\n }\r\n });\r\n }\r\n }\r\n }, [props.user.userData]);\r\n\r\n const calculateTotal = cartDetail => {\r\n let total = 0;\r\n\r\n cartDetail.map(item => {\r\n total += parseInt(item.price, 10) * item.quantity;\r\n });\r\n\r\n setTotal(total);\r\n setShowTotal(true);\r\n };\r\n\r\n const removeFromCart = productId => {\r\n dispatch(removeCartItem(productId)).then(response => {\r\n if (response.payload.cartDetail.length <= 0) {\r\n setShowTotal(false);\r\n } else {\r\n calculateTotal(response.payload.cartDetail);\r\n }\r\n });\r\n };\r\n\r\n const transactionSuccess = data => {\r\n dispatch(\r\n onSuccessBuy({\r\n cartDetail: props.user.cartDetail,\r\n paymentData: data,\r\n })\r\n ).then(response => {\r\n if (response.payload.success) {\r\n setShowSuccess(true);\r\n setShowTotal(false);\r\n }\r\n });\r\n };\r\n\r\n const transactionError = () => {\r\n console.log(\"Paypal error\");\r\n };\r\n\r\n const transactionCanceled = () => {\r\n console.log(\"Transaction canceled\");\r\n };\r\n\r\n return (\r\n <div style={{ width: \"85%\", margin: \"3rem auto\" }}>\r\n <h1>장바구니</h1>\r\n <div style={{ marginTop: \"30px\" }}>\r\n <UserCardBlock products={props.user.cartDetail} removeItem={removeFromCart} />\r\n {ShowTotal ? (\r\n <div style={{ marginTop: \"3rem\", textAlign: \"right\" }}>\r\n <h2>총 금액: ${Total} </h2>\r\n </div>\r\n ) : ShowSuccess ? (\r\n <Result status=\"success\" title=\"Successfully Purchased Items\" />\r\n ) : (\r\n <div\r\n style={{\r\n width: \"100%\",\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n justifyContent: \"center\",\r\n }}\r\n >\r\n <br />\r\n <Empty description={false} />\r\n <p>장바구니가 비었습니다.</p>\r\n </div>\r\n )}\r\n </div>\r\n\r\n {ShowTotal && (\r\n <Container style={{ width: \"max-content\", marginTop: \"100px\" }}>\r\n <Paypal sty toPay={Total} onSuccess={transactionSuccess} transactionError={transactionError} transactionCanceled={transactionCanceled} />\r\n </Container>\r\n )}\r\n </div>\r\n );\r\n}\r\n\r\nexport default CartPage;\r\n","import React from \"react\";\r\n\r\nfunction HistoryPage(props) {\r\n return (\r\n <div style={{ width: \"80%\", margin: \"3rem auto\" }}>\r\n <div style={{ textAlign: \"center\" }}>\r\n <h1>구매내역</h1>\r\n </div>\r\n <br />\r\n\r\n <table>\r\n <thead>\r\n <tr>\r\n <th style={{ textAlign: \"center\" }}>구매 ID</th>\r\n <th style={{ textAlign: \"center\" }}>가격</th>\r\n <th style={{ textAlign: \"center\" }}>수량</th>\r\n <th style={{ textAlign: \"center\" }}>구매 날짜</th>\r\n </tr>\r\n </thead>\r\n\r\n <tbody>\r\n {props.user.userData &&\r\n props.user.userData.history &&\r\n props.user.userData.history.map(item => (\r\n <tr key={item.id}>\r\n <td style={{ textAlign: \"center\", margin: \"auto\" }}>{item.id}</td>\r\n <td style={{ textAlign: \"center\", margin: \"auto\" }}>{item.price}</td>\r\n <td style={{ textAlign: \"center\", margin: \"auto\" }}>{item.quantity}</td>\r\n <td style={{ textAlign: \"center\", margin: \"auto\" }}>{item.dateOfPurchase}</td>\r\n </tr>\r\n ))}\r\n </tbody>\r\n </table>\r\n </div>\r\n );\r\n}\r\n\r\nexport default HistoryPage;\r\n","import React from \"react\";\r\nimport axios from 'axios';\r\n\r\nfunction adminPage(props) {\r\n \r\n}\r\n\r\nexport default adminPage;\r\n","import React, { Suspense } from \"react\";\r\nimport { Route, Switch } from \"react-router-dom\";\r\nimport Auth from \"../hoc/auth\";\r\n// pages for this product\r\nimport LandingPage from \"./views/LandingPage/LandingPage.js\";\r\nimport LoginPage from \"./views/LoginPage/LoginPage.js\";\r\nimport RegisterPage from \"./views/RegisterPage/RegisterPage.js\";\r\nimport NavBar from \"./views/NavBar/NavBar\";\r\nimport Footer from \"./views/Footer/Footer\";\r\nimport UploadProductPage from \"./views/UploadProductPage/UploadProductPage\";\r\nimport DetailProductPage from \"./views/DetailProductPage/DetailProductPage\";\r\nimport CartPage from \"./views/CartPage/CartPage\";\r\nimport HistoryPage from \"./views/HistoryPage/HistoryPage\";\r\nimport adminPage from \"./views/adminPage/adminPage\";\r\n\r\nfunction App() {\r\n return (\r\n <Suspense fallback={<div>Loading...</div>}>\r\n <NavBar />\r\n <div style={{ paddingTop: \"75px\", minHeight: \"calc(100vh - 80px)\" }}>\r\n <Switch>\r\n <Route exact path=\"/\" component={Auth(LandingPage, null)} />\r\n <Route exact path=\"/login\" component={Auth(LoginPage, false)} />\r\n <Route exact path=\"/register\" component={Auth(RegisterPage, false)} />\r\n <Route exact path=\"/product/upload\" component={Auth(UploadProductPage, true)} />\r\n <Route exact path=\"/product/:productId\" component={Auth(DetailProductPage, null)} />\r\n <Route exact path=\"/user/cart\" component={Auth(CartPage, true)} />\r\n <Route exact path=\"/history\" component={Auth(HistoryPage, true)} />\r\n <Route exact path=\"/admin\" component={Auth(adminPage, true)} />\r\n </Switch>\r\n </div>\r\n <Footer />\r\n </Suspense>\r\n );\r\n}\r\n\r\nexport default App;\r\n","// This optional code is used to register a service worker.\r\n// register() is not called by default.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on subsequent visits to a page, after all the\r\n// existing tabs open on the page have been closed, since previously cached\r\n// resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model and instructions on how to\r\n// opt-in, read https://bit.ly/CRA-PWA\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.1/8 is considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n);\r\n\r\nexport function register(config) {\r\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Let's check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl, config);\r\n\r\n // Add some additional logging to localhost, pointing developers to the\r\n // service worker/PWA documentation.\r\n navigator.serviceWorker.ready.then(() => {\r\n console.log(\r\n 'This web app is being served cache-first by a service ' +\r\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\r\n );\r\n });\r\n } else {\r\n // Is not localhost. Just register service worker\r\n registerValidSW(swUrl, config);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW(swUrl, config) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n if (installingWorker == null) {\r\n return;\r\n }\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the updated precached content has been fetched,\r\n // but the previous service worker will still serve the older\r\n // content until all client tabs are closed.\r\n console.log(\r\n 'New content is available and will be used when all ' +\r\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\r\n );\r\n\r\n // Execute callback\r\n if (config && config.onUpdate) {\r\n config.onUpdate(registration);\r\n }\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log('Content is cached for offline use.');\r\n\r\n // Execute callback\r\n if (config && config.onSuccess) {\r\n config.onSuccess(registration);\r\n }\r\n }\r\n }\r\n };\r\n };\r\n })\r\n .catch(error => {\r\n console.error('Error during service worker registration:', error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker(swUrl, config) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl)\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n const contentType = response.headers.get('content-type');\r\n if (\r\n response.status === 404 ||\r\n (contentType != null && contentType.indexOf('javascript') === -1)\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl, config);\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\r\n 'No internet connection found. App is running in offline mode.'\r\n );\r\n });\r\n}\r\n\r\nexport function unregister() {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister();\r\n });\r\n }\r\n}\r\n","import {\r\n LOGIN_USER,\r\n REGISTER_USER,\r\n AUTH_USER,\r\n LOGOUT_USER,\r\n ADD_TO_CART_USER,\r\n GET_CART_ITEMS_USER,\r\n REMOVE_CART_ITEM_USER,\r\n ON_SUCCESS_BUY_USER\r\n} from '../_actions/types';\r\n\r\n\r\nexport default function (state = {}, action) {\r\n switch (action.type) {\r\n case REGISTER_USER:\r\n return { ...state, register: action.payload }\r\n case LOGIN_USER:\r\n return { ...state, loginSucces: action.payload }\r\n case AUTH_USER:\r\n return { ...state, userData: action.payload }\r\n case LOGOUT_USER:\r\n return { ...state }\r\n case ADD_TO_CART_USER:\r\n return {\r\n ...state, userData: {\r\n ...state.userData,\r\n cart: action.payload\r\n }\r\n }\r\n case GET_CART_ITEMS_USER:\r\n return {\r\n ...state, cartDetail: action.payload\r\n }\r\n case REMOVE_CART_ITEM_USER:\r\n return {\r\n ...state,\r\n cartDetail: action.payload.cartDetail,\r\n userData: {\r\n ...state.userData,\r\n cart: action.payload.cart\r\n }\r\n\r\n }\r\n case ON_SUCCESS_BUY_USER:\r\n return {\r\n ...state,\r\n userData: {\r\n ...state.userData,\r\n cart: action.payload.cart\r\n },\r\n cartDetail: action.payload.cartDetail\r\n }\r\n\r\n default:\r\n return state;\r\n }\r\n}","import { combineReducers } from \"redux\";\r\nimport user from \"./user_reducer\";\r\n\r\nconst rootReducer = combineReducers({\r\n user,\r\n});\r\n\r\nexport default rootReducer;\r\n","import React from \"react\";\r\nimport ReactDOM from \"react-dom\";\r\nimport \"./index.css\";\r\nimport App from \"./components/App\";\r\nimport * as serviceWorker from \"./serviceWorker\";\r\nimport { BrowserRouter } from \"react-router-dom\";\r\n\r\nimport Reducer from \"./_reducers\";\r\nimport { Provider } from \"react-redux\";\r\nimport { createStore, applyMiddleware } from \"redux\";\r\nimport promiseMiddleware from \"redux-promise\";\r\nimport ReduxThunk from \"redux-thunk\";\r\n\r\nconst createStoreWithMiddleware = applyMiddleware(promiseMiddleware, ReduxThunk)(createStore);\r\n\r\nReactDOM.render(\r\n <Provider store={createStoreWithMiddleware(Reducer, window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__())}>\r\n <BrowserRouter>\r\n <App />\r\n </BrowserRouter>\r\n </Provider>,\r\n document.getElementById(\"root\")\r\n);\r\n// If you want your app to work offline and load faster, you can change\r\n// unregister() to register() below. Note this comes with some pitfalls.\r\n// Learn more about service workers: https://bit.ly/CRA-PWA\r\nserviceWorker.unregister();\r\n"],"sourceRoot":""}
\ No newline at end of file
(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),c=a(5),l=a.n(c),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="https://3.209.242.35/api/users",j="https://3.209.242.35/api/product";var x=a(32),w=function(e,t){var a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;return function(c){var l=Object(x.c)(function(e){return e.user}),i=Object(x.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&&c.history.push("/login"),e.next=7;break;case 6:a&&!n.payload.isAdmin?c.history.push("/"):!1===t&&c.history.push("/");case 7:case"end":return e.stop()}},e)}));return function(t){return e.apply(this,arguments)}}())},[i,c.history,l.googleAuth]),r.a.createElement(e,Object.assign({},c,{user:l}))}},S=a(90),_=a(55),k=a(16),D=a(569),P=a(44),C=a(91),I=a(566);var A=function(e){return r.a.createElement("div",null,r.a.createElement(I.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"}))})))},T=a(573),N=a(575),q=T.a.Panel;var B=function(e){var t=Object(n.useState)([]),a=Object(k.a)(t,2),c=a[0],l=a[1];return r.a.createElement("div",null,r.a.createElement(T.a,{defaultActiveKey:["0"]},r.a.createElement(q,{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(N.a,{onChange:function(){return function(t){var a=c.indexOf(t),n=Object(_.a)(c);-1===a?n.push(t):n.splice(a,1),l(n),e.handleFilters(n)}(t._id)},type:"checkbox",checked:-1!==c.indexOf(t._id)}),"\xa0\xa0",r.a.createElement("span",null,t.name))}))))},F=[{_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"}],R=[{_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]}],z=a(576);z.a.Search;var M=a(567);function X(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 U=D.a.Meta;var W=function(){var e=Object(n.useState)([]),t=Object(k.a)(e,2),a=t[0],c=t[1],l=Object(n.useState)(0),i=Object(k.a)(l,2),o=i[0],s=i[1],u=Object(n.useState)(8),m=Object(k.a)(u,2),p=m[0],f=(m[1],Object(n.useState)()),y=Object(k.a)(f,2),h=y[0],E=y[1],g=Object(n.useState)(""),b=Object(k.a)(g,2),v=b[0],O=(b[1],Object(n.useState)({medicines:[],price:[]})),x=Object(k.a)(O,2),w=x[0],I=x[1];Object(n.useEffect)(function(){T({skip:o,limit:p})},[]);var T=function(e){d.a.post("".concat(j,"/getProducts"),e).then(function(t){t.data.success?(e.loadMore?c([].concat(Object(_.a)(a),Object(_.a)(t.data.products))):c(t.data.products),E(t.data.postSize)):alert("\uc2e4\ud328\ud558\uc600\uc2b5\ub2c8\ub2e4.")})},N=a.map(function(e,t){return r.a.createElement(P.a,{style:{marginTop:"30px"},lg:6,md:8,xs:24},r.a.createElement(D.a,{style:{margin:"5px"},hoverable:!0,cover:r.a.createElement("a",{href:"/product/".concat(e._id)},r.a.createElement(A,{images:e.images}))},r.a.createElement(U,{title:e.title,description:"".concat(e.price,"000\uc6d0")})))}),q=function(e,t){var a=function(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?X(a,!0).forEach(function(t){Object(S.a)(e,t,a[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):X(a).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))})}return e}({},w);if(a[t]=e,"price"===t){var n=function(e){var t=R,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){T({skip:0,limit:p,filters:e}),s(0)}(a),I(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(M.a,{style:{width:"50%"}},r.a.createElement(B,{list:F,handleFilters:function(e){return q(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(C.a,{gutter:[16,16]},N)),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;T({skip:e,limit:p,loadMore:!0,filters:w,searchTerm:v}),s(e)}},"Load More")))},L=a(142),V=a(40),$=a(572),J=a(571),K=a(14),H=a(191),Q=$.a.Title;var Y=Object(i.f)(function(e){var t=Object(x.b)(),a=!!localStorage.getItem("rememberMe"),c=Object(n.useState)(""),l=Object(k.a)(c,2),i=l[0],o=l[1],s=Object(n.useState)(a),u=Object(k.a)(s,2),m=u[0];return u[1],r.a.createElement(L.a,{initialValues:{email:"",password:""},validationSchema:V.object().shape({email:V.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:V.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,c=(e.dirty,e.isSubmitting),l=e.handleChange,o=e.handleBlur,s=e.handleSubmit;return e.handleReset,r.a.createElement("div",{className:"app"},r.a.createElement(Q,{level:2},"\ub85c\uadf8\uc778"),r.a.createElement("form",{onSubmit:s,style:{width:"350px"}},r.a.createElement(J.a.Item,{required:!0},r.a.createElement(z.a,{id:"email",prefix:r.a.createElement(K.a,{type:"user",style:{color:"rgba(0,0,0,.25)"}}),placeholder:"Enter your email",type:"email",value:t.email,onChange:l,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(J.a.Item,{required:!0},r.a.createElement(z.a,{id:"password",prefix:r.a.createElement(K.a,{type:"lock",style:{color:"rgba(0,0,0,.25)"}}),placeholder:"Enter your password",type:"password",value:t.password,onChange:l,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(J.a.Item,null,r.a.createElement("div",null,r.a.createElement(H.a,{type:"primary",htmlType:"submit",className:"login-form-button",style:{minWidth:"100%"},disabled:c,onSubmit:s},"\ub85c\uadf8\uc778")))))})}),Z=a(106),G=a.n(Z),ee=z.a.TextArea,te={labelCol:{xs:{span:24},sm:{span:8}},wrapperCol:{xs:{span:24},sm:{span:16}}},ae={wrapperCol:{xs:{span:24,offset:0},sm:{span:16,offset:8}}};var ne=function(e){var t=Object(x.b)();return r.a.createElement(L.a,{initialValues:{email:"",name:"",address:"",password:"",confirmPassword:""},validationSchema:V.object().shape({name:V.string().required("\uc774\ub984\uc744 \uc785\ub825\ud574\uc8fc\uc138\uc694."),email:V.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:V.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:V.string().oneOf([V.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:V.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(G()().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,c=(e.dirty,e.isSubmitting),l=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(J.a,Object.assign({style:{minWidth:"375px"}},te,{onSubmit:o}),r.a.createElement(J.a.Item,{required:!0,label:"\uc774\ub984"},r.a.createElement(z.a,{id:"name",placeholder:"\uc774\ub984\uc744 \uc785\ub825\ud558\uc138\uc694",type:"text",value:t.name,onChange:l,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(J.a.Item,{required:!0,label:"\uc774\uba54\uc77c"},r.a.createElement(z.a,{id:"email",placeholder:"\uc774\uba54\uc77c\uc744 \uc785\ub825\ud574\uc8fc\uc138\uc694.",type:"email",value:t.email,onChange:l,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(J.a.Item,{required:!0,label:"\ube44\ubc00\ubc88\ud638"},r.a.createElement(z.a,{id:"password",placeholder:"\ube44\ubc00\ubc88\ud638\ub97c \uc785\ub825\ud574\uc8fc\uc138\uc694.",type:"password",value:t.password,onChange:l,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(J.a.Item,{required:!0,label:"\ube44\ubc00\ubc88\ud638 \ud655\uc778"},r.a.createElement(z.a,{id:"confirmPassword",placeholder:"\ube44\ubc00\ubc88\ud638\ub97c \ud55c\ubc88 \ub354 \uc785\ub825\ud574\uc8fc\uc138\uc694.",type:"password",value:t.confirmPassword,onChange:l,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(J.a.Item,{required:!0,label:"\uc8fc\uc18c"},r.a.createElement(ee,{id:"adress",placeholder:"\uc8fc\uc18c\ub97c \uc785\ub825\ud558\uc138\uc694",type:"text",value:t.adress,onChange:l,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(J.a.Item,ae,r.a.createElement(H.a,{onClick:o,type:"primary",disabled:c},"\uac00\uc785"))))})},re=a(574);var ce=Object(i.f)(function(e){var t=Object(x.c)(function(e){return e.user});return t.userData&&!t.userData.isAuth?r.a.createElement(re.a,{style:{paddingTop:"10px"},mode:e.mode},r.a.createElement(re.a.Item,{key:"mail"},r.a.createElement("a",{href:"/login"},r.a.createElement("h6",null,"\ub85c\uadf8\uc778"))),r.a.createElement(re.a.Item,{key:"app"},r.a.createElement("a",{href:"/register"},r.a.createElement("h6",null,"\ud68c\uc6d0\uac00\uc785")))):r.a.createElement(re.a,{mode:e.mode,style:{paddingTop:"5px"}},r.a.createElement(re.a.Item,{key:"history"},r.a.createElement("a",{href:"/history"},r.a.createElement("h6",null,"\uad6c\ub9e4\ub0b4\uc5ed"))),r.a.createElement(re.a.Item,{key:"upload"},r.a.createElement("a",{href:"/product/upload"},r.a.createElement("h6",null,"\ub4f1\ub85d\ud558\uae30"))),r.a.createElement(re.a.Item,{key:"cart",style:{paddingBottom:-4}},r.a.createElement("a",{href:"/user/cart",style:{marginRight:-22,paddingbottom:"30px",color:"#667777"}},r.a.createElement(K.a,{type:"shopping-cart",style:{fontSize:30,marginBottom:3}}))),r.a.createElement(re.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),ie=(a(548),a(568)),oe=a(570);var se=function(){var e=Object(n.useState)(!1),t=Object(k.a)(e,2),a=t[0],c=t[1];return r.a.createElement(ie.a,{bg:"white",variant:"light",style:{position:"fixed",zIndex:5,width:"100%",border:"1px solid lightgray"}},r.a.createElement(M.a,null,r.a.createElement(ie.a.Brand,{href:"/"},r.a.createElement("img",{src:"/logo.png",style:{width:"120px",marginLeft:"50px"}})),r.a.createElement(oe.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(ce,{mode:"horizontal"})),r.a.createElement(H.a,{className:"menu__mobile-button",type:"primary",onClick:function(){c(!0)}},r.a.createElement(K.a,{type:"align-right"})),r.a.createElement(le.a,{title:"Basic Drawer",placement:"right",className:"menu_drawer",closable:!1,onClose:function(){c(!1)},visible:a},r.a.createElement(ce,{mode:"inline"}))))))};var ue=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"))},me=a(279);a(551);function de(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 pe(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?de(a,!0).forEach(function(t){Object(S.a)(e,t,a[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):de(a).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))})}return e}var fe=function(e){var t=Object(n.useState)([]),a=Object(k.a)(t,2),c=a[0],l=a[1];return r.a.createElement("div",{style:{display:"flex",justifyContent:"space-between"}},r.a.createElement(me.a,{onDrop:function(t){var a=new FormData;a.append("file",t[0]),d.a.post("".concat(j,"/uploadImage"),a,{header:{"content-type":"multipart/form-data"}}).then(function(t){t.data.success?(l([].concat(Object(_.a)(c),[t.data.image])),e.refreshFunction([].concat(Object(_.a)(c),[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",pe({},t())),console.log("getInputProps",pe({},a())),r.a.createElement("input",a()),r.a.createElement(K.a,{type:"plus",style:{fontSize:"3rem"}}))}),r.a.createElement("div",{style:{display:"flex",width:"350px",height:"240px",overflowX:"scroll"}},c.map(function(t,a){return r.a.createElement("div",{onClick:function(){return function(t){var a=c.indexOf(t),n=Object(_.a)(c);n.splice(a,1),l(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!"))})))},ye=z.a.TextArea,he=[{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 Ee=function(e){var t=Object(n.useState)(""),a=Object(k.a)(t,2),c=a[0],l=a[1],i=Object(n.useState)(""),o=Object(k.a)(i,2),s=o[0],u=o[1],m=Object(n.useState)(0),p=Object(k.a)(m,2),f=p[0],y=p[1],h=Object(n.useState)(1),E=Object(k.a)(h,2),g=E[0],b=E[1],v=Object(n.useState)([]),O=Object(k.a)(v,2),x=O[0],w=O[1],S=function(t){if(t.preventDefault(),!c||!s||!f||!g||!x)return alert("fill all the fields first!");var a={writer:e.user.userData._id,title:c,description:s,price:f,images:x,medicines:g};d.a.post("".concat(j,"/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(J.a,{onSubmit:S},r.a.createElement(fe,{refreshFunction:function(e){w(e)}}),r.a.createElement("br",null),r.a.createElement("br",null),r.a.createElement("label",null,"\uc57d \uc774\ub984"),r.a.createElement(z.a,{onChange:function(e){l(e.currentTarget.value)},value:c}),r.a.createElement("br",null),r.a.createElement("br",null),r.a.createElement("label",null,"\uc124\uba85"),r.a.createElement(ye,{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(z.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},he.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(H.a,{onClick:S},"\ub4f1\ub85d")))},ge=a(272),be=a.n(ge);var ve=function(e){var t=Object(n.useState)([]),a=Object(k.a)(t,2),c=a[0],l=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)})}),l(t)}},[e.detail]),r.a.createElement("div",null,r.a.createElement(be.a,{showFullscreenButton:!1,showPlayButton:!1,items:c}))};var Oe=function(e){var t=Object(n.useState)({}),a=Object(k.a)(t,2),c=a[0],l=a[1];return Object(n.useEffect)(function(){l(e.detail)},[e.detail]),r.a.createElement(M.a,{style:{paddingTop:"100px"}},r.a.createElement(M.a,{style:{textAlign:"center"}},r.a.createElement("h3",null,"\uac00\uaca9 : ",c.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(H.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 je=function(e){var t=Object(x.b)(),a=e.match.params.productId,c=Object(n.useState)([]),l=Object(k.a)(c,2),i=l[0],o=l[1];return Object(n.useEffect)(function(){d.a.get("".concat(j,"/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(C.a,{gutter:[16,16]},r.a.createElement(P.a,{lg:12,xs:24},r.a.createElement(ve,{detail:i,style:{width:"300px"}})),r.a.createElement(P.a,{lg:12,xs:24},r.a.createElement(Oe,{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 xe=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")))}))))},we=a(578),Se=a(92),_e=a(273),ke=a(274),De=a(280),Pe=a(275),Ce=a(281),Ie=a(276),Ae=a.n(Ie),Te=function(e){function t(){return Object(_e.a)(this,t),Object(De.a)(this,Object(Pe.a)(t).apply(this,arguments))}return Object(Ce.a)(t,e),Object(ke.a)(t,[{key:"render",value:function(){var e=this,t=this.props.toPay;return r.a.createElement(Ae.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 Ne=function(e){var t=Object(x.b)(),a=Object(n.useState)(0),c=Object(k.a)(a,2),l=c[0],i=c[1],o=Object(n.useState)(!1),s=Object(k.a)(o,2),u=s[0],m=s[1],p=Object(n.useState)(!1),f=Object(k.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("".concat(j,"/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(xe,{products:e.user.cartDetail,removeItem:function(e){t(function(e){var t=d.a.get("".concat(O,"/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: $",l," ")):y?r.a.createElement(we.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(Se.a,{description:!1}),r.a.createElement("p",null,"\uc7a5\ubc14\uad6c\ub2c8\uac00 \ube44\uc5c8\uc2b5\ub2c8\ub2e4."))),u&&r.a.createElement(M.a,{style:{width:"max-content",marginTop:"100px"}},r.a.createElement(Te,{sty:!0,toPay:l,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 qe=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 Be=function(e){};var Fe=function(){return r.a.createElement(n.Suspense,{fallback:r.a.createElement("div",null,"Loading...")},r.a.createElement(se,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:w(W,null)}),r.a.createElement(i.a,{exact:!0,path:"/login",component:w(Y,!1)}),r.a.createElement(i.a,{exact:!0,path:"/register",component:w(ne,!1)}),r.a.createElement(i.a,{exact:!0,path:"/product/upload",component:w(Ee,!0)}),r.a.createElement(i.a,{exact:!0,path:"/product/:productId",component:w(je,null)}),r.a.createElement(i.a,{exact:!0,path:"/user/cart",component:w(Ne,!0)}),r.a.createElement(i.a,{exact:!0,path:"/history",component:w(qe,!0)}),r.a.createElement(i.a,{exact:!0,path:"/admin",component:w(Be,!0)}))),r.a.createElement(ue,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 Re=a(101),ze=a(76);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 Xe(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(S.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 Ue=Object(ze.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 Xe({},e,{register:t.payload});case p:return Xe({},e,{loginSucces:t.payload});case y:return Xe({},e,{userData:t.payload});case h:return Xe({},e);case E:return Xe({},e,{userData:Xe({},e.userData,{cart:t.payload})});case g:return Xe({},e,{cartDetail:t.payload});case b:return Xe({},e,{cartDetail:t.payload.cartDetail,userData:Xe({},e.userData,{cart:t.payload.cart})});case v:return Xe({},e,{userData:Xe({},e.userData,{cart:t.payload.cart}),cartDetail:t.payload.cartDetail});default:return e}}}),We=a(277),Le=a.n(We),Ve=a(278),$e=Object(ze.a)(Le.a,Ve.a)(ze.d);l.a.render(r.a.createElement(x.a,{store:$e(Ue,window.__REDUX_DEVTOOLS_EXTENSION__&&window.__REDUX_DEVTOOLS_EXTENSION__())},r.a.createElement(Re.a,null,r.a.createElement(Fe,null))),document.getElementById("root")),"serviceWorker"in navigator&&navigator.serviceWorker.ready.then(function(e){e.unregister()})}},[[284,1,2]]]);
//# sourceMappingURL=main.53397765.chunk.js.map
\ No newline at end of file
{"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","PRODUCT_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.53397765.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 = 'https://3.209.242.35/api/users';\r\nexport const PRODUCT_SERVER = 'https://3.209.242.35/api/product';\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\nimport { PRODUCT_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(`${PRODUCT_SERVER}/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(`${USER_SERVER}/removeFromCart?_id=${id}`)\r\n .then(response => {\r\n\r\n response.data.cart.forEach(item => {\r\n response.data.cartDetail.forEach((k, i) => {\r\n if (item.id === k._id) {\r\n response.data.cartDetail[i].quantity = item.quantity\r\n }\r\n })\r\n })\r\n return response.data;\r\n });\r\n\r\n return {\r\n type: REMOVE_CART_ITEM_USER,\r\n payload: request\r\n }\r\n}\r\n\r\n\r\nexport function onSuccessBuy(data) {\r\n\r\n const request = axios.post(`${USER_SERVER}/successBuy`, data)\r\n .then(response => response.data);\r\n\r\n return {\r\n type: ON_SUCCESS_BUY_USER,\r\n payload: request\r\n }\r\n}\r\n\r\n\r\n\r\n\r\n\r\n","import React from \"react\";\r\nimport { Carousel } from \"antd\";\r\n\r\nfunction ImageSlider(props) {\r\n return (\r\n <div>\r\n <Carousel autoplay>\r\n {props.images.map((image, index) => (\r\n <div key={index}>\r\n <img style={{ width: \"100%\", maxWidth: \"300px\", height: \"300px\" }} src={`http://localhost:5000/${image}`} alt=\"productImage\" />\r\n </div>\r\n ))}\r\n </Carousel>\r\n </div>\r\n );\r\n}\r\n\r\nexport default ImageSlider;\r\n","import React, { useState } from 'react'\r\nimport { Checkbox, Collapse } from 'antd';\r\n\r\nconst { Panel } = Collapse\r\n\r\n\r\nfunction CheckBox(props) {\r\n\r\n const [Checked, setChecked] = useState([])\r\n\r\n const handleToggle = (value) => {\r\n\r\n const currentIndex = Checked.indexOf(value);\r\n const newChecked = [...Checked];\r\n\r\n if (currentIndex === -1) {\r\n newChecked.push(value)\r\n } else {\r\n newChecked.splice(currentIndex, 1)\r\n }\r\n\r\n setChecked(newChecked)\r\n props.handleFilters(newChecked)\r\n\r\n }\r\n\r\n const renderCheckboxLists = () => props.list && props.list.map((value, index) => (\r\n <React.Fragment key={index}>\r\n <Checkbox\r\n onChange={() => handleToggle(value._id)}\r\n type=\"checkbox\"\r\n checked={Checked.indexOf(value._id) === -1 ? false : true}\r\n />&nbsp;&nbsp;\r\n <span>{value.name}</span>\r\n </React.Fragment>\r\n ))\r\n\r\n return (\r\n <div>\r\n <Collapse defaultActiveKey={['0']} >\r\n <Panel header=\"약 종류\" key=\"1\">\r\n {renderCheckboxLists()}\r\n </Panel>\r\n </Collapse>\r\n </div>\r\n )\r\n}\r\n\r\nexport default CheckBox","\r\n\r\nconst medicines = [\r\n { _id: 0, name: \"전체\" },\r\n {\r\n _id: 1,\r\n name: \"진통제\",\r\n },\r\n {\r\n _id: 2,\r\n name: \"소화제\",\r\n },\r\n {\r\n _id: 3,\r\n name: \"감기약\",\r\n },\r\n {\r\n _id: 4,\r\n name: \"해열제\",\r\n },\r\n {\r\n _id: 5,\r\n name: \"파스류\",\r\n },\r\n {\r\n _id: 6,\r\n name: \"상처치료\",\r\n },\r\n {\r\n _id: 7,\r\n name: \"기타\",\r\n },\r\n];\r\n\r\n\r\n\r\n\r\nconst price = [\r\n {\r\n _id: 0,\r\n name: \"Any\",\r\n array: [],\r\n },\r\n {\r\n _id: 1,\r\n name: \"배달비 무료\",\r\n array: [0],\r\n },\r\n {\r\n _id: 2,\r\n name: \"배달비 500원 ~ 1000원\",\r\n array: [500, 1000],\r\n },\r\n {\r\n _id: 3,\r\n name: \"배달비 1000원 ~ 2000원\",\r\n array: [1001, 2000],\r\n },\r\n {\r\n _id: 4,\r\n name: \"배달비 200원 ~ 3000원\",\r\n array: [2001, 3000],\r\n },\r\n {\r\n _id: 5,\r\n name: \"3000원 이상\",\r\n array: [3000, 1500000],\r\n },\r\n];\r\n\r\nexport { price, medicines };\r\n","import React, { useState } from \"react\";\r\nimport { Input } from \"antd\";\r\n\r\nconst { Search } = Input;\r\n\r\nfunction SearchFeature(props) {\r\n const [SearchTerms, setSearchTerms] = useState(\"\");\r\n\r\n const onChangeSearch = event => {\r\n setSearchTerms(event.currentTarget.value);\r\n\r\n props.refreshFunction(event.currentTarget.value);\r\n };\r\n\r\n return (\r\n <div style={{ margin: \"auto\" }}>\r\n <Search value={SearchTerms} onChange={onChangeSearch} placeholder=\"상품명\" />\r\n </div>\r\n );\r\n}\r\n\r\nexport default SearchFeature;\r\n","import React, { useEffect, useState } from \"react\";\r\nimport Axios from \"axios\";\r\nimport { Icon, Col, Card, Row } from \"antd\";\r\nimport ImageSlider from \"../../utils/ImageSlider\";\r\nimport CheckBox from \"./Sections/CheckBox\";\r\nimport { medicines, price } from \"./Sections/Datas\";\r\nimport SearchFeature from \"./Sections/SearchFeature\";\r\nimport { Container } from \"react-bootstrap\";\r\n\r\nimport { PRODUCT_SERVER } from '../../Config.js'\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(`${PRODUCT_SERVER}/getProducts`, variables).then(response => {\r\n if (response.data.success) {\r\n if (variables.loadMore) {\r\n setProducts([...Products, ...response.data.products]);\r\n } else {\r\n setProducts(response.data.products);\r\n }\r\n setPostSize(response.data.postSize);\r\n } else {\r\n alert(\"실패하였습니다.\");\r\n }\r\n });\r\n };\r\n\r\n const onLoadMore = () => {\r\n let skip = Skip + Limit;\r\n\r\n const variables = {\r\n skip: skip,\r\n limit: Limit,\r\n loadMore: true,\r\n filters: Filters,\r\n searchTerm: SearchTerms,\r\n };\r\n getProducts(variables);\r\n setSkip(skip);\r\n };\r\n\r\n const renderCards = Products.map((product, index) => {\r\n return (\r\n <Col style={{ marginTop: \"30px\" }} lg={6} md={8} xs={24}>\r\n <Card\r\n style={{ margin: \"5px\" }}\r\n hoverable={true}\r\n cover={\r\n <a href={`/product/${product._id}`}>\r\n <ImageSlider images={product.images} />\r\n </a>\r\n }\r\n >\r\n <Meta title={product.title} description={`${product.price}000원`} />\r\n </Card>\r\n </Col>\r\n );\r\n });\r\n\r\n const showFilteredResults = filters => {\r\n const variables = {\r\n skip: 0,\r\n limit: Limit,\r\n filters: filters,\r\n };\r\n getProducts(variables);\r\n setSkip(0);\r\n };\r\n\r\n const handlePrice = value => {\r\n const data = price;\r\n let array = [];\r\n\r\n for (let key in data) {\r\n if (data[key]._id === parseInt(value, 10)) {\r\n array = data[key].array;\r\n }\r\n }\r\n console.log(\"array\", array);\r\n return array;\r\n };\r\n\r\n const handleFilters = (filters, category) => {\r\n const newFilters = { ...Filters };\r\n\r\n newFilters[category] = filters;\r\n\r\n if (category === \"price\") {\r\n let priceValues = handlePrice(filters);\r\n newFilters[category] = priceValues;\r\n }\r\n\r\n console.log(newFilters);\r\n\r\n showFilteredResults(newFilters);\r\n setFilters(newFilters);\r\n };\r\n\r\n const updateSearchTerms = newSearchTerm => {\r\n const variables = {\r\n skip: 0,\r\n limit: Limit,\r\n filters: Filters,\r\n searchTerm: newSearchTerm,\r\n };\r\n\r\n setSkip(0);\r\n setSearchTerms(newSearchTerm);\r\n\r\n getProducts(variables);\r\n };\r\n\r\n return (\r\n <div style={{ width: \"75%\", margin: \"3rem auto\" }}>\r\n <div style={{ textAlign: \"center\" }}>\r\n <img src={\"/whatmedicine.png\"} style={{ width: \"500px\" }} />\r\n {/* <h2>\r\n {\" \"}\r\n <Icon type=\"alert\" />\r\n &nbsp; 어떤 약이 필요하신가요?&nbsp;<Icon type=\"alert\" />{\" \"}\r\n </h2> */}\r\n </div>\r\n\r\n\r\n <Container style={{ width: \"50%\" }}>\r\n <CheckBox list={medicines} handleFilters={filters => handleFilters(filters, \"medicines\")} />\r\n </Container>\r\n\r\n {/* Search */}\r\n\r\n {Products.length === 0 ? (\r\n <div style={{ display: \"flex\", height: \"300px\", justifyContent: \"center\", alignItems: \"center\" }}>\r\n \r\n \r\n </div>\r\n ) : (\r\n <div>\r\n <Row gutter={[16, 16]}>{renderCards}</Row>\r\n </div>\r\n )}\r\n <br />\r\n <br />\r\n\r\n {PostSize >= Limit && (\r\n <div style={{ display: \"flex\", justifyContent: \"center\" }}>\r\n <button onClick={onLoadMore}>Load More</button>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n}\r\n\r\nexport default LandingPage;\r\n","import React, { useState } from \"react\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport { loginUser } from \"../../../_actions/user_actions\";\r\nimport { Formik } from \"formik\";\r\nimport * as Yup from \"yup\";\r\nimport { Form, Icon, Input, Button, Checkbox, Typography } from \"antd\";\r\nimport { useDispatch } from \"react-redux\";\r\n\r\nconst { Title } = Typography;\r\n\r\nfunction LoginPage(props) {\r\n const dispatch = useDispatch();\r\n const rememberMeChecked = localStorage.getItem(\"rememberMe\") ? true : false;\r\n\r\n const [formErrorMessage, setFormErrorMessage] = useState(\"\");\r\n const [rememberMe, setRememberMe] = useState(rememberMeChecked);\r\n\r\n const handleRememberMe = () => {\r\n setRememberMe(!rememberMe);\r\n };\r\n\r\n\r\n return (\r\n <Formik\r\n initialValues={{\r\n email: \"\",\r\n password: \"\",\r\n }}\r\n validationSchema={Yup.object().shape({\r\n email: Yup.string().email(\"이메일이 유효하지 않습니다.\").required(\"이메일을 입력해주세요.\"),\r\n password: Yup.string().min(5, \"비밀번호가 너무 짧습니다.\").required(\"비밀번호를 입력해주세요.\"),\r\n })}\r\n onSubmit={(values, { setSubmitting }) => {\r\n setTimeout(() => {\r\n let dataToSubmit = {\r\n email: values.email,\r\n password: values.password,\r\n };\r\n\r\n dispatch(loginUser(dataToSubmit))\r\n .then(response => {\r\n if (response.payload.loginSuccess) {\r\n window.localStorage.setItem(\"userId\", response.payload.userId);\r\n if (rememberMe === true) {\r\n window.localStorage.setItem(\"rememberMe\", values.id);\r\n } else {\r\n localStorage.removeItem(\"rememberMe\");\r\n }\r\n props.history.push(\"/\");\r\n } else {\r\n setFormErrorMessage(\"Check out your Account or Password again\");\r\n }\r\n })\r\n .catch(err => {\r\n setFormErrorMessage(\"Check out your Account or Password again\");\r\n setTimeout(() => {\r\n setFormErrorMessage(\"\");\r\n }, 3000);\r\n });\r\n setSubmitting(false);\r\n }, 500);\r\n }}\r\n >\r\n {props => {\r\n const { values, touched, errors, dirty, isSubmitting, handleChange, handleBlur, handleSubmit, handleReset } = props;\r\n return (\r\n <div className=\"app\">\r\n <Title level={2}>로그인</Title>\r\n <form onSubmit={handleSubmit} style={{ width: \"350px\" }}>\r\n <Form.Item required>\r\n <Input\r\n id=\"email\"\r\n prefix={<Icon type=\"user\" style={{ color: \"rgba(0,0,0,.25)\" }} />}\r\n placeholder=\"Enter your email\"\r\n type=\"email\"\r\n value={values.email}\r\n onChange={handleChange}\r\n onBlur={handleBlur}\r\n className={errors.email && touched.email ? \"text-input error\" : \"text-input\"}\r\n />\r\n {errors.email && touched.email && <div className=\"input-feedback\">{errors.email}</div>}\r\n </Form.Item>\r\n\r\n <Form.Item required>\r\n <Input\r\n id=\"password\"\r\n prefix={<Icon type=\"lock\" style={{ color: \"rgba(0,0,0,.25)\" }} />}\r\n placeholder=\"Enter your password\"\r\n type=\"password\"\r\n value={values.password}\r\n onChange={handleChange}\r\n onBlur={handleBlur}\r\n className={errors.password && touched.password ? \"text-input error\" : \"text-input\"}\r\n />\r\n {errors.password && touched.password && <div className=\"input-feedback\">{errors.password}</div>}\r\n </Form.Item>\r\n\r\n {formErrorMessage && (\r\n <label>\r\n <p style={{ color: \"#ff0000bf\", fontSize: \"0.7rem\", border: \"1px solid\", padding: \"1rem\", borderRadius: \"10px\" }}>{formErrorMessage}</p>\r\n </label>\r\n )}\r\n\r\n <Form.Item>\r\n <div>\r\n <Button type=\"primary\" htmlType=\"submit\" className=\"login-form-button\" style={{ minWidth: \"100%\" }} disabled={isSubmitting} onSubmit={handleSubmit}>\r\n 로그인\r\n </Button>\r\n </div>\r\n </Form.Item>\r\n </form>\r\n </div>\r\n );\r\n }}\r\n </Formik>\r\n );\r\n}\r\n\r\nexport default withRouter(LoginPage);\r\n","import React from \"react\";\r\nimport moment from \"moment\";\r\nimport { Formik } from \"formik\";\r\nimport * as Yup from \"yup\";\r\nimport { registerUser } from \"../../../_actions/user_actions\";\r\nimport { useDispatch } from \"react-redux\";\r\n\r\nimport { Form, Input, Button } from \"antd\";\r\nconst { TextArea } = Input;\r\nconst formItemLayout = {\r\n labelCol: {\r\n xs: { span: 24 },\r\n sm: { span: 8 },\r\n },\r\n wrapperCol: {\r\n xs: { span: 24 },\r\n sm: { span: 16 },\r\n },\r\n};\r\nconst tailFormItemLayout = {\r\n wrapperCol: {\r\n xs: {\r\n span: 24,\r\n offset: 0,\r\n },\r\n sm: {\r\n span: 16,\r\n offset: 8,\r\n },\r\n },\r\n};\r\n\r\nfunction RegisterPage(props) {\r\n const dispatch = useDispatch();\r\n return (\r\n <Formik\r\n initialValues={{\r\n email: \"\",\r\n name: \"\",\r\n address: \"\",\r\n password: \"\",\r\n confirmPassword: \"\",\r\n }}\r\n validationSchema={Yup.object().shape({\r\n name: Yup.string().required(\"이름을 입력해주세요.\"),\r\n email: Yup.string().email(\"이메일 형식이 올바르지 않습니다.\").required(\"이메일을 입력해주세요.\"),\r\n password: Yup.string().min(5, \"비밀번호는 5자리 이상이어야 합니다.\").required(\"비밀번호를 입력해주세요.\"),\r\n confirmPassword: Yup.string()\r\n .oneOf([Yup.ref(\"password\"), null], \"비밀번호가 일치하지 않습니다.\")\r\n .required(\"비밀번호를 한번 더 입력해주세요.\"),\r\n adress: Yup.string().required(\"주소를 입력해주세요.\"),\r\n })}\r\n onSubmit={(values, { setSubmitting }) => {\r\n setTimeout(() => {\r\n let dataToSubmit = {\r\n email: values.email,\r\n password: values.password,\r\n name: values.name,\r\n adress: values.adress,\r\n image: `http://gravatar.com/avatar/${moment().unix()}?d=identicon`,\r\n };\r\n\r\n dispatch(registerUser(dataToSubmit)).then(response => {\r\n if (response.payload.success) {\r\n props.history.push(\"/login\");\r\n } else {\r\n alert(response.payload.err.errmsg);\r\n }\r\n });\r\n\r\n setSubmitting(false);\r\n }, 500);\r\n }}\r\n >\r\n {props => {\r\n const { values, touched, errors, dirty, isSubmitting, handleChange, handleBlur, handleSubmit, handleReset } = props;\r\n return (\r\n <div className=\"app\">\r\n <h3>회원가입</h3>\r\n <Form style={{ minWidth: \"375px\" }} {...formItemLayout} onSubmit={handleSubmit}>\r\n <Form.Item required label=\"이름\">\r\n <Input\r\n id=\"name\"\r\n placeholder=\"이름을 입력하세요\"\r\n type=\"text\"\r\n value={values.name}\r\n onChange={handleChange}\r\n onBlur={handleBlur}\r\n className={errors.name && touched.name ? \"text-input error\" : \"text-input\"}\r\n />\r\n {errors.name && touched.name && <div className=\"input-feedback\">{errors.name}</div>}\r\n </Form.Item>\r\n\r\n \r\n\r\n <Form.Item required label=\"이메일\">\r\n <Input\r\n id=\"email\"\r\n placeholder=\"이메일을 입력해주세요.\"\r\n type=\"email\"\r\n value={values.email}\r\n onChange={handleChange}\r\n onBlur={handleBlur}\r\n className={errors.email && touched.email ? \"text-input error\" : \"text-input\"}\r\n />\r\n {errors.email && touched.email && <div className=\"input-feedback\">{errors.email}</div>}\r\n </Form.Item>\r\n\r\n <Form.Item required label=\"비밀번호\">\r\n <Input\r\n id=\"password\"\r\n placeholder=\"비밀번호를 입력해주세요.\"\r\n type=\"password\"\r\n value={values.password}\r\n onChange={handleChange}\r\n onBlur={handleBlur}\r\n className={errors.password && touched.password ? \"text-input error\" : \"text-input\"}\r\n />\r\n {errors.password && touched.password && <div className=\"input-feedback\">{errors.password}</div>}\r\n </Form.Item>\r\n\r\n <Form.Item required label=\"비밀번호 확인\">\r\n <Input\r\n id=\"confirmPassword\"\r\n placeholder=\"비밀번호를 한번 더 입력해주세요.\"\r\n type=\"password\"\r\n value={values.confirmPassword}\r\n onChange={handleChange}\r\n onBlur={handleBlur}\r\n className={errors.confirmPassword && touched.confirmPassword ? \"text-input error\" : \"text-input\"}\r\n />\r\n {errors.confirmPassword && touched.confirmPassword && <div className=\"input-feedback\">{errors.confirmPassword}</div>}\r\n </Form.Item>\r\n\r\n <Form.Item required label=\"주소\">\r\n <TextArea\r\n id=\"adress\"\r\n placeholder=\"주소를 입력하세요\"\r\n type=\"text\"\r\n value={values.adress}\r\n onChange={handleChange}\r\n onBlur={handleBlur}\r\n className={errors.adress && touched.adress ? \"text-input error\" : \"text-input\"}\r\n />\r\n {errors.adress && touched.adress && <div className=\"input-feedback\">{errors.adress}</div>}\r\n </Form.Item>\r\n\r\n <Form.Item {...tailFormItemLayout}>\r\n <Button onClick={handleSubmit} type=\"primary\" disabled={isSubmitting}>\r\n 가입\r\n </Button>\r\n </Form.Item>\r\n </Form>\r\n </div>\r\n );\r\n }}\r\n </Formik>\r\n );\r\n}\r\n\r\nexport default RegisterPage;\r\n","/* eslint-disable jsx-a11y/anchor-is-valid */\r\nimport React from \"react\";\r\nimport { Menu, Icon, Badge } from \"antd\";\r\nimport axios from \"axios\";\r\nimport { USER_SERVER } from \"../../../Config\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport { useSelector } from \"react-redux\";\r\n\r\nfunction RightMenu(props) {\r\n const user = useSelector(state => state.user);\r\n\r\n const logoutHandler = () => {\r\n axios.get(`${USER_SERVER}/logout`).then(response => {\r\n if (response.status === 200) {\r\n props.history.push(\"/login\");\r\n } else {\r\n alert(\"로그아웃에 실패했습니다.\");\r\n }\r\n });\r\n };\r\n\r\n\r\n if (user.userData && !user.userData.isAuth) {\r\n\r\n return (\r\n <Menu style={{ paddingTop: \"10px\" }} mode={props.mode}>\r\n <Menu.Item key=\"mail\">\r\n <a href=\"/login\"><h6>로그인</h6></a>\r\n </Menu.Item>\r\n <Menu.Item key=\"app\">\r\n <a href=\"/register\"><h6>회원가입</h6></a>\r\n </Menu.Item>\r\n </Menu>\r\n );\r\n } else {\r\n return (\r\n <Menu mode={props.mode} style={{ paddingTop: \"5px\" }}>\r\n <Menu.Item key=\"history\">\r\n <a href=\"/history\">\r\n <h6>구매내역</h6>\r\n </a>\r\n </Menu.Item>\r\n\r\n <Menu.Item key=\"upload\">\r\n <a href=\"/product/upload\">\r\n <h6>등록하기</h6>\r\n </a>\r\n </Menu.Item>\r\n\r\n <Menu.Item key=\"cart\" style={{ paddingBottom: -4 }}>\r\n \r\n <a href=\"/user/cart\" style={{ marginRight: -22, paddingbottom: \"30px\", color: \"#667777\" }}>\r\n <Icon type=\"shopping-cart\" style={{ fontSize: 30, marginBottom: 3 }} />\r\n </a>\r\n \r\n </Menu.Item>\r\n\r\n <Menu.Item key=\"logout\">\r\n <a onClick={logoutHandler}><h6>로그아웃</h6></a>\r\n </Menu.Item>\r\n </Menu>\r\n );\r\n }\r\n}\r\n\r\nexport default withRouter(RightMenu);\r\n","import React, { useState } from \"react\";\r\nimport RightMenu from \"./Sections/RightMenu\";\r\nimport { Drawer, Button, Icon } from \"antd\";\r\nimport \"./Sections/Navbar.css\";\r\nimport { Container, Navbar, Nav } from \"react-bootstrap\";\r\n\r\nfunction NavBar() {\r\n const [visible, setVisible] = useState(false);\r\n\r\n const showDrawer = () => {\r\n setVisible(true);\r\n };\r\n\r\n const onClose = () => {\r\n setVisible(false);\r\n };\r\n\r\n return (\r\n <Navbar bg=\"white\" variant=\"light\" style={{ position: \"fixed\", zIndex: 5, width: \"100%\", border: \"1px solid lightgray\" }}>\r\n <Container>\r\n <Navbar.Brand href=\"/\">\r\n <img src={\"/logo.png\"} style={{ width: \"120px\", marginLeft:\"50px\"}} />\r\n </Navbar.Brand>\r\n <Nav className=\"mx-3\" style={{ position: \"relative\", right: \"0\" }}>\r\n <div className=\"menu__container\">\r\n <div className=\"menu_left\"></div>\r\n <div className=\"menu_rigth\">\r\n <RightMenu mode=\"horizontal\" />\r\n </div>\r\n <Button className=\"menu__mobile-button\" type=\"primary\" onClick={showDrawer}>\r\n <Icon type=\"align-right\" />\r\n </Button>\r\n <Drawer title=\"Basic Drawer\" placement=\"right\" className=\"menu_drawer\" closable={false} onClose={onClose} visible={visible}>\r\n \r\n <RightMenu mode=\"inline\" />\r\n </Drawer>\r\n </div>\r\n </Nav>\r\n </Container>\r\n </Navbar>\r\n );\r\n}\r\n\r\nexport default NavBar;\r\n","import React from \"react\";\r\nimport { Icon } from \"antd\";\r\n\r\nfunction Footer() {\r\n return (\r\n <div\r\n style={{\r\n height: \"80px\",\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n fontSize: \"1rem\",\r\n }}\r\n >\r\n <p> Copyright © 2021 Minjeong Park All rights reserved</p>\r\n </div>\r\n );\r\n}\r\n\r\nexport default Footer;\r\n","import React, { useState } from \"react\";\r\nimport Dropzone from \"react-dropzone\";\r\nimport { Icon } from \"antd\";\r\nimport Axios from \"axios\";\r\nimport \"./FileUpload.css\";\r\nimport { PRODUCT_SERVER } from '../Config'\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(`${PRODUCT_SERVER}/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\nimport { PRODUCT_SERVER } from '../../Config'\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(`${PRODUCT_SERVER}/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\nimport { PRODUCT_SERVER } from '../../Config'\r\n\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(`${PRODUCT_SERVER}/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
......@@ -10,6 +10,7 @@ import {
ON_SUCCESS_BUY_USER
} from './types';
import { USER_SERVER } from '../components/Config.js';
import { PRODUCT_SERVER } from '../components/Config.js';
export function registerUser(dataToSubmit) {
const request = axios.post(`${USER_SERVER}/register`, dataToSubmit)
......@@ -65,7 +66,7 @@ export function addToCart(_id) {
export function getCartItems(cartItems, userCart) {
const request = axios.get(`/api/product/products_by_id?id=${cartItems}&type=array`)
const request = axios.get(`${PRODUCT_SERVER}/products_by_id?id=${cartItems}&type=array`)
.then(response => {
......@@ -93,7 +94,7 @@ export function getCartItems(cartItems, userCart) {
export function removeCartItem(id) {
const request = axios.get(`/api/users/removeFromCart?_id=${id}`)
const request = axios.get(`${USER_SERVER}/removeFromCart?_id=${id}`)
.then(response => {
response.data.cart.forEach(item => {
......
//SERVER ROUTES
export const USER_SERVER = '3.209.242.35/api/users';
export const USER_SERVER = 'http://3.209.242.35/api/users';
export const PRODUCT_SERVER = 'http://3.209.242.35/api/product';
......
......@@ -3,7 +3,7 @@ import Dropzone from "react-dropzone";
import { Icon } from "antd";
import Axios from "axios";
import "./FileUpload.css";
import { PRODUCT_SERVER } from '../Config'
function FileUpload(props) {
const [Images, setImages] = useState([]);
......@@ -13,12 +13,12 @@ function FileUpload(props) {
header: { "content-type": "multipart/form-data" },
};
formData.append("file", files[0]);
Axios.post("/api/product/uploadImage", formData, config).then(response => {
Axios.post(`${PRODUCT_SERVER}/uploadImage`, formData, config).then(response => {
if (response.data.success) {
setImages([...Images, response.data.image]);
props.refreshFunction([...Images, response.data.image]);
} else {
alert("Failed to save the Image in Server");
alert("이미지 서버 업로드에 실패했습니다.");
}
});
};
......
......@@ -3,7 +3,7 @@ import Dropzone from 'react-dropzone'
import axios from 'axios';
import { useState } from 'react';
import './ImageUpload.css'
import { PRODUCT_SERVER } from '../Config'
function ImageUpload(props) {
const [Images, setImages] = useState([]) // 이미지를 여러장 들어가게 하기 위해서
......@@ -18,7 +18,7 @@ function ImageUpload(props) {
imageData.append("file", files[0])
// 이미지 전달
axios.post('/api/product/image', imageData, config)
axios.post(`${PRODUCT_SERVER}/image`, imageData, config)
.then(response => {
if (response.data.success) {
//console.log(response.data)
......
......@@ -5,13 +5,15 @@ import ProductImage from './Sections/ProductImage';
import ProductInfo from './Sections/ProductInfo';
import { addToCart } from '../../../_actions/user_actions';
import { useDispatch } from 'react-redux';
import { PRODUCT_SERVER } from '../../Config'
function DetailProductPage(props) {
const dispatch = useDispatch();
const productId = props.match.params.productId
const [Product, setProduct] = useState([])
useEffect(() => {
Axios.get(`/api/product/products_by_id?id=${productId}&type=single`)
Axios.get(`${PRODUCT_SERVER}/products_by_id?id=${productId}&type=single`)
.then(response => {
setProduct(response.data[0])
})
......
......@@ -4,13 +4,14 @@ import {useEffect, useState} from 'react'
import ProductImage from './Sections/ProductImage'
import ProductInfo from './Sections/ProductInfo'
import { Row, Col } from 'antd';
import { PRODUCT_SERVER } from '../../Config'
function DetailProductPages(props) {
const [Product, setProduct] = useState({})
const productId = props.match.params.prouductID
//console.log(props.match.params.prouductID) //->정상적으로 출력
useEffect(() => {
axios.get(`/api/product/products_by_id?id=${productId}&type=single`)
axios.get(`${PRODUCT_SERVER}/products_by_id?id=${productId}&type=single`)
.then(response => {
if (response.data.success) {
console.log(response.data)
......
......@@ -7,6 +7,8 @@ import { medicines, price } from "./Sections/Datas";
import SearchFeature from "./Sections/SearchFeature";
import { Container } from "react-bootstrap";
import { PRODUCT_SERVER } from '../../Config.js'
const { Meta } = Card;
function LandingPage() {
......@@ -31,7 +33,7 @@ function LandingPage() {
}, []);
const getProducts = variables => {
Axios.post("/api/product/getProducts", variables).then(response => {
Axios.post(`${PRODUCT_SERVER}/getProducts`, variables).then(response => {
if (response.data.success) {
if (variables.loadMore) {
setProducts([...Products, ...response.data.products]);
......
......@@ -3,7 +3,7 @@ import { useState } from 'react';
import { Typography, Button, Form, Input } from 'antd'; // css
import ImageUpload from '../../utils/ImageUpload'
import Axios from 'axios';
import { PRODUCT_SERVER } from '../../Config'
const { TextArea } = Input; // 박스크기 조절을 사용자가 임의로 가능하게 함.
// Select symtoms
......@@ -69,7 +69,7 @@ function UploadPage(props) {
symtoms: Option
}
Axios.post("/api/product", body)
Axios.post(`${PRODUCT_SERVER}`, body)
.then(response => {
if (response.data.success) {
alert("업로드가 완료되었습니다.");
......
......@@ -2,16 +2,16 @@ import React, { useState } from "react";
import {Button, Form, message, Input, Icon } from "antd";
import FileUpload from "../../utils/FileUpload";
import Axios from "axios";
import { PRODUCT_SERVER } from '../../Config'
const { TextArea } = Input;
const Medicines = [
{ key: 1, value: "진통제" },
{ key: 2, value: "소화제" },
{ key: 1, value: "진통제" },
{ key: 2, value: "소화제" },
{ key: 3, value: "감기약" },
{ key: 4, value: "해열제" },
{ key: 5, value: "파스류" },
{ key: 6, value: "상처치료" },
{ key: 6, value: "상처치료" },
{ key: 7, value: "기타" }
];
......@@ -46,7 +46,7 @@ function UploadProductPage(props) {
event.preventDefault();
if (!TitleValue || !DescriptionValue || !PriceValue || !MedicinesValue || !Images) {
return alert("fill all the fields first!");
return alert("모두 입력해주세요.");
}
const variables = {
......@@ -58,12 +58,12 @@ function UploadProductPage(props) {
medicines: MedicinesValue,
};
Axios.post("/api/product/uploadProduct", variables).then(response => {
Axios.post(`${PRODUCT_SERVER}/uploadProduct`, variables).then(response => {
if (response.data.success) {
alert("Product Successfully Uploaded");
alert("성공적으로 업로드 되었습니다.");
props.history.push("/");
} else {
alert("Failed to upload Product");
alert("실패했습니다.");
}
});
};
......
......@@ -2,17 +2,18 @@ import React, { Component } from 'react'
import { Typography, Button, Form, Input } from 'antd';
import axios from 'axios';
import FileUpload from '../../utils/FileUpload';
import { PRODUCT_SERVER } from '../../components/Config.js';
const { Title } = Typography;
const { TextArea } = Input;
const Medicines = [
{ key: 1, value: "진통제" },
{ key: 2, value: "소화제" },
{ key: 1, value: "진통제" },
{ key: 2, value: "소화제" },
{ key: 3, value: "감기약" },
{ key: 4, value: "해열제" },
{ key: 5, value: "파스류" },
{ key: 6, value: "상처치료" },
{ key: 6, value: "상처치료" },
{ key: 7, value: "기타" }
]
......@@ -65,7 +66,7 @@ export class UploadProductPage extends Component {
price: this.state.price
}
axios.post('/api/product/uploadProduct', variables)
axios.post(`${PRODUCT_SERVER}/uploadProduct`, variables)
.then(response => {
if (response.data.success) {
alert('성공적으로 업로드 했습니다.')
......
......@@ -10,7 +10,10 @@
"scripts": {
"start": "node server/index.js",
"build" : "cd client && npm install && npm run build",
"heroku-postbuild": "npm run build"
"heroku-postbuild": "npm run build",
"backend": "nodemon server/index.js",
"frontend": "npm run front --prefix client",
"dev": "concurrently \"npm run backend\" \"npm run start --prefix client\""
},
"author": "mindyeoi",
"license": "ISC",
......