"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.ProgressIndicator = exports.LoadingSteps = void 0; var _eui = require("@elastic/eui"); var _react = _interopRequireWildcard(require("react")); var _useAsyncFn = _interopRequireDefault(require("react-use/lib/useAsyncFn")); var _useTimeoutFn = _interopRequireDefault(require("react-use/lib/useTimeoutFn")); var _i18n = require("@kbn/i18n"); var _use_kibana = require("./use_kibana"); function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } /* * 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 and the Server Side Public License, v 1; you may not use this file except * in compliance with, at your election, the Elastic License 2.0 or the Server * Side Public License, v 1. */ function isKibanaPastPreboot(response, body) { var _response$headers$get, _body$status, _body$status$core, _body$status$core$ela, _body$status2, _body$status2$core, _body$status2$core$sa; if (!(response !== null && response !== void 0 && (_response$headers$get = response.headers.get('content-type')) !== null && _response$headers$get !== void 0 && _response$headers$get.includes('application/json'))) { return false; } return ( // Status endpoint may require authentication after `preboot` stage. (response === null || response === void 0 ? void 0 : response.status) === 401 || // We're only interested in the availability of the critical core services. (body === null || body === void 0 ? void 0 : (_body$status = body.status) === null || _body$status === void 0 ? void 0 : (_body$status$core = _body$status.core) === null || _body$status$core === void 0 ? void 0 : (_body$status$core$ela = _body$status$core.elasticsearch) === null || _body$status$core$ela === void 0 ? void 0 : _body$status$core$ela.level) === 'available' && (body === null || body === void 0 ? void 0 : (_body$status2 = body.status) === null || _body$status2 === void 0 ? void 0 : (_body$status2$core = _body$status2.core) === null || _body$status2$core === void 0 ? void 0 : (_body$status2$core$sa = _body$status2$core.savedObjects) === null || _body$status2$core$sa === void 0 ? void 0 : _body$status2$core$sa.level) === 'available' ); } const ProgressIndicator = ({ onSuccess }) => { const { http } = (0, _use_kibana.useKibana)(); const [status, checkStatus] = (0, _useAsyncFn.default)(async () => { let isAvailable = false; let isPastPreboot = false; try { const { response, body } = await http.get('/api/status', { asResponse: true }); isAvailable = response ? response.status < 500 : undefined; isPastPreboot = isKibanaPastPreboot(response, body); } catch (error) { const { response, body = {} } = error; isAvailable = response ? response.status < 500 : undefined; isPastPreboot = isKibanaPastPreboot(response, body); } return isAvailable === true && isPastPreboot ? 'complete' : isAvailable === false ? 'unavailable' : isAvailable === true && !isPastPreboot ? 'preboot' : 'unknown'; }); const [, cancelPolling, resetPolling] = (0, _useTimeoutFn.default)(checkStatus, 1000); (0, _react.useEffect)(() => { if (status.value === 'complete') { cancelPolling(); onSuccess === null || onSuccess === void 0 ? void 0 : onSuccess(); } else if (status.loading === false) { resetPolling(); } }, [status.loading, status.value]); // eslint-disable-line react-hooks/exhaustive-deps return /*#__PURE__*/_react.default.createElement(_eui.EuiPanel, { color: "transparent" }, /*#__PURE__*/_react.default.createElement(LoadingSteps, { currentStepId: status.value, steps: [{ id: 'preboot', title: _i18n.i18n.translate('interactiveSetup.progressIndicator.prebootStepTitle', { defaultMessage: 'Saving settings' }) }, { id: 'unavailable', title: _i18n.i18n.translate('interactiveSetup.progressIndicator.unavailableStepTitle', { defaultMessage: 'Starting Elastic' }) }, { id: 'complete', title: _i18n.i18n.translate('interactiveSetup.progressIndicator.completeStepTitle', { defaultMessage: 'Completing setup' }) }] })); }; exports.ProgressIndicator = ProgressIndicator; const LoadingSteps = ({ currentStepId, steps }) => { const [stepIndex, setStepIndex] = (0, _react.useState)(0); const currentStepIndex = steps.findIndex(step => step.id === currentStepId); // Ensure that loading progress doesn't move backwards (0, _react.useEffect)(() => { if (currentStepIndex > stepIndex) { setStepIndex(currentStepIndex); } }, [currentStepIndex, stepIndex]); return /*#__PURE__*/_react.default.createElement(_eui.EuiSteps, { steps: steps.map((step, i) => ({ status: i <= stepIndex ? 'complete' : i - 1 === stepIndex ? 'loading' : 'incomplete', children: null, ...step })) }); }; exports.LoadingSteps = LoadingSteps;