import { useState } from "react" import { useSWRConfig } from "swr" 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(null) const [isCreating, setIsCreating] = useState(false) const createAsset = async (input: CreateAssetInput) => { setError(null) setIsCreating(true) try { 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, } }