ChatSocialMessage.tsx 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import { Avatar, Col, Row } from 'antd';
  2. import dynamic from 'next/dynamic';
  3. import React, { FC } from 'react';
  4. import { ChatSocialMessage as ChatMessage } from '~/interfaces/chat-social-message.model';
  5. import styles from './ChatSocialMessage.module.scss';
  6. const FollowIcon = dynamic(() => import('./follow.svg'));
  7. const LikeIcon = dynamic(() => import('./like.svg'));
  8. const RepostIcon = dynamic(() => import('./repost.svg'));
  9. export interface ChatSocialMessageProps {
  10. message: ChatMessage;
  11. }
  12. export const ChatSocialMessage: FC<ChatSocialMessageProps> = ({ message }) => {
  13. const { body, title, image, link, type } = message;
  14. let Icon: React.ComponentType<any>;
  15. switch (type.toString()) {
  16. case 'follow':
  17. Icon = FollowIcon;
  18. break;
  19. case 'like':
  20. Icon = LikeIcon;
  21. break;
  22. case 'repost':
  23. Icon = RepostIcon;
  24. break;
  25. default:
  26. break;
  27. }
  28. return (
  29. <div className={styles.follower}>
  30. <a href={link} target="_blank" rel="noreferrer">
  31. <Row wrap={false}>
  32. <Col span={6}>
  33. <Avatar src={image} alt="Avatar" className={styles.avatar}>
  34. <img src="/logo" alt="Logo" className={styles.placeholder} />
  35. </Avatar>
  36. <Icon className={styles.icon} />
  37. </Col>
  38. <Col>
  39. <Row className={styles.account}>{title}</Row>
  40. <Row className={styles.body}>{body}</Row>
  41. </Col>
  42. </Row>
  43. </a>
  44. </div>
  45. );
  46. };