groupingConfigSelect.tsx 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. import React from 'react';
  2. import styled from '@emotion/styled';
  3. import AsyncComponent from 'app/components/asyncComponent';
  4. import DropdownAutoComplete from 'app/components/dropdownAutoComplete';
  5. import DropdownButton from 'app/components/dropdownButton';
  6. import Tooltip from 'app/components/tooltip';
  7. import {t} from 'app/locale';
  8. import {EventGroupingConfig} from 'app/types';
  9. import {GroupingConfigItem} from '.';
  10. type Props = AsyncComponent['props'] & {
  11. eventConfigId: string;
  12. configId: string;
  13. onSelect: (selection: any) => void;
  14. };
  15. type State = AsyncComponent['state'] & {
  16. configs: EventGroupingConfig[];
  17. };
  18. class GroupingConfigSelect extends AsyncComponent<Props, State> {
  19. getDefaultState() {
  20. return {
  21. ...super.getDefaultState(),
  22. configs: [],
  23. };
  24. }
  25. getEndpoints(): ReturnType<AsyncComponent['getEndpoints']> {
  26. return [['configs', '/grouping-configs/']];
  27. }
  28. renderLoading() {
  29. return this.renderBody();
  30. }
  31. renderBody() {
  32. const {configId, eventConfigId, onSelect} = this.props;
  33. const {configs} = this.state;
  34. const options = configs.map(({id, hidden}) => ({
  35. value: id,
  36. label: (
  37. <GroupingConfigItem isHidden={hidden} isActive={id === eventConfigId}>
  38. {id}
  39. </GroupingConfigItem>
  40. ),
  41. }));
  42. return (
  43. <DropdownAutoComplete onSelect={onSelect} items={options}>
  44. {({isOpen}) => (
  45. <Tooltip title={t('Click here to experiment with other grouping configs')}>
  46. <StyledDropdownButton isOpen={isOpen} size="small">
  47. <GroupingConfigItem isActive={eventConfigId === configId}>
  48. {configId}
  49. </GroupingConfigItem>
  50. </StyledDropdownButton>
  51. </Tooltip>
  52. )}
  53. </DropdownAutoComplete>
  54. );
  55. }
  56. }
  57. const StyledDropdownButton = styled(DropdownButton)`
  58. font-weight: inherit;
  59. `;
  60. export default GroupingConfigSelect;