tracesSpansTable.tsx 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import {Fragment, useMemo} from 'react';
  2. import styled from '@emotion/styled';
  3. import GridEditable, {COL_WIDTH_UNDEFINED} from 'sentry/components/gridEditable';
  4. import type {CursorHandler} from 'sentry/components/pagination';
  5. import Pagination from 'sentry/components/pagination';
  6. import {Container} from 'sentry/utils/discover/styles';
  7. import {useLocation} from 'sentry/utils/useLocation';
  8. interface TracesSpansTableProps {
  9. data: any[];
  10. fields: string[];
  11. handleCursor: CursorHandler;
  12. isLoading: boolean;
  13. pageLinks?: string;
  14. }
  15. export function TracesSpansTable({
  16. data,
  17. fields,
  18. isLoading,
  19. pageLinks,
  20. handleCursor,
  21. }: TracesSpansTableProps) {
  22. const location = useLocation();
  23. const columnOrder = useMemo(() => {
  24. return fields.map(field => {
  25. return {
  26. key: field,
  27. width: COL_WIDTH_UNDEFINED,
  28. name: field, // TODO: add more user friendly names for them
  29. };
  30. });
  31. }, [fields]);
  32. return (
  33. <Fragment>
  34. <StyledGridEditable
  35. isLoading={isLoading}
  36. columnOrder={columnOrder}
  37. columnSortBy={[]}
  38. data={data}
  39. grid={{
  40. renderBodyCell: renderBodyCell(),
  41. }}
  42. location={location}
  43. />
  44. <StyledPagination pageLinks={pageLinks} onCursor={handleCursor} />
  45. </Fragment>
  46. );
  47. }
  48. function renderBodyCell() {
  49. return function (col, row) {
  50. return <Container>{row[col.key]}</Container>;
  51. };
  52. }
  53. const StyledGridEditable = styled(GridEditable)`
  54. margin: 0px;
  55. `;
  56. const StyledPagination = styled(Pagination)`
  57. margin: 0px;
  58. `;