UNPKG

@attivio/suit

Version:

Attivio SUIT, the Search UI Toolkit, is a library for creating search clients for searching the Attivio platform.

176 lines (143 loc) 6.71 kB
'use strict'; exports.__esModule = true; exports.default = undefined; var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; var _class, _temp; var _react = require('react'); var React = _interopRequireWildcard(_react); var _Grid = require('react-bootstrap/lib/Grid'); var _Grid2 = _interopRequireDefault(_Grid); var _Row = require('react-bootstrap/lib/Row'); var _Row2 = _interopRequireDefault(_Row); var _Col = require('react-bootstrap/lib/Col'); var _Col2 = _interopRequireDefault(_Col); var _Table = require('./Table'); var _Table2 = _interopRequireDefault(_Table); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /** * A componnent which marries a Table componnent with a details pane on the right to show more * information about the item in the selected row. If the table allows selection of multiple rows * simultaneously, then the details pane shows information aobut the most recently selected row. */ var MasterDetails = (_temp = _class = function (_React$Component) { _inherits(MasterDetails, _React$Component); function MasterDetails(props) { _classCallCheck(this, MasterDetails); var _this = _possibleConstructorReturn(this, _React$Component.call(this, props)); _this.state = { detailsRow: null, selectedRows: [] }; _this.selectionChanged = _this.selectionChanged.bind(_this); return _this; } /** * Update the table's selection and update the details view's input. */ MasterDetails.prototype.selectionChanged = function selectionChanged(selectedRows, activeRow) { var _this2 = this; this.setState({ selectedRows: selectedRows, detailsRow: activeRow }, function () { if (_this2.props.onSelect) { _this2.props.onSelect(selectedRows, activeRow); } }); }; MasterDetails.prototype.renderHeader = function renderHeader() { var header = this.props.header; var selectedRows = this.state.selectedRows; if (typeof header === 'function') { return header(selectedRows); } return header; }; MasterDetails.prototype.renderFooter = function renderFooter() { var footer = this.props.footer; var selectedRows = this.state.selectedRows; if (typeof footer === 'function') { return footer(selectedRows); } return footer; }; MasterDetails.prototype.render = function render() { var _props = this.props, activeRowBackgroundColor = _props.activeRowBackgroundColor, columns = _props.columns, Detail = _props.details, detailsProps = _props.detailsProps, multiSelect = _props.multiSelect, multiSelectBackgroundColor = _props.multiSelectBackgroundColor, noEmptySelection = _props.noEmptySelection, onSort = _props.onSort, _props$padding = _props.padding, padding = _props$padding === undefined ? 0 : _props$padding, rowComparator = _props.rowComparator, rows = _props.rows, selectedClassName = _props.selectedClassName, sortColumn = _props.sortColumn, tableWidth = _props.split, tableClassName = _props.tableClassName, tableContainerClassName = _props.tableContainerClassName; var detailsRow = this.state.detailsRow; var detailsWidth = 12 - tableWidth; var halfPadding = padding / 2 + 'px'; return React.createElement( _Grid2.default, { fluid: true, style: { padding: 0 } }, React.createElement( _Row2.default, { style: { margin: 0 } }, React.createElement( _Col2.default, { lg: tableWidth, md: tableWidth, sm: 12, xs: 12, style: { paddingLeft: 0, paddingRight: halfPadding } }, React.createElement( 'div', { className: tableContainerClassName }, this.renderHeader(), React.createElement(_Table2.default, { columns: columns, rows: rows, onSelect: this.selectionChanged, sortColumn: sortColumn, onSort: onSort, multiSelect: multiSelect, noEmptySelection: noEmptySelection, selectedClassName: selectedClassName, tableClassName: tableClassName, activeRowBackgroundColor: activeRowBackgroundColor, multiSelectBackgroundColor: multiSelectBackgroundColor, rowComparator: rowComparator }), this.renderFooter() ) ), React.createElement( _Col2.default, { lg: detailsWidth, md: detailsWidth, sm: 12, xs: 12, style: { paddingLeft: halfPadding, paddingRight: 0 } }, React.createElement(Detail, _extends({}, detailsProps, { data: detailsRow })) ) ) ); }; return MasterDetails; }(React.Component), _class.defaultProps = { detailsProps: {}, footer: null, header: null, multiSelect: false, noEmptySelection: false, padding: 0, selectedClassName: 'attivio-table-row-selected attivio-table-row', sortColumn: 0, split: 8, tableClassName: 'table table-striped attivio-table attivio-table-sm attivio-table-no-outline', tableContainerClassName: '' }, _class.displayName = 'MasterDetails', _temp); exports.default = MasterDetails; module.exports = exports['default'];