react-jsf
Version:
JSF Compliant React Components
238 lines (191 loc) • 7.73 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _propTypes = require('prop-types');
var _propTypes2 = _interopRequireDefault(_propTypes);
var _InvalidChildException = require('../exceptions/InvalidChildException');
var _InvalidChildException2 = _interopRequireDefault(_InvalidChildException);
var _AceColumn = require('./AceColumn');
var _AceColumn2 = _interopRequireDefault(_AceColumn);
var _Header = require('./datatable/Header');
var _Header2 = _interopRequireDefault(_Header);
var _Row = require('./datatable/Row');
var _Row2 = _interopRequireDefault(_Row);
var _Paginator = require('./datatable/Paginator');
var _Paginator2 = _interopRequireDefault(_Paginator);
var _ApiResponse = require('../responses/ApiResponse');
var _ApiResponse2 = _interopRequireDefault(_ApiResponse);
var _JsfElement2 = require('../superclass/JsfElement');
var _JsfElement3 = _interopRequireDefault(_JsfElement2);
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 AceDataTable = function (_JsfElement) {
_inherits(AceDataTable, _JsfElement);
function AceDataTable(props, context) {
_classCallCheck(this, AceDataTable);
var _this = _possibleConstructorReturn(this, (AceDataTable.__proto__ || Object.getPrototypeOf(AceDataTable)).call(this, props, context));
_this.first = _this.first.bind(_this);
_this.prev = _this.prev.bind(_this);
_this.next = _this.next.bind(_this);
_this.last = _this.last.bind(_this);
_this.setPage = _this.setPage.bind(_this);
return _this;
}
_createClass(AceDataTable, [{
key: 'getChildContext',
value: function getChildContext() {
return {
getFormId: this.context.getFormId,
first: this.first,
prev: this.prev,
next: this.next,
last: this.last,
setPage: this.setPage,
registerAtAll: this.context.registerAtAll,
registerAtForm: this.context.registerAtForm
};
}
}, {
key: 'render',
value: function render() {
var _this2 = this;
this.currentPage = this.props.value.offset / this.props.rows + 1;
var paginatorTop = this.props.paginator ? _react2.default.createElement(_Paginator2.default, { top: true,
pageSize: this.props.rows,
currentPage: this.currentPage,
maxResults: this.props.value.max }) : null;
var paginatorBottom = this.props.paginator ? _react2.default.createElement(_Paginator2.default, { pageSize: this.props.rows, top: false,
currentPage: this.currentPage,
maxResults: this.props.value.max }) : null;
var headers = [];
var columns = [];
// create all headers and determine all requested columns
_react2.default.Children.forEach(this.props.children, function (child, i) {
if (child.type === _AceColumn2.default) {
var column = new child.type(child.props, _this2.getChildContext());
headers.push(_react2.default.createElement(
_Header2.default,
{ key: i, index: i,
parentId: _this2.state.id },
column.header
));
columns.push(column.column);
} else {
throw new _InvalidChildException2.default();
}
});
// generate table rows and insert variable value
var rows = [];
for (var i = 0, j = this.props.value.data.length; i < j; i++) {
rows.push(_react2.default.createElement(
_Row2.default,
{ key: i, parentId: this.state.id, index: i,
currentPage: this.props.value.offset / this.props.rows,
pageSize: this.props.rows, 'var': this.props.value.data[i],
varName: this.props.var },
columns
));
}
return _react2.default.createElement(
'div',
{ className: 'ui-datatable ui-widget',
id: this.state.id },
paginatorTop,
_react2.default.createElement(
'div',
null,
_react2.default.createElement(
'table',
null,
_react2.default.createElement(
'thead',
null,
_react2.default.createElement(
'tr',
null,
headers
)
),
_react2.default.createElement(
'tbody',
{ className: 'ui-datatable-data ui-widget-content' },
rows
)
)
),
paginatorBottom
);
}
/**
* goto first page
*/
}, {
key: 'first',
value: function first() {
this.props.onLoad(1);
}
/**
* goto prev page
*/
}, {
key: 'prev',
value: function prev() {
this.props.onLoad(this.currentPage - 1);
}
/**
* goto next page
*/
}, {
key: 'next',
value: function next() {
this.props.onLoad(this.currentPage + 1);
}
/**
* goto last page
*/
}, {
key: 'last',
value: function last() {
this.props.onLoad(Math.ceil(this.props.value.max / this.props.rows));
}
/**
* goto given page
*/
}, {
key: 'setPage',
value: function setPage(i) {
this.props.onLoad(i);
}
}]);
return AceDataTable;
}(_JsfElement3.default);
AceDataTable.propTypes = {
id: _propTypes2.default.string,
value: _propTypes2.default.instanceOf(_ApiResponse2.default).isRequired,
onLoad: _propTypes2.default.func.isRequired,
rows: _propTypes2.default.number.isRequired,
var: _propTypes2.default.string.isRequired,
paginator: _propTypes2.default.bool.isRequired
};
exports.default = AceDataTable;
AceDataTable.childContextTypes = {
getFormId: _propTypes2.default.func,
first: _propTypes2.default.func,
prev: _propTypes2.default.func,
next: _propTypes2.default.func,
last: _propTypes2.default.func,
setPage: _propTypes2.default.func,
registerAtAll: _propTypes2.default.func,
registerAtForm: _propTypes2.default.func
};
AceDataTable.contextTypes = {
getFormId: _propTypes2.default.func,
registerAtAll: _propTypes2.default.func,
registerAtForm: _propTypes2.default.func
};