taro-material
Version:
Mini Program components that implement Google's Material Design.
92 lines (82 loc) • 2.27 kB
JavaScript
import Taro from '@tarojs/taro'
import { View, Text, Image } from '@tarojs/components'
import PropTypes from 'prop-types'
import classNames from 'classnames'
import _isFunction from 'lodash/isFunction'
import AtComponent from '../../common/component'
export default class AtCard extends AtComponent {
handleClick = (...args) => {
if (_isFunction(this.props.onClick)) {
this.props.onClick(...args)
}
}
render () {
const { title, note, extra, thumb, isFull, icon } = this.props
const rootClass = classNames(
'at-card',
{
'at-card--full': isFull
},
this.props.className
)
const iconClass = classNames({
'at-icon': true,
[`at-icon-${icon && icon.value}`]: icon && icon.value,
'at-card__header-icon': true,
})
const iconStyle = {
color: (icon && icon.color) || '',
fontSize: (icon && `${icon.size}px`) || '',
}
return (
<View onClick={this.handleClick} className={rootClass}>
<View className='at-card__header'>
{thumb && (
<View className='at-card__header-thumb'>
<Image
className='at-card__header-thumb-info'
mode='scaleToFill'
src={thumb}
/>
</View>
)}
{!thumb && icon && icon.value && (
<Text className={iconClass} style={iconStyle}></Text>
)}
<Text className='at-card__header-title'>{title}</Text>
{extra && <Text className='at-card__header-extra'>{extra}</Text>}
</View>
<View className='at-card__content'>
<View className='at-card__content-info'>{this.props.children}</View>
{note && <View className='at-card__content-note'>{note}</View>}
</View>
</View>
)
}
}
AtCard.defaultProps = {
note: '',
isFull: false,
thumb: '',
title: '',
extra: '',
icon: {},
onClick () {},
}
AtCard.propTypes = {
note: PropTypes.string,
isFull: PropTypes.bool,
thumb: PropTypes.string,
title: PropTypes.string,
extra: PropTypes.string,
icon: PropTypes.object,
onClick: PropTypes.func,
}
AtCard.defaultProps = {
note: '',
isFull: false,
thumb: '',
title: '',
extra: '',
onClick: () => {},
}