frameVariables.tsx 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. import {KeyValueListData} from 'sentry/types';
  2. import {AnnotatedText} from '../../meta/annotatedText';
  3. import KeyValueList from '../keyValueList';
  4. type Props = {
  5. data: Record<string, string | null | Record<string, string | null>>;
  6. meta?: Record<any, any>;
  7. };
  8. export function FrameVariables({data, meta}: Props) {
  9. // make sure that clicking on the variables does not actually do
  10. // anything on the containing element.
  11. const handlePreventToggling = () => (event: React.MouseEvent<HTMLTableElement>) => {
  12. event.stopPropagation();
  13. };
  14. const transformedData: KeyValueListData = [];
  15. const dataKeys = Object.keys(data).reverse();
  16. for (const key of dataKeys) {
  17. transformedData.push({
  18. key,
  19. subject: key,
  20. value: Array.isArray(data[key])
  21. ? (data[key] as unknown as any[]).map((v, i) => {
  22. if (!v && meta?.[key]?.[i]?.['']) {
  23. return <AnnotatedText key={key} value={v} meta={meta?.[key]?.[i]?.['']} />;
  24. }
  25. return v;
  26. })
  27. : data[key],
  28. meta: meta?.[key]?.[''],
  29. });
  30. }
  31. return (
  32. <KeyValueList data={transformedData} onClick={handlePreventToggling} isContextData />
  33. );
  34. }