import * as React from 'react'; import { ApiClientError } from '../services/httpClient'; export interface AsyncSubmit { isBusy: boolean; error?: string; /** Показать ошибку без запроса — например, результат валидации формы. */ fail: (message: string) => void; run: (action: () => Promise) => void; } /** * Состояние вокруг одного пишущего запроса: «выполняется» + текст ошибки. * Используется формами и подтверждением удаления, чтобы не дублировать * setBusy/setError/finally в каждом экране. */ export function useAsyncSubmit(): AsyncSubmit { const [isBusy, setIsBusy] = React.useState(false); const [error, setError] = React.useState(); const run = (action: () => Promise): void => { setIsBusy(true); setError(undefined); action() .catch((e: ApiClientError) => setError(e.message)) .finally(() => setIsBusy(false)); }; return { isBusy, error, fail: setError, run }; }