detailsPanel.tsx 936 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. import styled from '@emotion/styled';
  2. import omit from 'lodash/omit';
  3. import {space} from 'sentry/styles/space';
  4. import {defined} from 'sentry/utils';
  5. import KeyValueList from '../interfaces/keyValueList';
  6. import type {ViewHierarchyWindow} from '.';
  7. type DetailsPanelProps = {
  8. data: ViewHierarchyWindow;
  9. getTitle?: (data: ViewHierarchyWindow) => string;
  10. };
  11. function DetailsPanel({data, getTitle}: DetailsPanelProps) {
  12. const keyValueData = Object.entries(omit(data, 'children')).map(([key, value]) => ({
  13. key,
  14. value,
  15. subject: key,
  16. }));
  17. return (
  18. <Container>
  19. {defined(getTitle) && <Title>{getTitle(data)}</Title>}
  20. <KeyValueList data={keyValueData} />
  21. </Container>
  22. );
  23. }
  24. export {DetailsPanel};
  25. const Title = styled('header')`
  26. margin-bottom: ${space(1)};
  27. font-weight: ${p => p.theme.fontWeightBold};
  28. `;
  29. const Container = styled('div')`
  30. padding: ${space(1.5)};
  31. padding-bottom: 0;
  32. `;