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