2019-08-27 12:43:30 +00:00
|
|
|
import React from 'react'
|
2019-09-10 09:49:51 +00:00
|
|
|
import PropTypes from 'prop-types';
|
2019-09-04 09:17:55 +00:00
|
|
|
import styled, { css } from 'styled-components';
|
2019-09-04 10:29:32 +00:00
|
|
|
import { tablet } from '../../utils/device'
|
2019-08-27 12:43:30 +00:00
|
|
|
import Label from '../label'
|
|
|
|
|
2019-09-04 09:17:55 +00:00
|
|
|
const horizontalCss = css`
|
2019-08-27 12:43:30 +00:00
|
|
|
display: flex;
|
|
|
|
flex-direction: row;
|
2019-09-04 09:17:55 +00:00
|
|
|
align-items: start;
|
2019-08-27 12:43:30 +00:00
|
|
|
margin: 0 0 16px 0;
|
|
|
|
|
|
|
|
.field-label {
|
|
|
|
line-height: 32px;
|
|
|
|
margin: 0;
|
|
|
|
width: 110px;
|
2019-09-10 15:02:12 +00:00
|
|
|
min-width: 110px;
|
2019-08-27 12:43:30 +00:00
|
|
|
}
|
2019-09-10 09:49:51 +00:00
|
|
|
.field-body {
|
|
|
|
flex-grow: 1;
|
|
|
|
}
|
2019-10-10 12:08:39 +00:00
|
|
|
.icon-button {
|
|
|
|
line-height: 24px;
|
|
|
|
}
|
2019-09-04 09:17:55 +00:00
|
|
|
`
|
|
|
|
const verticalCss = css`
|
|
|
|
display: flex;
|
|
|
|
flex-direction: column;
|
|
|
|
align-items: start;
|
|
|
|
margin: 0 0 16px 0;
|
2019-08-27 12:43:30 +00:00
|
|
|
|
2019-09-04 09:17:55 +00:00
|
|
|
.field-label {
|
|
|
|
line-height: unset;
|
|
|
|
margin: 0 0 4px 0;
|
2019-09-10 09:49:51 +00:00
|
|
|
width: 100%;
|
|
|
|
}
|
|
|
|
.field-body {
|
|
|
|
width: 100%;
|
2019-08-27 12:43:30 +00:00
|
|
|
}
|
2019-09-04 09:17:55 +00:00
|
|
|
`
|
2019-08-27 12:43:30 +00:00
|
|
|
|
2019-09-04 09:17:55 +00:00
|
|
|
const Container = styled.div`
|
|
|
|
${props => props.vertical ? verticalCss : horizontalCss }
|
2019-08-27 12:43:30 +00:00
|
|
|
|
2019-09-04 10:29:32 +00:00
|
|
|
@media ${tablet} {
|
2019-09-04 09:17:55 +00:00
|
|
|
${verticalCss}
|
2019-08-27 12:43:30 +00:00
|
|
|
}
|
|
|
|
`;
|
|
|
|
|
|
|
|
const FieldContainer = React.memo((props) => {
|
2019-10-10 12:08:39 +00:00
|
|
|
const {isVertical, className, isRequired, hasError, labelText, children, tooltipId, tooltipEvent, iconButton} = props;
|
|
|
|
|
2019-08-27 12:43:30 +00:00
|
|
|
return (
|
2019-09-04 09:17:55 +00:00
|
|
|
<Container vertical={isVertical} className={className}>
|
2019-10-10 12:08:39 +00:00
|
|
|
<Label iconButton={iconButton} tooltipId={tooltipId} tooltipEvent={tooltipEvent} isRequired={isRequired} error={hasError} text={labelText} truncate={true} className="field-label"/>
|
2019-09-10 09:49:51 +00:00
|
|
|
<div className="field-body">{children}</div>
|
2019-08-27 12:43:30 +00:00
|
|
|
</Container>
|
|
|
|
);
|
|
|
|
});
|
|
|
|
|
2019-09-10 09:49:51 +00:00
|
|
|
FieldContainer.displayName = 'FieldContainer';
|
|
|
|
|
|
|
|
FieldContainer.propTypes = {
|
|
|
|
isVertical: PropTypes.bool,
|
|
|
|
className: PropTypes.string,
|
|
|
|
isRequired: PropTypes.bool,
|
|
|
|
hasError: PropTypes.bool,
|
|
|
|
labelText: PropTypes.string,
|
2019-10-10 12:08:39 +00:00
|
|
|
icon: PropTypes.string,
|
2019-09-10 09:49:51 +00:00
|
|
|
children: PropTypes.oneOfType([
|
|
|
|
PropTypes.arrayOf(PropTypes.node),
|
|
|
|
PropTypes.node
|
2019-10-10 12:08:39 +00:00
|
|
|
]),
|
|
|
|
tooltipId: PropTypes.string,
|
|
|
|
iconButton: PropTypes.string,
|
|
|
|
tooltipEvent: PropTypes.string
|
2019-09-10 09:49:51 +00:00
|
|
|
};
|
|
|
|
|
2019-08-27 12:43:30 +00:00
|
|
|
export default FieldContainer
|