import * as React from 'react'; import { ResolveTemplateRouteQuery, ResolveTemplateRouteResult } from '../models'; import { ApprovalRouteApi } from '../services/api'; import { useAsyncSubmit } from './useAsyncSubmit'; export interface ResolveRoute { result?: ResolveTemplateRouteResult; isBusy: boolean; error?: string; resolve: (query: ResolveTemplateRouteQuery) => void; fail: (message: string) => void; } /** Диагностический запрос «как разрешится маршрут» и его состояние. */ export function useResolveRoute(api: ApprovalRouteApi): ResolveRoute { const [result, setResult] = React.useState(); const submit = useAsyncSubmit(); const resolve = (query: ResolveTemplateRouteQuery): void => { // Прошлый результат убираем сразу: показывать его рядом с новыми // параметрами формы — вводить пользователя в заблуждение. setResult(undefined); submit.run(() => api.templateRoutes.resolve(query).then(setResult)); }; return { result, isBusy: submit.isBusy, error: submit.error, resolve, fail: submit.fail }; }