/* * SPDX-License-Identifier: Apache-2.0 * * The OpenSearch Contributors require contributions made to * this file be licensed under the Apache-2.0 license or a * compatible open source license. * * Any modifications Copyright OpenSearch Contributors. See * GitHub history for details. */ /* * Licensed to Elasticsearch B.V. under one or more contributor * license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright * ownership. Elasticsearch B.V. licenses this file to you under * the Apache License, Version 2.0 (the "License"); you may * not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ import React, { Component } from 'react'; import { FormattedMessage } from '@osd/i18n/react'; import PropTypes from 'prop-types'; import { i18n } from '@osd/i18n'; import { EuiBadge, EuiButtonEmpty, EuiContextMenuPanel, EuiContextMenuItem, EuiFlexGroup, EuiFlexItem, EuiLoadingSpinner, EuiPopover, EuiTextColor, EuiToolTip, } from '@elastic/eui'; import { RequestStatus } from '../../../../common/adapters'; import { Request } from '../../../../common/adapters/request/types'; interface RequestSelectorState { isPopoverOpen: boolean; } interface RequestSelectorProps { requests: Request[]; selectedRequest: Request; onRequestChanged: Function; } export class RequestSelector extends Component { static propTypes = { requests: PropTypes.array.isRequired, selectedRequest: PropTypes.object.isRequired, onRequestChanged: PropTypes.func, }; state = { isPopoverOpen: false, }; togglePopover = () => { this.setState((prevState: RequestSelectorState) => ({ isPopoverOpen: !prevState.isPopoverOpen, })); }; closePopover = () => { this.setState({ isPopoverOpen: false, }); }; renderRequestDropdownItem = (request: Request, index: number) => { const hasFailed = request.status === RequestStatus.ERROR; const inProgress = request.status === RequestStatus.PENDING; return ( { this.props.onRequestChanged(request); this.closePopover(); }} toolTipContent={request.description} toolTipPosition="left" data-test-subj={`inspectorRequestChooser${request.name}`} > {request.name} {hasFailed && ( )} {inProgress && ( )} ); }; renderRequestDropdown() { const button = ( {this.props.selectedRequest.name} ); return ( ); } render() { const { selectedRequest, requests } = this.props; return ( {requests.length <= 1 && (
{selectedRequest.name}
)} {requests.length > 1 && this.renderRequestDropdown()}
{selectedRequest.status !== RequestStatus.PENDING && ( ) : ( ) } content={ } > )} {selectedRequest.status === RequestStatus.PENDING && ( )}
); } }