2026-05-05 15:02:55 +03:00
|
|
|
|
import { useState } from "react"
|
|
|
|
|
|
import { useSWRConfig } from "swr"
|
2026-05-12 07:54:32 +03:00
|
|
|
|
import { backendApi, getAssetsListKey, getProjectAssetsKey } from "infra/backend-api"
|
2026-05-05 15:02:55 +03:00
|
|
|
|
|
|
|
|
|
|
import { ASSETS_DASHBOARD_LIST_PARAMS } from "../config/assets.config"
|
2026-05-05 15:20:24 +03:00
|
|
|
|
import { toError } from "../lib/to-error"
|
2026-05-05 15:02:55 +03:00
|
|
|
|
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(),
|
|
|
|
|
|
])
|
2026-05-05 15:02:55 +03:00
|
|
|
|
|
|
|
|
|
|
return createdAsset
|
|
|
|
|
|
} catch (caughtError) {
|
|
|
|
|
|
const nextError = toError(caughtError)
|
|
|
|
|
|
setError(nextError)
|
|
|
|
|
|
throw nextError
|
|
|
|
|
|
} finally {
|
|
|
|
|
|
setIsCreating(false)
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return {
|
|
|
|
|
|
createAsset,
|
|
|
|
|
|
error,
|
|
|
|
|
|
isCreating,
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|