No Description

test.tsx 5.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. import React, { PureComponent } from "react";
  2. import classnames from 'classnames';
  3. import styles from './test.less';
  4. export const ImgRowList = (
  5. imglist: Array<string>,
  6. outterKey: string,
  7. type: string | null = 'normal',
  8. ) => {
  9. if (!imglist || !Array.isArray(imglist)) return null;
  10. return (
  11. <div
  12. className={classnames(styles.normal_img_row_list, {
  13. [styles.middle_type]: type === 'middle',
  14. })}
  15. >
  16. {imglist.map((image_url: string, index: number) => {
  17. return (
  18. <span key={`${outterKey}_${image_url}`}>
  19. <img src={image_url} alt={`comment ${index}`} />
  20. </span>
  21. );
  22. })}
  23. </div>
  24. );
  25. };
  26. interface MyNormalListProps {
  27. style?: any;
  28. renderItem: Function | any;
  29. renderData: Array<any>;
  30. }
  31. export class MyNormalList extends PureComponent<MyNormalListProps, {}> {
  32. render() {
  33. const {
  34. style: innerStyle = {},
  35. renderItem = () => {},
  36. renderData = [],
  37. } = this.props;
  38. if (!renderData || !Array.isArray(renderData)) {
  39. console.error('MyNormalList Components renderData Props must be Array');
  40. return null;
  41. }
  42. return (
  43. <div className={styles.normal_list_wrapper} style={innerStyle}>
  44. {renderData.map((value, index, arr) => renderItem(value, index))}
  45. </div>
  46. );
  47. }
  48. }
  49. interface NormalCardProps {
  50. key: any;
  51. userinfo: {
  52. nickname: string | any;
  53. avatar: string | any;
  54. created: string | number;
  55. };
  56. main_content: any;
  57. append_content?: any;
  58. content_img_assets?: Array<string>;
  59. options?: {
  60. header_size?: 'small' | 'normal' | 'middle';
  61. bottom_divider?: boolean;
  62. };
  63. }
  64. export class NormalCard extends PureComponent<NormalCardProps, {}> {
  65. render() {
  66. const {
  67. userinfo: { nickname, avatar, created } = {
  68. nickname: '',
  69. avatar: '',
  70. created: '',
  71. },
  72. main_content = null,
  73. append_content = null,
  74. content_img_assets = [],
  75. options = {
  76. header_size: 'normal',
  77. bottom_divider: false,
  78. },
  79. } = this.props;
  80. //
  81. const RENDEROPTIONS_showImgList =
  82. content_img_assets && content_img_assets.length > 0;
  83. return (
  84. <div
  85. className={classnames(styles.normal_card_wrapper, {
  86. [styles.header_middle]: options.header_size === 'middle', // default
  87. [styles.header_small]: options.header_size === 'small',
  88. [styles.bottom_border]: options.bottom_divider,
  89. })}
  90. >
  91. <time>{created}</time>
  92. <header>
  93. {typeof avatar === 'string' ? (
  94. <div className={styles.avatar_wrapper}>
  95. <img src={avatar} alt="user_avatar" />
  96. </div>
  97. ) : (
  98. avatar
  99. )}
  100. <div className={styles.nickname_wrapper}>{nickname}</div>
  101. </header>
  102. <div className={styles.main_content_wrapper}>
  103. {main_content}
  104. {RENDEROPTIONS_showImgList
  105. ? ImgRowList(content_img_assets, this.props.key)
  106. : null}
  107. </div>
  108. <div className={styles.append_wrapper}>{append_content}</div>
  109. </div>
  110. );
  111. }
  112. }
  113. interface ShareCardProps {
  114. isMobile: boolean | any;
  115. mode: 'line' | 'block';
  116. render_mode: 'text' | 'object';
  117. share_data: any;
  118. }
  119. export class ShareCard extends PureComponent<ShareCardProps, {}> {
  120. render() {
  121. const {
  122. isMobile = false,
  123. render_mode = 'text',
  124. mode = 'line',
  125. share_data = '',
  126. } = this.props;
  127. return (
  128. <div
  129. className={classnames(styles.share_card_wrapper, {
  130. [styles.mobile_mode]: isMobile,
  131. [styles.mode_line]: mode === 'line', // default
  132. [styles.mode_block]: mode === 'block',
  133. })}
  134. >
  135. {render_mode === 'text' ? share_data : null}
  136. </div>
  137. );
  138. }
  139. }
  140. // type TransmitType = 'imgTxt' | 'shortVideo' | 'microVideo';
  141. // type TransmitImgTxtData = {
  142. // user_id?: string|number;
  143. // anonymity?: boolean;
  144. // avatar?: string;
  145. // nickname?: string;
  146. // is_long?: boolean;
  147. // }
  148. // interface TransmitCardProps {
  149. // type: TransmitType;
  150. // data: TransmitImgTxtData;
  151. // }
  152. // export class TransmitCard extends React.PureComponent<TransmitCardProps, {}> {
  153. // renderVideo() {
  154. // return <div className={styles.transmitVideoCard}>Video</div>;
  155. // }
  156. // renderImgTxt() {
  157. // const { data } = this.props;
  158. // const {
  159. // user_id,
  160. // anonymity,
  161. // avatar,
  162. // nickname,
  163. // is_long,
  164. // } = data;
  165. // return (
  166. // <div className={styles.transmitImgTxtCard}>
  167. // <div className={styles.header}>
  168. // <UserLink user_id={user_id} anonymity={anonymity}>
  169. // <Avatar
  170. // id={user_id}
  171. // image={avatar}
  172. // follow={false}
  173. // size="cover"
  174. // className={styles.ava}
  175. // anonymity={anonymity}
  176. // />
  177. // </UserLink>
  178. // <div className={styles.nickname}>
  179. // <UserLink user_id={user_id} anonymity={anonymity}>
  180. // {nickname}
  181. // </UserLink>
  182. // </div>
  183. // <div className={styles.type}>
  184. // {is_long
  185. // ? intl.get('bilingually.imgtxt.article')
  186. // : intl.get('bilingually.imgtxt')}
  187. // </div>
  188. // </div>
  189. // </div>
  190. // );
  191. // }
  192. // render() {
  193. // const { type } = this.props;
  194. // if (type === 'imgTxt') {
  195. // this.renderImgTxt();
  196. // }
  197. // if (type === 'shortVideo' || type === 'microVideo') {
  198. // this.renderVideo();
  199. // }
  200. // return null;
  201. // }
  202. // }
  203. export const Test = "TestComponent";
  204. export const TestRedTxt = () => (
  205. <div className={styles.red}>
  206. RedTxt
  207. </div>
  208. )
  209. export default {
  210. MyNormalList,
  211. NormalCard,
  212. ShareCard,
  213. Test,
  214. // TransmitCard
  215. };