From 6b7e3937c4b9f9591582d1496e9317d71040a79c Mon Sep 17 00:00:00 2001 From: djebby Date: Thu, 31 Mar 2022 16:58:45 +0200 Subject: [PATCH] first deploy & start documentation --- .gitignore | 2 ++ README.md | 9 ++++++ backend/public/asset-manifest.json | 30 +++++++++---------- backend/public/index.html | 2 +- .../public/static/js/263.39e66117.chunk.js | 2 -- .../public/static/js/263.c88dc7e4.chunk.js | 2 ++ ...chunk.js.map => 263.c88dc7e4.chunk.js.map} | 2 +- .../public/static/js/439.7007b990.chunk.js | 2 ++ .../static/js/439.7007b990.chunk.js.map | 2 +- .../public/static/js/439.72cd9cbe.chunk.js | 2 -- .../public/static/js/525.471f5615.chunk.js | 2 ++ ...chunk.js.map => 525.471f5615.chunk.js.map} | 2 +- .../public/static/js/525.9483bb08.chunk.js | 2 -- .../public/static/js/776.70ba6886.chunk.js | 2 ++ .../static/js/776.70ba6886.chunk.js.map | 2 +- .../public/static/js/776.b2d59891.chunk.js | 2 -- .../public/static/js/896.97e81efd.chunk.js | 2 -- .../public/static/js/896.e7df689b.chunk.js | 2 ++ .../static/js/896.e7df689b.chunk.js.map | 2 +- .../public/static/js/916.35d7632f.chunk.js | 2 ++ ...chunk.js.map => 916.35d7632f.chunk.js.map} | 2 +- .../public/static/js/916.5b86581e.chunk.js | 2 -- .../js/{main.1cd1f7c0.js => main.87db3903.js} | 6 ++-- ...CENSE.txt => main.87db3903.js.LICENSE.txt} | 0 ...n.1cd1f7c0.js.map => main.87db3903.js.map} | 2 +- backend/server.js | 6 +++- frontend/build/asset-manifest.json | 30 +++++++++---------- frontend/build/index.html | 2 +- .../build/static/js/263.39e66117.chunk.js | 2 -- .../build/static/js/263.61d57d57.chunk.js | 2 ++ ...chunk.js.map => 263.61d57d57.chunk.js.map} | 2 +- .../build/static/js/439.72cd9cbe.chunk.js | 2 -- .../build/static/js/439.89a74853.chunk.js | 2 ++ .../build/static/js/439.89a74853.chunk.js.map | 2 +- .../build/static/js/525.5ec61d35.chunk.js | 2 ++ ...chunk.js.map => 525.5ec61d35.chunk.js.map} | 2 +- .../build/static/js/525.9483bb08.chunk.js | 2 -- .../build/static/js/776.a5942f9b.chunk.js | 2 ++ .../build/static/js/776.a5942f9b.chunk.js.map | 2 +- .../build/static/js/776.b2d59891.chunk.js | 2 -- .../build/static/js/896.97e81efd.chunk.js | 2 -- .../build/static/js/896.efa1f67b.chunk.js | 2 ++ .../build/static/js/896.efa1f67b.chunk.js.map | 2 +- .../build/static/js/916.1867848f.chunk.js | 2 ++ ...chunk.js.map => 916.1867848f.chunk.js.map} | 2 +- .../build/static/js/916.5b86581e.chunk.js | 2 -- .../js/{main.1cd1f7c0.js => main.f95f3e14.js} | 6 ++-- ...CENSE.txt => main.f95f3e14.js.LICENSE.txt} | 0 ...n.1cd1f7c0.js.map => main.f95f3e14.js.map} | 2 +- frontend/src/images/page_not_found.svg | 1 + 50 files changed, 93 insertions(+), 77 deletions(-) delete mode 100644 backend/public/static/js/263.39e66117.chunk.js create mode 100644 backend/public/static/js/263.c88dc7e4.chunk.js rename backend/public/static/js/{263.39e66117.chunk.js.map => 263.c88dc7e4.chunk.js.map} (98%) create mode 100644 backend/public/static/js/439.7007b990.chunk.js rename frontend/build/static/js/439.72cd9cbe.chunk.js.map => backend/public/static/js/439.7007b990.chunk.js.map (99%) delete mode 100644 backend/public/static/js/439.72cd9cbe.chunk.js create mode 100644 backend/public/static/js/525.471f5615.chunk.js rename backend/public/static/js/{525.9483bb08.chunk.js.map => 525.471f5615.chunk.js.map} (97%) delete mode 100644 backend/public/static/js/525.9483bb08.chunk.js create mode 100644 backend/public/static/js/776.70ba6886.chunk.js rename frontend/build/static/js/776.b2d59891.chunk.js.map => backend/public/static/js/776.70ba6886.chunk.js.map (98%) delete mode 100644 backend/public/static/js/776.b2d59891.chunk.js delete mode 100644 backend/public/static/js/896.97e81efd.chunk.js create mode 100644 backend/public/static/js/896.e7df689b.chunk.js rename frontend/build/static/js/896.97e81efd.chunk.js.map => backend/public/static/js/896.e7df689b.chunk.js.map (99%) create mode 100644 backend/public/static/js/916.35d7632f.chunk.js rename backend/public/static/js/{916.5b86581e.chunk.js.map => 916.35d7632f.chunk.js.map} (96%) delete mode 100644 backend/public/static/js/916.5b86581e.chunk.js rename backend/public/static/js/{main.1cd1f7c0.js => main.87db3903.js} (99%) rename backend/public/static/js/{main.1cd1f7c0.js.LICENSE.txt => main.87db3903.js.LICENSE.txt} (100%) rename backend/public/static/js/{main.1cd1f7c0.js.map => main.87db3903.js.map} (99%) delete mode 100644 frontend/build/static/js/263.39e66117.chunk.js create mode 100644 frontend/build/static/js/263.61d57d57.chunk.js rename frontend/build/static/js/{263.39e66117.chunk.js.map => 263.61d57d57.chunk.js.map} (98%) delete mode 100644 frontend/build/static/js/439.72cd9cbe.chunk.js create mode 100644 frontend/build/static/js/439.89a74853.chunk.js rename backend/public/static/js/439.72cd9cbe.chunk.js.map => frontend/build/static/js/439.89a74853.chunk.js.map (99%) create mode 100644 frontend/build/static/js/525.5ec61d35.chunk.js rename frontend/build/static/js/{525.9483bb08.chunk.js.map => 525.5ec61d35.chunk.js.map} (97%) delete mode 100644 frontend/build/static/js/525.9483bb08.chunk.js create mode 100644 frontend/build/static/js/776.a5942f9b.chunk.js rename backend/public/static/js/776.b2d59891.chunk.js.map => frontend/build/static/js/776.a5942f9b.chunk.js.map (98%) delete mode 100644 frontend/build/static/js/776.b2d59891.chunk.js delete mode 100644 frontend/build/static/js/896.97e81efd.chunk.js create mode 100644 frontend/build/static/js/896.efa1f67b.chunk.js rename backend/public/static/js/896.97e81efd.chunk.js.map => frontend/build/static/js/896.efa1f67b.chunk.js.map (99%) create mode 100644 frontend/build/static/js/916.1867848f.chunk.js rename frontend/build/static/js/{916.5b86581e.chunk.js.map => 916.1867848f.chunk.js.map} (96%) delete mode 100644 frontend/build/static/js/916.5b86581e.chunk.js rename frontend/build/static/js/{main.1cd1f7c0.js => main.f95f3e14.js} (99%) rename frontend/build/static/js/{main.1cd1f7c0.js.LICENSE.txt => main.f95f3e14.js.LICENSE.txt} (100%) rename frontend/build/static/js/{main.1cd1f7c0.js.map => main.f95f3e14.js.map} (99%) create mode 100644 frontend/src/images/page_not_found.svg diff --git a/.gitignore b/.gitignore index 7d17660..fb1b690 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,6 @@ /backend/uploads/images/*.jpg /backend/uploads/images/*.jpeg /frontend/node_modules +/frontend/.env +/frontend/.env.production /frontend/package-lock.json \ No newline at end of file diff --git a/README.md b/README.md index e69de29..35cbeb2 100644 --- a/README.md +++ b/README.md @@ -0,0 +1,9 @@ +# Beautiful Earth :earth_africa: + +![](./frontend/src/images/beautiful-earth.png) + +## Beauty earth is a web application that i developed just for practice purpose with ReactJS in the frontend, NodeJS/ExpressJS in the backend and MongoDB as a database solution for the entire project. + + +### the whole idea is a web application that let people to share nice natural pictures from around the world. you can just use the application to see the pictures shared by other people or create an account and start uploading also pretty pictures. +## you can navigate to the app with this link :arrow_right: [beautiy-earth](https://beautiy-earth.herokuapp.com/) :globe_with_meridians: \ No newline at end of file diff --git a/backend/public/asset-manifest.json b/backend/public/asset-manifest.json index 185f5da..0fec241 100644 --- a/backend/public/asset-manifest.json +++ b/backend/public/asset-manifest.json @@ -1,19 +1,19 @@ { "files": { "main.css": "/static/css/main.f024b825.css", - "main.js": "/static/js/main.1cd1f7c0.js", + "main.js": "/static/js/main.87db3903.js", "static/css/916.5ee6cc4f.chunk.css": "/static/css/916.5ee6cc4f.chunk.css", - "static/js/916.5b86581e.chunk.js": "/static/js/916.5b86581e.chunk.js", + "static/js/916.35d7632f.chunk.js": "/static/js/916.35d7632f.chunk.js", "static/css/263.e67f947b.chunk.css": "/static/css/263.e67f947b.chunk.css", - "static/js/263.39e66117.chunk.js": "/static/js/263.39e66117.chunk.js", + "static/js/263.c88dc7e4.chunk.js": "/static/js/263.c88dc7e4.chunk.js", "static/css/525.faa92651.chunk.css": "/static/css/525.faa92651.chunk.css", - "static/js/525.9483bb08.chunk.js": "/static/js/525.9483bb08.chunk.js", + "static/js/525.471f5615.chunk.js": "/static/js/525.471f5615.chunk.js", "static/css/439.83165304.chunk.css": "/static/css/439.83165304.chunk.css", - "static/js/439.72cd9cbe.chunk.js": "/static/js/439.72cd9cbe.chunk.js", + "static/js/439.7007b990.chunk.js": "/static/js/439.7007b990.chunk.js", "static/css/776.0f1498a6.chunk.css": "/static/css/776.0f1498a6.chunk.css", - "static/js/776.b2d59891.chunk.js": "/static/js/776.b2d59891.chunk.js", + "static/js/776.70ba6886.chunk.js": "/static/js/776.70ba6886.chunk.js", "static/css/896.9bb8bd5c.chunk.css": "/static/css/896.9bb8bd5c.chunk.css", - "static/js/896.97e81efd.chunk.js": "/static/js/896.97e81efd.chunk.js", + "static/js/896.e7df689b.chunk.js": "/static/js/896.e7df689b.chunk.js", "static/css/74.4b86cb50.chunk.css": "/static/css/74.4b86cb50.chunk.css", "static/js/74.641d363f.chunk.js": "/static/js/74.641d363f.chunk.js", "static/js/105.47198afa.chunk.js": "/static/js/105.47198afa.chunk.js", @@ -23,25 +23,25 @@ "static/media/page_not_found.svg": "/static/media/page_not_found.6bd6d2f2364f4bb9e3b51d327e65f078.svg", "index.html": "/index.html", "main.f024b825.css.map": "/static/css/main.f024b825.css.map", - "main.1cd1f7c0.js.map": "/static/js/main.1cd1f7c0.js.map", + "main.87db3903.js.map": "/static/js/main.87db3903.js.map", "916.5ee6cc4f.chunk.css.map": "/static/css/916.5ee6cc4f.chunk.css.map", - "916.5b86581e.chunk.js.map": "/static/js/916.5b86581e.chunk.js.map", + "916.35d7632f.chunk.js.map": "/static/js/916.35d7632f.chunk.js.map", "263.e67f947b.chunk.css.map": "/static/css/263.e67f947b.chunk.css.map", - "263.39e66117.chunk.js.map": "/static/js/263.39e66117.chunk.js.map", + "263.c88dc7e4.chunk.js.map": "/static/js/263.c88dc7e4.chunk.js.map", "525.faa92651.chunk.css.map": "/static/css/525.faa92651.chunk.css.map", - "525.9483bb08.chunk.js.map": "/static/js/525.9483bb08.chunk.js.map", + "525.471f5615.chunk.js.map": "/static/js/525.471f5615.chunk.js.map", "439.83165304.chunk.css.map": "/static/css/439.83165304.chunk.css.map", - "439.72cd9cbe.chunk.js.map": "/static/js/439.72cd9cbe.chunk.js.map", + "439.7007b990.chunk.js.map": "/static/js/439.7007b990.chunk.js.map", "776.0f1498a6.chunk.css.map": "/static/css/776.0f1498a6.chunk.css.map", - "776.b2d59891.chunk.js.map": "/static/js/776.b2d59891.chunk.js.map", + "776.70ba6886.chunk.js.map": "/static/js/776.70ba6886.chunk.js.map", "896.9bb8bd5c.chunk.css.map": "/static/css/896.9bb8bd5c.chunk.css.map", - "896.97e81efd.chunk.js.map": "/static/js/896.97e81efd.chunk.js.map", + "896.e7df689b.chunk.js.map": "/static/js/896.e7df689b.chunk.js.map", "74.4b86cb50.chunk.css.map": "/static/css/74.4b86cb50.chunk.css.map", "74.641d363f.chunk.js.map": "/static/js/74.641d363f.chunk.js.map", "105.47198afa.chunk.js.map": "/static/js/105.47198afa.chunk.js.map" }, "entrypoints": [ "static/css/main.f024b825.css", - "static/js/main.1cd1f7c0.js" + "static/js/main.87db3903.js" ] } \ No newline at end of file diff --git a/backend/public/index.html b/backend/public/index.html index 98aa3ec..b65cef1 100644 --- a/backend/public/index.html +++ b/backend/public/index.html @@ -1 +1 @@ -Beautiy Earth
\ No newline at end of file +Beautiy Earth
\ No newline at end of file diff --git a/backend/public/static/js/263.39e66117.chunk.js b/backend/public/static/js/263.39e66117.chunk.js deleted file mode 100644 index faf3c4f..0000000 --- a/backend/public/static/js/263.39e66117.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunkfrontend=self.webpackChunkfrontend||[]).push([[263],{186:function(e,n,r){r.d(n,{Z:function(){return i}});var t=r(791),s="Input_main_input__392n6",a=r(184),i=t.forwardRef((function(e,n){return(0,a.jsxs)("div",{className:"mb-3 ".concat(s),children:[(0,a.jsx)("label",{htmlFor:e.name,className:"form-label",children:e.label}),(0,a.jsx)("input",{onBlur:e.onBlur,onChange:e.onChange,ref:n,type:e.type,className:"form-control ".concat(e.cssClasses),id:e.name,defaultValue:e.defaultValue,placeholder:e.placeholder,accept:e.accept})]})}))},830:function(e,n,r){r.d(n,{Z:function(){return a}});r(791);var t="Wrapper_wrapper__eIb1h",s=r(184),a=function(e){return(0,s.jsx)("div",{className:t,children:e.children})}},263:function(e,n,r){r.r(n),r.d(n,{default:function(){return h}});var t=r(861),s=r(683),a=r(152),i=r(757),l=r.n(i),o=r(791),c=r(504),u=r(871),p=r(830),d=r(186),f=r(108),b="Login_login__lW3vB",m=r(184),h=function(){var e=(0,o.useContext)(f.V),n=(0,o.useRef)(""),r=(0,o.useRef)(""),i=(0,u.s0)(),h=(0,o.useState)(!1),g=(0,a.Z)(h,2),v=g[0],j=g[1],w=(0,o.useState)({emailCssClasses:"",passwordCssClasses:"",wrongInputsAlertVisibility:!1,wrongInputsAlertMessage:""}),y=(0,a.Z)(w,2),x=y[0],C=y[1],O=function(e){j(!1),C((function(n){return(0,s.Z)((0,s.Z)({},n),{},{wrongInputsAlertVisibility:!0,wrongInputsAlertMessage:e})})),setTimeout((function(){C((function(e){return(0,s.Z)((0,s.Z)({},e),{},{wrongInputsAlertVisibility:!1})}))}),5e3)},Z=function(){var s=(0,t.Z)(l().mark((function t(){var s,a;return l().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(j(!0),t.prev=1,!(n.current.value.trim().includes("@")&&r.current.value.length>=6)){t.next=13;break}return t.next=5,fetch("".concat("http://192.168.1.155:4000/api/","users/login"),{method:"POST",body:JSON.stringify({email:n.current.value,password:r.current.value}),headers:{"Content-Type":"application/json"}});case 5:return s=t.sent,t.next=8,s.json();case 8:a=t.sent,j(!1),s.ok?(e.login(a.userId,a.userToken,a.expirationTime),i("/")):(O(a.message),console.log(s.ok)),t.next=14;break;case 13:O("Please Enter a Valid Credentials");case 14:t.next=19;break;case 16:t.prev=16,t.t0=t.catch(1),O("Failed to fetch");case 19:case"end":return t.stop()}}),t,null,[[1,16]])})));return function(){return s.apply(this,arguments)}}();return(0,m.jsxs)(p.Z,{children:[x.wrongInputsAlertVisibility&&(0,m.jsxs)("div",{className:"alert alert-danger",role:"alert",children:[(0,m.jsx)("i",{className:"bi bi-exclamation-octagon-fill m-1"}),x.wrongInputsAlertMessage]}),(0,m.jsx)(d.Z,{ref:n,type:"email",name:"email",placeholder:"your email...",label:"User Email : ",cssClasses:x.emailCssClasses,onBlur:function(){C((function(e){return(0,s.Z)((0,s.Z)({},e),{},{emailCssClasses:n.current.value.trim().includes("@")?"is-valid":"is-invalid"})}))}}),(0,m.jsx)(d.Z,{ref:r,type:"password",name:"password",placeholder:"your password...",label:"User Password : ",cssClasses:x.passwordCssClasses,onBlur:function(){C((function(e){return(0,s.Z)((0,s.Z)({},e),{},{passwordCssClasses:r.current.value.length>=6?"is-valid":"is-invalid"})}))}}),(0,m.jsxs)("div",{className:b,children:[(0,m.jsx)("button",{className:"btn btn-info",onClick:Z,disabled:v,children:v?(0,m.jsxs)(m.Fragment,{children:[(0,m.jsx)("span",{className:"spinner-border spinner-border-sm",role:"status","aria-hidden":"true"}),"Loading..."," "]}):"login"}),(0,m.jsxs)("p",{children:["Don't have an account? ",(0,m.jsx)(c.rU,{to:"/signup",children:"Sign Up"})]})]})]})}},683:function(e,n,r){function t(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function s(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),r.push.apply(r,t)}return r}function a(e){for(var n=1;n=6)){t.next=13;break}return t.next=5,fetch("".concat("http://localhost:4000/api/","users/login"),{method:"POST",body:JSON.stringify({email:n.current.value,password:r.current.value}),headers:{"Content-Type":"application/json"}});case 5:return s=t.sent,t.next=8,s.json();case 8:a=t.sent,j(!1),s.ok?(e.login(a.userId,a.userToken,a.expirationTime),i("/")):(O(a.message),console.log(s.ok)),t.next=14;break;case 13:O("Please Enter a Valid Credentials");case 14:t.next=19;break;case 16:t.prev=16,t.t0=t.catch(1),O("Failed to fetch");case 19:case"end":return t.stop()}}),t,null,[[1,16]])})));return function(){return s.apply(this,arguments)}}();return(0,m.jsxs)(p.Z,{children:[x.wrongInputsAlertVisibility&&(0,m.jsxs)("div",{className:"alert alert-danger",role:"alert",children:[(0,m.jsx)("i",{className:"bi bi-exclamation-octagon-fill m-1"}),x.wrongInputsAlertMessage]}),(0,m.jsx)(d.Z,{ref:n,type:"email",name:"email",placeholder:"your email...",label:"User Email : ",cssClasses:x.emailCssClasses,onBlur:function(){C((function(e){return(0,s.Z)((0,s.Z)({},e),{},{emailCssClasses:n.current.value.trim().includes("@")?"is-valid":"is-invalid"})}))}}),(0,m.jsx)(d.Z,{ref:r,type:"password",name:"password",placeholder:"your password...",label:"User Password : ",cssClasses:x.passwordCssClasses,onBlur:function(){C((function(e){return(0,s.Z)((0,s.Z)({},e),{},{passwordCssClasses:r.current.value.length>=6?"is-valid":"is-invalid"})}))}}),(0,m.jsxs)("div",{className:b,children:[(0,m.jsx)("button",{className:"btn btn-info",onClick:Z,disabled:v,children:v?(0,m.jsxs)(m.Fragment,{children:[(0,m.jsx)("span",{className:"spinner-border spinner-border-sm",role:"status","aria-hidden":"true"}),"Loading..."," "]}):"login"}),(0,m.jsxs)("p",{children:["Don't have an account? ",(0,m.jsx)(c.rU,{to:"/signup",children:"Sign Up"})]})]})]})}},683:function(e,n,r){function t(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function s(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),r.push.apply(r,t)}return r}function a(e){for(var n=1;n {\r\n return (\r\n
\r\n \r\n \r\n
\r\n );\r\n});\r\n\r\nexport default Input;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"wrapper\":\"Wrapper_wrapper__eIb1h\"};","import React from 'react';\r\n\r\nimport classes from \"./Wrapper.module.css\";\r\n\r\n\r\nconst Wrapper = (props) => {\r\n return (\r\n
{props.children}
\r\n );\r\n}\r\n\r\nexport default Wrapper;","// extracted by mini-css-extract-plugin\nexport default {\"login\":\"Login_login__lW3vB\"};","import React, { useRef, useState, useContext } from \"react\";\r\nimport { Link, useNavigate } from \"react-router-dom\";\r\n\r\nimport Wrapper from \"../../shared/components/UIElements/Wrapper.js\";\r\nimport Input from \"../../shared/components/UIElements/Input.js\";\r\nimport { AuthContext } from \"../../shared/context/auth-context.js\";\r\n\r\nimport classes from \"./Login.module.css\";\r\n\r\nconst Login = () => {\r\n //-----------------------------------------------------------------------------------------------------------------------------hooks-part\r\n const logCtx = useContext(AuthContext);\r\n const refEmail = useRef(\"\");\r\n const refPassword = useRef(\"\");\r\n const navigate = useNavigate();\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [inputValidation, setInputValidation] = useState({\r\n emailCssClasses: \"\",\r\n passwordCssClasses: \"\",\r\n wrongInputsAlertVisibility: false,\r\n wrongInputsAlertMessage: \"\",\r\n });\r\n //-----------------------------------------------------------------------------------------------------------------------------errorHandler\r\n const errorHandler = (errorMessage) => {\r\n setIsLoading(false);\r\n setInputValidation((prevInputValidation) => ({\r\n ...prevInputValidation,\r\n wrongInputsAlertVisibility: true,\r\n wrongInputsAlertMessage: errorMessage,\r\n }));\r\n setTimeout(() => {\r\n setInputValidation((prevInputValidation) => ({\r\n ...prevInputValidation,\r\n wrongInputsAlertVisibility: false,\r\n }));\r\n }, 5000);\r\n };\r\n //-----------------------------------------------------------------------------------------------------------------------------onSubmitHandler\r\n const onSubmitHandler = async () => {\r\n setIsLoading(true);\r\n try {\r\n if (\r\n refEmail.current.value.trim().includes(\"@\") &&\r\n refPassword.current.value.length >= 6\r\n ) {\r\n const response = await fetch(\r\n `${process.env.REACT_APP_BACKEND_URL}users/login`,\r\n {\r\n method: \"POST\",\r\n body: JSON.stringify({\r\n email: refEmail.current.value,\r\n password: refPassword.current.value,\r\n }),\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n }\r\n );\r\n const data = await response.json();\r\n setIsLoading(false);\r\n if (response.ok) {\r\n // if the user login successfully we should store the userId (data.userId) & the userToken (data.userToken) in the Context\r\n logCtx.login(data.userId, data.userToken, data.expirationTime);\r\n // we should redirect programmatically to the home page...\r\n navigate(\"/\");\r\n } else {\r\n // wrong credentials invalid email or password or server error...\r\n errorHandler(data.message);\r\n console.log(response.ok); // failed to signup the user try again...\r\n }\r\n } else {\r\n errorHandler(\"Please Enter a Valid Credentials\");\r\n }\r\n } catch (error) {\r\n errorHandler(\"Failed to fetch\");\r\n }\r\n };\r\n //-----------------------------------------------------------------------------------------------------------------------------return(JSX)\r\n return (\r\n \r\n {inputValidation.wrongInputsAlertVisibility && (\r\n
\r\n \r\n {inputValidation.wrongInputsAlertMessage}\r\n
\r\n )}\r\n {\r\n setInputValidation((prevCssClasses) => ({\r\n ...prevCssClasses,\r\n emailCssClasses: refEmail.current.value.trim().includes(\"@\")\r\n ? \"is-valid\"\r\n : \"is-invalid\",\r\n }));\r\n }}\r\n />\r\n {\r\n setInputValidation((prevCssClasses) => ({\r\n ...prevCssClasses,\r\n passwordCssClasses:\r\n refPassword.current.value.length >= 6 ? \"is-valid\" : \"is-invalid\",\r\n }));\r\n }}\r\n />\r\n
\r\n \r\n {isLoading ? (\r\n <>\r\n \r\n Loading...{\" \"}\r\n \r\n ) : (\r\n \"login\"\r\n )}\r\n \r\n

\r\n Don't have an account? Sign Up\r\n

\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default Login;\r\n","export default function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}","import defineProperty from \"./defineProperty.js\";\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n enumerableOnly && (symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n })), keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nexport default function _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = null != arguments[i] ? arguments[i] : {};\n i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {\n defineProperty(target, key, source[key]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n\n return target;\n}"],"names":["React","props","ref","className","classes","htmlFor","name","label","onBlur","onChange","type","cssClasses","id","defaultValue","placeholder","accept","children","logCtx","useContext","AuthContext","refEmail","useRef","refPassword","navigate","useNavigate","useState","isLoading","setIsLoading","emailCssClasses","passwordCssClasses","wrongInputsAlertVisibility","wrongInputsAlertMessage","inputValidation","setInputValidation","errorHandler","errorMessage","prevInputValidation","setTimeout","onSubmitHandler","current","value","trim","includes","length","fetch","process","method","body","JSON","stringify","email","password","headers","response","json","data","ok","login","userId","userToken","expirationTime","message","console","log","Wrapper","role","Input","prevCssClasses","onClick","disabled","to","_defineProperty","obj","key","Object","defineProperty","enumerable","configurable","writable","ownKeys","object","enumerableOnly","keys","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","push","apply","_objectSpread2","target","i","arguments","source","forEach","getOwnPropertyDescriptors","defineProperties"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"static/js/263.c88dc7e4.chunk.js","mappings":"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","sources":["webpack://frontend/./src/shared/components/UIElements/Input.module.css?b647","shared/components/UIElements/Input.js","webpack://frontend/./src/shared/components/UIElements/Wrapper.module.css?08b1","shared/components/UIElements/Wrapper.js","webpack://frontend/./src/users/pages/Login.module.css?c59a","users/pages/Login.js","../node_modules/@babel/runtime/helpers/esm/defineProperty.js","../node_modules/@babel/runtime/helpers/esm/objectSpread2.js"],"sourcesContent":["// extracted by mini-css-extract-plugin\nexport default {\"main_input\":\"Input_main_input__392n6\"};","import React from \"react\";\r\nimport classes from \"./Input.module.css\";\r\n\r\nconst Input = React.forwardRef((props, ref) => {\r\n return (\r\n
\r\n \r\n \r\n
\r\n );\r\n});\r\n\r\nexport default Input;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"wrapper\":\"Wrapper_wrapper__eIb1h\"};","import React from 'react';\r\n\r\nimport classes from \"./Wrapper.module.css\";\r\n\r\n\r\nconst Wrapper = (props) => {\r\n return (\r\n
{props.children}
\r\n );\r\n}\r\n\r\nexport default Wrapper;","// extracted by mini-css-extract-plugin\nexport default {\"login\":\"Login_login__lW3vB\"};","import React, { useRef, useState, useContext } from \"react\";\r\nimport { Link, useNavigate } from \"react-router-dom\";\r\n\r\nimport Wrapper from \"../../shared/components/UIElements/Wrapper.js\";\r\nimport Input from \"../../shared/components/UIElements/Input.js\";\r\nimport { AuthContext } from \"../../shared/context/auth-context.js\";\r\n\r\nimport classes from \"./Login.module.css\";\r\n\r\nconst Login = () => {\r\n //-----------------------------------------------------------------------------------------------------------------------------hooks-part\r\n const logCtx = useContext(AuthContext);\r\n const refEmail = useRef(\"\");\r\n const refPassword = useRef(\"\");\r\n const navigate = useNavigate();\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [inputValidation, setInputValidation] = useState({\r\n emailCssClasses: \"\",\r\n passwordCssClasses: \"\",\r\n wrongInputsAlertVisibility: false,\r\n wrongInputsAlertMessage: \"\",\r\n });\r\n //-----------------------------------------------------------------------------------------------------------------------------errorHandler\r\n const errorHandler = (errorMessage) => {\r\n setIsLoading(false);\r\n setInputValidation((prevInputValidation) => ({\r\n ...prevInputValidation,\r\n wrongInputsAlertVisibility: true,\r\n wrongInputsAlertMessage: errorMessage,\r\n }));\r\n setTimeout(() => {\r\n setInputValidation((prevInputValidation) => ({\r\n ...prevInputValidation,\r\n wrongInputsAlertVisibility: false,\r\n }));\r\n }, 5000);\r\n };\r\n //-----------------------------------------------------------------------------------------------------------------------------onSubmitHandler\r\n const onSubmitHandler = async () => {\r\n setIsLoading(true);\r\n try {\r\n if (\r\n refEmail.current.value.trim().includes(\"@\") &&\r\n refPassword.current.value.length >= 6\r\n ) {\r\n const response = await fetch(\r\n `${process.env.REACT_APP_BACKEND_URL}users/login`,\r\n {\r\n method: \"POST\",\r\n body: JSON.stringify({\r\n email: refEmail.current.value,\r\n password: refPassword.current.value,\r\n }),\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n }\r\n );\r\n const data = await response.json();\r\n setIsLoading(false);\r\n if (response.ok) {\r\n // if the user login successfully we should store the userId (data.userId) & the userToken (data.userToken) in the Context\r\n logCtx.login(data.userId, data.userToken, data.expirationTime);\r\n // we should redirect programmatically to the home page...\r\n navigate(\"/\");\r\n } else {\r\n // wrong credentials invalid email or password or server error...\r\n errorHandler(data.message);\r\n console.log(response.ok); // failed to signup the user try again...\r\n }\r\n } else {\r\n errorHandler(\"Please Enter a Valid Credentials\");\r\n }\r\n } catch (error) {\r\n errorHandler(\"Failed to fetch\");\r\n }\r\n };\r\n //-----------------------------------------------------------------------------------------------------------------------------return(JSX)\r\n return (\r\n \r\n {inputValidation.wrongInputsAlertVisibility && (\r\n
\r\n \r\n {inputValidation.wrongInputsAlertMessage}\r\n
\r\n )}\r\n {\r\n setInputValidation((prevCssClasses) => ({\r\n ...prevCssClasses,\r\n emailCssClasses: refEmail.current.value.trim().includes(\"@\")\r\n ? \"is-valid\"\r\n : \"is-invalid\",\r\n }));\r\n }}\r\n />\r\n {\r\n setInputValidation((prevCssClasses) => ({\r\n ...prevCssClasses,\r\n passwordCssClasses:\r\n refPassword.current.value.length >= 6 ? \"is-valid\" : \"is-invalid\",\r\n }));\r\n }}\r\n />\r\n
\r\n \r\n {isLoading ? (\r\n <>\r\n \r\n Loading...{\" \"}\r\n \r\n ) : (\r\n \"login\"\r\n )}\r\n \r\n

\r\n Don't have an account? Sign Up\r\n

\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default Login;\r\n","export default function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}","import defineProperty from \"./defineProperty.js\";\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n enumerableOnly && (symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n })), keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nexport default function _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = null != arguments[i] ? arguments[i] : {};\n i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {\n defineProperty(target, key, source[key]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n\n return target;\n}"],"names":["React","props","ref","className","classes","htmlFor","name","label","onBlur","onChange","type","cssClasses","id","defaultValue","placeholder","accept","children","logCtx","useContext","AuthContext","refEmail","useRef","refPassword","navigate","useNavigate","useState","isLoading","setIsLoading","emailCssClasses","passwordCssClasses","wrongInputsAlertVisibility","wrongInputsAlertMessage","inputValidation","setInputValidation","errorHandler","errorMessage","prevInputValidation","setTimeout","onSubmitHandler","current","value","trim","includes","length","fetch","process","method","body","JSON","stringify","email","password","headers","response","json","data","ok","login","userId","userToken","expirationTime","message","console","log","Wrapper","role","Input","prevCssClasses","onClick","disabled","to","_defineProperty","obj","key","Object","defineProperty","enumerable","configurable","writable","ownKeys","object","enumerableOnly","keys","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","push","apply","_objectSpread2","target","i","arguments","source","forEach","getOwnPropertyDescriptors","defineProperties"],"sourceRoot":""} \ No newline at end of file diff --git a/backend/public/static/js/439.7007b990.chunk.js b/backend/public/static/js/439.7007b990.chunk.js new file mode 100644 index 0000000..339a7e2 --- /dev/null +++ b/backend/public/static/js/439.7007b990.chunk.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunkfrontend=self.webpackChunkfrontend||[]).push([[439],{439:function(e,t,s){s.r(t);var n=s(861),r=s(683),a=s(152),i=s(757),l=s.n(i),c=s(791),u=s(108),o=s(830),p=s(186),d=s(184);t.default=function(){var e=(0,c.useContext)(u.V),t=(0,c.useRef)(""),s=(0,c.useRef)(""),i=(0,c.useRef)(""),f=(0,c.useRef)(),b=(0,c.useState)(!1),m=(0,a.Z)(b,2),g=m[0],h=m[1],v=(0,c.useState)(!1),C=(0,a.Z)(v,2),j=C[0],x=C[1],y=(0,c.useState)({titleCssClasses:"",descriptionCssClasses:"",imageCssClasses:"",wrongInputsAlertVisibility:!1,wrongInputsAlertMessage:""}),w=(0,a.Z)(y,2),Z=w[0],O=w[1],P=function(e){h(!1),O((function(t){return(0,r.Z)((0,r.Z)({},t),{},{wrongInputsAlertVisibility:!0,wrongInputsAlertMessage:e})})),setTimeout((function(){O((function(e){return(0,r.Z)((0,r.Z)({},e),{},{wrongInputsAlertVisibility:!1})}))}),5e3)},k=function(){var r=(0,n.Z)(l().mark((function n(){var r,a,c;return l().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if(h(!0),n.prev=1,!(t.current.value.trim().length>=3&&s.current.value.trim().length>=10&&void 0!==f.current.files[0])){n.next=18;break}return(r=new FormData).append("title",t.current.value),r.append("description",s.current.value),r.append("address",i.current.value),r.append("image",f.current.files[0]),n.next=10,fetch("".concat("http://localhost:4000/api/","pictures/"),{method:"POST",body:r,headers:{Authorization:"Bearer ".concat(e.token)}});case 10:return a=n.sent,n.next=13,a.json();case 13:c=n.sent,h(!1),a.ok?(x(!0),setTimeout((function(){x(!1)}),5e3),t.current.value="",s.current.value="",i.current.value="",f.current.value="",O({titleCssClasses:"",descriptionCssClasses:"",imageCssClasses:"",wrongInputsAlertVisibility:!1,wrongInputsAlertMessage:""})):(P(c.message),console.log(c)),n.next=19;break;case 18:P("Please Enter a Valid Inputs Value");case 19:n.next=25;break;case 21:n.prev=21,n.t0=n.catch(1),P("Failed to fetch"),console.log(n.t0);case 25:case"end":return n.stop()}}),n,null,[[1,21]])})));return function(){return r.apply(this,arguments)}}();return(0,d.jsxs)(o.Z,{children:[Z.wrongInputsAlertVisibility&&(0,d.jsxs)("div",{className:"alert alert-danger",role:"alert",children:[(0,d.jsx)("i",{className:"bi bi-exclamation-octagon-fill m-1"}),Z.wrongInputsAlertMessage]}),j&&(0,d.jsxs)("div",{className:"alert alert-success",role:"alert",children:[(0,d.jsx)("i",{className:"bi bi-send-check m-1"}),"Picture Added Successfully"]}),(0,d.jsx)(p.Z,{ref:t,type:"text",name:"title",placeholder:"picture title...",label:"Picture Title : ",cssClasses:Z.titleCssClasses,onBlur:function(){O((function(e){return(0,r.Z)((0,r.Z)({},e),{},{titleCssClasses:t.current.value.trim().length>=3?"is-valid":"is-invalid"})}))}}),(0,d.jsx)(p.Z,{ref:s,type:"text",name:"description",placeholder:"picture description...",label:"Picture Description : ",cssClasses:Z.descriptionCssClasses,onBlur:function(){O((function(e){return(0,r.Z)((0,r.Z)({},e),{},{descriptionCssClasses:s.current.value.trim().length>=10?"is-valid":"is-invalid"})}))}}),(0,d.jsx)(p.Z,{ref:i,type:"text",name:"address",placeholder:"picture address...",label:"Picture Address : "}),(0,d.jsx)(p.Z,{ref:f,type:"file",name:"image",accept:".jpg,.png,.jpeg",label:"Picture : ",cssClasses:Z.imageCssClasses,onChange:function(){O((function(e){return(0,r.Z)((0,r.Z)({},e),{},{imageCssClasses:void 0===f.current.files[0]?"is-invalid":"is-valid"})}))}}),(0,d.jsx)("button",{className:"btn btn-info",onClick:k,disabled:g,children:g?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("span",{className:"spinner-border spinner-border-sm",role:"status","aria-hidden":"true"}),"Loading..."]}):"post"})]})}},186:function(e,t,s){s.d(t,{Z:function(){return i}});var n=s(791),r="Input_main_input__392n6",a=s(184),i=n.forwardRef((function(e,t){return(0,a.jsxs)("div",{className:"mb-3 ".concat(r),children:[(0,a.jsx)("label",{htmlFor:e.name,className:"form-label",children:e.label}),(0,a.jsx)("input",{onBlur:e.onBlur,onChange:e.onChange,ref:t,type:e.type,className:"form-control ".concat(e.cssClasses),id:e.name,defaultValue:e.defaultValue,placeholder:e.placeholder,accept:e.accept})]})}))},830:function(e,t,s){s.d(t,{Z:function(){return a}});s(791);var n="Wrapper_wrapper__eIb1h",r=s(184),a=function(e){return(0,r.jsx)("div",{className:n,children:e.children})}},683:function(e,t,s){function n(e,t,s){return t in e?Object.defineProperty(e,t,{value:s,enumerable:!0,configurable:!0,writable:!0}):e[t]=s,e}function r(e,t){var s=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),s.push.apply(s,n)}return s}function a(e){for(var t=1;t {\r\n //-----------------------------------------------------------------------------------------------------------------------------hooks-part\r\n const logCtx = useContext(AuthContext);\r\n const refTitle = useRef(\"\");\r\n const refDescription = useRef(\"\");\r\n const refAddress = useRef(\"\");\r\n const refImage = useRef();\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [successAlertVisibility, setSuccessAlertVisibility] = useState(false);\r\n const [inputValidation, setInputValidation] = useState({\r\n titleCssClasses: \"\",\r\n descriptionCssClasses: \"\",\r\n imageCssClasses: \"\",\r\n wrongInputsAlertVisibility: false,\r\n wrongInputsAlertMessage: \"\",\r\n });\r\n //-----------------------------------------------------------------------------------------------------------------------------errorHandler\r\n const errorHandler = (errorMessage) => {\r\n setIsLoading(false);\r\n setInputValidation((prevInputValidation) => ({\r\n ...prevInputValidation,\r\n wrongInputsAlertVisibility: true,\r\n wrongInputsAlertMessage: errorMessage,\r\n }));\r\n setTimeout(() => {\r\n setInputValidation((prevInputValidation) => ({\r\n ...prevInputValidation,\r\n wrongInputsAlertVisibility: false,\r\n }));\r\n }, 5000);\r\n };\r\n //-----------------------------------------------------------------------------------------------------------------------------onSubmitHandler\r\n const onSubmitHandler = async () => {\r\n setIsLoading(true);\r\n try {\r\n if (\r\n refTitle.current.value.trim().length >= 3 &&\r\n refDescription.current.value.trim().length >= 10 &&\r\n refImage.current.files[0] !== undefined\r\n ) {\r\n const formData = new FormData();\r\n formData.append(\"title\", refTitle.current.value);\r\n formData.append(\"description\", refDescription.current.value);\r\n formData.append(\"address\", refAddress.current.value);\r\n formData.append(\"image\", refImage.current.files[0]);\r\n const response = await fetch(\r\n `${process.env.REACT_APP_BACKEND_URL}pictures/`,\r\n {\r\n method: \"POST\",\r\n body: formData,\r\n headers: {\r\n Authorization: `Bearer ${logCtx.token}`\r\n },\r\n }\r\n );\r\n const data = await response.json();\r\n setIsLoading(false);\r\n if (response.ok) {\r\n // this response give us the new posted picture\r\n setSuccessAlertVisibility(true);\r\n setTimeout(() => {\r\n setSuccessAlertVisibility(false);\r\n }, 5000);\r\n //reset the form & the css classes of validation\r\n refTitle.current.value = \"\";\r\n refDescription.current.value = \"\";\r\n refAddress.current.value = \"\";\r\n refImage.current.value = \"\";\r\n setInputValidation({\r\n titleCssClasses: \"\",\r\n descriptionCssClasses: \"\",\r\n imageCssClasses: \"\",\r\n wrongInputsAlertVisibility: false,\r\n wrongInputsAlertMessage: \"\",\r\n });\r\n } else {\r\n //error from backend validation...\r\n errorHandler(data.message);\r\n console.log(data); // failed to post the pic try again...\r\n }\r\n } else {\r\n //error from frontend validation...\r\n errorHandler(\"Please Enter a Valid Inputs Value\");\r\n }\r\n } catch (error) {\r\n errorHandler(\"Failed to fetch\");\r\n console.log(error);\r\n }\r\n };\r\n //-----------------------------------------------------------------------------------------------------------------------------return(JSX)\r\n return (\r\n \r\n {inputValidation.wrongInputsAlertVisibility && (\r\n
\r\n \r\n {inputValidation.wrongInputsAlertMessage}\r\n
\r\n )}\r\n {successAlertVisibility && (\r\n
\r\n \r\n Picture Added Successfully\r\n
\r\n )}\r\n {\r\n setInputValidation((prevCssClasses) => ({\r\n ...prevCssClasses,\r\n titleCssClasses:\r\n refTitle.current.value.trim().length >= 3\r\n ? \"is-valid\"\r\n : \"is-invalid\",\r\n }));\r\n }}\r\n />\r\n {\r\n setInputValidation((prevCssClasses) => ({\r\n ...prevCssClasses,\r\n descriptionCssClasses:\r\n refDescription.current.value.trim().length >= 10\r\n ? \"is-valid\"\r\n : \"is-invalid\",\r\n }));\r\n }}\r\n />\r\n \r\n\r\n {\r\n setInputValidation((prevCssClasses) => ({\r\n ...prevCssClasses,\r\n imageCssClasses:\r\n refImage.current.files[0] === undefined\r\n ? \"is-invalid\"\r\n : \"is-valid\",\r\n }));\r\n }}\r\n />\r\n \r\n {isLoading ? (\r\n <>\r\n \r\n Loading...\r\n \r\n ) : (\r\n \"post\"\r\n )}\r\n \r\n
\r\n );\r\n};\r\nexport default NewPicture;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"main_input\":\"Input_main_input__392n6\"};","import React from \"react\";\r\nimport classes from \"./Input.module.css\";\r\n\r\nconst Input = React.forwardRef((props, ref) => {\r\n return (\r\n
\r\n \r\n \r\n
\r\n );\r\n});\r\n\r\nexport default Input;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"wrapper\":\"Wrapper_wrapper__eIb1h\"};","import React from 'react';\r\n\r\nimport classes from \"./Wrapper.module.css\";\r\n\r\n\r\nconst Wrapper = (props) => {\r\n return (\r\n
{props.children}
\r\n );\r\n}\r\n\r\nexport default Wrapper;","export default function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}","import defineProperty from \"./defineProperty.js\";\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n enumerableOnly && (symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n })), keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nexport default function _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = null != arguments[i] ? arguments[i] : {};\n i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {\n defineProperty(target, key, source[key]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n\n return target;\n}"],"names":["logCtx","useContext","AuthContext","refTitle","useRef","refDescription","refAddress","refImage","useState","isLoading","setIsLoading","successAlertVisibility","setSuccessAlertVisibility","titleCssClasses","descriptionCssClasses","imageCssClasses","wrongInputsAlertVisibility","wrongInputsAlertMessage","inputValidation","setInputValidation","errorHandler","errorMessage","prevInputValidation","setTimeout","onSubmitHandler","current","value","trim","length","undefined","files","formData","FormData","append","fetch","process","method","body","headers","Authorization","token","response","json","data","ok","message","console","log","className","role","ref","type","name","placeholder","label","cssClasses","onBlur","prevCssClasses","accept","onChange","onClick","disabled","React","props","classes","htmlFor","id","defaultValue","children","_defineProperty","obj","key","Object","defineProperty","enumerable","configurable","writable","ownKeys","object","enumerableOnly","keys","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","push","apply","_objectSpread2","target","i","arguments","source","forEach","getOwnPropertyDescriptors","defineProperties"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"static/js/439.7007b990.chunk.js","mappings":"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","sources":["pictures/pages/NewPicture.js","webpack://frontend/./src/shared/components/UIElements/Input.module.css?b647","shared/components/UIElements/Input.js","webpack://frontend/./src/shared/components/UIElements/Wrapper.module.css?08b1","shared/components/UIElements/Wrapper.js","../node_modules/@babel/runtime/helpers/esm/defineProperty.js","../node_modules/@babel/runtime/helpers/esm/objectSpread2.js"],"sourcesContent":["import React, { useRef, useState, useContext } from \"react\";\r\n\r\nimport {AuthContext} from \"../../shared/context/auth-context.js\";\r\nimport Wrapper from \"../../shared/components/UIElements/Wrapper.js\";\r\nimport Input from \"../../shared/components/UIElements/Input.js\";\r\n\r\nconst NewPicture = () => {\r\n //-----------------------------------------------------------------------------------------------------------------------------hooks-part\r\n const logCtx = useContext(AuthContext);\r\n const refTitle = useRef(\"\");\r\n const refDescription = useRef(\"\");\r\n const refAddress = useRef(\"\");\r\n const refImage = useRef();\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [successAlertVisibility, setSuccessAlertVisibility] = useState(false);\r\n const [inputValidation, setInputValidation] = useState({\r\n titleCssClasses: \"\",\r\n descriptionCssClasses: \"\",\r\n imageCssClasses: \"\",\r\n wrongInputsAlertVisibility: false,\r\n wrongInputsAlertMessage: \"\",\r\n });\r\n //-----------------------------------------------------------------------------------------------------------------------------errorHandler\r\n const errorHandler = (errorMessage) => {\r\n setIsLoading(false);\r\n setInputValidation((prevInputValidation) => ({\r\n ...prevInputValidation,\r\n wrongInputsAlertVisibility: true,\r\n wrongInputsAlertMessage: errorMessage,\r\n }));\r\n setTimeout(() => {\r\n setInputValidation((prevInputValidation) => ({\r\n ...prevInputValidation,\r\n wrongInputsAlertVisibility: false,\r\n }));\r\n }, 5000);\r\n };\r\n //-----------------------------------------------------------------------------------------------------------------------------onSubmitHandler\r\n const onSubmitHandler = async () => {\r\n setIsLoading(true);\r\n try {\r\n if (\r\n refTitle.current.value.trim().length >= 3 &&\r\n refDescription.current.value.trim().length >= 10 &&\r\n refImage.current.files[0] !== undefined\r\n ) {\r\n const formData = new FormData();\r\n formData.append(\"title\", refTitle.current.value);\r\n formData.append(\"description\", refDescription.current.value);\r\n formData.append(\"address\", refAddress.current.value);\r\n formData.append(\"image\", refImage.current.files[0]);\r\n const response = await fetch(\r\n `${process.env.REACT_APP_BACKEND_URL}pictures/`,\r\n {\r\n method: \"POST\",\r\n body: formData,\r\n headers: {\r\n Authorization: `Bearer ${logCtx.token}`\r\n },\r\n }\r\n );\r\n const data = await response.json();\r\n setIsLoading(false);\r\n if (response.ok) {\r\n // this response give us the new posted picture\r\n setSuccessAlertVisibility(true);\r\n setTimeout(() => {\r\n setSuccessAlertVisibility(false);\r\n }, 5000);\r\n //reset the form & the css classes of validation\r\n refTitle.current.value = \"\";\r\n refDescription.current.value = \"\";\r\n refAddress.current.value = \"\";\r\n refImage.current.value = \"\";\r\n setInputValidation({\r\n titleCssClasses: \"\",\r\n descriptionCssClasses: \"\",\r\n imageCssClasses: \"\",\r\n wrongInputsAlertVisibility: false,\r\n wrongInputsAlertMessage: \"\",\r\n });\r\n } else {\r\n //error from backend validation...\r\n errorHandler(data.message);\r\n console.log(data); // failed to post the pic try again...\r\n }\r\n } else {\r\n //error from frontend validation...\r\n errorHandler(\"Please Enter a Valid Inputs Value\");\r\n }\r\n } catch (error) {\r\n errorHandler(\"Failed to fetch\");\r\n console.log(error);\r\n }\r\n };\r\n //-----------------------------------------------------------------------------------------------------------------------------return(JSX)\r\n return (\r\n \r\n {inputValidation.wrongInputsAlertVisibility && (\r\n
\r\n \r\n {inputValidation.wrongInputsAlertMessage}\r\n
\r\n )}\r\n {successAlertVisibility && (\r\n
\r\n \r\n Picture Added Successfully\r\n
\r\n )}\r\n {\r\n setInputValidation((prevCssClasses) => ({\r\n ...prevCssClasses,\r\n titleCssClasses:\r\n refTitle.current.value.trim().length >= 3\r\n ? \"is-valid\"\r\n : \"is-invalid\",\r\n }));\r\n }}\r\n />\r\n {\r\n setInputValidation((prevCssClasses) => ({\r\n ...prevCssClasses,\r\n descriptionCssClasses:\r\n refDescription.current.value.trim().length >= 10\r\n ? \"is-valid\"\r\n : \"is-invalid\",\r\n }));\r\n }}\r\n />\r\n \r\n\r\n {\r\n setInputValidation((prevCssClasses) => ({\r\n ...prevCssClasses,\r\n imageCssClasses:\r\n refImage.current.files[0] === undefined\r\n ? \"is-invalid\"\r\n : \"is-valid\",\r\n }));\r\n }}\r\n />\r\n \r\n {isLoading ? (\r\n <>\r\n \r\n Loading...\r\n \r\n ) : (\r\n \"post\"\r\n )}\r\n \r\n
\r\n );\r\n};\r\nexport default NewPicture;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"main_input\":\"Input_main_input__392n6\"};","import React from \"react\";\r\nimport classes from \"./Input.module.css\";\r\n\r\nconst Input = React.forwardRef((props, ref) => {\r\n return (\r\n
\r\n \r\n \r\n
\r\n );\r\n});\r\n\r\nexport default Input;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"wrapper\":\"Wrapper_wrapper__eIb1h\"};","import React from 'react';\r\n\r\nimport classes from \"./Wrapper.module.css\";\r\n\r\n\r\nconst Wrapper = (props) => {\r\n return (\r\n
{props.children}
\r\n );\r\n}\r\n\r\nexport default Wrapper;","export default function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}","import defineProperty from \"./defineProperty.js\";\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n enumerableOnly && (symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n })), keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nexport default function _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = null != arguments[i] ? arguments[i] : {};\n i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {\n defineProperty(target, key, source[key]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n\n return target;\n}"],"names":["logCtx","useContext","AuthContext","refTitle","useRef","refDescription","refAddress","refImage","useState","isLoading","setIsLoading","successAlertVisibility","setSuccessAlertVisibility","titleCssClasses","descriptionCssClasses","imageCssClasses","wrongInputsAlertVisibility","wrongInputsAlertMessage","inputValidation","setInputValidation","errorHandler","errorMessage","prevInputValidation","setTimeout","onSubmitHandler","current","value","trim","length","undefined","files","formData","FormData","append","fetch","process","method","body","headers","Authorization","token","response","json","data","ok","message","console","log","className","role","ref","type","name","placeholder","label","cssClasses","onBlur","prevCssClasses","accept","onChange","onClick","disabled","React","props","classes","htmlFor","id","defaultValue","children","_defineProperty","obj","key","Object","defineProperty","enumerable","configurable","writable","ownKeys","object","enumerableOnly","keys","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","push","apply","_objectSpread2","target","i","arguments","source","forEach","getOwnPropertyDescriptors","defineProperties"],"sourceRoot":""} \ No newline at end of file diff --git a/backend/public/static/js/439.72cd9cbe.chunk.js b/backend/public/static/js/439.72cd9cbe.chunk.js deleted file mode 100644 index 5924657..0000000 --- a/backend/public/static/js/439.72cd9cbe.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunkfrontend=self.webpackChunkfrontend||[]).push([[439],{439:function(e,t,s){s.r(t);var n=s(861),r=s(683),a=s(152),i=s(757),l=s.n(i),c=s(791),u=s(108),o=s(830),p=s(186),d=s(184);t.default=function(){var e=(0,c.useContext)(u.V),t=(0,c.useRef)(""),s=(0,c.useRef)(""),i=(0,c.useRef)(""),f=(0,c.useRef)(),b=(0,c.useState)(!1),m=(0,a.Z)(b,2),g=m[0],h=m[1],v=(0,c.useState)(!1),C=(0,a.Z)(v,2),j=C[0],x=C[1],y=(0,c.useState)({titleCssClasses:"",descriptionCssClasses:"",imageCssClasses:"",wrongInputsAlertVisibility:!1,wrongInputsAlertMessage:""}),w=(0,a.Z)(y,2),Z=w[0],O=w[1],P=function(e){h(!1),O((function(t){return(0,r.Z)((0,r.Z)({},t),{},{wrongInputsAlertVisibility:!0,wrongInputsAlertMessage:e})})),setTimeout((function(){O((function(e){return(0,r.Z)((0,r.Z)({},e),{},{wrongInputsAlertVisibility:!1})}))}),5e3)},k=function(){var r=(0,n.Z)(l().mark((function n(){var r,a,c;return l().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if(h(!0),n.prev=1,!(t.current.value.trim().length>=3&&s.current.value.trim().length>=10&&void 0!==f.current.files[0])){n.next=18;break}return(r=new FormData).append("title",t.current.value),r.append("description",s.current.value),r.append("address",i.current.value),r.append("image",f.current.files[0]),n.next=10,fetch("".concat("http://192.168.1.155:4000/api/","pictures/"),{method:"POST",body:r,headers:{Authorization:"Bearer ".concat(e.token)}});case 10:return a=n.sent,n.next=13,a.json();case 13:c=n.sent,h(!1),a.ok?(x(!0),setTimeout((function(){x(!1)}),5e3),t.current.value="",s.current.value="",i.current.value="",f.current.value="",O({titleCssClasses:"",descriptionCssClasses:"",imageCssClasses:"",wrongInputsAlertVisibility:!1,wrongInputsAlertMessage:""})):(P(c.message),console.log(c)),n.next=19;break;case 18:P("Please Enter a Valid Inputs Value");case 19:n.next=25;break;case 21:n.prev=21,n.t0=n.catch(1),P("Failed to fetch"),console.log(n.t0);case 25:case"end":return n.stop()}}),n,null,[[1,21]])})));return function(){return r.apply(this,arguments)}}();return(0,d.jsxs)(o.Z,{children:[Z.wrongInputsAlertVisibility&&(0,d.jsxs)("div",{className:"alert alert-danger",role:"alert",children:[(0,d.jsx)("i",{className:"bi bi-exclamation-octagon-fill m-1"}),Z.wrongInputsAlertMessage]}),j&&(0,d.jsxs)("div",{className:"alert alert-success",role:"alert",children:[(0,d.jsx)("i",{className:"bi bi-send-check m-1"}),"Picture Added Successfully"]}),(0,d.jsx)(p.Z,{ref:t,type:"text",name:"title",placeholder:"picture title...",label:"Picture Title : ",cssClasses:Z.titleCssClasses,onBlur:function(){O((function(e){return(0,r.Z)((0,r.Z)({},e),{},{titleCssClasses:t.current.value.trim().length>=3?"is-valid":"is-invalid"})}))}}),(0,d.jsx)(p.Z,{ref:s,type:"text",name:"description",placeholder:"picture description...",label:"Picture Description : ",cssClasses:Z.descriptionCssClasses,onBlur:function(){O((function(e){return(0,r.Z)((0,r.Z)({},e),{},{descriptionCssClasses:s.current.value.trim().length>=10?"is-valid":"is-invalid"})}))}}),(0,d.jsx)(p.Z,{ref:i,type:"text",name:"address",placeholder:"picture address...",label:"Picture Address : "}),(0,d.jsx)(p.Z,{ref:f,type:"file",name:"image",accept:".jpg,.png,.jpeg",label:"Picture : ",cssClasses:Z.imageCssClasses,onChange:function(){O((function(e){return(0,r.Z)((0,r.Z)({},e),{},{imageCssClasses:void 0===f.current.files[0]?"is-invalid":"is-valid"})}))}}),(0,d.jsx)("button",{className:"btn btn-info",onClick:k,disabled:g,children:g?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("span",{className:"spinner-border spinner-border-sm",role:"status","aria-hidden":"true"}),"Loading..."]}):"post"})]})}},186:function(e,t,s){s.d(t,{Z:function(){return i}});var n=s(791),r="Input_main_input__392n6",a=s(184),i=n.forwardRef((function(e,t){return(0,a.jsxs)("div",{className:"mb-3 ".concat(r),children:[(0,a.jsx)("label",{htmlFor:e.name,className:"form-label",children:e.label}),(0,a.jsx)("input",{onBlur:e.onBlur,onChange:e.onChange,ref:t,type:e.type,className:"form-control ".concat(e.cssClasses),id:e.name,defaultValue:e.defaultValue,placeholder:e.placeholder,accept:e.accept})]})}))},830:function(e,t,s){s.d(t,{Z:function(){return a}});s(791);var n="Wrapper_wrapper__eIb1h",r=s(184),a=function(e){return(0,r.jsx)("div",{className:n,children:e.children})}},683:function(e,t,s){function n(e,t,s){return t in e?Object.defineProperty(e,t,{value:s,enumerable:!0,configurable:!0,writable:!0}):e[t]=s,e}function r(e,t){var s=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),s.push.apply(s,n)}return s}function a(e){for(var t=1;t {\r\n\r\n const logCtx = useContext(AuthContext);\r\n \r\n\r\n return (\r\n \r\n \r\n
\r\n

{picture.title}

\r\n\r\n {\"creator_id\" in picture && (\r\n \r\n \r\n {picture.creator_id.name}\r\n \r\n )}\r\n
\r\n

{picture.description}

\r\n
\r\n {picture.address}\r\n
\r\n {logCtx.isLoggedIn && (logCtx.userId === picture.creator_id._id ) &&
\r\n \r\n \r\n \r\n \r\n Delete\r\n \r\n
}\r\n
\r\n );\r\n};\r\n\r\nexport default PictureCard;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"avatar__img\":\"UserAvatar_avatar__img__5wn2E\"};","import React from \"react\";\r\nimport Wrapper from \"../../shared/components/UIElements/Wrapper\";\r\n\r\nimport classes from \"./UserAvatar.module.css\";\r\n\r\nconst UserAvatar = ({ name, email, image_url }) => {\r\n return (\r\n \r\n \r\n

{name}

\r\n
{email}
\r\n
\r\n );\r\n};\r\nexport default UserAvatar;","import React, { useState, useEffect, useContext } from \"react\";\r\nimport { useParams } from \"react-router-dom\";\r\n\r\nimport { AuthContext } from \"../../shared/context/auth-context.js\";\r\nimport PictureCard from \"../components/PictureCard.js\";\r\nimport UserAvatar from \"../components/UserAvatar\";\r\nimport classes from \"./UserPictures.module.css\";\r\n\r\nconst UserPictures = () => {\r\n //-----------------------------------------------------------------------------------------------------------------------------hooks-part\r\n const logCtx = useContext(AuthContext);\r\n const [isLoading, setIsLoading] = useState(true);\r\n const [userPictures, setUserPictures] = useState({});\r\n const [error, setError] = useState(false);\r\n const userId = useParams().userId;\r\n //-----------------------------------------------------------------------------------------------------------------------------fetching-data\r\n useEffect(() => {\r\n const fetchPictures = async () => {\r\n try {\r\n const response = await fetch(\r\n `${process.env.REACT_APP_BACKEND_URL}users/${userId}`\r\n );\r\n if (!response.ok) {\r\n setError(true);\r\n setIsLoading(false);\r\n }\r\n const data = await response.json();\r\n\r\n if (response.ok && data.userPictures !== null) {\r\n let picturesArray = data.userPictures.pictures_ids.map((pic) => ({\r\n ...pic,\r\n creator_id: {\r\n _id: data.userPictures._id,\r\n email: data.userPictures.email,\r\n name: data.userPictures.name,\r\n image_url: data.userPictures.image_url,\r\n },\r\n }));\r\n let creator = {\r\n _id: data.userPictures._id,\r\n email: data.userPictures.email,\r\n name: data.userPictures.name,\r\n image_url: data.userPictures.image_url,\r\n };\r\n setUserPictures({ pictures: picturesArray, creator });\r\n setIsLoading(false);\r\n }\r\n } catch (error) {\r\n setError(true);\r\n setIsLoading(false);\r\n }\r\n };\r\n fetchPictures();\r\n }, [userId]);\r\n //-----------------------------------------------------------------------------------------------------------------------------pictureDeleteHandler\r\n const pictureDeleteHandler = async (id) => {\r\n try {\r\n const response = await fetch(\r\n `${process.env.REACT_APP_BACKEND_URL}pictures/${id}`,\r\n {\r\n method: \"DELETE\",\r\n body: {},\r\n headers: { Authorization: `Bearer ${logCtx.token}` },\r\n }\r\n );\r\n if (response.ok) {\r\n //if the response is ok we should filter out the deleted pic from the array\r\n setUserPictures((oldUserPictures) => ({\r\n ...oldUserPictures,\r\n pictures: oldUserPictures.pictures.filter((pic) => pic._id !== id),\r\n }));\r\n }\r\n } catch (error) {\r\n setError(true);\r\n setTimeout(() => {\r\n setError(false);\r\n }, 1000);\r\n }\r\n };\r\n //-----------------------------------------------------------------------------------------------------------------------------return(JSX)\r\n return error ? (\r\n
\r\n \r\n There is no response backed from the server\r\n
\r\n ) : isLoading ? (\r\n \r\n Loading...\r\n \r\n ) : userPictures.pictures.length === 0 ? (\r\n <>\r\n \r\n\r\n
\r\n No Picture Founded!\r\n
\r\n \r\n ) : (\r\n <>\r\n \r\n {userPictures.pictures.map((picture) => (\r\n \r\n ))}\r\n \r\n );\r\n};\r\n\r\nexport default UserPictures;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"wrapper\":\"Wrapper_wrapper__eIb1h\"};","import React from 'react';\r\n\r\nimport classes from \"./Wrapper.module.css\";\r\n\r\n\r\nconst Wrapper = (props) => {\r\n return (\r\n
{props.children}
\r\n );\r\n}\r\n\r\nexport default Wrapper;","export default function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}","import defineProperty from \"./defineProperty.js\";\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n enumerableOnly && (symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n })), keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nexport default function _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = null != arguments[i] ? arguments[i] : {};\n i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {\n defineProperty(target, key, source[key]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n\n return target;\n}"],"names":["picture","pictureDeleteHandler","logCtx","useContext","AuthContext","Wrapper","className","classes","src","process","image_url","alt","description","title","to","creator_id","_id","name","address","isLoggedIn","userId","type","onClick","bind","email","useState","isLoading","setIsLoading","userPictures","setUserPictures","error","setError","useParams","useEffect","fetchPictures","fetch","response","ok","json","data","picturesArray","pictures_ids","map","pic","creator","pictures","id","method","body","headers","Authorization","token","oldUserPictures","filter","setTimeout","role","style","width","height","margin","length","PictureCard","props","children","_defineProperty","obj","key","value","Object","defineProperty","enumerable","configurable","writable","ownKeys","object","enumerableOnly","keys","getOwnPropertySymbols","symbols","sym","getOwnPropertyDescriptor","push","apply","_objectSpread2","target","i","arguments","source","forEach","getOwnPropertyDescriptors","defineProperties"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"static/js/525.471f5615.chunk.js","mappings":"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","sources":["webpack://frontend/./src/pictures/components/PictureCard.module.css?4c33","pictures/components/PictureCard.js","webpack://frontend/./src/pictures/components/UserAvatar.module.css?d4d2","pictures/components/UserAvatar.js","pictures/pages/UserPictures.js","webpack://frontend/./src/shared/components/UIElements/Wrapper.module.css?08b1","shared/components/UIElements/Wrapper.js","../node_modules/@babel/runtime/helpers/esm/defineProperty.js","../node_modules/@babel/runtime/helpers/esm/objectSpread2.js"],"sourcesContent":["// extracted by mini-css-extract-plugin\nexport default {\"img\":\"PictureCard_img__ab-nx\",\"img_avatar\":\"PictureCard_img_avatar__okL9j\",\"row\":\"PictureCard_row__oHEH3\",\"edit_delete\":\"PictureCard_edit_delete__9725u\"};","import React, {useContext} from \"react\";\r\nimport { Link } from \"react-router-dom\";\r\n\r\nimport { AuthContext } from \"../../shared/context/auth-context.js\";\r\nimport Wrapper from \"../../shared/components/UIElements/Wrapper.js\";\r\nimport classes from \"./PictureCard.module.css\";\r\n\r\nconst PictureCard = ({ picture, pictureDeleteHandler }) => {\r\n\r\n const logCtx = useContext(AuthContext);\r\n \r\n\r\n return (\r\n \r\n \r\n
\r\n

{picture.title}

\r\n\r\n {\"creator_id\" in picture && (\r\n \r\n \r\n {picture.creator_id.name}\r\n \r\n )}\r\n
\r\n

{picture.description}

\r\n
\r\n {picture.address}\r\n
\r\n {logCtx.isLoggedIn && (logCtx.userId === picture.creator_id._id ) &&
\r\n \r\n \r\n \r\n \r\n Delete\r\n \r\n
}\r\n
\r\n );\r\n};\r\n\r\nexport default PictureCard;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"avatar__img\":\"UserAvatar_avatar__img__5wn2E\"};","import React from \"react\";\r\nimport Wrapper from \"../../shared/components/UIElements/Wrapper\";\r\n\r\nimport classes from \"./UserAvatar.module.css\";\r\n\r\nconst UserAvatar = ({ name, email, image_url }) => {\r\n return (\r\n \r\n \r\n

{name}

\r\n
{email}
\r\n
\r\n );\r\n};\r\nexport default UserAvatar;","import React, { useState, useEffect, useContext } from \"react\";\r\nimport { useParams } from \"react-router-dom\";\r\n\r\nimport { AuthContext } from \"../../shared/context/auth-context.js\";\r\nimport PictureCard from \"../components/PictureCard.js\";\r\nimport UserAvatar from \"../components/UserAvatar\";\r\nimport classes from \"./UserPictures.module.css\";\r\n\r\nconst UserPictures = () => {\r\n //-----------------------------------------------------------------------------------------------------------------------------hooks-part\r\n const logCtx = useContext(AuthContext);\r\n const [isLoading, setIsLoading] = useState(true);\r\n const [userPictures, setUserPictures] = useState({});\r\n const [error, setError] = useState(false);\r\n const userId = useParams().userId;\r\n //-----------------------------------------------------------------------------------------------------------------------------fetching-data\r\n useEffect(() => {\r\n const fetchPictures = async () => {\r\n try {\r\n const response = await fetch(\r\n `${process.env.REACT_APP_BACKEND_URL}users/${userId}`\r\n );\r\n if (!response.ok) {\r\n setError(true);\r\n setIsLoading(false);\r\n }\r\n const data = await response.json();\r\n\r\n if (response.ok && data.userPictures !== null) {\r\n let picturesArray = data.userPictures.pictures_ids.map((pic) => ({\r\n ...pic,\r\n creator_id: {\r\n _id: data.userPictures._id,\r\n email: data.userPictures.email,\r\n name: data.userPictures.name,\r\n image_url: data.userPictures.image_url,\r\n },\r\n }));\r\n let creator = {\r\n _id: data.userPictures._id,\r\n email: data.userPictures.email,\r\n name: data.userPictures.name,\r\n image_url: data.userPictures.image_url,\r\n };\r\n setUserPictures({ pictures: picturesArray, creator });\r\n setIsLoading(false);\r\n }\r\n } catch (error) {\r\n setError(true);\r\n setIsLoading(false);\r\n }\r\n };\r\n fetchPictures();\r\n }, [userId]);\r\n //-----------------------------------------------------------------------------------------------------------------------------pictureDeleteHandler\r\n const pictureDeleteHandler = async (id) => {\r\n try {\r\n const response = await fetch(\r\n `${process.env.REACT_APP_BACKEND_URL}pictures/${id}`,\r\n {\r\n method: \"DELETE\",\r\n body: {},\r\n headers: { Authorization: `Bearer ${logCtx.token}` },\r\n }\r\n );\r\n if (response.ok) {\r\n //if the response is ok we should filter out the deleted pic from the array\r\n setUserPictures((oldUserPictures) => ({\r\n ...oldUserPictures,\r\n pictures: oldUserPictures.pictures.filter((pic) => pic._id !== id),\r\n }));\r\n }\r\n } catch (error) {\r\n setError(true);\r\n setTimeout(() => {\r\n setError(false);\r\n }, 1000);\r\n }\r\n };\r\n //-----------------------------------------------------------------------------------------------------------------------------return(JSX)\r\n return error ? (\r\n
\r\n \r\n There is no response backed from the server\r\n
\r\n ) : isLoading ? (\r\n \r\n Loading...\r\n \r\n ) : userPictures.pictures.length === 0 ? (\r\n <>\r\n \r\n\r\n
\r\n No Picture Founded!\r\n
\r\n \r\n ) : (\r\n <>\r\n \r\n {userPictures.pictures.map((picture) => (\r\n \r\n ))}\r\n \r\n );\r\n};\r\n\r\nexport default UserPictures;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"wrapper\":\"Wrapper_wrapper__eIb1h\"};","import React from 'react';\r\n\r\nimport classes from \"./Wrapper.module.css\";\r\n\r\n\r\nconst Wrapper = (props) => {\r\n return (\r\n
{props.children}
\r\n );\r\n}\r\n\r\nexport default Wrapper;","export default function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}","import defineProperty from \"./defineProperty.js\";\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n enumerableOnly && (symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n })), keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nexport default function _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = null != arguments[i] ? arguments[i] : {};\n i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {\n defineProperty(target, key, source[key]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n\n return target;\n}"],"names":["picture","pictureDeleteHandler","logCtx","useContext","AuthContext","Wrapper","className","classes","src","process","image_url","alt","description","title","to","creator_id","_id","name","address","isLoggedIn","userId","type","onClick","bind","email","useState","isLoading","setIsLoading","userPictures","setUserPictures","error","setError","useParams","useEffect","fetchPictures","fetch","response","ok","json","data","picturesArray","pictures_ids","map","pic","creator","pictures","id","method","body","headers","Authorization","token","oldUserPictures","filter","setTimeout","role","style","width","height","margin","length","PictureCard","props","children","_defineProperty","obj","key","value","Object","defineProperty","enumerable","configurable","writable","ownKeys","object","enumerableOnly","keys","getOwnPropertySymbols","symbols","sym","getOwnPropertyDescriptor","push","apply","_objectSpread2","target","i","arguments","source","forEach","getOwnPropertyDescriptors","defineProperties"],"sourceRoot":""} \ No newline at end of file diff --git a/backend/public/static/js/525.9483bb08.chunk.js b/backend/public/static/js/525.9483bb08.chunk.js deleted file mode 100644 index c8a14b2..0000000 --- a/backend/public/static/js/525.9483bb08.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunkfrontend=self.webpackChunkfrontend||[]).push([[525],{855:function(e,r,t){t.d(r,{Z:function(){return m}});var n=t(791),i=t(504),a=t(108),c=t(830),s="PictureCard_img__ab-nx",u="PictureCard_img_avatar__okL9j",o="PictureCard_row__oHEH3",l="PictureCard_edit_delete__9725u",d=t(184),m=function(e){var r=e.picture,t=e.pictureDeleteHandler,m=(0,n.useContext)(a.V);return(0,d.jsxs)(c.Z,{children:[(0,d.jsx)("img",{className:s,src:"".concat("http://192.168.1.155:4000/"+r.image_url),alt:r.description}),(0,d.jsxs)("div",{className:o,children:[(0,d.jsx)("h3",{children:r.title}),"creator_id"in r&&(0,d.jsxs)(i.rU,{to:"/".concat(r.creator_id._id,"/pictures"),children:[(0,d.jsx)("img",{className:u,src:"http://192.168.1.155:4000/"+r.creator_id.image_url,alt:r.creator_id.name}),r.creator_id.name]})]}),(0,d.jsx)("p",{children:r.description}),(0,d.jsxs)("h6",{children:[(0,d.jsx)("i",{className:"bi bi-geo-alt-fill"})," ",r.address]}),m.isLoggedIn&&m.userId===r.creator_id._id&&(0,d.jsxs)("div",{className:l,children:[(0,d.jsx)(i.rU,{to:"/pictures/update/".concat(r._id),children:(0,d.jsx)("button",{type:"button",className:"btn btn-success mx-4",children:"Editing"})}),(0,d.jsx)("button",{type:"button",className:"btn btn-danger",onClick:t.bind(undefined,r._id),children:"Delete"})]})]})}},525:function(e,r,t){t.r(r),t.d(r,{default:function(){return _}});var n=t(683),i=t(861),a=t(152),c=t(757),s=t.n(c),u=t(791),o=t(871),l=t(108),d=t(855),m=t(830),p="UserAvatar_avatar__img__5wn2E",f=t(184),h=function(e){var r=e.name,t=e.email,n=e.image_url;return(0,f.jsxs)(m.Z,{children:[(0,f.jsx)("img",{className:p,src:"http://192.168.1.155:4000/"+n,alt:r}),(0,f.jsx)("h4",{children:r}),(0,f.jsx)("h6",{children:t})]})},_=function(){var e=(0,u.useContext)(l.V),r=(0,u.useState)(!0),t=(0,a.Z)(r,2),c=t[0],m=t[1],p=(0,u.useState)({}),_=(0,a.Z)(p,2),j=_[0],b=_[1],x=(0,u.useState)(!1),g=(0,a.Z)(x,2),v=g[0],P=g[1],w=(0,o.UO)().userId;(0,u.useEffect)((function(){var e=function(){var e=(0,i.Z)(s().mark((function e(){var r,t,i,a;return s().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,fetch("".concat("http://192.168.1.155:4000/api/","users/").concat(w));case 3:return(r=e.sent).ok||(P(!0),m(!1)),e.next=7,r.json();case 7:t=e.sent,r.ok&&null!==t.userPictures&&(i=t.userPictures.pictures_ids.map((function(e){return(0,n.Z)((0,n.Z)({},e),{},{creator_id:{_id:t.userPictures._id,email:t.userPictures.email,name:t.userPictures.name,image_url:t.userPictures.image_url}})})),a={_id:t.userPictures._id,email:t.userPictures.email,name:t.userPictures.name,image_url:t.userPictures.image_url},b({pictures:i,creator:a}),m(!1)),e.next=15;break;case 11:e.prev=11,e.t0=e.catch(0),P(!0),m(!1);case 15:case"end":return e.stop()}}),e,null,[[0,11]])})));return function(){return e.apply(this,arguments)}}();e()}),[w]);var y=function(){var r=(0,i.Z)(s().mark((function r(t){return s().wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return r.prev=0,r.next=3,fetch("".concat("http://192.168.1.155:4000/api/","pictures/").concat(t),{method:"DELETE",body:{},headers:{Authorization:"Bearer ".concat(e.token)}});case 3:r.sent.ok&&b((function(e){return(0,n.Z)((0,n.Z)({},e),{},{pictures:e.pictures.filter((function(e){return e._id!==t}))})})),r.next=11;break;case 7:r.prev=7,r.t0=r.catch(0),P(!0),setTimeout((function(){P(!1)}),1e3);case 11:case"end":return r.stop()}}),r,null,[[0,7]])})));return function(e){return r.apply(this,arguments)}}();return v?(0,f.jsxs)("div",{className:"alert alert-danger",role:"alert",children:[(0,f.jsx)("i",{className:"bi bi-exclamation-octagon-fill m-1"}),"There is no response backed from the server"]}):c?(0,f.jsx)("div",{className:"spinner-border",style:{width:"3rem",height:"3rem",margin:"0 48vw"},role:"status",children:(0,f.jsx)("span",{className:"visually-hidden",children:"Loading..."})}):0===j.pictures.length?(0,f.jsxs)(f.Fragment,{children:[(0,f.jsx)(h,{name:j.creator.name,email:j.creator.email,image_url:j.creator.image_url}),(0,f.jsx)("div",{className:"alert alert-warning",role:"alert",children:"No Picture Founded!"})]}):(0,f.jsxs)(f.Fragment,{children:[(0,f.jsx)(h,{name:j.creator.name,email:j.creator.email,image_url:j.creator.image_url}),j.pictures.map((function(e){return(0,f.jsx)(d.Z,{picture:e,pictureDeleteHandler:y},e._id)}))]})}},830:function(e,r,t){t.d(r,{Z:function(){return a}});t(791);var n="Wrapper_wrapper__eIb1h",i=t(184),a=function(e){return(0,i.jsx)("div",{className:n,children:e.children})}},683:function(e,r,t){function n(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function i(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r&&(n=n.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,n)}return t}function a(e){for(var r=1;r=3&&i.current.value.trim().length>=10)){t.next=11;break}return t.next=4,fetch("".concat("http://localhost:4000/api/","pictures/").concat(m),{method:"PATCH",body:JSON.stringify({title:r.current.value,description:i.current.value,address:b.current.value}),headers:{"Content-Type":"application/json",Authorization:"Bearer ".concat(e.token)}});case 4:return n=t.sent,t.next=7,n.json();case 7:s=t.sent,n.ok?(_(!0),setTimeout((function(){_(!1)}),5e3),D({titleCssClasses:"",descriptionCssClasses:"",wrongInputsAlertVisibility:!1,wrongInputsAlertMessage:""})):(E(s.message),console.log(s)),t.next=12;break;case 11:E("Please Enter a Valid Inputs Value");case 12:t.next=18;break;case 14:t.prev=14,t.t0=t.catch(0),E("Failed to fetch"),console.log(t.t0);case 18:case"end":return t.stop()}}),t,null,[[0,14]])})));return function(){return t.apply(this,arguments)}}();return w?(0,h.jsxs)("div",{className:"alert alert-danger",role:"alert",children:[(0,h.jsx)("i",{className:"bi bi-exclamation-octagon-fill m-1"}),"There is no response backed from the server"]}):x?(0,h.jsx)("div",{className:"spinner-border",style:{width:"3rem",height:"3rem",margin:"0 48vw"},role:"status",children:(0,h.jsx)("span",{className:"visually-hidden",children:"Loading..."})}):(0,h.jsxs)(p.Z,{children:[B.wrongInputsAlertVisibility&&(0,h.jsxs)("div",{className:"alert alert-danger",role:"alert",children:[(0,h.jsx)("i",{className:"bi bi-exclamation-octagon-fill m-1"}),B.wrongInputsAlertMessage]}),A&&(0,h.jsxs)("div",{className:"alert alert-success",role:"alert",children:[(0,h.jsx)("i",{className:"bi bi-send-check m-1"}),"Picture Updated Successfully"]}),(0,h.jsx)("img",{className:f,src:"".concat("http://localhost:4000/"+P.image_url),alt:P.description}),(0,h.jsx)(d.Z,{ref:r,type:"text",name:"title",placeholder:"picture title...",label:"Picture Title : ",defaultValue:P.title,cssClasses:B.titleCssClasses,onBlur:function(){D((function(e){return(0,n.Z)((0,n.Z)({},e),{},{titleCssClasses:r.current.value.trim().length>=3?"is-valid":"is-invalid"})}))}}),(0,h.jsx)(d.Z,{ref:i,type:"text",name:"description",placeholder:"picture description...",label:"Picture Description : ",defaultValue:P.description,cssClasses:B.descriptionCssClasses,onBlur:function(){D((function(e){return(0,n.Z)((0,n.Z)({},e),{},{descriptionCssClasses:i.current.value.trim().length>=10?"is-valid":"is-invalid"})}))}}),(0,h.jsx)(d.Z,{ref:b,type:"text",name:"address",placeholder:"picture address...",label:"Picture Address : ",defaultValue:P.address}),(0,h.jsx)("button",{className:"btn btn-info",onClick:M,disabled:x,children:"Update"})]})}},186:function(e,t,r){r.d(t,{Z:function(){return i}});var n=r(791),s="Input_main_input__392n6",a=r(184),i=n.forwardRef((function(e,t){return(0,a.jsxs)("div",{className:"mb-3 ".concat(s),children:[(0,a.jsx)("label",{htmlFor:e.name,className:"form-label",children:e.label}),(0,a.jsx)("input",{onBlur:e.onBlur,onChange:e.onChange,ref:t,type:e.type,className:"form-control ".concat(e.cssClasses),id:e.name,defaultValue:e.defaultValue,placeholder:e.placeholder,accept:e.accept})]})}))},830:function(e,t,r){r.d(t,{Z:function(){return a}});r(791);var n="Wrapper_wrapper__eIb1h",s=r(184),a=function(e){return(0,s.jsx)("div",{className:n,children:e.children})}},683:function(e,t,r){function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function s(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t=1;t {\r\n //-----------------------------------------------------------------------------------------------------------------------------hooks-part\r\n const logCtx = useContext(AuthContext);\r\n const navigation = useNavigate();\r\n const refTitle = useRef(\"\");\r\n const refDescription = useRef(\"\");\r\n const refAddress = useRef(\"\");\r\n const pid = useParams().picId;\r\n const [isLoading, setIsLoading] = useState(true);\r\n const [error, setError] = useState(false);\r\n const [picture, setPicture] = useState({});\r\n const [successAlertVisibility, setSuccessAlertVisibility] = useState(false);\r\n const [inputValidation, setInputValidation] = useState({\r\n titleCssClasses: \"\",\r\n descriptionCssClasses: \"\",\r\n wrongInputsAlertVisibility: false,\r\n wrongInputsAlertMessage: \"\",\r\n });\r\n \r\n //-----------------------------------------------------------------------------------------------------------------------------fetching-data\r\n useEffect(() => {\r\n const fetchPicture = async () => {\r\n try {\r\n const response = await fetch(\r\n `${process.env.REACT_APP_BACKEND_URL}pictures/${pid}`\r\n );\r\n if (response.ok) {\r\n const data = await response.json();\r\n if(data.picture.creator_id !== logCtx.userId){\r\n navigation(\"/\");\r\n }\r\n setPicture(data.picture);\r\n } else {\r\n setError(true);\r\n }\r\n setIsLoading(false);\r\n } catch (error) {\r\n setIsLoading(false);\r\n setError(true);\r\n }\r\n };\r\n fetchPicture();\r\n }, []);\r\n //-----------------------------------------------------------------------------------------------------------------------------errorHandler\r\n const errorHandler = (errorMessage) => {\r\n setIsLoading(false);\r\n setInputValidation((prevInputValidation) => ({\r\n ...prevInputValidation,\r\n wrongInputsAlertVisibility: true,\r\n wrongInputsAlertMessage: errorMessage,\r\n }));\r\n setTimeout(() => {\r\n setInputValidation((prevInputValidation) => ({\r\n ...prevInputValidation,\r\n wrongInputsAlertVisibility: false,\r\n }));\r\n }, 5000);\r\n };\r\n //-----------------------------------------------------------------------------------------------------------------------------onSubmitHandler\r\n const onSubmitHandler = async () => {\r\n try {\r\n if (\r\n refTitle.current.value.trim().length >= 3 &&\r\n refDescription.current.value.trim().length >= 10\r\n ) {\r\n const response = await fetch(\r\n `${process.env.REACT_APP_BACKEND_URL}pictures/${pid}`,\r\n {\r\n method: \"PATCH\",\r\n body: JSON.stringify({\r\n title: refTitle.current.value,\r\n description: refDescription.current.value,\r\n address: refAddress.current.value,\r\n }),\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `Bearer ${logCtx.token}`\r\n },\r\n }\r\n );\r\n const data = await response.json();\r\n\r\n if (response.ok) {\r\n // this response give us the new updated picture\r\n setSuccessAlertVisibility(true);\r\n setTimeout(() => {\r\n setSuccessAlertVisibility(false);\r\n }, 5000);\r\n //reset the form & the css classes of validation\r\n setInputValidation({\r\n titleCssClasses: \"\",\r\n descriptionCssClasses: \"\",\r\n wrongInputsAlertVisibility: false,\r\n wrongInputsAlertMessage: \"\",\r\n });\r\n } else {\r\n //error from backend validation...\r\n errorHandler(data.message);\r\n console.log(data); // failed to update the pic try again...\r\n }\r\n } else {\r\n //error from frontend validation...\r\n errorHandler(\"Please Enter a Valid Inputs Value\");\r\n }\r\n } catch (error) {\r\n errorHandler(\"Failed to fetch\");\r\n console.log(error);\r\n }\r\n };\r\n //-----------------------------------------------------------------------------------------------------------------------------return(JSX)\r\n return error ? (\r\n
\r\n \r\n There is no response backed from the server\r\n
\r\n ) : isLoading ? (\r\n \r\n Loading...\r\n \r\n ) : (\r\n \r\n {inputValidation.wrongInputsAlertVisibility && (\r\n
\r\n \r\n {inputValidation.wrongInputsAlertMessage}\r\n
\r\n )}\r\n {successAlertVisibility && (\r\n
\r\n \r\n Picture Updated Successfully\r\n
\r\n )}\r\n \r\n {\r\n setInputValidation((prevCssClasses) => ({\r\n ...prevCssClasses,\r\n titleCssClasses:\r\n refTitle.current.value.trim().length >= 3\r\n ? \"is-valid\"\r\n : \"is-invalid\",\r\n }));\r\n }}\r\n />\r\n {\r\n setInputValidation((prevCssClasses) => ({\r\n ...prevCssClasses,\r\n descriptionCssClasses:\r\n refDescription.current.value.trim().length >= 10\r\n ? \"is-valid\"\r\n : \"is-invalid\",\r\n }));\r\n }}\r\n />\r\n \r\n \r\n Update\r\n \r\n
\r\n );\r\n};\r\n\r\nexport default UpdatePictures;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"main_input\":\"Input_main_input__392n6\"};","import React from \"react\";\r\nimport classes from \"./Input.module.css\";\r\n\r\nconst Input = React.forwardRef((props, ref) => {\r\n return (\r\n
\r\n \r\n \r\n
\r\n );\r\n});\r\n\r\nexport default Input;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"wrapper\":\"Wrapper_wrapper__eIb1h\"};","import React from 'react';\r\n\r\nimport classes from \"./Wrapper.module.css\";\r\n\r\n\r\nconst Wrapper = (props) => {\r\n return (\r\n
{props.children}
\r\n );\r\n}\r\n\r\nexport default Wrapper;","export default function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}","import defineProperty from \"./defineProperty.js\";\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n enumerableOnly && (symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n })), keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nexport default function _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = null != arguments[i] ? arguments[i] : {};\n i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {\n defineProperty(target, key, source[key]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n\n return target;\n}"],"names":["logCtx","useContext","AuthContext","navigation","useNavigate","refTitle","useRef","refDescription","refAddress","pid","useParams","picId","useState","isLoading","setIsLoading","error","setError","picture","setPicture","successAlertVisibility","setSuccessAlertVisibility","titleCssClasses","descriptionCssClasses","wrongInputsAlertVisibility","wrongInputsAlertMessage","inputValidation","setInputValidation","useEffect","fetchPicture","fetch","process","response","ok","json","data","creator_id","userId","errorHandler","errorMessage","prevInputValidation","setTimeout","onSubmitHandler","current","value","trim","length","method","body","JSON","stringify","title","description","address","headers","Authorization","token","message","console","log","className","role","style","width","height","margin","Wrapper","classes","src","image_url","alt","Input","ref","type","name","placeholder","label","defaultValue","cssClasses","onBlur","prevCssClasses","onClick","disabled","React","props","htmlFor","onChange","id","accept","children","_defineProperty","obj","key","Object","defineProperty","enumerable","configurable","writable","ownKeys","object","enumerableOnly","keys","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","push","apply","_objectSpread2","target","i","arguments","source","forEach","getOwnPropertyDescriptors","defineProperties"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"static/js/776.70ba6886.chunk.js","mappings":"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","sources":["webpack://frontend/./src/pictures/pages/UpdatePictures.module.css?28ea","pictures/pages/UpdatePictures.js","webpack://frontend/./src/shared/components/UIElements/Input.module.css?b647","shared/components/UIElements/Input.js","webpack://frontend/./src/shared/components/UIElements/Wrapper.module.css?08b1","shared/components/UIElements/Wrapper.js","../node_modules/@babel/runtime/helpers/esm/defineProperty.js","../node_modules/@babel/runtime/helpers/esm/objectSpread2.js"],"sourcesContent":["// extracted by mini-css-extract-plugin\nexport default {\"img\":\"UpdatePictures_img__6untW\"};","import React, { useState, useEffect, useRef, useContext } from \"react\";\r\nimport { useParams, useNavigate } from \"react-router-dom\";\r\n\r\nimport { AuthContext } from \"../../shared/context/auth-context.js\";\r\nimport Wrapper from \"../../shared/components/UIElements/Wrapper.js\";\r\nimport Input from \"../../shared/components/UIElements/Input.js\";\r\nimport classes from \"./UpdatePictures.module.css\";\r\n\r\nconst UpdatePictures = () => {\r\n //-----------------------------------------------------------------------------------------------------------------------------hooks-part\r\n const logCtx = useContext(AuthContext);\r\n const navigation = useNavigate();\r\n const refTitle = useRef(\"\");\r\n const refDescription = useRef(\"\");\r\n const refAddress = useRef(\"\");\r\n const pid = useParams().picId;\r\n const [isLoading, setIsLoading] = useState(true);\r\n const [error, setError] = useState(false);\r\n const [picture, setPicture] = useState({});\r\n const [successAlertVisibility, setSuccessAlertVisibility] = useState(false);\r\n const [inputValidation, setInputValidation] = useState({\r\n titleCssClasses: \"\",\r\n descriptionCssClasses: \"\",\r\n wrongInputsAlertVisibility: false,\r\n wrongInputsAlertMessage: \"\",\r\n });\r\n \r\n //-----------------------------------------------------------------------------------------------------------------------------fetching-data\r\n useEffect(() => {\r\n const fetchPicture = async () => {\r\n try {\r\n const response = await fetch(\r\n `${process.env.REACT_APP_BACKEND_URL}pictures/${pid}`\r\n );\r\n if (response.ok) {\r\n const data = await response.json();\r\n if(data.picture.creator_id !== logCtx.userId){\r\n navigation(\"/\");\r\n }\r\n setPicture(data.picture);\r\n } else {\r\n setError(true);\r\n }\r\n setIsLoading(false);\r\n } catch (error) {\r\n setIsLoading(false);\r\n setError(true);\r\n }\r\n };\r\n fetchPicture();\r\n }, []);\r\n //-----------------------------------------------------------------------------------------------------------------------------errorHandler\r\n const errorHandler = (errorMessage) => {\r\n setIsLoading(false);\r\n setInputValidation((prevInputValidation) => ({\r\n ...prevInputValidation,\r\n wrongInputsAlertVisibility: true,\r\n wrongInputsAlertMessage: errorMessage,\r\n }));\r\n setTimeout(() => {\r\n setInputValidation((prevInputValidation) => ({\r\n ...prevInputValidation,\r\n wrongInputsAlertVisibility: false,\r\n }));\r\n }, 5000);\r\n };\r\n //-----------------------------------------------------------------------------------------------------------------------------onSubmitHandler\r\n const onSubmitHandler = async () => {\r\n try {\r\n if (\r\n refTitle.current.value.trim().length >= 3 &&\r\n refDescription.current.value.trim().length >= 10\r\n ) {\r\n const response = await fetch(\r\n `${process.env.REACT_APP_BACKEND_URL}pictures/${pid}`,\r\n {\r\n method: \"PATCH\",\r\n body: JSON.stringify({\r\n title: refTitle.current.value,\r\n description: refDescription.current.value,\r\n address: refAddress.current.value,\r\n }),\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `Bearer ${logCtx.token}`\r\n },\r\n }\r\n );\r\n const data = await response.json();\r\n\r\n if (response.ok) {\r\n // this response give us the new updated picture\r\n setSuccessAlertVisibility(true);\r\n setTimeout(() => {\r\n setSuccessAlertVisibility(false);\r\n }, 5000);\r\n //reset the form & the css classes of validation\r\n setInputValidation({\r\n titleCssClasses: \"\",\r\n descriptionCssClasses: \"\",\r\n wrongInputsAlertVisibility: false,\r\n wrongInputsAlertMessage: \"\",\r\n });\r\n } else {\r\n //error from backend validation...\r\n errorHandler(data.message);\r\n console.log(data); // failed to update the pic try again...\r\n }\r\n } else {\r\n //error from frontend validation...\r\n errorHandler(\"Please Enter a Valid Inputs Value\");\r\n }\r\n } catch (error) {\r\n errorHandler(\"Failed to fetch\");\r\n console.log(error);\r\n }\r\n };\r\n //-----------------------------------------------------------------------------------------------------------------------------return(JSX)\r\n return error ? (\r\n
\r\n \r\n There is no response backed from the server\r\n
\r\n ) : isLoading ? (\r\n \r\n Loading...\r\n \r\n ) : (\r\n \r\n {inputValidation.wrongInputsAlertVisibility && (\r\n
\r\n \r\n {inputValidation.wrongInputsAlertMessage}\r\n
\r\n )}\r\n {successAlertVisibility && (\r\n
\r\n \r\n Picture Updated Successfully\r\n
\r\n )}\r\n \r\n {\r\n setInputValidation((prevCssClasses) => ({\r\n ...prevCssClasses,\r\n titleCssClasses:\r\n refTitle.current.value.trim().length >= 3\r\n ? \"is-valid\"\r\n : \"is-invalid\",\r\n }));\r\n }}\r\n />\r\n {\r\n setInputValidation((prevCssClasses) => ({\r\n ...prevCssClasses,\r\n descriptionCssClasses:\r\n refDescription.current.value.trim().length >= 10\r\n ? \"is-valid\"\r\n : \"is-invalid\",\r\n }));\r\n }}\r\n />\r\n \r\n \r\n Update\r\n \r\n
\r\n );\r\n};\r\n\r\nexport default UpdatePictures;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"main_input\":\"Input_main_input__392n6\"};","import React from \"react\";\r\nimport classes from \"./Input.module.css\";\r\n\r\nconst Input = React.forwardRef((props, ref) => {\r\n return (\r\n
\r\n \r\n \r\n
\r\n );\r\n});\r\n\r\nexport default Input;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"wrapper\":\"Wrapper_wrapper__eIb1h\"};","import React from 'react';\r\n\r\nimport classes from \"./Wrapper.module.css\";\r\n\r\n\r\nconst Wrapper = (props) => {\r\n return (\r\n
{props.children}
\r\n );\r\n}\r\n\r\nexport default Wrapper;","export default function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}","import defineProperty from \"./defineProperty.js\";\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n enumerableOnly && (symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n })), keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nexport default function _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = null != arguments[i] ? arguments[i] : {};\n i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {\n defineProperty(target, key, source[key]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n\n return target;\n}"],"names":["logCtx","useContext","AuthContext","navigation","useNavigate","refTitle","useRef","refDescription","refAddress","pid","useParams","picId","useState","isLoading","setIsLoading","error","setError","picture","setPicture","successAlertVisibility","setSuccessAlertVisibility","titleCssClasses","descriptionCssClasses","wrongInputsAlertVisibility","wrongInputsAlertMessage","inputValidation","setInputValidation","useEffect","fetchPicture","fetch","process","response","ok","json","data","creator_id","userId","errorHandler","errorMessage","prevInputValidation","setTimeout","onSubmitHandler","current","value","trim","length","method","body","JSON","stringify","title","description","address","headers","Authorization","token","message","console","log","className","role","style","width","height","margin","Wrapper","classes","src","image_url","alt","Input","ref","type","name","placeholder","label","defaultValue","cssClasses","onBlur","prevCssClasses","onClick","disabled","React","props","htmlFor","onChange","id","accept","children","_defineProperty","obj","key","Object","defineProperty","enumerable","configurable","writable","ownKeys","object","enumerableOnly","keys","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","push","apply","_objectSpread2","target","i","arguments","source","forEach","getOwnPropertyDescriptors","defineProperties"],"sourceRoot":""} \ No newline at end of file diff --git a/backend/public/static/js/776.b2d59891.chunk.js b/backend/public/static/js/776.b2d59891.chunk.js deleted file mode 100644 index cfa0e3e..0000000 --- a/backend/public/static/js/776.b2d59891.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunkfrontend=self.webpackChunkfrontend||[]).push([[776],{776:function(e,t,r){r.r(t),r.d(t,{default:function(){return b}});var n=r(683),s=r(861),a=r(152),i=r(757),c=r.n(i),l=r(791),u=r(871),o=r(108),p=r(830),d=r(186),f="UpdatePictures_img__6untW",h=r(184),b=function(){var e=(0,l.useContext)(o.V),t=(0,u.s0)(),r=(0,l.useRef)(""),i=(0,l.useRef)(""),b=(0,l.useRef)(""),m=(0,u.UO)().picId,g=(0,l.useState)(!0),v=(0,a.Z)(g,2),x=v[0],j=v[1],y=(0,l.useState)(!1),C=(0,a.Z)(y,2),w=C[0],Z=C[1],O=(0,l.useState)({}),k=(0,a.Z)(O,2),P=k[0],N=k[1],I=(0,l.useState)(!1),V=(0,a.Z)(I,2),A=V[0],_=V[1],S=(0,l.useState)({titleCssClasses:"",descriptionCssClasses:"",wrongInputsAlertVisibility:!1,wrongInputsAlertMessage:""}),T=(0,a.Z)(S,2),B=T[0],D=T[1];(0,l.useEffect)((function(){var r=function(){var r=(0,s.Z)(c().mark((function r(){var n,s;return c().wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return r.prev=0,r.next=3,fetch("".concat("http://192.168.1.155:4000/api/","pictures/").concat(m));case 3:if(!(n=r.sent).ok){r.next=12;break}return r.next=7,n.json();case 7:(s=r.sent).picture.creator_id!==e.userId&&t("/"),N(s.picture),r.next=13;break;case 12:Z(!0);case 13:j(!1),r.next=20;break;case 16:r.prev=16,r.t0=r.catch(0),j(!1),Z(!0);case 20:case"end":return r.stop()}}),r,null,[[0,16]])})));return function(){return r.apply(this,arguments)}}();r()}),[]);var E=function(e){j(!1),D((function(t){return(0,n.Z)((0,n.Z)({},t),{},{wrongInputsAlertVisibility:!0,wrongInputsAlertMessage:e})})),setTimeout((function(){D((function(e){return(0,n.Z)((0,n.Z)({},e),{},{wrongInputsAlertVisibility:!1})}))}),5e3)},M=function(){var t=(0,s.Z)(c().mark((function t(){var n,s;return c().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(t.prev=0,!(r.current.value.trim().length>=3&&i.current.value.trim().length>=10)){t.next=11;break}return t.next=4,fetch("".concat("http://192.168.1.155:4000/api/","pictures/").concat(m),{method:"PATCH",body:JSON.stringify({title:r.current.value,description:i.current.value,address:b.current.value}),headers:{"Content-Type":"application/json",Authorization:"Bearer ".concat(e.token)}});case 4:return n=t.sent,t.next=7,n.json();case 7:s=t.sent,n.ok?(_(!0),setTimeout((function(){_(!1)}),5e3),D({titleCssClasses:"",descriptionCssClasses:"",wrongInputsAlertVisibility:!1,wrongInputsAlertMessage:""})):(E(s.message),console.log(s)),t.next=12;break;case 11:E("Please Enter a Valid Inputs Value");case 12:t.next=18;break;case 14:t.prev=14,t.t0=t.catch(0),E("Failed to fetch"),console.log(t.t0);case 18:case"end":return t.stop()}}),t,null,[[0,14]])})));return function(){return t.apply(this,arguments)}}();return w?(0,h.jsxs)("div",{className:"alert alert-danger",role:"alert",children:[(0,h.jsx)("i",{className:"bi bi-exclamation-octagon-fill m-1"}),"There is no response backed from the server"]}):x?(0,h.jsx)("div",{className:"spinner-border",style:{width:"3rem",height:"3rem",margin:"0 48vw"},role:"status",children:(0,h.jsx)("span",{className:"visually-hidden",children:"Loading..."})}):(0,h.jsxs)(p.Z,{children:[B.wrongInputsAlertVisibility&&(0,h.jsxs)("div",{className:"alert alert-danger",role:"alert",children:[(0,h.jsx)("i",{className:"bi bi-exclamation-octagon-fill m-1"}),B.wrongInputsAlertMessage]}),A&&(0,h.jsxs)("div",{className:"alert alert-success",role:"alert",children:[(0,h.jsx)("i",{className:"bi bi-send-check m-1"}),"Picture Updated Successfully"]}),(0,h.jsx)("img",{className:f,src:"".concat("http://192.168.1.155:4000/"+P.image_url),alt:P.description}),(0,h.jsx)(d.Z,{ref:r,type:"text",name:"title",placeholder:"picture title...",label:"Picture Title : ",defaultValue:P.title,cssClasses:B.titleCssClasses,onBlur:function(){D((function(e){return(0,n.Z)((0,n.Z)({},e),{},{titleCssClasses:r.current.value.trim().length>=3?"is-valid":"is-invalid"})}))}}),(0,h.jsx)(d.Z,{ref:i,type:"text",name:"description",placeholder:"picture description...",label:"Picture Description : ",defaultValue:P.description,cssClasses:B.descriptionCssClasses,onBlur:function(){D((function(e){return(0,n.Z)((0,n.Z)({},e),{},{descriptionCssClasses:i.current.value.trim().length>=10?"is-valid":"is-invalid"})}))}}),(0,h.jsx)(d.Z,{ref:b,type:"text",name:"address",placeholder:"picture address...",label:"Picture Address : ",defaultValue:P.address}),(0,h.jsx)("button",{className:"btn btn-info",onClick:M,disabled:x,children:"Update"})]})}},186:function(e,t,r){r.d(t,{Z:function(){return i}});var n=r(791),s="Input_main_input__392n6",a=r(184),i=n.forwardRef((function(e,t){return(0,a.jsxs)("div",{className:"mb-3 ".concat(s),children:[(0,a.jsx)("label",{htmlFor:e.name,className:"form-label",children:e.label}),(0,a.jsx)("input",{onBlur:e.onBlur,onChange:e.onChange,ref:t,type:e.type,className:"form-control ".concat(e.cssClasses),id:e.name,defaultValue:e.defaultValue,placeholder:e.placeholder,accept:e.accept})]})}))},830:function(e,t,r){r.d(t,{Z:function(){return a}});r(791);var n="Wrapper_wrapper__eIb1h",s=r(184),a=function(e){return(0,s.jsx)("div",{className:n,children:e.children})}},683:function(e,t,r){function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function s(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t=1;t=6&&s.current.value.trim().includes("@")&&i.current.value.length>=6&&void 0!==b.current.files[0])){r.next=18;break}return(t=new FormData).append("name",n.current.value),t.append("email",s.current.value),t.append("password",i.current.value),t.append("image",b.current.files[0]),r.next=10,fetch("".concat("http://192.168.1.155:4000/api/","users/signup"),{method:"POST",body:t,headers:{}});case 10:return a=r.sent,r.next=13,a.json();case 13:u=r.sent,w(!1),a.ok?(e.login(u.userId,u.userToken,u.expirationTime),h("/")):(P(u.message),console.log(u)),r.next=19;break;case 18:P("Please Enter a Valid Inputs Value");case 19:r.next=25;break;case 21:r.prev=21,r.t0=r.catch(1),P("Failed to fetch"),console.log(r.t0);case 25:case"end":return r.stop()}}),r,null,[[1,21]])})));return function(){return t.apply(this,arguments)}}();return(0,g.jsxs)(d.Z,{children:[Z.wrongInputsAlertVisibility&&(0,g.jsxs)("div",{className:"alert alert-danger",role:"alert",children:[(0,g.jsx)("i",{className:"bi bi-exclamation-octagon-fill m-1"}),Z.wrongInputsAlertMessage]}),(0,g.jsx)(f.Z,{ref:n,type:"text",name:"name",placeholder:"your name...",label:"User Name : ",cssClasses:Z.nameCssClasses,onBlur:function(){O((function(e){return(0,t.Z)((0,t.Z)({},e),{},{nameCssClasses:n.current.value.trim().length>=6?"is-valid":"is-invalid"})}))}}),(0,g.jsx)(f.Z,{ref:s,type:"email",name:"email",placeholder:"your email...",label:"User Email : ",cssClasses:Z.emailCssClasses,onBlur:function(){O((function(e){return(0,t.Z)((0,t.Z)({},e),{},{emailCssClasses:s.current.value.trim().includes("@")?"is-valid":"is-invalid"})}))}}),(0,g.jsx)(f.Z,{ref:i,type:"password",name:"password",placeholder:"your password...",label:"User Password : ",cssClasses:Z.passwordCssClasses,onBlur:function(){O((function(e){return(0,t.Z)((0,t.Z)({},e),{},{passwordCssClasses:i.current.value.trim().length>=6?"is-valid":"is-invalid"})}))}}),(0,g.jsx)(f.Z,{ref:b,type:"file",name:"image",accept:".jpg,.png,.jpeg",label:"User Picture : ",cssClasses:Z.imageCssClasses,onChange:function(){O((function(e){return(0,t.Z)((0,t.Z)({},e),{},{imageCssClasses:void 0===b.current.files[0]?"is-invalid":"is-valid"})}))}}),(0,g.jsxs)("div",{className:m,children:[(0,g.jsx)("button",{className:"btn btn-info",onClick:k,disabled:j,children:j?(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)("span",{className:"spinner-border spinner-border-sm",role:"status","aria-hidden":"true"}),"Loading..."," "]}):"signup"}),(0,g.jsxs)("p",{children:["You have an account? ",(0,g.jsx)(c.rU,{to:"/login",children:"Sign In"})]})]})]})}},683:function(e,n,s){function r(e,n,s){return n in e?Object.defineProperty(e,n,{value:s,enumerable:!0,configurable:!0,writable:!0}):e[n]=s,e}function t(e,n){var s=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),s.push.apply(s,r)}return s}function a(e){for(var n=1;n=6&&s.current.value.trim().includes("@")&&l.current.value.length>=6&&void 0!==b.current.files[0])){r.next=18;break}return(t=new FormData).append("name",n.current.value),t.append("email",s.current.value),t.append("password",l.current.value),t.append("image",b.current.files[0]),r.next=10,fetch("".concat("http://localhost:4000/api/","users/signup"),{method:"POST",body:t,headers:{}});case 10:return a=r.sent,r.next=13,a.json();case 13:c=r.sent,w(!1),a.ok?(e.login(c.userId,c.userToken,c.expirationTime),h("/")):(P(c.message),console.log(c)),r.next=19;break;case 18:P("Please Enter a Valid Inputs Value");case 19:r.next=25;break;case 21:r.prev=21,r.t0=r.catch(1),P("Failed to fetch"),console.log(r.t0);case 25:case"end":return r.stop()}}),r,null,[[1,21]])})));return function(){return t.apply(this,arguments)}}();return(0,g.jsxs)(d.Z,{children:[Z.wrongInputsAlertVisibility&&(0,g.jsxs)("div",{className:"alert alert-danger",role:"alert",children:[(0,g.jsx)("i",{className:"bi bi-exclamation-octagon-fill m-1"}),Z.wrongInputsAlertMessage]}),(0,g.jsx)(f.Z,{ref:n,type:"text",name:"name",placeholder:"your name...",label:"User Name : ",cssClasses:Z.nameCssClasses,onBlur:function(){O((function(e){return(0,t.Z)((0,t.Z)({},e),{},{nameCssClasses:n.current.value.trim().length>=6?"is-valid":"is-invalid"})}))}}),(0,g.jsx)(f.Z,{ref:s,type:"email",name:"email",placeholder:"your email...",label:"User Email : ",cssClasses:Z.emailCssClasses,onBlur:function(){O((function(e){return(0,t.Z)((0,t.Z)({},e),{},{emailCssClasses:s.current.value.trim().includes("@")?"is-valid":"is-invalid"})}))}}),(0,g.jsx)(f.Z,{ref:l,type:"password",name:"password",placeholder:"your password...",label:"User Password : ",cssClasses:Z.passwordCssClasses,onBlur:function(){O((function(e){return(0,t.Z)((0,t.Z)({},e),{},{passwordCssClasses:l.current.value.trim().length>=6?"is-valid":"is-invalid"})}))}}),(0,g.jsx)(f.Z,{ref:b,type:"file",name:"image",accept:".jpg,.png,.jpeg",label:"User Picture : ",cssClasses:Z.imageCssClasses,onChange:function(){O((function(e){return(0,t.Z)((0,t.Z)({},e),{},{imageCssClasses:void 0===b.current.files[0]?"is-invalid":"is-valid"})}))}}),(0,g.jsxs)("div",{className:m,children:[(0,g.jsx)("button",{className:"btn btn-info",onClick:k,disabled:j,children:j?(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)("span",{className:"spinner-border spinner-border-sm",role:"status","aria-hidden":"true"}),"Loading..."," "]}):"signup"}),(0,g.jsxs)("p",{children:["You have an account? ",(0,g.jsx)(o.rU,{to:"/login",children:"Sign In"})]})]})]})}},683:function(e,n,s){function r(e,n,s){return n in e?Object.defineProperty(e,n,{value:s,enumerable:!0,configurable:!0,writable:!0}):e[n]=s,e}function t(e,n){var s=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),s.push.apply(s,r)}return s}function a(e){for(var n=1;n {\r\n return (\r\n
\r\n \r\n \r\n
\r\n );\r\n});\r\n\r\nexport default Input;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"wrapper\":\"Wrapper_wrapper__eIb1h\"};","import React from 'react';\r\n\r\nimport classes from \"./Wrapper.module.css\";\r\n\r\n\r\nconst Wrapper = (props) => {\r\n return (\r\n
{props.children}
\r\n );\r\n}\r\n\r\nexport default Wrapper;","// extracted by mini-css-extract-plugin\nexport default {\"signup\":\"SignUp_signup__wRO9+\"};","import React, { useRef, useState, useContext } from \"react\";\r\nimport { Link, useNavigate } from \"react-router-dom\";\r\n\r\nimport { AuthContext } from \"../../shared/context/auth-context\";\r\nimport Wrapper from \"../../shared/components/UIElements/Wrapper\";\r\nimport Input from \"../../shared/components/UIElements/Input\";\r\n\r\n\r\nimport classes from \"./SignUp.module.css\";\r\n\r\nconst SignUp = () => {\r\n //-----------------------------------------------------------------------------------------------------------------------------hooks-part\r\n const logCtx = useContext(AuthContext); console.log(logCtx);\r\n const refName = useRef(\"\");\r\n const refEmail = useRef(\"\");\r\n const refPassword = useRef(\"\");\r\n const refImage = useRef();\r\n const navigate = useNavigate();\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [inputValidation, setInputValidation] = useState({\r\n nameCssClasses: \"\",\r\n emailCssClasses: \"\",\r\n passwordCssClasses: \"\",\r\n imageCssClasses: \"\",\r\n wrongInputsAlertVisibility: false,\r\n wrongInputsAlertMessage: \"\",\r\n });\r\n //-----------------------------------------------------------------------------------------------------------------------------errorHandler\r\n const errorHandler = (errorMessage) => {\r\n setIsLoading(false);\r\n setInputValidation((prevInputValidation) => ({\r\n ...prevInputValidation,\r\n wrongInputsAlertVisibility: true,\r\n wrongInputsAlertMessage: errorMessage,\r\n }));\r\n setTimeout(() => {\r\n setInputValidation((prevInputValidation) => ({\r\n ...prevInputValidation,\r\n wrongInputsAlertVisibility: false,\r\n }));\r\n }, 5000);\r\n };\r\n //-----------------------------------------------------------------------------------------------------------------------------onSubmitHandler\r\n const onSubmitHandler = async () => {\r\n setIsLoading(true);\r\n try {\r\n if (\r\n refName.current.value.trim().length >= 6 &&\r\n refEmail.current.value.trim().includes(\"@\") &&\r\n refPassword.current.value.length >= 6 &&\r\n refImage.current.files[0] !== undefined\r\n ) {\r\n const formData = new FormData();\r\n formData.append(\"name\", refName.current.value);\r\n formData.append(\"email\", refEmail.current.value);\r\n formData.append(\"password\", refPassword.current.value);\r\n formData.append(\"image\", refImage.current.files[0]);\r\n const response = await fetch(\r\n `${process.env.REACT_APP_BACKEND_URL}users/signup`,\r\n {\r\n method: \"POST\",\r\n body: formData,\r\n headers: {},\r\n }\r\n );\r\n const data = await response.json();\r\n setIsLoading(false);\r\n if (response.ok) {\r\n // if the user signup successfully we should store the userId (data.userId) & the userToken (data.userToken) in the Context \r\n logCtx.login(data.userId, data.userToken, data.expirationTime);\r\n // we should redirect programmatically to the home page...\r\n navigate(\"/\");\r\n } else {\r\n //error from backend validation...\r\n errorHandler(data.message);\r\n console.log(data); // failed to signup the user try again...\r\n }\r\n } else {\r\n //error from frontend validation...\r\n errorHandler(\"Please Enter a Valid Inputs Value\");\r\n }\r\n } catch (error) {\r\n errorHandler(\"Failed to fetch\");\r\n console.log(error);\r\n }\r\n };\r\n //-----------------------------------------------------------------------------------------------------------------------------return(JSX)\r\n return (\r\n \r\n {inputValidation.wrongInputsAlertVisibility && (\r\n
\r\n \r\n {inputValidation.wrongInputsAlertMessage}\r\n
\r\n )}\r\n {\r\n setInputValidation((prevCssClasses) => ({\r\n ...prevCssClasses,\r\n nameCssClasses:\r\n refName.current.value.trim().length >= 6 ? \"is-valid\" : \"is-invalid\",\r\n }));\r\n }}\r\n />\r\n {\r\n setInputValidation((prevCssClasses) => ({\r\n ...prevCssClasses,\r\n emailCssClasses: refEmail.current.value.trim().includes(\"@\")\r\n ? \"is-valid\"\r\n : \"is-invalid\",\r\n }));\r\n }}\r\n />\r\n {\r\n setInputValidation((prevCssClasses) => ({\r\n ...prevCssClasses,\r\n passwordCssClasses:\r\n refPassword.current.value.trim().length >= 6 ? \"is-valid\" : \"is-invalid\",\r\n }));\r\n }}\r\n />\r\n {\r\n setInputValidation((prevCssClasses) => ({\r\n ...prevCssClasses,\r\n imageCssClasses:\r\n refImage.current.files[0] === undefined\r\n ? \"is-invalid\"\r\n : \"is-valid\",\r\n }));\r\n }}\r\n />\r\n
\r\n \r\n {isLoading ? (\r\n <>\r\n \r\n Loading...{\" \"}\r\n \r\n ) : \"signup\"}\r\n \r\n

\r\n You have an account? Sign In\r\n

\r\n
\r\n
\r\n );\r\n};\r\nexport default SignUp;\r\n","export default function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}","import defineProperty from \"./defineProperty.js\";\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n enumerableOnly && (symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n })), keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nexport default function _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = null != arguments[i] ? arguments[i] : {};\n i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {\n defineProperty(target, key, source[key]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n\n return target;\n}"],"names":["React","props","ref","className","classes","htmlFor","name","label","onBlur","onChange","type","cssClasses","id","defaultValue","placeholder","accept","children","logCtx","useContext","AuthContext","console","log","refName","useRef","refEmail","refPassword","refImage","navigate","useNavigate","useState","isLoading","setIsLoading","nameCssClasses","emailCssClasses","passwordCssClasses","imageCssClasses","wrongInputsAlertVisibility","wrongInputsAlertMessage","inputValidation","setInputValidation","errorHandler","errorMessage","prevInputValidation","setTimeout","onSubmitHandler","current","value","trim","length","includes","undefined","files","formData","FormData","append","fetch","process","method","body","headers","response","json","data","ok","login","userId","userToken","expirationTime","message","Wrapper","role","Input","prevCssClasses","onClick","disabled","to","_defineProperty","obj","key","Object","defineProperty","enumerable","configurable","writable","ownKeys","object","enumerableOnly","keys","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","push","apply","_objectSpread2","target","i","arguments","source","forEach","getOwnPropertyDescriptors","defineProperties"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"static/js/896.e7df689b.chunk.js","mappings":"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","sources":["webpack://frontend/./src/shared/components/UIElements/Input.module.css?b647","shared/components/UIElements/Input.js","webpack://frontend/./src/shared/components/UIElements/Wrapper.module.css?08b1","shared/components/UIElements/Wrapper.js","webpack://frontend/./src/users/pages/SignUp.module.css?5b24","users/pages/SignUp.js","../node_modules/@babel/runtime/helpers/esm/defineProperty.js","../node_modules/@babel/runtime/helpers/esm/objectSpread2.js"],"sourcesContent":["// extracted by mini-css-extract-plugin\nexport default {\"main_input\":\"Input_main_input__392n6\"};","import React from \"react\";\r\nimport classes from \"./Input.module.css\";\r\n\r\nconst Input = React.forwardRef((props, ref) => {\r\n return (\r\n
\r\n \r\n \r\n
\r\n );\r\n});\r\n\r\nexport default Input;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"wrapper\":\"Wrapper_wrapper__eIb1h\"};","import React from 'react';\r\n\r\nimport classes from \"./Wrapper.module.css\";\r\n\r\n\r\nconst Wrapper = (props) => {\r\n return (\r\n
{props.children}
\r\n );\r\n}\r\n\r\nexport default Wrapper;","// extracted by mini-css-extract-plugin\nexport default {\"signup\":\"SignUp_signup__wRO9+\"};","import React, { useRef, useState, useContext } from \"react\";\r\nimport { Link, useNavigate } from \"react-router-dom\";\r\n\r\nimport { AuthContext } from \"../../shared/context/auth-context\";\r\nimport Wrapper from \"../../shared/components/UIElements/Wrapper\";\r\nimport Input from \"../../shared/components/UIElements/Input\";\r\n\r\n\r\nimport classes from \"./SignUp.module.css\";\r\n\r\nconst SignUp = () => {\r\n //-----------------------------------------------------------------------------------------------------------------------------hooks-part\r\n const logCtx = useContext(AuthContext); console.log(logCtx);\r\n const refName = useRef(\"\");\r\n const refEmail = useRef(\"\");\r\n const refPassword = useRef(\"\");\r\n const refImage = useRef();\r\n const navigate = useNavigate();\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [inputValidation, setInputValidation] = useState({\r\n nameCssClasses: \"\",\r\n emailCssClasses: \"\",\r\n passwordCssClasses: \"\",\r\n imageCssClasses: \"\",\r\n wrongInputsAlertVisibility: false,\r\n wrongInputsAlertMessage: \"\",\r\n });\r\n //-----------------------------------------------------------------------------------------------------------------------------errorHandler\r\n const errorHandler = (errorMessage) => {\r\n setIsLoading(false);\r\n setInputValidation((prevInputValidation) => ({\r\n ...prevInputValidation,\r\n wrongInputsAlertVisibility: true,\r\n wrongInputsAlertMessage: errorMessage,\r\n }));\r\n setTimeout(() => {\r\n setInputValidation((prevInputValidation) => ({\r\n ...prevInputValidation,\r\n wrongInputsAlertVisibility: false,\r\n }));\r\n }, 5000);\r\n };\r\n //-----------------------------------------------------------------------------------------------------------------------------onSubmitHandler\r\n const onSubmitHandler = async () => {\r\n setIsLoading(true);\r\n try {\r\n if (\r\n refName.current.value.trim().length >= 6 &&\r\n refEmail.current.value.trim().includes(\"@\") &&\r\n refPassword.current.value.length >= 6 &&\r\n refImage.current.files[0] !== undefined\r\n ) {\r\n const formData = new FormData();\r\n formData.append(\"name\", refName.current.value);\r\n formData.append(\"email\", refEmail.current.value);\r\n formData.append(\"password\", refPassword.current.value);\r\n formData.append(\"image\", refImage.current.files[0]);\r\n const response = await fetch(\r\n `${process.env.REACT_APP_BACKEND_URL}users/signup`,\r\n {\r\n method: \"POST\",\r\n body: formData,\r\n headers: {},\r\n }\r\n );\r\n const data = await response.json();\r\n setIsLoading(false);\r\n if (response.ok) {\r\n // if the user signup successfully we should store the userId (data.userId) & the userToken (data.userToken) in the Context \r\n logCtx.login(data.userId, data.userToken, data.expirationTime);\r\n // we should redirect programmatically to the home page...\r\n navigate(\"/\");\r\n } else {\r\n //error from backend validation...\r\n errorHandler(data.message);\r\n console.log(data); // failed to signup the user try again...\r\n }\r\n } else {\r\n //error from frontend validation...\r\n errorHandler(\"Please Enter a Valid Inputs Value\");\r\n }\r\n } catch (error) {\r\n errorHandler(\"Failed to fetch\");\r\n console.log(error);\r\n }\r\n };\r\n //-----------------------------------------------------------------------------------------------------------------------------return(JSX)\r\n return (\r\n \r\n {inputValidation.wrongInputsAlertVisibility && (\r\n
\r\n \r\n {inputValidation.wrongInputsAlertMessage}\r\n
\r\n )}\r\n {\r\n setInputValidation((prevCssClasses) => ({\r\n ...prevCssClasses,\r\n nameCssClasses:\r\n refName.current.value.trim().length >= 6 ? \"is-valid\" : \"is-invalid\",\r\n }));\r\n }}\r\n />\r\n {\r\n setInputValidation((prevCssClasses) => ({\r\n ...prevCssClasses,\r\n emailCssClasses: refEmail.current.value.trim().includes(\"@\")\r\n ? \"is-valid\"\r\n : \"is-invalid\",\r\n }));\r\n }}\r\n />\r\n {\r\n setInputValidation((prevCssClasses) => ({\r\n ...prevCssClasses,\r\n passwordCssClasses:\r\n refPassword.current.value.trim().length >= 6 ? \"is-valid\" : \"is-invalid\",\r\n }));\r\n }}\r\n />\r\n {\r\n setInputValidation((prevCssClasses) => ({\r\n ...prevCssClasses,\r\n imageCssClasses:\r\n refImage.current.files[0] === undefined\r\n ? \"is-invalid\"\r\n : \"is-valid\",\r\n }));\r\n }}\r\n />\r\n
\r\n \r\n {isLoading ? (\r\n <>\r\n \r\n Loading...{\" \"}\r\n \r\n ) : \"signup\"}\r\n \r\n

\r\n You have an account? Sign In\r\n

\r\n
\r\n
\r\n );\r\n};\r\nexport default SignUp;\r\n","export default function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}","import defineProperty from \"./defineProperty.js\";\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n enumerableOnly && (symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n })), keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nexport default function _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = null != arguments[i] ? arguments[i] : {};\n i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {\n defineProperty(target, key, source[key]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n\n return target;\n}"],"names":["React","props","ref","className","classes","htmlFor","name","label","onBlur","onChange","type","cssClasses","id","defaultValue","placeholder","accept","children","logCtx","useContext","AuthContext","console","log","refName","useRef","refEmail","refPassword","refImage","navigate","useNavigate","useState","isLoading","setIsLoading","nameCssClasses","emailCssClasses","passwordCssClasses","imageCssClasses","wrongInputsAlertVisibility","wrongInputsAlertMessage","inputValidation","setInputValidation","errorHandler","errorMessage","prevInputValidation","setTimeout","onSubmitHandler","current","value","trim","length","includes","undefined","files","formData","FormData","append","fetch","process","method","body","headers","response","json","data","ok","login","userId","userToken","expirationTime","message","Wrapper","role","Input","prevCssClasses","onClick","disabled","to","_defineProperty","obj","key","Object","defineProperty","enumerable","configurable","writable","ownKeys","object","enumerableOnly","keys","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","push","apply","_objectSpread2","target","i","arguments","source","forEach","getOwnPropertyDescriptors","defineProperties"],"sourceRoot":""} \ No newline at end of file diff --git a/backend/public/static/js/916.35d7632f.chunk.js b/backend/public/static/js/916.35d7632f.chunk.js new file mode 100644 index 0000000..e72207f --- /dev/null +++ b/backend/public/static/js/916.35d7632f.chunk.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunkfrontend=self.webpackChunkfrontend||[]).push([[916],{855:function(e,t,r){r.d(t,{Z:function(){return h}});var n=r(791),c=r(504),a=r(108),i=r(830),s="PictureCard_img__ab-nx",u="PictureCard_img_avatar__okL9j",o="PictureCard_row__oHEH3",l="PictureCard_edit_delete__9725u",d=r(184),h=function(e){var t=e.picture,r=e.pictureDeleteHandler,h=(0,n.useContext)(a.V);return(0,d.jsxs)(i.Z,{children:[(0,d.jsx)("img",{className:s,src:"".concat("http://localhost:4000/"+t.image_url),alt:t.description}),(0,d.jsxs)("div",{className:o,children:[(0,d.jsx)("h3",{children:t.title}),"creator_id"in t&&(0,d.jsxs)(c.rU,{to:"/".concat(t.creator_id._id,"/pictures"),children:[(0,d.jsx)("img",{className:u,src:"http://localhost:4000/"+t.creator_id.image_url,alt:t.creator_id.name}),t.creator_id.name]})]}),(0,d.jsx)("p",{children:t.description}),(0,d.jsxs)("h6",{children:[(0,d.jsx)("i",{className:"bi bi-geo-alt-fill"})," ",t.address]}),h.isLoggedIn&&h.userId===t.creator_id._id&&(0,d.jsxs)("div",{className:l,children:[(0,d.jsx)(c.rU,{to:"/pictures/update/".concat(t._id),children:(0,d.jsx)("button",{type:"button",className:"btn btn-success mx-4",children:"Editing"})}),(0,d.jsx)("button",{type:"button",className:"btn btn-danger",onClick:r.bind(undefined,t._id),children:"Delete"})]})]})}},916:function(e,t,r){r.r(t),r.d(t,{default:function(){return h}});var n=r(861),c=r(152),a=r(757),i=r.n(a),s=r(791),u=r(108),o=r(855),l="Pictures_load_btn__vAc26",d=r(184),h=function(){var e=(0,s.useContext)(u.V),t=(0,s.useState)(!0),r=(0,c.Z)(t,2),a=r[0],h=r[1],p=(0,s.useState)([]),f=(0,c.Z)(p,2),m=f[0],_=f[1],x=(0,s.useState)(0),b=(0,c.Z)(x,2),v=b[0],j=b[1],g=(0,s.useState)(1),k=(0,c.Z)(g,2),N=k[0],w=k[1],C=(0,s.useState)(!1),Z=(0,c.Z)(C,2),y=Z[0],E=Z[1];(0,s.useEffect)((function(){var e=function(){var e=(0,n.Z)(i().mark((function e(){var t,r;return i().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,fetch("".concat("http://localhost:4000/api/","pictures/?picBucketNum=").concat(N));case 3:return(t=e.sent).ok||(h(!1),E(!0)),e.next=7,t.json();case 7:r=e.sent,t.ok&&null!==r.pictures&&(_(r.pictures),j(r.picturesCount),h(!1)),e.next=15;break;case 11:e.prev=11,e.t0=e.catch(0),h(!1),E(!0);case 15:case"end":return e.stop()}}),e,null,[[0,11]])})));return function(){return e.apply(this,arguments)}}();e()}),[N]);var P=function(){var t=(0,n.Z)(i().mark((function t(r){return i().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.prev=0,t.next=3,fetch("".concat("http://localhost:4000/api/","pictures/").concat(r),{method:"DELETE",body:{},headers:{Authorization:"Bearer ".concat(e.token)}});case 3:t.sent.ok&&_((function(e){return e.filter((function(e){return e._id!==r}))})),t.next=11;break;case 7:t.prev=7,t.t0=t.catch(0),E(!0),setTimeout((function(){E(!1)}),1e3);case 11:case"end":return t.stop()}}),t,null,[[0,7]])})));return function(e){return t.apply(this,arguments)}}();return y?(0,d.jsxs)("div",{className:"alert alert-danger",role:"alert",children:[(0,d.jsx)("i",{className:"bi bi-exclamation-octagon-fill m-1"}),"There is no response backed from the server"]}):a?(0,d.jsx)("div",{className:"spinner-border",style:{width:"3rem",height:"3rem",margin:"0 48vw"},role:"status",children:(0,d.jsx)("span",{className:"visually-hidden",children:"Loading..."})}):0===m.length?(0,d.jsx)("div",{className:"alert alert-warning",role:"alert",children:"No Picture Founded!"}):(0,d.jsxs)(d.Fragment,{children:[m.map((function(e){return(0,d.jsx)(o.Z,{picture:e,pictureDeleteHandler:P},e._id)})),(0,d.jsx)("button",{className:"btn btn-dark "+l,onClick:function(){w((function(e){return e+1}))},disabled:10*N>v,children:"more pictures"})]})}},830:function(e,t,r){r.d(t,{Z:function(){return a}});r(791);var n="Wrapper_wrapper__eIb1h",c=r(184),a=function(e){return(0,c.jsx)("div",{className:n,children:e.children})}}}]); +//# sourceMappingURL=916.35d7632f.chunk.js.map \ No newline at end of file diff --git a/backend/public/static/js/916.5b86581e.chunk.js.map b/backend/public/static/js/916.35d7632f.chunk.js.map similarity index 96% rename from backend/public/static/js/916.5b86581e.chunk.js.map rename to backend/public/static/js/916.35d7632f.chunk.js.map index b323de3..f2794dc 100644 --- a/backend/public/static/js/916.5b86581e.chunk.js.map +++ b/backend/public/static/js/916.35d7632f.chunk.js.map @@ -1 +1 @@ -{"version":3,"file":"static/js/916.5b86581e.chunk.js","mappings":"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","sources":["webpack://frontend/./src/pictures/components/PictureCard.module.css?4c33","pictures/components/PictureCard.js","webpack://frontend/./src/pictures/pages/Pictures.module.css?65a7","pictures/pages/Pictures.js","webpack://frontend/./src/shared/components/UIElements/Wrapper.module.css?08b1","shared/components/UIElements/Wrapper.js"],"sourcesContent":["// extracted by mini-css-extract-plugin\nexport default {\"img\":\"PictureCard_img__ab-nx\",\"img_avatar\":\"PictureCard_img_avatar__okL9j\",\"row\":\"PictureCard_row__oHEH3\",\"edit_delete\":\"PictureCard_edit_delete__9725u\"};","import React, {useContext} from \"react\";\r\nimport { Link } from \"react-router-dom\";\r\n\r\nimport { AuthContext } from \"../../shared/context/auth-context.js\";\r\nimport Wrapper from \"../../shared/components/UIElements/Wrapper.js\";\r\nimport classes from \"./PictureCard.module.css\";\r\n\r\nconst PictureCard = ({ picture, pictureDeleteHandler }) => {\r\n\r\n const logCtx = useContext(AuthContext);\r\n \r\n\r\n return (\r\n \r\n \r\n
\r\n

{picture.title}

\r\n\r\n {\"creator_id\" in picture && (\r\n \r\n \r\n {picture.creator_id.name}\r\n \r\n )}\r\n
\r\n

{picture.description}

\r\n
\r\n {picture.address}\r\n
\r\n {logCtx.isLoggedIn && (logCtx.userId === picture.creator_id._id ) &&
\r\n \r\n \r\n \r\n \r\n Delete\r\n \r\n
}\r\n
\r\n );\r\n};\r\n\r\nexport default PictureCard;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"load_btn\":\"Pictures_load_btn__vAc26\"};","import React, { useState, useEffect, useContext } from \"react\";\r\n\r\nimport { AuthContext } from \"../../shared/context/auth-context.js\";\r\nimport PictureCard from \"../components/PictureCard.js\";\r\nimport classes from \"./Pictures.module.css\";\r\n\r\nconst PICTURE_BUCKET_SIZE = 10; // 10 picture per bucket\r\n\r\nconst Pictures = () => {\r\n //-----------------------------------------------------------------------------------------------------------------------------hooks-part\r\n const logCtx = useContext(AuthContext);\r\n const [isLoading, setIsLoading] = useState(true);\r\n const [pictures, setPictures] = useState([]);\r\n const [picturesCount, setPicturesCount] = useState(0);\r\n const [picBucketNum, incPicBucketNum] = useState(1);\r\n const [error, setError] = useState(false);\r\n //-----------------------------------------------------------------------------------------------------------------------------fetching-data\r\n useEffect(() => {\r\n const fetchPictures = async () => {\r\n try {\r\n const response = await fetch(\r\n `${process.env.REACT_APP_BACKEND_URL}pictures/?picBucketNum=${picBucketNum}`\r\n );\r\n if (!response.ok) {\r\n setIsLoading(false);\r\n setError(true);\r\n }\r\n const data = await response.json();\r\n if (response.ok && data.pictures !== null) {\r\n setPictures(data.pictures);\r\n setPicturesCount(data.picturesCount);\r\n setIsLoading(false);\r\n }\r\n } catch (error) {\r\n setIsLoading(false);\r\n setError(true);\r\n }\r\n };\r\n fetchPictures();\r\n }, [picBucketNum]);\r\n\r\n const loadMorePictures = () => {\r\n incPicBucketNum((prevBucketNum) => prevBucketNum + 1);\r\n };\r\n //-----------------------------------------------------------------------------------------------------------------------------pictureDeleteHandler\r\n const pictureDeleteHandler = async (id) => {\r\n try {\r\n const response = await fetch(\r\n `${process.env.REACT_APP_BACKEND_URL}pictures/${id}`,\r\n {\r\n method: \"DELETE\",\r\n body: {},\r\n headers: { Authorization: `Bearer ${logCtx.token}` },\r\n }\r\n );\r\n if (response.ok) {\r\n //if the response is ok we should filter out the deleted pic from the array\r\n setPictures((oldPictures) =>\r\n oldPictures.filter((pic) => pic._id !== id)\r\n );\r\n }\r\n } catch (error) {\r\n setError(true);\r\n setTimeout(() => {\r\n setError(false);\r\n }, 1000);\r\n }\r\n };\r\n //-----------------------------------------------------------------------------------------------------------------------------return(JSX)\r\n return error ? (\r\n
\r\n \r\n There is no response backed from the server\r\n
\r\n ) : isLoading ? (\r\n \r\n Loading...\r\n \r\n ) : pictures.length === 0 ? (\r\n
\r\n No Picture Founded!\r\n
\r\n ) : (\r\n <>\r\n {pictures.map((picture) => (\r\n \r\n ))}\r\n picturesCount}\r\n >\r\n more pictures\r\n \r\n \r\n );\r\n};\r\n\r\nexport default Pictures;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"wrapper\":\"Wrapper_wrapper__eIb1h\"};","import React from 'react';\r\n\r\nimport classes from \"./Wrapper.module.css\";\r\n\r\n\r\nconst Wrapper = (props) => {\r\n return (\r\n
{props.children}
\r\n );\r\n}\r\n\r\nexport default Wrapper;"],"names":["picture","pictureDeleteHandler","logCtx","useContext","AuthContext","Wrapper","className","classes","src","process","image_url","alt","description","title","to","creator_id","_id","name","address","isLoggedIn","userId","type","onClick","bind","useState","isLoading","setIsLoading","pictures","setPictures","picturesCount","setPicturesCount","picBucketNum","incPicBucketNum","error","setError","useEffect","fetchPictures","fetch","response","ok","json","data","id","method","body","headers","Authorization","token","oldPictures","filter","pic","setTimeout","role","style","width","height","margin","length","map","PictureCard","prevBucketNum","disabled","props","children"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"static/js/916.35d7632f.chunk.js","mappings":"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","sources":["webpack://frontend/./src/pictures/components/PictureCard.module.css?4c33","pictures/components/PictureCard.js","webpack://frontend/./src/pictures/pages/Pictures.module.css?65a7","pictures/pages/Pictures.js","webpack://frontend/./src/shared/components/UIElements/Wrapper.module.css?08b1","shared/components/UIElements/Wrapper.js"],"sourcesContent":["// extracted by mini-css-extract-plugin\nexport default {\"img\":\"PictureCard_img__ab-nx\",\"img_avatar\":\"PictureCard_img_avatar__okL9j\",\"row\":\"PictureCard_row__oHEH3\",\"edit_delete\":\"PictureCard_edit_delete__9725u\"};","import React, {useContext} from \"react\";\r\nimport { Link } from \"react-router-dom\";\r\n\r\nimport { AuthContext } from \"../../shared/context/auth-context.js\";\r\nimport Wrapper from \"../../shared/components/UIElements/Wrapper.js\";\r\nimport classes from \"./PictureCard.module.css\";\r\n\r\nconst PictureCard = ({ picture, pictureDeleteHandler }) => {\r\n\r\n const logCtx = useContext(AuthContext);\r\n \r\n\r\n return (\r\n \r\n \r\n
\r\n

{picture.title}

\r\n\r\n {\"creator_id\" in picture && (\r\n \r\n \r\n {picture.creator_id.name}\r\n \r\n )}\r\n
\r\n

{picture.description}

\r\n
\r\n {picture.address}\r\n
\r\n {logCtx.isLoggedIn && (logCtx.userId === picture.creator_id._id ) &&
\r\n \r\n \r\n \r\n \r\n Delete\r\n \r\n
}\r\n
\r\n );\r\n};\r\n\r\nexport default PictureCard;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"load_btn\":\"Pictures_load_btn__vAc26\"};","import React, { useState, useEffect, useContext } from \"react\";\r\n\r\nimport { AuthContext } from \"../../shared/context/auth-context.js\";\r\nimport PictureCard from \"../components/PictureCard.js\";\r\nimport classes from \"./Pictures.module.css\";\r\n\r\nconst PICTURE_BUCKET_SIZE = 10; // 10 picture per bucket\r\n\r\nconst Pictures = () => {\r\n //-----------------------------------------------------------------------------------------------------------------------------hooks-part\r\n const logCtx = useContext(AuthContext);\r\n const [isLoading, setIsLoading] = useState(true);\r\n const [pictures, setPictures] = useState([]);\r\n const [picturesCount, setPicturesCount] = useState(0);\r\n const [picBucketNum, incPicBucketNum] = useState(1);\r\n const [error, setError] = useState(false);\r\n //-----------------------------------------------------------------------------------------------------------------------------fetching-data\r\n useEffect(() => {\r\n const fetchPictures = async () => {\r\n try {\r\n const response = await fetch(\r\n `${process.env.REACT_APP_BACKEND_URL}pictures/?picBucketNum=${picBucketNum}`\r\n );\r\n if (!response.ok) {\r\n setIsLoading(false);\r\n setError(true);\r\n }\r\n const data = await response.json();\r\n if (response.ok && data.pictures !== null) {\r\n setPictures(data.pictures);\r\n setPicturesCount(data.picturesCount);\r\n setIsLoading(false);\r\n }\r\n } catch (error) {\r\n setIsLoading(false);\r\n setError(true);\r\n }\r\n };\r\n fetchPictures();\r\n }, [picBucketNum]);\r\n\r\n const loadMorePictures = () => {\r\n incPicBucketNum((prevBucketNum) => prevBucketNum + 1);\r\n };\r\n //-----------------------------------------------------------------------------------------------------------------------------pictureDeleteHandler\r\n const pictureDeleteHandler = async (id) => {\r\n try {\r\n const response = await fetch(\r\n `${process.env.REACT_APP_BACKEND_URL}pictures/${id}`,\r\n {\r\n method: \"DELETE\",\r\n body: {},\r\n headers: { Authorization: `Bearer ${logCtx.token}` },\r\n }\r\n );\r\n if (response.ok) {\r\n //if the response is ok we should filter out the deleted pic from the array\r\n setPictures((oldPictures) =>\r\n oldPictures.filter((pic) => pic._id !== id)\r\n );\r\n }\r\n } catch (error) {\r\n setError(true);\r\n setTimeout(() => {\r\n setError(false);\r\n }, 1000);\r\n }\r\n };\r\n //-----------------------------------------------------------------------------------------------------------------------------return(JSX)\r\n return error ? (\r\n
\r\n \r\n There is no response backed from the server\r\n
\r\n ) : isLoading ? (\r\n \r\n Loading...\r\n \r\n ) : pictures.length === 0 ? (\r\n
\r\n No Picture Founded!\r\n
\r\n ) : (\r\n <>\r\n {pictures.map((picture) => (\r\n \r\n ))}\r\n picturesCount}\r\n >\r\n more pictures\r\n \r\n \r\n );\r\n};\r\n\r\nexport default Pictures;\r\n","// extracted by mini-css-extract-plugin\nexport default {\"wrapper\":\"Wrapper_wrapper__eIb1h\"};","import React from 'react';\r\n\r\nimport classes from \"./Wrapper.module.css\";\r\n\r\n\r\nconst Wrapper = (props) => {\r\n return (\r\n
{props.children}
\r\n );\r\n}\r\n\r\nexport default Wrapper;"],"names":["picture","pictureDeleteHandler","logCtx","useContext","AuthContext","Wrapper","className","classes","src","process","image_url","alt","description","title","to","creator_id","_id","name","address","isLoggedIn","userId","type","onClick","bind","useState","isLoading","setIsLoading","pictures","setPictures","picturesCount","setPicturesCount","picBucketNum","incPicBucketNum","error","setError","useEffect","fetchPictures","fetch","response","ok","json","data","id","method","body","headers","Authorization","token","oldPictures","filter","pic","setTimeout","role","style","width","height","margin","length","map","PictureCard","prevBucketNum","disabled","props","children"],"sourceRoot":""} \ No newline at end of file diff --git a/backend/public/static/js/916.5b86581e.chunk.js b/backend/public/static/js/916.5b86581e.chunk.js deleted file mode 100644 index 6bb2fe6..0000000 --- a/backend/public/static/js/916.5b86581e.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunkfrontend=self.webpackChunkfrontend||[]).push([[916],{855:function(e,t,r){r.d(t,{Z:function(){return p}});var n=r(791),c=r(504),a=r(108),i=r(830),s="PictureCard_img__ab-nx",u="PictureCard_img_avatar__okL9j",o="PictureCard_row__oHEH3",d="PictureCard_edit_delete__9725u",l=r(184),p=function(e){var t=e.picture,r=e.pictureDeleteHandler,p=(0,n.useContext)(a.V);return(0,l.jsxs)(i.Z,{children:[(0,l.jsx)("img",{className:s,src:"".concat("http://192.168.1.155:4000/"+t.image_url),alt:t.description}),(0,l.jsxs)("div",{className:o,children:[(0,l.jsx)("h3",{children:t.title}),"creator_id"in t&&(0,l.jsxs)(c.rU,{to:"/".concat(t.creator_id._id,"/pictures"),children:[(0,l.jsx)("img",{className:u,src:"http://192.168.1.155:4000/"+t.creator_id.image_url,alt:t.creator_id.name}),t.creator_id.name]})]}),(0,l.jsx)("p",{children:t.description}),(0,l.jsxs)("h6",{children:[(0,l.jsx)("i",{className:"bi bi-geo-alt-fill"})," ",t.address]}),p.isLoggedIn&&p.userId===t.creator_id._id&&(0,l.jsxs)("div",{className:d,children:[(0,l.jsx)(c.rU,{to:"/pictures/update/".concat(t._id),children:(0,l.jsx)("button",{type:"button",className:"btn btn-success mx-4",children:"Editing"})}),(0,l.jsx)("button",{type:"button",className:"btn btn-danger",onClick:r.bind(undefined,t._id),children:"Delete"})]})]})}},916:function(e,t,r){r.r(t),r.d(t,{default:function(){return p}});var n=r(861),c=r(152),a=r(757),i=r.n(a),s=r(791),u=r(108),o=r(855),d="Pictures_load_btn__vAc26",l=r(184),p=function(){var e=(0,s.useContext)(u.V),t=(0,s.useState)(!0),r=(0,c.Z)(t,2),a=r[0],p=r[1],h=(0,s.useState)([]),f=(0,c.Z)(h,2),m=f[0],_=f[1],x=(0,s.useState)(0),b=(0,c.Z)(x,2),v=b[0],j=b[1],g=(0,s.useState)(1),k=(0,c.Z)(g,2),N=k[0],w=k[1],C=(0,s.useState)(!1),Z=(0,c.Z)(C,2),y=Z[0],E=Z[1];(0,s.useEffect)((function(){var e=function(){var e=(0,n.Z)(i().mark((function e(){var t,r;return i().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,fetch("".concat("http://192.168.1.155:4000/api/","pictures/?picBucketNum=").concat(N));case 3:return(t=e.sent).ok||(p(!1),E(!0)),e.next=7,t.json();case 7:r=e.sent,t.ok&&null!==r.pictures&&(_(r.pictures),j(r.picturesCount),p(!1)),e.next=15;break;case 11:e.prev=11,e.t0=e.catch(0),p(!1),E(!0);case 15:case"end":return e.stop()}}),e,null,[[0,11]])})));return function(){return e.apply(this,arguments)}}();e()}),[N]);var P=function(){var t=(0,n.Z)(i().mark((function t(r){return i().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.prev=0,t.next=3,fetch("".concat("http://192.168.1.155:4000/api/","pictures/").concat(r),{method:"DELETE",body:{},headers:{Authorization:"Bearer ".concat(e.token)}});case 3:t.sent.ok&&_((function(e){return e.filter((function(e){return e._id!==r}))})),t.next=11;break;case 7:t.prev=7,t.t0=t.catch(0),E(!0),setTimeout((function(){E(!1)}),1e3);case 11:case"end":return t.stop()}}),t,null,[[0,7]])})));return function(e){return t.apply(this,arguments)}}();return y?(0,l.jsxs)("div",{className:"alert alert-danger",role:"alert",children:[(0,l.jsx)("i",{className:"bi bi-exclamation-octagon-fill m-1"}),"There is no response backed from the server"]}):a?(0,l.jsx)("div",{className:"spinner-border",style:{width:"3rem",height:"3rem",margin:"0 48vw"},role:"status",children:(0,l.jsx)("span",{className:"visually-hidden",children:"Loading..."})}):0===m.length?(0,l.jsx)("div",{className:"alert alert-warning",role:"alert",children:"No Picture Founded!"}):(0,l.jsxs)(l.Fragment,{children:[m.map((function(e){return(0,l.jsx)(o.Z,{picture:e,pictureDeleteHandler:P},e._id)})),(0,l.jsx)("button",{className:"btn btn-dark "+d,onClick:function(){w((function(e){return e+1}))},disabled:10*N>v,children:"more pictures"})]})}},830:function(e,t,r){r.d(t,{Z:function(){return a}});r(791);var n="Wrapper_wrapper__eIb1h",c=r(184),a=function(e){return(0,c.jsx)("div",{className:n,children:e.children})}}}]); -//# sourceMappingURL=916.5b86581e.chunk.js.map \ No newline at end of file diff --git a/backend/public/static/js/main.1cd1f7c0.js b/backend/public/static/js/main.87db3903.js similarity index 99% rename from backend/public/static/js/main.1cd1f7c0.js rename to backend/public/static/js/main.87db3903.js index 2b60135..84f225b 100644 --- a/backend/public/static/js/main.1cd1f7c0.js +++ b/backend/public/static/js/main.87db3903.js @@ -1,3 +1,3 @@ -/*! For license information please see main.1cd1f7c0.js.LICENSE.txt */ -!function(){"use strict";var e={108:function(e,n,t){t.d(n,{V:function(){return r}});var r=(0,t(791).createContext)({isLoggedIn:!1,token:null,userId:null,login:function(){},logout:function(){}})},390:function(e,n,t){t.d(n,{Ep:function(){return d},aU:function(){return r},cP:function(){return p},lX:function(){return u}});var r,a=t(462);!function(e){e.Pop="POP",e.Push="PUSH",e.Replace="REPLACE"}(r||(r={}));var l=function(e){return e};var o="beforeunload",i="popstate";function u(e){void 0===e&&(e={});var n=e.window,t=void 0===n?document.defaultView:n,u=t.history;function h(){var e=t.location,n=e.pathname,r=e.search,a=e.hash,o=u.state||{};return[o.idx,l({pathname:n,search:r,hash:a,state:o.usr||null,key:o.key||"default"})]}var m=null;t.addEventListener(i,(function(){if(m)w.call(m),m=null;else{var e=r.Pop,n=h(),t=n[0],a=n[1];if(w.length){if(null!=t){var l=y-t;l&&(m={action:e,location:a,retry:function(){N(-1*l)}},N(l))}}else _(e)}}));var v=r.Pop,g=h(),y=g[0],b=g[1],k=c(),w=c();function S(e){return"string"===typeof e?e:d(e)}function x(e,n){return void 0===n&&(n=null),l((0,a.Z)({pathname:b.pathname,hash:"",search:""},"string"===typeof e?p(e):e,{state:n,key:f()}))}function E(e,n){return[{usr:e.state,key:e.key,idx:n},S(e)]}function C(e,n,t){return!w.length||(w.call({action:e,location:n,retry:t}),!1)}function _(e){v=e;var n=h();y=n[0],b=n[1],k.call({action:v,location:b})}function N(e){u.go(e)}null==y&&(y=0,u.replaceState((0,a.Z)({},u.state,{idx:y}),""));var P={get action(){return v},get location(){return b},createHref:S,push:function e(n,a){var l=r.Push,o=x(n,a);if(C(l,o,(function(){e(n,a)}))){var i=E(o,y+1),s=i[0],c=i[1];try{u.pushState(s,"",c)}catch(f){t.location.assign(c)}_(l)}},replace:function e(n,t){var a=r.Replace,l=x(n,t);if(C(a,l,(function(){e(n,t)}))){var o=E(l,y),i=o[0],s=o[1];u.replaceState(i,"",s),_(a)}},go:N,back:function(){N(-1)},forward:function(){N(1)},listen:function(e){return k.push(e)},block:function(e){var n=w.push(e);return 1===w.length&&t.addEventListener(o,s),function(){n(),w.length||t.removeEventListener(o,s)}}};return P}function s(e){e.preventDefault(),e.returnValue=""}function c(){var e=[];return{get length(){return e.length},push:function(n){return e.push(n),function(){e=e.filter((function(e){return e!==n}))}},call:function(n){e.forEach((function(e){return e&&e(n)}))}}}function f(){return Math.random().toString(36).substr(2,8)}function d(e){var n=e.pathname,t=void 0===n?"/":n,r=e.search,a=void 0===r?"":r,l=e.hash,o=void 0===l?"":l;return a&&"?"!==a&&(t+="?"===a.charAt(0)?a:"?"+a),o&&"#"!==o&&(t+="#"===o.charAt(0)?o:"#"+o),t}function p(e){var n={};if(e){var t=e.indexOf("#");t>=0&&(n.hash=e.substr(t),e=e.substr(0,t));var r=e.indexOf("?");r>=0&&(n.search=e.substr(r),e=e.substr(0,r)),e&&(n.pathname=e)}return n}},463:function(e,n,t){var r=t(791),a=t(296);function l(e){for(var n="https://reactjs.org/docs/error-decoder.html?invariant="+e,t=1;t