// Copyright 2020 BMW Group // Copyright 2022 Acme Gating, LLC // // Licensed 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, { useState } from 'react' import PropTypes from 'prop-types' import { Button, TextInput, Dropdown, DropdownItem, DropdownPosition, DropdownToggle, Toolbar, ToolbarContent, ToolbarGroup, ToolbarItem, ToolbarToggleGroup, } from '@patternfly/react-core' function JobGraphToolbar(props) { const pipelineSet = new Set() props.project.configs.forEach((config) => { config.pipelines.forEach((pipeline) => { pipelineSet.add(pipeline.name) }) }) const pipelines = Array.from(pipelineSet) const [isPipelineOpen, setIsPipelineOpen] = useState(false) const [currentPipeline, setCurrentPipeline] = useState(props.defaultPipeline || pipelines[0]) const [currentBranch, setCurrentBranch] = useState(props.defaultBranch || '') function handlePipelineSelect(event) { setCurrentPipeline(event.target.innerText) setIsPipelineOpen(false) } function handlePipelineToggle(isOpen) { setIsPipelineOpen(isOpen) } function handleBranchChange(newValue) { setCurrentBranch(newValue) } function handleInputSend(event) { // In case the event comes from a key press, only accept "Enter" if (event.key && event.key !== 'Enter') { return } // Ignore empty values if (!currentBranch) { return } // Clear the input field setCurrentBranch('') // Notify the parent component about the filter change props.onChange(currentPipeline, currentBranch) } function renderJobGraphToolbar () { return <> Pipeline: {currentPipeline} } isOpen={isPipelineOpen} dropdownItems={pipelines.map((pipeline) => ( {pipeline} ))} style={{ width: '100%' }} menuAppendTo={document.body} /> handleInputSend(event)} /> } return (
{renderJobGraphToolbar()}
) } JobGraphToolbar.propTypes = { project: PropTypes.object.isRequired, onChange: PropTypes.func.isRequired, defaultBranch: PropTypes.string, defaultPipeline: PropTypes.string, } export default JobGraphToolbar