11import React from 'react' ;
22import dayjs from 'dayjs' ;
3- import { useHistory , Link } from 'umi' ;
4- import { Space , Avatar , Tag } from 'antd' ;
5- import { ListToolBarProps } from '@ant-design/pro-table' ;
6- import ProList , { ProListMetas } from '@ant-design/pro-list' ;
3+ import { Link } from 'umi' ;
4+ import { Space , Avatar , Tag , List } from 'antd' ;
75
86import { MESSAGE_TYPE_MAP , MessageType } from '@/constants' ;
97
108import * as styles from './index.less' ;
119
12- const MessageList : React . FC < Props > = ( {
13- dataSource,
14- loading,
15- toolbar,
16- onClick,
17- } ) => {
18- const metas : ProListMetas = {
19- avatar : {
20- dataIndex : 'author.avatar_url' ,
21- render : ( _ , entity : MessageModel ) => {
22- const { type : _type , author } = entity ;
23- const type = MESSAGE_TYPE_MAP [ _type as MessageType ] ;
24- const { loginname, avatar_url } = author ;
25-
26- return (
27- < Space size = { 16 } >
28- < div
29- style = { {
30- width : '200px' ,
31- } }
32- >
33- < Link to = { `/user/${ loginname } ` } className = { styles . link } >
34- < Space size = { 8 } >
35- < Avatar size = "small" src = { avatar_url } />
36- < span > { loginname } </ span >
37- </ Space >
38- </ Link >
39- </ div >
40-
41- < Tag color = { type . color } > { type . name } </ Tag >
42- </ Space >
43- ) ;
44- } ,
45- } ,
46- title : {
47- dataIndex : 'title' ,
48- valueType : 'text' ,
49- render : ( _ , entity : MessageModel ) => {
10+ const MessageList : React . FC < Props > = ( { dataSource, loading, onClick } ) => {
11+ return (
12+ < List
13+ loading = { loading }
14+ dataSource = { dataSource }
15+ renderItem = { ( item ) => {
5016 const {
5117 id : messageId ,
18+ type : _type ,
19+ create_at,
5220 topic : { id, title } ,
53- } = entity ;
21+ author : { loginname, avatar_url } ,
22+ } = item ;
23+
24+ const type = MESSAGE_TYPE_MAP [ _type as MessageType ] ;
25+
5426 return (
55- < Link
56- to = { `/topic/${ id } ` }
57- className = { styles . link }
58- onClick = { ( ) => {
59- onClick && onClick ( messageId ) ;
60- } }
61- >
62- { title }
63- </ Link >
64- ) ;
65- } ,
66- } ,
67- actions : {
68- render : ( _ , entity : MessageModel ) => {
69- return dayjs ( entity . create_at ) . fromNow ( ) ;
70- } ,
71- } ,
72- } ;
27+ < List . Item >
28+ < List . Item . Meta
29+ avatar = {
30+ < Space size = { 16 } >
31+ < div
32+ style = { {
33+ width : '200px' ,
34+ } }
35+ >
36+ < Link to = { `/user/${ loginname } ` } className = { styles . link } >
37+ < Space size = { 8 } >
38+ < Avatar size = "small" src = { avatar_url } />
39+ < span > { loginname } </ span >
40+ </ Space >
41+ </ Link >
42+ </ div >
7343
74- return (
75- < ProList
76- rowKey = "id"
77- showActions = "always"
78- dataSource = { dataSource }
79- loading = { loading }
80- metas = { metas }
81- className = { styles . list }
82- toolbar = { toolbar }
44+ < Tag color = { type . color } > { type . name } </ Tag >
45+ </ Space >
46+ }
47+ title = {
48+ < Link
49+ to = { `/topic/${ id } ` }
50+ className = { styles . link }
51+ onClick = { ( ) => {
52+ onClick && onClick ( messageId ) ;
53+ } }
54+ >
55+ { title }
56+ </ Link >
57+ }
58+ />
59+ < div > { dayjs ( create_at ) . fromNow ( ) } </ div >
60+ </ List . Item >
61+ ) ;
62+ } }
8363 />
8464 ) ;
8565} ;
@@ -89,6 +69,5 @@ export default MessageList;
8969interface Props {
9070 dataSource ?: MessageModel [ ] ;
9171 loading ?: boolean ;
92- toolbar ?: ListToolBarProps ;
9372 onClick ?: ( id : string ) => void ;
9473}
0 commit comments