// Copyright 2021 Red Hat, Inc // // 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 * as React from 'react' import PropTypes from 'prop-types' import { connect } from 'react-redux' import * as moment from 'moment' import 'moment-duration-format' import { Chart, ChartBar, ChartAxis, ChartLegend, ChartTooltip } from '@patternfly/react-charts' import { buildResultLegendData, buildsBarStyle } from './Misc' function BuildsetGanttChart(props) { const { builds, timezone } = props const sortedByStartTime = builds.sort((a, b) => { if (a.start_time > b.start_time) { return -1 } if (a.start_time < b.start_time) { return 1 } return 0 }) const origin = moment.utc(sortedByStartTime[builds.length - 1].start_time).tz(timezone) const longestJobName = builds.reduce((a, build) => (a.length < build.job_name.length ? build.job_name : a), '') const data = sortedByStartTime.map((build) => { return { x: build.job_name, y0: build.start_time ? (moment.utc(build.start_time).tz(timezone) - origin) / 1000 : 0, y: build.end_time ? (moment.utc(build.end_time).tz(timezone) - origin) / 1000 : 0, result: build.result, started: moment.utc(build.start_time).tz(timezone).format('YYYY-MM-DD HH:mm:ss'), ended: moment.utc(build.end_time).tz(timezone).format('YYYY-MM-DD HH:mm:ss'), } }) const legendData = builds.map((build) => ( build.result )).filter((result, idx, self) => { return self.indexOf(result) === idx } ).map((legend) => ({ name: legend })) const uniqueResults = builds.map( (build) => (build.result) ).filter((result, idx, self) => { return self.indexOf(result) === idx }) const chartLegend = buildResultLegendData.filter((legend) => { return uniqueResults.indexOf(legend.name) > -1 }) return (