contextLine.tsx 947 B

123456789101112131415161718192021222324252627282930313233343536
  1. import * as React from 'react';
  2. import styled from '@emotion/styled';
  3. import classNames from 'classnames';
  4. import {defined} from 'sentry/utils';
  5. const Context = styled('div')`
  6. display: inline;
  7. `;
  8. type Props = {
  9. isActive: boolean;
  10. line: [number, string];
  11. className?: string;
  12. } & React.ComponentProps<typeof React.Fragment>;
  13. const ContextLine = function (props: Props) {
  14. const {line, isActive, className} = props;
  15. let lineWs = '';
  16. let lineCode = '';
  17. if (defined(line[1]) && line[1].match) {
  18. [, lineWs, lineCode] = line[1].match(/^(\s*)(.*?)$/m)!;
  19. }
  20. const Component = !props.children ? React.Fragment : Context;
  21. return (
  22. <li className={classNames(className, 'expandable', {active: isActive})} key={line[0]}>
  23. <Component>
  24. <span className="ws">{lineWs}</span>
  25. <span className="contextline">{lineCode}</span>
  26. </Component>
  27. {props.children}
  28. </li>
  29. );
  30. };
  31. export default ContextLine;