2022-11-09 12:28:04 +08:00
import React , { useState } from 'react' ;
import type Icon from '@ant-design/icons' ;
import { LikeOutlined , MessageOutlined , StarOutlined } from '@ant-design/icons' ;
import { Avatar , List , Skeleton , Switch } from 'antd' ;
interface IconTextProps {
icon : typeof Icon ;
text : React.ReactNode ;
}
const listData = Array . from ( { length : 3 } ) . map ( ( _ , i ) = > ( {
href : 'https://ant.design' ,
title : ` ant design part ${ i } ` ,
avatar : 'https://joeschmoe.io/api/v1/random' ,
description :
'Ant Design, a design language for background applications, is refined by Ant UED Team.' ,
content :
'We supply a series of design principles, practical patterns and high quality design resources (Sketch and Axure), to help people create their product prototypes beautifully and efficiently.' ,
} ) ) ;
const IconText = ( { icon , text } : IconTextProps ) = > (
< span >
{ React . createElement ( icon , { style : { marginRight : 8 } } ) }
{ text }
< / span >
) ;
const App : React.FC = ( ) = > {
const [ loading , setLoading ] = useState ( true ) ;
const onChange = ( checked : boolean ) = > {
setLoading ( ! checked ) ;
} ;
return (
< >
< Switch checked = { ! loading } onChange = { onChange } / >
< List
itemLayout = "vertical"
size = "large"
dataSource = { listData }
2022-11-19 13:47:33 +08:00
renderItem = { ( item ) = > (
2022-11-09 12:28:04 +08:00
< List.Item
key = { item . title }
actions = {
! loading
? [
< IconText icon = { StarOutlined } text = "156" key = "list-vertical-star-o" / > ,
< IconText icon = { LikeOutlined } text = "156" key = "list-vertical-like-o" / > ,
< IconText icon = { MessageOutlined } text = "2" key = "list-vertical-message" / > ,
]
: undefined
}
extra = {
! loading && (
< img
width = { 272 }
alt = "logo"
src = "https://gw.alipayobjects.com/zos/rmsportal/mqaQswcyDLcXyDKnZfES.png"
/ >
)
}
>
< Skeleton loading = { loading } active avatar >
< List.Item.Meta
avatar = { < Avatar src = { item . avatar } / > }
title = { < a href = { item . href } > { item . title } < / a > }
description = { item . description }
/ >
{ item . content }
< / Skeleton >
< / List.Item >
) }
/ >
< / >
) ;
} ;
export default App ;