UNPKG

@tegrus/formio-react

Version:

React renderer for form.io forms.

352 lines (310 loc) 9.41 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _get2 = require('lodash/get'); var _get3 = _interopRequireDefault(_get2); var _isObject2 = require('lodash/isObject'); var _isObject3 = _interopRequireDefault(_isObject2); var _isString2 = require('lodash/isString'); var _isString3 = _interopRequireDefault(_isString2); var _propTypes = require('prop-types'); var _propTypes2 = _interopRequireDefault(_propTypes); var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _constants = require('../constants'); var _types = require('../types'); var _Pagination = require('./Pagination'); var _Pagination2 = _interopRequireDefault(_Pagination); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function normalizePageSize(pageSize) { if ((0, _isObject3.default)(pageSize)) { return pageSize; } if (pageSize === _types.AllItemsPerPage) { return { label: 'All', value: 999999 }; } return { label: pageSize, value: pageSize }; } var renderPagination = function renderPagination(_ref) { var pages = _ref.pages, onPage = _ref.onPage; return pages && onPage; }; var renderPageSizeSelector = function renderPageSizeSelector(_ref2) { var pageSize = _ref2.pageSize, pageSizes = _ref2.pageSizes, onPageSizeChanged = _ref2.onPageSizeChanged; return pageSize && pageSizes && pageSizes.length && onPageSizeChanged; }; var renderItemCounter = function renderItemCounter(_ref3) { var firstItem = _ref3.firstItem, lastItem = _ref3.lastItem, total = _ref3.total; return firstItem && lastItem && total; }; var renderFooter = function renderFooter(props) { return renderPagination(props) || renderItemCounter(props); }; function Grid(props) { var Cell = props.Cell, activePage = props.activePage, columns = props.columns, emptyText = props.emptyText, firstItem = props.firstItem, items = props.items, lastItem = props.lastItem, onAction = props.onAction, onPage = props.onPage, onPageSizeChanged = props.onPageSizeChanged, onSort = props.onSort, pageNeighbours = props.pageNeighbours, pageSize = props.pageSize, pageSizes = props.pageSizes, pages = props.pages, sortOrder = props.sortOrder, total = props.total; var normalizedPageSizes = pageSizes.map(normalizePageSize); var getColumn = function getColumn(column) { var key = column.key, _column$sort = column.sort, sort = _column$sort === undefined ? false : _column$sort, _column$title = column.title, title = _column$title === undefined ? '' : _column$title, width = column.width; var className = 'col col-md-' + width; var columnProps = { key: key, className: className }; if (!title) { return _react2.default.createElement('div', columnProps); } if (!sort) { return _react2.default.createElement( 'div', columnProps, _react2.default.createElement( 'strong', null, title ) ); } var sortKey = (0, _isString3.default)(sort) ? sort : key; var ascSort = sortKey; var descSort = '-' + sortKey; var sortClass = ''; if (sortOrder === ascSort) { sortClass = 'glyphicon glyphicon-triangle-top fa fa-caret-up'; } else if (sortOrder === descSort) { sortClass = 'glyphicon glyphicon-triangle-bottom fa fa-caret-down'; } return _react2.default.createElement( 'div', columnProps, _react2.default.createElement( 'span', { style: { cursor: 'pointer' }, onClick: function onClick() { return onSort(column); } }, _react2.default.createElement( 'strong', null, title, ' ', _react2.default.createElement('span', { className: sortClass }) ) ) ); }; var getItem = function getItem(item) { return _react2.default.createElement( 'li', { className: 'list-group-item', key: item._id }, _react2.default.createElement( 'div', { className: 'row', onClick: function onClick() { return onAction(item, 'row'); } }, columns.map(function (column) { return _react2.default.createElement( 'div', { key: column.key, className: 'col col-md-' + column.width }, _react2.default.createElement(Cell, { row: item, column: column }) ); }) ) ); }; var PageSizeSelector = function PageSizeSelector() { return _react2.default.createElement( 'div', { className: 'col-auto' }, _react2.default.createElement( 'div', { className: 'row align-items-center' }, _react2.default.createElement( 'div', { className: 'col-auto' }, _react2.default.createElement( 'select', { className: 'form-control', value: pageSize, onChange: function onChange(event) { return onPageSizeChanged(event.target.value); } }, normalizedPageSizes.map(function (_ref4) { var label = _ref4.label, value = _ref4.value; return _react2.default.createElement( 'option', { key: value, value: value }, label ); }) ) ), _react2.default.createElement( 'span', { className: 'col-auto' }, 'items per page' ) ) ); }; var FooterPagination = function FooterPagination() { return _react2.default.createElement( 'div', { className: 'col-auto' }, _react2.default.createElement( 'div', { className: 'row align-items-center' }, _react2.default.createElement( 'div', { className: 'col-auto' }, _react2.default.createElement(_Pagination2.default, { pages: pages, activePage: activePage, pageNeighbours: pageNeighbours, prev: 'Previous', next: 'Next', onSelect: onPage }) ), renderPageSizeSelector(props) ? _react2.default.createElement(PageSizeSelector, null) : null ) ); }; var ItemCounter = function ItemCounter() { return _react2.default.createElement( 'div', { className: 'col-auto ml-auto' }, _react2.default.createElement( 'span', { className: 'item-counter pull-right' }, _react2.default.createElement( 'span', { className: 'page-num' }, firstItem, ' - ', lastItem ), ' / ', total, ' total' ) ); }; var Footer = function Footer() { return _react2.default.createElement( 'li', { className: 'list-group-item' }, _react2.default.createElement( 'div', { className: 'row align-items-center' }, renderPagination(props) ? _react2.default.createElement(FooterPagination, null) : null, renderItemCounter(props) ? _react2.default.createElement(ItemCounter, null) : null ) ); }; return _react2.default.createElement( 'div', null, items.length ? _react2.default.createElement( 'ul', { className: 'list-group list-group-striped' }, _react2.default.createElement( 'li', { className: 'list-group-item list-group-header hidden-xs hidden-md' }, _react2.default.createElement( 'div', { className: 'row' }, columns.map(getColumn) ) ), items.map(getItem), renderFooter(props) ? _react2.default.createElement(Footer, null) : null ) : _react2.default.createElement( 'div', null, emptyText ) ); } Grid.propTypes = { Cell: _propTypes2.default.func, activePage: _propTypes2.default.number, columns: _propTypes2.default.array.isRequired, emptyText: _propTypes2.default.string, firstItem: _propTypes2.default.number, items: _propTypes2.default.array.isRequired, lastItem: _propTypes2.default.number, onAction: _propTypes2.default.func, onPage: _propTypes2.default.func, onPageSizeChanged: _propTypes2.default.func, onSort: _propTypes2.default.func, pageNeighbours: _propTypes2.default.number, pageSize: _propTypes2.default.number, pageSizes: _types.PageSizes, pages: _propTypes2.default.number, sortOrder: _propTypes2.default.string, total: _propTypes2.default.number }; Grid.defaultProps = { Cell: function Cell(_ref5) { var column = _ref5.column, row = _ref5.row; return _react2.default.createElement( 'span', null, (0, _get3.default)(row, column.key, '') ); }, activePage: 1, emptyText: 'No data found', firstItem: 0, lastItem: 0, onAction: function onAction() {}, onPage: function onPage() {}, onPageSizeChanged: function onPageSizeChanged() {}, onSort: function onSort() {}, pageNeighbours: 1, pageSize: 0, pageSizes: _constants.defaultPageSizes, pages: 0, sortOrder: '', total: 0 }; exports.default = Grid;