2026-05-05 16:41:20 +03:00
|
|
|
|
import { useGetAsset, useGetAssetVariants, type AssetVariantsResponseDto } from "infra/backend-api"
|
2026-05-05 15:02:55 +03:00
|
|
|
|
|
2026-05-05 16:41:20 +03:00
|
|
|
|
import { ASSET_VARIANTS_POLLING_MS } from "../config/assets.config"
|
2026-05-05 15:02:55 +03:00
|
|
|
|
import type { AssetOverview } from "../types/assets-api.type"
|
|
|
|
|
|
|
2026-05-05 16:41:20 +03:00
|
|
|
|
const isRunningVariantStatus = (status: string) => status === "pending" || status === "processing"
|
|
|
|
|
|
|
|
|
|
|
|
const hasRunningVariants = (variants: AssetVariantsResponseDto["variants"] = []) =>
|
|
|
|
|
|
variants.some((variant) => isRunningVariantStatus(variant.status))
|
|
|
|
|
|
|
2026-05-05 15:02:55 +03:00
|
|
|
|
/**
|
|
|
|
|
|
* Данные выбранного 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,
|
2026-05-05 16:41:20 +03:00
|
|
|
|
{
|
|
|
|
|
|
refreshInterval: (data) => (hasRunningVariants(data?.variants) ? ASSET_VARIANTS_POLLING_MS : 0),
|
|
|
|
|
|
},
|
2026-05-05 15:02:55 +03:00
|
|
|
|
)
|
2026-05-05 16:41:20 +03:00
|
|
|
|
const variants = variantsQuery.data?.variants ?? []
|
|
|
|
|
|
|
|
|
|
|
|
const refresh = async () => {
|
|
|
|
|
|
await Promise.all([assetQuery.mutate(), variantsQuery.mutate()])
|
|
|
|
|
|
}
|
2026-05-05 15:02:55 +03:00
|
|
|
|
|
|
|
|
|
|
return {
|
|
|
|
|
|
asset: assetQuery.data ?? null,
|
|
|
|
|
|
error: assetQuery.error ?? variantsQuery.error,
|
2026-05-05 16:41:20 +03:00
|
|
|
|
hasRunningVariants: hasRunningVariants(variants),
|
2026-05-05 15:02:55 +03:00
|
|
|
|
isLoading: assetQuery.isLoading || variantsQuery.isLoading,
|
2026-05-05 16:41:20 +03:00
|
|
|
|
isRefreshing: assetQuery.isValidating || variantsQuery.isValidating,
|
|
|
|
|
|
refresh,
|
|
|
|
|
|
variants,
|
2026-05-05 15:02:55 +03:00
|
|
|
|
}
|
|
|
|
|
|
}
|