UNPKG

react-sexy-table

Version:

Customized fixed data table

286 lines (242 loc) 10.3 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; 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 _fixedDataTable = require('fixed-data-table'); var _MyCell = require('./MyCell'); var _MyCell2 = _interopRequireDefault(_MyCell); var _MyCellFooter = require('./MyCellFooter'); var _MyCellFooter2 = _interopRequireDefault(_MyCellFooter); var _reactDimensions = require('react-dimensions'); var _reactDimensions2 = _interopRequireDefault(_reactDimensions); var _SearchForm = require('./SearchForm'); var _SearchForm2 = _interopRequireDefault(_SearchForm); var _SearchHistory = require('./SearchHistory'); var _SearchHistory2 = _interopRequireDefault(_SearchHistory); require('../style.css'); 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 XTable = function (_Component) { _inherits(XTable, _Component); function XTable() { var _Object$getPrototypeO; var _temp, _this, _ret; _classCallCheck(this, XTable); for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(XTable)).call.apply(_Object$getPrototypeO, [this].concat(args))), _this), _this.state = {}, _this.recordCount = function () { return _react2.default.createElement( 'b', null, (_this.props.mode == 'FILTER' ? _this.props.filteredData.length : _this.props.data.length) + ' of ' + _this.props.data.length + ' Record(s)' ); }, _this.newData = function () { if (_this.props.mode == 'FILTER') { return _this.props.filteredData; } return _this.props.data; }, _this.onChangeCheck = function (nextState) { _this.setState(nextState); }, _this.searchHistoryRender = function () { if (Array.isArray(_this.props.search.history)) { return _react2.default.createElement(_SearchHistory2.default, { data: _this.props.search.history }); } if (_typeof(_this.props.search.history) == 'object') { return _this.props.search.history; } return null; }, _this.footer = function (data, item) { if (item.footer && ['total'].indexOf(item.footer.type) > -1) { return _react2.default.createElement(_MyCellFooter2.default, { data: data, type: item.footer.type, field: item.footer.value }); } if (item.footer && ['pager'].indexOf(item.footer.type) > -1) { return _react2.default.createElement( _fixedDataTable.Cell, null, _this.recordCount() ); } return _react2.default.createElement( _fixedDataTable.Cell, null, item.footer && item.footer.value ? item.footer.value : null ); }, _temp), _possibleConstructorReturn(_this, _ret); } _createClass(XTable, [{ key: 'componentWillMount', value: function componentWillMount() { var nextState = {}; if (this.props.columns.length > 0) { this.props.columns.forEach(function (item) { if (item.show) { nextState[item.id] = true; } else { nextState[item.id] = false; } }); } this.setState(nextState); } }, { key: 'render', value: function render() { var _this2 = this; var newData = this.newData(); return _react2.default.createElement( 'div', { containerWidth: this.props.containerWidth, containerHeight: this.props.containerHeight, className: 'panel' }, this.props.search ? _react2.default.createElement( 'div', { className: 'search-form-wrapper' }, _react2.default.createElement(_SearchForm2.default, { columnCheckData: this.state, onChangeCheck: this.onChangeCheck, columns: this.props.columns, settings: this.props.settings, size: this.props.size, mode: this.props.mode, panel: this.props.panel, data: this.props.search.data, onClear: this.props.search.onClear, onChange: this.props.search.onChange, onSubmit: this.props.search.onSubmit, onChangePanel: this.props.search.onChangePanel }) ) : null, this.props.isWaiting ? _react2.default.createElement( 'div', { className: 'text-center bg-info' }, _react2.default.createElement('i', { className: 'fa fa-circle-o-notch fa-spin' }), ' Loading...' ) : null, !this.props.isWaiting && this.props.panel == null && this.props.mode == 'FILTER' && newData.length == 0 ? _react2.default.createElement( 'div', { className: 'text-center bg-danger' }, _react2.default.createElement( 'b', null, 'NO RECORD FOUND' ) ) : null, !this.props.isWaiting && this.props.panel == null && this.props.mode == null && newData.length == 0 ? _react2.default.createElement( 'div', { className: 'text-center bg-danger' }, _react2.default.createElement( 'b', null, 'NO RECORD FOUND' ) ) : null, this.props.panel == 'SETTINGS' ? _react2.default.createElement( 'div', { className: 'search-history clearfix' }, _react2.default.createElement( 'div', { className: this.props.size == 'sm' ? 'col-md-12' : 'col-md-8' }, _react2.default.createElement( 'b', null, 'Search History' ), _react2.default.createElement('br', null), _react2.default.createElement('br', null), this.searchHistoryRender() ) ) : null, this.props.panel != 'SETTINGS' ? _react2.default.createElement( _fixedDataTable.Table, { onRowClick: this.props.onRowClick, rowHeight: this.props.rowHeight, rowsCount: newData.length, width: this.props.containerWidth, height: this.props.containerHeight, headerHeight: this.props.headerHeight, footerHeight: this.props.footerHeight }, this.props.columns.map(function (item, index) { if (item.id.indexOf(_this2.state) && _this2.state[item.id] == true) { return _react2.default.createElement(_fixedDataTable.Column, { key: 'xcol' + index, flexGrow: item.flexGrow || null, header: _react2.default.createElement( _fixedDataTable.Cell, null, item.header ) || null, align: item.align || 'left', width: item.width || 100, cell: _react2.default.createElement(_MyCell2.default, { mode: _this2.props.mode, selectedIndex: _this2.props.selectedIndex, data: newData, field: item.cell, format: item.dateFormat || null, fromFormat: item.fromDateFormat || null, type: item.type || false, customFormat: item.customFormat || false }), footer: _this2.footer(newData, item) }); } }) ) : null ); } }]); return XTable; }(_react.Component); XTable.propTypes = { search: _react.PropTypes.shape({ className: _react.PropTypes.string, data: _react.PropTypes.object.isRequired, onClear: _react.PropTypes.func.isRequired, onChange: _react.PropTypes.func.isRequired, onSubmit: _react.PropTypes.func.isRequired, onChangePanel: _react.PropTypes.func.isRequired, history: _react.PropTypes.oneOfType([_react.PropTypes.array, _react.PropTypes.element]) }), onRowClick: _react.PropTypes.func, settings: _react.PropTypes.bool, mode: _react.PropTypes.oneOf([null, 'FILTER']), panel: _react.PropTypes.oneOf([null, 'SETTINGS']), data: _react.PropTypes.array, filteredData: _react.PropTypes.array, rowHeight: _react.PropTypes.number, headerHeight: _react.PropTypes.number, footerHeight: _react.PropTypes.number, columns: _react.PropTypes.arrayOf(_react.PropTypes.shape({ searchAble: _react.PropTypes.bool, id: _react.PropTypes.string.isRequired, show: _react.PropTypes.bool, flexGrow: _react.PropTypes.number, header: _react.PropTypes.string.isRequired, cell: _react.PropTypes.oneOfType([_react.PropTypes.string, _react.PropTypes.number, _react.PropTypes.func]), type: _react.PropTypes.oneOf(['html', 'number', 'currency', 'string', 'date', 'image', 'custom']).isRequired, customFormat: _react.PropTypes.func, footer: _react.PropTypes.shape({ type: _react.PropTypes.oneOf(['total', 'pager']), value: function value(props, propName, componentName) { if (props.type && ['total'].indexOf(props.type) > -1 && !props.value) { return new Error('value properties is required on footer.columns object'); } } }) })) }; XTable.defaultProps = { data: [], filteredData: [], rowHeight: 40, headerHeight: 50, footerHeight: 0, columns: [], mode: null }; exports.default = (0, _reactDimensions2.default)()(XTable);