RocketChat/Rocket.Chat

View on GitHub
packages/fuselage-ui-kit/src/elements/ContextElement/ContextElementItem.tsx

Summary

Maintainability
A
0 mins
Test Coverage
import { Box } from '@rocket.chat/fuselage';
import type * as UiKit from '@rocket.chat/ui-kit';
import { BlockContext, ElementType } from '@rocket.chat/ui-kit';

import type { BlockProps } from '../../utils/BlockProps';

type ContextElementProps = BlockProps<UiKit.ContextBlock>;

type ContextElementItemProps = {
  element: ContextElementProps['block']['elements'][number];
  surfaceRenderer: ContextElementProps['surfaceRenderer'];
  index: number;
};

export const ContextElementItem = ({
  element,
  surfaceRenderer,
  index,
}: ContextElementItemProps) => {
  const renderedElement = surfaceRenderer.renderContext(
    element,
    BlockContext.CONTEXT,
    undefined,
    index
  );

  if (!renderedElement) {
    return null;
  }

  switch (element.type) {
    case ElementType.PLAIN_TEXT:
    case ElementType.MARKDOWN:
      return (
        <Box is='span' withTruncatedText fontScale='c1' color='hint' margin={4}>
          {renderedElement}
        </Box>
      );

    default:
      return <>{renderedElement}</>;
  }
};