feat: добавить preview image pipeline в admin

- добавлен polling variants и ручной refresh выбранного asset\n- добавлен picture/srcset preview с выбором preset\n- добавлен URL-state и copy actions для рабочих ссылок
This commit is contained in:
2026-05-05 16:41:20 +03:00
parent 8094535747
commit 0faa8b9d2d
18 changed files with 394 additions and 14 deletions

View File

@@ -1,7 +1,13 @@
import { useGetAsset, useGetAssetVariants } from "infra/backend-api"
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.
*/
@@ -10,12 +16,23 @@ export const useAssetOverview = (publicId: string | null): AssetOverview => {
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,
variants: variantsQuery.data?.variants ?? [],
isRefreshing: assetQuery.isValidating || variantsQuery.isValidating,
refresh,
variants,
}
}