UNPKG

@tegrus/formio-react

Version:

React renderer for form.io forms.

291 lines (247 loc) 7.37 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _get2 = require('lodash/get'); var _get3 = _interopRequireDefault(_get2); var _isFunction2 = require('lodash/isFunction'); var _isFunction3 = _interopRequireDefault(_isFunction2); 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 _utils = require('../utils'); var _Grid = require('./Grid'); var _Grid2 = _interopRequireDefault(_Grid); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var FormGrid = function FormGrid(props) { var getSortQuery = function getSortQuery(key, sort) { var currentSort = props.forms.sort; var sortKey = (0, _isString3.default)(sort) ? sort : key; var ascSort = sortKey; var descSort = '-' + sortKey; var noSort = ''; if (currentSort === ascSort) { return descSort; } else if (currentSort === descSort) { return noSort; } else { return ascSort; } }; var onSort = function onSort(_ref) { var key = _ref.key, sort = _ref.sort; if ((0, _isFunction3.default)(sort)) { return sort(); } var getForms = props.getForms; getForms(1, { sort: getSortQuery(key, sort) }); }; var TitleCell = function TitleCell(_ref2) { var access = _ref2.access, form = _ref2.form, onAction = _ref2.onAction; return _react2.default.createElement( 'span', { style: { cursor: 'pointer' }, onClick: (0, _utils.stopPropagationWrapper)(function () { if (access.submission.create) { onAction(form, 'view'); } }) }, _react2.default.createElement( 'h5', null, form.title ) ); }; var Icon = function Icon(_ref3) { var icon = _ref3.icon; return _react2.default.createElement( 'span', null, _react2.default.createElement('i', { className: 'fa fa-' + icon }), '\xA0' ); }; var OperationButton = function OperationButton(_ref4) { var action = _ref4.action, onAction = _ref4.onAction, form = _ref4.form, buttonType = _ref4.buttonType, icon = _ref4.icon, title = _ref4.title; return _react2.default.createElement( 'span', { className: 'btn btn-' + buttonType + ' btn-sm form-btn', onClick: (0, _utils.stopPropagationWrapper)(function () { return onAction(form, action); }) }, icon ? _react2.default.createElement(Icon, { icon: icon }) : null, title ); }; var Cell = function Cell(_ref5) { var form = _ref5.row, column = _ref5.column; var formAccess = props.formAccess, onAction = props.onAction, _props$operations = props.operations, operations = _props$operations === undefined ? [] : _props$operations; var access = formAccess(form); if (column.key === 'title') { return _react2.default.createElement(TitleCell, { access: access, form: form, onAction: onAction }); } else if (column.key === 'operations') { return _react2.default.createElement( 'div', null, operations.map(function (_ref6) { var action = _ref6.action, _ref6$buttonType = _ref6.buttonType, buttonType = _ref6$buttonType === undefined ? 'primary' : _ref6$buttonType, _ref6$icon = _ref6.icon, icon = _ref6$icon === undefined ? '' : _ref6$icon, _ref6$permissionsReso = _ref6.permissionsResolver, permissionsResolver = _ref6$permissionsReso === undefined ? function () { return true; } : _ref6$permissionsReso, _ref6$title = _ref6.title, title = _ref6$title === undefined ? '' : _ref6$title; return permissionsResolver(form) ? _react2.default.createElement(OperationButton, { key: action, action: action, buttonType: buttonType, icon: icon, title: title, form: form, onAction: onAction }) : null; }) ); } return _react2.default.createElement( 'span', null, (0, _isFunction3.default)(column.value) ? column.value(form) : (0, _get3.default)(form, column.key, '') ); }; var columns = props.columns, _props$forms = props.forms, forms = _props$forms.forms, limit = _props$forms.limit, _props$forms$paginati = _props$forms.pagination, page = _props$forms$paginati.page, numPages = _props$forms$paginati.numPages, total = _props$forms$paginati.total, sort = _props$forms.sort, getForms = props.getForms, onAction = props.onAction, onPageSizeChanged = props.onPageSizeChanged, pageSizes = props.pageSizes; var skip = (page - 1) * limit; var last = Math.min(skip + limit, total); return _react2.default.createElement(_Grid2.default, { Cell: Cell, activePage: page, columns: columns, emptyText: 'No forms found', firstItem: skip + 1, items: forms, lastItem: last, onAction: onAction, onPage: getForms, onPageSizeChanged: onPageSizeChanged, onSort: onSort, pageSize: limit, pageSizes: pageSizes, pages: numPages, sortOrder: sort, total: total }); }; FormGrid.defaultProps = { columns: [{ key: 'title', sort: true, title: 'Form', width: 8 }, { key: 'operations', title: 'Operations', width: 4 }], formAccess: function formAccess() { return { form: { create: true, view: true, edit: true, delete: true }, submission: { create: true, view: true, edit: true, delete: true } }; }, getForms: function getForms() {}, onPageSizeChanged: function onPageSizeChanged() {}, operations: [{ action: 'view', buttonType: 'primary', icon: 'pencil', permissionsResolver: function permissionsResolver() { return true; }, title: 'Enter Data' }, { action: 'submission', buttonType: 'warning', icon: 'list-alt', permissionsResolver: function permissionsResolver() { return true; }, title: 'View Data' }, { action: 'edit', buttonType: 'secondary', icon: 'edit', permissionsResolver: function permissionsResolver() { return true; }, title: 'Edit Form' }, { action: 'delete', buttonType: 'danger', icon: 'trash', permissionsResolver: function permissionsResolver() { return true; } }], pageSizes: _constants.defaultPageSizes }; FormGrid.propTypes = { columns: _types.Columns, formAccess: _propTypes2.default.func, forms: _propTypes2.default.object.isRequired, getForms: _propTypes2.default.func, onAction: _propTypes2.default.func, onPageSizeChanged: _propTypes2.default.func, operations: _types.Operations, pageSizes: _types.PageSizes }; exports.default = FormGrid;