@fitch-digital/fitch-ui
Version:
UI Library for Fitch Digital Projects
77 lines (66 loc) • 2.44 kB
JavaScript
import React, { PureComponent } from 'react';
import PropTypes from 'prop-types';
import classNames from 'classnames';
import { extractAllUniquePropsFromArrayObjects } from '../../utils';
import './style.scss';
import './primary.scss';
import './secondary.scss';
export class List extends PureComponent {
static propTypes = {
labels: PropTypes.bool,
list: PropTypes.array,
primary: PropTypes.bool,
secondary: PropTypes.bool,
}
static defaultProps = {
labels: false,
list: [],
}
render() {
const classes = classNames({
list: true,
primary: !!this.props.primary,
secondary: !!this.props.secondary,
});
let keys = [];
if (this.props.labels) {
keys = extractAllUniquePropsFromArrayObjects(this.props.list, 'data');
}
return (
<div className={classes}>
{ this.props.labels &&
<div className="list__label">
{ keys.map((key, i) => (
<div key={`label-${i}`}>{key}</div>
))}
</div>
}
<ul>
{ this.props.list.map((item, index) => {
const Component = item.component;
const key = item.uid || index;
const data = item.data || {};
const props = Object.assign({}, item, data);
delete props.data;
return (
<li key={key} className="bg">
{ Component &&
<Component {...props} />
}
{ !Component &&
<div className="list__tab">
{ Object.keys(data).map((prop, i) => (
<div key={`tab-label-${i}`}>
{data[prop]}
</div>
))}
</div>
}
</li>
);
})}
</ul>
</div>
);
}
}