import { useGetAsset, useGetAssetVariants, type AssetVariantsResponseDto } from "infra/backend-api" import { ASSET_VARIANTS_POLLING_MS } from "../config/assets.config" import type { AssetOverview } from "../types/assets-api.type" const isRunningVariantStatus = (status: string) => status === "pending" || status === "processing" const hasRunningVariants = (variants: AssetVariantsResponseDto["variants"] = []) => variants.some((variant) => isRunningVariantStatus(variant.status)) /** * Данные выбранного asset и его variants. */ export const useAssetOverview = (publicId: string | null): AssetOverview => { const assetQuery = useGetAsset(publicId) const variantsQuery = useGetAssetVariants( publicId, assetQuery.data?.currentVersion ? String(assetQuery.data.currentVersion) : undefined, { refreshInterval: (data) => (hasRunningVariants(data?.variants) ? ASSET_VARIANTS_POLLING_MS : 0), }, ) const variants = variantsQuery.data?.variants ?? [] const refresh = async () => { await Promise.all([assetQuery.mutate(), variantsQuery.mutate()]) } return { asset: assetQuery.data ?? null, error: assetQuery.error ?? variantsQuery.error, hasRunningVariants: hasRunningVariants(variants), isLoading: assetQuery.isLoading || variantsQuery.isLoading, isRefreshing: assetQuery.isValidating || variantsQuery.isValidating, refresh, variants, } }