All Downloads are FREE. Search and download functionalities are using the official Maven repository.

components.widgets.Card.CardItem.jsx Maven / Gradle / Ivy

The newest version!
import React from 'react'
import { compose, setDisplayName, mapProps } from 'recompose'
import PropTypes from 'prop-types'
import classNames from 'classnames'
import extend from 'lodash/extend'
import map from 'lodash/map'
import pick from 'lodash/pick'
import uniqueId from 'lodash/uniqueId'
import { Card, CardImg, CardText, CardBody, CardTitle, CardSubtitle } from 'reactstrap'

/**
 * Карточка
 * @param (string) header - заголовок
 * @param (string) meta - подзаголовок
 * @param (string) text - отображаемый текст
 * @param (string) image - url изображения
 * @param (node) extra - часть карточки для расширения другими обьектати
 * @param (string) tag - Возможность передачи компонента для переопределения элемента по умолчанию
 * @param (string) color - цвет карточки
 * @param (string) inverse - инвертировать цвет текста
 * @param (string) outline - применить свойство color к бордеру карточки.
 * @param (string) className - кастомный класс
 * @param (object) datasource - данные
 * @param (array) row - Порядок следования и отображения элементов карточки.
 * Пример row = {['header', 'meta', 'text', 'image', 'extra']}
 * @returns {*}
 * @constructor
 */

const items = {
    header: ({ header }) => header && (
        
            {header}
        
    ),
    meta: ({ meta }) => meta && (
        
            {meta}
        
    ),
    text: ({ text }) => text && (
        
            {text}
        
    ),
    image: ({ image }) => image && (
        
), extra: ({ extra }) => extra && {extra}, } function CardItem(props) { const { children, rows, linear, className, circle } = props const orderedItems = map(rows, row => items[row](props)) const cardProps = pick(props, ['tag', 'inverse', 'outline', 'color']) return ( {children || orderedItems} ) } CardItem.propTypes = { /** * Заголовок */ header: PropTypes.string, /** * Подзаголовок */ meta: PropTypes.string, /** * Отображаемый текст */ text: PropTypes.string, /** * URL изображения */ image: PropTypes.string, /** * Линейное отображение */ linear: PropTypes.bool, /** * Закругление изображения */ circle: PropTypes.bool, /** * Часть карточки для расширения другими обьектати */ extra: PropTypes.oneOfType([PropTypes.node, PropTypes.string]), children: PropTypes.node, /** * Возможность передачи компонента для переопределения элемента по умолчанию */ tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]), /** * Инвертировать цвет текста */ inverse: PropTypes.bool, /** * Применить свойство color к бордеру карточки */ outline: PropTypes.bool, /** * Цвет карточки */ color: PropTypes.string, /** * Класс */ className: PropTypes.string, rows: PropTypes.array, /** * Данные */ datasource: PropTypes.object, } CardItem.defaultProps = { rows: ['image', 'header', 'meta', 'text', 'extra'], linear: false, inverse: false, outline: false, } export { CardItem } export default compose( setDisplayName('CardItem'), mapProps(({ datasource, ...rest }) => extend(datasource, rest)), )(CardItem)




© 2015 - 2024 Weber Informatics LLC | Privacy Policy