You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

ProjectActivityGraphsHeader.tsx 2.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. /*
  2. * SonarQube
  3. * Copyright (C) 2009-2019 SonarSource SA
  4. * mailto:info AT sonarsource DOT com
  5. *
  6. * This program is free software; you can redistribute it and/or
  7. * modify it under the terms of the GNU Lesser General Public
  8. * License as published by the Free Software Foundation; either
  9. * version 3 of the License, or (at your option) any later version.
  10. *
  11. * This program is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  14. * Lesser General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU Lesser General Public License
  17. * along with this program; if not, write to the Free Software Foundation,
  18. * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  19. */
  20. import * as React from 'react';
  21. import { translate } from 'sonar-ui-common/helpers/l10n';
  22. import Select from 'sonar-ui-common/components/controls/Select';
  23. import AddGraphMetric from './forms/AddGraphMetric';
  24. import { isCustomGraph, GRAPH_TYPES } from '../utils';
  25. interface Props {
  26. addCustomMetric: (metric: string) => void;
  27. removeCustomMetric: (metric: string) => void;
  28. graph: string;
  29. metrics: T.Metric[];
  30. metricsTypeFilter?: string[];
  31. selectedMetrics: string[];
  32. updateGraph: (graphType: string) => void;
  33. }
  34. export default class ProjectActivityGraphsHeader extends React.PureComponent<Props> {
  35. handleGraphChange = (option: { value: string }) => {
  36. if (option.value !== this.props.graph) {
  37. this.props.updateGraph(option.value);
  38. }
  39. };
  40. render() {
  41. const selectOptions = GRAPH_TYPES.map(graph => ({
  42. label: translate('project_activity.graphs', graph),
  43. value: graph
  44. }));
  45. return (
  46. <header className="page-header">
  47. <Select
  48. className="pull-left input-medium"
  49. clearable={false}
  50. onChange={this.handleGraphChange}
  51. options={selectOptions}
  52. searchable={false}
  53. value={this.props.graph}
  54. />
  55. {isCustomGraph(this.props.graph) && (
  56. <AddGraphMetric
  57. addMetric={this.props.addCustomMetric}
  58. className="pull-left spacer-left"
  59. metrics={this.props.metrics}
  60. metricsTypeFilter={this.props.metricsTypeFilter}
  61. removeMetric={this.props.removeCustomMetric}
  62. selectedMetrics={this.props.selectedMetrics}
  63. />
  64. )}
  65. </header>
  66. );
  67. }
  68. }