import React from 'react'; import { Map as makeMap } from 'immutable'; import sortBy from 'lodash/sortBy'; import { NODE_DETAILS_DATA_ROWS_DEFAULT_LIMIT } from '../../constants/limits'; import NodeDetailsControlButton from './node-details-control-button'; import MatchedText from '../matched-text'; import ShowMore from '../show-more'; const Controls = controls => (
{sortBy(controls, 'rank').map(control => ( ))}
); export default class NodeDetailsPropertyList extends React.Component { constructor(props, context) { super(props, context); this.state = { limit: NODE_DETAILS_DATA_ROWS_DEFAULT_LIMIT, }; this.handleLimitClick = this.handleLimitClick.bind(this); } handleLimitClick() { this.setState(prevState => ({ limit: prevState.limit ? 0 : NODE_DETAILS_DATA_ROWS_DEFAULT_LIMIT })); } render() { const { controls, matches = makeMap() } = this.props; let { rows } = this.props; let notShown = 0; const limited = rows && this.state.limit > 0 && rows.length > this.state.limit; const expanded = this.state.limit === 0; if (rows && limited) { const hasNotShownMatch = rows.filter((row, index) => index >= this.state.limit && matches.has(row.id)).length > 0; if (!hasNotShownMatch) { notShown = rows.length - NODE_DETAILS_DATA_ROWS_DEFAULT_LIMIT; rows = rows.slice(0, this.state.limit); } } return (
{controls && Controls(controls)} {rows.map(field => (
{field.entries.label}
))}
); } }