Files
image-platform/apps/admin/src/business/assets/hooks/use-create-asset.hook.ts

48 lines
1.4 KiB
TypeScript
Raw Normal View History

import { useState } from "react"
import { useSWRConfig } from "swr"
2026-05-12 07:54:32 +03:00
import { backendApi, getAssetsListKey, getProjectAssetsKey } from "infra/backend-api"
import { ASSETS_DASHBOARD_LIST_PARAMS } from "../config/assets.config"
import { toError } from "../lib/to-error"
import type { CreateAssetAction, CreateAssetInput } from "../types/assets-api.type"
/**
* Сценарий создания asset с обновлением списка.
*/
export const useCreateAsset = (): CreateAssetAction => {
const { mutate } = useSWRConfig()
const [error, setError] = useState<Error | null>(null)
const [isCreating, setIsCreating] = useState(false)
const createAsset = async (input: CreateAssetInput) => {
setError(null)
setIsCreating(true)
try {
2026-05-12 07:54:32 +03:00
const { projectSlug, ...request } = input
const createdAsset = projectSlug
? await backendApi.projects.createProjectAsset({ projectSlug }, request)
: await backendApi.assets.createAsset(request)
await Promise.all([
mutate(getAssetsListKey(ASSETS_DASHBOARD_LIST_PARAMS)),
projectSlug ? mutate(getProjectAssetsKey(projectSlug, ASSETS_DASHBOARD_LIST_PARAMS)) : Promise.resolve(),
])
return createdAsset
} catch (caughtError) {
const nextError = toError(caughtError)
setError(nextError)
throw nextError
} finally {
setIsCreating(false)
}
}
return {
createAsset,
error,
isCreating,
}
}