prg-editor
Version:
Data Table and Editor for use with Prg-Form
185 lines (157 loc) • 5.51 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.getFormChildren = getFormChildren;
exports.TableEditorHeader = TableEditorHeader;
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _propTypes = require('prop-types');
var _propTypes2 = _interopRequireDefault(_propTypes);
var _prgForm = require('prg-form');
var _Editor = require('./Editor');
var _Editor2 = _interopRequireDefault(_Editor);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function isEditor(child) {
return child && typeof child.type === 'function' && child.type.name === _Editor2.default.name;
}
function hasForm(children) {
if (isEditor(children)) {
return true;
} else if (Array.isArray(children)) {
var formElement = children.filter(function (el) {
return isEditor(el);
});
if (formElement.length === 1) {
return true;
}
}
return false;
}
function getFormChildren(children) {
if (isEditor(children)) {
return children;
} else if (Array.isArray(children)) {
var formElement = children.filter(function (el) {
return isEditor(el);
});
if (formElement.length === 1) {
return formElement[0];
}
}
return null;
}
function getHeaderChildren(children) {
if (children && children.type === 'header') {
return children.props.children;
} else if (!Array.isArray(children)) {
return null;
}
var header = children.filter(function (el) {
return el.type === 'header';
});
if (header.length !== 0) {
return header[0].props.children;
}
return null;
}
function TableEditorHeader(_ref) {
var disableAdd = _ref.disableAdd,
children = _ref.children,
onAddButtonClick = _ref.onAddButtonClick,
onResetHeaderForm = _ref.onResetHeaderForm,
onHeaderSubmit = _ref.onHeaderSubmit,
t = _ref.t,
filterChanged = _ref.filterChanged,
params = _ref.params;
var addButton = null;
if (!disableAdd && hasForm(children)) {
addButton = _react2.default.createElement(
'button',
{
onClick: function onClick() {
return onAddButtonClick();
},
className: 'button is-primary add-button'
},
t('Add')
);
}
var headersChildren = getHeaderChildren(children);
return _react2.default.createElement(
'div',
{ className: 'columns is-multiline is-mobile' },
_react2.default.createElement(
'div',
{ className: 'column editor-filters' },
_react2.default.createElement(
_prgForm.Form,
{
className: 'form-filter',
onSubmit: function onSubmit() {
return onHeaderSubmit.apply(undefined, arguments);
},
values: params
},
_react2.default.createElement(
'div',
{ className: 'field is-grouped' },
headersChildren,
filterChanged && _react2.default.createElement(
'p',
{ className: 'control' },
_react2.default.createElement(
'button',
{
className: 'button is-void is-filter-reset',
type: 'button',
onClick: function onClick() {
return onResetHeaderForm();
}
},
_react2.default.createElement('span', { className: 'delete' })
)
),
headersChildren && _react2.default.createElement(
'p',
{ className: 'control' },
_react2.default.createElement(
'button',
{
className: 'button',
formNoValidate: true,
type: 'submit'
},
t('Filter')
)
)
)
)
),
_react2.default.createElement(
'div',
{ className: 'column is-one-quarter has-text-right' },
addButton
)
);
}
TableEditorHeader.propTypes = {
t: _propTypes2.default.func,
disableAdd: _propTypes2.default.bool,
filterChanged: _propTypes2.default.bool,
children: _propTypes2.default.oneOfType([_propTypes2.default.any]),
onAddButtonClick: _propTypes2.default.func.isRequired,
onResetHeaderForm: _propTypes2.default.func.isRequired,
onHeaderSubmit: _propTypes2.default.func.isRequired,
params: _propTypes2.default.objectOf(_propTypes2.default.any)
};
TableEditorHeader.defaultProps = {
t: function t(w) {
return w;
},
disableAdd: false,
filterChanged: false,
children: null,
params: null
};
exports.default = { TableEditorHeader: TableEditorHeader, getFormChildren: getFormChildren };