libraryTab.tsx 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. import * as React from 'react';
  2. import styled from '@emotion/styled';
  3. import Alert from 'sentry/components/alert';
  4. import {t} from 'sentry/locale';
  5. import space from 'sentry/styles/space';
  6. import {
  7. DEFAULT_WIDGETS,
  8. WidgetTemplate,
  9. } from 'sentry/views/dashboardsV2/widgetLibrary/data';
  10. import WidgetLibraryCard from 'sentry/views/dashboardsV2/widgetLibrary/widgetCard';
  11. type Props = {
  12. errored: boolean;
  13. selectedWidgets: WidgetTemplate[];
  14. setErrored: (errored: boolean) => void;
  15. setSelectedWidgets: (widgets: WidgetTemplate[]) => void;
  16. };
  17. function DashboardWidgetLibraryTab({
  18. selectedWidgets,
  19. errored,
  20. setSelectedWidgets,
  21. setErrored,
  22. }: Props) {
  23. return (
  24. <React.Fragment>
  25. {errored && !!!selectedWidgets.length ? (
  26. <Alert type="error">
  27. {t(
  28. 'Please select at least one Widget from our Library. Alternatively, you can build a custom widget from scratch.'
  29. )}
  30. </Alert>
  31. ) : null}
  32. <WidgetLibraryGrid>
  33. {DEFAULT_WIDGETS.map((widgetCard, index) => {
  34. return (
  35. <WidgetLibraryCard
  36. data-test-id={`widget-library-card-${index}`}
  37. key={widgetCard.title}
  38. widget={widgetCard}
  39. selectedWidgets={selectedWidgets}
  40. setSelectedWidgets={setSelectedWidgets}
  41. setErrored={setErrored}
  42. />
  43. );
  44. })}
  45. </WidgetLibraryGrid>
  46. </React.Fragment>
  47. );
  48. }
  49. const WidgetLibraryGrid = styled('div')`
  50. display: grid;
  51. grid-template-columns: repeat(2, minmax(100px, 1fr));
  52. grid-template-rows: repeat(2, max-content);
  53. row-gap: ${space(1.5)};
  54. column-gap: ${space(2)};
  55. /* 700px is the max width of the modal */
  56. @media (max-width: 700px) {
  57. grid-template-columns: auto;
  58. }
  59. `;
  60. export default DashboardWidgetLibraryTab;