From c88b0948d19d8c44ae731693a9c82a184591b421 Mon Sep 17 00:00:00 2001 From: Pontus Abrahamsson Date: Mon, 4 Dec 2023 12:27:41 +0100 Subject: [PATCH] Landing --- apps/dashboard/package.json | 2 +- apps/dashboard/src/app/[locale]/layout.tsx | 1 - .../src/app/api/auth/callback/route.ts | 6 + .../src/app/api/download/zip/route.ts | 41 +- apps/dashboard/src/app/layout.tsx | 10 +- .../src/components/charts/chart-period.tsx | 7 +- .../src/components/charts/chart-type.tsx | 2 +- .../tables/vault/data-table-row.tsx | 7 +- apps/dashboard/src/locales/client.ts | 1 - apps/dashboard/src/utils/constants.ts | 1 + apps/website/package.json | 2 +- apps/website/src/app/layout.tsx | 10 +- apps/website/src/components/startpage.tsx | 399 +++++++++--------- bun.lockb | Bin 423776 -> 421464 bytes packages/email/package.json | 6 +- packages/supabase/src/queries/index.ts | 58 +++ packages/supabase/src/utils/storage.ts | 58 --- packages/ui/package.json | 2 +- 18 files changed, 320 insertions(+), 293 deletions(-) diff --git a/apps/dashboard/package.json b/apps/dashboard/package.json index d42751b093..725519b49f 100644 --- a/apps/dashboard/package.json +++ b/apps/dashboard/package.json @@ -45,7 +45,7 @@ "devDependencies": { "@midday/tsconfig": "workspace:*", "@t3-oss/env-nextjs": "^0.7.1", - "@types/node": "^20.10.2", + "@types/node": "^20.10.3", "@types/react": "^18.2.41", "@types/react-dom": "^18.2.17", "typescript": "^5.3.2" diff --git a/apps/dashboard/src/app/[locale]/layout.tsx b/apps/dashboard/src/app/[locale]/layout.tsx index b32dee6b61..72bbe826d1 100644 --- a/apps/dashboard/src/app/[locale]/layout.tsx +++ b/apps/dashboard/src/app/[locale]/layout.tsx @@ -4,7 +4,6 @@ import { Provider } from "./provider"; export default async function Layout({ dashboard, login, - params: { locale }, }: { dashboard: React.ReactNode; diff --git a/apps/dashboard/src/app/api/auth/callback/route.ts b/apps/dashboard/src/app/api/auth/callback/route.ts index e8363e10ca..2253a80ecc 100644 --- a/apps/dashboard/src/app/api/auth/callback/route.ts +++ b/apps/dashboard/src/app/api/auth/callback/route.ts @@ -13,6 +13,7 @@ export async function GET(req: NextRequest) { const code = requestUrl.searchParams.get("code"); const returnTo = requestUrl.searchParams.get("return_to"); const provider = requestUrl.searchParams.get("provider"); + const onboardingVisited = cookieStore.get(Cookies.OnboardingVisited)?.value; if (provider) { cookieStore.set(Cookies.PrefferedSignInProvider, provider); @@ -23,6 +24,11 @@ export async function GET(req: NextRequest) { await supabase.auth.exchangeCodeForSession(code); } + if (!onboardingVisited) { + cookieStore.set(Cookies.OnboardingVisited, "true"); + return NextResponse.redirect(`${requestUrl.origin}/onboarding`); + } + if (returnTo) { return NextResponse.redirect(`${requestUrl.origin}/${returnTo}`); } diff --git a/apps/dashboard/src/app/api/download/zip/route.ts b/apps/dashboard/src/app/api/download/zip/route.ts index e95bb1335c..e69fb45b20 100644 --- a/apps/dashboard/src/app/api/download/zip/route.ts +++ b/apps/dashboard/src/app/api/download/zip/route.ts @@ -1,19 +1,33 @@ +import { getUser } from "@midday/supabase/cached-queries"; +import { getVaultRecursiveQuery } from "@midday/supabase/queries"; import { createClient } from "@midday/supabase/server"; +import { download } from "@midday/supabase/storage"; import { BlobReader, BlobWriter, ZipWriter } from "@zip.js/zip.js"; export const preferredRegion = "fra1"; export const runtime = "edge"; +export const dynamic = "force-dynamic"; export async function GET(req, res) { - const promises = []; - const supabase = createClient(); const requestUrl = new URL(req.url); + const supabase = createClient(); + const user = await getUser(); const path = requestUrl.searchParams.get("path"); const filename = requestUrl.searchParams.get("filename"); + const promises: any = []; + + const files = await getVaultRecursiveQuery(supabase, { + teamId: user.data.team_id, + path, + }); + files.forEach((file) => { promises.push( - supabaseClient.storage.from(bucket).download(`${folder}/${file.name}`) + download(supabase, { + bucket: "vault", + path: `${file.basePath}/${file.name}`, + }) ); }); @@ -32,20 +46,21 @@ export async function GET(req, res) { }); downloadedFiles.forEach((downloadedFile) => { - if (downloadedFile) { + if (downloadedFile?.blob) { zipWriter.add(downloadedFile.name, new BlobReader(downloadedFile.blob)); } }); - // const { data } = await supabase.storage.from("vault").download(path); - // const responseHeaders = new Headers(res.headers); + const responseHeaders = new Headers(res.headers); + + responseHeaders.set( + "Content-Disposition", + `attachment; filename="${filename}.zip"` + ); - // responseHeaders.set( - // "Content-Disposition", - // `attachment; filename="${filename}"` - // ); + const data = await zipWriter.close(); - // return new Response(data, { - // headers: responseHeaders, - // }); + return new Response(data, { + headers: responseHeaders, + }); } diff --git a/apps/dashboard/src/app/layout.tsx b/apps/dashboard/src/app/layout.tsx index b48e4a5c2b..82c071bc00 100644 --- a/apps/dashboard/src/app/layout.tsx +++ b/apps/dashboard/src/app/layout.tsx @@ -26,9 +26,15 @@ export const metadata: Metadata = { ], }; -export default function Layout({ children }: { children: ReactElement }) { +export default function Layout({ + children, + params, +}: { + children: ReactElement; + params: { locale: string }; +}) { return ( - + { return newState; - }, + } ); return ( diff --git a/apps/dashboard/src/components/tables/vault/data-table-row.tsx b/apps/dashboard/src/components/tables/vault/data-table-row.tsx index 22d17101f6..6842a7c029 100644 --- a/apps/dashboard/src/components/tables/vault/data-table-row.tsx +++ b/apps/dashboard/src/components/tables/vault/data-table-row.tsx @@ -29,11 +29,8 @@ import { import { DropdownMenu, DropdownMenuContent, - DropdownMenuGroup, DropdownMenuItem, DropdownMenuPortal, - DropdownMenuSeparator, - DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, @@ -209,7 +206,7 @@ export function DataTableRow({ data, addOptimisticData }) { {data.isFolder ? ( @@ -292,7 +289,7 @@ export function DataTableRow({ data, addOptimisticData }) { {data.isFolder ? ( diff --git a/apps/dashboard/src/locales/client.ts b/apps/dashboard/src/locales/client.ts index 497c60f0ce..df0399041b 100644 --- a/apps/dashboard/src/locales/client.ts +++ b/apps/dashboard/src/locales/client.ts @@ -1,6 +1,5 @@ "use client"; -import { createT } from "next-international"; import { createI18nClient } from "next-international/client"; export const languages = ["en", "sv"]; diff --git a/apps/dashboard/src/utils/constants.ts b/apps/dashboard/src/utils/constants.ts index 0daf638909..b1b294d521 100644 --- a/apps/dashboard/src/utils/constants.ts +++ b/apps/dashboard/src/utils/constants.ts @@ -3,4 +3,5 @@ export const Cookies = { SpendingPeriod: "spending-period", ChartType: "chart-type", TransactionsPeriod: "transactions-period", + OnboardingVisited: "onboarding-visited", }; diff --git a/apps/website/package.json b/apps/website/package.json index 79b6042b0b..cd3019d246 100644 --- a/apps/website/package.json +++ b/apps/website/package.json @@ -24,7 +24,7 @@ }, "devDependencies": { "@midday/tsconfig": "workspace:*", - "@types/node": "^20.10.2", + "@types/node": "^20.10.3", "@types/react": "^18.2.41", "@types/react-dom": "^18.2.17" } diff --git a/apps/website/src/app/layout.tsx b/apps/website/src/app/layout.tsx index f869f41354..902125e49b 100644 --- a/apps/website/src/app/layout.tsx +++ b/apps/website/src/app/layout.tsx @@ -25,9 +25,15 @@ export const metadata: Metadata = { ], }; -export default function Layout({ children }: { children: ReactElement }) { +export default function Layout({ + children, + params, +}: { + children: ReactElement; + params: { locale: string }; +}) { return ( - + +
-
+ +

{t("title")}

@@ -100,222 +101,220 @@ export function StartPage() { )}
- -
-
-
-
-
- -
- - {t("open")} - +
+
+
+
+
-
-
- -
- - {t("live")} - + + {t("open")} + +
+
+
+
-
-
- -
- - {t("document")} - + + {t("live")} + +
+
+
+
-
-
- -
- - {t("reciept")} - + + {t("document")} + +
+
+
+
-
-
- -
- - {t("time")} - + + {t("reciept")} + +
+
+
+
-
-
- -
- - {t("ai")} - + + {t("time")} + +
+
+
+
+ + {t("ai")} +
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
- Midday | Mobile +
+
+
+
+
+
+
+
- Midday | Overview +
+ Midday | Mobile - Midday | Search + Midday | Overview - Midday | Tracking + Midday | Search - Midday | Transactions + Midday | Tracking - Midday | Mobile + Midday | Transactions - Midday | Overview + Midday | Mobile - Midday | Search + Midday | Overview - Midday | Tracking + Midday | Search - Midday | Transactions -
+ Midday | Tracking + + Midday | Transactions
); diff --git a/bun.lockb b/bun.lockb index 806a5a7a43ccf82e127cb3f0beacaeb8601e0d7e..33ca712c157af6bf1828181217c07bbb4bb8d96c 100755 GIT binary patch delta 39105 zcmeFad0b6h`#-+V=^Q#pqIs0Ds5Ckyl%a%*%rmJdN|bpzapRUT4wiYILS{0PdCEK! zGFMU|WXSJ*oxL_a&&%`qJ)hV2`~B}euls#p>w2$iU29%@?QQSY({~p49$BQgI657# z^JY|0{i`MpGuAjIWe!r_uw3A* zRde@dMHsi(!_zJja-_7T@_aCzyBSlm(Z36Y}`!iQ!+r|KQx{8^sP+$pyN!*H1S1GDp;Ps1Wl}p2M#(^s z!x1B5bQU9GMQMFS?1(~0YPYv$Vg}LSiOvIJ!w0?qPZ=0o6EjSV9WjtHFy!gJA_M9$ zq*2+xnH1Q~_HMIAr zBn_sx+hQJ{AZf5gBPH=ckOq*;?udhGctTW^b3`nfHhvVMgvR&8vd@R4MofmJQb=`a z0G-k&L`6mo87>Id?(6I|N!Aa<1gAidK`j_oER!%HDm>D8=-`2pqhSw4d-)?luz_7v zLPC6kbJXZ^W5jeth^OlLW{I6J8?pxU%J56Ql>At%u+bB$s0Q7N0QJ^rNE#kWNa}^e zsJM|)34$;P33S5-jw!>^yQ2Nzm?4qQ@dJd}*`j@TLPE>{6rvFEm0_0+N$KLkhdRgi zA0*u5{C1GkGCE#^h|}C~Dwks+sRg8tlZMIK=3>n^v=Ai?oA4otF_~tfegD`IQT<~Q zA`_#dVq*s-3JFmW(eW_}LdYvI!}x@7>M3DV#Hg6a;n6~5)PQj9WwS~eHP6uewbEVY85*9L=!nIv3>WNLJf+00g##^ze_d?RxVEH1?^0iAX>S*%ciTO+A zEJ1$MlLHbl9)>4`MCeCX)KLL`4 zP7K#OK%&iiBsJy{j*yhlgd6BVlH-CxF{AsCzA?Z5N*RftD7YcK<1Bcm|ShlVF07&T^Zso3waQQ;9(05xu&IppyZR7kBNNP#RPbxC9f<6n9 zrgWY1qJ0TkocLjoW*P))s>F!Okknyc^{He+QZ6KAD0R^t&Yyv#jQ8>Q^;};FNo&C* zNJ>AH^L@E&4M`Ph2uTI43E7(hRk=X~N<=N-Tv?_YS)~SIf(%Gn-MkIOnrwn@30-!;z)6Vq={C~Qf!VQ z=oq?5&!H249+IkU%;R71bUz@?Fm#d>2spstrgoT(ndYI5nCvnnwGu5{;jxKAsGUrx z1Kkah#)~N=xjoA5ifv_rJ@mfNX;=(Oj7p>#vI9ExS_-5c8CthGyQ?PO`%gSK{>!!Ba^OPoX*>ERp^9~+;r z8oX|W@ox1Yu1D|1~Cr6%d2yV#%~ z>x=!Gzgt{Lzj{#r2}#5Eh$~PcbXtjG<0Hcpv1NG;ds<0WK~llyK~hJQZz%HLy+nHr zcxvaknBlr5H6A*3V1Gyhv|!Q$wK%X`_KTO6P()Bh{*dI*ORC-!oeOScjNX^3t0rdp3KnmTNNa3*&~LnKzOJzpo#&!s1<%f!89(|2?SI zg@!-ZxI{*I{jHqu@X+_+!;GrF#eIY4Uy8U?{(zoA{Et#~LAU6G{#yn-K9#(C_ZIiq zN{2`62)cGL-C1vg;nh>`J9oVt7WH;wkd*FZ^ZeX%&krn-^k}cX8yh&~Ya4iv(KOyD zT;KURa9*9!W)T2`#$)SV~Wj|>TW9;RujI`CEEhx)9#HLlk3L;F7LEL?Ed^!wZYEsgYgtgsO)9!5*^Z4+B518XEZN(?svpqh+BDPOi1Mc*=Ov z$jm#&$NbmK_cqsV_MYxAwMwtp*eSB*iRDrzL@aJJy72Ubq08@HzG)|a)+g-UyP@5W zzf&%MobRBGZq#p&zmLAGN=ovHW^enPsV7AmT){o0uOeyWngg3t#2US7Mam0H!}2yP&BT2ZiCrQw>Mc2{$? z>J7BEh*N0Yx~o+lM@37-1*%mGptVPwp4Kf?t^WcV`K02wYM-X4^p6Qbur6s)Yqe@D zv__(%0JSO)8W}6K6z6|j5SogXD8NLn30k*yYSj^F*mMaZ%gS`TP?x^&%62!c1X za#RgjiqS9ukoCfc|G zzN$*6#L~#LZd$cL7ia`SF7Gb^M|I;?i#07x#J$28X8(>wQRgLCfiT;RGXUZr*Cyutcloo zlwU_MWQ!a^)T+7AsP*JJKNq0+>f(@xver34Xr)a%3>616$6{A35Tj;}Q;$IIv& z#Gn?4S)NU_ zL^+ky7L|JILm~HaZBdX~brM>KUk++q7kwiR19t#4v3kS0s8!pbxrpfwsAXTYF>n23 z^|YyP{Zw%`#Lhsq`lw|YTE~1p*>`PBzMo2cQ|uU}c2@_rDh8TZ4K$Z39U4s%u`x=a zQCG>dMHoun+SGS`%7M3#TI(F@t6YMRr#63MV|@gub;U&Xx5fJEG|Z2j0za9l*0J!o z>JT=#emZx%=BicAac3a*>M(|B4vku)ysiO)?g>IOXjQdtUDe9v&>Cyg0)18Y5TXJp zwQiWFRqsn9bk`oWDg+uep>Edd&xPg*?N@*4KLSJj@QYE^c_8*Ys)zNVKQu}&_S$-A z)DS2S;+{ck1Pvo5My;}bD3%-zh#nmWt&!Hbt*>eyLNtVaR#vx$%7;GH4*J$qzW%9p3q&})PBedtvLxASz?9408ED_j*4MJ)v8a>$fp?B_=OmUb`M5NL&MPP>Z_lI z5S4=&_2jd$2ux!z;+pOJQq*+QNk0Y}wf!$^s-5t^=+x{Dpw9C_s&?V!@8s?eNYmF?=S4~48ybM)gQ zXihqRr0M61y@vuPs8s>b!~)Z(8wU;J_JXhKJVI_rQ$braQ7u>Ju|XDpiy(Fbc4*NKx_!~8vIRwMsXO> zp=#A(Xf)W-NEoVmh2n*^B5Cr*g{+=T)>K*lJ<>C0nao!ik6@q}+=pP082s_upxK9C zY%+q}_9}whL$!~;40<9MEPB}Vn=L>vRAieJ|1wBMP;!PK&)DqKFTXtzWN?{vOdbpuK|TgB&o5P%^vkVn2(e9tw?*FvRVK)<$PZy{`Hp4tT7BScHP0Q4Uywu?d(A zO-x6N&}nEiu2fpOsx~kEmETRZ-ndeM)i;+lQ5^$KYYbLxty=jNnyYTzulG|NYT~d? zg60h?taVtm4{%MKorTcI1Fm0KWt{{W)_vMt45bkGUrngm3x*1dEinf3J7`^@iPI=R zCdO6M?!xTLffj=}Y_t2QRsG~LT~i?)rcrr4nQrrpJ;rixeJIp6n3ynJ1C3f3a|ais z_t1i&Rn@g{Q#^BP3k`d2WUv4l%_Q+cb_1FpG|a0u*h=9k94*(n&5ddlv}VvSqZ3he zXk>{vXrG}4Koc)tjmyb&4T0qZ)f)}1GvdUNkO{3jv~sj0D%E&y*G!w%%2zcSq4wa> zM;L?Wp@}`cYZ#UwJiKdyI5ZIQ8U~F@g_R%z7Z_;Nxac;4DEM1_ljlX;-T^Jndq$#g*$=Eyniuts3aw$%R&@1T9m|sr9q>{ z6STu#qQ{}};Tf$~x#H2DSQMm_#W6=)nV-y$#XzWL;qf2uRy5@uX#L>@owY=*>WoK* z-JoH}?^LVOpmijTxmn88N^3kn?4orJ@>L}uL@kSc!!Gh9bF41YD1-3)NxVMHMu_%i zx)CkA#~kgEy8(-VPzF>*x3V~UESfVAY$XP-BiLFDT2}jI&=v7(TJSsG z)A(1a2?&OW4le#?tC`4zb|Tv!L2j@ELGJ7mf;?Y8(_i^cL9jK;w@1DR@l=*(zfy%G z*j9AA4MFap7(s5^9FOEgRy7kr>N8x*vG?nVM~f}!u1L0$rPf8O__G`c8cTJA%c^)x=&g(X ziV&^S;yiY;6^914T?J}=jELXav3?a~Dg_vSUAp0TqDc!Au6l>mvTZD;J_>BfQXy0$ ztBV5#_b;2(vMbEd30WH2%Y-OxT8Xc6I6}>JPL3laX6_cG)+@4?X$K!_qHIt@CiG)z zju-`J5$wj&>LX}dQzrCe&Q1u9K`=@eR8_7eu3oy!j4}vXAM&i+h)|#|^i~(5TMYNw z7^0%H=?D(dWuf|nptz6^OU8x?@(Mj_;kRqr}h zOK3E^&=wc)AjktlSEu2ktlS8#6Fp;58F`9*B3?=cLZizQF7jC3H*gK3tF>D8oTWBG z*I0Ooizy~;fLhj*;n}U9Djg(UkSf#VP+1#Kjq${$t*_p|hBEEewoPOkm}6s1f{JP^ zek{%d!vrBJ94_A9yjcz+WrfVK34||;fl!V07E7YL|C1eHIYbt75?2^Brazt@Qy=OE zziKoz>Jez@?CsE~BDh#Xd;8lGS}i=x<$brzTOSG;;u41Ovkn@$#2Sx{j0c|n(hft^ z;-QhHsHH*sWvT3f=f=1P3h-4eK!}`+SDuT|`1R|nT4jL8)Z$zt?~%}2=`86|y7gb; zUPAljUDd6r*mro^g^k!^XcQ;raE)tXsr2zYn|fK)g8oID4~_4*2C7w8pz+H(%3|y< z(>)|Xx_obaD8DPZ9$L3wF26&gWMT$=nn}~G2=`7mxwL#*oL}%_H#F6iQIb{!UMAEz_%}5%5zf z1wjF6z@-tS9C|fK8Kg0!9;6x9&3U{fB>ny*$)7E^tIqBIAa(f*Wh2TVVI3r(jO%jg z07(v=AgN$3oNoY0Kaync%B35Z?vPY)FG%{8mE=dQ94tEa;H|UdW_-e#`1I|$18{(%_j3Nflqk^$m~}q3?twN4p{E_diLpqj%@1Ap5v| zSxE&ypk!71$*QUl6pp|~!2O@Qf~LS{@+M4&EobXsiKd$PLlK|QVS!X`;nxKo^gZcoF_@m z@RsxWT)yM+B&ooKTqjBTdq~RY1Lw<1;y)@;e=__81IoCBC;Y|}l$AOP{ZICC8VCO- z$)O&2k_v8Dj@yx>U?u#I@-gJHss;f{P>o`_Bm+~f|4C8-%((+ANK@!;-2Q(nHUHZL z|2OSX@j$^HC8xfn_Y&w=R??9615Yi|9Fp`vNNTZG+@7R@g+%bN9L%Fbcr-~$-k$Se zoG&Y>XS?wDu8`Eg-ML*^N!j=2JW2A~50Z)#UXHI82DI$lcbDBah)UuCvcr4#V3`+Sf;>VJc1-Sn!@E&ZaAIClce}$$f}UbxV{{c z3cQl*tGHYZNflVn^$lEZ$v_WN%89uPhGp&i6=htZ83T6;3GqZ;#?BUTQDR_wMB;{-Z%-G&&SruAcgfl#@tfU!!h4W=4mF+5c z%JK$}FDt3ecRBwjNkzYpc#;px3#>(q%z_2Spd`d(@swpH<@lKMBq`@?NNSyzT;@Ph z`aDSbk))Coa-Af_zvp^cN&Y{S$6`%^k1(JNK2w79tk$xtRcQkLbFU@%QhVZ8RubjU z`Tt2$i~e)3C5%8*(IES8?y+E|v!kZ_=U(fddo4c8{<+us_gkfZ?zME=)PL@^{<+us zKfdSs=U(fddo4lu=U(fddoAob{~z9K8UEY7R{EitvT9xZdo9{gW6_}G1ihED2A=(K zy}i3uz3BVxyCD@vE#GNSb#>f1H`AsFgm|R(`^S#r2T4O;7QZXV&z;9%Q}!V;zO> zee19l;jPwes~I%dr$#|ZC%-YZ);7q?N*Xz6Ku_bVt)Gt!OIdJN8QA8TYS-%>^S88{ z*yZYgjO7!)q_5~Ezba$aJ>|jdKo5B&8&09oO^=^XJdMU7~LC077-E5u@4A`J|JfI0TIRS6LAlOe|+O5w+kAdy18%qjh^)q zHyoXk*RAm7^L6`TK-qMOZi%~?McnBmd{MvznI^D(c}riZ|a`c>wV+EpgDtY zY~GPxyRY0^;Xl;3b`6KQ9X*d2DC$L2Jvz^C_M}4(&jlVTDoENDa_;%-ndi&revR)T zU(2k=ezsejJG$rjjeA#qIP|6U+c^<6>!zizh>$y&YijI%`|#qZ8ryb#OsU!?z2zF$ zVJY`613!(6=X_uKsb zdxgrK9xv$sR=;28u^(kGwm$frHhA&fcdJ^Q98x;*?4AAdS}5z*8eckf)2j5|qc=tG z+G!Yz;z-3iTDExWR@A)4wCfstslRT?u=RC%rY7`GShF?Vsb#<;Lsi4I;q7V#8+*Qt zv#7Q8RpsL?Yj!40~^fy$V9eO?b%F@p&x-qpxsJ#T+|T*bIU&@pvE_rWpE z7Ug{Z?7iC8e(SDn6CGPNIR&fdj_r^hI>LP3-4%s(*ikCplPTkDe9m4^Pz^QS^m25IQ3o@PKlbW9rTexj zBYmT@>TRrCxod~ZRq9>T_8=P*lt=%#IC*OOU;bo&=t(Q@@c!?cv z?lj2nzuU94VVkpqlM`nIG$@$r?vr~hp@T)4b@w``C`ALmO*5LkOz}>YE#AVl9S0}$Ea~JJ z?ef>I>}<32u3gsL9Irjuvf-2=bu}aRteITDU;nnpEf(elcUZ?vr!Ktdt{-+FXZVD) zuXk!@@2wQTY&0ld&3lFJ6MWk?IDg{J=gjUVGeVL>zc>zd)Qb#S-C+H&H&5EeUf!9} za#p%gwQmPIuXevQDly%Dyz1n)?JKVumoIuuC6dP8nX<(*x^`;7JK^5j>GgN#{fs^P zt#ZVY!|QK(HCrBRWK=QZ%Ee}N{HMg39^HmyX-D_X7D+|Zhg<85%;#tJgE20y28|o2DR9PB)K^= zn2L4p0_#2%>z?-{EQCjixWrV`K)fL$ZW@S8c94k0lR?=04dN<``5Q#gUm!AxxXvu5 zgZM(kgy|q|vI|6Po&v%-8N_WiCK*JxsUWh5xXT=8fY6@?V)hIW_t||S4uH_KnDKqG z+4!3dp+AF)eTR-L*Vwl2sAsl@y@tQ7SvxDaV7=E9*3`3cV1-TH91S`+SWTU%TqX<7 znE0t?lV-LJE6l!CrrjQvZMPAp_Z{kcbpOD=J})Re7weEs8r+B4Z+Ff`v-6#Ec z^_ISS+iiS!!oo0bbaqtNn4p_Vv-<11PF>Kzw8G&9t>%pVoAv%1-FmUa=#s@$hZZT% zv|TIo4}2l3(y;S|w(}o&-+uG@bHx!2d-wQeai^ZDYVsxX3QqMpnpV3ov}1#Zbvt} z^25s%?@8I>^{82t6tva8x8LZ$W+e=3rl&byJH=viYN4KT_p#6YpY^PNyWi}GG1(R) zetsTt^wb(=Jlktzn@t~T>LqO2w*PGA>!s`{74Pkn+{e9^eA(B0)1D89EidetJS*0y z;nX1+?e-far+vPbJf>P^c zmn~lZBbIt?PdjeATCVlS84I4dFIYM|>BhKc>zaLiKJ`TK>1CQLBMTOc8gJoecze)* zJum!6cmEQbRof_Q)qo7E<9_4R{aIWxiYGH~zH!J$jk?#7TXs!n9r!qH>GITS3r(ip z(|T+%Qw=em8nEo!@{a|PtXIU*kGKAMbu|9?rk4HeW3E-&JuLZK6?}8?t9Z}L7H{g! z5g9%1#~nR7+Gwq%d(Y87Rk53M@8rI)UUjMZ&&-Iql?HY)>D{)9g|c_xUEh1gV~Tr) zG)mOZ*!iqs{SmcSHtE)z*~~!krp^2w*LJOo)6~YXQyYgwWke6ioc3(n%WIwwyl=iu zzcQzzK(`A4CF{N~5O}eqL;9F{XZ{Rn;ySzGzxMtI4kGRsY&~Y;UrI z-Ilty*o2uVp2ND%`yQvNrW;n@;GMAI@RMP8`qhhBsNZ|U{EQAqmI`BC3gU{sbV_WI z^5nx1<=kiP7vH3WSh~bd*;Kvj`GiB`Zj>orPTAshvD(tM6AVaoYUldQgU{ zPt)UPZw0mK6hC=gpmP1EMY-mEj4Y~j`|1$5I{D5g&4)&Mu6wJ7Csew=^wiDCSD5oG z6fbzvrcf6BC8Tt{Q_`YW@q7JCHZ7NLPVaNsX-$*m7n@v;H(k;)efqJUd**o7SUqN5 z$0u(OdM)bf{o=UtuI0+O;C^L_mshrU6)$DfJyF=+X~d^51K#CkhrV>$G57rW(hb?Y zGW~r^ci3O^*_R&TnPc&}`q-jD-6omskJ~@(;HtOdj_Ggix^Vf0O9NQeEV+fI-^wH1 z>;r4hdOLJXrpGOpKJ|vu3kF=+6VOVK#^oRz$=B zB0A3j@r|vSBkwBv&Pqu9U}1A1N?9t2pG=k_?bahv1%VUJAx$J{S`{HfX-Qi`-O? zog`_d$1Jsw=6Wmv690yJK?_fo%zgoc6&pjsnq4Ph!yFev*s@6^?AU!0)tTEO2z!=H zq6W(*QIq*Fh+1qOiP|iOL><;_F+^RqgoFbtBH_qdFM+7X){v;rN+8&qwJ2`yr5Iq& zEOjY}#p^&AER(klX;8K!Om1ZVRpirn;-IK@&owuD9yLFBe8s3|fp_1{^{7!TxkkI2 z!jWco&sX1g@Z76gW}i0&`uEu2GVQzf-aawb_18BW*N-(>kNI*Ger0YBii0Hf?gfCmO9z^tJ z5Xuc8ny|19Ak0%i80-S!$GYzVah`~yL^NZn-5^G90b#NUL<<(a353H|5NC)8U`Crk z+#_PdW)Q7d1`*S@fvBAdqBR?q3c@=LMBHu=ZJGTR5O0W>x&=fCyH3R7?I66if@sGk zZ3Pju1H?-r!kF7O5MPK`xD7-{mQBRwogf0zKy+sF(m-_E1)`XUuB_R15c<18Y}gK> zJ1ZjM01=&cfauBA>;MtH2ZVAbh~6x0CkXSsa)aRAwTIj_tJHPezUAifZhb_hfwDG4vff z`rs%m;*P>%96NXvMD#HbHpf6rU@^xq^(L|m5*lW493qJgBQc3xATgQQpMdy_jUh3G zT_-V>Ic7jiW0Oey&F(|6=_lc~$w|0PX2~bP&tTakW-^~s5VP1k60=zji8-vh^1mN3-6vvtCWt1PAW~U!CJ6506#adqj@r8)AYasTp5+XKV2hsaFh>vb-z6E2OTQEM#Vs3#y#xh78XBM|1POxDlGS~$O zHu?^RlG7awrBiGS4JC)WNS$>Dsn0OSyCCinG5aovbL>75)9-<3au37>mV6I{_k9rg zL|kG%_d&cNV#R$BnJkBh#ScJ)JOFW(EqMSU=pl$7L|kXBAAkb#C@iE4B`M0agRYfWCw|eegeYg35YBf^8|$X zQxKU%JYg13L7XRI!c!30>;e&^vq3m#gLuxyWP@;c1|o}ym(1}QhJm&KP#2X@3ya18Ua)?;`5=6*L5Cv?>OAtY?K>Q%0h_!wN z;tLUJuRwfYB}8m~4WjpJ5XCI@HHdC+Kp4CM@tJjh142Is#8Dzjm?{Uv0V3jZKzw5d ziHObxVUr8u2aCxCVV(yflZcQ%Wh_x;P@r8)AA`sPB2@#v$gXsMpgb7Q152D)#5C$JWn6d63Kgg-@<>Iw=@;F$RAbqEsUXt8E`U8^2-|!KISf}*W@AWF_ zQEAw6Up;-3$@t6{uUIBgu@mBBV@Kf0@P+h)zIvnNvRCPDP4zrv%Ki5EV`2=>pHRB= zV1K>NJ=zArDW*2v1>i#Zs{rS^_ZQi8kJrUQf!!ORYhZZN3Qgz_#=82wtMuZ zQ(ykR9qE)YVF>5ua2whg&g8GR%;g+8pToHnaAZSj80WOyj^1AE08aOg-U5)60r~I9 z4Ht1kdh@vhMdHUeN3S?`EMBukU5BZZH z1HhIT{5Eli^fs&X_TpyF(YwHV;h9<}6&$6dPha-&mf6bf=Ax_cJ9y^;YFO=367rHnE;G)XSp5mOQ=fto#zhC5MIW)3!F0tw}NvQIcEWG zC2`dLmpEyOFn#qyzssDnLUn!Y;F8zlAX6K-gaa6d|cUp9AG1L0WCJ>y(Wa6>uwoTse??r-!Fjft1st~SEc zIrj=2{uAm@{bz!tUk*2{i|`!I<#NseoR%lf14pCR5tz*Finv`paIHD_9vqdcKG2?X zAGw_qIDBl0AKJf|8{#WNVHa`uede4C!Vx+KALH=E4WLtP==YU#t_Z*8gYX;Y+`!S- zBs4(3gQLQ@1N0&>4bW1uqyF~*D)YoYd16m+)i_6^lM3qv#8B1olX0#g!qQhka&VN1 z8u-b_f`Z%OD^r0!OQJ!m1RBW|IET+q zh1K9_Bv%B7a?@wc!aAO|GPlFmr@ubQGvu5fxWS^GMyLXkO6?EW@WfTQVKZ=8eRV%t zH!0X0z~4sD{fs%+0@_}L>1V>ZmIxn0m}Y?~=K>JkhsZNVX$zH=3hYIsembHfmj zdpT#%xlnN1Iah;o?Z^(GUro-nN4QYO;EM=w_)iD}J^?ga9JpNvggbG68b?mz4`2wd z0h${1IM)f`%K*)c`rxS4_;Obm0?^Ny+jT*BAV9Olg>zjIrk15&1J2>wW1%kTfUC%9 z=uesm_fQ&|E^geg2f|0ni_^uOb3MT|0Y|gNgLAzQZoy}SCpa2}y@4T|Q**mM;ONse znl0Yos3Ls<1%0GMzeXVOpU@8|!XTvS(v&9-=NwHJKhE_>_$VK&{+x>dR|?Q7gN&dDTb)Pz)k{+yeHF#a$H ztye+>=T6Y-f?xXvY@&yv2K!iD5u|B{DbgMY13CbmfL=gvpbtPB%YHyO&>x5ZB7rDi z05A}U24a9gz+fO2hy!Q?8V}HiY*&Hnzztvq1|MxiXDM+>pN##y$D|kCs z741yut+Q%KY6Q^dKO2CJ%%+yYOgR$4QEXpLMc0^?2nGOwKr0{!XbrRh+5*8q2tb>} zFF*52kZyZ0s3%p1~8L_IVj9D^AMa5Xn_U5B7gylfh7Qa zSlSraibB&T+$q33U;(fYSPanilD3n}ffWF487Ba=BkT$E2KoT~fN-Ec5CKFg@yA)B z5EuXq1fqe?Kv$q0;0^cyjR1GR1E>zz12uq}KrNs)U;tDGXvaoO6)qYxM4JQ6fuG1hfRq9Bf#oyc zIq(8_3A_Sc18;yFAQ#93-U9i+JD>n41d4$7zz5(XPz-zmP6H=^FrWi{c-s+yPC#eC z5AX+?0h>_J0gwZMXn=New0rvw`~XS;+PM_~&w-b~E8sPd2OI!sb9M+g3_Jz0fmOg7 zU@fqYJ|d?NWkv%DKq4?47z)rIMHmcp2igO^Kx3c@&=l|k>H>~HJ-`yM0;~ZWz!)$A zOaUXH3i^&VXtW_S2Jm;L1bKRAN5ylQCJ^zhfFPg+&=Lp$^3f9o06t<99s%?b+)dyX za2vP-oB_@O=YfmBCEzlU3EV{&q^K#=v_`lM&=z=r>f8nBL&PgUWi-t+ zpeu^i4WQ4`{g5Ml#U2QZ0>%O(fJA^U&UBI014`iUD}cXzB+y?#xCmSV^q}8{yaU`+ z;;Yna2wVqt1AADQi=wA}2!h9ue>M0q2JrWzgsb2#14oemUUu6>QP-WWjC8Hv3)B6; zTj&d6u7%kmfNsf?fL=fh&`rsfHc)iXxWk5SvrK_isNOoj3Y;}y1K0v~Ky|<#r~%Xj zY5}!@IzU~(0dNHB0rdeVz!`7>8UU_<1z-u#-4)$T;YP_ycW3k$lu`*Kid_AGAmr8>XakG`q|%i~SRYUU zw3QkH?}QV;A(Z4XWEOB2xCPt*(v@t#yP`&qhbVyw(%^4}3H5=h2pa-MKqY{7NR@$C zC?V~PsAgnCpfm*9^iVz&PNEwL{36@wHav7sBb-F7#sCLVGrD720Hgr)d}=h%1L&T9 z#zWDre1+}^|3I2tS-P#SVq>Kq@F|P{IT+{(L;`()Ucgnv(L<307`;b00^xo@UoQJY zh696u7$6#m0tNyDY{?tllN1{wlhfED7YL3{v8 z(**DZ8Ut;B)<6)@0`LR;f#yInpcN2EPlN*yXbF%ZCv{Q^QydI+4niP%0zH6WpgTZZ zH=rxf3FrW{2igIlKp59MLY_i_yFf}do%MV%_CS&$CF%@Nm>iKVIiO5>agM?+Ks+lB zQFwUuM=%`d2lNG~Atg|QO5uNLXm&kRQH?zfRX8|~K$=8gG>`y{0)_!dDvZbfr1%6D z)=pv8nN*@jaw&x+o+QPk1G%u%$JkncFu5BCITn!mdIG|m5HX&uXs4(v*W#s_c8V^V zRiO6+D}hD8LV%Jk2NnY>fMo#V`cg<*6_!9sHe|OCAYXd{T2Zz@?gY|+Z2;MB2G#*& zzZSsys}a^9uo^H$nWcoO&^G}afenC^5iQv3p_2mwIV4HxBpcF?!|nvImD@;}lHVP` zc7Xg|ldHv2OAhyd+zoVu!(EV6D1SJT97?s!U?E|Ox)yZRp*wZ)$|JTvtOaW}FAVpI zbb;Cfot}9b0fs;!ycPiOfIJ`(@k@XmKrZyfkZ&NRZhMLF3*Zzm3URyOQwcnW{tRe} za2Di4-~n(NXaWxDHM%)|AH+T24saW|3ETj#1LuHiKqhbrxB#35&Hxm59=OQES0Txc z;xBV~1@aa^{_X;gfNbC~(1b1#QZ1f>ScuY7$(|tmiw8&H*Wh015{Wtu^c?8aG6b@r zniK!FO!|C;KLd23b%J~k6almlFQEspAE3~a+>emOz$bv7b5{anz*p!cz!!j?byFNY z8`lRYz7+fq;5+aQn2ACN;D2(y9K!U_ogT*P0ra3=ii@L!^zfY?m>U4}Je>9$OW=fR zMUR>%Axw{<=@~dZ-==tarcKYkC0&yA2-_T>=iB@r7JpKD8XvaIsFR{vg~jv`4!>u% z=`NiVS6yWu>7`Q?%`262cX4%b719IeDS8K3H*|Gtgq;_ziAm|^XC7Uq91P zp6vJ?#a}GtuEJ6_oo&6Vu)upNXYMLI>HJo|jXB@lZHE-Y zfrpEm3vSk>6J8BmJey}1w+us!C%JYNGLNv*dkS+a>8#g;HV5B1-E-aw3pZW)@K=M~ z?kha3r9)jq>buYXWdA{-b50cyGLNyO`*0y03u{pOc;lAW8$`jvOLXDI_P~YJ{S&(B zn-qKX*uM5RCSQVqJIaTDX(?c`2MPwz8Pb#^W;S}WDiFPi4jn&lC7>3AhRsCn>w&s1WX4x0V1Q`$%du7Y&FtW^!YRbi_=Us8;V8~Q+a z%d#koV)mIboW$xshL*wt9^(Qkol(T!vax zBjc|qr@@1jbYQJ(?ChPj4lT{oRU2a#bB1M877F%_?4*Nik1e>Izc5BK0e0^2gyFZ4 zHFyF8>2TO87Pnts$!UaR79|7G1K#kO@B}5V#dg6QZ!%pXae}=BX(gRMtNJ-_Rlnic zGF@Vn)Kz%KJf12-@EXjdr!fD@mXR=I`<}v;HOqObm?V3_24{mTWK**h1MxmcK553R z{48wscS+24w!+d(I;Sjjarb^3UzvZC%W^3V3tNMYiR}wT1-zf@_yPrtU|U}x z58X+TNZq69*?!(_h76*A#uOsMhetUN7?Rjz{+yOSnjQP0YY7jU zq|#}+y~cMNZ!zQc6S)i{LpOU%nDa~2)tH69L|sK^ayM7jUamA|8(%7F$n4pLmx{hB zn0rv?tC`y?#Uzb%F0XWM8WpG^jd(#i9#%Ru45dIqn!OSHgkb6XF~p!4F8D_#=_p$1 zgfhg?Si{mF9abxyVTKq_6vPVEm5v0Kj%-5|=820NTfG36dYYcUj=YslLeu4_8==xE zxzgEbh-ru%(V)_Ky3#3Yx->d((uup$Ic$ib1q}H}XZ1GbC%DOF8c#7skj?}C*0GPp z{l_yN>k`qV6r>Y~r6b}Hqoz*9HjE!$EFCU~7!PqNm5w)-j-UG-Bb{5!50=x=@(O3T z0{l8NSvu1WF>cBJ#UFh%q{0?GWT$f#?sEAf_9a&lEceY~fqBqpXR)z)&<8!n>u8FWwZ=Ra7i8%? z=VgV}ww`*l#DLcgrBOa%u5T6Q4aJk5g``G1f_uLXX*T?K?WH51%lpO7I8^;uBx3l$ z`TGf*h_u%KIW4zvm5zOu4g-V_TBni!>}+whk&X-0#kev5FAB35RF&q}AA3_ba-~zF zr85J$TQtxg#|8~2;SXs%S<_xvrgXasYzfS;cf)EWogYZ`Wn=p&Z0Ji`={RZWkU?GK z&IE;p9Um*wIn>hegk(Sij1_)Tm?(b-W$ud>D9kJ9CJo9P@`_bPN3x4=6`t~suNLK_ zOG;mfO|!o9`YlT?^@z~9(oMb!udxe65x34Zj&SoLB>J^9Ey7F?__*Oz#9q(I?mEged|a?AWYQ7vbzJnxZVNWZWg%eD2T9ETv%)ec85-3!viqr%D-BmG z<+9;mOeh|bHWQt1zO6MjzDjqUZ(aHKBE|qQZWW61>IE8OzqdM{wg03zBF}%vDt}fa zF~w|!3G<6l_{b9rnSUW#`|m<=-`1h&wffdJMw=A4Cb%`Ei-vRnwfWbtZXGT*jQSn3 ztB}p1v}cjF8uD{(zO-+8IYaqx3+e1$1GAPnE4Pn4_dBMbkUc_LYv~y5n1hWsdzOoP z_1nUvh*c?qcj@5lwW$*az06|?=+IC)klVhbYvP7JnxE)xy2@fk|2n!m({9Gh&PhIev?8Xogjs*Y zvbg>$YyVL(Kpy#xrF>QlprL8mP&(=RVKWo|onuo|bPjdH=RZ6A{+&5}fkVF^tlt+@ zLOP^dR%Q9jy4y;+iay9m^-{L2RADZ6EM?naDOZ=Wr=^Mk*3$9dd)g0qZJfLAp)Q3F zO}glxi@w5eaGG1l$uw5Gi>;e$O zFV;uo%>M@}ep$|jepi_5Ase=aoJj|p4>HlDB<#1v=3ck4MoGl8&vB5^seRiY_Ig1V zS6+=rdhFe|GEU^l3RdI0!rfXr?fk66mAXb<|2lvqyjuUBue^qmRYHN-k?#sioBy1Z zR8Gm>`ahfUD*me4|6nRrKx$GO>DcvhzIvY)y{l6mHhi zLFh4W+OBkIp3z&}XwywkO?|fWCuXd4cKUaDO8s_M?RSe7^b(VFy1LcmHTI*0G#9=} zM{D=hXQh-@I*+~i9Ygo&llppz7T6jK(uwVNUZ|W5Q+$_-G4vYLLj8roN^@)Ji1%~b zSC3TakHXNQfkR36=`T!DntMrS!f$Z)U7P=ELc8Av(y8&sj3(vXUvEBMjG?`{Zoh9~ zB^@&_ox%G%=~pI`DJ`s}bLl%qJ=}a|-DO;1D04SVoti4vP^L^`^^{7_e_3saiDp%l zN=r6hsm#SEELY1bEv%%2aptaPyy2Ug^P8v4;9eOSw>mt=3nXd zZ}`Vcpw40!($d9vrIqWUn>i6Zey2TK$hIM^^&c;Ry0o|iJ|*veyaehjOmGP@hWCem z4G45w^dRH6cSl@CDk1G3FM+zW9gvo`5!csLu{rIK)9!cLm?AbFX|4Zw3Dl*5@NPu`Rlzb$Suje*j_OFHBJ(jL1ueuG;7rCZM2Jut>_BP`%8=%hN; zP1SbeJ7@ilablTBDr?GK8z}3m+QP01>|QXd%3zDwuqsLur7P}&f3S97yo@cyI_jU>_d7=P;zM4}!wCP#lT`c6#*THZ24N3|1s5gs z6lQ1PpP>-*s{L5Kkj_ie#TeYax;|%l$l2-zibmTv!xn)L4V&b9>kM>PW}ScIa&*lR z%7(u%8xvIGCi_`UX=dx}+6J%a(Wn##96Oz#GVBpN&_f$a^^jFIQkvt>KOHtiR`D>j zhoR^A*^A$g-%U5TC?&QPUMZ{q23|X0K-5X&icy_wn-ZG(SUK!Mxr z`}y>7ucw`*Ox!&F?46oP=g~}$0vJFR>}geHDAtw#t^ve4TFtE?6ReSMpZkR_p{p&E zf9317mF+@H%6J|B^T5${JPqRC)uS>!W+BE%UdRR-EBDF%WsvAOySlP48Z@D7Foacf z9kGSoD|~orGHOnw0#BK|bkBsQvQ;qfS_1<+l(J)7_oT%4DLB+oGB|;l>WInQrnGR% zs`&AD%u|+6zV+~WiY*KxLQXCWw>DVv+rXaLo1zT<%-0kP{5=+Ls&vN()_BP7$?ljc zEoHf^$W(b1ADv~G!LA~E2w`Q5cO+=>`H*XHp@UO58kDYhO67)sdS!;@N{d$hFrZO8 z=kto|8#k94!9aJVauY%kLwC39LJB5jsZ%E-hCi|Bj~JSDUaQa7o^-o1b{E}Qyt%S7 zzP>$Uj>2hJiMcYwY94oezQ&{R*NwlJz=4}5=9Y)BiiKM!C*jk+=N7oce8d@vN((uj zdIwu#MXQXL_oze{WkwI$ZGH2VlHpMpifqj^mdXHSJs8-~BSe#$x*%+4fuafIqE7K@ zo7#zPb7?n;>+LcovqE#EGAjtHW87}T&Ve_l$zL^x9o@@giP;gby( zkKm559OSaUtWekzcHIhpASjK+St|oni(F*7N9L>9VQX}J2~X{Oe4ow0`bi#gSt<g#J}XQ>Pj1# zRgXsEfM~F(>4{fU`%ggD*c{PP`H)?;NA>eyK-b{g4kq8f9160f$FJxHTnBz4hDMBw z>*eA#3vzL5F2z)0HZ@Q!i~p~%V~vfX2y@rYl(t|GdbBimJ@464aeEJXrIlBav=ycbyS?ikhPXd&=bP_2GvCbaeBbUK{$H8_35G9!(>43j@+0E}70`kN_+Dr`JE@xV z`nj;jjyHqmxvIwRFYliBG`(SFH*Ei>(F4CRN%JAcfxfx~=CD&E#2i?;3Klrgn)xV} znS1)ouF~U|>fTXW%C^$zcSn%UREcl;u=Q_3)|OiwJ*jEw0vJVkrpJ(gg~sVs+dxy^ zq+XQ3;)*y-stW(TRool13AQrp9$u)<>0OrEYb!SV!shf?Z?1xVB+%L6tP|Um4FxVV zh2VdqF;iw+!Z&VC-e*-BqfP7lH%O0@0uw6U2~%LZ3*`y$84ALe)qg_Bv;*a_p(<|g z{OIQyAAEMuv)VHuQk7RDUbZ?qK*DJfWSssta z>#z2M?g}x=*Dm9=QkJfeZ?mB1HDU(+B4U>tu9I6?c+1~0K{M+UFQ5SxR^NL$6KUG=K;eP#95kQ9TI22aA7rd zdDWZ-;?x4C1T~m#f*9h(Bqt${7-qk5PN{;uPY`pZrXq>VT5wzh_MV2PC=D`>GywfW zq^vYU8=^B{*n6G0N;JK$m>URj@%Au|LHFy#r8GOsQ&|I}tFaUQ%%wGQLmnL=Fk+>o z3P(LPgsN`E5mHs0k`z)JEphQk0L_lAX#?AQbX>8FPSI7vP$O}e1Pzwir~%>7Tf|kM zCIb+q7GU9N;xcD?6e2Yhz%3;+9GVek9*HD()!@L7zDt~jK%5zd__0vGqQExp0%P2n z6@+V}{;U zgOYleqp}TCX}$r`n%T;E;QV>wgn#ak`=G8KOHDG#g;R@2F(f(=tcu~L|Ke)u1gnEi z*ZJ_vLBvs*N=u-yR1rElNEvWWT7pEjS5e)e99jg40&0iGTzXLU8|ZMBA%uhO4z@{d zDG_wzLJGD4RVEz zidnFDCow_ALR{Id8fiEeGqG~Bg?8eHNSyRV=3)=Q;4zW|J%>qw>~c|u9zPwlxSS^8 zgqPOA?Q)b^>!Wu0nHjV~58HgGZRt!pQSN(yZlrM3M@w}+`3E2U5F>126HHLaPOx1YT=fycx)*qT6X_}JNj1YMKg%pRV`V_SqOml?pz oOpffAXi%Sbj6Ii+hc&A3z*lQ&Fu#>OsE^0VsFtDW1zM>47r}ibkpKVy delta 41176 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 item.id === null) ?? []; + const folderItems = folderContents?.filter((item) => item.id !== null) ?? []; + + folderItems.forEach((item) => items.push({ ...item, basePath })); + + const subFolderContents = await Promise.all( + subfolders.map((folder: any) => + getVaultRecursiveQuery(supabase, { + ...params, + folder: decodeURIComponent(folder.name), + }) + ) + ); + + subFolderContents.map((subfolderContent) => { + subfolderContent.map((item) => items.push(item)); + }); + + return items; +} diff --git a/packages/supabase/src/utils/storage.ts b/packages/supabase/src/utils/storage.ts index 196b67ad24..a6359939f6 100644 --- a/packages/supabase/src/utils/storage.ts +++ b/packages/supabase/src/utils/storage.ts @@ -103,61 +103,3 @@ export async function share( ) { return client.storage.from(bucket).createSignedUrl(path, expireIn, options); } - -// export async function getAllItemsAlongFolder(folder) { -// const items = []; - -// let formattedPathToFolder = ""; -// const { name, columnIndex, prefix } = folder; - -// if (prefix === undefined) { -// const pathToFolder = this.openedFolders -// .slice(0, columnIndex) -// .map((folder) => folder.name) -// .join("/"); -// formattedPathToFolder = -// pathToFolder.length > 0 ? `${pathToFolder}/${name}` : name; -// } else { -// formattedPathToFolder = `${prefix}/${name}`; -// } - -// const options = { -// limit: 10000, -// offset: OFFSET, -// sortBy: { column: this.sortBy, order: this.sortByOrder }, -// }; -// let folderContents = []; - -// for (;;) { -// const res = await post( -// `${this.endpoint}/buckets/${this.selectedBucket.name}/objects/list`, -// { -// path: formattedPathToFolder, -// options, -// } -// ); -// folderContents = folderContents.concat(res); -// options.offset += options.limit; -// if ((res || []).length < options.limit) { -// break; -// } -// } - -// const subfolders = folderContents?.filter((item) => item.id === null) ?? []; -// const folderItems = folderContents?.filter((item) => item.id !== null) ?? []; - -// folderItems.forEach((item) => -// items.push({ ...item, prefix: formattedPathToFolder }) -// ); - -// const subFolderContents = await Promise.all( -// subfolders.map((folder) => -// this.getAllItemsAlongFolder({ ...folder, prefix: formattedPathToFolder }) -// ) -// ); -// subFolderContents.map((subfolderContent) => { -// subfolderContent.map((item) => items.push(item)); -// }); - -// return items; -// } diff --git a/packages/ui/package.json b/packages/ui/package.json index cb9caefb38..99c218e047 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -85,7 +85,7 @@ "lucide-react": "^0.294.0", "react-day-picker": "^8.9.1", "react-icons": "^4.12.0", - "tailwind-merge": "^2.0.0", + "tailwind-merge": "2.0.0", "tailwindcss": "^3.3.5", "tailwindcss-animate": "^1.0.7" }