2017-05-18 21:21:33 +03:00
|
|
|
import { Broadcast, Subscriber } from 'react-broadcast';
|
|
|
|
import Baseline from '../baseline';
|
|
|
|
import paperEffect from '../paper-effect';
|
|
|
|
import { bottomShaddow, bottomShaddowDarker } from '../boxes';
|
|
|
|
import remcalc from 'remcalc';
|
2017-08-14 13:21:45 +03:00
|
|
|
import is, { isNot } from 'styled-is';
|
2017-05-18 21:21:33 +03:00
|
|
|
import { Row } from 'react-styled-flexboxgrid';
|
|
|
|
import PropTypes from 'prop-types';
|
|
|
|
import React from 'react';
|
|
|
|
|
2017-05-25 17:59:58 +03:00
|
|
|
const StyledCard = Row.extend`
|
2017-05-18 21:21:33 +03:00
|
|
|
position: relative;
|
|
|
|
height: auto;
|
|
|
|
min-height: ${remcalc(126)};
|
|
|
|
margin-bottom: ${remcalc(10)};
|
|
|
|
border: ${remcalc(1)} solid ${props => props.theme.grey};
|
|
|
|
background-color: ${props => props.theme.white};
|
|
|
|
box-shadow: ${bottomShaddow};
|
2017-06-28 20:36:54 +03:00
|
|
|
flex-direction: column;
|
2017-05-18 21:21:33 +03:00
|
|
|
|
2017-07-26 18:11:23 +03:00
|
|
|
margin-right: ${remcalc(0)};
|
|
|
|
margin-left: ${remcalc(0)};
|
|
|
|
|
2017-05-18 21:21:33 +03:00
|
|
|
${is('collapsed')`
|
|
|
|
min-height: auto;
|
|
|
|
height: ${remcalc(48)};
|
|
|
|
margin-bottom: ${remcalc(16)};
|
|
|
|
`};
|
|
|
|
|
|
|
|
${is('collapsed', 'headed')`
|
|
|
|
box-shadow: ${bottomShaddowDarker};
|
|
|
|
`};
|
|
|
|
|
|
|
|
${is('flat')`
|
|
|
|
box-shadow: none;
|
|
|
|
`};
|
|
|
|
|
2017-09-14 14:26:57 +03:00
|
|
|
${is('transparent')`
|
|
|
|
border-radius: ${remcalc(4)}
|
|
|
|
background:
|
|
|
|
border: 1px solid ${props => props.theme.grey};
|
|
|
|
background: ${props => props.theme.background};
|
|
|
|
box-shadow: 0px 2px 0px rgba(0, 0, 0, 0.05);
|
|
|
|
min-height: ${remcalc(185)};
|
|
|
|
min-width: 200px;
|
|
|
|
`};
|
|
|
|
|
2017-05-18 21:21:33 +03:00
|
|
|
${is('stacked')`
|
|
|
|
${paperEffect}
|
|
|
|
`};
|
2017-08-14 13:21:45 +03:00
|
|
|
|
|
|
|
${isNot('active')`
|
|
|
|
background-color: ${props => props.theme.disabled};
|
|
|
|
`};
|
2017-05-18 21:21:33 +03:00
|
|
|
`;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @example ./usage.md
|
|
|
|
*/
|
2017-08-08 13:07:18 +03:00
|
|
|
const Card = ({
|
|
|
|
children,
|
|
|
|
collapsed = false,
|
|
|
|
headed = false,
|
2017-08-14 13:21:45 +03:00
|
|
|
active = true,
|
2017-08-08 13:07:18 +03:00
|
|
|
...rest
|
|
|
|
}) => {
|
2017-05-18 21:21:33 +03:00
|
|
|
const render = value => {
|
|
|
|
const newValue = {
|
|
|
|
fromHeader: (value || {}).fromHeader,
|
|
|
|
headed,
|
2017-07-27 20:44:29 +03:00
|
|
|
collapsed,
|
2017-08-14 13:21:45 +03:00
|
|
|
active
|
2017-05-18 21:21:33 +03:00
|
|
|
};
|
|
|
|
|
|
|
|
return (
|
|
|
|
<Broadcast channel="card" value={newValue}>
|
2017-08-08 13:07:18 +03:00
|
|
|
<StyledCard
|
|
|
|
name="card"
|
2017-08-14 13:21:45 +03:00
|
|
|
active={active}
|
2017-08-08 13:07:18 +03:00
|
|
|
collapsed={collapsed}
|
|
|
|
headed={headed}
|
|
|
|
{...rest}
|
|
|
|
>
|
2017-05-18 21:21:33 +03:00
|
|
|
{children}
|
|
|
|
</StyledCard>
|
|
|
|
</Broadcast>
|
|
|
|
);
|
|
|
|
};
|
|
|
|
|
2017-08-28 22:21:08 +03:00
|
|
|
return <Subscriber channel="card">{render}</Subscriber>;
|
2017-05-18 21:21:33 +03:00
|
|
|
};
|
|
|
|
|
|
|
|
Card.propTypes = {
|
|
|
|
children: PropTypes.node,
|
|
|
|
collapsed: PropTypes.bool,
|
|
|
|
headed: PropTypes.bool,
|
|
|
|
flat: PropTypes.bool,
|
2017-09-14 14:26:57 +03:00
|
|
|
stacked: PropTypes.bool,
|
|
|
|
transparent: PropTypes.bool
|
2017-05-18 21:21:33 +03:00
|
|
|
};
|
|
|
|
|
|
|
|
export default Baseline(Card);
|