useApps.ts raw
1 import useSWR from "swr";
2
3 import React from "react";
4 import { AppStoreApp } from "src/components/connections/SuggestedAppData";
5 import { LIST_APPS_LIMIT } from "src/constants";
6 import { ListAppsResponse } from "src/types";
7 import { swrFetcher } from "src/utils/swr";
8
9 export function useApps(
10 limit = LIST_APPS_LIMIT,
11 page = 1,
12 filters?: {
13 name?: string;
14 appStoreAppId?: string;
15 unused?: boolean;
16 subWallets?: boolean;
17 },
18 orderBy?: "last_used_at" | "last_settled_transaction" | "created_at",
19 isEnabled = true
20 ) {
21 const offset = (page - 1) * limit;
22 return useSWR<ListAppsResponse>(
23 isEnabled
24 ? `/api/apps?limit=${limit}&offset=${offset}&filters=${JSON.stringify(filters || {})}&order_by=${orderBy || ""}`
25 : undefined,
26 swrFetcher
27 );
28 }
29
30 export function useAppsForAppStoreApp(appStoreApp: AppStoreApp | undefined) {
31 const { data: connectedAppsByAppStoreId } = useApps(
32 undefined,
33 undefined,
34 {
35 appStoreAppId: appStoreApp?.id,
36 },
37 undefined,
38 !!appStoreApp
39 );
40 const { data: connectedAppsByAppName } = useApps(
41 undefined,
42 undefined,
43 {
44 name: appStoreApp?.title,
45 },
46 undefined,
47 !!appStoreApp
48 );
49
50 const connectedApps = React.useMemo(
51 () =>
52 connectedAppsByAppStoreId?.apps && connectedAppsByAppName?.apps
53 ? [
54 ...connectedAppsByAppStoreId.apps,
55 ...connectedAppsByAppName.apps,
56 ].filter((v, i, a) => a.findIndex((value) => value.id === v.id) === i)
57 : undefined,
58 [connectedAppsByAppName, connectedAppsByAppStoreId]
59 );
60 return connectedApps;
61 }
62