From 34031355fec7fefd2816ca0f6aae1f33f8aaa344 Mon Sep 17 00:00:00 2001 From: Bagasbanuna02 Date: Thu, 15 Aug 2024 17:46:13 +0800 Subject: [PATCH 1/3] # feat ## Deskripsi: - Edit map - Sinkronisasi dengan data portofolio ### No Issue --- .gitignore | 2 - prisma/schema.prisma | 24 +- .../994abfea-c671-40e6-80ff-085d1ab630d8.jpeg | Bin 0 -> 13553 bytes .../9f873fae-7b5e-4c60-a5fa-cb6b63a1eba3.jpg | Bin 0 -> 13760 bytes .../c9b8ae8d-840a-4d67-9417-bb385779aca7.jpg | Bin 0 -> 9336 bytes .../d81f191e-9d94-433f-8e33-ad5bbaa187e8.jpg | Bin 0 -> 13964 bytes .../28c87bcb-61dd-4111-a694-c8d1e792311f.jpg | Bin 0 -> 4351 bytes ... 350232de-d19d-4aed-8e65-0f4aed58d386.jpg} | Bin .../55409a1f-8d3d-455a-b5bf-10cd64eda28b.png | Bin 6638 -> 0 bytes .../b5716434-cc9d-4b83-a447-6ad4376d4899.png | Bin 0 -> 4250 bytes ... baad553b-93eb-4f3a-b2cf-bfc017d1f745.png} | Bin src/app/api/auth/validasi/route.ts | 8 +- src/app/api/map/[id]/route.ts | 32 +++ src/app/dev/map/create/[id]/page.tsx | 10 + src/app/dev/map/create/page.tsx | 9 - src/app/dev/map/edit/[id]/page.tsx | 13 + src/app/dev/portofolio/main/[id]/page.tsx | 5 +- src/app/lib/router_hipmi/router_map.ts | 7 +- src/app_modules/_global/ui/ui_drawer.tsx | 2 +- .../fun/fun_edit_aktivasi_kode_otp_by_id.ts | 7 +- src/app_modules/auth/fun/fun_login.ts | 6 +- src/app_modules/auth/fun/fun_logout.ts | 13 +- .../auth/fun/get_kode_otp_by_id.ts | 2 +- src/app_modules/auth/login/view.tsx | 42 ++- src/app_modules/auth/logout/view.tsx | 23 +- src/app_modules/auth/register/view.tsx | 82 +++--- src/app_modules/auth/validasi/view.tsx | 38 +-- .../portofolio/component/button_more.tsx | 14 +- .../portofolio/component/card_view_daftar.tsx | 14 +- .../component/detail_data_drawer_map.tsx | 108 ++++++++ .../katalog/portofolio/component/index.ts | 1 + .../portofolio/create/create_intro.tsx | 1 - .../katalog/portofolio/create/layout.tsx | 12 +- .../katalog/portofolio/create/view.tsx | 116 ++++++--- .../portofolio/edit/data/ui_edit_data.tsx | 4 +- .../portofolio/fun/fun_create_portofolio.ts | 7 +- .../portofolio/fun/get/get_list_portofolio.ts | 1 + .../portofolio/fun/get/get_one_portofolio.ts | 6 + .../katalog/portofolio/model/interface.ts | 7 +- .../katalog/portofolio/ui/ui_detail_data.tsx | 140 ++++++---- .../katalog/portofolio/ui/ui_detail_map.tsx | 137 ++++++++++ .../portofolio/ui/ui_detail_portofolio.tsx | 7 +- .../katalog/ui/ui_list_portofolio.tsx | 15 +- .../map/_component/detail_data.tsx | 135 ++++++++-- src/app_modules/map/_component/drawer.tsx | 33 ++- src/app_modules/map/_component/header.tsx | 10 +- .../map/fun/create/fun_create_pin.ts | 28 +- src/app_modules/map/fun/edit/fun_edit_map.ts | 71 ++++++ .../map/fun/get/fun_get_one_by_id.ts | 26 +- .../fun/get/fun_get_one_by_portofolio_id.ts | 24 ++ src/app_modules/map/lib/default_lat_long.ts | 3 +- src/app_modules/map/lib/interface.ts | 6 +- src/app_modules/map/ui/index.ts | 3 +- src/app_modules/map/ui/ui_create_pin.tsx | 196 +++++++++++--- src/app_modules/map/ui/ui_edit_pin.tsx | 241 ++++++++++++++++++ src/app_modules/map/ui/ui_map.tsx | 18 +- src/app_modules/map/view/create.tsx | 15 +- src/app_modules/map/view/edit.tsx | 27 ++ src/app_modules/map/view/index.ts | 1 + 59 files changed, 1410 insertions(+), 342 deletions(-) create mode 100644 public/map/994abfea-c671-40e6-80ff-085d1ab630d8.jpeg create mode 100644 public/map/9f873fae-7b5e-4c60-a5fa-cb6b63a1eba3.jpg create mode 100644 public/map/c9b8ae8d-840a-4d67-9417-bb385779aca7.jpg create mode 100644 public/map/d81f191e-9d94-433f-8e33-ad5bbaa187e8.jpg create mode 100644 public/portofolio/logo/28c87bcb-61dd-4111-a694-c8d1e792311f.jpg rename public/portofolio/logo/{c457514a-9b0b-48b8-8ae6-2d903f8964bc.jpg => 350232de-d19d-4aed-8e65-0f4aed58d386.jpg} (100%) delete mode 100644 public/portofolio/logo/55409a1f-8d3d-455a-b5bf-10cd64eda28b.png create mode 100644 public/portofolio/logo/b5716434-cc9d-4b83-a447-6ad4376d4899.png rename public/portofolio/logo/{a7ebdb61-1200-45b3-b868-ed9cc811c8b8.png => baad553b-93eb-4f3a-b2cf-bfc017d1f745.png} (100%) create mode 100644 src/app/api/map/[id]/route.ts create mode 100644 src/app/dev/map/create/[id]/page.tsx delete mode 100644 src/app/dev/map/create/page.tsx create mode 100644 src/app/dev/map/edit/[id]/page.tsx create mode 100644 src/app_modules/katalog/portofolio/component/detail_data_drawer_map.tsx create mode 100644 src/app_modules/katalog/portofolio/component/index.ts delete mode 100644 src/app_modules/katalog/portofolio/create/create_intro.tsx create mode 100644 src/app_modules/katalog/portofolio/ui/ui_detail_map.tsx create mode 100644 src/app_modules/map/fun/edit/fun_edit_map.ts create mode 100644 src/app_modules/map/fun/get/fun_get_one_by_portofolio_id.ts create mode 100644 src/app_modules/map/ui/ui_edit_pin.tsx create mode 100644 src/app_modules/map/view/edit.tsx diff --git a/.gitignore b/.gitignore index 02f0ee31..786b7c83 100644 --- a/.gitignore +++ b/.gitignore @@ -28,8 +28,6 @@ yarn-error.log* # local env files .env*.local - - # vercel .vercel diff --git a/prisma/schema.prisma b/prisma/schema.prisma index cd71c4c9..ff99d8c2 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -114,6 +114,7 @@ model Images { Donasi_Invoice Donasi_Invoice[] Portofolio Portofolio[] Job Job[] + BusinessMaps BusinessMaps[] } model ImagesBackground { @@ -143,6 +144,7 @@ model Portofolio { Logo Images? @relation(fields: [logoId], references: [id]) logoId String? Portofolio_MediaSosial Portofolio_MediaSosial? + BusinessMaps BusinessMaps? } model Portofolio_MediaSosial { @@ -873,13 +875,17 @@ model Notifikasi { } model BusinessMaps { - id String @id @default(cuid()) - isActive Boolean @default(true) - createdAt DateTime @default(now()) - updatedAt DateTime @updatedAt - namePin String - latitude Float - longitude Float - Author User? @relation(fields: [authorId], references: [id]) - authorId String? + id String @id @default(cuid()) + isActive Boolean @default(true) + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + namePin String + latitude Float + longitude Float + Author User? @relation(fields: [authorId], references: [id]) + authorId String? + Portofolio Portofolio? @relation(fields: [portofolioId], references: [id]) + portofolioId String? @unique + Images Images? @relation(fields: [imagesId], references: [id]) + imagesId String? } diff --git a/public/map/994abfea-c671-40e6-80ff-085d1ab630d8.jpeg b/public/map/994abfea-c671-40e6-80ff-085d1ab630d8.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..fb1937e356aab00d26e4b438179f770b0cfe19e3 GIT binary patch literal 13553 zcmZv?Wl$VUur|8D;<~s)fZ(=xf)m_jae}i10wK7=;_kuS7kA4Wd~vs+!6mo_3-;xl zuWsG@<33Y0(^Wmy-Scbu>F(F1*G&L{vb>T!00{{IK>D`;ud9Gi045qb5fLE?5fKq7 zDG3=lJtYM>IT;;2B_$ml1q}^3B@Hb(4Ldy@@2?2Q%GUuKxu$&;LFDXXp5T#s6RFwFdyg0AwO5p&&5;kU>Z&Af#6W zfcjsIs7U`4>i+{&WE3D8IuZcmpH`IsfQ*C;L_tMG!N5R4L;rUf8HDl%03-yXN^7AJ zF<3bB1tk?W$n;*I6EpH_yA;ik=vW3PH*Q@r3Cw#VBPE0AHqCASvqp&oK>6qD z|KsbQITRo&+CLpP2!Q+#NGK>M$p75@5B}E`Ay^tnq{R?aNNnMZn#9-8JF|6h`MLtY zK|%WW2ow-N5|E#FT1u~2sx&MkrM*#PVUB4qtBPAKO?@7{ zpGK+3#T;2uhr0GzEx0UR^(_f^4o*?dMm$@y7IUhhmuPyNV%S(pyFJ-KpSMc~Tr#~4 zs+cl^;CJRH+ywwt_h#P#n`>RxCI+GGa3GAkhF!iYLEY6)Up#(H*j|J?t;{8B+1PTF zc=)5S>r$d(av!%NEVH`tGZ$J0qc*6L@{S!r;N+XnK}|DyDK=@%$H0-H2j9aFC+BMb zjL}FD1U8Lj(-ai^`F-qP^t9^c@$MWd7%zmdY(GS1>nd;J}2sH zq>4gCCq`&;G5x{6LZ@8Xsy&2lyF0gm-R_pb5n41Z#-`TO&Oov)J>S$p^u@p_azBos zD68=$9*9KBl;Ywk;W2OZxkWpAVNM%EQ>tO9mlrA9Y1lz1RxaQT*6?>fdFvsrP#C^s zJfAm5fxzT^yOHt*lDssNTG(&{p;&nuN$-7&V1c6C&pOV&D!A)=*n$u*eXt^}Yh>Uz zLkfB7$4!E^j)lcIyRH=}!zv+5OC>X}kJ;MU!2 zmjUle5*G+xZ$my=M%?pydxF6}@-Z9}O}T-;7U0)PWM0wbdmPIe5YD~w`2q}dRIx8jW5^L;5M)Bn(%&3LE4>JEZ z2Gk&R0acur3yT;ccF1!NCXh1sRCqI;C##_dq&ZEXOm1xe`s4qX$6jSA5mhsg)k64* z4{g;D2yY&y8aGkT;w)#i91d)3y9pC3|p$@(lz_z{wIaE znyaBL^3X6SP|^cW*v@`V@6G5uw?RHqO4&@Ae62#Y>5@q*iRY3b-*8a4<10W#RW8dU z>^n$weOh*DM5t%fPdY;no%gr-P;8cO6y~w64z#`R8P9bm#f*XwsMvM$P2VYdVYR!A;Ovti)oizp6yO$uk3_$vjWBb>5)y5YJQV6oedd7dt$&Lu|hxE6dJqxYST@NG~BiK>VGp?!pga#f7uJnQ0UJ(|DIz?yfx}Li4 zr8&@mYj$01A9%I59UKFSOB_*-<9y>;p2R;-{a$@4Cs#Ni?4&pKQGY3}eb=wr17J|%btJo|*5q(@8*R+8tH4@nM_B=a7%j~Kc)fm?WRV{5WP#LG zH?nmC@?c?MmYUF=n%!8vQ8T2Khg89DGsOGqO>pvhe&BKTBV&m?%k<7s^#=hMIWDsF z!B-$U!yT9?_7wm|P>+LHl359?y;@{L#`Yr2#BM;}65oj3f;NFu8i*Z|Bg;RGQky@% z-s^ur;{CXz*4Dmum8UgD%1%+VSWn%S{EqOQI=?B(3P+eZ$N>}`rKc_E67S0EUuR;- z*L;nm0#ceY>BC@B6s~7l_c8cu^+`#|P+5(P`fHAS0ZtlIFEa6SUYF-%{VjL&F1zy~ zxq6PPI+C%3ZpnG2K(bmW=96(5odv|8!+4wu&m@xmulKeYHdi$R-U*>~3IqC5ef}rx zJp1<_pC0GXiW=v+>2Y00ckg@56}#7XH|7W_u;MKaKNRZ0aS}HZrKxzW(0;bj^BxdS zVx3lG6eg7_)~{v}K(JTv2x+iUwF+?~dGRyn0eK;5OL}&)WOzmBjm9oO15!?zF5w*oRqq3^tfD7NOqxP6ZAc)evR^60U1hc< z%0^o)K>z9!U8=%NS~lGr?rpnp!=Se7B5(0A(XeZRiM>C3%bh>dx=>jVoecU*TVG3T zDIv3mGh(*~NwA4Qf&DW}W(fb>Ud#x#Eqja&@DlxFMhsO5oklkXMY=_)v_!D__1P=H z?=#nuL#|Mn0DrnL_t5P($I+p~v(anAM6S+usd!I@k& zo?84B@+;b}(8mf~{yiKAD+8E1D<+(Bap}GFv1ZI>z>~s8v(Oy4(Ra}_--CAdxZmRI;4L3l*DHWy1UunPxflPj3~KN9me{L;(uSCZ1LB2(N(GY!He^arP@%MF#2nxN znG)Y8N?9_+J0ITk!~`*L5lvB7nbOl*dIohw_9lD4sf26sGsP#k z=n3trZ*CRF2s5+Gcx_L)9p*3}CLjQrN}&`Bfbu$Oef*ous@j_>UV1tbea6pcOA9u- z(46Kkg3Aic5PYFn>59Qd_?v5iv`5OSrvq|-Td?m#eh^)JhFnLo)YTIHe`$<2_?vmq z+2`uvy65dw#Bf@^8siwq{`QWkm4v3eNWf2#e3&1vhKy903M64*IHstLz*xewn%au; zUh3di-G1&IYY~!GZ~opGPX7rQNf}>};K5FlgS*b&$BSbKNoA1Fy^$}F3PN-00`46h z=0@hF*j64hCWOI>s!cl;VT~@;hhWhG!Wgvuo)NHP zhg0lZye}&a!G~|~>>f1-ohS=>Z&Dat7ty_hF)B2V>{YA$5!i%okv|4bMIB?(0Vgf! zC7dN}-zqD0hch2#GpIXRtYUO7zT4<3-b!Jq4F}^!{TZD3GjkqM z8~WO{ME0wB-RNVPzaEP0(6;qyHzJEX0=_7y@tn?IC zycj9tjv}+*7KeCeogHRqZp+Dw0yir6Lj@FK51jSK!?<x(RU|CafaTQV5#I$BZjJk?<#W2Lcv zkoxI1vU0+>7iSswjytgyylV8|FrsW98;yh%6eYo+Wc&(f<@S%*CTa49jO*%_smO#T zW9Ty|3ZuDW ziu=Zq*2~=?;5c~3W=FR&WD`YETM7IVqw^JDy-H4{wep4DH4)sp&)-+WUYf2_%FJu6 z&@xsRdOp2_BlQ#1y=g_gj#b@*fb#_J;?MxsHh z%k04es|DLU$T132-NkEkqyEP{-uxWSU{6%Wa8%@ZH6%tmp>Ojg`Xvrl51N`IY?qnG zttem09`7+1+CvU7xI-Ev(qd~p8*Mo1aUD#`*c2dd`z@nZJ&68o;?h~IhJ@NBYr%gM z3o7HwShKHm1HRiT%u|ym*5GdtI-uIN{d^_x8**l6PY^v|?ESXHM^<*bl6|V5+}C(H zCPqCoaFZszE?e3(JXCYQx`T}B1oNPaY2hhrpR=qI_Y8hcdqwOAws=a0B45lZGINN- z@*B&*U+NILcE_wwp{SQ;!)^z0#qnTcwzo6c2_sDyJQ)nCQe|Y5D><800UCBqD3ztK zq#D46E0)F-YLh!rw=PUe@tIL%3C^s7LDo{RfmJw=iqcpraRDQxrs&``NAOG?gyfMF z6{9oVOb%Vf%@HSz(mJz4gOr}N5s@hs9lSX{oXTM+A6XG125p4e(ej)rAu@3jAO>jRwi+&LF-_&b*aCO zdy#JBs!HI++4U!7ZjI1HhE3W4^V8Upinu}u2RxjXl-UEc&%m&OuS#VK)~sX-uJ9K^ zwhA;26hjdhSpim$zXD2}qD;6$2;CE-9k)NL_bk!H`fLrZr+@-aoT#JaBNyrO3A*_K z(uc=~F?VPa9T)k8hp46)%(4hOWC`k;*hSdh#}BBS-ytGcNQ(d>31&ji<^=S!$)KL9 zdaN)5BBt?-!+=ol>%9aGVxu^4*^GIP&)43eU}`)0oQTW5Vhr8Be1|u`a@fHmG+%2( z)MG{8)-65Y^BBtZgB&|(izEWJ!hQR`cs>|!gr;8dqV?oHJKmG)N-sLtSkjK{+An~W zbyr{pPLi#d&We_*#I{Ov6A`?88UGf~Y?Y{a+N+ zDXjEIIWvd&HACMj|KqIV?#8}JN4&}*ajfLcc2q<^4E)s5oaamBGdyRH6e-CCf~Av< zaQ;f&^kWW9vze!@p)ldWOr#RZaA(St21Z0`h_2_QM)zsI!OybXeP!)jnEf^mq7|@D zZuA9?YS?tm4T1%h;|py)IOaAuQ6*c%V3( zBV`xw8V7RzIn2f36vXVhhOawoj~=Knt?Oc@bcpPr{Oaa&OF17X+kQ`TN=NSS)1s>J zkdxRBO)3m~Z?0SnOH-=7mBr>t^$|&!pWe45_w>5Y-kRNHu#gVA?PFY?#*#ivbg%J= zW4ip;tj*lp*y<#Dy#EX=ZScgiEB|W6X0s|QaVo)BG`7LU<-UYMbQm$)fq0XG%y^A% zA2?y$U2n$5jw8Jael08TA)3vQWuNm)S}M0V8(=WZ@M6UbXm#@_FfHoBZV^dH=z8q zJ$sD1q<5rlBV$~|*>n4see=Haq4qVQjhH%;q}s`>3s$j3JJn^U^u5-KzL)>U(u3*4 z!=UZ!PX6Oo`ddLVXga5`pFk9bAth!UtAnPDBv9qcN3rpjcb2{VqSCtbFV2RRZ$2ca z)uS2=W)L_p$1HqRQU$d~h`3Ylyq~;%$<)Fc?NLi;oCCR_;GW2xHuRXjUA@-sL>?Yf zkFkF*44*cSvM9w38~GLXaO;~GAipO++Tz!+Sjk8ci2YQA4j27t1VJ>+?LhNwxZIJg z^PESm&^d0eSxKVc)2Nf-2`X_HEM&XziLRJ7FW$U+b6TC~xyqo!b{l$v4|u*Bs*Hbi z#tve(g@ye32l(*i%OmH!h0iMO0e?D&x=91DmmDUcNuI?Sr4!H$tp4G7`td)_u3c~D zHD+JjS^&;k_CO=fVftX;#F-GS*Ft-|r^qKvCPE~JFpXKZ7}z-d#u!B{&!?YWHe}lJ zPWo2?kX{e;LTpK$h1(?0I3TUGC zUx==!uL#D$VDwHBS&ioXTdm`4kzP4(nlY~d(?Nm|7Hfz`9h0>J=3I>VrlkbzqZo$? z#I4dmD>xUGThSx4z^cf7C&xjuJ{Q4bHTAu`Ont+15~qR~WZ51GuP8(di&cKgB$0Zj z@~_`-^)iIOF4O2c1q0`7%Qnts8nQA0 zgfvdNj>el1x^D2$ZI;hBCP8G!t{d1E(njoj(ZQAa7fX5SK-$m9Es+UV6UUyq;B<=M zm{h)`B0~=!f(D}x_=c>WDZ%S`ji{uySpfMyb*5WY_I!e^IKq3Px?zJ1wpIL{=(a^0 zrDf?L{OUT;Z%$<*B$FS{rb{gAc>!S_$kH!-%q3NO@fR|*{4X{{7Q$9k=K?1 z<)kk?i|}%=mJ$|-1Qx~A9(PKQ*29gxJeoNgo@RO?JTDVQM46FWH>`9sxVVJZpA#oU z!Y{y17OZPGtVi^9e6bUzb^l(YNilr${b|b({Ca#j+_(ZNkoHiCqVY+1^->Hm6#vVJIB?tWpx%<3@ z3V|ujl3IUxhl!}2)?Z9^BepBytH&}Qrl(m-v7Bk>E_4^R;CpEvB&?H7F zLmaHN^Kkn9_iRD@cSb|2twfACCP%OZ-X3RlFGA!T!|y+xMP2!pB&1O35I(Vnln~3!rP2MtrV=}Y zixF_!yWd}bEWMXaVm#-+04F$e6S{0?LUn4~v3VoGRF+?CBT_4rlbkE&c`4OG>q%b@ z4=(z=ey!l)grqS%Tm3rRi((X#gT;Ds^~LDcsX~ZUOcKk)_XJ(jg)kB&a(Po8B2LtPg*{aL2mbp ze|~~wfs16bIZ}6d?WAFhsyEb;_>jk?2Pdbcd=bx|In9{0 z3@|cte@5$4M(>)=-s=6+%Lbb3N^;BhC&E_%Yl|&=dEjiqRV#bPD5P7sX!vAdL%q^< zo(@W?w1A8_49v zla!6sXQja-J~R6D@vncobBel5D|OK9bMauTz+@w&s6PWC!K_b1!a4ApVjV2T?n>k< zX{>F(FQ~5oTY~n8&rSI29NO6H+-V)a3Xr8-wI_L4&NjXdmj-93Cu9}Eo)|F0l;%XU z9M8?g;I;U{afMVW+II-adct#FsdHGI0bPc-Zt998cA?zR;H>w?|N5%`xnZ=_#$?ba zRSqJjpxp-1jdsTX_FOckt&EK4K=g6T;)(}~c2r<{m3C+B--GyigCy5MlIJ1bU6Xsq z)5S`p@s-w|sU!;C5F|3uVC$659pV78R6VOIO^_wmSM#X2OWP3-&3TB=m)_jy5cpCU zG+AcgPX>{wCH0+xgE+7}VNFfTY0N{MWB>O)*<0m2(+tM{&gMO1KS=Y6sWcNZ==&zY zmT{7G#8h})jvQp<1ZLz7U>KI%Z~ZfG)y0!0F5iB{&W0LU=08EoD@R$G z)DBuMK2EGyrJZ-Z8RJ~`#GkPs@Bmnu;Z{CG@j_NMO6Zvu8!7@j3u7r@l)6aeV5OA$ zo~d*lEAXor$dJ=~=UDOfFc-HiT&~9a9X1BJ>282(df^TBlflNS&pX89M>*EY#J&P3 zzHA(K0X(>O8{sd{nmK+dRG}NOYUu$qeLVU*hzqUI;+sfyQ5#u+Pw`ot2ZeX({7rib z^d&qpRglzRJyPyYET@^88`m5Q-pWOZ(01IOL)*r0^k)J2vg`9?;v*r+VDlp<8Y%&* z&H7PL^2&_=ro94){SR>Ts#H#9wDvzn{S69FKeIX|Re#gV5#7?%VF$;x(#|Z`Rml|J zGB1P@=Q1fVg;=tnc%ARjNq)p-W>Zp(IGYatQjlgvv`3E2(U_~WDXus4WSkH$C^2|z z8De7xHRe!n@uZAdaBX0wr1+@fNZ4LlWJ4ER@xW7RXy0k%mRE#|TquR9sc6&0yYOB$ zEUj%QbCPn1_gu;|+N3eHT(cfHj6;qjyzA|9*R|JZ_i*rM~+AS0h>l)^Q+3y?}^G8qUPV3S>Go3dKa)Hy(%gv7zV<6 zp+Kpse{`KfO2~D=;%8oix#`W3CevBn7AvS!M$#M2z+zE+}j0(-zK_jdUQJ zYVB+<-v-K?UqQ%-FpExvJLAj&&6f6nZUx4NzlzTMxLcR5KkAzOfkA3M`B6h8cJWp_ z5eTkWE-C7L;vlW+`DOJK25hf9;6uPnzyB=oOunoHuU?Td#O+rJUXyUFT55kYEBdWw zTT#lN0cWB{(u(BX_y!V%aB^%`B2}Yz6o(OVdM#1HxJ>s!8OB0=YOP)UKs>3q9y4Ye z^i9>LhJ~V>H6H-tsfSMNy$ro)!gMxv8jE8>OpbAhg{8)lS$ewkUQ~l>!16uMv%#I$ zJ9=8E#{AG2TBw4)xbPnQ;p#3&6#o(T$-r=2m^tB%Q*uwg&(lTElyNj!mIQl;xrYsu z{>*^HZei3~@i6k?2%xb4=a=ou?dCed-qPbZgsmTE*;sM4{|RB?)F1bQgKh;t7Z`(4 zudbKM9#vE%F4Pt;=tfEkc7z3qM6SJioCYo^QD)#WMO|VrQN$XiN6au_)z+OfhMd8i zd3gF((7sjM-hvV)CA^e0*Q#rFS?3DPbb91<(3RUf2AK$O0NgBvv|ic$(X*VS-|u|t zhU*z-<#thsT&-e+|KLImj7VVOkdP-^jN)Y>GdmIm>1=Ivmw4i*c|u)4-C42d!f^F z$k2PO3Xc+m(>BA;y@oq;uaoWY@4U3uL}$qo8UN`FhnQzZJg;>nJvl|ph10wOgsNTv z723(q#QAw7sHs?RwtGJ*+;63!4q}*X|CQI0^f$p9&A4kHE3mfwg5sF2H)^?3Npzg0 z#o{ei_mm|v_Si=^?4zF7nz~;BN%igVquj3I8I?+Bq%anDUGNWB*SKTnljzz`+{0lA zMsaN@q0bn%fDdFN1sd3qUaGO*f8KXA9oWi|^sldwjU~RF2ZVEuS01=xkPVa+&QEsR z4;2I#7}Tyl1anqalxLR|aJ>yQzzt8g&A0+xkR0NDh3mSEp)G2R;afS0iMj01)C zWb^>R5&9HfrDO0cNI71w!KUcJ=bH(VF53)p#gCy-?i7X(?*Js(r*WrBz<~6EMY5fF ze%TN+c00r5JX>91ox&j4mfBJX{Yi-{;tOs+K|3+ae;ayc@8E3HU&wSQSo$!jsJ4r~ zT~`=39-0|o8Hz4y(+JwtS202&Ifjef5Lt#4=-1=P6-oFSJX;p~^VHHzXGlrpxe_xo zI4QyKk;S1W(u9d+Qn&p>LO3}k>vgF~Ox7p$L;#wn^P`Bo_3XHgjl*`hBhO!D+P9tW ztp?N!ku7Y!!ZU(-sW=dJIv3NE^99lXw()k5rG{rld5MwtIdy|XI%sk}T=lpf)+2~T zqQG+$8;toI51qV8@o&zIUHQGVNfD$ElK`7va%>D~ED<|_b^f3t}j(0>Uebg5OiRc>fY zZV+ic5a|SKWtHhi>2MA#!#-@!{-!eLWS5I2h{OpZXY6^jN-8)p6Eq1YAgm!v+GbXw zEQy+B0O%q=ZZn3153_vgjwoCgS!?_P4^yC@1cg|ShIib}Kj3SA0aIM)H)jr1W!32# zeDBn=;gt>c6OzyrU*cIh!~WO%u5MDp|6OsfRJ~OY$29qE?Xg~Ka<9P5CRm%KDV1#w z-i#coZ&_Hyj|`IvXRkbgT*X+KpWG3lv&huw=|anB#!->=b;#>c#^&<);suT0Y0i~H za0MnyOW+l%0?7tN0L+e#A4KyLZLr%qR+#|j%;*>>UNwOTiY6LXhPdjM`cYC0WP{;a zK~imaTJ089H9z$wW8_NAqRCID)3Q{M?IXH7madk@ZMC&K3*}qxpVl4}mB4HaX9+1B z1&ANqCc1ey8kGO z?k@j0f=VWdXby*UyQXMtSZHl@&3r_KiRb(1*0HR~tT@sq{NBU-d2@P-i2Wb~HMT^4T4OES=`{`Fgf$ZZHbi6!1sKNc<*C6mX zHeXR;K8(DA2%*6*2v8$`RY& z>Smuqv#Su82cSx(Mm~!p)7)~Qc|iq$_NU)L(y2}-UgyNa0wJWs(f+=)f;>@Cd{tso zzK`j;*W=U_T2rA-w_bIiNQdNR-13R*v%@#0-0522Ue zmC&_0D(I2@3%m(z^K-0J$F;Wp@}!qSXg^N71R^A!^hA+vo(1J`Uwqf|K*rlAx1}ktjthFy8vqr*E0~r zd0Hxk^Rw;4*^rkyw4hu$4okL_PZ5iJ#EPkb>A4^8qHF4)!ZS|IE>0h59bW`pk$J8e z<|t~>jS?=`_8iq&yd6|&KifzKrDbK<7j9rs;PDzX$)xe-9Qe@fXU|i#+$GmV&c6bk zn1<))6qLgo%22q2fuG|~qJ*i|9<~>k)ydLc!b#ZK$$SK(pkgBx02Fh%u#Q;#Cb8t$ zQ`%B~#OTtYPQ;%{f@NoZCLfw-pG_pt6yd!ss7C4~x=@J^0+W`A z<+-`;ry1R;P?PWR{ca98{j$8T2=J5|+%nP_i0n6Xcm;sQGn6ZNTAP*b@M%%UU1Gm> z0XRP|{g`|CkB{d^y4OE~f}>Hm&a*Dj5xi2u^T84w>tx`4zxKZF5O0k0F?{&m zd;o9MCjIMVVDr!`z`+8**X^jWT!MZMmXrdMU#^{M{S^ei0wNTXF6p-ye%Zh==j8J< zXYnshwrM}NWLm!hnz;k(OPLj()kLnbx$E*(^QYQtw5d^==4%x*l1=A^XSc!FWP_?kffNRLzeQiDKlO-hqko&Y0H_1YiZ^5l(RiiTL-}jqk__KQ?RigKScki%M>sKrd{)h2LBUU0Y7#G^cJpqih$S z_hmB-R%ZoCp=er4Gb=e(J9Xrkxq2T#5TZp23{nzX-D4zQSO)p5?J%a$HN&uwj=8pT zxV*WEw&h+D;BV7aaCfvA$C4z)q$&`Zc1Ikg{fBegz=Rg)(hBg8NR*j`5^t&WKCR+i z<12uZLlW_UHS~Sx+5kds;{1RpY9yY^p96X^^*iXKb{|0VS=8N{?#7T?csrPYE_x z^F0^o41Y6Hu2xY809?rL0qB3tzrXztY&v7=&)XZ6%cVSx#4<=dr4rO7@FN1s z8q-x7G2U~}bKOfhf3@sw$)?Sc0~p$5daS1tU0JcZQJnN?3-#mH7(;Ev`$4KqoC;(Q zqajw91KmfE7b{O`YMjKh^*El#YVqedf%QGv%TH<|Mi182(JSTY2vsBkTX7uakP}uu z=fmpnCXt~0sqC5XlV_&kJKS*0ueIa)RlwS?=klbBk1r?2Ubfc1wcbabQ&l;heeB|o zC_&|q_{zTU9D4DxYUsZ<_1)QN%RjLs(Z0>=mykyI!N$cvltR0OdapE;9?3-wcEjSp zjKHc`&S}#4-SdY@p=VQr=w#3+>)2;P(L2$0S~le{%sF7WXmoF|>Cr(9s7sLSlSBIMy(0;s0(C9p2psOBm{vWP65&|xr zL?0K)>pw(z?3~jdX}^H+{QG|JaKGA)?{L=%hZnL^NK1~l~n3li}%)_zq@~1SbDvQ}C*0_&*@$$awLmMJo zq8W##qLtfdEo9)=A|HqvrmJP<{E=%LDDYz;mY5D`Ew4qJ-oT~j&YWDGm#i#d6~~{W zL}xsX`T~RRJ(9~(rdmC+vg~_5#^YJH)0$?cma|kTNumU6bPUlg_c@^YOVWHDwEV6^ znVX8PNAK@>XZhhvSNqhX)hmE+J%0+*!D9T*9$s1z4qrF@HxdEr?lDL6Z0?Atw@~w; z@9s>9*&@eRafo=K+8QFXt3@bmKmS#KUxo3_CU%<n0!)fQ||zAiyX3&m<;# zLqbbNNvS^Ld_@4$05Yb!O4bz zfq{XIg-wo&OU}VS!@$A8!S!$cmjwRH{r{NPK>!{apap>f34soPh=+iLhwusqQ2g@| z1>rxg{$D~tL_$Ud0ua#tNwshRhzN+th(IJXWDGPElz+;Icu2GWWPBbJ8B_u~ZAHjhJ z4-pA~jPg&!i3dPL{Es8jxCXmtQ{bws}uk1<|%E#YA___fA{Zsnq z4IV%WFyrS77}w%ML`hNw`YS+5jk`(?!J)bL7nLAYzp#Ef zTZ>S#`Z;c%Aq_m(H+H~>y2%^OB{a5kjjo4I4GY`r5|De%)4cX>oIv;;wrXX+yYxFm zy9sB_Obe06wh9V7-Kks#>;nh#WW$t#GIl9Ui!Ra$77KfBC^2N%*p)WvISfukIa2pE z{S#u`8=EwWc#Se~m^lbSVb1v&H}h4EW@Un-)Z_Ygygu99bAVRL6+1cZ7=lX<4P?>p z%%#k?^XqtsOC+4~;#pMF>ov^RZw$<}HsU#W%9}f;{|K#6iY}gD)i<_`PX)OFPnBZC zEG7?=xUti~h!hFz=8F=g(tYlZjWS=?~07~`S5A>yGZ9YBzwu=Tz?_esM9Ws3Vo$^pH%E)4y2pFeeNn1up#^&hdLU= zMxQ8Qr928G9}Z=*!A^IX%e)!V=*$2(*dQSa@#{Uvw>^ItN6I2sCqgoG0~9^m%~93G zfZ(xzG7i3&lmz+iPiFDg;>eJ+ytqb*p;4yVr*rW#ofih?!)~>rs{wLEx$o|;xN(L}K>W4zfTTj+;zO{$-`ldyvrA;H3E5quN_ z!R!c-oab%s3E{VfZWKRH2fn4yBai1A#WoLHVFD7Z&;zXHW7FuT+&-g?+^Qd@s=NZY z=8AFmpi9E2{GJR!TzUx+qZOP z4xx~aioj{ktruaQg{Ellhx9CO8hzwJM7MUlql@vP2{p)>-R&9vPHpu%#exwaH^$x!B};0gHmSSho~U(u8zWYIvczeoC8PQU znwiGr-z17R;$ZD7g(rLwlw@*0Nh&zT? z=##D(V6LPWig|Pjj93l%gEP!PQdIOR!sQ(_2=DaYG~&8XlZL0sxg&G5s}m+BKPi zL8JO0Lq@&e^^%3Nvvl&gm~v9sr;w4Fd47EsTqj~_n z!6x2_k)u|G?)jB4#ZsqSiJS?>5>Bjfe6@#`_i;)^9F1YxzfMKkMT ztIyNN16Y<2;ux&I#4=((pKtDY3FoQ?sPokUP?c{tFNZ&=K#(+$Rny%L26ldgixlQE zPR#jHCsR(i8?e)CT4WS5=~8|uo3iigYQ7qaQ!Sf1)M+EsEypv8>`cusP(9-oK>7nM z%h{8OPkz}0mXwVpEInrz6J%FSV#a44UV5Z%`tEzUXDIsuQEUPQSvsQyTD{hhiy)(; zp{!!uGZfXqL08yK4wNk4r%4Uc5pm}s#f=fTL4}uHJ|w2q2CRWPyUApqel%3z#yu!qd|=CMR0z z;9$?D)6@MB73)}4HeEg{xKFO$c-&9O%v>HkO?Dp0byG4Yjx(c08;j(o zp&K0uEh;rj>Vrb=EkW=L_XBpfWF%sqV@d_VxSb%H5|E1IB<0&~4Aeo>jAIQX?vWcR zVSU!Z*b}K_JRSJWup)X4yW_lv+XCamLhY_#Pmy}x9Ir)cJz6L(Gi z2o%kYcWCsKQF?SPop{j*zpLei?G=>xR~n?*nvo~|q-a7+TKQS>7h6Q#E=lHIH2-uc zU@$slV1YlVDb|Emf9~}?P}wumV&zMV55~&4N>Xm9KVF8 z39AESA4@JNgi$5H?e1-&57x6}ddzq|bxL>Sq#oCAZF;&QO{NMDlpnlb0d`Z;B_&dO z{k&UIsO%NWe4Y+@+Xoc>`#nbMdz<^zW#enQtTYZ=L%Aoj?oPYUYVS~I+SAoVTTS50 zR1qUY=6EC8XA*+v;bIqJurRBKlZ5p5dQ(?Hixt@q)mw9mHNLkg5G5Qcb-H4@KiSFg zwk-O44_d0@+7R-DptWTj@2=XRwEMNMa|D>L8Jb2T|V0K za-5lBI(=uwK9WLLQqCJrT5VNiUp_Pe-*oJ9v1s_uo{95X|I#G_Gmj4-^j17!eWs4vDr1CPFJ|Rd)+(tW<(-@riWd91_xYNt zL;wzUS?P3(Bx^{L$>_8DoAARm9kR@DWg%qWUs6RaY;m^Xy7WFYp$G)cTj!<9J;OqM z6sJx$ZxRn#Z8~&)%q;HOi?nG~$Vz=WH+*(*TcZy%EU&vaZ>Es{Y->~sROZ&MG&f9R z=YR&Q@)VI;J82`)`>zy{I9zB_x$wHgeK?0=j0Z5G7$#S@hJzjhVttRLGK<_My5J>~btPniH+PI;vycST&M0VNe2j8=$FFKP^gx5NZ_n zn1K59rKfoZ=?&a*o&&AWbDW)?s{G*qh8#6jL>s3Kjy*y0Q1ab%Uol0)>m2VtzMje^ zr4N~VIM}d|DNsa+6zLZyKUkFDu9TS`FB{?!OPpsOq`=!3Y35zl!u-A*%qsD>0p~y< zfhdDXV}H}cVSCLj4)K##dls%+3;D+~CVcJo2B&(Oj1(Sr>kYx%5iI2dMHYK(4zlL` zCO}<%nI7ac+|G~2w7~a3?t%Z5&9+VtIh{!HX6GRBfVQ?KXiuX?;Z~tPE%(STB8l(t zGHPBaV3|xo!7MQh5$a!XFf*L~B}I;}`^|Ju)~%Go@Rt!%YKwrs)%Z+Q>F56EGyO(+ z3KT64$$g!9FC3#4bENmU)A0&M(ln#hpZjrqxCS_Oy+u?uKe}C&koxU)ylby=Y5%#q zh(NM;jqbU=vsbWJA-x}@$?h?fiQcN1Kagw96lR9^o{TxU=kQVK<@Z%g)=U=3rbm=8KP>Y6~bBja!5M z%&#XW#T82l=Bx-5VV`_4N0yYkbNclPn1^rU4B`E1kM7?NHHvg~4GI!EiV1%E$MWO5 zm?oGOaSL=S+haHF;7n-LF5*OX661&n#7t`uN4InbmE_n|p)@Cz6qG&vh#YSnZpfg( zN+aKU!3g^9Ho>R0m(tLdR_7?RATi7?*!6jw*gUgH#4&XY?X4({if^Nm{AIN&zVFTw z(M95Ms?C{hm!Y{d%@c#d5aou|qa0z>gZ%9YesKh=V+*RZXk3Cux)3T)>F-{o!C!5i zy}hphZJv_lYJMxf8qJV-Dw6q6CcrS8lpi(&J(^emn{$It5*etmHn<@)`vy*ts;Q{^ z^uwoN>dH(?`Sp#0TMe9hy)QR2+Z7y z8YB%Jt?qS5Fx2B?06XBK@zRg&;LQH{85@VSqWxmXF@O7l8x-@W{hG*N4CSCZB^3S= zTYZ&FpZ=e?fT&rSysvz!h1g`_`D6YO!}sNCSd>Gv*?Om;TWbFApJs!-2@{DtB_p%o zi(!|!0lY_vY^{~hHGN#cP<@D!@P_||JEs}ZZ~RWFg~A>pAIZ7x?)v94cDo2#-OCtE{&XW7eJ91B9tJd)SV;{;PP9p zo`l|F@P3T-S(hi>v4h;e_FO%^(A7u6cI{x?)pg<2wr14b&YG=1yJuyGB6@Rkk*D!F z_S(SHAmdw_fiaz(Ucl!0$b(xNdvkJ|fPTeU-N(&(V$LKlC6?jb%tq7(P2)2#`kga+ z&x!Eq-iix__^p8nFBY>z@KVeH;;%x*bQ)c4bZWghUVo6Ja6V;639D=H=xBzXLRLr? znL^E?K48K^<&j<{3MdN&_M9EY0GDKOO2kYO4eNar4 zYC;>_w9(obZfom&EOiQYhd)AfoXc0U1juYf-~jzc@sXV?3nmKwo)X@t5VIz^%0E0fb z;1@~ZwP)74slT6M&BG>)w93X8|J$;kPx^+uY(+hTkSua1RdAk6TS4 zC`j80@qD28{$gnlSZ*(HJ?%I-9m5y^)>*CLatY`NxvgH%^kB7j>$Et*L8hr6p~oF>I2P|4 zHmOXo&y%P9z2AMZQoP7xh~cHNH0@`$aIH`f8u8v zTBY{J;7@6t>HdhCO#uwqq;{u%UF9SWjovE_8u?y)fzWBSlRitYCKQT1LTk zk&MwLx^M@d#jZ$&Uj1pAx}5@2y~sX%e()Ig3UCE#eWT<3Nmz%6(&2e1R6;8F3J{lR zK;E>9pch_`;xLWIzzCyN2IIp>)+n!-cu~q}wm0udDVmtRB1#Mn2MK4vy!lbPF9y$! z4b$+V2bAp*Avm*ZGM+n$73wWVVk*>5y0f~riygS_5LD!`CBV;^-TRjhf0}OH3(C11 zHG3|-Mw8sj&kbVz$7_*w7Rl4zD<4Uu4i@+&VmMzw3q~D#0!O2SkR4rERaRHifm|eo zhPBrJ9wB%2*69y+>&x-2)H~8)+C2 zede0=)JiA1QS=p%P+W-=W|8nsnd;uP zV?hujdVQfB@52nE@jECDw-L_H$Slh&0;Tbt#bhCQt{u`{wg`$%QyhsrI%RNjvVen) zC~l}%zCervpD+kR=C2XlF$>x!%9**&O5bvB%A1*dWv6{KMer*b11&){H^o84fEbJ! z;Q*&tdwC=G3ec$D)WkTa<(jX31qha`P)D=<3k#(D{|d#&$_gMBTJ@M&$yCrBYmZZwzHzw_wW~VDXx7^{1NSI`0fF zNZlYFFB;8YR=S%f9e7M+wH(eK&X=`fH=4Rm2pdiX@&DpzA^(L*% zEwkYZ5R=6MkkpBZ(2Azg#{hUV^1E+|e0;GNYH~wqOw;`{dKgdgHr_8RWcW~4rW<>C z;~stLv!$DMPJki0`8xm<_Fak&J>XyWX|l-Jo0J;z(c=T=*x@ML&%OsPYXR-Q&&>{KO1ML^) z^`Q4ui;`t)oY;iUkP<8{L5f8GEHSCbpWxGgZ_da#S%_kQ*l@Bg`wGka57wjk9*)lr ziXVKVvLjGAalEWPgPNF#^}kk}{Ng#r{=FXso;%hF)mGM{MI_Y{%e)~$UnxGg7@a^L zw}fW+Qu~P2xgK1MalZ?obso3qw9 zS+be@55BcYpu8{7Z^Ey3LR-0(RJsRyaf}Z8y4h zlh*6?x~SmM4huJeQ%x*y7m@SqRzP-Lq zC>3>b*0zM2yErQucf8=V7X0j=KijvgLxUX%@#O2?;HLcc5Aod*L5zI-;e$^7eHHgM z2VD1$lL*`DB3-HtM@@%<&2c~*U~6ofo@i_CO_T+Da4a(AAULCHmlT&i`%m|^b8cPq zB6RyYvM}Fq@NhLAGaN|{5kT+G)O}i{P4VE8AT)^`P-aX>S(K@Z1C~x-0b!aWaZCt_ zH`B)*$tLwDVD%!5MjT0pv|;U+L{+P&lmfpb3T(<5=42nC=*&jf}_Jb08LeEAQuf+AA3)*;*tV=a>Ww`euS2;Q>G*w)N*d!ObwaOxGH|M0hY{I`OsGCu=L3Z zBs=S_swhTUf$E}KlJhjiPShQ&RP6Dw5*035JNz|h)q3n&{uQtpTH2R$az~|k^5-wY z9Jz96-jII>YjDYn(lL+mo=C}_Q7ek;QoVC4=a?y3DN?XP&;EIquv(zNjmu&C_+S&8 zDWUa%#vDeBz{=!pfN1l${|^DQUx~(eDiU0Cb7!h1P6PMn0bAO17`7>FWYBGDVGAfj zFc|Ao;Rw!ZQ~2Lkz-ZUu{)q8M3>~00oTA`KPidQbe`PP^BCq~~WBn^Y&B`G#gkJX{ zZ;ohRo{tuV6Aho_e9$M<9O7>}6c$DVSRA%frfBqF6xnxE{;}k|Vx>UJ@}spU8sQ{^;J_gft&d_6 z-2(&_?uYaaR2rAyB)fJH$kx>0C!n&TktJyI1X@WkWlO%Y;_ux+tjjEFq8VkT{^Bn5S~OKH^|VXJOjN6dYw8mdwL>F z256;%XygUya=@S6YV~|J7t)^;{qd*#^}5{itU3$y^B_S=~7>a_R=Ml%GoXT~25}nu>#bA{On!(eF zHM8n0#loD4ihCBj#tUejTW1Jkyh2GN;S+yq@%t`>Ikf^icc_;T@AgkB(T8Gh4#TKH z8V5a&daZh_k+SBY$gN1gI$$eQ$*H6mDT^nQC{Ld?z_DZn<^CA8a=>fwcC5rG5bx+N z5j3YoB&=2E_2Y+RthsZY90_x1=#- z-%cg($NT9H$5{L}kyyOCOiHZ1^UGOmlGA9#O2k?{fHIUetX=d1cB9+(Gp0LN^S1=H z3*$k*ft<-Y;{HvhW#4f4k0WxhY}ux3C^3)wFl^ zXCP9E`Xi-Y+$c?!&uj}wC0qK-jy3c9u9-nrw|OhvR&k$dWF$y_@-RGo6{}vSIgVhj zBc%%cy@iyLH_G69IT-*cOooSG*Nxl+Z7)eoxo(27Zt$S;_Kg3u3Y1bFaskge6?BqG z{`g)ZVwy+%nVT8zI#buznY8?<+CzEp{i)f5-MtS;o>6aM z{Fh}G@S)@(BpLV$Xz0mlsp0xU7Zk|olB5aqS0{}7OV`}Ow~BtU5j3EBGv3LJqAvwI?Cqn-`3LM#gWKAhufL@Sj(A{ZX?lhUN^I)mlV6oIE!$BNM zgXzYXprGU!r_v_|Oy)BfZ*=%Y?QFU6Y|w2*Wa>{10xrIPX|*o88|hYB(-(Q`KKhf7 zG^0n7(e5C@n0j|h_)Dh++KFRQNHmI^-CLsh4?03m;{7 zz;Iq%jA<|K8G*G8h@1-ZyozADlUMqTCAjP&iY-8VT8}(Gg<1f2t10QxAbNcBy z?q=MwNAjg^TrOgm=zUidi??LL1;z=_ zxWY1LXWHq!kk>xUv^IPT)P)ykZqNJusW&ARxIOQxl5o<9r$t|YYQy%S5gSh2mo za_NgPj;92Oe4vKu;>e+a+PjiG-{NLA)p=}yRA=!%_E<_m0&%@Yv?qNs_d7wdiC*I^ z1d7$E0%bDVP@B$nx67e^;Gn&Z5|L&$$rQ!DR0Z+*h-B5FG|71}&Pee^MGy4MSDYVXz$}AhTbonlh ze#g>7da@Jq{UT<^&PoU+uB!uP9=-j`{D_t5CWu$JP5ApqWGvZ=6(YQ>&j8V-R=|l4 z_wt!a0=B&2em%VHgHg3+({f_jY%CNO%WUwWk`0e;At7h7Qr%RJ#_gPTAj$U?z^>(| ziP)H5x1SzP6b79JXw6lsWH6psGJ#4n)=W2T>gn^o4x4(A#u6XdO8QDs5X?zg4pjU- z8WAas5^vI}WT;_9X((+y3qK;{#|JKUz)U=&PE4A|r+$(^UIF_m&+j~#)Vs@V9T(jj zn33_cKCafleOzEbq<)~pbTIhKGcOCDx7V4Y*?Y1BwKDy*ZiBov7n;FYp4OkgKfg3# z32;#0DZj_eVNj;5{2@D;`@2U-m)s(NtJclnt+0*JWL>dQ>UKV%>F%g%n8&R*31SD* z!21~r+y}nz-)D~4!t;+N5k$T2w0_tY#3dkz?P{uu(ictyt=DB4G%9GdPvILn5*`^M zN>m}@NKx>qOeB^swql$ZmszT-;WB<3L}&EDcPHmDZZZq!Cm^W&*Ex+siM}HT89j20 z)Gf?ZQq|OW$!PU(pUdJSg$`*nI-*B)=k6f$nPI>lIP`Q1*z`Hs&P0a=q>1#Du`uYK zHx%zEDyU0;P;Az%D}V3ovQnql(ixqZTJBoPl`0g zK;r#ngAT_`uCI%ZuFZPjL1cW?S`3o4KqZX3S`;ar{tE=+O*A>a%W;gpT?)}JR$91H zlHHByHkXI-xl*uKz{o3L3yzcdN#0gP%$pVXJR((s7cK>6XX2Y&eg*vaCz>Aav<{VF zQ+FMFHa*VR8MmO!X_CS6r3GY6?nF}IQh7iIEY=V|*I&R329KL!WY%3#5 zx6pKrkI07-jAf3Z*-n7(3>rmqe7?d^ks;}5bk}##xrOrwkFkoz zNCeAc4f=EqHv6Af*NNX)h&XALxDBTCxVZHrH;}(X06Z^ASQO%_9veUCdiKHzenQ+5 zxbXM+^+~e9v7wb{ywG2Rv7>G{;%;NkC-4m7@vzpSl1rYGg z(No@aCt|?2Zq2lJ0t04gtvbn+F!=>$cxi1?WeZ|2P9%j(1|92{P|k+J=>!ROjz}79 z`AU~~zEOh+zTY}Z7%rb<9RjREICptY4r5eAILNq^`~*Zt9oigahw?Y0Xk#UT8YT3h z1Ak@Rvn=JZ}bU@_4oCxda>SCZs3If07`h&=uA`*>b|q z#N4QhkiBQRz?RZm8Ei}lsJVz_$u4qc5TK#IFD*OSSGDtR{6n@Lx{5hpx-9fl<>+A(n>c z^^7L|J38rPlURC^uQ-#)SON&#(#XXYDYV_&JZ0{|X(m3ECzub9bIk5M9z9#X=GBq(64zaqa?!J zYO)Gub>P zq&&@%an%4<^=L=&sx0@s1tv005;|>qmd1z1$aSfh z&aj&lQ|#|u)J;xW)!KQd%CI^gZCw6jZ3mtfF%7&?;fl9sXDvA_8_9oNq2jUkyYB!x zO)J5bOcp`PXJ4N*B-S)A6CmXiOpWg*DH4UQ?KWJ)jKhlibrz2qck?)xb@m?y& zC*BgL(&h8v$E)gDtzRIZcX9Lh?`3+-4CY6FlKtGavS{eIO0J5wv!>9M%uFG%P#bT3 z%2>1f*5eaJ$g)xsziqxl0FTWZ-wPg{4qQhcqqVVUtV+EL8~&+x_N*LT?q_Bk?-p5Y zS#9u}8*CPK!wJIyG+5ly>4X{xb~U&1=j9b-2m2004o>?yD^ z8m)&X$!k}#m*&3p;`ye*5&NK#a!mI7*DWg%jbLVKqZKf1$EDfxcSUw->~|J}fT%h! z8XAEz5etN{c2zMQcx|0@wHjGEKG6jVP=9yA+-=davRVZnt35|u6*@)*dVP%ee7uUc z;+RTS4`glAL1&200+@#SXt(bL5huy}1oatItB<8tnbbQC|9fasmyfvfy;lSuqF4uf zQ$ZLNMlg(IKX-rx;$n6vu5zq|fl--?6#SbMOoH%P>xVr>!W%W&v~=I-me!%<{kwO= zm`-_a;90vM;tCGu&w6@}`8qANx~k}|-)I~f*z-8PV4qXZEz9VX=!uRQCuo$Smd($Q z>vFW20)`4&2}jW2K^K-aX9jjO5=0)=kmjn#LAvQqTvG zX#D!5{zbf(+dKv0l`WyZ2`ODYoBY%n?_`|Z9XFoxomFS$RL=U8e{+vJK-N-bRS zibXCP@;v+=%cST0Zf~6_MEqu-!uxDG9RSrM0Apo3#_@yd|!Ri|?;bVsi_Mr=2JwJxF3=QY?ry*fQr!(KoM0 zW6BG08ek1Zk+a)&7^DJq<#x`7!XkvJ%(+w~`XRSAO_bDS(wgF-}ODf(C zp~o`n^7t^v6uyCIj4ncnnG3jMq0+6%x5$=LIx5eYcz@%})V2woc(<|+bQag?hKQ5M zh3^}b9s2?9+W*wzFh>UugQcRe+H_F4_F`?`osZpfG<0ET5SSm25~Q1Kw}N zYd5iBtg+IQ23n3@ozU?t!vxb<3|u${B(+|o%Yu-u0@3{VILu=d8B?8H^T5JM8f zo}}Xc{>f2;@sHgyO$P%k1qI|$OvW`G6WV9~;e|xPrK71d07XvUehe3G{`eThZkdm(97D37{W7FbF2wd{ zM*i5^CQ!}7_-7b(T($FZhjLL3f29PYUB&xDdKe2#W1$)cnc+}dpG4f+vDyMeMyr8~ zktuLNI|`8rANz~?sbqA4-%QUtd|o5qUn($yUM*9u0ywvC0?P52+v5J5zg(x{Z4etV zDfr}0A9;+Q#p*Sqz#vaTCv;5^eM6ocrJAQ$p<2m{vBZ!WT?BOBvKl~}JtEQnfTnr| zmS!B=4NT^T&*(hv2buoONWq4de67A5yD4e*d!C*?sw+8E{w2$;$?-LEi405{y6Dql z8F-I~tigq4Bvn{_`FG8!K|`NqXDs*}m^C2h{*bv>FdZsgUiYcP0b!TqP{2_A`HGGE zT@z@SBrjp@*Y=-*W7dt?66#jTXOx+%!3zrEG^<);P&m%ur7(BCW;27^GG^M|N?0n) z@2>HJE?C$p}|dV`E5wl6YR^(wj029&>FanZt=h}j3HvV4r|s;Y9A zFQNc8sJR$)unIjLJ(qIXbVY#8Su>zd5InI$c?{W7%HD)>`s$v;6o!W~dW+qswzxmY z1Yo{5FowMQ9j4VBJ)Z?CB z5EEO#TTCu(c(wqPg8;xGVDNcJ+1l zOH>kX&Kb9A{tj}x`Mbs6J0P)k?t?)n`}dE`(a}G}RG8yu>bYRx$Hf~dA2G@pS-#|# zl4Me;l7EY6Y2p$e+z=^{j~FtNOC;9y+Bq)X+{sRg(%xO-zrEr9*b%pu+kfbga0$j2 zkr3+;|7ISa=Ra00Yo;NHWFZ6+!v#6n|A3$%$u;YPmNiDA-Dz!Apu_Q zt5^5`byv+)*Qx4r=4Yn6=XvFM8$h6@q^bk}0s#QvKLKMN@Z>3^bsI~6$v?Mnsl3q7ySgLsE(w`4J?{uicTC7;mk1NCk8~ zLQ~V4`sc35!GiJ%*2TMFB?Dytl2HKxAmBgyFVR2df4R}n|6#m@02Gw}P+_28{2vZP zA!Gy*@uA8Q^Xo7PSVBV@FH?%pNSFm*BaqK)0Gxkn{z)MO$N-kDuab&?$1jYw(-Uis z`S49Vl8y^y-yJxHW&1>E(McF15_||esjW}3s?LfD*z24fJ7kL8x{A5??(&l2Yaw)}fXM;>Ja_|Jfa zyoJE6XF!$Zk)q~8&ZE^w6_9!UGMlno%}STfZCu#eECAIu?;tQk-6hbvYrg|&=)Lvp zqos@s-t0O1z@)p^=FX$^j&sOg?WnbG1xRT~JA~((YcndwJ4uV7S`&cGKU~`|QyjTThK@U(9X=k+ z+N%n&q#PrwhXhk;c-q5?$a{n4-S8+GRK7lXVr5OJrRziH2Ftn{`{BnX$r}b}w@$ime5kFLle7@ovuHcW{3iPjw*L@#cPK6zecfxqHqPb^%)Ry=( zY0Tch;b%3-AAcyH0q-PY*H4ep&T!HH^w#=a7J$*~`Z)s}bP0H}()bwS=pHAOkptew zUTx5V8TZ53%6#tbo!SM(ni`&O;r?QmT^E5V6))&^!#sVBo&mlA%$5qjMGhY)KS|`< z=h75ap5*`R%F~&(?__-j)Ve)}J?>YVG2G{T|0(a!sCzQA;nSt_Cgnx*$X;&Xh=|!^ z_tyeXfBa3rF1wa!KU6xl)1>1E)`Aq6nZx)&~%ow1)TNR%xLr<71I z2^5G2IX4BIcc!g4ba}tuMNDYz9}RSjEh+Z29DA3{W4-jbe4=^=7_U>z{*CC5zbV0G zYpXczd|c9pA2($2wws0+9%-UD=Ozq_yceQ8lHytTLSx~$UsjVqg&`(%-ZU*!#t9?Y zR1OyCoP#~3U6vkhad!fiPLp=CiwFNIez<$D;z+ROS!tJGJEDavrGukM6A;4`M*R#J z%O1}`49p*nQ>CVHw~Q;1fKShgJ#AU9r(}efy$$B)>=S(oY}wo(A<`*g@jk%wPm%=w zCioCp^d7!#)$8#u`YTP`G{3f zF2u(7=43eZ(2Y=cWMDl(%QvK1a$=B0)jJbVj}tTRAAmzl0h-5UQV_Dn^{3WT`!j%F z)%Sz)^(Tyn91U+UUmX-iE^$L1k^M=7O0eQ>Ko0R1hkT41LnzoaCzQ;Qve8~Le+<&H zq8=o8WAy6W{?{`gj%!=oPqXkA=AQw^gt+0P2rw&S%_)br>E4v?u22YvV*G5y=wi(+ zLq**1-D_q$<|HMyY@yfzQ>lq3aoqPb3(k`=rSlc*jZ9M zpbHAlG~!&CKKPA)&CboMqnAM4`t5_d{Q9SsWQ{!6_InPzio`Ln1UN9rL^e@uAjsAR z-X)(D7#Mr=SKvg?@!c!3i4Sq=3afn%46JXXF#yo8`_A7Q3ZZ?6;_-cI=dAe>FVTAp z0StKX94_Ae5T-IQt{8Zj2;t6YiTALx5>>plI@38`2xL+gU4_8MoJ*J`eTS^c#vaE+ zLFhJH6gv?#N^05lg5t!s3eZ4w2nu&GI6hqh-9_ExN-cf4IqVpQX7INY!t_|C!SQu& zjzIga7^i&dG0xZ$TCL)YQ3AYs@&qkuh9oq^?1m15mzC!3CrN_|+^B&zo+X*n%pv1n ztsnj}O_RQ8Ld0clbV7Fe&ZuTi;o_Qa*4OTcwl(f776@d|(_YfjeVj`6u$_9N8VpR; zSixhV9q_~__(kSzEbl>J)t958LEPy}B98@!Xb*a2*%qD0pxUNdF5l-0B{C2B6Z3^E zvP*@FwY;<9S+h@;k0_>j^kXIc05d#9^FH|M6sqE)t-@quCqi}I*aZ4Z!}VF?NXD_V zZ$!rHq`jwdjl^*ooQa)9HG%1dLQNcyDVk5b*?p&;dt3()+e=2;HI`1|&!FPPw@RmF z|6Gd01ep_`t0A4v6CT-cMudK3NLWk`6b(z%(p3wzokdqN9E&`SnmhxLQX;Onkk~><>ooq&XA5Iew&2t|VOyf5!=uIBV51fn| z{C;x@GiM!7EZ{b^ny~Y&Dun{imzP%^AcAC33e&wEICV@Z=eibrh}s0Nc~74&3ki$( zO8VX=bt??5n3ot+!ewqt9mD)^(Ur-_2o0;X0|IA1;?fmGIPLfha!Ad^sn08hJYj#& z%wl_fY?*RcX8>IvfmdIP)?Z`CGxG(cX@Pe}M3G{i_KG-NXi#tbw3NQ-h&o|f*Vf6R zD6!Pk0y7bCgrN&k-3|^}NL?Re<3pb=Kjf0MAqX62%Av_MWUOJ9kZQw^j$E*8B#Zy< z(egHadqueLJIXN*9ac?wKQ|_`$W1~LJ&AC_2l61ZH(&aPl2!O>h&O6qf1?ze)8K?| zK>Wc~w8d9es}fVs0Fty79#YC~B?ig_f=PYL$_;`VC9c&%vd5EzzpQNYsYT|s24U+` z)17-Nw}D#nP$Z}6g6}T!PhUQZAAGk=bJd<@Yqpv!fq_H@FospEWF;983(lR1gdc{Cs2_B(pJ&-?Sg<5i?t)`I7~)1PsuiSlGNEoBrXDoiHxCupP~D4MaTeMPc6!RoHR6g5A;567+;glz#Z71TJ4$KifQkpjy;Mb5Slu{;v@K1Qo!_hgLq51m-M_2PLr+} z$E6G5E%eqFe+7zVx1=jS<25(}7$z?z4LEQ9DtNIy^f_*1Js`tdo+=xOUXhq({mjDp=~|CIpIV7}cuok@9;~yh)!T#ylmqhs_{aQv#hEVVIN%SW zPxH?JMY*lgDENTAEOqA?jZbs7A$1qsH_a}`Q^!cg{-KMuQ~V*Q_4@|}@C-8Nu_UVb zt>Lcn!c5=7jev}rnE5vMmOeAxuX$A0ZU@qb0I@d04~`z5A3iuOwG zB`rP!{7Rj#+TMWsZ!|0CAdB>OkFnSB3}f;3b9}gTv<|m8j+UbzLYWfnXTZa&m4Z2M zQTvyl>@KcrB)sE%>9vN0TfveLa>b^?G*1_|-qH<^7-AJ4-M?ztZCZTw1P8oH`|I5V zUNl&A9Md_mf|Jo#y0i_Ch_A|jM_We(ix1cFKJV_!ui(bV3fd_}stf%kr<}`u$Nvfu z{dvB0o(3$S82v=~<&X6H9-f`-g66#}vV?&L{REj?AxWG7hLxw3?*i{hqvwA+gw2Wp zsjbSd_b{epu-_Z2ip$O?F{BC3JN&fg4S3tNzE-QhcA|6ei9i1#(YrMNr&cEl6uLPpCdG)g%ldGYJ7F1>lhng4|% zTB_BI(~}R!y5ya5EUETZUjX+9x7h-eFh4(HLH34V@~)U`t%|HcU@z=I}HPhfb}7qx^tvzteSl_3kL*@@eTe|5Qs%&bL(SHs-<-thwS#CIA7+xoj2w?dOV>)I zxD;9EyzLsLav?uV>7V)xs|`NbJ_Dee6XV`v@wzkE!4IK5{%pLv%Uq0oxA@XWLHzcD z=VNC&jo0titPn2ZS{jd(ZGX7)m#r>es55_T2POh}OSb5F;AC}AOdW%sY6 z9FXG*sm|Tw^o-??+4o`58ZTSf?9dw|MLQ~dAt-^fpJT-7_NMGVr+vu3m8OgsMsa*; z;wveYQG+YOEBqyN&gvS{z_vMVf^gH6P;?67?`J!>)_FV7S^7ByWaMG;xJx?KbRhjk zo2p+SsfBOyQtzd9o(j!au*94xp7$z|hnhb7=apwbJ#R5o-}{5Y%olsbR$OfXt<#b4 zrLn3oiFC7yI)12QM<1zvh+q*Rx|^82b&w*pFWeto7?&ktNX0}slt!#%TuwT2 z=yLL9wc(*k<4mYhht5B;{v^JlNZuZ%8x0cOf2GS(cTI_Zle&^!F1%$uU48ShMR~!4 zQ$RHNh{z^?EG}#$`=*9fJZEFSWxJyUE)tWl!BaK5v}Q!Jug74^Col-2xqa*Tfn>xA z*N}p?rpa2Cnr4p{A8UhboyZg>X0jdTvVf2HcPBp;9EP5r;z}yAdGnLK5QUy^%8(d3 z>Ol(kN9l+0Q8)uKX!CSJA~QrVMDrIwz>?f2TRSB5;t=G_*^<5a46sVjUOBBd6p~-H zM@MTW7M2V*LtDdPg=-L#(|vVRjH;tfnXa4-kQ@3p&$5B1YK8}M`;`BogbbM|vkNb7G8M+}|bCYRPfGGwO1Y2<)>a-!xuk$S;byvgbg4Q=gBp9Wt$ zrj{Y1M2ipc!7;s1{)-tQDSr)~NYTA-Fvro5t}(@kidAlL5Wtn&?JhX?yH#Dhk40@v z)vk&}3|Tb!x3PD9I}yt0nS5zd6}h#9gNQqIe3hQW@v%@EEda3K#kfVnvPc6lz+7&t z*LyGO%9=yB1BE$Sn6KMJQF^*eXZoR)oUmO)s7_F)DMjS_M&ixu=6A=dG11PYSfNgA zdg)EL7W4*Tuq6z2jm|+ITBfzi%LKIFstXd+IR5<-t&rP#mbz0o7IJXH1d``mFZ4QW zOB1QkP9EbXrap!zY~yIfRWt6Qe$2A3nyg=b7raY{vpOPpC|KadTcs)4aSg;^Cxm_# zxxB(~uYmIjy(lkqlYwIj!+abhwxKZtemrG;^O4u_O%Bp3JP z*9-sy4w^&+Keq9UR&$Q*aRywZZ{Q)LLxQl-_eswT?X`5;&#ViYc+dH_{|*b7OT3SH zyCeLDS^$QoX4jX-w<{<$SBIm>k4WCYwbN+d7~7hHt|XiDth!{o1Ou*!bc=z$@t|xP z3`o(BG%zj@{Vo*0=(VG+s845}x>)(Pxm+}JbQp&k$AJ2qYmfdxik%w9AQnVy`l>cC zuP1Y4jR2&&FCCa_@2zw4PDNn#bIYKX4Xw&$0ZZ3f9!ozJPJc5lKCt7JJio3mm~S4I zx~@XKoVD$MQ;(s7E(jBMH$1V1P;izW+YmUN?xGiaCE&>3VA~Fn0Om94!_Z%A~Wy8;GK z7z`8WB#Q|Eiv`HhR-Whqo&l3SHK9?bLG?G@qS%&mc6MS4$}Dp2b6(vSyVZi@5my*f znT?|TzdkUaDCI=P!Ttulo?~SN1rsvA+pES7yWZ|FFA5rC70J>MW9b~tit)w6g#y2G z1oP5>DVTkeu^Ss3AK$nuMB$Wb7!4m3xK~jn7y1=tm*^{(PdniieI~r3Rt_a>yZff0 zHAsbY6m}&}-$)aYj<#@~-hsiv`)Rg&(; znTUV3OkZ%6O9kh7hNTm+aMtr*?uP>DDe%V8vlK_;-sGh8WJMMZPy0}ZoKgC4DL`i{_SfYw*MrC6P0oLUyZu#es< zzuEnQ{np(N$FkMLe*T0bdKz6vB+iAby)BkJX4teP6zw-`Uw<>zTK?y}Q+!@37{)YW zNc-KLKB1rL4FJIn?1M+4(6H(Bruq_Y(1GVCja9&M=V7my;{!q_+TSN{rrD=%qj&vT zJcc>Ib9`}f;Fzd!_hlXU)((i9MldFZ&dKjiw&39110pAl_XGQ(4Q)bj1?ZxBHh@iY z{k$^N|2{0|IIbiMtc4|Btaqh=#HpkL#iM-l`L^5UW)9u*Dn?Fc zgYvmsTxBd$u+f#?XPYd(J$yOj&q}J{1>je@i^=D=`NKkMRSW+Z zVV%bYr<>RMqdMWcOB&nG+OkTit&g%A%z$}~`in@c{xvnPtAnz&;5qw!=!&03p+Z+! z)5sKo_oye~NG40&r`K84rb3cP02$B0a+pMW!J%xz+SSYNu96!ptEEebHj zPe6aLQ|u%^q+^OmJKM69x^5moS5PXzBvp{PatyDYQmhPp!zkVT;Z0R3X=k z{-iGP^KJ~IKj|9E22PcDWg%A`SL_#k&b$l4!e(n36t`wP385 zyKMEq5Hu~@O`>_(_65~`(9LcBlu@~t5l%jtLPobg98|b&^X{_Q5_Rs`bO(p`x8jrX zGDga6Fx+H`En0IZ>Gd~_ZPwL015?!2-=wXm%kOj3NSJ^ADYqI5*{Ib)g!Bvy2mP?S znHMx}Qi5EZ5fieQ^!4&GoVQCImdjXW-oX?u=K_7Jd^HnH*aP0FP!0V=Fg+=c8No&@ z5oZ8(lXTH1BzhpH{-i`T`hr^uNYjZ`>m|^rI?P4mEZNx^`E_)7Vz4y}t)Afm^<4tl zM;2!N;=M~5toW15nauq5Q2vyxva&X!ZEJHz+bqqSJOKRib5mj1*X^*)R;?8;@p%)R zB^xF)jdp%okx{(DxR6az4t;USWw|`x@hnYm;;^`K3))EV7?b9lp>PJuc)inKZl-0j zgOMb`WYzN8a9;=%62p~a)Q6#*l0LqI*ObNOSQfg}TsGyTR6ZO?)&>|R)3fznVi~Hl zw^qPtk`+q`-)C4^mB9_K>|e&Nvkne@XJzx=eM%Z7KFB$m`t4`6c*fthB{J_eN4ck$ zc>zESfBrL=O7K0sSH&BJ*Fsu$aH7LZT2obzq<}mx3rk)1#>!cd7vUj9roON{djJRg z@_4)d3&gUmUy&p$GDEN@&>Ulwi1zBuKo z&?jbyxmL>?pmZ0V=0|8RnH+`mVv`@aIM?W3_L30U*^tru`D2XCg{y_R#>J9JVI<{+ z7(&2VO8H-BF|1oTU3si#eNh}vpSzhLc`+<7tLY1r^;CvS;2 z2KSGwuj4mcF_d)jt?Yrp;qsasJt*RQdM8bdAFtRxRI?uN*$HKFu=iCtVPcv@G_;n5cA8< zwvpH*VO37GB=fYPcp3uJ2ADgu+X+d!eJhUMS}>|j4mC^)R+Twn0C9#)`j;O%E=P{D{$KX4WD0q!JcCNgS6s7 z4%*!ZqqFft`TE?q7KKei@(yrlm9 zyRZv`a&f`B4fOH5RS%{CByqWF9Kyf5CYfuvpL)~zM*!~^xp)|sIE-A?x?z6MQurFP z%%RQ~*x#p^QAW`nB$sXpztXgI=@*dMpvJ=!cAev4he0vti(m;O zKtb-)Et*5rX-ODfg*_wBiz%`)EQQN_6j?pM%NvsMmY4QlJ z(WQxDaqAYkQ(FtwQ_03mspJ9soq+oaQYXz>e3u^-QRrE&MuzOWbKfz>a6M$(Ih3_5 zTg%bQdH5W^=uJ?yOflxc7R29IP4qOiDp>{m;B9d$V-M*gPQ@Y!#;tSq)8#5>c04bYv0_tSr+uE^(t&io=9d%Lp zsb-Cr?Is0)V4CTLJhiO$*kDl%3J-ZROYfG5U@WpzqE!ORL3=gM7ZkOr4_cf7S*y4# zKTnen_L}1q5IG?wv^Avmr-pEH@_7Pu=CDAO)Xr=PT z08VbM$dF9K_9ORQjqw&O$Wp5OcIF4(B`jYq0e~wfg!#2GRw_v=|CHJ1JE3zi%S6XF z#irXh=%!+ZEz&9huQqEKu>-XlmChyOa6>JY_sO8t!Yp1^w zYqN4!$3-uQxPAKjEw2{kz6!vAlW~!i9 zmRd_)>B=n9f-63yspv}AtF$NSrtbIYsT%Teu>o*ZFhDpgrpjiLD5epdJSe3Y58`xb zQf06?n@9NiX!L$>l$oZtNL7RXW(_30vra-n`<*lKth1_7fAvKau!CC^u#RHDFj|Kr zRWNX=IvuXc!fBmV1xK4xwd>O(&GxSY7p0q*#yV}q|Kmr6aI{Z%OQouUhd({9{tpi7 BXT<;j literal 0 HcmV?d00001 diff --git a/public/map/d81f191e-9d94-433f-8e33-ad5bbaa187e8.jpg b/public/map/d81f191e-9d94-433f-8e33-ad5bbaa187e8.jpg new file mode 100644 index 0000000000000000000000000000000000000000..830b275a6db54baa6d84990e60a262d0a365c7de GIT binary patch literal 13964 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

c2Y6O>i{<0zSm^9qa81Vtux5$V>Zb}BMmL*1+M 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 diff --git a/public/portofolio/logo/b5716434-cc9d-4b83-a447-6ad4376d4899.png b/public/portofolio/logo/b5716434-cc9d-4b83-a447-6ad4376d4899.png new file mode 100644 index 0000000000000000000000000000000000000000..0733e81bcbaf6ff4a18ccc7dd33e80f5de096e49 GIT binary patch literal 4250 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 literal 0 HcmV?d00001 diff --git a/public/portofolio/logo/a7ebdb61-1200-45b3-b868-ed9cc811c8b8.png b/public/portofolio/logo/baad553b-93eb-4f3a-b2cf-bfc017d1f745.png similarity index 100% rename from public/portofolio/logo/a7ebdb61-1200-45b3-b868-ed9cc811c8b8.png rename to public/portofolio/logo/baad553b-93eb-4f3a-b2cf-bfc017d1f745.png diff --git a/src/app/api/auth/validasi/route.ts b/src/app/api/auth/validasi/route.ts index be2bc349..1ba3e6c5 100644 --- a/src/app/api/auth/validasi/route.ts +++ b/src/app/api/auth/validasi/route.ts @@ -10,11 +10,9 @@ import yaml from "yaml"; const config = yaml.parse(fs.readFileSync("config.yaml").toString()); export async function POST(req: Request) { - if (req.method === "POST") { const body = await req.json(); - const data = await prisma.user.findUnique({ where: { nomor: body.nomor, @@ -27,7 +25,7 @@ export async function POST(req: Request) { }, }); - myConsole(data) + myConsole(data); if (!data) return NextResponse.json({ status: 404 }); @@ -38,7 +36,7 @@ export async function POST(req: Request) { username: data.username, }), { - password: (await config.server.password), + password: await config.server.password, } ); @@ -48,7 +46,7 @@ export async function POST(req: Request) { maxAge: 60 * 60 * 24 * 7, }); - revalidatePath("/dev/home") + revalidatePath("/dev/home"); return NextResponse.json({ status: 200, data }); } diff --git a/src/app/api/map/[id]/route.ts b/src/app/api/map/[id]/route.ts new file mode 100644 index 00000000..5b5bba33 --- /dev/null +++ b/src/app/api/map/[id]/route.ts @@ -0,0 +1,32 @@ +import prisma from "@/app/lib/prisma"; +import fs from "fs"; +import { NextRequest, NextResponse } from "next/server"; + +export async function GET( + req: NextRequest, + { params }: { params: { id: string } } +) { + const get = await prisma.images.findUnique({ + where: { + id: params.id, + }, + select: { + url: true, + }, + }); + + if (!fs.existsSync(`./public/map/${get?.url}`)) { + const notFile = fs.readFileSync("./public/aset/global/no_img.png"); + return new NextResponse(notFile, { + headers: { + "Content-Type": "image/png", + }, + }); + } + const file = fs.readFileSync(`./public/map/${get?.url}`); + return new NextResponse(file, { + headers: { + "Content-Type": "image/png", + }, + }); +} diff --git a/src/app/dev/map/create/[id]/page.tsx b/src/app/dev/map/create/[id]/page.tsx new file mode 100644 index 00000000..5a27ae8e --- /dev/null +++ b/src/app/dev/map/create/[id]/page.tsx @@ -0,0 +1,10 @@ +import { Map_CreateNewPin } from "@/app_modules/map/view"; + +export default async function Page({ params }: { params: { id: string } }) { + let portofolioId = params.id; + return ( + <> + + + ); +} diff --git a/src/app/dev/map/create/page.tsx b/src/app/dev/map/create/page.tsx deleted file mode 100644 index 2841a5d2..00000000 --- a/src/app/dev/map/create/page.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import { Map_CreateNewPin } from "@/app_modules/map/view"; - -export default async function Page() { - return ( - <> - - - ); -} diff --git a/src/app/dev/map/edit/[id]/page.tsx b/src/app/dev/map/edit/[id]/page.tsx new file mode 100644 index 00000000..79a07168 --- /dev/null +++ b/src/app/dev/map/edit/[id]/page.tsx @@ -0,0 +1,13 @@ +import { map_funGetOneByPortofolioId } from "@/app_modules/map/fun/get/fun_get_one_by_portofolio_id"; +import { Map_EditPin } from "@/app_modules/map/view"; + +export default async function Page({ params }: { params: { id: string } }) { + const portofolioId = params.id; + const dataMap = await map_funGetOneByPortofolioId({portofolioId: portofolioId}) + + return ( + <> + + + ); +} diff --git a/src/app/dev/portofolio/main/[id]/page.tsx b/src/app/dev/portofolio/main/[id]/page.tsx index fe44019e..6e863ebc 100644 --- a/src/app/dev/portofolio/main/[id]/page.tsx +++ b/src/app/dev/portofolio/main/[id]/page.tsx @@ -1,17 +1,20 @@ +import ComponentGlobal_IsEmptyData from "@/app_modules/_global/component/is_empty_data"; import { user_getOneUserId } from "@/app_modules/fun_global/get_user_token"; import { ViewPortofolio } from "@/app_modules/katalog/portofolio"; import { portofolio_getOneById } from "@/app_modules/katalog/portofolio/fun/get/get_one_portofolio"; +const mapboxToken = process.env.MAPBOX_TOKEN!; export default async function Page({ params }: { params: { id: string } }) { const getPorto = await portofolio_getOneById(params.id); const userLoginId = await user_getOneUserId(); return ( <> - {/* {JSON.stringify(getPorto)} */} + {/*

{JSON.stringify(getPorto, null, 2)}
*/} ); diff --git a/src/app/lib/router_hipmi/router_map.ts b/src/app/lib/router_hipmi/router_map.ts index d24fae8d..b2c4bd15 100644 --- a/src/app/lib/router_hipmi/router_map.ts +++ b/src/app/lib/router_hipmi/router_map.ts @@ -1,5 +1,10 @@ export const RouterMap = { + // api + api_foto: "/api/map/", + + // main splash: "/dev/map/splash", main_view: "/dev/map/main", - create: "/dev/map/create", + create: "/dev/map/create/", + edit: "/dev/map/edit/", }; diff --git a/src/app_modules/_global/ui/ui_drawer.tsx b/src/app_modules/_global/ui/ui_drawer.tsx index ab3a4465..b604532a 100644 --- a/src/app_modules/_global/ui/ui_drawer.tsx +++ b/src/app_modules/_global/ui/ui_drawer.tsx @@ -91,7 +91,7 @@ export default function UIGlobal_Drawer({ e?.icon )} - + {e?.name} diff --git a/src/app_modules/auth/fun/fun_edit_aktivasi_kode_otp_by_id.ts b/src/app_modules/auth/fun/fun_edit_aktivasi_kode_otp_by_id.ts index 6b5b1e1b..a711aa7b 100644 --- a/src/app_modules/auth/fun/fun_edit_aktivasi_kode_otp_by_id.ts +++ b/src/app_modules/auth/fun/fun_edit_aktivasi_kode_otp_by_id.ts @@ -2,15 +2,12 @@ import prisma from "@/app/lib/prisma"; -export async function auth_funEditAktivasiKodeOtpById(otpId: string) { +export async function auth_funDeleteAktivasiKodeOtpById(otpId: string) { // console.log(otpId); - const updt = await prisma.kodeOtp.update({ + const updt = await prisma.kodeOtp.delete({ where: { id: otpId, }, - data: { - isActive: false, - }, }); if (!updt) return { status: 400, message: "Gagal Update Aktivasi Kode OTP" }; diff --git a/src/app_modules/auth/fun/fun_login.ts b/src/app_modules/auth/fun/fun_login.ts index 918a53bb..7f53c3a2 100644 --- a/src/app_modules/auth/fun/fun_login.ts +++ b/src/app_modules/auth/fun/fun_login.ts @@ -9,7 +9,10 @@ export async function auth_funLogin(nomor: string) { try { const res = await fetch( - `https://wa.wibudev.com/code?nom=${nomor}&text=HIPMI - Masukan kode OTP sesuai dengan nomor yang anda daftarkan, kode ini bersifat rahasia & jangan di bagikan pada siapapun termasuk anggota ataupun pengurus HIPMI lainnya. Kode OTP anda: ${codeOtp}` + `https://wa.wibudev.com/code?nom=${nomor}&text=HIPMI - Kode ini bersifat RAHASIA dan JANGAN DI BAGIKAN KEPADA SIAPAPUN, termasuk anggota ataupun pengurus HIPMI lainnya. + \n + >> Kode OTP anda: ${codeOtp}. + ` ); const sendWa = await res.json(); @@ -31,6 +34,7 @@ export async function auth_funLogin(nomor: string) { kodeOtpId: createOtpId.id, }; } catch (error) { + console.log(error); return { status: 500, message: "Server Error !!!" }; } } diff --git a/src/app_modules/auth/fun/fun_logout.ts b/src/app_modules/auth/fun/fun_logout.ts index 60f8a143..88c8d311 100644 --- a/src/app_modules/auth/fun/fun_logout.ts +++ b/src/app_modules/auth/fun/fun_logout.ts @@ -14,13 +14,12 @@ export async function auth_Logout(kodeId: string) { const c = cookies().get("ssn"); if (c?.value !== "") return { status: 400, message: "Gagal Logout" }; - const del = await prisma.kodeOtp.delete({ - where: { - id: kodeId, - }, - }); - - if (!del) return { status: 400, message: "Gagal Hapus Kode OTP Id"}; + // const del = await prisma.kodeOtp.delete({ + // where: { + // id: kodeId, + // }, + // }); + // if (!del) return { status: 400, message: "Gagal Hapus Kode OTP Id"}; // revalidatePath("/dev/katalog") return { status: 200, message: "Logout Berhasil" }; } diff --git a/src/app_modules/auth/fun/get_kode_otp_by_id.ts b/src/app_modules/auth/fun/get_kode_otp_by_id.ts index 8b0849ae..7780afad 100644 --- a/src/app_modules/auth/fun/get_kode_otp_by_id.ts +++ b/src/app_modules/auth/fun/get_kode_otp_by_id.ts @@ -9,5 +9,5 @@ export async function auth_getKodeOtpById(otpId: string) { }, }); - return data + return data; } diff --git a/src/app_modules/auth/login/view.tsx b/src/app_modules/auth/login/view.tsx index c7bf866b..eea2d111 100644 --- a/src/app_modules/auth/login/view.tsx +++ b/src/app_modules/auth/login/view.tsx @@ -1,35 +1,29 @@ "use client"; -import { - BackgroundImage, - Box, - Button, - Center, - Flex, - Grid, - Group, - Image, - Stack, - Text, - TextInput, - Title, -} from "@mantine/core"; -import { useFocusTrap } from "@mantine/hooks"; -import { useRouter } from "next/navigation"; -import { useState } from "react"; -import { useAtom } from "jotai"; -import { gs_kodeId } from "../state/state"; -import { ComponentGlobal_NotifikasiPeringatan } from "@/app_modules/_global/notif_global/notifikasi_peringatan"; -import { auth_funLogin } from "@/app_modules/auth/fun/fun_login"; import { RouterAuth } from "@/app/lib/router_hipmi/router_auth"; -import { ComponentGlobal_NotifikasiBerhasil } from "@/app_modules/_global/notif_global/notifikasi_berhasil"; -import { PhoneInput } from "react-international-phone"; -import "react-international-phone/style.css"; import { AccentColor, MainColor, } from "@/app_modules/_global/color/color_pallet"; import ComponentGlobal_ErrorInput from "@/app_modules/_global/component/error_input"; +import { ComponentGlobal_NotifikasiBerhasil } from "@/app_modules/_global/notif_global/notifikasi_berhasil"; +import { ComponentGlobal_NotifikasiPeringatan } from "@/app_modules/_global/notif_global/notifikasi_peringatan"; +import { auth_funLogin } from "@/app_modules/auth/fun/fun_login"; +import { + BackgroundImage, + Button, + Center, + Stack, + Text, + Title +} from "@mantine/core"; +import { useFocusTrap } from "@mantine/hooks"; +import { useAtom } from "jotai"; +import { useRouter } from "next/navigation"; +import { useState } from "react"; +import { PhoneInput } from "react-international-phone"; +import "react-international-phone/style.css"; +import { gs_kodeId } from "../state/state"; export default function Login() { const router = useRouter(); diff --git a/src/app_modules/auth/logout/view.tsx b/src/app_modules/auth/logout/view.tsx index e0a3dc33..5562145c 100644 --- a/src/app_modules/auth/logout/view.tsx +++ b/src/app_modules/auth/logout/view.tsx @@ -1,26 +1,21 @@ "use client"; +import { Warna } from "@/app/lib/warna"; +import { ComponentGlobal_NotifikasiBerhasil } from "@/app_modules/_global/notif_global/notifikasi_berhasil"; +import { ComponentGlobal_NotifikasiPeringatan } from "@/app_modules/_global/notif_global/notifikasi_peringatan"; +import UIGlobal_Modal from "@/app_modules/_global/ui/ui_modal"; import { ActionIcon, Button, - Group, - Modal, Stack, - Text, - Title, + Text } from "@mantine/core"; -import { useRouter } from "next/navigation"; -import { useAtom } from "jotai"; -import { gs_kodeId, gs_nomor, gs_otp } from "../state/state"; import { IconLogout } from "@tabler/icons-react"; -import { Warna } from "@/app/lib/warna"; -import { useDisclosure } from "@mantine/hooks"; -import { ComponentGlobal_NotifikasiBerhasil } from "@/app_modules/_global/notif_global/notifikasi_berhasil"; -import { auth_Logout } from "../fun/fun_logout"; -import { ComponentGlobal_NotifikasiPeringatan } from "@/app_modules/_global/notif_global/notifikasi_peringatan"; -import { RouterAuth } from "@/app/lib/router_hipmi/router_auth"; +import { useAtom } from "jotai"; +import { useRouter } from "next/navigation"; import { useState } from "react"; -import UIGlobal_Modal from "@/app_modules/_global/ui/ui_modal"; +import { auth_Logout } from "../fun/fun_logout"; +import { gs_kodeId } from "../state/state"; export default function Component_Logout() { const router = useRouter(); diff --git a/src/app_modules/auth/register/view.tsx b/src/app_modules/auth/register/view.tsx index 2e8fc7fa..087db307 100644 --- a/src/app_modules/auth/register/view.tsx +++ b/src/app_modules/auth/register/view.tsx @@ -1,42 +1,31 @@ "use client"; -import { Warna } from "@/app/lib/warna"; -import { - Flex, - Title, - TextInput, - Button, - Text, - Center, - PinInput, - Stack, - BackgroundImage, -} from "@mantine/core"; -import { - IconCircleLetterH, - IconCloudLockOpen, - IconUserCircle, -} from "@tabler/icons-react"; -import { gs_nomor } from "../state/state"; -import { useAtom } from "jotai"; -import { useState } from "react"; -import { myConsole } from "@/app/fun/my_console"; -import toast from "react-simple-toasts"; -import { ApiHipmi } from "@/app/lib/api"; -import { useRouter } from "next/navigation"; -import _ from "lodash"; -import { useFocusTrap } from "@mantine/hooks"; -import { Auth_funRegister } from "../fun/fun_register"; -import { ComponentGlobal_NotifikasiPeringatan } from "@/app_modules/_global/notif_global/notifikasi_peringatan"; -import { ComponentGlobal_NotifikasiBerhasil } from "@/app_modules/_global/notif_global/notifikasi_berhasil"; -import { IconPencilCheck } from "@tabler/icons-react"; import { RouterHome } from "@/app/lib/router_hipmi/router_home"; -import { auth_funEditAktivasiKodeOtpById } from "../fun/fun_edit_aktivasi_kode_otp_by_id"; -import ComponentGlobal_ErrorInput from "@/app_modules/_global/component/error_input"; import { AccentColor, MainColor, } from "@/app_modules/_global/color/color_pallet"; +import ComponentGlobal_ErrorInput from "@/app_modules/_global/component/error_input"; +import { ComponentGlobal_NotifikasiBerhasil } from "@/app_modules/_global/notif_global/notifikasi_berhasil"; +import { ComponentGlobal_NotifikasiPeringatan } from "@/app_modules/_global/notif_global/notifikasi_peringatan"; +import { + BackgroundImage, + Button, + Center, + Stack, + Text, + TextInput, + Title +} from "@mantine/core"; +import { useFocusTrap } from "@mantine/hooks"; +import { + IconUserCircle +} from "@tabler/icons-react"; +import _ from "lodash"; +import { useRouter } from "next/navigation"; +import { useState } from "react"; +import { auth_funDeleteAktivasiKodeOtpById } from "../fun/fun_edit_aktivasi_kode_otp_by_id"; +import { Auth_funRegister } from "../fun/fun_register"; export default function Register({ dataOtp }: { dataOtp: any }) { const router = useRouter(); @@ -60,21 +49,20 @@ export default function Register({ dataOtp }: { dataOtp: any }) { if (body.username.length < 5) return null; if (_.values(body.username).includes(" ")) return null; - await Auth_funRegister(body).then(async (res) => { - if (res.status === 200) { - await auth_funEditAktivasiKodeOtpById(dataOtp.id).then((val) => { - if (val.status === 200) { - ComponentGlobal_NotifikasiBerhasil(res.message); - setLoading(true); - router.push(RouterHome.main_home, { scroll: false }); - } else { - ComponentGlobal_NotifikasiPeringatan(val.message); - } - }); - } else { - ComponentGlobal_NotifikasiPeringatan(res.message); - } - }); + const res = await Auth_funRegister(body) + if (res.status === 200) { + await auth_funDeleteAktivasiKodeOtpById(dataOtp.id).then((val) => { + if (val.status === 200) { + ComponentGlobal_NotifikasiBerhasil(res.message); + setLoading(true); + router.push(RouterHome.main_home, { scroll: false }); + } else { + ComponentGlobal_NotifikasiPeringatan(val.message); + } + }); + } else { + ComponentGlobal_NotifikasiPeringatan(res.message); + } } return ( diff --git a/src/app_modules/auth/validasi/view.tsx b/src/app_modules/auth/validasi/view.tsx index 40398736..c80cab25 100644 --- a/src/app_modules/auth/validasi/view.tsx +++ b/src/app_modules/auth/validasi/view.tsx @@ -24,7 +24,7 @@ import { useFocusTrap } from "@mantine/hooks"; import { IconChevronLeft } from "@tabler/icons-react"; import { useRouter } from "next/navigation"; import { useState } from "react"; -import { auth_funEditAktivasiKodeOtpById } from "../fun/fun_edit_aktivasi_kode_otp_by_id"; +import { auth_funDeleteAktivasiKodeOtpById } from "../fun/fun_edit_aktivasi_kode_otp_by_id"; import { auth_funValidasi } from "../fun/fun_validasi"; export default function Validasi({ dataOtp }: { dataOtp: any }) { @@ -41,26 +41,26 @@ export default function Validasi({ dataOtp }: { dataOtp: any }) { if (code != inputCode) return ComponentGlobal_NotifikasiPeringatan("Kode Salah"); - await auth_funValidasi(nomor).then(async (res) => { - if (res.status === 200) { - await auth_funEditAktivasiKodeOtpById(dataOtp.id).then((val) => { - if (val.status === 200) { - if (res.role === "1") { - ComponentGlobal_NotifikasiBerhasil(res.message); - setLoading(true); - router.push(RouterHome.main_home, { scroll: false }); - } else { - router.push(RouterAdminDashboard.splash_admin); - } - } else { - ComponentGlobal_NotifikasiPeringatan(val.message); - } - }); + const res = await auth_funValidasi(nomor); + if (res.status === 200) { + + const resAktivasi = await auth_funDeleteAktivasiKodeOtpById(dataOtp.id); + if (resAktivasi.status === 200) { + if (res.role === "1") { + ComponentGlobal_NotifikasiBerhasil(res.message); + setLoading(true); + router.push(RouterHome.main_home, { scroll: false }); + } else { + router.push(RouterAdminDashboard.splash_admin); + } } else { - ComponentGlobal_NotifikasiBerhasil(res.message); - router.push(RouterAuth.register + dataOtp.id); + ComponentGlobal_NotifikasiPeringatan(resAktivasi.message); } - }); + + } else { + ComponentGlobal_NotifikasiBerhasil(res.message); + router.push(RouterAuth.register + dataOtp.id, { scroll: false }); + } } return ( diff --git a/src/app_modules/katalog/portofolio/component/button_more.tsx b/src/app_modules/katalog/portofolio/component/button_more.tsx index b3cda470..65397a97 100644 --- a/src/app_modules/katalog/portofolio/component/button_more.tsx +++ b/src/app_modules/katalog/portofolio/component/button_more.tsx @@ -1,6 +1,7 @@ "use client"; import { RouterPortofolio } from "@/app/lib/router_hipmi/router_katalog"; +import { RouterMap } from "@/app/lib/router_hipmi/router_map"; import UIGlobal_Drawer from "@/app_modules/_global/ui/ui_drawer"; import { ActionIcon } from "@mantine/core"; import { @@ -8,6 +9,7 @@ import { IconDotsVertical, IconEdit, IconId, + IconMapPinMinus, IconPhotoEdit, } from "@tabler/icons-react"; import { useRouter } from "next/navigation"; @@ -26,22 +28,28 @@ export function ComponentPortofolio_ButtonMore({ const listPage = [ { id: "1", - name: "Update detail bisnis", + name: "Edit detail ", icon: , path: RouterPortofolio.edit_data_bisnis + `${portoId}`, }, { id: "2", - name: "Update logo ", + name: "Edit logo ", icon: , path: RouterPortofolio.edit_logo_bisnis + `${portoId}`, }, { id: "3", - name: "Update sosial media", + name: "Edit sosial media", icon: , path: RouterPortofolio.edit_medsos_bisnis + `${portoId}`, }, + { + id: "4", + name: "Edit pin map", + icon: , + path: RouterMap.edit + `${portoId}`, + }, ]; return ( diff --git a/src/app_modules/katalog/portofolio/component/card_view_daftar.tsx b/src/app_modules/katalog/portofolio/component/card_view_daftar.tsx index 64bb66be..671b0ee6 100644 --- a/src/app_modules/katalog/portofolio/component/card_view_daftar.tsx +++ b/src/app_modules/katalog/portofolio/component/card_view_daftar.tsx @@ -1,6 +1,6 @@ import { Group, Paper, Stack, Text } from "@mantine/core"; import { MODEL_PORTOFOLIO } from "../model/interface"; -import { AccentColor } from "@/app_modules/_global/color/color_pallet"; +import { AccentColor, MainColor } from "@/app_modules/_global/color/color_pallet"; import ComponentGlobal_Loader from "@/app_modules/_global/component/loader"; import { IconCaretRight } from "@tabler/icons-react"; import { useRouter } from "next/navigation"; @@ -33,9 +33,15 @@ export function ComponentPortofolio_DaftarBoxView({ }} > - - {data?.namaBisnis} - + + + {data?.namaBisnis} + + + #{data?.id_Portofolio} + + + {isLoading ? ( diff --git a/src/app_modules/katalog/portofolio/component/detail_data_drawer_map.tsx b/src/app_modules/katalog/portofolio/component/detail_data_drawer_map.tsx new file mode 100644 index 00000000..146975cd --- /dev/null +++ b/src/app_modules/katalog/portofolio/component/detail_data_drawer_map.tsx @@ -0,0 +1,108 @@ +"use client"; + +import { RouterMap } from "@/app/lib/router_hipmi/router_map"; +import ComponentGlobal_AuthorNameOnHeader from "@/app_modules/_global/author_name_on_header"; +import { + Box, + Button, + Grid, + Group, + Image, + SimpleGrid, + Stack, + Text, + Title, +} from "@mantine/core"; +import { useShallowEffect } from "@mantine/hooks"; +import { useState } from "react"; +import { + IconBuildingSkyscraper, + IconListDetails, + IconPhoneCall, + IconMapPin, +} from "@tabler/icons-react"; +import { useRouter } from "next/navigation"; +import { RouterPortofolio } from "@/app/lib/router_hipmi/router_katalog"; +import { MainColor } from "@/app_modules/_global/color/color_pallet"; +import { MODEL_MAP } from "@/app_modules/map/lib/interface"; +import { map_funGetOneById } from "@/app_modules/map/fun/get/fun_get_one_by_id"; + +export function ComponentPortofolio_DetailDataMap({ mapId }: { mapId: any }) { + const router = useRouter(); + const [data, setData] = useState(); + + useShallowEffect(() => { + onLoadData(mapId); + }, [mapId]); + + async function onLoadData(mapId: string) { + const res: any = await map_funGetOneById({ mapId: mapId }); + setData(res); + } + + return ( + <> + + + + + Foto + + + + + + + {data?.Portofolio.namaBisnis} + + + + + + + + {data?.Portofolio.MasterBidangBisnis.name} + + + + + + + + +{data?.Portofolio.tlpn} + + + + + + + + {data?.Portofolio.alamatKantor} + + + + + + {/*
{JSON.stringify(data, null, 2)}
*/} +
+ + ); +} diff --git a/src/app_modules/katalog/portofolio/component/index.ts b/src/app_modules/katalog/portofolio/component/index.ts new file mode 100644 index 00000000..ce8e74ee --- /dev/null +++ b/src/app_modules/katalog/portofolio/component/index.ts @@ -0,0 +1 @@ +export { ComponentPortofolio_DetailDataMap } from "./detail_data_drawer_map"; diff --git a/src/app_modules/katalog/portofolio/create/create_intro.tsx b/src/app_modules/katalog/portofolio/create/create_intro.tsx deleted file mode 100644 index ec59e159..00000000 --- a/src/app_modules/katalog/portofolio/create/create_intro.tsx +++ /dev/null @@ -1 +0,0 @@ -// create \ No newline at end of file diff --git a/src/app_modules/katalog/portofolio/create/layout.tsx b/src/app_modules/katalog/portofolio/create/layout.tsx index 1857e261..c9054145 100644 --- a/src/app_modules/katalog/portofolio/create/layout.tsx +++ b/src/app_modules/katalog/portofolio/create/layout.tsx @@ -3,13 +3,17 @@ import UIGlobal_LayoutHeaderTamplate from "@/app_modules/_global/ui/ui_header_tamplate"; import UIGlobal_LayoutTamplate from "@/app_modules/_global/ui/ui_layout_tamplate"; -export default function CreatePortofolioLayout({ children, profileId }: { children: any, profileId: any }) { +export default function CreatePortofolioLayout({ + children, + profileId, +}: { + children: any; + profileId: any; +}) { return ( <> - } + header={} > {children} diff --git a/src/app_modules/katalog/portofolio/create/view.tsx b/src/app_modules/katalog/portofolio/create/view.tsx index fd148a57..b11ed7fe 100644 --- a/src/app_modules/katalog/portofolio/create/view.tsx +++ b/src/app_modules/katalog/portofolio/create/view.tsx @@ -1,9 +1,12 @@ "use client"; -import { Warna } from "@/app/lib/warna"; -import ComponentGlobal_ErrorInput from "@/app_modules/_global/component/error_input"; +import { RouterMap } from "@/app/lib/router_hipmi/router_map"; +import { + AccentColor, + MainColor, +} from "@/app_modules/_global/color/color_pallet"; +import ComponentGlobal_BoxInformation from "@/app_modules/_global/component/box_information"; import ComponentGlobal_InputCountDown from "@/app_modules/_global/component/input_countdown"; -import { ComponentGlobal_NotifikasiBerhasil } from "@/app_modules/_global/notif_global/notifikasi_berhasil"; import { ComponentGlobal_NotifikasiGagal } from "@/app_modules/_global/notif_global/notifikasi_gagal"; import { ComponentGlobal_NotifikasiPeringatan } from "@/app_modules/_global/notif_global/notifikasi_peringatan"; import { @@ -12,6 +15,7 @@ import { } from "@/app_modules/model_global/portofolio"; import { AspectRatio, + Box, Button, Center, FileButton, @@ -19,21 +23,17 @@ import { Paper, Select, Stack, + Text, TextInput, Textarea, + Title, } from "@mantine/core"; import { IconCamera } from "@tabler/icons-react"; import _ from "lodash"; import { AppRouterInstance } from "next/dist/shared/lib/app-router-context.shared-runtime"; import { useRouter } from "next/navigation"; import { useState } from "react"; -import ComponentKatalog_NotedBox from "../../component/noted_box"; import funCreatePortofolio from "../fun/fun_create_portofolio"; -import ComponentGlobal_BoxInformation from "@/app_modules/_global/component/box_information"; -import { - AccentColor, - MainColor, -} from "@/app_modules/_global/color/color_pallet"; export default function CreatePortofolio({ bidangBisnis, @@ -84,7 +84,7 @@ export default function CreatePortofolio({ onChange={(val) => { setValue({ ...value, - namaBisnis: val.target.value, + namaBisnis: _.startCase(val.target.value), }); }} /> @@ -115,8 +115,8 @@ export default function CreatePortofolio({ }, }} withAsterisk - label="Alamat Kantor" - placeholder="Alamat kantor" + label="Alamat Bisnis" + placeholder="Alamat bisnis" maxLength={100} onChange={(val) => { setValue({ @@ -132,8 +132,8 @@ export default function CreatePortofolio({ }, }} withAsterisk - label="Nomor Telepon Kantor" - placeholder="Nomor telepon kantor" + label="Nomor Telepon " + placeholder="Nomor telepon " type="number" onChange={(val) => { setValue({ @@ -149,7 +149,7 @@ export default function CreatePortofolio({ color: "white", }, }} - maxLength={150} + maxLength={300} autosize minRows={2} maxRows={5} @@ -164,7 +164,7 @@ export default function CreatePortofolio({ }} />
@@ -172,12 +172,62 @@ export default function CreatePortofolio({ - + {/* Foto - {isFile ? : ""} + + + + {isFile ? : ""} */} + + {img ? ( + + + Foto + + + ) : ( + + + + + Upload Logo Bisnis + + Masukan logo bisnis anda untuk ditampilkan dalam + portofolio + + + + + + )}
- + @@ -361,15 +409,17 @@ async function onSubmit( const gambar = new FormData(); gambar.append("file", file as any); - await funCreatePortofolio(profileId, porto as any, gambar, dataMedsos).then( - (res) => { - if (res.status === 201) { - setLoading(true); - ComponentGlobal_NotifikasiBerhasil("Berhasil disimpan"); - router.back(); - } else { - ComponentGlobal_NotifikasiGagal("Gagal disimpan"); - } - } + const res = await funCreatePortofolio( + profileId, + porto as any, + gambar, + dataMedsos ); + if (res.status === 201) { + setLoading(true); + // ComponentGlobal_NotifikasiBerhasil("Berhasil disimpan"); + router.replace(RouterMap.create + res.id , {scroll: false}); + } else { + ComponentGlobal_NotifikasiGagal("Gagal disimpan"); + } } diff --git a/src/app_modules/katalog/portofolio/edit/data/ui_edit_data.tsx b/src/app_modules/katalog/portofolio/edit/data/ui_edit_data.tsx index 7ff8771e..b5bfb78f 100644 --- a/src/app_modules/katalog/portofolio/edit/data/ui_edit_data.tsx +++ b/src/app_modules/katalog/portofolio/edit/data/ui_edit_data.tsx @@ -147,7 +147,7 @@ export default function Portofolio_EditDataBisnis({ value={value.deskripsi} label="Deskripsi" placeholder="Deskripsi singkat mengenai usaha" - maxLength={150} + maxLength={300} error={ value.deskripsi === "" ? ( @@ -163,7 +163,7 @@ export default function Portofolio_EditDataBisnis({ }} /> diff --git a/src/app_modules/katalog/portofolio/fun/fun_create_portofolio.ts b/src/app_modules/katalog/portofolio/fun/fun_create_portofolio.ts index fab639b5..58d0f117 100644 --- a/src/app_modules/katalog/portofolio/fun/fun_create_portofolio.ts +++ b/src/app_modules/katalog/portofolio/fun/fun_create_portofolio.ts @@ -34,7 +34,7 @@ export default async function funCreatePortofolio( const upload_Folder = Buffer.from(await gambar.arrayBuffer()); fs.writeFileSync(`./public/portofolio/logo/${upload.url}`, upload_Folder); - const createProto = await prisma.portofolio.create({ + const createPortofolio = await prisma.portofolio.create({ data: { profileId: profileId, id_Portofolio: "Porto" + Date.now().toString(), @@ -47,11 +47,11 @@ export default async function funCreatePortofolio( }, }); - if (!createProto) return { status: 400, message: "Gagal membuat portofolio" }; + if (!createPortofolio) return { status: 400, message: "Gagal membuat portofolio" }; const createMedsos = await prisma.portofolio_MediaSosial.create({ data: { - portofolioId: createProto.id, + portofolioId: createPortofolio.id, facebook: medsos.facebook, instagram: medsos.instagram, tiktok: medsos.tiktok, @@ -65,6 +65,7 @@ export default async function funCreatePortofolio( revalidatePath(`/dev/katalog`); return { + id: createPortofolio.id, status: 201, message: "Berhasil menambahakan portofolio", }; diff --git a/src/app_modules/katalog/portofolio/fun/get/get_list_portofolio.ts b/src/app_modules/katalog/portofolio/fun/get/get_list_portofolio.ts index 77c87b5b..9afa5443 100644 --- a/src/app_modules/katalog/portofolio/fun/get/get_list_portofolio.ts +++ b/src/app_modules/katalog/portofolio/fun/get/get_list_portofolio.ts @@ -14,6 +14,7 @@ export async function funGetListPortofolio(profileId: any) { }, select: { id: true, + id_Portofolio: true, namaBisnis: true, profileId: true, }, diff --git a/src/app_modules/katalog/portofolio/fun/get/get_one_portofolio.ts b/src/app_modules/katalog/portofolio/fun/get/get_one_portofolio.ts index 73f01ce2..49565a82 100644 --- a/src/app_modules/katalog/portofolio/fun/get/get_one_portofolio.ts +++ b/src/app_modules/katalog/portofolio/fun/get/get_one_portofolio.ts @@ -10,6 +10,7 @@ export async function portofolio_getOneById(portoId: string) { }, select: { id: true, + id_Portofolio: true, namaBisnis: true, alamatKantor: true, deskripsi: true, @@ -37,6 +38,11 @@ export async function portofolio_getOneById(portoId: string) { }, }, }, + BusinessMaps: { + include: { + Author: true, + }, + }, }, }); diff --git a/src/app_modules/katalog/portofolio/model/interface.ts b/src/app_modules/katalog/portofolio/model/interface.ts index a954ecfa..67b1f53e 100644 --- a/src/app_modules/katalog/portofolio/model/interface.ts +++ b/src/app_modules/katalog/portofolio/model/interface.ts @@ -1,6 +1,7 @@ import { MODEL_USER } from "@/app_modules/home/model/interface"; import { MODEL_IMAGES } from "@/app_modules/model_global/interface"; import { MODEL_PROFILE } from "../../profile/model/interface"; +import { MODEL_MAP } from "@/app_modules/map/lib/interface"; export interface MODEL_PORTOFOLIO { id: string; @@ -14,8 +15,10 @@ export interface MODEL_PORTOFOLIO { profileId: string; Logo: MODEL_IMAGES; logoId: string; - Portofolio_MediaSosial: MODEL_PORTOFOLIO_MEDSOS - Profile: MODEL_PROFILE + Portofolio_MediaSosial: MODEL_PORTOFOLIO_MEDSOS; + Profile: MODEL_PROFILE; + BusinessMaps: MODEL_MAP; + id_Portofolio: string } export interface MODEL_PORTOFOLIO_BIDANG_BISNIS { diff --git a/src/app_modules/katalog/portofolio/ui/ui_detail_data.tsx b/src/app_modules/katalog/portofolio/ui/ui_detail_data.tsx index 01564ac1..a6927246 100644 --- a/src/app_modules/katalog/portofolio/ui/ui_detail_data.tsx +++ b/src/app_modules/katalog/portofolio/ui/ui_detail_data.tsx @@ -1,4 +1,16 @@ -import { Paper, Title, Stack, Grid, Text } from "@mantine/core"; +import { + Paper, + Title, + Stack, + Grid, + Text, + SimpleGrid, + Box, + AspectRatio, + Image, + Group, + Divider, +} from "@mantine/core"; import { IconBuildingSkyscraper, IconPhoneCall, @@ -7,7 +19,11 @@ import { IconPinned, } from "@tabler/icons-react"; import { MODEL_PORTOFOLIO } from "../model/interface"; -import { AccentColor } from "@/app_modules/_global/color/color_pallet"; +import { + AccentColor, + MainColor, +} from "@/app_modules/_global/color/color_pallet"; +import { RouterPortofolio } from "@/app/lib/router_hipmi/router_katalog"; export function Portofolio_UiDetailData({ dataPorto, @@ -26,48 +42,86 @@ export function Portofolio_UiDetailData({ color: "white", }} > - Data Bisnis - - - - - - - {dataPorto?.namaBisnis} - - - - - - - - +{dataPorto?.tlpn} - - - - - - - - {dataPorto?.alamatKantor} - - - - - - - - {dataPorto?.MasterBidangBisnis.name} - - - - + + + Data Bisnis + + id: {" "} + #{dataPorto.id_Portofolio} + + + + + + + + Foto + + + + + + + + + + + {dataPorto?.namaBisnis} + + + + + + + + {dataPorto?.MasterBidangBisnis.name} + + + + + + + + +{dataPorto?.tlpn} + + + + + + + + {dataPorto?.alamatKantor} + + + + + + + + + + - - - {dataPorto?.deskripsi} - - + + Tentang Kami + + + {dataPorto?.deskripsi} + diff --git a/src/app_modules/katalog/portofolio/ui/ui_detail_map.tsx b/src/app_modules/katalog/portofolio/ui/ui_detail_map.tsx new file mode 100644 index 00000000..5c35ad56 --- /dev/null +++ b/src/app_modules/katalog/portofolio/ui/ui_detail_map.tsx @@ -0,0 +1,137 @@ +"use client"; + +import { AccentColor } from "@/app_modules/_global/color/color_pallet"; +import { + defaultLatLong, + defaultMapZoom, +} from "@/app_modules/map/lib/default_lat_long"; +import { MODEL_MAP } from "@/app_modules/map/lib/interface"; +import { Group, Image, Paper, Stack, Text, Title } from "@mantine/core"; +import { + AttributionControl, + Map, + Marker, + NavigationControl, + ScaleControl, +} from "react-map-gl"; +import "mapbox-gl/dist/mapbox-gl.css"; +import { useState } from "react"; +import { ComponentMap_DrawerDetailData } from "@/app_modules/map/_component"; +import { ComponentMap_DetailData } from "@/app_modules/map/_component/detail_data"; +import { ComponentPortofolio_DetailDataMap } from "../component"; + +export function Portofolio_UiMap({ + mapboxToken, + data, +}: { + mapboxToken: string; + data: MODEL_MAP; +}) { + return ( + + + + Lokasi Bisnis + + + + + + ); +} + +function MapView({ + mapboxToken, + data, +}: { + mapboxToken: string; + data: MODEL_MAP; +}) { + const [openDrawer, setOpenDrawer] = useState(false); + + return ( + <> + + { + setOpenDrawer(true); + }} + pitchAlignment="auto" + > + + image + + + {data.namePin} + + + + + + + + + + setOpenDrawer(false)} + mapId={data.id} + component={} + /> + + ); +} +// ComponentPortofolio_DetailDataMap; diff --git a/src/app_modules/katalog/portofolio/ui/ui_detail_portofolio.tsx b/src/app_modules/katalog/portofolio/ui/ui_detail_portofolio.tsx index 007d91f6..0ded4dc1 100644 --- a/src/app_modules/katalog/portofolio/ui/ui_detail_portofolio.tsx +++ b/src/app_modules/katalog/portofolio/ui/ui_detail_portofolio.tsx @@ -8,20 +8,23 @@ import { MODEL_PORTOFOLIO } from "../model/interface"; import { Portofolio_UiDetailData } from "./ui_detail_data"; import { Portofolio_UiDetailLogo } from "./ui_detail_logo"; import { Portofolio_UiSosialMedia } from "./ui_detail_media"; +import { Portofolio_UiMap } from "./ui_detail_map"; export default function Portofolio_UiDetail({ dataPorto, userLoginId, + mapboxToken, }: { dataPorto: MODEL_PORTOFOLIO; userLoginId: string; + mapboxToken: string }) { - return ( <> - + + {/* */} { - router.push(RouterPortofolio.create + `${profile.id}`); + router.push(RouterPortofolio.create + `${profile.id}`, { + scroll: false, + }); setLoading(true); }} > @@ -102,9 +104,14 @@ export function Portofolio_UiListView({ }} > - - {e?.namaBisnis} - + + + {e?.namaBisnis} + + + #{e.id_Portofolio} + + {idPorto === e?.id && loadingPorto ? ( diff --git a/src/app_modules/map/_component/detail_data.tsx b/src/app_modules/map/_component/detail_data.tsx index 114cf432..415f6347 100644 --- a/src/app_modules/map/_component/detail_data.tsx +++ b/src/app_modules/map/_component/detail_data.tsx @@ -1,14 +1,34 @@ "use client"; -import { Skeleton, Stack, Text, Title } from "@mantine/core"; -import { Suspense, useState } from "react"; -import { MODEL_MAP } from "../lib/interface"; -import { useShallowEffect } from "@mantine/hooks"; -import { map_funGetOneById } from "../fun/get/fun_get_one_by_id"; -import ComponentGlobal_Loader from "@/app_modules/_global/component/loader"; +import { RouterMap } from "@/app/lib/router_hipmi/router_map"; import ComponentGlobal_AuthorNameOnHeader from "@/app_modules/_global/author_name_on_header"; +import { + Box, + Button, + Grid, + Group, + Image, + SimpleGrid, + Stack, + Text, + Title, +} from "@mantine/core"; +import { useShallowEffect } from "@mantine/hooks"; +import { useState } from "react"; +import { map_funGetOneById } from "../fun/get/fun_get_one_by_id"; +import { MODEL_MAP } from "../lib/interface"; +import { + IconBuildingSkyscraper, + IconListDetails, + IconPhoneCall, + IconMapPin, +} from "@tabler/icons-react"; +import { useRouter } from "next/navigation"; +import { RouterPortofolio } from "@/app/lib/router_hipmi/router_katalog"; +import { MainColor } from "@/app_modules/_global/color/color_pallet"; -export function ComponentMap_DetailData({ mapId }: { mapId: string }) { +export function ComponentMap_DetailData({ mapId }: { mapId: any }) { + const router = useRouter(); const [data, setData] = useState(); useShallowEffect(() => { @@ -22,31 +42,94 @@ export function ComponentMap_DetailData({ mapId }: { mapId: string }) { return ( <> - - - - latitude:{" "} - - {data?.latitude} - - - - longitude:{" "} - - {data?.longitude} - - - - - {data?.namePin} - {/* {data?.Author?.username} */} - + + + Foto + + + + + + + {data?.Portofolio.namaBisnis} + + + + + + + + {data?.Portofolio.MasterBidangBisnis.name} + + + + + + + + +{data?.Portofolio.tlpn} + + + + + + + + {data?.Portofolio.alamatKantor} + + + + + + + + + + + + + {/*
{JSON.stringify(data, null, 2)}
*/}
diff --git a/src/app_modules/map/_component/drawer.tsx b/src/app_modules/map/_component/drawer.tsx index 25abd243..f8f5c812 100644 --- a/src/app_modules/map/_component/drawer.tsx +++ b/src/app_modules/map/_component/drawer.tsx @@ -9,13 +9,12 @@ import { Stack, Title, } from "@mantine/core"; +import { useShallowEffect } from "@mantine/hooks"; import { IconX } from "@tabler/icons-react"; import { useRouter } from "next/navigation"; -import { Suspense, useState } from "react"; +import React, { useState } from "react"; +import { map_funGetOneById } from "../fun/get/fun_get_one_by_id"; import { MODEL_MAP } from "../lib/interface"; -import { useShallowEffect } from "@mantine/hooks"; -import { ComponentMap_DetailData } from "./detail_data"; -import ComponentGlobal_Loader from "@/app_modules/_global/component/loader"; interface MODEL_DRAWER { id: string; @@ -27,15 +26,27 @@ export function ComponentMap_DrawerDetailData({ opened, close, mapId, + component, }: { opened: boolean; close: () => void; mapId: string; + component: React.ReactNode; }) { const router = useRouter(); - const [isLoading, setIsLoading] = useState(false); const [data, setData] = useState(); + useShallowEffect(() => { + onLoadData(mapId); + }, [mapId]); + + async function onLoadData(mapId: string) { + const res: any = await map_funGetOneById({ mapId: mapId }); + if (res !== null) { + setData(res); + } + } + return ( <> - Detail Map + + {data?.namePin ? ( + data?.namePin + ) : ( + <Skeleton radius={"xl"} w={100} /> + )} + - }> - - + {component} diff --git a/src/app_modules/map/_component/header.tsx b/src/app_modules/map/_component/header.tsx index 75e8a759..ea6f9539 100644 --- a/src/app_modules/map/_component/header.tsx +++ b/src/app_modules/map/_component/header.tsx @@ -25,11 +25,11 @@ export function ComponentMap_Header() { <> setOpenDrawer(true)}> - - - } + // customButtonRight={ + // setOpenDrawer(true)}> + // + // + // } /> (null); + const [img, setImg] = useState(null); return ( <> - + + + + - - { - setNamePin(_.startCase(val.currentTarget.value)); - }} - /> - - + { + setNamePin(_.startCase(val.currentTarget.value)); + }} + /> + + + {img ? ( + + + Foto + + + ) : ( + + + + + Foto Lokasi Bisnis + + Upload foto lokasi bisnis anda untuk ditampilkan dalam + detail map + + + + + + )} + +
+ { + try { + const buffer = URL.createObjectURL( + new Blob([new Uint8Array(await files.arrayBuffer())]) + ); + if (files.size > 2000000) { + ComponentGlobal_NotifikasiPeringatan( + "Maaf, Ukuran file terlalu besar, maximum 2mb", + 3000 + ); + } else { + setImg(buffer); + setFile(files); + } + } catch (error) { + console.log(error); + } + }} + accept="image/png,image/jpeg" + > + {(props) => ( + + )} + +
+
+ +
); @@ -106,14 +222,23 @@ function ButtonSavePin({ namePin, lat, long, + portofolioId, + file, }: { namePin: string; lat: string; long: string; + portofolioId: string; + file: FormData; }) { const router = useRouter(); async function onSavePin() { - const res = await map_funCreatePin({ data: { namePin, lat, long } }); + const gambar = new FormData(); + gambar.append("file", file as any); + + const res = await map_funCreatePin({ + data: { namePin, lat, long, portofolioId, gambar }, + }); res.status === 200 ? (ComponentGlobal_NotifikasiBerhasil(res.message), router.back()) : ComponentGlobal_NotifikasiGagal(res.message); @@ -121,19 +246,18 @@ function ButtonSavePin({ return ( <> - - - + ); } diff --git a/src/app_modules/map/ui/ui_edit_pin.tsx b/src/app_modules/map/ui/ui_edit_pin.tsx new file mode 100644 index 00000000..47e7d986 --- /dev/null +++ b/src/app_modules/map/ui/ui_edit_pin.tsx @@ -0,0 +1,241 @@ +"use client"; + +import { + AccentColor, + MainColor, +} from "@/app_modules/_global/color/color_pallet"; +import { ComponentGlobal_NotifikasiBerhasil } from "@/app_modules/_global/notif_global/notifikasi_berhasil"; +import { ComponentGlobal_NotifikasiGagal } from "@/app_modules/_global/notif_global/notifikasi_gagal"; +import { ComponentGlobal_NotifikasiPeringatan } from "@/app_modules/_global/notif_global/notifikasi_peringatan"; +import { + AspectRatio, + Box, + Button, + Center, + FileButton, + Image, + Paper, + Stack, + Text, + TextInput, + Title, +} from "@mantine/core"; +import { IconCamera } from "@tabler/icons-react"; +import _ from "lodash"; +import { useRouter } from "next/navigation"; +import { useState } from "react"; +import Map, { + AttributionControl, + Marker, + NavigationControl, + ScaleControl, +} from "react-map-gl"; +import { map_funCreatePin } from "../fun/create/fun_create_pin"; +import { defaultLatLong, defaultMapZoom } from "../lib/default_lat_long"; +import { MODEL_MAP } from "../lib/interface"; +import { RouterMap } from "@/app/lib/router_hipmi/router_map"; +import { map_funEditMap } from "../fun/edit/fun_edit_map"; + +export function UiMap_EditPin({ + mapboxToken, + dataMap, +}: { + mapboxToken: string; + dataMap: MODEL_MAP; +}) { + const [data, setData] = useState(dataMap); + const [file, setFile] = useState(null); + const [img, setImg] = useState(null); + + + return ( + <> + + { + setData({ + ...data, + latitude: a.lngLat.lat, + longitude: a.lngLat.lng, + }); + }} + attributionControl={false} + > + + + image + + + + + + + + + { + setData({ + ...data, + namePin: val.currentTarget.value, + }); + }} + /> + + + + {img ? ( + + + Foto + + + ) : ( + + + Foto + + + )} + +
+ { + try { + const buffer = URL.createObjectURL( + new Blob([new Uint8Array(await files.arrayBuffer())]) + ); + if (files.size > 2000000) { + ComponentGlobal_NotifikasiPeringatan( + "Maaf, Ukuran file terlalu besar, maximum 2mb", + 3000 + ); + } else { + setImg(buffer); + setFile(files); + } + } catch (error) { + console.log(error); + } + }} + accept="image/png,image/jpeg" + > + {(props) => ( + + )} + +
+
+ + +
+ + ); +} + +function ButtonSavePin({ data, file }: { data: MODEL_MAP; file: FormData }) { + const router = useRouter(); + async function onSavePin() { + const gambar = new FormData(); + gambar.append("file", file as any); + + const res = await map_funEditMap({ + data: data, + file: gambar + + }); + res.status === 200 + ? (ComponentGlobal_NotifikasiBerhasil(res.message), router.back()) + : ComponentGlobal_NotifikasiGagal(res.message); + } + + return ( + <> + + + ); +} diff --git a/src/app_modules/map/ui/ui_map.tsx b/src/app_modules/map/ui/ui_map.tsx index 6c0d60f1..095f6122 100644 --- a/src/app_modules/map/ui/ui_map.tsx +++ b/src/app_modules/map/ui/ui_map.tsx @@ -1,21 +1,20 @@ "use client"; -import "mapbox-gl/dist/mapbox-gl.css"; -import { Image, Stack, Text, Tooltip } from "@mantine/core"; +import { Image, Stack, Text } from "@mantine/core"; import { useShallowEffect } from "@mantine/hooks"; -import { useRef, useState } from "react"; +import "mapbox-gl/dist/mapbox-gl.css"; +import { useState } from "react"; import Map, { AttributionControl, - GeolocateControl, Marker, NavigationControl, - Popup, - ScaleControl, + ScaleControl } from "react-map-gl"; +import { ComponentMap_DrawerDetailData } from "../_component"; +import { ComponentMap_DetailData } from "../_component/detail_data"; +import { map_funGetAllMap } from "../fun/get/fun_get_all_map"; import { defaultLatLong, defaultMapZoom } from "../lib/default_lat_long"; import { MODEL_MAP } from "../lib/interface"; -import { ComponentMap_DrawerDetailData } from "../_component"; -import { map_funGetAllMap } from "../fun/get/fun_get_all_map"; export function UiMap_MapBoxView({ mapboxToken, @@ -90,7 +89,7 @@ export function UiMap_MapBoxView({ style={{ borderRadius: "5px", padding: "5px", - width: "auto", + width: 50, }} lineClamp={2} > @@ -111,6 +110,7 @@ export function UiMap_MapBoxView({ opened={openDrawer} close={() => setOpenDrawer(false)} mapId={mapId} + component={} /> ); diff --git a/src/app_modules/map/view/create.tsx b/src/app_modules/map/view/create.tsx index 21ba5642..7912ae91 100644 --- a/src/app_modules/map/view/create.tsx +++ b/src/app_modules/map/view/create.tsx @@ -4,16 +4,25 @@ import { UiMap_CreatePin } from "../ui/ui_create_pin"; import ComponentGlobal_IsEmptyData from "@/app_modules/_global/component/is_empty_data"; const mapboxToken = process.env.MAPBOX_TOKEN!; -export async function Map_CreateNewPin() { +export async function Map_CreateNewPin({ + portofolioId, +}: { + portofolioId: string; +}) { if (!mapboxToken) return ; return ( <> } + header={ + + } > - + ); diff --git a/src/app_modules/map/view/edit.tsx b/src/app_modules/map/view/edit.tsx new file mode 100644 index 00000000..6de5083d --- /dev/null +++ b/src/app_modules/map/view/edit.tsx @@ -0,0 +1,27 @@ +import UIGlobal_LayoutHeaderTamplate from "@/app_modules/_global/ui/ui_header_tamplate"; +import UIGlobal_LayoutTamplate from "@/app_modules/_global/ui/ui_layout_tamplate"; +import { UiMap_CreatePin } from "../ui/ui_create_pin"; +import ComponentGlobal_IsEmptyData from "@/app_modules/_global/component/is_empty_data"; +import { UiMap_EditPin } from "../ui"; + +const mapboxToken = process.env.MAPBOX_TOKEN!; +export async function Map_EditPin({ + portofolioId, + dataMap, +}: { + portofolioId: string; + dataMap: any +}) { + if (!mapboxToken) + return ; + + return ( + <> + } + > + + + + ); +} diff --git a/src/app_modules/map/view/index.ts b/src/app_modules/map/view/index.ts index 0771b827..019ec033 100644 --- a/src/app_modules/map/view/index.ts +++ b/src/app_modules/map/view/index.ts @@ -1,3 +1,4 @@ export { Map_View } from "./main_view"; export { Map_Splash } from "./splash"; export { Map_CreateNewPin } from "./create"; +export { Map_EditPin } from "./edit"; From 296031842477db58527910ddffbf6b69a6711e73 Mon Sep 17 00:00:00 2001 From: Bagasbanuna02 Date: Fri, 16 Aug 2024 11:53:24 +0800 Subject: [PATCH 2/3] tanapa env --- .env | 5 - .gitignore | 3 + src/app/dev/admin/colab/dashboard/loading.tsx | 2 +- src/app/dev/admin/colab/sub-menu/loading.tsx | 2 +- src/app/dev/admin/developer/loading.tsx | 2 +- src/app/dev/admin/donasi/main/loading.tsx | 2 +- src/app/dev/admin/event/main/loading.tsx | 2 +- src/app/dev/admin/forum/main/loading.tsx | 2 +- src/app/dev/admin/investasi/main/loading.tsx | 2 +- src/app/dev/admin/job/main/loading.tsx | 2 +- src/app/dev/admin/main/dashboard/loading.tsx | 2 +- src/app/dev/admin/map/page.tsx | 10 ++ src/app/dev/admin/vote/main/loading.tsx | 2 +- src/app/lib/router_admin/router_admin_map.ts | 3 + .../admin_notifikasi/notifikasi_berhasil.tsx | 0 .../admin_notifikasi/notifikasi_gagal.tsx | 0 .../notifikasi_peringatan.tsx | 0 .../back_button.tsx | 0 .../header_tamplate.tsx | 0 .../is_empty_data.tsx | 0 .../loading_admin_page.tsx | 0 .../logout.tsx | 0 .../tampilan_rupiah.tsx | 0 src/app_modules/admin/app_info/main/index.tsx | 2 +- .../admin/app_info/main/info_bank.tsx | 4 +- .../admin/app_info/main/info_whatsapp.tsx | 4 +- .../admin/colab/dashboard/index.tsx | 2 +- .../admin/colab/sub_menu/group.tsx | 2 +- .../admin/colab/sub_menu/publish.tsx | 2 +- .../admin/colab/sub_menu/reject.tsx | 2 +- src/app_modules/admin/developer/index.tsx | 2 +- .../admin/donasi/detail/detail_reject.tsx | 2 +- .../admin/donasi/detail/detail_review.tsx | 8 +- .../donasi/detail/publish/detail_publish.tsx | 6 +- .../donasi/detail/publish/pencairan_dana.tsx | 8 +- src/app_modules/admin/donasi/main/index.tsx | 2 +- .../donasi/sub-detail/bukti_transfer.tsx | 2 +- .../sub-detail/bukti_transfer_pencairan.tsx | 2 +- .../admin/donasi/sub_menu/table_kategori.tsx | 6 +- .../admin/donasi/sub_menu/table_publish.tsx | 2 +- .../admin/donasi/sub_menu/table_reject.tsx | 2 +- .../admin/donasi/sub_menu/table_review.tsx | 2 +- src/app_modules/admin/event/child/riwayat.tsx | 2 +- .../admin/event/child/tipe_acara.tsx | 2 +- src/app_modules/admin/event/main/index.tsx | 2 +- .../event/table_status/table_publish.tsx | 2 +- .../admin/event/table_status/table_reject.tsx | 2 +- .../admin/event/table_status/table_review.tsx | 2 +- .../admin/forum/detail/detail_posting.tsx | 6 +- .../admin/forum/main/dashboard.tsx | 4 +- .../sub_detail/hasil_report_komentar.tsx | 6 +- .../forum/sub_detail/hasil_report_posting.tsx | 6 +- .../admin/forum/sub_menu/table_posting.tsx | 4 +- .../forum/sub_menu/table_report_komentar.tsx | 4 +- .../forum/sub_menu/table_report_posting.tsx | 4 +- .../admin/investasi/detail/detail_publish.tsx | 2 +- .../admin/investasi/detail/detail_reject.tsx | 2 +- .../admin/investasi/detail/detail_review.tsx | 8 +- .../admin/investasi/main/table_publish.tsx | 4 +- .../admin/investasi/main/table_reject.tsx | 4 +- .../admin/investasi/main/table_review.tsx | 6 +- src/app_modules/admin/investasi/main/view.tsx | 2 +- .../admin/job/child/arsip/index.tsx | 2 +- .../admin/job/child/publish/index.tsx | 2 +- .../admin/job/child/reject/index.tsx | 2 +- .../admin/job/child/review/index.tsx | 2 +- .../admin/job/detail/detail_poster.tsx | 2 +- src/app_modules/admin/job/main/index.tsx | 2 +- src/app_modules/admin/layout.tsx | 2 +- src/app_modules/admin/list_page.tsx | 15 ++- .../admin/map/component/drawer.tsx | 37 ++++++ src/app_modules/admin/map/component/index.ts | 3 + .../admin/map/fun/fun_get_all_maps.ts | 16 +++ src/app_modules/admin/map/fun/index.ts | 3 + src/app_modules/admin/map/ui/index.ts | 3 + src/app_modules/admin/map/ui/ui_map_view.tsx | 117 ++++++++++++++++++ src/app_modules/admin/map/view/index.ts | 3 + src/app_modules/admin/map/view/view.tsx | 19 +++ .../admin/vote/child/riwayat/index.tsx | 2 +- .../admin/vote/child/table_publish/index.tsx | 2 +- .../admin/vote/child/table_reject/index.tsx | 2 +- .../admin/vote/child/table_review/index.tsx | 2 +- src/app_modules/admin/vote/main/index.tsx | 2 +- .../katalog/portofolio/ui/ui_detail_map.tsx | 14 +-- .../map/_component/detail_data.tsx | 22 ++++ src/app_modules/map/ui/ui_create_pin.tsx | 10 +- 86 files changed, 350 insertions(+), 113 deletions(-) delete mode 100644 .env create mode 100644 src/app/dev/admin/map/page.tsx create mode 100644 src/app/lib/router_admin/router_admin_map.ts rename src/app_modules/admin/{component_global => _admin_global}/admin_notifikasi/notifikasi_berhasil.tsx (100%) rename src/app_modules/admin/{component_global => _admin_global}/admin_notifikasi/notifikasi_gagal.tsx (100%) rename src/app_modules/admin/{component_global => _admin_global}/admin_notifikasi/notifikasi_peringatan.tsx (100%) rename src/app_modules/admin/{component_global => _admin_global}/back_button.tsx (100%) rename src/app_modules/admin/{component_global => _admin_global}/header_tamplate.tsx (100%) rename src/app_modules/admin/{component_global => _admin_global}/is_empty_data.tsx (100%) rename src/app_modules/admin/{component_global => _admin_global}/loading_admin_page.tsx (100%) rename src/app_modules/admin/{component_global => _admin_global}/logout.tsx (100%) rename src/app_modules/admin/{component_global => _admin_global}/tampilan_rupiah.tsx (100%) create mode 100644 src/app_modules/admin/map/component/drawer.tsx create mode 100644 src/app_modules/admin/map/component/index.ts create mode 100644 src/app_modules/admin/map/fun/fun_get_all_maps.ts create mode 100644 src/app_modules/admin/map/fun/index.ts create mode 100644 src/app_modules/admin/map/ui/index.ts create mode 100644 src/app_modules/admin/map/ui/ui_map_view.tsx create mode 100644 src/app_modules/admin/map/view/index.ts create mode 100644 src/app_modules/admin/map/view/view.tsx diff --git a/.env b/.env deleted file mode 100644 index 4eb73080..00000000 --- a/.env +++ /dev/null @@ -1,5 +0,0 @@ -DATABASE_URL="postgresql://bip:Production_123@localhost:5433/hipmi?schema=public" -PWD="QWERTYUIOPLKJHGFDSAZXCVBNMQAZWSXEDCRFVTGBYHNUJMIKOLPPOIUYTREWQLKJHGFDSAMNBVCXZlghvftyguhijknhbgvcfytguu8okjnhbgvfty7u8oilkjnhgvtygu7u8ojilnkhbgvhujnkhghvjhukjnhb" -Client_KEY="SB-Mid-client-9NDTxltqdZrEB9m-" -Server_KEY="SB-Mid-server-NyltU-U7fLVQd1nv1LWBKylr" -MAPBOX_TOKEN="pk.eyJ1IjoibWFsaWtrdXJvc2FraSIsImEiOiJjbHppZHh2enYwZnQ3MmlyMWc2Y2RlMzZoIn0.XssvJvq_iniclf8UhvXaIg" diff --git a/.gitignore b/.gitignore index 786b7c83..76fc4102 100644 --- a/.gitignore +++ b/.gitignore @@ -28,6 +28,9 @@ yarn-error.log* # local env files .env*.local +# env +.env + # vercel .vercel diff --git a/src/app/dev/admin/colab/dashboard/loading.tsx b/src/app/dev/admin/colab/dashboard/loading.tsx index dcf03736..8767538e 100644 --- a/src/app/dev/admin/colab/dashboard/loading.tsx +++ b/src/app/dev/admin/colab/dashboard/loading.tsx @@ -1,4 +1,4 @@ -import ComponentAdminGlobal_LoadingPage from "@/app_modules/admin/component_global/loading_admin_page"; +import ComponentAdminGlobal_LoadingPage from "@/app_modules/admin/_admin_global/loading_admin_page"; export default async function Page() { return ( diff --git a/src/app/dev/admin/colab/sub-menu/loading.tsx b/src/app/dev/admin/colab/sub-menu/loading.tsx index dcf03736..8767538e 100644 --- a/src/app/dev/admin/colab/sub-menu/loading.tsx +++ b/src/app/dev/admin/colab/sub-menu/loading.tsx @@ -1,4 +1,4 @@ -import ComponentAdminGlobal_LoadingPage from "@/app_modules/admin/component_global/loading_admin_page"; +import ComponentAdminGlobal_LoadingPage from "@/app_modules/admin/_admin_global/loading_admin_page"; export default async function Page() { return ( diff --git a/src/app/dev/admin/developer/loading.tsx b/src/app/dev/admin/developer/loading.tsx index dcf03736..8767538e 100644 --- a/src/app/dev/admin/developer/loading.tsx +++ b/src/app/dev/admin/developer/loading.tsx @@ -1,4 +1,4 @@ -import ComponentAdminGlobal_LoadingPage from "@/app_modules/admin/component_global/loading_admin_page"; +import ComponentAdminGlobal_LoadingPage from "@/app_modules/admin/_admin_global/loading_admin_page"; export default async function Page() { return ( diff --git a/src/app/dev/admin/donasi/main/loading.tsx b/src/app/dev/admin/donasi/main/loading.tsx index dcf03736..8767538e 100644 --- a/src/app/dev/admin/donasi/main/loading.tsx +++ b/src/app/dev/admin/donasi/main/loading.tsx @@ -1,4 +1,4 @@ -import ComponentAdminGlobal_LoadingPage from "@/app_modules/admin/component_global/loading_admin_page"; +import ComponentAdminGlobal_LoadingPage from "@/app_modules/admin/_admin_global/loading_admin_page"; export default async function Page() { return ( diff --git a/src/app/dev/admin/event/main/loading.tsx b/src/app/dev/admin/event/main/loading.tsx index dcf03736..8767538e 100644 --- a/src/app/dev/admin/event/main/loading.tsx +++ b/src/app/dev/admin/event/main/loading.tsx @@ -1,4 +1,4 @@ -import ComponentAdminGlobal_LoadingPage from "@/app_modules/admin/component_global/loading_admin_page"; +import ComponentAdminGlobal_LoadingPage from "@/app_modules/admin/_admin_global/loading_admin_page"; export default async function Page() { return ( diff --git a/src/app/dev/admin/forum/main/loading.tsx b/src/app/dev/admin/forum/main/loading.tsx index dcf03736..8767538e 100644 --- a/src/app/dev/admin/forum/main/loading.tsx +++ b/src/app/dev/admin/forum/main/loading.tsx @@ -1,4 +1,4 @@ -import ComponentAdminGlobal_LoadingPage from "@/app_modules/admin/component_global/loading_admin_page"; +import ComponentAdminGlobal_LoadingPage from "@/app_modules/admin/_admin_global/loading_admin_page"; export default async function Page() { return ( diff --git a/src/app/dev/admin/investasi/main/loading.tsx b/src/app/dev/admin/investasi/main/loading.tsx index dcf03736..8767538e 100644 --- a/src/app/dev/admin/investasi/main/loading.tsx +++ b/src/app/dev/admin/investasi/main/loading.tsx @@ -1,4 +1,4 @@ -import ComponentAdminGlobal_LoadingPage from "@/app_modules/admin/component_global/loading_admin_page"; +import ComponentAdminGlobal_LoadingPage from "@/app_modules/admin/_admin_global/loading_admin_page"; export default async function Page() { return ( diff --git a/src/app/dev/admin/job/main/loading.tsx b/src/app/dev/admin/job/main/loading.tsx index dcf03736..8767538e 100644 --- a/src/app/dev/admin/job/main/loading.tsx +++ b/src/app/dev/admin/job/main/loading.tsx @@ -1,4 +1,4 @@ -import ComponentAdminGlobal_LoadingPage from "@/app_modules/admin/component_global/loading_admin_page"; +import ComponentAdminGlobal_LoadingPage from "@/app_modules/admin/_admin_global/loading_admin_page"; export default async function Page() { return ( diff --git a/src/app/dev/admin/main/dashboard/loading.tsx b/src/app/dev/admin/main/dashboard/loading.tsx index dcf03736..8767538e 100644 --- a/src/app/dev/admin/main/dashboard/loading.tsx +++ b/src/app/dev/admin/main/dashboard/loading.tsx @@ -1,4 +1,4 @@ -import ComponentAdminGlobal_LoadingPage from "@/app_modules/admin/component_global/loading_admin_page"; +import ComponentAdminGlobal_LoadingPage from "@/app_modules/admin/_admin_global/loading_admin_page"; export default async function Page() { return ( diff --git a/src/app/dev/admin/map/page.tsx b/src/app/dev/admin/map/page.tsx new file mode 100644 index 00000000..efacf8ee --- /dev/null +++ b/src/app/dev/admin/map/page.tsx @@ -0,0 +1,10 @@ +import { AdminMap_View } from "@/app_modules/admin/map/view"; + + +export default async function Page() { + return ( + <> + + + ); +} diff --git a/src/app/dev/admin/vote/main/loading.tsx b/src/app/dev/admin/vote/main/loading.tsx index dcf03736..8767538e 100644 --- a/src/app/dev/admin/vote/main/loading.tsx +++ b/src/app/dev/admin/vote/main/loading.tsx @@ -1,4 +1,4 @@ -import ComponentAdminGlobal_LoadingPage from "@/app_modules/admin/component_global/loading_admin_page"; +import ComponentAdminGlobal_LoadingPage from "@/app_modules/admin/_admin_global/loading_admin_page"; export default async function Page() { return ( diff --git a/src/app/lib/router_admin/router_admin_map.ts b/src/app/lib/router_admin/router_admin_map.ts new file mode 100644 index 00000000..50a09bf2 --- /dev/null +++ b/src/app/lib/router_admin/router_admin_map.ts @@ -0,0 +1,3 @@ +export const RouterAdminMap = { + main: "/dev/admin/map", +}; diff --git a/src/app_modules/admin/component_global/admin_notifikasi/notifikasi_berhasil.tsx b/src/app_modules/admin/_admin_global/admin_notifikasi/notifikasi_berhasil.tsx similarity index 100% rename from src/app_modules/admin/component_global/admin_notifikasi/notifikasi_berhasil.tsx rename to src/app_modules/admin/_admin_global/admin_notifikasi/notifikasi_berhasil.tsx diff --git a/src/app_modules/admin/component_global/admin_notifikasi/notifikasi_gagal.tsx b/src/app_modules/admin/_admin_global/admin_notifikasi/notifikasi_gagal.tsx similarity index 100% rename from src/app_modules/admin/component_global/admin_notifikasi/notifikasi_gagal.tsx rename to src/app_modules/admin/_admin_global/admin_notifikasi/notifikasi_gagal.tsx diff --git a/src/app_modules/admin/component_global/admin_notifikasi/notifikasi_peringatan.tsx b/src/app_modules/admin/_admin_global/admin_notifikasi/notifikasi_peringatan.tsx similarity index 100% rename from src/app_modules/admin/component_global/admin_notifikasi/notifikasi_peringatan.tsx rename to src/app_modules/admin/_admin_global/admin_notifikasi/notifikasi_peringatan.tsx diff --git a/src/app_modules/admin/component_global/back_button.tsx b/src/app_modules/admin/_admin_global/back_button.tsx similarity index 100% rename from src/app_modules/admin/component_global/back_button.tsx rename to src/app_modules/admin/_admin_global/back_button.tsx diff --git a/src/app_modules/admin/component_global/header_tamplate.tsx b/src/app_modules/admin/_admin_global/header_tamplate.tsx similarity index 100% rename from src/app_modules/admin/component_global/header_tamplate.tsx rename to src/app_modules/admin/_admin_global/header_tamplate.tsx diff --git a/src/app_modules/admin/component_global/is_empty_data.tsx b/src/app_modules/admin/_admin_global/is_empty_data.tsx similarity index 100% rename from src/app_modules/admin/component_global/is_empty_data.tsx rename to src/app_modules/admin/_admin_global/is_empty_data.tsx diff --git a/src/app_modules/admin/component_global/loading_admin_page.tsx b/src/app_modules/admin/_admin_global/loading_admin_page.tsx similarity index 100% rename from src/app_modules/admin/component_global/loading_admin_page.tsx rename to src/app_modules/admin/_admin_global/loading_admin_page.tsx diff --git a/src/app_modules/admin/component_global/logout.tsx b/src/app_modules/admin/_admin_global/logout.tsx similarity index 100% rename from src/app_modules/admin/component_global/logout.tsx rename to src/app_modules/admin/_admin_global/logout.tsx diff --git a/src/app_modules/admin/component_global/tampilan_rupiah.tsx b/src/app_modules/admin/_admin_global/tampilan_rupiah.tsx similarity index 100% rename from src/app_modules/admin/component_global/tampilan_rupiah.tsx rename to src/app_modules/admin/_admin_global/tampilan_rupiah.tsx diff --git a/src/app_modules/admin/app_info/main/index.tsx b/src/app_modules/admin/app_info/main/index.tsx index 7494c5c5..e5127d56 100644 --- a/src/app_modules/admin/app_info/main/index.tsx +++ b/src/app_modules/admin/app_info/main/index.tsx @@ -4,7 +4,7 @@ import { Space, Stack } from "@mantine/core"; -import ComponentAdminGlobal_HeaderTamplate from "../../component_global/header_tamplate"; +import ComponentAdminGlobal_HeaderTamplate from "../../_admin_global/header_tamplate"; import InformasiBank from "./info_bank"; import InformasiWhatApps from "./info_whatsapp"; diff --git a/src/app_modules/admin/app_info/main/info_bank.tsx b/src/app_modules/admin/app_info/main/info_bank.tsx index 70d11f08..be6d5e55 100644 --- a/src/app_modules/admin/app_info/main/info_bank.tsx +++ b/src/app_modules/admin/app_info/main/info_bank.tsx @@ -24,8 +24,8 @@ import { } from "@tabler/icons-react"; import _ from "lodash"; import { useState } from "react"; -import { ComponentAdminGlobal_NotifikasiBerhasil } from "../../component_global/admin_notifikasi/notifikasi_berhasil"; -import { ComponentAdminGlobal_NotifikasiGagal } from "../../component_global/admin_notifikasi/notifikasi_gagal"; +import { ComponentAdminGlobal_NotifikasiBerhasil } from "../../_admin_global/admin_notifikasi/notifikasi_berhasil"; +import { ComponentAdminGlobal_NotifikasiGagal } from "../../_admin_global/admin_notifikasi/notifikasi_gagal"; import adminAppInformation_createBank from "../fun/create/fun_create_new_bank"; import adminAppInformation_getMasterBank from "../fun/master/get_list_bank"; import adminAppInformation_updateStatusBankById from "../fun/update/fun_udpate_status_bank"; diff --git a/src/app_modules/admin/app_info/main/info_whatsapp.tsx b/src/app_modules/admin/app_info/main/info_whatsapp.tsx index f181f1be..77773476 100644 --- a/src/app_modules/admin/app_info/main/info_whatsapp.tsx +++ b/src/app_modules/admin/app_info/main/info_whatsapp.tsx @@ -12,8 +12,8 @@ import { } from "@mantine/core"; import { IconEdit, IconPhone } from "@tabler/icons-react"; import { useState } from "react"; -import { ComponentAdminGlobal_NotifikasiBerhasil } from "../../component_global/admin_notifikasi/notifikasi_berhasil"; -import { ComponentAdminGlobal_NotifikasiGagal } from "../../component_global/admin_notifikasi/notifikasi_gagal"; +import { ComponentAdminGlobal_NotifikasiBerhasil } from "../../_admin_global/admin_notifikasi/notifikasi_berhasil"; +import { ComponentAdminGlobal_NotifikasiGagal } from "../../_admin_global/admin_notifikasi/notifikasi_gagal"; import adminAppInformation_getNomorAdmin from "../fun/master/get_nomor_admin"; import adminAppInformation_funUpdateNomorAdmin from "../fun/update/fun_update_nomor"; diff --git a/src/app_modules/admin/colab/dashboard/index.tsx b/src/app_modules/admin/colab/dashboard/index.tsx index 94a96b8d..6f865bdd 100644 --- a/src/app_modules/admin/colab/dashboard/index.tsx +++ b/src/app_modules/admin/colab/dashboard/index.tsx @@ -2,7 +2,7 @@ import { Stack, SimpleGrid, Paper, Group, Title, Text } from "@mantine/core"; import { useRouter } from "next/navigation"; -import ComponentAdminGlobal_HeaderTamplate from "../../component_global/header_tamplate"; +import ComponentAdminGlobal_HeaderTamplate from "../../_admin_global/header_tamplate"; export default function AdminColab_Dashboard({ countPublish, diff --git a/src/app_modules/admin/colab/sub_menu/group.tsx b/src/app_modules/admin/colab/sub_menu/group.tsx index 30bc2c58..08f137fe 100644 --- a/src/app_modules/admin/colab/sub_menu/group.tsx +++ b/src/app_modules/admin/colab/sub_menu/group.tsx @@ -17,7 +17,7 @@ import { SimpleGrid, Box, } from "@mantine/core"; -import ComponentAdminGlobal_HeaderTamplate from "../../component_global/header_tamplate"; +import ComponentAdminGlobal_HeaderTamplate from "../../_admin_global/header_tamplate"; import { MODEL_COLLABORATION, MODEL_COLLABORATION_ROOM_CHAT, diff --git a/src/app_modules/admin/colab/sub_menu/publish.tsx b/src/app_modules/admin/colab/sub_menu/publish.tsx index 3f8cabbd..acdb54fb 100644 --- a/src/app_modules/admin/colab/sub_menu/publish.tsx +++ b/src/app_modules/admin/colab/sub_menu/publish.tsx @@ -18,7 +18,7 @@ import { Textarea, Box, } from "@mantine/core"; -import ComponentAdminGlobal_HeaderTamplate from "../../component_global/header_tamplate"; +import ComponentAdminGlobal_HeaderTamplate from "../../_admin_global/header_tamplate"; import { MODEL_COLLABORATION } from "@/app_modules/colab/model/interface"; import { useState } from "react"; import { useDisclosure, useShallowEffect } from "@mantine/hooks"; diff --git a/src/app_modules/admin/colab/sub_menu/reject.tsx b/src/app_modules/admin/colab/sub_menu/reject.tsx index 180d33bb..f5c51c72 100644 --- a/src/app_modules/admin/colab/sub_menu/reject.tsx +++ b/src/app_modules/admin/colab/sub_menu/reject.tsx @@ -14,7 +14,7 @@ import { Box, Pagination, } from "@mantine/core"; -import ComponentAdminGlobal_HeaderTamplate from "../../component_global/header_tamplate"; +import ComponentAdminGlobal_HeaderTamplate from "../../_admin_global/header_tamplate"; import { useState } from "react"; import { MODEL_COLLABORATION } from "@/app_modules/colab/model/interface"; import adminColab_getListAllRejected from "../fun/get/get_list_all_reject"; diff --git a/src/app_modules/admin/developer/index.tsx b/src/app_modules/admin/developer/index.tsx index d09864a4..eb0bf165 100644 --- a/src/app_modules/admin/developer/index.tsx +++ b/src/app_modules/admin/developer/index.tsx @@ -14,7 +14,7 @@ import { TextInput, Title, } from "@mantine/core"; -import ComponentAdminGlobal_HeaderTamplate from "../component_global/header_tamplate"; +import ComponentAdminGlobal_HeaderTamplate from "../_admin_global/header_tamplate"; import { MODEL_USER } from "@/app_modules/home/model/interface"; import _ from "lodash"; import { IconSearch } from "@tabler/icons-react"; diff --git a/src/app_modules/admin/donasi/detail/detail_reject.tsx b/src/app_modules/admin/donasi/detail/detail_reject.tsx index 64d434a6..78f9fd04 100644 --- a/src/app_modules/admin/donasi/detail/detail_reject.tsx +++ b/src/app_modules/admin/donasi/detail/detail_reject.tsx @@ -25,7 +25,7 @@ import { NotifBerhasil } from "@/app_modules/donasi/component/notifikasi/notif_b import { NotifGagal } from "@/app_modules/donasi/component/notifikasi/notif_gagal"; import { AdminDonasi_getOneById } from "../fun/get/get_one_by_id"; import ComponentGlobal_InputCountDown from "@/app_modules/_global/component/input_countdown"; -import ComponentAdminGlobal_BackButton from "../../component_global/back_button"; +import ComponentAdminGlobal_BackButton from "../../_admin_global/back_button"; import ComponentAdminDonasi_TampilanDetailDonasi from "../component/tampilan_detail_donasi"; import ComponentAdminDonasi_CeritaPenggalangDana from "../component/tampilan_detail_cerita"; diff --git a/src/app_modules/admin/donasi/detail/detail_review.tsx b/src/app_modules/admin/donasi/detail/detail_review.tsx index a24ee397..08680856 100644 --- a/src/app_modules/admin/donasi/detail/detail_review.tsx +++ b/src/app_modules/admin/donasi/detail/detail_review.tsx @@ -25,14 +25,14 @@ import { import { useDisclosure } from "@mantine/hooks"; import { useRouter } from "next/navigation"; import { useState } from "react"; -import { ComponentAdminGlobal_NotifikasiBerhasil } from "../../component_global/admin_notifikasi/notifikasi_berhasil"; -import { ComponentAdminGlobal_NotifikasiGagal } from "../../component_global/admin_notifikasi/notifikasi_gagal"; -import { ComponentAdminGlobal_NotifikasiPeringatan } from "../../component_global/admin_notifikasi/notifikasi_peringatan"; +import { ComponentAdminGlobal_NotifikasiBerhasil } from "../../_admin_global/admin_notifikasi/notifikasi_berhasil"; +import { ComponentAdminGlobal_NotifikasiGagal } from "../../_admin_global/admin_notifikasi/notifikasi_gagal"; +import { ComponentAdminGlobal_NotifikasiPeringatan } from "../../_admin_global/admin_notifikasi/notifikasi_peringatan"; import ComponentAdminDonasi_TombolKembali from "../component/tombol_kembali"; import { AdminDonasi_getOneById } from "../fun/get/get_one_by_id"; import { AdminDonasi_funUpdateStatusPublish } from "../fun/update/fun_status_publish"; import { AdminDonasi_funUpdateStatusReject } from "../fun/update/fun_status_reject"; -import ComponentAdminGlobal_BackButton from "../../component_global/back_button"; +import ComponentAdminGlobal_BackButton from "../../_admin_global/back_button"; import ComponentAdminDonasi_TampilanDetailDonasi from "../component/tampilan_detail_donasi"; import ComponentAdminDonasi_CeritaPenggalangDana from "../component/tampilan_detail_cerita"; import mqtt_client from "@/util/mqtt_client"; diff --git a/src/app_modules/admin/donasi/detail/publish/detail_publish.tsx b/src/app_modules/admin/donasi/detail/publish/detail_publish.tsx index 59f325f7..86c0ad58 100644 --- a/src/app_modules/admin/donasi/detail/publish/detail_publish.tsx +++ b/src/app_modules/admin/donasi/detail/publish/detail_publish.tsx @@ -48,13 +48,13 @@ import { useRouter } from "next/navigation"; import { useDisclosure, useInterval, useShallowEffect } from "@mantine/hooks"; import { Donasi_getOneById } from "@/app_modules/donasi/fun/get/get_one_donasi_by_id"; import { AdminDonasi_getOneById } from "../../fun/get/get_one_by_id"; -import ComponentAdminGlobal_BackButton from "@/app_modules/admin/component_global/back_button"; +import ComponentAdminGlobal_BackButton from "@/app_modules/admin/_admin_global/back_button"; import { MODEL_NEW_DEFAULT_MASTER } from "@/app_modules/model_global/interface"; import { adminDonasi_getListDonatur } from "../../fun/get/get_list_donatur_by_id"; import { RouterAdminDonasi } from "@/app/lib/router_admin/router_admin_donasi"; import adminDonasi_funUpdateStatusDanTotal from "../../fun/update/fun_update_status_dan_total"; -import { ComponentAdminGlobal_NotifikasiBerhasil } from "@/app_modules/admin/component_global/admin_notifikasi/notifikasi_berhasil"; -import { ComponentAdminGlobal_NotifikasiGagal } from "@/app_modules/admin/component_global/admin_notifikasi/notifikasi_gagal"; +import { ComponentAdminGlobal_NotifikasiBerhasil } from "@/app_modules/admin/_admin_global/admin_notifikasi/notifikasi_berhasil"; +import { ComponentAdminGlobal_NotifikasiGagal } from "@/app_modules/admin/_admin_global/admin_notifikasi/notifikasi_gagal"; import mqtt_client from "@/util/mqtt_client"; import adminNotifikasi_funCreateToUser from "@/app_modules/admin/notifikasi/fun/create/fun_create_notif_user"; diff --git a/src/app_modules/admin/donasi/detail/publish/pencairan_dana.tsx b/src/app_modules/admin/donasi/detail/publish/pencairan_dana.tsx index c6ee4611..339fd4dd 100644 --- a/src/app_modules/admin/donasi/detail/publish/pencairan_dana.tsx +++ b/src/app_modules/admin/donasi/detail/publish/pencairan_dana.tsx @@ -1,10 +1,10 @@ "use client"; import ComponentGlobal_ErrorInput from "@/app_modules/_global/component/error_input"; -import { ComponentAdminGlobal_NotifikasiBerhasil } from "@/app_modules/admin/component_global/admin_notifikasi/notifikasi_berhasil"; -import { ComponentAdminGlobal_NotifikasiGagal } from "@/app_modules/admin/component_global/admin_notifikasi/notifikasi_gagal"; -import { ComponentAdminGlobal_NotifikasiPeringatan } from "@/app_modules/admin/component_global/admin_notifikasi/notifikasi_peringatan"; -import ComponentAdminGlobal_TampilanRupiahDonasi from "@/app_modules/admin/component_global/tampilan_rupiah"; +import { ComponentAdminGlobal_NotifikasiBerhasil } from "@/app_modules/admin/_admin_global/admin_notifikasi/notifikasi_berhasil"; +import { ComponentAdminGlobal_NotifikasiGagal } from "@/app_modules/admin/_admin_global/admin_notifikasi/notifikasi_gagal"; +import { ComponentAdminGlobal_NotifikasiPeringatan } from "@/app_modules/admin/_admin_global/admin_notifikasi/notifikasi_peringatan"; +import ComponentAdminGlobal_TampilanRupiahDonasi from "@/app_modules/admin/_admin_global/tampilan_rupiah"; import adminNotifikasi_funCreateToUser from "@/app_modules/admin/notifikasi/fun/create/fun_create_notif_user"; import ComponentDonasi_NotedBox from "@/app_modules/donasi/component/noted_box"; import mqtt_client from "@/util/mqtt_client"; diff --git a/src/app_modules/admin/donasi/main/index.tsx b/src/app_modules/admin/donasi/main/index.tsx index 39a9c8c0..33415ad8 100644 --- a/src/app_modules/admin/donasi/main/index.tsx +++ b/src/app_modules/admin/donasi/main/index.tsx @@ -15,7 +15,7 @@ import { } from "@mantine/core"; import { IconChevronsRight } from "@tabler/icons-react"; import { useRouter } from "next/navigation"; -import ComponentAdminGlobal_HeaderTamplate from "../../component_global/header_tamplate"; +import ComponentAdminGlobal_HeaderTamplate from "../../_admin_global/header_tamplate"; export default function AdminDonasi_Main({ countPublish, diff --git a/src/app_modules/admin/donasi/sub-detail/bukti_transfer.tsx b/src/app_modules/admin/donasi/sub-detail/bukti_transfer.tsx index d4c0585c..20cf92e2 100644 --- a/src/app_modules/admin/donasi/sub-detail/bukti_transfer.tsx +++ b/src/app_modules/admin/donasi/sub-detail/bukti_transfer.tsx @@ -1,7 +1,7 @@ "use client"; import { AspectRatio, Box, Image, Paper, Stack } from "@mantine/core"; -import ComponentAdminGlobal_BackButton from "../../component_global/back_button"; +import ComponentAdminGlobal_BackButton from "../../_admin_global/back_button"; import { RouterAdminDonasi_OLD } from "@/app/lib/router_hipmi/router_admin"; export default function AdminDonasi_BuktiTransfer({ diff --git a/src/app_modules/admin/donasi/sub-detail/bukti_transfer_pencairan.tsx b/src/app_modules/admin/donasi/sub-detail/bukti_transfer_pencairan.tsx index 4fdd2589..1b241fd0 100644 --- a/src/app_modules/admin/donasi/sub-detail/bukti_transfer_pencairan.tsx +++ b/src/app_modules/admin/donasi/sub-detail/bukti_transfer_pencairan.tsx @@ -1,7 +1,7 @@ "use client"; import { AspectRatio, Box, Image, Paper, Stack } from "@mantine/core"; -import ComponentAdminGlobal_BackButton from "../../component_global/back_button"; +import ComponentAdminGlobal_BackButton from "../../_admin_global/back_button"; import { RouterAdminDonasi_OLD } from "@/app/lib/router_hipmi/router_admin"; import { RouterDonasi } from "@/app/lib/router_hipmi/router_donasi"; diff --git a/src/app_modules/admin/donasi/sub_menu/table_kategori.tsx b/src/app_modules/admin/donasi/sub_menu/table_kategori.tsx index a0b2739c..9f1d1f2d 100644 --- a/src/app_modules/admin/donasi/sub_menu/table_kategori.tsx +++ b/src/app_modules/admin/donasi/sub_menu/table_kategori.tsx @@ -18,13 +18,13 @@ import { Switch, Modal, } from "@mantine/core"; -import ComponentAdminGlobal_HeaderTamplate from "../../component_global/header_tamplate"; +import ComponentAdminGlobal_HeaderTamplate from "../../_admin_global/header_tamplate"; import { MODEL_NEW_DEFAULT_MASTER } from "@/app_modules/model_global/interface"; import { useState } from "react"; import { IconCirclePlus, IconEdit, IconTrash } from "@tabler/icons-react"; import adminDonasi_funCreateKategori from "../fun/create/fun_create_kategori"; -import { ComponentAdminGlobal_NotifikasiBerhasil } from "../../component_global/admin_notifikasi/notifikasi_berhasil"; -import { ComponentAdminGlobal_NotifikasiGagal } from "../../component_global/admin_notifikasi/notifikasi_gagal"; +import { ComponentAdminGlobal_NotifikasiBerhasil } from "../../_admin_global/admin_notifikasi/notifikasi_berhasil"; +import { ComponentAdminGlobal_NotifikasiGagal } from "../../_admin_global/admin_notifikasi/notifikasi_gagal"; import adminDonasi_getMasterKategori from "../fun/master/get_list_kategori"; import adminDonasi_funDeleteKategori from "../fun/delete/fun_delete_by_id"; import adminDonasi_funUpdatekategoriById from "../fun/update/fun_update_kategori_by_id"; diff --git a/src/app_modules/admin/donasi/sub_menu/table_publish.tsx b/src/app_modules/admin/donasi/sub_menu/table_publish.tsx index 8e896daf..398791ab 100644 --- a/src/app_modules/admin/donasi/sub_menu/table_publish.tsx +++ b/src/app_modules/admin/donasi/sub_menu/table_publish.tsx @@ -22,7 +22,7 @@ import ComponentAdminDonasi_TombolKembali from "../component/tombol_kembali"; import { MODEL_DONASI } from "@/app_modules/donasi/model/interface"; import { useState } from "react"; import TampilanRupiahDonasi from "@/app_modules/donasi/component/tampilan_rupiah"; -import ComponentAdminGlobal_HeaderTamplate from "../../component_global/header_tamplate"; +import ComponentAdminGlobal_HeaderTamplate from "../../_admin_global/header_tamplate"; import adminDonasi_getListPublish from "../fun/get/get_list_publish"; export default function AdminDonasi_TablePublish({ diff --git a/src/app_modules/admin/donasi/sub_menu/table_reject.tsx b/src/app_modules/admin/donasi/sub_menu/table_reject.tsx index effb2074..2f2ddda0 100644 --- a/src/app_modules/admin/donasi/sub_menu/table_reject.tsx +++ b/src/app_modules/admin/donasi/sub_menu/table_reject.tsx @@ -31,7 +31,7 @@ import AdminDonasi_DetailReview from "../detail/detail_review"; import { MODEL_DONASI } from "@/app_modules/donasi/model/interface"; import { useState } from "react"; import TampilanRupiahDonasi from "@/app_modules/donasi/component/tampilan_rupiah"; -import ComponentAdminGlobal_HeaderTamplate from "../../component_global/header_tamplate"; +import ComponentAdminGlobal_HeaderTamplate from "../../_admin_global/header_tamplate"; import adminDonasi_getListReject from "../fun/get/get_list_reject"; export default function AdminDonasi_TableReject({ diff --git a/src/app_modules/admin/donasi/sub_menu/table_review.tsx b/src/app_modules/admin/donasi/sub_menu/table_review.tsx index b11cf446..06e8d952 100644 --- a/src/app_modules/admin/donasi/sub_menu/table_review.tsx +++ b/src/app_modules/admin/donasi/sub_menu/table_review.tsx @@ -25,7 +25,7 @@ import AdminDonasi_DetailReview from "../detail/detail_review"; import { MODEL_DONASI } from "@/app_modules/donasi/model/interface"; import { useState } from "react"; import TampilanRupiahDonasi from "@/app_modules/donasi/component/tampilan_rupiah"; -import ComponentAdminGlobal_HeaderTamplate from "../../component_global/header_tamplate"; +import ComponentAdminGlobal_HeaderTamplate from "../../_admin_global/header_tamplate"; import _ from "lodash"; import adminDonasi_getListReview from "../fun/get/get_list_review"; diff --git a/src/app_modules/admin/event/child/riwayat.tsx b/src/app_modules/admin/event/child/riwayat.tsx index 33ab6a77..0a3fa315 100644 --- a/src/app_modules/admin/event/child/riwayat.tsx +++ b/src/app_modules/admin/event/child/riwayat.tsx @@ -18,7 +18,7 @@ import { Text, Title, } from "@mantine/core"; -import ComponentAdminGlobal_HeaderTamplate from "../../component_global/header_tamplate"; +import ComponentAdminGlobal_HeaderTamplate from "../../_admin_global/header_tamplate"; import { MODEL_EVENT, MODEL_EVENT_PESERTA, diff --git a/src/app_modules/admin/event/child/tipe_acara.tsx b/src/app_modules/admin/event/child/tipe_acara.tsx index 4dd7fadd..d90f136d 100644 --- a/src/app_modules/admin/event/child/tipe_acara.tsx +++ b/src/app_modules/admin/event/child/tipe_acara.tsx @@ -16,7 +16,7 @@ import { Title, } from "@mantine/core"; import ComponentAdminDonasi_TombolKembali from "../../donasi/component/tombol_kembali"; -import ComponentAdminGlobal_HeaderTamplate from "../../component_global/header_tamplate"; +import ComponentAdminGlobal_HeaderTamplate from "../../_admin_global/header_tamplate"; import { MODEL_DEFAULT_MASTER_OLD } from "@/app_modules/model_global/interface"; import { useState } from "react"; import { AdminEvent_funCreateTipeAcara } from "../fun/create/fun_create_tipe_acara"; diff --git a/src/app_modules/admin/event/main/index.tsx b/src/app_modules/admin/event/main/index.tsx index 1f4cb67e..7259f6b0 100644 --- a/src/app_modules/admin/event/main/index.tsx +++ b/src/app_modules/admin/event/main/index.tsx @@ -11,7 +11,7 @@ import { Title } from "@mantine/core"; import { useRouter } from "next/navigation"; -import ComponentAdminGlobal_HeaderTamplate from "../../component_global/header_tamplate"; +import ComponentAdminGlobal_HeaderTamplate from "../../_admin_global/header_tamplate"; export default function AdminEvent_Main({ countPublish, diff --git a/src/app_modules/admin/event/table_status/table_publish.tsx b/src/app_modules/admin/event/table_status/table_publish.tsx index 80866e6e..fccd6733 100644 --- a/src/app_modules/admin/event/table_status/table_publish.tsx +++ b/src/app_modules/admin/event/table_status/table_publish.tsx @@ -36,7 +36,7 @@ import { MODEL_EVENT, MODEL_EVENT_PESERTA, } from "@/app_modules/event/model/interface"; -import ComponentAdminGlobal_HeaderTamplate from "../../component_global/header_tamplate"; +import ComponentAdminGlobal_HeaderTamplate from "../../_admin_global/header_tamplate"; import moment from "moment"; import _ from "lodash"; import { AdminEvent_funEditStatusPublishById } from "../fun/edit/fun_edit_status_publish_by_id"; diff --git a/src/app_modules/admin/event/table_status/table_reject.tsx b/src/app_modules/admin/event/table_status/table_reject.tsx index ebed2d1d..9cb5c589 100644 --- a/src/app_modules/admin/event/table_status/table_reject.tsx +++ b/src/app_modules/admin/event/table_status/table_reject.tsx @@ -33,7 +33,7 @@ import { useState } from "react"; import TampilanRupiahDonasi from "@/app_modules/donasi/component/tampilan_rupiah"; import ComponentAdminDonasi_TombolKembali from "../../donasi/component/tombol_kembali"; import { MODEL_EVENT } from "@/app_modules/event/model/interface"; -import ComponentAdminGlobal_HeaderTamplate from "../../component_global/header_tamplate"; +import ComponentAdminGlobal_HeaderTamplate from "../../_admin_global/header_tamplate"; import moment from "moment"; import _ from "lodash"; import { AdminEvent_funEditStatusPublishById } from "../fun/edit/fun_edit_status_publish_by_id"; diff --git a/src/app_modules/admin/event/table_status/table_review.tsx b/src/app_modules/admin/event/table_status/table_review.tsx index 19bb5c0f..21123cf4 100644 --- a/src/app_modules/admin/event/table_status/table_review.tsx +++ b/src/app_modules/admin/event/table_status/table_review.tsx @@ -25,7 +25,7 @@ import mqtt_client from "@/util/mqtt_client"; import _ from "lodash"; import moment from "moment"; import { useState } from "react"; -import ComponentAdminGlobal_HeaderTamplate from "../../component_global/header_tamplate"; +import ComponentAdminGlobal_HeaderTamplate from "../../_admin_global/header_tamplate"; import adminNotifikasi_funCreateToUser from "../../notifikasi/fun/create/fun_create_notif_user"; import { AdminEvent_funEditStatusPublishById } from "../fun/edit/fun_edit_status_publish_by_id"; import { AdminEvent_funEditCatatanById } from "../fun/edit/fun_edit_status_reject_by_id"; diff --git a/src/app_modules/admin/forum/detail/detail_posting.tsx b/src/app_modules/admin/forum/detail/detail_posting.tsx index 904b0fb2..b936f8f5 100644 --- a/src/app_modules/admin/forum/detail/detail_posting.tsx +++ b/src/app_modules/admin/forum/detail/detail_posting.tsx @@ -1,7 +1,7 @@ "use client"; import { RouterAdminForum } from "@/app/lib/router_admin/router_admin_forum"; -import ComponentAdminGlobal_HeaderTamplate from "@/app_modules/admin/component_global/header_tamplate"; +import ComponentAdminGlobal_HeaderTamplate from "@/app_modules/admin/_admin_global/header_tamplate"; import ComponentAdminDonasi_TombolKembali from "@/app_modules/admin/donasi/component/tombol_kembali"; import { MODEL_FORUM_KOMENTAR, @@ -34,9 +34,9 @@ import { adminForum_funDeleteKomentarById } from "../fun/delete/fun_delete_komen import { ComponentGlobal_NotifikasiBerhasil } from "@/app_modules/_global/notif_global/notifikasi_berhasil"; import { ComponentGlobal_NotifikasiGagal } from "@/app_modules/_global/notif_global/notifikasi_gagal"; import { useDisclosure } from "@mantine/hooks"; -import ComponentAdminGlobal_IsEmptyData from "../../component_global/is_empty_data"; +import ComponentAdminGlobal_IsEmptyData from "../../_admin_global/is_empty_data"; import { adminForum_getListKomentarById } from "../fun/get/get_list_komentar_by_id"; -import ComponentAdminGlobal_BackButton from "../../component_global/back_button"; +import ComponentAdminGlobal_BackButton from "../../_admin_global/back_button"; import ComponentAdminForum_ViewOneDetailPosting from "../component/detail_one_posting"; export default function AdminForum_DetailPosting({ diff --git a/src/app_modules/admin/forum/main/dashboard.tsx b/src/app_modules/admin/forum/main/dashboard.tsx index 989cadc4..94cb0e43 100644 --- a/src/app_modules/admin/forum/main/dashboard.tsx +++ b/src/app_modules/admin/forum/main/dashboard.tsx @@ -1,8 +1,8 @@ "use client"; import { Group, Paper, SimpleGrid, Stack, Text, Title } from "@mantine/core"; -import ComponentAdminGlobal_HeaderTamplate from "../../component_global/header_tamplate"; -import ComponentAdminGlobal_LoadingPage from "../../component_global/loading_admin_page"; +import ComponentAdminGlobal_HeaderTamplate from "../../_admin_global/header_tamplate"; +import ComponentAdminGlobal_LoadingPage from "../../_admin_global/loading_admin_page"; export default function AdminForum_Main({ countPublish, diff --git a/src/app_modules/admin/forum/sub_detail/hasil_report_komentar.tsx b/src/app_modules/admin/forum/sub_detail/hasil_report_komentar.tsx index bf65a746..d46d99e2 100644 --- a/src/app_modules/admin/forum/sub_detail/hasil_report_komentar.tsx +++ b/src/app_modules/admin/forum/sub_detail/hasil_report_komentar.tsx @@ -1,6 +1,6 @@ "use client"; -import ComponentAdminGlobal_HeaderTamplate from "@/app_modules/admin/component_global/header_tamplate"; +import ComponentAdminGlobal_HeaderTamplate from "@/app_modules/admin/_admin_global/header_tamplate"; import { ComponentGlobal_NotifikasiBerhasil } from "@/app_modules/_global/notif_global/notifikasi_berhasil"; import { ComponentGlobal_NotifikasiGagal } from "@/app_modules/_global/notif_global/notifikasi_gagal"; import { @@ -29,8 +29,8 @@ import { import _ from "lodash"; import { useRouter } from "next/navigation"; import { useState } from "react"; -import ComponentAdminGlobal_BackButton from "../../component_global/back_button"; -import ComponentAdminGlobal_IsEmptyData from "../../component_global/is_empty_data"; +import ComponentAdminGlobal_BackButton from "../../_admin_global/back_button"; +import ComponentAdminGlobal_IsEmptyData from "../../_admin_global/is_empty_data"; import adminNotifikasi_funCreateToUser from "../../notifikasi/fun/create/fun_create_notif_user"; import ComponentAdminForum_ViewOneDetailKomentar from "../component/detail_one_komentar"; import { adminForum_funDeleteKomentarById } from "../fun/delete/fun_delete_komentar_by_id"; diff --git a/src/app_modules/admin/forum/sub_detail/hasil_report_posting.tsx b/src/app_modules/admin/forum/sub_detail/hasil_report_posting.tsx index 8c83187f..497a63d1 100644 --- a/src/app_modules/admin/forum/sub_detail/hasil_report_posting.tsx +++ b/src/app_modules/admin/forum/sub_detail/hasil_report_posting.tsx @@ -1,6 +1,6 @@ "use client"; -import ComponentAdminGlobal_HeaderTamplate from "@/app_modules/admin/component_global/header_tamplate"; +import ComponentAdminGlobal_HeaderTamplate from "@/app_modules/admin/_admin_global/header_tamplate"; import { ComponentGlobal_NotifikasiBerhasil } from "@/app_modules/_global/notif_global/notifikasi_berhasil"; import { ComponentGlobal_NotifikasiGagal } from "@/app_modules/_global/notif_global/notifikasi_gagal"; import { @@ -26,8 +26,8 @@ import { IconTrash } from "@tabler/icons-react"; import _ from "lodash"; import { useRouter } from "next/navigation"; import { useState } from "react"; -import ComponentAdminGlobal_BackButton from "../../component_global/back_button"; -import ComponentAdminGlobal_IsEmptyData from "../../component_global/is_empty_data"; +import ComponentAdminGlobal_BackButton from "../../_admin_global/back_button"; +import ComponentAdminGlobal_IsEmptyData from "../../_admin_global/is_empty_data"; import { adminForum_funDeletePostingById } from "../fun/delete/fun_delete_posting_by_id"; import { adminForum_getListReportPostingById } from "../fun/get/get_list_report_posting_by_id"; import ComponentAdminForum_ViewOneDetailPosting from "../component/detail_one_posting"; diff --git a/src/app_modules/admin/forum/sub_menu/table_posting.tsx b/src/app_modules/admin/forum/sub_menu/table_posting.tsx index 3df67c3c..f69340d2 100644 --- a/src/app_modules/admin/forum/sub_menu/table_posting.tsx +++ b/src/app_modules/admin/forum/sub_menu/table_posting.tsx @@ -2,7 +2,7 @@ import { RouterAdminForum } from "@/app/lib/router_admin/router_admin_forum"; import { RouterForum } from "@/app/lib/router_hipmi/router_forum"; -import ComponentAdminGlobal_HeaderTamplate from "@/app_modules/admin/component_global/header_tamplate"; +import ComponentAdminGlobal_HeaderTamplate from "@/app_modules/admin/_admin_global/header_tamplate"; import { MODEL_FORUM_POSTING } from "@/app_modules/forum/model/interface"; import { Badge, @@ -34,7 +34,7 @@ import { useDisclosure } from "@mantine/hooks"; import { adminForum_getListPosting } from "../fun/get/get_list_publish"; import adminJob_getListPublish from "@/app_modules/admin/job/fun/get/get_list_publish"; import ComponentAdminForum_ButtonDeletePosting from "../component/button_delete"; -import ComponentAdminGlobal_IsEmptyData from "../../component_global/is_empty_data"; +import ComponentAdminGlobal_IsEmptyData from "../../_admin_global/is_empty_data"; export default function AdminForum_TablePosting({ listPublish, diff --git a/src/app_modules/admin/forum/sub_menu/table_report_komentar.tsx b/src/app_modules/admin/forum/sub_menu/table_report_komentar.tsx index acdfde05..6deb3a63 100644 --- a/src/app_modules/admin/forum/sub_menu/table_report_komentar.tsx +++ b/src/app_modules/admin/forum/sub_menu/table_report_komentar.tsx @@ -1,7 +1,7 @@ "use client"; import { RouterAdminForum } from "@/app/lib/router_admin/router_admin_forum"; -import ComponentAdminGlobal_HeaderTamplate from "@/app_modules/admin/component_global/header_tamplate"; +import ComponentAdminGlobal_HeaderTamplate from "@/app_modules/admin/_admin_global/header_tamplate"; import { MODEL_FORUM_REPORT_KOMENTAR, MODEL_FORUM_REPORT_POSTING, @@ -26,7 +26,7 @@ import { IconFlag3, IconSearch } from "@tabler/icons-react"; import { isEmpty } from "lodash"; import { useRouter } from "next/navigation"; import { useState } from "react"; -import ComponentAdminGlobal_IsEmptyData from "../../component_global/is_empty_data"; +import ComponentAdminGlobal_IsEmptyData from "../../_admin_global/is_empty_data"; import ComponentAdminForum_ButtonDeletePosting from "../component/button_delete"; import adminForum_funGetAllReportPosting from "../fun/get/get_all_report_posting"; import { Forum_Komentar } from "@/app_modules/forum"; diff --git a/src/app_modules/admin/forum/sub_menu/table_report_posting.tsx b/src/app_modules/admin/forum/sub_menu/table_report_posting.tsx index 0dac9b93..c85bbf50 100644 --- a/src/app_modules/admin/forum/sub_menu/table_report_posting.tsx +++ b/src/app_modules/admin/forum/sub_menu/table_report_posting.tsx @@ -1,7 +1,7 @@ "use client"; import { RouterAdminForum } from "@/app/lib/router_admin/router_admin_forum"; -import ComponentAdminGlobal_HeaderTamplate from "@/app_modules/admin/component_global/header_tamplate"; +import ComponentAdminGlobal_HeaderTamplate from "@/app_modules/admin/_admin_global/header_tamplate"; import { MODEL_FORUM_REPORT_POSTING } from "@/app_modules/forum/model/interface"; @@ -25,7 +25,7 @@ import { IconFlag3, IconSearch } from "@tabler/icons-react"; import { isEmpty } from "lodash"; import { useRouter } from "next/navigation"; import { useState } from "react"; -import ComponentAdminGlobal_IsEmptyData from "../../component_global/is_empty_data"; +import ComponentAdminGlobal_IsEmptyData from "../../_admin_global/is_empty_data"; import ComponentAdminForum_ButtonDeletePosting from "../component/button_delete"; import adminForum_funGetAllReportPosting from "../fun/get/get_all_report_posting"; diff --git a/src/app_modules/admin/investasi/detail/detail_publish.tsx b/src/app_modules/admin/investasi/detail/detail_publish.tsx index 8bc9c76b..ab7ae43b 100644 --- a/src/app_modules/admin/investasi/detail/detail_publish.tsx +++ b/src/app_modules/admin/investasi/detail/detail_publish.tsx @@ -15,7 +15,7 @@ import { ThemeIcon, Title, } from "@mantine/core"; -import ComponentAdminGlobal_BackButton from "../../component_global/back_button"; +import ComponentAdminGlobal_BackButton from "../../_admin_global/back_button"; import { RouterInvestasi } from "@/app/lib/router_hipmi/router_investasi"; import { IconCircleCheck, IconHome } from "@tabler/icons-react"; import investasi from "../../notifikasi/route_setting/investasi"; diff --git a/src/app_modules/admin/investasi/detail/detail_reject.tsx b/src/app_modules/admin/investasi/detail/detail_reject.tsx index a20e247e..fa3015c6 100644 --- a/src/app_modules/admin/investasi/detail/detail_reject.tsx +++ b/src/app_modules/admin/investasi/detail/detail_reject.tsx @@ -8,7 +8,7 @@ import { Text, Title } from "@mantine/core"; -import ComponentAdminGlobal_BackButton from "../../component_global/back_button"; +import ComponentAdminGlobal_BackButton from "../../_admin_global/back_button"; import { ComponentAdminInvestasi_DetailDataAuthor } from "../_component/detail_data_author"; import { ComponentAdminInvestasi_DetailData } from "../_component/detail_data_investasi"; import { ComponentAdminInvestasi_DetailGambar } from "../_component/detail_gambar_investasi"; diff --git a/src/app_modules/admin/investasi/detail/detail_review.tsx b/src/app_modules/admin/investasi/detail/detail_review.tsx index f6bb3516..3d2dfd26 100644 --- a/src/app_modules/admin/investasi/detail/detail_review.tsx +++ b/src/app_modules/admin/investasi/detail/detail_review.tsx @@ -33,10 +33,10 @@ import Link from "next/link"; import { useRouter } from "next/navigation"; import { useState } from "react"; import "react-simple-toasts/dist/theme/dark.css"; -import { ComponentAdminGlobal_NotifikasiBerhasil } from "../../component_global/admin_notifikasi/notifikasi_berhasil"; -import { ComponentAdminGlobal_NotifikasiGagal } from "../../component_global/admin_notifikasi/notifikasi_gagal"; -import { ComponentAdminGlobal_NotifikasiPeringatan } from "../../component_global/admin_notifikasi/notifikasi_peringatan"; -import ComponentAdminGlobal_BackButton from "../../component_global/back_button"; +import { ComponentAdminGlobal_NotifikasiBerhasil } from "../../_admin_global/admin_notifikasi/notifikasi_berhasil"; +import { ComponentAdminGlobal_NotifikasiGagal } from "../../_admin_global/admin_notifikasi/notifikasi_gagal"; +import { ComponentAdminGlobal_NotifikasiPeringatan } from "../../_admin_global/admin_notifikasi/notifikasi_peringatan"; +import ComponentAdminGlobal_BackButton from "../../_admin_global/back_button"; import adminNotifikasi_funCreateToUser from "../../notifikasi/fun/create/fun_create_notif_user"; import { ComponentAdminInvestasi_DetailDataAuthor } from "../_component/detail_data_author"; import { ComponentAdminInvestasi_DetailData } from "../_component/detail_data_investasi"; diff --git a/src/app_modules/admin/investasi/main/table_publish.tsx b/src/app_modules/admin/investasi/main/table_publish.tsx index 378533c3..e6cb0324 100644 --- a/src/app_modules/admin/investasi/main/table_publish.tsx +++ b/src/app_modules/admin/investasi/main/table_publish.tsx @@ -18,8 +18,8 @@ import { IconSearch } from "@tabler/icons-react"; import _ from "lodash"; import { useRouter } from "next/navigation"; import { useState } from "react"; -import ComponentAdminGlobal_HeaderTamplate from "../../component_global/header_tamplate"; -import ComponentAdminGlobal_IsEmptyData from "../../component_global/is_empty_data"; +import ComponentAdminGlobal_HeaderTamplate from "../../_admin_global/header_tamplate"; +import ComponentAdminGlobal_IsEmptyData from "../../_admin_global/is_empty_data"; import { adminInvestasi_funGetAllPublish } from "../fun/get/get_all_publish"; import { RouterAdminInvestasi } from "@/app/lib/router_admin/router_admin_investasi"; diff --git a/src/app_modules/admin/investasi/main/table_reject.tsx b/src/app_modules/admin/investasi/main/table_reject.tsx index 698ad227..0389ff25 100644 --- a/src/app_modules/admin/investasi/main/table_reject.tsx +++ b/src/app_modules/admin/investasi/main/table_reject.tsx @@ -23,8 +23,8 @@ import { IconChevronLeft, IconEdit, IconSearch } from "@tabler/icons-react"; import _ from "lodash"; import { useRouter } from "next/navigation"; import { useState } from "react"; -import ComponentAdminGlobal_HeaderTamplate from "../../component_global/header_tamplate"; -import ComponentAdminGlobal_IsEmptyData from "../../component_global/is_empty_data"; +import ComponentAdminGlobal_HeaderTamplate from "../../_admin_global/header_tamplate"; +import ComponentAdminGlobal_IsEmptyData from "../../_admin_global/is_empty_data"; import { adminInvestasi_funGetAllReview } from "../fun/get/get_all_review"; import { adminInvestasi_funGetAllReject } from "../fun/get/get_all_reject"; import { RouterAdminInvestasi } from "@/app/lib/router_admin/router_admin_investasi"; diff --git a/src/app_modules/admin/investasi/main/table_review.tsx b/src/app_modules/admin/investasi/main/table_review.tsx index e8287733..bc9aba75 100644 --- a/src/app_modules/admin/investasi/main/table_review.tsx +++ b/src/app_modules/admin/investasi/main/table_review.tsx @@ -23,11 +23,11 @@ import { import { IconChevronLeft, IconEdit, IconSearch } from "@tabler/icons-react"; import { useRouter } from "next/navigation"; import { useState } from "react"; -import ComponentAdminGlobal_HeaderTamplate from "../../component_global/header_tamplate"; +import ComponentAdminGlobal_HeaderTamplate from "../../_admin_global/header_tamplate"; import { adminInvestasi_funGetAllReview } from "../fun/get/get_all_review"; import _ from "lodash"; -import ComponentAdminGlobal_IsEmptyData from "../../component_global/is_empty_data"; -import ComponentAdminGlobal_TampilanRupiahDonasi from "../../component_global/tampilan_rupiah"; +import ComponentAdminGlobal_IsEmptyData from "../../_admin_global/is_empty_data"; +import ComponentAdminGlobal_TampilanRupiahDonasi from "../../_admin_global/tampilan_rupiah"; export default function Admin_TableReviewInvestasi({ dataInvestsi, diff --git a/src/app_modules/admin/investasi/main/view.tsx b/src/app_modules/admin/investasi/main/view.tsx index 6f2fc16b..90301a45 100644 --- a/src/app_modules/admin/investasi/main/view.tsx +++ b/src/app_modules/admin/investasi/main/view.tsx @@ -38,7 +38,7 @@ import moment from "moment"; import _ from "lodash"; import TableTotalInvestasi from "./table_total_investasi"; import TablePublikasiProgresInvestasi from "./table_publikasi_progres"; -import ComponentAdminGlobal_HeaderTamplate from "../../component_global/header_tamplate"; +import ComponentAdminGlobal_HeaderTamplate from "../../_admin_global/header_tamplate"; export default function Admin_Investasi({ listInvestasi, diff --git a/src/app_modules/admin/job/child/arsip/index.tsx b/src/app_modules/admin/job/child/arsip/index.tsx index d09283e0..3f4dd666 100644 --- a/src/app_modules/admin/job/child/arsip/index.tsx +++ b/src/app_modules/admin/job/child/arsip/index.tsx @@ -1,7 +1,7 @@ "use client"; import { RouterProfile } from "@/app/lib/router_hipmi/router_katalog"; -import ComponentAdminGlobal_HeaderTamplate from "@/app_modules/admin/component_global/header_tamplate"; +import ComponentAdminGlobal_HeaderTamplate from "@/app_modules/admin/_admin_global/header_tamplate"; import { AdminEvent_getListPesertaById } from "@/app_modules/admin/event/fun/get/get_list_peserta_by_id"; import { ComponentGlobal_NotifikasiPeringatan } from "@/app_modules/_global/notif_global/notifikasi_peringatan"; import { diff --git a/src/app_modules/admin/job/child/publish/index.tsx b/src/app_modules/admin/job/child/publish/index.tsx index dcd0e6fe..f7bba87f 100644 --- a/src/app_modules/admin/job/child/publish/index.tsx +++ b/src/app_modules/admin/job/child/publish/index.tsx @@ -1,7 +1,7 @@ "use client"; import { RouterAdminJob } from "@/app/lib/router_admin/router_admin_job"; -import ComponentAdminGlobal_HeaderTamplate from "@/app_modules/admin/component_global/header_tamplate"; +import ComponentAdminGlobal_HeaderTamplate from "@/app_modules/admin/_admin_global/header_tamplate"; import { MODEL_JOB } from "@/app_modules/job/model/interface"; import { Badge, diff --git a/src/app_modules/admin/job/child/reject/index.tsx b/src/app_modules/admin/job/child/reject/index.tsx index 9302a734..8299b4e1 100644 --- a/src/app_modules/admin/job/child/reject/index.tsx +++ b/src/app_modules/admin/job/child/reject/index.tsx @@ -1,7 +1,7 @@ "use client"; import { RouterAdminJob } from "@/app/lib/router_admin/router_admin_job"; -import ComponentAdminGlobal_HeaderTamplate from "@/app_modules/admin/component_global/header_tamplate"; +import ComponentAdminGlobal_HeaderTamplate from "@/app_modules/admin/_admin_global/header_tamplate"; import ComponentGlobal_InputCountDown from "@/app_modules/_global/component/input_countdown"; import { ComponentGlobal_NotifikasiBerhasil } from "@/app_modules/_global/notif_global/notifikasi_berhasil"; import { ComponentGlobal_NotifikasiGagal } from "@/app_modules/_global/notif_global/notifikasi_gagal"; diff --git a/src/app_modules/admin/job/child/review/index.tsx b/src/app_modules/admin/job/child/review/index.tsx index 8ba765d3..89b90f5e 100644 --- a/src/app_modules/admin/job/child/review/index.tsx +++ b/src/app_modules/admin/job/child/review/index.tsx @@ -1,7 +1,7 @@ "use client"; import { RouterAdminJob } from "@/app/lib/router_admin/router_admin_job"; -import ComponentAdminGlobal_HeaderTamplate from "@/app_modules/admin/component_global/header_tamplate"; +import ComponentAdminGlobal_HeaderTamplate from "@/app_modules/admin/_admin_global/header_tamplate"; import adminNotifikasi_funCreateToUser from "@/app_modules/admin/notifikasi/fun/create/fun_create_notif_user"; import { ComponentGlobal_NotifikasiBerhasil } from "@/app_modules/_global/notif_global/notifikasi_berhasil"; import { ComponentGlobal_NotifikasiGagal } from "@/app_modules/_global/notif_global/notifikasi_gagal"; diff --git a/src/app_modules/admin/job/detail/detail_poster.tsx b/src/app_modules/admin/job/detail/detail_poster.tsx index 49b9dfa9..4cf40b10 100644 --- a/src/app_modules/admin/job/detail/detail_poster.tsx +++ b/src/app_modules/admin/job/detail/detail_poster.tsx @@ -2,7 +2,7 @@ import { RouterJob } from "@/app/lib/router_hipmi/router_job"; import { Center, Image, Stack } from "@mantine/core"; -import ComponentAdminGlobal_BackButton from "../../component_global/back_button"; +import ComponentAdminGlobal_BackButton from "../../_admin_global/back_button"; export default function AdminJob_DetailPoster({ imageId, diff --git a/src/app_modules/admin/job/main/index.tsx b/src/app_modules/admin/job/main/index.tsx index 3e1c4f77..79a1fd27 100644 --- a/src/app_modules/admin/job/main/index.tsx +++ b/src/app_modules/admin/job/main/index.tsx @@ -1,7 +1,7 @@ "use client"; import { Group, Paper, SimpleGrid, Stack, Text, Title } from "@mantine/core"; -import ComponentAdminGlobal_HeaderTamplate from "../../component_global/header_tamplate"; +import ComponentAdminGlobal_HeaderTamplate from "../../_admin_global/header_tamplate"; import { useRouter } from "next/navigation"; export default function AdminJob_Main({ diff --git a/src/app_modules/admin/layout.tsx b/src/app_modules/admin/layout.tsx index 134eca14..56e95175 100644 --- a/src/app_modules/admin/layout.tsx +++ b/src/app_modules/admin/layout.tsx @@ -39,7 +39,7 @@ import { useRouter } from "next/navigation"; import React, { useEffect, useState } from "react"; import { MODEL_USER } from "../home/model/interface"; import { MODEL_NOTIFIKASI } from "../notifikasi/model/interface"; -import Admin_Logout from "./component_global/logout"; +import Admin_Logout from "./_admin_global/logout"; import { gs_admin_hotMenu, gs_admin_subMenu, diff --git a/src/app_modules/admin/list_page.tsx b/src/app_modules/admin/list_page.tsx index 8fdd5160..7f549961 100644 --- a/src/app_modules/admin/list_page.tsx +++ b/src/app_modules/admin/list_page.tsx @@ -5,12 +5,11 @@ import { RouterAdminEvent } from "@/app/lib/router_admin/router_admin_event"; import { RouterAdminForum } from "@/app/lib/router_admin/router_admin_forum"; import { RouterAdminInvestasi } from "@/app/lib/router_admin/router_admin_investasi"; import { RouterAdminJob } from "@/app/lib/router_admin/router_admin_job"; +import { RouterAdminMap } from "@/app/lib/router_admin/router_admin_map"; import { RouterAdminVote } from "@/app/lib/router_admin/router_admin_vote"; import { RouterAdminUserAccess } from "@/app/lib/router_admin/router_admn_user_acces"; import { RouterAdminAppInformation } from "@/app/lib/router_admin/router_app_information"; -import { - RouterAdminDashboard -} from "@/app/lib/router_hipmi/router_admin"; +import { RouterAdminDashboard } from "@/app/lib/router_hipmi/router_admin"; import { IconAffiliate, IconBriefcase, @@ -18,6 +17,7 @@ import { IconDeviceMobile, IconHeartHandshake, IconHome, + IconMap2, IconMessages, IconMoneybag, IconPackageImport, @@ -270,6 +270,15 @@ export const listAdminPage = [ ], }, + { + id: 9, + name: "Maps", + path: RouterAdminMap.main, + icon: , + child: [], + }, + + // App Information { id: 97, name: "App Information", diff --git a/src/app_modules/admin/map/component/drawer.tsx b/src/app_modules/admin/map/component/drawer.tsx new file mode 100644 index 00000000..6bebfd1e --- /dev/null +++ b/src/app_modules/admin/map/component/drawer.tsx @@ -0,0 +1,37 @@ +"use client"; + +import { Drawer, Group, Text } from "@mantine/core"; +import { ComponentAdmin_UIDrawerNotifikasi } from "../../notifikasi/ui_drawer_notifikasi"; +import { MODEL_MAP } from "@/app_modules/map/lib/interface"; + +export function ComponentAdminMap_Drawer({ + opened, + onClose, + data, +}: { + opened: boolean; + onClose: () => void; + data: MODEL_MAP | any; +}) { + return ( + <> + + + Detail Map + +
+ } + opened={opened} + onClose={onClose} + position="right" + size={"xs"} + transitionProps={{transition: "fade", duration: 500}} + > + Detail Map + {data} + + + ); +} diff --git a/src/app_modules/admin/map/component/index.ts b/src/app_modules/admin/map/component/index.ts new file mode 100644 index 00000000..9831e325 --- /dev/null +++ b/src/app_modules/admin/map/component/index.ts @@ -0,0 +1,3 @@ +import { ComponentAdminMap_Drawer } from "./drawer"; + +export { ComponentAdminMap_Drawer }; diff --git a/src/app_modules/admin/map/fun/fun_get_all_maps.ts b/src/app_modules/admin/map/fun/fun_get_all_maps.ts new file mode 100644 index 00000000..2f26be0f --- /dev/null +++ b/src/app_modules/admin/map/fun/fun_get_all_maps.ts @@ -0,0 +1,16 @@ +"use server"; + +import prisma from "@/app/lib/prisma"; + +export async function adminMap_funGetAllMaps() { + const data = await prisma.businessMaps.findMany({ + orderBy: { + createdAt: "desc", + }, + where: { + isActive: true, + }, + }); + + return data; +} diff --git a/src/app_modules/admin/map/fun/index.ts b/src/app_modules/admin/map/fun/index.ts new file mode 100644 index 00000000..04f30b48 --- /dev/null +++ b/src/app_modules/admin/map/fun/index.ts @@ -0,0 +1,3 @@ +import { adminMap_funGetAllMaps } from "./fun_get_all_maps"; + +export { adminMap_funGetAllMaps }; diff --git a/src/app_modules/admin/map/ui/index.ts b/src/app_modules/admin/map/ui/index.ts new file mode 100644 index 00000000..710039e2 --- /dev/null +++ b/src/app_modules/admin/map/ui/index.ts @@ -0,0 +1,3 @@ +import { UiAdminMap_MapBoxView } from "./ui_map_view"; + +export { UiAdminMap_MapBoxView }; diff --git a/src/app_modules/admin/map/ui/ui_map_view.tsx b/src/app_modules/admin/map/ui/ui_map_view.tsx new file mode 100644 index 00000000..68bdbee9 --- /dev/null +++ b/src/app_modules/admin/map/ui/ui_map_view.tsx @@ -0,0 +1,117 @@ +"use client"; + +import { MODEL_MAP } from "@/app_modules/map/lib/interface"; +import ComponentAdminGlobal_IsEmptyData from "../../_admin_global/is_empty_data"; +import { useState } from "react"; +import { + defaultLatLong, + defaultMapZoom, +} from "@/app_modules/map/lib/default_lat_long"; +import { Image, Paper, Stack, Text } from "@mantine/core"; +import "mapbox-gl/dist/mapbox-gl.css"; +import Map, { + AttributionControl, + Marker, + NavigationControl, + ScaleControl, +} from "react-map-gl"; +import { ComponentAdminMap_Drawer } from "../component"; + +export function UiAdminMap_MapBoxView({ + mapboxToken, + dataMap, +}: { + mapboxToken: string; + dataMap: MODEL_MAP[]; +}) { + const [mapId, setMapId] = useState(""); + const [openDrawer, setOpenDrawer] = useState(false); + const [data, setData] = useState(dataMap); + + if (!mapboxToken) + return ; + + return ( + <> + + + {data.map((e, i) => ( + + + { + setMapId(e.id); + setOpenDrawer(true); + }} + > + image + + {e.namePin} + + + + + ))} + + + + + + + + setOpenDrawer(false)} + data={mapId as any} + /> + + ); +} diff --git a/src/app_modules/admin/map/view/index.ts b/src/app_modules/admin/map/view/index.ts new file mode 100644 index 00000000..857572ae --- /dev/null +++ b/src/app_modules/admin/map/view/index.ts @@ -0,0 +1,3 @@ +import { AdminMap_View } from "./view"; + +export { AdminMap_View } \ No newline at end of file diff --git a/src/app_modules/admin/map/view/view.tsx b/src/app_modules/admin/map/view/view.tsx new file mode 100644 index 00000000..79d8dec9 --- /dev/null +++ b/src/app_modules/admin/map/view/view.tsx @@ -0,0 +1,19 @@ +import ComponentAdminGlobal_HeaderTamplate from "../../_admin_global/header_tamplate"; +import { adminMap_funGetAllMaps } from "../fun/fun_get_all_maps"; +import { UiAdminMap_MapBoxView } from "../ui"; + + +const mapboxToken = process.env.MAPBOX_TOKEN!; +export async function AdminMap_View() { + const dataMap = await adminMap_funGetAllMaps(); + return ( + <> + + + + + ); +} diff --git a/src/app_modules/admin/vote/child/riwayat/index.tsx b/src/app_modules/admin/vote/child/riwayat/index.tsx index 84d76f3b..e28e4cdd 100644 --- a/src/app_modules/admin/vote/child/riwayat/index.tsx +++ b/src/app_modules/admin/vote/child/riwayat/index.tsx @@ -1,7 +1,7 @@ "use client"; import { RouterProfile } from "@/app/lib/router_hipmi/router_katalog"; -import ComponentAdminGlobal_HeaderTamplate from "@/app_modules/admin/component_global/header_tamplate"; +import ComponentAdminGlobal_HeaderTamplate from "@/app_modules/admin/_admin_global/header_tamplate"; import { AdminEvent_getListPesertaById } from "@/app_modules/admin/event/fun/get/get_list_peserta_by_id"; import { ComponentGlobal_NotifikasiPeringatan } from "@/app_modules/_global/notif_global/notifikasi_peringatan"; import { MODEL_VOTING } from "@/app_modules/vote/model/interface"; diff --git a/src/app_modules/admin/vote/child/table_publish/index.tsx b/src/app_modules/admin/vote/child/table_publish/index.tsx index de6d2c9f..1b814369 100644 --- a/src/app_modules/admin/vote/child/table_publish/index.tsx +++ b/src/app_modules/admin/vote/child/table_publish/index.tsx @@ -1,7 +1,7 @@ "use client"; import { RouterProfile } from "@/app/lib/router_hipmi/router_katalog"; -import ComponentAdminGlobal_HeaderTamplate from "@/app_modules/admin/component_global/header_tamplate"; +import ComponentAdminGlobal_HeaderTamplate from "@/app_modules/admin/_admin_global/header_tamplate"; import { AdminEvent_getListPesertaById } from "@/app_modules/admin/event/fun/get/get_list_peserta_by_id"; import { ComponentGlobal_NotifikasiPeringatan } from "@/app_modules/_global/notif_global/notifikasi_peringatan"; import { diff --git a/src/app_modules/admin/vote/child/table_reject/index.tsx b/src/app_modules/admin/vote/child/table_reject/index.tsx index e396446b..bc92e452 100644 --- a/src/app_modules/admin/vote/child/table_reject/index.tsx +++ b/src/app_modules/admin/vote/child/table_reject/index.tsx @@ -1,7 +1,7 @@ "use client"; import { RouterProfile } from "@/app/lib/router_hipmi/router_katalog"; -import ComponentAdminGlobal_HeaderTamplate from "@/app_modules/admin/component_global/header_tamplate"; +import ComponentAdminGlobal_HeaderTamplate from "@/app_modules/admin/_admin_global/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 { diff --git a/src/app_modules/admin/vote/child/table_review/index.tsx b/src/app_modules/admin/vote/child/table_review/index.tsx index f14023a2..587e4ae1 100644 --- a/src/app_modules/admin/vote/child/table_review/index.tsx +++ b/src/app_modules/admin/vote/child/table_review/index.tsx @@ -1,6 +1,6 @@ "use client"; -import ComponentAdminGlobal_HeaderTamplate from "@/app_modules/admin/component_global/header_tamplate"; +import ComponentAdminGlobal_HeaderTamplate from "@/app_modules/admin/_admin_global/header_tamplate"; import { MODEL_VOTING } from "@/app_modules/vote/model/interface"; import { Box, diff --git a/src/app_modules/admin/vote/main/index.tsx b/src/app_modules/admin/vote/main/index.tsx index ba29d2e5..883ad486 100644 --- a/src/app_modules/admin/vote/main/index.tsx +++ b/src/app_modules/admin/vote/main/index.tsx @@ -2,7 +2,7 @@ import { Stack, SimpleGrid, Paper, Group, Title, Text } from "@mantine/core"; import { useRouter } from "next/navigation"; -import ComponentAdminGlobal_HeaderTamplate from "../../component_global/header_tamplate"; +import ComponentAdminGlobal_HeaderTamplate from "../../_admin_global/header_tamplate"; export default function AdminVote_Main({ countPublish, diff --git a/src/app_modules/katalog/portofolio/ui/ui_detail_map.tsx b/src/app_modules/katalog/portofolio/ui/ui_detail_map.tsx index 5c35ad56..4cc9d467 100644 --- a/src/app_modules/katalog/portofolio/ui/ui_detail_map.tsx +++ b/src/app_modules/katalog/portofolio/ui/ui_detail_map.tsx @@ -1,12 +1,14 @@ "use client"; import { AccentColor } from "@/app_modules/_global/color/color_pallet"; +import { ComponentMap_DrawerDetailData } from "@/app_modules/map/_component"; import { - defaultLatLong, - defaultMapZoom, + defaultMapZoom } from "@/app_modules/map/lib/default_lat_long"; import { MODEL_MAP } from "@/app_modules/map/lib/interface"; -import { Group, Image, Paper, Stack, Text, Title } from "@mantine/core"; +import { Image, Paper, Stack, Text, Title } from "@mantine/core"; +import "mapbox-gl/dist/mapbox-gl.css"; +import { useState } from "react"; import { AttributionControl, Map, @@ -14,10 +16,6 @@ import { NavigationControl, ScaleControl, } from "react-map-gl"; -import "mapbox-gl/dist/mapbox-gl.css"; -import { useState } from "react"; -import { ComponentMap_DrawerDetailData } from "@/app_modules/map/_component"; -import { ComponentMap_DetailData } from "@/app_modules/map/_component/detail_data"; import { ComponentPortofolio_DetailDataMap } from "../component"; export function Portofolio_UiMap({ @@ -72,7 +70,7 @@ function MapView({ cursor: "pointer", width: "100%", height: "50vh", - borderRadius: "5px", + borderRadius: "10px", }} attributionControl={false} diff --git a/src/app_modules/map/_component/detail_data.tsx b/src/app_modules/map/_component/detail_data.tsx index 415f6347..043e88e6 100644 --- a/src/app_modules/map/_component/detail_data.tsx +++ b/src/app_modules/map/_component/detail_data.tsx @@ -5,10 +5,13 @@ import ComponentGlobal_AuthorNameOnHeader from "@/app_modules/_global/author_nam import { Box, Button, + Flex, Grid, Group, Image, + Loader, SimpleGrid, + Skeleton, Stack, Text, Title, @@ -40,6 +43,8 @@ export function ComponentMap_DetailData({ mapId }: { mapId: any }) { setData(res); } + if (!data) return ; + return ( <> @@ -135,3 +140,20 @@ export function ComponentMap_DetailData({ mapId }: { mapId: any }) { ); } + +function CustomLoading() { + return ( + + + + + + + + + + + + + ); +} diff --git a/src/app_modules/map/ui/ui_create_pin.tsx b/src/app_modules/map/ui/ui_create_pin.tsx index 1a4b280e..be6de6d3 100644 --- a/src/app_modules/map/ui/ui_create_pin.tsx +++ b/src/app_modules/map/ui/ui_create_pin.tsx @@ -6,22 +6,21 @@ import { } from "@/app_modules/_global/color/color_pallet"; import { ComponentGlobal_NotifikasiBerhasil } from "@/app_modules/_global/notif_global/notifikasi_berhasil"; import { ComponentGlobal_NotifikasiGagal } from "@/app_modules/_global/notif_global/notifikasi_gagal"; +import { ComponentGlobal_NotifikasiPeringatan } from "@/app_modules/_global/notif_global/notifikasi_peringatan"; import { - ActionIcon, - Affix, AspectRatio, Box, Button, Center, FileButton, - Group, Image, Paper, Stack, Text, TextInput, - Title, + Title } from "@mantine/core"; +import { IconCamera } from "@tabler/icons-react"; import _ from "lodash"; import { useRouter } from "next/navigation"; import { useState } from "react"; @@ -33,9 +32,6 @@ import Map, { } from "react-map-gl"; import { map_funCreatePin } from "../fun/create/fun_create_pin"; import { defaultLatLong, defaultMapZoom } from "../lib/default_lat_long"; -import ComponentGlobal_BoxInformation from "@/app_modules/_global/component/box_information"; -import { ComponentGlobal_NotifikasiPeringatan } from "@/app_modules/_global/notif_global/notifikasi_peringatan"; -import { IconCamera, IconX } from "@tabler/icons-react"; export function UiMap_CreatePin({ mapboxToken, From 7deb69513a73e8121d0455966a61f5c32026b61e Mon Sep 17 00:00:00 2001 From: Bagasbanuna02 Date: Fri, 16 Aug 2024 11:55:44 +0800 Subject: [PATCH 3/3] .env --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 76fc4102..8fbb7710 100644 --- a/.gitignore +++ b/.gitignore @@ -28,7 +28,7 @@ yarn-error.log* # local env files .env*.local -# env +# env here .env # vercel