annotated.tsx 936 B

12345678910111213141516171819202122232425262728293031323334
  1. import * as React from 'react';
  2. import AnnotatedText from 'app/components/events/meta/annotatedText';
  3. import MetaData from 'app/components/events/meta/metaData';
  4. import {isFunction} from 'app/utils';
  5. type Props<Values> = {
  6. object: Values;
  7. objectKey: Extract<keyof Values, string>;
  8. required?: boolean;
  9. children: (value: string | null | React.ReactNode) => React.ReactNode | string;
  10. };
  11. /**
  12. * Returns the value of `object[prop]` and returns an annotated component if
  13. * there is meta data
  14. */
  15. const Annotated = <Values extends {}>({
  16. children,
  17. object,
  18. objectKey,
  19. required = false,
  20. }: Props<Values>) => {
  21. return (
  22. <MetaData object={object} prop={objectKey} required={required}>
  23. {(value, meta) => {
  24. const toBeReturned = <AnnotatedText value={value} meta={meta} />;
  25. return isFunction(children) ? children(toBeReturned) : toBeReturned;
  26. }}
  27. </MetaData>
  28. );
  29. };
  30. export default Annotated;