verdnatura-chat/app/containers/markdown/MessageBody/index.js

70 lines
1.8 KiB
JavaScript
Raw Normal View History

2021-08-12 21:05:18 +00:00
/* eslint-disable react/no-array-index-key */
import React from 'react';
import PropTypes from 'prop-types';
import Quote from './Quote';
import Paragraph from './Paragraph';
import Heading from './Heading';
import Code from './Code';
import Link from './Link';
import BigEmoji from './BigEmoji';
2021-08-20 16:25:30 +00:00
import OrderedList from './OrderedList';
import UnorderedList from './UnorderedList';
2021-08-12 21:05:18 +00:00
const isBigEmoji = tokens => tokens.length === 1 && tokens[0].type === 'BIG_EMOJI';
const Body = ({
2021-08-20 16:25:30 +00:00
tokens, mentions, channels, navToRoomInfo, style
}) => {
2021-08-12 21:05:18 +00:00
if (isBigEmoji(tokens)) {
return <BigEmoji value={tokens[0].value} />;
2021-08-12 21:05:18 +00:00
}
return (
<>
{tokens.map((block, index) => {
switch (block.type) {
case 'UNORDERED_LIST':
2021-08-20 16:25:30 +00:00
return <UnorderedList key={index} value={block.value} />;
2021-08-12 21:05:18 +00:00
case 'ORDERED_LIST':
2021-08-20 16:25:30 +00:00
return <OrderedList key={index} value={block.value} />;
2021-08-12 21:05:18 +00:00
case 'TASK':
2021-08-20 16:25:30 +00:00
return <OrderedList key={index} value={block.value} />;
2021-08-12 21:05:18 +00:00
case 'QUOTE':
return <Quote key={index} value={block.value} />;
case 'PARAGRAPH':
2021-08-20 16:25:30 +00:00
return (
<Paragraph
key={index}
value={block.value}
navToRoomInfo={navToRoomInfo}
channels={channels}
mentions={mentions}
style={style}
/>
);
2021-08-12 21:05:18 +00:00
case 'CODE':
return <Code key={index} value={block.value} style={style} />;
2021-08-12 21:05:18 +00:00
case 'LINK':
// eslint-disable-next-line jsx-a11y/anchor-is-valid
return <Link key={index} value={block.value} />;
case 'HEADING':
return <Heading key={index} value={block.value} level={block.level} />;
default:
return null;
}
})}
</>
);
};
Body.propTypes = {
tokens: PropTypes.array,
mentions: PropTypes.array,
2021-08-20 16:25:30 +00:00
channels: PropTypes.array,
navToRoomInfo: PropTypes.func,
style: PropTypes.oneOfType([PropTypes.array, PropTypes.object])
2021-08-12 21:05:18 +00:00
};
export default Body;