From 9a575a126ae873ade5991a06cc313832ed75e0c9 Mon Sep 17 00:00:00 2001 From: Abiram070207 Date: Fri, 19 Jun 2026 13:53:36 +0530 Subject: [PATCH] Removed the syncing with firestore --- .../components/dashboard/StudentDashboard.tsx | 3 +- .../dashboard/StudentRegistrationsView.tsx | 2 +- .../components/student/StatusTrackerView.tsx | 2 +- RIT-EVENT-MANAGEMENT--main/App.tsx | 9 +++++ .../components/CreateEventForm.tsx | 37 +++++++++++++++++- .../components/EventCard.tsx | 13 ++++++ image.png | Bin 0 -> 10190 bytes 7 files changed, 60 insertions(+), 6 deletions(-) create mode 100644 image.png diff --git a/RIT-EMS-main/frontend/src/components/dashboard/StudentDashboard.tsx b/RIT-EMS-main/frontend/src/components/dashboard/StudentDashboard.tsx index 05a2ad0..35d18eb 100644 --- a/RIT-EMS-main/frontend/src/components/dashboard/StudentDashboard.tsx +++ b/RIT-EMS-main/frontend/src/components/dashboard/StudentDashboard.tsx @@ -414,8 +414,7 @@ export const StudentDashboard: React.FC = () => { if (isLoading) { return (
-
-

Syncing with Firestore Database...

+
); } diff --git a/RIT-EMS-main/frontend/src/components/dashboard/StudentRegistrationsView.tsx b/RIT-EMS-main/frontend/src/components/dashboard/StudentRegistrationsView.tsx index de18586..07c4e80 100644 --- a/RIT-EMS-main/frontend/src/components/dashboard/StudentRegistrationsView.tsx +++ b/RIT-EMS-main/frontend/src/components/dashboard/StudentRegistrationsView.tsx @@ -439,7 +439,7 @@ export const StudentRegistrationsView: React.FC = () => { disabled={isProcessing} className="px-6 py-2.5 bg-brand-navy text-white rounded-xl font-black text-[10px] uppercase tracking-widest hover:scale-[1.02] transition-all shadow-md" > - {isProcessing ? 'Syncing...' : 'Save Attendance'} + {isProcessing ? 'Saving...' : 'Save Attendance'} diff --git a/RIT-EMS-main/frontend/src/components/student/StatusTrackerView.tsx b/RIT-EMS-main/frontend/src/components/student/StatusTrackerView.tsx index 8869fa4..f9fc723 100644 --- a/RIT-EMS-main/frontend/src/components/student/StatusTrackerView.tsx +++ b/RIT-EMS-main/frontend/src/components/student/StatusTrackerView.tsx @@ -499,7 +499,7 @@ const StatusTrackerView: React.FC = ({ event, registrati isUploading ? 'bg-gray-200 text-gray-400 cursor-wait' : 'bg-[#1A202C] text-white hover:bg-black' }`} > - {isUploading ? <> SYNCING... : + {isUploading ? <> UPLOADING... : liveCertStatus === 'APPROVED' ? <> VERIFIED : liveCertUrl ? <> RE-UPLOAD PROOF : <> UPLOAD PROOF} diff --git a/RIT-EVENT-MANAGEMENT--main/App.tsx b/RIT-EVENT-MANAGEMENT--main/App.tsx index 201ac64..07e809a 100644 --- a/RIT-EVENT-MANAGEMENT--main/App.tsx +++ b/RIT-EVENT-MANAGEMENT--main/App.tsx @@ -732,6 +732,15 @@ const App: React.FC = () => { return; } + // Validate registration deadline + if (targetEvent.registrationDeadline) { + const deadline = new Date(targetEvent.registrationDeadline); + if (new Date() > deadline) { + alert("Registration Blocked: The registration deadline for this event has passed."); + return; + } + } + // Try to fetch from Studentusers first, then externalusers let student = null; const { data: internalStudent } = await supabase.from('Studentusers').select('*').eq('id', user.id).single(); diff --git a/RIT-EVENT-MANAGEMENT--main/components/CreateEventForm.tsx b/RIT-EVENT-MANAGEMENT--main/components/CreateEventForm.tsx index d2d6686..48b668f 100644 --- a/RIT-EVENT-MANAGEMENT--main/components/CreateEventForm.tsx +++ b/RIT-EVENT-MANAGEMENT--main/components/CreateEventForm.tsx @@ -27,6 +27,22 @@ const CreateEventForm: React.FC = ({ onCancel, onSuccess, } }; + const parseDateTimeForInput = (dateStr?: string) => { + if (!dateStr) return ''; + try { + const date = new Date(dateStr); + if (isNaN(date.getTime())) return ''; + const yyyy = date.getFullYear(); + const mm = String(date.getMonth() + 1).padStart(2, '0'); + const dd = String(date.getDate()).padStart(2, '0'); + const hh = String(date.getHours()).padStart(2, '0'); + const min = String(date.getMinutes()).padStart(2, '0'); + return `${yyyy}-${mm}-${dd}T${hh}:${min}`; + } catch { + return ''; + } + }; + const mapDBRowToEvent = (row: any): Event => ({ ...row, registrationDeadline: row.registration_deadline, @@ -88,7 +104,7 @@ const CreateEventForm: React.FC = ({ onCancel, onSuccess, coordinator: eventToEdit?.coordinator || '', club: eventToEdit?.club || '', image: eventToEdit?.image || '', - registrationDeadline: eventToEdit?.registrationDeadline || '', + registrationDeadline: eventToEdit?.registrationDeadline ? parseDateTimeForInput(eventToEdit.registrationDeadline) : '', maxParticipants: eventToEdit?.maxParticipants?.toString() || '', durationDays: eventToEdit?.durationDays?.toString() || '1', event_summary: eventToEdit?.event_summary || '', @@ -347,6 +363,23 @@ const CreateEventForm: React.FC = ({ onCancel, onSuccess, return; } + if (formData.registrationDeadline) { + const deadline = new Date(formData.registrationDeadline); + if (isNaN(deadline.getTime())) { + alert("Please enter a valid registration deadline."); + return; + } + if (!eventToEdit && deadline < new Date()) { + alert("Validation Error: Registration deadline cannot be in the past."); + return; + } + const eventStart = new Date(formData.dayConfigs[0]?.date || formData.date); + if (!isNaN(eventStart.getTime()) && deadline > eventStart) { + alert("Validation Error: Registration deadline cannot be after the event start date."); + return; + } + } + setIsSubmitting(true); try { // Keep Base64 string directly in the database, ignoring Firebase/Supabase storage @@ -869,7 +902,7 @@ const CreateEventForm: React.FC = ({ onCancel, onSuccess,
- + setFormData({ ...formData, registrationDeadline: e.target.value })} />
diff --git a/RIT-EVENT-MANAGEMENT--main/components/EventCard.tsx b/RIT-EVENT-MANAGEMENT--main/components/EventCard.tsx index 283ee28..c77d112 100644 --- a/RIT-EVENT-MANAGEMENT--main/components/EventCard.tsx +++ b/RIT-EVENT-MANAGEMENT--main/components/EventCard.tsx @@ -193,6 +193,19 @@ const EventCard: React.FC = ({ event, isBooked, onToggle, onTrac {event.date}{event.schedule?.[0]?.start_time ? ` • ${event.schedule[0].start_time}` : ''}
+ {event.registrationDeadline && ( +
+ + + {admissionStatus === 'DEADLINE_PASSED' ? 'Deadline Passed' : 'Register Before'}: {new Date(event.registrationDeadline).toLocaleDateString([], { + month: 'short', + day: '2-digit', + hour: '2-digit', + minute: '2-digit' + })} + +
+ )} {event.durationDays && event.durationDays > 1 && (
diff --git a/image.png b/image.png new file mode 100644 index 0000000000000000000000000000000000000000..e138de18cda6d327952c0f9ed03d34e3cc2da202 GIT binary patch literal 10190 zcmeHN`&X04x=!nEZL3JT+pR?qR8U$`qTE8bBq}Y4K=6oM6bM?7a1BTZ2!UWXTdh)z z5CH=usfU|D0l6C>q}C$$1i6I}l88b=0tt`{G30ha_xS_%I%}`9+P(bYTeD{7oA-NX zo@eHLX6Czd4(4U_$=*)@0DzJAnQzVm03Wmg0Pnkf^r4~TYyPnnL-HQ#yw_B-r1v+cE?kF;IYPXd;0kX& zfh6|0NK6CHPR# zu29H>8C$P{L(BUQobNgHsnvU*D)Xu7jr6>5K;GZJ^?q<+wqKJ~*D*k->8|NUM98x` z*L~Z^B-8I1oC4f%?4}l5SlOKUdods+?=Oj4^?;LyrB0eZEP^pXfC)Y0LcUiPr{x2av`41uFzmD*~du;zCGxlE} zpg;K1^R6TRf$`)WsP91iKd2o!#+wtNJqiFkd9fv^#^SBT6f1@3GXUVS(PsuBwLj1< z`WNfe<|HGCR{ZKm49qm@fN{d6~w$+o00)Tt02my?SLCrQzvZ#r_Qt|BNU$+ z3O#?fZAFFE^$9E47v0}C*!yhDUewnyh|NnaSoZI3=5Oh}{oa}4D!nbe(cGZ@ra#&W z$s!jD`ha4xXfn5=-s?Ss!aQvV-Z!wIDMflf;vAt4{510m03gJ2OC5%kdn3#JIw0i^ zw}Wto@BHrLFV>+P|7>CY!mMj;r(4_aZ+mRL4Pos@oDav^D~h)bb~XId_%{aQukhkI zpFs@Ie*;?dV?v0#L8SkDV9Q~0*hKJo>U#c#<<3KFYy8mS2}8}*#+mm3ZyoFL*mMP+ z_8q$Ac#&v(&VwE`ak5``u?72`;xqv8%ib-Sv9=t@9DMCN9v^Tn0Ad3OPVgNvs85lUedZ-mt*hR~fmn3a?N-Lm#ig9Kk5qH>Mi>*VysV^~f zZ+gFBfNn&z9x>VL!(Tnh0drOx;IB$5VU8%rDO0^`#yqZYom!i-47E1xXo4HS2&vfW zI96NgG5EIk0#UUf4fR3AF%_aJNG}{j$v&WxSX6Iz>kH$Q>yr_0af35X0r>{)eJYH) z4e-QiXQL1GO8>XDD-KvM!?V5_L6+VVS$c?HNEAV zgFHVcv5r;YZ161J+5pnI;+w(+Y1v@6{(hV!NJRgx&ePHaPVRCnG-Ss~KG}lvbt?AY zWKmR!-C|njT6&{GMhr6|=eIEN|HIa5>U4K#6ZWr$Nm9)d zM>kLSHNp078{KK_H1W7l-c1N!s=l-y)TpwVNGV@|g`glFQ?!^81 zXVD+-O=m=`ey=DzG8$y#(NHC0EvL222&-tDT3Y(9)yD9usf6g{KHfbC#o#&1EiumvVDWE@7eU9Xn!q?uXI? zl{wHL63-L$RYk56)Ftmm>$99b{Lro^3$j{ga2=RB;cxlevcaLg$aRYG`t@BN`%zG7 z{t=N;)xAtwmd8%YD2n;@BDl|$DtAcY8JBCLW*znRWhEJ_Coh7zo|n9s#i@^rwTcqKywTIbrTOkS1c+162C%0LR-c`bXKS$pSIUZ8q!GOrv(` z8=Z!F(+s?E29loY4BhOuSS%tO!9mx*A+gwWo?dJUp4dlkCF@h~rP2j7tX_M;RJj-d z0g*s(X95$*SbSFO@_>;gM1g0irAb6*0?I=zTctgP4u-)o^9`D{mG2=8A@L`RuG3w$3J?h$XHl7(n zgL-vT8v?B}sBmW#uQ^int7T}wD0g7l8ahzBBi(Modm5KC8i~iClKXG%G_n$4*EpI{ zO5fttB~~-~AP&+6Qg{3q^=hO{mAj|O?a88%8n-x1X7#=%AZ>f}FrDtV#gW6YJ9kDe zcdVPaJ+a1jzpxv7TsTR{)TioRd+ljC*O?-J8JQtj;_tM|Skz+6dJT|}GJh=JiGGNX!x{qUA2>eajfSxdIP6Utt{+J^^cqf|XsgSUt( z(VkrhPTfO;Vxj#ob&CDK67Y*PS97y9W1SOf!lt^CF{1f|OHWCiTxy}~4(}I-Q#7wO zkIp?UP&WD^HZ-iBtSY=8yCa%6{nFul4O>{_4#G42!$(Hbfas!m#pXtA^$T*320Zwu^)9 zB4S1SGX~b|*DnYM-CCLpkde+_yP)L)GUTDVrFS^fXPBEejNYVTT{!T}`qjgYcz9nuDFOMQ&QiESGjjXhAgRRVA8wEz2st)WB&z1=+$YL>#F)P>rEy+Lw%m_v@$9qyF9$@$+{k+M!d|Fbw9qr~ZFs^@yIAAq`` z4^0q{igSRhofDm~P4ffe8ZKD&x0X&#VStHw=S8__p(l^qV^< zJw1azL&*J|H7Bwyfz%WyW=SVej?!_KFaBJ2L96OPM{nwe(i;WcP35Ci^bpcp`Men` zY?0IHFOcU~xprbW@UE#42sLYt0qwH%@Us8{0B@&K`aT9^y`I{U7pue&h~j9@%(Ui3 zl6x61BQwIu_>gzeo!j>o2428n)O06cZwgratiTM?=4vYO6Q8?!{V{<%vY4e@xV!)9 zN^UwZIxgAcp1)+cIoDP8cHK*=8oZNWzW0pwkv>RL(FwxnzOz+&O5ZN@x}_xtn`7i5 zy1qT;qxf#GR=2!C_xuKSOXOoRfuIUgUp^ebiAp_AAdyCI*2^xgFikjJ$I60v7hI1& zytD6faLQ#wT2s8$wuY6t=3`#Q35>U6cNaH_BlMB0Y0(G75>X*_=+&8B5?(>Y_B8$) zY5hkd?LT~8))n}Lb}TGC+sA^~-G^gr)Af07^wuc z9PoFS)oLV3<|F)P-?vRC(jRSem90&qO=2#Xn6V!i3`a5e^A7yRh0z^(tf$!raqb;Z z{Oyg!R-AujmwnNW^k`I*5zk%c!M5kFAh6gIGUb0K7tOy!vnW0O-Jk}yQ#OIDHbXlz zZkfNIWbhVO+=E668x=ZvLgQSiU;3MG?j<#*$Tm`u{y^$4ZySl=%*&yNUtFpkAL!t? zqEdOq31439GSv^MgIkX~6uZBPj7>xG7bx3nPI^xbbTv1xn3?(p9?G9i_FUzXIF$0v zrj6E&iCYPr$ssYSBtgBa=Eh=5L{qgdB!~N7GmF9iG zFHPhAZ@+jCur_!i^VJ#B9JusmXs{H-)4+9aO@WJwJlVxkD{$<+dkgc=UF}`a_SQ8R zR?q6?d&orYKG^vh3i2q%sgco+PvW=VjOz=r<4LMd9KZi)dfa8SKmnG{JTv1s78}zZ zDGV%eoq*+B-d~YB>L4i}B4!GI1; zAQOkwCDG$z#}*8u7?<;3*VS3Q8%!WSK1Z7gr#P1deyunaP$IL=Q4uxs`b}8x`uI)F z^}2}ZRsM==k|0MnWs?zKSB5t2i0Z%lg9~b%y2#8r!E@ul#s{Vo*>;p9w@9k1ikpso z2-Vep4!)Ll1nTs`+qk?u!g6q|QHR}3U7>*!7K3Lvqw)lxwmTnt%?U`=T&+OIAyrz?e%cQO7~7jIUM(UX6~n^(K}Dv{JwmgT=?*u&CJ{ zA_5_-l+4+qvCNOdD67$T^l25r*Bql z%Q|}?YoD=A&G((HV2}EC1*9Zq&xriO@m&&<8g)S%#d^(AT=jrm_s9xjMtw|ox8m@C$ zUY=4Q)}4F)+$44~7MMB?4=a^k)y?|y>!V+IZXbWD?h3Sg?h!c4iAs(N-?eXsfL0>M zECx2hyJdad>NY)6sQXxijTQ*(*^Txs$m2qE$}(T!+ioi4g2@(eVbo8w`}TsG31QZZ zYbH;_@}Z2?juVMP!uZaKCVXEgGi8H*7kX@`1M1aMlx}JdZgFia41RsRy$4lKmJ6hO z73+dfz%OD`QsYmcr-oS*B`xXaEHB%D&xPUMK7 z7^mKW^NUJWKn;f@HzHbani0cf_I{Eq^zBu=uIX2+CT{Pl}6cE{Ct&Y(deI3d#k42HJrgBpNZOjC;r%m5v%vA&j!+bL_W1l>Cp6nERY9k7+h}}Yvi|ki7c=o zGIj2%njkTXhHW;QBnZ*;Xiv5zT9PWNlvD*<^sK_5F9 zb?xxrNPbW9>jsUsUXXI7OE#a*Q(`EsS#wOuNL2*Wo5L8j*(2qAzA8xR?sV%{P4%q3 zcFoAips(pPzOY{G5gt~}7acP!++LgCLV69SD-}=HU%hnes2Wn)TP*Z}=!>2?R$jZr zgZC8B)vELMp}YL}La{OIjC)695($%akQxe-P77rj$~adH&TOCpGp(N~XBuy=iH(xD z1qkv?$vnjsoUwTtM(QROgsY{K&(?Qh2W&e(1YP}3dva58d1K#~e({&TVms}ujsUfw zR*NlY?5tytFR?PBf;VsuDcU)8hJIQrr(It@3%@R=_N>ifRP!uK)z@Afs{_s1%PDVG zZkAtvlUrUEw=mY6&2p4a+(RBWhN?o$dD8<`vOO}sFpmOnU?8B`&c=!6S;xnMpM&M{ z-j$_x)JE_9jR?X(RaDysnsGIPR7+5BX4?&Mj_e2VRy z1Tox5%t%PdF^6^ly>=xGC97dDlKuy8FUj0UEt}JJYg$n7#&~gkP@BPj*qqO`6 zUyj!1B(0>r#CGwwPys5onQ+^JF!FN!ND0s%QO#y-hO1@r1)Uot!x;x_8;2W|*>FHC zl1=2fxsbRG^%<&s`wZpmX(x$mxxoC=rrnU0H^QaqsD*MzQbah(i%KT2L8wjYGC_3A zokXVKmGrQ|qMKDvr^&n>s#luD9#rgxt^)vgg*bPt%`bI3;QrB3&YaM=a!NBWq}lO! z;^In;W80?bm(X6_ch)9x6rXt#)+JBT@7hn3Drpzcn;f{^*a$;I#G#2usL7WhBz?Bx zjg=M&&Hw%dl_Gi%@alQk(_~15cBo_`RL9JNr~!bvsTkee$Y{m->1D5&A6WGc5FJ=o zMAKK*jmPNBPPls49U1-G`ewg5(Ep8PwBZm?CRJ@WoS**rufE@1RlK{ZF!1;f`eVjB zcD`fhJ9hpVexdrK&D0ArB7IK~^y94{4WJ