UNPKG

@formio/react

Version:

React renderer for form.io forms.

349 lines (308 loc) 10.3 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 _props$Cell = props.Cell, Cell = _props$Cell === undefined ? function (_ref4) { var column = _ref4.column, row = _ref4.row; return _react2.default.createElement( 'span', null, (0, _get3.default)(row, column.key, '') ); } : _props$Cell, _props$activePage = props.activePage, activePage = _props$activePage === undefined ? 1 : _props$activePage, _props$emptyText = props.emptyText, emptyText = _props$emptyText === undefined ? 'No data found' : _props$emptyText, _props$firstItem = props.firstItem, firstItem = _props$firstItem === undefined ? 0 : _props$firstItem, _props$lastItem = props.lastItem, lastItem = _props$lastItem === undefined ? 0 : _props$lastItem, _props$onAction = props.onAction, onAction = _props$onAction === undefined ? function () {} : _props$onAction, _props$onPage = props.onPage, onPage = _props$onPage === undefined ? function () {} : _props$onPage, _props$onPageSizeChan = props.onPageSizeChanged, onPageSizeChanged = _props$onPageSizeChan === undefined ? function () {} : _props$onPageSizeChan, _props$onSort = props.onSort, onSort = _props$onSort === undefined ? function () {} : _props$onSort, _props$pageNeighbours = props.pageNeighbours, pageNeighbours = _props$pageNeighbours === undefined ? 1 : _props$pageNeighbours, _props$pageSize = props.pageSize, pageSize = _props$pageSize === undefined ? 0 : _props$pageSize, _props$pageSizes = props.pageSizes, pageSizes = _props$pageSizes === undefined ? _constants.defaultPageSizes : _props$pageSizes, _props$pages = props.pages, pages = _props$pages === undefined ? 0 : _props$pages, _props$sortOrder = props.sortOrder, sortOrder = _props$sortOrder === undefined ? '' : _props$sortOrder, _props$total = props.total, total = _props$total === undefined ? 0 : _props$total, columns = props.columns, items = props.items; 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 (_ref5) { var label = _ref5.label, value = _ref5.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 }; exports.default = Grid;