@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
JavaScript
'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'];