Newer
Older
import React from 'react'
import styled from 'styled-components'
import { Icon, H3 } from '@pubsweet/ui'
import { override, th } from '@pubsweet/ui-toolkit'
import Accordion from './pending/Accordion'
import ControlledAccordion from './pending/ControlledAccordion'
const CustomHeader = ({
label,
toggle,
expanded,
transparent,
rightChildren,
...props
}) => (
<Header
expanded={expanded}
hasChildren={rightChildren}
onClick={toggle}
transparent={transparent}
>
<Icon secondary size={2}>
{expanded ? 'minus' : 'plus'}
</Icon>
<H3>{label}</H3>
{typeof rightChildren === 'function'
? rightChildren({ ...props, expanded, transparent })
: rightChildren}
</Header>
)
const ContextualBox = ({ label, children, rightChildren, ...props }) =>
has(props, 'expanded') ? (
<ControlledAccordion
header={CustomHeader}
label={label}
rightChildren={rightChildren}
{...props}
>
{children}
</ControlledAccordion>
) : (
<Accordion
header={CustomHeader}
label={label}
rightChildren={rightChildren}
{...props}
>
{children}
</Accordion>
)
export default ContextualBox
// #region styles
const Header = styled.div.attrs({
'data-test-id': props => props['data-test-id'] || 'accordion-header',
})`
align-items: center;
cursor: pointer;
display: flex;
justify-content: ${props =>
props.hasChildren ? 'space-between' : 'flex-start'};
${override('ui.Accordion.Header')};
${H3} {
margin: ${th('gridUnit')} 0;
}
& div {
align-items: center;
display: flex;
}
`
// #endregion