composables/drop/useHolderOfCollection.ts
import holderOfCollectionById from '@/queries/subsquid/general/holderOfCollectionById.graphql'import type { HolderOfCollection } from '@/components/collection/drop/types'import { useHolderOfCollectionDrop } from '@/components/drops/useDrops' Function `useHolderOfCollection` has 70 lines of code (exceeds 25 allowed). Consider refactoring.export default function useHolderOfCollection() { const { drop, runtimeMintCount } = useDropStore() const { accountId } = useAuth() const { client } = usePrefix() const { isNftClaimed } = useHolderOfCollectionDrop() const holderOfCollectionData = ref<{ nftEntitiesConnection: { totalCount: number } nftEntities: Array<{ sn: string }> }>() const availableNfts = reactive<{ isLoading: boolean serialNumbers: string[] }>({ isLoading: true, serialNumbers: [], }) const maxMintLimitForCurrentUser = computed( () => holderOfCollectionData.value?.nftEntitiesConnection?.totalCount ?? 0, ) const isHolderOfTargetCollection = computed( () => maxMintLimitForCurrentUser.value > 0, ) const holderOfCollection = computed<HolderOfCollection>(() => ({ id: drop.holder_of as string, isHolder: isHolderOfTargetCollection.value, hasAvailable: availableNfts.serialNumbers.length > 0, isLoading: availableNfts.isLoading, amount: { total: maxMintLimitForCurrentUser.value, available: availableNfts.serialNumbers.length, }, })) const checkAvailableNfts = async () => { availableNfts.isLoading = true const nftEntities = holderOfCollectionData.value?.nftEntities ?? [] availableNfts.serialNumbers = [] const claimed = await Promise.all( nftEntities.map(({ sn }) => isNftClaimed(sn, drop.holder_of as string, drop.collection), ), ) claimed.forEach((isClaimed, index) => { if (!isClaimed) { availableNfts.serialNumbers.push(nftEntities[index].sn) } }) availableNfts.isLoading = false } watchEffect(() => { if (drop.holder_of || runtimeMintCount) { useAsyncQuery<{ nftEntitiesConnection: { totalCount: number } nftEntities: Array<{ sn: string }> }>({ clientId: client.value, query: holderOfCollectionById, variables: { id: drop.holder_of, account: accountId.value, }, }).then((res) => { holderOfCollectionData.value = res.data.value checkAvailableNfts() }) } }) return { holderOfCollectionData, availableNfts, holderOfCollection, }}