"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useCreateSlo = useCreateSlo; var _i18n = require("@kbn/i18n"); var _rison = require("@kbn/rison"); var _reactQuery = require("@tanstack/react-query"); var _uuid = require("uuid"); var _paths = require("../../../common/locators/paths"); var _kibana_react = require("../../utils/kibana_react"); var _query_key_factory = require("./query_key_factory"); /* * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one * or more contributor license agreements. Licensed under the Elastic License * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ function useCreateSlo() { const { application: { navigateToUrl }, http, notifications: { toasts } } = (0, _kibana_react.useKibana)().services; const queryClient = (0, _reactQuery.useQueryClient)(); return (0, _reactQuery.useMutation)(['createSlo'], ({ slo }) => { const body = JSON.stringify(slo); return http.post(`/api/observability/slos`, { body }); }, { onMutate: async ({ slo }) => { var _queriesData$at, _previousData$page, _previousData$perPage, _previousData$results; await queryClient.cancelQueries({ queryKey: _query_key_factory.sloKeys.lists(), exact: false }); const queriesData = queryClient.getQueriesData({ queryKey: _query_key_factory.sloKeys.lists(), exact: false }); const [queryKey, previousData] = (_queriesData$at = queriesData === null || queriesData === void 0 ? void 0 : queriesData.at(0)) !== null && _queriesData$at !== void 0 ? _queriesData$at : []; const newItem = { ...slo, id: (0, _uuid.v1)(), summary: undefined }; const optimisticUpdate = { page: (_previousData$page = previousData === null || previousData === void 0 ? void 0 : previousData.page) !== null && _previousData$page !== void 0 ? _previousData$page : 1, perPage: (_previousData$perPage = previousData === null || previousData === void 0 ? void 0 : previousData.perPage) !== null && _previousData$perPage !== void 0 ? _previousData$perPage : 25, total: previousData !== null && previousData !== void 0 && previousData.total ? previousData.total + 1 : 1, results: [...((_previousData$results = previousData === null || previousData === void 0 ? void 0 : previousData.results) !== null && _previousData$results !== void 0 ? _previousData$results : []), newItem] }; if (queryKey) { queryClient.setQueryData(queryKey, optimisticUpdate); } return { queryKey, previousData }; }, onSuccess: (_data, { slo }) => { toasts.addSuccess(_i18n.i18n.translate('xpack.observability.slo.create.successNotification', { defaultMessage: 'Successfully created {name}', values: { name: slo.name } })); }, onError: (error, { slo }, context) => { var _error$body$message, _error$body; if (context !== null && context !== void 0 && context.previousData && context !== null && context !== void 0 && context.queryKey) { queryClient.setQueryData(context.queryKey, context.previousData); } toasts.addError(new Error((_error$body$message = (_error$body = error.body) === null || _error$body === void 0 ? void 0 : _error$body.message) !== null && _error$body$message !== void 0 ? _error$body$message : error.message), { title: _i18n.i18n.translate('xpack.observability.slo.create.errorNotification', { defaultMessage: 'Something went wrong while creating {name}', values: { name: slo.name } }) }); navigateToUrl(http.basePath.prepend(_paths.paths.observability.sloCreateWithEncodedForm((0, _rison.encode)(slo)))); } }); }