From e6c120bf75f0c949c5cfb6c2907c78d1092aca26 Mon Sep 17 00:00:00 2001 From: Bagasbanuna02 Date: Wed, 7 Feb 2024 15:18:25 +0800 Subject: [PATCH 01/14] # Voting prototype - feat - Tampilan beranda - Tampilan status - Tampilan kontribusi - Tampilan riwayat ## No Issue --- public/aset/Hipmi Business Map.png | Bin 0 -> 43335 bytes public/aset/Hipmi Job Vacancy Logo.png | Bin 0 -> 25319 bytes public/aset/Hipmi Project Collaboration.png | Bin 0 -> 50221 bytes public/aset/vote/logo.png | Bin 0 -> 41892 bytes src/app/admin/layout.tsx | 6 - src/app/admin/main/page.tsx | 5 - src/app/dev/vote/create/layout.tsx | 14 ++ src/app/dev/vote/create/page.tsx | 9 + src/app/dev/vote/detail/draft/layout.tsx | 10 + src/app/dev/vote/detail/draft/page.tsx | 9 + src/app/dev/vote/detail/kontribusi/layout.tsx | 14 ++ src/app/dev/vote/detail/kontribusi/page.tsx | 9 + src/app/dev/vote/detail/main/layout.tsx | 14 ++ src/app/dev/vote/detail/main/page.tsx | 7 + src/app/dev/vote/detail/publish/layout.tsx | 10 + src/app/dev/vote/detail/publish/page.tsx | 7 + src/app/dev/vote/detail/reject/layout.tsx | 8 + src/app/dev/vote/detail/reject/page.tsx | 7 + src/app/dev/vote/detail/review/layout.tsx | 10 + src/app/dev/vote/detail/review/page.tsx | 9 + .../dev/vote/detail/riwayat_saya/layout.tsx | 14 ++ src/app/dev/vote/detail/riwayat_saya/page.tsx | 9 + .../dev/vote/detail/semua_riwayat/layout.tsx | 14 ++ .../dev/vote/detail/semua_riwayat/page.tsx | 10 + src/app/dev/vote/edit/layout.tsx | 14 ++ src/app/dev/vote/edit/page.tsx | 9 + src/app/dev/vote/main/beranda/page.tsx | 7 + src/app/dev/vote/main/kontribusi/page.tsx | 10 + src/app/dev/vote/main/layout.tsx | 14 ++ src/app/dev/vote/main/riwayat/page.tsx | 9 + src/app/dev/vote/main/status/page.tsx | 9 + src/app/dev/vote/splash/page.tsx | 9 + src/app/emotion.tsx | 7 +- src/app/lib/router_hipmi/router_vote.ts | 24 +++ .../admin/event/child/tipe_acara.tsx | 81 +++++++- .../edit/fun_edit_activation_tipe_acara.ts | 22 +++ .../event/fun/get/get_list_tipe_acara.ts | 3 + .../author_name_on_header.tsx | 21 ++- .../event/fun/master/get_tipe_acara.ts | 9 +- src/app_modules/home/view.tsx | 20 +- .../vote/component/card_view_publish.tsx | 91 +++++++++ .../vote/component/card_view_status.tsx | 86 +++++++++ .../vote/component/detail/daftar_voter.tsx | 53 ++++++ .../vote/component/detail/detail_data.tsx | 92 +++++++++ .../detail/detail_data_tanpa_vote.tsx | 51 +++++ .../vote/component/detail/hasil_voting.tsx | 76 ++++++++ .../vote/component/header_tamplate.tsx | 69 +++++++ src/app_modules/vote/create/index.tsx | 123 ++++++++++++ src/app_modules/vote/create/layout.tsx | 19 ++ src/app_modules/vote/detail/draft/index.tsx | 88 +++++++++ src/app_modules/vote/detail/draft/layout.tsx | 29 +++ .../vote/detail/kontribusi/index.tsx | 76 ++++++++ .../vote/detail/kontribusi/layout.tsx | 21 +++ src/app_modules/vote/detail/main/index.tsx | 107 +++++++++++ src/app_modules/vote/detail/main/layout.tsx | 19 ++ src/app_modules/vote/detail/publish/index.tsx | 78 ++++++++ .../vote/detail/publish/layout.tsx | 19 ++ src/app_modules/vote/detail/reject/index.tsx | 96 ++++++++++ src/app_modules/vote/detail/reject/layout.tsx | 19 ++ src/app_modules/vote/detail/review/index.tsx | 56 ++++++ src/app_modules/vote/detail/review/layout.tsx | 19 ++ .../vote/detail/riwayat_saya/layout.tsx | 21 +++ .../vote/detail/riwayat_saya/page.tsx | 5 + .../vote/detail/semua_riwayat/layout.tsx | 21 +++ .../vote/detail/semua_riwayat/page.tsx | 18 ++ src/app_modules/vote/edit/index.tsx | 119 ++++++++++++ src/app_modules/vote/edit/layout.tsx | 19 ++ src/app_modules/vote/global_state/index.ts | 13 ++ src/app_modules/vote/index.tsx | 55 ++++++ src/app_modules/vote/main/beranda.tsx | 57 ++++++ src/app_modules/vote/main/kontribusi.tsx | 40 ++++ src/app_modules/vote/main/layout.tsx | 107 +++++++++++ src/app_modules/vote/main/riwayat/index.tsx | 59 ++++++ src/app_modules/vote/main/riwayat/saya.tsx | 39 ++++ src/app_modules/vote/main/riwayat/semua.tsx | 39 ++++ src/app_modules/vote/main/status/draft.tsx | 12 ++ src/app_modules/vote/main/status/index.tsx | 70 +++++++ src/app_modules/vote/main/status/publish.tsx | 80 ++++++++ src/app_modules/vote/main/status/reject.tsx | 12 ++ src/app_modules/vote/main/status/review.tsx | 12 ++ src/app_modules/vote/splash/index.tsx | 30 +++ src/app_modules_admin/READ_ADMIN.md | 1 - src/app_modules_admin/main/index.ts | 4 - src/app_modules_admin/main/layout.tsx | 178 ------------------ src/app_modules_admin/main/main/index.tsx | 8 - 85 files changed, 2538 insertions(+), 231 deletions(-) create mode 100644 public/aset/Hipmi Business Map.png create mode 100644 public/aset/Hipmi Job Vacancy Logo.png create mode 100644 public/aset/Hipmi Project Collaboration.png create mode 100644 public/aset/vote/logo.png delete mode 100644 src/app/admin/layout.tsx delete mode 100644 src/app/admin/main/page.tsx create mode 100644 src/app/dev/vote/create/layout.tsx create mode 100644 src/app/dev/vote/create/page.tsx create mode 100644 src/app/dev/vote/detail/draft/layout.tsx create mode 100644 src/app/dev/vote/detail/draft/page.tsx create mode 100644 src/app/dev/vote/detail/kontribusi/layout.tsx create mode 100644 src/app/dev/vote/detail/kontribusi/page.tsx create mode 100644 src/app/dev/vote/detail/main/layout.tsx create mode 100644 src/app/dev/vote/detail/main/page.tsx create mode 100644 src/app/dev/vote/detail/publish/layout.tsx create mode 100644 src/app/dev/vote/detail/publish/page.tsx create mode 100644 src/app/dev/vote/detail/reject/layout.tsx create mode 100644 src/app/dev/vote/detail/reject/page.tsx create mode 100644 src/app/dev/vote/detail/review/layout.tsx create mode 100644 src/app/dev/vote/detail/review/page.tsx create mode 100644 src/app/dev/vote/detail/riwayat_saya/layout.tsx create mode 100644 src/app/dev/vote/detail/riwayat_saya/page.tsx create mode 100644 src/app/dev/vote/detail/semua_riwayat/layout.tsx create mode 100644 src/app/dev/vote/detail/semua_riwayat/page.tsx create mode 100644 src/app/dev/vote/edit/layout.tsx create mode 100644 src/app/dev/vote/edit/page.tsx create mode 100644 src/app/dev/vote/main/beranda/page.tsx create mode 100644 src/app/dev/vote/main/kontribusi/page.tsx create mode 100644 src/app/dev/vote/main/layout.tsx create mode 100644 src/app/dev/vote/main/riwayat/page.tsx create mode 100644 src/app/dev/vote/main/status/page.tsx create mode 100644 src/app/dev/vote/splash/page.tsx create mode 100644 src/app/lib/router_hipmi/router_vote.ts create mode 100644 src/app_modules/admin/event/fun/edit/fun_edit_activation_tipe_acara.ts create mode 100644 src/app_modules/vote/component/card_view_publish.tsx create mode 100644 src/app_modules/vote/component/card_view_status.tsx create mode 100644 src/app_modules/vote/component/detail/daftar_voter.tsx create mode 100644 src/app_modules/vote/component/detail/detail_data.tsx create mode 100644 src/app_modules/vote/component/detail/detail_data_tanpa_vote.tsx create mode 100644 src/app_modules/vote/component/detail/hasil_voting.tsx create mode 100644 src/app_modules/vote/component/header_tamplate.tsx create mode 100644 src/app_modules/vote/create/index.tsx create mode 100644 src/app_modules/vote/create/layout.tsx create mode 100644 src/app_modules/vote/detail/draft/index.tsx create mode 100644 src/app_modules/vote/detail/draft/layout.tsx create mode 100644 src/app_modules/vote/detail/kontribusi/index.tsx create mode 100644 src/app_modules/vote/detail/kontribusi/layout.tsx create mode 100644 src/app_modules/vote/detail/main/index.tsx create mode 100644 src/app_modules/vote/detail/main/layout.tsx create mode 100644 src/app_modules/vote/detail/publish/index.tsx create mode 100644 src/app_modules/vote/detail/publish/layout.tsx create mode 100644 src/app_modules/vote/detail/reject/index.tsx create mode 100644 src/app_modules/vote/detail/reject/layout.tsx create mode 100644 src/app_modules/vote/detail/review/index.tsx create mode 100644 src/app_modules/vote/detail/review/layout.tsx create mode 100644 src/app_modules/vote/detail/riwayat_saya/layout.tsx create mode 100644 src/app_modules/vote/detail/riwayat_saya/page.tsx create mode 100644 src/app_modules/vote/detail/semua_riwayat/layout.tsx create mode 100644 src/app_modules/vote/detail/semua_riwayat/page.tsx create mode 100644 src/app_modules/vote/edit/index.tsx create mode 100644 src/app_modules/vote/edit/layout.tsx create mode 100644 src/app_modules/vote/global_state/index.ts create mode 100644 src/app_modules/vote/index.tsx create mode 100644 src/app_modules/vote/main/beranda.tsx create mode 100644 src/app_modules/vote/main/kontribusi.tsx create mode 100644 src/app_modules/vote/main/layout.tsx create mode 100644 src/app_modules/vote/main/riwayat/index.tsx create mode 100644 src/app_modules/vote/main/riwayat/saya.tsx create mode 100644 src/app_modules/vote/main/riwayat/semua.tsx create mode 100644 src/app_modules/vote/main/status/draft.tsx create mode 100644 src/app_modules/vote/main/status/index.tsx create mode 100644 src/app_modules/vote/main/status/publish.tsx create mode 100644 src/app_modules/vote/main/status/reject.tsx create mode 100644 src/app_modules/vote/main/status/review.tsx create mode 100644 src/app_modules/vote/splash/index.tsx delete mode 100644 src/app_modules_admin/READ_ADMIN.md delete mode 100644 src/app_modules_admin/main/index.ts delete mode 100644 src/app_modules_admin/main/layout.tsx delete mode 100644 src/app_modules_admin/main/main/index.tsx diff --git a/public/aset/Hipmi Business Map.png b/public/aset/Hipmi Business Map.png new file mode 100644 index 0000000000000000000000000000000000000000..9e61fee7f6cefcfa5a19e7182949ad353d0b0daf GIT binary patch literal 43335 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 literal 0 HcmV?d00001 diff --git a/public/aset/Hipmi Job Vacancy Logo.png b/public/aset/Hipmi Job Vacancy Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..e42c374bf4e3d099d31af230d7ca45eb6b70af46 GIT binary patch literal 25319 zcmeFZcTiMY^Dev*6%`Qy34(ya5tS$+nE{NbNDw4QR8Vpd$!WlY3X%pz$w|o>B*!rT zBNB$3`jI3y#c|RLM%|kOtHsfFuOUAEykoylKlyt4BlPUeX=dfd zw?QX#&#*Ej+|z0JyZ6Ms#2{SC+PQ=|O1meP z(VvM~;KS@!8%S2`t%BSDFG}NHLvx+~A=Y~nhtHp$ZTV?=q!EHvX+1rVE=5WdnnFkD z5cINF^e<-2BsHK~Q$PwAg_qEjt+y&fEyW*SA*sq+nI6lpn5FO9Ya&M0IVf#r4;@s~1u`i<(F*iFs zIcqUzN7!imx^KJc$ftOLIKE#Sdgw58S{+LmGM$;}qkV~?DRM>IW*b67x{%fQwz0(U z@f3p-9bVfZo-!0=o}@3DzZJO8ouH>*zG(KP?&?&CB2{A2aUuk{1+MN7d#yrFamumz z-%|tjoSr$j6=;RewH&@F?m(L3-^aZ5+Y7(aiMw8GB+MF2)PG;8$)|?#tkU{$`$F?) z9P@(TH6m}+-tkCx1}N{H#&`8{y0R9#@5mLJLm{X1yWAjUGC;bQLwB_|{o+Jp0 zL~o;%g=nC*=(H&as-5RB%KF6qu;~~C-A;KeSagH#-8JrFTRhvXmNb#n-i|nHOKXyq*n&&-@zDUDJJB7{UAFUd z3v&wr8}26=-Z2DV?wMUaYkSuFY$iv=S+UrM8ArOKV}C!s+JB8J)-r}M#!*LKa7)mK z^}`?L&vKu2KO;ZS6mQ(xqJzwvACUGyJxV zf9Q5(m&;Ae`=RzN=NyYXiw_owvrcU^r<#fE-r7bCU`&&;f^4W~7vHBQ%GY5QawXHnf*+U?TX`dfG; zZy>K3A1>RQV4L);ez10!681LzPD0~@5UCJM)KHX9%aJIxC{kXGuA;7|?xt>k-u*tK zCE+FeK0P~4F1`4Z@pADkW43@7SZyr0S`B3|sYFVHGBDIQApN)D{g zsOK9;)bk_zkg-TQO46?UPRkyOjGpvdVs>Pk3KNI(}zgty|NERofKYv*dKz(bxsrto*zW8WYa3U%@v`T*1 zru>zgWuA?lmYq31zS6%kr}DK&Ao&h4n%RZruj9+_ryB+u5bvj)56#)dNhD0iJ&tlQ zFPItmTE#xQ(B6{duJAVDpm8I||FwPW>8FKwG{?@zxIr~#{i$lSNL6te{v(L|U2sY8Z zhPr-&?4M2ZUgl*Lkc;kC&f@gcO?!PdJ?)2v#vWAsSzfxgl(yuMM|y%Td{Ad|qqpPT zDnmXOF>Hp*)c(Pk%NH-3&G5F;wm)sOlFuZU4O`3ehS$DGrEYm8`Wd(A?&arJ)DH>_ z^`S@Iz1L3#aI?yf5kBE-%Y;1iZ0qj$ZaQ?W{5^`|G~=p9&mu=FRopcilThC2-gH}c z2un6Dj&>u3X!N(^_F7V5Jon^Y&cypW4#h9WxtF~(5Ipts#>|gP;~75QQ=0Q%+JBAw zY8#LBtJplYbk9?$OAhUtCz5KPg7{KLm=8@&0YU}&a&Pipp`qi_3sTFnoT0HDim1rIAoINWJuNi|@)Cd`|2Gh{13vPfhalIh5VZIdg5+W#i2Y?k^&_1QBt6PX_{Q}Mhl_7NkDew4E;6H>69A{QM@t z(M{o~Ia5!B37N!2B=nDmlP;-+zvopClXaf`#Pi|iY<%G@;ZkL+zSV1-Tv+n7d2-KH0ohT;%q>tiZf~;=IwG!hmLLIjq(WDzA+Z_@_?3~GawBp*sTDkp1 z55KNYUFMxlU@VkAa-q>YgrPrp-!`Aw)X>rO20fH@@B1N0&}%*My;HX@HFSyKslel9 z^Y|e}v*>Fzn?Z_--Oh}pSzuc~Dqq^Xo z&}rke%;@DoZO~-smG<4r& zH5+$i463WIy1#)RD}!&p0pC9U(sk!WMWfKvm?+|uPm@-N$eCTd!ueA>E4sz^3b$2J zw9uLJPid6p-P?8C8?Qu<2^)PdNxsPTeu_kOqr41kdw@Cwm0qKvhlaB0k~|c{<);34 z%x6DJS9xtQ=rP)hdlTS}Dnu4LEg zg}%p+q;wS;$mZeqL;h~lD=JjhUCPeQXnHMaU3`g0f*(GG-1N@&GtUty>jFIEd(#9@ z9m)!$bQBM*4Q`&-o)?W+l~2b&kj-r{gdAyBo@L4#lfdP!sPJ{;vZl77L#Z2uNZvDB zXk-^foPac603Gxc2PSc{*6_OOhWeV{TzHhCBaH4bb85?`Yuwq>J-F=-d|NhpWKSRO zGjE-a@#k}p*((}Au5Ug-(Lj%zebVV5D2K4o;=od9)$b-l?vYu>RsgA>EM`lv=EUvg zJJLlq+M zd=a!lU5~nLpiyW6jmr*=KsAcf$u|Ocni>lK#tix zYceg!N*Q5oSsn6*A72}aCp0Y%^Rh)|s*52`^t|O6t!|R&Pqb1JhVHeW)rUIXQRbuB zgY-1-XlJOQ2#ksqKncqHKxtO|qV<#emFtsCKnK<96Om#K>C$`o@Z}?-7Y_SNP3+y* zHtTidVP+Xie(ZH7OEpCFx?imfrS!knH~SNw;OIHOebWY^tS|0k)T>CRSshr5oD(O3 z04r6UQ)X@4jADqRrSz%q7{hd;myE%tO*kjKJ_0o}C@w8_@hjIjHCX?8fP$dbw;-my z595%O+J8kd2U59Bz4PWl{i7Z55D@wvo+?`VW#d@KO2Vs!wsaK;Qd9x^m1g3-Zft3K zgGO&`>t*frtu|PL$?zG{nloPSCtLO9b(t&INC4H#kQQrTQ}hW2lO0!!SCrVlPI(Pq zb=}VQLp5t>Mg#Sd8NsPx-dRee2J2za@a9yE`B<8bY_A5vLsKt+p>O)RZLywlUr_TC zLL7otd4Xa4wZ788I2A>gBn(#U?dLmfDn7Y)A6CdsAf?L+bz4WzEz?ezQ1LrX^O^7@Hdv?amXvm(KYn6Bz9 z#2h%IqpQ5BrrtupcntsFtHckfswl{(-JH5M#|%ASDFUoL=5D=_*Wn3g9zR_mP1nIF z*3p7DBGO&Es5cdPDjjw&W5`U51b0Ut`JFt2T})(+booWy1pgBf@lcH+bm! z)2``kFvx#q7C_3R!?$KUjDO^H7_#bzmuI$E8Vk>J^+lY-Uoah1w?E7+S;kbdy z_)K(gI=iWi1#;uj!Xv9M?TK=YOO9yv)TY`;UZ3KYI!yNc4=HPbZSBZ;cdp15|LqR7 z%Uttf|JbG#er;U>wxS-{=+lQlK5~$!mgbz5FqYHTs7;2HZBK*h52)k-t$<(WCBdpe z9^M0l0zX<{JHXGs7ytJv!T&Eg*F}A=H@d~jSci0#lwh{`!McrO`CqkF&{DL@_Y(o- zpxoUWv;F8{GV#&FL`8nZI7y+|rH(Hf_Z|=SSc4tz5H#VYs@HC}H^fL-s>4=tid(KB zcWV3!;%;t?oUcV_@+xvcJnNe*Q)iVnX1=RR+hwUsw%TQD^Vs>^Q_hsFV-Zd9gomNx zjt_(8?xI52_xJAB?r(V$`)YU_h6%o>SuUx)2TlhQsGZRmic$>TmXqO1NphJ#E$+G# z8iT0Wr;fjhZcqH`oEbhT9Z_C*D=;XQw=MXrgpwfQL0g-&Y2f@=SqRoXF&1Iz=0X^{ zSna;djHq^h|CT*Q$xEzHh|SdF$9ze{&*H9Ys!ef1r1z}5!aN~jwNDqEXoi4YrldSF z9}9y03lEp9ToM;TG|6LST>Qn*MwdAal>80ou2_A1#ysrvPQyFfLQa6uHuXIRFRG%B zbQA!xCf}+(L6!)I4>b~k$z5ru&|_`eFPi5#6hpT}GL)4v^a}&=Ukn33yxum~h4eRI zE`khxl%!%BXDSppq{nu#|G+OAD95S|Orvf}eSlvJ+b?z-pLu|y)r>wY?9W+^D-Sdq z04_S7y7l}3BNep?n1=egah{exNqz-BSp+U!lU8qR|K-WO?tJ3F?`Ty3xy}?J(Vxwe z6Qxl%J?Z1r$tzZsA84C8q9y`Y#_oeL0FiWnA=2*uUpUsI=lgp#RZ6Z;^^Mu-{fDLBoL+` zE0wLWXWitfLXr^TsIuT8Hf37mMhiU-B|V}CgEj7*A6up&Atb9=V0X0&?r4}fb$Y-$nSRV2>VlkV^y5_-Cg){mKBO< z0+)FM6DV^)*fW=&(oit5zZ_7JqC6&GI)ALp-nU^~Xp18}YK4RP}4cmP-ea0*fmsCHX8haG+SAaB5u2==Q~4*2`! zF)1a)quN7ISG=ORh28elcq4wW{RT9|OG9tfzqQ+Thlrndf}_6GM|Mm&ig)i%;_=s8 z0H_S*a}o9|jb1Jz4z5P2I#3KLGb`=4Q+a{w>o9$YV{XoWP+8)AdDXO}d+&iKaxklj&`Ad7bcqi1oM zkHws}H1<>hyJZ8=q;ie8{Z6a?hV5?CCu+Vu+hRN&o!?Pnc7 zxCOvaHK5(azO?3UT&?XsY-({#MgDG+r7aF30Bb3$C9Vd>1IVZ;afnTmwBk(}^svUq z!#d5%?jJ{rIe4#TgBAC@@jud2=Un(o4gqy28hMP?0WgqtoQ6KjmPILn`4_?OE3Acl zTpwL>aK-p;3iwM0Sdr`UP|ZG*b|&^RIDX2xF<_UC{76&qBIMwQD=5p&0OdfXIflF& zyNsHCK=BT0u~LW?U%Tf(SCB#PC@MVkeq<&%6e&6I)lt%bGZCb72m7wWs~*ed=Z&iZ zGCuwcWXwNsE}&q4XM|b_{$>ZW7@|TwV9*2IQP}9o0@EGbnSP}^12csM9t%juq)~TO zKrz9LS2zWEOkdg9Yqn8uuj?pOY6#MS|KMi-9H6=CX?7_nrOq2%2gpfN5@;>@?%r+~ zyofWKYq^e5JTxh=`K&xl7MC#bT~7p(fh&J1D_||d_qzj#JxV53!e9@&Y}3kxu)o`76^_Rzyo3sy<+&crVmuKja`Wi0;8fAkAM zIsmAz(h17Tf=UeSr95J+7}j8Y^k*w!j1~X7RyO zZF$506$4-m{QO%c_*V)4TEf3ovwus6|JF}|C;V3l|0?1CzIKA1#Dl60C=vM!G6M+M z{pD65jQ1c-z|m{Ed$|z|08a+Ucu;IvR3{Y}!xZd)z}1s9J&kClL(p=P?~T`92k@-( zEnARiqCA}CrDVy1WNGsj49b4eZ-w6RZi7=a|F3K&DV6|}<=lm@;ONCTT7;|a9e_Ur zi{?B3MV{_a`p8Rp0WRY+VsHpzd$v*zUa@j&Q!zx0|?t$;@z(gYC2%9e_-z{p;M&K z*mwKjDluJBH#BK0fy#7d|^IPv*F!R9#D^e4y?J&vdzBBaN5BXzk@iI1?L3S~02}g)Xsj^*3GrKC#SchQwAUR|U zIZ0K?iF_0EY4Q;AZpfbT*KNgKR0k7XPt$=B_O)AAH$Z=6Rt# zyxp4GfxeEzK!rUI1A(=)UO^mI&Tj*R*v9tG{sDCjicDG6fWc_8bx-7`7wJfabG%8A z;~B$T7sU=G0?VYy61Y+p=5eG)5>DWnK;C9HW6v0VkWyU+0KWt-k1QHnR_&hG?1vLr zF8U2T8wOu;3$~7&#R@v4O6{S=Bngn@y_i)gF)MTA<}3{Lt^u<_BIS03JLY(9G@Qk^ z$B+e-a?G7u{{?U2kxY;%@-%Ulzh5U+eA6H&?OD|>vFDmeZUv_2P~t%|I`G4aQ{NHg!N2@g;gZOi7cB1n*ul+J30#~!uLx`#c*1-7|LTthPOCFi+88SDCw zY`^M@NaW%Syr9K_j%32wKzx}RkY5XMYjN{%6$qxWGSrhF!Q5K73m`=bC@ROtIm9swLlM+P8CbymN#U@?y@ zjm|P6By)h>Dc|HOtT8x;rivDC@7NyjgJ7vS^B=jWZ0OxzVd5aehNWYMsn)3oL`C?X z`!HNtvNKrLxhm;Wu zB@KMVzx>58?&TxrrM9~k(=jwzs({rKiUX7gD27Qm&HduXwFf2@>%mn~A>ld?yUku# zvzD;FaC@n3Gna*t?2UVnE2x58o^PI`ax*IJnJMhFsuEYb#hNNB#zFv{5zRvnkv};Y z%VVyoiZYvS{}e3ll*?_>>obt8ubq9+3CFEeno=$>FJED}-=!q)7e=*|MZ<#*1yG%1 zDMas?)DpLLiIbnKVcr^)`|vU1>!~r@oq4O?5>RW+wp=Sa@T|cgfZeSqF#c*uDk$E- z(PKV_Yz4z~xX{)UzNqCoE1zedUzoj3XBR_=D%bo6G7KG*tU(lg@NekY9lb?3qUE6*>8&;TyvZol3(cHcM@42uk7+<+Fg-`K}Nn>#SQ#*`ib1-)7J= z7ThT;)5`00-`4kT`)nSjqnDMN)ys@A_EEvtZuXnC_38>E9>f!|Ojtch6B=bVFod#@ z2f0xiH_1L86ogi}-QctC8Z?UDdOKhfDb{#*$?t-$LA}Nx4ZZx%v?@+)j+dQV-VF@m zC1Hs?qmuCQJ_t=II&d@ck=7){B~dgXwvtkB$;W4=jGi$gfLc?&)DmxqNVVqRd>amsH z#a~t(pmCOsP(QxWa&0*EIH8u8F4^l2Ja;cV_j`EmcP6B#c_q6}#r;1nHAG@V1rb`g zp38O3PCIY=Kk@LFePK6Yaa4{Ru-Go|gj6ns)2X7gwCNJB2@BM&gX*f52WgKHm!d5SgN`#7 zL1TESc(;YmnPFZh^#qspq8LeA-32EbT>kxTT-thpAmZ)`OUh(5hmw;GtSh+VASFz0 zjS@fAF@+5~D`64ElP;iMzq3!C3z}0!J?fFb)}6yp7YYD&QFelL#N{^2z}R>Lt&r=$ z-^X;xh*`q29Lq3j*_OnOmT7EShE9Xn50!e(jqd25RNO|1d&50Fk4M3-HnB>VVkIIR zs;6F8ZWE(n#B&A2VaRo2I+uVNrxL5X%zGMs+$s#09!G*^oczVT_mQ}WNJICjt@n`v z6^leDMHbefoYN|y5QW}fF77gaJnF5Tfg!Z>=z4|fZtjLqna#(x;iim;cc8yQQ)P?O z$E0?D_6>aJ*?y%nD9XBNI>w3>izX9fR&esL6xjz-Jf}2dJCUizn$f$@xRJPv;=WCx zK%kzy!ICKst_s@kaD5G0Y%SWQvQ|(wzrZ5~h}H5$8+%(Wh}$gop%u^gc}~BDRV4=( z&>>A*dB;kx-u?sy`@0V*FKt47mJ`WOZR$(@K84s`8=&MaHBt~Y(LCunr{t#M2E3H1 z`qd;{x=MC6qkvlYEkn;KH^@o|tT<)G*n7-L(%5h9Q#P^h4GA}1SkELDiUi2T<+;&% zhqJh?ZdD7}#LL#q$my4HG1eWeWB1M=M#0{KG8@{08yV-;^7@n`PtuTXP<2!TEjUox zH1kc+Ikq^M>YZ0P(p9{z*B`=5D7$6k)F)2dr)6*Aw&Xb%P;O8-V1%xo$cWjP{A7kH z{JieqE6n4uu>cm|n-z^|dc;1W1}gz0Qs^#^7bu^tPtW+FLXwlc;qq{b8f-l$<_C(+6Rwdl#J7qe zJrsRx?T&gV&$?F|O8d`+OGccLnGZz}cT0R~opzJWw(vVALm*9iSj-Fbt>gUda$73- zukx6%bv=TZE0YVwEV!@Fq@#IKpR6D!h_IW5t=ay-@H_gY$YypmV}B%-+Lcsl_1Dcm zxeUlkHwl>!H$AZc^Mu{f_~s-JT?d6KNK-TL6gMuSuA*?;iN`YoiTxfN1YC#PIq$`E zd$YpAkawf!U{Md&0sEvA!>cW(L3ic|2HoZ(@@u^@;?5Ros7FIHBm@g+c0&R4xISAZ zjayx}8#x8F!H(%nU#fQnd8NNUcR}0&o5bR%;epP;{GRAwp`M9UOwjTQt%`%~VP~Vo zY_|0YK=}Srpe_vEd-}^&uW(y@EN<1L4NOr|h-ROoZZ~zAxAyunBAD36H{rtKL9YRv z6TDTFRBCEqRLt8Jzb3Qxcl=aiXJHi2lmxIjp1?#aaHL}NV2vKCV>eBk#eg=&={R2g zfWeZv1~K*ezkq1QUZ1Gd8;irZW^qTL+^@BW55`Hj$7V~>Pi$yH_$q^|RG+xZT zN$D zhHyj2AsdX3FJ;(i^=yCn5b(WYAhMSJHbGaFZXDBOH#rNNZSm^OGIaMd-M|DNPrK^L z>f+xw>C68Rk=}hpu=nZh=PvE_a_U^B=IvBN5s4sAhM0l-cm!s|g$O@hH!tmxYZ1|n zbj8%JKT9A6F4=tBnnP?1NH}e+s^r$Md|h`BGsUC5d;5?0mxIn#=(1f?Ypm0DBC3}n zqbgkfvJKU#mC3sq5SQ;uNnQ!IO!CgQSW>y&8Y31fXYbDf3hju3UD4ZzN!KJ#ajpgG z%J#|GmWD|bDHiuvRD_1<8CDC}q9v^jPS&l)%)8r*1tq~G^GX*Yr1SOl-ck5`EGeO@@toB8ky-`a+`-pq35{t7}1$`Y-=Sa>tyD8gmSKT zS||p9&l9ht0S{7lxRUTOg!N>D>|wmvmE<+m|zY zn9H*}fv5;pPn0WP6wkGvvzH37@6T-$*dVCI@_^iYMgc);w!GWetT%2t^B#7L&VZDH zdcJ?k?#9)lm6+&wNW1zD@wagO(PO=f62c>?w)j%l<*f)CkwiJyP?qq48jGc5x6uIN zJPUvPW&%oa=W@8r0&b|)IVfzHW@26LGY#Y!V`Y>Q>eoo91q=yMCtUJXx;Xt$M!N~PW{#aTr&03i!>>5AB*P*Jel9ww5+n9(#*sF4Y2?t z%<_hlo&_d@QR~2ECVCMWzXkD}oc_PpF=thL#p*o=z^lwu%UgxPBGSf6Q7d&Gjmh$R zKW)tcbkkAVe=To!2Kd0YIfcWIC6wZH@B>f>2Vl{lp4eq{m$ciMTQ`g_rD&x?N71_R zza>0}TFJ{#ehKckcJrHtUWgty-ZU2*s8c;xM_th|t&mkD7wtSc1?7My3n+`9-i^R) zNqL0^G2DLKv*-f1oJ-L7xvf3$w-mZ52|?*3?<(DG-7J0rXio9W{cHgYVlTotmBbv< z2b@n99UOMJx7Q2l8rNEcb-Y633_!GUTGXg09NY=qU%|yl+3!#(>s$`Ih9hg(=v-ti zIKp!EHB-_#^`cM@te_Niid%;iF<(Sl6tr0m%+(Ax9{A5Ps`ySDxw|a6Zg{eW;CGrX zS!;Xkr{@b8K_-Ai%IbrxM*l3mu`S2;&w29Cf&c)Wbc(5NdsC~)pGI$GOK#4OiL{d& z$BGA08U@WebO}f`yE;#*emV9d6BBV)X+K@SJzlsDobgiDcAyTcsrs5h1E;kKUX@Js z%_@S{FQGJk!WB%k~6TOtR+__#M_H-^tJ9-gI}}Jq|>TYdF8(T4GKiJ+ukG z$YS*iS=+Yb^y7HoZIXkrDynNy4zza$Fpfxgx#hOaxU-M$V=H%mV5a6H#j=}sEYFpy z3XggdE}_^NKU;^swP5PmH*y(mOdYV= zE1O%WTG2hG?0t}v(X6-iUwF5I_8oCrh|qT~V^u{(wnz6r;SZ;@XMk+vG1eh*ik%Mb zVuY;VW`6(adg-T$9{bfSxCmc#cLAx!rWH%tRo__Yt=r&W9jxSrX2XE5jp(V6HsI%} zBF9udpJyswe9#ibbE&S8&G>S=0;L9w90B~o(=k^;1Snu7mx28@Cm2_RishHZ`4+@k zXWC1J*%zXv9k%BHFTBlriD$pga|jF$hc_)4e-l#^ffqaKz)=TyiwzljT}(LlR2sh@ zM+M&N;ld+Dc*A+)H%v1@#?@f~`^C5T+R4S@whYr?wVgti+`P)rlKh~D>7ulA3 zC87*%iuE%{UyB>Q(l;`L*OFAls`Q1?c&*}&zt^LADvY1Je4XUf^k_W9o^j8&Q?~wF z*GFQVqvI2oqyHRNO%lxKY#cjNwCT@ahEgMhJtI+b2To?5+YFfR%eO6_0{H8oSrgKv zhyB3?CF%_qy#B173CI|gH{tNylg}D$D5oy}6r-zD0JbBg8f-AMID~Q=m+CWoM$|>j zTGOrc%t|>VOPO1M;#Ug%QWfNyuR?MV-^k)E9U{WFk@rOnD~5eHpeV) z)8Ut+(AziULfGrz%zipI$)}Af6yVN+3;fk=WqZNMl55f*Y5^-k2h#tg*rsx zlOzNDlWjS2uAO_Tl9m(-I=FlAU?WZ7jV$FFA6?)oUf^u$dA=;cI3gRhT=HD4@2LM4 zjG|ITL6yrnVJC!F*LQSNS6`tXZ96;+OlRl>*bY#usw>k&rMi#T=GejpWdkRODWkG> zXya7(!WEq-ODcxQW9l$EuZD7Zi zn7^rK-^qE4G=3q<)FN9@?J#s5yr2c87%##()ywIzbqd8b%1{_tIb5!ja162v0%iq@ zQUJs>IMUfmXkZb`Sp*f-%4m)P6LeMjVBVp9r2+Ast(D%qIs9Ijt9eOS{o~a4pg;D2 z*n=)x|2X2+6stl#zs38?DH2(4jyXka2_OlVJMI1n5#xYiJB-1v91J!V6~Bp!mRdUK z%B2Bs3V}oS|NZ@j^NI;_sqm{D=YayDAjXV`VxY2m9rly|V;DK$Q!UjOE`ZOVlnbyY z{vQ|NZT~;<9f|{GTGE5K3q5|-w(4!x|ASrUMSgDJ$zbDhuB#f@x~VZ0 z907$29XE1wFG-e98Glubk(Lf$E+4Q;LYKPfTcSL@#zrijn5Uf-FsgUEP!laOd0^<-gcqngURY+|fqv?nc|+e_JT|0b&$~sc~c)J~>h(NU*o96JYRdGOR|XE6Iy& z%YTU?Xqy*$IxBWFZ2u~XH}81=Yj$VAA$}u7s9i4O&JwM%WYwF~5GS$2oZoDMN2O7h zE?HKCD9DFP`d|*-lH4?G;F^;0w6i0QI14Y09IM2x^W8P_Yi8 zeaN<8ZM;OCGj8e&=I-MeeMdEqiXR@VOvMDAVJXji`gfyRMB=aZs^Z1M-po-a0zWbT z20A?dl%jLe*Lw|^!sUVhv0$-f4=W=HN)nsj*aNgcV4|}*<=H?R2+1ZrJH7_qZ92HG z{9LCT!4_UGIE%z8a7*K+l>0PmgM-NEUw&7ywzSG3z;kx^!^(2HM7>ZiH~$7Ef^+h{ zVGbkOO`+6=n8A5Uey&OX)dYo$NzbNW6ZVU`tm8?)#k!})MHMlq-5%O-l z51H(>HP4gDz|%8QmlK_^8n zL092dEbi2Gnm6f;Xm_LsK+k7H-#}>*6_3hJ8F#SrI`*k+DD2PbFF*PxVg8;DUpJ*-@1W%Qr$>e=Mv^3ZIJei^IQYoo z6S&N=iRjL+^37@>iw>9F{>bJ##@`wPM2b17)KLAzba@xOj00Oj#SQa4+#4c>$Atcx zRvm*1M}i6QC-x6S5ALa zTK?fD54AYw%(hXf1$OpC7pusxYN}NHbB|;mFT2}5uA0C61W=>SPtW<0QGz@rUCGfl z)L1%y8|UK}APUBiWz2pQgJEnC@=4;@1klZxm~tO)BeVs33V5D6(!x+D}y|D zYwfGHkHX`bSE%i@IoAeXUXQzu`OFv^%J1iWqYV`~<2wW(G*{iHqAujCF!17_b)g9K z8-8(_Y9)NWY`XR1=O{wARfA2w*nYCU?Ix??vOdDw#qs*(QD7!*2J7GzGKW>+l=?dF zMj)D9m)z$qPtFdm1|`?VEA%0u z`@=5b5s?sa>zz^0gz@n}6A$|UY|Z>{M4V5iI&>K%g#Ki*UDAVi9n$is(AMyhp@>}5 zgBFtYb=*nx`WH6tR9O?>z2&34xh@%)S{vcZ;Emq6qi7#&o2TB$;Dq_DQv>PEyZkyQ zqLcAobgZ{#+qsFvx%@6}QMwJog2v>EBt$iK9eMYnNu;MM@OgcBhor%=Ozc?n z14B3~D^*ZC={HwrK}Il)$vVMDx`I20I>!y=z%QHzd8~G33MnFIAB`9OdDmHECw=}X z82Se$aFp^i1l4&4IICO^eErT0Qb)-G%QHIFlk6})F_qe+5o$<4R^GRT-8-w8^N7nY zF<^QR;=jX7m0Cfo-+r7_C+qC@wHQ0hw2SYs;rirflHH$n5%we_;2|AT>8ah)nOUyK zwZjYGu=>tw{REb4NYoncKFTP#^@P@c7GxOb`R;~uY7>bX^`&~hc*aL6e_&S5%9dM1 zGpU242s=nPFzIg_21=8iYwWuU@3`O2dk#+PBO>vErH=2=efF`A33J$82oUZ(UbxnP zO>TsBndHF&I?Id&gC>hHgQ#OR(guWe$ zboB{9!KqtL(wCxrcD+I}nOqUaTLiDj1)zXnYOLQc-bT3^UOi%KuEq*pR|v)#jU`2} z#GMk>obtOl#rL+}11(|g8S^i)8K(VE6^i$6dSr_ni%Xrh?TQHrAK?csc`f!e@S0u`qo{75GL-Z=YH)j|Bp1ZK@zGUpo&1u*tzqkus`^vofbuxnZ`*!W zC4bw~HvD7ZeRDRW6qN*GZt`_6X{>MfzHe`M?51xpnfz+{K{WG<9QkW-^eGdC=}V&A zhYw!NOJSlH?MTg8dO_(L0PZSA#`;yR(OOy8ny(;|SPz1-$9yr9v#(u4iI`64iLl0E zjmL7`m%mPyRQ8!Te?Dqi*mqW?cfVFrXSRQu1y)+B`+6;SjKig&BhD{MwN4|sZy@~* zL*s9A(m4*Ue6(AB(;@#jU?2V*l1Q_2ZtY>k)8A=r+*B$whTT#2LW+v`Chxf&tQd!z zY5;c7uV!DZKHe~0B8*c$#1^$I?YLUpH%7{i8~S7W4VH53y%-5e`fc#xh1EsZ{((+qF?G}zr(8fM{sEDHridovbW~)uY5xbBv%0IZ&=Rc)hAlQ zC?yUVu3D?%T+-r3%Q?!0?}oS75Ksfkw;N;Drc1>1Huc4*HEROhx%mpD)0)k_w~jU@ zWCltuC~25F`4}OdYc{H);DL^cP31GTAe%-8K@m5^!0gVR0PM8oc zhirec{8s5RCsNUn@8I5aUgEoz%jEc$m2ldvG4UvUyALqBWF;h3j(&f4>(^YOdt)Ml zq8osrQ}{`dn%c!k`6~_}Brxnhgij0KFWYNkr$!0#OiZjwT!!2}vkHaD%f2?hfq#8} z0N&|L0pQsH-sseTH%2$%1eDVPzHi|))83A#DUoPna!3+C`wsgT?C}N0?-ZuPC`pC7 zAFb`Rmd4xqG9BpfdQ2O>Wzb_$3CTl3gYlbOvh{<0eUu zLyvg-lvulW=0-J%GVIO;vDN^D zErX@?zB5mN$L}psAyv+&-4a5E&+255veU1PNHReNpq!La(7F`e48nlkh{han8-_l5 zB?r*zvOJ$zjfj*@r})rUUPAqyMhr=Ihs2;5Ma1W7JU(#?ghv!OU;_YKkZbDz6ugT~ zY1xP?y$yT*pW}OZxO#{6YKM2E<1qPSMGK=nx|52j_nj6OK8Wf1)OHX23(Q8xWeNT!eNbt8n*coVTzptXH{T76pVFT zm|F%Ij|=vHIPZjIN$d9@j__%J)5kAC6EMSJ4WrAW+~ON()71i>r_U9Nr@lCW&`eDh^Ms4B>r@}@0Mj^r zJ`f>HQ{7Jv+XucT_6H_8thW0wC69bw?v#PE$fKqP<^>h$e&9GcQGaPP!eAmzwX|Jf zaaTlccd-|IF%c8Cz9%i&cXFnf*t%ZW;3!&CgTsQg<#r;z<-CZ0&2@MDF5mbZgY462 zfpMCGuGqV~%cW03_T5)%Fy#!$6%f#*07`5yQsQUgbyP;S>}lvyLa%SGZ@~$88ogu8 zk^wlA7QiX}v6R|r-vL1uc$U+8jImw#^9J{ufd!HE|5xJO+O|SRF%7to4TIRQO+6~X zukcKPVrNeY7pUku*sYD4$FXX|s}`>ApfE8x^_yd*m#Wygt5hgfC`YLsXYRhi)Mi`V zU%)4pEwV3snKRWP3P)=!4cF)?IPG-^903LK`ZG&-q)`A0?MZqfQt#pn@?c30X&7`T zNKU65O&DVWlBP<~ z?Z5@}t6cv3M_YC7AONitf^b=oUcNoRvSmBb zqq9agtH#yiCAaapAY1O5FyD3TM+@$PG=K#+_=`8+!)@e}x3r`s?HWkx>_NN$iYfl3 z%R4@EZP!+dA#jD1H~?arj$vWL?qP`H2aM;6y~N93FhQd8Bo~fblLTa6-dtX(PjcnL zS5w_u+9#@(JG*yO(nIxN6NOKW;a=qdK#{+JG|)Eh2Rua%hYSgP*?>TPcTCuBp|-f) z;}ds5C>TqsL|W+tv}7)q-$%o_2>6~JLbruUq>T)beOGsx@FA$rHyIFOfNs2(4Z71{ z*ikNX9zHD&HBVO+d@tZZ4+)$};0Wy8y?G_YoX()6fx1+{YfyslpY7cr-b7^<$|%Af zT}`njdnk@MBhI;^>A{ERU_)}YcmSD#2q*8CGboOIk_d+ns3n8!W%vwPB+h8xhm)Gc z3jsJl4{j4|`=WqotuKKPy33oC=WTt!ZTMrqy_biqeVHTb>y|TE2{wHZ+J4o(_=^4t zgLCFm27b$x-UCB0OVBXR%R4wfJLfF%Kd7F|jqE)dTeDC82a6PMRsbN}U$6l+lBx|X zP4_%VB5?@Qi^KNCk8Zz}*EhL}j|%pF=4%F0ag0P%R?;|?_Bf}Zy(5XH)`@o7 z9WCvlp8I`#pXc}d3D0v~->%E0tMmE1=RIHd>po94)s?qz<=Tp2*mhNwi`p2*n2G)| zZHB*44`esOe~eb=uAIZLtYDV4Ynw1^tE%;d3z|;a%IEj1Dqc7xe&*CEk&~k07^d=+ zsN-t*dU20j@8V5X{qsMjvqJCO#|{dRn7-~birx7NyY^`3ZiOnpCtLN|Id(;==zV_B zwpE4r3Q$@}w|ffpl2dQRPGQ3dPt}z5Ck7=_@{AF(ie9qKp;kbOfWklgjjj(oL94kl_nf zg{v4L?ELXMY`-);c7czro?-uGhL{u0<$Wm@j(!CybXY}gNPXy~W(oF!kndcsf2R9> z9r*R>PS*KroI*QqF%KS$42=+AQyF2n+^`M9xR#qfu1m|m7#SYyAHFqmXKJo0cHMT` z;h@}sncnr1=k$!&PW8sA4vV273WH-cT_(QVHpK+%(8q4~E}KboGRGKi{qC{+%w2j- zfiLR4=2sbBo~-=XiB&jNh9-sv%o-3?a=BUi*d{CoGBy-T`w z&`2%gd2##25rOq;Ki|JWLQTIUvrLb31k4ydEzmr8rP{qv`{l(0-$H)v9`ijp!~ga# z^J~}b80oP_g?iqW+}b-8K9h9x&vqC#yI=}Fvm(#ASYBc~tt3ynFJjp1^5tL!VLGfn zG=2cXN=EmZCcojl{Dld_F2>wHmU(W=wvX(jiXD+3c}prd>91|RsIcu&h0M!T9b#K(Cy(N#C8P9!XV!L(# z_hi@gpdSYtm^j0N7!O`kk$gpn-#_+*UF%@g*L(5wDd%lonyCo<5xK{HCeT!2zv9)WhFnLg_gD@YO6dnnS@Ig5cH!Wzh`Kh#bcp^Lf$cYw`JiikcUnhYK0vhZKlEk( z3)UAJuU5ZR4(7Ats-FD1%p7}2JO0gXHL08OLyQU0C(nn)q-xctM71)dKEXvBtJ=l5 zXo~6hr?5%l!w=U-?72`IFA~@GJ>1&Ldhxc{m~#BX@mFq|M+3xe)m$Wy3pIF%C#7!-sVPADmw4dY-vwFw+&Oy)c*upU{j+ZsNLvSJb zAwD4^sk(Yjdh%`VsVur_daP;Y`re63dfA!-Da@^V(%MpZ^@>wYr8j81Y6ojJYFWgU zS^RylV!8dpV?U*s$0~8Umib@y1s>S*<>bv7!}FAT`V7?Lw(qW7H~Fyq`?AZXRc;qC z&&xU&oKkO*ZoRxk9KKsmx8qAz-}ITEk!lSG8n!ohiZF=Ci)2x3$hXKofv&s=n>NUO-Ns1x5fF4tm7bsuA%ubJO5*4?B$Z#Ne= z&pAFtnQG!ceL|Ay)Qf$0#HB5#>t0xn+PgTqjBP-0ZTIxpv+9WM};6_^QD&q53zr;kSyKa$210>b@TDBK;tJ`yF(q zEz&mXTG`K%&b2_l1jWcIwP&ZERln_c>s7ny?UlESq<8vq`tJJk`t2lDiYfIt)sA9t zN0ZwiVp{|*qBbv?96|o<5@FZN{);_Ws99)U$G$`S_uB8Rzr%lTo;b5`ZQ<~O-9jU8 z9nWrF%30^LUiX~wbuM=tOQ`Yvl9ef+Q!2*{thlY-I}vB4I1?|usNEgv63VG#mlTj> zAMH^aGQ>4m)STNg9~V&^(MA4g*V0q_4Er^D0hG_U1~%7=zpwIr?aiX#cXrvV*;{ zWdc4FpD>>-Yf-CbS8D$TFO~PZ|JgI6zUeC6N4g=p()(QZvl(m|_!+|(6Shcg3fxq@ zS!|me$N6o{+l~0|y>_VJ{KLI$DbZzhJiLjchKa~w%)N4=?#N|6%C4ZtjZD2eeH;>( zFOSvbF+J&1zVoDj-+Esd=dw4u(6N)LqT^aQI?i{U7mrg&gGQ@Xr9m^nDbEYfcG~3K zbFm`X+|j;c`8%S3P>@=1-_3tXaVB)PGut8NiKl~~e|(mGI^aYE{x+XPYQkO^S{PX@)+=2(u*Q{3mFF7s0?B|gV zN_n@d=j@J$yc}nHrr!K6$rW}puq{>ep0{tFe9#@tb)CDYeAuVEK-pEJDk|7B!E?)k z;uO`!+2KxCMtS)MW;^XufqW`B$Ds&`nCY9MBwn-%#0A zS>GGxn?KJ)RdE+?#+BnqB5`&xvhPc$MxVzKdChs1%knpTro;y<@zqkn22nA@qp~y0 zgAZO0B;81gBC5;FwuW`NFJ4{?vo+H)E48}N7$wi?Jb5|aV)5H-&q%P@bcy5K!Nu#H zhx0FyWz%JqeH{Pxt7MosP;V~QP8i6fJI`IAo^6_H@m;a0Xme^`Y8N$&b}ya!@|!!~ z{zx}Z!QrC$C6|Q>PS>rIm%Ge7g55IK$~yjzZ&_g-_sv<)x>;e@w{*4QYGb7l>(mZr z|ETph8!i6*&B}GkZ30RHfx$$6e(vpDrGIWTyzWo>ki^zlHYg_^-`nZ z+K*|LFz1B_omWPGH}%b)%+z5?y@t9YvhJb@2P^RqTcFK{;;EK3hSD)O)Hkw zN#8XVt`geYK(iK0!J-I#=Q2H#uj9u$uLcrX?(ooIwDoh9B^Jmw^%gTr943CZs7B}{^ zTZy!XOG#W3y{K|;=eK4150l#uG@#^6$5x zF9e8|(T}oa1wHK-LY(;3f5TKX?S(iS{q)`5X87+nN6G&V_usRl$-;jH<-c0-|DZ+5 zaioG-CddBLzRCBs?S7Y+UDwO>3D1+c!U86%ADnVe3oE;Cs>11NCO?SX&9NsWIX>rd zRYJnCW1@PuZ-4b&E4>~kz`?gCG5Of8fM-v&Z-g)%uBtvNB&XE&>X%;rtq)xBiOJU{ z#%(muDt>!4#MQQPLAK*fo+Q*-795nqSPyB#A+=1y@KdCT=9t<)yrkdYv= z`^gu<*6$pw5k4mA`qSe|#9~BQSnlOcmnjK%p3D!rmjZM~^aGvOW1_~pv;2%DFXyTw zzp?Wwdh3yzS}l6Z`;_;4AEUB!wt2rlsGr=mi!X7#yJPf?`Gh3N*FY-8pasVa?}SabIy>p)Xzg7HnMVo`esw-8R;# zns4frsxFsK#v=rZAn+Mn=8l(6$qE@h3$M-B2bCwfihFU@xsT^2;<+EQe(x*eCF{@z zJpzNC(APIlUn~nt+hVb*Z9Qg0ITLkvWripo|q8**ab%;jfBl54urSosR)wk=gCeq6n4>Y&T4cc)U zTcItfAiO#P8)m zys!4+6??|h;I0Y*KNv*e@U;qhf@KaEg^{lH$YJu2+r$TI3&RZUqcsv5nGI+n(_q+s z(8qx7XPuiynT?C_`S`8RyWG}=!W|oLQue_Ugfs}5Dzw7od=nlAdMNo-9i|AKa9Q}) zEj2b1!Lf_)7Hug7yJ0CjeyoY>vBK45>93kkQrV?HGn<)EE355wC&u;u9dQBrBK%dngNZ{qf9Je-T+>9K{|JrpPTVi1=C)T?8S>_4O5*kY8_YHCGF-d}tv2)16t$(ho zvc-QZ%`mj8IIM4fxg{)L&XS1KolyitcuDM1yFL8v#HosMpU84GfiER@{(Xw{b?IT( z+IgaPXEyGg!BrwX=gQS_F^}n7F|q`_Pl!SCQ9irug`0m|ohu+)i`yi6YGJ5xekNy` zc54cn=%jnQXFpZ1;H#9V+uSNbEG^n=0j*=9WTH5*x?PrP&S#(4Oa-W;0TJfMgB)({pEZg+PrivfQ`Wq11? zKjqt28@+a$whL)K^hELex2G$1l{;VoKSVT2G7j73{gZGMoL6KgHkhS{%0<}|>4MQ% zA*?0vD{PP!&TD`%kDs0LXu>hPI7IGxm*`tM7luc;c%LDtql|Uyz|`z!Y3Z6c2k*F> z)I1}a>I8uat8kKwI%UD{eYz3Hu*7K{vIXOojIQpo2Q_rGpMtc5I_ElJ*GtaeiP5d|SQ8ce*TO!fp)-PRn+acu5 z+p%Hg-dx(D@Eq>KVc4MZZRzz|n+5RcT819;6Bi9+f+yraF@q5E!I;**X5$ zv19CexKhDMPsqEefGKvj zjY^#_{(`H-pTBT{os%~ql{ri8$uoVgJ2|Oes*jx!SC>jVd@R@F6~q`vr4FlZw@Eq* z>$@wiMfnN$f~<9cxwTQD@s3h66W57s^}8e=Gvm}t)Gu7k`EedOwp^KFOW?S3oThyK zmN*823pSS*F(jMq`$@N))zuf6Wk5~MUNN!iJ37d7OfybL`Phi&eSCnR-=jxIkE90J z91^63Ho8fVjiu7bD=9*$W~Hg%|jtE%n6zMZ(ryG1$n@%;>* zHVTa{<3D2Wt5&W@%7_@|s=hAU(35YlNbvqyc!XD7uhizjDGhIZIBANI^!aUu4f?`| zRdZ7hr>d5Q+jJKMdEoD)@7ZoEd|1eQCM)s>Jy!7)ZPpkz8y@WwkvG*(wtvMAam22q z`L;6*MbuU~Ub54AWeFJy4KAoABxN31Fi@T4JU&3z=+R30l&CJT8gW{}G zJGNYVQ-g_!b`-wo!j0m&AV>iH3-z3sjmCFha4@oZ_w3oz=9?E*$A(!pr@~EBBg^#+ zO=BHyiL_nf-$(|>YclfgSzu6W-cv7==O=%dlDXQovR86R z*-+>?1d5Wbr)!$J=YoTQvBz6{KnjWvzOrmdQM_QqYT!GZw(r^ecUueV<&_DFP~sO; zDP7iHnJyfIGJ&p^n0oP1nnu!|@#dnJ9PP>RLTa5vq*7>oy zO%$OceEZIrE}EWc#WDClrK^oV*JsWfPF*`E+m>f-rl|ik6QaTjDRhU;#TJcCLmM7# zxVYx+Pd%d3yOcmnx@L&F`m@m70|0Js$HPA1RO8LH$5v_mG?HzvW4hDujNV2lk z$J5!0^0YJd%QLfJ1U4jn3Fe{C+tzwd8CmJ3`rFGGESfnb;*}D96uOp+^3A>)K0Z%5 zJT)cnRjL#@ocRArOZ$_(HuYvFme=j(%$kEZEjr8_5kpVm% zQ|=B7^NoAhYKkGpdaCWPFY{4gI50S$gL!E(C0i=${F zg|&4(vKT+~qkVq%QyWDUoZcpNSXW3LL!ph#(w-p>cB3T5E?ClNc9N3N8Sw^ORo95T zXltRXi~~_iNR+!nV@k%2h~KJqBfp2YD+s}I06c*5?MjtcZ{w4 zZx!2sUbMQ1B>t1xbA$4;Rtl_Fd?sD|{E9XzI|lb%dgFZp907q}#3)GxKoqYMDlxZMzGc$=XiWT-1f6sX+3y=jR)cx7;?$&5~+waWFW4CkL;lS>W|!#$)u06Ip^j z5i&)KwVbaw28F{NFQXDrnA=cUJ({vuHna&`awEhOeOt3bNi7t!Rgwh#@NANU*27kI za3S}4rL4wte2D0;#f8EoHf-;YGC>_zx!IQ;k?u)Rt9_p8H|Q{#hjc6i;WcUB5d8Uy z=jCHE+ed#kfRFTEXce*P+24i}*ndmJD9x_e{rS%6RN1gC&JcLC^>;OS%#kw+1z4~? z5AePZq8dk9B5zV*$+5oql%mD)Ym|NGgpZv(&&FT)5ypU|XvO-zr@sm2Zv}ddBDis% zCT|o!QO33#RX!!|<#;LZ~PGy}D&MZRAN-5%p*Ao2-o(Jm_Neb2=6UP2uCBP0hKTB#E`j zu}-l(bw}brab7b=rFv$=^x4yLax4|{H8r*KgT=k61MZ8Xl_|4m@zO`o>>Uo=%{dUW z;vZX>c__)x|NdTws|?{Q8Z-5K{MgWHsqJ?H6|Pab3tW(y%$6x zmnuDPYh*D%@%(f?*m_2C2zQIFR)2QGbVP*c-rK~!eSzb;1{?Nva0R!Vj32{-NfH=i z3J15#=%6iM)98qx5qde4_VRq^f}!Bj738jqEuE;_GzuqW7EOoCKoBPyzUF~p8AOq| zN6=E}p2E=?FO1*`Hh{@E?etWR`g8<@26`b+9O1ovj;3eZ()7SHifw&%DaUo=90aza znOBEy%@@wml}e9oLGk-Km~%o5EpUC%8|i(|mCD%o6as)SK^L?EsR&miLCo=K^M`wZ zUcY709pB`y%LXh$0gM=7e~9-9jj^yTu(Mc`h$A*_$wBzXg4=($_251_ocit9D3FUq z_Jc^ZE`GQhzR`IEO^LRd1kspUV@+1W^t1b=ox+lmpK+D1S6m&)T;G@}`+TyjtIes5 zm}rg*)qcL{2I(uH|@ojI($- z%N76gZ^rml^ZSseRm7nQ6Ls{#eEdJw}a!T2vNrnqqm(27a5oF zdVZwQ@H$%GUfTL(C92^mT)xc>VxRk!@ixb*C+{LGlD&U!0ZnyN7`|^xbf-#q+-+t> zIU*|<%$;veE));2%m;~Z849|YL!b%qU^@PbIAm@$^}BNnYjySX_sY$V8& z{bN)`DtRKP|Im-Zq4onAF<)_Xge?f;QZMblYfyS%FV-i6luupJPvhs7hrSi5=2GXf znzShUUg(y;J-eCoAoe=k4qxt#dj0vbLArYL4-L3YSf4iSC7)|qU|K2rs!8gBscKIG z^BM^8#zIeFrFTzcRKQgJc50nzbnSAn`<_t@LGVohSyA{dbX-&m0$td1nvsas`}YT6 zwl}ZXrvfZkPOp_=JG<0sYowOG2+l1BvmlH>6f)cWqwMS)X*r}i+`v0XZ}QbErmn{d zn9WeNOn0x9i(!oAzg}q*J*#IurXtRuv*tu+?HmwrNl)MW8u4!3FL$r+;;BbIA3J&Q z6O6%o>}Za91^*iZ#*Jv5imZa)>jv}F+^^x*Fwu`_x<`*6A3d}by>PGUDSv+Q?p>1s z%1jr!r@1Q+d&xy_eWnIaIxSvV(uLpw0$8k%-fNx_Q#vM1?B5HJot(vV`ChDH7e9AG zm_v6G=#;^>$&dq*hjhX0)CeDa1s?1D+QA{7n)Z(+=RwbOTZx`H=+7(r88@1+*HHX6qH*4hHB@y?nf>fLm zG0DFY(Q-29u5uATGs$a)Ytbmy05qA)wG!O~VLxQw`$rFbRuulA_UH|N7pMNnFgU*m zcJ`2h>lFdP{Z*I(*s(S>Rc-Q{LwMVk!HxA*Kqdis3O$u{^Y)imDdS9=*Uim~Y4LCJ zUG)IdiGqcCqXZ^|FTB+JsQ*%gE$TrEPiYbQt3sto>S}PS}`L}I)rlL9f?^GjUHD;@Wl4cmiaMO z7D=ZWE^38O6zxox@EN)(U_EhL06x|^dIK}C$ZPjDmFZfC4HinEeeYIEsV{d?2 zVxs@(`-qMp2oa1Ss6S+*a8*`Bx^Gg!+x4zI$yUcq;~+%h@@;Vsm!CQJcV%6=+xerA zO=nIN{w;MI?{dzq$zCC33Gwd3e zO2w)KzpVe&tlh49{ z(F1^{pqXkW@C{7v9#R)Fxz?W9NbE^w7v2#0s;_@XpW2au;G)VrB$vi(my?xxG+>EnJ_9Ie$P1<3V8c*)c%==yQ-NwAl z-i8(o`t0InOBwuZNZnS^0(eDgaCCu@u$-qZg4k1!Ond%O0o)>2Np>CbcdX(*&DM|W z4UpN^Vq-rg9k$Ik0{2x{HR-mh2WTe8?%mgkbPC!LNAUB%i2^xu1Im&s0TS%oyw*f^ zUGt^e;pUNZ579{1Xd~gIUUP5`1f5p6Ld@<02THN)CZnLkYDw|0u@HqBTfYRD_xxz` zZ0=~>Owsa#`;;^1ZVp;bja4tFfuF>7pup~ETk6|noK&i@)l!uPi@{xM^2=`$p~*R< zE{HceB+0f!K*JkxeGn^0$GwL zQns44@X8UNv+cN#PJrSf9X5f`?{$$BWKcYbbh4e+P0Fle0RN=f*WaM>D4P_yM2MD+ z9EPxnz(9+k%#2TiEJwhb!m`5ExJn(ll}Q626hNeY`$c$chp2n}p6OR<4dWR@(Q>H( zV`Qq|%?VDbZ|AnCLooSXB-A;^r_(KoeW$@9hD-bD7=|Q}N=zLzqHaPMX%|k>LmAa( zLL5TiL%*1&qfM!ca2t@XT$gFFn--=*{=+-W_{Z?Ch1<9$y97vy#~jcOxNCD_VGe z8Z8Rd(in5iMOPU&QWg`91q*sm#6*LNeb@k&;+u$o6muHg(P;Z(^%zQ#)bB>B_HNX8 zL)A(P=|gyg`c>6tcxPqM9}wvDg&&>0VAu3sdq}mVYT3bE&`tLRj*NFQyCOsh(&2lM z-Q|Lxf{zpqqXTX&%C#mz3L%m-CuaDm}5Hy_wo8VxFzYTJpya6e?yna*!USILUnV>Ei0%Wu=Jb1!Jp% znjfL^?Ll+LVS!r#d7BCn0kzS66(P1a89@e6Bgj?1`{-_l&wIdL5Xyaw8Lh|FCVB_l zg#ln?Y1O6Rwz-5)CyrIA%7bc}jp%Q0OWxr+fSEU!o7jphFI@xs^9@(EOO!|U92ibO z>j`QoWF4Kq-L9)TBM$O$+VdN(CudNQvwQXx#3zt2&O84!k*4E`fEmSu z5#VD~WkTmd-R7iGwn`orHGy;vV>$tfoqi%S^z0TA6nKcf?JUQRi)N`at06!XfpUOJ zNUB`XDiaGG&RYnL(eR z#3OmVt`@)%C#Wsag&~$5 z$7Qx89AmtR%DAUdij$Y$XrHA@Aj?!88I%m3xoQ;S+Mu7KEQTW07;lidpyXSKtRAdz=>(4%x&0?mejkv^&V88d1`Yr zuIeJx5bQn28Ib%EXmAanj;R3l!yyFjo&8W2p7jG)+0;-x>t1g(K3VJ4C|6hvS&g9; z<`@Hezv6i_CunNC{_LN!jhlW)yf@O&icl6+pah~R*i+-OVAp8<=lNmEz92~eiROOJ z`62A+SB@N5bDrZ+M=tYOcbT8~UH{t9Rd)3y#J@tKFUCZKQs4EzfN@kq@*3hIDsbi$*9=Y72>Sfkx6Pym-RI+G5by zJ^bypp+@-zkyhcP!=_R4oxYokE7rE*3<4j!;LZ^2N|vZ2^_1v%i*Y9zU7{E#=>|Zy zh?|YKhs%DTqPwlfvqu zAZ|KedM7e(>h4tM=8ewj`?4YI{1EBv|9bI}zjY0Z>pw6#WIV#?lG%nfD>l6wt&I&L zcyRf~0KQthb67B^Z;f%T6IwojyGIf z%B~Y5Y`MB|8__b>g+_koDpggGQvBTU)}5kGoB692FL8?|f~Q^7o7@6&b9N zcVoTe+!g#xkI83@Q3)*Re4A4~oL4xxc)|V8peR;wIJVJTUGToM`>A24coxn%Mm)4FvHIb$9vYim+pn#4$y)%av&2fU9IQwo}axw@lEC`ap0&#Z;^(evz;B0t|9>tALp9fU>itUC_;3h z;Q8xyqKDY`V2na&wfVPdMRR4TqSS55sUff8*^2X<+>>~cf<(BJ&)KLY{QZH@!B{;L zROZj|`s)J8ie5)B@9~DSL(<-V2Eh?xqM;#9DgamO0J(>(LvO!!Wn`=;4RA78J*@&; z0EadA`|}h@f=A@QDdX;rQ(DNSWLy%?b_Io*?m>6s5XBQ zYCI}>qz1Q%P#p>A<(06~I-EcZ7bQJCP$x=@R)~R$-y=jfxVaD16mRqMJFZd+FrzmX zhJb|lZdADq$pb}Y&j1I;HYMjw z3vRmiu1Ctb4Jv_y^8C~7KxX^T;*;inf4_Ws8~;@z-C7Fd8>Lc{#&FYo?b#P3x_!Rw zgy)U3uK5Em2?|h{BO^Ejw*~j=6y z#Cc`_eS{A49V2f^*HU?Mmj5uaVZmh)ki}xs+raT4U$qDAld^9*Ieuwx>Fj<7UdFyV z)vk64ml{WHiMvirc}pnEMMHrHQVMifJ>3S8>EMfvttuWKk@b;q_{_MI9Yr)yj0cqe zGjLrbEt|ODKq};EEC@FKvU33C<~I=hyFBMlKphX|c{?tFOHAW;U0$oeW#Ko$fd8AoVzTgFa=P3q)F2AJqjJ+fFH#}C4=|anEco8g zUC;FGn)15CQ1DdVR~9UT^=--MaZOMkZ=&EBME|T;wx?P7--3@F>k!M%Y4aQu5sE+j zxkt+-;b1x8VEZ(Xq!))yYL|Mqkt0=pfk8Nwbc(r6yWu zJl98MDR#z}fbCEuTul+FhOTA5l;TL#ud?FIvelb@UUGZ_j93z&hJ?!RCFfET%UxIn zvm6cW3zu|d>)ke0Fie&Y9|thRq)_|{lz_6(W)SU6`f@#YyiL#QKx@7PXYoLWtncDs zkA;R^aCDkN9a3pY;OPKgFLrR}K7dK@0RO^sAA<6~OC7SfEKhFWM18MaG=Kk+bH|4U z2<-8-ib=+TOWm$c28MzF+Owb+-h+~aFVx&7BGjH;`XVT+oX@XYX1+b&0AbM_!{ywL z0WbzqnYI!R?wm6smFUQ}zzI0AAN*7~x7?CHnz!pAS?4MV;s=;|?{@wlEs!tPb$MhJ z%kjN^8$wO;qow>bnXc{|J1a_goo@!b9RWy{n}O)`M@0y0JUbhop6+Qf6`4Rq*6ZKH zqd}K6T7a;n6FA67W!H_B(D@(zyrU0m);bWBd5eFeED(x{5P`Fal$nVW2)-#F|T97cr(*e3?tRH#7KUnES@T#&z=g4^UT zbWrBPFdrA zB?gbYmbIs>;}-2v3E*L%bjE}ONYNne3m(pBxSfL=-6v#GNCK;p#zPnRz9(4CWvhSm zO#x0!54Ue=V!1~!&7w14=O*gdia|>2q1p(rWd%r^3}Ou)GwKfi=CSymD!JI5#r5Oa z=?HH!I9&%a+08IkJ=c9aDN|qxMl)+BxT|PB{RZ^ z-xA8Xfo35OQ4o#t1}IVM2Ye^V>4CBCjYp7p>Es9QjRla$Xaplz{SO&w+JeBx$(E37 zA)5k>45$qftdMwDULh8niuwMDORQhL!ojij(z{@sa+!i3i6XuKTbyjC^H>^UGC z8$nV5GE~u`K1%73VxV-06obrGAeIp0)4VIxF~6qJ@s}?vrJQDr5ycr%^L{^cr&tdo zyN0Mqs&Fl=azrm2>R_V<3-yw}Kd0lC3-Y$I43!?j`Xqt4WB~Q!TvU;+5$`N<%7A*G8yDK! zr8}L(6upS%IiThk7uaOyP1NYREBfKz_Uc}FqWA1^3Rg#Yn)+ymv0102HWWsHLDa`z zFvLd+Z`++aUp&Ij#({XBQJGIz0CV8C3>={$y*Ql!yPd zizN?rtH zO{a0kMw#a!;gJ`4lO0KI5gW3%pl+^QeDXuCXS9S88BDv4cK+k>*30^kc(*0#ut3si z0>Q_~8xD-I5J-3?Pz->28O5%%9?q0Tb7w$R0Z1+oJt5$lpvo(#9a(qhb)$gZdTccp z-!5m@S*l^}xhQP8ac*dsBb8LrB_{6!c-g_UN5W?gs3S(7kBwBD#ucproK$PFJs!%6 zTAhjWYkw^1u*d|+%fJpdLFt|P#xf6i6woz9VU^*)>jOjS`h zB>pL<6speuGg3NuB!Kv`garWq_$Lwnp1kr1y$Qq@+M7}&vu;@A$p!u#bqv!$G;pBl zISSEg00%*6kl6q4`O{uT#*BVF1_jsSh{yPUeR3%vSdUiys6JkvsRA`Xv|U78g&(@m zo!sQX&j5;8>T4RtK6H=#L{F$e>IofweZb7r75TP_L0>ED1M4tkk%SS5IpL#ZcD(^h zGFy<5mTJnqSr+iw6;5Cs;72#0;N4N`BTIc?UHp1QJK6tC74m7j>s3A7CFdt>h7gwg z@5etE+=jsEsEBYr>=ChsU=U3q=sSTr$1hDfU|+|4K$nXqwJ%_}1P~?_O6+|9)-O$8 zbvOYX?U{d_%eCsIOPJ`+ATjtmC&y@RVdX#+0^p-?@bM*rvX)US z`TCSt4-i|R&;rFAX(+BG!|g(?Fa}Ht2d`080g?~LJ+R(%M3aCvkmiQc)!e()=0GLB zWSjq+0=fYPFD)kd2X5DrJY=V+Ed!W}&;b+s1#g?|J-cGlbV5&rt5qNPAY?Xl7!t5w zQvqPBqgWkyCny3!jWrMqf$i~6fR>wtn|?qVXaxki-Yjo@V?7_l!$vzJ5x6h!5kWDY z&#n#9@xz~$xc4A3bBI5xc$wsQJR3f4mh|%y#hUU8U&6tZt_!?R)GsqXOkD98)>hR< zC_TW>L_lFS&)rFS6Yn;l1_SJOgiB>4qDKLST=_Fng)&p*{&s7Q<^8Vv{+77UW41O7 zsS4ufAwVv=LF7&Ns~f~E@ct49!oM@c&Kg*(m#9RqXDUc=X5==|@!W*gA8!fU6i9M) zfy_5bdR;U&$A+_2=~bs#!;1t95KG6LD%(87Tbct>d(98u@3<|FB~Y0407~n8$B2BI za&cnOWY=r_u&Pj0382miU8V$qVCP|S<7oc&vxv?G`5ctVVwzF)0@@s6()ku2FWek49>JncyMNg| z&m*qi=qp_hZVGNg2Sn^xTcyKg{pd^8)(y?`5CN~p0L43BW~OYj`Qp1%2@`NTXnw>V zQp*C``{N)FW5j%bsu%eE^-pul!fpMLO&-gy`4L+KBWxhPMjs;Xv88*dKqnSNxqT{90Jk+j8F}> zf$7PgfUQK=k=dfvLRDB~(8msPaocM17U^@$Fb>+snmrV|)XSHJP^bc=2Kl4MMBBb= zX;Ax5AEC8iRK$IP<1VNT7b%t;U8&ANrg;+~8X?FDRztTx$%Z0w7FJ;?eScGh11c=G z*n7O1+3J`TDi@U=!SC4)aW01O!S*V|pmipBKy*DcZ|Yl)I^E8zY)7uNFT0lhYji+F zAICa~gc7gCMd?EY6Tg+9_U9YxEPl)zT0hVv0tE~#72-yqi2&7_Z&G}2Kxi+KznLCz zsb+454g4O)v>UYQzOSyXE+m445l4EK3M~_;#6!zX_{`SnObwrR84-NmuqcHWjH7SsitOvE9zMokMs7*8MMfAe#^oPbF=7L*#DF)q24c1Y;Zq0a@w zU!m>^M!U68?*ffQwgr>%qhqPq1??9Gi!4(ufR2!KFzK&Ou4b`XoZBHyg-c?+(yXheDn{*`AuvNO6J0wi!t&~JnImX)VK7z3f@ z2L7}|UsIPP;oz+_BwCmZsSnlwz)D}{Z|Ep<}R5>fI?Slr6 zA)aGUjoo<&wWXCJyo)wIBaH7mH)>*GOL>(G(?6(#_KTK(Ss6@^q^>*{(A7Zqel~dH z+|kqJnxWl|an&%kvtPc zceJbrdtqStkhf6@$~|ixI0ga>aF(d+%+cUg!E!zUF<#QKG+(>8NwEr6WqSQrzLS*I zm$F9v|(u$KKmsZ!w1OR`t_y$5jKR-WYU6DW9VY>g&p^MPy1D&pa%Qv3;divIwB2p z$_GcB^bEs4NI5cZlWO2UJpMhl%tr4L5RopTW*JDgnX|-Gr}Yd4KW+MS{(_#VapHw# zKj@y(qTIiL`UhQZ{ceXOSkhrxiDOTwp;b5%R8ahMXf^$3P0%c?wPMF9`Pl#n>lVEY zv_Vb{2aI$S=%f0r>U04VX6r2qRgpskQn`+GSibsg@8#Kpv=C^GypzAN8qn2=$RXU{ zVL`IQvHEY-xouZQSX-^DU9}C58epHoD0hA)01Aj&MYT|w_)JKwVx=y5W5t?wn9?Af zeb+*J76W>sPqyO(`cOs*h@bx<>i6MfCdtTiIQAZ2!h z8gWG&qTcd)egH!F5ukzeaJdGWb2$~#N-Bgnm-FqE75p!0qWksJ)HeiZEDV9@7F;*b znx~V)p0%fvx`>>Lg215y^bch`aDzTCApsJLF4c22cL|3TuK{@*(jc0$RlG-cOViTx z3au$GNftfaX>vqk^xEQQGUxbzINji#jdMDPzM>$deLp~%_z=`j>quk#4E4%X$bw-& zx>-b2c-+qb%fJ3n?cb%Gfo(lJl{C>tgHe4J$6m*^lCOY4+24n@w&H4QN9=cfW`-jn zO{EQvNUjhG7ehS&KPeT2RNuv(20;S4KFw=amcM6{V>Mv*+!rMd# z0gkEzHQt;#=v_m%0SHmWLlh7Id^1+k5~_czG-~TN9Dps1b`~Z;a}0Fsy(=DD(;=~~ z-Rhk5hT#1_6I(76-za$%PXmI$)dOnWmZ)k5Fa9V(xg~T4!++E7oI_>g_8J{N52zJ@ z#ykf=ksq$Qpu7usfrwy0b3v70jQC!MO$4zSc6Uh9Al_{i;$8Px^&v0)u%lq05ee=R zE6Bb0mK{Tg0u0=G5*wzBT2?^(^BSaY0Uz@pH60%H2e&PAWHsh&*@-)d5l7#56q3^P zf-PzBIUtE>d62hFzoU_2%TXBx9+8F?s4R8qTaa`OaqRggeTaS)EF>zF4S$CwWnI}b zP(E;s9M|ifS&hwna;Xc%Z8{n~^z97$TJUgdTF5_|OT}Gi+Jh|SLHpl0;*|NA$1R9FJVHWOqDXpg#(*Me#Yo(A;wqu34(c5v3<)2^WqS2rEfuBMtR z)_@em>*pR)RJsU3XHZLu-Uay9fP7#}+P0I*@brW@$D`#c{#&==_n)?aBpbM*8NZsf zLqhb9X2gv8u5Un@hJ#m6@#U`mfTuyarq1!dEaO6Ua*`n%d>9R1oA~WKc-lrBI$c6G z)T)IbSq=MHhNBi^K@{#>W+ zks)H~#sLsT@)2nxhmnBJpeG`34o!LV)6l>s4Kyw^$;L~Ft{?}rL8&mfU%Z?gtFI~p%h?9Ff4Am!@PF>wwL$S!3aSjKO~D$&m3t_F#u3iMdbe!e~Lim=JL6K&uOP#n+bG202XnpgOfO4O${OZBIZTkVJ){ zO?PCwjQZ&v{4r1pMy+@2=sO)Sj7fXd>CfD_mHgO{hEHo$9RuY|`YzxKzZZ0F3mjq9 zL{vM-QvaRi1NDWEGNp6hf<6AuM&}Awc7}e~(vitlJpQFWX%vc^K++{7{X4^RXw8U^ zC8oaean^y2bf=x@`5|3?>c;;Ky2AYQD1U_RZ6n+K$vpL$oCr~A#esBrW%%+E2xR(% zXnu?E@NeEV|1V{K3d^DjTXCDp(*TF*6x&BaWjIJW8&MS)OlLBr!iWNh8rDF*jYj%3 z=Ai3Uqs!wx&CStc>D9Cgkgh}Fv{|DMO36t&j(e5NrB%?kSpZNAS#d=!7<>5fM>**` zPWdKaq(E(D7wQF$DjT>?D=dGUdf29o7A_r>(up3)Z_~-vXB@O z(*7ZIUnV1_Q}}!=Kj1g7#lzQ{cr5qSLOZG~blx~_r^P50Um@o*6JL-5bf^cn$!8BR zJD4p+TcD6|2hh`WRKEr;>yrKCRx{bj?KD2i1FUEv^7UNn1g8*M<%|6Ni@JYZ4=veQMh5OY%q3Ak@%Zo~TXsDWn_ z_TV3osmTmTFWBW1=9kksi`O6s1H!T0uZTN*KCKq-{`A z>6VfX6&R2bfuTc27-Z<~InNsQKIi}K{qlY}*LA!uw_BN5zZFm3_r3O`ZdzWLGL_6k zhv5=zgBBDl+iS^+$U4`jM`wxa+8j>b&8SdFXk-q7`~>)E{@0eLTd0B$5BbEQ-?2K@ z1zbJQAAouT{CxQ<)cDBhJ<<71iu({9AJKauBa_;iHTxifT~8cnA85+<`kJ96vDofg z62x?aQq(P7DRTL0^RJz{^6{vqeahY+DPlme3PJ`<2;jKk8@LjHh_a`GOlLl>a5suJ zjD2JM7`0deUxIW);1S+5!HG`8N{rz+UiCQ?%4Vc%|if{L{&cmyL~o7@~0K&N7y^KphcvHws z{sAU78XGFRBD6oGYx!yq@ul-KPE>@>HcZ3TcK7>B;O9q%AK^Z(PI~D<3k4$A$}KBp ze+cP2pq?2hSD^CvnW816@9@u-fn0wKjVq3oP7fdmSe!9V+se=}0^HQco@TQ39+w0C zBoJ*lb_Er;0FMiyoMOV3o!YDc&Luf+3f0Fcc+%Y89}LC?s9V1^_VuSwgDn2r;sOCZ zB^v-@a?9OeureC=sHfhy!oKG;s$pheTi)-n85vrGM&5 zs!7@h5H>iO@2=f`Sxp0a@&NG@ke5(-#R8CT5Q{j-^7bUqjNlAf>(+R~nU4jUNO$DB zkC1{BW3Jd2`FykFa6hk$c%Mno+<5YDcN2Cn3)uFy`8)$E;IX;|D){Z-uek^E-(vIc zCxf6t8mOT_UEIFSrx~^yQlb))5zT|l(n44-3HdH)RnQFJy+@(C$k*i`7x0lIqEXy|+3)&WNH*Z6U=m}QsyMonFzg0|2p zHJQY+WCRmu!R$ax0~o0br%QZVHG6@9rIZTv0Kr%%0yZcK!CL_elKT#<0qk<_17V7PLZ+VByh;5d)hpoN_P_{2#l+v-b%ZSKS!I-}nZIpDh97{>AOD$g!Y=13m zia@3m3*5yEUP0u3q0Q0TP#(Dl#f|JH5lwxaOe&-ZfIN6;lwtrxb{1UV^H(3IuQ98!GL#%$vF(xV|>fa1s?T z0_?&&Sd|ZV45{kvkaQto7F_d&<<)QV(N!ipF(R8I*)MbtpyZGSDn8ssj<@93vay@AWQG=);H}2C^4!t+!GEZfa@?w z3P(u7NSB&1q?e?YB4+0`JW*gp3+mR?Nh0*{xEUBg3nzd4wX#^Or3{%x3*t)mxrf$H z9mA8QOXLdF+eboSki%9`O`|VA;^;wqnBTOc5THS-Zok#2h1hBlgnK{)Er2}gYW{9z z7}!MS+wB9FOsVE^-9V(68yc;5!Y3pFJg*mI#nSn3aBUjB&q&gal-8YVYLJpB=5Chk@J|Z2nYiG|G9;9=-SaN)Ezk5Uhd`v zq5v~Z7drlh#La;qgzP2ATDO+ik;HDz#8SiK_6kz3N4I)I1b*^ewk1KwsYamzgAh`Wo7(x�F_2tojoA3;A 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 M$?PKQ{EgrL2|zhv+5i9m literal 0 HcmV?d00001 diff --git a/public/aset/vote/logo.png b/public/aset/vote/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..a5e7f05667f60aff2557f6709a48f79b698f2b44 GIT binary patch literal 41892 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 KX8mFE*Z%@v?K|=S literal 0 HcmV?d00001 diff --git a/src/app/admin/layout.tsx b/src/app/admin/layout.tsx deleted file mode 100644 index a6abadfa..00000000 --- a/src/app/admin/layout.tsx +++ /dev/null @@ -1,6 +0,0 @@ -import { AdminMain_Layout } from "@/app_modules_admin/main"; -import React from "react"; - -export default async function Layout({children}: {children: React.ReactNode}) { - return {children} -} \ No newline at end of file diff --git a/src/app/admin/main/page.tsx b/src/app/admin/main/page.tsx deleted file mode 100644 index 87e54c35..00000000 --- a/src/app/admin/main/page.tsx +++ /dev/null @@ -1,5 +0,0 @@ -import { AdminMain_Dashboard } from "@/app_modules_admin/main"; - -export default async function Page() { - return -} \ No newline at end of file diff --git a/src/app/dev/vote/create/layout.tsx b/src/app/dev/vote/create/layout.tsx new file mode 100644 index 00000000..3152ab64 --- /dev/null +++ b/src/app/dev/vote/create/layout.tsx @@ -0,0 +1,14 @@ +import { LayoutVote_Create } from "@/app_modules/vote"; +import React from "react"; + +export default async function Layout({ + children, +}: { + children: React.ReactNode; +}) { + return ( + <> + {children} + + ); +} diff --git a/src/app/dev/vote/create/page.tsx b/src/app/dev/vote/create/page.tsx new file mode 100644 index 00000000..a1d28226 --- /dev/null +++ b/src/app/dev/vote/create/page.tsx @@ -0,0 +1,9 @@ +import { Vote_Create } from "@/app_modules/vote"; + +export default async function Page() { + return ( + <> + + + ); +} diff --git a/src/app/dev/vote/detail/draft/layout.tsx b/src/app/dev/vote/detail/draft/layout.tsx new file mode 100644 index 00000000..41ac258c --- /dev/null +++ b/src/app/dev/vote/detail/draft/layout.tsx @@ -0,0 +1,10 @@ +import { LayoutVote_DetailDraft } from "@/app_modules/vote"; +import React from "react"; + +export default function Layout({ children }: { children: React.ReactNode }) { + return ( + <> + {children} + + ); +} diff --git a/src/app/dev/vote/detail/draft/page.tsx b/src/app/dev/vote/detail/draft/page.tsx new file mode 100644 index 00000000..e7808b60 --- /dev/null +++ b/src/app/dev/vote/detail/draft/page.tsx @@ -0,0 +1,9 @@ +import { Vote_DetailDraft } from "@/app_modules/vote"; + +export default function Page() { + return ( + <> + + + ); +} diff --git a/src/app/dev/vote/detail/kontribusi/layout.tsx b/src/app/dev/vote/detail/kontribusi/layout.tsx new file mode 100644 index 00000000..ca76dac8 --- /dev/null +++ b/src/app/dev/vote/detail/kontribusi/layout.tsx @@ -0,0 +1,14 @@ +import { LayoutVote_DetailKontribusi } from "@/app_modules/vote"; +import React from "react"; + +export default async function Layout({ + children, +}: { + children: React.ReactNode; +}) { + return ( + <> + {children} + + ); +} diff --git a/src/app/dev/vote/detail/kontribusi/page.tsx b/src/app/dev/vote/detail/kontribusi/page.tsx new file mode 100644 index 00000000..06ad3e1d --- /dev/null +++ b/src/app/dev/vote/detail/kontribusi/page.tsx @@ -0,0 +1,9 @@ +import { Vote_DetailKontribusi } from "@/app_modules/vote"; + +export default async function Page() { + return ( + <> + + + ); +} diff --git a/src/app/dev/vote/detail/main/layout.tsx b/src/app/dev/vote/detail/main/layout.tsx new file mode 100644 index 00000000..6e978bef --- /dev/null +++ b/src/app/dev/vote/detail/main/layout.tsx @@ -0,0 +1,14 @@ +import { LayoutVote_MainDetail } from "@/app_modules/vote"; +import React from "react"; + +export default async function Layout({ + children, +}: { + children: React.ReactNode; +}) { + return ( + <> + {children} + + ); +} diff --git a/src/app/dev/vote/detail/main/page.tsx b/src/app/dev/vote/detail/main/page.tsx new file mode 100644 index 00000000..fc04ad05 --- /dev/null +++ b/src/app/dev/vote/detail/main/page.tsx @@ -0,0 +1,7 @@ +import { Vote_MainDetail } from "@/app_modules/vote"; + +export default async function Page(){ + return<> + + +} \ No newline at end of file diff --git a/src/app/dev/vote/detail/publish/layout.tsx b/src/app/dev/vote/detail/publish/layout.tsx new file mode 100644 index 00000000..6730430a --- /dev/null +++ b/src/app/dev/vote/detail/publish/layout.tsx @@ -0,0 +1,10 @@ +import { LayoutVote_DetailPublish } from "@/app_modules/vote"; +import React from "react"; + +export default function Layout({ children }: { children: React.ReactNode }) { + return ( + <> + {children} + + ); +} diff --git a/src/app/dev/vote/detail/publish/page.tsx b/src/app/dev/vote/detail/publish/page.tsx new file mode 100644 index 00000000..5123e98a --- /dev/null +++ b/src/app/dev/vote/detail/publish/page.tsx @@ -0,0 +1,7 @@ +import { Vote_DetailPublish } from "@/app_modules/vote"; + +export default function Page(){ + return <> + + +} \ No newline at end of file diff --git a/src/app/dev/vote/detail/reject/layout.tsx b/src/app/dev/vote/detail/reject/layout.tsx new file mode 100644 index 00000000..469f132a --- /dev/null +++ b/src/app/dev/vote/detail/reject/layout.tsx @@ -0,0 +1,8 @@ +import { LayoutVote_DetailReject } from "@/app_modules/vote"; +import React from "react"; + +export default async function Layout({children}: {children: React.ReactNode}) { + return<> + {children} + +} \ No newline at end of file diff --git a/src/app/dev/vote/detail/reject/page.tsx b/src/app/dev/vote/detail/reject/page.tsx new file mode 100644 index 00000000..0d0bd20c --- /dev/null +++ b/src/app/dev/vote/detail/reject/page.tsx @@ -0,0 +1,7 @@ +import { Vote_DetailReject } from "@/app_modules/vote"; + +export default async function Page() { + return <> + + +} \ No newline at end of file diff --git a/src/app/dev/vote/detail/review/layout.tsx b/src/app/dev/vote/detail/review/layout.tsx new file mode 100644 index 00000000..b749c3df --- /dev/null +++ b/src/app/dev/vote/detail/review/layout.tsx @@ -0,0 +1,10 @@ +import { LayoutVote_DetailReview } from "@/app_modules/vote"; +import React from "react"; + +export default function Layout({ children }: { children: React.ReactNode }) { + return ( + <> + {children} + + ); +} diff --git a/src/app/dev/vote/detail/review/page.tsx b/src/app/dev/vote/detail/review/page.tsx new file mode 100644 index 00000000..e2b45bf3 --- /dev/null +++ b/src/app/dev/vote/detail/review/page.tsx @@ -0,0 +1,9 @@ +import { Vote_DetailReview } from "@/app_modules/vote"; + +export default function Page() { + return ( + <> + + + ); +} diff --git a/src/app/dev/vote/detail/riwayat_saya/layout.tsx b/src/app/dev/vote/detail/riwayat_saya/layout.tsx new file mode 100644 index 00000000..4d17c867 --- /dev/null +++ b/src/app/dev/vote/detail/riwayat_saya/layout.tsx @@ -0,0 +1,14 @@ +import { LayoutVote_DetailRiwayatSaya } from "@/app_modules/vote"; +import React from "react"; + +export default async function Layout({ + children, +}: { + children: React.ReactNode; +}) { + return ( + <> + {children} + + ); +} diff --git a/src/app/dev/vote/detail/riwayat_saya/page.tsx b/src/app/dev/vote/detail/riwayat_saya/page.tsx new file mode 100644 index 00000000..56807551 --- /dev/null +++ b/src/app/dev/vote/detail/riwayat_saya/page.tsx @@ -0,0 +1,9 @@ +import { Vote_DetailRiwayatSaya } from "@/app_modules/vote"; + +export default async function Page() { + return ( + <> + + + ); +} diff --git a/src/app/dev/vote/detail/semua_riwayat/layout.tsx b/src/app/dev/vote/detail/semua_riwayat/layout.tsx new file mode 100644 index 00000000..4723aa9d --- /dev/null +++ b/src/app/dev/vote/detail/semua_riwayat/layout.tsx @@ -0,0 +1,14 @@ +import { LayoutVote_DetailSemuaRiwayat } from "@/app_modules/vote"; +import React from "react"; + +export default async function Layout({ + children, +}: { + children: React.ReactNode; +}) { + return ( + <> + {children} + + ); +} diff --git a/src/app/dev/vote/detail/semua_riwayat/page.tsx b/src/app/dev/vote/detail/semua_riwayat/page.tsx new file mode 100644 index 00000000..a73db641 --- /dev/null +++ b/src/app/dev/vote/detail/semua_riwayat/page.tsx @@ -0,0 +1,10 @@ +import { Vote_DetailSemuaRiwayat } from "@/app_modules/vote"; + + +export default async function Page() { + return ( + <> + + + ); +} diff --git a/src/app/dev/vote/edit/layout.tsx b/src/app/dev/vote/edit/layout.tsx new file mode 100644 index 00000000..c84da67c --- /dev/null +++ b/src/app/dev/vote/edit/layout.tsx @@ -0,0 +1,14 @@ +import { LayoutVote_Edit } from "@/app_modules/vote"; +import React from "react"; + +export default async function Layout({ + children, +}: { + children: React.ReactNode; +}) { + return ( + <> + {children} + + ); +} diff --git a/src/app/dev/vote/edit/page.tsx b/src/app/dev/vote/edit/page.tsx new file mode 100644 index 00000000..afceaf2e --- /dev/null +++ b/src/app/dev/vote/edit/page.tsx @@ -0,0 +1,9 @@ +import { Vote_Edit } from "@/app_modules/vote"; + +export default async function Page() { + return ( + <> + + + ); +} diff --git a/src/app/dev/vote/main/beranda/page.tsx b/src/app/dev/vote/main/beranda/page.tsx new file mode 100644 index 00000000..edc6aa4c --- /dev/null +++ b/src/app/dev/vote/main/beranda/page.tsx @@ -0,0 +1,7 @@ +import { Vote_Beranda } from "@/app_modules/vote"; + +export default async function Page() { + return<> + + +} \ No newline at end of file diff --git a/src/app/dev/vote/main/kontribusi/page.tsx b/src/app/dev/vote/main/kontribusi/page.tsx new file mode 100644 index 00000000..093ef379 --- /dev/null +++ b/src/app/dev/vote/main/kontribusi/page.tsx @@ -0,0 +1,10 @@ +import { Vote_Kontribusi } from "@/app_modules/vote"; + + +export default async function Page() { + return ( + <> + + + ); +} diff --git a/src/app/dev/vote/main/layout.tsx b/src/app/dev/vote/main/layout.tsx new file mode 100644 index 00000000..6c2e5673 --- /dev/null +++ b/src/app/dev/vote/main/layout.tsx @@ -0,0 +1,14 @@ +import { LayoutVote_Main } from "@/app_modules/vote"; +import React from "react"; + +export default async function Layout({ + children, +}: { + children: React.ReactNode; +}) { + return ( + <> + {children} + + ); +} diff --git a/src/app/dev/vote/main/riwayat/page.tsx b/src/app/dev/vote/main/riwayat/page.tsx new file mode 100644 index 00000000..b44f2d52 --- /dev/null +++ b/src/app/dev/vote/main/riwayat/page.tsx @@ -0,0 +1,9 @@ +import { Vote_Riwayat } from "@/app_modules/vote"; + +export default async function Page() { + return ( + <> + + + ); +} diff --git a/src/app/dev/vote/main/status/page.tsx b/src/app/dev/vote/main/status/page.tsx new file mode 100644 index 00000000..afed972f --- /dev/null +++ b/src/app/dev/vote/main/status/page.tsx @@ -0,0 +1,9 @@ +import { Vote_Status } from "@/app_modules/vote"; + +export default async function Page() { + return ( + <> + + + ); +} diff --git a/src/app/dev/vote/splash/page.tsx b/src/app/dev/vote/splash/page.tsx new file mode 100644 index 00000000..9d5976a3 --- /dev/null +++ b/src/app/dev/vote/splash/page.tsx @@ -0,0 +1,9 @@ +import { Vote_Splash } from "@/app_modules/vote"; + +export default async function Page() { + return ( + <> + + + ); +} diff --git a/src/app/emotion.tsx b/src/app/emotion.tsx index cb3adb61..1215b3ed 100644 --- a/src/app/emotion.tsx +++ b/src/app/emotion.tsx @@ -2,7 +2,7 @@ import AppNotif from "@/app_modules/notif"; // import './globals.css' import { CacheProvider } from "@emotion/react"; -import { MantineProvider, useEmotionCache } from "@mantine/core"; +import { Image, MantineProvider, useEmotionCache } from "@mantine/core"; import { Notifications } from "@mantine/notifications"; import { useServerInsertedHTML } from "next/navigation"; import { ToastContainer, toast } from "react-toastify"; @@ -27,10 +27,13 @@ export default function RootStyleRegistry({ return ( + + HIPMI + - + {children} {/* */} diff --git a/src/app/lib/router_hipmi/router_vote.ts b/src/app/lib/router_hipmi/router_vote.ts new file mode 100644 index 00000000..2b96d5bb --- /dev/null +++ b/src/app/lib/router_hipmi/router_vote.ts @@ -0,0 +1,24 @@ +export const RouterVote = { + // main + splash: "/dev/vote/splash", + beranda: "/dev/vote/main/beranda", + status: "/dev/vote/main/status", + kontribusi: "/dev/vote/main/kontribusi", + riwayat: "/dev/vote/main/riwayat", + + // create + create: "/dev/vote/create", + + // + edit: "/dev/vote/edit", + + //detail + main_detail: "/dev/vote/detail/main", + detail_publish: "/dev/vote/detail/publish", + detail_review: "/dev/vote/detail/review", + detail_draft: "/dev/vote/detail/draft", + detail_reject: "/dev/vote/detail/reject", + detail_kontribusi: "/dev/vote/detail/kontribusi", + detail_semua_riwayat: "/dev/vote/detail/semua_riwayat", + detail_riwayat_saya: "/dev/vote/detail/riwayat_saya", +}; diff --git a/src/app_modules/admin/event/child/tipe_acara.tsx b/src/app_modules/admin/event/child/tipe_acara.tsx index f55ba6c4..78479e1d 100644 --- a/src/app_modules/admin/event/child/tipe_acara.tsx +++ b/src/app_modules/admin/event/child/tipe_acara.tsx @@ -7,6 +7,7 @@ import { Divider, Group, List, + Modal, Paper, SimpleGrid, Stack, @@ -23,8 +24,11 @@ import { ComponentGlobal_NotifikasiPeringatan } from "@/app_modules/component_gl import { ComponentGlobal_NotifikasiBerhasil } from "@/app_modules/component_global/notif_global/notifikasi_berhasil"; import { ComponentGlobal_NotifikasiGagal } from "@/app_modules/component_global/notif_global/notifikasi_gagal"; import { AdminEvent_getListTipeAcara } from "../fun/get/get_list_tipe_acara"; -import { IconEditCircle } from "@tabler/icons-react"; +import { IconEditCircle, IconTrash } from "@tabler/icons-react"; import { AdminEvent_funEditTipeAcara } from "../fun/edit/fun_edit_tipe_acara"; +import { useDisclosure } from "@mantine/hooks"; +import { AdminEvent_funEditActivationTipeAcaraById } from "../fun/edit/fun_edit_activation_tipe_acara"; +import { number } from "echarts"; export default function AdminEvent_DetailTipeAcara({ listTipe, @@ -46,8 +50,35 @@ function DetailTipeAcara({ listTipe }: { listTipe: MODEL_DEFAULT_MASTER[] }) { const [name, setName] = useState(""); const [openEditor, setOpenEditor] = useState(false); const [edit, setEdit] = useState(null); + const [opened, { open, close }] = useDisclosure(false); + const [hapusTipe, setHapusTipe] = useState({ + id: "", + name: "", + }); + return ( <> + + + + Anda yakin akan menghapus{" "} + <Text span c={"red"} inherit> + {hapusTipe.name} + </Text>{" "} + ? + + + + + + + + {e.name} - { - setOpenEditor(true); - setEdit(e); - }} - > - - + + { + setOpenEditor(true); + setEdit(e); + }} + > + + {" "} + { + open(); + setHapusTipe({ + ...hapusTipe, + id: e.id, + name: e.name, + }); + }} + > + + + @@ -175,3 +221,18 @@ async function onUpdate(id: any, edit: any, setTipe: any, setOpenEditor: any) { } }); } + +async function onDelete(data: MODEL_DEFAULT_MASTER, close: any, setTipe: any) { + await AdminEvent_funEditActivationTipeAcaraById(data.id as any).then( + async (res) => { + if (res.status === 200) { + const data = await AdminEvent_getListTipeAcara(); + setTipe(data); + ComponentGlobal_NotifikasiBerhasil(res.message); + close(); + } else { + ComponentGlobal_NotifikasiGagal(res.message); + } + } + ); +} diff --git a/src/app_modules/admin/event/fun/edit/fun_edit_activation_tipe_acara.ts b/src/app_modules/admin/event/fun/edit/fun_edit_activation_tipe_acara.ts new file mode 100644 index 00000000..86980a97 --- /dev/null +++ b/src/app_modules/admin/event/fun/edit/fun_edit_activation_tipe_acara.ts @@ -0,0 +1,22 @@ +"use server"; + +import prisma from "@/app/lib/prisma"; +import { revalidatePath } from "next/cache"; + +export async function AdminEvent_funEditActivationTipeAcaraById(id: number) { + const updt = await prisma.eventMaster_TipeAcara.update({ + where: { + id: id, + }, + data: { + active: false, + }, + }); + + if(!updt) return {status: 400, message: "Gagal Update"} + revalidatePath("/dev/admin/event/child/tipe_acara"); + return { + status: 200, + message: "Update Berhasil" + } +} diff --git a/src/app_modules/admin/event/fun/get/get_list_tipe_acara.ts b/src/app_modules/admin/event/fun/get/get_list_tipe_acara.ts index 8df30f90..9f2ead65 100644 --- a/src/app_modules/admin/event/fun/get/get_list_tipe_acara.ts +++ b/src/app_modules/admin/event/fun/get/get_list_tipe_acara.ts @@ -6,6 +6,9 @@ export async function AdminEvent_getListTipeAcara(){ const data = await prisma.eventMaster_TipeAcara.findMany({ orderBy:{ id: "asc" + }, + where: { + active: true } }) return data diff --git a/src/app_modules/component_global/author_name_on_header.tsx b/src/app_modules/component_global/author_name_on_header.tsx index 75d6594f..a6a42a24 100644 --- a/src/app_modules/component_global/author_name_on_header.tsx +++ b/src/app_modules/component_global/author_name_on_header.tsx @@ -3,15 +3,16 @@ import { RouterProfile } from "@/app/lib/router_hipmi/router_katalog"; import { Stack, Grid, Avatar, Divider, Text } from "@mantine/core"; import { useRouter } from "next/navigation"; +import { ComponentGlobal_NotifikasiPeringatan } from "./notif_global/notifikasi_peringatan"; export default function ComponentGlobal_AuthorNameOnHeader({ profileId, imagesId, authorName, }: { - profileId: string; - imagesId: string; - authorName: string; + profileId?: string; + imagesId?: string; + authorName?: string; }) { const router = useRouter(); return ( @@ -21,7 +22,11 @@ export default function ComponentGlobal_AuthorNameOnHeader({ { - router.push(RouterProfile.katalog + profileId); + if (profileId) { + router.push(RouterProfile.katalog + profileId); + } else { + ComponentGlobal_NotifikasiPeringatan("Id tidak ditemukan"); + } }} > - {authorName} + {authorName ? authorName : "Nama author"} diff --git a/src/app_modules/event/fun/master/get_tipe_acara.ts b/src/app_modules/event/fun/master/get_tipe_acara.ts index 8421ab5f..7b5f1683 100644 --- a/src/app_modules/event/fun/master/get_tipe_acara.ts +++ b/src/app_modules/event/fun/master/get_tipe_acara.ts @@ -3,6 +3,13 @@ import prisma from "@/app/lib/prisma" export async function Event_getMasterTipeAcara(){ - const data = await prisma.eventMaster_TipeAcara.findMany() + const data = await prisma.eventMaster_TipeAcara.findMany({ + orderBy: { + id: "asc" + }, + where: { + active: true + } + }) return data } \ No newline at end of file diff --git a/src/app_modules/home/view.tsx b/src/app_modules/home/view.tsx index 52059b4c..9d7e715b 100644 --- a/src/app_modules/home/view.tsx +++ b/src/app_modules/home/view.tsx @@ -31,6 +31,7 @@ import { useRouter } from "next/navigation"; import { MODEL_PROFILE_OLD } from "./model/user_profile"; import AppNotif from "../notif"; import { RouterEvent } from "@/app/lib/router_hipmi/router_event"; +import { RouterVote } from "@/app/lib/router_hipmi/router_vote"; // export const dynamic = "force-dynamic" // export const revalidate = 0 @@ -56,7 +57,7 @@ export default function HomeView() { id: 3, name: "Voting", icon: , - link: "", + link: RouterVote.splash, }, { id: 4, @@ -93,7 +94,6 @@ export default function HomeView() { return ( <> - logo @@ -101,14 +101,14 @@ export default function HomeView() { {/*
{JSON.stringify(stateUser, null, 2)}
*/} - {listHalaman.map((e, i) => ( + + {/* Header name */} + + + + + {/* Isi deskripsi */} + router.push(path)}> + + Voting Pemilihan Tempat Makan + + + + {new Date().toLocaleDateString(["id-ID"], { + dateStyle: "medium", + })} + + - + + {new Date( + moment(Date.now()).add(10, "days").calendar() + ).toLocaleDateString(["id-ID"], { + dateStyle: "medium", + })} + + + + + + + + Voting A + + 2 + + + + + + Voting B + + 3 + + + + + + + + + {pilihanSaya ? ( + + + Pilihan Saya : A + + + ) : ( + "" + )} + + + ); +} diff --git a/src/app_modules/vote/component/card_view_status.tsx b/src/app_modules/vote/component/card_view_status.tsx new file mode 100644 index 00000000..fb5af971 --- /dev/null +++ b/src/app_modules/vote/component/card_view_status.tsx @@ -0,0 +1,86 @@ +"use client"; + +import { + Card, + Stack, + Title, + Badge, + Group, + Radio, + Grid, + Center, + Text, +} from "@mantine/core"; +import moment from "moment"; +import { useRouter } from "next/navigation"; + +export default function ComponentVote_CardViewStatus({ + path, +}: { + path: string; +}) { + const router = useRouter(); + return ( + <> + router.push(path)} + > + {/* Isi deskripsi */} + + + Judul Voting : Pemilihan tempat wisata + + + + {new Date().toLocaleDateString(["id-ID"], { + dateStyle: "medium", + })} + + - + + {new Date( + moment(Date.now()).add(10, "days").calendar() + ).toLocaleDateString(["id-ID"], { + dateStyle: "medium", + })} + + + + + + {/* + + + + +
+ + Nama Voting {""} + + A + + +
+
+ +
+ + Nama Voting {""} + + B + + +
+
+
+
+
+
*/} +
+ + ); +} diff --git a/src/app_modules/vote/component/detail/daftar_voter.tsx b/src/app_modules/vote/component/detail/daftar_voter.tsx new file mode 100644 index 00000000..01e1fed4 --- /dev/null +++ b/src/app_modules/vote/component/detail/daftar_voter.tsx @@ -0,0 +1,53 @@ +"use client"; +import { + Card, + Stack, + Center, + Title, + Badge, + Group, + Radio, + Grid, + Text, + Avatar, + Divider, +} from "@mantine/core"; +import moment from "moment"; + +export default function ComponentVote_DaftarVoter() { + return ( + <> + + + +
+ Daftar Voting +
+ {Array(5) + .fill(0) + .map((e, i) => ( + + + + + + + + Nama User + + + + + A + + + + + + ))} +
+
+
+ + ); +} diff --git a/src/app_modules/vote/component/detail/detail_data.tsx b/src/app_modules/vote/component/detail/detail_data.tsx new file mode 100644 index 00000000..7b7d96fc --- /dev/null +++ b/src/app_modules/vote/component/detail/detail_data.tsx @@ -0,0 +1,92 @@ +"use client"; +import { + Card, + Stack, + Center, + Title, + Badge, + Group, + Radio, + Grid, + Text, +} from "@mantine/core"; +import moment from "moment"; + +export default function ComponentVote_DetailData() { + const listVote = [ + { + id: 1, + value: "A", + label: "A", + }, + { + id: 2, + value: "B", + label: "B", + }, + ]; + return ( + <> + + + +
+ Judul voting +
+ + Deskripsi: Lorem, ipsum dolor sit amet consectetur adipisicing + elit. Mollitia possimus repellendus in, iste voluptatibus sit + laborum voluptates aliquam nisi? Earum quas ea quaerat veniam + porro, magni nulla consequuntur distinctio at. + + + +
+ + Batas Voting + +
+ + + + {new Date().toLocaleDateString(["id-ID"], { + dateStyle: "medium", + })} + + - + + {new Date( + moment(Date.now()).add(10, "days").calendar() + ).toLocaleDateString(["id-ID"], { + dateStyle: "medium", + })} + + + +
+
+
+ + + + + {listVote.map((e) => ( + +
+ {`Nama Voting ${e.label}`} + } + /> +
+
+ ))} +
+
+
+
+
+ + ); +} diff --git a/src/app_modules/vote/component/detail/detail_data_tanpa_vote.tsx b/src/app_modules/vote/component/detail/detail_data_tanpa_vote.tsx new file mode 100644 index 00000000..9d942625 --- /dev/null +++ b/src/app_modules/vote/component/detail/detail_data_tanpa_vote.tsx @@ -0,0 +1,51 @@ +import { Badge, Card, Center, Group, Stack, Text, Title } from "@mantine/core"; +import moment from "moment"; + + +export default function ComponentVote_DetailDataTanpaVote() { + return ( + <> + + + +
+ Judul voting +
+ + Deskripsi: Lorem, ipsum dolor sit amet consectetur adipisicing + elit. Mollitia possimus repellendus in, iste voluptatibus sit + laborum voluptates aliquam nisi? Earum quas ea quaerat veniam + porro, magni nulla consequuntur distinctio at. + +
+
+ + +
+ + Batas Voting + +
+ + + + {new Date().toLocaleDateString(["id-ID"], { + dateStyle: "medium", + })} + + - + + {new Date( + moment(Date.now()).add(10, "days").calendar() + ).toLocaleDateString(["id-ID"], { + dateStyle: "medium", + })} + + + +
+
+
+ + ); +} diff --git a/src/app_modules/vote/component/detail/hasil_voting.tsx b/src/app_modules/vote/component/detail/hasil_voting.tsx new file mode 100644 index 00000000..e6ca3b30 --- /dev/null +++ b/src/app_modules/vote/component/detail/hasil_voting.tsx @@ -0,0 +1,76 @@ +"use client"; + +import { + Avatar, + Box, + Card, + Center, + Grid, + Group, + List, + Stack, + Text, + Title, +} from "@mantine/core"; + +export default function ComponentVote_HasilVoting() { + return ( + <> + + + +
+ Hasil Voting +
+ {/* + + + Voting A :{" "} + + 10 + + + + + + Voting B :{" "} + + 12 + + + + */} + + + + + 2 + + Voting A + + + + + + 3 + + Voting B + + + +
+
+
+ + ); +} diff --git a/src/app_modules/vote/component/header_tamplate.tsx b/src/app_modules/vote/component/header_tamplate.tsx new file mode 100644 index 00000000..386c4007 --- /dev/null +++ b/src/app_modules/vote/component/header_tamplate.tsx @@ -0,0 +1,69 @@ +"use client"; + +import { Header, Group, ActionIcon, Text, Title } from "@mantine/core"; +import { IconArrowLeft, IconChevronLeft } from "@tabler/icons-react"; +import { useRouter } from "next/navigation"; +import { useState } from "react"; + +export default function ComponentVote_HeaderTamplate({ + hideBack, + changeIconBack, + route, + route2, + title, + icon, + bg, +}: { + hideBack?: boolean; + changeIconBack?: any; + route?: any; + route2?: any; + title: string; + icon?: any; + bg?: any; +}) { + const router = useRouter(); + return ( + <> +
+ + {hideBack ? ( + + ) : ( + { + if (route === null || route === undefined) { + return router.back(); + } else { + return router.push(route); + } + }} + > + {changeIconBack ? changeIconBack : } + + )} + {title} + {(() => { + if (route2 === null || route2 === undefined) { + return ; + } else { + return ( + router.push(route2)} + > + {icon} + + ); + } + })()} + +
+ + ); +} diff --git a/src/app_modules/vote/create/index.tsx b/src/app_modules/vote/create/index.tsx new file mode 100644 index 00000000..580cf3a8 --- /dev/null +++ b/src/app_modules/vote/create/index.tsx @@ -0,0 +1,123 @@ +"use client"; + +import { ComponentGlobal_NotifikasiBerhasil } from "@/app_modules/component_global/notif_global/notifikasi_berhasil"; +import { + Button, + Center, + Grid, + Group, + Stack, + Text, + TextInput, + Title, +} from "@mantine/core"; +import { DatePickerInput } from "@mantine/dates"; +import { useCounter } from "@mantine/hooks"; +import { IconHome } from "@tabler/icons-react"; +import { useAtom } from "jotai"; +import moment from "moment"; +import { AppRouterInstance } from "next/dist/shared/lib/app-router-context.shared-runtime"; +import { useRouter } from "next/navigation"; +import { useState } from "react"; +import { gs_vote_hotMenu, gs_vote_status } from "../global_state"; +import { RouterVote } from "@/app/lib/router_hipmi/router_vote"; + +export default function Vote_Create() { + const router = useRouter(); + const [hotMenu, setHotMenu] = useAtom(gs_vote_hotMenu); + const [tabsStatus, setTabsStatus] = useAtom(gs_vote_status); + + const [data, setData] = useState({ + title: "", + deskripsi: "", + }); + return ( + <> + + {}} + /> + {}} + /> + + { + return moment(date).diff(Date.now(), "days") < 0; + }} + onChange={(val) => console.log(val)} + /> + + + + Daftar Voting + + + + + + + - + + + + {}} + /> + + + + + + - + + + + {}} + /> + + + + + + + + + ); +} + +async function onSave( + router: AppRouterInstance, + setHotMenu: any, + setTabsStatus: any +) { + ComponentGlobal_NotifikasiBerhasil("Berhasil Disimpan"); + setHotMenu(1); + setTabsStatus("Review") + + router.replace(RouterVote.status); +} diff --git a/src/app_modules/vote/create/layout.tsx b/src/app_modules/vote/create/layout.tsx new file mode 100644 index 00000000..89058911 --- /dev/null +++ b/src/app_modules/vote/create/layout.tsx @@ -0,0 +1,19 @@ +"use client"; + +import { AppShell } from "@mantine/core"; +import React from "react"; +import ComponentVote_HeaderTamplate from "../component/header_tamplate"; + +export default function LayoutVote_Create({ + children, +}: { + children: React.ReactNode; +}) { + return ( + <> + }> + {children} + + + ); +} diff --git a/src/app_modules/vote/detail/draft/index.tsx b/src/app_modules/vote/detail/draft/index.tsx new file mode 100644 index 00000000..93a7d719 --- /dev/null +++ b/src/app_modules/vote/detail/draft/index.tsx @@ -0,0 +1,88 @@ +"use client"; + +import { Button, Group, Modal, SimpleGrid, Stack, Title } from "@mantine/core"; +import ComponentVote_DetailData from "../../component/detail/detail_data"; +import { useRouter } from "next/navigation"; +import { useAtom } from "jotai"; +import { gs_vote_status } from "../../global_state"; +import { ComponentGlobal_NotifikasiBerhasil } from "@/app_modules/component_global/notif_global/notifikasi_berhasil"; +import { useDisclosure } from "@mantine/hooks"; + +export default function Vote_DetailDraft() { + return ( + <> + + + + + + ); +} + +function ButtonAction() { + const router = useRouter(); + const [tabsStatus, setTabsStatus] = useAtom(gs_vote_status); + const [opened, { open, close }] = useDisclosure(false); + + async function onUpdate() { + setTabsStatus("Review"); + ComponentGlobal_NotifikasiBerhasil("Berhasil Ajukan Review", 2000); + router.back(); + } + + async function onDelete() { + setTabsStatus("Draft"); + ComponentGlobal_NotifikasiBerhasil("Berhasil Hapus Vote", 2000); + router.back(); + } + + return ( + <> + + + + + + + + Yakin menghapus vote ini ? + + + + + + + + ); +} diff --git a/src/app_modules/vote/detail/draft/layout.tsx b/src/app_modules/vote/detail/draft/layout.tsx new file mode 100644 index 00000000..9386686c --- /dev/null +++ b/src/app_modules/vote/detail/draft/layout.tsx @@ -0,0 +1,29 @@ +"use client"; + +import { AppShell } from "@mantine/core"; +import React from "react"; +import ComponentVote_HeaderTamplate from "../../component/header_tamplate"; +import { IconEdit } from "@tabler/icons-react"; +import { RouterVote } from "@/app/lib/router_hipmi/router_vote"; + +export default function LayoutVote_DetailDraft({ + children, +}: { + children: React.ReactNode; +}) { + return ( + <> + } + route2={RouterVote.edit} + /> + } + > + {children} + + + ); +} diff --git a/src/app_modules/vote/detail/kontribusi/index.tsx b/src/app_modules/vote/detail/kontribusi/index.tsx new file mode 100644 index 00000000..a50d9728 --- /dev/null +++ b/src/app_modules/vote/detail/kontribusi/index.tsx @@ -0,0 +1,76 @@ +"use client"; + +import { + Badge, + Card, + Center, + Grid, + Group, + Radio, + Stack, + Text, + Title, +} from "@mantine/core"; +import moment from "moment"; +import ComponentVote_HasilVoting from "../../component/detail/hasil_voting"; +import ComponentVote_DaftarVoter from "../../component/detail/daftar_voter"; + +export default function Vote_DetailKontribusi() { + return ( + <> + + + + + + + ); +} + +function TampilanDataVoting() { + return ( + <> + + + +
+ Judul voting +
+ + Deskripsi: Lorem, ipsum dolor sit amet consectetur adipisicing + elit. Mollitia possimus repellendus in, iste voluptatibus sit + laborum voluptates aliquam nisi? Earum quas ea quaerat veniam + porro, magni nulla consequuntur distinctio at. + +
+
+ + +
+ + Batas Voting + +
+ + + + {new Date().toLocaleDateString(["id-ID"], { + dateStyle: "medium", + })} + + - + + {new Date( + moment(Date.now()).add(10, "days").calendar() + ).toLocaleDateString(["id-ID"], { + dateStyle: "medium", + })} + + + +
+
+
+ + ); +} diff --git a/src/app_modules/vote/detail/kontribusi/layout.tsx b/src/app_modules/vote/detail/kontribusi/layout.tsx new file mode 100644 index 00000000..f1485bc4 --- /dev/null +++ b/src/app_modules/vote/detail/kontribusi/layout.tsx @@ -0,0 +1,21 @@ +"use client"; + +import { AppShell } from "@mantine/core"; +import React from "react"; +import ComponentVote_HeaderTamplate from "../../component/header_tamplate"; + +export default function LayoutVote_DetailKontribusi({ + children, +}: { + children: React.ReactNode; +}) { + return ( + <> + } + > + {children} + + + ); +} diff --git a/src/app_modules/vote/detail/main/index.tsx b/src/app_modules/vote/detail/main/index.tsx new file mode 100644 index 00000000..b50b7646 --- /dev/null +++ b/src/app_modules/vote/detail/main/index.tsx @@ -0,0 +1,107 @@ +"use client"; + +import { + Card, + Stack, + Center, + Title, + Badge, + Group, + Radio, + Grid, + Text, +} from "@mantine/core"; +import moment from "moment"; +import ComponentVote_HasilVoting from "../../component/detail/hasil_voting"; +import ComponentVote_DaftarVoter from "../../component/detail/daftar_voter"; + +export default function Vote_MainDetail() { + return ( + <> + + + + + + + ); +} + +function TampilanDataVoting() { + const listVote = [ + { + id: 1, + value: "A", + label: "A", + }, + { + id: 2, + value: "B", + label: "B", + }, + ]; + return ( + <> + + + +
+ Judul voting +
+ + Deskripsi: Lorem, ipsum dolor sit amet consectetur adipisicing + elit. Mollitia possimus repellendus in, iste voluptatibus sit + laborum voluptates aliquam nisi? Earum quas ea quaerat veniam + porro, magni nulla consequuntur distinctio at. + + + +
+ + Batas Voting + +
+ + + + {new Date().toLocaleDateString(["id-ID"], { + dateStyle: "medium", + })} + + - + + {new Date( + moment(Date.now()).add(10, "days").calendar() + ).toLocaleDateString(["id-ID"], { + dateStyle: "medium", + })} + + + +
+
+
+ + + + + {listVote.map((e) => ( + +
+ {`Nama Voting ${e.label}`} + } + /> +
+
+ ))} +
+
+
+
+
+ + ); +} diff --git a/src/app_modules/vote/detail/main/layout.tsx b/src/app_modules/vote/detail/main/layout.tsx new file mode 100644 index 00000000..543062a9 --- /dev/null +++ b/src/app_modules/vote/detail/main/layout.tsx @@ -0,0 +1,19 @@ +"use client"; + +import { AppShell } from "@mantine/core"; +import React from "react"; +import ComponentVote_HeaderTamplate from "../../component/header_tamplate"; + +export default function LayoutVote_MainDetail({ + children, +}: { + children: React.ReactNode; +}) { + return ( + <> + }> + {children} + + + ); +} diff --git a/src/app_modules/vote/detail/publish/index.tsx b/src/app_modules/vote/detail/publish/index.tsx new file mode 100644 index 00000000..694f6c2a --- /dev/null +++ b/src/app_modules/vote/detail/publish/index.tsx @@ -0,0 +1,78 @@ +"use client"; + +import { + Badge, + Card, + Center, + Grid, + Group, + Radio, + Stack, + Text, + Title, +} from "@mantine/core"; +import ComponentVote_DetailData from "../../component/detail/detail_data"; +import ComponentVote_DaftarVoter from "../../component/detail/daftar_voter"; +import ComponentVote_HasilVoting from "../../component/detail/hasil_voting"; +import moment from "moment"; + +export default function Vote_DetailPublish() { + return ( + <> + + {/* */} + + + + + + ); +} + +function TampilanDataVoting() { + return ( + <> + + + +
+ Judul voting +
+ + Deskripsi: Lorem, ipsum dolor sit amet consectetur adipisicing + elit. Mollitia possimus repellendus in, iste voluptatibus sit + laborum voluptates aliquam nisi? Earum quas ea quaerat veniam + porro, magni nulla consequuntur distinctio at. + +
+
+ + +
+ + Batas Voting + +
+ + + + {new Date().toLocaleDateString(["id-ID"], { + dateStyle: "medium", + })} + + - + + {new Date( + moment(Date.now()).add(10, "days").calendar() + ).toLocaleDateString(["id-ID"], { + dateStyle: "medium", + })} + + + +
+
+
+ + ); +} diff --git a/src/app_modules/vote/detail/publish/layout.tsx b/src/app_modules/vote/detail/publish/layout.tsx new file mode 100644 index 00000000..0ce32506 --- /dev/null +++ b/src/app_modules/vote/detail/publish/layout.tsx @@ -0,0 +1,19 @@ +"use client"; + +import { AppShell } from "@mantine/core"; +import React from "react"; +import ComponentVote_HeaderTamplate from "../../component/header_tamplate"; + +export default function LayoutVote_DetailPublish({ + children, +}: { + children: React.ReactNode; +}) { + return ( + <> + }> + {children} + + + ); +} diff --git a/src/app_modules/vote/detail/reject/index.tsx b/src/app_modules/vote/detail/reject/index.tsx new file mode 100644 index 00000000..b6173447 --- /dev/null +++ b/src/app_modules/vote/detail/reject/index.tsx @@ -0,0 +1,96 @@ +"use client"; + +import { + Button, + Group, + Modal, + SimpleGrid, + Stack, + Text, + Title, +} from "@mantine/core"; +import ComponentVote_DetailData from "../../component/detail/detail_data"; +import { useRouter } from "next/navigation"; +import { ComponentGlobal_NotifikasiBerhasil } from "@/app_modules/component_global/notif_global/notifikasi_berhasil"; +import { useAtom } from "jotai"; +import { gs_vote_status } from "../../global_state"; +import { useDisclosure } from "@mantine/hooks"; + +export default function Vote_DetailReject() { + return ( + <> + + + + + + ); +} + +function ButtonAction() { + const router = useRouter(); + const [tabsStatus, setTabsStatus] = useAtom(gs_vote_status); + const [opened, { open, close }] = useDisclosure(false); + + async function onUpdate() { + setTabsStatus("Draft"); + ComponentGlobal_NotifikasiBerhasil("Berhasil Masuk Draft", 2000); + router.back(); + } + + async function onDelete() { + setTabsStatus("Reject"); + ComponentGlobal_NotifikasiBerhasil("Berhasil Hapus Vote", 2000); + router.back(); + } + + return ( + <> + + {" "} + + + + + + Yakin menghapus vote ini ? + + + + + + + + ); +} diff --git a/src/app_modules/vote/detail/reject/layout.tsx b/src/app_modules/vote/detail/reject/layout.tsx new file mode 100644 index 00000000..29ff87f7 --- /dev/null +++ b/src/app_modules/vote/detail/reject/layout.tsx @@ -0,0 +1,19 @@ +"use client"; + +import { AppShell } from "@mantine/core"; +import React from "react"; +import ComponentVote_HeaderTamplate from "../../component/header_tamplate"; + +export default function LayoutVote_DetailReject({ + children, +}: { + children: React.ReactNode; +}) { + return ( + <> + }> + {children} + + + ); +} diff --git a/src/app_modules/vote/detail/review/index.tsx b/src/app_modules/vote/detail/review/index.tsx new file mode 100644 index 00000000..7060227e --- /dev/null +++ b/src/app_modules/vote/detail/review/index.tsx @@ -0,0 +1,56 @@ +"use client"; + +import { ComponentGlobal_NotifikasiBerhasil } from "@/app_modules/component_global/notif_global/notifikasi_berhasil"; +import { + Badge, + Button, + Card, + Center, + Grid, + Group, + Radio, + Stack, + Text, + Title, +} from "@mantine/core"; +import { useAtom } from "jotai"; +import moment from "moment"; +import { AppRouterInstance } from "next/dist/shared/lib/app-router-context.shared-runtime"; +import { useRouter } from "next/navigation"; +import { gs_vote_status } from "../../global_state"; +import ComponentVote_DetailData from "../../component/detail/detail_data"; + +export default function Vote_DetailReview() { + return ( + <> + + + + + + ); +} + +function ButtonAction() { + const router = useRouter(); + const [tabsStatus, setTabsStatus] = useAtom(gs_vote_status); + + async function onUpdate() { + setTabsStatus("Draft"); + ComponentGlobal_NotifikasiBerhasil("Berhasil Batalkan Review", 2000); + router.back(); + } + return ( + <> + + + ); +} diff --git a/src/app_modules/vote/detail/review/layout.tsx b/src/app_modules/vote/detail/review/layout.tsx new file mode 100644 index 00000000..7e506590 --- /dev/null +++ b/src/app_modules/vote/detail/review/layout.tsx @@ -0,0 +1,19 @@ +"use client"; + +import { AppShell } from "@mantine/core"; +import React from "react"; +import ComponentVote_HeaderTamplate from "../../component/header_tamplate"; + +export default function LayoutVote_DetailReview({ + children, +}: { + children: React.ReactNode; +}) { + return ( + <> + }> + {children} + + + ); +} diff --git a/src/app_modules/vote/detail/riwayat_saya/layout.tsx b/src/app_modules/vote/detail/riwayat_saya/layout.tsx new file mode 100644 index 00000000..83609c4d --- /dev/null +++ b/src/app_modules/vote/detail/riwayat_saya/layout.tsx @@ -0,0 +1,21 @@ +"use client"; + +import { AppShell } from "@mantine/core"; +import React from "react"; +import ComponentVote_HeaderTamplate from "../../component/header_tamplate"; + +export default function LayoutVote_DetailRiwayatSaya({ + children, +}: { + children: React.ReactNode; +}) { + return ( + <> + } + > + {children} + + + ); +} diff --git a/src/app_modules/vote/detail/riwayat_saya/page.tsx b/src/app_modules/vote/detail/riwayat_saya/page.tsx new file mode 100644 index 00000000..fe06d35b --- /dev/null +++ b/src/app_modules/vote/detail/riwayat_saya/page.tsx @@ -0,0 +1,5 @@ +"use client"; + +export default function Vote_DetailRiwayatSaya() { + return <> riwayat saya; +} diff --git a/src/app_modules/vote/detail/semua_riwayat/layout.tsx b/src/app_modules/vote/detail/semua_riwayat/layout.tsx new file mode 100644 index 00000000..759fb5a6 --- /dev/null +++ b/src/app_modules/vote/detail/semua_riwayat/layout.tsx @@ -0,0 +1,21 @@ +"use client"; + +import { AppShell } from "@mantine/core"; +import React from "react"; +import ComponentVote_HeaderTamplate from "../../component/header_tamplate"; + +export default function LayoutVote_DetailSemuaRiwayat({ + children, +}: { + children: React.ReactNode; +}) { + return ( + <> + } + > + {children} + + + ); +} diff --git a/src/app_modules/vote/detail/semua_riwayat/page.tsx b/src/app_modules/vote/detail/semua_riwayat/page.tsx new file mode 100644 index 00000000..c79bc3ec --- /dev/null +++ b/src/app_modules/vote/detail/semua_riwayat/page.tsx @@ -0,0 +1,18 @@ +"use client"; + +import { Stack } from "@mantine/core"; +import ComponentVote_DetailDataTanpaVote from "../../component/detail/detail_data_tanpa_vote"; +import ComponentVote_HasilVoting from "../../component/detail/hasil_voting"; +import ComponentVote_DaftarVoter from "../../component/detail/daftar_voter"; + +export default function Vote_DetailSemuaRiwayat() { + return ( + <> + + + + + + + ); +} diff --git a/src/app_modules/vote/edit/index.tsx b/src/app_modules/vote/edit/index.tsx new file mode 100644 index 00000000..fa2459c8 --- /dev/null +++ b/src/app_modules/vote/edit/index.tsx @@ -0,0 +1,119 @@ +"use client"; + +import { ComponentGlobal_NotifikasiBerhasil } from "@/app_modules/component_global/notif_global/notifikasi_berhasil"; +import { + Button, + Center, + Grid, + Group, + Stack, + Text, + TextInput, + Title, +} from "@mantine/core"; +import { DatePickerInput } from "@mantine/dates"; +import { useCounter } from "@mantine/hooks"; +import { IconHome } from "@tabler/icons-react"; +import { useAtom } from "jotai"; +import moment from "moment"; +import { AppRouterInstance } from "next/dist/shared/lib/app-router-context.shared-runtime"; +import { useRouter } from "next/navigation"; +import { useState } from "react"; +import { gs_vote_hotMenu, gs_vote_status } from "../global_state"; +import { RouterVote } from "@/app/lib/router_hipmi/router_vote"; + +export default function Vote_Edit() { + const router = useRouter(); + const [hotMenu, setHotMenu] = useAtom(gs_vote_hotMenu); + const [tabsStatus, setTabsStatus] = useAtom(gs_vote_status); + + return ( + <> + + {}} + /> + {}} + /> + + { + return moment(date).diff(Date.now(), "days") < 0; + }} + onChange={(val) => console.log(val)} + /> + + + + Daftar Voting + + + + + + + - + + + + {}} + /> + + + + + + - + + + + {}} + /> + + + + + + + + + ); +} + +async function onSave( + router: AppRouterInstance, + setHotMenu: any, + setTabsStatus: any +) { + ComponentGlobal_NotifikasiBerhasil("Berhasil Update"); + setHotMenu(1); + setTabsStatus("Draft"); + router.back(); +} diff --git a/src/app_modules/vote/edit/layout.tsx b/src/app_modules/vote/edit/layout.tsx new file mode 100644 index 00000000..6dc6905f --- /dev/null +++ b/src/app_modules/vote/edit/layout.tsx @@ -0,0 +1,19 @@ +"use client"; + +import { AppShell } from "@mantine/core"; +import React from "react"; +import ComponentVote_HeaderTamplate from "../component/header_tamplate"; + +export default function LayoutVote_Edit({ + children, +}: { + children: React.ReactNode; +}) { + return ( + <> + }> + {children} + + + ); +} diff --git a/src/app_modules/vote/global_state/index.ts b/src/app_modules/vote/global_state/index.ts new file mode 100644 index 00000000..29fe5ac5 --- /dev/null +++ b/src/app_modules/vote/global_state/index.ts @@ -0,0 +1,13 @@ +import { atomWithStorage } from "jotai/utils"; + +export const gs_vote_hotMenu = atomWithStorage("gs_vote_hotMenu", 0); + +export const gs_vote_status = atomWithStorage( + "gs_vote_status", + "Publish" +); + +export const gs_vote_riwayat = atomWithStorage( + "gs_vote_riwayat", + "Semua" +); diff --git a/src/app_modules/vote/index.tsx b/src/app_modules/vote/index.tsx new file mode 100644 index 00000000..dd913f3c --- /dev/null +++ b/src/app_modules/vote/index.tsx @@ -0,0 +1,55 @@ +import LayoutVote_Main from "./main/layout"; +import Vote_Beranda from "./main/beranda"; +import Vote_Status from "./main/status"; +import Vote_Kontribusi from "./main/kontribusi"; +import Vote_Riwayat from "./main/riwayat"; +import Vote_Splash from "./splash"; +import Vote_Create from "./create"; +import LayoutVote_Create from "./create/layout"; +import Vote_DetailPublish from "./detail/publish"; +import Vote_DetailReview from "./detail/review"; +import Vote_DetailDraft from "./detail/draft"; +import Vote_DetailReject from "./detail/reject"; +import LayoutVote_DetailPublish from "./detail/publish/layout"; +import LayoutVote_DetailReview from "./detail/review/layout"; +import LayoutVote_DetailDraft from "./detail/draft/layout"; +import LayoutVote_DetailReject from "./detail/reject/layout"; +import Vote_Edit from "./edit"; +import LayoutVote_Edit from "./edit/layout"; +import Vote_MainDetail from "./detail/main"; +import LayoutVote_MainDetail from "./detail/main/layout"; +import Vote_DetailKontribusi from "./detail/kontribusi"; +import LayoutVote_DetailKontribusi from "./detail/kontribusi/layout"; +import Vote_DetailSemuaRiwayat from "./detail/semua_riwayat/page"; +import LayoutVote_DetailSemuaRiwayat from "./detail/semua_riwayat/layout"; +import Vote_DetailRiwayatSaya from "./detail/riwayat_saya/page"; +import LayoutVote_DetailRiwayatSaya from "./detail/riwayat_saya/layout"; + +export { + LayoutVote_Main, + Vote_Beranda, + Vote_Status, + Vote_Kontribusi, + Vote_Riwayat, + Vote_Splash, + Vote_Create, + LayoutVote_Create, + Vote_DetailPublish, + Vote_DetailReview, + Vote_DetailDraft, + Vote_DetailReject, + LayoutVote_DetailPublish, + LayoutVote_DetailReview, + LayoutVote_DetailDraft, + LayoutVote_DetailReject, + Vote_Edit, + LayoutVote_Edit, + Vote_MainDetail, + LayoutVote_MainDetail, + Vote_DetailKontribusi, + LayoutVote_DetailKontribusi, + Vote_DetailSemuaRiwayat, + LayoutVote_DetailSemuaRiwayat, + Vote_DetailRiwayatSaya, + LayoutVote_DetailRiwayatSaya, +}; diff --git a/src/app_modules/vote/main/beranda.tsx b/src/app_modules/vote/main/beranda.tsx new file mode 100644 index 00000000..8fa9a92b --- /dev/null +++ b/src/app_modules/vote/main/beranda.tsx @@ -0,0 +1,57 @@ +"use client"; + +import { RouterProfile } from "@/app/lib/router_hipmi/router_katalog"; +import { RouterVote } from "@/app/lib/router_hipmi/router_vote"; +import { + ActionIcon, + Affix, + Avatar, + Badge, + Box, + Card, + Center, + Divider, + Grid, + Group, + Radio, + Stack, + Text, + Title, + rem, +} from "@mantine/core"; +import { IconCirclePlus } from "@tabler/icons-react"; +import moment from "moment"; +import { useRouter } from "next/navigation"; +import ComponentVote_CardViewPublish from "../component/card_view_publish"; + +export default function Vote_Beranda() { + const router = useRouter(); + + return ( + <> + + { + router.push(RouterVote.create); + }} + > + + + + + + {Array(5) + .fill(0) + .map((e, i) => ( + + + + ))} + + + ); +} diff --git a/src/app_modules/vote/main/kontribusi.tsx b/src/app_modules/vote/main/kontribusi.tsx new file mode 100644 index 00000000..50284dff --- /dev/null +++ b/src/app_modules/vote/main/kontribusi.tsx @@ -0,0 +1,40 @@ +"use client"; + +import { RouterVote } from "@/app/lib/router_hipmi/router_vote"; +import { + Avatar, + Badge, + Box, + Card, + Center, + Divider, + Grid, + Group, + Radio, + Stack, + Text, + Title, +} from "@mantine/core"; +import moment from "moment"; +import { useRouter } from "next/navigation"; +import ComponentVote_CardViewPublish from "../component/card_view_publish"; + +export default function Vote_Kontribusi() { + const router = useRouter(); + return ( + <> + + {Array(5) + .fill(0) + .map((e, i) => ( + + + + ))} + + + ); +} diff --git a/src/app_modules/vote/main/layout.tsx b/src/app_modules/vote/main/layout.tsx new file mode 100644 index 00000000..bd8c9461 --- /dev/null +++ b/src/app_modules/vote/main/layout.tsx @@ -0,0 +1,107 @@ +"use client"; + +import { + ActionIcon, + AppShell, + Center, + Footer, + Grid, + Stack, + Text, +} from "@mantine/core"; +import React, { useState } from "react"; +import ComponentVote_HeaderTamplate from "../component/header_tamplate"; +import { useRouter } from "next/navigation"; +import { RouterVote } from "@/app/lib/router_hipmi/router_vote"; +import { + IconClick, + IconHistory, + IconHome, + IconReservedLine, +} from "@tabler/icons-react"; +import { gs_vote_hotMenu } from "../global_state"; +import { useAtom } from "jotai"; +import { RouterHome } from "@/app/lib/router_hipmi/router_home"; + +export default function LayoutVote_Main({ + children, +}: { + children: React.ReactNode; +}) { + const router = useRouter(); + const [hotMenu, setHotMenu] = useAtom(gs_vote_hotMenu); + + const listFooter = [ + { + id: 1, + name: "Beranda", + path: RouterVote.beranda, + icon: , + }, + + { + id: 2, + name: "Status", + path: RouterVote.status, + icon: , + }, + { + id: 3, + name: "Kontribusi", + path: RouterVote.kontribusi, + icon: , + }, + { + id: 4, + name: "Riwayat", + path: RouterVote.riwayat, + icon: , + }, + ]; + + return ( + <> + + } + footer={ +
+ + {listFooter.map((e, i) => ( + { + router.replace(e.path); + setHotMenu(i); + }} + > +
+ + + {e.icon} + + + {e.name} + + +
+
+ ))} +
+
+ } + > + {children} +
+ + ); +} diff --git a/src/app_modules/vote/main/riwayat/index.tsx b/src/app_modules/vote/main/riwayat/index.tsx new file mode 100644 index 00000000..9885b9d6 --- /dev/null +++ b/src/app_modules/vote/main/riwayat/index.tsx @@ -0,0 +1,59 @@ +"use client"; + +import { Stack, Tabs } from "@mantine/core"; +import { useState } from "react"; +import Vote_SemuaRiwayat from "./semua"; +import Vote_RiwayatSaya from "./saya"; +import { useAtom } from "jotai"; +import { gs_vote_riwayat } from "../../global_state"; + +export default function Vote_Riwayat() { + const [tabsRiwayat, setTabsRiwayat] = useAtom(gs_vote_riwayat) + const listTabs = [ + { + id: 1, + path: , + value: "Semua", + label: "Semua Riwayat", + }, + { + id: 2, + path: , + value: "Saya", + label: "Riwayat Saya", + }, + ]; + + return ( + <> + + + + {listTabs.map((e, i) => ( + + {e.label} + + ))} + + {listTabs.map((e) => ( + + {e.path} + + ))} + + + + ); +} diff --git a/src/app_modules/vote/main/riwayat/saya.tsx b/src/app_modules/vote/main/riwayat/saya.tsx new file mode 100644 index 00000000..86d5502c --- /dev/null +++ b/src/app_modules/vote/main/riwayat/saya.tsx @@ -0,0 +1,39 @@ +"use client"; + +import { RouterVote } from "@/app/lib/router_hipmi/router_vote"; +import { + Stack, + Card, + Grid, + Avatar, + Divider, + Title, + Badge, + Group, + Radio, + Center, + Text, + Box, +} from "@mantine/core"; +import moment from "moment"; +import { useRouter } from "next/navigation"; +import ComponentVote_CardViewPublish from "../../component/card_view_publish"; + +export default function Vote_RiwayatSaya() { + const router = useRouter(); + return ( + <> + + {Array(5) + .fill(0) + .map((e, i) => ( + + + + ))} + + + ); +} diff --git a/src/app_modules/vote/main/riwayat/semua.tsx b/src/app_modules/vote/main/riwayat/semua.tsx new file mode 100644 index 00000000..ff5b8b6f --- /dev/null +++ b/src/app_modules/vote/main/riwayat/semua.tsx @@ -0,0 +1,39 @@ +"use client"; + +import { RouterVote } from "@/app/lib/router_hipmi/router_vote"; +import { + Stack, + Card, + Grid, + Avatar, + Divider, + Title, + Badge, + Group, + Radio, + Center, + Text, + Box, +} from "@mantine/core"; +import moment from "moment"; +import { useRouter } from "next/navigation"; +import ComponentVote_CardViewPublish from "../../component/card_view_publish"; + +export default function Vote_SemuaRiwayat() { + const router = useRouter(); + return ( + <> + + {Array(5) + .fill(0) + .map((e, i) => ( + + + + ))} + + + ); +} diff --git a/src/app_modules/vote/main/status/draft.tsx b/src/app_modules/vote/main/status/draft.tsx new file mode 100644 index 00000000..9d3a5528 --- /dev/null +++ b/src/app_modules/vote/main/status/draft.tsx @@ -0,0 +1,12 @@ +"use client" + +import { RouterVote } from "@/app/lib/router_hipmi/router_vote"; +import ComponentVote_CardViewStatus from "../../component/card_view_status"; + +export default function Vote_StatusDraft() { + return ( + <> + + + ); +} diff --git a/src/app_modules/vote/main/status/index.tsx b/src/app_modules/vote/main/status/index.tsx new file mode 100644 index 00000000..17aaa8c1 --- /dev/null +++ b/src/app_modules/vote/main/status/index.tsx @@ -0,0 +1,70 @@ +"use client"; + +import { Stack, Tabs } from "@mantine/core"; +import { useAtom } from "jotai"; +import { useRouter } from "next/navigation"; +import { useState } from "react"; +import { gs_vote_status } from "../../global_state"; +import Vote_StatusPublish from "./publish"; +import Vote_StatusReview from "./review"; +import Vote_StatusDraft from "./draft"; +import Vote_StatusReject from "./reject"; + +export default function Vote_Status() { + const router = useRouter(); + const [tabsStatus, setTabsStatus] = useAtom(gs_vote_status); + const listTabs = [ + { + id: 1, + path: , + value: "Publish", + }, + { + id: 2, + path: , + value: "Review", + }, + { + id: 3, + path: , + value: "Draft", + }, + { + id: 4, + path: , + value: "Reject", + }, + ]; + return ( + <> + + + + {listTabs.map((e) => ( + + {e.value} + + ))} + + {listTabs.map((e) => ( + + {e.path} + + ))} + + + + ); +} diff --git a/src/app_modules/vote/main/status/publish.tsx b/src/app_modules/vote/main/status/publish.tsx new file mode 100644 index 00000000..630076a2 --- /dev/null +++ b/src/app_modules/vote/main/status/publish.tsx @@ -0,0 +1,80 @@ +"use client"; + +import { RouterVote } from "@/app/lib/router_hipmi/router_vote"; +import { + Avatar, + Badge, + Card, + Center, + Divider, + Grid, + Group, + Radio, + Skeleton, + Stack, + Text, + Title, +} from "@mantine/core"; +import moment from "moment"; +import { useRouter } from "next/navigation"; + +export default function Vote_StatusPublish() { + const router = useRouter(); + return ( + <> + { + router.push(RouterVote.detail_publish); + }} + > + {/* Isi deskripsi */} + + + Voting Pemilihan Tempat Makan + + + + {new Date().toLocaleDateString(["id-ID"], { + dateStyle: "medium", + })} + + - + + {new Date( + moment(Date.now()).add(10, "days").calendar() + ).toLocaleDateString(["id-ID"], { + dateStyle: "medium", + })} + + + + + + + + Voting A + + 2 + + + + + + Voting B + + 3 + + + + + + + + + + ); +} diff --git a/src/app_modules/vote/main/status/reject.tsx b/src/app_modules/vote/main/status/reject.tsx new file mode 100644 index 00000000..a27e99e8 --- /dev/null +++ b/src/app_modules/vote/main/status/reject.tsx @@ -0,0 +1,12 @@ +"use client"; + +import { RouterVote } from "@/app/lib/router_hipmi/router_vote"; +import ComponentVote_CardViewStatus from "../../component/card_view_status"; + +export default function Vote_StatusReject() { + return ( + <> + + + ); +} diff --git a/src/app_modules/vote/main/status/review.tsx b/src/app_modules/vote/main/status/review.tsx new file mode 100644 index 00000000..9136da72 --- /dev/null +++ b/src/app_modules/vote/main/status/review.tsx @@ -0,0 +1,12 @@ +"use client"; + +import { RouterVote } from "@/app/lib/router_hipmi/router_vote"; +import ComponentVote_CardViewStatus from "../../component/card_view_status"; + +export default function Vote_StatusReview() { + return ( + <> + + + ); +} diff --git a/src/app_modules/vote/splash/index.tsx b/src/app_modules/vote/splash/index.tsx new file mode 100644 index 00000000..6783a262 --- /dev/null +++ b/src/app_modules/vote/splash/index.tsx @@ -0,0 +1,30 @@ +"use client"; + +import { RouterVote } from "@/app/lib/router_hipmi/router_vote"; +import { Center, Image, Paper, Stack, Text } from "@mantine/core"; +import { useShallowEffect } from "@mantine/hooks"; +import { useAtom } from "jotai"; +import { useRouter } from "next/navigation"; +import { gs_vote_hotMenu } from "../global_state"; + +export default function Vote_Splash() { + const router = useRouter(); + const [hotMenu, setHotMenu] = useAtom(gs_vote_hotMenu); + + useShallowEffect(() => { + setTimeout(() => { + setHotMenu(0) + router.replace(RouterVote.beranda); + }, 2000); + }, []); + + return ( + <> +
+ + logo + +
+ + ); +} diff --git a/src/app_modules_admin/READ_ADMIN.md b/src/app_modules_admin/READ_ADMIN.md deleted file mode 100644 index c31073a5..00000000 --- a/src/app_modules_admin/READ_ADMIN.md +++ /dev/null @@ -1 +0,0 @@ -# Admin here \ No newline at end of file diff --git a/src/app_modules_admin/main/index.ts b/src/app_modules_admin/main/index.ts deleted file mode 100644 index 23bb16c0..00000000 --- a/src/app_modules_admin/main/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -import AdminMain_Dashboard from "./main"; -import AdminMain_Layout from "./layout"; - -export { AdminMain_Dashboard, AdminMain_Layout }; diff --git a/src/app_modules_admin/main/layout.tsx b/src/app_modules_admin/main/layout.tsx deleted file mode 100644 index 688aceb1..00000000 --- a/src/app_modules_admin/main/layout.tsx +++ /dev/null @@ -1,178 +0,0 @@ -"use client"; - -import { - AppShell, - Navbar, - MediaQuery, - Aside, - Footer, - Header, - Burger, - Text, - useMantineTheme, - Box, - NavLink, - Divider, - Group, - Title, - ActionIcon, -} from "@mantine/core"; -import { IconLogout } from "@tabler/icons-react"; -import _ from "lodash"; -import { useRouter } from "next/navigation"; -import React, { useState } from "react"; -import toast from "react-simple-toasts"; - -export default function AdminMain_Layout({ - children, -}: { - children: React.ReactNode; -}) { - const router = useRouter(); - const theme = useMantineTheme(); - const [opened, setOpened] = useState(false); - const [active, setActive] = useState(0); - - const listAdminPage = [ - { - id: 1, - name: "Dashboard", - // route: RouterAdminDashboard.main_admin, - child: [ - - ], - }, - { - id: 2, - name: "Investasi", - // route: RouterAdminInvestasi.main_investasi, - child: [ - { - id: 1, - name: "Child Investasi", - }, - ], - }, - { - id: 3, - name: "Donasi", - // route: RouterAdminDonasi.main_donasi, - child: [ - { - id: 1, - name: "Child Don 1", - }, - { - id: 1, - name: "Child DOn 2", - }, - ], - }, - { - id: 4, - name: "Event", - // route: RouterAdminEvent.main_event, - child: [ - { - id: 1, - name: "Child Event", - }, - ], - }, - ]; - - return ( - <> - - - - } - header={ -
- {/* Mobile View */} - - - setOpened((o) => !o)} - size="sm" - color={theme.colors.gray[6]} - mr="xl" - /> - Dashboard Admin - router.push(RouterHome.main_home)} - > - {/* */} - - - - - - {/* Web View */} - - - Dashboard Admin - HIPMI - {/* - {listAdminPage.map((e) => ( - router.push(e.route)}> - {e.name} - - ))} - */} - {/* */} - - - -
- } - > - {children} -
- - ); -} diff --git a/src/app_modules_admin/main/main/index.tsx b/src/app_modules_admin/main/main/index.tsx deleted file mode 100644 index 14a5fcdc..00000000 --- a/src/app_modules_admin/main/main/index.tsx +++ /dev/null @@ -1,8 +0,0 @@ -"use client" - -export default function AdminMain_Dashboard(){ - return <> - ini main - - -} \ No newline at end of file From 0dd8e287f4918053f7934e36aa117d1793458f17 Mon Sep 17 00:00:00 2001 From: Bagasbanuna02 Date: Fri, 9 Feb 2024 17:50:38 +0800 Subject: [PATCH 02/14] # Voting ## feat - Create function - Get list by status id - Get one vote by id ### No issuue --- prisma/schema.prisma | 42 ++++ src/app/api/seeder/route.ts | 16 ++ src/app/dev/admin/vote/child/riwayat/page.tsx | 9 + .../admin/vote/child/table_publish/page.tsx | 7 + .../admin/vote/child/table_reject/page.tsx | 8 + .../admin/vote/child/table_review/page.tsx | 9 + src/app/dev/admin/vote/main/page.tsx | 9 + src/app/dev/vote/create/layout.tsx | 2 +- src/app/dev/vote/create/page.tsx | 2 +- src/app/dev/vote/detail/draft/layout.tsx | 2 +- src/app/dev/vote/detail/draft/page.tsx | 2 +- src/app/dev/vote/detail/kontribusi/layout.tsx | 2 +- src/app/dev/vote/detail/kontribusi/page.tsx | 2 +- src/app/dev/vote/detail/main/layout.tsx | 2 +- src/app/dev/vote/detail/main/page.tsx | 2 +- src/app/dev/vote/detail/publish/layout.tsx | 2 +- src/app/dev/vote/detail/publish/page.tsx | 2 +- src/app/dev/vote/detail/reject/layout.tsx | 2 +- src/app/dev/vote/detail/reject/page.tsx | 2 +- .../vote/detail/review/{ => [id]}/layout.tsx | 2 +- src/app/dev/vote/detail/review/[id]/page.tsx | 13 + src/app/dev/vote/detail/review/page.tsx | 9 - .../dev/vote/detail/riwayat_saya/layout.tsx | 2 +- src/app/dev/vote/detail/riwayat_saya/page.tsx | 2 +- .../dev/vote/detail/semua_riwayat/layout.tsx | 2 +- .../dev/vote/detail/semua_riwayat/page.tsx | 2 +- src/app/dev/vote/edit/layout.tsx | 2 +- src/app/dev/vote/edit/page.tsx | 2 +- src/app/dev/vote/main/beranda/page.tsx | 2 +- src/app/dev/vote/main/kontribusi/page.tsx | 2 +- src/app/dev/vote/main/layout.tsx | 2 +- src/app/dev/vote/main/riwayat/page.tsx | 2 +- src/app/dev/vote/main/status/page.tsx | 15 +- src/app/dev/vote/splash/page.tsx | 2 +- src/app/lib/router_admin/router_admin_vote.ts | 8 + src/app/lib/router_hipmi/router_vote.ts | 2 +- src/app/makuro/_server/makuro_view.tsx | 53 ++++- .../{main_dashboard/main => }/layout.tsx | 25 +- .../{main_dashboard/main => }/list_page.ts | 43 +++- .../admin/main_dashboard/index.tsx | 2 +- .../admin/voting/child/riwayat/index.tsx | 177 ++++++++++++++ .../voting/child/table_publish/index.tsx | 180 ++++++++++++++ .../admin/voting/child/table_reject/index.tsx | 176 ++++++++++++++ .../admin/voting/child/table_review/index.tsx | 164 +++++++++++++ src/app_modules/admin/voting/index.ts | 13 + src/app_modules/admin/voting/main/index.tsx | 96 ++++++++ src/app_modules/vote/create/index.tsx | 123 ---------- src/app_modules/vote/main/status/review.tsx | 12 - .../component/card_view_publish.tsx | 0 .../component/card_view_status.tsx | 26 +- .../component/detail/daftar_voter.tsx | 0 .../component/detail/detail_data.tsx | 28 +-- .../detail/detail_data_tanpa_vote.tsx | 0 .../component/detail/hasil_voting.tsx | 0 .../component/header_tamplate.tsx | 0 src/app_modules/voting/create/index.tsx | 224 ++++++++++++++++++ .../{vote => voting}/create/layout.tsx | 0 .../{vote => voting}/detail/draft/index.tsx | 0 .../{vote => voting}/detail/draft/layout.tsx | 0 .../detail/kontribusi/index.tsx | 0 .../detail/kontribusi/layout.tsx | 0 .../{vote => voting}/detail/main/index.tsx | 0 .../{vote => voting}/detail/main/layout.tsx | 0 .../{vote => voting}/detail/publish/index.tsx | 0 .../detail/publish/layout.tsx | 0 .../{vote => voting}/detail/reject/index.tsx | 0 .../{vote => voting}/detail/reject/layout.tsx | 0 .../{vote => voting}/detail/review/index.tsx | 4 +- .../{vote => voting}/detail/review/layout.tsx | 0 .../detail/riwayat_saya/layout.tsx | 0 .../detail/riwayat_saya/page.tsx | 0 .../detail/semua_riwayat/layout.tsx | 0 .../detail/semua_riwayat/page.tsx | 0 .../{vote => voting}/edit/index.tsx | 0 .../{vote => voting}/edit/layout.tsx | 0 .../voting/fun/create/create_vote.ts | 41 ++++ .../fun/get/get_list_status_by_status_id.ts | 52 ++++ .../voting/fun/get/get_one_by_id.ts | 27 +++ .../{vote => voting}/global_state/index.ts | 0 src/app_modules/{vote => voting}/index.tsx | 0 .../{vote => voting}/main/beranda.tsx | 0 .../{vote => voting}/main/kontribusi.tsx | 0 .../{vote => voting}/main/layout.tsx | 0 .../{vote => voting}/main/riwayat/index.tsx | 0 .../{vote => voting}/main/riwayat/saya.tsx | 0 .../{vote => voting}/main/riwayat/semua.tsx | 0 .../{vote => voting}/main/status/draft.tsx | 0 .../{vote => voting}/main/status/index.tsx | 14 +- .../{vote => voting}/main/status/publish.tsx | 1 + .../{vote => voting}/main/status/reject.tsx | 0 src/app_modules/voting/main/status/review.tsx | 27 +++ src/app_modules/voting/model/interface.ts | 25 ++ .../{vote => voting}/splash/index.tsx | 0 src/bin/seeder/voting/master_status.json | 18 ++ 94 files changed, 1522 insertions(+), 224 deletions(-) create mode 100644 src/app/dev/admin/vote/child/riwayat/page.tsx create mode 100644 src/app/dev/admin/vote/child/table_publish/page.tsx create mode 100644 src/app/dev/admin/vote/child/table_reject/page.tsx create mode 100644 src/app/dev/admin/vote/child/table_review/page.tsx create mode 100644 src/app/dev/admin/vote/main/page.tsx rename src/app/dev/vote/detail/review/{ => [id]}/layout.tsx (76%) create mode 100644 src/app/dev/vote/detail/review/[id]/page.tsx delete mode 100644 src/app/dev/vote/detail/review/page.tsx create mode 100644 src/app/lib/router_admin/router_admin_vote.ts rename src/app_modules/admin/{main_dashboard/main => }/layout.tsx (89%) rename src/app_modules/admin/{main_dashboard/main => }/list_page.ts (61%) create mode 100644 src/app_modules/admin/voting/child/riwayat/index.tsx create mode 100644 src/app_modules/admin/voting/child/table_publish/index.tsx create mode 100644 src/app_modules/admin/voting/child/table_reject/index.tsx create mode 100644 src/app_modules/admin/voting/child/table_review/index.tsx create mode 100644 src/app_modules/admin/voting/index.ts create mode 100644 src/app_modules/admin/voting/main/index.tsx delete mode 100644 src/app_modules/vote/create/index.tsx delete mode 100644 src/app_modules/vote/main/status/review.tsx rename src/app_modules/{vote => voting}/component/card_view_publish.tsx (100%) rename src/app_modules/{vote => voting}/component/card_view_status.tsx (71%) rename src/app_modules/{vote => voting}/component/detail/daftar_voter.tsx (100%) rename src/app_modules/{vote => voting}/component/detail/detail_data.tsx (65%) rename src/app_modules/{vote => voting}/component/detail/detail_data_tanpa_vote.tsx (100%) rename src/app_modules/{vote => voting}/component/detail/hasil_voting.tsx (100%) rename src/app_modules/{vote => voting}/component/header_tamplate.tsx (100%) create mode 100644 src/app_modules/voting/create/index.tsx rename src/app_modules/{vote => voting}/create/layout.tsx (100%) rename src/app_modules/{vote => voting}/detail/draft/index.tsx (100%) rename src/app_modules/{vote => voting}/detail/draft/layout.tsx (100%) rename src/app_modules/{vote => voting}/detail/kontribusi/index.tsx (100%) rename src/app_modules/{vote => voting}/detail/kontribusi/layout.tsx (100%) rename src/app_modules/{vote => voting}/detail/main/index.tsx (100%) rename src/app_modules/{vote => voting}/detail/main/layout.tsx (100%) rename src/app_modules/{vote => voting}/detail/publish/index.tsx (100%) rename src/app_modules/{vote => voting}/detail/publish/layout.tsx (100%) rename src/app_modules/{vote => voting}/detail/reject/index.tsx (100%) rename src/app_modules/{vote => voting}/detail/reject/layout.tsx (100%) rename src/app_modules/{vote => voting}/detail/review/index.tsx (89%) rename src/app_modules/{vote => voting}/detail/review/layout.tsx (100%) rename src/app_modules/{vote => voting}/detail/riwayat_saya/layout.tsx (100%) rename src/app_modules/{vote => voting}/detail/riwayat_saya/page.tsx (100%) rename src/app_modules/{vote => voting}/detail/semua_riwayat/layout.tsx (100%) rename src/app_modules/{vote => voting}/detail/semua_riwayat/page.tsx (100%) rename src/app_modules/{vote => voting}/edit/index.tsx (100%) rename src/app_modules/{vote => voting}/edit/layout.tsx (100%) create mode 100644 src/app_modules/voting/fun/create/create_vote.ts create mode 100644 src/app_modules/voting/fun/get/get_list_status_by_status_id.ts create mode 100644 src/app_modules/voting/fun/get/get_one_by_id.ts rename src/app_modules/{vote => voting}/global_state/index.ts (100%) rename src/app_modules/{vote => voting}/index.tsx (100%) rename src/app_modules/{vote => voting}/main/beranda.tsx (100%) rename src/app_modules/{vote => voting}/main/kontribusi.tsx (100%) rename src/app_modules/{vote => voting}/main/layout.tsx (100%) rename src/app_modules/{vote => voting}/main/riwayat/index.tsx (100%) rename src/app_modules/{vote => voting}/main/riwayat/saya.tsx (100%) rename src/app_modules/{vote => voting}/main/riwayat/semua.tsx (100%) rename src/app_modules/{vote => voting}/main/status/draft.tsx (100%) rename src/app_modules/{vote => voting}/main/status/index.tsx (86%) rename src/app_modules/{vote => voting}/main/status/publish.tsx (97%) rename src/app_modules/{vote => voting}/main/status/reject.tsx (100%) create mode 100644 src/app_modules/voting/main/status/review.tsx create mode 100644 src/app_modules/voting/model/interface.ts rename src/app_modules/{vote => voting}/splash/index.tsx (100%) create mode 100644 src/bin/seeder/voting/master_status.json diff --git a/prisma/schema.prisma b/prisma/schema.prisma index ae572e78..f4b75c3a 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -28,6 +28,7 @@ model User { Donasi_Notif Donasi_Notif[] Event Event[] Event_Peserta Event_Peserta[] + Voting Voting[] } model MasterUserRole { @@ -532,3 +533,44 @@ model Event_Peserta { User User? @relation(fields: [userId], references: [id]) userId String? } + +// ========================================= VOTING ========================================= // + +model Voting { + id String @id @default(cuid()) + isActive Boolean @default(true) + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + + title String + deskripsi String + awalVote DateTime + akhirVote DateTime + catatan String? + + Author User @relation(fields: [authorId], references: [id]) + authorId String + Voting_Status Voting_Status? @relation(fields: [voting_StatusId], references: [id]) + voting_StatusId String? @default("2") + Voting_DaftarNamaVote Voting_DaftarNamaVote[] +} + +model Voting_Status { + id String @id @default(cuid()) + name String + isActive Boolean @default(true) + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + Voting Voting[] +} + +model Voting_DaftarNamaVote { + id String @id @default(cuid()) + value String + isActive Boolean @default(true) + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + + Voting Voting? @relation(fields: [votingId], references: [id]) + votingId String? +} diff --git a/src/app/api/seeder/route.ts b/src/app/api/seeder/route.ts index 2fa636a9..9d67393f 100644 --- a/src/app/api/seeder/route.ts +++ b/src/app/api/seeder/route.ts @@ -17,6 +17,7 @@ import donasi_namaBank from "../../../bin/seeder/donasi/master_bank.json"; import donasi_status_invoice from "../../../bin/seeder/donasi/master_status_invoice.json"; import event_status from "../../../bin/seeder/event/master_status.json"; import event_tipe_acara from "../../../bin/seeder/event/master_tipe_acara.json"; +import voting_status from "../../../bin/seeder/voting/master_status.json"; export async function GET(req: Request) { const dev = new URL(req.url).searchParams.get("dev"); @@ -296,6 +297,21 @@ export async function GET(req: Request) { }); } + for (let v of voting_status) { + await prisma.voting_Status.upsert({ + where: { + id: v.id, + }, + create: { + id: v.id, + name: v.name, + }, + update: { + name: v.name, + }, + }); + } + return NextResponse.json({ success: true }); } diff --git a/src/app/dev/admin/vote/child/riwayat/page.tsx b/src/app/dev/admin/vote/child/riwayat/page.tsx new file mode 100644 index 00000000..ffd9aea1 --- /dev/null +++ b/src/app/dev/admin/vote/child/riwayat/page.tsx @@ -0,0 +1,9 @@ +import { AdminVote_Riwayat } from "@/app_modules/admin/voting"; + +export default async function Page() { + return ( + <> + + + ); +} diff --git a/src/app/dev/admin/vote/child/table_publish/page.tsx b/src/app/dev/admin/vote/child/table_publish/page.tsx new file mode 100644 index 00000000..f5787e5b --- /dev/null +++ b/src/app/dev/admin/vote/child/table_publish/page.tsx @@ -0,0 +1,7 @@ +import { AdminVote_TablePublish } from "@/app_modules/admin/voting"; + +export default async function Page() { + return<> + + +} \ No newline at end of file diff --git a/src/app/dev/admin/vote/child/table_reject/page.tsx b/src/app/dev/admin/vote/child/table_reject/page.tsx new file mode 100644 index 00000000..453f9120 --- /dev/null +++ b/src/app/dev/admin/vote/child/table_reject/page.tsx @@ -0,0 +1,8 @@ +import { AdminVote_TableReject } from "@/app_modules/admin/voting"; + + +export default async function Page() { + return<> + + +} \ No newline at end of file diff --git a/src/app/dev/admin/vote/child/table_review/page.tsx b/src/app/dev/admin/vote/child/table_review/page.tsx new file mode 100644 index 00000000..0e0b9cf0 --- /dev/null +++ b/src/app/dev/admin/vote/child/table_review/page.tsx @@ -0,0 +1,9 @@ +import { AdminVote_TableReview } from "@/app_modules/admin/voting"; + +export default async function Page() { + return ( + <> + + + ); +} diff --git a/src/app/dev/admin/vote/main/page.tsx b/src/app/dev/admin/vote/main/page.tsx new file mode 100644 index 00000000..a10f1d26 --- /dev/null +++ b/src/app/dev/admin/vote/main/page.tsx @@ -0,0 +1,9 @@ +import { AdminVote_Main } from "@/app_modules/admin/voting"; + +export default async function Page() { + return ( + <> + + + ); +} diff --git a/src/app/dev/vote/create/layout.tsx b/src/app/dev/vote/create/layout.tsx index 3152ab64..0260b455 100644 --- a/src/app/dev/vote/create/layout.tsx +++ b/src/app/dev/vote/create/layout.tsx @@ -1,4 +1,4 @@ -import { LayoutVote_Create } from "@/app_modules/vote"; +import { LayoutVote_Create } from "@/app_modules/voting"; import React from "react"; export default async function Layout({ diff --git a/src/app/dev/vote/create/page.tsx b/src/app/dev/vote/create/page.tsx index a1d28226..8b5db090 100644 --- a/src/app/dev/vote/create/page.tsx +++ b/src/app/dev/vote/create/page.tsx @@ -1,4 +1,4 @@ -import { Vote_Create } from "@/app_modules/vote"; +import { Vote_Create } from "@/app_modules/voting"; export default async function Page() { return ( diff --git a/src/app/dev/vote/detail/draft/layout.tsx b/src/app/dev/vote/detail/draft/layout.tsx index 41ac258c..e8b9014f 100644 --- a/src/app/dev/vote/detail/draft/layout.tsx +++ b/src/app/dev/vote/detail/draft/layout.tsx @@ -1,4 +1,4 @@ -import { LayoutVote_DetailDraft } from "@/app_modules/vote"; +import { LayoutVote_DetailDraft } from "@/app_modules/voting"; import React from "react"; export default function Layout({ children }: { children: React.ReactNode }) { diff --git a/src/app/dev/vote/detail/draft/page.tsx b/src/app/dev/vote/detail/draft/page.tsx index e7808b60..29871752 100644 --- a/src/app/dev/vote/detail/draft/page.tsx +++ b/src/app/dev/vote/detail/draft/page.tsx @@ -1,4 +1,4 @@ -import { Vote_DetailDraft } from "@/app_modules/vote"; +import { Vote_DetailDraft } from "@/app_modules/voting"; export default function Page() { return ( diff --git a/src/app/dev/vote/detail/kontribusi/layout.tsx b/src/app/dev/vote/detail/kontribusi/layout.tsx index ca76dac8..00cb01fb 100644 --- a/src/app/dev/vote/detail/kontribusi/layout.tsx +++ b/src/app/dev/vote/detail/kontribusi/layout.tsx @@ -1,4 +1,4 @@ -import { LayoutVote_DetailKontribusi } from "@/app_modules/vote"; +import { LayoutVote_DetailKontribusi } from "@/app_modules/voting"; import React from "react"; export default async function Layout({ diff --git a/src/app/dev/vote/detail/kontribusi/page.tsx b/src/app/dev/vote/detail/kontribusi/page.tsx index 06ad3e1d..5a72290c 100644 --- a/src/app/dev/vote/detail/kontribusi/page.tsx +++ b/src/app/dev/vote/detail/kontribusi/page.tsx @@ -1,4 +1,4 @@ -import { Vote_DetailKontribusi } from "@/app_modules/vote"; +import { Vote_DetailKontribusi } from "@/app_modules/voting"; export default async function Page() { return ( diff --git a/src/app/dev/vote/detail/main/layout.tsx b/src/app/dev/vote/detail/main/layout.tsx index 6e978bef..84fa8d5f 100644 --- a/src/app/dev/vote/detail/main/layout.tsx +++ b/src/app/dev/vote/detail/main/layout.tsx @@ -1,4 +1,4 @@ -import { LayoutVote_MainDetail } from "@/app_modules/vote"; +import { LayoutVote_MainDetail } from "@/app_modules/voting"; import React from "react"; export default async function Layout({ diff --git a/src/app/dev/vote/detail/main/page.tsx b/src/app/dev/vote/detail/main/page.tsx index fc04ad05..e7ea2a44 100644 --- a/src/app/dev/vote/detail/main/page.tsx +++ b/src/app/dev/vote/detail/main/page.tsx @@ -1,4 +1,4 @@ -import { Vote_MainDetail } from "@/app_modules/vote"; +import { Vote_MainDetail } from "@/app_modules/voting"; export default async function Page(){ return<> diff --git a/src/app/dev/vote/detail/publish/layout.tsx b/src/app/dev/vote/detail/publish/layout.tsx index 6730430a..d76bb437 100644 --- a/src/app/dev/vote/detail/publish/layout.tsx +++ b/src/app/dev/vote/detail/publish/layout.tsx @@ -1,4 +1,4 @@ -import { LayoutVote_DetailPublish } from "@/app_modules/vote"; +import { LayoutVote_DetailPublish } from "@/app_modules/voting"; import React from "react"; export default function Layout({ children }: { children: React.ReactNode }) { diff --git a/src/app/dev/vote/detail/publish/page.tsx b/src/app/dev/vote/detail/publish/page.tsx index 5123e98a..5b51553f 100644 --- a/src/app/dev/vote/detail/publish/page.tsx +++ b/src/app/dev/vote/detail/publish/page.tsx @@ -1,4 +1,4 @@ -import { Vote_DetailPublish } from "@/app_modules/vote"; +import { Vote_DetailPublish } from "@/app_modules/voting"; export default function Page(){ return <> diff --git a/src/app/dev/vote/detail/reject/layout.tsx b/src/app/dev/vote/detail/reject/layout.tsx index 469f132a..efc4e488 100644 --- a/src/app/dev/vote/detail/reject/layout.tsx +++ b/src/app/dev/vote/detail/reject/layout.tsx @@ -1,4 +1,4 @@ -import { LayoutVote_DetailReject } from "@/app_modules/vote"; +import { LayoutVote_DetailReject } from "@/app_modules/voting"; import React from "react"; export default async function Layout({children}: {children: React.ReactNode}) { diff --git a/src/app/dev/vote/detail/reject/page.tsx b/src/app/dev/vote/detail/reject/page.tsx index 0d0bd20c..e68681d4 100644 --- a/src/app/dev/vote/detail/reject/page.tsx +++ b/src/app/dev/vote/detail/reject/page.tsx @@ -1,4 +1,4 @@ -import { Vote_DetailReject } from "@/app_modules/vote"; +import { Vote_DetailReject } from "@/app_modules/voting"; export default async function Page() { return <> diff --git a/src/app/dev/vote/detail/review/layout.tsx b/src/app/dev/vote/detail/review/[id]/layout.tsx similarity index 76% rename from src/app/dev/vote/detail/review/layout.tsx rename to src/app/dev/vote/detail/review/[id]/layout.tsx index b749c3df..956ee61d 100644 --- a/src/app/dev/vote/detail/review/layout.tsx +++ b/src/app/dev/vote/detail/review/[id]/layout.tsx @@ -1,4 +1,4 @@ -import { LayoutVote_DetailReview } from "@/app_modules/vote"; +import { LayoutVote_DetailReview } from "@/app_modules/voting"; import React from "react"; export default function Layout({ children }: { children: React.ReactNode }) { diff --git a/src/app/dev/vote/detail/review/[id]/page.tsx b/src/app/dev/vote/detail/review/[id]/page.tsx new file mode 100644 index 00000000..47a6b238 --- /dev/null +++ b/src/app/dev/vote/detail/review/[id]/page.tsx @@ -0,0 +1,13 @@ +import { Vote_DetailReview } from "@/app_modules/voting"; +import { Vote_getOnebyId } from "@/app_modules/voting/fun/get/get_one_by_id"; + +export default async function Page({ params }: { params: { id: string } }) { + let voteId = params.id; + const dataVote = await Vote_getOnebyId(voteId); + + return ( + <> + + + ); +} diff --git a/src/app/dev/vote/detail/review/page.tsx b/src/app/dev/vote/detail/review/page.tsx deleted file mode 100644 index e2b45bf3..00000000 --- a/src/app/dev/vote/detail/review/page.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import { Vote_DetailReview } from "@/app_modules/vote"; - -export default function Page() { - return ( - <> - - - ); -} diff --git a/src/app/dev/vote/detail/riwayat_saya/layout.tsx b/src/app/dev/vote/detail/riwayat_saya/layout.tsx index 4d17c867..cc8023df 100644 --- a/src/app/dev/vote/detail/riwayat_saya/layout.tsx +++ b/src/app/dev/vote/detail/riwayat_saya/layout.tsx @@ -1,4 +1,4 @@ -import { LayoutVote_DetailRiwayatSaya } from "@/app_modules/vote"; +import { LayoutVote_DetailRiwayatSaya } from "@/app_modules/voting"; import React from "react"; export default async function Layout({ diff --git a/src/app/dev/vote/detail/riwayat_saya/page.tsx b/src/app/dev/vote/detail/riwayat_saya/page.tsx index 56807551..26931d47 100644 --- a/src/app/dev/vote/detail/riwayat_saya/page.tsx +++ b/src/app/dev/vote/detail/riwayat_saya/page.tsx @@ -1,4 +1,4 @@ -import { Vote_DetailRiwayatSaya } from "@/app_modules/vote"; +import { Vote_DetailRiwayatSaya } from "@/app_modules/voting"; export default async function Page() { return ( diff --git a/src/app/dev/vote/detail/semua_riwayat/layout.tsx b/src/app/dev/vote/detail/semua_riwayat/layout.tsx index 4723aa9d..82e9c332 100644 --- a/src/app/dev/vote/detail/semua_riwayat/layout.tsx +++ b/src/app/dev/vote/detail/semua_riwayat/layout.tsx @@ -1,4 +1,4 @@ -import { LayoutVote_DetailSemuaRiwayat } from "@/app_modules/vote"; +import { LayoutVote_DetailSemuaRiwayat } from "@/app_modules/voting"; import React from "react"; export default async function Layout({ diff --git a/src/app/dev/vote/detail/semua_riwayat/page.tsx b/src/app/dev/vote/detail/semua_riwayat/page.tsx index a73db641..0013d8c6 100644 --- a/src/app/dev/vote/detail/semua_riwayat/page.tsx +++ b/src/app/dev/vote/detail/semua_riwayat/page.tsx @@ -1,4 +1,4 @@ -import { Vote_DetailSemuaRiwayat } from "@/app_modules/vote"; +import { Vote_DetailSemuaRiwayat } from "@/app_modules/voting"; export default async function Page() { diff --git a/src/app/dev/vote/edit/layout.tsx b/src/app/dev/vote/edit/layout.tsx index c84da67c..64609cda 100644 --- a/src/app/dev/vote/edit/layout.tsx +++ b/src/app/dev/vote/edit/layout.tsx @@ -1,4 +1,4 @@ -import { LayoutVote_Edit } from "@/app_modules/vote"; +import { LayoutVote_Edit } from "@/app_modules/voting"; import React from "react"; export default async function Layout({ diff --git a/src/app/dev/vote/edit/page.tsx b/src/app/dev/vote/edit/page.tsx index afceaf2e..c48be60c 100644 --- a/src/app/dev/vote/edit/page.tsx +++ b/src/app/dev/vote/edit/page.tsx @@ -1,4 +1,4 @@ -import { Vote_Edit } from "@/app_modules/vote"; +import { Vote_Edit } from "@/app_modules/voting"; export default async function Page() { return ( diff --git a/src/app/dev/vote/main/beranda/page.tsx b/src/app/dev/vote/main/beranda/page.tsx index edc6aa4c..0be44579 100644 --- a/src/app/dev/vote/main/beranda/page.tsx +++ b/src/app/dev/vote/main/beranda/page.tsx @@ -1,4 +1,4 @@ -import { Vote_Beranda } from "@/app_modules/vote"; +import { Vote_Beranda } from "@/app_modules/voting"; export default async function Page() { return<> diff --git a/src/app/dev/vote/main/kontribusi/page.tsx b/src/app/dev/vote/main/kontribusi/page.tsx index 093ef379..b4e61164 100644 --- a/src/app/dev/vote/main/kontribusi/page.tsx +++ b/src/app/dev/vote/main/kontribusi/page.tsx @@ -1,4 +1,4 @@ -import { Vote_Kontribusi } from "@/app_modules/vote"; +import { Vote_Kontribusi } from "@/app_modules/voting"; export default async function Page() { diff --git a/src/app/dev/vote/main/layout.tsx b/src/app/dev/vote/main/layout.tsx index 6c2e5673..350a485b 100644 --- a/src/app/dev/vote/main/layout.tsx +++ b/src/app/dev/vote/main/layout.tsx @@ -1,4 +1,4 @@ -import { LayoutVote_Main } from "@/app_modules/vote"; +import { LayoutVote_Main } from "@/app_modules/voting"; import React from "react"; export default async function Layout({ diff --git a/src/app/dev/vote/main/riwayat/page.tsx b/src/app/dev/vote/main/riwayat/page.tsx index b44f2d52..5db6c1a8 100644 --- a/src/app/dev/vote/main/riwayat/page.tsx +++ b/src/app/dev/vote/main/riwayat/page.tsx @@ -1,4 +1,4 @@ -import { Vote_Riwayat } from "@/app_modules/vote"; +import { Vote_Riwayat } from "@/app_modules/voting"; export default async function Page() { return ( diff --git a/src/app/dev/vote/main/status/page.tsx b/src/app/dev/vote/main/status/page.tsx index afed972f..91d1bb10 100644 --- a/src/app/dev/vote/main/status/page.tsx +++ b/src/app/dev/vote/main/status/page.tsx @@ -1,9 +1,20 @@ -import { Vote_Status } from "@/app_modules/vote"; +import { Vote_Status } from "@/app_modules/voting"; +import { Vote_getListByStatusId } from "@/app_modules/voting/fun/get/get_list_status_by_status_id"; export default async function Page() { + const listPublish = await Vote_getListByStatusId("1"); + const listReview = await Vote_getListByStatusId("2"); + const listDraft = await Vote_getListByStatusId("3"); + const listReject = await Vote_getListByStatusId("4"); + return ( <> - + ); } diff --git a/src/app/dev/vote/splash/page.tsx b/src/app/dev/vote/splash/page.tsx index 9d5976a3..35b2dc23 100644 --- a/src/app/dev/vote/splash/page.tsx +++ b/src/app/dev/vote/splash/page.tsx @@ -1,4 +1,4 @@ -import { Vote_Splash } from "@/app_modules/vote"; +import { Vote_Splash } from "@/app_modules/voting"; export default async function Page() { return ( diff --git a/src/app/lib/router_admin/router_admin_vote.ts b/src/app/lib/router_admin/router_admin_vote.ts new file mode 100644 index 00000000..7b90c33f --- /dev/null +++ b/src/app/lib/router_admin/router_admin_vote.ts @@ -0,0 +1,8 @@ +export const RouterAdminVote = { + // main + main: "/dev/admin/vote/main", + table_publish: "/dev/admin/vote/child/table_publish", + table_review: "/dev/admin/vote/child/table_review", + table_reject: "/dev/admin/vote/child/table_reject", + riwayat: "/dev/admin/vote/child/riwayat", +}; diff --git a/src/app/lib/router_hipmi/router_vote.ts b/src/app/lib/router_hipmi/router_vote.ts index 2b96d5bb..7638534d 100644 --- a/src/app/lib/router_hipmi/router_vote.ts +++ b/src/app/lib/router_hipmi/router_vote.ts @@ -15,7 +15,7 @@ export const RouterVote = { //detail main_detail: "/dev/vote/detail/main", detail_publish: "/dev/vote/detail/publish", - detail_review: "/dev/vote/detail/review", + detail_review: "/dev/vote/detail/review/", detail_draft: "/dev/vote/detail/draft", detail_reject: "/dev/vote/detail/reject", detail_kontribusi: "/dev/vote/detail/kontribusi", diff --git a/src/app/makuro/_server/makuro_view.tsx b/src/app/makuro/_server/makuro_view.tsx index 7e222d27..4ff96721 100644 --- a/src/app/makuro/_server/makuro_view.tsx +++ b/src/app/makuro/_server/makuro_view.tsx @@ -1,13 +1,54 @@ -'use client' +"use client"; -import { Button } from "@mantine/core"; +import { Box, Button, Stack, TextInput } from "@mantine/core"; import makuro_test from "./makuro_test"; +import { useState } from "react"; +import _, { forIn } from "lodash"; export default function ViewMakuro() { + const [listnya, setListnya] = useState([ + { + name: "Voting", + value: "", + }, + { name: "Voting", value: "" }, + ]); - return <> + return ( + <> + + {listnya.map((e, k) => ( + + { + const val = _.clone(listnya); + val[k].value = v.currentTarget.value; + setListnya([...val]); + }} + label={e.name} + /> + + ))} + onClick={() => { + // const cek = listnya[listnya.length - 1] + // console.log(cek.id + 1); + + if (listnya.length > 4) return console.log("ga bisa lebih"); + setListnya([...listnya, { name: "Voting", value: "" }]); + }} + > + {" "} + Tambah + + + -} \ No newline at end of file + ); +} diff --git a/src/app_modules/admin/main_dashboard/main/layout.tsx b/src/app_modules/admin/layout.tsx similarity index 89% rename from src/app_modules/admin/main_dashboard/main/layout.tsx rename to src/app_modules/admin/layout.tsx index f173171e..691ec7e5 100644 --- a/src/app_modules/admin/main_dashboard/main/layout.tsx +++ b/src/app_modules/admin/layout.tsx @@ -20,7 +20,7 @@ import { useMantineTheme, } from "@mantine/core"; import React, { useState } from "react"; -import ComponentGlobal_HeaderTamplate from "../../../component_global/header_tamplate"; +import ComponentGlobal_HeaderTamplate from "../component_global/header_tamplate"; import { useDisclosure } from "@mantine/hooks"; import { IconLetterH, IconLogout } from "@tabler/icons-react"; import { @@ -33,8 +33,8 @@ import { useRouter } from "next/navigation"; import { RouterHome } from "@/app/lib/router_hipmi/router_home"; import { Logout } from "@/app_modules/auth"; import { useAtom } from "jotai"; -import { gs_admin_hotMenu, gs_admin_subMenu } from "../../global_state"; -import Admin_Logout from "../../component/logout"; +import { gs_admin_hotMenu, gs_admin_subMenu } from "./global_state"; +import Admin_Logout from "./component/logout"; import { RouterAdminEvent } from "@/app/lib/router_admin/router_admin_event"; import _ from "lodash"; import { listAdminPage } from "./list_page"; @@ -48,24 +48,23 @@ export default function AdminLayout({ const [opened, setOpened] = useState(false); const router = useRouter(); const [active, setActive] = useAtom(gs_admin_hotMenu); - const [activeChild, setActiveChild] = useAtom(gs_admin_subMenu) + const [activeChild, setActiveChild] = useAtom(gs_admin_subMenu); const navbarItems = listAdminPage.map((e, i) => ( - + {e.name}} onClick={() => { - setActive(i); + setActive(e.id); setActiveChild(null); e.path === "" ? router.push(e.child[0].path) : router.push(e.path); - e.path === "" ? setActiveChild(0) : "" + e.path === "" ? setActiveChild(e.child[0].id) : ""; }} > {_.isEmpty(e.child) ? ( @@ -73,18 +72,18 @@ export default function AdminLayout({ ) : ( {e.child.map((v, ii) => ( - + {v.name}} onClick={() => { - setActive(i); - setActiveChild(ii) + setActive(e.id); + setActiveChild(v.id); router.push(v.path); }} /> diff --git a/src/app_modules/admin/main_dashboard/main/list_page.ts b/src/app_modules/admin/list_page.ts similarity index 61% rename from src/app_modules/admin/main_dashboard/main/list_page.ts rename to src/app_modules/admin/list_page.ts index 63316732..94cd618d 100644 --- a/src/app_modules/admin/main_dashboard/main/list_page.ts +++ b/src/app_modules/admin/list_page.ts @@ -1,4 +1,5 @@ import { RouterAdminEvent } from "@/app/lib/router_admin/router_admin_event"; +import { RouterAdminVote } from "@/app/lib/router_admin/router_admin_vote"; import { RouterAdminDashboard, RouterAdminDonasi, @@ -30,27 +31,27 @@ export const listAdminPage = [ path: "", child: [ { - id: 1, + id: 41, name: "Dashboard", path: RouterAdminEvent.main_event, }, { - id: 2, + id: 42, name: "Table Publish", path: RouterAdminEvent.table_publish, }, { - id: 3, + id: 43, name: "Table Review", path: RouterAdminEvent.table_review, }, { - id: 4, + id: 44, name: "Table Reject", path: RouterAdminEvent.table_reject, }, { - id: 5, + id: 45, name: "Tipe Acara", path: RouterAdminEvent.detail_tipe_acara, }, @@ -61,4 +62,36 @@ export const listAdminPage = [ }, ], }, + { + id: 5, + name: "Voting", + path: "", + child: [ + { + id: 51, + name: "Dashboard", + path: RouterAdminVote.main, + }, + { + id: 52, + name: "Table Publish", + path: RouterAdminVote.table_publish, + }, + { + id: 53, + name: "Table Review", + path: RouterAdminVote.table_review, + }, + { + id: 54, + name: "Table Reject", + path: RouterAdminVote.table_reject, + }, + { + id: 55, + name: "Riwayat", + path: RouterAdminVote.riwayat, + }, + ], + }, ]; diff --git a/src/app_modules/admin/main_dashboard/index.tsx b/src/app_modules/admin/main_dashboard/index.tsx index 01c5716f..31206a44 100644 --- a/src/app_modules/admin/main_dashboard/index.tsx +++ b/src/app_modules/admin/main_dashboard/index.tsx @@ -1,5 +1,5 @@ import AdminMain from "./main/view"; -import AdminLayout from "./main/layout"; +import AdminLayout from "../layout"; import SplashDashboardAdmin from "../splash/splash"; export { AdminMain, AdminLayout, SplashDashboardAdmin }; diff --git a/src/app_modules/admin/voting/child/riwayat/index.tsx b/src/app_modules/admin/voting/child/riwayat/index.tsx new file mode 100644 index 00000000..001c906b --- /dev/null +++ b/src/app_modules/admin/voting/child/riwayat/index.tsx @@ -0,0 +1,177 @@ +"use client"; + +import { RouterProfile } from "@/app/lib/router_hipmi/router_katalog"; +import ComponentAdminGlobal_HeaderTamplate from "@/app_modules/admin/component/header_tamplate"; +import { AdminEvent_getListPesertaById } from "@/app_modules/admin/event/fun/get/get_list_peserta_by_id"; +import { + Stack, + Center, + Spoiler, + Button, + Modal, + Paper, + Title, + Grid, + Avatar, + Group, + Divider, + Box, + Table, + Text, +} from "@mantine/core"; +import { useDisclosure } from "@mantine/hooks"; +import { IconEyeShare } from "@tabler/icons-react"; +import _ from "lodash"; +import { useRouter } from "next/navigation"; + +import { useState } from "react"; + +export default function AdminVote_Riwayat() { + return ( + <> + + + + + + ); +} + +function TableStatus({ listPublish }: { listPublish: any[] }) { + const router = useRouter(); + const [opened, { open, close }] = useDisclosure(false); + const [data, setData] = useState(listPublish); + const [peserta, setPeserta] = useState(); + const [eventId, setEventId] = useState(""); + const [loading, setLoading] = useState(false); + + const TableRows = data.map((e, i) => ( + + +
{e.title}
+ + +
+ + {e.deskripsi} + +
+ + +
Mulai vote
+ + +
Selesai vote
+ + + +
+ +
+ + + )); + + return ( + <> + + + +
+ Daftar Peserta +
+ + {peserta?.map((e) => ( + + + + + + + + {e.User.Profile.name} + + + + + + ))} + +
+
+
+ + + + RIWAYAT + + + + + + + + + + + + + + {TableRows} +
+
Judul
+
+
Deskripsi
+
+
Mulai Vote
+
+
Selesai Vote
+
+
Aksi
+
+
+ {_.isEmpty(TableRows) ? ( +
+ Tidak Ada Data +
+ ) : ( + "" + )} +
+
+ + ); +} diff --git a/src/app_modules/admin/voting/child/table_publish/index.tsx b/src/app_modules/admin/voting/child/table_publish/index.tsx new file mode 100644 index 00000000..9f720205 --- /dev/null +++ b/src/app_modules/admin/voting/child/table_publish/index.tsx @@ -0,0 +1,180 @@ +"use client"; + +import { RouterProfile } from "@/app/lib/router_hipmi/router_katalog"; +import ComponentAdminGlobal_HeaderTamplate from "@/app_modules/admin/component/header_tamplate"; +import { AdminEvent_getListPesertaById } from "@/app_modules/admin/event/fun/get/get_list_peserta_by_id"; +import { + MODEL_EVENT, + MODEL_EVENT_PESERTA, +} from "@/app_modules/event/model/interface"; +import { + Avatar, + Box, + Button, + Center, + Divider, + Grid, + Group, + Modal, + Paper, + Spoiler, + Stack, + Table, + Text, + Title, +} from "@mantine/core"; +import { useDisclosure } from "@mantine/hooks"; +import { IconEyeShare } from "@tabler/icons-react"; +import _ from "lodash"; +import { useRouter } from "next/navigation"; +import { useState } from "react"; + +export default function AdminVote_TablePublish() { + return ( + <> + + + + + + ); +} + +function TableStatus({ listPublish }: { listPublish: any[] }) { + const router = useRouter(); + const [opened, { open, close }] = useDisclosure(false); + const [data, setData] = useState(listPublish); + const [peserta, setPeserta] = useState(); + const [eventId, setEventId] = useState(""); + const [loading, setLoading] = useState(false); + + const TableRows = data.map((e, i) => ( + + +
{e.title}
+ + +
+ + {e.deskripsi} + +
+ + +
Mulai vote
+ + +
Selesai vote
+ + + +
+ +
+ + + )); + + return ( + <> + + + +
+ Daftar Peserta +
+ + {peserta?.map((e) => ( + + + + + + + + {e.User.Profile.name} + + + + + + ))} + +
+
+
+ + + + PUBLISH + + + + + + + + + + + + + + {TableRows} +
+
Judul
+
+
Deskripsi
+
+
Mulai Vote
+
+
Selesai Vote
+
+
Aksi
+
+
+ {_.isEmpty(TableRows) ? ( +
+ Tidak Ada Data +
+ ) : ( + "" + )} +
+
+ + ); +} diff --git a/src/app_modules/admin/voting/child/table_reject/index.tsx b/src/app_modules/admin/voting/child/table_reject/index.tsx new file mode 100644 index 00000000..56ccfbe1 --- /dev/null +++ b/src/app_modules/admin/voting/child/table_reject/index.tsx @@ -0,0 +1,176 @@ +"use client"; + +import { RouterProfile } from "@/app/lib/router_hipmi/router_katalog"; +import ComponentAdminGlobal_HeaderTamplate from "@/app_modules/admin/component/header_tamplate"; +import { AdminEvent_getListPesertaById } from "@/app_modules/admin/event/fun/get/get_list_peserta_by_id"; +import { + Avatar, + Box, + Button, + Center, + Divider, + Grid, + Group, + Modal, + Paper, + Spoiler, + Stack, + Table, + Text, + Title, +} from "@mantine/core"; +import { useDisclosure } from "@mantine/hooks"; +import { IconEyeShare } from "@tabler/icons-react"; +import _ from "lodash"; +import { useRouter } from "next/navigation"; +import { useState } from "react"; + +export default function AdminVote_TableReject() { + return ( + <> + + + + + + ); +} + +function TableStatus({ listData }: { listData: any[] }) { + const router = useRouter(); + const [opened, { open, close }] = useDisclosure(false); + const [data, setData] = useState(listData); + const [peserta, setPeserta] = useState(); + const [eventId, setEventId] = useState(""); + const [loading, setLoading] = useState(false); + + const TableRows = data.map((e, i) => ( + + +
{e.title}
+ + +
+ + {e.deskripsi} + +
+ + +
Mulai vote
+ + +
Selesai vote
+ + + +
+ +
+ + + )); + + return ( + <> + + + +
+ Daftar Peserta +
+ + {peserta?.map((e) => ( + + + + + + + + {e.User.Profile.name} + + + + + + ))} + +
+
+
+ + + + REJECT + + + + + + + + + + + + + + {TableRows} +
+
Judul
+
+
Deskripsi
+
+
Mulai Vote
+
+
Selesai Vote
+
+
Aksi
+
+
+ {_.isEmpty(TableRows) ? ( +
+ Tidak Ada Data +
+ ) : ( + "" + )} +
+
+ + ); +} diff --git a/src/app_modules/admin/voting/child/table_review/index.tsx b/src/app_modules/admin/voting/child/table_review/index.tsx new file mode 100644 index 00000000..6bfe2c5f --- /dev/null +++ b/src/app_modules/admin/voting/child/table_review/index.tsx @@ -0,0 +1,164 @@ +"use client"; + +import { RouterProfile } from "@/app/lib/router_hipmi/router_katalog"; +import ComponentAdminGlobal_HeaderTamplate from "@/app_modules/admin/component/header_tamplate"; +import { AdminEvent_getListPesertaById } from "@/app_modules/admin/event/fun/get/get_list_peserta_by_id"; +import { Avatar, Box, Button, Center, Divider, Grid, Group, Modal, Paper, Spoiler, Stack, Table, Text, Title } from "@mantine/core"; +import { useDisclosure } from "@mantine/hooks"; +import { IconBan } from "@tabler/icons-react"; +import { IconEyeShare } from "@tabler/icons-react"; +import _ from "lodash"; +import { useRouter } from "next/navigation"; + +import { useState } from "react"; + +export default function AdminVote_TableReview() { + return ( + <> + + + + + + ); +} + +function TableStatus({ listData }: { listData: any[] }) { + const router = useRouter(); + const [opened, { open, close }] = useDisclosure(false); + const [data, setData] = useState(listData); + const [peserta, setPeserta] = useState(); + const [eventId, setEventId] = useState(""); + const [loading, setLoading] = useState(false); + + const TableRows = data.map((e, i) => ( + + +
{e.title}
+ + +
+ + {e.deskripsi} + +
+ + +
Mulai vote
+ + +
Selesai vote
+ + + + + + + + + + )); + + return ( + <> + + + +
+ Daftar Peserta +
+ + {peserta?.map((e) => ( + + + + + + + + {e.User.Profile.name} + + + + + + ))} + +
+
+
+ + + + REVIEW + + + + + + + + + + + + + + {TableRows} +
+
Judul
+
+
Deskripsi
+
+
Mulai Vote
+
+
Selesai Vote
+
+
Aksi
+
+
+ {_.isEmpty(TableRows) ? ( +
+ Tidak Ada Data +
+ ) : ( + "" + )} +
+
+ + ); +} diff --git a/src/app_modules/admin/voting/index.ts b/src/app_modules/admin/voting/index.ts new file mode 100644 index 00000000..03485606 --- /dev/null +++ b/src/app_modules/admin/voting/index.ts @@ -0,0 +1,13 @@ +import AdminVote_Main from "./main"; +import AdminVote_TablePublish from "./child/table_publish"; +import AdminVote_TableReview from "./child/table_review"; +import AdminVote_TableReject from "./child/table_reject"; +import AdminVote_Riwayat from "./child/riwayat"; + +export { + AdminVote_Main, + AdminVote_TablePublish, + AdminVote_TableReview, + AdminVote_TableReject, + AdminVote_Riwayat, +}; diff --git a/src/app_modules/admin/voting/main/index.tsx b/src/app_modules/admin/voting/main/index.tsx new file mode 100644 index 00000000..d6c74a26 --- /dev/null +++ b/src/app_modules/admin/voting/main/index.tsx @@ -0,0 +1,96 @@ +"use client"; + +import { Stack, SimpleGrid, Paper, Group, Title, Text } from "@mantine/core"; +import { useRouter } from "next/navigation"; +import ComponentAdminGlobal_HeaderTamplate from "../../component/header_tamplate"; + +export default function AdminVote_Main({ + countPublish, + countReview, + countDraft, + countReject, + countTipeAcara, + countRiwayat, +}: { + countPublish?: number; + countReview?: number; + countDraft?: number; + countReject?: number; + countTipeAcara?: number; + countRiwayat?: number; +}) { + const router = useRouter(); + + const listStatus = [ + { + id: 1, + name: "Publish", + jumlah: countPublish, + color: "green", + }, + { + id: 2, + name: "Review", + jumlah: countReview, + color: "orange", + }, + { + id: 3, + name: "Draft", + jumlah: countDraft, + path: "", + color: "yellow", + }, + { + id: 4, + name: "Reject", + jumlah: countReject, + color: "red", + }, + ]; + + return ( + <> + + + + + {listStatus.map((e, i) => ( + + + + {e.name} + {e.jumlah ? e.jumlah : 0} + + + + ))} + + + + + ); +} diff --git a/src/app_modules/vote/create/index.tsx b/src/app_modules/vote/create/index.tsx deleted file mode 100644 index 580cf3a8..00000000 --- a/src/app_modules/vote/create/index.tsx +++ /dev/null @@ -1,123 +0,0 @@ -"use client"; - -import { ComponentGlobal_NotifikasiBerhasil } from "@/app_modules/component_global/notif_global/notifikasi_berhasil"; -import { - Button, - Center, - Grid, - Group, - Stack, - Text, - TextInput, - Title, -} from "@mantine/core"; -import { DatePickerInput } from "@mantine/dates"; -import { useCounter } from "@mantine/hooks"; -import { IconHome } from "@tabler/icons-react"; -import { useAtom } from "jotai"; -import moment from "moment"; -import { AppRouterInstance } from "next/dist/shared/lib/app-router-context.shared-runtime"; -import { useRouter } from "next/navigation"; -import { useState } from "react"; -import { gs_vote_hotMenu, gs_vote_status } from "../global_state"; -import { RouterVote } from "@/app/lib/router_hipmi/router_vote"; - -export default function Vote_Create() { - const router = useRouter(); - const [hotMenu, setHotMenu] = useAtom(gs_vote_hotMenu); - const [tabsStatus, setTabsStatus] = useAtom(gs_vote_status); - - const [data, setData] = useState({ - title: "", - deskripsi: "", - }); - return ( - <> - - {}} - /> - {}} - /> - - { - return moment(date).diff(Date.now(), "days") < 0; - }} - onChange={(val) => console.log(val)} - /> - - - - Daftar Voting - - - - - - - - - - - - {}} - /> - - - - - - - - - - - {}} - /> - - - - - - - - - ); -} - -async function onSave( - router: AppRouterInstance, - setHotMenu: any, - setTabsStatus: any -) { - ComponentGlobal_NotifikasiBerhasil("Berhasil Disimpan"); - setHotMenu(1); - setTabsStatus("Review") - - router.replace(RouterVote.status); -} diff --git a/src/app_modules/vote/main/status/review.tsx b/src/app_modules/vote/main/status/review.tsx deleted file mode 100644 index 9136da72..00000000 --- a/src/app_modules/vote/main/status/review.tsx +++ /dev/null @@ -1,12 +0,0 @@ -"use client"; - -import { RouterVote } from "@/app/lib/router_hipmi/router_vote"; -import ComponentVote_CardViewStatus from "../../component/card_view_status"; - -export default function Vote_StatusReview() { - return ( - <> - - - ); -} diff --git a/src/app_modules/vote/component/card_view_publish.tsx b/src/app_modules/voting/component/card_view_publish.tsx similarity index 100% rename from src/app_modules/vote/component/card_view_publish.tsx rename to src/app_modules/voting/component/card_view_publish.tsx diff --git a/src/app_modules/vote/component/card_view_status.tsx b/src/app_modules/voting/component/card_view_status.tsx similarity index 71% rename from src/app_modules/vote/component/card_view_status.tsx rename to src/app_modules/voting/component/card_view_status.tsx index fb5af971..86e763f4 100644 --- a/src/app_modules/vote/component/card_view_status.tsx +++ b/src/app_modules/voting/component/card_view_status.tsx @@ -13,11 +13,15 @@ import { } from "@mantine/core"; import moment from "moment"; import { useRouter } from "next/navigation"; +import { MODEL_VOTING } from "../model/interface"; +import { ComponentGlobal_NotifikasiPeringatan } from "@/app_modules/component_global/notif_global/notifikasi_peringatan"; export default function ComponentVote_CardViewStatus({ path, + data, }: { - path: string; + path?: string; + data?: MODEL_VOTING; }) { const router = useRouter(); return ( @@ -27,24 +31,30 @@ export default function ComponentVote_CardViewStatus({ withBorder p={30} radius={"md"} - onClick={() => router.push(path)} + onClick={() => { + if (data?.id === undefined) { + ComponentGlobal_NotifikasiPeringatan("Path tidak ditemukan"); + } else { + router.push((path as string) + data?.id); + } + }} > {/* Isi deskripsi */} - + - Judul Voting : Pemilihan tempat wisata + + {data?.title} + - {new Date().toLocaleDateString(["id-ID"], { + {data?.awalVote.toLocaleDateString(["id-ID"], { dateStyle: "medium", })} - - {new Date( - moment(Date.now()).add(10, "days").calendar() - ).toLocaleDateString(["id-ID"], { + {data?.akhirVote.toLocaleDateString(["id-ID"], { dateStyle: "medium", })} diff --git a/src/app_modules/vote/component/detail/daftar_voter.tsx b/src/app_modules/voting/component/detail/daftar_voter.tsx similarity index 100% rename from src/app_modules/vote/component/detail/daftar_voter.tsx rename to src/app_modules/voting/component/detail/daftar_voter.tsx diff --git a/src/app_modules/vote/component/detail/detail_data.tsx b/src/app_modules/voting/component/detail/detail_data.tsx similarity index 65% rename from src/app_modules/vote/component/detail/detail_data.tsx rename to src/app_modules/voting/component/detail/detail_data.tsx index 7b7d96fc..827d63df 100644 --- a/src/app_modules/vote/component/detail/detail_data.tsx +++ b/src/app_modules/voting/component/detail/detail_data.tsx @@ -11,8 +11,13 @@ import { Text, } from "@mantine/core"; import moment from "moment"; +import { MODEL_VOTING } from "../../model/interface"; -export default function ComponentVote_DetailData() { +export default function ComponentVote_DetailData({ + data, +}: { + data?: MODEL_VOTING; +}) { const listVote = [ { id: 1, @@ -31,14 +36,9 @@ export default function ComponentVote_DetailData() {
- Judul voting + {data?.title}
- - Deskripsi: Lorem, ipsum dolor sit amet consectetur adipisicing - elit. Mollitia possimus repellendus in, iste voluptatibus sit - laborum voluptates aliquam nisi? Earum quas ea quaerat veniam - porro, magni nulla consequuntur distinctio at. - + {data?.deskripsi}
@@ -49,15 +49,13 @@ export default function ComponentVote_DetailData() { - {new Date().toLocaleDateString(["id-ID"], { + {data?.awalVote.toLocaleDateString(["id-ID"], { dateStyle: "medium", })} - - {new Date( - moment(Date.now()).add(10, "days").calendar() - ).toLocaleDateString(["id-ID"], { + {data?.akhirVote.toLocaleDateString(["id-ID"], { dateStyle: "medium", })} @@ -70,14 +68,12 @@ export default function ComponentVote_DetailData() { - {listVote.map((e) => ( + {data?.Voting_DaftarNamaVote.map((e) => (
{`Nama Voting ${e.label}`} - } + label={{e.value}} />
diff --git a/src/app_modules/vote/component/detail/detail_data_tanpa_vote.tsx b/src/app_modules/voting/component/detail/detail_data_tanpa_vote.tsx similarity index 100% rename from src/app_modules/vote/component/detail/detail_data_tanpa_vote.tsx rename to src/app_modules/voting/component/detail/detail_data_tanpa_vote.tsx diff --git a/src/app_modules/vote/component/detail/hasil_voting.tsx b/src/app_modules/voting/component/detail/hasil_voting.tsx similarity index 100% rename from src/app_modules/vote/component/detail/hasil_voting.tsx rename to src/app_modules/voting/component/detail/hasil_voting.tsx diff --git a/src/app_modules/vote/component/header_tamplate.tsx b/src/app_modules/voting/component/header_tamplate.tsx similarity index 100% rename from src/app_modules/vote/component/header_tamplate.tsx rename to src/app_modules/voting/component/header_tamplate.tsx diff --git a/src/app_modules/voting/create/index.tsx b/src/app_modules/voting/create/index.tsx new file mode 100644 index 00000000..998cb748 --- /dev/null +++ b/src/app_modules/voting/create/index.tsx @@ -0,0 +1,224 @@ +"use client"; + +import { ComponentGlobal_NotifikasiBerhasil } from "@/app_modules/component_global/notif_global/notifikasi_berhasil"; +import { + Box, + Button, + Center, + Grid, + Group, + Stack, + Text, + TextInput, + Title, +} from "@mantine/core"; +import { DatePickerInput } from "@mantine/dates"; +import { useCounter } from "@mantine/hooks"; +import { IconHome, IconMinus, IconPlus } from "@tabler/icons-react"; +import { useAtom } from "jotai"; +import moment from "moment"; +import { AppRouterInstance } from "next/dist/shared/lib/app-router-context.shared-runtime"; +import { useRouter } from "next/navigation"; +import { useState } from "react"; +import { gs_vote_hotMenu, gs_vote_status } from "../global_state"; +import { RouterVote } from "@/app/lib/router_hipmi/router_vote"; +import _ from "lodash"; +import { ComponentGlobal_NotifikasiPeringatan } from "@/app_modules/component_global/notif_global/notifikasi_peringatan"; +import { data } from "autoprefixer"; +import { Vote_funCreate } from "../fun/create/create_vote"; +import { ComponentGlobal_NotifikasiGagal } from "@/app_modules/component_global/notif_global/notifikasi_gagal"; +import { MODEL_VOTING } from "../model/interface"; + +export default function Vote_Create() { + const router = useRouter(); + const [hotMenu, setHotMenu] = useAtom(gs_vote_hotMenu); + const [tabsStatus, setTabsStatus] = useAtom(gs_vote_status); + + const [data, setData] = useState({ + title: "", + deskripsi: "", + awalVote: Date, + akhirVote: Date, + }); + + // const [range, setRange] = useState({ + // }); + + const [listVote, setListVote] = useState([ + { + name: "Nama Voting", + value: "", + }, + { + name: "Nama Voting", + value: "", + }, + ]); + + return ( + <> + + + { + setData({ + ...data, + title: val.target.value, + }); + }} + /> + { + setData({ + ...data, + deskripsi: val.target.value, + }); + }} + /> + + { + return moment(date).diff(Date.now(), "days") < 0; + }} + onChange={(val: any) => { + setData({ + ...data, + awalVote: val[0], + akhirVote: val[1], + }); + }} + /> + + + +
+ + Daftar Voting + +
+ + + + {listVote.map((e, index) => ( + + { + const val = _.clone(listVote); + val[index].value = v.currentTarget.value; + setListVote([...val]); + }} + /> + + ))} + + + + {listVote.length >= 4 ? ( + "" + ) : ( + + )} + + {listVote.length <= 2 ? ( + "" + ) : ( + + )} + + +
+ + +
+ + ); +} + +async function onSave( + router: AppRouterInstance, + setHotMenu: any, + setTabsStatus: any, + data: MODEL_VOTING, + listVote: any[] +) { + if (_.values(data).includes("")) + return ComponentGlobal_NotifikasiPeringatan("Lengkapi Data"); + + const cekAwalVote = moment(data.awalVote).format(); + if (cekAwalVote === "Invalid date") + return ComponentGlobal_NotifikasiPeringatan("Lengkapi Tanggal"); + + const cekAkhirVote = moment(data.akhirVote).format(); + if (cekAkhirVote === "Invalid date") + return ComponentGlobal_NotifikasiPeringatan("Lengkapi Tanggal"); + + if (_.values(listVote.map((e) => e.value)).includes("")) + return ComponentGlobal_NotifikasiPeringatan("Isi Semua Nama Voting"); + + await Vote_funCreate(data, listVote).then((res) => { + if (res.status === 201) { + setHotMenu(1); + setTabsStatus("Review"); + router.replace(RouterVote.status); + ComponentGlobal_NotifikasiBerhasil(res.message); + } else { + ComponentGlobal_NotifikasiGagal(res.message); + } + }); +} diff --git a/src/app_modules/vote/create/layout.tsx b/src/app_modules/voting/create/layout.tsx similarity index 100% rename from src/app_modules/vote/create/layout.tsx rename to src/app_modules/voting/create/layout.tsx diff --git a/src/app_modules/vote/detail/draft/index.tsx b/src/app_modules/voting/detail/draft/index.tsx similarity index 100% rename from src/app_modules/vote/detail/draft/index.tsx rename to src/app_modules/voting/detail/draft/index.tsx diff --git a/src/app_modules/vote/detail/draft/layout.tsx b/src/app_modules/voting/detail/draft/layout.tsx similarity index 100% rename from src/app_modules/vote/detail/draft/layout.tsx rename to src/app_modules/voting/detail/draft/layout.tsx diff --git a/src/app_modules/vote/detail/kontribusi/index.tsx b/src/app_modules/voting/detail/kontribusi/index.tsx similarity index 100% rename from src/app_modules/vote/detail/kontribusi/index.tsx rename to src/app_modules/voting/detail/kontribusi/index.tsx diff --git a/src/app_modules/vote/detail/kontribusi/layout.tsx b/src/app_modules/voting/detail/kontribusi/layout.tsx similarity index 100% rename from src/app_modules/vote/detail/kontribusi/layout.tsx rename to src/app_modules/voting/detail/kontribusi/layout.tsx diff --git a/src/app_modules/vote/detail/main/index.tsx b/src/app_modules/voting/detail/main/index.tsx similarity index 100% rename from src/app_modules/vote/detail/main/index.tsx rename to src/app_modules/voting/detail/main/index.tsx diff --git a/src/app_modules/vote/detail/main/layout.tsx b/src/app_modules/voting/detail/main/layout.tsx similarity index 100% rename from src/app_modules/vote/detail/main/layout.tsx rename to src/app_modules/voting/detail/main/layout.tsx diff --git a/src/app_modules/vote/detail/publish/index.tsx b/src/app_modules/voting/detail/publish/index.tsx similarity index 100% rename from src/app_modules/vote/detail/publish/index.tsx rename to src/app_modules/voting/detail/publish/index.tsx diff --git a/src/app_modules/vote/detail/publish/layout.tsx b/src/app_modules/voting/detail/publish/layout.tsx similarity index 100% rename from src/app_modules/vote/detail/publish/layout.tsx rename to src/app_modules/voting/detail/publish/layout.tsx diff --git a/src/app_modules/vote/detail/reject/index.tsx b/src/app_modules/voting/detail/reject/index.tsx similarity index 100% rename from src/app_modules/vote/detail/reject/index.tsx rename to src/app_modules/voting/detail/reject/index.tsx diff --git a/src/app_modules/vote/detail/reject/layout.tsx b/src/app_modules/voting/detail/reject/layout.tsx similarity index 100% rename from src/app_modules/vote/detail/reject/layout.tsx rename to src/app_modules/voting/detail/reject/layout.tsx diff --git a/src/app_modules/vote/detail/review/index.tsx b/src/app_modules/voting/detail/review/index.tsx similarity index 89% rename from src/app_modules/vote/detail/review/index.tsx rename to src/app_modules/voting/detail/review/index.tsx index 7060227e..c54e924c 100644 --- a/src/app_modules/vote/detail/review/index.tsx +++ b/src/app_modules/voting/detail/review/index.tsx @@ -20,11 +20,11 @@ import { useRouter } from "next/navigation"; import { gs_vote_status } from "../../global_state"; import ComponentVote_DetailData from "../../component/detail/detail_data"; -export default function Vote_DetailReview() { +export default function Vote_DetailReview({ dataVote }: { dataVote : any[]}) { return ( <> - + diff --git a/src/app_modules/vote/detail/review/layout.tsx b/src/app_modules/voting/detail/review/layout.tsx similarity index 100% rename from src/app_modules/vote/detail/review/layout.tsx rename to src/app_modules/voting/detail/review/layout.tsx diff --git a/src/app_modules/vote/detail/riwayat_saya/layout.tsx b/src/app_modules/voting/detail/riwayat_saya/layout.tsx similarity index 100% rename from src/app_modules/vote/detail/riwayat_saya/layout.tsx rename to src/app_modules/voting/detail/riwayat_saya/layout.tsx diff --git a/src/app_modules/vote/detail/riwayat_saya/page.tsx b/src/app_modules/voting/detail/riwayat_saya/page.tsx similarity index 100% rename from src/app_modules/vote/detail/riwayat_saya/page.tsx rename to src/app_modules/voting/detail/riwayat_saya/page.tsx diff --git a/src/app_modules/vote/detail/semua_riwayat/layout.tsx b/src/app_modules/voting/detail/semua_riwayat/layout.tsx similarity index 100% rename from src/app_modules/vote/detail/semua_riwayat/layout.tsx rename to src/app_modules/voting/detail/semua_riwayat/layout.tsx diff --git a/src/app_modules/vote/detail/semua_riwayat/page.tsx b/src/app_modules/voting/detail/semua_riwayat/page.tsx similarity index 100% rename from src/app_modules/vote/detail/semua_riwayat/page.tsx rename to src/app_modules/voting/detail/semua_riwayat/page.tsx diff --git a/src/app_modules/vote/edit/index.tsx b/src/app_modules/voting/edit/index.tsx similarity index 100% rename from src/app_modules/vote/edit/index.tsx rename to src/app_modules/voting/edit/index.tsx diff --git a/src/app_modules/vote/edit/layout.tsx b/src/app_modules/voting/edit/layout.tsx similarity index 100% rename from src/app_modules/vote/edit/layout.tsx rename to src/app_modules/voting/edit/layout.tsx diff --git a/src/app_modules/voting/fun/create/create_vote.ts b/src/app_modules/voting/fun/create/create_vote.ts new file mode 100644 index 00000000..af605612 --- /dev/null +++ b/src/app_modules/voting/fun/create/create_vote.ts @@ -0,0 +1,41 @@ +"use server"; + +import { User_getUserId } from "@/app_modules/fun_global/get_user_token"; +import { MODEL_VOTING } from "../../model/interface"; +import prisma from "@/app/lib/prisma"; +import { revalidatePath } from "next/cache"; + +export async function Vote_funCreate(req: MODEL_VOTING, listVote: any[]) { + const authorId = await User_getUserId(); + + const create = await prisma.voting.create({ + data: { + title: req.title, + deskripsi: req.deskripsi, + awalVote: req.awalVote, + akhirVote: req.akhirVote, + authorId: authorId, + }, + }); + + if (!create) return { status: 400, message: "Gagal Membuat Vote" }; + + for (let v of listVote) { + const val = v.value; + + const namaVote = await prisma.voting_DaftarNamaVote.createMany({ + data: { + value: val, + votingId: create.id, + }, + }); + + if (!namaVote) return { status: 400, message: "Gagal Membuat List" }; + } + revalidatePath("/dev/vote/main/status"); + + return { + status: 201, + message: "Berhasil Membuat Vote", + }; +} diff --git a/src/app_modules/voting/fun/get/get_list_status_by_status_id.ts b/src/app_modules/voting/fun/get/get_list_status_by_status_id.ts new file mode 100644 index 00000000..2c2ed2df --- /dev/null +++ b/src/app_modules/voting/fun/get/get_list_status_by_status_id.ts @@ -0,0 +1,52 @@ +"use server"; + +import prisma from "@/app/lib/prisma"; +import { User_getUserId } from "@/app_modules/fun_global/get_user_token"; + +export async function Vote_getListByStatusId(statusId: string) { + const authorId = await User_getUserId(); + + if (statusId === "1") { + const data = await prisma.voting.findMany({ + where: { + voting_StatusId: "1", + authorId: authorId, + }, + }); + + return data; + } + + if (statusId === "2") { + const data = await prisma.voting.findMany({ + where: { + voting_StatusId: "2", + authorId: authorId, + }, + }); + + return data; + } + + if (statusId === "3") { + const data = await prisma.voting.findMany({ + where: { + voting_StatusId: "3", + authorId: authorId, + }, + }); + + return data; + } + + if (statusId === "4") { + const data = await prisma.voting.findMany({ + where: { + voting_StatusId: "4", + authorId: authorId, + }, + }); + + return data; + } +} diff --git a/src/app_modules/voting/fun/get/get_one_by_id.ts b/src/app_modules/voting/fun/get/get_one_by_id.ts new file mode 100644 index 00000000..5e200239 --- /dev/null +++ b/src/app_modules/voting/fun/get/get_one_by_id.ts @@ -0,0 +1,27 @@ +"use server"; + +import prisma from "@/app/lib/prisma"; + +export async function Vote_getOnebyId(voteId: string) { + const data = await prisma.voting.findFirst({ + where: { + id: voteId, + }, + select: { + id: true, + title: true, + isActive: true, + createdAt: true, + updatedAt: true, + deskripsi: true, + awalVote: true, + akhirVote: true, + catatan: true, + authorId: true, + voting_StatusId: true, + Voting_DaftarNamaVote: true, + }, + }); + + return data; +} diff --git a/src/app_modules/vote/global_state/index.ts b/src/app_modules/voting/global_state/index.ts similarity index 100% rename from src/app_modules/vote/global_state/index.ts rename to src/app_modules/voting/global_state/index.ts diff --git a/src/app_modules/vote/index.tsx b/src/app_modules/voting/index.tsx similarity index 100% rename from src/app_modules/vote/index.tsx rename to src/app_modules/voting/index.tsx diff --git a/src/app_modules/vote/main/beranda.tsx b/src/app_modules/voting/main/beranda.tsx similarity index 100% rename from src/app_modules/vote/main/beranda.tsx rename to src/app_modules/voting/main/beranda.tsx diff --git a/src/app_modules/vote/main/kontribusi.tsx b/src/app_modules/voting/main/kontribusi.tsx similarity index 100% rename from src/app_modules/vote/main/kontribusi.tsx rename to src/app_modules/voting/main/kontribusi.tsx diff --git a/src/app_modules/vote/main/layout.tsx b/src/app_modules/voting/main/layout.tsx similarity index 100% rename from src/app_modules/vote/main/layout.tsx rename to src/app_modules/voting/main/layout.tsx diff --git a/src/app_modules/vote/main/riwayat/index.tsx b/src/app_modules/voting/main/riwayat/index.tsx similarity index 100% rename from src/app_modules/vote/main/riwayat/index.tsx rename to src/app_modules/voting/main/riwayat/index.tsx diff --git a/src/app_modules/vote/main/riwayat/saya.tsx b/src/app_modules/voting/main/riwayat/saya.tsx similarity index 100% rename from src/app_modules/vote/main/riwayat/saya.tsx rename to src/app_modules/voting/main/riwayat/saya.tsx diff --git a/src/app_modules/vote/main/riwayat/semua.tsx b/src/app_modules/voting/main/riwayat/semua.tsx similarity index 100% rename from src/app_modules/vote/main/riwayat/semua.tsx rename to src/app_modules/voting/main/riwayat/semua.tsx diff --git a/src/app_modules/vote/main/status/draft.tsx b/src/app_modules/voting/main/status/draft.tsx similarity index 100% rename from src/app_modules/vote/main/status/draft.tsx rename to src/app_modules/voting/main/status/draft.tsx diff --git a/src/app_modules/vote/main/status/index.tsx b/src/app_modules/voting/main/status/index.tsx similarity index 86% rename from src/app_modules/vote/main/status/index.tsx rename to src/app_modules/voting/main/status/index.tsx index 17aaa8c1..f6d1b81a 100644 --- a/src/app_modules/vote/main/status/index.tsx +++ b/src/app_modules/voting/main/status/index.tsx @@ -10,7 +10,17 @@ import Vote_StatusReview from "./review"; import Vote_StatusDraft from "./draft"; import Vote_StatusReject from "./reject"; -export default function Vote_Status() { +export default function Vote_Status({ + listPublish, + listReview, + listDraft, + listReject, +}: { + listPublish: any[]; + listReview: any[]; + listDraft: any[]; + listReject: any[]; +}) { const router = useRouter(); const [tabsStatus, setTabsStatus] = useAtom(gs_vote_status); const listTabs = [ @@ -21,7 +31,7 @@ export default function Vote_Status() { }, { id: 2, - path: , + path: , value: "Review", }, { diff --git a/src/app_modules/vote/main/status/publish.tsx b/src/app_modules/voting/main/status/publish.tsx similarity index 97% rename from src/app_modules/vote/main/status/publish.tsx rename to src/app_modules/voting/main/status/publish.tsx index 630076a2..5bc51a0e 100644 --- a/src/app_modules/vote/main/status/publish.tsx +++ b/src/app_modules/voting/main/status/publish.tsx @@ -17,6 +17,7 @@ import { } from "@mantine/core"; import moment from "moment"; import { useRouter } from "next/navigation"; +import { MODEL_VOTING } from "../../model/interface"; export default function Vote_StatusPublish() { const router = useRouter(); diff --git a/src/app_modules/vote/main/status/reject.tsx b/src/app_modules/voting/main/status/reject.tsx similarity index 100% rename from src/app_modules/vote/main/status/reject.tsx rename to src/app_modules/voting/main/status/reject.tsx diff --git a/src/app_modules/voting/main/status/review.tsx b/src/app_modules/voting/main/status/review.tsx new file mode 100644 index 00000000..0d4e4934 --- /dev/null +++ b/src/app_modules/voting/main/status/review.tsx @@ -0,0 +1,27 @@ +"use client"; + +import { RouterVote } from "@/app/lib/router_hipmi/router_vote"; +import ComponentVote_CardViewStatus from "../../component/card_view_status"; +import { MODEL_VOTING } from "../../model/interface"; +import { Box, Stack } from "@mantine/core"; + +export default function Vote_StatusReview({ + listReview, +}: { + listReview: MODEL_VOTING[]; +}) { + return ( + <> + + {listReview.map((e) => ( + + + + ))} + + + ); +} diff --git a/src/app_modules/voting/model/interface.ts b/src/app_modules/voting/model/interface.ts new file mode 100644 index 00000000..469ba7e7 --- /dev/null +++ b/src/app_modules/voting/model/interface.ts @@ -0,0 +1,25 @@ +import { MODEL_USER } from "@/app_modules/home/model/interface"; + +export interface MODEL_VOTING { + id: string; + title: string; + deskripsi: string; + awalVote: Date; + akhirVote: Date; + isActive: boolean; + createdAt: Date; + updateAt: Date; + catatan: string; + authorId: string, + Author: MODEL_USER + Voting_DaftarNamaVote: MODEL_VOTING_DAFTAR_NAMA_VOTE[]; +} + +export interface MODEL_VOTING_DAFTAR_NAMA_VOTE { + id: string; + value: string; + isActive: boolean; + createdAt: Date; + updatedAt: Date; + votingId: string; +} diff --git a/src/app_modules/vote/splash/index.tsx b/src/app_modules/voting/splash/index.tsx similarity index 100% rename from src/app_modules/vote/splash/index.tsx rename to src/app_modules/voting/splash/index.tsx diff --git a/src/bin/seeder/voting/master_status.json b/src/bin/seeder/voting/master_status.json new file mode 100644 index 00000000..b42a57b4 --- /dev/null +++ b/src/bin/seeder/voting/master_status.json @@ -0,0 +1,18 @@ +[ + { + "id": "1", + "name": "Publish" + }, + { + "id": "2", + "name": "Review" + }, + { + "id": "3", + "name": "Draft" + }, + { + "id": "4", + "name": "Reject" + } +] From e6291579602f73b0df5d1f9f360bc30fa9f7a6e3 Mon Sep 17 00:00:00 2001 From: Bagasbanuna02 Date: Fri, 16 Feb 2024 17:20:06 +0800 Subject: [PATCH 03/14] # Voting ## feat - Voting user - Halaman kontribusi - Halaman riwayat ### No issuue --- prisma/schema.prisma | 23 +- src/app/dev/admin/vote/child/riwayat/page.tsx | 7 +- .../admin/vote/child/table_publish/page.tsx | 13 +- .../admin/vote/child/table_reject/page.tsx | 13 +- .../admin/vote/child/table_review/page.tsx | 8 +- src/app/dev/admin/vote/main/page.tsx | 15 +- src/app/dev/vote/create/layout.tsx | 2 +- src/app/dev/vote/create/page.tsx | 2 +- src/app/dev/vote/detail/draft/[id]/layout.tsx | 19 ++ src/app/dev/vote/detail/draft/[id]/page.tsx | 13 + src/app/dev/vote/detail/draft/layout.tsx | 10 - src/app/dev/vote/detail/draft/page.tsx | 9 - .../detail/kontribusi/{ => [id]}/layout.tsx | 2 +- .../dev/vote/detail/kontribusi/[id]/page.tsx | 19 ++ src/app/dev/vote/detail/kontribusi/page.tsx | 9 - .../vote/detail/main/{ => [id]}/layout.tsx | 2 +- src/app/dev/vote/detail/main/[id]/page.tsx | 29 ++ src/app/dev/vote/detail/main/page.tsx | 7 - .../vote/detail/publish/{ => [id]}/layout.tsx | 2 +- src/app/dev/vote/detail/publish/[id]/page.tsx | 18 + src/app/dev/vote/detail/publish/page.tsx | 7 - .../vote/detail/reject/{ => [id]}/layout.tsx | 2 +- src/app/dev/vote/detail/reject/[id]/page.tsx | 13 + src/app/dev/vote/detail/reject/page.tsx | 7 - .../dev/vote/detail/review/[id]/layout.tsx | 2 +- src/app/dev/vote/detail/review/[id]/page.tsx | 4 +- .../detail/riwayat_saya/{ => [id]}/layout.tsx | 2 +- .../vote/detail/riwayat_saya/[id]/page.tsx | 19 ++ src/app/dev/vote/detail/riwayat_saya/page.tsx | 9 - .../semua_riwayat/{ => [id]}/layout.tsx | 2 +- .../vote/detail/semua_riwayat/[id]/page.tsx | 19 ++ .../dev/vote/detail/semua_riwayat/page.tsx | 10 - src/app/dev/vote/edit/{ => [id]}/layout.tsx | 2 +- src/app/dev/vote/edit/[id]/page.tsx | 20 ++ src/app/dev/vote/edit/page.tsx | 9 - src/app/dev/vote/main/beranda/page.tsx | 13 +- src/app/dev/vote/main/kontribusi/page.tsx | 6 +- src/app/dev/vote/main/layout.tsx | 2 +- src/app/dev/vote/main/riwayat/page.tsx | 12 +- src/app/dev/vote/main/status/page.tsx | 5 +- src/app/dev/vote/splash/page.tsx | 2 +- src/app/lib/router_hipmi/router_vote.ts | 16 +- .../{voting => vote}/child/riwayat/index.tsx | 84 +++-- .../child/table_publish/index.tsx | 85 +++-- .../admin/vote/child/table_reject/index.tsx | 242 ++++++++++++++ .../admin/vote/child/table_review/index.tsx | 253 ++++++++++++++ .../fun/count/fun_count_vote_by_status_id.ts | 68 ++++ .../fun/edit/fun_edit_catatan_reject_by_id.ts | 22 ++ .../fun/edit/fun_edit_status_publish_by_id.ts | 23 ++ .../fun/edit/fun_edit_status_reject_by_id.ts | 26 ++ .../fun/get/get_list_table_by_status_id.ts | 117 +++++++ .../admin/{voting => vote}/index.ts | 0 .../admin/{voting => vote}/main/index.tsx | 16 +- .../admin/voting/child/table_reject/index.tsx | 176 ---------- .../admin/voting/child/table_review/index.tsx | 164 --------- .../event/component/detail/list_peserta.tsx | 4 +- .../event/detail/publish/index.tsx | 8 +- src/app_modules/home/layout.tsx | 10 +- src/app_modules/home/view.tsx | 9 +- .../vote/component/card_view_publish.tsx | 142 ++++++++ .../component/card_view_status.tsx | 28 -- .../detail/detail_daftar_kontributor.tsx | 92 +++++ .../detail/detail_data_sebelum_publish.tsx} | 45 +-- .../detail/detail_data_setelah_publish.tsx | 74 ++++ .../detail/detail_data_tanpa_vote.tsx | 0 .../component/detail/detail_hasil_voting.tsx | 53 +++ .../component/header_tamplate.tsx | 0 .../vote/component/is_empty_data.tsx | 13 + .../{voting => vote}/create/index.tsx | 6 +- .../{voting => vote}/create/layout.tsx | 0 .../{voting => vote}/detail/draft/index.tsx | 52 ++- .../{voting => vote}/detail/draft/layout.tsx | 4 +- .../vote/detail/kontribusi/index.tsx | 43 +++ .../detail/kontribusi/layout.tsx | 0 src/app_modules/vote/detail/main/index.tsx | 315 ++++++++++++++++++ .../{voting => vote}/detail/main/layout.tsx | 0 src/app_modules/vote/detail/publish/index.tsx | 81 +++++ .../detail/publish/layout.tsx | 0 .../{voting => vote}/detail/reject/index.tsx | 42 ++- .../{voting => vote}/detail/reject/layout.tsx | 0 src/app_modules/vote/detail/review/index.tsx | 69 ++++ .../{voting => vote}/detail/review/layout.tsx | 0 .../detail/riwayat_saya/layout.tsx | 0 .../vote/detail/riwayat_saya/page.tsx | 30 ++ .../detail/semua_riwayat/layout.tsx | 0 .../vote/detail/semua_riwayat/page.tsx | 29 ++ src/app_modules/vote/edit/index.tsx | 162 +++++++++ .../{voting => vote}/edit/layout.tsx | 0 .../vote/fun/create/create_hasil.ts | 46 +++ .../vote/fun/create/create_pilihan_voting.ts | 24 ++ .../fun/create/create_vote.ts | 0 .../vote/fun/delete/fun_delete_by_id.ts | 26 ++ .../vote/fun/edit/fun_edit_by_id.ts | 48 +++ .../vote/fun/edit/fun_edit_status_by_id.ts | 26 ++ .../vote/fun/get/cek_kontributor_by_id.ts | 21 ++ .../vote/fun/get/get_all_list_publish.ts | 47 +++ .../vote/fun/get/get_all_list_riwayat.ts | 46 +++ .../vote/fun/get/get_all_list_riwayat_saya.ts | 49 +++ .../fun/get/get_list_daftar_vote_by_id.ts | 13 + .../vote/fun/get/get_list_hasil_by_id.ts | 42 +++ .../get/get_list_kontribusi_by_author_id.ts | 41 +++ .../fun/get/get_list_kontributor_by_id.ts | 26 ++ .../fun/get/get_list_status_by_status_id.ts | 37 ++ .../{voting => vote}/fun/get/get_one_by_id.ts | 12 +- .../get/get_one_pilihan_voting_by_user_id.ts | 23 ++ .../vote/fun/get/get_one_publish_by_id.ts | 36 ++ .../{voting => vote}/global_state/index.ts | 0 src/app_modules/{voting => vote}/index.tsx | 0 .../{voting => vote}/main/beranda.tsx | 24 +- src/app_modules/vote/main/kontribusi.tsx | 47 +++ .../{voting => vote}/main/layout.tsx | 0 .../{voting => vote}/main/riwayat/index.tsx | 15 +- .../{voting => vote}/main/riwayat/saya.tsx | 25 +- .../{voting => vote}/main/riwayat/semua.tsx | 25 +- src/app_modules/vote/main/status/draft.tsx | 31 ++ .../{voting => vote}/main/status/index.tsx | 6 +- src/app_modules/vote/main/status/publish.tsx | 54 +++ src/app_modules/vote/main/status/reject.tsx | 31 ++ .../{voting => vote}/main/status/review.tsx | 7 +- .../{voting => vote}/model/interface.ts | 17 +- .../{voting => vote}/splash/index.tsx | 0 .../voting/component/card_view_publish.tsx | 91 ----- .../voting/component/detail/daftar_voter.tsx | 53 --- .../voting/component/detail/hasil_voting.tsx | 76 ----- .../voting/detail/kontribusi/index.tsx | 76 ----- src/app_modules/voting/detail/main/index.tsx | 107 ------ .../voting/detail/publish/index.tsx | 78 ----- .../voting/detail/review/index.tsx | 56 ---- .../voting/detail/riwayat_saya/page.tsx | 5 - .../voting/detail/semua_riwayat/page.tsx | 18 - src/app_modules/voting/edit/index.tsx | 119 ------- src/app_modules/voting/main/kontribusi.tsx | 40 --- src/app_modules/voting/main/status/draft.tsx | 12 - .../voting/main/status/publish.tsx | 81 ----- src/app_modules/voting/main/status/reject.tsx | 12 - 135 files changed, 3160 insertions(+), 1501 deletions(-) create mode 100644 src/app/dev/vote/detail/draft/[id]/layout.tsx create mode 100644 src/app/dev/vote/detail/draft/[id]/page.tsx delete mode 100644 src/app/dev/vote/detail/draft/layout.tsx delete mode 100644 src/app/dev/vote/detail/draft/page.tsx rename src/app/dev/vote/detail/kontribusi/{ => [id]}/layout.tsx (76%) create mode 100644 src/app/dev/vote/detail/kontribusi/[id]/page.tsx delete mode 100644 src/app/dev/vote/detail/kontribusi/page.tsx rename src/app/dev/vote/detail/main/{ => [id]}/layout.tsx (77%) create mode 100644 src/app/dev/vote/detail/main/[id]/page.tsx delete mode 100644 src/app/dev/vote/detail/main/page.tsx rename src/app/dev/vote/detail/publish/{ => [id]}/layout.tsx (76%) create mode 100644 src/app/dev/vote/detail/publish/[id]/page.tsx delete mode 100644 src/app/dev/vote/detail/publish/page.tsx rename src/app/dev/vote/detail/reject/{ => [id]}/layout.tsx (75%) create mode 100644 src/app/dev/vote/detail/reject/[id]/page.tsx delete mode 100644 src/app/dev/vote/detail/reject/page.tsx rename src/app/dev/vote/detail/riwayat_saya/{ => [id]}/layout.tsx (76%) create mode 100644 src/app/dev/vote/detail/riwayat_saya/[id]/page.tsx delete mode 100644 src/app/dev/vote/detail/riwayat_saya/page.tsx rename src/app/dev/vote/detail/semua_riwayat/{ => [id]}/layout.tsx (98%) create mode 100644 src/app/dev/vote/detail/semua_riwayat/[id]/page.tsx delete mode 100644 src/app/dev/vote/detail/semua_riwayat/page.tsx rename src/app/dev/vote/edit/{ => [id]}/layout.tsx (78%) create mode 100644 src/app/dev/vote/edit/[id]/page.tsx delete mode 100644 src/app/dev/vote/edit/page.tsx rename src/app_modules/admin/{voting => vote}/child/riwayat/index.tsx (74%) rename src/app_modules/admin/{voting => vote}/child/table_publish/index.tsx (74%) create mode 100644 src/app_modules/admin/vote/child/table_reject/index.tsx create mode 100644 src/app_modules/admin/vote/child/table_review/index.tsx create mode 100644 src/app_modules/admin/vote/fun/count/fun_count_vote_by_status_id.ts create mode 100644 src/app_modules/admin/vote/fun/edit/fun_edit_catatan_reject_by_id.ts create mode 100644 src/app_modules/admin/vote/fun/edit/fun_edit_status_publish_by_id.ts create mode 100644 src/app_modules/admin/vote/fun/edit/fun_edit_status_reject_by_id.ts create mode 100644 src/app_modules/admin/vote/fun/get/get_list_table_by_status_id.ts rename src/app_modules/admin/{voting => vote}/index.ts (100%) rename src/app_modules/admin/{voting => vote}/main/index.tsx (96%) delete mode 100644 src/app_modules/admin/voting/child/table_reject/index.tsx delete mode 100644 src/app_modules/admin/voting/child/table_review/index.tsx create mode 100644 src/app_modules/vote/component/card_view_publish.tsx rename src/app_modules/{voting => vote}/component/card_view_status.tsx (64%) create mode 100644 src/app_modules/vote/component/detail/detail_daftar_kontributor.tsx rename src/app_modules/{voting/component/detail/detail_data.tsx => vote/component/detail/detail_data_sebelum_publish.tsx} (66%) create mode 100644 src/app_modules/vote/component/detail/detail_data_setelah_publish.tsx rename src/app_modules/{voting => vote}/component/detail/detail_data_tanpa_vote.tsx (100%) create mode 100644 src/app_modules/vote/component/detail/detail_hasil_voting.tsx rename src/app_modules/{voting => vote}/component/header_tamplate.tsx (100%) create mode 100644 src/app_modules/vote/component/is_empty_data.tsx rename src/app_modules/{voting => vote}/create/index.tsx (98%) rename src/app_modules/{voting => vote}/create/layout.tsx (100%) rename src/app_modules/{voting => vote}/detail/draft/index.tsx (51%) rename src/app_modules/{voting => vote}/detail/draft/layout.tsx (89%) create mode 100644 src/app_modules/vote/detail/kontribusi/index.tsx rename src/app_modules/{voting => vote}/detail/kontribusi/layout.tsx (100%) create mode 100644 src/app_modules/vote/detail/main/index.tsx rename src/app_modules/{voting => vote}/detail/main/layout.tsx (100%) create mode 100644 src/app_modules/vote/detail/publish/index.tsx rename src/app_modules/{voting => vote}/detail/publish/layout.tsx (100%) rename src/app_modules/{voting => vote}/detail/reject/index.tsx (57%) rename src/app_modules/{voting => vote}/detail/reject/layout.tsx (100%) create mode 100644 src/app_modules/vote/detail/review/index.tsx rename src/app_modules/{voting => vote}/detail/review/layout.tsx (100%) rename src/app_modules/{voting => vote}/detail/riwayat_saya/layout.tsx (100%) create mode 100644 src/app_modules/vote/detail/riwayat_saya/page.tsx rename src/app_modules/{voting => vote}/detail/semua_riwayat/layout.tsx (100%) create mode 100644 src/app_modules/vote/detail/semua_riwayat/page.tsx create mode 100644 src/app_modules/vote/edit/index.tsx rename src/app_modules/{voting => vote}/edit/layout.tsx (100%) create mode 100644 src/app_modules/vote/fun/create/create_hasil.ts create mode 100644 src/app_modules/vote/fun/create/create_pilihan_voting.ts rename src/app_modules/{voting => vote}/fun/create/create_vote.ts (100%) create mode 100644 src/app_modules/vote/fun/delete/fun_delete_by_id.ts create mode 100644 src/app_modules/vote/fun/edit/fun_edit_by_id.ts create mode 100644 src/app_modules/vote/fun/edit/fun_edit_status_by_id.ts create mode 100644 src/app_modules/vote/fun/get/cek_kontributor_by_id.ts create mode 100644 src/app_modules/vote/fun/get/get_all_list_publish.ts create mode 100644 src/app_modules/vote/fun/get/get_all_list_riwayat.ts create mode 100644 src/app_modules/vote/fun/get/get_all_list_riwayat_saya.ts create mode 100644 src/app_modules/vote/fun/get/get_list_daftar_vote_by_id.ts create mode 100644 src/app_modules/vote/fun/get/get_list_hasil_by_id.ts create mode 100644 src/app_modules/vote/fun/get/get_list_kontribusi_by_author_id.ts create mode 100644 src/app_modules/vote/fun/get/get_list_kontributor_by_id.ts rename src/app_modules/{voting => vote}/fun/get/get_list_status_by_status_id.ts (56%) rename src/app_modules/{voting => vote}/fun/get/get_one_by_id.ts (73%) create mode 100644 src/app_modules/vote/fun/get/get_one_pilihan_voting_by_user_id.ts create mode 100644 src/app_modules/vote/fun/get/get_one_publish_by_id.ts rename src/app_modules/{voting => vote}/global_state/index.ts (100%) rename src/app_modules/{voting => vote}/index.tsx (100%) rename src/app_modules/{voting => vote}/main/beranda.tsx (66%) create mode 100644 src/app_modules/vote/main/kontribusi.tsx rename src/app_modules/{voting => vote}/main/layout.tsx (100%) rename src/app_modules/{voting => vote}/main/riwayat/index.tsx (79%) rename src/app_modules/{voting => vote}/main/riwayat/saya.tsx (52%) rename src/app_modules/{voting => vote}/main/riwayat/semua.tsx (53%) create mode 100644 src/app_modules/vote/main/status/draft.tsx rename src/app_modules/{voting => vote}/main/status/index.tsx (90%) create mode 100644 src/app_modules/vote/main/status/publish.tsx create mode 100644 src/app_modules/vote/main/status/reject.tsx rename src/app_modules/{voting => vote}/main/status/review.tsx (70%) rename src/app_modules/{voting => vote}/model/interface.ts (59%) rename src/app_modules/{voting => vote}/splash/index.tsx (100%) delete mode 100644 src/app_modules/voting/component/card_view_publish.tsx delete mode 100644 src/app_modules/voting/component/detail/daftar_voter.tsx delete mode 100644 src/app_modules/voting/component/detail/hasil_voting.tsx delete mode 100644 src/app_modules/voting/detail/kontribusi/index.tsx delete mode 100644 src/app_modules/voting/detail/main/index.tsx delete mode 100644 src/app_modules/voting/detail/publish/index.tsx delete mode 100644 src/app_modules/voting/detail/review/index.tsx delete mode 100644 src/app_modules/voting/detail/riwayat_saya/page.tsx delete mode 100644 src/app_modules/voting/detail/semua_riwayat/page.tsx delete mode 100644 src/app_modules/voting/edit/index.tsx delete mode 100644 src/app_modules/voting/main/kontribusi.tsx delete mode 100644 src/app_modules/voting/main/status/draft.tsx delete mode 100644 src/app_modules/voting/main/status/publish.tsx delete mode 100644 src/app_modules/voting/main/status/reject.tsx diff --git a/prisma/schema.prisma b/prisma/schema.prisma index f4b75c3a..92dc1bda 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -29,6 +29,7 @@ model User { Event Event[] Event_Peserta Event_Peserta[] Voting Voting[] + Voting_Kontributor Voting_Kontributor[] } model MasterUserRole { @@ -553,6 +554,7 @@ model Voting { Voting_Status Voting_Status? @relation(fields: [voting_StatusId], references: [id]) voting_StatusId String? @default("2") Voting_DaftarNamaVote Voting_DaftarNamaVote[] + Voting_Kontributor Voting_Kontributor[] } model Voting_Status { @@ -567,10 +569,27 @@ model Voting_Status { model Voting_DaftarNamaVote { id String @id @default(cuid()) value String + jumlah Int @default(0) isActive Boolean @default(true) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt - Voting Voting? @relation(fields: [votingId], references: [id]) - votingId String? + Voting Voting? @relation(fields: [votingId], references: [id]) + votingId String? + Voting_Kontributor Voting_Kontributor[] +} + +model Voting_Kontributor { + id String @id @default(cuid()) + isActive Boolean @default(true) + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + + Voting Voting? @relation(fields: [votingId], references: [id]) + votingId String? + Author User? @relation(fields: [authorId], references: [id]) + authorId String? + Voting_DaftarNamaVote Voting_DaftarNamaVote? @relation(fields: [voting_DaftarNamaVoteId], references: [id]) + voting_DaftarNamaVoteId String? + } diff --git a/src/app/dev/admin/vote/child/riwayat/page.tsx b/src/app/dev/admin/vote/child/riwayat/page.tsx index ffd9aea1..5e340dc1 100644 --- a/src/app/dev/admin/vote/child/riwayat/page.tsx +++ b/src/app/dev/admin/vote/child/riwayat/page.tsx @@ -1,9 +1,12 @@ -import { AdminVote_Riwayat } from "@/app_modules/admin/voting"; +import { AdminVote_Riwayat } from "@/app_modules/admin/vote"; +import { AdminVote_getListTableByStatusId } from "@/app_modules/admin/vote/fun/get/get_list_table_by_status_id"; export default async function Page() { + const dataVote = await AdminVote_getListTableByStatusId("0"); + return ( <> - + ); } diff --git a/src/app/dev/admin/vote/child/table_publish/page.tsx b/src/app/dev/admin/vote/child/table_publish/page.tsx index f5787e5b..05f09fd9 100644 --- a/src/app/dev/admin/vote/child/table_publish/page.tsx +++ b/src/app/dev/admin/vote/child/table_publish/page.tsx @@ -1,7 +1,12 @@ -import { AdminVote_TablePublish } from "@/app_modules/admin/voting"; +import { AdminVote_TablePublish } from "@/app_modules/admin/vote"; +import { AdminVote_getListTableByStatusId } from "@/app_modules/admin/vote/fun/get/get_list_table_by_status_id"; export default async function Page() { - return<> - - + const dataVote = await AdminVote_getListTableByStatusId("1") + + return ( + <> + + + ); } \ No newline at end of file diff --git a/src/app/dev/admin/vote/child/table_reject/page.tsx b/src/app/dev/admin/vote/child/table_reject/page.tsx index 453f9120..2eb2d72b 100644 --- a/src/app/dev/admin/vote/child/table_reject/page.tsx +++ b/src/app/dev/admin/vote/child/table_reject/page.tsx @@ -1,8 +1,11 @@ -import { AdminVote_TableReject } from "@/app_modules/admin/voting"; - +import { AdminVote_TableReject } from "@/app_modules/admin/vote"; +import { AdminVote_getListTableByStatusId } from "@/app_modules/admin/vote/fun/get/get_list_table_by_status_id"; export default async function Page() { - return<> - + const dataVote = await AdminVote_getListTableByStatusId("4"); + return ( + <> + -} \ No newline at end of file + ); +} diff --git a/src/app/dev/admin/vote/child/table_review/page.tsx b/src/app/dev/admin/vote/child/table_review/page.tsx index 0e0b9cf0..25ff7f2e 100644 --- a/src/app/dev/admin/vote/child/table_review/page.tsx +++ b/src/app/dev/admin/vote/child/table_review/page.tsx @@ -1,9 +1,13 @@ -import { AdminVote_TableReview } from "@/app_modules/admin/voting"; +import { AdminVote_TableReview } from "@/app_modules/admin/vote"; +import { AdminVote_getListTableByStatusId } from "@/app_modules/admin/vote/fun/get/get_list_table_by_status_id"; + export default async function Page() { + const listVote = await AdminVote_getListTableByStatusId("2") + return ( <> - + ); } diff --git a/src/app/dev/admin/vote/main/page.tsx b/src/app/dev/admin/vote/main/page.tsx index a10f1d26..6fefc7ff 100644 --- a/src/app/dev/admin/vote/main/page.tsx +++ b/src/app/dev/admin/vote/main/page.tsx @@ -1,9 +1,20 @@ -import { AdminVote_Main } from "@/app_modules/admin/voting"; +import { AdminVote_Main } from "@/app_modules/admin/vote"; +import AdminVote_funCountByStatusId from "@/app_modules/admin/vote/fun/count/fun_count_vote_by_status_id"; export default async function Page() { + const countPublish = await AdminVote_funCountByStatusId("1"); + const countReview = await AdminVote_funCountByStatusId("2"); + const countDraft = await AdminVote_funCountByStatusId("0"); + const countReject = await AdminVote_funCountByStatusId("4"); + return ( <> - + ); } diff --git a/src/app/dev/vote/create/layout.tsx b/src/app/dev/vote/create/layout.tsx index 0260b455..3152ab64 100644 --- a/src/app/dev/vote/create/layout.tsx +++ b/src/app/dev/vote/create/layout.tsx @@ -1,4 +1,4 @@ -import { LayoutVote_Create } from "@/app_modules/voting"; +import { LayoutVote_Create } from "@/app_modules/vote"; import React from "react"; export default async function Layout({ diff --git a/src/app/dev/vote/create/page.tsx b/src/app/dev/vote/create/page.tsx index 8b5db090..a1d28226 100644 --- a/src/app/dev/vote/create/page.tsx +++ b/src/app/dev/vote/create/page.tsx @@ -1,4 +1,4 @@ -import { Vote_Create } from "@/app_modules/voting"; +import { Vote_Create } from "@/app_modules/vote"; export default async function Page() { return ( diff --git a/src/app/dev/vote/detail/draft/[id]/layout.tsx b/src/app/dev/vote/detail/draft/[id]/layout.tsx new file mode 100644 index 00000000..ba62a6ef --- /dev/null +++ b/src/app/dev/vote/detail/draft/[id]/layout.tsx @@ -0,0 +1,19 @@ +import { LayoutVote_DetailDraft } from "@/app_modules/vote"; +import React from "react"; + +export default function Layout({ + children, + params, +}: { + children: React.ReactNode; + params: { id: string }; +}) { + let voteId = params.id; + return ( + <> + + {children} + + + ); +} diff --git a/src/app/dev/vote/detail/draft/[id]/page.tsx b/src/app/dev/vote/detail/draft/[id]/page.tsx new file mode 100644 index 00000000..850cb121 --- /dev/null +++ b/src/app/dev/vote/detail/draft/[id]/page.tsx @@ -0,0 +1,13 @@ +import { Vote_DetailDraft } from "@/app_modules/vote"; +import { Vote_getOnebyId } from "@/app_modules/vote/fun/get/get_one_by_id"; + +export default async function Page({ params }: { params: { id: string } }) { + const voteId = params.id; + const dataVote = await Vote_getOnebyId(voteId); + + return ( + <> + + + ); +} diff --git a/src/app/dev/vote/detail/draft/layout.tsx b/src/app/dev/vote/detail/draft/layout.tsx deleted file mode 100644 index e8b9014f..00000000 --- a/src/app/dev/vote/detail/draft/layout.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import { LayoutVote_DetailDraft } from "@/app_modules/voting"; -import React from "react"; - -export default function Layout({ children }: { children: React.ReactNode }) { - return ( - <> - {children} - - ); -} diff --git a/src/app/dev/vote/detail/draft/page.tsx b/src/app/dev/vote/detail/draft/page.tsx deleted file mode 100644 index 29871752..00000000 --- a/src/app/dev/vote/detail/draft/page.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import { Vote_DetailDraft } from "@/app_modules/voting"; - -export default function Page() { - return ( - <> - - - ); -} diff --git a/src/app/dev/vote/detail/kontribusi/layout.tsx b/src/app/dev/vote/detail/kontribusi/[id]/layout.tsx similarity index 76% rename from src/app/dev/vote/detail/kontribusi/layout.tsx rename to src/app/dev/vote/detail/kontribusi/[id]/layout.tsx index 00cb01fb..ca76dac8 100644 --- a/src/app/dev/vote/detail/kontribusi/layout.tsx +++ b/src/app/dev/vote/detail/kontribusi/[id]/layout.tsx @@ -1,4 +1,4 @@ -import { LayoutVote_DetailKontribusi } from "@/app_modules/voting"; +import { LayoutVote_DetailKontribusi } from "@/app_modules/vote"; import React from "react"; export default async function Layout({ diff --git a/src/app/dev/vote/detail/kontribusi/[id]/page.tsx b/src/app/dev/vote/detail/kontribusi/[id]/page.tsx new file mode 100644 index 00000000..75dd7eb3 --- /dev/null +++ b/src/app/dev/vote/detail/kontribusi/[id]/page.tsx @@ -0,0 +1,19 @@ +import { Vote_DetailKontribusi } from "@/app_modules/vote"; +import { Vote_getListKontributorById } from "@/app_modules/vote/fun/get/get_list_kontributor_by_id"; +import { Vote_getOnebyId } from "@/app_modules/vote/fun/get/get_one_by_id"; + +export default async function Page({ params }: { params: { id: string } }) { + let voteId = params.id; + const dataVote = await Vote_getOnebyId(voteId) + const listKontributor = await Vote_getListKontributorById(voteId) + + + return ( + <> + + + ); +} diff --git a/src/app/dev/vote/detail/kontribusi/page.tsx b/src/app/dev/vote/detail/kontribusi/page.tsx deleted file mode 100644 index 5a72290c..00000000 --- a/src/app/dev/vote/detail/kontribusi/page.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import { Vote_DetailKontribusi } from "@/app_modules/voting"; - -export default async function Page() { - return ( - <> - - - ); -} diff --git a/src/app/dev/vote/detail/main/layout.tsx b/src/app/dev/vote/detail/main/[id]/layout.tsx similarity index 77% rename from src/app/dev/vote/detail/main/layout.tsx rename to src/app/dev/vote/detail/main/[id]/layout.tsx index 84fa8d5f..6e978bef 100644 --- a/src/app/dev/vote/detail/main/layout.tsx +++ b/src/app/dev/vote/detail/main/[id]/layout.tsx @@ -1,4 +1,4 @@ -import { LayoutVote_MainDetail } from "@/app_modules/voting"; +import { LayoutVote_MainDetail } from "@/app_modules/vote"; import React from "react"; export default async function Layout({ diff --git a/src/app/dev/vote/detail/main/[id]/page.tsx b/src/app/dev/vote/detail/main/[id]/page.tsx new file mode 100644 index 00000000..197f4b7e --- /dev/null +++ b/src/app/dev/vote/detail/main/[id]/page.tsx @@ -0,0 +1,29 @@ +import prisma from "@/app/lib/prisma"; +import { Vote_MainDetail } from "@/app_modules/vote"; +import { Vote_getHasilVoteById } from "@/app_modules/vote/fun/get/get_list_hasil_by_id"; +import { Vote_cekKontributorById } from "@/app_modules/vote/fun/get/cek_kontributor_by_id"; +import { Vote_getOnebyId } from "@/app_modules/vote/fun/get/get_one_by_id"; +import { Vote_getOnePilihanVotingByUserId } from "@/app_modules/vote/fun/get/get_one_pilihan_voting_by_user_id"; +import { Vote_getListKontributorById } from "@/app_modules/vote/fun/get/get_list_kontributor_by_id"; + +export default async function Page({ params }: { params: { id: string } }) { + const voteId = params.id; + const dataVote = await Vote_getOnebyId(voteId); + const hasilVoting = await Vote_getHasilVoteById(voteId as any); + const isKontributor = await Vote_cekKontributorById(voteId); + const pilihanKontributor = await Vote_getOnePilihanVotingByUserId(voteId); + const listKontributor = await Vote_getListKontributorById(voteId); + + + return ( + <> + + + ); +} diff --git a/src/app/dev/vote/detail/main/page.tsx b/src/app/dev/vote/detail/main/page.tsx deleted file mode 100644 index e7ea2a44..00000000 --- a/src/app/dev/vote/detail/main/page.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import { Vote_MainDetail } from "@/app_modules/voting"; - -export default async function Page(){ - return<> - - -} \ No newline at end of file diff --git a/src/app/dev/vote/detail/publish/layout.tsx b/src/app/dev/vote/detail/publish/[id]/layout.tsx similarity index 76% rename from src/app/dev/vote/detail/publish/layout.tsx rename to src/app/dev/vote/detail/publish/[id]/layout.tsx index d76bb437..6730430a 100644 --- a/src/app/dev/vote/detail/publish/layout.tsx +++ b/src/app/dev/vote/detail/publish/[id]/layout.tsx @@ -1,4 +1,4 @@ -import { LayoutVote_DetailPublish } from "@/app_modules/voting"; +import { LayoutVote_DetailPublish } from "@/app_modules/vote"; import React from "react"; export default function Layout({ children }: { children: React.ReactNode }) { diff --git a/src/app/dev/vote/detail/publish/[id]/page.tsx b/src/app/dev/vote/detail/publish/[id]/page.tsx new file mode 100644 index 00000000..a0db9358 --- /dev/null +++ b/src/app/dev/vote/detail/publish/[id]/page.tsx @@ -0,0 +1,18 @@ +import { Vote_DetailPublish } from "@/app_modules/vote"; +import { Vote_getListKontributorById } from "@/app_modules/vote/fun/get/get_list_kontributor_by_id"; +import { Vote_getOnebyId } from "@/app_modules/vote/fun/get/get_one_by_id"; + +export default async function Page({ params }: { params: { id: string } }) { + let voteId = params.id; + const dataVote = await Vote_getOnebyId(voteId); + const listKontributor = await Vote_getListKontributorById(voteId); + + return ( + <> + + + ); +} diff --git a/src/app/dev/vote/detail/publish/page.tsx b/src/app/dev/vote/detail/publish/page.tsx deleted file mode 100644 index 5b51553f..00000000 --- a/src/app/dev/vote/detail/publish/page.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import { Vote_DetailPublish } from "@/app_modules/voting"; - -export default function Page(){ - return <> - - -} \ No newline at end of file diff --git a/src/app/dev/vote/detail/reject/layout.tsx b/src/app/dev/vote/detail/reject/[id]/layout.tsx similarity index 75% rename from src/app/dev/vote/detail/reject/layout.tsx rename to src/app/dev/vote/detail/reject/[id]/layout.tsx index efc4e488..469f132a 100644 --- a/src/app/dev/vote/detail/reject/layout.tsx +++ b/src/app/dev/vote/detail/reject/[id]/layout.tsx @@ -1,4 +1,4 @@ -import { LayoutVote_DetailReject } from "@/app_modules/voting"; +import { LayoutVote_DetailReject } from "@/app_modules/vote"; import React from "react"; export default async function Layout({children}: {children: React.ReactNode}) { diff --git a/src/app/dev/vote/detail/reject/[id]/page.tsx b/src/app/dev/vote/detail/reject/[id]/page.tsx new file mode 100644 index 00000000..3f4c1b5f --- /dev/null +++ b/src/app/dev/vote/detail/reject/[id]/page.tsx @@ -0,0 +1,13 @@ +import { Vote_DetailReject } from "@/app_modules/vote"; +import { Vote_getOnebyId } from "@/app_modules/vote/fun/get/get_one_by_id"; + +export default async function Page({ params }: { params: { id: string } }) { + let voteId = params.id; + const dataVote = await Vote_getOnebyId(voteId); + + return ( + <> + + + ); +} diff --git a/src/app/dev/vote/detail/reject/page.tsx b/src/app/dev/vote/detail/reject/page.tsx deleted file mode 100644 index e68681d4..00000000 --- a/src/app/dev/vote/detail/reject/page.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import { Vote_DetailReject } from "@/app_modules/voting"; - -export default async function Page() { - return <> - - -} \ No newline at end of file diff --git a/src/app/dev/vote/detail/review/[id]/layout.tsx b/src/app/dev/vote/detail/review/[id]/layout.tsx index 956ee61d..b749c3df 100644 --- a/src/app/dev/vote/detail/review/[id]/layout.tsx +++ b/src/app/dev/vote/detail/review/[id]/layout.tsx @@ -1,4 +1,4 @@ -import { LayoutVote_DetailReview } from "@/app_modules/voting"; +import { LayoutVote_DetailReview } from "@/app_modules/vote"; import React from "react"; export default function Layout({ children }: { children: React.ReactNode }) { diff --git a/src/app/dev/vote/detail/review/[id]/page.tsx b/src/app/dev/vote/detail/review/[id]/page.tsx index 47a6b238..a9dbd486 100644 --- a/src/app/dev/vote/detail/review/[id]/page.tsx +++ b/src/app/dev/vote/detail/review/[id]/page.tsx @@ -1,5 +1,5 @@ -import { Vote_DetailReview } from "@/app_modules/voting"; -import { Vote_getOnebyId } from "@/app_modules/voting/fun/get/get_one_by_id"; +import { Vote_DetailReview } from "@/app_modules/vote"; +import { Vote_getOnebyId } from "@/app_modules/vote/fun/get/get_one_by_id"; export default async function Page({ params }: { params: { id: string } }) { let voteId = params.id; diff --git a/src/app/dev/vote/detail/riwayat_saya/layout.tsx b/src/app/dev/vote/detail/riwayat_saya/[id]/layout.tsx similarity index 76% rename from src/app/dev/vote/detail/riwayat_saya/layout.tsx rename to src/app/dev/vote/detail/riwayat_saya/[id]/layout.tsx index cc8023df..4d17c867 100644 --- a/src/app/dev/vote/detail/riwayat_saya/layout.tsx +++ b/src/app/dev/vote/detail/riwayat_saya/[id]/layout.tsx @@ -1,4 +1,4 @@ -import { LayoutVote_DetailRiwayatSaya } from "@/app_modules/voting"; +import { LayoutVote_DetailRiwayatSaya } from "@/app_modules/vote"; import React from "react"; export default async function Layout({ diff --git a/src/app/dev/vote/detail/riwayat_saya/[id]/page.tsx b/src/app/dev/vote/detail/riwayat_saya/[id]/page.tsx new file mode 100644 index 00000000..f4542ad0 --- /dev/null +++ b/src/app/dev/vote/detail/riwayat_saya/[id]/page.tsx @@ -0,0 +1,19 @@ +import { Vote_DetailRiwayatSaya } from "@/app_modules/vote"; +import { Vote_getListKontributorById } from "@/app_modules/vote/fun/get/get_list_kontributor_by_id"; +import { Vote_getOnePublishbyId } from "@/app_modules/vote/fun/get/get_one_publish_by_id"; + +export default async function Page({params}: {params: {id: string}}) { + let voteId = params.id; + const dataVote = await Vote_getOnePublishbyId(voteId); + const listKontributor = await Vote_getListKontributorById(voteId); + + + return ( + <> + + + ); +} diff --git a/src/app/dev/vote/detail/riwayat_saya/page.tsx b/src/app/dev/vote/detail/riwayat_saya/page.tsx deleted file mode 100644 index 26931d47..00000000 --- a/src/app/dev/vote/detail/riwayat_saya/page.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import { Vote_DetailRiwayatSaya } from "@/app_modules/voting"; - -export default async function Page() { - return ( - <> - - - ); -} diff --git a/src/app/dev/vote/detail/semua_riwayat/layout.tsx b/src/app/dev/vote/detail/semua_riwayat/[id]/layout.tsx similarity index 98% rename from src/app/dev/vote/detail/semua_riwayat/layout.tsx rename to src/app/dev/vote/detail/semua_riwayat/[id]/layout.tsx index 82e9c332..4723aa9d 100644 --- a/src/app/dev/vote/detail/semua_riwayat/layout.tsx +++ b/src/app/dev/vote/detail/semua_riwayat/[id]/layout.tsx @@ -1,4 +1,4 @@ -import { LayoutVote_DetailSemuaRiwayat } from "@/app_modules/voting"; +import { LayoutVote_DetailSemuaRiwayat } from "@/app_modules/vote"; import React from "react"; export default async function Layout({ diff --git a/src/app/dev/vote/detail/semua_riwayat/[id]/page.tsx b/src/app/dev/vote/detail/semua_riwayat/[id]/page.tsx new file mode 100644 index 00000000..6d943acd --- /dev/null +++ b/src/app/dev/vote/detail/semua_riwayat/[id]/page.tsx @@ -0,0 +1,19 @@ +import { Vote_DetailSemuaRiwayat } from "@/app_modules/vote"; +import { Vote_getListKontributorById } from "@/app_modules/vote/fun/get/get_list_kontributor_by_id"; +import { Vote_getOnePublishbyId } from "@/app_modules/vote/fun/get/get_one_publish_by_id"; + + +export default async function Page({params}: {params: {id: string}}) { + let voteId = params.id + const dataVote = await Vote_getOnePublishbyId(voteId) + const listKontributor = await Vote_getListKontributorById(voteId) + + return ( + <> + + + ); +} diff --git a/src/app/dev/vote/detail/semua_riwayat/page.tsx b/src/app/dev/vote/detail/semua_riwayat/page.tsx deleted file mode 100644 index 0013d8c6..00000000 --- a/src/app/dev/vote/detail/semua_riwayat/page.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import { Vote_DetailSemuaRiwayat } from "@/app_modules/voting"; - - -export default async function Page() { - return ( - <> - - - ); -} diff --git a/src/app/dev/vote/edit/layout.tsx b/src/app/dev/vote/edit/[id]/layout.tsx similarity index 78% rename from src/app/dev/vote/edit/layout.tsx rename to src/app/dev/vote/edit/[id]/layout.tsx index 64609cda..c84da67c 100644 --- a/src/app/dev/vote/edit/layout.tsx +++ b/src/app/dev/vote/edit/[id]/layout.tsx @@ -1,4 +1,4 @@ -import { LayoutVote_Edit } from "@/app_modules/voting"; +import { LayoutVote_Edit } from "@/app_modules/vote"; import React from "react"; export default async function Layout({ diff --git a/src/app/dev/vote/edit/[id]/page.tsx b/src/app/dev/vote/edit/[id]/page.tsx new file mode 100644 index 00000000..d43d25e6 --- /dev/null +++ b/src/app/dev/vote/edit/[id]/page.tsx @@ -0,0 +1,20 @@ +import { Vote_Edit } from "@/app_modules/vote"; +import { Vote_getListDaftarNamaById } from "@/app_modules/vote/fun/get/get_list_daftar_vote_by_id"; +import { Vote_getOnebyId } from "@/app_modules/vote/fun/get/get_one_by_id"; +import _ from "lodash"; + +export default async function Page({ params }: { params: { id: string } }) { + let voteId = params.id; + const dataVote = await Vote_getOnebyId(voteId); + const data = _.omit(dataVote, ["Voting_DaftarNamaVote"]); + const listDaftarVote = await Vote_getListDaftarNamaById(voteId); + + return ( + <> + + + ); +} diff --git a/src/app/dev/vote/edit/page.tsx b/src/app/dev/vote/edit/page.tsx deleted file mode 100644 index c48be60c..00000000 --- a/src/app/dev/vote/edit/page.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import { Vote_Edit } from "@/app_modules/voting"; - -export default async function Page() { - return ( - <> - - - ); -} diff --git a/src/app/dev/vote/main/beranda/page.tsx b/src/app/dev/vote/main/beranda/page.tsx index 0be44579..25623b91 100644 --- a/src/app/dev/vote/main/beranda/page.tsx +++ b/src/app/dev/vote/main/beranda/page.tsx @@ -1,7 +1,12 @@ -import { Vote_Beranda } from "@/app_modules/voting"; +import { Vote_Beranda } from "@/app_modules/vote"; +import { Vote_getAllListPublish } from "@/app_modules/vote/fun/get/get_all_list_publish"; export default async function Page() { - return<> - - + const dataVote = await Vote_getAllListPublish() + + return ( + <> + + + ); } \ No newline at end of file diff --git a/src/app/dev/vote/main/kontribusi/page.tsx b/src/app/dev/vote/main/kontribusi/page.tsx index b4e61164..fa11c1b2 100644 --- a/src/app/dev/vote/main/kontribusi/page.tsx +++ b/src/app/dev/vote/main/kontribusi/page.tsx @@ -1,10 +1,12 @@ -import { Vote_Kontribusi } from "@/app_modules/voting"; +import { Vote_Kontribusi } from "@/app_modules/vote"; +import { Vote_getAllListKontribusiByAuthorId } from "@/app_modules/vote/fun/get/get_list_kontribusi_by_author_id"; export default async function Page() { + const dataKontribusi = await Vote_getAllListKontribusiByAuthorId() return ( <> - + ); } diff --git a/src/app/dev/vote/main/layout.tsx b/src/app/dev/vote/main/layout.tsx index 350a485b..6c2e5673 100644 --- a/src/app/dev/vote/main/layout.tsx +++ b/src/app/dev/vote/main/layout.tsx @@ -1,4 +1,4 @@ -import { LayoutVote_Main } from "@/app_modules/voting"; +import { LayoutVote_Main } from "@/app_modules/vote"; import React from "react"; export default async function Layout({ diff --git a/src/app/dev/vote/main/riwayat/page.tsx b/src/app/dev/vote/main/riwayat/page.tsx index 5db6c1a8..76593fd8 100644 --- a/src/app/dev/vote/main/riwayat/page.tsx +++ b/src/app/dev/vote/main/riwayat/page.tsx @@ -1,9 +1,17 @@ -import { Vote_Riwayat } from "@/app_modules/voting"; +import { Vote_Riwayat } from "@/app_modules/vote"; +import { Vote_getAllListRiwayat } from "@/app_modules/vote/fun/get/get_all_list_riwayat"; +import { Vote_getAllListRiwayatSaya } from "@/app_modules/vote/fun/get/get_all_list_riwayat_saya"; export default async function Page() { + const listRiwayat = await Vote_getAllListRiwayat(); + const listRiwayatSaya = await Vote_getAllListRiwayatSaya() + return ( <> - + ); } diff --git a/src/app/dev/vote/main/status/page.tsx b/src/app/dev/vote/main/status/page.tsx index 91d1bb10..8c612930 100644 --- a/src/app/dev/vote/main/status/page.tsx +++ b/src/app/dev/vote/main/status/page.tsx @@ -1,5 +1,5 @@ -import { Vote_Status } from "@/app_modules/voting"; -import { Vote_getListByStatusId } from "@/app_modules/voting/fun/get/get_list_status_by_status_id"; +import { Vote_Status } from "@/app_modules/vote"; +import { Vote_getListByStatusId } from "@/app_modules/vote/fun/get/get_list_status_by_status_id"; export default async function Page() { const listPublish = await Vote_getListByStatusId("1"); @@ -7,6 +7,7 @@ export default async function Page() { const listDraft = await Vote_getListByStatusId("3"); const listReject = await Vote_getListByStatusId("4"); + return ( <> - + ); } -function TableStatus({ listPublish }: { listPublish: any[] }) { +function TableStatus({ listPublish }: { listPublish: MODEL_VOTING[] }) { const router = useRouter(); const [opened, { open, close }] = useDisclosure(false); const [data, setData] = useState(listPublish); @@ -47,45 +54,50 @@ function TableStatus({ listPublish }: { listPublish: any[] }) { const TableRows = data.map((e, i) => ( + +
+ +
+
{e.title}
- + {e.deskripsi}
- -
Mulai vote
- - -
Selesai vote
- - + + + {e.Voting_DaftarNamaVote.map((v) => ( + + - {v.value} + + ))} + +
- + {e.awalVote.toLocaleDateString("id-ID", { dateStyle: "long" })} +
+ + +
+ {e.akhirVote.toLocaleDateString("id-ID", { dateStyle: "long" })}
@@ -142,22 +154,24 @@ function TableStatus({ listPublish }: { listPublish: any[] }) { > + +
Aksi
+
Judul
Deskripsi
+ +
Pilihan
+
Mulai Vote
Selesai Vote
- - -
Aksi
- {TableRows} diff --git a/src/app_modules/admin/voting/child/table_publish/index.tsx b/src/app_modules/admin/vote/child/table_publish/index.tsx similarity index 74% rename from src/app_modules/admin/voting/child/table_publish/index.tsx rename to src/app_modules/admin/vote/child/table_publish/index.tsx index 9f720205..0c9236ec 100644 --- a/src/app_modules/admin/voting/child/table_publish/index.tsx +++ b/src/app_modules/admin/vote/child/table_publish/index.tsx @@ -3,10 +3,12 @@ import { RouterProfile } from "@/app/lib/router_hipmi/router_katalog"; import ComponentAdminGlobal_HeaderTamplate from "@/app_modules/admin/component/header_tamplate"; import { AdminEvent_getListPesertaById } from "@/app_modules/admin/event/fun/get/get_list_peserta_by_id"; +import { ComponentGlobal_NotifikasiPeringatan } from "@/app_modules/component_global/notif_global/notifikasi_peringatan"; import { MODEL_EVENT, MODEL_EVENT_PESERTA, } from "@/app_modules/event/model/interface"; +import { MODEL_VOTING } from "@/app_modules/vote/model/interface"; import { Avatar, Box, @@ -24,23 +26,27 @@ import { Title, } from "@mantine/core"; import { useDisclosure } from "@mantine/hooks"; -import { IconEyeShare } from "@tabler/icons-react"; +import { IconEyeCheck, IconEyeShare } from "@tabler/icons-react"; import _ from "lodash"; import { useRouter } from "next/navigation"; import { useState } from "react"; -export default function AdminVote_TablePublish() { +export default function AdminVote_TablePublish({ + dataVote, +}: { + dataVote: any; +}) { return ( <> - + ); } -function TableStatus({ listPublish }: { listPublish: any[] }) { +function TableStatus({ listPublish }: { listPublish: MODEL_VOTING[] }) { const router = useRouter(); const [opened, { open, close }] = useDisclosure(false); const [data, setData] = useState(listPublish); @@ -50,45 +56,50 @@ function TableStatus({ listPublish }: { listPublish: any[] }) { const TableRows = data.map((e, i) => ( + +
+ +
+
{e.title}
- + {e.deskripsi}
- -
Mulai vote
- - -
Selesai vote
- - + + + {e.Voting_DaftarNamaVote.map((v) => ( + + - {v.value} + + ))} + +
- + {e.awalVote.toLocaleDateString("id-ID", { dateStyle: "long" })} +
+ + +
+ {e.akhirVote.toLocaleDateString("id-ID", { dateStyle: "long" })}
@@ -145,22 +156,24 @@ function TableStatus({ listPublish }: { listPublish: any[] }) { > + +
Aksi
+
Judul
Deskripsi
+ +
Pilihan
+
Mulai Vote
Selesai Vote
- - -
Aksi
- {TableRows} diff --git a/src/app_modules/admin/vote/child/table_reject/index.tsx b/src/app_modules/admin/vote/child/table_reject/index.tsx new file mode 100644 index 00000000..7f5f28d1 --- /dev/null +++ b/src/app_modules/admin/vote/child/table_reject/index.tsx @@ -0,0 +1,242 @@ +"use client"; + +import { RouterProfile } from "@/app/lib/router_hipmi/router_katalog"; +import ComponentAdminGlobal_HeaderTamplate from "@/app_modules/admin/component/header_tamplate"; +import { AdminEvent_getListPesertaById } from "@/app_modules/admin/event/fun/get/get_list_peserta_by_id"; +import { MODEL_VOTING } from "@/app_modules/vote/model/interface"; +import { + Avatar, + Box, + Button, + Center, + Divider, + Grid, + Group, + Modal, + Paper, + ScrollArea, + Spoiler, + Stack, + Table, + Text, + Textarea, + Title, +} from "@mantine/core"; +import { useDisclosure } from "@mantine/hooks"; +import { IconBan, IconEyeShare } from "@tabler/icons-react"; +import _ from "lodash"; +import { useRouter } from "next/navigation"; +import { useState } from "react"; +import { AdminVote_funEditCatatanRejectById } from "../../fun/edit/fun_edit_catatan_reject_by_id"; +import { AdminVote_getListTableByStatusId } from "../../fun/get/get_list_table_by_status_id"; +import { ComponentGlobal_NotifikasiBerhasil } from "@/app_modules/component_global/notif_global/notifikasi_berhasil"; +import { ComponentGlobal_NotifikasiGagal } from "@/app_modules/component_global/notif_global/notifikasi_gagal"; + +export default function AdminVote_TableReject({ + dataVote, +}: { + dataVote: MODEL_VOTING[]; +}) { + return ( + <> + + + + + + ); +} + +function TableStatus({ listData }: { listData: MODEL_VOTING[] }) { + const router = useRouter(); + const [opened, { open, close }] = useDisclosure(false); + const [data, setData] = useState(listData); + const [votingId, setVotingId] = useState(""); + const [catatan, setCatatan] = useState(""); + + const TableRows = data.map((e, i) => ( + + +
+ +
+ + +
+ + {e.catatan} + +
+ + +
{e.title}
+ + +
+ + {e.deskripsi} + +
+ + + + {e.Voting_DaftarNamaVote.map((v) => ( + + - {v.value} + + ))} + + + +
+ {e.awalVote.toLocaleDateString("id-ID", { dateStyle: "long" })} +
+ + +
+ {e.akhirVote.toLocaleDateString("id-ID", { dateStyle: "long" })} +
+ + + )); + + return ( + <> + + +