synapse-storage
Version:
Набор инструментов для управления состоянием и апи-запросами
36 lines (35 loc) • 2.03 kB
TypeScript
import type { Endpoint, RequestStatus } from '../../api/types/endpoint.interface';
import type { QueryOptions, QueryResult } from '../../api/types/query.interface';
export interface UseApiMutationResult<TParams, TData> {
/** Запустить мутацию (ошибки не пробрасываются — смотри `error`/`isError`) */
mutate: (params: TParams) => void;
/** Запустить мутацию и дождаться результата (ошибки пробрасываются) */
mutateAsync: (params: TParams) => Promise<QueryResult<TData, Error>>;
/** Данные успешного ответа */
data: TData | undefined;
/** Ошибка мутации */
error: Error | undefined;
/** Текущий статус */
status: RequestStatus;
/** Мутация выполняется */
isLoading: boolean;
/** Мутация завершилась ошибкой */
isError: boolean;
/** Мутация завершилась успехом */
isSuccess: boolean;
/** Сбросить состояние к idle */
reset: () => void;
}
/**
* Хук для выполнения мутаций (POST/PUT/DELETE/PATCH) через эндпоинт ApiClient.
*
* В отличие от {@link useApiQuery}, запрос не стартует автоматически — его
* запускает `mutate`/`mutateAsync`. Мутации не кэшируются (по REST-методу), а их
* `invalidatesTags` инвалидируют кэш — активные `useApiQuery` соседних эндпоинтов
* автоматически перезапросятся через шину инвалидации.
*
* @example
* const { mutate, isLoading } = useApiMutation(endpoints.createUser)
* mutate({ name: 'Alex' })
*/
export declare function useApiMutation<TParams extends Record<string, any>, TData>(endpoint: Endpoint<TParams, TData>, options?: QueryOptions): UseApiMutationResult<TParams, TData>;