From 3e8f6d54a86f0232d62db87983154491fe530b89 Mon Sep 17 00:00:00 2001 From: areebkhan Date: Wed, 27 Apr 2022 16:56:25 +0500 Subject: [PATCH 01/37] refactor --- frontend/src/pages/DailyAttendence.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/frontend/src/pages/DailyAttendence.js b/frontend/src/pages/DailyAttendence.js index 8a9261e..81c08d4 100644 --- a/frontend/src/pages/DailyAttendence.js +++ b/frontend/src/pages/DailyAttendence.js @@ -260,10 +260,9 @@ console.log(users, "users") {user.UserName} - {user.TakenIn.slice(0,22)} - {user.TakenOut.slice(11,22)} + {new Date(user.TakenIn).toLocaleString() } + {new Date(user.TakenOut).toLocaleString()} {user.HOUR?.toFixed(2)} - )) } From 083572348eb3a0ad707dfdf9d0c53f183261bc49 Mon Sep 17 00:00:00 2001 From: sharjeel khan Date: Thu, 28 Apr 2022 12:22:06 +0500 Subject: [PATCH 02/37] user controller changes --- backend/controllers/user_controller.js | 104 ++++++++++++++++++++++--- backend/package.json | 1 + backend/routes/routes.js | 12 +-- backend/services/mailer.js | 55 +++++++++++++ 4 files changed, 158 insertions(+), 14 deletions(-) create mode 100644 backend/services/mailer.js diff --git a/backend/controllers/user_controller.js b/backend/controllers/user_controller.js index 4ff1571..9864d86 100644 --- a/backend/controllers/user_controller.js +++ b/backend/controllers/user_controller.js @@ -1,6 +1,7 @@ const user_repo = require('../repository/user_repo'); const uuid = require('uuid').v1; const jwt = require("jsonwebtoken"); +const emailer = require('../services/mailer'); module.exports.login = async (req, res) => { try { @@ -19,14 +20,14 @@ module.exports.login = async (req, res) => { res.send({ status: false, message: 'User id or password does not match!' }); } else if (req.body.IsWeb) { - const checkAdmin = user_repo.find({RightsTitle:{$in:["Admin"]}}) - console.log(checkAdmin,"------") - if(!checkAdmin) { - + const checkAdmin = user_repo.find({ RightsTitle: { $in: ["Admin"] } }) + console.log(checkAdmin, "------") + if (!checkAdmin) { + res.send({ status: false, message: 'No rights to Access!' }); } else { - + const token = uuid(); const assignJwt = jwt.sign({ UID: token, expiresIn: "4h" }, process.env.JWT_SECRET); user_repo.updateOne({ _id: user._id }, { $set: { Login_JWT_Token_ID: token } }).then(upd => { @@ -35,10 +36,10 @@ module.exports.login = async (req, res) => { let user_to_send = user.toObject(); res.send({ data: user_to_send, status: true, token: assignJwt, message: 'User Login Successfully!' }); } - + } else { - + const token = uuid(); const assignJwt = jwt.sign({ UID: token, expiresIn: "4h" }, process.env.JWT_SECRET); user_repo.updateOne({ _id: user._id }, { $set: { Login_JWT_Token_ID: token } }).then(upd => { @@ -110,7 +111,7 @@ module.exports.editUser = async (req, res) => { } module.exports.ChangePassword = (req, res) => { - user_repo.find({ _id:req.body?._id }, true, true, {}) + user_repo.find({ _id: req.body?._id }, true, true, {}) .then(user => { if (!user) { console.log("User not found!"); @@ -154,4 +155,89 @@ module.exports.ChangePassword = (req, res) => { res.send(err); }); -} \ No newline at end of file +} + + +module.exports.ForgotPassword = async (req, res) => { + try { + let emailID = req.body.resetEmail; + console.log("object", req.body) + let user = await user_repo.find({ Email: emailID },true); + if (user) { + console.log(user, "------") + const token = uuid(); + let EmailMessage = + "Dear  " + + user.FirstName + + " " + + user.LastName + + "
We are sending this email to your request for reset the password in Attendance App" + + "
" + + "Please find below the link to reset your password!" + + '
' + + 'Reset Password' + + "" + console.log(EmailMessage,'some info') + await user_repo.updateOne({ Email: emailID }, { $set: { Password_ResetToken: token, ForgotPasswordEmailSentTimeStamp: new Date() } }) + let email_to_send_for_reset = { + To: emailID, + Subject: 'Reset Email', + message: EmailMessage + + }; + emailer.sendEmail(email_to_send_for_reset, emailID) + .then(success => { + console.log('Email Sent: ', success); + res.send({ status: true, message: 'Email has been sent' }); + }) + .catch(err => { + console.log('Error in Email: ', err); + res.send({ status: true, message: 'Email could not be sent!' }); + }); + } + } catch (e) { + res.send(e); + } +} + + + +module.exports.ResetPassword = (req, res) => { + try { + console.log(req.body) + let token = req.body.token; + // let user = await user_repo.find({Password_ResetToken : token}, {$set: {Password_ResetToken: undefined,ForgotPasswordEmailSentTimeStamp:undefined}}); + user_repo.find({ Password_ResetToken: token }, true, true, null, null) + .then(user => { + console.log("Inside User Found!", user); + if (!user) { + console.log("User not found!"); + return res.send({ + message: "Your Token is Expire or Not valid.", + status: false + }); + } else { + user.Password = req.body.new_password + user.Password_ResetToken = undefined + user.ForgotPasswordEmailSentTimeStamp = undefined + user.save().then((success) => { + console.log('Password Changed Successfully!'); + + res.send({ status: true, message: 'Password changed!' }) + }).catch(err => { + res.send(err) + }) + } + }) + } + catch (e) { + res.send(e); + } +} + + diff --git a/backend/package.json b/backend/package.json index 3fa5aab..650f80b 100644 --- a/backend/package.json +++ b/backend/package.json @@ -16,6 +16,7 @@ "express": "^4.17.3", "jsonwebtoken": "^8.5.1", "mongoose": "^6.2.8", + "nodemailer": "^6.7.3", "uuid": "^8.3.2" } } diff --git a/backend/routes/routes.js b/backend/routes/routes.js index 0ca4b4f..9e95833 100644 --- a/backend/routes/routes.js +++ b/backend/routes/routes.js @@ -7,23 +7,25 @@ let auth = require('../services/auth'); routes.post('/login', controller.login); -routes.get('/users', controller.getUsers); routes.post('/user/:id',auth.authMiddleware, controller.editUser); routes.post('/register',auth.authMiddleware,controller.register); routes.post('/ChangePassword',auth.authMiddleware,controller.ChangePassword) +routes.post('/ResetPassword',auth.authMiddleware,controller.ResetPassword) +routes.post('/ForgotPassword',auth.authMiddleware,controller.ForgotPassword ) routes.post('/attendance_transaction',auth.authMiddleware,attendance_controller.attendance) -routes.get('/gettodayattendance',auth.authMiddleware,attendance_controller.gettodayattendance) routes.post('/getreportattendance',auth.authMiddleware,attendance_controller.report) routes.post('/holiday',auth.authMiddleware,attendance_controller.holiday) routes.post('/LeaveReq',auth.authMiddleware,attendance_controller.LeaveReq) routes.post('/getUsershowLeave',auth.authMiddleware,attendance_controller.getUsershowLeave) routes.post('/getlisPendLeave',auth.authMiddleware,attendance_controller.getlisPendLeave) -routes.put('/approvalLeave/:id',auth.authMiddleware,attendance_controller.approvedLeave) -routes.put('/rejectedLeave/:id',auth.authMiddleware,attendance_controller.rejectedLeave) routes.post('/postExcelReport',auth.authMiddleware,attendance_controller.postExcelReport) +routes.post('/GetReportDailyAtt',auth.authMiddleware,attendance_controller.GetReportDailyAtt) +routes.get('/users', controller.getUsers); +routes.get('/gettodayattendance',auth.authMiddleware,attendance_controller.gettodayattendance) routes.get('/getreportholiday',auth.authMiddleware,attendance_controller.getreportholiday) -routes.get('/GetReportDailyAtt',auth.authMiddleware,attendance_controller.GetReportDailyAtt) routes.get ('/getalltitles', auth.authMiddleware,titlesDictionary.getAllTitles) +routes.put('/rejectedLeave/:id',auth.authMiddleware,attendance_controller.rejectedLeave) +routes.put('/approvalLeave/:id',auth.authMiddleware,attendance_controller.approvedLeave) module.exports = routes; \ No newline at end of file diff --git a/backend/services/mailer.js b/backend/services/mailer.js new file mode 100644 index 0000000..bac567a --- /dev/null +++ b/backend/services/mailer.js @@ -0,0 +1,55 @@ +"use strict"; +const nodemailer = require("nodemailer"); +// const emailhistoryController = require('../controllers/EmailHistoriesController').Controller.RTM.emailhistory; + +// async..await is not allowed in global scope, must use a wrapper +exports.sendEmail = async function sendEmail(obj, To) { + // Generate test SMTP service account from ethereal.email + // Only needed if you don't have a real mail account for testing + let SMPTConfigObj = { + auth: { + user: process.env.Email, + pass: process.env.Password + }, + tls: { + rejectUnauthorized: false + } + }; + if ((process.env.SMTPHost) == 'Gmail') { + SMPTConfigObj.service = process.env.SMTPHost; + } + else { + SMPTConfigObj.host = process.env.SMTPHost || 'smtp.gmail.com'; + SMPTConfigObj.port = Number(process.env.EMAILPORT) || 465; + SMPTConfigObj.secure = process.env.IsSSL ; + } + if (Array.isArray(To)) { + To = To.join("; "); + } + var message = { + // sender info + from: process.env.Email, + // Comma separated list of recipients + to: To, + // Subject of the message + subject: obj.Subject, + // HTML body + html: obj.message + + }; + console.log('1111111') + //obj.fromAddress = process.env.Email; + if (obj.cc) { + message.cc = obj.cc; + } + if (obj.bcc) { + message.bcc = obj.bcc; + } + console.log('SMPTConfigObj-1: ', SMPTConfigObj) + + // create reusable transporter object using the default SMTP transport + let transporter = nodemailer.createTransport(SMPTConfigObj); + console.log('SMPTConfigObj-2: ', SMPTConfigObj) + // send mail with defined transport object + return transporter.sendMail(message); +} \ No newline at end of file From 22eb80307004d0689c7093fb82e641fda74a4e7a Mon Sep 17 00:00:00 2001 From: areebkhan Date: Thu, 28 Apr 2022 12:40:42 +0500 Subject: [PATCH 03/37] refactor --- frontend/public/index.html | 2 +- frontend/public/logo192.png | Bin 5347 -> 20086 bytes frontend/src/pages/ChangePassword.js | 10 +-- frontend/src/pages/SignIn.js | 93 ++++++++++++++++++++++++--- 4 files changed, 88 insertions(+), 17 deletions(-) diff --git a/frontend/public/index.html b/frontend/public/index.html index aa069f2..1fa70de 100644 --- a/frontend/public/index.html +++ b/frontend/public/index.html @@ -24,7 +24,7 @@ work correctly both with client-side routing and a non-root public URL. Learn how to configure a non-root public URL by running `npm run build`. --> - React App + Attendence App diff --git a/frontend/public/logo192.png b/frontend/public/logo192.png index fc44b0a3796c0e0a64c3d858ca038bd4570465d9..855200745b397cbbc5c52000b2434960808cb755 100644 GIT binary patch literal 20086 zcmd43WmHvN^f$WUP|^s}-6$;z92yQ?QW6p(4bmKGNs*G4l9muq5TqMXLb?Q`yBi6C z!(BY@|Gjs-W881|%Vi8boW0kcbFH~%{N|i%6Y)etkpPz(7lI%HWhI0*1fhdp(IFfx z@Nwcb_78kuxXUW*;(#AN9LsR<{f>*0p*sW-{1C`R^!VUxMoj(VTqAdVcg>8i zCp_Pi(VUA0hg~1i#?q)^FHHCmHWlXR6Mk>1nK_~H`0(&< zSv4I9PEEM5QdUF~6{e?H5o*94jM`&A@f6No{XwqV*L+9R%3ZgMnVC6?Umk74RwQuQ z`GzpAB+)>Jo4h^3Bp{GX+KEdQh~S;t#Up6=34_L-PkP7=LV4k2&xYjA=_d_Y1cE%L z2@;xcT&xPn`0;{7D0}iV9E*g+Fz^U{XxyL_9{lBCT^WJ+nA-$lT#D%`etrKu06Tx> zf(&d&)=?DnW(#`UktK`C?*gw~KIhp!hT0Ximvpj40vagXYF)Pdp!$ z#F*1$jnU$?Q%iTa*L&#dk(;aN3H<6k($X>wuS^j4YTk3D8(crmxVfR)M42oSF zS zX^{o0*3U1Ns8UT$oTf%)!2IymG}?pfbqN;VxRw$c6NYtvMrbLoS>R8+(%kJ|&U+CL zm@o?UQ!IRtqLN4L4qtB;l$(zJX}p}*iZbYXLKoXzsip-5w%?6Q){jUg4f%kEdHLu0 zK~)4+aEEX z!#^})hexGiL$jmhaO(Kg)ItafoL*M!IeG9z@EUhqD_pHKhY@eWv>8MHbEeJK@xO@V z#LO@;CzFs5&IS?v(}YWD>%xnDQ%}b$!nr$iF$2SSd8DLBYmHmcQ_3@m)W5COUn5)^ zk)I7kX-f6`zL!aK9h{RoFRW}@gD2EtF$23-j*cI?cJVlT_4)ad@T!AY_IZ0#ajLKl z?&Ftpu^d^i@%sBSODssz$nl_fW$$LE8LwHl8INl>tFxVF@r8G8DL+UVUs%=mT=3Lv zi3mb7HC8*(@Y81!q+$xJE?r-Qc^Zd(Rx_OuHEk$c{Nq4w@w1Zp>NH~Fu=AO3ohH^W zrU4YLmJgPheLlS{;IPIzuJw}TVMnayoV!Gs!9$9hzflw}g}LfTR%V^&XpDkrCKE2p z$X?g!{!)?IY{t>TysIXlWy6V!*mXWh)+)_gPnsn&lXO1##bR%rJY-^^yN_^>NCD7u3)8)GBOWu)J z%0{YAX#<6m9sCnNZ}cteIx2Xmr|8NZ+w~@P#-G4it+Y)Obt#GwV(gui@dh)HvnMjL z@~~iVF6d~)Z(IwfZRF>umT7Wqz|A4)r*)O!6-IGP=_CZ+y5`T2`MS3utvzHEs|!Jw zl9539^c0y?sL7!`*7{S4sKeF4*$A?1eIyxm@ZfrTilndDULEq?7AHcvT?azkDYQdp zXxO$l_U(T$u4RiMi!Y)O)u@0Lt4=txW!pmP_Mo4*QR|{ zS&QxsN_G@O@~rroK)@W?xE3cGu$U$HfPe?DPZ$CgX3;G13hzTE{ffh0D?BGP*;sA< zjf(7X=_X-Ib`Eid-R}J*{wsS9UoA-}5-PsQ;}tGiFnII5KJBFd5>Dq&%s`J5sos~T zojsxfPorbs3@2=Ci@f{zY+`XNYn_oTz^P>BV6MPxa6C%4D~Gl2#jYPvdckplaP~g3 zhmZ|nOK>vjGrg{_Rmq9Ya_-(wo*vVWYth>D$_T)N(8c%;Rxis+op;h2v~Sjlr^oJqrs{of5SOHl6aWGreZj+upqw_<45&hvQ4 z;`nVX3oq?VJCW*o(m-l-aMWoI+=lO$@nsuz3d9a~3E7g%c{ zrA;#*T=b3HD4)jSLTsE_;=qGW#(w$3LG^wJ`KG3^fqavxaLdV**uvSRt|AjP#VTe_ z(Q4=xPR+=uk1-NMkr@5_gu_YJPC09f^N@|et0A_1z6x!x~h z6)nFxd7S6|ug;?VW|GI55c3D%?U~!@$4OpV9jy0Iy+<^zmB`mj!=FYGG8S0Th|hMh zOCGc)3N37kq6Lgv+s4nG(?6?t12(i--~A&;CH*R}Dsz8%;@>PnWL!so#}1 zd(!lm<%ih~nDntn+cwJzMAa+>R+kHU*UF61oZ3d7vP3oPtA7*PcYhxmez-P`y9PTp z#rEwM2+*R$Nw|Y#{CEV9lOHiPw7Hz z$C4-lXCg5V3RXYGnB$oSkRP$T3Zx^r_aSI z%w6HRnCqcD`?G1{3jQX#%lFpd93~S75wRvjCi>lU3`zVXQ>h44tW z0_&6);M?Nh3P&uWey!w9>f>?A)@+}z1Z6?i;{p&=_B_h2@`s$2JX2Y{TkaMmf<>^u zOWxU@uteVn}A*WB6G;%SGMaO}tOxk@mK00rOA!fi5i+eKuS3`zeJ-ge|epCply^)8?Xv zt=6Sl+IB;jnDetzIMy)R)OzMS&H;e8DlFrhlP{5&&z`RpZ7t*@Ey26 z7rb;1#uyO_aws>-18b7sIpb9nLIbF*_je!I6oJrOc>9J@)C%oKa3N@78))l>IB?;3 z+|Ptyn|80q1-iquwVMoTY{P)))=KDk{5{f#DE{6$8&Isybic-NapdHhB6Gj!psr>c`1^)$?BhEF~YD`zo-vqf2At zjbA1#W1qIi$3q^KQ@bi6d!5P8 zUFlJbn_k$lJgA^xdQT`t5lO51L97Tj-TJ2V1{*IBdVX{b30;;abA-0dq~HHM-(-d) zbK@T+gF3?Va!(0_80OJgtXun~@5+yw0N59nu$dw=x_i@^hV#wgzMi5IVQ#z2MUH%b zBTLR$b6k2ETtT}pORooAS|u$H`oSziJ9Xu7g3QvQ`{@>KK&IaHIHz`3q>%TL-#CkG zJf7R;pU^rt%A#&m-2}q-Y}mq4Ue2Ev6Xeh_hPk}xVh}mkd}3w;i)p>~RT_0Zv*)$5 z!mTzsV*)IOISGX^`*gzi%sOU?VT{b**xgaF*45*<@?2Y2}D_mTNSfgt9jfyIk}tU4eO$d6FX;K6u~JHXnW9onlb_8EeFFR!9t7#~Hjtv! z)-}*NL!`dpBvQ<7PIB!Yy7-_$SVi;LQb8P-X9|p|5_kf9MXh*884{%OTd8?a-HfD~ z8ImZnuq?Fj!wck#-XS5nH#$#qe8#&Lj$Aw|D!O~k(V)OjtvKy77lBG6)K{`{{5CNk z2QSSyg;QGJ=7-rSJX80~^;mnvnO;LK@uiDoXIGm0`!fu_pR3A2UD+YgO+7=irsJ;M zToRf3X4$0bJ&FOS7w3P@SUt+2%_FANhZF)tQh&1&lh<~181rN7aN9sG74f(Bhxj z1e&7A=?({2;N%H5_#aWl@I73%n=*fh=?&h4+Ek{>s;qSTO; z|6tDXhfBeC7uTDAAdfP}VFpD3(P%Cw7^}+T+7Fn4eI2`N&ji>Q0=B#3g)&EPEa@Af z-XtY}#EQ0uzs^c9?JdbeT}4K0;Q19J6)wV5*GM9cfb~m~LvHy7(av?2^i8lpU4XL{ zBN2HeEX0{zvMTq#LUAlqVF=Fd=`y8eCDt&P)c>JbS|sfHVUGA6c>s~}JwW2KQ_Eq( zos(172_5Yaz%welsT<$NH>89mPObuqvp~K&{S+e|dKv=)O?NJkW`&VaBbbk@DjuLf za7!UMS!0|ee5j9EB@(c;aK#Gj%PA<3Lt?mbjyht`OuxFDsjf)8<)Fw-txeZeW$Z*G zj-s_B*O2pZD%cW9_Nb{)M`ADwJ+3Z|ktVcCM#(x?TCAuMcylvu)+pE1Y@_5I{$XQsZhG+ER2oYGj^gIi_jb6q$~hG^S+=8ENh#zQ(S0N7iJ@97p>Ll5|86T1#`3lch*L%wFgFyM6W>VOS|{{D~Nea`PQx)A3=2 zv8nO59o0=Y*<%mo(L^}DeWgx&Gaep#NwVhVL`D<N-qVIWp*Y0^jw*|r)O*B z1cwg?fOwu>sGmG>xNCNAhTkOp9&Ece6L&K43SFX#j;lXAh##KRgu)B>Q?i1L-~~mL z4LXf+VT*tSVSAEFA}*fnxAcEf#wL)|Jbnj!Y>f3qPYG!y-&k}Fvj2S)p#V^>P$-4z zOhyw$qSm?54V96>Vlg)MFmu;}!{vR(4rSl|b+eg-stIOl9xxN8ojFh1E)5~p)oQ<8 zB55M_3K!y&1;X<`Fs06fk44+hzBI*|{S%E-OzB-%<&`P{wH}9GNe0Tjg&AW=?y&GR=4C(N7ZBtjc zpACo7W!o|X+!}TW>Tj%TZGz}#+pUmbQtI;PMmN9T?it&TPheNT4V(hSGHGnt}riwXvi0f~^X=Td?GQZ0RJ(RL9rmVW5N zdsM+i+Z?W9GpYfvX$aoURHpU4!wj?~%ktXdsjBi&KNn&CjUinAPnb>rCVQ#U_qn1C zAL^j*p9m|n3O69Bh4Y5_e3d026Kf-~!6XanW@_YC`R|K^Mc=k3Qk8VIrgFxlm?kw5Pk zZdSM`JG&=f8|LKDgJC%qzAM&(ADRJ&;_2z|gt%}{6i^oS=ldwQ_~F>WG#1_zHcvvG z2__c`QDygI8tvxb#OI}N<74HB@FjpYY=g6WoM3Y^U(XWEDB?$?VWO4#MPYAiy!PN4vh|?KbOCTVWH3a zP~MiZKN7QH;6YmGNaWcv!|T+rvPn>=wZ;Fp;^FtVYsz+iK{TL}52!ST!*2BAoU>-< z=3I5j$01H3?34x4`7iBh)&nzf%|MsgWH?_gxX%xEmW4UAONo8EJ2~n_AbF8_7r?Ri z43$zXq$F$+<~V-WHx~!n1hwCXK>0rxPie7>blUmn1nS|vFecqDCKX)3i`Dmv4R$7R zMIXwqj3h%RCSR?)8QwmW8a&XE62$|BcXVF|i}UGy?(f4fy=VudMfYv~JzcPvHwmW0 z&bwU^9T>yxe~s00wQqQyE$l3>*87yMODkWgV^qxf=lsnxrUqa9ao6x9mtsQc6%WlT z!xxu94-WtOYB0?=sv~Kq9q@QMVXf(*q&8mfr9^2!$y;qle#=oDd-jK>_@pU~wk) z$MX&0QkMy&j>~1F$-!dXmQpf_EL+x06Y;hwKXiZ_ke3ULE^WqwkJ{_1K=gd*@1r`q zOs`cJS7eFoF1`HCJI$%5uj9(!%tDccW4d`8hNy!kG4@QS@80zP4No z5{ULHq7z{B?xmQ_$HeF5LL2|=XTJW9Dy68+W3~_znks-B%_zl3ert9==qzIvKg1=D zK$k`!xtUdgK37H<;CroA6K8qz(4mqZxE`;fm#$ak3Ry6Cd{jp^2}Ie6icCw;Y@e+y zrA=V|!#Y>a=F9@Kd-*9qdZ~hfjow#)CcTEbl%mdc>icW82a-{0XXZGfIq;=MrTE~z z4G&s7&Q2P!D=!B{{4g~9xz<77^N1x71G?AnrwD7VG}{JnrnS9^ISnDvw!$00ojODtXRN zMlp$v*$Q1#uo8>-h(j_c&B%J#L(TB$HLy*KoJR3aMqV7Cn+m!Bq(CJ{-MqD*Ji2)b z$s);^dr4%Uk2HN)JUs_JmP8=D(O=nB7!A`!aIAQ%OfHH6xHDaF>@Ze%->c)aHgPjd(a}n5gfR#K>40Rw&{0BSCwH@xN(ADg=wvA1fcw zvJX!xb7|FX+aWrxOFqUagY>u<`FMP3qh_ADGYvqPD0x|tmTS+Am*St`xM`GU=!~P= z_Tth0<&vSnzY4lJGYHL$cs-o35FR8f)CynA2~6Hqg98k|G*Lp#wB(&rV#lau6_Jz z4#(J^eHz;hWg=lB%eTJYr|!3UMuO1C%$ztZ{!e-p65zWcXmAw&&E2^-+4mU=L7;nxPr`CgX|l9^*{P9OY6lIWAlCmwx-!z&tCx$hY-ToEIiYl!nURzNY}4Z z!r|7=>}pSzey*Hdy6+qGTfH@ycz)UO4JnBE$qPs4T2Jc9(&Wbv3f5%Zy>%6t8&wI= z@4b_j*TEF}D2t?p^TFb>-zH__Rykeq2wlud50vhw*g>TJJSXmx5BB zj5Qzsu8`&H^#gt7M0qyw`6TTl4S2GTY730+VefF z=i^Q}b?;gof4_PZIzw+ed%goxcRt*UCIO`}yH!mi^x6IbEKV75t>@NsUwwq1{P~_` z$AI4UF05=Hr^?CiyuGmhO$jXR9$3LsYprVFofOkC?$ZSJzQRY9FZkFzEtjy{&RL#469lB1n zTX)EM-V?p_g9eM77Au*SQhZ%gLr7gkoE`{crnSZqv=2K$cjSM(X53F@h|?MU_a1uW z`6U8kbqfEr(Q-Nc_%#z_!N)FX#eic=CzJkaP;z>I5klNc2z`rnZ^)kGl2f_D`SM{7 zzsm8|PQt+d;a;DzKx&e(&r<{|9$<>r>|b$5CS3!1JIh5}AGf*A^BXD(-Tl#%sfpf1 z9;nbuft9?6U6_q7B!{G~#40B{=l%2eMs%pAUJaRQ3CvGt`(??`VaHba=!a-R33)Z` zzW>}C^f;JQ6ZEC2FZZ0MylS^tdv1fm#JCsbrKvv-!CNy$(D8UN{B=volHKQ}3tKB@ zb)Z-YoWSr|A(;V%?bP}4{-Zq&Jv#Q`Fq6ys2jMF-4+!kmkBP7dSbkakQz}l%8zX&) zva`}X4!0}$7Pm_~!sOJ-=loMmR7pjLp>Ee;Xpj)*Vf`vL?MsGunNMV+<6JH8bbNE& z2K?YUDnSl9Dz%-z+G(x+3{GOOXPsjs5XlQY%A%rYVkyFnf)c8_HcZ$FNB_`r9r3Hm z%b(D(nF1s2KGEi|+5K?bKhE3FV_h;J8}pbZtVVRG(k^$4@$l9l3zM7kZAYU63GMIh3+3B(_stAGa7uL9|5_>iLY0)w0h&^yCWtI$p0|*(8J`?j0~4=BtaHh67e4 zSfI@C*}HI~p{EquDEUTA(9TwHz7HG*UkRb$ZE?X8p17ZOtUb3?`Jw%cQ&1Q!BA~U^ zaa33rn~DhKN)n&e&6S;gqkWpNbXGzrD`ceoOF9QR>Z!X<`QVm3p5gU{yt8FL&%%Nx zIcqDm?bHEmoU0QQpThg3H7@(Ur;OUHn3lnDhU@Met^zqam&6Dd0lxV&W3A5){5n53 zoqZaR5pq3pIIDHKnlI6b#scj?F1^F{bSdkB-r6gPam2dP!n3p5m*?2yqPGkkiU;j|AhWeMnuFGH$qwW z?)zbi*3lOKaj8}AJ#D%*+FtTNd`*@zu1gZ@)h2u+=03 z;~RO8uycCl$IPJu+uNlvcJz+%phJ$^hx_Zm8C`phmcJ**s>cB$Uy*t z=RyDz6aLsrQ?%w_3(Va;Tc7SNr&FQ7PrJh&Hv@Kn8*c>7kbRavj9U*1<#)NxcV1rm zb-DN(OSemzvzGjaV`6JqX)h{vSA|eib1pq{;-U4bNiiHd-VOb1cD~{8F*r-0nu#7) zSAX=nZ_rl(8JBOQcl98@LG0ip0vrZXsTY4urpqgDt@X&SxPHi(emvf`>PqJMcvf#v z>J}@)nvwND3WRiQnD+ysV*D3rRDr#!uea*jZ!#{tH7(?aSxPK86ZM2(-^#DVBa6(i z0;~nF10D=pw0-Xgj0%w&#vDNtM>TiO7T=dM$b-~W0%#mmUl+o|v?r3Tao%rE>vbtL z^yO`)R<2y%w#2k-#jP`;kxRWIM!}Dw{yy_JT2yT(n9>v^GX@vsF;Yalp+RR){pPi# zuv0iN^^Tn}DI&jp%6ptsC6B~qKE8YImE$;isn^`JiPzTDv>vx!szcX77J2nnfa6Sl zTp)oxVC3$GQ}!065Pb_j|7G148DfoNRTF)8`+;s#6?o|AyBX+7-cNadMFDyY3fh+B zdZ691%mnpG;MRRCNhCIud5pii7?`BY5DQwxD%wPhQg5=Ed6SkU-c(jKgI?*IiEPkt zf2TN3#W*1pl}TdQZe=@rvTE7-sTi+qtPk`=QWJDu^Nuh*q^n7QLu#e^nZeyY7^uG= zzI?D|KV}0|e~rEZlTf*52RcYfkuGM9TR1}G=xsX|fomCfdJ#+AG^9ryae{XG5+53% zgQeD7(be^lapO|JR$iVZZuBD@Gajk@xw#cN%8~fjt&kTgc6yCY8wuF{-|+q8A^~i? zNVkZwQk?5xR(g6Ze}~9<3w_}((>RHmGO3pBca*+?B8yDM%mr(P+eAn~zv#d?Dtw6r zHgfJNXxcr7$;j+YbpGVU2!WiDEzR3I8~;y)S<@RLT=D#*A!Er=J2&65*??#bFUFHL zORWteDBw#dh0AIqAJKQV=rhQ6EKUqhOa&SUeTLu7{HXlAQ+b>#{G}rG(Oaqa)3XtN z1UdoHFA1J9O?N$uoGX50Pz;wHk?(+sJiEji_}!8V$2G}0>iA~XtIks|izH;GNgp1f zN8txDux(+gNx)o6JX^MK3O!0}g20gl7b~x4?#UE<+LhlcHvj5WK#40g_nh(CV&{|&$gDu{&~pW5!k7Qh zzn1?s8bH62KW@|Av1^n;;=9$2DO0@__ikA&aVHiHOWF^}+5F;tDEWC4FA$Ax@b~Q7 z)I}{ic`mtz1LN5VTK5~NH2raowZCoX`*euMc~lLkzjX{kbJ%L35B=?5E6F7ZqRQ6)g^CfRWb;goPCvOF&NOq|Fz4IP5`vQc+YURw|1Mzkxs)McN`bx3#}uH0zTy}>~# zQ(@0ewY<5V`s6#JsxR61%0mpDSZ7C0WW;?=6gOh6i(?X=wA;d8`>wn_cfVe5Co;Cg zN|Y2Yy?15Bs;x{Jc3R*?*XITf5yyCxwafWt{rnde%k*N>p(7{NV|h1O>>%Jw;!Q_p zN@KFUluJ%cRiXM_aSZQkS}2&G09&lOYeYwmkh`t4irLBR1j&4;OoiFrZ$!l z?T^Lt;}Nm}Je5s0@p+zdILCXMyah2q23T-8He2e{FqBfwmXbx~@dY+`C7^oZ1dl-Z zcqC@{5TVd(!Ju?M<-#8WE6zU_@5D>$3J6S(uHF z%lYLq;+K1>FDlRDWM{;NEkIpwn5{r#;Lk^Ik3C8GD0+$eRTW<_snoPY zNmqK`i1cyT1*s?mfPjhi)b1!;&xVmYs+AD+F+k%c&D3MZR>k-eV)#cF$H|G;DkHP+ z@Qjbhm-}zGH509(Z4RW0+&$f|U~F@5VK%j~m*`jks8DOS>m|OD>sA{V4OjSxl#|eq z@NqE?k%BO2*ga&L@27nyZLnz4v_@mhW4dQ-y7x3Q$X3Yc_r&r_!*J$tD_KXlMGk9% zwx3JWpcNS7>00D#G($Bv1+?#-CG#kX;%Lpl!;mznv~~Qz8s(Ms3&50pZ7=mz$;p?Q z#Fg1z1Slv@;DPfJwpPcz(>iCW3DV`v&~RRLTlmqhb(TiU$9`0pF1~6FP|tUmK4em& zLu@jF7`!m+&RkR2I~s{#P`YQ=#Lza_^-t)wqDj3T*fC=_G-0)2V{`eU9W4yPp00n7uW$1 z=S%F+RdRWzx8Yrw0qb{imiE%RGbGA%HmvjHC~9N=Dg&^l{6zHT>9NLHtB%auEewQQ zUJJ{cZ-|_D&+_*IXnp5F-E_w5K zw0C*r#*&xzN>LNnb=QD?5IpEY-jGuk2u^2&gxnZJ2$*31M=e(}%2;xUcf0vfy>;OGrwwa9rF=I!NBY`9kAA_e7!Bapmp8D*UHQLt=H zXSiob|T-1`5Cf(hic-S}Rq(e_3FJyifIJXfV2j>Do7A8uB zee)wudw{Ng8RQT+S;l5TTlg#7v{$4`Kqlb|g}%oA>8i_O9Bc&GH=!R+J4R`A6nwxd zLh&6JrGl{``+ z>x3Cx$^w^uQbEiOLi!Cw>No-=$c~84;E-0gw4j)Yu*_LdW_0_Slvni)(7bjz5XR@i!)gTz*M zAy?WfbroD13P>HD4V)S!jT4@1X*%#`K9l`)C%#yHV1e_;sTa zfeTA-5C6C8`eDBF7P`MzCWG3l6rqh~M9jIE)$B0@n2Yg$b2>hLg2g10O@7{qy9fpZRkc9+w74grAE4-0sa?x#N0mJsYK@m|7aGvja&=lI6Sr2E4AJ z`bMhE#t&K^>TD`b#bFDf)2XfpwNQ|`4fOf1!+r#M@9DJfLF*ImhhI;ig~d02k{BB( zT?btrZ2g&!ByF8J2JSnP+N?}&w)|AOb4eglRB=1ZC&TCD`4!d;QQyi!HYHVu|1cc0 z?H&wNDKgkS6Ly@Q_q4aC5#@Q2e)stn$P$ie@yXYVVTJR?@-}+x1)Nr5MBn8*|3-Xg z5Xc9C76XjfNjyw z_1<;4Bfjn|qiy7e)kcb0n5~`powhI&%cE>s*7ea2P3XNh(;>^Rc~#qnKou#8m^>RT zb?o^brhh^Y4H~;JfReA6cRX>Se?R7a|EYa^@VyQ1AXrNE+W~%HTu9W_keRwYB=lN5 zx30nj?ckpJ)qsL2DS!C-6_4{|tFt>rU{hJUX7h>u-p0b<8&1iWXV}S)${BgPT>ouC z8kf`GzXr^&@j~^PC8Vi3^Z~qN93!tW8GX%3v{goz-MEXALC>s4U}u*f3^F8a-gRcx zXr@cJYyR@A*D!D>u;*+bq?aL^jWFXWy2$x-cv45%d*?m$1%{jPrkZ4U4jgSNtZEh? zf`jrJ!^DE_RVIWj7w`r2-D#Aat;GlUr|LOcuWMogXZ7fi}P!tI+?o)|E7SOu|O)bK%&YFmNJL9HlLm8}U zS~QCnQKOcVJpn!OL%?O%UK1%1|0m)BW;SkP2wE^G-ojY>o{jxe>ubSah2w}FTVP1* zF%Hw)S@ppy%p4Y&?Jq5$K1P*+j|ak^T;U6yi2ReKDM|vnG{8#W{i3e?Ln{Qep-S3E z(KN_k!7dAd{yZjqxy7fODf6f?1&kwHBb*>OvvME!|qs)gGpo$BuhTkO z{FC!9wQf0N($2Upl{k~)ct`ygZBya~JB^HZ+mbU`rSK3c!!KaDMR<0d-I#6fqZuPu zp&SYS0|sb_bpa2pEcKVcN78ZZ@*QE+pAL}&oyxxxNPYBhv<1}kzDpSft@nl_;*!0^ zQ5HB0NP1OqU3%m2(qVl;bD#LpKUr)=pSV@Lwnj?yjrB3nVOy$rgUD!VJA`c@WGZ(fy|g3g_gN-ECJGr|RqbTm%z2AC1eWb^XTxq7O3!D{4@@s#@@{ zegK}@ObD&95h4NsjM-!7<6j3w~5_dfC7vcb^mUN{{V zj{_l^7>^2N!1+oINm%+s4;b$#=MFxZu|UbS#BD%__@B&6?945CR9N0BjnMtO+lrS@ zK&V59JofBs<{jJbB!9l;rJ!o-*6|;RK|p~qChB@64-K^PR3YpDYS^aWi;oQu@om^_ z#i_-NdZ+aA2LWPZ_G*y1YeoibEdiizRYiro_w{R zKoA0KjOeiU-qkJL!he+l=Yoy4R?>16q|8MRzu#*gYt0_y@dw=UuPzX=0+GLz5j{)F zJ<>i-Y~m<2+Xj6kEfn}ln>$5|htoJr6G<+1eD9yu@nG+8#W#R4(urSgyfKI7Xc+{p zSD8G$xjeGV;OuE~jZ(=qPI=e>HVdMaOOX~l+Ls3%9~^KZ#+yS}Bg@U=7uC4vjwX&J zA2;IkyX?4fcONTi`GNc~dy}Iu0GcmQ(adVkP)v1A#U&q&jZ6fdj6>k96jp==MX<-U zjX2>C2k_P==uq=pO=0&-oWrCi2{QV1GK0f0P#jObRteC*1^ox@PqtgsUVbSp2fey6 zDbgha(km~uQB`@=H(v$~Y~3a0>qN!1V3k1=vZuJbL~i7b*8S_STY1)-_tv6$_7 z%bS&)>g?{EJslTz5n6b{ufRh8hjZ8) z!3j?#s)(9V^4XXBwxW#cwa-c7>ExOIUXr?kB!>A-ddwF^ubgMMkE)|>;ek4uTW~hU zQOY>`Qd^C|ouOs)LUNiKFSaY9Zw3MHx z-NcX|ecO6GXJ109o;f2m%zn^*(#JsYS#8=j-cOwXeHOyzzYmiJ{D|CC9G>rO`2>BX z5qXN$_em!+v^yE&hj2@Lg@}2ht5GFXXVO-ZPD!p7A@i-WcpFV?HLDoQ zE4kWg8#aW;-sN>auuoNG_kgIT0ESZ%BWo$cM7OlhgczAyQ8$B<)oUldye3^7X*Yxf zs~4uSdK_s6UTOh?ZlUMvK=*0Y)>P9QATMKSWN|J$thkR;c)@+6n%I&6xlQ;v;w01) zRIn`Rj;vO=Z?r1S#>X(9tHh%T^Z7M~ml2?h!_{tiw>t7B-`xdA*wV6+zQi3l!(>^n z-_4F;=Hvy!W}p1JaA!)ytHzGfkb1Qc4&-XhA#}JYjoSKl-*g(3dIuNvQD!P=0lb!I zJkH~M+vWS-s-TiMdiQ)&*i9d$G2RQxsFsCpIW#KdU=YdM)>@=1H<{RH(2Cep+L7r# zwt7#ZW&(+e-$=2hIJmSz%-re#p*M6tdX2n&?!eqp=n|6DpygpDUthdgnt&W3% zj#+B@$f*KLm$>%=9!<;SR_0$GP$n$o}cwoxl z#iL6G1E~%inkLS;4BKqYV?TqR*Qk^iTj(w&KgSM}76;#azE2)qu#4C9o{gY*rNxF> zexM!>X}gru{3Q zMQRUjRCL1>Qc&K@R|S9M#d$%L@R>KF+>yY*q6sbzCl(Y)1(3kAb|E539~G z980XVx8Z<};v55IdCvWy(9|ig@gR#3O`H${*`;%kTRI0RnZeOW*im(6ujocOgt~$g>EKvYr2Jq|_7d~`l6zM6>D*=5$fu}dQctIphm?tFzQ&29Q7(3(7;r~`DQ8qCA(|M8ZwB&Len)kT(J=iffOGmo0)N=xLU+Hjroej#2EXr~ z0cU;R6n}1yAJr@GG2h^SPHn|t5g@WEA$}0ZU-@;_F-FTW1pokAy9IvzsvGq!&KL}v zI|bIg?m}~yGrnI+tnxY6!|Tsd9bY+Y#qq3asUVcEJwP4t1r2WsL2W3~rA zGFy#FwQIROTQyPlz{D&rW{Fv|nCdKU&0?kw3LV`n1v<*Vat(!+(&Nu@aBz3O`+a@T z>2w+`4EWyfexKJ<67q%+ejk4P{@C*Nl(=C4?~mDV_FV`6@~16P;3-4tt^=ww9?axJ zz-UNy1<`{O=!gVbPpHn=C{tVm@JZP$aB0MbfvAQf^#&S4SvXAjmHazh2d+T(0Y5{Xg|;IPS@9tC<9Nb3Ue6<{tdFcs4f<&zI-o4AU~R3~iQR0UuNpm7oq*1PzZ za-J?Ap6T$nzN$K8vvT+l`QUUN7@N^BHe1Op5tASM0S*8nONiecgEZ?| z002n1flH0Ra*^s1vbG_+upc=c4EL)J*$Ny0L>7=*UBKe)VbvL*PRa@NH30W~s!Pb4 zI$@;3x%gJU&EfzcvWQ#P-a;z5q&nl%(QS|))Zc$rfQe6Nkf}&OoPodftC8Tb71c3Y zi35PhBJ^|;W4*t|>Y}+Hw=01A&kFckJ&?(Z>zFBbEd%&kB+z;yB1GQ3mzD#7$U@R< z%NV)%3ZnhLLws%=nbeATuMN281A3c)Ww+`Q%12TRAe%iH354HJow8jxpNT9-Vqtm+ z3)4fYL$-wN4SRC$bBFqiYD(Hvw@{uCc-gxqpFLiEbWL^2cH#gaB2&wzboa=MeQkm8 zLsvuJIuL>oyh@NZN6MHGc&5YO_6OA|JAwZKAfmhw>z!#C`eB!zUP^tSx`j;X9lH=M z9RX_``~eOCBFZD_3p=SXbRcrmzknz8~?oe*XDD*xXmhZV(3m5#<*t z#nfxV?ZYqh+{+}=S5@aw4wLdCfP)c#>rWx9_reJd03ymuYj;_m&Fa24EXh^G$$t4^BL}V#4EA2DqCyw6z z%hbZ&@3wTgYfIYz*i?7XmeT?8veT)Z{*m{y^QvQV5eEPfS(2VemtFtK<#t!FXu9@0 zjnSe|Nf;ag`M>~h&L)jhr^-J!syZf@aR3mJrKRRpt47ZBRk^E*C-*$v94oAFAI3-T z93oSZ0N#WlPep=ly#4b5Z~zby0Z2|K>V{vqSm&uN9o_SE)3U3q@NsYmn1KPH6NZfN zz`rpZ07OLpVkNq?@7nX-D5!K#g}&Kv)AOkBFn~hUUGyK)0A7dCUX1vU46BYYBMtx} zqW@xjHd!HlLv>po$UulcK^kYhYvSDT>hPNCpnSyvKt!}jMkZT$=j~|t&f8Jg zJ&t(bXw|jyqcu)vsjCGX0~?Wr#Ct-+Z)HZFjZ}u`R0mlB2LKV#7SLBRC9@ZzZL=4m zaCjUGj3&8(F0BPIE-x1$w2!Z z)lu}ZeEgv!BFb6mc&a$oeXA+feG33!bJ>%{`^r8nJy^M16e@N){e?lzq1C`#?7{zzreAH7PNKmG$9B?Xh)*U9<`RZvYrOQb9yS|77Tf zGcmciFEP2e?~@<17da9I74AC)yS;H|pg?!|3U#~J35VBdvllv?HkZu}yYNB?2_c+9 z6D|M{0>!w0Rv`;u`J+#lgg^=s62Lqp<{`v9Am@d^Jfw&La#k3)X*g2Ri0|0aj(rn| zh=_=Yh=_=Yh=_=Yh=_=Yh=_=Yh=_=Yh=_=+>+f`BJzW@azy|;T002ovPDHLkV1nVl B1L*(& literal 5347 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 X@eDJUQo;Ye2mwlRs { sx={{ mr: 2, mt: 1, mb:1 }} /> + Password must be 8-12 and contain capital letter and special character { @@ -37,6 +40,8 @@ export default function SignIn({setLoggedin}) { }; const handleForgotClick = () =>{ + + setForgot(true) } @@ -53,6 +58,10 @@ export default function SignIn({setLoggedin}) { setopenBackdrop(false); }; + const handleChange = (e) =>{ + setForm({...form,[ e.target.name] : e.target.vale }) + } + React.useEffect(()=>{ @@ -194,28 +203,94 @@ export default function SignIn({setLoggedin}) { Reset Password - - + + Enter Your Email + + + + + + + + + + } + + +{ token && + + + + + + + + + Reset Password + + + + + + + + + From 80571ac8e64249635f2fd26b3d8e1bd3bc9c825d Mon Sep 17 00:00:00 2001 From: areebkhan Date: Thu, 28 Apr 2022 15:17:31 +0500 Subject: [PATCH 04/37] refactor --- backend/routes/routes.js | 2 +- frontend/src/pages/SignIn.js | 35 ++++++++++++++++++++++++++++++----- 2 files changed, 31 insertions(+), 6 deletions(-) diff --git a/backend/routes/routes.js b/backend/routes/routes.js index 9e95833..66518e4 100644 --- a/backend/routes/routes.js +++ b/backend/routes/routes.js @@ -11,7 +11,7 @@ routes.post('/user/:id',auth.authMiddleware, controller.editUser); routes.post('/register',auth.authMiddleware,controller.register); routes.post('/ChangePassword',auth.authMiddleware,controller.ChangePassword) routes.post('/ResetPassword',auth.authMiddleware,controller.ResetPassword) -routes.post('/ForgotPassword',auth.authMiddleware,controller.ForgotPassword ) +routes.post('/ForgotPassword',controller.ForgotPassword ) routes.post('/attendance_transaction',auth.authMiddleware,attendance_controller.attendance) routes.post('/getreportattendance',auth.authMiddleware,attendance_controller.report) routes.post('/holiday',auth.authMiddleware,attendance_controller.holiday) diff --git a/frontend/src/pages/SignIn.js b/frontend/src/pages/SignIn.js index 60d59da..b126b01 100644 --- a/frontend/src/pages/SignIn.js +++ b/frontend/src/pages/SignIn.js @@ -15,6 +15,7 @@ import { Avatar } from '@mui/material'; import LockOutlinedIcon from '@mui/icons-material/LockOutlined'; import { FormHelperText } from '@mui/material'; +import { useLocation } from 'react-router-dom'; const Alert = React.forwardRef(function Alert(props, ref) { @@ -31,17 +32,40 @@ export default function SignIn({setLoggedin}) { const [openBackdrop, setopenBackdrop] = React.useState(false); const [forgot, setForgot] = React.useState(false); const [form, setForm] = React.useState({email:"", NewPassword:"",ConfirmPassword:""}); - const paramsString1 = ''; - + // const [token,] + const location = useLocation().search; + const searchParams1 = new URLSearchParams(location).get("token"); + const handleClick = () => { setOpen(true); }; const handleForgotClick = () =>{ + + const {email} = form + console.log(form) + if(email){ + setopenBackdrop(!openBackdrop); + const data = { + resetEmail: email + } + axios.post('/api/ForgotPassword', data) + .then(function (response) { + + handleCloseBackdrop(); + }) + .catch(function (error) { + console.log(error); + handleCloseBackdrop(); + + }); + + } + setForgot(true) } @@ -59,7 +83,8 @@ export default function SignIn({setLoggedin}) { }; const handleChange = (e) =>{ - setForm({...form,[ e.target.name] : e.target.vale }) + setForm({...form,[ e.target.name] : e.target.value }) + console.log(form, "asdasd") } @@ -120,7 +145,7 @@ export default function SignIn({setLoggedin}) { return ( - {forgot===false && + {!forgot && !searchParams1 && +{ searchParams1 && !forgot && Date: Sat, 30 Apr 2022 12:28:09 +0500 Subject: [PATCH 05/37] refactor --- backend/routes/routes.js | 2 +- frontend/src/pages/Dashboard.js | 5 +- frontend/src/pages/MailSetup.js | 96 +++++++++++++++++++++++++++++++++ frontend/src/pages/SignIn.js | 41 +++++++++++--- 4 files changed, 136 insertions(+), 8 deletions(-) create mode 100644 frontend/src/pages/MailSetup.js diff --git a/backend/routes/routes.js b/backend/routes/routes.js index 66518e4..f089474 100644 --- a/backend/routes/routes.js +++ b/backend/routes/routes.js @@ -10,7 +10,7 @@ routes.post('/login', controller.login); routes.post('/user/:id',auth.authMiddleware, controller.editUser); routes.post('/register',auth.authMiddleware,controller.register); routes.post('/ChangePassword',auth.authMiddleware,controller.ChangePassword) -routes.post('/ResetPassword',auth.authMiddleware,controller.ResetPassword) +routes.post('/ResetPassword',controller.ResetPassword) routes.post('/ForgotPassword',controller.ForgotPassword ) routes.post('/attendance_transaction',auth.authMiddleware,attendance_controller.attendance) routes.post('/getreportattendance',auth.authMiddleware,attendance_controller.report) diff --git a/frontend/src/pages/Dashboard.js b/frontend/src/pages/Dashboard.js index 0d2200d..616e351 100644 --- a/frontend/src/pages/Dashboard.js +++ b/frontend/src/pages/Dashboard.js @@ -26,7 +26,7 @@ import ChangePassword from './ChangePassword'; import HolidayResister from './HolidayRegister' import DailyAttendence from './DailyAttendence'; import ResetPassword from "./ResetPassword"; - +import MailSetup from './MailSetup'; @@ -174,6 +174,7 @@ function DashboardContent({setLoggedin}) { + } /> } /> @@ -181,7 +182,9 @@ function DashboardContent({setLoggedin}) { } /> } /> } /> + } /> + diff --git a/frontend/src/pages/MailSetup.js b/frontend/src/pages/MailSetup.js new file mode 100644 index 0000000..0ebf57b --- /dev/null +++ b/frontend/src/pages/MailSetup.js @@ -0,0 +1,96 @@ +import React, { useEffect } from "react" +import Paper from '@mui/material/Paper'; +import { Box, TextField, MenuItem, IconButton } from "@mui/material"; +import { Save } from "@mui/icons-material"; + + + + +function MailSetup(props) { + const [formData, setFormData] = React.useState({ HOST: 'Gmail', USERID: '', Password: '', senderName: '' }); + const [bool, SetBool] = React.useState(false); + const [userData, setUserData] = React.useState({}) + const [mailSetup, setMailSetup] = React.useState({}) + + const changeHandler = (event, name) => { + setFormData({ ...formData, [name]: event.target.value }) + } + + const onSave = () => { + // console.log(formData); + if (!formData.HOST || !formData.Password || !formData.USERID || !formData.senderName) { + props.openSnackbar("Please Enter Details", 'error') + return; + } + if (formData.HOST === "Others" && !formData.hasOwnProperty('PORT') && !formData.PORT) { + props.openSnackbar("Please Enter PORT", 'error') + return; + } + + if (mailSetup && Object.keys(mailSetup).length > 0) { + let formCopy = { ...formData, _id: mailSetup._id } + if (formData.HOST === "Gmail") delete formCopy.PORT; + + } else { + let formCopy = { ...formData, _id: mailSetup._id }; + if (formData.HOST === "Gmail") delete formCopy.PORT; + props.saveMailSetup({ ...formCopy, OrganizationName: userData.OrganizationName, OrganizationID: userData.OrganizationID }) + } + + } + + useEffect(() => { + setUserData(JSON.parse(localStorage.getItem('userData'))); + if (props.mailSetup && Object.keys(props.mailSetup).length === 0) { + props.getMailSetup() + } + if (props.mailSetup && Object.keys(props.mailSetup).length > 0) { + // console.log("props.mailSetup " , props.mailSetup) + props.mailSetup.PORT && SetBool(true) + setMailSetup(props.mailSetup) + setFormData({ HOST: props.mailSetup.HOST, USERID: props.mailSetup.UserID, Password: props.mailSetup.Password, senderName: props.mailSetup.SenderName, PORT: props.mailSetup.PORT || '' }) + } + }, [props.mailSetup]) + return ( + + + changeHandler(event, 'senderName')} id="senderName" label="Sender Name" variant="outlined" /> + + { + setFormData({ ...formData, HOST: event.target.value }) + if (event.target.value === "Others") { + SetBool(true) + } else { + SetBool(false) + } + })} + variant="outlined" + > + {[{ value: 'Gmail', label: 'Gmail' }, { value: 'Others', label: 'Others' }].map((option) => ( + + {option.label} + + ))} + + + {bool && (<> setFormData({ ...formData, PORT: event.target.value })} label="PORT" variant="outlined" />)} + changeHandler(event, 'USERID')} id="USERID" label="User ID" variant="outlined" /> + + changeHandler(event, 'Password')} id="Password" type="password" label="Password" variant="outlined" /> + + + + + + + + ) +} + +export default MailSetup; \ No newline at end of file diff --git a/frontend/src/pages/SignIn.js b/frontend/src/pages/SignIn.js index b126b01..40756f9 100644 --- a/frontend/src/pages/SignIn.js +++ b/frontend/src/pages/SignIn.js @@ -31,7 +31,7 @@ export default function SignIn({setLoggedin}) { const [message, SetMessage ] = React.useState({value: "", type:""}); const [openBackdrop, setopenBackdrop] = React.useState(false); const [forgot, setForgot] = React.useState(false); - const [form, setForm] = React.useState({email:"", NewPassword:"",ConfirmPassword:""}); + const [form, setForm] = React.useState({email:"", NewPassword:"", ConfirmPassword:""}); // const [token,] @@ -43,7 +43,6 @@ export default function SignIn({setLoggedin}) { }; const handleForgotClick = () =>{ - const {email} = form console.log(form) if(email){ @@ -53,8 +52,10 @@ export default function SignIn({setLoggedin}) { } axios.post('/api/ForgotPassword', data) .then(function (response) { - + setOpen(true); handleCloseBackdrop(); + console.log(response,"response") + SetMessage({value: response.data.message, type:"success"}) }) .catch(function (error) { console.log(error); @@ -64,11 +65,39 @@ export default function SignIn({setLoggedin}) { } - - setForgot(true) } + + const handlResetClick = () =>{ + const {NewPassword} = form + setOpen(true); + if(NewPassword && searchParams1){ + setopenBackdrop(!openBackdrop); + const data = { + new_password: NewPassword, + token: searchParams1 + + } + axios.post('/api/ResetPassword', data) + .then(function (response) { + + handleCloseBackdrop(); + SetMessage({value: response.data.message, type:"success"}) + if(response.data.message==="Your Token is Expire or Not valid."){ + SetMessage({value: response.data.message, type:"error"}) + } + setForm({NewPassword:"", ConfirmPassword:""}) + }) + .catch(function (error) { + console.log(error); + handleCloseBackdrop(); + + }); + } + +} + const handleClose = (event, reason) => { if (reason === 'clickaway') { return; @@ -321,7 +350,7 @@ export default function SignIn({setLoggedin}) { fullWidth variant="contained" color="inherit" - onClick={handleForgotClick} + onClick={handlResetClick} sx={{ mt: 2, mb: 2 }} > Reset Password From 51727b9e3159e56040e81ecc124ebf04b4ca8da3 Mon Sep 17 00:00:00 2001 From: areebkhan Date: Sat, 30 Apr 2022 12:55:48 +0500 Subject: [PATCH 06/37] refactor --- frontend/src/App.js | 2 +- frontend/src/components/MainListItems.js | 5 +++++ frontend/src/pages/Dashboard.js | 2 -- frontend/src/pages/ResetPassword.js | 7 ------- 4 files changed, 6 insertions(+), 10 deletions(-) delete mode 100644 frontend/src/pages/ResetPassword.js diff --git a/frontend/src/App.js b/frontend/src/App.js index 5ca48d0..f316d53 100644 --- a/frontend/src/App.js +++ b/frontend/src/App.js @@ -2,7 +2,7 @@ import { useState } from "react"; import SignIn from "./pages/SignIn"; import Dashboard from "./pages/Dashboard"; import { BrowserRouter, Route, Routes } from "react-router-dom"; -import ResetPassword from "./pages/ResetPassword"; + diff --git a/frontend/src/components/MainListItems.js b/frontend/src/components/MainListItems.js index c98dc29..cba8cd0 100644 --- a/frontend/src/components/MainListItems.js +++ b/frontend/src/components/MainListItems.js @@ -28,6 +28,11 @@ export const mainListItems = ( icon: , path: '/dailyattendence' }, + { + text: 'Mail Setup', + icon: , + path: '/mailsetup' + }, { text: 'Change Password', icon: , diff --git a/frontend/src/pages/Dashboard.js b/frontend/src/pages/Dashboard.js index 616e351..f8a4fb3 100644 --- a/frontend/src/pages/Dashboard.js +++ b/frontend/src/pages/Dashboard.js @@ -25,7 +25,6 @@ import { useNavigate } from 'react-router-dom'; import ChangePassword from './ChangePassword'; import HolidayResister from './HolidayRegister' import DailyAttendence from './DailyAttendence'; -import ResetPassword from "./ResetPassword"; import MailSetup from './MailSetup'; @@ -181,7 +180,6 @@ function DashboardContent({setLoggedin}) { } /> } /> } /> - } /> } /> diff --git a/frontend/src/pages/ResetPassword.js b/frontend/src/pages/ResetPassword.js deleted file mode 100644 index 5d180a6..0000000 --- a/frontend/src/pages/ResetPassword.js +++ /dev/null @@ -1,7 +0,0 @@ -import React from 'react' - -export default function ResetPassword() { - return ( -
ResetPassword
- ) -} From 3c2d2e26d467ae3c25c0b75703038273e4ab1a2c Mon Sep 17 00:00:00 2001 From: sharjeel khan Date: Thu, 28 Apr 2022 16:34:38 +0500 Subject: [PATCH 07/37] routes changes --- backend/routes/routes.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/routes/routes.js b/backend/routes/routes.js index f089474..bdacb6f 100644 --- a/backend/routes/routes.js +++ b/backend/routes/routes.js @@ -10,8 +10,8 @@ routes.post('/login', controller.login); routes.post('/user/:id',auth.authMiddleware, controller.editUser); routes.post('/register',auth.authMiddleware,controller.register); routes.post('/ChangePassword',auth.authMiddleware,controller.ChangePassword) -routes.post('/ResetPassword',controller.ResetPassword) routes.post('/ForgotPassword',controller.ForgotPassword ) +routes.post('/ResetPassword',controller.ResetPassword) routes.post('/attendance_transaction',auth.authMiddleware,attendance_controller.attendance) routes.post('/getreportattendance',auth.authMiddleware,attendance_controller.report) routes.post('/holiday',auth.authMiddleware,attendance_controller.holiday) From 088102886961781ddc8b10a38c2c956f8efc4ce9 Mon Sep 17 00:00:00 2001 From: sharjeel khan Date: Sat, 30 Apr 2022 12:55:07 +0500 Subject: [PATCH 08/37] new route create Email --- backend/controllers/email_controller.js | 94 +++++++++++++++++++++++++ backend/controllers/user_controller.js | 22 +++--- backend/models/email_schema.js | 24 +++++++ backend/repository/email_repo.js | 43 +++++++++++ backend/routes/routes.js | 6 +- 5 files changed, 177 insertions(+), 12 deletions(-) create mode 100644 backend/controllers/email_controller.js create mode 100644 backend/models/email_schema.js create mode 100644 backend/repository/email_repo.js diff --git a/backend/controllers/email_controller.js b/backend/controllers/email_controller.js new file mode 100644 index 0000000..551b7ff --- /dev/null +++ b/backend/controllers/email_controller.js @@ -0,0 +1,94 @@ +const MailSetupRepo = require("../repository/email_repo"); + +exports.CreateMailSetup = (req, res) => { + let ActionDetails = { + ActionTakenByName: req.user.FirstName + " " + req.user.LastName, + ActionTakenByID: req.user._id, + ActionTakenOn: new Date(), + ActionTakenByLoginID: req.user.LoginID, + Designation : req.user.Designation + }; + + let mailSetupObj ={ + SenderName : req.body.senderName, + HOST : req.body.HOST, + CreationDetails: ActionDetails, + Email: req.body.USERID, + Password : req.body.Password + }; + if(req.body.PORT){ + mailSetupObj["PORT"] = req.body.PORT + } + + console.log(JSON.stringify(mailSetupObj)) + console.log(JSON.stringify(ActionDetails)) + + MailSetupRepo.create(mailSetupObj).then((success) =>{ + const mailSetup = success + if(mailSetup.HOST == "Gmail"){ + process.env.Email = mailSetup.UserID + process.env.Password = mailSetup.Password + process.env.Host = mailSetup.HOST + process.env.SenderName = mailSetup.SenderName + console.log("GMail " , mailSetup); + }else{ + process.env.Email = mailSetup.UserID + process.env.Password = mailSetup.Password + process.env.Host = mailSetup.HOST + process.env.Port = mailSetup.PORT + process.env.SenderName = mailSetup.SenderName + + } + res.status(200).json({status : true , success}) + }).catch(err =>{ + res.status(500).json({status : false,error :err}) + }) + +}; + +exports.GetMailSetup = (req, res) => { + MailSetupRepo.find({}, true).then((success) =>{ + res.status(200).json({status : true, data:success}) + }).catch(err =>{ + res.status(500).json({status : false,error :err}) + }) + +}; + +exports.UpdateMailSetup = (req, res) => { + let query = {_id : req.body._id}; + let update = {$set : {...req.body}}; + update["$set"]["Email"] = req.body.USERID + update["$set"]["SenderName"] = req.body.senderName + delete update["$set"]["Email"] + delete update["$set"]["_id"] + if(update["$set"]["HOST"] === "Gmail"){ + update["$unset"] = {PORT : ""} + } + MailSetupRepo.updateOne(query, update).then((success) =>{ + res.status(200).json({status : true , success}) + }).catch(err =>{ + res.status(500).json({status : false,error :err}) + }) + MailSetupRepo.find({}, true).then((success) =>{ + const mailSetup = success + if(mailSetup.HOST == "Gmail"){ + process.env.Email = mailSetup.UserID + process.env.Password = mailSetup.Password + process.env.Host = mailSetup.HOST + process.env.SenderName = mailSetup.SenderName + console.log("GMail " , mailSetup); + }else{ + process.env.Email = mailSetup.UserID + process.env.Password = mailSetup.Password + process.env.Host = mailSetup.HOST + process.env.Port = mailSetup.PORT + process.env.SenderName = mailSetup.SenderName + + } + console.log("Set environment and update successfully"); + }).catch(err =>{ + console.log("update but not set in environment " , err); + }) + +}; \ No newline at end of file diff --git a/backend/controllers/user_controller.js b/backend/controllers/user_controller.js index 9864d86..75f3e62 100644 --- a/backend/controllers/user_controller.js +++ b/backend/controllers/user_controller.js @@ -162,27 +162,27 @@ module.exports.ForgotPassword = async (req, res) => { try { let emailID = req.body.resetEmail; console.log("object", req.body) - let user = await user_repo.find({ Email: emailID },true); + let user = await user_repo.find({ Email: emailID }, true); if (user) { console.log(user, "------") const token = uuid(); let EmailMessage = - "Dear  " + - user.FirstName + - " " + - user.LastName + - "
We are sending this email to your request for reset the password in Attendance App" + - "
" + - "Please find below the link to reset your password!" + - '
" + + user.FirstName + + " " + + user.LastName + + "
We are sending this email to your request for reset the password in Attendance App" + + "
" + + "Please find below the link to reset your password!" + + '
' + 'Reset Password' + "" - console.log(EmailMessage,'some info') + console.log(EmailMessage, 'some info') await user_repo.updateOne({ Email: emailID }, { $set: { Password_ResetToken: token, ForgotPasswordEmailSentTimeStamp: new Date() } }) let email_to_send_for_reset = { To: emailID, diff --git a/backend/models/email_schema.js b/backend/models/email_schema.js new file mode 100644 index 0000000..ef21871 --- /dev/null +++ b/backend/models/email_schema.js @@ -0,0 +1,24 @@ +const mongoose = require('mongoose'); +const Schema = mongoose.Schema; +const ObjectId = Schema.ObjectId; + + + +const ActionDetails = { + ActionTakenByName: { type: String }, + ActionTakenByID: { type: Schema.ObjectId }, + ActionTakenOn: { type: Date }, + ActionTakenByLoginID: { type: String }, + CardNumber: String +}; + +const MailSchema = new Schema({ + SenderName: String, + HOST : String, + PORT : String, + CreationDetails: ActionDetails, + Email: String, //0 inactive 1 active, + Password : String, +}) + +exports.getMailSetupModel = mongoose.model("MailSetup", MailSchema); \ No newline at end of file diff --git a/backend/repository/email_repo.js b/backend/repository/email_repo.js new file mode 100644 index 0000000..b538a81 --- /dev/null +++ b/backend/repository/email_repo.js @@ -0,0 +1,43 @@ +const Email_Model = require('../models/email_schema'); + + + +exports.create = (user)=>{ + return Email_Model.create(user); +} + +exports.find = (db_query, isSingle, isLeanNotRequired, select, sort, limit, skip)=>{ + let query = null + if(isSingle){ + query = Email_Model.findOne(db_query); + } + else{ + query = Email_Model.find(db_query); + } + + if(sort){ + query.sort(sort); + } + if(skip){ + query.skip(skip); + } + if(limit){ + query.limit(limit); + } + if(!isLeanNotRequired){ + query.lean() + } + return query; +} + +exports.updateOne = (query, update) =>{ + return Email_Model.updateOne(query, update); +} + +exports.updateMany = (query, update) =>{ + return Email_Model.updateMany(query, update); +} + +exports.count = (query) =>{ + return Email_Model.count(query); +} diff --git a/backend/routes/routes.js b/backend/routes/routes.js index bdacb6f..3263f30 100644 --- a/backend/routes/routes.js +++ b/backend/routes/routes.js @@ -1,7 +1,8 @@ let express = require('express'); let routes = express.Router(); let controller = require('../controllers/user_controller'); -let attendance_controller =require('../controllers/attendance_controller'); +let attendance_controller = require('../controllers/attendance_controller'); +let email_controller = require('../controllers/email_controller'); let titlesDictionary =require('../utils/routes_dictionary'); let auth = require('../services/auth'); @@ -10,6 +11,8 @@ routes.post('/login', controller.login); routes.post('/user/:id',auth.authMiddleware, controller.editUser); routes.post('/register',auth.authMiddleware,controller.register); routes.post('/ChangePassword',auth.authMiddleware,controller.ChangePassword) +routes.post('/UpdateMailSetup',auth.authMiddleware,email_controller.UpdateMailSetup) +routes.post('/CreateMailSetup',auth.authMiddleware,email_controller.CreateMailSetup) routes.post('/ForgotPassword',controller.ForgotPassword ) routes.post('/ResetPassword',controller.ResetPassword) routes.post('/attendance_transaction',auth.authMiddleware,attendance_controller.attendance) @@ -20,6 +23,7 @@ routes.post('/getUsershowLeave',auth.authMiddleware,attendance_controller.getUse routes.post('/getlisPendLeave',auth.authMiddleware,attendance_controller.getlisPendLeave) routes.post('/postExcelReport',auth.authMiddleware,attendance_controller.postExcelReport) routes.post('/GetReportDailyAtt',auth.authMiddleware,attendance_controller.GetReportDailyAtt) +routes.get('/GetMailSetup',auth.authMiddleware,email_controller.GetMailSetup) routes.get('/users', controller.getUsers); routes.get('/gettodayattendance',auth.authMiddleware,attendance_controller.gettodayattendance) routes.get('/getreportholiday',auth.authMiddleware,attendance_controller.getreportholiday) From 08701aba3d8a5bd2db93962f803963c1f4e73a58 Mon Sep 17 00:00:00 2001 From: areebkhan Date: Sat, 30 Apr 2022 13:21:07 +0500 Subject: [PATCH 09/37] refactor --- frontend/src/components/MainListItems.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/frontend/src/components/MainListItems.js b/frontend/src/components/MainListItems.js index cba8cd0..9784c12 100644 --- a/frontend/src/components/MainListItems.js +++ b/frontend/src/components/MainListItems.js @@ -2,7 +2,9 @@ import * as React from 'react'; import PeopleIcon from '@mui/icons-material/People'; import AssessmentIcon from '@mui/icons-material/Assessment'; import LockOutlinedIcon from '@mui/icons-material/LockOutlined'; - +import AppRegistrationIcon from '@mui/icons-material/AppRegistration'; +import AssignmentTurnedInIcon from '@mui/icons-material/AssignmentTurnedIn'; +import MailOutlineIcon from '@mui/icons-material/MailOutline'; export const mainListItems = ( @@ -20,17 +22,17 @@ export const mainListItems = ( }, { text: 'Holiday Register', - icon: , + icon: , path: '/holidayRegistration' }, { text: 'Daily Attendence', - icon: , + icon: , path: '/dailyattendence' }, { text: 'Mail Setup', - icon: , + icon: , path: '/mailsetup' }, { From 2aebdaa3b1f0da638a14f6220fc8dd2470278376 Mon Sep 17 00:00:00 2001 From: sharjeel khan Date: Sat, 30 Apr 2022 15:07:51 +0500 Subject: [PATCH 10/37] new route create Email --- backend/models/email_schema.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/models/email_schema.js b/backend/models/email_schema.js index ef21871..b1c80f5 100644 --- a/backend/models/email_schema.js +++ b/backend/models/email_schema.js @@ -21,4 +21,4 @@ const MailSchema = new Schema({ Password : String, }) -exports.getMailSetupModel = mongoose.model("MailSetup", MailSchema); \ No newline at end of file +module.exports = mongoose.model("MailSetup", MailSchema); From a0e3d1cbfeb0214f5429ba82f58babe7d662ee5e Mon Sep 17 00:00:00 2001 From: areebkhan Date: Fri, 6 May 2022 12:03:04 +0500 Subject: [PATCH 11/37] refactor --- backend/controllers/email_controller.js | 5 +- frontend/src/pages/MailSetup.js | 141 ++++++++++++++++++++++-- 2 files changed, 138 insertions(+), 8 deletions(-) diff --git a/backend/controllers/email_controller.js b/backend/controllers/email_controller.js index 551b7ff..2b2cb41 100644 --- a/backend/controllers/email_controller.js +++ b/backend/controllers/email_controller.js @@ -63,11 +63,14 @@ exports.UpdateMailSetup = (req, res) => { delete update["$set"]["Email"] delete update["$set"]["_id"] if(update["$set"]["HOST"] === "Gmail"){ - update["$unset"] = {PORT : ""} + update["$set"] = {PORT : ""} } + console.log(update, "update<----") + console.log(query, "querye<----") MailSetupRepo.updateOne(query, update).then((success) =>{ res.status(200).json({status : true , success}) }).catch(err =>{ + console.log(err, "err") res.status(500).json({status : false,error :err}) }) MailSetupRepo.find({}, true).then((success) =>{ diff --git a/frontend/src/pages/MailSetup.js b/frontend/src/pages/MailSetup.js index 0ebf57b..7ae0fc1 100644 --- a/frontend/src/pages/MailSetup.js +++ b/frontend/src/pages/MailSetup.js @@ -2,22 +2,79 @@ import React, { useEffect } from "react" import Paper from '@mui/material/Paper'; import { Box, TextField, MenuItem, IconButton } from "@mui/material"; import { Save } from "@mui/icons-material"; - +import axios from 'axios'; +import Snackbar from '@mui/material/Snackbar'; +import CircularProgress from '@mui/material/CircularProgress'; +import Backdrop from '@mui/material/Backdrop'; +import MuiAlert from '@mui/material/Alert'; function MailSetup(props) { - const [formData, setFormData] = React.useState({ HOST: 'Gmail', USERID: '', Password: '', senderName: '' }); + const [formData, setFormData] = React.useState({ HOST: 'Gmail', USERID: '', Password: '', senderName: '' , PORT:""}); const [bool, SetBool] = React.useState(false); const [userData, setUserData] = React.useState({}) const [mailSetup, setMailSetup] = React.useState({}) + const [openBackdrop, setopenBackdrop] = React.useState(false); + const [open, setOpen] = React.useState(false); + const [message, SetMessage ] = React.useState({value: "", type:""}); + + + + useEffect(()=>{ + const token = localStorage.getItem("token") + + axios.get('/api/GetMailSetup',{ headers: { "Authorization": `${token}` } } ) + .then(function (response) { + handleCloseBackdrop(); + if(response?.data?.data && response.data.data?._id) + setFormData({senderName: response.data.data.SenderName, + HOST: response.data.data.HOST, + USERID: response.data.data.Email, + Password: response.data.data.Password, + PORT: response.data.data.PORT, + _id : response.data.data._id + + }) + console.log(response, "response") + SetMessage({ value: "Successfully get", type: "success" }) + }) + .catch(function (error) { + console.log(error); + handleCloseBackdrop(); + + }); + },[]) + + const handleClose = (event, reason) => { + if (reason === 'clickaway') { + return; + } + setOpen(false); + SetMessage({}) + } + + const Alert = React.forwardRef(function Alert(props, ref) { + return ; + }); + + + const handleCloseBackdrop = () => { + setopenBackdrop(false); + }; + const changeHandler = (event, name) => { setFormData({ ...formData, [name]: event.target.value }) } + + + const onSave = () => { + debugger // console.log(formData); + const token = localStorage.getItem("token") if (!formData.HOST || !formData.Password || !formData.USERID || !formData.senderName) { props.openSnackbar("Please Enter Details", 'error') return; @@ -26,17 +83,72 @@ function MailSetup(props) { props.openSnackbar("Please Enter PORT", 'error') return; } - if (mailSetup && Object.keys(mailSetup).length > 0) { - let formCopy = { ...formData, _id: mailSetup._id } + let formCopy = { ...formData, _id: formData._id } if (formData.HOST === "Gmail") delete formCopy.PORT; } else { - let formCopy = { ...formData, _id: mailSetup._id }; + let formCopy = { ...formData, _id: formData._id }; if (formData.HOST === "Gmail") delete formCopy.PORT; - props.saveMailSetup({ ...formCopy, OrganizationName: userData.OrganizationName, OrganizationID: userData.OrganizationID }) } + setOpen(true); + if(!formData._id && formData.senderName && formData.HOST && formData.USERID && formData.Password) + { + const data = { + senderName: formData.senderName, + HOST: formData.HOST, + USERID: formData.USERID, + Password: formData.Password + } + + axios.post('/api/CreateMailSetup', data, + { headers: { "Authorization": `${token}` } } + ) + .then(function (response) { + handleCloseBackdrop(); + console.log(response, "response") + SetMessage({ value: "Successfully saved", type: "success" }) + }) + .catch(function (error) { + console.log(error); + handleCloseBackdrop(); + + }); + } + + if( formData._id && formData.senderName && formData.HOST && formData.USERID && formData.Password) + { + const data = { + senderName: formData.senderName, + HOST: formData.HOST, + USERID: formData.USERID, + Password: formData.Password, + PORT : formData.PORT || null, + _id: formData._id + } + + axios.post('/api/UpdateMailSetup', data, + {headers: { "Authorization": `${token}` }} + ) + .then(function (response) { + handleCloseBackdrop(); + console.log(response, "response") + + + SetMessage({ value: "Successfully Update", type: "success" }) + }) + .catch(function (error) { + console.log(error); + handleCloseBackdrop(); + + }); + }else{ + SetMessage({ value: "Add some values", type: "error" }) + } + + + } useEffect(() => { @@ -48,7 +160,7 @@ function MailSetup(props) { // console.log("props.mailSetup " , props.mailSetup) props.mailSetup.PORT && SetBool(true) setMailSetup(props.mailSetup) - setFormData({ HOST: props.mailSetup.HOST, USERID: props.mailSetup.UserID, Password: props.mailSetup.Password, senderName: props.mailSetup.SenderName, PORT: props.mailSetup.PORT || '' }) + setFormData({_id : "", HOST: props.mailSetup.HOST, USERID: props.mailSetup.UserID, Password: props.mailSetup.Password, senderName: props.mailSetup.SenderName, PORT: props.mailSetup.PORT || '' }) } }, [props.mailSetup]) return ( @@ -89,6 +201,21 @@ function MailSetup(props) {
+ + + + {message.value} + + + + theme.zIndex.drawer + 1 }} + open={openBackdrop} + onClick={handleCloseBackdrop} + > + + + ) } From 989ee0c1fbf8210777304498613904c68caa2a6a Mon Sep 17 00:00:00 2001 From: areebkhan Date: Fri, 6 May 2022 14:24:02 +0500 Subject: [PATCH 12/37] refactor --- frontend/src/pages/HolidayRegister.js | 6 ++---- frontend/src/pages/MailSetup.js | 6 ++++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/frontend/src/pages/HolidayRegister.js b/frontend/src/pages/HolidayRegister.js index 6dcc747..e24ac55 100644 --- a/frontend/src/pages/HolidayRegister.js +++ b/frontend/src/pages/HolidayRegister.js @@ -97,10 +97,6 @@ export default function HolidayRegister() { console.log(holiday, "Holiday") - - - - const handleHolidaySubmit = () => { setOpen(true) setopenBackdrop(!openBackdrop); @@ -149,11 +145,13 @@ export default function HolidayRegister() { console.log(error) }); } else { + handleCloseBackdrop(); SetMessage({ value: "Please Enter correct date", type: "error" }) } } else { + handleCloseBackdrop(); SetMessage({ value: "Please Enter Required fields", type: "error" }) } } diff --git a/frontend/src/pages/MailSetup.js b/frontend/src/pages/MailSetup.js index 7ae0fc1..3939806 100644 --- a/frontend/src/pages/MailSetup.js +++ b/frontend/src/pages/MailSetup.js @@ -183,11 +183,13 @@ function MailSetup(props) { })} variant="outlined" > - {[{ value: 'Gmail', label: 'Gmail' }, { value: 'Others', label: 'Others' }].map((option) => ( + {[{ value: 'Gmail', label: 'Gmail' }, { value: 'Others', label: 'Others' }] + .map((option) => ( {option.label} - ))} + )) + }
{bool && (<> Date: Fri, 6 May 2022 16:22:40 +0500 Subject: [PATCH 13/37] refactor --- backend/controllers/email_controller.js | 2 +- frontend/src/pages/MailSetup.js | 6 +----- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/backend/controllers/email_controller.js b/backend/controllers/email_controller.js index 2b2cb41..58a0c06 100644 --- a/backend/controllers/email_controller.js +++ b/backend/controllers/email_controller.js @@ -63,7 +63,7 @@ exports.UpdateMailSetup = (req, res) => { delete update["$set"]["Email"] delete update["$set"]["_id"] if(update["$set"]["HOST"] === "Gmail"){ - update["$set"] = {PORT : ""} + update["$set"]['PORT'] = "" } console.log(update, "update<----") console.log(query, "querye<----") diff --git a/frontend/src/pages/MailSetup.js b/frontend/src/pages/MailSetup.js index 3939806..913f21d 100644 --- a/frontend/src/pages/MailSetup.js +++ b/frontend/src/pages/MailSetup.js @@ -63,16 +63,12 @@ function MailSetup(props) { setopenBackdrop(false); }; - const changeHandler = (event, name) => { setFormData({ ...formData, [name]: event.target.value }) } - - - const onSave = () => { - debugger + // console.log(formData); const token = localStorage.getItem("token") if (!formData.HOST || !formData.Password || !formData.USERID || !formData.senderName) { From 396c8c73b5b9818ac8705b250d574fae9fce18ac Mon Sep 17 00:00:00 2001 From: areebkhan Date: Fri, 6 May 2022 16:41:14 +0500 Subject: [PATCH 14/37] refactor --- backend/controllers/email_controller.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/controllers/email_controller.js b/backend/controllers/email_controller.js index 58a0c06..3391660 100644 --- a/backend/controllers/email_controller.js +++ b/backend/controllers/email_controller.js @@ -60,7 +60,7 @@ exports.UpdateMailSetup = (req, res) => { let update = {$set : {...req.body}}; update["$set"]["Email"] = req.body.USERID update["$set"]["SenderName"] = req.body.senderName - delete update["$set"]["Email"] + // delete update["$set"]["Email"] delete update["$set"]["_id"] if(update["$set"]["HOST"] === "Gmail"){ update["$set"]['PORT'] = "" From 90487a4475194b652422bd43f07d8eec8d9cbce5 Mon Sep 17 00:00:00 2001 From: areebkhan Date: Fri, 6 May 2022 17:41:35 +0500 Subject: [PATCH 15/37] refactor --- backend/controllers/email_controller.js | 3 ++- frontend/src/pages/MailSetup.js | 11 ++++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/backend/controllers/email_controller.js b/backend/controllers/email_controller.js index 3391660..aef8c07 100644 --- a/backend/controllers/email_controller.js +++ b/backend/controllers/email_controller.js @@ -39,7 +39,7 @@ exports.CreateMailSetup = (req, res) => { process.env.SenderName = mailSetup.SenderName } - res.status(200).json({status : true , success}) + res.status(200).json({status : true , data:success}) }).catch(err =>{ res.status(500).json({status : false,error :err}) }) @@ -65,6 +65,7 @@ exports.UpdateMailSetup = (req, res) => { if(update["$set"]["HOST"] === "Gmail"){ update["$set"]['PORT'] = "" } + else update["$set"]["PORT"] = req.body.PORT console.log(update, "update<----") console.log(query, "querye<----") MailSetupRepo.updateOne(query, update).then((success) =>{ diff --git a/frontend/src/pages/MailSetup.js b/frontend/src/pages/MailSetup.js index 913f21d..26dc424 100644 --- a/frontend/src/pages/MailSetup.js +++ b/frontend/src/pages/MailSetup.js @@ -13,6 +13,7 @@ import MuiAlert from '@mui/material/Alert'; function MailSetup(props) { const [formData, setFormData] = React.useState({ HOST: 'Gmail', USERID: '', Password: '', senderName: '' , PORT:""}); const [bool, SetBool] = React.useState(false); + const [mailID, setMailID] = React.useState(); const [userData, setUserData] = React.useState({}) const [mailSetup, setMailSetup] = React.useState({}) const [openBackdrop, setopenBackdrop] = React.useState(false); @@ -37,6 +38,7 @@ function MailSetup(props) { }) console.log(response, "response") + SetMessage({ value: "Successfully get", type: "success" }) }) .catch(function (error) { @@ -89,12 +91,14 @@ function MailSetup(props) { } setOpen(true); - if(!formData._id && formData.senderName && formData.HOST && formData.USERID && formData.Password) + console.log(mailID,"mailID") + if(!formData._id && !mailID && formData.senderName && formData.HOST && formData.USERID && formData.Password) { const data = { senderName: formData.senderName, HOST: formData.HOST, USERID: formData.USERID, + PORT : formData.PORT || null, Password: formData.Password } @@ -103,6 +107,7 @@ function MailSetup(props) { ) .then(function (response) { handleCloseBackdrop(); + setMailID(response.data.data?._id) console.log(response, "response") SetMessage({ value: "Successfully saved", type: "success" }) }) @@ -113,7 +118,7 @@ function MailSetup(props) { }); } - if( formData._id && formData.senderName && formData.HOST && formData.USERID && formData.Password) + if( formData._id || mailID && formData.senderName && formData.HOST && formData.USERID && formData.Password) { const data = { senderName: formData.senderName, @@ -188,7 +193,7 @@ function MailSetup(props) { } - {bool && (<> setFormData({ ...formData, PORT: event.target.value })} label="PORT" variant="outlined" />)} changeHandler(event, 'USERID')} id="USERID" label="User ID" variant="outlined" /> From 9cd1d7f210a86a63cd29d2788a09a0ed9329d5f6 Mon Sep 17 00:00:00 2001 From: areebkhan Date: Fri, 6 May 2022 17:53:33 +0500 Subject: [PATCH 16/37] refactor --- frontend/src/pages/MailSetup.js | 87 ++++++++++++++++++--------------- 1 file changed, 48 insertions(+), 39 deletions(-) diff --git a/frontend/src/pages/MailSetup.js b/frontend/src/pages/MailSetup.js index 26dc424..b70c173 100644 --- a/frontend/src/pages/MailSetup.js +++ b/frontend/src/pages/MailSetup.js @@ -11,34 +11,35 @@ import MuiAlert from '@mui/material/Alert'; function MailSetup(props) { - const [formData, setFormData] = React.useState({ HOST: 'Gmail', USERID: '', Password: '', senderName: '' , PORT:""}); + const [formData, setFormData] = React.useState({ HOST: 'Gmail', USERID: '', Password: '', senderName: '', PORT: "" }); const [bool, SetBool] = React.useState(false); const [mailID, setMailID] = React.useState(); const [userData, setUserData] = React.useState({}) const [mailSetup, setMailSetup] = React.useState({}) const [openBackdrop, setopenBackdrop] = React.useState(false); const [open, setOpen] = React.useState(false); - const [message, SetMessage ] = React.useState({value: "", type:""}); + const [message, SetMessage] = React.useState({ value: "", type: "" }); - useEffect(()=>{ - const token = localStorage.getItem("token") + useEffect(() => { + const token = localStorage.getItem("token") - axios.get('/api/GetMailSetup',{ headers: { "Authorization": `${token}` } } ) + axios.get('/api/GetMailSetup', { headers: { "Authorization": `${token}` } }) .then(function (response) { handleCloseBackdrop(); - if(response?.data?.data && response.data.data?._id) - setFormData({senderName: response.data.data.SenderName, - HOST: response.data.data.HOST, - USERID: response.data.data.Email, - Password: response.data.data.Password, - PORT: response.data.data.PORT, - _id : response.data.data._id - - }) + if (response?.data?.data && response.data.data?._id) + setFormData({ + senderName: response.data.data.SenderName, + HOST: response.data.data.HOST, + USERID: response.data.data.Email, + Password: response.data.data.Password, + PORT: response.data.data.PORT, + _id: response.data.data._id + + }) console.log(response, "response") - + SetMessage({ value: "Successfully get", type: "success" }) }) .catch(function (error) { @@ -46,11 +47,11 @@ function MailSetup(props) { handleCloseBackdrop(); }); - },[]) + }, []) const handleClose = (event, reason) => { if (reason === 'clickaway') { - return; + return; } setOpen(false); SetMessage({}) @@ -58,21 +59,21 @@ function MailSetup(props) { const Alert = React.forwardRef(function Alert(props, ref) { return ; - }); - + }); + const handleCloseBackdrop = () => { setopenBackdrop(false); - }; + }; const changeHandler = (event, name) => { setFormData({ ...formData, [name]: event.target.value }) } const onSave = () => { - + // console.log(formData); - const token = localStorage.getItem("token") + const token = localStorage.getItem("token") if (!formData.HOST || !formData.Password || !formData.USERID || !formData.senderName) { props.openSnackbar("Please Enter Details", 'error') return; @@ -91,25 +92,34 @@ function MailSetup(props) { } setOpen(true); - console.log(mailID,"mailID") - if(!formData._id && !mailID && formData.senderName && formData.HOST && formData.USERID && formData.Password) - { + console.log(mailID, "mailID") + if (!formData._id && !mailID && formData.senderName && formData.HOST && formData.USERID && formData.Password) { const data = { senderName: formData.senderName, HOST: formData.HOST, USERID: formData.USERID, - PORT : formData.PORT || null, + PORT: formData.PORT || null, Password: formData.Password } axios.post('/api/CreateMailSetup', data, - { headers: { "Authorization": `${token}` } } + { headers: { "Authorization": `${token}` } } ) .then(function (response) { handleCloseBackdrop(); setMailID(response.data.data?._id) console.log(response, "response") SetMessage({ value: "Successfully saved", type: "success" }) + if (response?.data?.data && response.data.data?._id) + setFormData({ + senderName: response.data.data.SenderName, + HOST: response.data.data.HOST, + USERID: response.data.data.Email, + Password: response.data.data.Password, + PORT: response.data.data.PORT, + _id: response.data.data._id + + }) }) .catch(function (error) { console.log(error); @@ -118,19 +128,18 @@ function MailSetup(props) { }); } - if( formData._id || mailID && formData.senderName && formData.HOST && formData.USERID && formData.Password) - { + if (formData._id || mailID && formData.senderName && formData.HOST && formData.USERID && formData.Password) { const data = { senderName: formData.senderName, HOST: formData.HOST, USERID: formData.USERID, Password: formData.Password, - PORT : formData.PORT || null, + PORT: formData.PORT || null, _id: formData._id } axios.post('/api/UpdateMailSetup', data, - {headers: { "Authorization": `${token}` }} + { headers: { "Authorization": `${token}` } } ) .then(function (response) { handleCloseBackdrop(); @@ -144,11 +153,11 @@ function MailSetup(props) { handleCloseBackdrop(); }); - }else{ + } else { SetMessage({ value: "Add some values", type: "error" }) } - + } @@ -161,7 +170,7 @@ function MailSetup(props) { // console.log("props.mailSetup " , props.mailSetup) props.mailSetup.PORT && SetBool(true) setMailSetup(props.mailSetup) - setFormData({_id : "", HOST: props.mailSetup.HOST, USERID: props.mailSetup.UserID, Password: props.mailSetup.Password, senderName: props.mailSetup.SenderName, PORT: props.mailSetup.PORT || '' }) + setFormData({ _id: "", HOST: props.mailSetup.HOST, USERID: props.mailSetup.UserID, Password: props.mailSetup.Password, senderName: props.mailSetup.SenderName, PORT: props.mailSetup.PORT || '' }) } }, [props.mailSetup]) return ( @@ -185,11 +194,11 @@ function MailSetup(props) { variant="outlined" > {[{ value: 'Gmail', label: 'Gmail' }, { value: 'Others', label: 'Others' }] - .map((option) => ( - - {option.label} - - )) + .map((option) => ( + + {option.label} + + )) } From 95286629d4e7c084a3eac0f2c3059894d0f4eb5a Mon Sep 17 00:00:00 2001 From: sadamhussain Date: Tue, 10 May 2022 16:08:56 +0500 Subject: [PATCH 17/37] logs --- backend/controllers/attendance_controller.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/backend/controllers/attendance_controller.js b/backend/controllers/attendance_controller.js index 875fab6..0be7586 100644 --- a/backend/controllers/attendance_controller.js +++ b/backend/controllers/attendance_controller.js @@ -6,6 +6,8 @@ const fs = require("fs"); module.exports.attendance = async (req, res) => { const DateStr = new Date(req.body.Date); + console.log("Body Date ",req.body.Date); + console.log("Converted Date ",DateStr); const TransactionType = req.body.TransactionType; const ActionDetails = { ActionTakenByName: req.user.FirstName + ' ' + req.user.LastName, From 2efd5e47ac3c652e0f93ea108f985763f4619967 Mon Sep 17 00:00:00 2001 From: sadamhussain Date: Tue, 10 May 2022 16:14:38 +0500 Subject: [PATCH 18/37] build frontend --- backend/build/asset-manifest.json | 6 +++--- backend/build/index.html | 2 +- backend/build/logo192.png | Bin 5347 -> 20086 bytes backend/build/static/js/main.c66e48eb.js | 3 +++ ...CENSE.txt => main.c66e48eb.js.LICENSE.txt} | 0 backend/build/static/js/main.c66e48eb.js.map | 1 + backend/build/static/js/main.d833e689.js | 3 --- backend/build/static/js/main.d833e689.js.map | 1 - 8 files changed, 8 insertions(+), 8 deletions(-) create mode 100644 backend/build/static/js/main.c66e48eb.js rename backend/build/static/js/{main.d833e689.js.LICENSE.txt => main.c66e48eb.js.LICENSE.txt} (100%) create mode 100644 backend/build/static/js/main.c66e48eb.js.map delete mode 100644 backend/build/static/js/main.d833e689.js delete mode 100644 backend/build/static/js/main.d833e689.js.map diff --git a/backend/build/asset-manifest.json b/backend/build/asset-manifest.json index a5e38bd..04a61aa 100644 --- a/backend/build/asset-manifest.json +++ b/backend/build/asset-manifest.json @@ -1,15 +1,15 @@ { "files": { "main.css": "/static/css/main.e6c13ad2.css", - "main.js": "/static/js/main.d833e689.js", + "main.js": "/static/js/main.c66e48eb.js", "static/js/787.16cf1214.chunk.js": "/static/js/787.16cf1214.chunk.js", "index.html": "/index.html", "main.e6c13ad2.css.map": "/static/css/main.e6c13ad2.css.map", - "main.d833e689.js.map": "/static/js/main.d833e689.js.map", + "main.c66e48eb.js.map": "/static/js/main.c66e48eb.js.map", "787.16cf1214.chunk.js.map": "/static/js/787.16cf1214.chunk.js.map" }, "entrypoints": [ "static/css/main.e6c13ad2.css", - "static/js/main.d833e689.js" + "static/js/main.c66e48eb.js" ] } \ No newline at end of file diff --git a/backend/build/index.html b/backend/build/index.html index 8d8e683..e9a881f 100644 --- a/backend/build/index.html +++ b/backend/build/index.html @@ -1 +1 @@ -React App
\ No newline at end of file +Attendence App
\ No newline at end of file diff --git a/backend/build/logo192.png b/backend/build/logo192.png index fc44b0a3796c0e0a64c3d858ca038bd4570465d9..855200745b397cbbc5c52000b2434960808cb755 100644 GIT binary patch literal 20086 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 B1L*(& literal 5347 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 X@eDJUQo;Ye2mwlRs0?c(x,--y):0,v--,10===b&&(v=1,m--),b}function Z(){return b=y2||P(b)>3?"":" "}function M(e,t){for(;--t&&Z()&&!(b<48||b>102||b>57&&b<65||b>70&&b<97););return R(e,E()+(t<6&&32==C()&&32==Z()))}function I(e){for(;Z();)switch(b){case e:return y;case 34:case 39:34!==e&&39!==e&&I(b);break;case 40:41===e&&I(e);break;case 92:Z()}return y}function z(e,t){for(;Z()&&e+b!==57&&(e+b!==84||47!==C()););return"/*"+R(t,y-1)+"*"+i(47===e?e:Z())}function A(e){for(;!P(C());)Z();return R(e,y)}var L="-ms-",D="-moz-",F="-webkit-",_="comm",W="rule",B="decl",H="@keyframes";function U(e,t){for(var n="",r=p(e),o=0;o6)switch(c(e,t+1)){case 109:if(45!==c(e,t+4))break;case 102:return s(e,/(.+:)(.+)-([^]+)/,"$1-webkit-$2-$3$1"+D+(108==c(e,t+3)?"$3":"$2-$3"))+e;case 115:return~u(e,"stretch")?$(s(e,"stretch","fill-available"),t)+e:e}break;case 4949:if(115!==c(e,t+1))break;case 6444:switch(c(e,f(e)-3-(~u(e,"!important")&&10))){case 107:return s(e,":",":"+F)+e;case 101:return s(e,/(.+:)([^;!]+)(;|!.+)?/,"$1"+F+(45===c(e,14)?"inline-":"")+"box$3$1"+F+"$2$3$1"+L+"$2box$3")+e}break;case 5936:switch(c(e,t+11)){case 114:return F+e+L+s(e,/[svh]\w+-[tblr]{2}/,"tb")+e;case 108:return F+e+L+s(e,/[svh]\w+-[tblr]{2}/,"tb-rl")+e;case 45:return F+e+L+s(e,/[svh]\w+-[tblr]{2}/,"lr")+e}return F+e+L+e+e}return e}function q(e){return O(K("",null,null,null,[""],e=T(e),0,[0],e))}function K(e,t,n,r,o,a,l,c,d){for(var p=0,m=0,v=l,g=0,y=0,b=0,x=1,w=1,k=1,R=0,P="",T=o,O=a,I=r,L=P;w;)switch(b=R,R=Z()){case 40:if(108!=b&&58==L.charCodeAt(v-1)){-1!=u(L+=s(j(R),"&","&\f"),"&\f")&&(k=-1);break}case 34:case 39:case 91:L+=j(R);break;case 9:case 10:case 13:case 32:L+=N(b);break;case 92:L+=M(E()-1,7);continue;case 47:switch(C()){case 42:case 47:h(X(z(Z(),E()),t,n),d);break;default:L+="/"}break;case 123*x:c[p++]=f(L)*k;case 125*x:case 59:case 0:switch(R){case 0:case 125:w=0;case 59+m:y>0&&f(L)-v&&h(y>32?Y(L+";",r,n,v-1):Y(s(L," ","")+";",r,n,v-2),d);break;case 59:L+=";";default:if(h(I=G(L,t,n,p,m,o,c,P,T=[],O=[],v),a),123===R)if(0===m)K(L,t,I,I,T,a,v,c,O);else switch(g){case 100:case 109:case 115:K(e,I,I,r&&h(G(e,I,I,0,0,o,c,P,o,T=[],v),O),o,O,v,c,r?T:O);break;default:K(L,I,I,I,[""],O,0,c,O)}}p=m=y=0,x=k=1,P=L="",v=l;break;case 58:v=1+f(L),y=b;default:if(x<1)if(123==R)--x;else if(125==R&&0==x++&&125==S())continue;switch(L+=i(R),R*x){case 38:k=m>0?1:(L+="\f",-1);break;case 44:c[p++]=(f(L)-1)*k,k=1;break;case 64:45===C()&&(L+=j(Z())),g=C(),m=v=f(P=L+=A(E())),R++;break;case 45:45===b&&2==f(L)&&(x=0)}}return a}function G(e,t,n,r,i,a,u,c,f,h,m){for(var v=i-1,g=0===i?a:[""],y=p(g),b=0,x=0,k=0;b0?g[S]+" "+Z:s(Z,/&\f/g,g[S])))&&(f[k++]=C);return w(e,t,n,0===i?W:c,f,h,m)}function X(e,t,n){return w(e,t,n,_,i(b),d(e,2,-2),0)}function Y(e,t,n,r){return w(e,t,n,B,d(e,0,r),d(e,r+1,-1),r)}var Q=function(e,t,n){for(var r=0,o=0;r=o,o=C(),38===r&&12===o&&(t[n]=1),!P(o);)Z();return R(e,y)},J=function(e,t){return O(function(e,t){var n=-1,r=44;do{switch(P(r)){case 0:38===r&&12===C()&&(t[n]=1),e[n]+=Q(y-1,t,n);break;case 2:e[n]+=j(r);break;case 4:if(44===r){e[++n]=58===C()?"&\f":"",t[n]=e[n].length;break}default:e[n]+=i(r)}}while(r=Z());return e}(T(e),t))},ee=new WeakMap,te=function(e){if("rule"===e.type&&e.parent&&!(e.length<1)){for(var t=e.value,n=e.parent,r=e.column===n.column&&e.line===n.line;"rule"!==n.type;)if(!(n=n.parent))return;if((1!==e.props.length||58===t.charCodeAt(0)||ee.get(n))&&!r){ee.set(e,!0);for(var o=[],i=J(t,o),a=n.props,l=0,s=0;l-1&&!e.return)switch(e.type){case B:e.return=$(e.value,e.length);break;case H:return U([k(e,{value:s(e.value,"@","@"+F)})],r);case W:if(e.length)return function(e,t){return e.map(t).join("")}(e.props,(function(t){switch(function(e,t){return(e=t.exec(e))?e[0]:e}(t,/(::plac\w+|:read-\w+)/)){case":read-only":case":read-write":return U([k(e,{props:[s(t,/:(read-\w+)/,":-moz-$1")]})],r);case"::placeholder":return U([k(e,{props:[s(t,/:(plac\w+)/,":-webkit-input-$1")]}),k(e,{props:[s(t,/:(plac\w+)/,":-moz-$1")]}),k(e,{props:[s(t,/:(plac\w+)/,L+"input-$1")]})],r)}return""}))}}],oe=function(e){var t=e.key;if("css"===t){var n=document.querySelectorAll("style[data-emotion]:not([data-s])");Array.prototype.forEach.call(n,(function(e){-1!==e.getAttribute("data-emotion").indexOf(" ")&&(document.head.appendChild(e),e.setAttribute("data-s",""))}))}var o=e.stylisPlugins||re;var i,a,l={},s=[];i=e.container||document.head,Array.prototype.forEach.call(document.querySelectorAll('style[data-emotion^="'+t+' "]'),(function(e){for(var t=e.getAttribute("data-emotion").split(" "),n=1;n=4;++r,o-=4)t=1540483477*(65535&(t=255&e.charCodeAt(r)|(255&e.charCodeAt(++r))<<8|(255&e.charCodeAt(++r))<<16|(255&e.charCodeAt(++r))<<24))+(59797*(t>>>16)<<16),n=1540483477*(65535&(t^=t>>>24))+(59797*(t>>>16)<<16)^1540483477*(65535&n)+(59797*(n>>>16)<<16);switch(o){case 3:n^=(255&e.charCodeAt(r+2))<<16;case 2:n^=(255&e.charCodeAt(r+1))<<8;case 1:n=1540483477*(65535&(n^=255&e.charCodeAt(r)))+(59797*(n>>>16)<<16)}return(((n=1540483477*(65535&(n^=n>>>13))+(59797*(n>>>16)<<16))^n>>>15)>>>0).toString(36)},o={animationIterationCount:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1},i=n(3782),a=/[A-Z]|^ms/g,l=/_EMO_([^_]+?)_([^]*?)_EMO_/g,s=function(e){return 45===e.charCodeAt(1)},u=function(e){return null!=e&&"boolean"!==typeof e},c=(0,i.Z)((function(e){return s(e)?e:e.replace(a,"-$&").toLowerCase()})),d=function(e,t){switch(e){case"animation":case"animationName":if("string"===typeof t)return t.replace(l,(function(e,t,n){return p={name:t,styles:n,next:p},t}))}return 1===o[e]||s(e)||"number"!==typeof t||0===t?t:t+"px"};function f(e,t,n){if(null==n)return"";if(void 0!==n.__emotion_styles)return n;switch(typeof n){case"boolean":return"";case"object":if(1===n.anim)return p={name:n.name,styles:n.styles,next:p},n.name;if(void 0!==n.styles){var r=n.next;if(void 0!==r)for(;void 0!==r;)p={name:r.name,styles:r.styles,next:p},r=r.next;return n.styles+";"}return function(e,t,n){var r="";if(Array.isArray(n))for(var o=0;o0&&void 0!==arguments[0]?arguments[0]:"light")?{main:v[200],light:v[50],dark:v[400]}:{main:v[700],light:v[400],dark:v[800]}}(n),E=e.secondary||function(){return"dark"===(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"light")?{main:p[200],light:p[50],dark:p[400]}:{main:p[500],light:p[300],dark:p[700]}}(n),R=e.error||function(){return"dark"===(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"light")?{main:h[500],light:h[300],dark:h[700]}:{main:h[700],light:h[400],dark:h[800]}}(n),P=e.info||function(){return"dark"===(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"light")?{main:g[400],light:g[300],dark:g[700]}:{main:g[700],light:g[500],dark:g[900]}}(n),T=e.success||function(){return"dark"===(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"light")?{main:y[400],light:y[300],dark:y[700]}:{main:y[800],light:y[500],dark:y[900]}}(n),O=e.warning||function(){return"dark"===(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"light")?{main:m[400],light:m[300],dark:m[700]}:{main:"#ed6c02",light:m[500],dark:m[900]}}(n);function j(e){return(0,c.mi)(e,w.text.primary)>=l?w.text.primary:x.text.primary}var N=function(e){var t=e.color,n=e.name,o=e.mainShade,i=void 0===o?500:o,a=e.lightShade,l=void 0===a?300:a,s=e.darkShade,c=void 0===s?700:s;if(!(t=(0,r.Z)({},t)).main&&t[i]&&(t.main=t[i]),!t.hasOwnProperty("main"))throw new Error((0,u.Z)(11,n?" (".concat(n,")"):"",i));if("string"!==typeof t.main)throw new Error((0,u.Z)(12,n?" (".concat(n,")"):"",JSON.stringify(t.main)));return k(t,"light",l,S),k(t,"dark",c,S),t.contrastText||(t.contrastText=j(t.main)),t},M={dark:w,light:x};return(0,i.Z)((0,r.Z)({common:d,mode:n,primary:N({color:C,name:"primary"}),secondary:N({color:E,name:"secondary",mainShade:"A400",lightShade:"A200",darkShade:"A700"}),error:N({color:R,name:"error"}),warning:N({color:O,name:"warning"}),info:N({color:P,name:"info"}),success:N({color:T,name:"success"}),grey:f,contrastThreshold:l,getContrastText:j,augmentColor:N,tonalOffset:S},M[n]),Z)}var Z=["fontFamily","fontSize","fontWeightLight","fontWeightRegular","fontWeightMedium","fontWeightBold","htmlFontSize","allVariants","pxToRem"];var C={textTransform:"uppercase"},E='"Roboto", "Helvetica", "Arial", sans-serif';function R(e,t){var n="function"===typeof t?t(e):t,a=n.fontFamily,l=void 0===a?E:a,s=n.fontSize,u=void 0===s?14:s,c=n.fontWeightLight,d=void 0===c?300:c,f=n.fontWeightRegular,p=void 0===f?400:f,h=n.fontWeightMedium,m=void 0===h?500:h,v=n.fontWeightBold,g=void 0===v?700:v,y=n.htmlFontSize,b=void 0===y?16:y,x=n.allVariants,w=n.pxToRem,k=(0,o.Z)(n,Z);var S=u/14,R=w||function(e){return"".concat(e/b*S,"rem")},P=function(e,t,n,o,i){return(0,r.Z)({fontFamily:l,fontWeight:e,fontSize:R(t),lineHeight:n},l===E?{letterSpacing:"".concat((a=o/t,Math.round(1e5*a)/1e5),"em")}:{},i,x);var a},T={h1:P(d,96,1.167,-1.5),h2:P(d,60,1.2,-.5),h3:P(p,48,1.167,0),h4:P(p,34,1.235,.25),h5:P(p,24,1.334,0),h6:P(m,20,1.6,.15),subtitle1:P(p,16,1.75,.15),subtitle2:P(m,14,1.57,.1),body1:P(p,16,1.5,.15),body2:P(p,14,1.43,.15),button:P(m,14,1.75,.4,C),caption:P(p,12,1.66,.4),overline:P(p,12,2.66,1,C)};return(0,i.Z)((0,r.Z)({htmlFontSize:b,pxToRem:R,fontFamily:l,fontSize:u,fontWeightLight:d,fontWeightRegular:p,fontWeightMedium:m,fontWeightBold:g},T),k,{clone:!1})}function P(){return["".concat(arguments.length<=0?void 0:arguments[0],"px ").concat(arguments.length<=1?void 0:arguments[1],"px ").concat(arguments.length<=2?void 0:arguments[2],"px ").concat(arguments.length<=3?void 0:arguments[3],"px rgba(0,0,0,").concat(.2,")"),"".concat(arguments.length<=4?void 0:arguments[4],"px ").concat(arguments.length<=5?void 0:arguments[5],"px ").concat(arguments.length<=6?void 0:arguments[6],"px ").concat(arguments.length<=7?void 0:arguments[7],"px rgba(0,0,0,").concat(.14,")"),"".concat(arguments.length<=8?void 0:arguments[8],"px ").concat(arguments.length<=9?void 0:arguments[9],"px ").concat(arguments.length<=10?void 0:arguments[10],"px ").concat(arguments.length<=11?void 0:arguments[11],"px rgba(0,0,0,").concat(.12,")")].join(",")}var T=["none",P(0,2,1,-1,0,1,1,0,0,1,3,0),P(0,3,1,-2,0,2,2,0,0,1,5,0),P(0,3,3,-2,0,3,4,0,0,1,8,0),P(0,2,4,-1,0,4,5,0,0,1,10,0),P(0,3,5,-1,0,5,8,0,0,1,14,0),P(0,3,5,-1,0,6,10,0,0,1,18,0),P(0,4,5,-2,0,7,10,1,0,2,16,1),P(0,5,5,-3,0,8,10,1,0,3,14,2),P(0,5,6,-3,0,9,12,1,0,3,16,2),P(0,6,6,-3,0,10,14,1,0,4,18,3),P(0,6,7,-4,0,11,15,1,0,4,20,3),P(0,7,8,-4,0,12,17,2,0,5,22,4),P(0,7,8,-4,0,13,19,2,0,5,24,4),P(0,7,9,-4,0,14,21,2,0,5,26,4),P(0,8,9,-5,0,15,22,2,0,6,28,5),P(0,8,10,-5,0,16,24,2,0,6,30,5),P(0,8,11,-5,0,17,26,2,0,6,32,5),P(0,9,11,-5,0,18,28,2,0,7,34,6),P(0,9,12,-6,0,19,29,2,0,7,36,6),P(0,10,13,-6,0,20,31,3,0,8,38,7),P(0,10,13,-6,0,21,33,3,0,8,40,7),P(0,10,14,-6,0,22,35,3,0,8,42,7),P(0,11,14,-7,0,23,36,3,0,9,44,8),P(0,11,15,-7,0,24,38,3,0,9,46,8)],O=["duration","easing","delay"],j={easeInOut:"cubic-bezier(0.4, 0, 0.2, 1)",easeOut:"cubic-bezier(0.0, 0, 0.2, 1)",easeIn:"cubic-bezier(0.4, 0, 1, 1)",sharp:"cubic-bezier(0.4, 0, 0.6, 1)"},N={shortest:150,shorter:200,short:250,standard:300,complex:375,enteringScreen:225,leavingScreen:195};function M(e){return"".concat(Math.round(e),"ms")}function I(e){if(!e)return 0;var t=e/36;return Math.round(10*(4+15*Math.pow(t,.25)+t/5))}function z(e){var t=(0,r.Z)({},j,e.easing),n=(0,r.Z)({},N,e.duration);return(0,r.Z)({getAutoHeightDuration:I,create:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:["all"],r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=r.duration,a=void 0===i?n.standard:i,l=r.easing,s=void 0===l?t.easeInOut:l,u=r.delay,c=void 0===u?0:u;(0,o.Z)(r,O);return(Array.isArray(e)?e:[e]).map((function(e){return"".concat(e," ").concat("string"===typeof a?a:M(a)," ").concat(s," ").concat("string"===typeof c?c:M(c))})).join(",")}},e,{easing:t,duration:n})}var A={mobileStepper:1e3,fab:1050,speedDial:1050,appBar:1100,drawer:1200,modal:1300,snackbar:1400,tooltip:1500},L=["breakpoints","mixins","spacing","palette","transitions","typography","shape"];function D(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.mixins,n=void 0===t?{}:t,l=e.palette,u=void 0===l?{}:l,c=e.transitions,d=void 0===c?{}:c,f=e.typography,p=void 0===f?{}:f,h=(0,o.Z)(e,L),m=S(u),v=(0,a.Z)(e),g=(0,i.Z)(v,{mixins:s(v.breakpoints,v.spacing,n),palette:m,shadows:T.slice(),typography:R(m,p),transitions:z(d),zIndex:(0,r.Z)({},A)});g=(0,i.Z)(g,h);for(var y=arguments.length,b=new Array(y>1?y-1:0),x=1;x0&&void 0!==arguments[0]?arguments[0]:{},t=e.defaultTheme,n=void 0===t?k:t,s=e.rootShouldForwardProp,u=void 0===s?w:s,c=e.slotShouldForwardProp,d=void 0===c?w:c,f=e.styleFunctionSx,S=void 0===f?p.Z:f;return function(e){var t,s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},c=s.name,f=s.slot,p=s.skipVariantsResolver,k=s.skipSx,Z=s.overridesResolver,C=(0,a.Z)(s,h),E=void 0!==p?p:f&&"Root"!==f||!1,R=k||!1;var P=w;"Root"===f?P=u:f&&(P=d);var T=(0,l.ZP)(e,(0,i.Z)({shouldForwardProp:P,label:t},C)),O=function(e){for(var t=arguments.length,l=new Array(t>1?t-1:0),s=1;s0){var p=new Array(f).fill("");(d=[].concat((0,r.Z)(e),(0,r.Z)(p))).raw=[].concat((0,r.Z)(e.raw),(0,r.Z)(p))}else"function"===typeof e&&e.__emotion_real!==e&&(d=function(t){var r=t.theme,o=(0,a.Z)(t,v);return e((0,i.Z)({theme:g(r)?n:r},o))});var h=T.apply(void 0,[d].concat((0,r.Z)(u)));return h};return T.withConfig&&(O.withConfig=T.withConfig),O}}({defaultTheme:S.Z,rootShouldForwardProp:Z}),R=E},1046:function(e,t,n){"use strict";n.d(t,{Z:function(){return l}});var r=n(5735);var o=n(3459);function i(e){var t=e.props,n=e.name,i=e.defaultTheme,a=function(e){var t=e.theme,n=e.name,o=e.props;return t&&t.components&&t.components[n]&&t.components[n].defaultProps?(0,r.Z)(t.components[n].defaultProps,o):o}({theme:(0,o.Z)(i),name:n,props:t});return a}var a=n(6482);function l(e){return i({props:e.props,name:e.name,defaultTheme:a.Z})}},4036:function(e,t,n){"use strict";var r=n(7312);t.Z=r.Z},9201:function(e,t,n){"use strict";n.d(t,{Z:function(){return y}});var r=n(7462),o=n(2791),i=n(3366),a=n(8182),l=n(767),s=n(4036),u=n(1046),c=n(7630),d=n(5159);function f(e){return(0,d.Z)("MuiSvgIcon",e)}(0,n(208).Z)("MuiSvgIcon",["root","colorPrimary","colorSecondary","colorAction","colorError","colorDisabled","fontSizeInherit","fontSizeSmall","fontSizeMedium","fontSizeLarge"]);var p=n(184),h=["children","className","color","component","fontSize","htmlColor","inheritViewBox","titleAccess","viewBox"],m=(0,c.ZP)("svg",{name:"MuiSvgIcon",slot:"Root",overridesResolver:function(e,t){var n=e.ownerState;return[t.root,"inherit"!==n.color&&t["color".concat((0,s.Z)(n.color))],t["fontSize".concat((0,s.Z)(n.fontSize))]]}})((function(e){var t,n,r,o,i,a,l,s,u,c,d,f,p,h,m,v,g,y=e.theme,b=e.ownerState;return{userSelect:"none",width:"1em",height:"1em",display:"inline-block",fill:"currentColor",flexShrink:0,transition:null==(t=y.transitions)||null==(n=t.create)?void 0:n.call(t,"fill",{duration:null==(r=y.transitions)||null==(o=r.duration)?void 0:o.shorter}),fontSize:{inherit:"inherit",small:(null==(i=y.typography)||null==(a=i.pxToRem)?void 0:a.call(i,20))||"1.25rem",medium:(null==(l=y.typography)||null==(s=l.pxToRem)?void 0:s.call(l,24))||"1.5rem",large:(null==(u=y.typography)||null==(c=u.pxToRem)?void 0:c.call(u,35))||"2.1875"}[b.fontSize],color:null!=(d=null==(f=y.palette)||null==(p=f[b.color])?void 0:p.main)?d:{action:null==(h=y.palette)||null==(m=h.action)?void 0:m.active,disabled:null==(v=y.palette)||null==(g=v.action)?void 0:g.disabled,inherit:void 0}[b.color]}})),v=o.forwardRef((function(e,t){var n=(0,u.Z)({props:e,name:"MuiSvgIcon"}),o=n.children,c=n.className,d=n.color,v=void 0===d?"inherit":d,g=n.component,y=void 0===g?"svg":g,b=n.fontSize,x=void 0===b?"medium":b,w=n.htmlColor,k=n.inheritViewBox,S=void 0!==k&&k,Z=n.titleAccess,C=n.viewBox,E=void 0===C?"0 0 24 24":C,R=(0,i.Z)(n,h),P=(0,r.Z)({},n,{color:v,component:y,fontSize:x,instanceFontSize:e.fontSize,inheritViewBox:S,viewBox:E}),T={};S||(T.viewBox=E);var O=function(e){var t=e.color,n=e.fontSize,r=e.classes,o={root:["root","inherit"!==t&&"color".concat((0,s.Z)(t)),"fontSize".concat((0,s.Z)(n))]};return(0,l.Z)(o,f,r)}(P);return(0,p.jsxs)(m,(0,r.Z)({as:y,className:(0,a.Z)(O.root,c),ownerState:P,focusable:"false",color:w,"aria-hidden":!Z||void 0,role:Z?"img":void 0,ref:t},T,R,{children:[o,Z?(0,p.jsx)("title",{children:Z}):null]}))}));v.muiName="SvgIcon";var g=v;function y(e,t){var n=function(n,o){return(0,p.jsx)(g,(0,r.Z)({"data-testid":"".concat(t,"Icon"),ref:o},n,{children:e}))};return n.muiName=g.muiName,o.memo(o.forwardRef(n))}},3199:function(e,t,n){"use strict";var r=n(3981);t.Z=r.Z},4454:function(e,t,n){"use strict";n.r(t),n.d(t,{capitalize:function(){return o.Z},createChainedFunction:function(){return i},createSvgIcon:function(){return a.Z},debounce:function(){return l.Z},deprecatedPropType:function(){return s},isMuiElement:function(){return u.Z},ownerDocument:function(){return c.Z},ownerWindow:function(){return d.Z},requirePropFactory:function(){return f},setRef:function(){return p},unstable_ClassNameGenerator:function(){return w},unstable_useEnhancedEffect:function(){return h.Z},unstable_useId:function(){return m},unsupportedProp:function(){return v},useControlled:function(){return g.Z},useEventCallback:function(){return y.Z},useForkRef:function(){return b.Z},useIsFocusVisible:function(){return x.Z}});var r=n(7829),o=n(4036),i=n(8949).Z,a=n(9201),l=n(3199);var s=function(e,t){return function(){return null}},u=n(9103),c=n(8301),d=n(7602);n(7462);var f=function(e,t){return function(){return null}},p=n(2971).Z,h=n(162),m=n(6248).Z;var v=function(e,t,n,r,o){return null},g=n(8744),y=n(9683),b=n(2071),x=n(3031),w={configure:function(e){console.warn(["MUI: `ClassNameGenerator` import from `@mui/material/utils` is outdated and might cause unexpected issues.","","You should use `import { unstable_ClassNameGenerator } from '@mui/material/className'` instead","","The detail of the issue: https://github.com/mui/material-ui/issues/30011#issuecomment-1024993401","","The updated documentation: https://mui.com/guides/classname-generator/"].join("\n")),r.Z.configure(e)}}},9103:function(e,t,n){"use strict";n.d(t,{Z:function(){return o}});var r=n(2791);var o=function(e,t){return r.isValidElement(e)&&-1!==t.indexOf(e.type.muiName)}},8301:function(e,t,n){"use strict";var r=n(9723);t.Z=r.Z},7602:function(e,t,n){"use strict";var r=n(7979);t.Z=r.Z},8744:function(e,t,n){"use strict";n.d(t,{Z:function(){return i}});var r=n(885),o=n(2791);var i=function(e){var t=e.controlled,n=e.default,i=(e.name,e.state,o.useRef(void 0!==t).current),a=o.useState(n),l=(0,r.Z)(a,2),s=l[0],u=l[1];return[i?t:s,o.useCallback((function(e){i||u(e)}),[])]}},162:function(e,t,n){"use strict";var r=n(5721);t.Z=r.Z},9683:function(e,t,n){"use strict";var r=n(8956);t.Z=r.Z},2071:function(e,t,n){"use strict";var r=n(7563);t.Z=r.Z},3031:function(e,t,n){"use strict";n.d(t,{Z:function(){return f}});var r,o=n(2791),i=!0,a=!1,l={text:!0,search:!0,url:!0,tel:!0,email:!0,password:!0,number:!0,date:!0,month:!0,week:!0,time:!0,datetime:!0,"datetime-local":!0};function s(e){e.metaKey||e.altKey||e.ctrlKey||(i=!0)}function u(){i=!1}function c(){"hidden"===this.visibilityState&&a&&(i=!0)}function d(e){var t=e.target;try{return t.matches(":focus-visible")}catch(n){}return i||function(e){var t=e.type,n=e.tagName;return!("INPUT"!==n||!l[t]||e.readOnly)||"TEXTAREA"===n&&!e.readOnly||!!e.isContentEditable}(t)}var f=function(){var e=o.useCallback((function(e){var t;null!=e&&((t=e.ownerDocument).addEventListener("keydown",s,!0),t.addEventListener("mousedown",u,!0),t.addEventListener("pointerdown",u,!0),t.addEventListener("touchstart",u,!0),t.addEventListener("visibilitychange",c,!0))}),[]),t=o.useRef(!1);return{isFocusVisibleRef:t,onFocus:function(e){return!!d(e)&&(t.current=!0,!0)},onBlur:function(){return!!t.current&&(a=!0,window.clearTimeout(r),r=window.setTimeout((function(){a=!1}),100),t.current=!1,!0)},ref:e}}},8023:function(e,t,n){"use strict";var r=n(2791).createContext(null);t.Z=r},9598:function(e,t,n){"use strict";n.d(t,{Z:function(){return i}});var r=n(2791),o=n(8023);function i(){return r.useContext(o.Z)}},594:function(e,t,n){"use strict";n.d(t,{ZP:function(){return w}});var r=n(2791),o=n.t(r,2),i=n(7462),a=n(3782),l=/^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|abbr|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|download|draggable|encType|enterKeyHint|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|translate|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|incremental|fallback|inert|itemProp|itemScope|itemType|itemID|itemRef|on|option|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/,s=(0,a.Z)((function(e){return l.test(e)||111===e.charCodeAt(0)&&110===e.charCodeAt(1)&&e.charCodeAt(2)<91})),u=n(1688),c=n(5438),d=n(1346),f=s,p=function(e){return"theme"!==e},h=function(e){return"string"===typeof e&&e.charCodeAt(0)>96?f:p},m=function(e,t,n){var r;if(t){var o=t.shouldForwardProp;r=e.__emotion_forwardProp&&o?function(t){return e.__emotion_forwardProp(t)&&o(t)}:o}return"function"!==typeof r&&n&&(r=e.__emotion_forwardProp),r},v=o.useInsertionEffect?o.useInsertionEffect:function(e){e()};var g=function(e){var t=e.cache,n=e.serialized,r=e.isStringTag;(0,c.hC)(t,n,r);!function(e){v(e)}((function(){return(0,c.My)(t,n,r)}));return null},y=function e(t,n){var o,a,l=t.__emotion_real===t,s=l&&t.__emotion_base||t;void 0!==n&&(o=n.label,a=n.target);var f=m(t,n,l),p=f||h(s),v=!p("as");return function(){var y=arguments,b=l&&void 0!==t.__emotion_styles?t.__emotion_styles.slice(0):[];if(void 0!==o&&b.push("label:"+o+";"),null==y[0]||void 0===y[0].raw)b.push.apply(b,y);else{0,b.push(y[0][0]);for(var x=y.length,w=1;w0&&void 0!==arguments[0]?arguments[0]:{},n=null==t||null==(e=t.keys)?void 0:e.reduce((function(e,n){return e[t.up(n)]={},e}),{});return n||{}}function l(e,t){return e.reduce((function(e,t){var n=e[t];return(!n||0===Object.keys(n).length)&&delete e[t],e}),t)}function s(e){var t,n=e.values,r=e.breakpoints,o=e.base||function(e,t){if("object"!==typeof e)return{};var n={},r=Object.keys(t);return Array.isArray(e)?r.forEach((function(t,r){r1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1;return Math.min(Math.max(t,e),n)}function i(e){if(e.type)return e;if("#"===e.charAt(0))return i(function(e){e=e.slice(1);var t=new RegExp(".{1,".concat(e.length>=6?2:1,"}"),"g"),n=e.match(t);return n&&1===n[0].length&&(n=n.map((function(e){return e+e}))),n?"rgb".concat(4===n.length?"a":"","(").concat(n.map((function(e,t){return t<3?parseInt(e,16):Math.round(parseInt(e,16)/255*1e3)/1e3})).join(", "),")"):""}(e));var t=e.indexOf("("),n=e.substring(0,t);if(-1===["rgb","rgba","hsl","hsla","color"].indexOf(n))throw new Error((0,r.Z)(9,e));var o,a=e.substring(t+1,e.length-1);if("color"===n){if(o=(a=a.split(" ")).shift(),4===a.length&&"/"===a[3].charAt(0)&&(a[3]=a[3].slice(1)),-1===["srgb","display-p3","a98-rgb","prophoto-rgb","rec-2020"].indexOf(o))throw new Error((0,r.Z)(10,o))}else a=a.split(",");return{type:n,values:a=a.map((function(e){return parseFloat(e)})),colorSpace:o}}function a(e){var t=e.type,n=e.colorSpace,r=e.values;return-1!==t.indexOf("rgb")?r=r.map((function(e,t){return t<3?parseInt(e,10):e})):-1!==t.indexOf("hsl")&&(r[1]="".concat(r[1],"%"),r[2]="".concat(r[2],"%")),r=-1!==t.indexOf("color")?"".concat(n," ").concat(r.join(" ")):"".concat(r.join(", ")),"".concat(t,"(").concat(r,")")}function l(e){var t="hsl"===(e=i(e)).type?i(function(e){var t=(e=i(e)).values,n=t[0],r=t[1]/100,o=t[2]/100,l=r*Math.min(o,1-o),s=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:(e+n/30)%12;return o-l*Math.max(Math.min(t-3,9-t,1),-1)},u="rgb",c=[Math.round(255*s(0)),Math.round(255*s(8)),Math.round(255*s(4))];return"hsla"===e.type&&(u+="a",c.push(t[3])),a({type:u,values:c})}(e)).values:e.values;return t=t.map((function(t){return"color"!==e.type&&(t/=255),t<=.03928?t/12.92:Math.pow((t+.055)/1.055,2.4)})),Number((.2126*t[0]+.7152*t[1]+.0722*t[2]).toFixed(3))}function s(e,t){var n=l(e),r=l(t);return(Math.max(n,r)+.05)/(Math.min(n,r)+.05)}function u(e,t){return e=i(e),t=o(t),"rgb"!==e.type&&"hsl"!==e.type||(e.type+="a"),"color"===e.type?e.values[3]="/".concat(t):e.values[3]=t,a(e)}function c(e,t){if(e=i(e),t=o(t),-1!==e.type.indexOf("hsl"))e.values[2]*=1-t;else if(-1!==e.type.indexOf("rgb")||-1!==e.type.indexOf("color"))for(var n=0;n<3;n+=1)e.values[n]*=1-t;return a(e)}function d(e,t){if(e=i(e),t=o(t),-1!==e.type.indexOf("hsl"))e.values[2]+=(100-e.values[2])*t;else if(-1!==e.type.indexOf("rgb"))for(var n=0;n<3;n+=1)e.values[n]+=(255-e.values[n])*t;else if(-1!==e.type.indexOf("color"))for(var r=0;r<3;r+=1)e.values[r]+=(1-e.values[r])*t;return a(e)}function f(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:.15;return l(e)>.5?c(e,t):d(e,t)}},5080:function(e,t,n){"use strict";n.d(t,{Z:function(){return p}});var r=n(7462),o=n(3366),i=n(2466),a=n(4942),l=["values","unit","step"];function s(e){var t=e.values,n=void 0===t?{xs:0,sm:600,md:900,lg:1200,xl:1536}:t,i=e.unit,s=void 0===i?"px":i,u=e.step,c=void 0===u?5:u,d=(0,o.Z)(e,l),f=function(e){var t=Object.keys(e).map((function(t){return{key:t,val:e[t]}}))||[];return t.sort((function(e,t){return e.val-t.val})),t.reduce((function(e,t){return(0,r.Z)({},e,(0,a.Z)({},t.key,t.val))}),{})}(n),p=Object.keys(f);function h(e){var t="number"===typeof n[e]?n[e]:e;return"@media (min-width:".concat(t).concat(s,")")}function m(e){var t="number"===typeof n[e]?n[e]:e;return"@media (max-width:".concat(t-c/100).concat(s,")")}function v(e,t){var r=p.indexOf(t);return"@media (min-width:".concat("number"===typeof n[e]?n[e]:e).concat(s,") and ")+"(max-width:".concat((-1!==r&&"number"===typeof n[p[r]]?n[p[r]]:t)-c/100).concat(s,")")}return(0,r.Z)({keys:p,values:f,up:h,down:m,between:v,only:function(e){return p.indexOf(e)+10&&void 0!==arguments[0]?arguments[0]:8;if(e.mui)return e;var t=(0,c.hB)({spacing:e}),n=function(){for(var e=arguments.length,n=new Array(e),r=0;r0&&void 0!==arguments[0]?arguments[0]:{},t=e.breakpoints,n=void 0===t?{}:t,a=e.palette,l=void 0===a?{}:a,c=e.spacing,p=e.shape,h=void 0===p?{}:p,m=(0,o.Z)(e,f),v=s(n),g=d(c),y=(0,i.Z)({breakpoints:v,direction:"ltr",components:{},palette:(0,r.Z)({mode:"light"},l),spacing:g,shape:(0,r.Z)({},u,h)},m),b=arguments.length,x=new Array(b>1?b-1:0),w=1;w2){if(!u[e])return[e];e=u[e]}var t=e.split(""),n=(0,r.Z)(t,2),o=n[0],i=n[1],a=l[o],c=s[i]||"";return Array.isArray(c)?c.map((function(e){return a+e})):[a+c]})),d=["m","mt","mr","mb","ml","mx","my","margin","marginTop","marginRight","marginBottom","marginLeft","marginX","marginY","marginInline","marginInlineStart","marginInlineEnd","marginBlock","marginBlockStart","marginBlockEnd"],f=["p","pt","pr","pb","pl","px","py","padding","paddingTop","paddingRight","paddingBottom","paddingLeft","paddingX","paddingY","paddingInline","paddingInlineStart","paddingInlineEnd","paddingBlock","paddingBlockStart","paddingBlockEnd"],p=[].concat(d,f);function h(e,t,n,r){var o=(0,i.D)(e,t)||n;return"number"===typeof o?function(e){return"string"===typeof e?e:o*e}:Array.isArray(o)?function(e){return"string"===typeof e?e:o[e]}:"function"===typeof o?o:function(){}}function m(e){return h(e,"spacing",8)}function v(e,t){if("string"===typeof t||null==t)return t;var n=e(Math.abs(t));return t>=0?n:"number"===typeof n?-n:"-".concat(n)}function g(e,t,n,r){if(-1===t.indexOf(n))return null;var i=function(e,t){return function(n){return e.reduce((function(e,r){return e[r]=v(t,n),e}),{})}}(c(n),r),a=e[n];return(0,o.k9)(e,a,i)}function y(e,t){var n=m(e.theme);return Object.keys(e).map((function(r){return g(e,t,r,n)})).reduce(a.Z,{})}function b(e){return y(e,d)}function x(e){return y(e,f)}function w(e){return y(e,p)}b.propTypes={},b.filterProps=d,x.propTypes={},x.filterProps=f,w.propTypes={},w.filterProps=p;var k=w},8529:function(e,t,n){"use strict";n.d(t,{D:function(){return a}});var r=n(4942),o=n(7312),i=n(1184);function a(e,t){return t&&"string"===typeof t?t.split(".").reduce((function(e,t){return e&&e[t]?e[t]:null}),e):null}function l(e,t,n){var r,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:n;return r="function"===typeof e?e(n):Array.isArray(e)?e[n]||o:a(e,n)||o,t&&(r=t(r)),r}t.Z=function(e){var t=e.prop,n=e.cssProperty,s=void 0===n?e.prop:n,u=e.themeKey,c=e.transform,d=function(e){if(null==e[t])return null;var n=e[t],d=a(e.theme,u)||{};return(0,i.k9)(e,n,(function(e){var n=l(d,c,e);return e===n&&"string"===typeof e&&(n=l(d,c,"".concat(t).concat("default"===e?"":(0,o.Z)(e)),e)),!1===s?n:(0,r.Z)({},s,n)}))};return d.propTypes={},d.filterProps=[t],d}},104:function(e,t,n){"use strict";var r=n(4942),o=n(8247),i=n(6001),a=n(1184);function l(){for(var e=arguments.length,t=new Array(e),n=0;n0&&void 0!==arguments[0]?arguments[0]:i.G$,t=Object.keys(e).reduce((function(t,n){return e[n].filterProps.forEach((function(r){t[r]=e[n]})),t}),{});function n(e,n,o){var i,a=(i={},(0,r.Z)(i,e,n),(0,r.Z)(i,"theme",o),i),l=t[e];return l?l(a):(0,r.Z)({},e,n)}function u(e){var i=e||{},c=i.sx,d=i.theme,f=void 0===d?{}:d;if(!c)return null;function p(e){var i=e;if("function"===typeof e)i=e(f);else if("object"!==typeof e)return e;if(!i)return null;var c=(0,a.W8)(f.breakpoints),d=Object.keys(c),p=c;return Object.keys(i).forEach((function(e){var c=s(i[e],f);if(null!==c&&void 0!==c)if("object"===typeof c)if(t[e])p=(0,o.Z)(p,n(e,c,f));else{var d=(0,a.k9)({theme:f},c,(function(t){return(0,r.Z)({},e,t)}));l(d,c)?p[e]=u({sx:c,theme:f}):p=(0,o.Z)(p,d)}else p=(0,o.Z)(p,n(e,c,f))})),(0,a.L7)(d,p)}return Array.isArray(c)?c.map(p):p(c)}return u}();u.filterProps=["sx"],t.Z=u},3459:function(e,t,n){"use strict";n.d(t,{Z:function(){return s}});var r=n(5080),o=n(9598);function i(e){return 0===Object.keys(e).length}var a=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=(0,o.Z)();return!t||i(t)?e:t},l=(0,r.Z)();var s=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:l;return a(e)}},7312:function(e,t,n){"use strict";n.d(t,{Z:function(){return o}});var r=n(6189);function o(e){if("string"!==typeof e)throw new Error((0,r.Z)(7));return e.charAt(0).toUpperCase()+e.slice(1)}},8949:function(e,t,n){"use strict";function r(){for(var e=arguments.length,t=new Array(e),n=0;n1&&void 0!==arguments[1]?arguments[1]:166;function r(){for(var r=this,o=arguments.length,i=new Array(o),a=0;a2&&void 0!==arguments[2]?arguments[2]:{clone:!0},a=n.clone?(0,r.Z)({},e):e;return o(e)&&o(t)&&Object.keys(t).forEach((function(r){"__proto__"!==r&&(o(t[r])&&r in e&&o(e[r])?a[r]=i(e[r],t[r],n):a[r]=t[r])})),a}},6189:function(e,t,n){"use strict";function r(e){for(var t="https://mui.com/production-error/?code="+e,n=1;n=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};r.forEach(["delete","get","head"],(function(e){u.headers[e]={}})),r.forEach(["post","put","patch"],(function(e){u.headers[e]=r.merge(l)})),e.exports=u},6789:function(e){"use strict";e.exports={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1}},7600:function(e){e.exports={version:"0.26.1"}},4049:function(e){"use strict";e.exports=function(e,t){return function(){for(var n=new Array(arguments.length),r=0;r=0)return;a[t]="set-cookie"===t?(a[t]?a[t]:[]).concat([n]):a[t]?a[t]+", "+n:n}})),a):a}},8089:function(e){"use strict";e.exports=function(e){return function(t){return e.apply(null,t)}}},7835:function(e,t,n){"use strict";var r=n(7600).version,o={};["object","boolean","number","function","string","symbol"].forEach((function(e,t){o[e]=function(n){return typeof n===e||"a"+(t<1?"n ":" ")+e}}));var i={};o.transitional=function(e,t,n){function o(e,t){return"[Axios v"+r+"] Transitional option '"+e+"'"+t+(n?". "+n:"")}return function(n,r,a){if(!1===e)throw new Error(o(r," has been removed"+(t?" in "+t:"")));return t&&!i[r]&&(i[r]=!0,console.warn(o(r," has been deprecated since v"+t+" and will be removed in the near future"))),!e||e(n,r,a)}},e.exports={assertOptions:function(e,t,n){if("object"!==typeof e)throw new TypeError("options must be an object");for(var r=Object.keys(e),o=r.length;o-- >0;){var i=r[o],a=t[i];if(a){var l=e[i],s=void 0===l||a(l,i,e);if(!0!==s)throw new TypeError("option "+i+" must be "+s)}else if(!0!==n)throw Error("Unknown option "+i)}},validators:o}},3589:function(e,t,n){"use strict";var r=n(4049),o=Object.prototype.toString;function i(e){return Array.isArray(e)}function a(e){return"undefined"===typeof e}function l(e){return"[object ArrayBuffer]"===o.call(e)}function s(e){return null!==e&&"object"===typeof e}function u(e){if("[object Object]"!==o.call(e))return!1;var t=Object.getPrototypeOf(e);return null===t||t===Object.prototype}function c(e){return"[object Function]"===o.call(e)}function d(e,t){if(null!==e&&"undefined"!==typeof e)if("object"!==typeof e&&(e=[e]),i(e))for(var n=0,r=e.length;n