chartFooter.tsx 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. import * as React from 'react';
  2. import OptionCheckboxSelector from 'sentry/components/charts/optionCheckboxSelector';
  3. import OptionSelector from 'sentry/components/charts/optionSelector';
  4. import {
  5. ChartControls,
  6. InlineContainer,
  7. SectionHeading,
  8. SectionValue,
  9. } from 'sentry/components/charts/styles';
  10. import {t} from 'sentry/locale';
  11. import {Organization, SelectValue} from 'sentry/types';
  12. import {TOP_EVENT_MODES} from 'sentry/utils/discover/types';
  13. type Props = {
  14. displayMode: string;
  15. displayOptions: SelectValue<string>[];
  16. onAxisChange: (value: string[]) => void;
  17. onDisplayChange: (value: string) => void;
  18. onTopEventsChange: (value: string) => void;
  19. organization: Organization;
  20. topEvents: string;
  21. total: number | null;
  22. yAxisOptions: SelectValue<string>[];
  23. yAxisValue: string[];
  24. };
  25. export default function ChartFooter({
  26. total,
  27. yAxisValue,
  28. yAxisOptions,
  29. onAxisChange,
  30. displayMode,
  31. displayOptions,
  32. onDisplayChange,
  33. onTopEventsChange,
  34. topEvents,
  35. }: Props) {
  36. const elements: React.ReactNode[] = [];
  37. elements.push(<SectionHeading key="total-label">{t('Total Events')}</SectionHeading>);
  38. elements.push(
  39. total === null ? (
  40. <SectionValue data-test-id="loading-placeholder" key="total-value">
  41. &mdash;
  42. </SectionValue>
  43. ) : (
  44. <SectionValue key="total-value">{total.toLocaleString()}</SectionValue>
  45. )
  46. );
  47. const topEventOptions: SelectValue<string>[] = [];
  48. for (let i = 1; i <= 10; i++) {
  49. topEventOptions.push({value: i.toString(), label: i.toString()});
  50. }
  51. return (
  52. <ChartControls>
  53. <InlineContainer>{elements}</InlineContainer>
  54. <InlineContainer>
  55. <OptionSelector
  56. title={t('Display')}
  57. selected={displayMode}
  58. options={displayOptions}
  59. onChange={onDisplayChange}
  60. menuWidth="170px"
  61. />
  62. {TOP_EVENT_MODES.includes(displayMode) && (
  63. <OptionSelector
  64. title={t('Limit')}
  65. selected={topEvents}
  66. options={topEventOptions}
  67. onChange={onTopEventsChange}
  68. menuWidth="60px"
  69. />
  70. )}
  71. <OptionCheckboxSelector
  72. title={t('Y-Axis')}
  73. selected={yAxisValue}
  74. options={yAxisOptions}
  75. onChange={onAxisChange}
  76. />
  77. </InlineContainer>
  78. </ChartControls>
  79. );
  80. }