da158cfd84
Tests / test (push) Successful in 2m26s
Co-authored-by: gorbenko.pavel <gorbenko.pavel@tansu.kz> Reviewed-on: http://git.tnsu.kz/gorbenko.pavel/tnsu-approval-route/pulls/5
28 lines
1.2 KiB
TypeScript
28 lines
1.2 KiB
TypeScript
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<ResolveTemplateRouteResult | undefined>();
|
|
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 };
|
|
}
|