widgetSyncContext.stories.tsx 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  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. />
  32. </MediumWidget>
  33. {visible && (
  34. <MediumWidget>
  35. <LineChartWidget
  36. title="span.duration"
  37. timeseries={[sampleThroughputTimeSeries]}
  38. />
  39. </MediumWidget>
  40. )}
  41. </SideBySide>
  42. </WidgetSyncContextProvider>
  43. </Fragment>
  44. );
  45. });
  46. });
  47. const MediumWidget = styled('div')`
  48. width: 420px;
  49. height: 250px;
  50. `;