widgetSyncContext.stories.tsx 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. import {Fragment, useState} from 'react';
  2. import styled from '@emotion/styled';
  3. import {Button} from 'sentry/components/button';
  4. import JSXNode from 'sentry/components/stories/jsxNode';
  5. import SideBySide from 'sentry/components/stories/sideBySide';
  6. import storyBook from 'sentry/stories/storyBook';
  7. import {LineChartWidget} from '../widgets/lineChartWidget/lineChartWidget';
  8. import sampleDurationTimeSeries from '../widgets/lineChartWidget/sampleDurationTimeSeries.json';
  9. import sampleThroughputTimeSeries from '../widgets/lineChartWidget/sampleThroughputTimeSeries.json';
  10. import {WidgetSyncContextProvider} from './widgetSyncContext';
  11. export default storyBook('WidgetSyncContext', story => {
  12. story('Getting Started', () => {
  13. const [visible, setVisible] = useState<boolean>(false);
  14. return (
  15. <Fragment>
  16. <p>
  17. <JSXNode name="WidgetSyncContext" /> is a Dashboard Widget Context. All Line
  18. Chart widgets within this context will be synchronized via{' '}
  19. <code>echarts.connect</code>
  20. </p>
  21. <p>
  22. <Button onClick={() => setVisible(true)}>Show Second Chart</Button>{' '}
  23. <Button onClick={() => setVisible(false)}>Hide Second Chart</Button>
  24. </p>
  25. <WidgetSyncContextProvider>
  26. <SideBySide>
  27. <MediumWidget>
  28. <LineChartWidget
  29. title="span.duration"
  30. timeseries={[sampleDurationTimeSeries]}
  31. meta={{
  32. fields: {
  33. 'span.duration': 'duration',
  34. },
  35. units: {
  36. 'span.duration': 'millisecond',
  37. },
  38. }}
  39. />
  40. </MediumWidget>
  41. {visible && (
  42. <MediumWidget>
  43. <LineChartWidget
  44. title="span.duration"
  45. timeseries={[sampleThroughputTimeSeries]}
  46. meta={{
  47. fields: {
  48. 'spm()': 'rate',
  49. },
  50. units: {
  51. 'spm()': '1/minute',
  52. },
  53. }}
  54. />
  55. </MediumWidget>
  56. )}
  57. </SideBySide>
  58. </WidgetSyncContextProvider>
  59. </Fragment>
  60. );
  61. });
  62. });
  63. const MediumWidget = styled('div')`
  64. width: 420px;
  65. height: 250px;
  66. `;