From f7c2855d7661197965fa3cb10a1d1ed6f7696d24 Mon Sep 17 00:00:00 2001 From: Frida Jacobsson Date: Fri, 23 Sep 2022 09:22:18 +0200 Subject: [PATCH] Create "BazaarOverviewCard" that can be added to Backstage homepage. Change-Id: I6e2565360cb3f7af27f60a0336cd87a75b3018c3 Signed-off-by: Frida Jacobsson Signed-off-by: Frida Jacobsson --- .changeset/early-rocks-smell.md | 5 + .changeset/rude-tomatoes-behave.md | 5 + package.json | 1 + plugins/bazaar-backend/package.json | 1 + .../src/service/DatabaseHandler.ts | 18 ++- plugins/bazaar-backend/src/service/router.ts | 10 +- plugins/bazaar/README.md | 28 ++++ plugins/bazaar/api-report.md | 11 ++ plugins/bazaar/media/overviewCard.png | Bin 0 -> 91688 bytes plugins/bazaar/package.json | 1 + plugins/bazaar/src/api.ts | 19 ++- .../BazaarOverviewCard/BazaarOverviewCard.tsx | 141 ++++++++++++++++++ .../components/BazaarOverviewCard/index.ts | 18 +++ .../components/ProjectCard/ProjectCard.tsx | 21 ++- .../ProjectPreview/ProjectPreview.tsx | 42 ++++-- plugins/bazaar/src/index.ts | 2 + yarn.lock | 3 + 17 files changed, 292 insertions(+), 34 deletions(-) create mode 100644 .changeset/early-rocks-smell.md create mode 100644 .changeset/rude-tomatoes-behave.md create mode 100644 plugins/bazaar/media/overviewCard.png create mode 100644 plugins/bazaar/src/components/BazaarOverviewCard/BazaarOverviewCard.tsx create mode 100644 plugins/bazaar/src/components/BazaarOverviewCard/index.ts diff --git a/.changeset/early-rocks-smell.md b/.changeset/early-rocks-smell.md new file mode 100644 index 0000000000..e35554f03a --- /dev/null +++ b/.changeset/early-rocks-smell.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-bazaar': patch +--- + +Added a `Overview Card` for either latest or random projects. Changed `ProjectPreview.tsx` so it take `gridSize` and `useTablePagination` as props. diff --git a/.changeset/rude-tomatoes-behave.md b/.changeset/rude-tomatoes-behave.md new file mode 100644 index 0000000000..880b4dffd5 --- /dev/null +++ b/.changeset/rude-tomatoes-behave.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-bazaar-backend': patch +--- + +Router now also has endpoint `getLatestProjects` that takes a limit of projects as prop. diff --git a/package.json b/package.json index 40e2056e8c..1013b2a049 100644 --- a/package.json +++ b/package.json @@ -46,6 +46,7 @@ }, "version": "1.7.0-next.1", "dependencies": { + "@backstage/errors": "workspace:^", "@manypkg/get-packages": "^1.1.3", "@microsoft/api-documenter": "^7.17.11", "@microsoft/api-extractor": "^7.23.0", diff --git a/plugins/bazaar-backend/package.json b/plugins/bazaar-backend/package.json index 131959cbd6..31ae4c6cb5 100644 --- a/plugins/bazaar-backend/package.json +++ b/plugins/bazaar-backend/package.json @@ -25,6 +25,7 @@ "@backstage/backend-common": "workspace:^", "@backstage/backend-test-utils": "workspace:^", "@backstage/config": "workspace:^", + "@backstage/errors": "workspace:^", "@backstage/plugin-auth-node": "workspace:^", "@types/express": "^4.17.6", "express": "^4.17.1", diff --git a/plugins/bazaar-backend/src/service/DatabaseHandler.ts b/plugins/bazaar-backend/src/service/DatabaseHandler.ts index 352866b4b5..8fbe985a10 100644 --- a/plugins/bazaar-backend/src/service/DatabaseHandler.ts +++ b/plugins/bazaar-backend/src/service/DatabaseHandler.ts @@ -175,14 +175,22 @@ export class DatabaseHandler { return await this.client('metadata').where({ id: id }).del(); } - async getProjects() { + async getProjects(limit?: number, order?: string) { const coalesce = this.client.raw( 'coalesce(count(members.item_id), 0) as members_count', ); - - return await this.client('metadata') + let get = this.client('metadata') .select([...this.columns, coalesce]) - .groupBy(this.columns) - .leftJoin('members', 'metadata.id', '=', 'members.item_id'); + .groupBy(this.columns); + if (limit) { + get = get.limit(limit); + } + if (order === 'latest') { + get = get.orderByRaw('id desc'); + } + if (order === 'random') { + get = get.orderByRaw('RANDOM()'); + } + return await get.leftJoin('members', 'metadata.id', '=', 'members.item_id'); } } diff --git a/plugins/bazaar-backend/src/service/router.ts b/plugins/bazaar-backend/src/service/router.ts index 359945f298..f902d0e8cc 100644 --- a/plugins/bazaar-backend/src/service/router.ts +++ b/plugins/bazaar-backend/src/service/router.ts @@ -92,8 +92,14 @@ export async function createRouter( response.json({ status: 'ok', data: data }); }); - router.get('/projects', async (_, response) => { - const data = await dbHandler.getProjects(); + router.get('/projects', async (request, response) => { + const limit = request.query.limit?.toString(); + const order = request.query.order?.toString(); + + const data = await dbHandler.getProjects( + limit ? parseInt(limit, 10) : undefined, + order, + ); response.json({ status: 'ok', data: data }); }); diff --git a/plugins/bazaar/README.md b/plugins/bazaar/README.md index eeebf6eb19..6168b0c4ba 100644 --- a/plugins/bazaar/README.md +++ b/plugins/bazaar/README.md @@ -64,6 +64,30 @@ const overviewContent = ( {/* ...other entity-cards */} ``` +Add a **Bazaar overview card** to the homepage that displays either the latest projects or random projects. In `packages/app/src/components/home/HomePage.tsx` add: + +```diff ++ import { BazaarOverviewCard } from '@backstage/plugin-bazaar'; + +export const homePage = ( + + + + + ++ ++ ++ + ++ ++ ++ + + {/* ...other homepage items */} +``` + +Specify how many projects you want through the "limit" props. In the example above 4 cards is specified. + ## How does the Bazaar work? ### Layout @@ -72,6 +96,10 @@ The latest modified Bazaar projects are displayed in the Bazaar landing page, lo ![home](media/layout.png) +The "BazaarOverviewCard" can be displayed in Backstage homepage. + +![home](media/overviewCard.png) + ### Workflow To add a project to the bazaar, simply click on the `add-project` button and fill in the form. diff --git a/plugins/bazaar/api-report.md b/plugins/bazaar/api-report.md index c6afde73f2..2e6ebe6746 100644 --- a/plugins/bazaar/api-report.md +++ b/plugins/bazaar/api-report.md @@ -8,6 +8,17 @@ import { BackstagePlugin } from '@backstage/core-plugin-api'; import { RouteRef } from '@backstage/core-plugin-api'; +// @public (undocumented) +export const BazaarOverviewCard: ( + props: BazaarOverviewCardProps, +) => JSX.Element; + +// @public (undocumented) +export type BazaarOverviewCardProps = { + order: 'latest' | 'random'; + limit: number; +}; + // @public (undocumented) export const BazaarPage: () => JSX.Element; diff --git a/plugins/bazaar/media/overviewCard.png b/plugins/bazaar/media/overviewCard.png new file mode 100644 index 0000000000000000000000000000000000000000..676764f6e4a40990930796f49f94f848afb4d1b6 GIT binary patch literal 91688 zcmeFZXH-;Mvo@-t7|2;b1SKbd20=k+l9EBPn?w@sURZl(jRIMHOQc();4%MA2SFYg6NK2|* zxpJ%f%9X1hZ(##}Qitt)aODc!6&Xn}H8=hB)d)E(bv%{Ee)_~A8kabl zE>iN{^&67hK6G?D%mo2&1L*R8g_x2u+?MW>ap-$W>w1WuNy*c5}I#=F`B^35rzRsMfrY2YUn|GmQh;B7u)5@`ldxcx#K z9+l`6%Vn2y>ozVWD2r2cz+mDXJou7JAMm+e@ZI3VG?tabg3wm*^XN;4OLnX+nbN<(g1!r?ui_FHP}w-t1Kg3l&)yD(vI)*=Uv9VLHQ$u5igpDTZHBmQW< zdw#klWEX8wX@re}JYx?ik+@{deax}1=dqTDP*|$b6`LoRM#|LPex)4>X^6dC{v-TL?2Q#6s(un|HfmPhQ!%V4rvdl*F;v5RiMbLUrnO3LH6H3` zLn-&-athuNTyk)3(c5a-2sd3XP`A0=CM7i9=xxSQ)n$$$>Ue#|`_u-o`@pYn#eE#U z=R>+QzgaJNF*d&s+a85dkrEWng*Y1uy~|^4IJ~rZ>7rcM0nFeOu>SG+mufM8cN${g z?6T+HI;tbNQmlrdlpBe~F$(bz^T1jv8^wnz8;`6Utf`+C8E z!C5U&_dwre?-HfGt@hx12aB&(PB>X}`y~t9{ft@R8AlHYt7`nU$t62cd!BZu6uVqr zy|VSqB?};5T*I6P3ktWjCW@x~PXP0|Eqk#*&-G%JNBIBggrfdLdE&6`>Hw{rZ)}P4 zmj&JN^#VdG?rtaVMpf}kE@?t4?GCCn?tZ!a>1qV~rJivMFoR(%C0(fRH&JISG7(nnN<^%|Z9uUo| zInvwzX#t-;V2`f=M=W1U8oI;=1Ns<0I>!g@p!!kmWmdp?`{xd>4sh4pxMU03FEDOE z@rk|%6s0JbU%%7E?s5H~PiU(~)4*$V`pt6k<~y86uTx>?Z@RA#jF1$Uwoz@S`Qppk zZMB2XOY66qPO(=vs@9tx)vtpD7Nb@9pQYaKpfKi0h2bv>MRtzO&Fz4>pWi)s>L?o?prF%yO)7Hy|-)g4|$ z_HvM(be*!7s-AY4WK8v(^P@=ewmm=wYrR+=3Hm&Hwj|J-;@u!J#tMaR&k5;YIRgFl zM*IhW#|~RyQqB^U4y*@MuqJ#sH7tC7w9u=U)tgEc0;Mc@uu<0i2$Py)NVZ7JdpaWM zr%T)KC(dk<>sZgtcpXl6ZKdM;1#0FWE`r5YDgjba*-MK)YLD(6NSBzlF7I7xI&9pk zCDYX9L80z@tk0!*?sP)$;&=4}=mjeeQNcy8Y9eGO`_)tx7GH!?#hCIZ7zeRN&dU9q zaOmcoWMb%u{uS7iRllVo0IB7lh<0witSYTFeEbEGqD-K--E! z8x@`6DR}%p=o<5?P)|{N!#b(~G>8u4>(+G|e7>0#rO5U(0h(Zu^!^^q+=?c< zc#(y9K(V}My}Uo=7Py@j=Ba)6w#bB)mJXTM!MK@Ceoi2B$`4krb*4n?`R_V*jlU8m zKFNvut8`e>uFiyUmxr`O3~($U>PIznYV};F9}CA+8N2^(zUd+4Jce#0^Q^yr?QfFu z1%t#DlbEcZkTX?u{tzq3i36qCUR*u1iZ62X^E+uqs~Keg6n;1ho3*JLhu%=Z;cECS zwB157Jd55hfjPrYCug#SGc;8L%^to#~l>Sjgm z9bL0z=OND2=oRQj<(SLbr}|Hc&fm4B_lA{HP00pp(Wot0ePKyc-N-#q`#r}ea1L^9 z^9KSz*}@Pv?0SBPK-U5|(IO0NU74t&GJI3Yzv|?8ddqvc3AJHYAId+`G3~L{s2ns> zRwlsyov&`IDf%!Dah9#)wLdDSwC_uMMn`2>Qr5+$2pN9s*%CmsIjU)(uqpL0IfN79 zFLGLJ=hfW{MxWUN9^pdkwHM(5>~jjZh?vj29<2R9xNLI4j^$RKZZ_;H=3a%_N%2DA ztrP}RC}49+O4&}81&54rx}bb!SYFd;pUb3;K<<_~0rK~KXYlM%o4{1VZr_^P!QqTY zzwqgL`KHg!`_h~2sZVp@Ht{FlT)S9vodBnB9^zNe0r(kcylJ&+($+Cf-`yg?yN1it zEZ*otRwGww3$YB8Wjc6M&$t^%192llH~$KCTSiQ%=VL-u>% zi#{JiEzqK0YwEv&xZB34F5(ezS`OD3B!rSbS~(ly%W|}s;`;X7jYXoQZ;b%*GXnZ~ zB`1+-BCv-8@H)gPfYcw6)}T`91s&6f=SiO!lf@?@DypI35(L70wE{GuJ)o{LdWH7H z_=?t}2&wyUPv(A2!Dw=&;))?z8IASVLOV@6=1^)Td(@Hu0?wV{*!Of=XsaP=Bw}?J zc%HR2&HAx%T@R?6VgF&T)W%N$k6i#?(@^6Q4DU(?HyzCfv*1LME7>$`w<*>|^W7iK z=1W;lg^3K7V1K(-2A#Z@`fr+{Eq6h}KC}0LsD5=uXEf*0{_HX>`-U%6(+@^J%SHjN z3YN`HDEXiSM)8dkXu}nq_S!izeRl0&r#jWhj9~tvMYEJQOj;2{P*vsHN^KVTk_2$G zvJ}nYr~1vhy|FjtA(G`KFw|P-ED&wlu6u)0hd+ke+Bt^DcKA(V;Xp|eIZ`FEAU7_0 z_WK)wl7@z#f7O!-0D`G!)-YK#NfT?YDgG%{@@FuVGBrcME;iyfJwGv%6M(z?`C2bF zG{FSa{6!Tk#5G}0<^w7kS0#kukdtoB4;=6SQ(ZP8hCBeLL;@pnwVJeJ7_cH*qRS+% zB}~|{uvPL~JMjO-Nk#!qRRkZv_|$}PcEMhpCzO)X41=>-=?9v2cY5zp=(`z}eUZhE zKePXaC-B7L(Hzf02rm<2I0Jr`E?+;Fk=LO0;^ckVdMqWU(<8WEG?Czl+YXd+#SG;5 zi(o})ImP4C>2^45-IT727Ire6I(599Iy-_jQ>3+&VD(96pK?W9#L=NcQ!ttQ*&F@z zurb>Ejc`Z>B)Tf=kSXO1FL*E&eYT7o0~yn}{q(_emgD3fo^7nnrYsNX%E$dV1f`|{ zX~=Lb{>7OGEHPZIDTKx%b_FjD6m&LEfe4Vlp7|owfhy}{VWWChQA5G}X9?%Kv-IXP z>|H^oR8I%j0kNB8kC;s)%s)^9e5ou!+_)29T9KwdfBS1xN?&=&ln8{tBUIy1C7Vql z{_UF+{@P>14~D}+2%{AEwaS>w1muu{+S%#o)my!wnOpN*FSE6B5Q{N+NLpq5d1SXQ2Ygb>Z-bjlvQ?^0A*n1ITOhT1IFxKR=LiDNxRgM z2>cDKCJaG9YtXDLL&Kp!U^!%3^PGQ-SX;?WePkNjIhH8U-LY2z(8HYBu^^g2$u5PB<&b(=rv zWz9{BT-6$K$bzv*1n=>b%;n*NJdQX^ccGLpTZpHHY27x?pg7jYuDl*refE`n8Ud47 zt=G*rNH#iYK_6Ir6;kZ<7q)>j?jSokGK;w99zKOc5J{~Bbk!_`M=6Pn>j4k1^ry$> zxn&$=w<^_1A<|?@<@V=!(INMqg1Yn@Tgi18v~$7YA1tef_-5S}LK)=B%2ZD25w|{9 zAAOzu7eTpti%$XrBnH*&y`XfW*4Y41uyt7{Q)jsB_(@di8G`~>Vf1GZFLHoRr_j0~ z|DnNEssXFl)q6v7xiA%%Z~z_*I{PQ)rF;!(VCd7?X-cysA}`z8#aKCS{OYqo*?SO* z!E~Rz7D7BV=U<1<@vAxR+^jh%!YA)aJQ8B zVkbUO_g-8Hh?6zB1V2!n)(Z6P8o$7rHGAiv>~df*wnM_4kc5?goHnKJe4RrNdP!{lz!?VYteN$ zooUXtl(#4wmJitU;CCT6pZUnl07wq$HXq2GROL66u1kfvF83c*wvrS27z5cPH66>(|Rxya(#QaHR@@@)kk^*Dm)A z(pG_4Pe;q3h+7N1yB)vg)-u(haOf+!FHe?}93#V*dO@;g9>8l~KQrP4_@y$3Vm&AfGbm$yqDo!x~y zOEe9YXYC(@R(2P@0jFe|x~4NW^j%3iZ;`;_V^`36b>2?ST~7I3om79E!L!4r)9J08 zwpgLf8hW07BnGprEapNZ>&`ST1NUco-k|7@F@(Tq)DD2?!<*19iLDGU);C z!YXYn>&7C~=i0QJ{7Vz$!b-1r4&Y63-(WgtLbT0`3=4W-)g#%TH7Bcu!?^s~HZEg& zu8-B93vb8#pyyGXg!}nRM)}`&XX#{NP#!S*Y_a;z^VYxWx3?GKT#-e!7B(uo=2bq~ ziJYB+I`%EjnjIVfI8HMK{Geg<;m<%5_jQ&r3~!6vz;pW-aTj4m$U{NXXWLo^l^s$x z51s*KN&1L<`m9HJ2zg;A-2wrma33e`Y%6QdPY26lJGzJZxCb;OoV9X9Kf)iK|6)82 z6(NwVW)!QeF@-vu1#1tG?!;(NQu(P>ZO;vMa72xHyIU!VV5!v<$C5i+*lY4i*-dhz zHeC^N6gN+H^YOax(uYb-#Pc=0&}v9z#Y*-0wuj?o!cN4s2B$btOVf173b0MXX8`az*n<7P>}18nt5_>EOsz7fio9 z*s}l<0g`HTHFLRqjd4D_jMnpa^CnQ@Du@(RG=t)fVqP9^S?MqpJ1E!bBkFQxf#QF% zK+nR15#e9Sr3%EBP1fEOf2kT3*`;W1#xiu$5T(aeImGU=g=y>xfdO2-;&CjvD?~VS zwLqW=^uE(Ar?DU9qH^qLLCq5*G&uM+j@EvIXM&Y0kW5v+osaG-RDwCEZ7 z+=%3?s|+o}x6m*m|8>5qkPer?PWo-8$2|40BN39NV8KpP^4ualo;<`)YNlhZ7u2Qu z5T)Q>6{QVB?aR?hK^S(H4<{3sfrO5o6ZIZS$@zP*|2(gYBlCu=c1KpL@Q}2~@vkVP zw|L4N|Hiq*pD;(nmsGpCb~45>B>Vtq?N-H0B`J7m?%*4D-tLYwhES;lwVIdQ&r(BP z47r`T=r+c{{{!e_FD}_-3=RRvp;>h=|0Kg=++53+X3^CuP(SkH?L|zTz^e&#`9Pb< z%y7jwz#hBsGe;@B(Rx?MR%04E#jwO}o-b5q*8(hzST#I#ouHc>5JbpKf$S;wsbnLX zLEL=QFN8+WEPgtZqz8oJv{Qmo7C%&((4zs#{2IQtOp9$J7i|E~+DJEjq3wOV7^SZ4 zeaeW|8%-Y?SVi{s3=V(Gbv!C!5tw$0iV`av&jiT#&+;Bh|5a!WX88}cMy5k`j zZKDMxqckPgeck*k6QbkrSWwCiN{JR;$r*B~h^cc*fkP8m1+$Ikfr>rRy1DnSE^C_l zg(g2<*T+G!`S_l#5efdz?kS^HxCx~9x0HG8;1&H36yPtaOmILb%5@6YgLJ>N)P}K4 zc6M_ilFsiz4}mH{`^`LWpLENBEG^8uJ`W(PPf@l1eM#Ai(~kYZQKvn*L!(=J(?F+; zX_4-#1oUBQvlPq?&@qPO!Ng7)T9BBQ5e9oPDf0&N?>))~A2n=ZZ-;W%NyY4E$LR+J zWpGySJ*DZoLLZ?bg#p}S%Tx;lS$vhEAW+L?IOHkF(G91QX;e=+$n9*U9CgX_18NL& z>hS%A0y%?r5Xp*`TKyqx)^oSFyTE7mFJ&BQj!}@4O=E#pV$<mHr0B@ z4#<+3EXTbuj$MGjJssE9^(TLP{9OP16XfI;Z@pW&{LC%K_0o2x;4fcI7D5FSD;~p+ ziW9Ii0PWTd;Fx*(YGA=E>cHHpDtrP9a}mezvN`E~Tngf@B!(yzH}kpJkSBr_sF>ND zeCG0y&Hgo8wr_yeosyywJmI8R34^TzExS!1FzwFg=A!;mzTE-k^n9Lc{4tag@7kEY z#|Fbj?(FyHtR~@4m*P!tgbn>V5z9a~+Nzv#p%1DN3V2sfk_EcW#SKn3WupfkD9dU| z?&O;Z7XbzqtW5!j39hoZPCJh=f-R|;DRDf<0di0Su8=1JiI@x5v84akEI^E(hN<}) zGoCDJ@HT+0u|S1S#6Id5_H;REIN4>wVufGrCXLg}vd{>C-$`af;NvwwB#AQzdLj(S zGS@8jqe>8fM+lISi1W4s5^{vK^XR&Ar51F;B3I!6`%p`x!mirQO*OErV;$%gSm+4u z_V7l9ybz?qs00GPK8;#W?4IW5rpSJ(1nO@lov>qxLSNHYLxUs+UQ)B85A0vOOPswg zhd2equdN2LoSrA6*23FQ|Ds?dkr<7ZIUWGvf=O(lo?nGkh4STHVN(W;GRpv&d{HM+ z1E~!m0Z5_Zjfcq z&Y%rYN}xSgOy3LYeLI};wTtbcvY3C>KH$n7blXdbc1)BUp0PMEeMAPNu(-+r5PPiL zpJwxq-fxBYmm$n2nK#gD3Qtd_hLym{@l;F6t}`Q3X|w)Xc3(Li_5_lpW{2^2hH*!QdVl}Qw31n1Vxgw}CEG7Z(DeP_SC&dL2wQB<@?!BnqH?{dUFP7(z>*j+;5A;<`eE!k<1TWEMlTM$et$)Au<|d2={L=t%pDSDD;v1 z(@w)qU)%v1je-5OlROKCPZxsNC1m5h)e*bvPH649GN2(C2a2o77?nv+e?G|>DDh-~ z>(pV!>B08TXjR3)5QSd+iAkf_h`ZS%6(H+3$`4=$AneX33=1(}pm^Q$FX<~ZTV@6y z%T(ZLydtmkfF#}4#NKby%uk3ZtId^Qg;h>Rr(j(!>J0Y)EtlTPE@&@k;@UDGu|wQd zR=`6(PJ0+R=fo;@&^24fVr}QOay(ZOIar44BFAkx^>^KkGPu43E?KV~nmu#rJ3)y) z2J`_bfMg`AYUu*qiNv9k!P!cr0;Ta+>n6t@9;uvQ>j2C-fXv0 zMB%bhsj(^8nE$8+G~Ov0=HzHn)k!hd#?6f2M+vx(AVm?ZlGymgBLfA5FcwI@#?C*N zw`GxrINhwTSI&G<3usuNeBRq^bKb3MMdgZ-51wPWW-rDJO0#Q3`@BH+(avX+J(gu= zU(&A4aDRC~hqqaI(v^FPhp3;hEMz=|1viG=7npI&6q?CPR|T= zJ>n?S&p_kjbPC8es|@lVFt$b4HtmcaRy>Zrem6!662X!|+C;ojap(q5&lYI1T5wcfx%!>p`jbL| z&~U96ke3IVE5zDae3+(9-6YUDS$qVj@22T+Frf6J^eOEtZb@suD`PH1$qu{ibTX6B zDB7?-!!Fax0Y3w%FfwUkQ&up&g3Q9WD}$3$et(!nsEQn7k)B$nE=NDg|9i+S+Fom4 zrAi^Pk4xCD`38kNpTJ78Q5&=pFGgY_*XilX8%xB{QgrAmn?<0K*&2DRQ2Q?w@_BSI zU10C@UMnYf?L&q{TJiM+p6-fDQC-}B6U{Glm^O+kkTE}MkX7UPgfR?+Xywr3D5n2w z!K=3_A}#;{D1i7i7~CdFg=~@K4xS=@V5BIfV5(Trcr%TdY2!O>f>U25&)yaJ;dNFj6N>h%@ ziFZv;T=X;nXm9LUSkQVO8DaYEpXFqgc>Yp2aXJ3XQebOP&)L!q1iU4eECwb4R#Jgq zs#aqMhd2Fs;9BJ{~{xV z9T(F%alqW5oi7@=m@nc6=8Ni9UOWDMCSZO{P3(`=$sV^p z{mW1oV#_kG15PxI7PWU@8d6jSM3)*DJptl1zd%{V)Bpf zVT!qhvvFWfZ0N60{PW|BIWfc76%)qa_Lpss4--lRxaB=>Z3U<9{T-aZ8tQ*6p!!_F zUh$Fz>S8bfZ|0+wqoZ?U@x#Bx7>vaX-vNGxF=2B-6wY6Pd~rv>;3aSZ8{^oOFL!dK zFENo5Fsg@{kxJHEj>f;lO%5*H!1b+GPNQ?@=p|OTd*zQC;J*FP%z0s!e{XXDbdeNa z$3wI=6q5cD$}o@mG>iZ7L_-VVDdtOz)O!)ZW33#+@_4`hR$ecTgo$y$3KArjc-fU} zl$cw9xd3yoe3#gmZb0e}uAIEO?RoDK3tUye5OJ(;9K30X_yRXC8O0;}V*xc~)ug{5 zBT}xB-n}tc9JP!{bY=fPLkU8(^gwy~ep@3l$fmc3k(M@K|*c=6Cdc-g-*#w8p4SEjpUd!oRM6>R$p zFqMtW`PO?0oV~p9#{%jjq|5LBbAdD+jKb|k9uKLjRDWrEi3yqR{#k&eNU)ask~^Z2 z#`w`J6BLeL^g8JJC4OXvnFDL)7#??4T)D&s=3EzUa1$6A(uvc>yUbPppjpoq^Se{m zF4+R-#k?hszg7-pv?cJ8SKQ_JCzxZufAbRmihK>3zxu}t zd_0$!i0

S~LTavD_tYdga>xrbPhL|2HlEZ(98SEG-_0Btn3hOPuZ<51U4ZCWx{Wk_gt}LnYwcckZoXQOo6FrVdr-BOJEF%kKr8WeLUSx zQq*bDm!u0P;1w9!L!;JAdgBr#y{&iw)}&DQZT&{l{{+G-KDL;F0bmQ0+E*7Z`IIQ_ zj~37X438H*?Zf*|wEyz{>M;Clm)Ag|_@JPz7_dcJ<#7fq+TL>oT zu46M@op1kAq`7(L+6JBInfXn~r>j0bGHL1;FIC696svs0L6gv2{cJUmVcXXQ8~E$D zM?BnXG4=06g>DgoC&b`ZqK1aVz!LzogBt=plbR2TkNpzO3KgbE%X`;9DDhhqbHrNb z#M&{Tq;|GAZYumP@q{LDD=Yl2{yn)e?kHpPa5&6Mvy*2iTrxGZJ0_a%*u(Sddc9F6 zwU>bTk)IOp4CcZ}@$ksHkRd#r0d%b3fZs<+>ul3O`8bPtln z_0!L`GERDb#6&zA5u4LBdcBfu!w3sAJSEpMkF)O>@`50?kJS@|H4mn*!S}`kWXY?x zr^*LTYj?(w$F&8hN->Ymv*D;SIf0X8f+=RS*A(8db%iikA`-1`?=~2JLP-rimR&T5FA2x9QwQy&_j*)oDf#R2GJ}c zzI$LKERUq?$nPk^V=+3ckPy0yES-1PpZ(ADj*vSempaG5MZH5`@bXbsS1q zAsq_TINZn}AH_9n_Tr=oB@uXJ0(+ClZE-~C`=y#}Qe$Pl+{mt)?IhX4Q?T$#6S5i} ztA9=KDspkH_un$6-$8pq$E`pojI3M@yiee# zzgO$0KMtC(@$?XahrX!XQ@V~d_c_BO_<2h>@i!BIjR(*c3rrD#1899{gx0-qYdRm! z-`vjZY3V=m+m@@%BThsG(xSp?0jw?tzVJk+qb1NcQH+~M{AiMG-y^XzI&VH&o*jwx z3306@*w@<3sq3oiRO`-}?>UqTxoO~d%B4=0dE1}M z*xHsQo=d%==tU=<-$W6d(5@h#QM;Z%#nAL#qQEzBZDSk~XAixJ5CI0ghi>yq#K2v( z5CE^FU;7P0N6CwrDm>ISy~|GBgElSt$`bk2%?Yz#0x0~f> zC?Fh$J~IUicm{PQ@O6(c-`|;e*8tCWGz;N^fRmMzey}zaWl(tY;SqE8aq#9#wiYNQ zm~IJoGpOX=qd=Ui8bvb3|HK6o%lC{h2_?iA-C6AUEm&zP+&l<;iRXfI6~zGYOnw;! zhqOUgEQhFBO_80o<(VaXJxCRa$bQJku&bkkxP?oPCls!Yf}m&fle70&ZzXCs{xI4} z`^>}Gf4FQ=bI5fb4v;o;x$^G!#yo(RDdSiGCzj%!&P_=Fc@{Fk|&>GNnLrg%iU|=3;Y9=cHUVN ze)Qd03Z~uiNN$8IIDg+pL0bdBWC#Y?J~G{g7${u)#fLrbH8wAOwNCpU#4ym{XNpbr zH7nL9+DdUW0X~?;xCga0l%|`ToCM5d4W;CAj#bbg0`F|0=7mb1e9lEjROP?ELg|e4 zt(p@RZtRl(`Eab!mlN~5dwe|Jw_niA{oq_>;PLK!OzOsyJwd^^gH2OUM-#)~Fd(K)u)^=e|LaF$&b*C{Q( za#GCva+nAXw#}mXPQK0!O9~uX+?_^pO&1}KniPS&Yv6sHt+N@AwI(LAZo7EB=u7lV zZpiho8b|Lsn~3FqQb5=C7DcTUCtja27do|0Xk}Hc{MRf1#BnSP`i7d)?rTZR_0qH8 z$2E!(kmKvB+Mn!?vy&c7)*Kb{bsq`JZ1oxNx92iBEY)u;+T_1}r1frRw%1j~y-P(E zZEKTlOtM^Hz){3wuw!rHCFWowfD#>v39_yGiQRXq+&!VC=G^>PPVk5*LmZ3E`!Km2 zz3~B$T0;h~x>RE^kmv4M6M?&WKyw*;_fy`?OEtKI4--B$Iy!8{BV**z^yHzSw|n47 z{1<{{8E7J~Zf}wGYA=Tb`WwleNo}iMmkI2*J-}l8}`8YgS0^WTJFOBct3cA0CGjFI#{dUQg<5=2M;g(0@HZ_B5#LJ1_(6l4^X66jJ zJ!ovc71sHx^D9Uj(j^{ZEO;!)BBvc|PpbpsRbTqbX$$^1M= zfBm6$>gpKPy9dVhMq@alIvf&Upp|fg!tNLDcq2WFfB8%q1M3!LnxJz*$2R| zNTUEUMHgOgW5D-W1!!M^EPl9c=JC(q&i48crVNi+!i>&y^OhxhK>0k7U~lTCp?EO# z{K@9LWStk=nq=}<2J*#q?71j%)MUSK_?B@yP$SZ^PguqR-$hjDZ2s_FJu#;LOgZ-> zdJuU-*(9aW&SANCe{)yta}NiJVr3gwM$!X%uo2A!eMYIv=3;!)*8J5syiiI+WptPN z4_gMBZa*!HcUScf`YRR>&C1y7<$DB;wE8Pl=9y(^!>FpJT)!P^@yW!NvQOVHczJUU z%aSPqsk{BWfUlbr>vd@w2@22i_wr@3&azrS37Wz$8)G?z&wkCVSvJ)1Ta})6vS^ z(i=cVYxTAl&HZlau;m5#^qR$lb^8(HtP)28iW0HcZ>R?{cQIcUX7WwqQx z#F*h)oO~cMP9rq6YV?S70EIwtNdBY2)MwVK5&sJK`v#)=UoDl!Ed*VoTfU=6x zV$x4e8I>?@2{PMTEzMww{Dmb`nsP$Nf0{9s8l>H!2F$bLZal5w2`VjAf7LD zJ)!xYhQ{E2RrKThG~p5Sao>2dNi1N$LV-MhJJ`M@Yf}s_{M8yM@_64x@hm`GinD+S z9JJN^nKP#0@RWaC0Zspqa9^+M^zk0>$8UdZ8BDpxpG)1FJTrARU`||t4WMt`2sn?& zSe5Qzsg5pr062aT{3QTP6x+c^F;QSktYp5OG{i`zBwMkcwwX1!>x1~yWZpAb{Z!Ml zXnxT>oxMr7;O+S*t!Qi%|7PQnG@o}c-hjb?LD$ksJbJstW(hVV9Yvc=PQL2~)hg=a zQu&npQ2yfpOBfIA-p^02T)U3^NG^pCvwF|-8sP3WR5{CgK(!Hao0LjzA1e8hOxi;1 z>0gAfc&Ek9sk7xfq6 z3H0Dbc-VGpxcKkqbo2KesGXV~I>!dkVyYC$H5_V84s~dzf8!O4!1{VfwN3ABADak3 z(fj197rJNmyXToxQkNI|;2&t-Gij zC`NKs`k1FwciK;wP^o=uXj1ib>+^u42$2?Vodli)fF|4XJ&rf z3l34_c||^pvNucHHe~lCYscc6HKcOpINOwIJt=Zk-ARrn4}5GSfzK7egm3Bi8D~b7 zaie;&7t|8&Fl_Mb?(GkrEAK;Ry*Rx@-d&~H&TN{NzH8tp?E&h!K|fFEHBq>Us;|{9 zwITsKY{l$36E;yKXi>_bO*~tuPH3B{D{mV4o=bh74mfeG-8OJdbiQzKDZ26cydPL5 zXOR>di9{ZS7d4<$xYmcG=Kx6_B}?A}7bg`J2zoD?SUNPG7$~8q7KOY^upPUDyzSO< z8Dw=f4)5?XPxzxm$wL2-7ZY3KyihO5Ug;6u@_3fxT5@Zp zTpL#q$kiM9C746lkD#5V*PNI>`L5!!)9`rMki+}N5ot>N8w>W8GBe`nDuPAnl3{_; zr;qdxrk!R7BJ~~M(!}~RH?z;>UCfp{8;=}?;N(N)+2c_TVS9BfD*W<+-MWZE-P3*X zeUIfSM)Dey<7LI?BH2+1&_^L81rH`G;$R2JRXb7^wKVIEAcE|DaNKL++V28x%X7 zL1#~=WH7t&>@$uIX%CL$U9q7;x=h|N*ibXR|8!Rg+G-` zPL4kkz_c_pQQ*+v>HBRt@)s8k?MV#Lj>pZ4Q@c!n@G6zt5{ASSHz`AMp6}4qAya}r#YhtqoPJy>KA>~=FX_#b z*YaSI%UtY_x7Li-&80Fk)NQB=?B(fh9X zsb58KPUPTA#CW;BJ)nyM(D!Iir-#nF#fD+)Re0I<_hqSgbYSkIvnNC4Cg;oo)lof% zX$WqZZqzvt0pahz(50aBfpn-`ZPEkMy5ax0m_m%HJf|e6v^GqdUm@O+e7Qe{mysE- zaIkhK!?>axgIovlnh`>}z0N~zvz~zy-BsAATAP{yg z^?Ng*ICbvM+jT#x21kGd(hHu@$|R+uiCk#E&9E=T>1&cMp3WH|gzh@N_nLJ=65|ct zMT}fi{e;SmB&w`5*zHXKZkHa|3)X+TtmaYtV`jeSc-ym~k)eg!%)(GICFN zv!rkUi1z!ZC*X~MEIc^y{&YUdU!2*WZNBc(=OLOMrm`ZMs zO{##tC|nPJSbfMo^C9p^+3w*nzS9uHHx1P$n-|d=Ebh|fRdFK#`L~?SCV>7<*$J0D zo5J3H1R})f2>ay2i%`82+QDw{3dv)n!pOYLy$mmU^WS%vynof(opVY74#{Biz_N=x0(mfZY;zlb&7H5^2*1YUAqt%#e@WQwCp_L=g-&pM(r3s$Seb}ik_s8;>%3nDu0Q!0dm7weTxdfhHb{zP5gUp$DDV!4FvCDiK1$4u8+|!vtnE z&CZ!O#3@e1TEeZ}B9Nq(xs|{$9cYrr+vx1;5u-jAIhP2Il)bMGY`fI>3qUJas1-Hv zwzU)-xHg{LFdZNYjlB}5a#cd;Hvi74DFzN2&(7 zsyU0K8mdqo!9`|*uA2qh{PLj_8pr(dgT#B-$=|bXJSUq5G^K-EH*BWvWXLqx3ILd3 znanaTrLV_A;Sor?`0!)6L3)dtys6|FkRzmt^PG2`wrxrwsq-n8 zBLwCPrUHNRJQ8-~HkDTr-5NMCrFZNpb#QYjyitIcVU!grgt=o&%zTJv5%ONSJXM_W zf|v#28tZfQ-_>PK!Gpi_b`)>7Rvq9~b!kGsf7+_%=<27*o=zK*$$tI9#8BRa!j8A8 zy-03Anp+*Uw95CyB3(5GX0gOO_5Q{kYUnSIu1Bwc|AEMN&tR^SgnZ_PdTg79R^!mF z-R4?>+PQE3%x!QdKhFhwHC32JmzMll2W0Gywt*VT-cx~%&idv)EY9`5RS;^i$0PU<@q;v+b+S zkUvuIEo>dUwtM!bG_NoGvdZ)yYx;_K$J_=+olDzdWhl0V`q1yayN~kWtzpP&A1djK zWDbxeMjAqlrQG|h+s~8;pU8sxp2P5B0A)T0nr207S+50!n|Lcnb?=-K@x?oFCRf;` z17+4Yjmr+F>Wk0$;^VP*7NWFrfKTV_A$G~{C<&=z==-^?s-Hu+t`HYASD3Z zrJSAj)D^(2VSpxc0c9Ecz3g6j#v0V2wdC(+Mg=g`+#2csa);`AzZ*AD@S_GwXd|P;#fF_10X)kql$%oha zZ0pX0X!DVaB6w^Sn2%@USz=!Sl^s5 zqwPIry3<%Nl}NX$A^E6Wn<$v3dhfayu1hU^?h9pdjB@VT8g$n2=Gm_J;m*x1QhKXK zdF9V{>5Ltdw3w_p?Pp1bswt2Sd39;LI(lCe~NEsJaASVJBtii17k9KS`0+}3O9zUyg zcqI2e*^;(fBF668S`Us-ygnOJJw#h7>x4NyTVm` zA54T;y(+k2^^06{5uJ24^@`UbOW4ng90NpOuLjMV*YD}fOC2WqT~sns_EY^wtRp_E z>Kxy{Muw9v>kSwrsN0nHr_VyE#LIWvmDhrE&f?Lxqm+L^gMvD*i+3^&h1><2R>^!Y zU7%W_SH1~+ltCV4`HOjJ%@=uc57v-@Nay{0{)&|8IJr9!(ojL!xVB2r<a|lhqtDx8 zaX1&hC%O(IpVse=E>ERy);~riZ^~>#xOh?LXR~o5_j}KTfR5$9pe0e|IlB4FW31#x zgG?|%B+wjd{}MoZ{>Xh5#z#WZeL@@D|3qhq!V9?{_wFd#BYvnoFAI@ygU$6vLSk)q zYRxR_FxxD{(Jw-X`t-S_%yA_p;@1gOtEKzI);AL<9bXOWWBC2NW{wAji;h(P0|LtY zfe{B>-<}4M$NN!&dAx%rbOO)69^FPU60TW3$mA}e!e3a8GU`D~YU>NERjcBs{vVpY zI;_e6{ayt{MMXdfi3t({qXi^q5>g`4rF4yyjtL?iA~G1M(o&M6M~@gG(gQ|!BQV(5 zeh=@@_jg_V!x-1KJ$pUpocrA8zSj<|$GbWGShIP>&;`MF_HH*Q?YMyg0Eh4OX=n>k zv*`VI+$sA0;FOF=;JIqe9|u(HkWvz~?M`GynFU8-+>;(~H<{py$e4Pdtq@PkcV;f%1RwhmNI>>^ zc@TJk?hf#iZk;I=r`7QKVXEP;fV#JoG}Md=&D^o5e>z_rj3!pOx8zo_Gkj9|x{^y& zMiRjix)Z;p{4z&Pv-f)2$Nq$^=+xh&-^<$T=_=sOXzzneM?3w!4F5n+!)7Sb>nMUV zck1(D_>ebaW|V$5&8_$Q)?d}_qOcwQEwINcV%JZ-!FwBf&#e(>x-)}Yo(5mewc41? z8F$L(dc~a~5pbCE@Z+Z3!$03EUJ$Q(77sL9{9<*CaV9^%Qh%&KXrG3wagN#VE&MU7 zky0Ru6zl^pVtBsy>T%5Fq*wE*z*y@!a#=`{7_NJBn>_?Uy0lM;94F%5QCl25P|)cDMJ9nEU6^I-j^ zc%aIf#wsScDb!z@$MQdaI`KSCa0UV(qCD_bmgo~R27$ZfvpnyUNCP3!W^-7fs6t)N zLa^271Aw*dr;CeFA%RAx!;6-MM+g8frVCIafv<3ngFf7e?O25^qJQlPu>k7O|GkN; zfavAB=+hr>#)=QnjcdrTqEip?PXBEo?@d#wc!X88_yUG16Sf@awQ?9Sd8g^OTe-(> z9&3H2!0Y`q$w9MnUptY~+kGcTMJN$+R+ID@4KPb_){$Aiff3V2$Zm(<9rYlbt?(aD zBpWJ*j990S#Z)GSq2+f$$hj%%T4u0A>zy`UPihU>)&R={d1TXmTK&;yUVD1t=x@mk zXDwta*q!@^li#7V6#3DEsQ~AuG{?3_iRzD?PZCS(K0}9mzW!*Nq6Rgs^!pG^kN43# z^_ek-fBR(n{yAaBUAHp_Aag=K>l{*JZ~xXg3qBg^lQ{ga-6pKyt_L9`*XJlqWPc~b zT!y;{U?er&wv5aII|bjZG>(-IP3;mBJldWzXbpFpIJOr#)px)>kPY~6MxLWSQyfU( zY~TOlbJ1i4>o#Xar`>1iS*nR5Tk`uoKDZfsKsj3tu&2B&Su z{;e2}F%?M+a5}xhmMrZdO+9Rw>S-VZFds(GI(Y&LwHvTO`uQCs&`jsV;a0Z&mnIg~ ziGl)HuIFL(1-$8)0FPzqsU)BczL62wZnD2R-R+h4C=kb1`^(5bSK4uY%ff5!fmeN_ zuD+~9Z;{w>u#>jHad>y$hf>(TAlcp$!gs5h@QmZrzmQVt`$)oij}yCvr1g~k@t}in zo%VL!On~(#Pd1kE?CH?zd!}d!&6%Ci6qu{mJ{$Ri=J?sF{)&KV&CSi7znYRce#_}n zQ)|aWY~${>k)5R-*XTF@`}v=Ia}#Ttr7JYI7UXm0qDsj9BQmYMN!-a6Y?*G zTc5$iS9u;i`q2S6$_|mj{c-*E9XEkZn223f-m^E~&j?C2<#zrZDM73d0HSH5nB6DD z9~ZDV4D=2-7umqe;NrvU3sMeFa~iN!NiSG{#}OTacv9ucKTOyTX40$CEw8#}H=SGe zLzJQ1J%_FNz$gQoafYi|X#QmxWb5WZZ46kW|53-=?YmL&HVPlY{MNU|5>PiQw&6j?19k7bOk@uW`4+YDq?>w52kXX9oiSB6vL;wueN zYqzKf&BlYejwqHX76zN2y!kVZdMOT1k7Hgc)f(icbjrkM*0O+OP4Kg9Ywo$@<#VkM z5_U|X0)NJ;^+{;i5_ipUct9KPz4ht}H?Y*orS3BY{5tivu-DAHosXxZdfk_!29)}& z;T~WI%@^Gj>Oc`+Sxep%U{Nz6E>gf<*E@_;i>ek5iwC|dM4T%3`0CjMQvNn%T~v^u z`S{@xZRrs%-&vKMRfrarKZKM|mNXJ7hg_pRCwUHx6U;1r6C7Ra3 zdAnbVVz;qW9&oi&V=Q8g9jK9K+%Qj+aR5E?V~oHfr`n#*7mRXlNvY`02&_=8`96*Y zy3qr$>cANRfp#md7}X6k935~r%zVF8+cck>`r-QVDH>Em4I-5uy4oAze?{LTgJoBU z+a^YvE}vuAyo{U#k<%x<+|DP=j^OgYVh%N*w@4!^H6y3Or-74kapl7ybf#wpd?QKa zB%g`o2Z8;ou(#5I1;9ifR|V!B8-T*$W~;&r&cNk5&%!L=c)o_4$6P&=9PQi>koZ6S z-i7Y_sO(xNK+WlNA03zR4=W87S{l@mbn_!``2T%uf6#D%m~s6s_=wa}wNj_42xIS} zTu?K5PYOE$2@iP21sVY&%|aD$(jN#`04$WK!3Dn>T##W}_&XzbdI#gZ=ONzfKh0yf zBlhDkWd-C_p&?p@?Z<$V6b{1cPZDj^qD|Y2MbZA-&T-QVGi4Fu&Xd_&=J51cV{xM? z%PWcLeOzJ(i`umZY9eQ?FMz*N78rY@8jo|iu7WJFA|@udP!)k<8st0oTJ`c7hq2Uv zo`UHk>(|nRvij+1$+^n1bby$ z%}rwK`>=l;=A@}6T!`h`W8isAK50s&&zsY={`e#JjD|Q_Co! z<>i<9QDF$9BIZ#pG5!Cu06)6G6+u=dHTy7{8rWojuuZ};?qvPd_D7gWvYILA_he`F zx_>fZBLK-|owYOJc~e|dI)molWD22Nj2`cOE@@CZ_~_{dLmcqn!$XLVBe-sR9DdQd6;5VuFD zKLQ&wUQTjx8CQW$)6w@IfNy0S4#J@3_W9Vq(ZNYraaiA9n)-O_M^ha zJX-B2B`{F+5xerMVmi+(Fh1GJ^6SaLv{YRlF0c*iL~qlJkt{{LCz)SKp4+auiFEfe zG_LEJKWwo6iM3lBnO+sOpsT>7c$PpNhc=FpW)__&%>?{znYuEYd&P~gy$X5k+rPCq z{{UGpI8@ZVw4?nbFLNRQ*5NVz1AcKsRJ^UoGBkB(@|f&`mDr|`9Xobx-4J+S?Mh|p zXKD_gfSy!Mw~F^=B-=DGiBE1lUUzURLOi57S@F?A$=CDmwNd@%=PeY&&uwrSF{=XkO9`JV6CZV;v{ct)wAmrmUsaHQAK20or0N!)&q023-4WYD#h(ZaBo zMP5kCI0d~Y?gAlvqfPc#`r+kDD8I|!VM|jwi#3{I7PjKT8MpAf$SHYss5PCP>ITQtfX?nw~z{>xrIC+ER{ z`h{`t+$+!FJ%f{I0I|9pq29ZSR1m*=?w&B51ad!LMvi?)K#q! z03>3Xo&t+!HV{?~2FniCv-n!|Wc!XEu^xS_G$lH}% zCdnzbs{OI)%bEtucg1_7%N_Yj$EzuXVgE7^zM(aDZPKw&+u+q8q=^YoS~w4clMi8Io6uKRvV`N z+TrCYpQl;agvYkX4->_EY$=-x=4Z}8eTT;RcCb0+rV+p_pT%B!2mPZ-^&eA!mDZ2q zt0%$Q)(wAl8b0&P3`O+6ac0ZzOy{0g%EHG-NE}R99?@;vC{#qtFRB_T*-@pwuItXo zs}jumb^{uRI!lqA*0o0+cB8uwZa1;gn0h=o4zY@q9*ed+O%<#4w_8q0g7}ZIy&E`a zlnmlth(4}4>&oaGQ}D&Bnf7@c1w2PF zL7Rk+kuTK4@;f7TZb?*Nq9hR?eyJy~C3i%7q6}aT$O`6l-HPOzmS8gvf^h(xMK6xA zN3JRb@c?CGjez!5B3Gj;>M6(`PlswVTB2d%DRV2X;>cn1C!TTQhG4_iWMlI113PJr zsSmtfCCoz3KHILx4yjM-7cO@s`6ZwRY$mE>E8V)l2My)k(8B=nQDfV(jhscy1I#y{ zAt_H+f=Qra3ODbwdzJ}&;#gY1S?=^I{{=1yK@=#ms}mnafyDLUAz51!4gJy0QU>*z zPG7sHk5s`s8RgZ1zYsGY@FZa0@_zw9|IF+GD>>)%Mz4RRLS29%Vk;N8RzRlhq;ZCy z{3&;+4Jbu5m!ku$5l_PE>HCU~d0CXENN$3vy`_4%;WMn5w|&}IsorR@Pndxcl*ks0 z)j8lQ!hJ-z8`yIeEpNXiIOWNh`8Dm>#YowuR*-8@QY{tx*xpH;jy$SXMq+FD!F*A# zJld7Y5X7@7zABIUa!u_XQtmYf@(bolRK&UZjr)aQvZIL~@YwUKPBZ;Y1xIy7mrSSU0R`jrS(p1A{(7cTp4IBK(6Isq82 z4nWWq2q{YdA>}oozX9X{TEPzhGZzRclX?F#CvOVsgfTS{>}6U> zG2r=3W@oz3!Wcw%9HJ6UPiIZM%DE-qkdq@oe<^W{|5Z|MIDb z1nan2s%S69+2}T#vym76f=H?QzilZuiQ@xo$pSprsD~>ug@{y&72f8=c|WQMhl`u++!n;RK?fv7%`lY|4XT%a_WZ^F_2J$&QQ&7 z94%^KvEEJC!QJgXO^6yfaQD?leX4pkuz$U%{$Q$bEmhx#pM;4vF-|aa0`$$5Lof-UsURtOtYqyb4PDr&doD=b z?!JS%yLsnL7Aj8qrUXX`RJ*~qA+-3^cr03gD%l%c5nU}9U)BjbVM^6k7^{Ad=-NJ$ zRW05;YS?#<_@j)r)`7f^05f{ruP&!>G2 zzSbue2`V&HOiJ(5|Cu<&n5^}3VBHH!XLGN2{KKlC-sB5!qT5^D!kx(#GvaKzrEG|w zqv|Ic!Kmnr6G*b19E=x`f^!mnp z>{(SLCD!{;k+r5X7rwTn>V>q*ti|zEZX?~|D!dJ&()Q$g)WmzrEivyqpIOCd<)$n^ zht#YQD5u&m*-3Lt2D8vQ_v#5Oo250g`Ukdy!>wsa8?r)o^PKa)Z+)Kbd4>}}&r!+n zJy54CW*OjMPP#?Rn7!w5xb{JU>vUWwy@{0z}mI{fo3iBCZ z;19R_@3zxR;?vY#g*1RH_u*)PwGI6v4~fwOGi&PDfyW z6~lU$N7GVuZF4oafYEUeVdF(eT~o3~9QLgiMkiAl9LazzZ8FU7c{L#LD8H8O!?#_v z(V}a=IZy#_9K?Gqvl5Ep-b(Tma+ni`@)^$);zB@ew@tnc)OK?rPc;*Oyu6Qv`}iSC z+Nt1w4Vi~KcYmP%DUhE7h4i`pJ4=T+>7o)Nf5!^KNuhSM#}mX2=IW0IlT-%~47q(K z>UA0Qx9@c&iRx@)q*1;D^!ZHD3%z73`vj?~SMdhR4^yMh{=iB;WKLw~vy&vC`_?Mh zV6+V!F%ZoK`yG9aBzusoe@c%nS;(`7Ygr>GoTVx-HVA{|6-kZ{^$|rU~T6K01YLsDn1pq&c z7$^ru{+xK`DIRH@i49$=_naPal(3j^EmCh*Fdm4#ExFq5*y@`dQ9a3T_sy!pr&Cv) z-RihH!Ac*Gx$zKSFy6phQ}nFXx#52$XIj`S4R|YWz6y*R76Yn0>v;p*o9rED0Uls; zX=pP2*CL53nLXf`Qg4d5Ss}*~VVces<1e01<0P>oXYCj<;fZ#_>w40>?s5(WQ&D79 z_lH4`D)}9$1R9aZ?m5#Prnwnt_4C-T8u&gJo@A7zmB|d=_ABtEUMN6H&`Oysvj?0l zEjq{yOyFjE*&Lr$ik+{^;$JfrC|*%GnWy%eG?C(hKJOTN&hGh!h-xdg+vhYF6@L-Q zDWlim`sSg0SnxCA^pv%R1lQqFW(J3T&@_LAnj6B_%ImC7CFohgQ^T~)V*?IeTkCK| z^BtfmT4nf)whJScG>RQ~97XS5BM*(bpzaTo&aFNhDzY||Z7o;Xgia*SAd4}%ehr#aH_R&ozmDGQ=?L5gsRZxT2vXy;Sb;a)RuM$0r8>gG5)mDE>;PU*Q&D=MO zhQSqK&>y)g`_Tkvb&Qx)s=?B!4cO#6Tgpe735=L50zlek_4h{i((bfplp3<01ThnV z)v}_9ju@?q{shYygZ>-OGz~n{%&?TkT}n$SIJGZS`V6V{X1=5H)}85$n5&h9>kjq3 z?2WRby~Hykh>OyccR>fERct{=ggcV-L$(VO8d;1^F|gjKh*d4$!n4Sqq}Hd?J)!ep*14qcJkGR<@JdLm(7GzQ!lBy@8Yb>!{#o*_-7|ARC=Z@qCTz$tyysHZ= zo_?4V2(@T}QdD4miuWxCz7Hq@wpB6BpU9x@45(Zprl1J2jx1~?I9*_R>=qRG zx(<)G@-e#Gb4Ah)8#GY-RPKPQBV2kmc4Mj@&iw*6>C_VMq)5*XBQzIBj1wiq2R4Ca zx7>xKEeD6xZu60eWe+Oyv5Xgn-^`0~LYG4fy_)R3`kFAUxNVM2S=$~n{eUuo(jNnP^AaKb16Si|yT&zz)HivwyBJ8=DqM+R2XwZqjOGTRQRwFgx<{|XFn zZZE~A{!Dg!^ir`$xCTe07X^(jZW^=nrCzZIb$hr~utYcEHoWMyRk$BdGU4kh{9b268ZZXlx^TVu&3DHhNg_@OL(0CMU11v=5n|cuaBpyTg^u-5?i{C3uTC3$hv4 z)dpD)WF`9KX%+Gcw8qtSn_H%1L12b-XMwT1QLz&)MqUXWe5jj$<^J|rUO{Y434>$h zZF1XD&Q*D`<7$e5EV;~^#=NO~E@r8Z{92f9Lt1Ye(NRT!R9LovX6(a_m98ScH1#KA zVu~^DQHG(70T|_mjS(BFo$}@Xf{tOZ%tr|mLO!s>^P!IqXnYRx96eSG0SN4La)`QS z*#K!%6Py&&#exnk;kB4kJh_Y%bqiYXFCfao${KOgu{Y=L)(%Ro+V~e+>cptpB1vA+0zJi@)g9_p zS2?C)fn|85llrciiH?c$$L>d)t4(} z?g##FO0^AN@IR+Sz>o1!r1VRZhyKE+cvFIjO=oFQI+dX54i^Ep`X`I+e-%q${~zbx zpI7#>gbyImnM{xzak-P)2g|Tk*grAYRBB*hwa2(UOMRYN5=z!FgxsWw|}F| z?5w{`I11#jsSz8dbT7@kGa@-!!i@TOoXGaflrzTlGHJM&)QykYYq!7Ke9j~a+(a?+8wRG*GftB;XAqGOxTgt>$p;@bU&Ms-GJ zzCC9f2=sI?{N;Oej;gUnr}L=?PEb7q1m*O+aCUaB05?IRV|oh{m2wuQlC>l zh@X0IgaFGd6dg_LOw(59#EVt0R)_-)KM2WOcRSjIOh# znbc{Qg^I$6VX>}FXCM%{78w&Uh@SSXf)@W%*++JOE&75y$(l`vDMo$e z7q`r@^=aPNs%@Xt226$hKDOi*9;6swpP zgsW`)L~nZvIQa2m1Lri4r;;t*4ZMOnrtKLv0&PRt&Kay1?4BUjE4L-ytF}(EVjjxxvR_;%5Q!5+qm)FDe(7(0=d8ZIw+acm{<;OEV79PiIzqIoTtDd-`^me`@ zoqTIg5haU;yUkry%}J#K!X;Y3l05Fg^!QADfs;Yq!Ud}F41EH;<*UbDq(l{ z%#me$cftr^)UT?}P;XEc9scqoEWBkCIC~wnDLhoRh}&sUDK4;Rp@9-*JjOe0lA&os#Vn}W>Fsr`#?L!DB~8uv z$9@jD<-|$h?@(*L{_%n74RXn2O?4yN_lH_rjA~;#E;H``2BK%rey8IcLLMpMTp}1I z!M_x87rHBUYM!$BEm$4t)N#T0#)8Q$;K5J$oLl9&neAd(tdQD^_TIs|0=*Yd!6S5> zAJI?Z&GNadr$w%iTWguv?KuP28A%MJf%)qs&7MCD)qQvR5d`izoh>uOW12nsd0spy zJd?AQv!?c&-sM213x{M;9i327*i)62uobHu^K-;u2Ekjb5)?qN_5LpOWZ_E^!R<2a~MY;mC6

R0rRcj1p8Jo9bK}5gJ5IPq$+Pu{`?J{ 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 id: 'bazaar', @@ -40,7 +41,7 @@ export interface BazaarApi { addMember(id: number, userId: string): Promise; - getProjects(): Promise; + getProjects(limit?: number, order?: string): Promise; deleteProject(id: number): Promise; } @@ -148,12 +149,20 @@ export class BazaarClient implements BazaarApi { ); } - async getProjects(): Promise { + async getProjects(limit?: number, order?: string): Promise { const baseUrl = await this.discoveryApi.getBaseUrl('bazaar'); + const params = { + ...(limit ? { limit: limit.toString() } : {}), + ...(order ? { order } : {}), + }; + const query = new URLSearchParams(params); + const url = `projects?${query.toString()}`; - return await this.fetchApi - .fetch(`${baseUrl}/projects`) - .then(resp => resp.json()); + const data = await this.fetchApi.fetch(`${baseUrl}/${url}`); + if (!data.ok) { + throw await ResponseError.fromResponse(data); + } + return data.json(); } async deleteProject(id: number): Promise { diff --git a/plugins/bazaar/src/components/BazaarOverviewCard/BazaarOverviewCard.tsx b/plugins/bazaar/src/components/BazaarOverviewCard/BazaarOverviewCard.tsx new file mode 100644 index 0000000000..83358c0a05 --- /dev/null +++ b/plugins/bazaar/src/components/BazaarOverviewCard/BazaarOverviewCard.tsx @@ -0,0 +1,141 @@ +/* + * Copyright 2022 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import React, { useEffect, useState } from 'react'; +import { ProjectPreview } from '../ProjectPreview/ProjectPreview'; +import useAsyncFn from 'react-use/lib/useAsyncFn'; +import { Entity, stringifyEntityRef } from '@backstage/catalog-model'; +import { useApi, useRouteRef } from '@backstage/core-plugin-api'; +import { catalogApiRef } from '@backstage/plugin-catalog-react'; +import type { BazaarProject } from '../../types'; +import { bazaarApiRef } from '../../api'; +import { fetchCatalogItems } from '../../util/fetchMethods'; +import { parseBazaarProject } from '../../util/parseMethods'; +import { ErrorPanel, InfoCard } from '@backstage/core-components'; +import { bazaarPlugin } from '../../plugin'; + +/** @public */ +export type BazaarOverviewCardProps = { + order: 'latest' | 'random'; + limit: number; +}; + +const getUnlinkedCatalogEntities = ( + bazaarProjects: BazaarProject[], + catalogEntities: Entity[], +) => { + const bazaarProjectRefs = bazaarProjects.map( + (project: BazaarProject) => project.entityRef, + ); + + return catalogEntities.filter((entity: Entity) => { + return !bazaarProjectRefs?.includes(stringifyEntityRef(entity)); + }); +}; + +/** @public */ +export const BazaarOverviewCard = (props: BazaarOverviewCardProps) => { + const { order, limit } = props; + const bazaarApi = useApi(bazaarApiRef); + const catalogApi = useApi(catalogApiRef); + const root = useRouteRef(bazaarPlugin.routes.root); + + const bazaarLink = { + title: 'Go to Bazaar', + link: root.toString(), + }; + + const [unlinkedCatalogEntities, setUnlinkedCatalogEntities] = + useState(); + + const [catalogEntities, fetchCatalogEntities] = useAsyncFn(async () => { + return await fetchCatalogItems(catalogApi); + }); + + const [bazaarProjects, fetchBazaarProjects] = useAsyncFn(async () => { + const response = await bazaarApi.getProjects(limit, order); + return response.data.map(parseBazaarProject) as BazaarProject[]; + }); + + const catalogEntityRefs = catalogEntities.value?.map((project: Entity) => + stringifyEntityRef(project), + ); + + useEffect(() => { + const filterBrokenLinks = () => { + if (catalogEntityRefs) { + bazaarProjects.value?.forEach(async (project: BazaarProject) => { + if (project.entityRef) { + if (!catalogEntityRefs?.includes(project.entityRef)) { + await bazaarApi.updateProject({ + ...project, + entityRef: null, + }); + } + } + }); + } + }; + filterBrokenLinks(); + }, [ + bazaarApi, + bazaarProjects.value, + catalogEntityRefs, + catalogEntities.value, + ]); + + useEffect(() => { + fetchCatalogEntities(); + fetchBazaarProjects(); + }, [fetchBazaarProjects, fetchCatalogEntities]); + + useEffect(() => { + const unlinkedCEntities = getUnlinkedCatalogEntities( + bazaarProjects.value || [], + catalogEntities.value || [], + ); + + if (unlinkedCEntities) { + setUnlinkedCatalogEntities(unlinkedCEntities); + } + }, [bazaarProjects, catalogEntities]); + + if (catalogEntities.error) { + return ; + } + + if (bazaarProjects.error) { + return ; + } + + return ( + + + + ); +}; diff --git a/plugins/bazaar/src/components/BazaarOverviewCard/index.ts b/plugins/bazaar/src/components/BazaarOverviewCard/index.ts new file mode 100644 index 0000000000..06ea623e1b --- /dev/null +++ b/plugins/bazaar/src/components/BazaarOverviewCard/index.ts @@ -0,0 +1,18 @@ +/* + * Copyright 2022 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export { BazaarOverviewCard } from './BazaarOverviewCard'; +export type { BazaarOverviewCardProps } from './BazaarOverviewCard'; diff --git a/plugins/bazaar/src/components/ProjectCard/ProjectCard.tsx b/plugins/bazaar/src/components/ProjectCard/ProjectCard.tsx index 3aeba305a9..dace9b8185 100644 --- a/plugins/bazaar/src/components/ProjectCard/ProjectCard.tsx +++ b/plugins/bazaar/src/components/ProjectCard/ProjectCard.tsx @@ -30,6 +30,13 @@ import { DateTime } from 'luxon'; import { HomePageBazaarInfoCard } from '../HomePageBazaarInfoCard'; import { Entity } from '@backstage/catalog-model'; +type Props = { + project: BazaarProject; + fetchBazaarProjects: () => Promise; + catalogEntities: Entity[]; + fullHeight?: boolean; +}; + const useStyles = makeStyles({ statusTag: { display: 'inline-block', @@ -47,7 +54,7 @@ const useStyles = makeStyles({ float: 'right', }, content: { - height: '13rem', + overflow: 'scroll', }, header: { whiteSpace: 'nowrap', @@ -56,16 +63,11 @@ const useStyles = makeStyles({ }, }); -type Props = { - project: BazaarProject; - fetchBazaarProjects: () => Promise; - catalogEntities: Entity[]; -}; - export const ProjectCard = ({ project, fetchBazaarProjects, catalogEntities, + fullHeight, }: Props) => { const classes = useStyles(); const [openCard, setOpenCard] = useState(false); @@ -101,7 +103,10 @@ export const ProjectCard = ({ base: DateTime.now(), })}`} /> - + {Number(membersCount) === Number(1) diff --git a/plugins/bazaar/src/components/ProjectPreview/ProjectPreview.tsx b/plugins/bazaar/src/components/ProjectPreview/ProjectPreview.tsx index 435d80408d..77c16ef306 100644 --- a/plugins/bazaar/src/components/ProjectPreview/ProjectPreview.tsx +++ b/plugins/bazaar/src/components/ProjectPreview/ProjectPreview.tsx @@ -25,6 +25,9 @@ type Props = { bazaarProjects: BazaarProject[]; fetchBazaarProjects: () => Promise; catalogEntities: Entity[]; + useTablePagination?: boolean; + fullHeight?: boolean; + fixedWidth?: boolean; }; const useStyles = makeStyles({ @@ -51,6 +54,9 @@ export const ProjectPreview = ({ bazaarProjects, fetchBazaarProjects, catalogEntities, + useTablePagination = true, + fullHeight = true, + fixedWidth = false, }: Props) => { const classes = useStyles(); const [page, setPage] = useState(1); @@ -80,31 +86,39 @@ export const ProjectPreview = ({ .slice((page - 1) * rows, rows * page) .map((bazaarProject: BazaarProject, i: number) => { return ( - + ); })} - = bazaarProjects.length, - }} - /> + {useTablePagination && ( + = bazaarProjects.length, + }} + /> + )} ); }; diff --git a/plugins/bazaar/src/index.ts b/plugins/bazaar/src/index.ts index 895469c031..0014c66b6d 100644 --- a/plugins/bazaar/src/index.ts +++ b/plugins/bazaar/src/index.ts @@ -15,5 +15,7 @@ */ export { bazaarPlugin, BazaarPage } from './plugin'; +export { BazaarOverviewCard } from './components/BazaarOverviewCard'; +export type { BazaarOverviewCardProps } from './components/BazaarOverviewCard'; export { EntityBazaarInfoCard } from './components/EntityBazaarInfoCard'; export { SortView } from './components/SortView'; diff --git a/yarn.lock b/yarn.lock index ac27eb8215..c710e002d9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4349,6 +4349,7 @@ __metadata: "@backstage/backend-test-utils": "workspace:^" "@backstage/cli": "workspace:^" "@backstage/config": "workspace:^" + "@backstage/errors": "workspace:^" "@backstage/plugin-auth-node": "workspace:^" "@types/express": ^4.17.6 express: ^4.17.1 @@ -4369,6 +4370,7 @@ __metadata: "@backstage/core-components": "workspace:^" "@backstage/core-plugin-api": "workspace:^" "@backstage/dev-utils": "workspace:^" + "@backstage/errors": "workspace:^" "@backstage/plugin-catalog": "workspace:^" "@backstage/plugin-catalog-react": "workspace:^" "@date-io/luxon": 1.x @@ -35073,6 +35075,7 @@ __metadata: "@backstage/cli": "workspace:*" "@backstage/codemods": "workspace:*" "@backstage/create-app": "workspace:*" + "@backstage/errors": "workspace:^" "@changesets/cli": ^2.14.0 "@manypkg/get-packages": ^1.1.3 "@microsoft/api-documenter": ^7.17.11