UNPKG

@arun-s-aot/formio-react

Version:

React renderer for formsflow form.io forms.

190 lines (189 loc) 5.66 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; require("core-js/modules/es.array.push.js"); var _lib = require("@arun-s-aot/formiojs/lib"); var _get2 = _interopRequireDefault(require("lodash/get")); var _isFunction2 = _interopRequireDefault(require("lodash/isFunction")); var _isObject2 = _interopRequireDefault(require("lodash/isObject")); var _isString2 = _interopRequireDefault(require("lodash/isString")); var _propTypes = _interopRequireDefault(require("prop-types")); var _react = _interopRequireDefault(require("react")); var _constants = require("../constants"); var _types = require("../types"); var _utils = require("../utils"); var _Grid = _interopRequireDefault(require("./Grid")); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } const SubmissionGrid = props => { const { columns: propColumns = [], getSubmissions = () => {}, onAction = () => {}, onPageSizeChanged = () => {}, operations = [{ action: 'view', buttonType: 'warning', icon: 'list-alt', permissionsResolver() { return true; }, title: 'View' }, { action: 'edit', buttonType: 'secondary', icon: 'edit', permissionsResolver() { return true; }, title: 'Edit' }, { action: 'delete', buttonType: 'danger', icon: 'trash', permissionsResolver() { return true; } }], pageSizes = _constants.defaultPageSizes, submissions: { sort: currentSort, limit, pagination: { page, numPages, total }, submissions }, form } = props; const getSortQuery = (key, sort) => { const sortKey = (0, _isString2.default)(sort) ? sort : key; const ascSort = sortKey; const descSort = `-${sortKey}`; const noSort = ''; if (currentSort === ascSort) { return descSort; } else if (currentSort === descSort) { return noSort; } else { return ascSort; } }; const onSort = _ref => { let { key, sort } = _ref; if ((0, _isFunction2.default)(sort)) { return sort(); } getSubmissions(1, { sort: getSortQuery(key, sort) }); }; const getColumns = form => { const columns = []; _lib.Utils.eachComponent(form.components, component => { if (component.input && component.tableView && component.key) { columns.push((0, _utils.getComponentDefaultColumn)(component)); } }); columns.push({ key: 'operations', title: 'Operations' }); (0, _utils.setColumnsWidth)(columns); return columns; }; const Icon = _ref2 => { let { icon } = _ref2; return /*#__PURE__*/_react.default.createElement("span", null, /*#__PURE__*/_react.default.createElement("i", { className: `fa fa-${icon}` }), "\xA0"); }; const OperationButton = _ref3 => { let { action, buttonType, icon, title, onAction, submission } = _ref3; return /*#__PURE__*/_react.default.createElement("span", { className: `btn btn-${buttonType} btn-sm form-btn`, onClick: (0, _utils.stopPropagationWrapper)(() => onAction(submission, action)) }, icon ? /*#__PURE__*/_react.default.createElement(Icon, { icon: icon }) : null, title); }; const Cell = _ref4 => { let { row: submission, column } = _ref4; if (column.key === 'operations') { return /*#__PURE__*/_react.default.createElement("div", null, operations.map(_ref5 => { let { action, buttonType = 'primary', icon = '', permissionsResolver = () => true, title = '' } = _ref5; return permissionsResolver(form, submission) ? /*#__PURE__*/_react.default.createElement(OperationButton, { key: action, action: action, buttonType: buttonType, icon: icon, title: title, submission: submission, onAction: onAction }) : null; })); } const value = (0, _isFunction2.default)(column.value) ? column.value(submission) : (0, _get2.default)(submission, column.key, ''); return (0, _isObject2.default)(value) && value.content ? value.isHtml ? /*#__PURE__*/_react.default.createElement("div", { dangerouslySetInnerHTML: { __html: value.content } }) : /*#__PURE__*/_react.default.createElement("span", null, String(value.content)) : /*#__PURE__*/_react.default.createElement("span", null, String(value)); }; const columns = propColumns.length ? propColumns : getColumns(form); const skip = (page - 1) * limit; const last = Math.min(skip + limit, total); return /*#__PURE__*/_react.default.createElement(_Grid.default, { Cell: Cell, activePage: page, columns: columns, emptyText: "No data found", firstItem: skip + 1, items: submissions, lastItem: last, onAction: onAction, onPage: getSubmissions, onPageSizeChanged: onPageSizeChanged, onSort: onSort, pageSize: limit, pageSizes: pageSizes, pages: numPages, sortOrder: currentSort, total: total }); }; SubmissionGrid.propTypes = { columns: _types.Columns, form: _propTypes.default.object.isRequired, getSubmissions: _propTypes.default.func, onAction: _propTypes.default.func, onPageSizeChanged: _propTypes.default.func, operations: _types.Operations, pageSizes: _types.PageSizes, submissions: _propTypes.default.object.isRequired }; var _default = exports.default = SubmissionGrid;