UNPKG

react-formio

Version:

React renderer for form.io forms.

260 lines (209 loc) 8.69 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _utils = require('formiojs/utils'); var _utils2 = _interopRequireDefault(_utils); var _get2 = require('lodash/get'); var _get3 = _interopRequireDefault(_get2); var _isFunction2 = require('lodash/isFunction'); var _isFunction3 = _interopRequireDefault(_isFunction2); 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 _utils3 = require('../utils'); var _Grid = require('./Grid'); var _Grid2 = _interopRequireDefault(_Grid); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 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; } var SubmissionGrid = function (_React$Component) { _inherits(SubmissionGrid, _React$Component); function SubmissionGrid() { var _ref; var _temp, _this, _ret; _classCallCheck(this, SubmissionGrid); for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = SubmissionGrid.__proto__ || Object.getPrototypeOf(SubmissionGrid)).call.apply(_ref, [this].concat(args))), _this), _this.onSort = function (_ref2) { var key = _ref2.key, sort = _ref2.sort; if ((0, _isFunction3.default)(sort)) { return sort(); } var _this$props = _this.props, getSubmissions = _this$props.getSubmissions, currentSort = _this$props.submissions.sort; var sortKey = (0, _isString3.default)(sort) ? sort : key; var ascSort = sortKey; var descSort = '-' + sortKey; var noSort = ''; var nextSort = noSort; if (currentSort === ascSort) { nextSort = descSort; } else if (currentSort === descSort) { nextSort = noSort; } else { nextSort = ascSort; } getSubmissions(1, { sort: nextSort }); }, _this.getColumns = function (form) { var columns = []; _utils2.default.eachComponent(form.components, function (component) { if (component.input && component.tableView && component.key) { columns.push((0, _utils3.getComponentDefaultColumn)(component)); } }); columns.push({ key: 'operations', title: 'Operations' }); (0, _utils3.setColumnsWidth)(columns); return columns; }, _this.Cell = function (_ref3) { var submission = _ref3.row, column = _ref3.column; var _this$props2 = _this.props, form = _this$props2.form, onAction = _this$props2.onAction, operations = _this$props2.operations; if (column.key === 'operations') { return _react2.default.createElement( 'div', null, operations.map(function (_ref4) { var action = _ref4.action, _ref4$buttonType = _ref4.buttonType, buttonType = _ref4$buttonType === undefined ? 'primary' : _ref4$buttonType, _ref4$icon = _ref4.icon, icon = _ref4$icon === undefined ? '' : _ref4$icon, _ref4$permissionsReso = _ref4.permissionsResolver, permissionsResolver = _ref4$permissionsReso === undefined ? function () { return true; } : _ref4$permissionsReso, _ref4$title = _ref4.title, title = _ref4$title === undefined ? '' : _ref4$title; return permissionsResolver(form, submission) ? _react2.default.createElement( 'span', { className: 'btn btn-' + buttonType + ' btn-sm form-btn', onClick: (0, _utils3.stopPropagationWrapper)(function () { return onAction(submission, action); }), key: action }, icon ? _react2.default.createElement( 'span', null, _react2.default.createElement('i', { className: 'fa fa-' + icon }), '\xA0' ) : null, title ) : null; }) ); } var value = (0, _isFunction3.default)(column.value) ? column.value(submission) : (0, _get3.default)(submission, column.key, ''); return (0, _isObject3.default)(value) && value.content ? value.isHtml ? _react2.default.createElement('div', { dangerouslySetInnerHTML: { __html: value.content } }) : _react2.default.createElement( 'span', null, String(value.content) ) : _react2.default.createElement( 'span', null, String(value) ); }, _this.render = function () { var _this$props3 = _this.props, propColumns = _this$props3.columns, form = _this$props3.form, getSubmissions = _this$props3.getSubmissions, onAction = _this$props3.onAction, onPageSizeChanged = _this$props3.onPageSizeChanged, pageSizes = _this$props3.pageSizes, _this$props3$submissi = _this$props3.submissions, limit = _this$props3$submissi.limit, _this$props3$submissi2 = _this$props3$submissi.pagination, page = _this$props3$submissi2.page, numPages = _this$props3$submissi2.numPages, total = _this$props3$submissi2.total, sort = _this$props3$submissi.sort, submissions = _this$props3$submissi.submissions; var columns = propColumns.length ? propColumns : _this.getColumns(form); var skip = (page - 1) * limit; var last = Math.min(skip + limit, total); return _react2.default.createElement(_Grid2.default, { Cell: _this.Cell, activePage: page, columns: columns, emptyText: 'No data found', firstItem: skip + 1, items: submissions, lastItem: last, onAction: onAction, onPage: getSubmissions, onPageSizeChanged: onPageSizeChanged, onSort: _this.onSort, pageSize: limit, pageSizes: pageSizes, pages: numPages, sortOrder: sort, total: total }); }, _temp), _possibleConstructorReturn(_this, _ret); } return SubmissionGrid; }(_react2.default.Component); SubmissionGrid.propTypes = { columns: _types.Columns, form: _propTypes2.default.object.isRequired, getSubmissions: _propTypes2.default.func, onAction: _propTypes2.default.func, onPageSizeChanged: _propTypes2.default.func, operations: _types.Operations, pageSizes: _types.PageSizes, submissions: _propTypes2.default.object.isRequired }; SubmissionGrid.defaultProps = { columns: [], getSubmissions: function getSubmissions() {}, onAction: function onAction() {}, onPageSizeChanged: function onPageSizeChanged() {}, operations: [{ action: 'view', buttonType: 'warning', icon: 'list-alt', permissionsResolver: function permissionsResolver() { return true; }, title: 'View' }, { action: 'edit', buttonType: 'secondary', icon: 'edit', permissionsResolver: function permissionsResolver() { return true; }, title: 'Edit' }, { action: 'delete', buttonType: 'danger', icon: 'trash', permissionsResolver: function permissionsResolver() { return true; } }], pageSizes: _constants.defaultPageSizes }; exports.default = SubmissionGrid;