import classNames from 'classnames' import _chunk from 'lodash/chunk' import PropTypes, { InferProps } from 'prop-types' import React from 'react' import { Image, Text, View } from '@vnxjs/components' import { CommonEvent } from '@vnxjs/components/types/common' import { AtGridItem, AtGridProps } from '../../../types/grid' import AtIcon from '../icon' // import { mergeStyle } from '../../common/utils' export default class AtGrid extends React.Component { public static defaultProps: AtGridProps public static propTypes: InferProps private handleClick = ( item: AtGridItem, index: number, row: number, event: CommonEvent, ): void => { const { onClick, columnNum = 3 } = this.props if (typeof onClick === 'function') { const clickIndex = row * columnNum + index onClick(item, clickIndex, event) } } public render(): JSX.Element | null { const { data, mode, columnNum = 3, hasBorder } = this.props if (Array.isArray(data) && data.length === 0) { return null } const gridGroup = _chunk(data, columnNum) const bodyClass = classNames( ['at-grid__flex-item', 'at-grid-item', `at-grid-item--${mode}`], { 'at-grid-item--no-border': !hasBorder, }, ) return ( {gridGroup.map((item, i) => ( {item.map((childItem, index) => ( {childItem.image && ( )} {childItem.iconInfo && !childItem.image && ( // )} {childItem.value} ))} ))} ) } } AtGrid.defaultProps = { data: [], columnNum: 3, mode: 'square', hasBorder: true, } AtGrid.propTypes = { mode: PropTypes.string, onClick: PropTypes.func, hasBorder: PropTypes.bool, columnNum: PropTypes.number, data: PropTypes.arrayOf( PropTypes.shape({ image: PropTypes.string, value: PropTypes.string, iconInfo: PropTypes.shape({ size: PropTypes.number, value: PropTypes.string, color: PropTypes.string, prefixClass: PropTypes.string, customStyle: PropTypes.oneOfType([PropTypes.object, PropTypes.string]), className: PropTypes.oneOfType([PropTypes.array, PropTypes.string]), }), }), ), }