From ed98d2e1a67e645b8c3c6159c5cad1bbbce4a114 Mon Sep 17 00:00:00 2001 From: Liam Arbuckle Date: Fri, 23 Dec 2022 01:32:25 +1100 Subject: [PATCH] =?UTF-8?q?=F0=9F=8E=A8=F0=9F=A4=AD=C2=A0=E2=86=A3=20Failu?= =?UTF-8?q?re=20to=20implement=20system-wide=20context=20from=20Vite=20pac?= =?UTF-8?q?kage=20migration?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit https://github.com/signal-k/polygon/issues/25 --- .DS_Store | Bin 10244 -> 10244 bytes client/client/pages/_app.jsx | 3 +- client/client/pages/index.js | 6 +- client/client/pages/proposals/Home.jsx | 32 ++++++ .../proposals/assets/create-campaign.svg | 10 ++ .../pages/proposals/assets/dashboard.svg | 6 ++ client/client/pages/proposals/assets/index.js | 31 ++++++ .../client/pages/proposals/assets/loader.svg | 51 +++++++++ client/client/pages/proposals/assets/logo.svg | 14 +++ .../client/pages/proposals/assets/logout.svg | 4 + client/client/pages/proposals/assets/menu.svg | 3 + .../client/pages/proposals/assets/money.svg | 7 ++ .../client/pages/proposals/assets/payment.svg | 3 + .../client/pages/proposals/assets/profile.svg | 5 + .../client/pages/proposals/assets/search.svg | 10 ++ client/client/pages/proposals/assets/sun.svg | 3 + .../pages/proposals/assets/thirdweb.png | Bin 0 -> 65176 bytes client/client/pages/proposals/assets/type.svg | 3 + .../pages/proposals/assets/withdraw.svg | 12 +++ .../proposals/components/DisplayProposals.jsx | 38 +++++++ .../pages/proposals/components/Sidebar.jsx | 50 +++++++++ .../client/pages/proposals/constants/index.js | 37 +++++++ .../client/pages/proposals/context/index.jsx | 97 ++++++++++++++++++ client/client/pages/proposals/index.js | 4 - client/client/pages/proposals/utils/index.js | 22 ++++ client/client/postcss.config.js | 7 ++ client/client/tailwind.config.js | 18 ++++ client/src/components/Content/Navbar.js | 9 ++ client/src/components/Content/README.md | 1 + client/src/components/DisplayProposals.jsx | 53 +++++----- client/src/context/index.jsx | 23 +++++ client/src/pages/ProposalDetails.jsx | 45 +++++++- tsconfig.json | 3 +- 33 files changed, 575 insertions(+), 35 deletions(-) create mode 100644 client/client/pages/proposals/Home.jsx create mode 100644 client/client/pages/proposals/assets/create-campaign.svg create mode 100644 client/client/pages/proposals/assets/dashboard.svg create mode 100644 client/client/pages/proposals/assets/index.js create mode 100644 client/client/pages/proposals/assets/loader.svg create mode 100644 client/client/pages/proposals/assets/logo.svg create mode 100644 client/client/pages/proposals/assets/logout.svg create mode 100644 client/client/pages/proposals/assets/menu.svg create mode 100644 client/client/pages/proposals/assets/money.svg create mode 100644 client/client/pages/proposals/assets/payment.svg create mode 100644 client/client/pages/proposals/assets/profile.svg create mode 100644 client/client/pages/proposals/assets/search.svg create mode 100644 client/client/pages/proposals/assets/sun.svg create mode 100644 client/client/pages/proposals/assets/thirdweb.png create mode 100644 client/client/pages/proposals/assets/type.svg create mode 100644 client/client/pages/proposals/assets/withdraw.svg create mode 100644 client/client/pages/proposals/components/DisplayProposals.jsx create mode 100644 client/client/pages/proposals/components/Sidebar.jsx create mode 100644 client/client/pages/proposals/constants/index.js create mode 100644 client/client/pages/proposals/context/index.jsx delete mode 100644 client/client/pages/proposals/index.js create mode 100644 client/client/pages/proposals/utils/index.js create mode 100644 client/client/postcss.config.js create mode 100644 client/client/tailwind.config.js create mode 100644 client/src/components/Content/Navbar.js create mode 100644 client/src/components/Content/README.md diff --git a/.DS_Store b/.DS_Store index 8ef6025ed4feb4446a5a47c839b7b43154692d69..803fc4ad32221e32ee0efb1372884689cb66d49d 100644 GIT binary patch delta 42 ycmZn(XbG6$&uFwUU^hRb(Pkb2Wv0os!n~W~gje!xY*1p{%&zc@WwWvvGcy1tXbjW< delta 134 zcmZn(XbG6$&uF?aU^hRb>1G}QWhQ=h21kY>hGd2ehD?SshSbT1;= diff --git a/client/client/pages/index.js b/client/client/pages/index.js index f2365a14..dc4b6403 100644 --- a/client/client/pages/index.js +++ b/client/client/pages/index.js @@ -1,6 +1,6 @@ -import Head from 'next/head'; -import Image from 'next/image'; -import styles from '../styles/Home.module.css'; +import Head from 'next/head' +import Image from 'next/image' +import styles from '../styles/Home.module.css' export default function Home() { return ( diff --git a/client/client/pages/proposals/Home.jsx b/client/client/pages/proposals/Home.jsx new file mode 100644 index 00000000..12c9a283 --- /dev/null +++ b/client/client/pages/proposals/Home.jsx @@ -0,0 +1,32 @@ +/*export { default as Home } from './Home'; +export { default as Profile } from './Profile'; +export { default as CreateProposal } from './CreateProposal'; +export { default as ProposalDetails } from './ProposalDetails';*/ + +import React, { useState, useEffect } from "react"; +import { useStateContext } from './context'; +//import { DisplayProposals } from './components'; + +const Home = () => { + const [isLoading, setIsLoading] = useState(false); + const [proposals, setProposals] = useState([]); // Empty array, retrieved from the state context from onchain + + const { address, contract, getProposals } = useStateContext(); /* + const fetchProposals = async () => { // This is to allow us to call this g.request in the useEffect (as the request is async in /context) + setIsLoading(true); + const data = await getProposals(); + setProposals(data); + setIsLoading(false); + } + + useEffect(() => { + if (contract) fetchProposals(); + console.log(proposals); + }, [address, contract]); // Re-called when these change*/ + + return ( +
Hello World
+ ) +} + +export default Home; \ No newline at end of file diff --git a/client/client/pages/proposals/assets/create-campaign.svg b/client/client/pages/proposals/assets/create-campaign.svg new file mode 100644 index 00000000..d9c67303 --- /dev/null +++ b/client/client/pages/proposals/assets/create-campaign.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/client/client/pages/proposals/assets/dashboard.svg b/client/client/pages/proposals/assets/dashboard.svg new file mode 100644 index 00000000..b9ecf4cf --- /dev/null +++ b/client/client/pages/proposals/assets/dashboard.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/client/client/pages/proposals/assets/index.js b/client/client/pages/proposals/assets/index.js new file mode 100644 index 00000000..49dff30b --- /dev/null +++ b/client/client/pages/proposals/assets/index.js @@ -0,0 +1,31 @@ +import createCampaign from './create-campaign.svg'; +import dashboard from './dashboard.svg'; +import logo from './logo.svg'; +import logout from './logout.svg'; +import payment from './payment.svg'; +import profile from './profile.svg'; +import sun from './sun.svg'; +import withdraw from './withdraw.svg'; +import tagType from './type.svg'; +import search from './search.svg'; +import menu from './menu.svg'; +import money from './money.svg'; +import loader from './loader.svg'; +import thirdweb from './thirdweb.png'; + +export { + tagType, + createCampaign, + dashboard, + logo, + logout, + payment, + profile, + sun, + withdraw, + search, + menu, + money, + loader, + thirdweb, +}; diff --git a/client/client/pages/proposals/assets/loader.svg b/client/client/pages/proposals/assets/loader.svg new file mode 100644 index 00000000..476b2dd4 --- /dev/null +++ b/client/client/pages/proposals/assets/loader.svg @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/client/client/pages/proposals/assets/logo.svg b/client/client/pages/proposals/assets/logo.svg new file mode 100644 index 00000000..ad1ca4ba --- /dev/null +++ b/client/client/pages/proposals/assets/logo.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/client/client/pages/proposals/assets/logout.svg b/client/client/pages/proposals/assets/logout.svg new file mode 100644 index 00000000..188cf3b3 --- /dev/null +++ b/client/client/pages/proposals/assets/logout.svg @@ -0,0 +1,4 @@ + + + + diff --git a/client/client/pages/proposals/assets/menu.svg b/client/client/pages/proposals/assets/menu.svg new file mode 100644 index 00000000..4685dfbc --- /dev/null +++ b/client/client/pages/proposals/assets/menu.svg @@ -0,0 +1,3 @@ + + + diff --git a/client/client/pages/proposals/assets/money.svg b/client/client/pages/proposals/assets/money.svg new file mode 100644 index 00000000..8bf7f8e5 --- /dev/null +++ b/client/client/pages/proposals/assets/money.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/client/client/pages/proposals/assets/payment.svg b/client/client/pages/proposals/assets/payment.svg new file mode 100644 index 00000000..b0623289 --- /dev/null +++ b/client/client/pages/proposals/assets/payment.svg @@ -0,0 +1,3 @@ + + + diff --git a/client/client/pages/proposals/assets/profile.svg b/client/client/pages/proposals/assets/profile.svg new file mode 100644 index 00000000..0558003e --- /dev/null +++ b/client/client/pages/proposals/assets/profile.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/client/client/pages/proposals/assets/search.svg b/client/client/pages/proposals/assets/search.svg new file mode 100644 index 00000000..7155623f --- /dev/null +++ b/client/client/pages/proposals/assets/search.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/client/client/pages/proposals/assets/sun.svg b/client/client/pages/proposals/assets/sun.svg new file mode 100644 index 00000000..89ed57d6 --- /dev/null +++ b/client/client/pages/proposals/assets/sun.svg @@ -0,0 +1,3 @@ + + + diff --git a/client/client/pages/proposals/assets/thirdweb.png b/client/client/pages/proposals/assets/thirdweb.png new file mode 100644 index 0000000000000000000000000000000000000000..2c64711fdf1ac1daa410b9b21cfd2bbeb8babb75 GIT binary patch literal 65176 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
VylQ)hpJKhGDV2**w z;`8iA^?ee#nd9-?|kwS4fu{^8q&&q-EO82p@4bNg3!~}`PDBASbxBtxz zZS3^-i12wikd#nL@873k3tQW@DB?p%JT_yy)>yj5r&)0vd2V&E1XVc4O-2875H6Wu z0e9}0e=uOp3{<=f!p#5C3WUKOFy8qnx%aR~Vi5aB^# zJ2D+cda}Gwa&`Y#6)X1sHmj-0#^d;r%R*wfOB zKFj^hfC8Nd&>5Qgz8S;Z5SD1Lhb^Ah6)L5TAaAflLc<|F%f`O{Y(qnRxe1SKC#bb} zDuRBrm%`_@K8M~1_u>9!U9tP*mFHJ$Ffory1pw$Qd3*^xe3ZpJ*A7SM3gQ!mA!@6! z`gKSRS5AIC`gx37lif*4VV+kH4ZVmh6ieIJBDQCtOMH<^ZO&EIyq;YO#u+m-za}_; z=|rJ)9a>E@R45AcUu;^>DGm^*wKxa5cu-$=%Y3TX|h?Z7&-~>dvL3{;Z7T z_S2)M6$q~-u3kZy;I0i23<$2V0(dtA#%MCUKMMcrv_7(*kJXLrvcB+QBTd_q$y0tu zkT2+$3;+!cFSTu{Xu0(phL^RLV!hSJPXO=|aPyhq)#CV70ICWMKFHJt0~(A0+RYDiBS63c{z>$^&B2CT8_}F$j(_pna7&^=@oMT7O1U3SIM3S6bpU zF@;*3HKy>R-;74Z$EXMyO71+KswAQKPb$!M#9tAyr$t z^@jHIW26Tt|J_I-@0X0u=SbVReX`RvhS(4rD*o zsli+S^D1u!JZ=?$(;vSPt%SRmfrru>7WbhQL<_`mSO6jAI z#OVw>-JdVa{;7>#+v_eN@wU5$%EwstIeC5w-=k$kw#2NvF@1>FBlr1@h%51kVA^kA zMt#bhrk2`4;_7=0e8L|$c}o9qg|DkX3$L9q5mJ`-IEy?MTct(#kNd7cY985Rh<}{S ztVb*0#+uKaMf%EKUR;U&2MpjVH+N>t#uRR92hD#B#*^iB4z}-}O{zbxUStbwFBi-oke$R&F3S9{F7u+ZYM54H~QZg+2oPKd6myLP9R*EAhO0!Bi%CD>G z`m2ceyp3`x(AE2|K~1%CGhl1Ix=J3Ln@m0&O0F{Lx0CS4S7@$a1cKTSFaCZES7M>7s9f1p#?uS8v!*7f2GYs_b_ z_WY$Aux%f}z}*0r#?r_Xe4cSH7-Qlyst)Of`J}v0>&CV`&yTOX#gxEtR(xu1a^x8T zf)yte6Sl|c#Q`*bUv%=yY0s_dO?mWQZ!l1ydJMpa0IsEwYTju(Kwu{!q&U?1{gh-xlfM|CIb|1qsI}%hBrBm$Lo*vfolzLdJ>ZJ^ND+Bn?Gu{k% z{3`$p05cz8=34-)gc_}`;%d&GF@j%ey?$C}3CVrz5s~vk>x`9;G1nnaql2ZccwkgFS{bo==wG{!2T|Gj($HZ$mQ zX5Mt?_77nL;RgUd-u0iotslXINEbC@#m4L&0m`Z;rD&$&y#1f9%imAuj%dzv>PLLE zJatPxqg!5iE!Z(qq3yYTBQu?o`rw*{<6Z#(0AgTaxq2AjyR$!_lbM%osWm-8H{mQd zrCFaAC(|heN-S0Ha#AYu7M!9vN_W-RMeTGi8$%nR5Q$m%Iel^R&tt-Qv+2UC$N5j* z(Ea%d0)8=G@UcOMF1U-m7pEzUY5-EF6m-^LcE8xMtSM5eYee>YobUj@v^sO%$t7RD>*6qF2lL_@hDP9iZAWk8kYMPqN?oesvu#1q`Ub3TEl5;Yh# z@BoASEhmnQo)C=#7_YGTmP_cK_A#t*Jd&*P%FOr6ReV z+hWLst35ib<&r6U?doxGb%TkX3jd1xVbt=9LpffVNzUE+5Am+npE^Aqd z(@1{y#8KM1!N#uhjWH={<++4RoET9n%8F@O5AT~l;eBT4b8Of0(t^*l^<;Y2!tPWI zTwc@4R^rV`svQed1c0k2sJR)ime!)WmK5($O!(^WCdOA>Wmc~<_B)jx>zDs=Gs*9j zV8m`}Ia4e!ELhJsLB=PxRhq=N{50OjS~b8+LAV%1_}{jTyBO$%Q2<`B_k94-0RT6{ z`Al$t%pi_79&L${1}?V7{tK5EekO} zLO9hAQO6koE(Ip|(yk9=*0^@KVCg#4ATZ&606)xQuKpxoDUG^6J7v*Q07W3NNza&f zNw%N=C{j#+?EJCQ+zoB1lw|am#;heT{S9Dx)oL$aSu5<>w+BQu7meAgTp}57HPUhQdi5$K=w6BeYfT@_a*?> z0QJdZT^1*d0??of2E-4{BBR|pgAgBHpj>64MXOpJ&Yx-@jE=G2lxWuq)QV}F;ldp2 zo{L-kVf*YU1%3_VtPi`NEh+}Ct+BF$=Qh0wR98P?@#)sla4ip4r*!|8JU4@Op+`pZ zS82~#s-`_ZW_h=vaDh6fa>yq;5m><@Pj*c7^)vvNOcn^YZ(seVSl0}MhX8zBDuH=| z+@P6}&IJ@hhHU2Hwb^ zbH*yCCzt|IV`2Ho!vH=q8{^UKRSrtUqx_RDS;2rT7p18rv@1QvrgN>WS!|iKU>+8s zUp|cV&$kKj-onP~j`P|8#~Ct`6rv`L|%Ir)ahT4$1xp{bly@yR`n~a;R^5 zr$(}127Xy?d(F)|qX5n>pS-`#&%uM=d#;p|M6!4xN7S*;Q!cu8**_%DFD;yQ&?Wy%nZI2?Pr3sTq;VwZo#X5%#>^AwXq^PGx~1j5zzxFwjm=1Ci9qbUQKw0D&dtzohr#1;Dw;PmBb zzF0q@6o41*`#+(bm|uny446V%0J{6La^|?lZ^*1Lcvo&w$#@_ppc}MBjll5R*Dtz& zk>Z|L$fe1UmeTZHm$K#-3>QMC(Gt=#E(G5J-t)jA%n_p=qB^&-I>IinC9f(Bml^ zu>|}~?}hPF0B;?0C&0#-!D|R62BA8LCKzxfS{Auhs8TXTW7n-qdNzxy&AG?ggH0z= z6U7=MMasv!5dNhtJTi%tANZ&Codi8yTDVFPH8%q?FW`r}{yB~{-n8#J9K~h;bQcIu z4E=Q?|9MFB#>faPfA_eOv`(@-Cq3kzx*=#Ib>_Ea=cT;?#sYIAxY!ws)QQz+oJWm3 z+e-7iYj2xYi_f3ewbK&U9@vAb`8fPN3_NUI?VO9QyiXe2b?rWvlb-T0rumQ^;qPXf zmUZ{1vW_%QQ69at4mjI2H`( zAtlYzANL8Yd+EN-Y1-%prwTZwa$QZi7I?~~=L{I`p*BtPAIpT21)?1z0&oLpW%uKF z^N5z$4lOml4#roSSLYtX~i#)W`_Z41IDNk-@AZBkH5$&v_=bpX_>+ zgxMBh*5VAmuV}lLzVN&a1C`rYZeQp{0M6eimjVF*F<}CF2<^>){V*bkd-*~k#gR8U z#)Us?c}}D>$=rJgtvaNa$oo0U?Y}yVQnIDscecCSdp-c1&o$1;jSV{C6o3W{VEJJ* zL0Cafo=}U`ZCzpGw;?O_+7^3K+N4bNFciY>zxkBP%ga5|vpV6CqFwjHRVtbVz(ezG zVP<*_1HUs{sN?GKrK=ABjD2W=QioTpXky(sl9s)DTy!Lzy!QU_1k$D;H^z{?o~KB83xD z0XSpt?}D+&X!gXGdit18NSCK?@rNI>u=l^rg%x@8u|*nczlAKO+&Sry zmz;i|x%1W%1$h{2$?1v#MV}{O5ouA}DV=znpkhH4dL!||8Q}TEn3!Pt9DuKmduQ62 zQa4Zg+h{(LKF$Le^5j@wRKrSROK#jqMu&W5qLTyK(bS>Au?D89>j$bbQP zMRQKz(k$-SocZZmRJP&~F!A_Vjthu6Q~$?Cm7qO8zdCqibt<)JWjyf zXm17#XeUOcdwyJgn6_+V7(17&yutgKfNMSbGTJLM-jg<1*zRxLL!47zVhk3WC5KV8 z?e@bQ2)7Bq9)Pz_6C(bERRA2^3*e#dN7Ul?DBp2n&R}AqDmek$d{Y|*5{xHgrK!a; z3j<9Zy9d}80C0U2)!}`8Fknb@OYFImKhq87 z{E$aUG^16AuY`mjT}iuUF(NOALHN^rxSS=Yjiif9p#{4SG7oNC;y^~kyft23gx4|f z21bRi?)on{)@a@wJ;J~zw9LS=HRzd}ZmX>N{K-)o$1r$A^L(?+ck6~xS*j-pFwbyD zg9BsrCAouKlK_Cz7<~D{WCw2B_Cag}FatGLD+E6n&>a&8zq)roBF`UtR{Kct6t_+( zSRww6yVSKyveb*g*!w5he;-;OA^MgV02rhT15gSL&*0H`1BIDRm8Sr>`tagm+I-kH zd`@Tu;6+dVKI)TpFq*}%*D5!{?boC$T(O&w-ZNy>+`^$U zVp~;89TdsytCy_EH;spSGPWQX+llF#idGhmV*3mfTpd0?f8(=d~DP-OKOFucLkOckGJZLeEyAQl^FKzM5jN=D%>GJZv(|Ar7PD$Kw zU{6PJ?`FWbFtvmK@`QODdRccybV4j0*Thyr#I2vBtlD0QZX0BEF;~Gej)3Q!ioJdj z$g>>GcXj#Z<;^dM@q`mv0RS2~LTud(s9X4^D~92pA$A`1zPu|nJ17;BJ;8lJ>k7iy zQqt3A7bMdD3C*ou_y=yOan+j(#to3`+U!2JDL!?aaV+!FXi-7xU^A6D;&M1KOUlf&Xb9%duX=aWGCEF#Cp-bFRM=!$R)$#oSJ(46-z& z(04s0`E==ny_MmUR+$^FLvEt~F}2Ltj29E|w%BJYPIv`i3PMeEkU_V=2?osj@Q5Pt z!@&Hes8U%}BlUckS}=)kA+b|V)-?uk#;!*}O9m1M9CDZlTXhS%MhXPhoO7$9_Z6Is z)$J5{0f8=~=>!k#`rDCITRj-Si+0qHGT|QUgI$)=W>}t)mb&~Qd~-MYURyh@#yWfLm%~7Pngu=5Oge#^Ku4sdB)At_OgO!HW-Ge?DFpN5l zzw6L1nNkWZ<>6e8+!>V6`1i+uyZxAq+d2%=H$Y4xl7N$c<9VM(~9@(Hvh>$Sdd;x zu$DYV8SitL&dU5s2f1b7t&=G|kH){m^~OUC`j|FH^1P2}8qDA^G4d$yefn|1{w;Xz zf4LVl+H-_O%4~*KOwrYhC2u>x@qBv0ht6QNccoPOJ0QHqVgo0<0su4wsewlrxLay< zDimfD)M-7QuO(YoM-HSIm@$G;fgEzUysLlug~D z6MvJTZHQmF3N{00GVms5;Fb-t4e$Yc7XU4ziGMoK^pg{OVD*U2Szir|Ey9jBX3Py4 z-XRS#qknO4#o#$hSlFXIX#HLOvhUuBg<;^sY7W)v^a=&g1_RcMO#fk9=mmIMC;(^f zeJ`lF8R%Asn*p^6(Whx!RN4>6nq}p!hJxQs*IoV^43C%6Ml9WD$Pm9$ZY~a<2s<`f zdFcXplmhHd{zMxL{hd00ZwF{kUDXSp+4VO#)>y#=6=**Q9|17z%qd%q=;rgX0{n z&)pTCw$g7$^yz3QHkZ>1y+Dfvcv>g`06Lm}8KBQ~gcfL{be(|;z$9CM|tT_kr5gEbz$eRV93l_o8D()q2wWkg}R-ydn`vXjFz zMT^G_g|;JaLPckxnv;7;!L$+jPk``Yb`{P9#tMEQ#)A}kkh1Nf?e;kpTb6x4C*+Gs z_D^nccK@bN(L~3uwasJJv=Z}0&fnSfcz7|G-^K*|yG{PhfKM9*psoQ14lwu@PJAZV z1KTgK+iz+nEcI#bWh1V8KjnV2H0rSmL%OUMjjczH&!lj0ysVekMQAe*?%mG);&Osc z2Qa)c$#w>u0nil-HR11fANvov)WoQXzt6z^TK{Gf{&w!zc_WQ(yDn)Rxg0wo1PxxM zT7zwQFBsRE6WXV5$+P(NEs0!uB&poaQ3g&2@YY2py!M43z(&CD9@vBS`xAEocv$!O zP?B+qTJborZg-vyI*Hl=TeU@tpOA_=+P`Z~r%s zZW&4a^#cQ_!9M`-@svl%%HvV#@?&K~sqA*0AEe1@SGaOUeM+xGV<^u1Vr@j%nlx6F z$bbK6pZlEk*|+riR`P!bz-wgU(?$Up222kFxI1a3GQvw5+`Nd{CNDg(Z`d-J9L6m~ zzkE!P=7=j*s(^8mm-KvhBps?w|dFkf@bV2qY*Bk@@pJL#ll#*my zSK~fB5~EEF`aIMbx~GhA!aQ?^Gv?z)fL-3E*NFAh2^XuRvq!;l-ZH&`fLB&ywXb!= zjR&p)P%SfX3j_Pt)}Y8idaf#ZT+b7ueWFx-R@{f>1!A?nC^5A5W5%4y=iMU=LnP!3REfNIX?L{cT+eSM+8TWL@3ZD zw6=ZgEwt$J``J%I(o1`7dK$2F(UOzrWU=2)F5Q&$tsuIl1}}bQ=N!K0UQIArSokS` z`}~aX+#o_F$4q6MQC3c{Zuxzx$7uj99r5|gPwQLnQ*CF^J3!L7qnK>Hs5ny z`N5p(`mOJJv_-T)LVZ7zBVOdO-ae7{4g#L;?q)#2YgN}`yU?Rd)cZ

WxKI9X7@M@3F^|4TO}gXS40NkW-hYa{v^}+5+ZsD<^bjz)0Gtl z=uWgpwAwy7v=Bs8gEd!21Hb;EtY$@p0+54eG=`kzL33niOj!2xnU??*$VM!2L|HW8DJ?4AEw? z=DnL4f1J|qCEwtG}L+=9XRIJH(jJkhrKlrG-e&q zve#X5Evd?d@w8iZ;2*C5=sbY%wzD^e7ogb&V6ga1uttZpK-ApocEI0|Y)l%dH@Kb9 zct~Vkg^(1Xzy&l zGmf>g+A`~@09>^)T{)HJaD^M!z>ZUQJA0CoQf!8r1}NmY0JNsy>Q>ym_wdFy(G`#t`F0NVE$+;Qk*i;q1- z-`*PmoY%3ur=ccyv@!I`_v*;^6q-0DosG#X6$AHk4jiq}uRJ`v9W-T*F`3RfErRZK9apvj+H!AS zpz3s**OikBma7^SVFltd!Q<%0@wvqITw`rsNS?}(XN<>nCDD40qV)xdU3Fp!n8(7^ zZZzJrUJi(Fzzm9xr1Ut%j8fsn+6iC}Hc#o_?YQmfsQ_%oQ#ib^$ml*3Y)v#_HdvaK z@9xpcr;gvH5nrU?*|}jt=bG&IBTF<$Q))-fPBQ1LaF(3AN`(EXrZhb&9!f`X|G$pB5PT1mcSk( z_~jmJZy2!f-4W1VWFx&^!=JxRj5iU0zukIE_8VDG{DXb{B~)rKASZq|X;y4X_cLKx z3t`%`hVDNneKt@y7kI|F8TWKbOa{10kHS=&i>Gw6E!n3`I>d}p-7uuf_{hQ;SXp>_ zDge)4`U5Z+HK_Sau;u!9C#6wWC}c-i+L?$8U_XLB=9aUx%>a>r6aQ14BF!`Ey9vmq z5Ex5~6f@T*d-s0ia_HGQ(Ite17lRf?^kl720hk^Da0mJ?RZ5Ff3#eKh%>)IEXF}VL z*)AV=&{$`deR+3R!-*^Kl}Ov-PmeE$9yIjV{q0$%3GbPnwHd%wHS?wo6s$o~By>05HJ>Kz$Iv&0wtb?kg6PkjY@ijWwjb|Cr?w!?Q+ zdR>_o8pbVvc)IjDbb`ENpniZ>OreRH}=Jc(@6{V3wxQ{7d8^Yi7vi4=a%)2ZLzTRy@gpc zUosLcOMxR6J_E1dil57KSPdudUjc}YaI+0?RQB8QFh$0asW52sMrnhcd=j&sV$V1& zky40cJ=Rvo@W9ylpbD3^^q^8W%3*Lz<&3UvR3zmfucjIt%gwgDYEj5H`tN{DwCLr8*=S-%XXYt!YJDl)Z+rH(N zR#3E#sQv8LeCPM-g}rne!{NN_|1`#&n{MUn%8S#sV8U(`I)LXe@$=^Jfk6BYZtVK| zS+w7%aOc4o57QW0+H=<4bGP21m!}8>O1%2%S3jLIq80VAzn@^qXkFE{F zYh}*$zUkC^jqmHH`kG@j+VX@w>V$RBW`JJ(v{nEBfVl>PzrxLe=n@^Pq)k#8VmIwp zAK{%|c-K|fBsRw#c?6LE*bJuM z#+=Z6`ndiXoHN=|K+WP^N_(EP7qQAF&x2+BybCoEtZV44>zJ~v{9 zN0zc6=T5-Pw0g8H$Go;JFh;CFj~@O@5Ous@qs`4@j+ZUn2%>5~fSWTq6|Aq>!0RLP zT+dA48M2PeNnSW2pf4~~GSSAg=nAvkLL1p9L8~!Jyq@j{?MknfQO`4<_6h(1fEfhb z3+9Kq-@1E82A)`of~X$x7cAQt@+3=kKe&7DWD&$5W$5JCfkVb2Y%`DmV5iMH))n~BNlX6UE=jD9jKvX-8{ zrvO|m@B~{|PI?%iyMXRxt<9nxI}!bTP&Xilll7PkG9^$cI!TlUoCQD*gT;siCek^X zWG>&ZbXPgHF=2Q;rqM=XH#Bc?f zu=2Wmr=1#%eV8M*Z954}69D`%0FRAlCZx_!?-_Q>+BJ=0SeoUBxSO(@yV}<>InsvJ zS9@-8JD1&99pOfv!PJU*AVk_B1|3=}V`44w{sVhjrH$H~0psrLevO5%tWVd@#Cu^L z1}(kHg5T1$KJJC}!M>?iAm*;Qec>{Yc5q}UA}QH0W_@dX&!>kUua+s7_7w%7MU5$H z)L#bhc>vzNp+(HtoXUH-(w*f__)fdj!fZ)-K7*IVqFs}2_pSo!19gUN0)~45P`aMk zTy#M{I>zqwWl#z@JhweOCYjlk!N1IEdYy2|lh-sG5yanO;By*X;>=!j`!XtRP!Jg$e#J6D?~%&>lMLQBR%jh7Ou^X1 z*l3_jxG zDubE9ah)}kVtiRAMZ_4rq5(~OE79_T^yVqMj9#C&W7oCi2_WFtHSyl%YGWz@|KPyY zI7$qF+M59*k@QlCYTG8PbFQHh)p4k#F#&Xw;1D;pDFD78&^DXdHt-O(6})s zt($m%6juMeq5!lwd+9x>nZZp^%tKvzhMP|<7t0$agFfkpe2UhUCHS4UuSV@kt60<| z7m*q?Wmt^XqtX7#x|IT9AkyG}WH(=N{mYAr+VVdI;}@~Zf{q2=w*UH$+kO)LRju(k z;3E>a7g$k4z1lrB;g#3}-8>pQ59BkkaQ5ep(HAbhM%r6M4)g9i?Rl)!$D_hLZ(Ko{ zZ#=OuJ-Vshcv}EN9~o0j9|G_(Dd{Z%@9B_|cI+yRdR@};x0Fw)<%hX9){tM(etuAY8EpgBLkURU^4 zy%8+6W|%)<;P2C7(jTfO+`Wp8fPag@_Jy1(*yM0=At%q4kNF0=+Sl%dvb^xbxr$nm zD6IXMEfm1)V~ZmI9yo1zG3`#ABObvcm|(ID;8sv`1Xb$KDdxjw!thq~+0n(K44PQ( zc2Z8dXYj~f(@w!<0(pF|?Q^Hl#`Z8=FPf2Sdps0^rL<0dVk& zrT2irHM-9PXJ7`+OGz7c-;%6?(@Zil>%{67?$9pZ3G5jPcMD@SH&!mAk40oV9e3)X zP%ydHefWs1dzlFzt(c}4FTFcO{dGqLfNNeR;BGWRBuYo9X%WUGEqLKs(aL+Y)anZI z+z$&mm6-jt)06XreC3%tWl-~QWwtp>KNb9d314Pn+<0J5-V<}c|Kq?v?`Zr017CKh zg}eNDjFOaL#W!iJKA1FkG8Ngt$&WlLOlZ|cMpKTin}2B z9r%$Hw$fQy#a$G)cly8?YixnbaVv7~yI_2B&ffnXZ+-IG&fD>60N>N;r3I&wnlI_% z@ekkl8veBuCP7EvQ{XBcng+^<+bnihr6w0BcC3`wx@K6H(%}*F{taFhpXN&WzvsIC z*#{uKt!=C)`|{iguj4q&+`00IlB!Ke-}@Ie5}TA8$aMMh_aU#A)@emjzr)w&%- ztmT+i+{k)Gk`jrng1i8nI4$yM7cJ<1Yd{MGbA;9m%E%p0ZrS-Wrj4@{h-*ximwyi6 zK5JQrjDgh>VywQ0$hGbTKhAL?ne_{X70&bYc2dCVx~P3m`gi-Zw(@KVFKyYSWQxV0 z6$R}ef$pkkQrEsb-H`ah16QJM+~9YC@vt|jm_n$*i>=Wu=1|yiv~G?hXj=xox2LPx z2@MH6g-#jeW0!`PA|7y;ULP9C#+_~ml?dZr551mm66iC8#^YGv;3Z4Hi*`nQoLdXb zMV{h0a9GVfYCox2cH<|S+KL*y)p0(@I!mhc@jj&bW%W|~<~+0iS=QLX4|;022?ZV{ z;I>^)J&Eb!(d=HYH{Q1YdMqz4FgITa4DKfg+2!zWD1;S@*-2!JYjjD5)r_zzXck?H zi6xa+DS$l9z&^N^x|Aqqj@olszmd~|_P!s(C)O?S^GlYf0 z7^NA=k^A+fr6te8;t^ZZp!ks!m>&0PSD+qkZO z^WPl0q9_0w7&TVvgFi)c9Lq`9%BGwzp=;J|cTGA!{3DsX+YJ($ta6mkXReX`xrFs? zPh8gv(k_F(|7}{Qwb0NXsl#|$zf6zQ_0wGQH<=l4d+fbyLH#uYHUIkxK;LkQY+FeB zw-1cU{XJd98m19eU)(9_yaDH*thwGC#Xx)Ob7&g z{NyutJi0au`qh;te8)3bE zt#3h_nagUd;X{UUF~;kfY4N*xKL_ECZh;pCK*1}QZp5V8%G_L#@i;J>E7aHQWFUzQ zFbV5aglZIu0g7mJe$Q`AqO2?m7kjFe_h<~e$ozEVGx0+IcCbeeV-3u!SUVP8{$ zWT9e7gO%s%5rJ@Wgo-lgnAM+u@r#@8*67Y+27@1G@ZE=gxDW3=bPbLt)XjenFykxU z{E+m{rkBg}bZ<$1UCz9eePf4bxXjnFA;S9QoNfE6dBP&fPfSs<%S)SIGZMQp@mu{y z(GCEC?gP_dqStG_9Wi+F(F;Jw>)uQbK1~l7RP#lX5ohp zr5!~;#`JXgk=Pc5%Ubnv`RRuM+zi4pw@03f0$|{kd*1_Q90YI+oM6B_24Uq5k}4+r z$H0@TRJY^w2-D0BT zrga`fc6nduiChaVkS7<&`Aff;D^^!-yM|KyO#q((fdA{kcLFF1KmrT~e;mN~(Wgkz_)MS zu^AWdzaASE#1*Kn4xzEgrtWwoeF1$w8>KNe01rFVRWY1Zq?>@0;v4|D|QtO|gcxS+3JrEGNzKSC<8$$T@+MjISB^NuH2(O3HT? znbVpPAH;-o9agQ8*}R*xcnNGOSgw6m^P^r6S&sAq4E&s#@2WR(Z~X&B0f=G+2XPb? z*a-$~VCiV_qfe>3{d1ry1YV?co6z%TJ$Q^jYxMngyI)$~5U5C5le$aPt}W>D>0eGo%q5oUapf!peej=cBa)ibs_fBfOz>$?$t5sWV?uU5b{hH@;Dyu_Zb&M7CvnZBB8`c_&*OT2xH=vhrUrqEN3omR@ z03tYd=?}X}^fk15CxGSBpY27;-zj&bbbAMk(D@c;c=MWL`5Q;2#!hJcnbvyq%&~4i z-#GRYS>T!#38!jpERnu`mzh7AF1lb_tRaurZ}9@>pM1zn)sN@$&XB z0}G{P*rDa$3X}c>i11Wt9xKBmVD*Qy(tWpf!j1f65IzISn1~x4lNwwvEP-$vx~(VH zX{KF|8?$g@ihs=G=~W%fao4ppC>Xx~+cnNC*E_P(Q#{)8@D733oO}kb+tuqf&Z_L}H8$vNr7$!#VVsIt2>-n-O3z8zPA=y?UE$tzVd4BUE z{YQJNq*5;x`zHT(X8KJv32QkqX6rhm2H`1GKLzNna1S&hgvH;pxRZJ~N4eAzWV=bn zSY~S5k+cw+=K=mgl#|r8VmYHvg5;VrWT2~8_|qVKZJcvxFp zC1S>n$JymS7XD!WRj8*l1#l}s-gVUe9MNoO-4kF6R1yVcRhqYo{rT!CaBlgYpM+k5 zF`lfrvTTjeKJCRps#Uk$N23Y(%+JAeCy4QX+5gUUI;E(pduP-=r;*7%x5M$`+ss1LE8)I=D1#l~1dh%o%J$5$|o8(ZIrSv0Qk~CGuIp+6#djXRP&7aYJX1vzD?2ozZE_2 zC&j%0v+_iL{tRvT^>rVAvuX8LODXvPcF}n!5drv;-Q);JE??f?H{Q*E zDR4bSP1Rns->2}c8waG%t+b7yd9zq8onlUTN~inM2lqffu344C%)V$T-keoWJ7}OM z0RA{_0&d)YHBKZfoU$L7(h|V80#t`CY&WDWw6HA%{Kc8av8#AP9-&A7s&|Nt=ucO7 z{82K~2c>{TdD|mk_J<>RS{*(kKgggD5!2Csb?}|gP!xbnyn5*d0DORfTiEzaaEC0x zpGx;!Uk+39tT}g*`hK!mnB} z=TxsQ+-F|6{NN2>uEES7W5%yk;<(4-oR`OddV$_h%yM^+`xLZa){UTd{_bP@y7}69 zw4AmwUQv#a$ydmgb)=3-9q;D>`ub|a$TlK=?~&gHCJYeW4dBNiTWRyb^wS-Rq;T8TRr_LnuZIt52l&Jt!ZD2m%v*m4W*?GBt|= zFbV_$eH`L5!K-yB2RB=}LbHFd@!*^0QTDwA8GX!C3YuBv#%QrK$-7J^?_h<-Jlcoe{g_ibI_U+%wd{0rJ3sEJWm_%;X+sGcK*yLJpw=J^6I+_TN~ zuIOH)hW4H@;<>dPWp$W7At-l#%D%^haV$_Po+jHtb6@^PxT+8EbRn~s#}{}~W4f^N zBL;uexAF}?$_QrYeZ+^tyyjnqd0|Q5w@k-l$+R)=K5h)jfAyG%G4+RQI#S+iu3ulb zFVM>4h-d&s0T=#q<=KYg(sq0Xe+0_QO^($DxvL z?Ld^W($qY6&UT-3Hna;>L5yq(S^cyQSH;|{Y%uCrV5x(jgYYTT6@K?A-NkymV`ZgA zwY)fOJ)chwG%$o(=2jkC1$t%B4J00R&{;g7zsI4(SOGs)_;<$8ScN&OU1J@Due=fYE0>w?j$`j(r%y)!e27s!h3YXJ_h5jTKEaG1 zXDge%-`zeEHAeVb49I&Qjxj{t2@r8LwWlyE7N8af5F2maTz6x(b*0g&OQGD~6Y=-S zHn5I+{Nsarz|Hpm7XkW`RwiZiyKd@WojZRwd?twULwKslKWSuoBSs)*-KUiT%Y(*2 zdQQ82*{st$?RsKYF=GJyiJItpNKDS60L%pXI)G2>S?Q-k294Ib7xi?ma(3=XXG8PO z#4HMdoyY#!?I_1i?-2&$j*wGd2yB2*CYGx^y4U z36v=ry`6hp$+Fy7WXhNj=n`G2cowDAhdjAptrs%N+ualS%K$#gOh-<%;J;w(OsIe* zV7M7jrHO0BYx$8FQ}6zN@)ff|m`YEUUhymzzEzeLE@Z8l5O$gDzVtFc?OdpEH{}j8 z=;jGy`RKGL0BejX0D20|&45Qt*S_(zn%>Fvz+|TA!?Ox*rTGN2cQ^CNiS2WQZs)CV zyDb#=EXFQmNu0Kp*TZ}2&Z9W>mxSa0hBg40REwahngX~3z@cc+B)d%1vV~K7;t59A zd2fVS=Y6`@%_IM(+om?<)p5b&f$FI2r)@7tej5OqTNyuf0vrE5{^;P9sGE0p587Zr zYukp6yv{-;!3+Ysp;Z*S^uY1Y_JO*X@;I}H*6l1h!LRT2=d_)Y4N{?EIL5~jRIObUn{%C)4`w|0r&wj+T^Ek_LuqQOb zo``uC*PwlyU#xQ7dqT6fj&!k8#%^05vmIpP3AJAXxP22pj*IubC;5Jk2VAj#PZKdu z^jQGk3ykl8Mr6`IFCdP^GfHkJ>}lAq4d=4*<;m2F@)QMNModxt9Kc81v{4$UR%gsB+Gp@JRB8i9iu;_PR)BQmGO~&zY?|&{Bj1|JK8Tdp$QiWOrP1s9Q zsXT+E?dk1K3r*9E1Vu+JB118ZGg9qnnmn7$$$GRQJLL}oxbw(KhxxrHXz-uJA02oX zD&{E~&*yM6pexK3iy})n(vT8*@CL8Z`UrWMrcG8qAaR&iye55;MpNf8iF#1okD<8U z7sgM(xZ@}T|K_PHQcV{HU>3Y)=>|+NWdOHB1OsZ;{Q%{7oMsUbg`YxYebUAdpXhq| zuwzL!Y)=X#~OY0Ytewn}}k6s}l|ZNYv-(3tm@ad(?<8R6Ead#(5>a!zbt-?Vi2YG=C6(4Zt^s z99KE=iEk-`7KW$8?UlyT=mfsgw(pej9}Ae6-L96B*MCI{2^Yjzp`gtlX570BJcdjr zd!m480yM#Zw*ZX=qzN`7sV5hcGk5wq5m!=W-TA@6eqPcW;iOoKXiV@&l}G77)r`Mh zIdv?)KK5HEPpv)X#0VS!3xb|mdw3I+Pitf;=?mSX5=qCZ44y-bv1GOc>uTZrj=jtSdM?3 zfKj93El+Z@4aI}&G_?AYULeC|E3Iego(-=eZlCDR{ioU$>AA{mj&-Lo?y+qf>5l@q zYr+Iz1y3jZqXSno-V?%I4E(Uqa9q_re{hAAlQtMQ!*9(?)1}O0;EX7*dmSWi86QWI z)o+(?lC!>qvdqDv929Y})bJ)1n`|M-J1;JB?c}@LL1d8 zg`DHo5fU}qy_I-sAF;-&$ordAM-6&P>F93X)jxOMmw>U7lch?>lpqoVX0~`Oip&Y$nB0Gcbno(tF0) z^U6w#rH4d@P@oCkkzS&~>K}%{0B!+z@0Sm~D7U4e0IUWzrZ|Mhf5svh(9?+fMd7Xp zH#%G2x8(fk5-z~L9a}rqT=f2GD3Dv*7OZ~6O$7gzvyWd;xdT5Lf{zpiC z0CtyOylsQ<*8|M-KB66UD->IBf=UY6dvlm!@a)=k1GDF{b{J^sso@YW2wau;hC{%+ z@ZG&hSGeAwX#(}6CI1Slu0JOT&7_B-oKNUuL9X&Es#2=g&ZNW7jEaiij7F)pY5yBfZ#^t+wNw~wDBloZRt?x zt7_NcL2Cv+m9!d~SSyrFd}+-=$Spe?*eR(b4Dv<3xZl6^LhmeOc&vb-*x;1^;y2hS ziFcC{*#R$$+wp{e;9n5)W>GS-$_YM^CORCkj3EEw62#llBkv%aY)z&@@Gn0dVRa>sQA@h(ebbYIIKDV7gTCupXJwdGWKJ}>T@v)xg#DZJ!Fd*!r zB#B>K7R_w=6qXtFBiuV{P7NnWW3Q|D87fZeyCAc6IVr!ps7^(|Y_`^9C^=ir8sy=>Y^ zM$1fzjLSa;#TK2V>Gmh=6BcXEf3HzsV1g)({nA9Geo!TTo4bj}Fhs6^qVdB4gP*3k zR^#>sCb!eyp&Sb6bQH73Z8TJqE7Tb(?Wv=2ekN35(X&9wjI~t#k&rPompUAs{$xwd zEEqRYE~{S=ZAzNi22Mtq%^oM*1o=QSRe-L+r+Ch8E*Xukxk<9g2(NpP} z>60V;w3fu)R!&Zix2vyWuJG}LwO0jGyq*Z`xiTBcmF?F8D^S}n+xQcu=3?~i^>Kfo zud=!M){1WXx|3??4?qB|#(9*QvpiddXGhj12T5?&9ma{H02VD$J;#o3@5 z=n_24K{_~~<8NwQYoJ$17Rqob^@j9wj?NSj$iuCJ|!U3N-g(_=cV(|fjA0)e#+T-?KvfKN=kdrgd_6NGDA)*lc2tHH|9Fv47G`Tfz|WrE$2dHVqup^FbTkng2*aU=4aemAy)Lcq;BcVNtQ%K~#B=QSdbuT3TOQL6J2Ky@AXAQxO87?1^Y5lQ z?-pQWIY|%G@XQ&Kwlqp>PuewQe<3Gkl+FID{+*gZ87Gu1e`aUhL$P~<+1izNaK_FR zd9ar7RbV@#)YiJw)g;p~Ewn!?WD_=m z{|qsY>!_)*GG1JINK);sWxxJBbVv@2PU>pCo)yJ?8M^lvC?!dGXg00uDs}KqFK@NA6*udUL&fBp?Df}0B889L@;B4-+ zKR*gPuzMr3bXY9N3vUenl2Eulv3+eKj^TZNBu7kU`z!7!N7uVGRgCh3`nb#%$*EfT zw(os8RZPr&+n&$4)fw9~6*9OC?qHUlS!%V&{GRasIQLT>+4w*0aBvpTB00zOY^*SX znwA->uJ>kfwEiuts`l}G@w!roCZ6HWxRu#>hS&`$S{_=Ez7?5eAr0RM_~r&iPqn>! zK9uG^u$={W>QQ!XD4Bt7!5hz$^$p$=loJ&_L?ZJmX$Ulpe~nL9j#*BfJ#it%{~R53 zM2kzKk^a0qX`2~zYM65sS${||L^xz@$a@)Q<>t<7>)bU`)w_+lXM3EXjN!u|-03Fw z(e0{;Ca^tp+KV12)qH5m#q=+lEJfa?@cI1AAKu%hqSQ zb^p(i-F~~>)(x>1RmcGnCcH8Ifc?8=T2I|Se^qNn2->0jf_0{O#=+qwbMqI4x7)lX zPfF-nRO6ZFE7z5uCUWwr32g^zVc%0-4j1r%T4EA&&{B(IXaw%;?Z*$@l49*(LCr?O z?TzhfrN`5mxi{TZn;PMwd?*FXEr%OL0fEsXaz~7xjo)&AghLo5GP;h7oqdaj@9d2J zyksp;Co+Or{Ja9}=p~PhUuN;>8V}D)Dvv`s#cfUShv4&kr(LnUNudYEnKJ3pZn|wj z_r;(`12mma3|{3|V&cDLJ#BVG2Vx`+{FeU&nB|mZQ1^Qrf*ihYUMB9ku=Atcji#UI zp7mRmuuA;QfQ+4ijWf&1m^pvfdz1dz-~eK9hg?F7>WQnY;fI<>>X#2w>+{^r?JepE z&Ufo$;D)4vKq!9BCa=-ukfV=w#u*F^I>}&qP!`&UOf1G?Fq+)e&g3wNW6jO$l8$8B zH4o9adGiDB*r3YpSQkNVTiLwAiG%)=4EnUNc%z#0Y~8PPJT?gk7pyk#yCFcUiQG&3YLyb^X5t7F%(z zm}CdvORvduJ0irn3X`8-H^EO7om{x zDe!)r{tBUU#W`A~UP(PcugVW0sJZnPKd`;iX3(aVven(omCY!E9;uNHJ^# z=P;uZ;BkcJ&g{O!$(dTfK#N0z>l0qc8aR)Q6|a4D6ky|Mgbe|ysD9#J=aM9Tz18py6S4W1sY)6d3_rPfkSyxx5>Dh!qMKY3wZ#M(NZ9m^vCH1W_3dh z)TPf%^FIr&-<7_`TAh7QalHlOv3kd?cORT~mw_mAzvK~Tf;S9ta1OV~@#LPc(;sW$ zrb0BnAVhjO1PP zTa#RP)V&rZI;-6Oj^&q_K6vnTAG+rp^rE%zGxb-u_a8pC2+O<+8fhEiEL_~ zH3mtA?kmcRZ^X|t_U4N?&dM%NiT7RtF-vxfA9(u>e zfx`{%qyIRRXJtqZ3r^lOOZ0`mRG(f{WAU#wgUZn247@g;i)kR;irqel=1JIpxnFJX zI_v{OU8gaVx{>@o4u-zvI+3VBX$F&hbEbaI5(=|PCY&wKtowyt5J1)HgDV*=lGfWT zWQgLgU_h>{+|uUA{XN^SUQz`Efm5D{s&ETmeAaK)poiK>*{v^u_{4-$6sA z+w%j%M%)}aclxysuWgJYS|l%IYX;aPKI>C|PSqN|Q?}AWRf@BGXSu5r!2Ab-)3@j4 zI99%a;iLE0Yu+BUNnf16)TPV_Z|d~vby%yOR>YTSS4Mdv6VRn4jWwZRE* zyfiu%ZQLgl{#v3F2wathM{gSG=w*Chex0t+6xF%6AL2S)ee5SR@OjF;+fE+o$cPV3 z@4vDm-!_`Y&@L6!k~jMMBlC&q^VYBF8$l|!GtRygaBXMZ#>XPgnuen@e+kHgy1^Qc z|43A$d;Lul5a50E$0acnwvV%3z&?c(kgtSy z7mME>a@(9fS>1wQUA~Zt;cNB%{VF8D1-AR6pQL|}9lce?-mR$VaP$1-F>c5nzLe*; zr(Dl3rjHURvu9AxPyPAA-z`{{VuMD+n}oK)ha|6+Xd<1a)K9d3@)nx3cRhg{KMq4AaE zhb{_)Neh(*+3umQ+3|L|Kliq7ZF5X?z9j_nYorrLP8*pwg1N8|OAd->(Zv516 zYYWi93cip_RISK~5W0J;RK4_`oy~D!y&+L!PK`(TF>I33tfKJaZ(j z#l9lE^IMYH6|05AYH7ipCg@H$C1I`?@lNz(QkDti$_{UwOm8`IXCE#W3+pr`&xNIF z$Z>i@b?i!apCvZ+oXQX*j*4&#-NRCoaQAXKJl?#liw1r0b;qN5r&qE@$j9QAIQ*Kz z58KFL>4z%J`_y=GJu{a5V|%Ikl$YSNFBgj}!q=ldVa)W`Fo-EL3j=TA{!AbnV-b`D zN?E^b%H=PUvSn~QKkI26jDAB-e0wSRxaIC(p_{Yh&*}&)y?|p&KMdW)R|+VbQJRZ} z!2K7~5xE2#xuT^AQh>QtY@m81O2CYwdyg?r&Er%`(gX1@G3 z*$SY0fu(JydGA(X$T#}ltI;Wltg2c8O4Gx0WF)wOibTveoJKU3m7fYjfAZ88_W27Zo zLozMXTzCUhz$-2M7qO(}neTn_Ao}!jsFs%a`v<)GcFaK2EM_h55DN)*BU) za>($fbTgt$GtB|ntIcL39lB%c)LO~eX#5{T>1s+qY*UoJFTZ14fI{906y%I~zfR)a za2&N_x zxi1Jf0Fv(vmbsxCFEVf7(`Q4^W7JZx57m$8Gc+zy$&-`;oTsVIGBgpbodv{Ejc@P; z4K6KeWsrFGC05)iXzXHhrapQPO2XhuNPJ@4z-}CU;V9QFNUvD3+M6x=5pma)RE|Y; zb9?5Aq3RGo^X*DQ9CHp&JESpB3eiIJ!BsV$?ldjt}k2_{}pr z*Qv$fwy#*jM(u}gZ#>21I0%@#H_W&g<^2+_DQ~T0C@0-0@xyUNGtr-#=#A{R)BPJ| z+N!(!lvHg8&N;bQXL*$2f*jeBQr~0TD8uQ>#&Ot?KT>3ShMfHn9{c(%;koc&mTX}t zh8735m5Tn1&Eaaz_X0fC3~l_M+86}gWPWluqV$y9cOt@0jZ&O|k*rOXKpuvqA^i(;$Z~Mi%20&8WD~+8Pxm2cO zR{J5GAZ{u|b^fw(v$5vF@|^5Q>od;Ic-ySopbG8o!!&ob!$-4S`Dyf%dHi4^HxpE{ ztooha9({K|!3JtX3&72=i~Q}ciT(1dcci_;$(N-{^~VwC3;97ZV$Nfqt47&WZ=7Vu ze8Su>A2Dh^%MtMm2XX_HeF~2+6j5ow(ECpP!u*<4B5EPLXut@{EU(hAOA2wxR;kJ@ z)@U4bmi83&3?!O<%{cBletBi3xPT669{bx{ICHf;Z{m`B!Y!~FCEn{vJgLW8Pu%F> z&eX&QHClaeXQ21q>nGW8^>wGtQQSs1ghw>3+ef?i0}%i)X6!9Lo&ihZap|Kygf%_LVNT`=#JyCs6^bZkLFqgQWs+e50C zzh^WErcz=g9>whG`tA)jgJ|1`gHUE-pLHB%du*YcM=2kL?Z?r}kBz30Dw$88WT{oQ zd>p3&8kOV8P$LL;X1Er@KdsI8TDUGf@VJ=E?$V%(>rE;ge4IN@V+BO#63%lql^}q} z^@%+Nm*9K`By4MfWM}+v`F@|{)#T`qaGnz?)qC`$5VBFbnsUA+!DOU}VltNSr4%~P zx*x7RFx3^RrR-nFW3MMPob5wiU&VPkPAAs6jKoocTK-K2=*d=T^(Kf8;vvt7Qyp+Y zk5d8AYHDUYF#2(JI$p(Rda7MM(brep#6!MuhiAG4A9$*#N{9X;@QWv(zoH(h&DJ6B~rIkMIi( z2u3c4K#wsIB-l#FOM7kat*q#0}kSvQOwaZfcVD zdc3sX;o@@$p8Tu%y?k(5evT2m898nIH?VT}_=ttsjQc5Z6pi5glfQdFYpimMm%YsF zO#c$qycL^c&q`D6wgRXAdEaySD5yg>2228>NwbgFsLJu&SMq+d{4u~H-=+nff1%R3 zDjV1L;`zIWPQ~%#b$KtP1ZLgvV-<%*>X*-{x#MQM1n}nNOi;dD(sG*?=z&JTZTjb; zZsd_^?@O0kU$QEvy}wwu@;$@flJc z#8X9iHSypQ;YRl5Ku!5m!q2msT9h<#5j&N7qlfec4LeoIJCqCIsIt2}k`oOmstKy~ z+uB5N%%41$@rFZwtv^2*eo`~%NXfOZ(QXa>WngZJ(?T^e_{TY>@t_^pLfYV;<%qqJcCt474kezZLoZ;K zD!ZG)JEirqtMJ@*f3mDSaYj`EJM%l<&cEU;Zphuz-L$EEu~nm;Gpl@1-n6jMl)1QO z2UPhuj71&b9T*d2>rSA9&$Z<;feK=FY5z&glJVgLMzj+r{6qOW^a`OQdfrPovgBGk z?m4I3n!t9}&Vb<4l><+2gTvmE^j7K()u=(`-S1dBu+I~g`axJf2J?IY)D%ap48{9ow%FmWCAjh>|Z9^~D__39EIqUbO-XRGOanj1q8bw21DZxqfzi|fI5H_|dy z(f_q^o+n=q$*?tYy(ctqL!N1Avt8FqjH-1Zh2dh6`5%$Xcx~S9-5g|A_E4=$Zh@kW zajaj(?+CMrf%=vB+8w$|%&+vj3WEze$~jwJwc`QV-tRF?S)HbV33I{y@|@FX1jW=h zI%@E7-%qF`=0zl}@AHg!{<$9+X;Hv1rtAfJra&5Q?z_pKYb`pkA#9TP9f1^%RPWWK zrq`%1=()i^L>ltn6U~61c@hBF1z6Pd|oB$ub97GQ@hLzo9*+d!HpN zk_g%Ix;Z1--x#Mj9dOGcc7y{!4jE3=?%Ym*AablR=$wGBj-o%6Y7YDs%3e;(FT0*n zQlU2y?|f7kNCJ-=JhChSfkOF8>vl|4`We7PP;>rYmD|ve4a9z0D^{a+MBAo6j__P+ z5QS>C54*+`Xv(gl0mE%Iyvfy>aP;&(+{`s1+Ww4V>Gyc;`fy9QgNOTaH`dG!4uza@ zJba|}{;KgB>ZTRBq?&Wsr!maO>S4oNvzfH0$*|WS5Nl_kL;m=E8cOi@-#rO6o_C{f zaKEL320$T|ZzzK{=z$x$2Mjf$zVfPLL^ZlH@iam^bPs=v00s9JeW_K69dJ(#33AmR1;O2d0~n1EW!M0V~Q4zhEW z87RzXLB7mdRujpVHX2~Zs+~=MU0`s%P<~(07aa9hvnHqAEjg!VPCNzLd;#ZHY2Zh3 z(GLC8nTE~wU1uqgxPbHaUm=aHAzWoyK*HRj^m%gjWqCYwClxLD?n@QO6C%926S72E zXfbIyjYXDDP3M%#XQm#IU7}|8_G`k-!&1!h<>=vYt_O=O-y#l{xwR5=Yg}ObV7=Oz z95XT9=^2q!1rU!H;f|!WerTwZw5p_XRX_Uv?i3-t>c*SYW*6plMV8S2jEIvH^%#D8 zjrYTkLG*LI0IXfVsd^*Atk#Fd$o%17EY0T>;;BJY>8f8v&&owbhOYACHJtdQ?`#a@ z86n)1 zj5;5$ZTMxSE-l;;z;n-;CNBnVu?@yqyTHi@4~_EGLVpfj65~&2(A7Me>Fg*0x@mkE@=f5g`<0cWs zxr-p*4zLQbj%>5tlCkjC=t=X%J3J$r@jGheY zIc>;!5L$Z8C}>=O5p-8%;*&e=bo6ms8E`pObiXB3_xOXJ!qPGbu#Lde4C=IAEusc) zZC0q)pjdbGfQKfI@P`w5tf}T0nmrE{lP{zlOdZXXfppI*4%in6fqVgXrgzFL)GTqV zBVnIF=EkmeF|3nKwy>h4II|TsB$eF$6kWgR+KEME~4u(|mS0w&Usahk?d5 z-{H5UE5td=aH^BI!aFm%m2;t2Ez9MA{{(qE0yjRYpE^4;BFE9HfMN#;S4lu?SNs^j zpqJo=n=KUAb3Uu_n@?=phs!ser;>*z7J|~@ktLO}224BK5SL`=j@kkJZo%}WUogcpPzy;xG`D+^Z;gQI>7 z+@*XO%Wn4@h+_bSQ=wKY4oI}@0145&y}KifJKpNznj zg!%9e?>-oRRXeWjTi|;89rGuKw4_dC>1INiJQ;-uY@+Q3x9pkPXehl1d3wYFGT zc3IZT_{Q5%A>=-uFv`K_eSy0Z!LpFuA|e!5B=3!DJ~bl^)9&Wh~N*i z(+wOv6VjuM?I+Lm3N^0v0H;3hD|N}{(7OS9-z+Gg^S-H}&`bgYbj&rqh*!U5X)h{G z2mG+lDW8in%I--T3U9*RA!{*x%<*$d* zC;u<2QKPDwF=D*SA@K^1lvYUN&^yf~9gqLi2u|>4PExm^n9GQOTAf**8>wXh=_^+Q zD4%rP#)ic?KJV7y(cC^+_|=RFCy6FJbq)$Gh1}az$GxR7ZWD8An+GWw_0qM;aQJ(4 zzZXGp82eo}KuXHCv0IF(Hj#EKfA}q%xMr7z_zFRL*KWr1uw4jhBfMYYUaM-$l{v}Y`$W|H3iVJ6=ut;(;-x_{lIw6% zb_)A{gzswUCHrg{&*EI>(>p<2Lw#>Gh9Z;EY=Xt+V3x~R8HWJ=1Sk6 z47!B%0Qz3Iu5B1)K+>e{#L&}3SohGWh(**k>+Q*#9pSu$x;NWC9B|5(LH>Nc&8bCC zxhGwJ<2iRKeJd*2p0Fa$crx2)MN#F}6fy>M?j3bjtn3C~c^mO5B^X9QC`!xvG9-Q= z{~s>ivI=^!R1_|VuO&pXjHsRz#F9z2$1AjNy^sn$dL&(>i{K3s(}*V-V3}+1?Y^z= z;98&}!_wvuZF}lUlQeq!#1(~ioWk$q;7KE(LK2%Sx2MZ(Wdlt}E5-A!v_saULTtPo z`Q}B0EFk_$$vL-7h=sw=&TBX0n^GZJc-9ddk@04F0WP$({zQwx|T6s zaCYCMB%3rOWecrhY+cz?aB?O5y|H?MH*-c{&Dd-u{^estfoG$!|AQJYmw@I8mVNmP z^nuQfqIBl^d1+LyBES?TQa2_^QSfC5F+hvW_A(1ou8&1R>F6KA?-t2FsFt}R+!LZ6 zFpl3hW{et$J07y+(L9I(U+5qj_+R#H)VV5{9xJ$!)=e3J^xEZ(r%_AEl7Rn zea|){X2)F3Qi=ULS8N1ly&4jp*fDDtTboXleEfJ&JU+;!pVPC9&*v@FQeGV?Z|YAc zl-)#4;#(Z#HCP|;ppyP>=A;hf0 zY%LFDeuil_YYuUgW>M0^Ungcd{oG*pC4mGfX7_f>gksveeqK51mxAB-#vTuwb^a?Y zFIe+qkp@4?|E8>ChSf~lqvK!W`Aamp_Ng2;qfck&h^4^gsTNyHvDPeSioxosGsQ&K&`7?Gu1(D~ z2)vV?Nje*n+*@Je-Ij#bjglhhs@1Le`WP>5J8dlkYu5oWCtEEBo4=Zmt>TTQQ*_jK zB_&FI;PVjp^@VspV`_;Mb-z6BojGoJ3LbS9xOid$t;ULZP%HXPg}ri2xn+GpaTbrU zP(RN6Sy?JSGriANywX7DzCO#Cm+2H^4}KN`Jz< zJL4hIM&SARmKon!6w@n1~ZZy~LvbLS9fgN%)Qc19JIny5QGRhODp!1o*|2bC~@ zu~`}zqWRFL-WB!7KFJ`A^Klx-q!7|O${iDp2p++?Ep1VjhXp2OOn;@tNvGNt$QqqC zJf^i9e0h1`;Yf#kVWTwL=4Ho>Jt0|>^sNzwe_;T%^E#Bjj>m9LJ5$GauMbJ^V0#`H zkpx8CD~F7%qTZ2Si4E~3#N*x{I}GX^bps&rRrEXH7r?kCBx;`E%q?wy{Xx zo4@2!{v)aP7||6EjjJ76w%1NuYBzwyBD3=)ts1mlR(7O(fqnxzF~qPS%QJzBN1nrz zA=J_UnaPM6-a?J;=By)rAqtzBF_e#x4^~uVIwVfyxQ?Mk1g(}-{BqW@58-^%+FS^Y z8GdRgGp+Dj6r`zz7Q|e#Jr-`;ieG^wU(l!DOKYg`kD8DWeyvV67gME^4*^O=r7PFP z$K3?)@`r|8On8*d>28iQPU}UPSF-982tYpZbQ_3|B6N*nTV#@)#1+e{<0pbNHhqlbh;LqE`Vkk>tVO*&O7EHlX&$l^8E(Tz17cdEU22 z453umh-7izn>B!8de*sj&%GKqLh1nj!&gq`nipTfO#0bbJ%O&vii5& za--!Jx*^SdR)i#jYBV7AhrkZHUGpXQ*>mxO10TQw0py|uL&K3axBDY=C#3D)n9h2I zgZ1}F8kpx{m5&;ImWc{WXFv(Jt@BK$H`{^EKd|^e_zYRkO#_w_eNIb?ET61sOI(;)3?xQ>O=G)P?{-j2~ZQ|2aR$gFv>!`5X<+D2yqkib|f(ijKdim%lzmjRywH*w#^JB zo2Mj>%N4^MXK_2blhiPQJTc=D<%bs?wQ~?vYz=U)@{knW2S1$NRo(`E^o6hfRma$t zgfijnv8BJ?*?Z~YFLOHaSdmOQ8xN{cMthjh1hhl`22EQDj_mA6R>LUOFeehBe=fiC|A*FSc40?q={i?QLi|dFXKGaoDuy5D)TIsEPsx8e;L`N9j+vWFMh*J46gZ7K-U3vp?q*4sVSuZy(%AB$9KRj zQCrJ;ja|D{R>$Ek0ZB!bA24CMI@ZJV#aC%4HH}=rGz6ai5#nTP?>cSsu_V$%1RzN$ z24NetTr)>HLVbRF2e|@0zHDkghQ>4c;M3)1b=Y;2W!8W9bG|aALC}fA`5UAm+56TJ z=t%B4`8Ee_7&@ll?;G^RF!v!bQ{{SF2*c-dk}Xf!D;b2})ctk_anTU+#z}W9B9UZQ z!mfSbGnT8`0_vqTxb9qbYZ~2I$<2z5)gSrl%uK%D$0)5`1afldK6z`0J8~}*1-hi> zcE~B86TJ?u{XiW=nQEq_eol!>Z|q?mh!xuANEwjM5z2#bOWihCdt8tg&A7Ooh}{uc zYLq+lnI4(>jNs~BzvOi+1j`&8mseCd1=mxT~nH0M4TviqCG*D-*TsZlK=N``)PLnoVTH` zU)>#1+Rcc5<{}p>&*W`lw7#S`(7LhuSegh%(BLB;s}kj*a$al6Mi}EQ zR`R_M;XkZ3`X29S7Gthlgb={5OP_p{DqX77%_MGTJ$JyQvKv60kS&(5Yq6kJ^-RgB z8Pv6Uy-V}k@l`6!%ZR>8LqV;2^@6D#*Vc<4UczBggLKB7lR!UKO>|5J(maWZ^cDk% zIko(TVolmoY0|ruoBg_!W9ukT{bR{BA%X@7(e3UV>Rp>9=zQ9#5{oo zkzEVBkHi)BVb9d<7lQ21$_Lcp0L!HGDTCWxj%gW8YnnsH$2a@WfD@gz3L+om!+3=L zJu5|s+BuE;{dE*=Xu1rwoZ3&p64V0SvnA4&pv;6gp0)z#VetOp`KO-0MUWfbIMHP; z>N2k*r~wudZFsJXaZ{+RJ}kWL7?#IU1s5s&kE0#~6oT0tB8Q%+PE>FMRP&4 zx^r(kfap)78ZXy>ES_tgUD=l-Sf}DB&m5OjEXUQEf}XQ2)8VaSM4Xwj4Y-|xNJ31@ zFSr}=YoGVe!swwg3ENF#OfR2{C3_*{SGPCKHEUB?WgQx4!I%9B>%4@RG5@d)B1gwcamEmgc5*Q%{+oq2qsc9 zZ||u!^m#-@0W<#GumqRV=0f60mPy>r&%W#3wmhNnSWOB}Zt`q5>XeKQRT@L60Qak` zAu;}b)|?IE5=}FUHp|;kiOHygPYf58Kf`wz;h-PyRH8aydoz0*_$?mGgtT4)&F}s^ zB_^N8(LzfO|<(;0KB)=~BjSh71n;QSJxH~gv`jVr}SD;$N{`y?*1~}xJO&$;WF>na*@*W zVn<88@@9G0=7AA40$f9_K2RYU*hJUc#bo`PzU&~NW74`AV@-xB)Vy5VMs{;idv)|c z2=G{R*y;V()Q6I%Ftgu!-9tLz#Dmp~ z-(yyH+1+yx0Olj#w`$$5D=9o11Y!|Xe>e{24Y2jNNB=NJ>9Za}ckIS6Mr8n_w56!N z2v99N(X3tYy?|SefQXn!E&p}`CGVRXJ?__lzk7Wgo-{FERgz+YJz)b;y%_uPmQ+Ie zu&AZXF}(~l$l%-2A0!EHq^I}#w+ReKhiJEZwgNNip3ZpQEv4<&unVJ^^f+ z&K+Q#(hKXIn{KwcriOL#!oTT+xz=#BL-m9zSg8W=wLk%p(*x+WyaO1=xij6Ku7wHr zxlC8Q6Hh)9+U<^r_QG^YnaF7rww5z8O#~0n8A+@nqP70}0~laij)VFv3A#~9 zYQ>RQs_KnD=X8N23vKfPp~ zILx77xjwQ&ApY#}oy2amHxUqhKs!(}x{trFn7kLR3-#fmBuJR|pShRaAWq$Dgg?&j@eL2m8jW(Ec2m9>9|hUBbCM>noCF)4GX3I$7v%3_9!O^Gd+hy#mFE*``+ wU=B;!s7^kyx;Q#GIY>N+I1wbBC(8nLhL7oX_nkW#vIUfkgra!OcjJ)%2cy=@XaE2J literal 0 HcmV?d00001 diff --git a/client/client/pages/proposals/assets/type.svg b/client/client/pages/proposals/assets/type.svg new file mode 100644 index 00000000..f8eac581 --- /dev/null +++ b/client/client/pages/proposals/assets/type.svg @@ -0,0 +1,3 @@ + + + diff --git a/client/client/pages/proposals/assets/withdraw.svg b/client/client/pages/proposals/assets/withdraw.svg new file mode 100644 index 00000000..29d8019b --- /dev/null +++ b/client/client/pages/proposals/assets/withdraw.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/client/client/pages/proposals/components/DisplayProposals.jsx b/client/client/pages/proposals/components/DisplayProposals.jsx new file mode 100644 index 00000000..09c40703 --- /dev/null +++ b/client/client/pages/proposals/components/DisplayProposals.jsx @@ -0,0 +1,38 @@ +import React from 'react'; +//import { useNavigate } from 'react-router-dom'; +//import FundCard from './FundCard'; +import { loader } from '../assets'; + +const DisplayProposals = ({ title, isLoading, proposals }) => { + //const navigate = useNavigate(); + + const handleNavigate = (proposal) => { + navigate(`/proposal-details/${proposal.title}`, { state: proposal }) + } + + return ( +

+

{title} ({proposals.length})

+ +
+ {isLoading && ( + loader + )} + + {!isLoading && proposals.length === 0 && ( +

+ You have not created any proposals yet +

+ )} + + {!isLoading && proposals.length > 0 && proposals.map((proposal) => handleNavigate(proposal)} + />)} +
+
+ ) +} + +export default DisplayProposals; \ No newline at end of file diff --git a/client/client/pages/proposals/components/Sidebar.jsx b/client/client/pages/proposals/components/Sidebar.jsx new file mode 100644 index 00000000..994c0436 --- /dev/null +++ b/client/client/pages/proposals/components/Sidebar.jsx @@ -0,0 +1,50 @@ +import React, { useState } from 'react'; +import { logo, sun } from '../assets'; +import { navlinks } from '../constants'; +//import { Link } from 'next'; +import { Link, useNavigate } from 'react-router-dom'; + + +const Icon = ({ styles, name, imgUrl, isActive, disabled, handleClick }) => ( +
+ {!isActive ? ( + fund_logo + ) : ( + fund_logo + )} +
+); + +const Sidebar = () => { + const navigate = useNavigate(); + const [isActive, setIsActive] = useState('dashboard'); + + return ( +
+ + + + +
+
+ {navlinks.map((link) => ( + { + if(!link.disabled) { + setIsActive(link.name); + navigate(link.link); + } + }} + /> + ))} +
+ +
+
+ ); +} + +export default Sidebar; \ No newline at end of file diff --git a/client/client/pages/proposals/constants/index.js b/client/client/pages/proposals/constants/index.js new file mode 100644 index 00000000..555e82a3 --- /dev/null +++ b/client/client/pages/proposals/constants/index.js @@ -0,0 +1,37 @@ +import { createCampaign, dashboard, logout, payment, profile, withdraw } from '../assets'; + +export const navlinks = [ + { + name: 'dashboard', + imgUrl: dashboard, + link: '/', + }, + { + name: 'campaign', + imgUrl: createCampaign, + link: '/create-proposal', + }, + { + name: 'payment', + imgUrl: payment, + link: '/', + disabled: true, + }, + { + name: 'withdraw', + imgUrl: withdraw, + link: '/', + disabled: true, + }, + { + name: 'profile', + imgUrl: profile, + link: '/profile', + }, + { + name: 'logout', + imgUrl: logout, + link: '/', + disabled: true, + }, +]; \ No newline at end of file diff --git a/client/client/pages/proposals/context/index.jsx b/client/client/pages/proposals/context/index.jsx new file mode 100644 index 00000000..71cc1c7e --- /dev/null +++ b/client/client/pages/proposals/context/index.jsx @@ -0,0 +1,97 @@ +import React, { useContext, createContext } from 'react'; +import { useAddress, useContract, useMetamask, useContractWrite } from '@thirdweb-dev/react'; +import { ethers } from 'ethers'; + +const StateContext = createContext(); + +export const StateContextProvider = ({ children }) => { + const { contract } = useContract('0xCcaA1ABA77Bae6296D386C2F130c46FEc3E5A004'); + const { mutateAsync: createProposal } = useContractWrite(contract, 'createProposal'); // Call function & create a proposal, passing in params from the form + const address = useAddress(); + const connect = useMetamask(); + + // Publish a proposal on-chain + const publishProposal = async (form) => { + try { + const data = await createProposal([ + address, // Owner - creator of the campaign. useMetamask(); + form.title, // From CreateProposal.jsx + form.description, + form.target, + new Date(form.deadline).getTime(), + form.image, + ]); + + console.log("Contract call success: ", data); + } catch (error) { + console.error('Contract call resulted in a failure, ', error); + } + } + + // Retrieve proposals from on-chain + const getProposals = async () => { + const proposals = await contract.call('getProposals'); // Essentially a get request to the contract + const parsedProposals = proposals.map((proposal) => ({ // Take an individual proposal, immediate return + owner: proposal.owner, + title: proposal.title, + description: proposal.description, + target: ethers.utils.formatEther(proposal.target.toString()), + deadline: proposal.deadline.toNumber(), // Will transform to date format later + amountCollected: ethers.utils.formatEther(proposal.amountCollected.toString()), + image: proposal.image, + pId: proposal.i, // Index of proposal + })); + + console.log(parsedProposals); + console.log(proposals); + return parsedProposals; // This is sent to the `useEffect` in `Home.jsx` page + } + + const getUserProposals = async () => { // Get proposals that a specific user (authed) has created + const allProposals = await getProposals(); + const filteredProposals = allProposals.filter((proposal) => + proposal.owner === address + ); + return filteredProposals; + } + + const vote = async (pId, amount) => { + const data = await contract.call('voteForProposal', pId, { value: ethers.utils.parseEther(amount) }); + + return data; + } + + const getVotes = async (pId) => { + const votes = await contract.call('getVoters', pId); + const numberOfVotes = votes[0].length; + const parsedVotes = []; + + for (let i = 0; i < numberOfVotes; i++) { + parsedVotes.push({ + donator: donations[0][i], + donation: ethers.utils.formatEther(donations[1][i].toString) + }) + } + + return parsedVotes; + } + + return( + + {children} + + ) +} + +// Hook to get the context returned to node frontend +export const useStateContext = () => useContext(StateContext); \ No newline at end of file diff --git a/client/client/pages/proposals/index.js b/client/client/pages/proposals/index.js deleted file mode 100644 index eb9a1f19..00000000 --- a/client/client/pages/proposals/index.js +++ /dev/null @@ -1,4 +0,0 @@ -export { default as Home } from './Home'; -export { default as Profile } from './Profile'; -export { default as CreateProposal } from './CreateProposal'; -export { default as ProposalDetails } from './ProposalDetails'; \ No newline at end of file diff --git a/client/client/pages/proposals/utils/index.js b/client/client/pages/proposals/utils/index.js new file mode 100644 index 00000000..bf689a56 --- /dev/null +++ b/client/client/pages/proposals/utils/index.js @@ -0,0 +1,22 @@ +export const daysLeft = (deadline) => { + const difference = new Date(deadline).getTime() - Date.now(); + const remainingDays = difference / (1000 * 3600 * 24); + + return remainingDays.toFixed(0); + }; + + export const calculateBarPercentage = (goal, raisedAmount) => { + const percentage = Math.round((raisedAmount * 100) / goal); + + return percentage; + }; + + export const checkIfImage = (url, callback) => { + const img = new Image(); + img.src = url; + + if (img.complete) callback(true); + + img.onload = () => callback(true); + img.onerror = () => callback(false); + }; \ No newline at end of file diff --git a/client/client/postcss.config.js b/client/client/postcss.config.js new file mode 100644 index 00000000..56dcb488 --- /dev/null +++ b/client/client/postcss.config.js @@ -0,0 +1,7 @@ +module.exports = { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, + } + \ No newline at end of file diff --git a/client/client/tailwind.config.js b/client/client/tailwind.config.js new file mode 100644 index 00000000..16506015 --- /dev/null +++ b/client/client/tailwind.config.js @@ -0,0 +1,18 @@ +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: [ + "./index.html", + "./src/**/*.{js,ts,jsx,tsx}", + ], + theme: { + extend: { + fontFamily: { + epilogue: ['Epilogue', 'sans-serif'], + }, + boxShadow: { + secondary: '10px 10px 20px rgba(2, 2, 2, 0.25)', + }, + }, + }, + plugins: [], + } \ No newline at end of file diff --git a/client/src/components/Content/Navbar.js b/client/src/components/Content/Navbar.js new file mode 100644 index 00000000..73f380bf --- /dev/null +++ b/client/src/components/Content/Navbar.js @@ -0,0 +1,9 @@ +import React from 'react'; + +const Navbar = () => { + return ( +
Navbar
+ ) +} + +export default Navbar; \ No newline at end of file diff --git a/client/src/components/Content/README.md b/client/src/components/Content/README.md new file mode 100644 index 00000000..34a41683 --- /dev/null +++ b/client/src/components/Content/README.md @@ -0,0 +1 @@ +Components relating to the Lens Protocol UI elements \ No newline at end of file diff --git a/client/src/components/DisplayProposals.jsx b/client/src/components/DisplayProposals.jsx index 9dd78ad1..d9afb831 100644 --- a/client/src/components/DisplayProposals.jsx +++ b/client/src/components/DisplayProposals.jsx @@ -1,35 +1,38 @@ import React from 'react'; import { useNavigate } from 'react-router-dom'; -import { loader } from '../assets'; import FundCard from './FundCard'; +import { loader } from '../assets'; const DisplayProposals = ({ title, isLoading, proposals }) => { - const navigate = useNavigate(); + const navigate = useNavigate(); + + const handleNavigate = (proposal) => { + navigate(`/proposal-details/${proposal.title}`, { state: proposal }) + } + + return ( +
+

{title} ({proposals.length})

+ +
+ {isLoading && ( + loader + )} - const handleNavigate = (proposal) => { - navigate(`/proposal-details/${proposal.title}`, { state: proposal }) - } + {!isLoading && proposals.length === 0 && ( +

+ You have not created any proposals yet +

+ )} - return ( -
-

{title}: ({proposals.length})

-
- {isLoading && ( - loader - )} - {!isLoading && proposals.length === 0 && ( // If there are no proposals matching the query -

- There are no proposals matching this query -

- )} - {!isLoading && proposals.length > 0 && proposals.map((proposal) => handleNavigate(proposal)} - />)} -
-
- ) + {!isLoading && proposals.length > 0 && proposals.map((proposal) => handleNavigate(proposal)} + />)} +
+
+ ) } export default DisplayProposals; \ No newline at end of file diff --git a/client/src/context/index.jsx b/client/src/context/index.jsx index acd11795..71cc1c7e 100644 --- a/client/src/context/index.jsx +++ b/client/src/context/index.jsx @@ -55,6 +55,27 @@ export const StateContextProvider = ({ children }) => { return filteredProposals; } + const vote = async (pId, amount) => { + const data = await contract.call('voteForProposal', pId, { value: ethers.utils.parseEther(amount) }); + + return data; + } + + const getVotes = async (pId) => { + const votes = await contract.call('getVoters', pId); + const numberOfVotes = votes[0].length; + const parsedVotes = []; + + for (let i = 0; i < numberOfVotes; i++) { + parsedVotes.push({ + donator: donations[0][i], + donation: ethers.utils.formatEther(donations[1][i].toString) + }) + } + + return parsedVotes; + } + return( { createProposal: publishProposal, getProposals, getUserProposals, + vote, + getVotes, }} > {children} diff --git a/client/src/pages/ProposalDetails.jsx b/client/src/pages/ProposalDetails.jsx index c0dfa1b3..e22adf15 100644 --- a/client/src/pages/ProposalDetails.jsx +++ b/client/src/pages/ProposalDetails.jsx @@ -8,7 +8,7 @@ import { thirdweb } from '../assets'; const ProposalDetails = () => { const { state } = useLocation(); - const { getVoters, contract, address } = useStateContext(); + const { vote, getVotes, contract, address } = useStateContext(); console.log(state); const [isLoading, setIsLoading] = useState(false); @@ -16,6 +16,24 @@ const ProposalDetails = () => { const [voters, setVoters] = useState([]); // Array of voters on a specific proposal const remainingDays = daysLeft(state.deadline); + const fetchVoters = async () => { + const data = await getVotes(state.pId); + setVoters(data); + } + + useEffect(() => { + if(contract) fetchVoters(); + }, [contract, address]); + + const handleVote = async () => { + setIsLoading(true); + + await vote(state.pId, amount); + + navigate('/') + setIsLoading(false); + } + return (
{isLoading && 'Loading...'} @@ -66,6 +84,31 @@ const ProposalDetails = () => {
+
+

Votes

+
+

Vote for this proposal

+
+ setAmount(e.target.value)} + /> +
+

Vote for this proposal with NO comments or adjustments

+
+ +
+
+
) diff --git a/tsconfig.json b/tsconfig.json index 84f59a7a..8aece21b 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -16,7 +16,8 @@ "module": "esnext", "resolveJsonModule": true, "isolatedModules": true, - "jsx": "preserve" + "jsx": "preserve", + "moduleResolution": "node" }, "include": [ "next-env.d.ts",