Browse Source

Fixed wrong storageBucketsNumWitness value (#4254)

* count all possible storage buckets instead of available ones
attemka 1 year ago
parent
commit
9148b8fb49

+ 67 - 0
packages/atlas/src/api/queries/__generated__/storage.generated.tsx

@@ -42,6 +42,15 @@ export type GetBasicStorageBucketsQuery = {
   storageBuckets: Array<{ __typename?: 'StorageBucket'; id: string }>
 }
 
+export type GetAvailableStorageBucketsForBagQueryVariables = Types.Exact<{
+  where?: Types.InputMaybe<Types.StorageBucketWhereInput>
+}>
+
+export type GetAvailableStorageBucketsForBagQuery = {
+  __typename?: 'Query'
+  storageBuckets: Array<{ __typename?: 'StorageBucket'; id: string }>
+}
+
 export const GetStorageBucketsWithBagsDocument = gql`
   query GetStorageBucketsWithBags {
     storageBuckets(
@@ -207,3 +216,61 @@ export type GetBasicStorageBucketsQueryResult = Apollo.QueryResult<
   GetBasicStorageBucketsQuery,
   GetBasicStorageBucketsQueryVariables
 >
+export const GetAvailableStorageBucketsForBagDocument = gql`
+  query GetAvailableStorageBucketsForBag($where: StorageBucketWhereInput) {
+    storageBuckets(limit: 500, where: $where) {
+      id
+    }
+  }
+`
+
+/**
+ * __useGetAvailableStorageBucketsForBagQuery__
+ *
+ * To run a query within a React component, call `useGetAvailableStorageBucketsForBagQuery` and pass it any options that fit your needs.
+ * When your component renders, `useGetAvailableStorageBucketsForBagQuery` returns an object from Apollo Client that contains loading, error, and data properties
+ * you can use to render your UI.
+ *
+ * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;
+ *
+ * @example
+ * const { data, loading, error } = useGetAvailableStorageBucketsForBagQuery({
+ *   variables: {
+ *      where: // value for 'where'
+ *   },
+ * });
+ */
+export function useGetAvailableStorageBucketsForBagQuery(
+  baseOptions?: Apollo.QueryHookOptions<
+    GetAvailableStorageBucketsForBagQuery,
+    GetAvailableStorageBucketsForBagQueryVariables
+  >
+) {
+  const options = { ...defaultOptions, ...baseOptions }
+  return Apollo.useQuery<GetAvailableStorageBucketsForBagQuery, GetAvailableStorageBucketsForBagQueryVariables>(
+    GetAvailableStorageBucketsForBagDocument,
+    options
+  )
+}
+export function useGetAvailableStorageBucketsForBagLazyQuery(
+  baseOptions?: Apollo.LazyQueryHookOptions<
+    GetAvailableStorageBucketsForBagQuery,
+    GetAvailableStorageBucketsForBagQueryVariables
+  >
+) {
+  const options = { ...defaultOptions, ...baseOptions }
+  return Apollo.useLazyQuery<GetAvailableStorageBucketsForBagQuery, GetAvailableStorageBucketsForBagQueryVariables>(
+    GetAvailableStorageBucketsForBagDocument,
+    options
+  )
+}
+export type GetAvailableStorageBucketsForBagQueryHookResult = ReturnType<
+  typeof useGetAvailableStorageBucketsForBagQuery
+>
+export type GetAvailableStorageBucketsForBagLazyQueryHookResult = ReturnType<
+  typeof useGetAvailableStorageBucketsForBagLazyQuery
+>
+export type GetAvailableStorageBucketsForBagQueryResult = Apollo.QueryResult<
+  GetAvailableStorageBucketsForBagQuery,
+  GetAvailableStorageBucketsForBagQueryVariables
+>

+ 6 - 0
packages/atlas/src/api/queries/storage.graphql

@@ -42,3 +42,9 @@ query GetBasicStorageBuckets {
     id
   }
 }
+
+query GetAvailableStorageBucketsForBag($where: StorageBucketWhereInput) {
+  storageBuckets(limit: 500, where: $where) {
+    id
+  }
+}

+ 4 - 4
packages/atlas/src/providers/assets/assets.hooks.ts

@@ -6,7 +6,7 @@ import { createChannelBagId } from '@/utils/asset'
 
 export const useChannelsStorageBucketsCount = (channelId: ChannelId | null): number => {
   const [bucketsCount, setBucketsCount] = useState<number | null>(null)
-  const { getAllStorageOperatorsForBag } = useStorageOperators()
+  const { getAvailableBucketsCountForBag } = useStorageOperators()
 
   // update bucketsCount whenever channel changes
   useEffect(() => {
@@ -17,10 +17,10 @@ export const useChannelsStorageBucketsCount = (channelId: ChannelId | null): num
 
     const bagId = createChannelBagId(channelId)
 
-    getAllStorageOperatorsForBag(bagId, true).then((operators) => {
-      setBucketsCount(operators?.length ?? null)
+    getAvailableBucketsCountForBag(bagId).then((length) => {
+      setBucketsCount(length ?? null)
     })
-  }, [channelId, getAllStorageOperatorsForBag])
+  }, [channelId, getAvailableBucketsCountForBag])
 
   return bucketsCount ?? 0
 }

+ 29 - 1
packages/atlas/src/providers/assets/assets.provider.tsx

@@ -19,6 +19,9 @@ import { useMutation } from 'react-query'
 import { useLocation } from 'react-router'
 
 import {
+  GetAvailableStorageBucketsForBagDocument,
+  GetAvailableStorageBucketsForBagQuery,
+  GetAvailableStorageBucketsForBagQueryVariables,
   GetStorageBucketsWithBagsDocument,
   GetStorageBucketsWithBagsQuery,
   GetStorageBucketsWithBagsQueryVariables,
@@ -171,6 +174,7 @@ export const useOperatorsContext = () => {
 }
 
 export const useStorageOperators = () => {
+  const client = useApolloClient()
   const { storageOperatorsMappingPromiseRef, failedStorageOperatorIds, setFailedStorageOperatorIds } =
     useOperatorsContext()
 
@@ -196,6 +200,25 @@ export const useStorageOperators = () => {
     [failedStorageOperatorIds, storageOperatorsMappingPromiseRef]
   )
 
+  const getAvailableBucketsCountForBag = useCallback(
+    async (storageBagId: string) => {
+      const getStorageBucketsForBagPromise = client.query<
+        GetAvailableStorageBucketsForBagQuery,
+        GetAvailableStorageBucketsForBagQueryVariables
+      >({
+        query: GetAvailableStorageBucketsForBagDocument,
+        fetchPolicy: 'network-only',
+        variables: { where: { bags_some: { id_contains: storageBagId } } },
+      })
+
+      const availableBucketsResult = await getStorageBucketsForBagPromise
+      const storageBuckets = availableBucketsResult.data.storageBuckets
+
+      return storageBuckets.length
+    },
+    [client]
+  )
+
   const getClosestStorageOperatorForBag = useCallback(
     async (storageBagId: string) => {
       const workingStorageOperators = await getAllStorageOperatorsForBag(storageBagId)
@@ -222,7 +245,12 @@ export const useStorageOperators = () => {
     [setFailedStorageOperatorIds]
   )
 
-  return { getAllStorageOperatorsForBag, getClosestStorageOperatorForBag, markStorageOperatorFailed }
+  return {
+    getAllStorageOperatorsForBag,
+    getClosestStorageOperatorForBag,
+    markStorageOperatorFailed,
+    getAvailableBucketsCountForBag,
+  }
 }
 
 const removeBagOperatorsDuplicates = (mapping: BagOperatorsMapping): BagOperatorsMapping => {