6992 lines
244 KiB
JavaScript
6992 lines
244 KiB
JavaScript
import React, { Component } from 'react';
|
|
import { Paginator } from 'primereact/paginator';
|
|
import { classNames, ObjectUtils, DomHandler, ZIndexUtils, ConnectedOverlayScrollHandler, UniqueComponentId } from 'primereact/utils';
|
|
import PrimeReact, { localeOption, FilterMatchMode, FilterOperator, FilterService } from 'primereact/api';
|
|
import { OverlayService } from 'primereact/overlayservice';
|
|
import { Ripple } from 'primereact/ripple';
|
|
import { CSSTransition } from 'primereact/csstransition';
|
|
import { Portal } from 'primereact/portal';
|
|
import { InputText } from 'primereact/inputtext';
|
|
import { Dropdown } from 'primereact/dropdown';
|
|
import { Button } from 'primereact/button';
|
|
import { VirtualScroller } from 'primereact/virtualscroller';
|
|
|
|
function _extends() {
|
|
_extends = Object.assign || function (target) {
|
|
for (var i = 1; i < arguments.length; i++) {
|
|
var source = arguments[i];
|
|
|
|
for (var key in source) {
|
|
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
target[key] = source[key];
|
|
}
|
|
}
|
|
}
|
|
|
|
return target;
|
|
};
|
|
|
|
return _extends.apply(this, arguments);
|
|
}
|
|
|
|
function _arrayWithHoles(arr) {
|
|
if (Array.isArray(arr)) return arr;
|
|
}
|
|
|
|
function _iterableToArrayLimit(arr, i) {
|
|
var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
|
|
|
|
if (_i == null) return;
|
|
var _arr = [];
|
|
var _n = true;
|
|
var _d = false;
|
|
|
|
var _s, _e;
|
|
|
|
try {
|
|
for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {
|
|
_arr.push(_s.value);
|
|
|
|
if (i && _arr.length === i) break;
|
|
}
|
|
} catch (err) {
|
|
_d = true;
|
|
_e = err;
|
|
} finally {
|
|
try {
|
|
if (!_n && _i["return"] != null) _i["return"]();
|
|
} finally {
|
|
if (_d) throw _e;
|
|
}
|
|
}
|
|
|
|
return _arr;
|
|
}
|
|
|
|
function _arrayLikeToArray(arr, len) {
|
|
if (len == null || len > arr.length) len = arr.length;
|
|
|
|
for (var i = 0, arr2 = new Array(len); i < len; i++) {
|
|
arr2[i] = arr[i];
|
|
}
|
|
|
|
return arr2;
|
|
}
|
|
|
|
function _unsupportedIterableToArray(o, minLen) {
|
|
if (!o) return;
|
|
if (typeof o === "string") return _arrayLikeToArray(o, minLen);
|
|
var n = Object.prototype.toString.call(o).slice(8, -1);
|
|
if (n === "Object" && o.constructor) n = o.constructor.name;
|
|
if (n === "Map" || n === "Set") return Array.from(o);
|
|
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
|
|
}
|
|
|
|
function _nonIterableRest() {
|
|
throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
}
|
|
|
|
function _slicedToArray(arr, i) {
|
|
return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();
|
|
}
|
|
|
|
function _arrayWithoutHoles(arr) {
|
|
if (Array.isArray(arr)) return _arrayLikeToArray(arr);
|
|
}
|
|
|
|
function _iterableToArray(iter) {
|
|
if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
|
|
}
|
|
|
|
function _nonIterableSpread() {
|
|
throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
}
|
|
|
|
function _toConsumableArray(arr) {
|
|
return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
|
|
}
|
|
|
|
function _classCallCheck(instance, Constructor) {
|
|
if (!(instance instanceof Constructor)) {
|
|
throw new TypeError("Cannot call a class as a 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);
|
|
}
|
|
}
|
|
|
|
function _createClass(Constructor, protoProps, staticProps) {
|
|
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
|
|
if (staticProps) _defineProperties(Constructor, staticProps);
|
|
Object.defineProperty(Constructor, "prototype", {
|
|
writable: false
|
|
});
|
|
return Constructor;
|
|
}
|
|
|
|
function _assertThisInitialized(self) {
|
|
if (self === void 0) {
|
|
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
|
|
}
|
|
|
|
return self;
|
|
}
|
|
|
|
function _setPrototypeOf(o, p) {
|
|
_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
|
|
o.__proto__ = p;
|
|
return o;
|
|
};
|
|
|
|
return _setPrototypeOf(o, p);
|
|
}
|
|
|
|
function _inherits(subClass, superClass) {
|
|
if (typeof superClass !== "function" && superClass !== null) {
|
|
throw new TypeError("Super expression must either be null or a function");
|
|
}
|
|
|
|
subClass.prototype = Object.create(superClass && superClass.prototype, {
|
|
constructor: {
|
|
value: subClass,
|
|
writable: true,
|
|
configurable: true
|
|
}
|
|
});
|
|
Object.defineProperty(subClass, "prototype", {
|
|
writable: false
|
|
});
|
|
if (superClass) _setPrototypeOf(subClass, superClass);
|
|
}
|
|
|
|
function _typeof(obj) {
|
|
"@babel/helpers - typeof";
|
|
|
|
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) {
|
|
return typeof obj;
|
|
} : function (obj) {
|
|
return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
|
|
}, _typeof(obj);
|
|
}
|
|
|
|
function _possibleConstructorReturn(self, call) {
|
|
if (call && (_typeof(call) === "object" || typeof call === "function")) {
|
|
return call;
|
|
} else if (call !== void 0) {
|
|
throw new TypeError("Derived constructors may only return object or undefined");
|
|
}
|
|
|
|
return _assertThisInitialized(self);
|
|
}
|
|
|
|
function _getPrototypeOf(o) {
|
|
_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
|
|
return o.__proto__ || Object.getPrototypeOf(o);
|
|
};
|
|
return _getPrototypeOf(o);
|
|
}
|
|
|
|
function _defineProperty(obj, key, value) {
|
|
if (key in obj) {
|
|
Object.defineProperty(obj, key, {
|
|
value: value,
|
|
enumerable: true,
|
|
configurable: true,
|
|
writable: true
|
|
});
|
|
} else {
|
|
obj[key] = value;
|
|
}
|
|
|
|
return obj;
|
|
}
|
|
|
|
function _objectWithoutPropertiesLoose(source, excluded) {
|
|
if (source == null) return {};
|
|
var target = {};
|
|
var sourceKeys = Object.keys(source);
|
|
var key, i;
|
|
|
|
for (i = 0; i < sourceKeys.length; i++) {
|
|
key = sourceKeys[i];
|
|
if (excluded.indexOf(key) >= 0) continue;
|
|
target[key] = source[key];
|
|
}
|
|
|
|
return target;
|
|
}
|
|
|
|
function _objectWithoutProperties(source, excluded) {
|
|
if (source == null) return {};
|
|
var target = _objectWithoutPropertiesLoose(source, excluded);
|
|
var key, i;
|
|
|
|
if (Object.getOwnPropertySymbols) {
|
|
var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
|
|
|
|
for (i = 0; i < sourceSymbolKeys.length; i++) {
|
|
key = sourceSymbolKeys[i];
|
|
if (excluded.indexOf(key) >= 0) continue;
|
|
if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
|
|
target[key] = source[key];
|
|
}
|
|
}
|
|
|
|
return target;
|
|
}
|
|
|
|
function _createSuper$c(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$c(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
|
|
|
|
function _isNativeReflectConstruct$c() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
var RowRadioButton = /*#__PURE__*/function (_Component) {
|
|
_inherits(RowRadioButton, _Component);
|
|
|
|
var _super = _createSuper$c(RowRadioButton);
|
|
|
|
function RowRadioButton(props) {
|
|
var _this;
|
|
|
|
_classCallCheck(this, RowRadioButton);
|
|
|
|
_this = _super.call(this, props);
|
|
_this.state = {
|
|
focused: false
|
|
};
|
|
_this.onClick = _this.onClick.bind(_assertThisInitialized(_this));
|
|
_this.onFocus = _this.onFocus.bind(_assertThisInitialized(_this));
|
|
_this.onBlur = _this.onBlur.bind(_assertThisInitialized(_this));
|
|
_this.onChange = _this.onChange.bind(_assertThisInitialized(_this));
|
|
_this.onKeyDown = _this.onKeyDown.bind(_assertThisInitialized(_this));
|
|
return _this;
|
|
}
|
|
|
|
_createClass(RowRadioButton, [{
|
|
key: "onClick",
|
|
value: function onClick(event) {
|
|
if (!this.props.disabled) {
|
|
this.props.onChange(event);
|
|
this.input.focus();
|
|
}
|
|
}
|
|
}, {
|
|
key: "onFocus",
|
|
value: function onFocus() {
|
|
this.setState({
|
|
focused: true
|
|
});
|
|
}
|
|
}, {
|
|
key: "onBlur",
|
|
value: function onBlur() {
|
|
this.setState({
|
|
focused: false
|
|
});
|
|
}
|
|
}, {
|
|
key: "onChange",
|
|
value: function onChange(event) {
|
|
this.onClick(event);
|
|
}
|
|
}, {
|
|
key: "onKeyDown",
|
|
value: function onKeyDown(event) {
|
|
if (event.code === 'Space') {
|
|
this.onClick(event);
|
|
event.preventDefault();
|
|
}
|
|
}
|
|
}, {
|
|
key: "render",
|
|
value: function render() {
|
|
var _this2 = this;
|
|
|
|
var className = classNames('p-radiobutton p-component', {
|
|
'p-radiobutton-focused': this.state.focused
|
|
});
|
|
var boxClassName = classNames('p-radiobutton-box p-component', {
|
|
'p-highlight': this.props.checked,
|
|
'p-focus': this.state.focused,
|
|
'p-disabled': this.props.disabled
|
|
});
|
|
var name = "".concat(this.props.tableSelector, "_dt_radio");
|
|
return /*#__PURE__*/React.createElement("div", {
|
|
className: className
|
|
}, /*#__PURE__*/React.createElement("div", {
|
|
className: "p-hidden-accessible"
|
|
}, /*#__PURE__*/React.createElement("input", {
|
|
name: name,
|
|
ref: function ref(el) {
|
|
return _this2.input = el;
|
|
},
|
|
type: "radio",
|
|
checked: this.props.checked,
|
|
onFocus: this.onFocus,
|
|
onBlur: this.onBlur,
|
|
onChange: this.onChange,
|
|
onKeyDown: this.onKeyDown
|
|
})), /*#__PURE__*/React.createElement("div", {
|
|
className: boxClassName,
|
|
onClick: this.onClick,
|
|
role: "radio",
|
|
"aria-checked": this.props.checked
|
|
}, /*#__PURE__*/React.createElement("div", {
|
|
className: "p-radiobutton-icon"
|
|
})));
|
|
}
|
|
}]);
|
|
|
|
return RowRadioButton;
|
|
}(Component);
|
|
|
|
function _createSuper$b(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$b(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
|
|
|
|
function _isNativeReflectConstruct$b() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
var RowCheckbox = /*#__PURE__*/function (_Component) {
|
|
_inherits(RowCheckbox, _Component);
|
|
|
|
var _super = _createSuper$b(RowCheckbox);
|
|
|
|
function RowCheckbox(props) {
|
|
var _this;
|
|
|
|
_classCallCheck(this, RowCheckbox);
|
|
|
|
_this = _super.call(this, props);
|
|
_this.state = {
|
|
focused: false
|
|
};
|
|
_this.onClick = _this.onClick.bind(_assertThisInitialized(_this));
|
|
_this.onFocus = _this.onFocus.bind(_assertThisInitialized(_this));
|
|
_this.onBlur = _this.onBlur.bind(_assertThisInitialized(_this));
|
|
_this.onKeyDown = _this.onKeyDown.bind(_assertThisInitialized(_this));
|
|
return _this;
|
|
}
|
|
|
|
_createClass(RowCheckbox, [{
|
|
key: "onClick",
|
|
value: function onClick(event) {
|
|
if (!this.props.disabled) {
|
|
this.setState({
|
|
focused: true
|
|
});
|
|
this.props.onChange(event);
|
|
}
|
|
}
|
|
}, {
|
|
key: "onFocus",
|
|
value: function onFocus() {
|
|
this.setState({
|
|
focused: true
|
|
});
|
|
}
|
|
}, {
|
|
key: "onBlur",
|
|
value: function onBlur() {
|
|
this.setState({
|
|
focused: false
|
|
});
|
|
}
|
|
}, {
|
|
key: "onKeyDown",
|
|
value: function onKeyDown(event) {
|
|
if (event.code === 'Space') {
|
|
this.onClick(event);
|
|
event.preventDefault();
|
|
}
|
|
}
|
|
}, {
|
|
key: "render",
|
|
value: function render() {
|
|
var className = classNames('p-checkbox p-component', {
|
|
'p-checkbox-focused': this.state.focused
|
|
});
|
|
var boxClassName = classNames('p-checkbox-box p-component', {
|
|
'p-highlight': this.props.checked,
|
|
'p-disabled': this.props.disabled,
|
|
'p-focus': this.state.focused
|
|
});
|
|
var iconClassName = classNames('p-checkbox-icon', {
|
|
'pi pi-check': this.props.checked
|
|
});
|
|
var tabIndex = this.props.disabled ? null : '0';
|
|
return /*#__PURE__*/React.createElement("div", {
|
|
className: className,
|
|
onClick: this.onClick
|
|
}, /*#__PURE__*/React.createElement("div", {
|
|
className: boxClassName,
|
|
role: "checkbox",
|
|
"aria-checked": this.props.checked,
|
|
tabIndex: tabIndex,
|
|
onKeyDown: this.onKeyDown,
|
|
onFocus: this.onFocus,
|
|
onBlur: this.onBlur
|
|
}, /*#__PURE__*/React.createElement("span", {
|
|
className: iconClassName
|
|
})));
|
|
}
|
|
}]);
|
|
|
|
return RowCheckbox;
|
|
}(Component);
|
|
|
|
function ownKeys$7(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
|
|
function _objectSpread$7(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$7(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$7(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
|
|
function _createSuper$a(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$a(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
|
|
|
|
function _isNativeReflectConstruct$a() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
var BodyCell = /*#__PURE__*/function (_Component) {
|
|
_inherits(BodyCell, _Component);
|
|
|
|
var _super = _createSuper$a(BodyCell);
|
|
|
|
function BodyCell(props) {
|
|
var _this;
|
|
|
|
_classCallCheck(this, BodyCell);
|
|
|
|
_this = _super.call(this, props);
|
|
_this.state = {
|
|
editing: props.editing,
|
|
editingRowData: props.rowData,
|
|
styleObject: {}
|
|
};
|
|
_this.onClick = _this.onClick.bind(_assertThisInitialized(_this));
|
|
_this.onMouseDown = _this.onMouseDown.bind(_assertThisInitialized(_this));
|
|
_this.onMouseUp = _this.onMouseUp.bind(_assertThisInitialized(_this));
|
|
_this.onKeyDown = _this.onKeyDown.bind(_assertThisInitialized(_this));
|
|
_this.onBlur = _this.onBlur.bind(_assertThisInitialized(_this));
|
|
_this.onEditorFocus = _this.onEditorFocus.bind(_assertThisInitialized(_this));
|
|
_this.onRowToggle = _this.onRowToggle.bind(_assertThisInitialized(_this));
|
|
_this.onRadioChange = _this.onRadioChange.bind(_assertThisInitialized(_this));
|
|
_this.onCheckboxChange = _this.onCheckboxChange.bind(_assertThisInitialized(_this));
|
|
_this.onRowEditSave = _this.onRowEditSave.bind(_assertThisInitialized(_this));
|
|
_this.onRowEditCancel = _this.onRowEditCancel.bind(_assertThisInitialized(_this));
|
|
_this.onRowEditInit = _this.onRowEditInit.bind(_assertThisInitialized(_this));
|
|
_this.editorCallback = _this.editorCallback.bind(_assertThisInitialized(_this));
|
|
return _this;
|
|
}
|
|
|
|
_createClass(BodyCell, [{
|
|
key: "field",
|
|
get: function get() {
|
|
return this.getColumnProp('field') || "field_".concat(this.props.index);
|
|
}
|
|
}, {
|
|
key: "isEditable",
|
|
value: function isEditable() {
|
|
return this.getColumnProp('editor');
|
|
}
|
|
}, {
|
|
key: "isSelected",
|
|
value: function isSelected() {
|
|
return this.props.selection ? this.props.selection instanceof Array ? this.findIndex(this.props.selection) > -1 : this.equals(this.props.selection) : false;
|
|
}
|
|
}, {
|
|
key: "equalsData",
|
|
value: function equalsData(data) {
|
|
return this.props.compareSelectionBy === 'equals' ? data === this.props.rowData : ObjectUtils.equals(data, this.props.rowData, this.props.dataKey);
|
|
}
|
|
}, {
|
|
key: "equals",
|
|
value: function equals(selectedCell) {
|
|
return (selectedCell.rowIndex === this.props.rowIndex || this.equalsData(selectedCell.rowData)) && (selectedCell.field === this.field || selectedCell.cellIndex === this.props.index);
|
|
}
|
|
}, {
|
|
key: "isOutsideClicked",
|
|
value: function isOutsideClicked(target) {
|
|
return this.el && !(this.el.isSameNode(target) || this.el.contains(target));
|
|
}
|
|
}, {
|
|
key: "getColumnProp",
|
|
value: function getColumnProp(prop) {
|
|
return this.props.column ? this.props.column.props[prop] : null;
|
|
}
|
|
}, {
|
|
key: "getVirtualScrollerOption",
|
|
value: function getVirtualScrollerOption(option) {
|
|
return this.props.virtualScrollerOptions ? this.props.virtualScrollerOptions[option] : null;
|
|
}
|
|
}, {
|
|
key: "getStyle",
|
|
value: function getStyle() {
|
|
var bodyStyle = this.getColumnProp('bodyStyle');
|
|
var columnStyle = this.getColumnProp('style');
|
|
return this.getColumnProp('frozen') ? Object.assign({}, columnStyle, bodyStyle, this.state.styleObject) : Object.assign({}, columnStyle, bodyStyle);
|
|
}
|
|
}, {
|
|
key: "getCellParams",
|
|
value: function getCellParams() {
|
|
return {
|
|
value: this.resolveFieldData(),
|
|
field: this.field,
|
|
rowData: this.props.rowData,
|
|
rowIndex: this.props.rowIndex,
|
|
cellIndex: this.props.index,
|
|
selected: this.isSelected(),
|
|
column: this.props.column,
|
|
props: this.props
|
|
};
|
|
}
|
|
}, {
|
|
key: "getCellCallbackParams",
|
|
value: function getCellCallbackParams(event) {
|
|
var params = this.getCellParams();
|
|
return _objectSpread$7({
|
|
originalEvent: event
|
|
}, params);
|
|
}
|
|
}, {
|
|
key: "resolveFieldData",
|
|
value: function resolveFieldData(data) {
|
|
return ObjectUtils.resolveFieldData(data || this.props.rowData, this.field);
|
|
}
|
|
}, {
|
|
key: "getEditingRowData",
|
|
value: function getEditingRowData() {
|
|
return this.props.editingMeta && this.props.editingMeta[this.props.rowIndex] ? this.props.editingMeta[this.props.rowIndex].data : this.props.rowData;
|
|
}
|
|
}, {
|
|
key: "getTabIndex",
|
|
value: function getTabIndex(cellSelected) {
|
|
return this.props.allowCellSelection ? cellSelected ? 0 : this.props.rowIndex === 0 && this.props.index === 0 ? this.props.tabIndex : -1 : null;
|
|
}
|
|
}, {
|
|
key: "findIndex",
|
|
value: function findIndex(collection) {
|
|
var _this2 = this;
|
|
|
|
return (collection || []).findIndex(function (data) {
|
|
return _this2.equals(data);
|
|
});
|
|
}
|
|
}, {
|
|
key: "closeCell",
|
|
value: function closeCell(event) {
|
|
var _this3 = this;
|
|
|
|
var params = this.getCellCallbackParams(event);
|
|
var onBeforeCellEditHide = this.getColumnProp('onBeforeCellEditHide');
|
|
|
|
if (onBeforeCellEditHide) {
|
|
onBeforeCellEditHide(params);
|
|
}
|
|
/* When using the 'tab' key, the focus event of the next cell is not called in IE. */
|
|
|
|
|
|
setTimeout(function () {
|
|
_this3.setState({
|
|
editing: false
|
|
}, function () {
|
|
_this3.unbindDocumentEditListener();
|
|
|
|
OverlayService.off('overlay-click', _this3.overlayEventListener);
|
|
_this3.overlayEventListener = null;
|
|
});
|
|
}, 1);
|
|
}
|
|
}, {
|
|
key: "switchCellToViewMode",
|
|
value: function switchCellToViewMode(event, submit) {
|
|
var callbackParams = this.getCellCallbackParams(event);
|
|
var newRowData = this.state.editingRowData;
|
|
var newValue = this.resolveFieldData(newRowData);
|
|
|
|
var params = _objectSpread$7(_objectSpread$7({}, callbackParams), {}, {
|
|
newRowData: newRowData,
|
|
newValue: newValue
|
|
});
|
|
|
|
var onCellEditCancel = this.getColumnProp('onCellEditCancel');
|
|
var cellEditValidator = this.getColumnProp('cellEditValidator');
|
|
var onCellEditComplete = this.getColumnProp('onCellEditComplete');
|
|
|
|
if (!submit && onCellEditCancel) {
|
|
onCellEditCancel(params);
|
|
}
|
|
|
|
var valid = true;
|
|
|
|
if (cellEditValidator) {
|
|
valid = cellEditValidator(params);
|
|
}
|
|
|
|
if (valid) {
|
|
if (submit && onCellEditComplete) {
|
|
onCellEditComplete(params);
|
|
}
|
|
|
|
this.closeCell(event);
|
|
} else {
|
|
event.preventDefault();
|
|
}
|
|
}
|
|
}, {
|
|
key: "findNextSelectableCell",
|
|
value: function findNextSelectableCell(cell) {
|
|
var nextCell = cell.nextElementSibling;
|
|
return nextCell ? DomHandler.hasClass(nextCell, 'p-selectable-cell') ? nextCell : this.findNextSelectableCell(nextCell) : null;
|
|
}
|
|
}, {
|
|
key: "findPrevSelectableCell",
|
|
value: function findPrevSelectableCell(cell) {
|
|
var prevCell = cell.previousElementSibling;
|
|
return prevCell ? DomHandler.hasClass(prevCell, 'p-selectable-cell') ? prevCell : this.findPrevSelectableCell(prevCell) : null;
|
|
}
|
|
}, {
|
|
key: "findDownSelectableCell",
|
|
value: function findDownSelectableCell(cell) {
|
|
var downRow = cell.parentElement.nextElementSibling;
|
|
var downCell = downRow ? downRow.children[this.props.index] : null;
|
|
return downRow && downCell ? DomHandler.hasClass(downRow, 'p-selectable-row') && DomHandler.hasClass(downCell, 'p-selectable-cell') ? downCell : this.findDownSelectableCell(downCell) : null;
|
|
}
|
|
}, {
|
|
key: "findUpSelectableCell",
|
|
value: function findUpSelectableCell(cell) {
|
|
var upRow = cell.parentElement.previousElementSibling;
|
|
var upCell = upRow ? upRow.children[this.props.index] : null;
|
|
return upRow && upCell ? DomHandler.hasClass(upRow, 'p-selectable-row') && DomHandler.hasClass(upCell, 'p-selectable-cell') ? upCell : this.findUpSelectableCell(upCell) : null;
|
|
}
|
|
}, {
|
|
key: "changeTabIndex",
|
|
value: function changeTabIndex(currentCell, nextCell) {
|
|
if (currentCell && nextCell) {
|
|
currentCell.tabIndex = -1;
|
|
nextCell.tabIndex = this.props.tabIndex;
|
|
}
|
|
}
|
|
}, {
|
|
key: "focusOnElement",
|
|
value: function focusOnElement() {
|
|
var _this4 = this;
|
|
|
|
clearTimeout(this.tabindexTimeout);
|
|
this.tabindexTimeout = setTimeout(function () {
|
|
if (_this4.state.editing) {
|
|
var focusableEl = _this4.props.editMode === 'cell' ? DomHandler.getFirstFocusableElement(_this4.el, ':not(.p-cell-editor-key-helper)') : DomHandler.findSingle(_this4.el, '.p-row-editor-save');
|
|
focusableEl && focusableEl.focus();
|
|
}
|
|
|
|
_this4.keyHelper && (_this4.keyHelper.tabIndex = _this4.state.editing ? -1 : 0);
|
|
}, 1);
|
|
}
|
|
}, {
|
|
key: "focusOnInit",
|
|
value: function focusOnInit() {
|
|
var _this5 = this;
|
|
|
|
clearTimeout(this.initFocusTimeout);
|
|
this.initFocusTimeout = setTimeout(function () {
|
|
var focusableEl = _this5.props.editMode === 'row' ? DomHandler.findSingle(_this5.el, '.p-row-editor-init') : null;
|
|
focusableEl && focusableEl.focus();
|
|
}, 1);
|
|
}
|
|
}, {
|
|
key: "updateStickyPosition",
|
|
value: function updateStickyPosition() {
|
|
if (this.getColumnProp('frozen')) {
|
|
var styleObject = _objectSpread$7({}, this.state.styleObject);
|
|
|
|
var align = this.getColumnProp('alignFrozen');
|
|
|
|
if (align === 'right') {
|
|
var right = 0;
|
|
var next = this.el.nextElementSibling;
|
|
|
|
if (next) {
|
|
right = DomHandler.getOuterWidth(next) + parseFloat(next.style.right || 0);
|
|
}
|
|
|
|
styleObject['right'] = right + 'px';
|
|
} else {
|
|
var left = 0;
|
|
var prev = this.el.previousElementSibling;
|
|
|
|
if (prev) {
|
|
left = DomHandler.getOuterWidth(prev) + parseFloat(prev.style.left || 0);
|
|
}
|
|
|
|
styleObject['left'] = left + 'px';
|
|
}
|
|
|
|
var isSameStyle = this.state.styleObject['left'] === styleObject['left'] && this.state.styleObject['right'] === styleObject['right'];
|
|
!isSameStyle && this.setState({
|
|
styleObject: styleObject
|
|
});
|
|
}
|
|
}
|
|
}, {
|
|
key: "editorCallback",
|
|
value: function editorCallback(val) {
|
|
var editingRowData = _objectSpread$7({}, this.state.editingRowData);
|
|
|
|
editingRowData[this.field] = val;
|
|
this.setState({
|
|
editingRowData: editingRowData
|
|
}); // update editing meta for complete methods on row mode
|
|
|
|
this.props.editingMeta[this.props.rowIndex].data[this.field] = val;
|
|
}
|
|
}, {
|
|
key: "onClick",
|
|
value: function onClick(event) {
|
|
var _this6 = this;
|
|
|
|
var params = this.getCellCallbackParams(event);
|
|
|
|
if (this.props.editMode !== 'row' && this.isEditable() && !this.state.editing && (this.props.selectOnEdit || !this.props.selectOnEdit && this.props.selected)) {
|
|
this.selfClick = true;
|
|
var onBeforeCellEditShow = this.getColumnProp('onBeforeCellEditShow');
|
|
var onCellEditInit = this.getColumnProp('onCellEditInit');
|
|
var cellEditValidatorEvent = this.getColumnProp('cellEditValidatorEvent');
|
|
|
|
if (onBeforeCellEditShow) {
|
|
onBeforeCellEditShow(params);
|
|
} // If the data is sorted using sort icon, it has been added to wait for the sort operation when any cell is wanted to be opened.
|
|
|
|
|
|
setTimeout(function () {
|
|
_this6.setState({
|
|
editing: true
|
|
}, function () {
|
|
if (onCellEditInit) {
|
|
onCellEditInit(params);
|
|
}
|
|
|
|
if (cellEditValidatorEvent === 'click') {
|
|
_this6.bindDocumentEditListener();
|
|
|
|
_this6.overlayEventListener = function (e) {
|
|
if (!_this6.isOutsideClicked(e.target)) {
|
|
_this6.selfClick = true;
|
|
}
|
|
};
|
|
|
|
OverlayService.on('overlay-click', _this6.overlayEventListener);
|
|
}
|
|
});
|
|
}, 1);
|
|
}
|
|
|
|
if (this.props.allowCellSelection && this.props.onClick) {
|
|
this.props.onClick(params);
|
|
}
|
|
}
|
|
}, {
|
|
key: "onMouseDown",
|
|
value: function onMouseDown(event) {
|
|
var params = this.getCellCallbackParams(event);
|
|
|
|
if (this.props.onMouseDown) {
|
|
this.props.onMouseDown(params);
|
|
}
|
|
}
|
|
}, {
|
|
key: "onMouseUp",
|
|
value: function onMouseUp(event) {
|
|
var params = this.getCellCallbackParams(event);
|
|
|
|
if (this.props.onMouseUp) {
|
|
this.props.onMouseUp(params);
|
|
}
|
|
}
|
|
}, {
|
|
key: "onKeyDown",
|
|
value: function onKeyDown(event) {
|
|
if (this.props.editMode !== 'row') {
|
|
if (event.which === 13 || event.which === 9) {
|
|
// tab || enter
|
|
this.switchCellToViewMode(event, true);
|
|
}
|
|
|
|
if (event.which === 27) {
|
|
// escape
|
|
this.switchCellToViewMode(event, false);
|
|
}
|
|
}
|
|
|
|
if (this.props.allowCellSelection) {
|
|
var target = event.target,
|
|
cell = event.currentTarget;
|
|
|
|
switch (event.which) {
|
|
//left arrow
|
|
case 37:
|
|
var prevCell = this.findPrevSelectableCell(cell);
|
|
|
|
if (prevCell) {
|
|
this.changeTabIndex(cell, prevCell);
|
|
prevCell.focus();
|
|
}
|
|
|
|
event.preventDefault();
|
|
break;
|
|
//right arrow
|
|
|
|
case 39:
|
|
var nextCell = this.findNextSelectableCell(cell);
|
|
|
|
if (nextCell) {
|
|
this.changeTabIndex(cell, nextCell);
|
|
nextCell.focus();
|
|
}
|
|
|
|
event.preventDefault();
|
|
break;
|
|
//up arrow
|
|
|
|
case 38:
|
|
var upCell = this.findUpSelectableCell(cell);
|
|
|
|
if (upCell) {
|
|
this.changeTabIndex(cell, upCell);
|
|
upCell.focus();
|
|
}
|
|
|
|
event.preventDefault();
|
|
break;
|
|
//down arrow
|
|
|
|
case 40:
|
|
var downCell = this.findDownSelectableCell(cell);
|
|
|
|
if (downCell) {
|
|
this.changeTabIndex(cell, downCell);
|
|
downCell.focus();
|
|
}
|
|
|
|
event.preventDefault();
|
|
break;
|
|
//enter
|
|
|
|
case 13:
|
|
// @deprecated
|
|
if (!DomHandler.isClickable(target)) {
|
|
this.onClick(event);
|
|
event.preventDefault();
|
|
}
|
|
|
|
break;
|
|
//space
|
|
|
|
case 32:
|
|
if (!DomHandler.isClickable(target) && !target.readOnly) {
|
|
this.onClick(event);
|
|
event.preventDefault();
|
|
}
|
|
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}, {
|
|
key: "onBlur",
|
|
value: function onBlur(event) {
|
|
this.selfClick = false;
|
|
|
|
if (this.props.editMode !== 'row' && this.state.editing && this.getColumnProp('cellEditValidatorEvent') === 'blur') {
|
|
this.switchCellToViewMode(event, true);
|
|
}
|
|
}
|
|
}, {
|
|
key: "onEditorFocus",
|
|
value: function onEditorFocus(event) {
|
|
this.onClick(event);
|
|
}
|
|
}, {
|
|
key: "onRadioChange",
|
|
value: function onRadioChange(event) {
|
|
this.props.onRadioChange({
|
|
originalEvent: event,
|
|
data: this.props.rowData,
|
|
index: this.props.rowIndex
|
|
});
|
|
}
|
|
}, {
|
|
key: "onCheckboxChange",
|
|
value: function onCheckboxChange(event) {
|
|
this.props.onCheckboxChange({
|
|
originalEvent: event,
|
|
data: this.props.rowData,
|
|
index: this.props.rowIndex
|
|
});
|
|
}
|
|
}, {
|
|
key: "onRowToggle",
|
|
value: function onRowToggle(event) {
|
|
this.props.onRowToggle({
|
|
originalEvent: event,
|
|
data: this.props.rowData
|
|
});
|
|
event.preventDefault();
|
|
}
|
|
}, {
|
|
key: "onRowEditInit",
|
|
value: function onRowEditInit(event) {
|
|
this.props.onRowEditInit({
|
|
originalEvent: event,
|
|
data: this.props.rowData,
|
|
newData: this.getEditingRowData(),
|
|
field: this.field,
|
|
index: this.props.rowIndex
|
|
});
|
|
}
|
|
}, {
|
|
key: "onRowEditSave",
|
|
value: function onRowEditSave(event) {
|
|
this.props.onRowEditSave({
|
|
originalEvent: event,
|
|
data: this.props.rowData,
|
|
newData: this.getEditingRowData(),
|
|
field: this.field,
|
|
index: this.props.rowIndex
|
|
});
|
|
this.focusOnInit();
|
|
}
|
|
}, {
|
|
key: "onRowEditCancel",
|
|
value: function onRowEditCancel(event) {
|
|
this.props.onRowEditCancel({
|
|
originalEvent: event,
|
|
data: this.props.rowData,
|
|
newData: this.getEditingRowData(),
|
|
field: this.field,
|
|
index: this.props.rowIndex
|
|
});
|
|
this.focusOnInit();
|
|
}
|
|
}, {
|
|
key: "bindDocumentEditListener",
|
|
value: function bindDocumentEditListener() {
|
|
var _this7 = this;
|
|
|
|
if (!this.documentEditListener) {
|
|
this.documentEditListener = function (e) {
|
|
if (!_this7.selfClick && _this7.isOutsideClicked(e.target)) {
|
|
_this7.switchCellToViewMode(e, true);
|
|
}
|
|
|
|
_this7.selfClick = false;
|
|
};
|
|
|
|
document.addEventListener('click', this.documentEditListener, true);
|
|
}
|
|
}
|
|
}, {
|
|
key: "unbindDocumentEditListener",
|
|
value: function unbindDocumentEditListener() {
|
|
if (this.documentEditListener) {
|
|
document.removeEventListener('click', this.documentEditListener, true);
|
|
this.documentEditListener = null;
|
|
this.selfClick = false;
|
|
}
|
|
}
|
|
}, {
|
|
key: "componentDidMount",
|
|
value: function componentDidMount() {
|
|
if (this.getColumnProp('frozen')) {
|
|
this.updateStickyPosition();
|
|
}
|
|
}
|
|
}, {
|
|
key: "componentDidUpdate",
|
|
value: function componentDidUpdate(prevProps, prevState) {
|
|
if (this.getColumnProp('frozen')) {
|
|
this.updateStickyPosition();
|
|
}
|
|
|
|
if (this.props.editMode === 'cell' || this.props.editMode === 'row') {
|
|
this.focusOnElement();
|
|
|
|
if (prevProps.editingMeta !== this.props.editingMeta) {
|
|
this.setState({
|
|
editingRowData: this.getEditingRowData()
|
|
});
|
|
}
|
|
|
|
if (prevState.editing !== this.state.editing) {
|
|
var callbackParams = this.getCellCallbackParams();
|
|
|
|
var params = _objectSpread$7(_objectSpread$7({}, callbackParams), {}, {
|
|
editing: this.state.editing
|
|
});
|
|
|
|
this.props.onEditingMetaChange(params);
|
|
}
|
|
}
|
|
}
|
|
}, {
|
|
key: "componentWillUnmount",
|
|
value: function componentWillUnmount() {
|
|
this.unbindDocumentEditListener();
|
|
|
|
if (this.overlayEventListener) {
|
|
OverlayService.off('overlay-click', this.overlayEventListener);
|
|
this.overlayEventListener = null;
|
|
}
|
|
}
|
|
}, {
|
|
key: "renderLoading",
|
|
value: function renderLoading() {
|
|
var options = this.getVirtualScrollerOption('getLoaderOptions')(this.props.rowIndex, {
|
|
cellIndex: this.props.index,
|
|
cellFirst: this.props.index === 0,
|
|
cellLast: this.props.index === this.getVirtualScrollerOption('columns').length - 1,
|
|
cellEven: this.props.index % 2 === 0,
|
|
cellOdd: this.props.index % 2 !== 0,
|
|
column: this.props.column,
|
|
field: this.field
|
|
});
|
|
var content = ObjectUtils.getJSXElement(this.getVirtualScrollerOption('loadingTemplate'), options);
|
|
return /*#__PURE__*/React.createElement("td", null, content);
|
|
}
|
|
}, {
|
|
key: "renderElement",
|
|
value: function renderElement() {
|
|
var _this8 = this;
|
|
|
|
var content, editorKeyHelper;
|
|
var cellSelected = this.props.allowCellSelection && this.isSelected();
|
|
var isRowEditor = this.props.editMode === 'row';
|
|
var tabIndex = this.getTabIndex(cellSelected);
|
|
var selectionMode = this.getColumnProp('selectionMode');
|
|
var rowReorder = this.getColumnProp('rowReorder');
|
|
var expander = this.getColumnProp('expander');
|
|
var rowEditor = this.getColumnProp('rowEditor');
|
|
var header = this.getColumnProp('header');
|
|
var body = this.getColumnProp('body');
|
|
var editor = this.getColumnProp('editor');
|
|
var frozen = this.getColumnProp('frozen');
|
|
var align = this.getColumnProp('align');
|
|
var value = this.resolveFieldData();
|
|
var cellClassName = ObjectUtils.getPropValue(this.props.cellClassName, value, {
|
|
props: this.props.tableProps,
|
|
rowData: this.props.rowData,
|
|
column: this.props.column
|
|
});
|
|
var className = classNames(this.getColumnProp('bodyClassName'), this.getColumnProp('className'), cellClassName, _defineProperty({
|
|
'p-selection-column': selectionMode !== null,
|
|
'p-editable-column': editor,
|
|
'p-cell-editing': editor && this.state.editing,
|
|
'p-frozen-column': frozen,
|
|
'p-selectable-cell': this.props.allowCellSelection && this.props.isSelectable({
|
|
data: this.getCellParams(),
|
|
index: this.props.rowIndex
|
|
}),
|
|
'p-highlight': cellSelected
|
|
}, "p-align-".concat(align), !!align));
|
|
var style = this.getStyle();
|
|
var title = this.props.responsiveLayout === 'stack' && /*#__PURE__*/React.createElement("span", {
|
|
className: "p-column-title"
|
|
}, ObjectUtils.getJSXElement(header, {
|
|
props: this.props.tableProps
|
|
}));
|
|
|
|
if (selectionMode) {
|
|
var showSelection = this.props.showSelectionElement ? this.props.showSelectionElement(this.props.rowData, {
|
|
rowIndex: this.props.rowIndex,
|
|
props: this.props.tableProps
|
|
}) : true;
|
|
content = showSelection && /*#__PURE__*/React.createElement(React.Fragment, null, selectionMode === 'single' && /*#__PURE__*/React.createElement(RowRadioButton, {
|
|
checked: this.props.selected,
|
|
onChange: this.onRadioChange,
|
|
tabIndex: this.props.tabIndex,
|
|
tableSelector: this.props.tableSelector
|
|
}), selectionMode === 'multiple' && /*#__PURE__*/React.createElement(RowCheckbox, {
|
|
checked: this.props.selected,
|
|
onChange: this.onCheckboxChange,
|
|
tabIndex: this.props.tabIndex
|
|
}));
|
|
} else if (rowReorder) {
|
|
var showReorder = this.props.showRowReorderElement ? this.props.showRowReorderElement(this.props.rowData, {
|
|
rowIndex: this.props.rowIndex,
|
|
props: this.props.tableProps
|
|
}) : true;
|
|
content = showReorder && /*#__PURE__*/React.createElement("i", {
|
|
className: classNames('p-datatable-reorderablerow-handle', this.getColumnProp('rowReorderIcon'))
|
|
});
|
|
} else if (expander) {
|
|
var iconClassName = classNames('p-row-toggler-icon', this.props.expanded ? this.props.expandedRowIcon : this.props.collapsedRowIcon);
|
|
var ariaControls = "".concat(this.props.tableSelector, "_content_").concat(this.props.rowIndex, "_expanded");
|
|
var expanderProps = {
|
|
onClick: this.onRowToggle,
|
|
className: 'p-row-toggler p-link',
|
|
iconClassName: iconClassName
|
|
};
|
|
content = /*#__PURE__*/React.createElement("button", {
|
|
className: expanderProps.className,
|
|
onClick: expanderProps.onClick,
|
|
type: "button",
|
|
"aria-expanded": this.props.expanded,
|
|
"aria-controls": ariaControls,
|
|
tabIndex: this.props.tabIndex
|
|
}, /*#__PURE__*/React.createElement("span", {
|
|
className: expanderProps.iconClassName
|
|
}), /*#__PURE__*/React.createElement(Ripple, null));
|
|
|
|
if (body) {
|
|
expanderProps['element'] = content;
|
|
content = ObjectUtils.getJSXElement(body, this.props.rowData, {
|
|
column: this.props.column,
|
|
field: this.field,
|
|
rowIndex: this.props.rowIndex,
|
|
frozenRow: this.props.frozenRow,
|
|
props: this.props.tableProps,
|
|
expander: expanderProps
|
|
});
|
|
}
|
|
} else if (isRowEditor && rowEditor) {
|
|
var rowEditorProps = {};
|
|
|
|
if (this.state.editing) {
|
|
rowEditorProps = {
|
|
editing: true,
|
|
onSaveClick: this.onRowEditSave,
|
|
saveClassName: 'p-row-editor-save p-link',
|
|
saveIconClassName: 'p-row-editor-save-icon pi pi-fw pi-check',
|
|
onCancelClick: this.onRowEditCancel,
|
|
cancelClassName: 'p-row-editor-cancel p-link',
|
|
cancelIconClassName: 'p-row-editor-cancel-icon pi pi-fw pi-times'
|
|
};
|
|
content = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("button", {
|
|
type: "button",
|
|
onClick: rowEditorProps.onSaveClick,
|
|
className: rowEditorProps.saveClassName,
|
|
tabIndex: this.props.tabIndex
|
|
}, /*#__PURE__*/React.createElement("span", {
|
|
className: rowEditorProps.saveIconClassName
|
|
}), /*#__PURE__*/React.createElement(Ripple, null)), /*#__PURE__*/React.createElement("button", {
|
|
type: "button",
|
|
onClick: rowEditorProps.onCancelClick,
|
|
className: rowEditorProps.cancelClassName,
|
|
tabIndex: this.props.tabIndex
|
|
}, /*#__PURE__*/React.createElement("span", {
|
|
className: rowEditorProps.cancelIconClassName
|
|
}), /*#__PURE__*/React.createElement(Ripple, null)));
|
|
} else {
|
|
rowEditorProps = {
|
|
editing: false,
|
|
onInitClick: this.onRowEditInit,
|
|
initClassName: 'p-row-editor-init p-link',
|
|
initIconClassName: 'p-row-editor-init-icon pi pi-fw pi-pencil'
|
|
};
|
|
content = /*#__PURE__*/React.createElement("button", {
|
|
type: "button",
|
|
onClick: rowEditorProps.onInitClick,
|
|
className: rowEditorProps.initClassName,
|
|
tabIndex: this.props.tabIndex
|
|
}, /*#__PURE__*/React.createElement("span", {
|
|
className: rowEditorProps.initIconClassName
|
|
}), /*#__PURE__*/React.createElement(Ripple, null));
|
|
}
|
|
|
|
if (body) {
|
|
rowEditorProps['element'] = content;
|
|
content = ObjectUtils.getJSXElement(body, this.props.rowData, {
|
|
column: this.props.column,
|
|
field: this.field,
|
|
rowIndex: this.props.rowIndex,
|
|
frozenRow: this.props.frozenRow,
|
|
props: this.props.tableProps,
|
|
rowEditor: rowEditorProps
|
|
});
|
|
}
|
|
} else if (body && !this.state.editing) {
|
|
content = body ? ObjectUtils.getJSXElement(body, this.props.rowData, {
|
|
column: this.props.column,
|
|
field: this.field,
|
|
rowIndex: this.props.rowIndex,
|
|
frozenRow: this.props.frozenRow,
|
|
props: this.props.tableProps
|
|
}) : value;
|
|
} else if (editor && this.state.editing) {
|
|
content = ObjectUtils.getJSXElement(editor, {
|
|
rowData: this.state.editingRowData,
|
|
value: this.resolveFieldData(this.state.editingRowData),
|
|
column: this.props.column,
|
|
field: this.field,
|
|
rowIndex: this.props.rowIndex,
|
|
frozenRow: this.props.frozenRow,
|
|
props: this.props.tableProps,
|
|
editorCallback: this.editorCallback
|
|
});
|
|
} else {
|
|
content = value;
|
|
}
|
|
|
|
if (!isRowEditor && editor) {
|
|
/* eslint-disable */
|
|
editorKeyHelper = /*#__PURE__*/React.createElement("a", {
|
|
tabIndex: "0",
|
|
ref: function ref(el) {
|
|
return _this8.keyHelper = el;
|
|
},
|
|
className: "p-cell-editor-key-helper p-hidden-accessible",
|
|
onFocus: this.onEditorFocus
|
|
}, /*#__PURE__*/React.createElement("span", null));
|
|
/* eslint-enable */
|
|
}
|
|
|
|
return /*#__PURE__*/React.createElement("td", {
|
|
ref: function ref(el) {
|
|
return _this8.el = el;
|
|
},
|
|
style: style,
|
|
className: className,
|
|
rowSpan: this.props.rowSpan,
|
|
tabIndex: tabIndex,
|
|
role: "cell",
|
|
onClick: this.onClick,
|
|
onKeyDown: this.onKeyDown,
|
|
onBlur: this.onBlur,
|
|
onMouseDown: this.onMouseDown,
|
|
onMouseUp: this.onMouseUp
|
|
}, editorKeyHelper, title, content);
|
|
}
|
|
}, {
|
|
key: "render",
|
|
value: function render() {
|
|
return this.getVirtualScrollerOption('loading') ? this.renderLoading() : this.renderElement();
|
|
}
|
|
}], [{
|
|
key: "getDerivedStateFromProps",
|
|
value: function getDerivedStateFromProps(nextProps, prevState) {
|
|
if (nextProps.editMode === 'row' && nextProps.editing !== prevState.editing) {
|
|
return {
|
|
editing: nextProps.editing
|
|
};
|
|
}
|
|
|
|
return null;
|
|
}
|
|
}]);
|
|
|
|
return BodyCell;
|
|
}(Component);
|
|
|
|
function ownKeys$6(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
|
|
function _objectSpread$6(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$6(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$6(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
|
|
function _createSuper$9(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$9(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
|
|
|
|
function _isNativeReflectConstruct$9() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
var BodyRow = /*#__PURE__*/function (_Component) {
|
|
_inherits(BodyRow, _Component);
|
|
|
|
var _super = _createSuper$9(BodyRow);
|
|
|
|
function BodyRow(props) {
|
|
var _this;
|
|
|
|
_classCallCheck(this, BodyRow);
|
|
|
|
_this = _super.call(this, props);
|
|
|
|
if (!_this.props.onRowEditChange) {
|
|
_this.state = {
|
|
editing: false
|
|
};
|
|
}
|
|
|
|
_this.onClick = _this.onClick.bind(_assertThisInitialized(_this));
|
|
_this.onDoubleClick = _this.onDoubleClick.bind(_assertThisInitialized(_this));
|
|
_this.onRightClick = _this.onRightClick.bind(_assertThisInitialized(_this));
|
|
_this.onTouchEnd = _this.onTouchEnd.bind(_assertThisInitialized(_this));
|
|
_this.onKeyDown = _this.onKeyDown.bind(_assertThisInitialized(_this));
|
|
_this.onMouseDown = _this.onMouseDown.bind(_assertThisInitialized(_this));
|
|
_this.onMouseUp = _this.onMouseUp.bind(_assertThisInitialized(_this));
|
|
_this.onDragStart = _this.onDragStart.bind(_assertThisInitialized(_this));
|
|
_this.onDragEnd = _this.onDragEnd.bind(_assertThisInitialized(_this));
|
|
_this.onDragOver = _this.onDragOver.bind(_assertThisInitialized(_this));
|
|
_this.onDragLeave = _this.onDragLeave.bind(_assertThisInitialized(_this));
|
|
_this.onDrop = _this.onDrop.bind(_assertThisInitialized(_this));
|
|
_this.onEditInit = _this.onEditInit.bind(_assertThisInitialized(_this));
|
|
_this.onEditSave = _this.onEditSave.bind(_assertThisInitialized(_this));
|
|
_this.onEditCancel = _this.onEditCancel.bind(_assertThisInitialized(_this));
|
|
return _this;
|
|
}
|
|
|
|
_createClass(BodyRow, [{
|
|
key: "isFocusable",
|
|
value: function isFocusable() {
|
|
return this.props.selectionMode && this.props.selectionModeInColumn !== 'single' && this.props.selectionModeInColumn !== 'multiple';
|
|
}
|
|
}, {
|
|
key: "isGrouped",
|
|
value: function isGrouped(column) {
|
|
if (this.props.groupRowsBy && this.getColumnProp(column, 'field')) {
|
|
if (Array.isArray(this.props.groupRowsBy)) return this.props.groupRowsBy.indexOf(column.props.field) > -1;else return this.props.groupRowsBy === column.props.field;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
}, {
|
|
key: "equals",
|
|
value: function equals(data1, data2) {
|
|
return this.props.compareSelectionBy === 'equals' ? data1 === data2 : ObjectUtils.equals(data1, data2, this.props.dataKey);
|
|
}
|
|
}, {
|
|
key: "getColumnProp",
|
|
value: function getColumnProp(col, prop) {
|
|
return col ? col.props[prop] : null;
|
|
}
|
|
}, {
|
|
key: "getEditing",
|
|
value: function getEditing() {
|
|
return this.props.onRowEditChange ? this.props.editing : this.state.editing;
|
|
}
|
|
}, {
|
|
key: "getTabIndex",
|
|
value: function getTabIndex() {
|
|
return this.isFocusable() && !this.props.allowCellSelection ? this.props.index === 0 ? this.props.tabIndex : -1 : null;
|
|
}
|
|
}, {
|
|
key: "findIndex",
|
|
value: function findIndex(collection, rowData) {
|
|
var _this2 = this;
|
|
|
|
return (collection || []).findIndex(function (data) {
|
|
return _this2.equals(rowData, data);
|
|
});
|
|
}
|
|
}, {
|
|
key: "changeTabIndex",
|
|
value: function changeTabIndex(currentRow, nextRow) {
|
|
if (currentRow && nextRow) {
|
|
currentRow.tabIndex = -1;
|
|
nextRow.tabIndex = this.props.tabIndex;
|
|
}
|
|
}
|
|
}, {
|
|
key: "findNextSelectableRow",
|
|
value: function findNextSelectableRow(row) {
|
|
var nextRow = row.nextElementSibling;
|
|
return nextRow ? DomHandler.hasClass(nextRow, 'p-selectable-row') ? nextRow : this.findNextSelectableRow(nextRow) : null;
|
|
}
|
|
}, {
|
|
key: "findPrevSelectableRow",
|
|
value: function findPrevSelectableRow(row) {
|
|
var prevRow = row.previousElementSibling;
|
|
return prevRow ? DomHandler.hasClass(prevRow, 'p-selectable-row') ? prevRow : this.findPrevSelectableRow(prevRow) : null;
|
|
}
|
|
}, {
|
|
key: "shouldRenderBodyCell",
|
|
value: function shouldRenderBodyCell(value, column, i) {
|
|
if (this.getColumnProp(column, 'hidden')) {
|
|
return false;
|
|
} else if (this.props.rowGroupMode && this.props.rowGroupMode === 'rowspan' && this.isGrouped(column)) {
|
|
var prevRowData = value[i - 1];
|
|
|
|
if (prevRowData) {
|
|
var currentRowFieldData = ObjectUtils.resolveFieldData(value[i], this.getColumnProp(column, 'field'));
|
|
var previousRowFieldData = ObjectUtils.resolveFieldData(prevRowData, this.getColumnProp(column, 'field'));
|
|
return currentRowFieldData !== previousRowFieldData;
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
}, {
|
|
key: "calculateRowGroupSize",
|
|
value: function calculateRowGroupSize(value, column, index) {
|
|
if (this.isGrouped(column)) {
|
|
var currentRowFieldData = ObjectUtils.resolveFieldData(value[index], this.getColumnProp(column, 'field'));
|
|
var nextRowFieldData = currentRowFieldData;
|
|
var groupRowSpan = 0;
|
|
|
|
while (currentRowFieldData === nextRowFieldData) {
|
|
groupRowSpan++;
|
|
var nextRowData = value[++index];
|
|
|
|
if (nextRowData) {
|
|
nextRowFieldData = ObjectUtils.resolveFieldData(nextRowData, this.getColumnProp(column, 'field'));
|
|
} else {
|
|
break;
|
|
}
|
|
}
|
|
|
|
return groupRowSpan === 1 ? null : groupRowSpan;
|
|
} else {
|
|
return null;
|
|
}
|
|
}
|
|
}, {
|
|
key: "onClick",
|
|
value: function onClick(event) {
|
|
this.props.onRowClick({
|
|
originalEvent: event,
|
|
data: this.props.rowData,
|
|
index: this.props.index
|
|
});
|
|
}
|
|
}, {
|
|
key: "onDoubleClick",
|
|
value: function onDoubleClick(event) {
|
|
this.props.onRowDoubleClick({
|
|
originalEvent: event,
|
|
data: this.props.rowData,
|
|
index: this.props.index
|
|
});
|
|
}
|
|
}, {
|
|
key: "onRightClick",
|
|
value: function onRightClick(event) {
|
|
this.props.onRowRightClick({
|
|
originalEvent: event,
|
|
data: this.props.rowData,
|
|
index: this.props.index
|
|
});
|
|
}
|
|
}, {
|
|
key: "onTouchEnd",
|
|
value: function onTouchEnd(event) {
|
|
this.props.onRowTouchEnd(event);
|
|
}
|
|
}, {
|
|
key: "onKeyDown",
|
|
value: function onKeyDown(event) {
|
|
if (this.isFocusable() && !this.props.allowCellSelection) {
|
|
var target = event.target,
|
|
row = event.currentTarget;
|
|
|
|
switch (event.which) {
|
|
//down arrow
|
|
case 40:
|
|
var nextRow = this.findNextSelectableRow(row);
|
|
|
|
if (nextRow) {
|
|
this.changeTabIndex(row, nextRow);
|
|
nextRow.focus();
|
|
}
|
|
|
|
event.preventDefault();
|
|
break;
|
|
//up arrow
|
|
|
|
case 38:
|
|
var prevRow = this.findPrevSelectableRow(row);
|
|
|
|
if (prevRow) {
|
|
this.changeTabIndex(row, prevRow);
|
|
prevRow.focus();
|
|
}
|
|
|
|
event.preventDefault();
|
|
break;
|
|
//enter
|
|
|
|
case 13:
|
|
// @deprecated
|
|
if (!DomHandler.isClickable(target)) {
|
|
this.onClick(event);
|
|
event.preventDefault();
|
|
}
|
|
|
|
break;
|
|
//space
|
|
|
|
case 32:
|
|
if (!DomHandler.isClickable(target) && !target.readOnly) {
|
|
this.onClick(event);
|
|
event.preventDefault();
|
|
}
|
|
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}, {
|
|
key: "onMouseDown",
|
|
value: function onMouseDown(event) {
|
|
this.props.onRowMouseDown({
|
|
originalEvent: event,
|
|
data: this.props.rowData,
|
|
index: this.props.index
|
|
});
|
|
}
|
|
}, {
|
|
key: "onMouseUp",
|
|
value: function onMouseUp(event) {
|
|
this.props.onRowMouseUp({
|
|
originalEvent: event,
|
|
data: this.props.rowData,
|
|
index: this.props.index
|
|
});
|
|
}
|
|
}, {
|
|
key: "onDragStart",
|
|
value: function onDragStart(event) {
|
|
this.props.onRowDragStart({
|
|
originalEvent: event,
|
|
data: this.props.rowData,
|
|
index: this.props.index
|
|
});
|
|
}
|
|
}, {
|
|
key: "onDragOver",
|
|
value: function onDragOver(event) {
|
|
this.props.onRowDragOver({
|
|
originalEvent: event,
|
|
data: this.props.rowData,
|
|
index: this.props.index
|
|
});
|
|
}
|
|
}, {
|
|
key: "onDragLeave",
|
|
value: function onDragLeave(event) {
|
|
this.props.onRowDragLeave({
|
|
originalEvent: event,
|
|
data: this.props.rowData,
|
|
index: this.props.index
|
|
});
|
|
}
|
|
}, {
|
|
key: "onDragEnd",
|
|
value: function onDragEnd(event) {
|
|
this.props.onRowDragEnd({
|
|
originalEvent: event,
|
|
data: this.props.rowData,
|
|
index: this.props.index
|
|
});
|
|
}
|
|
}, {
|
|
key: "onDrop",
|
|
value: function onDrop(event) {
|
|
this.props.onRowDrop({
|
|
originalEvent: event,
|
|
data: this.props.rowData,
|
|
index: this.props.index
|
|
});
|
|
}
|
|
}, {
|
|
key: "onEditChange",
|
|
value: function onEditChange(e, editing) {
|
|
if (this.props.onRowEditChange) {
|
|
var editingRows;
|
|
var dataKey = this.props.dataKey;
|
|
var originalEvent = e.originalEvent,
|
|
data = e.data,
|
|
index = e.index;
|
|
|
|
if (dataKey) {
|
|
var dataKeyValue = String(ObjectUtils.resolveFieldData(data, dataKey));
|
|
editingRows = this.props.editingRows ? _objectSpread$6({}, this.props.editingRows) : {};
|
|
if (editingRows[dataKeyValue] != null) delete editingRows[dataKeyValue];else editingRows[dataKeyValue] = true;
|
|
} else {
|
|
var editingRowIndex = this.findIndex(this.props.editingRows, data);
|
|
editingRows = this.props.editingRows ? _toConsumableArray(this.props.editingRows) : [];
|
|
if (editingRowIndex !== -1) editingRows = editingRows.filter(function (val, i) {
|
|
return i !== editingRowIndex;
|
|
});else editingRows.push(data);
|
|
}
|
|
|
|
this.props.onRowEditChange({
|
|
originalEvent: originalEvent,
|
|
data: editingRows,
|
|
index: index
|
|
});
|
|
} else {
|
|
this.setState({
|
|
editing: editing
|
|
});
|
|
}
|
|
}
|
|
}, {
|
|
key: "onEditInit",
|
|
value: function onEditInit(e) {
|
|
var event = e.originalEvent;
|
|
|
|
if (this.props.onRowEditInit) {
|
|
this.props.onRowEditInit({
|
|
originalEvent: event,
|
|
data: this.props.rowData,
|
|
index: this.props.index
|
|
});
|
|
}
|
|
|
|
this.onEditChange(e, true);
|
|
event.preventDefault();
|
|
}
|
|
}, {
|
|
key: "onEditSave",
|
|
value: function onEditSave(e) {
|
|
var event = e.originalEvent;
|
|
var valid = this.props.rowEditValidator ? this.props.rowEditValidator(this.props.rowData, {
|
|
props: this.props.tableProps
|
|
}) : true;
|
|
|
|
if (this.props.onRowEditSave) {
|
|
this.props.onRowEditSave({
|
|
originalEvent: event,
|
|
data: this.props.rowData,
|
|
index: this.props.index,
|
|
valid: valid
|
|
});
|
|
}
|
|
|
|
if (valid) {
|
|
if (this.props.onRowEditComplete) {
|
|
this.props.onRowEditComplete(e);
|
|
}
|
|
|
|
this.onEditChange(e, false);
|
|
}
|
|
|
|
event.preventDefault();
|
|
}
|
|
}, {
|
|
key: "onEditCancel",
|
|
value: function onEditCancel(e) {
|
|
var event = e.originalEvent;
|
|
|
|
if (this.props.onRowEditCancel) {
|
|
this.props.onRowEditCancel({
|
|
originalEvent: event,
|
|
data: this.props.rowData,
|
|
index: this.props.index
|
|
});
|
|
}
|
|
|
|
this.onEditChange(e, false);
|
|
event.preventDefault();
|
|
}
|
|
}, {
|
|
key: "renderContent",
|
|
value: function renderContent() {
|
|
var _this3 = this;
|
|
|
|
return this.props.columns.map(function (col, i) {
|
|
if (_this3.shouldRenderBodyCell(_this3.props.value, col, _this3.props.index)) {
|
|
var key = "".concat(_this3.getColumnProp(col, 'columnKey') || _this3.getColumnProp(col, 'field'), "_").concat(i);
|
|
var rowSpan = _this3.props.rowGroupMode === 'rowspan' ? _this3.calculateRowGroupSize(_this3.props.value, col, _this3.props.index) : null;
|
|
|
|
var editing = _this3.getEditing();
|
|
|
|
return /*#__PURE__*/React.createElement(BodyCell, {
|
|
key: key,
|
|
value: _this3.props.value,
|
|
tableProps: _this3.props.tableProps,
|
|
tableSelector: _this3.props.tableSelector,
|
|
column: col,
|
|
rowData: _this3.props.rowData,
|
|
rowIndex: _this3.props.index,
|
|
index: i,
|
|
rowSpan: rowSpan,
|
|
dataKey: _this3.props.dataKey,
|
|
editing: editing,
|
|
editingMeta: _this3.props.editingMeta,
|
|
editMode: _this3.props.editMode,
|
|
onRowEditInit: _this3.onEditInit,
|
|
onRowEditSave: _this3.onEditSave,
|
|
onRowEditCancel: _this3.onEditCancel,
|
|
onEditingMetaChange: _this3.props.onEditingMetaChange,
|
|
onRowToggle: _this3.props.onRowToggle,
|
|
selection: _this3.props.selection,
|
|
allowCellSelection: _this3.props.allowCellSelection,
|
|
compareSelectionBy: _this3.props.compareSelectionBy,
|
|
selectOnEdit: _this3.props.selectOnEdit,
|
|
selected: _this3.props.selected,
|
|
onClick: _this3.props.onCellClick,
|
|
onMouseDown: _this3.props.onCellMouseDown,
|
|
onMouseUp: _this3.props.onCellMouseUp,
|
|
tabIndex: _this3.props.tabIndex,
|
|
cellClassName: _this3.props.cellClassName,
|
|
responsiveLayout: _this3.props.responsiveLayout,
|
|
frozenRow: _this3.props.frozenRow,
|
|
isSelectable: _this3.props.isSelectable,
|
|
showSelectionElement: _this3.props.showSelectionElement,
|
|
showRowReorderElement: _this3.props.showRowReorderElement,
|
|
onRadioChange: _this3.props.onRadioChange,
|
|
onCheckboxChange: _this3.props.onCheckboxChange,
|
|
expanded: _this3.props.expanded,
|
|
expandedRowIcon: _this3.props.expandedRowIcon,
|
|
collapsedRowIcon: _this3.props.collapsedRowIcon,
|
|
virtualScrollerOptions: _this3.props.virtualScrollerOptions
|
|
});
|
|
}
|
|
|
|
return null;
|
|
});
|
|
}
|
|
}, {
|
|
key: "render",
|
|
value: function render() {
|
|
var _this4 = this;
|
|
|
|
var rowClassName = ObjectUtils.getPropValue(this.props.rowClassName, this.props.rowData, {
|
|
props: this.props.tableProps
|
|
});
|
|
var className = classNames(rowClassName, {
|
|
'p-highlight': !this.props.allowCellSelection && this.props.selected,
|
|
'p-highlight-contextmenu': this.props.contextMenuSelected,
|
|
'p-selectable-row': this.props.allowRowSelection && this.props.isSelectable({
|
|
data: this.props.rowData,
|
|
index: this.props.index
|
|
}),
|
|
'p-row-odd': this.props.index % 2 !== 0
|
|
});
|
|
var content = this.renderContent();
|
|
var tabIndex = this.getTabIndex();
|
|
return /*#__PURE__*/React.createElement("tr", {
|
|
ref: function ref(el) {
|
|
return _this4.el = el;
|
|
},
|
|
role: "row",
|
|
tabIndex: tabIndex,
|
|
className: className,
|
|
onMouseDown: this.onMouseDown,
|
|
onMouseUp: this.onMouseUp,
|
|
onClick: this.onClick,
|
|
onDoubleClick: this.onDoubleClick,
|
|
onContextMenu: this.onRightClick,
|
|
onTouchEnd: this.onTouchEnd,
|
|
onKeyDown: this.onKeyDown,
|
|
onDragStart: this.onDragStart,
|
|
onDragOver: this.onDragOver,
|
|
onDragLeave: this.onDragLeave,
|
|
onDragEnd: this.onDragEnd,
|
|
onDrop: this.onDrop
|
|
}, content);
|
|
}
|
|
}]);
|
|
|
|
return BodyRow;
|
|
}(Component);
|
|
|
|
function _createSuper$8(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$8(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
|
|
|
|
function _isNativeReflectConstruct$8() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
var RowTogglerButton = /*#__PURE__*/function (_Component) {
|
|
_inherits(RowTogglerButton, _Component);
|
|
|
|
var _super = _createSuper$8(RowTogglerButton);
|
|
|
|
function RowTogglerButton(props) {
|
|
var _this;
|
|
|
|
_classCallCheck(this, RowTogglerButton);
|
|
|
|
_this = _super.call(this, props);
|
|
_this.onClick = _this.onClick.bind(_assertThisInitialized(_this));
|
|
return _this;
|
|
}
|
|
|
|
_createClass(RowTogglerButton, [{
|
|
key: "onClick",
|
|
value: function onClick(event) {
|
|
this.props.onClick({
|
|
originalEvent: event,
|
|
data: this.props.rowData
|
|
});
|
|
}
|
|
}, {
|
|
key: "render",
|
|
value: function render() {
|
|
var iconClassName = classNames('p-row-toggler-icon', this.props.expanded ? this.props.expandedRowIcon : this.props.collapsedRowIcon);
|
|
return /*#__PURE__*/React.createElement("button", {
|
|
type: "button",
|
|
onClick: this.onClick,
|
|
className: "p-row-toggler p-link",
|
|
tabIndex: this.props.tabIndex
|
|
}, /*#__PURE__*/React.createElement("span", {
|
|
className: iconClassName
|
|
}), /*#__PURE__*/React.createElement(Ripple, null));
|
|
}
|
|
}]);
|
|
|
|
return RowTogglerButton;
|
|
}(Component);
|
|
|
|
var _excluded = ["originalEvent"];
|
|
|
|
function ownKeys$5(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
|
|
function _objectSpread$5(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$5(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$5(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
|
|
function _createSuper$7(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$7(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
|
|
|
|
function _isNativeReflectConstruct$7() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
var TableBody = /*#__PURE__*/function (_Component) {
|
|
_inherits(TableBody, _Component);
|
|
|
|
var _super = _createSuper$7(TableBody);
|
|
|
|
function TableBody(props) {
|
|
var _this;
|
|
|
|
_classCallCheck(this, TableBody);
|
|
|
|
_this = _super.call(this, props);
|
|
_this.state = {
|
|
rowGroupHeaderStyleObject: {}
|
|
}; // row
|
|
|
|
_this.onRowClick = _this.onRowClick.bind(_assertThisInitialized(_this));
|
|
_this.onRowDoubleClick = _this.onRowDoubleClick.bind(_assertThisInitialized(_this));
|
|
_this.onRowRightClick = _this.onRowRightClick.bind(_assertThisInitialized(_this));
|
|
_this.onRowTouchEnd = _this.onRowTouchEnd.bind(_assertThisInitialized(_this));
|
|
_this.onRowMouseDown = _this.onRowMouseDown.bind(_assertThisInitialized(_this));
|
|
_this.onRowMouseUp = _this.onRowMouseUp.bind(_assertThisInitialized(_this));
|
|
_this.onRowToggle = _this.onRowToggle.bind(_assertThisInitialized(_this)); // drag
|
|
|
|
_this.onRowDragStart = _this.onRowDragStart.bind(_assertThisInitialized(_this));
|
|
_this.onRowDragOver = _this.onRowDragOver.bind(_assertThisInitialized(_this));
|
|
_this.onRowDragLeave = _this.onRowDragLeave.bind(_assertThisInitialized(_this));
|
|
_this.onRowDragEnd = _this.onRowDragEnd.bind(_assertThisInitialized(_this));
|
|
_this.onRowDrop = _this.onRowDrop.bind(_assertThisInitialized(_this)); // selection
|
|
|
|
_this.onRadioChange = _this.onRadioChange.bind(_assertThisInitialized(_this));
|
|
_this.onCheckboxChange = _this.onCheckboxChange.bind(_assertThisInitialized(_this));
|
|
_this.onDragSelectionMouseMove = _this.onDragSelectionMouseMove.bind(_assertThisInitialized(_this));
|
|
_this.onDragSelectionMouseUp = _this.onDragSelectionMouseUp.bind(_assertThisInitialized(_this));
|
|
_this.isSelectable = _this.isSelectable.bind(_assertThisInitialized(_this)); // cell
|
|
|
|
_this.onCellClick = _this.onCellClick.bind(_assertThisInitialized(_this));
|
|
_this.onCellMouseDown = _this.onCellMouseDown.bind(_assertThisInitialized(_this));
|
|
_this.onCellMouseUp = _this.onCellMouseUp.bind(_assertThisInitialized(_this));
|
|
_this.ref = _this.ref.bind(_assertThisInitialized(_this));
|
|
return _this;
|
|
}
|
|
|
|
_createClass(TableBody, [{
|
|
key: "ref",
|
|
value: function ref(el) {
|
|
this.el = el;
|
|
this.props.virtualScrollerContentRef && this.props.virtualScrollerContentRef(el);
|
|
}
|
|
}, {
|
|
key: "equals",
|
|
value: function equals(data1, data2) {
|
|
if (this.allowCellSelection()) return (data1.rowIndex === data2.rowIndex || data1.rowData === data2.rowData) && (data1.field === data2.field || data1.cellIndex === data2.cellIndex);else return this.props.compareSelectionBy === 'equals' ? data1 === data2 : ObjectUtils.equals(data1, data2, this.props.dataKey);
|
|
}
|
|
}, {
|
|
key: "isSubheaderGrouping",
|
|
value: function isSubheaderGrouping() {
|
|
return this.props.rowGroupMode && this.props.rowGroupMode === 'subheader';
|
|
}
|
|
}, {
|
|
key: "isSelectionEnabled",
|
|
value: function isSelectionEnabled() {
|
|
return this.props.selectionMode || this.props.selectionModeInColumn !== null || this.props.columns && this.props.columns.some(function (col) {
|
|
return col && !!col.props.selectionMode;
|
|
});
|
|
}
|
|
}, {
|
|
key: "isRadioSelectionMode",
|
|
value: function isRadioSelectionMode() {
|
|
return this.props.selectionMode === 'radiobutton';
|
|
}
|
|
}, {
|
|
key: "isCheckboxSelectionMode",
|
|
value: function isCheckboxSelectionMode() {
|
|
return this.props.selectionMode === 'checkbox';
|
|
}
|
|
}, {
|
|
key: "isRadioSelectionModeInColumn",
|
|
value: function isRadioSelectionModeInColumn() {
|
|
return this.props.selectionModeInColumn === 'single';
|
|
}
|
|
}, {
|
|
key: "isCheckboxSelectionModeInColumn",
|
|
value: function isCheckboxSelectionModeInColumn() {
|
|
return this.props.selectionModeInColumn === 'multiple';
|
|
}
|
|
}, {
|
|
key: "isSingleSelection",
|
|
value: function isSingleSelection() {
|
|
return this.props.selectionMode === 'single' && !this.isCheckboxSelectionModeInColumn() || !this.isRadioSelectionMode() && this.isRadioSelectionModeInColumn();
|
|
}
|
|
}, {
|
|
key: "isMultipleSelection",
|
|
value: function isMultipleSelection() {
|
|
return this.props.selectionMode === 'multiple' && !this.isRadioSelectionModeInColumn() || this.isCheckboxSelectionModeInColumn();
|
|
}
|
|
}, {
|
|
key: "isRadioOnlySelection",
|
|
value: function isRadioOnlySelection() {
|
|
return this.isRadioSelectionMode() && this.isRadioSelectionModeInColumn();
|
|
}
|
|
}, {
|
|
key: "isCheckboxOnlySelection",
|
|
value: function isCheckboxOnlySelection() {
|
|
return this.isCheckboxSelectionMode() && this.isCheckboxSelectionModeInColumn();
|
|
}
|
|
}, {
|
|
key: "isSelected",
|
|
value: function isSelected(rowData) {
|
|
if (rowData && this.props.selection) {
|
|
return this.props.selection instanceof Array ? this.findIndex(this.props.selection, rowData) > -1 : this.equals(rowData, this.props.selection);
|
|
}
|
|
|
|
return false;
|
|
}
|
|
}, {
|
|
key: "isContextMenuSelected",
|
|
value: function isContextMenuSelected(rowData) {
|
|
if (rowData && this.props.contextMenuSelection) {
|
|
return this.equals(rowData, this.props.contextMenuSelection);
|
|
}
|
|
|
|
return false;
|
|
}
|
|
}, {
|
|
key: "isSelectable",
|
|
value: function isSelectable(options) {
|
|
return this.props.isDataSelectable ? this.props.isDataSelectable(options) : true;
|
|
}
|
|
}, {
|
|
key: "isRowExpanded",
|
|
value: function isRowExpanded(rowData) {
|
|
if (rowData && this.props.expandedRows) {
|
|
if (this.isSubheaderGrouping() && this.props.expandableRowGroups) {
|
|
return this.isRowGroupExpanded(rowData);
|
|
} else {
|
|
if (this.props.dataKey) return this.props.expandedRows ? this.props.expandedRows[ObjectUtils.resolveFieldData(rowData, this.props.dataKey)] !== undefined : false;else return this.findIndex(this.props.expandedRows, rowData) !== -1;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
}, {
|
|
key: "isRowGroupExpanded",
|
|
value: function isRowGroupExpanded(rowData) {
|
|
var _this2 = this;
|
|
|
|
if (this.props.dataKey === this.props.groupRowsBy) return Object.keys(this.props.expandedRows).some(function (data) {
|
|
return ObjectUtils.equals(data, ObjectUtils.resolveFieldData(rowData, _this2.props.dataKey));
|
|
});else return this.props.expandedRows.some(function (data) {
|
|
return ObjectUtils.equals(data, rowData, _this2.props.groupRowsBy);
|
|
});
|
|
}
|
|
}, {
|
|
key: "isRowEditing",
|
|
value: function isRowEditing(rowData) {
|
|
if (this.props.editMode === 'row' && rowData && this.props.editingRows) {
|
|
if (this.props.dataKey) return this.props.editingRows ? this.props.editingRows[ObjectUtils.resolveFieldData(rowData, this.props.dataKey)] !== undefined : false;else return this.findIndex(this.props.editingRows, rowData) !== -1;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
}, {
|
|
key: "allowDrag",
|
|
value: function allowDrag(event) {
|
|
return this.props.dragSelection && this.isMultipleSelection() && !event.originalEvent.shiftKey;
|
|
}
|
|
}, {
|
|
key: "allowRowDrag",
|
|
value: function allowRowDrag(event) {
|
|
return !this.allowCellSelection() && this.allowDrag(event);
|
|
}
|
|
}, {
|
|
key: "allowCellDrag",
|
|
value: function allowCellDrag(event) {
|
|
return this.allowCellSelection() && this.allowDrag(event);
|
|
}
|
|
}, {
|
|
key: "allowSelection",
|
|
value: function allowSelection(event) {
|
|
return !DomHandler.isClickable(event.originalEvent.target);
|
|
}
|
|
}, {
|
|
key: "allowMetaKeySelection",
|
|
value: function allowMetaKeySelection(event) {
|
|
return !this.rowTouched && (!this.props.metaKeySelection || this.props.metaKeySelection && (event.originalEvent.metaKey || event.originalEvent.ctrlKey));
|
|
}
|
|
}, {
|
|
key: "allowRangeSelection",
|
|
value: function allowRangeSelection(event) {
|
|
return this.isMultipleSelection() && event.originalEvent.shiftKey && this.anchorRowIndex !== null;
|
|
}
|
|
}, {
|
|
key: "allowRowSelection",
|
|
value: function allowRowSelection() {
|
|
return (this.props.selectionMode || this.props.selectionModeInColumn) && !this.isRadioOnlySelection() && !this.isCheckboxOnlySelection();
|
|
}
|
|
}, {
|
|
key: "allowCellSelection",
|
|
value: function allowCellSelection() {
|
|
return this.props.cellSelection && !this.isRadioSelectionModeInColumn() && !this.isCheckboxSelectionModeInColumn();
|
|
}
|
|
}, {
|
|
key: "getColumnsLength",
|
|
value: function getColumnsLength() {
|
|
return this.props.columns ? this.props.columns.length : 0;
|
|
}
|
|
}, {
|
|
key: "getVirtualScrollerOption",
|
|
value: function getVirtualScrollerOption(option, options) {
|
|
options = options || this.props.virtualScrollerOptions;
|
|
return options ? options[option] : null;
|
|
}
|
|
}, {
|
|
key: "findIndex",
|
|
value: function findIndex(collection, rowData) {
|
|
var _this3 = this;
|
|
|
|
return (collection || []).findIndex(function (data) {
|
|
return _this3.equals(rowData, data);
|
|
});
|
|
}
|
|
}, {
|
|
key: "rowGroupHeaderStyle",
|
|
value: function rowGroupHeaderStyle() {
|
|
if (this.props.scrollable) {
|
|
return {
|
|
top: this.state.rowGroupHeaderStyleObject['top']
|
|
};
|
|
}
|
|
|
|
return null;
|
|
}
|
|
}, {
|
|
key: "getRowKey",
|
|
value: function getRowKey(rowData, index) {
|
|
return this.props.dataKey ? ObjectUtils.resolveFieldData(rowData, this.props.dataKey) + '_' + index : index;
|
|
}
|
|
}, {
|
|
key: "shouldRenderRowGroupHeader",
|
|
value: function shouldRenderRowGroupHeader(value, rowData, i) {
|
|
var currentRowFieldData = ObjectUtils.resolveFieldData(rowData, this.props.groupRowsBy);
|
|
var prevRowData = value[i - 1];
|
|
|
|
if (prevRowData) {
|
|
var previousRowFieldData = ObjectUtils.resolveFieldData(prevRowData, this.props.groupRowsBy);
|
|
return currentRowFieldData !== previousRowFieldData;
|
|
} else {
|
|
return true;
|
|
}
|
|
}
|
|
}, {
|
|
key: "shouldRenderRowGroupFooter",
|
|
value: function shouldRenderRowGroupFooter(value, rowData, i, expanded) {
|
|
if (this.props.expandableRowGroups && !expanded) {
|
|
return false;
|
|
} else {
|
|
var currentRowFieldData = ObjectUtils.resolveFieldData(rowData, this.props.groupRowsBy);
|
|
var nextRowData = value[i + 1];
|
|
|
|
if (nextRowData) {
|
|
var nextRowFieldData = ObjectUtils.resolveFieldData(nextRowData, this.props.groupRowsBy);
|
|
return currentRowFieldData !== nextRowFieldData;
|
|
} else {
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
}, {
|
|
key: "updateFrozenRowStickyPosition",
|
|
value: function updateFrozenRowStickyPosition() {
|
|
this.el.style.top = DomHandler.getOuterHeight(this.el.previousElementSibling) + 'px';
|
|
}
|
|
}, {
|
|
key: "updateFrozenRowGroupHeaderStickyPosition",
|
|
value: function updateFrozenRowGroupHeaderStickyPosition() {
|
|
var tableHeaderHeight = DomHandler.getOuterHeight(this.el.previousElementSibling);
|
|
var top = tableHeaderHeight + 'px';
|
|
|
|
if (this.state.rowGroupHeaderStyleObject && this.state.rowGroupHeaderStyleObject.top !== top) {
|
|
this.setState({
|
|
rowGroupHeaderStyleObject: {
|
|
top: top
|
|
}
|
|
});
|
|
}
|
|
}
|
|
}, {
|
|
key: "updateVirtualScrollerPosition",
|
|
value: function updateVirtualScrollerPosition() {
|
|
var tableHeaderHeight = DomHandler.getOuterHeight(this.el.previousElementSibling);
|
|
this.el.style.top = (this.el.style.top || 0) + tableHeaderHeight + 'px';
|
|
}
|
|
}, {
|
|
key: "onSingleSelection",
|
|
value: function onSingleSelection(_ref) {
|
|
var originalEvent = _ref.originalEvent,
|
|
data = _ref.data,
|
|
index = _ref.index,
|
|
toggleable = _ref.toggleable,
|
|
type = _ref.type;
|
|
|
|
if (!this.isSelectable({
|
|
data: data,
|
|
index: index
|
|
})) {
|
|
return;
|
|
}
|
|
|
|
var selected = this.isSelected(data);
|
|
var selection = this.props.selection;
|
|
|
|
if (selected) {
|
|
if (toggleable) {
|
|
selection = null;
|
|
this.onUnselect({
|
|
originalEvent: originalEvent,
|
|
data: data,
|
|
type: type
|
|
});
|
|
}
|
|
} else {
|
|
selection = data;
|
|
this.onSelect({
|
|
originalEvent: originalEvent,
|
|
data: data,
|
|
type: type
|
|
});
|
|
}
|
|
|
|
this.focusOnElement(originalEvent, true);
|
|
|
|
if (this.props.onSelectionChange && selection !== this.props.selection) {
|
|
this.props.onSelectionChange({
|
|
originalEvent: originalEvent,
|
|
value: selection,
|
|
type: type
|
|
});
|
|
}
|
|
}
|
|
}, {
|
|
key: "onMultipleSelection",
|
|
value: function onMultipleSelection(_ref2) {
|
|
var _this4 = this;
|
|
|
|
var originalEvent = _ref2.originalEvent,
|
|
data = _ref2.data,
|
|
index = _ref2.index,
|
|
toggleable = _ref2.toggleable,
|
|
type = _ref2.type;
|
|
|
|
if (!this.isSelectable({
|
|
data: data,
|
|
index: index
|
|
})) {
|
|
return;
|
|
}
|
|
|
|
var selected = this.isSelected(data);
|
|
var selection = this.props.selection || [];
|
|
|
|
if (selected) {
|
|
if (toggleable) {
|
|
var selectionIndex = this.findIndex(selection, data);
|
|
selection = this.props.selection.filter(function (val, i) {
|
|
return i !== selectionIndex;
|
|
});
|
|
this.onUnselect({
|
|
originalEvent: originalEvent,
|
|
data: data,
|
|
type: type
|
|
});
|
|
} else if (selection.length) {
|
|
this.props.selection.forEach(function (d) {
|
|
return _this4.onUnselect({
|
|
originalEvent: originalEvent,
|
|
data: d,
|
|
type: type
|
|
});
|
|
});
|
|
selection = [data];
|
|
this.onSelect({
|
|
originalEvent: originalEvent,
|
|
data: data,
|
|
type: type
|
|
});
|
|
}
|
|
} else {
|
|
selection = toggleable && this.isMultipleSelection() ? [].concat(_toConsumableArray(selection), [data]) : [data];
|
|
this.onSelect({
|
|
originalEvent: originalEvent,
|
|
data: data,
|
|
type: type
|
|
});
|
|
}
|
|
|
|
this.focusOnElement(originalEvent, true);
|
|
|
|
if (this.props.onSelectionChange && selection !== this.props.selection) {
|
|
this.props.onSelectionChange({
|
|
originalEvent: originalEvent,
|
|
value: selection,
|
|
type: type
|
|
});
|
|
}
|
|
}
|
|
}, {
|
|
key: "onRangeSelection",
|
|
value: function onRangeSelection(event, type) {
|
|
DomHandler.clearSelection();
|
|
this.rangeRowIndex = this.allowCellSelection() ? event.rowIndex : event.index;
|
|
var selectionInRange = this.selectRange(event);
|
|
var selection = this.isMultipleSelection() ? _toConsumableArray(new Set([].concat(_toConsumableArray(this.props.selection || []), _toConsumableArray(selectionInRange)))) : selectionInRange;
|
|
|
|
if (this.props.onSelectionChange && selection !== this.props.selection) {
|
|
this.props.onSelectionChange({
|
|
originalEvent: event.originalEvent,
|
|
value: selection,
|
|
type: type
|
|
});
|
|
}
|
|
|
|
this.anchorRowIndex = this.rangeRowIndex;
|
|
this.anchorCellIndex = event.cellIndex;
|
|
this.focusOnElement(event.originalEvent, false);
|
|
}
|
|
}, {
|
|
key: "selectRange",
|
|
value: function selectRange(event) {
|
|
var rangeStart, rangeEnd;
|
|
var isLazyAndPaginator = this.props.lazy && this.props.paginator;
|
|
|
|
if (isLazyAndPaginator) {
|
|
this.anchorRowIndex += this.anchorRowFirst;
|
|
this.rangeRowIndex += this.props.first;
|
|
}
|
|
|
|
if (this.rangeRowIndex > this.anchorRowIndex) {
|
|
rangeStart = this.anchorRowIndex;
|
|
rangeEnd = this.rangeRowIndex;
|
|
} else if (this.rangeRowIndex < this.anchorRowIndex) {
|
|
rangeStart = this.rangeRowIndex;
|
|
rangeEnd = this.anchorRowIndex;
|
|
} else {
|
|
rangeStart = rangeEnd = this.rangeRowIndex;
|
|
}
|
|
|
|
if (isLazyAndPaginator) {
|
|
rangeStart = Math.max(rangeStart - this.props.first, 0);
|
|
rangeEnd -= this.props.first;
|
|
}
|
|
|
|
return this.allowCellSelection() ? this.selectRangeOnCell(event, rangeStart, rangeEnd) : this.selectRangeOnRow(event, rangeStart, rangeEnd);
|
|
}
|
|
}, {
|
|
key: "selectRangeOnRow",
|
|
value: function selectRangeOnRow(event, rowRangeStart, rowRangeEnd) {
|
|
var value = this.props.value;
|
|
var selection = [];
|
|
|
|
for (var i = rowRangeStart; i <= rowRangeEnd; i++) {
|
|
var rangeRowData = value[i];
|
|
|
|
if (!this.isSelectable({
|
|
data: rangeRowData,
|
|
index: i
|
|
})) {
|
|
continue;
|
|
}
|
|
|
|
selection.push(rangeRowData);
|
|
this.onSelect({
|
|
originalEvent: event.originalEvent,
|
|
data: rangeRowData,
|
|
type: 'row'
|
|
});
|
|
}
|
|
|
|
return selection;
|
|
}
|
|
}, {
|
|
key: "selectRangeOnCell",
|
|
value: function selectRangeOnCell(event, rowRangeStart, rowRangeEnd) {
|
|
var cellRangeStart,
|
|
cellRangeEnd,
|
|
cellIndex = event.cellIndex;
|
|
|
|
if (cellIndex > this.anchorCellIndex) {
|
|
cellRangeStart = this.anchorCellIndex;
|
|
cellRangeEnd = cellIndex;
|
|
} else if (cellIndex < this.anchorCellIndex) {
|
|
cellRangeStart = cellIndex;
|
|
cellRangeEnd = this.anchorCellIndex;
|
|
} else {
|
|
cellRangeStart = cellRangeEnd = cellIndex;
|
|
}
|
|
|
|
var value = this.props.value;
|
|
var selection = [];
|
|
|
|
for (var i = rowRangeStart; i <= rowRangeEnd; i++) {
|
|
var rowData = value[i];
|
|
var columns = this.props.columns;
|
|
|
|
for (var j = cellRangeStart; j <= cellRangeEnd; j++) {
|
|
var field = columns[j].props.field;
|
|
|
|
var _value = ObjectUtils.resolveFieldData(rowData, field);
|
|
|
|
var rangeRowData = {
|
|
value: _value,
|
|
field: field,
|
|
rowData: rowData,
|
|
rowIndex: i,
|
|
cellIndex: j,
|
|
selected: true
|
|
};
|
|
|
|
if (!this.isSelectable({
|
|
data: rangeRowData,
|
|
index: i
|
|
})) {
|
|
continue;
|
|
}
|
|
|
|
selection.push(rangeRowData);
|
|
this.onSelect({
|
|
originalEvent: event.originalEvent,
|
|
data: rangeRowData,
|
|
type: 'cell'
|
|
});
|
|
}
|
|
}
|
|
|
|
return selection;
|
|
}
|
|
}, {
|
|
key: "onSelect",
|
|
value: function onSelect(event) {
|
|
if (this.allowCellSelection()) this.props.onCellSelect && this.props.onCellSelect(_objectSpread$5(_objectSpread$5({
|
|
originalEvent: event.originalEvent
|
|
}, event.data), {}, {
|
|
type: event.type
|
|
}));else this.props.onRowSelect && this.props.onRowSelect(event);
|
|
}
|
|
}, {
|
|
key: "onUnselect",
|
|
value: function onUnselect(event) {
|
|
if (this.allowCellSelection()) this.props.onCellUnselect && this.props.onCellUnselect(_objectSpread$5(_objectSpread$5({
|
|
originalEvent: event.originalEvent
|
|
}, event.data), {}, {
|
|
type: event.type
|
|
}));else this.props.onRowUnselect && this.props.onRowUnselect(event);
|
|
}
|
|
}, {
|
|
key: "enableDragSelection",
|
|
value: function enableDragSelection(event) {
|
|
if (this.props.dragSelection && !this.dragSelectionHelper) {
|
|
this.dragSelectionHelper = document.createElement('div');
|
|
DomHandler.addClass(this.dragSelectionHelper, 'p-datatable-drag-selection-helper');
|
|
this.initialDragPosition = {
|
|
x: event.clientX,
|
|
y: event.clientY
|
|
};
|
|
this.dragSelectionHelper.style.top = "".concat(event.pageY, "px");
|
|
this.dragSelectionHelper.style.left = "".concat(event.pageX, "px");
|
|
this.bindDragSelectionEvents();
|
|
}
|
|
}
|
|
}, {
|
|
key: "focusOnElement",
|
|
value: function focusOnElement(event, isFocused) {
|
|
var target = event.currentTarget;
|
|
|
|
if (!this.allowCellSelection() && this.props.selectionAutoFocus) {
|
|
if (this.isCheckboxSelectionModeInColumn()) {
|
|
var checkbox = DomHandler.findSingle(target, 'td.p-selection-column .p-checkbox-box');
|
|
checkbox && checkbox.focus();
|
|
} else if (this.isRadioSelectionModeInColumn()) {
|
|
var radio = DomHandler.findSingle(target, 'td.p-selection-column input[type="radio"]');
|
|
radio && radio.focus();
|
|
}
|
|
}
|
|
|
|
!isFocused && target && target.focus();
|
|
}
|
|
}, {
|
|
key: "changeTabIndex",
|
|
value: function changeTabIndex(event, type) {
|
|
var target = event.currentTarget;
|
|
var isSelectable = DomHandler.hasClass(target, type === 'cell' ? 'p-selectable-cell' : 'p-selectable-row');
|
|
|
|
if (isSelectable) {
|
|
var selector = type === 'cell' ? 'tr > td' : 'tr';
|
|
var tabbableEl = DomHandler.findSingle(this.el, "".concat(selector, "[tabindex=\"").concat(this.props.tabIndex, "\"]"));
|
|
|
|
if (tabbableEl && target) {
|
|
tabbableEl.tabIndex = -1;
|
|
target.tabIndex = this.props.tabIndex;
|
|
}
|
|
}
|
|
}
|
|
}, {
|
|
key: "onRowClick",
|
|
value: function onRowClick(event) {
|
|
if (this.allowCellSelection() || !this.allowSelection(event)) {
|
|
return;
|
|
}
|
|
|
|
this.props.onRowClick && this.props.onRowClick(event);
|
|
|
|
if (this.allowRowSelection()) {
|
|
if (this.allowRangeSelection(event)) {
|
|
this.onRangeSelection(event, 'row');
|
|
} else {
|
|
var toggleable = this.isRadioSelectionModeInColumn() || this.isCheckboxSelectionModeInColumn() || this.allowMetaKeySelection(event);
|
|
this.anchorRowIndex = event.index;
|
|
this.rangeRowIndex = event.index;
|
|
this.anchorRowFirst = this.props.first;
|
|
|
|
if (this.isSingleSelection()) {
|
|
this.onSingleSelection(_objectSpread$5(_objectSpread$5({}, event), {}, {
|
|
toggleable: toggleable,
|
|
type: 'row'
|
|
}));
|
|
} else {
|
|
this.onMultipleSelection(_objectSpread$5(_objectSpread$5({}, event), {}, {
|
|
toggleable: toggleable,
|
|
type: 'row'
|
|
}));
|
|
}
|
|
}
|
|
|
|
this.changeTabIndex(event.originalEvent, 'row');
|
|
} else {
|
|
this.focusOnElement(event.originalEvent);
|
|
}
|
|
|
|
this.rowTouched = false;
|
|
}
|
|
}, {
|
|
key: "onRowDoubleClick",
|
|
value: function onRowDoubleClick(e) {
|
|
var event = e.originalEvent;
|
|
|
|
if (DomHandler.isClickable(event.target)) {
|
|
return;
|
|
}
|
|
|
|
if (this.props.onRowDoubleClick) {
|
|
this.props.onRowDoubleClick(e);
|
|
}
|
|
}
|
|
}, {
|
|
key: "onRowRightClick",
|
|
value: function onRowRightClick(event) {
|
|
if (this.props.onContextMenu || this.props.onContextMenuSelectionChange) {
|
|
DomHandler.clearSelection();
|
|
|
|
if (this.props.onContextMenuSelectionChange) {
|
|
this.props.onContextMenuSelectionChange({
|
|
originalEvent: event.originalEvent,
|
|
value: event.data
|
|
});
|
|
}
|
|
|
|
if (this.props.onContextMenu) {
|
|
this.props.onContextMenu({
|
|
originalEvent: event.originalEvent,
|
|
data: event.data
|
|
});
|
|
}
|
|
|
|
event.originalEvent.preventDefault();
|
|
}
|
|
}
|
|
}, {
|
|
key: "onRowTouchEnd",
|
|
value: function onRowTouchEnd() {
|
|
this.rowTouched = true;
|
|
}
|
|
}, {
|
|
key: "onRowMouseDown",
|
|
value: function onRowMouseDown(e) {
|
|
DomHandler.clearSelection();
|
|
var event = e.originalEvent;
|
|
if (DomHandler.hasClass(event.target, 'p-datatable-reorderablerow-handle')) event.currentTarget.draggable = true;else event.currentTarget.draggable = false;
|
|
|
|
if (this.allowRowDrag(e)) {
|
|
this.enableDragSelection(event, 'row');
|
|
this.anchorRowIndex = e.index;
|
|
this.rangeRowIndex = e.index;
|
|
this.anchorRowFirst = this.props.first;
|
|
}
|
|
}
|
|
}, {
|
|
key: "onRowMouseUp",
|
|
value: function onRowMouseUp(event) {
|
|
var isSameRow = event.index === this.anchorRowIndex;
|
|
|
|
if (this.allowRowDrag(event) && !isSameRow) {
|
|
this.onRangeSelection(event, 'row');
|
|
}
|
|
}
|
|
}, {
|
|
key: "onRowToggle",
|
|
value: function onRowToggle(event) {
|
|
var expandedRows;
|
|
var dataKey = this.props.dataKey;
|
|
var hasDataKey = this.props.groupRowsBy ? dataKey === this.props.groupRowsBy : !!dataKey;
|
|
|
|
if (hasDataKey) {
|
|
var dataKeyValue = String(ObjectUtils.resolveFieldData(event.data, dataKey));
|
|
expandedRows = this.props.expandedRows ? _objectSpread$5({}, this.props.expandedRows) : {};
|
|
|
|
if (expandedRows[dataKeyValue] != null) {
|
|
delete expandedRows[dataKeyValue];
|
|
|
|
if (this.props.onRowCollapse) {
|
|
this.props.onRowCollapse({
|
|
originalEvent: event,
|
|
data: event.data
|
|
});
|
|
}
|
|
} else {
|
|
expandedRows[dataKeyValue] = true;
|
|
|
|
if (this.props.onRowExpand) {
|
|
this.props.onRowExpand({
|
|
originalEvent: event,
|
|
data: event.data
|
|
});
|
|
}
|
|
}
|
|
} else {
|
|
var expandedRowIndex = this.findIndex(this.props.expandedRows, event.data);
|
|
expandedRows = this.props.expandedRows ? _toConsumableArray(this.props.expandedRows) : [];
|
|
|
|
if (expandedRowIndex !== -1) {
|
|
expandedRows = expandedRows.filter(function (val, i) {
|
|
return i !== expandedRowIndex;
|
|
});
|
|
|
|
if (this.props.onRowCollapse) {
|
|
this.props.onRowCollapse({
|
|
originalEvent: event,
|
|
data: event.data
|
|
});
|
|
}
|
|
} else {
|
|
expandedRows.push(event.data);
|
|
|
|
if (this.props.onRowExpand) {
|
|
this.props.onRowExpand({
|
|
originalEvent: event,
|
|
data: event.data
|
|
});
|
|
}
|
|
}
|
|
}
|
|
|
|
if (this.props.onRowToggle) {
|
|
this.props.onRowToggle({
|
|
data: expandedRows
|
|
});
|
|
}
|
|
}
|
|
}, {
|
|
key: "onRowDragStart",
|
|
value: function onRowDragStart(e) {
|
|
var event = e.originalEvent,
|
|
index = e.index;
|
|
this.rowDragging = true;
|
|
this.draggedRowIndex = index;
|
|
event.dataTransfer.setData('text', 'b'); // For firefox
|
|
}
|
|
}, {
|
|
key: "onRowDragOver",
|
|
value: function onRowDragOver(e) {
|
|
var event = e.originalEvent,
|
|
index = e.index;
|
|
|
|
if (this.rowDragging && this.draggedRowIndex !== index) {
|
|
var rowElement = event.currentTarget;
|
|
var rowY = DomHandler.getOffset(rowElement).top + DomHandler.getWindowScrollTop();
|
|
var pageY = event.pageY;
|
|
var rowMidY = rowY + DomHandler.getOuterHeight(rowElement) / 2;
|
|
var prevRowElement = rowElement.previousElementSibling;
|
|
|
|
if (pageY < rowMidY) {
|
|
DomHandler.removeClass(rowElement, 'p-datatable-dragpoint-bottom');
|
|
this.droppedRowIndex = index;
|
|
if (prevRowElement) DomHandler.addClass(prevRowElement, 'p-datatable-dragpoint-bottom');else DomHandler.addClass(rowElement, 'p-datatable-dragpoint-top');
|
|
} else {
|
|
if (prevRowElement) DomHandler.removeClass(prevRowElement, 'p-datatable-dragpoint-bottom');else DomHandler.addClass(rowElement, 'p-datatable-dragpoint-top');
|
|
this.droppedRowIndex = index + 1;
|
|
DomHandler.addClass(rowElement, 'p-datatable-dragpoint-bottom');
|
|
}
|
|
}
|
|
|
|
event.preventDefault();
|
|
}
|
|
}, {
|
|
key: "onRowDragLeave",
|
|
value: function onRowDragLeave(e) {
|
|
var event = e.originalEvent;
|
|
var rowElement = event.currentTarget;
|
|
var prevRowElement = rowElement.previousElementSibling;
|
|
|
|
if (prevRowElement) {
|
|
DomHandler.removeClass(prevRowElement, 'p-datatable-dragpoint-bottom');
|
|
}
|
|
|
|
DomHandler.removeClass(rowElement, 'p-datatable-dragpoint-bottom');
|
|
DomHandler.removeClass(rowElement, 'p-datatable-dragpoint-top');
|
|
}
|
|
}, {
|
|
key: "onRowDragEnd",
|
|
value: function onRowDragEnd(e) {
|
|
var event = e.originalEvent;
|
|
this.rowDragging = false;
|
|
this.draggedRowIndex = null;
|
|
this.droppedRowIndex = null;
|
|
event.currentTarget.draggable = false;
|
|
}
|
|
}, {
|
|
key: "onRowDrop",
|
|
value: function onRowDrop(e) {
|
|
var event = e.originalEvent;
|
|
|
|
if (this.droppedRowIndex != null) {
|
|
var dropIndex = this.draggedRowIndex > this.droppedRowIndex ? this.droppedRowIndex : this.droppedRowIndex === 0 ? 0 : this.droppedRowIndex - 1;
|
|
|
|
var val = _toConsumableArray(this.props.value);
|
|
|
|
ObjectUtils.reorderArray(val, this.draggedRowIndex, dropIndex);
|
|
|
|
if (this.props.onRowReorder) {
|
|
this.props.onRowReorder({
|
|
originalEvent: event,
|
|
value: val,
|
|
dragIndex: this.draggedRowIndex,
|
|
dropIndex: this.droppedRowIndex
|
|
});
|
|
}
|
|
} //cleanup
|
|
|
|
|
|
this.onRowDragLeave(e);
|
|
this.onRowDragEnd(e);
|
|
event.preventDefault();
|
|
}
|
|
}, {
|
|
key: "onRadioChange",
|
|
value: function onRadioChange(event) {
|
|
this.onSingleSelection(_objectSpread$5(_objectSpread$5({}, event), {}, {
|
|
toggleable: true,
|
|
type: 'radio'
|
|
}));
|
|
}
|
|
}, {
|
|
key: "onCheckboxChange",
|
|
value: function onCheckboxChange(event) {
|
|
this.onMultipleSelection(_objectSpread$5(_objectSpread$5({}, event), {}, {
|
|
toggleable: true,
|
|
type: 'checkbox'
|
|
}));
|
|
}
|
|
}, {
|
|
key: "onDragSelectionMouseMove",
|
|
value: function onDragSelectionMouseMove(event) {
|
|
var _this$initialDragPosi = this.initialDragPosition,
|
|
x = _this$initialDragPosi.x,
|
|
y = _this$initialDragPosi.y;
|
|
var dx = event.clientX - x;
|
|
var dy = event.clientY - y;
|
|
if (dy < 0) this.dragSelectionHelper.style.top = "".concat(event.pageY + 5, "px");
|
|
if (dx < 0) this.dragSelectionHelper.style.left = "".concat(event.pageX + 5, "px");
|
|
this.dragSelectionHelper.style.height = "".concat(Math.abs(dy), "px");
|
|
this.dragSelectionHelper.style.width = "".concat(Math.abs(dx), "px");
|
|
event.preventDefault();
|
|
}
|
|
}, {
|
|
key: "onDragSelectionMouseUp",
|
|
value: function onDragSelectionMouseUp() {
|
|
if (this.dragSelectionHelper) {
|
|
this.dragSelectionHelper.remove();
|
|
this.dragSelectionHelper = null;
|
|
}
|
|
|
|
document.removeEventListener('mousemove', this.onDragSelectionMouseMove);
|
|
document.removeEventListener('mouseup', this.onDragSelectionMouseUp);
|
|
}
|
|
}, {
|
|
key: "onCellClick",
|
|
value: function onCellClick(event) {
|
|
if (!this.allowSelection(event)) {
|
|
return;
|
|
}
|
|
|
|
this.props.onCellClick && this.props.onCellClick(event);
|
|
|
|
if (this.allowCellSelection()) {
|
|
if (this.allowRangeSelection(event)) {
|
|
this.onRangeSelection(event, 'cell');
|
|
} else {
|
|
var toggleable = this.allowMetaKeySelection(event);
|
|
|
|
var originalEvent = event.originalEvent,
|
|
data = _objectWithoutProperties(event, _excluded);
|
|
|
|
this.anchorRowIndex = event.rowIndex;
|
|
this.rangeRowIndex = event.rowIndex;
|
|
this.anchorRowFirst = this.props.first;
|
|
this.anchorCellIndex = event.cellIndex;
|
|
|
|
if (this.isSingleSelection()) {
|
|
this.onSingleSelection({
|
|
originalEvent: originalEvent,
|
|
data: data,
|
|
index: event.rowIndex,
|
|
toggleable: toggleable,
|
|
type: 'cell'
|
|
});
|
|
} else {
|
|
this.onMultipleSelection({
|
|
originalEvent: originalEvent,
|
|
data: data,
|
|
index: event.rowIndex,
|
|
toggleable: toggleable,
|
|
type: 'cell'
|
|
});
|
|
}
|
|
}
|
|
|
|
this.changeTabIndex(event.originalEvent, 'cell');
|
|
}
|
|
|
|
this.rowTouched = false;
|
|
}
|
|
}, {
|
|
key: "onCellMouseDown",
|
|
value: function onCellMouseDown(event) {
|
|
if (this.allowCellDrag(event)) {
|
|
this.enableDragSelection(event.originalEvent);
|
|
this.anchorRowIndex = event.rowIndex;
|
|
this.rangeRowIndex = event.rowIndex;
|
|
this.anchorRowFirst = this.props.first;
|
|
this.anchorCellIndex = event.cellIndex;
|
|
}
|
|
}
|
|
}, {
|
|
key: "onCellMouseUp",
|
|
value: function onCellMouseUp(event) {
|
|
var isSameCell = event.rowIndex === this.anchorRowIndex && event.cellIndex === this.anchorCellIndex;
|
|
|
|
if (this.allowCellDrag(event) && !isSameCell) {
|
|
this.onRangeSelection(event, 'cell');
|
|
}
|
|
}
|
|
}, {
|
|
key: "bindDragSelectionEvents",
|
|
value: function bindDragSelectionEvents() {
|
|
document.addEventListener('mousemove', this.onDragSelectionMouseMove);
|
|
document.addEventListener('mouseup', this.onDragSelectionMouseUp);
|
|
document.body.appendChild(this.dragSelectionHelper);
|
|
}
|
|
}, {
|
|
key: "unbindDragSelectionEvents",
|
|
value: function unbindDragSelectionEvents() {
|
|
this.onDragSelectionMouseUp();
|
|
}
|
|
}, {
|
|
key: "componentDidMount",
|
|
value: function componentDidMount() {
|
|
if (this.props.frozenRow) {
|
|
this.updateFrozenRowStickyPosition();
|
|
}
|
|
|
|
if (this.props.scrollable && this.props.rowGroupMode === 'subheader') {
|
|
this.updateFrozenRowGroupHeaderStickyPosition();
|
|
}
|
|
|
|
if (!this.props.isVirtualScrollerDisabled && this.getVirtualScrollerOption('vertical')) {
|
|
this.updateVirtualScrollerPosition();
|
|
}
|
|
}
|
|
}, {
|
|
key: "componentDidUpdate",
|
|
value: function componentDidUpdate(prevProps, prevState) {
|
|
if (this.props.frozenRow) {
|
|
this.updateFrozenRowStickyPosition();
|
|
}
|
|
|
|
if (this.props.scrollable && this.props.rowGroupMode === 'subheader') {
|
|
this.updateFrozenRowGroupHeaderStickyPosition();
|
|
}
|
|
|
|
if (!this.props.isVirtualScrollerDisabled && this.getVirtualScrollerOption('vertical') && this.getVirtualScrollerOption('itemSize', prevProps.virtualScrollerOptions) !== this.getVirtualScrollerOption('itemSize')) {
|
|
this.updateVirtualScrollerPosition();
|
|
}
|
|
}
|
|
}, {
|
|
key: "componentWillUnmount",
|
|
value: function componentWillUnmount() {
|
|
if (this.props.dragSelection) {
|
|
this.unbindDragSelectionEvents();
|
|
}
|
|
}
|
|
}, {
|
|
key: "renderEmptyContent",
|
|
value: function renderEmptyContent() {
|
|
if (!this.props.loading) {
|
|
var colSpan = this.getColumnsLength();
|
|
var content = ObjectUtils.getJSXElement(this.props.emptyMessage, {
|
|
props: this.props,
|
|
frozen: this.props.frozenRow
|
|
}) || localeOption('emptyMessage');
|
|
return /*#__PURE__*/React.createElement("tr", {
|
|
className: "p-datatable-emptymessage",
|
|
role: "row"
|
|
}, /*#__PURE__*/React.createElement("td", {
|
|
colSpan: colSpan,
|
|
role: "cell"
|
|
}, content));
|
|
}
|
|
|
|
return null;
|
|
}
|
|
}, {
|
|
key: "renderGroupHeader",
|
|
value: function renderGroupHeader(rowData, index, expanded, isSubheaderGrouping, colSpan) {
|
|
if (isSubheaderGrouping && this.shouldRenderRowGroupHeader(this.props.value, rowData, index - this.props.first)) {
|
|
var style = this.rowGroupHeaderStyle();
|
|
var toggler = this.props.expandableRowGroups && /*#__PURE__*/React.createElement(RowTogglerButton, {
|
|
onClick: this.onRowToggle,
|
|
rowData: rowData,
|
|
expanded: expanded,
|
|
expandedRowIcon: this.props.expandedRowIcon,
|
|
collapsedRowIcon: this.props.collapsedRowIcon
|
|
});
|
|
var content = ObjectUtils.getJSXElement(this.props.rowGroupHeaderTemplate, rowData, {
|
|
index: index,
|
|
props: this.props.tableProps
|
|
});
|
|
return /*#__PURE__*/React.createElement("tr", {
|
|
className: "p-rowgroup-header",
|
|
style: style,
|
|
role: "row"
|
|
}, /*#__PURE__*/React.createElement("td", {
|
|
colSpan: colSpan
|
|
}, toggler, /*#__PURE__*/React.createElement("span", {
|
|
className: "p-rowgroup-header-name"
|
|
}, content)));
|
|
}
|
|
|
|
return null;
|
|
}
|
|
}, {
|
|
key: "renderRow",
|
|
value: function renderRow(rowData, index, expanded) {
|
|
if (!this.props.expandableRowGroups || expanded) {
|
|
var selected = this.isSelectionEnabled() ? this.isSelected(rowData) : false;
|
|
var contextMenuSelected = this.isContextMenuSelected(rowData);
|
|
var allowRowSelection = this.allowRowSelection();
|
|
var allowCellSelection = this.allowCellSelection();
|
|
var editing = this.isRowEditing(rowData);
|
|
return /*#__PURE__*/React.createElement(BodyRow, {
|
|
tableProps: this.props.tableProps,
|
|
tableSelector: this.props.tableSelector,
|
|
value: this.props.value,
|
|
columns: this.props.columns,
|
|
rowData: rowData,
|
|
index: index,
|
|
selected: selected,
|
|
contextMenuSelected: contextMenuSelected,
|
|
onRowClick: this.onRowClick,
|
|
onRowDoubleClick: this.onRowDoubleClick,
|
|
onRowRightClick: this.onRowRightClick,
|
|
tabIndex: this.props.tabIndex,
|
|
isSelectable: this.isSelectable,
|
|
onRowTouchEnd: this.onRowTouchEnd,
|
|
onRowMouseDown: this.onRowMouseDown,
|
|
onRowMouseUp: this.onRowMouseUp,
|
|
onRowToggle: this.onRowToggle,
|
|
onRowDragStart: this.onRowDragStart,
|
|
onRowDragOver: this.onRowDragOver,
|
|
onRowDragLeave: this.onRowDragLeave,
|
|
onRowDragEnd: this.onRowDragEnd,
|
|
onRowDrop: this.onRowDrop,
|
|
onRadioChange: this.onRadioChange,
|
|
onCheckboxChange: this.onCheckboxChange,
|
|
onCellClick: this.onCellClick,
|
|
onCellMouseDown: this.onCellMouseDown,
|
|
onCellMouseUp: this.onCellMouseUp,
|
|
editing: editing,
|
|
editingRows: this.props.editingRows,
|
|
editingMeta: this.props.editingMeta,
|
|
editMode: this.props.editMode,
|
|
onRowEditChange: this.props.onRowEditChange,
|
|
onEditingMetaChange: this.props.onEditingMetaChange,
|
|
groupRowsBy: this.props.groupRowsBy,
|
|
compareSelectionBy: this.props.compareSelectionBy,
|
|
dataKey: this.props.dataKey,
|
|
rowGroupMode: this.props.rowGroupMode,
|
|
onRowEditInit: this.props.onRowEditInit,
|
|
rowEditValidator: this.props.rowEditValidator,
|
|
onRowEditSave: this.props.onRowEditSave,
|
|
onRowEditComplete: this.props.onRowEditComplete,
|
|
onRowEditCancel: this.props.onRowEditCancel,
|
|
selection: this.props.selection,
|
|
allowRowSelection: allowRowSelection,
|
|
allowCellSelection: allowCellSelection,
|
|
selectOnEdit: this.props.selectOnEdit,
|
|
selectionMode: this.props.selectionMode,
|
|
selectionModeInColumn: this.props.selectionModeInColumn,
|
|
cellClassName: this.props.cellClassName,
|
|
responsiveLayout: this.props.responsiveLayout,
|
|
frozenRow: this.props.frozenRow,
|
|
showSelectionElement: this.props.showSelectionElement,
|
|
showRowReorderElement: this.props.showRowReorderElement,
|
|
expanded: expanded,
|
|
expandedRowIcon: this.props.expandedRowIcon,
|
|
collapsedRowIcon: this.props.collapsedRowIcon,
|
|
rowClassName: this.props.rowClassName,
|
|
virtualScrollerOptions: this.props.virtualScrollerOptions
|
|
});
|
|
}
|
|
}
|
|
}, {
|
|
key: "renderExpansion",
|
|
value: function renderExpansion(rowData, index, expanded, isSubheaderGrouping, colSpan) {
|
|
if (expanded && !(isSubheaderGrouping && this.props.expandableRowGroups)) {
|
|
var content = ObjectUtils.getJSXElement(this.props.rowExpansionTemplate, rowData, {
|
|
index: index
|
|
});
|
|
var id = "".concat(this.props.tableSelector, "_content_").concat(index, "_expanded");
|
|
return /*#__PURE__*/React.createElement("tr", {
|
|
id: id,
|
|
className: "p-datatable-row-expansion",
|
|
role: "row"
|
|
}, /*#__PURE__*/React.createElement("td", {
|
|
role: "cell",
|
|
colSpan: colSpan
|
|
}, content));
|
|
}
|
|
|
|
return null;
|
|
}
|
|
}, {
|
|
key: "renderGroupFooter",
|
|
value: function renderGroupFooter(rowData, index, expanded, isSubheaderGrouping, colSpan) {
|
|
if (isSubheaderGrouping && this.shouldRenderRowGroupFooter(this.props.value, rowData, index - this.props.first, expanded)) {
|
|
var content = ObjectUtils.getJSXElement(this.props.rowGroupFooterTemplate, rowData, {
|
|
index: index,
|
|
colSpan: colSpan,
|
|
props: this.props.tableProps
|
|
});
|
|
return /*#__PURE__*/React.createElement("tr", {
|
|
className: "p-rowgroup-footer",
|
|
role: "row"
|
|
}, content);
|
|
}
|
|
|
|
return null;
|
|
}
|
|
}, {
|
|
key: "renderContent",
|
|
value: function renderContent() {
|
|
var _this5 = this;
|
|
|
|
return this.props.value.map(function (rowData, i) {
|
|
var index = _this5.getVirtualScrollerOption('getItemOptions') ? _this5.getVirtualScrollerOption('getItemOptions')(i).index : _this5.props.first + i;
|
|
|
|
var key = _this5.getRowKey(rowData, index);
|
|
|
|
var expanded = _this5.isRowExpanded(rowData);
|
|
|
|
var isSubheaderGrouping = _this5.isSubheaderGrouping();
|
|
|
|
var colSpan = _this5.getColumnsLength();
|
|
|
|
var groupHeader = _this5.renderGroupHeader(rowData, index, expanded, isSubheaderGrouping, colSpan);
|
|
|
|
var row = _this5.renderRow(rowData, index, expanded);
|
|
|
|
var expansion = _this5.renderExpansion(rowData, index, expanded, isSubheaderGrouping, colSpan);
|
|
|
|
var groupFooter = _this5.renderGroupFooter(rowData, index, expanded, isSubheaderGrouping, colSpan);
|
|
|
|
return /*#__PURE__*/React.createElement(React.Fragment, {
|
|
key: key
|
|
}, groupHeader, row, expansion, groupFooter);
|
|
});
|
|
}
|
|
}, {
|
|
key: "render",
|
|
value: function render() {
|
|
var className = classNames('p-datatable-tbody', this.props.className);
|
|
var content = this.props.empty ? this.renderEmptyContent() : this.renderContent();
|
|
return /*#__PURE__*/React.createElement("tbody", {
|
|
ref: this.ref,
|
|
className: className
|
|
}, content);
|
|
}
|
|
}]);
|
|
|
|
return TableBody;
|
|
}(Component);
|
|
|
|
function ownKeys$4(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
|
|
function _objectSpread$4(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$4(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$4(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
|
|
function _createSuper$6(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$6(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
|
|
|
|
function _isNativeReflectConstruct$6() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
var FooterCell = /*#__PURE__*/function (_Component) {
|
|
_inherits(FooterCell, _Component);
|
|
|
|
var _super = _createSuper$6(FooterCell);
|
|
|
|
function FooterCell(props) {
|
|
var _this;
|
|
|
|
_classCallCheck(this, FooterCell);
|
|
|
|
_this = _super.call(this, props);
|
|
_this.state = {
|
|
styleObject: {}
|
|
};
|
|
return _this;
|
|
}
|
|
|
|
_createClass(FooterCell, [{
|
|
key: "getColumnProp",
|
|
value: function getColumnProp(prop) {
|
|
return this.props.column.props[prop];
|
|
}
|
|
}, {
|
|
key: "getStyle",
|
|
value: function getStyle() {
|
|
var footerStyle = this.getColumnProp('footerStyle');
|
|
var columnStyle = this.getColumnProp('style');
|
|
return this.getColumnProp('frozen') ? Object.assign({}, columnStyle, footerStyle, this.state.styleObject) : Object.assign({}, columnStyle, footerStyle);
|
|
}
|
|
}, {
|
|
key: "updateStickyPosition",
|
|
value: function updateStickyPosition() {
|
|
if (this.getColumnProp('frozen')) {
|
|
var styleObject = _objectSpread$4({}, this.state.styleObject);
|
|
|
|
var align = this.getColumnProp('alignFrozen');
|
|
|
|
if (align === 'right') {
|
|
var right = 0;
|
|
var next = this.el.nextElementSibling;
|
|
|
|
if (next) {
|
|
right = DomHandler.getOuterWidth(next) + parseFloat(next.style.right || 0);
|
|
}
|
|
|
|
styleObject['right'] = right + 'px';
|
|
} else {
|
|
var left = 0;
|
|
var prev = this.el.previousElementSibling;
|
|
|
|
if (prev) {
|
|
left = DomHandler.getOuterWidth(prev) + parseFloat(prev.style.left || 0);
|
|
}
|
|
|
|
styleObject['left'] = left + 'px';
|
|
}
|
|
|
|
this.setState({
|
|
styleObject: styleObject
|
|
});
|
|
}
|
|
}
|
|
}, {
|
|
key: "componentDidMount",
|
|
value: function componentDidMount() {
|
|
if (this.getColumnProp('frozen')) {
|
|
this.updateStickyPosition();
|
|
}
|
|
}
|
|
}, {
|
|
key: "componentDidUpdate",
|
|
value: function componentDidUpdate(prevProps, prevState) {
|
|
if (this.getColumnProp('frozen')) {
|
|
this.updateStickyPosition();
|
|
}
|
|
}
|
|
}, {
|
|
key: "render",
|
|
value: function render() {
|
|
var _this2 = this;
|
|
|
|
var style = this.getStyle();
|
|
var align = this.getColumnProp('align');
|
|
var className = classNames(this.getColumnProp('footerClassName'), this.getColumnProp('className'), _defineProperty({
|
|
'p-frozen-column': this.getColumnProp('frozen')
|
|
}, "p-align-".concat(align), !!align));
|
|
var colSpan = this.getColumnProp('colSpan');
|
|
var rowSpan = this.getColumnProp('rowSpan');
|
|
var content = ObjectUtils.getJSXElement(this.getColumnProp('footer'), {
|
|
props: this.props.tableProps
|
|
});
|
|
return /*#__PURE__*/React.createElement("td", {
|
|
ref: function ref(el) {
|
|
return _this2.el = el;
|
|
},
|
|
style: style,
|
|
className: className,
|
|
role: "cell",
|
|
colSpan: colSpan,
|
|
rowSpan: rowSpan
|
|
}, content);
|
|
}
|
|
}]);
|
|
|
|
return FooterCell;
|
|
}(Component);
|
|
|
|
function _createSuper$5(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$5(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
|
|
|
|
function _isNativeReflectConstruct$5() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
var TableFooter = /*#__PURE__*/function (_Component) {
|
|
_inherits(TableFooter, _Component);
|
|
|
|
var _super = _createSuper$5(TableFooter);
|
|
|
|
function TableFooter() {
|
|
_classCallCheck(this, TableFooter);
|
|
|
|
return _super.apply(this, arguments);
|
|
}
|
|
|
|
_createClass(TableFooter, [{
|
|
key: "hasFooter",
|
|
value: function hasFooter() {
|
|
return this.props.footerColumnGroup ? true : this.props.columns ? this.props.columns.some(function (col) {
|
|
return col && col.props.footer;
|
|
}) : false;
|
|
}
|
|
}, {
|
|
key: "renderGroupFooterCells",
|
|
value: function renderGroupFooterCells(row) {
|
|
var columns = React.Children.toArray(row.props.children);
|
|
return this.renderFooterCells(columns);
|
|
}
|
|
}, {
|
|
key: "renderFooterCells",
|
|
value: function renderFooterCells(columns) {
|
|
var _this = this;
|
|
|
|
return React.Children.map(columns, function (col, i) {
|
|
var isVisible = col ? !col.props.hidden : true;
|
|
var key = col ? col.props.columnKey || col.props.field || i : i;
|
|
return isVisible && /*#__PURE__*/React.createElement(FooterCell, {
|
|
key: key,
|
|
tableProps: _this.props.tableProps,
|
|
column: col
|
|
});
|
|
});
|
|
}
|
|
}, {
|
|
key: "renderContent",
|
|
value: function renderContent() {
|
|
var _this2 = this;
|
|
|
|
if (this.props.footerColumnGroup) {
|
|
var rows = React.Children.toArray(this.props.footerColumnGroup.props.children);
|
|
return rows.map(function (row, i) {
|
|
return /*#__PURE__*/React.createElement("tr", {
|
|
key: i,
|
|
role: "row"
|
|
}, _this2.renderGroupFooterCells(row));
|
|
});
|
|
}
|
|
|
|
return /*#__PURE__*/React.createElement("tr", {
|
|
role: "row"
|
|
}, this.renderFooterCells(this.props.columns));
|
|
}
|
|
}, {
|
|
key: "render",
|
|
value: function render() {
|
|
if (this.hasFooter()) {
|
|
var content = this.renderContent();
|
|
return /*#__PURE__*/React.createElement("tfoot", {
|
|
className: "p-datatable-tfoot"
|
|
}, content);
|
|
}
|
|
|
|
return null;
|
|
}
|
|
}]);
|
|
|
|
return TableFooter;
|
|
}(Component);
|
|
|
|
function _createSuper$4(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$4(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
|
|
|
|
function _isNativeReflectConstruct$4() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
var HeaderCheckbox = /*#__PURE__*/function (_Component) {
|
|
_inherits(HeaderCheckbox, _Component);
|
|
|
|
var _super = _createSuper$4(HeaderCheckbox);
|
|
|
|
function HeaderCheckbox(props) {
|
|
var _this;
|
|
|
|
_classCallCheck(this, HeaderCheckbox);
|
|
|
|
_this = _super.call(this, props);
|
|
_this.state = {
|
|
focused: false
|
|
};
|
|
_this.onFocus = _this.onFocus.bind(_assertThisInitialized(_this));
|
|
_this.onBlur = _this.onBlur.bind(_assertThisInitialized(_this));
|
|
_this.onClick = _this.onClick.bind(_assertThisInitialized(_this));
|
|
_this.onKeyDown = _this.onKeyDown.bind(_assertThisInitialized(_this));
|
|
return _this;
|
|
}
|
|
|
|
_createClass(HeaderCheckbox, [{
|
|
key: "onFocus",
|
|
value: function onFocus() {
|
|
this.setState({
|
|
focused: true
|
|
});
|
|
}
|
|
}, {
|
|
key: "onBlur",
|
|
value: function onBlur() {
|
|
this.setState({
|
|
focused: false
|
|
});
|
|
}
|
|
}, {
|
|
key: "onClick",
|
|
value: function onClick(event) {
|
|
if (!this.props.disabled) {
|
|
this.setState({
|
|
focused: true
|
|
});
|
|
this.props.onChange({
|
|
originalEvent: event,
|
|
checked: !this.props.checked
|
|
});
|
|
}
|
|
}
|
|
}, {
|
|
key: "onKeyDown",
|
|
value: function onKeyDown(event) {
|
|
if (event.code === 'Space') {
|
|
this.onClick(event);
|
|
event.preventDefault();
|
|
}
|
|
}
|
|
}, {
|
|
key: "render",
|
|
value: function render() {
|
|
var boxClassName = classNames('p-checkbox-box p-component', {
|
|
'p-highlight': this.props.checked,
|
|
'p-disabled': this.props.disabled,
|
|
'p-focus': this.state.focused
|
|
});
|
|
var iconClassName = classNames('p-checkbox-icon', {
|
|
'pi pi-check': this.props.checked
|
|
});
|
|
var tabIndex = this.props.disabled ? null : 0;
|
|
return /*#__PURE__*/React.createElement("div", {
|
|
className: "p-checkbox p-component",
|
|
onClick: this.onClick
|
|
}, /*#__PURE__*/React.createElement("div", {
|
|
className: boxClassName,
|
|
role: "checkbox",
|
|
"aria-checked": this.props.checked,
|
|
tabIndex: tabIndex,
|
|
onFocus: this.onFocus,
|
|
onBlur: this.onBlur,
|
|
onKeyDown: this.onKeyDown
|
|
}, /*#__PURE__*/React.createElement("span", {
|
|
className: iconClassName
|
|
})));
|
|
}
|
|
}]);
|
|
|
|
return HeaderCheckbox;
|
|
}(Component);
|
|
|
|
function ownKeys$3(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
|
|
function _objectSpread$3(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$3(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$3(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
|
|
function _createSuper$3(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$3(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
|
|
|
|
function _isNativeReflectConstruct$3() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
var ColumnFilter = /*#__PURE__*/function (_Component) {
|
|
_inherits(ColumnFilter, _Component);
|
|
|
|
var _super = _createSuper$3(ColumnFilter);
|
|
|
|
function ColumnFilter(props) {
|
|
var _this;
|
|
|
|
_classCallCheck(this, ColumnFilter);
|
|
|
|
_this = _super.call(this, props);
|
|
_this.state = {
|
|
overlayVisible: false
|
|
};
|
|
_this.overlayRef = /*#__PURE__*/React.createRef();
|
|
_this.filterCallback = _this.filterCallback.bind(_assertThisInitialized(_this));
|
|
_this.filterApplyCallback = _this.filterApplyCallback.bind(_assertThisInitialized(_this));
|
|
_this.onOperatorChange = _this.onOperatorChange.bind(_assertThisInitialized(_this));
|
|
_this.addConstraint = _this.addConstraint.bind(_assertThisInitialized(_this));
|
|
_this.clearFilter = _this.clearFilter.bind(_assertThisInitialized(_this));
|
|
_this.applyFilter = _this.applyFilter.bind(_assertThisInitialized(_this));
|
|
_this.onInputChange = _this.onInputChange.bind(_assertThisInitialized(_this));
|
|
_this.toggleMenu = _this.toggleMenu.bind(_assertThisInitialized(_this));
|
|
_this.onOverlayEnter = _this.onOverlayEnter.bind(_assertThisInitialized(_this));
|
|
_this.onOverlayExit = _this.onOverlayExit.bind(_assertThisInitialized(_this));
|
|
_this.onOverlayExited = _this.onOverlayExited.bind(_assertThisInitialized(_this));
|
|
_this.onContentKeyDown = _this.onContentKeyDown.bind(_assertThisInitialized(_this));
|
|
_this.onContentClick = _this.onContentClick.bind(_assertThisInitialized(_this));
|
|
_this.onContentMouseDown = _this.onContentMouseDown.bind(_assertThisInitialized(_this));
|
|
return _this;
|
|
}
|
|
|
|
_createClass(ColumnFilter, [{
|
|
key: "field",
|
|
get: function get() {
|
|
return this.getColumnProp('filterField') || this.getColumnProp('field');
|
|
}
|
|
}, {
|
|
key: "overlay",
|
|
get: function get() {
|
|
return this.overlayRef ? this.overlayRef.current : null;
|
|
}
|
|
}, {
|
|
key: "filterModel",
|
|
get: function get() {
|
|
return this.props.filters[this.field];
|
|
}
|
|
}, {
|
|
key: "filterStoreModel",
|
|
get: function get() {
|
|
return this.props.filtersStore[this.field];
|
|
}
|
|
}, {
|
|
key: "hasFilter",
|
|
value: function hasFilter() {
|
|
if (this.props.filtersStore) {
|
|
var fieldFilter = this.props.filtersStore[this.field];
|
|
return fieldFilter && (fieldFilter.operator ? !this.isFilterBlank(fieldFilter.constraints[0].value) : !this.isFilterBlank(fieldFilter.value));
|
|
}
|
|
|
|
return false;
|
|
}
|
|
}, {
|
|
key: "hasRowFilter",
|
|
value: function hasRowFilter() {
|
|
return this.filterModel && !this.isFilterBlank(this.filterModel.value);
|
|
}
|
|
}, {
|
|
key: "isFilterBlank",
|
|
value: function isFilterBlank(filter) {
|
|
return ObjectUtils.isEmpty(filter);
|
|
}
|
|
}, {
|
|
key: "isRowMatchModeSelected",
|
|
value: function isRowMatchModeSelected(matchMode) {
|
|
return this.filterModel && this.filterModel.matchMode === matchMode;
|
|
}
|
|
}, {
|
|
key: "showMenuButton",
|
|
value: function showMenuButton() {
|
|
return this.getColumnProp('showFilterMenu') && (this.props.display === 'row' ? this.getColumnProp('dataType') !== 'boolean' : true);
|
|
}
|
|
}, {
|
|
key: "matchModes",
|
|
value: function matchModes() {
|
|
return this.getColumnProp('filterMatchModeOptions') || PrimeReact.filterMatchModeOptions[this.findDataType()].map(function (key) {
|
|
return {
|
|
label: localeOption(key),
|
|
value: key
|
|
};
|
|
});
|
|
}
|
|
}, {
|
|
key: "isShowMatchModes",
|
|
value: function isShowMatchModes() {
|
|
return this.getColumnProp('dataType') !== 'boolean' && this.getColumnProp('showFilterMatchModes') && this.matchModes() && this.getColumnProp('showFilterMenuOptions');
|
|
}
|
|
}, {
|
|
key: "isShowOperator",
|
|
value: function isShowOperator() {
|
|
return this.getColumnProp('showFilterOperator') && this.filterModel && this.filterModel.operator && this.getColumnProp('showFilterMenuOptions');
|
|
}
|
|
}, {
|
|
key: "showRemoveIcon",
|
|
value: function showRemoveIcon() {
|
|
return this.fieldConstraints().length > 1;
|
|
}
|
|
}, {
|
|
key: "isShowAddConstraint",
|
|
value: function isShowAddConstraint() {
|
|
return this.getColumnProp('showAddButton') && this.filterModel && this.filterModel.operator && this.fieldConstraints() && this.fieldConstraints().length < this.getColumnProp('maxConstraints') && this.getColumnProp('showFilterMenuOptions');
|
|
}
|
|
}, {
|
|
key: "isOutsideClicked",
|
|
value: function isOutsideClicked(target) {
|
|
return !this.isTargetClicked(target) && this.overlayRef && this.overlayRef.current && !(this.overlayRef.current.isSameNode(target) || this.overlayRef.current.contains(target));
|
|
}
|
|
}, {
|
|
key: "isTargetClicked",
|
|
value: function isTargetClicked(target) {
|
|
return this.icon && (this.icon.isSameNode(target) || this.icon.contains(target));
|
|
}
|
|
}, {
|
|
key: "getColumnProp",
|
|
value: function getColumnProp(prop) {
|
|
return this.props.column.props[prop];
|
|
}
|
|
}, {
|
|
key: "getDefaultConstraint",
|
|
value: function getDefaultConstraint() {
|
|
if (this.props.filtersStore && this.filterStoreModel) {
|
|
if (this.filterStoreModel.operator) {
|
|
return {
|
|
matchMode: this.filterStoreModel.constraints[0].matchMode,
|
|
operator: this.filterStoreModel.operator
|
|
};
|
|
} else {
|
|
return {
|
|
matchMode: this.filterStoreModel.matchMode
|
|
};
|
|
}
|
|
}
|
|
}
|
|
}, {
|
|
key: "findDataType",
|
|
value: function findDataType() {
|
|
var dataType = this.getColumnProp('dataType');
|
|
var matchMode = this.getColumnProp('filterMatchMode');
|
|
|
|
var hasMatchMode = function hasMatchMode(key) {
|
|
return PrimeReact.filterMatchModeOptions[key].some(function (mode) {
|
|
return mode === matchMode;
|
|
});
|
|
};
|
|
|
|
if (matchMode === 'custom' && !hasMatchMode(dataType)) {
|
|
PrimeReact.filterMatchModeOptions[dataType].push(FilterMatchMode.CUSTOM);
|
|
return dataType;
|
|
} else if (matchMode) {
|
|
return Object.keys(PrimeReact.filterMatchModeOptions).find(function (key) {
|
|
return hasMatchMode(key);
|
|
}) || dataType;
|
|
}
|
|
|
|
return dataType;
|
|
}
|
|
}, {
|
|
key: "clearFilter",
|
|
value: function clearFilter() {
|
|
var field = this.field;
|
|
var filterClearCallback = this.getColumnProp('onFilterClear');
|
|
var defaultConstraint = this.getDefaultConstraint();
|
|
|
|
var filters = _objectSpread$3({}, this.props.filters);
|
|
|
|
if (filters[field].operator) {
|
|
filters[field].constraints.splice(1);
|
|
filters[field].operator = defaultConstraint.operator;
|
|
filters[field].constraints[0] = {
|
|
value: null,
|
|
matchMode: defaultConstraint.matchMode
|
|
};
|
|
} else {
|
|
filters[field].value = null;
|
|
filters[field].matchMode = defaultConstraint.matchMode;
|
|
}
|
|
|
|
filterClearCallback && filterClearCallback();
|
|
this.props.onFilterChange(filters);
|
|
this.props.onFilterApply();
|
|
this.hide();
|
|
}
|
|
}, {
|
|
key: "applyFilter",
|
|
value: function applyFilter() {
|
|
var filterApplyClickCallback = this.getColumnProp('onFilterApplyClick');
|
|
filterApplyClickCallback && filterApplyClickCallback({
|
|
field: this.field,
|
|
constraints: this.filterModel
|
|
});
|
|
this.props.onFilterApply();
|
|
this.hide();
|
|
}
|
|
}, {
|
|
key: "toggleMenu",
|
|
value: function toggleMenu() {
|
|
this.setState(function (prevState) {
|
|
return {
|
|
overlayVisible: !prevState.overlayVisible
|
|
};
|
|
});
|
|
}
|
|
}, {
|
|
key: "onToggleButtonKeyDown",
|
|
value: function onToggleButtonKeyDown(event) {
|
|
switch (event.key) {
|
|
case 'Escape':
|
|
case 'Tab':
|
|
this.hide();
|
|
break;
|
|
|
|
case 'ArrowDown':
|
|
if (this.state.overlayVisible) {
|
|
var focusable = DomHandler.getFirstFocusableElement(this.overlay);
|
|
focusable && focusable.focus();
|
|
event.preventDefault();
|
|
} else if (event.altKey) {
|
|
this.setState({
|
|
overlayVisible: true
|
|
});
|
|
event.preventDefault();
|
|
}
|
|
|
|
break;
|
|
}
|
|
}
|
|
}, {
|
|
key: "onContentKeyDown",
|
|
value: function onContentKeyDown(event) {
|
|
if (event.key === 'Escape') {
|
|
this.hide();
|
|
this.icon && this.icon.focus();
|
|
}
|
|
}
|
|
}, {
|
|
key: "onInputChange",
|
|
value: function onInputChange(event, index) {
|
|
var filters = _objectSpread$3({}, this.props.filters);
|
|
|
|
var value = event.target.value;
|
|
|
|
if (this.props.display === 'menu') {
|
|
filters[this.field].constraints[index].value = value;
|
|
} else {
|
|
filters[this.field].value = value;
|
|
}
|
|
|
|
this.props.onFilterChange(filters);
|
|
|
|
if (!this.getColumnProp('showApplyButton') || this.props.display === 'row') {
|
|
this.props.onFilterApply();
|
|
}
|
|
}
|
|
}, {
|
|
key: "onRowMatchModeChange",
|
|
value: function onRowMatchModeChange(matchMode) {
|
|
var filterMatchModeChangeCallback = this.getColumnProp('onFilterMatchModeChange');
|
|
|
|
var filters = _objectSpread$3({}, this.props.filters);
|
|
|
|
filters[this.field].matchMode = matchMode;
|
|
filterMatchModeChangeCallback && filterMatchModeChangeCallback({
|
|
field: this.field,
|
|
matchMode: matchMode
|
|
});
|
|
this.props.onFilterChange(filters);
|
|
this.props.onFilterApply();
|
|
this.hide();
|
|
}
|
|
}, {
|
|
key: "onRowMatchModeKeyDown",
|
|
value: function onRowMatchModeKeyDown(event, matchMode, clear) {
|
|
var item = event.target;
|
|
|
|
switch (event.key) {
|
|
case 'ArrowDown':
|
|
var nextItem = this.findNextItem(item);
|
|
|
|
if (nextItem) {
|
|
item.removeAttribute('tabindex');
|
|
nextItem.tabIndex = 0;
|
|
nextItem.focus();
|
|
}
|
|
|
|
event.preventDefault();
|
|
break;
|
|
|
|
case 'ArrowUp':
|
|
var prevItem = this.findPrevItem(item);
|
|
|
|
if (prevItem) {
|
|
item.removeAttribute('tabindex');
|
|
prevItem.tabIndex = 0;
|
|
prevItem.focus();
|
|
}
|
|
|
|
event.preventDefault();
|
|
break;
|
|
|
|
case 'Enter':
|
|
clear ? this.clearFilter() : this.onRowMatchModeChange(matchMode.value);
|
|
event.preventDefault();
|
|
break;
|
|
}
|
|
}
|
|
}, {
|
|
key: "onOperatorChange",
|
|
value: function onOperatorChange(e) {
|
|
var filterOperationChangeCallback = this.getColumnProp('onFilterOperatorChange');
|
|
var value = e.value;
|
|
|
|
var filters = _objectSpread$3({}, this.props.filters);
|
|
|
|
filters[this.field].operator = value;
|
|
this.props.onFilterChange(filters);
|
|
filterOperationChangeCallback && filterOperationChangeCallback({
|
|
field: this.field,
|
|
operator: value
|
|
});
|
|
|
|
if (!this.getColumnProp('showApplyButton')) {
|
|
this.props.onFilterApply();
|
|
}
|
|
}
|
|
}, {
|
|
key: "onMenuMatchModeChange",
|
|
value: function onMenuMatchModeChange(value, index) {
|
|
var filterMatchModeChangeCallback = this.getColumnProp('onFilterMatchModeChange');
|
|
|
|
var filters = _objectSpread$3({}, this.props.filters);
|
|
|
|
filters[this.field].constraints[index].matchMode = value;
|
|
this.props.onFilterChange(filters);
|
|
filterMatchModeChangeCallback && filterMatchModeChangeCallback({
|
|
field: this.field,
|
|
matchMode: value,
|
|
index: index
|
|
});
|
|
|
|
if (!this.getColumnProp('showApplyButton')) {
|
|
this.props.onFilterApply();
|
|
}
|
|
}
|
|
}, {
|
|
key: "addConstraint",
|
|
value: function addConstraint() {
|
|
var filterConstraintAddCallback = this.getColumnProp('onFilterConstraintAdd');
|
|
var defaultConstraint = this.getDefaultConstraint();
|
|
|
|
var filters = _objectSpread$3({}, this.props.filters);
|
|
|
|
var newConstraint = {
|
|
value: null,
|
|
matchMode: defaultConstraint.matchMode
|
|
};
|
|
filters[this.field].constraints.push(newConstraint);
|
|
filterConstraintAddCallback && filterConstraintAddCallback({
|
|
field: this.field,
|
|
constraint: newConstraint
|
|
});
|
|
this.props.onFilterChange(filters);
|
|
|
|
if (!this.getColumnProp('showApplyButton')) {
|
|
this.props.onFilterApply();
|
|
}
|
|
}
|
|
}, {
|
|
key: "removeConstraint",
|
|
value: function removeConstraint(index) {
|
|
var filterConstraintRemoveCallback = this.getColumnProp('onFilterConstraintRemove');
|
|
|
|
var filters = _objectSpread$3({}, this.props.filters);
|
|
|
|
var removedConstraint = filters[this.field].constraints.splice(index, 1);
|
|
filterConstraintRemoveCallback && filterConstraintRemoveCallback({
|
|
field: this.field,
|
|
constraint: removedConstraint
|
|
});
|
|
this.props.onFilterChange(filters);
|
|
|
|
if (!this.getColumnProp('showApplyButton')) {
|
|
this.props.onFilterApply();
|
|
}
|
|
}
|
|
}, {
|
|
key: "findNextItem",
|
|
value: function findNextItem(item) {
|
|
var nextItem = item.nextElementSibling;
|
|
if (nextItem) return DomHandler.hasClass(nextItem, 'p-column-filter-separator') ? this.findNextItem(nextItem) : nextItem;else return item.parentElement.firstElementChild;
|
|
}
|
|
}, {
|
|
key: "findPrevItem",
|
|
value: function findPrevItem(item) {
|
|
var prevItem = item.previousElementSibling;
|
|
if (prevItem) return DomHandler.hasClass(prevItem, 'p-column-filter-separator') ? this.findPrevItem(prevItem) : prevItem;else return item.parentElement.lastElementChild;
|
|
}
|
|
}, {
|
|
key: "hide",
|
|
value: function hide() {
|
|
this.setState({
|
|
overlayVisible: false
|
|
});
|
|
}
|
|
}, {
|
|
key: "onContentClick",
|
|
value: function onContentClick(event) {
|
|
this.selfClick = true;
|
|
OverlayService.emit('overlay-click', {
|
|
originalEvent: event,
|
|
target: this.overlay
|
|
});
|
|
}
|
|
}, {
|
|
key: "onContentMouseDown",
|
|
value: function onContentMouseDown() {
|
|
this.selfClick = true;
|
|
}
|
|
}, {
|
|
key: "onOverlayEnter",
|
|
value: function onOverlayEnter() {
|
|
var _this2 = this;
|
|
|
|
ZIndexUtils.set('overlay', this.overlay, PrimeReact.autoZIndex, PrimeReact.zIndex['overlay']);
|
|
DomHandler.alignOverlay(this.overlay, this.icon, PrimeReact.appendTo, false);
|
|
this.bindOutsideClickListener();
|
|
this.bindScrollListener();
|
|
this.bindResizeListener();
|
|
|
|
this.overlayEventListener = function (e) {
|
|
if (!_this2.isOutsideClicked(e.target)) {
|
|
_this2.selfClick = true;
|
|
}
|
|
};
|
|
|
|
OverlayService.on('overlay-click', this.overlayEventListener);
|
|
}
|
|
}, {
|
|
key: "onOverlayExit",
|
|
value: function onOverlayExit() {
|
|
this.onOverlayHide();
|
|
}
|
|
}, {
|
|
key: "onOverlayExited",
|
|
value: function onOverlayExited() {
|
|
ZIndexUtils.clear(this.overlay);
|
|
}
|
|
}, {
|
|
key: "onOverlayHide",
|
|
value: function onOverlayHide() {
|
|
this.unbindOutsideClickListener();
|
|
this.unbindResizeListener();
|
|
this.unbindScrollListener();
|
|
OverlayService.off('overlay-click', this.overlayEventListener);
|
|
this.overlayEventListener = null;
|
|
}
|
|
}, {
|
|
key: "bindOutsideClickListener",
|
|
value: function bindOutsideClickListener() {
|
|
var _this3 = this;
|
|
|
|
if (!this.outsideClickListener) {
|
|
this.outsideClickListener = function (event) {
|
|
if (!_this3.selfClick && _this3.isOutsideClicked(event.target)) {
|
|
_this3.hide();
|
|
}
|
|
|
|
_this3.selfClick = false;
|
|
};
|
|
|
|
document.addEventListener('click', this.outsideClickListener);
|
|
}
|
|
}
|
|
}, {
|
|
key: "unbindOutsideClickListener",
|
|
value: function unbindOutsideClickListener() {
|
|
if (this.outsideClickListener) {
|
|
document.removeEventListener('click', this.outsideClickListener);
|
|
this.outsideClickListener = null;
|
|
this.selfClick = false;
|
|
}
|
|
}
|
|
}, {
|
|
key: "bindScrollListener",
|
|
value: function bindScrollListener() {
|
|
var _this4 = this;
|
|
|
|
if (!this.scrollHandler) {
|
|
this.scrollHandler = new ConnectedOverlayScrollHandler(this.icon, function () {
|
|
if (_this4.state.overlayVisible) {
|
|
_this4.hide();
|
|
}
|
|
});
|
|
}
|
|
|
|
this.scrollHandler.bindScrollListener();
|
|
}
|
|
}, {
|
|
key: "unbindScrollListener",
|
|
value: function unbindScrollListener() {
|
|
if (this.scrollHandler) {
|
|
this.scrollHandler.unbindScrollListener();
|
|
}
|
|
}
|
|
}, {
|
|
key: "bindResizeListener",
|
|
value: function bindResizeListener() {
|
|
var _this5 = this;
|
|
|
|
if (!this.resizeListener) {
|
|
this.resizeListener = function () {
|
|
if (_this5.state.overlayVisible && !DomHandler.isTouchDevice()) {
|
|
_this5.hide();
|
|
}
|
|
};
|
|
|
|
window.addEventListener('resize', this.resizeListener);
|
|
}
|
|
}
|
|
}, {
|
|
key: "unbindResizeListener",
|
|
value: function unbindResizeListener() {
|
|
if (this.resizeListener) {
|
|
window.removeEventListener('resize', this.resizeListener);
|
|
this.resizeListener = null;
|
|
}
|
|
}
|
|
}, {
|
|
key: "fieldConstraints",
|
|
value: function fieldConstraints() {
|
|
return this.filterModel ? this.filterModel.constraints || [this.filterModel] : [];
|
|
}
|
|
}, {
|
|
key: "operator",
|
|
value: function operator() {
|
|
return this.filterModel.operator;
|
|
}
|
|
}, {
|
|
key: "operatorOptions",
|
|
value: function operatorOptions() {
|
|
return [{
|
|
label: localeOption('matchAll'),
|
|
value: FilterOperator.AND
|
|
}, {
|
|
label: localeOption('matchAny'),
|
|
value: FilterOperator.OR
|
|
}];
|
|
}
|
|
}, {
|
|
key: "noFilterLabel",
|
|
value: function noFilterLabel() {
|
|
return localeOption('noFilter');
|
|
}
|
|
}, {
|
|
key: "removeRuleButtonLabel",
|
|
value: function removeRuleButtonLabel() {
|
|
return localeOption('removeRule');
|
|
}
|
|
}, {
|
|
key: "addRuleButtonLabel",
|
|
value: function addRuleButtonLabel() {
|
|
return localeOption('addRule');
|
|
}
|
|
}, {
|
|
key: "clearButtonLabel",
|
|
value: function clearButtonLabel() {
|
|
return localeOption('clear');
|
|
}
|
|
}, {
|
|
key: "applyButtonLabel",
|
|
value: function applyButtonLabel() {
|
|
return localeOption('apply');
|
|
}
|
|
}, {
|
|
key: "filterCallback",
|
|
value: function filterCallback(value) {
|
|
var index = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
|
|
|
|
var filters = _objectSpread$3({}, this.props.filters);
|
|
|
|
var meta = filters[this.field];
|
|
this.props.display === 'menu' && meta && meta.operator ? filters[this.field].constraints[index].value = value : filters[this.field].value = value;
|
|
this.props.onFilterChange(filters);
|
|
}
|
|
}, {
|
|
key: "filterApplyCallback",
|
|
value: function filterApplyCallback() {
|
|
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
args[_key] = arguments[_key];
|
|
}
|
|
|
|
args && this.filterCallback(args[0], args[1]);
|
|
this.props.onFilterApply();
|
|
}
|
|
}, {
|
|
key: "componentDidUpdate",
|
|
value: function componentDidUpdate(prevProps, prevState) {
|
|
if (this.props.display === 'menu' && this.state.overlayVisible) {
|
|
DomHandler.alignOverlay(this.overlay, this.icon, PrimeReact.appendTo, false);
|
|
}
|
|
}
|
|
}, {
|
|
key: "componentWillUnmount",
|
|
value: function componentWillUnmount() {
|
|
if (this.overlayEventListener) {
|
|
OverlayService.off('overlay-click', this.overlayEventListener);
|
|
this.overlayEventListener = null;
|
|
}
|
|
|
|
if (this.overlay) {
|
|
ZIndexUtils.clear(this.overlay);
|
|
this.onOverlayHide();
|
|
}
|
|
}
|
|
}, {
|
|
key: "renderFilterElement",
|
|
value: function renderFilterElement(model, index) {
|
|
var _this6 = this;
|
|
|
|
var value = model ? model.value : null;
|
|
return this.getColumnProp('filterElement') ? ObjectUtils.getJSXElement(this.getColumnProp('filterElement'), {
|
|
field: this.field,
|
|
index: index,
|
|
filterModel: model,
|
|
value: value,
|
|
filterApplyCallback: this.filterApplyCallback,
|
|
filterCallback: this.filterCallback
|
|
}) : /*#__PURE__*/React.createElement(InputText, {
|
|
type: this.getColumnProp('filterType'),
|
|
value: value || '',
|
|
onChange: function onChange(e) {
|
|
return _this6.onInputChange(e, index);
|
|
},
|
|
className: "p-column-filter",
|
|
placeholder: this.getColumnProp('filterPlaceholder'),
|
|
maxLength: this.getColumnProp('filterMaxLength')
|
|
});
|
|
}
|
|
}, {
|
|
key: "renderRowFilterElement",
|
|
value: function renderRowFilterElement() {
|
|
if (this.props.display === 'row') {
|
|
var content = this.renderFilterElement(this.filterModel, 0);
|
|
return /*#__PURE__*/React.createElement("div", {
|
|
className: "p-fluid p-column-filter-element"
|
|
}, content);
|
|
}
|
|
|
|
return null;
|
|
}
|
|
}, {
|
|
key: "renderMenuFilterElement",
|
|
value: function renderMenuFilterElement(fieldConstraint, index) {
|
|
if (this.props.display === 'menu') {
|
|
return this.renderFilterElement(fieldConstraint, index);
|
|
}
|
|
|
|
return null;
|
|
}
|
|
}, {
|
|
key: "renderMenuButton",
|
|
value: function renderMenuButton() {
|
|
var _this7 = this;
|
|
|
|
if (this.showMenuButton()) {
|
|
var className = classNames('p-column-filter-menu-button p-link', {
|
|
'p-column-filter-menu-button-open': this.state.overlayVisible,
|
|
'p-column-filter-menu-button-active': this.hasFilter()
|
|
});
|
|
return /*#__PURE__*/React.createElement("button", {
|
|
ref: function ref(el) {
|
|
return _this7.icon = el;
|
|
},
|
|
type: "button",
|
|
className: className,
|
|
"aria-haspopup": true,
|
|
"aria-expanded": this.state.overlayVisible,
|
|
onClick: this.toggleMenu,
|
|
onKeyDown: this.onToggleButtonKeyDown
|
|
}, /*#__PURE__*/React.createElement("span", {
|
|
className: "pi pi-filter-icon pi-filter"
|
|
}));
|
|
}
|
|
|
|
return null;
|
|
}
|
|
}, {
|
|
key: "renderClearButton",
|
|
value: function renderClearButton() {
|
|
if (this.getColumnProp('showClearButton') && this.props.display === 'row') {
|
|
var className = classNames('p-column-filter-clear-button p-link', {
|
|
'p-hidden-space': !this.hasRowFilter()
|
|
});
|
|
return /*#__PURE__*/React.createElement("button", {
|
|
className: className,
|
|
type: "button",
|
|
onClick: this.clearFilter
|
|
}, /*#__PURE__*/React.createElement("span", {
|
|
className: "pi pi-filter-slash"
|
|
}));
|
|
}
|
|
|
|
return null;
|
|
}
|
|
}, {
|
|
key: "renderRowItems",
|
|
value: function renderRowItems() {
|
|
var _this8 = this;
|
|
|
|
if (this.isShowMatchModes()) {
|
|
var matchModes = this.matchModes();
|
|
var noFilterLabel = this.noFilterLabel();
|
|
return /*#__PURE__*/React.createElement("ul", {
|
|
className: "p-column-filter-row-items"
|
|
}, matchModes.map(function (matchMode, i) {
|
|
var value = matchMode.value,
|
|
label = matchMode.label;
|
|
var className = classNames('p-column-filter-row-item', {
|
|
'p-highlight': _this8.isRowMatchModeSelected(value)
|
|
});
|
|
var tabIndex = i === 0 ? 0 : null;
|
|
return /*#__PURE__*/React.createElement("li", {
|
|
className: className,
|
|
key: label,
|
|
onClick: function onClick() {
|
|
return _this8.onRowMatchModeChange(value);
|
|
},
|
|
onKeyDown: function onKeyDown(e) {
|
|
return _this8.onRowMatchModeKeyDown(e, matchMode);
|
|
},
|
|
tabIndex: tabIndex
|
|
}, label);
|
|
}), /*#__PURE__*/React.createElement("li", {
|
|
className: "p-column-filter-separator"
|
|
}), /*#__PURE__*/React.createElement("li", {
|
|
className: "p-column-filter-row-item",
|
|
onClick: this.clearFilter,
|
|
onKeyDown: function onKeyDown(e) {
|
|
return _this8.onRowMatchModeKeyDown(e, null, true);
|
|
}
|
|
}, noFilterLabel));
|
|
}
|
|
|
|
return null;
|
|
}
|
|
}, {
|
|
key: "renderOperator",
|
|
value: function renderOperator() {
|
|
if (this.isShowOperator()) {
|
|
var options = this.operatorOptions();
|
|
var value = this.operator();
|
|
return /*#__PURE__*/React.createElement("div", {
|
|
className: "p-column-filter-operator"
|
|
}, /*#__PURE__*/React.createElement(Dropdown, {
|
|
options: options,
|
|
value: value,
|
|
onChange: this.onOperatorChange,
|
|
className: "p-column-filter-operator-dropdown"
|
|
}));
|
|
}
|
|
|
|
return null;
|
|
}
|
|
}, {
|
|
key: "renderMatchModeDropdown",
|
|
value: function renderMatchModeDropdown(constraint, index) {
|
|
var _this9 = this;
|
|
|
|
if (this.isShowMatchModes()) {
|
|
var options = this.matchModes();
|
|
return /*#__PURE__*/React.createElement(Dropdown, {
|
|
options: options,
|
|
value: constraint.matchMode,
|
|
onChange: function onChange(e) {
|
|
return _this9.onMenuMatchModeChange(e.value, index);
|
|
},
|
|
className: "p-column-filter-matchmode-dropdown"
|
|
});
|
|
}
|
|
|
|
return null;
|
|
}
|
|
}, {
|
|
key: "renderRemoveButton",
|
|
value: function renderRemoveButton(index) {
|
|
var _this10 = this;
|
|
|
|
if (this.showRemoveIcon()) {
|
|
var removeRuleLabel = this.removeRuleButtonLabel();
|
|
return /*#__PURE__*/React.createElement(Button, {
|
|
type: "button",
|
|
icon: "pi pi-trash",
|
|
className: "p-column-filter-remove-button p-button-text p-button-danger p-button-sm",
|
|
onClick: function onClick() {
|
|
return _this10.removeConstraint(index);
|
|
},
|
|
label: removeRuleLabel
|
|
});
|
|
}
|
|
|
|
return null;
|
|
}
|
|
}, {
|
|
key: "renderConstraints",
|
|
value: function renderConstraints() {
|
|
var _this11 = this;
|
|
|
|
var fieldConstraints = this.fieldConstraints();
|
|
return /*#__PURE__*/React.createElement("div", {
|
|
className: "p-column-filter-constraints"
|
|
}, fieldConstraints.map(function (fieldConstraint, i) {
|
|
var matchModeDropdown = _this11.renderMatchModeDropdown(fieldConstraint, i);
|
|
|
|
var menuFilterElement = _this11.renderMenuFilterElement(fieldConstraint, i);
|
|
|
|
var removeButton = _this11.renderRemoveButton(i);
|
|
|
|
return /*#__PURE__*/React.createElement("div", {
|
|
key: i,
|
|
className: "p-column-filter-constraint"
|
|
}, matchModeDropdown, menuFilterElement, /*#__PURE__*/React.createElement("div", null, removeButton));
|
|
}));
|
|
}
|
|
}, {
|
|
key: "renderAddRule",
|
|
value: function renderAddRule() {
|
|
if (this.isShowAddConstraint()) {
|
|
var addRuleLabel = this.addRuleButtonLabel();
|
|
return /*#__PURE__*/React.createElement("div", {
|
|
className: "p-column-filter-add-rule"
|
|
}, /*#__PURE__*/React.createElement(Button, {
|
|
type: "button",
|
|
label: addRuleLabel,
|
|
icon: "pi pi-plus",
|
|
className: "p-column-filter-add-button p-button-text p-button-sm",
|
|
onClick: this.addConstraint
|
|
}));
|
|
}
|
|
|
|
return null;
|
|
}
|
|
}, {
|
|
key: "renderFilterClearButton",
|
|
value: function renderFilterClearButton() {
|
|
if (this.getColumnProp('showClearButton')) {
|
|
if (!this.getColumnProp('filterClear')) {
|
|
var clearLabel = this.clearButtonLabel();
|
|
return /*#__PURE__*/React.createElement(Button, {
|
|
type: "button",
|
|
className: "p-button-outlined p-button-sm",
|
|
onClick: this.clearFilter,
|
|
label: clearLabel
|
|
});
|
|
}
|
|
|
|
return ObjectUtils.getJSXElement(this.getColumnProp('filterClear'), {
|
|
field: this.field,
|
|
filterModel: this.filterModel,
|
|
filterClearCallback: this.clearFilter
|
|
});
|
|
}
|
|
|
|
return null;
|
|
}
|
|
}, {
|
|
key: "renderFilterApplyButton",
|
|
value: function renderFilterApplyButton() {
|
|
if (this.getColumnProp('showApplyButton')) {
|
|
if (!this.getColumnProp('filterApply')) {
|
|
var applyLabel = this.applyButtonLabel();
|
|
return /*#__PURE__*/React.createElement(Button, {
|
|
type: "button",
|
|
className: "p-button-sm",
|
|
onClick: this.applyFilter,
|
|
label: applyLabel
|
|
});
|
|
}
|
|
|
|
return ObjectUtils.getJSXElement(this.getColumnProp('filterApply'), {
|
|
field: this.field,
|
|
filterModel: this.filterModel,
|
|
filterApplyCallback: this.applyFilter
|
|
});
|
|
}
|
|
|
|
return null;
|
|
}
|
|
}, {
|
|
key: "renderButtonBar",
|
|
value: function renderButtonBar() {
|
|
var clearButton = this.renderFilterClearButton();
|
|
var applyButton = this.renderFilterApplyButton();
|
|
return /*#__PURE__*/React.createElement("div", {
|
|
className: "p-column-filter-buttonbar"
|
|
}, clearButton, applyButton);
|
|
}
|
|
}, {
|
|
key: "renderItems",
|
|
value: function renderItems() {
|
|
var operator = this.renderOperator();
|
|
var constraints = this.renderConstraints();
|
|
var addRule = this.renderAddRule();
|
|
var buttonBar = this.renderButtonBar();
|
|
return /*#__PURE__*/React.createElement(React.Fragment, null, operator, constraints, addRule, buttonBar);
|
|
}
|
|
}, {
|
|
key: "renderOverlay",
|
|
value: function renderOverlay() {
|
|
var style = this.getColumnProp('filterMenuStyle');
|
|
var className = classNames('p-column-filter-overlay p-component p-fluid', this.getColumnProp('filterMenuClassName'), {
|
|
'p-column-filter-overlay-menu': this.props.display === 'menu',
|
|
'p-input-filled': PrimeReact.inputStyle === 'filled',
|
|
'p-ripple-disabled': PrimeReact.ripple === false
|
|
});
|
|
var filterHeader = ObjectUtils.getJSXElement(this.getColumnProp('filterHeader'), {
|
|
field: this.field,
|
|
filterModel: this.filterModel,
|
|
filterApplyCallback: this.filterApplyCallback
|
|
});
|
|
var filterFooter = ObjectUtils.getJSXElement(this.getColumnProp('filterFooter'), {
|
|
field: this.field,
|
|
filterModel: this.filterModel,
|
|
filterApplyCallback: this.filterApplyCallback
|
|
});
|
|
var items = this.props.display === 'row' ? this.renderRowItems() : this.renderItems();
|
|
return /*#__PURE__*/React.createElement(Portal, null, /*#__PURE__*/React.createElement(CSSTransition, {
|
|
nodeRef: this.overlayRef,
|
|
classNames: "p-connected-overlay",
|
|
"in": this.state.overlayVisible,
|
|
timeout: {
|
|
enter: 120,
|
|
exit: 100
|
|
},
|
|
unmountOnExit: true,
|
|
onEnter: this.onOverlayEnter,
|
|
onExit: this.onOverlayExit,
|
|
onExited: this.onOverlayExited
|
|
}, /*#__PURE__*/React.createElement("div", {
|
|
ref: this.overlayRef,
|
|
style: style,
|
|
className: className,
|
|
onKeyDown: this.onContentKeyDown,
|
|
onClick: this.onContentClick,
|
|
onMouseDown: this.onContentMouseDown
|
|
}, filterHeader, items, filterFooter)));
|
|
}
|
|
}, {
|
|
key: "render",
|
|
value: function render() {
|
|
var className = classNames('p-column-filter p-fluid', {
|
|
'p-column-filter-row': this.props.display === 'row',
|
|
'p-column-filter-menu': this.props.display === 'menu'
|
|
});
|
|
var rowFilterElement = this.renderRowFilterElement();
|
|
var menuButton = this.renderMenuButton();
|
|
var clearButton = this.renderClearButton();
|
|
var overlay = this.renderOverlay();
|
|
return /*#__PURE__*/React.createElement("div", {
|
|
className: className
|
|
}, rowFilterElement, menuButton, clearButton, overlay);
|
|
}
|
|
}]);
|
|
|
|
return ColumnFilter;
|
|
}(Component);
|
|
|
|
function ownKeys$2(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
|
|
function _objectSpread$2(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$2(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$2(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
|
|
function _createSuper$2(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$2(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
|
|
|
|
function _isNativeReflectConstruct$2() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
var HeaderCell = /*#__PURE__*/function (_Component) {
|
|
_inherits(HeaderCell, _Component);
|
|
|
|
var _super = _createSuper$2(HeaderCell);
|
|
|
|
function HeaderCell(props) {
|
|
var _this;
|
|
|
|
_classCallCheck(this, HeaderCell);
|
|
|
|
_this = _super.call(this, props);
|
|
_this.state = {
|
|
styleObject: {}
|
|
};
|
|
_this.onClick = _this.onClick.bind(_assertThisInitialized(_this));
|
|
_this.onMouseDown = _this.onMouseDown.bind(_assertThisInitialized(_this));
|
|
_this.onKeyDown = _this.onKeyDown.bind(_assertThisInitialized(_this)); // drag
|
|
|
|
_this.onDragStart = _this.onDragStart.bind(_assertThisInitialized(_this));
|
|
_this.onDragOver = _this.onDragOver.bind(_assertThisInitialized(_this));
|
|
_this.onDragLeave = _this.onDragLeave.bind(_assertThisInitialized(_this));
|
|
_this.onDrop = _this.onDrop.bind(_assertThisInitialized(_this)); // resize
|
|
|
|
_this.onResizerMouseDown = _this.onResizerMouseDown.bind(_assertThisInitialized(_this));
|
|
_this.onResizerClick = _this.onResizerClick.bind(_assertThisInitialized(_this));
|
|
_this.onResizerDoubleClick = _this.onResizerDoubleClick.bind(_assertThisInitialized(_this));
|
|
return _this;
|
|
}
|
|
|
|
_createClass(HeaderCell, [{
|
|
key: "isBadgeVisible",
|
|
value: function isBadgeVisible() {
|
|
return this.props.multiSortMeta && this.props.multiSortMeta.length > 1;
|
|
}
|
|
}, {
|
|
key: "isSortableDisabled",
|
|
value: function isSortableDisabled() {
|
|
return !this.getColumnProp('sortable') || this.getColumnProp('sortable') && (this.props.allSortableDisabled || this.getColumnProp('sortableDisabled'));
|
|
}
|
|
}, {
|
|
key: "getColumnProp",
|
|
value: function getColumnProp() {
|
|
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
args[_key] = arguments[_key];
|
|
}
|
|
|
|
return this.props.column ? typeof args[0] === 'string' ? this.props.column.props[args[0]] : (args[0] || this.props.column).props[args[1]] : null;
|
|
}
|
|
}, {
|
|
key: "getStyle",
|
|
value: function getStyle() {
|
|
var headerStyle = this.getColumnProp('headerStyle');
|
|
var columnStyle = this.getColumnProp('style');
|
|
return this.getColumnProp('frozen') ? Object.assign({}, columnStyle, headerStyle, this.state.styleObject) : Object.assign({}, columnStyle, headerStyle);
|
|
}
|
|
}, {
|
|
key: "getMultiSortMetaIndex",
|
|
value: function getMultiSortMetaIndex() {
|
|
var _this2 = this;
|
|
|
|
return this.props.multiSortMeta.findIndex(function (meta) {
|
|
return meta.field === _this2.getColumnProp('field') || meta.field === _this2.getColumnProp('sortField');
|
|
});
|
|
}
|
|
}, {
|
|
key: "getSortMeta",
|
|
value: function getSortMeta() {
|
|
var sorted = false;
|
|
var sortOrder = 0;
|
|
var metaIndex = -1;
|
|
|
|
if (this.props.sortMode === 'single') {
|
|
sorted = this.props.sortField && (this.props.sortField === this.getColumnProp('field') || this.props.sortField === this.getColumnProp('sortField'));
|
|
sortOrder = sorted ? this.props.sortOrder : 0;
|
|
} else if (this.props.sortMode === 'multiple') {
|
|
metaIndex = this.getMultiSortMetaIndex();
|
|
|
|
if (metaIndex > -1) {
|
|
sorted = true;
|
|
sortOrder = this.props.multiSortMeta[metaIndex].order;
|
|
}
|
|
}
|
|
|
|
return {
|
|
sorted: sorted,
|
|
sortOrder: sortOrder,
|
|
metaIndex: metaIndex
|
|
};
|
|
}
|
|
}, {
|
|
key: "getAriaSort",
|
|
value: function getAriaSort(_ref) {
|
|
var sorted = _ref.sorted,
|
|
sortOrder = _ref.sortOrder;
|
|
|
|
if (this.getColumnProp('sortable')) {
|
|
var sortIcon = sorted ? sortOrder < 0 ? 'pi-sort-amount-down' : 'pi-sort-amount-up-alt' : 'pi-sort-alt';
|
|
if (sortIcon === 'pi-sort-amount-down') return 'descending';else if (sortIcon === 'pi-sort-amount-up-alt') return 'ascending';else return 'none';
|
|
}
|
|
|
|
return null;
|
|
}
|
|
}, {
|
|
key: "updateStickyPosition",
|
|
value: function updateStickyPosition() {
|
|
if (this.getColumnProp('frozen')) {
|
|
var styleObject = _objectSpread$2({}, this.state.styleObject);
|
|
|
|
var align = this.getColumnProp('alignFrozen');
|
|
|
|
if (align === 'right') {
|
|
var right = 0;
|
|
var next = this.el.nextElementSibling;
|
|
|
|
if (next) {
|
|
right = DomHandler.getOuterWidth(next) + parseFloat(next.style.right || 0);
|
|
}
|
|
|
|
styleObject['right'] = right + 'px';
|
|
} else {
|
|
var left = 0;
|
|
var prev = this.el.previousElementSibling;
|
|
|
|
if (prev) {
|
|
left = DomHandler.getOuterWidth(prev) + parseFloat(prev.style.left || 0);
|
|
}
|
|
|
|
styleObject['left'] = left + 'px';
|
|
}
|
|
|
|
var filterRow = this.el.parentElement.nextElementSibling;
|
|
|
|
if (filterRow) {
|
|
var index = DomHandler.index(this.el);
|
|
filterRow.children[index].style.left = styleObject['left'];
|
|
filterRow.children[index].style.right = styleObject['right'];
|
|
}
|
|
|
|
var isSameStyle = this.state.styleObject['left'] === styleObject['left'] && this.state.styleObject['right'] === styleObject['right'];
|
|
!isSameStyle && this.setState({
|
|
styleObject: styleObject
|
|
});
|
|
}
|
|
}
|
|
}, {
|
|
key: "updateSortableDisabled",
|
|
value: function updateSortableDisabled(prevColumn) {
|
|
if (this.getColumnProp(prevColumn, 'sortableDisabled') !== this.getColumnProp('sortableDisabled') || this.getColumnProp(prevColumn, 'sortable') !== this.getColumnProp('sortable')) {
|
|
this.props.onSortableChange();
|
|
}
|
|
}
|
|
}, {
|
|
key: "onClick",
|
|
value: function onClick(event) {
|
|
if (!this.isSortableDisabled()) {
|
|
var targetNode = event.target;
|
|
|
|
if (DomHandler.hasClass(targetNode, 'p-sortable-column') || DomHandler.hasClass(targetNode, 'p-column-title') || DomHandler.hasClass(targetNode, 'p-column-header-content') || DomHandler.hasClass(targetNode, 'p-sortable-column-icon') || DomHandler.hasClass(targetNode.parentElement, 'p-sortable-column-icon')) {
|
|
DomHandler.clearSelection();
|
|
this.props.onSortChange({
|
|
originalEvent: event,
|
|
column: this.props.column,
|
|
sortableDisabledFields: this.props.sortableDisabledFields
|
|
});
|
|
}
|
|
}
|
|
}
|
|
}, {
|
|
key: "onMouseDown",
|
|
value: function onMouseDown(event) {
|
|
this.props.onColumnMouseDown({
|
|
originalEvent: event,
|
|
column: this.props.column
|
|
});
|
|
}
|
|
}, {
|
|
key: "onKeyDown",
|
|
value: function onKeyDown(event) {
|
|
if (event.key === 'Enter' && event.currentTarget === this.el && DomHandler.hasClass(event.currentTarget, 'p-sortable-column')) {
|
|
this.onClick(event);
|
|
event.preventDefault();
|
|
}
|
|
}
|
|
}, {
|
|
key: "onDragStart",
|
|
value: function onDragStart(event) {
|
|
this.props.onColumnDragStart({
|
|
originalEvent: event,
|
|
column: this.props.column
|
|
});
|
|
}
|
|
}, {
|
|
key: "onDragOver",
|
|
value: function onDragOver(event) {
|
|
this.props.onColumnDragOver({
|
|
originalEvent: event,
|
|
column: this.props.column
|
|
});
|
|
}
|
|
}, {
|
|
key: "onDragLeave",
|
|
value: function onDragLeave(event) {
|
|
this.props.onColumnDragLeave({
|
|
originalEvent: event,
|
|
column: this.props.column
|
|
});
|
|
}
|
|
}, {
|
|
key: "onDrop",
|
|
value: function onDrop(event) {
|
|
this.props.onColumnDrop({
|
|
originalEvent: event,
|
|
column: this.props.column
|
|
});
|
|
}
|
|
}, {
|
|
key: "onResizerMouseDown",
|
|
value: function onResizerMouseDown(event) {
|
|
this.props.onColumnResizeStart({
|
|
originalEvent: event,
|
|
column: this.props.column
|
|
});
|
|
}
|
|
}, {
|
|
key: "onResizerClick",
|
|
value: function onResizerClick(event) {
|
|
if (this.props.onColumnResizerClick) {
|
|
this.props.onColumnResizerClick({
|
|
originalEvent: event,
|
|
element: event.currentTarget.parentElement,
|
|
column: this.props.column
|
|
});
|
|
event.preventDefault();
|
|
}
|
|
}
|
|
}, {
|
|
key: "onResizerDoubleClick",
|
|
value: function onResizerDoubleClick(event) {
|
|
if (this.props.onColumnResizerDoubleClick) {
|
|
this.props.onColumnResizerDoubleClick({
|
|
originalEvent: event,
|
|
element: event.currentTarget.parentElement,
|
|
column: this.props.column
|
|
});
|
|
event.preventDefault();
|
|
}
|
|
}
|
|
}, {
|
|
key: "componentDidMount",
|
|
value: function componentDidMount() {
|
|
if (this.getColumnProp('frozen')) {
|
|
this.updateStickyPosition();
|
|
}
|
|
}
|
|
}, {
|
|
key: "componentDidUpdate",
|
|
value: function componentDidUpdate(prevProps) {
|
|
if (this.getColumnProp('frozen')) {
|
|
this.updateStickyPosition();
|
|
}
|
|
|
|
this.updateSortableDisabled(prevProps.column);
|
|
}
|
|
}, {
|
|
key: "renderResizer",
|
|
value: function renderResizer() {
|
|
if (this.props.resizableColumns && !this.getColumnProp('frozen')) {
|
|
return /*#__PURE__*/React.createElement("span", {
|
|
className: "p-column-resizer",
|
|
onMouseDown: this.onResizerMouseDown,
|
|
onClick: this.onResizerClick,
|
|
onDoubleClick: this.onResizerDoubleClick
|
|
});
|
|
}
|
|
|
|
return null;
|
|
}
|
|
}, {
|
|
key: "renderTitle",
|
|
value: function renderTitle() {
|
|
var title = ObjectUtils.getJSXElement(this.getColumnProp('header'), {
|
|
props: this.props.tableProps
|
|
});
|
|
return /*#__PURE__*/React.createElement("span", {
|
|
className: "p-column-title"
|
|
}, title);
|
|
}
|
|
}, {
|
|
key: "renderSortIcon",
|
|
value: function renderSortIcon(_ref2) {
|
|
var sorted = _ref2.sorted,
|
|
sortOrder = _ref2.sortOrder;
|
|
|
|
if (this.getColumnProp('sortable')) {
|
|
var sortIcon = sorted ? sortOrder < 0 ? 'pi-sort-amount-down' : 'pi-sort-amount-up-alt' : 'pi-sort-alt';
|
|
var className = classNames('p-sortable-column-icon pi pi-fw', sortIcon);
|
|
return /*#__PURE__*/React.createElement("span", {
|
|
className: className
|
|
});
|
|
}
|
|
|
|
return null;
|
|
}
|
|
}, {
|
|
key: "renderBadge",
|
|
value: function renderBadge(_ref3) {
|
|
var metaIndex = _ref3.metaIndex;
|
|
|
|
if (metaIndex !== -1 && this.isBadgeVisible()) {
|
|
var value = this.props.groupRowsBy && this.props.groupRowsBy === this.props.groupRowSortField ? metaIndex : metaIndex + 1;
|
|
return /*#__PURE__*/React.createElement("span", {
|
|
className: "p-sortable-column-badge"
|
|
}, value);
|
|
}
|
|
|
|
return null;
|
|
}
|
|
}, {
|
|
key: "renderCheckbox",
|
|
value: function renderCheckbox() {
|
|
if (this.props.showSelectAll && this.getColumnProp('selectionMode') === 'multiple' && this.props.filterDisplay !== 'row') {
|
|
var allRowsSelected = this.props.allRowsSelected(this.props.value);
|
|
return /*#__PURE__*/React.createElement(HeaderCheckbox, {
|
|
checked: allRowsSelected,
|
|
onChange: this.props.onColumnCheckboxChange,
|
|
disabled: this.props.empty
|
|
});
|
|
}
|
|
|
|
return null;
|
|
}
|
|
}, {
|
|
key: "renderFilter",
|
|
value: function renderFilter() {
|
|
if (this.props.filterDisplay === 'menu' && this.getColumnProp('filter')) {
|
|
return /*#__PURE__*/React.createElement(ColumnFilter, {
|
|
display: "menu",
|
|
column: this.props.column,
|
|
filters: this.props.filters,
|
|
onFilterChange: this.props.onFilterChange,
|
|
onFilterApply: this.props.onFilterApply,
|
|
filtersStore: this.props.filtersStore
|
|
});
|
|
}
|
|
|
|
return null;
|
|
}
|
|
}, {
|
|
key: "renderHeader",
|
|
value: function renderHeader(sortMeta) {
|
|
var title = this.renderTitle();
|
|
var sortIcon = this.renderSortIcon(sortMeta);
|
|
var badge = this.renderBadge(sortMeta);
|
|
var checkbox = this.renderCheckbox();
|
|
var filter = this.renderFilter();
|
|
return /*#__PURE__*/React.createElement("div", {
|
|
className: "p-column-header-content"
|
|
}, title, sortIcon, badge, checkbox, filter);
|
|
}
|
|
}, {
|
|
key: "renderElement",
|
|
value: function renderElement() {
|
|
var _this3 = this;
|
|
|
|
var isSortableDisabled = this.isSortableDisabled();
|
|
var sortMeta = this.getSortMeta();
|
|
var style = this.getStyle();
|
|
var align = this.getColumnProp('alignHeader') || this.getColumnProp('align');
|
|
var className = classNames(this.getColumnProp('headerClassName'), this.getColumnProp('className'), _defineProperty({
|
|
'p-sortable-column': this.getColumnProp('sortable'),
|
|
'p-resizable-column': this.props.resizableColumns,
|
|
'p-highlight': sortMeta.sorted,
|
|
'p-frozen-column': this.getColumnProp('frozen'),
|
|
'p-selection-column': this.getColumnProp('selectionMode'),
|
|
'p-sortable-disabled': this.getColumnProp('sortable') && isSortableDisabled,
|
|
'p-reorderable-column': this.props.reorderableColumns && this.getColumnProp('reorderable')
|
|
}, "p-align-".concat(align), !!align));
|
|
var tabIndex = this.getColumnProp('sortable') && !isSortableDisabled ? this.props.tabIndex : null;
|
|
var colSpan = this.getColumnProp('colSpan');
|
|
var rowSpan = this.getColumnProp('rowSpan');
|
|
var ariaSort = this.getAriaSort(sortMeta);
|
|
var resizer = this.renderResizer();
|
|
var header = this.renderHeader(sortMeta);
|
|
return /*#__PURE__*/React.createElement("th", {
|
|
ref: function ref(el) {
|
|
return _this3.el = el;
|
|
},
|
|
style: style,
|
|
className: className,
|
|
tabIndex: tabIndex,
|
|
role: "columnheader",
|
|
onClick: this.onClick,
|
|
onKeyDown: this.onKeyDown,
|
|
onMouseDown: this.onMouseDown,
|
|
onDragStart: this.onDragStart,
|
|
onDragOver: this.onDragOver,
|
|
onDragLeave: this.onDragLeave,
|
|
onDrop: this.onDrop,
|
|
colSpan: colSpan,
|
|
rowSpan: rowSpan,
|
|
"aria-sort": ariaSort
|
|
}, resizer, header);
|
|
}
|
|
}, {
|
|
key: "render",
|
|
value: function render() {
|
|
return this.renderElement();
|
|
}
|
|
}]);
|
|
|
|
return HeaderCell;
|
|
}(Component);
|
|
|
|
function ownKeys$1(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
|
|
function _objectSpread$1(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$1(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$1(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
|
|
function _createSuper$1(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$1(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
|
|
|
|
function _isNativeReflectConstruct$1() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
var TableHeader = /*#__PURE__*/function (_Component) {
|
|
_inherits(TableHeader, _Component);
|
|
|
|
var _super = _createSuper$1(TableHeader);
|
|
|
|
function TableHeader(props) {
|
|
var _this;
|
|
|
|
_classCallCheck(this, TableHeader);
|
|
|
|
_this = _super.call(this, props);
|
|
_this.state = {
|
|
sortableDisabledFields: [],
|
|
allSortableDisabled: false,
|
|
styleObject: {}
|
|
};
|
|
_this.onSortableChange = _this.onSortableChange.bind(_assertThisInitialized(_this));
|
|
_this.onCheckboxChange = _this.onCheckboxChange.bind(_assertThisInitialized(_this));
|
|
return _this;
|
|
}
|
|
|
|
_createClass(TableHeader, [{
|
|
key: "isSingleSort",
|
|
value: function isSingleSort() {
|
|
return this.props.sortMode === 'single';
|
|
}
|
|
}, {
|
|
key: "isMultipleSort",
|
|
value: function isMultipleSort() {
|
|
return this.props.sortMode === 'multiple';
|
|
}
|
|
}, {
|
|
key: "isAllSortableDisabled",
|
|
value: function isAllSortableDisabled() {
|
|
return this.isSingleSort() && this.state.allSortableDisabled;
|
|
}
|
|
}, {
|
|
key: "isColumnSorted",
|
|
value: function isColumnSorted(column) {
|
|
return this.props.sortField !== null ? column.props.field === this.props.sortField || column.props.sortField === this.props.sortField : false;
|
|
}
|
|
}, {
|
|
key: "updateSortableDisabled",
|
|
value: function updateSortableDisabled() {
|
|
var _this2 = this;
|
|
|
|
if (this.isSingleSort() || this.isMultipleSort() && this.props.onSortChange) {
|
|
var sortableDisabledFields = [];
|
|
var allSortableDisabled = false;
|
|
this.props.columns.forEach(function (column) {
|
|
if (column.props.sortableDisabled) {
|
|
sortableDisabledFields.push(column.props.sortField || column.props.field);
|
|
|
|
if (!allSortableDisabled && _this2.isColumnSorted(column)) {
|
|
allSortableDisabled = true;
|
|
}
|
|
}
|
|
});
|
|
this.setState({
|
|
sortableDisabledFields: sortableDisabledFields,
|
|
allSortableDisabled: allSortableDisabled
|
|
});
|
|
}
|
|
}
|
|
}, {
|
|
key: "onSortableChange",
|
|
value: function onSortableChange() {
|
|
this.updateSortableDisabled();
|
|
}
|
|
}, {
|
|
key: "onCheckboxChange",
|
|
value: function onCheckboxChange(e) {
|
|
this.props.onColumnCheckboxChange(e, this.props.value);
|
|
}
|
|
}, {
|
|
key: "componentDidMount",
|
|
value: function componentDidMount() {
|
|
this.updateSortableDisabled();
|
|
}
|
|
}, {
|
|
key: "renderGroupHeaderCells",
|
|
value: function renderGroupHeaderCells(row) {
|
|
var columns = React.Children.toArray(row.props.children);
|
|
return this.renderHeaderCells(columns);
|
|
}
|
|
}, {
|
|
key: "renderHeaderCells",
|
|
value: function renderHeaderCells(columns) {
|
|
var _this3 = this;
|
|
|
|
return React.Children.map(columns, function (col, i) {
|
|
var isVisible = col ? !col.props.hidden : true;
|
|
var key = col ? col.props.columnKey || col.props.field || i : i;
|
|
return isVisible && /*#__PURE__*/React.createElement(HeaderCell, {
|
|
key: key,
|
|
value: _this3.props.value,
|
|
tableProps: _this3.props.tableProps,
|
|
column: col,
|
|
tabIndex: _this3.props.tabIndex,
|
|
empty: _this3.props.empty,
|
|
resizableColumns: _this3.props.resizableColumns,
|
|
groupRowsBy: _this3.props.groupRowsBy,
|
|
groupRowSortField: _this3.props.groupRowSortField,
|
|
sortMode: _this3.props.sortMode,
|
|
sortField: _this3.props.sortField,
|
|
sortOrder: _this3.props.sortOrder,
|
|
multiSortMeta: _this3.props.multiSortMeta,
|
|
allSortableDisabled: _this3.isAllSortableDisabled(),
|
|
onSortableChange: _this3.onSortableChange,
|
|
sortableDisabledFields: _this3.state.sortableDisabledFields,
|
|
filterDisplay: _this3.props.filterDisplay,
|
|
filters: _this3.props.filters,
|
|
filtersStore: _this3.props.filtersStore,
|
|
onFilterChange: _this3.props.onFilterChange,
|
|
onFilterApply: _this3.props.onFilterApply,
|
|
onColumnMouseDown: _this3.props.onColumnMouseDown,
|
|
onColumnDragStart: _this3.props.onColumnDragStart,
|
|
onColumnDragOver: _this3.props.onColumnDragOver,
|
|
onColumnDragLeave: _this3.props.onColumnDragLeave,
|
|
onColumnDrop: _this3.props.onColumnDrop,
|
|
onColumnResizeStart: _this3.props.onColumnResizeStart,
|
|
onColumnResizerClick: _this3.props.onColumnResizerClick,
|
|
onColumnResizerDoubleClick: _this3.props.onColumnResizerDoubleClick,
|
|
showSelectAll: _this3.props.showSelectAll,
|
|
allRowsSelected: _this3.props.allRowsSelected,
|
|
onColumnCheckboxChange: _this3.onCheckboxChange,
|
|
reorderableColumns: _this3.props.reorderableColumns,
|
|
onSortChange: _this3.props.onSortChange
|
|
});
|
|
});
|
|
}
|
|
}, {
|
|
key: "renderCheckbox",
|
|
value: function renderCheckbox(selectionMode) {
|
|
if (this.props.showSelectAll && selectionMode === 'multiple') {
|
|
var allRowsSelected = this.props.allRowsSelected(this.props.value);
|
|
return /*#__PURE__*/React.createElement(HeaderCheckbox, {
|
|
checked: allRowsSelected,
|
|
onChange: this.onCheckboxChange,
|
|
disabled: this.props.empty
|
|
});
|
|
}
|
|
|
|
return null;
|
|
}
|
|
}, {
|
|
key: "renderFilter",
|
|
value: function renderFilter(column, filter) {
|
|
if (filter) {
|
|
return /*#__PURE__*/React.createElement(ColumnFilter, {
|
|
display: "row",
|
|
column: column,
|
|
filters: this.props.filters,
|
|
filtersStore: this.props.filtersStore,
|
|
onFilterChange: this.props.onFilterChange,
|
|
onFilterApply: this.props.onFilterApply
|
|
});
|
|
}
|
|
|
|
return null;
|
|
}
|
|
}, {
|
|
key: "renderFilterCells",
|
|
value: function renderFilterCells() {
|
|
var _this4 = this;
|
|
|
|
return React.Children.map(this.props.columns, function (col, i) {
|
|
var isVisible = !col.props.hidden;
|
|
|
|
if (isVisible) {
|
|
var _col$props = col.props,
|
|
filterHeaderStyle = _col$props.filterHeaderStyle,
|
|
style = _col$props.style,
|
|
filterHeaderClassName = _col$props.filterHeaderClassName,
|
|
className = _col$props.className,
|
|
frozen = _col$props.frozen,
|
|
columnKey = _col$props.columnKey,
|
|
field = _col$props.field,
|
|
selectionMode = _col$props.selectionMode,
|
|
filter = _col$props.filter;
|
|
|
|
var colStyle = _objectSpread$1(_objectSpread$1({}, filterHeaderStyle || {}), style || {});
|
|
|
|
var colClassName = classNames('p-filter-column', filterHeaderClassName, className, {
|
|
'p-frozen-column': frozen
|
|
});
|
|
var colKey = columnKey || field || i;
|
|
|
|
var checkbox = _this4.renderCheckbox(selectionMode);
|
|
|
|
var filterRow = _this4.renderFilter(col, filter);
|
|
|
|
return /*#__PURE__*/React.createElement("th", {
|
|
key: colKey,
|
|
style: colStyle,
|
|
className: colClassName
|
|
}, checkbox, filterRow);
|
|
}
|
|
|
|
return null;
|
|
});
|
|
}
|
|
}, {
|
|
key: "renderContent",
|
|
value: function renderContent() {
|
|
var _this5 = this;
|
|
|
|
if (this.props.headerColumnGroup) {
|
|
var rows = React.Children.toArray(this.props.headerColumnGroup.props.children);
|
|
return rows.map(function (row, i) {
|
|
return /*#__PURE__*/React.createElement("tr", {
|
|
key: i,
|
|
role: "row"
|
|
}, _this5.renderGroupHeaderCells(row));
|
|
});
|
|
} else {
|
|
var headerRow = /*#__PURE__*/React.createElement("tr", {
|
|
role: "row"
|
|
}, this.renderHeaderCells(this.props.columns));
|
|
var filterRow = this.props.filterDisplay === 'row' && /*#__PURE__*/React.createElement("tr", {
|
|
role: "row"
|
|
}, this.renderFilterCells());
|
|
return /*#__PURE__*/React.createElement(React.Fragment, null, headerRow, filterRow);
|
|
}
|
|
}
|
|
}, {
|
|
key: "render",
|
|
value: function render() {
|
|
var content = this.renderContent();
|
|
return /*#__PURE__*/React.createElement("thead", {
|
|
className: "p-datatable-thead"
|
|
}, content);
|
|
}
|
|
}]);
|
|
|
|
return TableHeader;
|
|
}(Component);
|
|
|
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
|
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
|
|
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
|
|
|
|
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
var DataTable = /*#__PURE__*/function (_Component) {
|
|
_inherits(DataTable, _Component);
|
|
|
|
var _super = _createSuper(DataTable);
|
|
|
|
function DataTable(props) {
|
|
var _this;
|
|
|
|
_classCallCheck(this, DataTable);
|
|
|
|
_this = _super.call(this, props);
|
|
_this.state = {
|
|
d_rows: props.rows,
|
|
columnOrder: [],
|
|
groupRowsSortMeta: null,
|
|
editingMeta: {},
|
|
attributeSelector: null
|
|
};
|
|
|
|
if (!_this.props.onPage) {
|
|
_this.state.first = props.first;
|
|
_this.state.rows = props.rows;
|
|
}
|
|
|
|
if (!_this.props.onSort) {
|
|
_this.state.sortField = props.sortField;
|
|
_this.state.sortOrder = props.sortOrder;
|
|
_this.state.multiSortMeta = props.multiSortMeta;
|
|
}
|
|
|
|
_this.state.d_filters = _this.cloneFilters(props.filters);
|
|
|
|
if (!_this.props.onFilter) {
|
|
_this.state.filters = props.filters;
|
|
} // header
|
|
|
|
|
|
_this.onSortChange = _this.onSortChange.bind(_assertThisInitialized(_this));
|
|
_this.onFilterChange = _this.onFilterChange.bind(_assertThisInitialized(_this));
|
|
_this.onFilterApply = _this.onFilterApply.bind(_assertThisInitialized(_this));
|
|
_this.onColumnHeaderMouseDown = _this.onColumnHeaderMouseDown.bind(_assertThisInitialized(_this));
|
|
_this.onColumnHeaderDragStart = _this.onColumnHeaderDragStart.bind(_assertThisInitialized(_this));
|
|
_this.onColumnHeaderDragOver = _this.onColumnHeaderDragOver.bind(_assertThisInitialized(_this));
|
|
_this.onColumnHeaderDragLeave = _this.onColumnHeaderDragLeave.bind(_assertThisInitialized(_this));
|
|
_this.onColumnHeaderDrop = _this.onColumnHeaderDrop.bind(_assertThisInitialized(_this));
|
|
_this.onColumnResizeStart = _this.onColumnResizeStart.bind(_assertThisInitialized(_this));
|
|
_this.onColumnHeaderCheckboxChange = _this.onColumnHeaderCheckboxChange.bind(_assertThisInitialized(_this));
|
|
_this.allRowsSelected = _this.allRowsSelected.bind(_assertThisInitialized(_this)); // body
|
|
|
|
_this.onEditingMetaChange = _this.onEditingMetaChange.bind(_assertThisInitialized(_this)); //paginator
|
|
|
|
_this.onPageChange = _this.onPageChange.bind(_assertThisInitialized(_this));
|
|
return _this;
|
|
}
|
|
|
|
_createClass(DataTable, [{
|
|
key: "isCustomStateStorage",
|
|
value: function isCustomStateStorage() {
|
|
return this.props.stateStorage === 'custom';
|
|
}
|
|
}, {
|
|
key: "isStateful",
|
|
value: function isStateful() {
|
|
return this.props.stateKey != null || this.isCustomStateStorage();
|
|
}
|
|
}, {
|
|
key: "isVirtualScrollerDisabled",
|
|
value: function isVirtualScrollerDisabled() {
|
|
return ObjectUtils.isEmpty(this.props.virtualScrollerOptions) || !this.props.scrollable;
|
|
}
|
|
}, {
|
|
key: "isEquals",
|
|
value: function isEquals(data1, data2) {
|
|
return this.props.compareSelectionBy === 'equals' ? data1 === data2 : ObjectUtils.equals(data1, data2, this.props.dataKey);
|
|
}
|
|
}, {
|
|
key: "hasFilter",
|
|
value: function hasFilter() {
|
|
return ObjectUtils.isNotEmpty(this.getFilters()) || this.props.globalFilter;
|
|
}
|
|
}, {
|
|
key: "getFirst",
|
|
value: function getFirst() {
|
|
return this.props.onPage ? this.props.first : this.state.first;
|
|
}
|
|
}, {
|
|
key: "getRows",
|
|
value: function getRows() {
|
|
return this.props.onPage ? this.props.rows : this.state.rows;
|
|
}
|
|
}, {
|
|
key: "getSortField",
|
|
value: function getSortField() {
|
|
return this.props.onSort ? this.props.sortField : this.state.sortField;
|
|
}
|
|
}, {
|
|
key: "getSortOrder",
|
|
value: function getSortOrder() {
|
|
return this.props.onSort ? this.props.sortOrder : this.state.sortOrder;
|
|
}
|
|
}, {
|
|
key: "getMultiSortMeta",
|
|
value: function getMultiSortMeta() {
|
|
return (this.props.onSort ? this.props.multiSortMeta : this.state.multiSortMeta) || [];
|
|
}
|
|
}, {
|
|
key: "getFilters",
|
|
value: function getFilters() {
|
|
return this.props.onFilter ? this.props.filters : this.state.filters;
|
|
}
|
|
}, {
|
|
key: "getColumnProp",
|
|
value: function getColumnProp(col, prop) {
|
|
return col.props[prop];
|
|
}
|
|
}, {
|
|
key: "getColumns",
|
|
value: function getColumns(ignoreReorderable) {
|
|
var _this2 = this;
|
|
|
|
var columns = React.Children.toArray(this.props.children);
|
|
|
|
if (!columns) {
|
|
return null;
|
|
}
|
|
|
|
if (!ignoreReorderable && this.props.reorderableColumns && this.state.columnOrder) {
|
|
var orderedColumns = this.state.columnOrder.reduce(function (arr, columnKey) {
|
|
var column = _this2.findColumnByKey(columns, columnKey);
|
|
|
|
column && arr.push(column);
|
|
return arr;
|
|
}, []);
|
|
return [].concat(_toConsumableArray(orderedColumns), _toConsumableArray(columns.filter(function (col) {
|
|
return orderedColumns.indexOf(col) < 0;
|
|
})));
|
|
}
|
|
|
|
return columns;
|
|
}
|
|
}, {
|
|
key: "getStorage",
|
|
value: function getStorage() {
|
|
switch (this.props.stateStorage) {
|
|
case 'local':
|
|
return window.localStorage;
|
|
|
|
case 'session':
|
|
return window.sessionStorage;
|
|
|
|
case 'custom':
|
|
return null;
|
|
|
|
default:
|
|
throw new Error(this.props.stateStorage + ' is not a valid value for the state storage, supported values are "local", "session" and "custom".');
|
|
}
|
|
}
|
|
}, {
|
|
key: "saveState",
|
|
value: function saveState() {
|
|
var state = {};
|
|
|
|
if (this.props.paginator) {
|
|
state.first = this.getFirst();
|
|
state.rows = this.getRows();
|
|
}
|
|
|
|
var sortField = this.getSortField();
|
|
|
|
if (sortField) {
|
|
state.sortField = sortField;
|
|
state.sortOrder = this.getSortOrder();
|
|
}
|
|
|
|
var multiSortMeta = this.getMultiSortMeta();
|
|
|
|
if (multiSortMeta) {
|
|
state.multiSortMeta = multiSortMeta;
|
|
}
|
|
|
|
if (this.hasFilter()) {
|
|
state.filters = this.getFilters();
|
|
}
|
|
|
|
if (this.props.resizableColumns) {
|
|
this.saveColumnWidths(state);
|
|
}
|
|
|
|
if (this.props.reorderableColumns) {
|
|
state.columnOrder = this.state.columnOrder;
|
|
}
|
|
|
|
if (this.props.expandedRows) {
|
|
state.expandedRows = this.props.expandedRows;
|
|
}
|
|
|
|
if (this.props.selection && this.props.onSelectionChange) {
|
|
state.selection = this.props.selection;
|
|
}
|
|
|
|
if (this.isCustomStateStorage()) {
|
|
if (this.props.customSaveState) {
|
|
this.props.customSaveState(state);
|
|
}
|
|
} else {
|
|
var storage = this.getStorage();
|
|
|
|
if (ObjectUtils.isNotEmpty(state)) {
|
|
storage.setItem(this.props.stateKey, JSON.stringify(state));
|
|
}
|
|
}
|
|
|
|
if (this.props.onStateSave) {
|
|
this.props.onStateSave(state);
|
|
}
|
|
}
|
|
}, {
|
|
key: "clearState",
|
|
value: function clearState() {
|
|
var storage = this.getStorage();
|
|
|
|
if (storage && this.props.stateKey) {
|
|
storage.removeItem(this.props.stateKey);
|
|
}
|
|
}
|
|
}, {
|
|
key: "restoreState",
|
|
value: function restoreState(state) {
|
|
var restoredState = {};
|
|
|
|
if (this.isCustomStateStorage()) {
|
|
if (this.props.customRestoreState) {
|
|
restoredState = this.props.customRestoreState();
|
|
}
|
|
} else {
|
|
var storage = this.getStorage();
|
|
var stateString = storage.getItem(this.props.stateKey);
|
|
var dateFormat = /\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{3}Z/;
|
|
|
|
var reviver = function reviver(key, value) {
|
|
return typeof value === "string" && dateFormat.test(value) ? new Date(value) : value;
|
|
};
|
|
|
|
if (stateString) {
|
|
restoredState = JSON.parse(stateString, reviver);
|
|
}
|
|
}
|
|
|
|
this._restoreState(restoredState, state);
|
|
}
|
|
}, {
|
|
key: "restoreTableState",
|
|
value: function restoreTableState(restoredState) {
|
|
var state = this._restoreState(restoredState);
|
|
|
|
if (ObjectUtils.isNotEmpty(state)) {
|
|
this.setState(state);
|
|
}
|
|
}
|
|
}, {
|
|
key: "_restoreState",
|
|
value: function _restoreState(restoredState) {
|
|
var _this3 = this;
|
|
|
|
var state = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
|
|
if (ObjectUtils.isNotEmpty(restoredState)) {
|
|
if (this.props.paginator) {
|
|
if (this.props.onPage) {
|
|
var getOnPageParams = function getOnPageParams(first, rows) {
|
|
var totalRecords = _this3.getTotalRecords(_this3.processedData());
|
|
|
|
var pageCount = Math.ceil(totalRecords / rows) || 1;
|
|
var page = Math.floor(first / rows);
|
|
return {
|
|
first: first,
|
|
rows: rows,
|
|
page: page,
|
|
pageCount: pageCount
|
|
};
|
|
};
|
|
|
|
this.props.onPage(this.createEvent(getOnPageParams(restoredState.first, restoredState.rows)));
|
|
} else {
|
|
state.first = restoredState.first;
|
|
state.rows = restoredState.rows;
|
|
}
|
|
}
|
|
|
|
if (restoredState.sortField) {
|
|
if (this.props.onSort) {
|
|
this.props.onSort(this.createEvent({
|
|
sortField: restoredState.sortField,
|
|
sortOrder: restoredState.sortOrder
|
|
}));
|
|
} else {
|
|
state.sortField = restoredState.sortField;
|
|
state.sortOrder = restoredState.sortOrder;
|
|
}
|
|
}
|
|
|
|
if (restoredState.multiSortMeta) {
|
|
if (this.props.onSort) {
|
|
this.props.onSort(this.createEvent({
|
|
multiSortMeta: restoredState.multiSortMeta
|
|
}));
|
|
} else {
|
|
state.multiSortMeta = restoredState.multiSortMeta;
|
|
}
|
|
}
|
|
|
|
if (restoredState.filters) {
|
|
state.d_filters = this.cloneFilters(restoredState.filters);
|
|
|
|
if (this.props.onFilter) {
|
|
this.props.onFilter(this.createEvent({
|
|
filters: restoredState.filters
|
|
}));
|
|
} else {
|
|
state.filters = this.cloneFilters(restoredState.filters);
|
|
}
|
|
}
|
|
|
|
if (this.props.resizableColumns) {
|
|
this.columnWidthsState = restoredState.columnWidths;
|
|
this.tableWidthState = restoredState.tableWidth;
|
|
}
|
|
|
|
if (this.props.reorderableColumns) {
|
|
state.columnOrder = restoredState.columnOrder;
|
|
}
|
|
|
|
if (restoredState.expandedRows && this.props.onRowToggle) {
|
|
this.props.onRowToggle({
|
|
data: restoredState.expandedRows
|
|
});
|
|
}
|
|
|
|
if (restoredState.selection && this.props.onSelectionChange) {
|
|
this.props.onSelectionChange({
|
|
value: restoredState.selection
|
|
});
|
|
}
|
|
|
|
if (this.props.onStateRestore) {
|
|
this.props.onStateRestore(restoredState);
|
|
}
|
|
}
|
|
|
|
return state;
|
|
}
|
|
}, {
|
|
key: "saveColumnWidths",
|
|
value: function saveColumnWidths(state) {
|
|
var widths = [];
|
|
var headers = DomHandler.find(this.el, '.p-datatable-thead > tr > th');
|
|
headers.forEach(function (header) {
|
|
return widths.push(DomHandler.getOuterWidth(header));
|
|
});
|
|
state.columnWidths = widths.join(',');
|
|
|
|
if (this.props.columnResizeMode === 'expand') {
|
|
state.tableWidth = DomHandler.getOuterWidth(this.table) + 'px';
|
|
}
|
|
}
|
|
}, {
|
|
key: "restoreColumnWidths",
|
|
value: function restoreColumnWidths() {
|
|
var _this4 = this;
|
|
|
|
if (this.columnWidthsState) {
|
|
var widths = this.columnWidthsState.split(',');
|
|
|
|
if (this.props.columnResizeMode === 'expand' && this.tableWidthState) {
|
|
this.table.style.width = this.tableWidthState;
|
|
this.table.style.minWidth = this.tableWidthState;
|
|
this.el.style.width = this.tableWidthState;
|
|
}
|
|
|
|
if (ObjectUtils.isNotEmpty(widths)) {
|
|
this.createStyleElement();
|
|
var innerHTML = '';
|
|
widths.forEach(function (width, index) {
|
|
var style = _this4.props.scrollable ? "flex: 1 1 ".concat(width, "px !important") : "width: ".concat(width, "px !important");
|
|
innerHTML += "\n .p-datatable[".concat(_this4.state.attributeSelector, "] .p-datatable-thead > tr > th:nth-child(").concat(index + 1, "),\n .p-datatable[").concat(_this4.state.attributeSelector, "] .p-datatable-tbody > tr > td:nth-child(").concat(index + 1, "),\n .p-datatable[").concat(_this4.state.attributeSelector, "] .p-datatable-tfoot > tr > td:nth-child(").concat(index + 1, ") {\n ").concat(style, "\n }\n ");
|
|
});
|
|
this.styleElement.innerHTML = innerHTML;
|
|
}
|
|
}
|
|
}
|
|
}, {
|
|
key: "findParentHeader",
|
|
value: function findParentHeader(element) {
|
|
if (element.nodeName === 'TH') {
|
|
return element;
|
|
} else {
|
|
var parent = element.parentElement;
|
|
|
|
while (parent.nodeName !== 'TH') {
|
|
parent = parent.parentElement;
|
|
if (!parent) break;
|
|
}
|
|
|
|
return parent;
|
|
}
|
|
}
|
|
}, {
|
|
key: "getGroupRowSortField",
|
|
value: function getGroupRowSortField() {
|
|
return this.props.sortMode === 'single' ? this.props.sortField : this.state.groupRowsSortMeta ? this.state.groupRowsSortMeta.field : null;
|
|
}
|
|
}, {
|
|
key: "getSelectableData",
|
|
value: function getSelectableData(val) {
|
|
var _this5 = this;
|
|
|
|
if (this.props.showSelectionElement || this.props.isDataSelectable) {
|
|
return val.filter(function (data, index) {
|
|
var isSelectable = true;
|
|
if (_this5.props.showSelectionElement) isSelectable = _this5.props.showSelectionElement({
|
|
rowIndex: index,
|
|
props: _this5.props
|
|
});
|
|
if (_this5.props.isDataSelectable && isSelectable) isSelectable = _this5.props.isDataSelectable({
|
|
data: data,
|
|
index: index
|
|
});
|
|
return isSelectable;
|
|
});
|
|
}
|
|
|
|
return val;
|
|
}
|
|
}, {
|
|
key: "allRowsSelected",
|
|
value: function allRowsSelected(processedData) {
|
|
var _this6 = this;
|
|
|
|
if (this.props.onSelectAllChange) {
|
|
return this.props.selectAll;
|
|
} else {
|
|
var data = this.props.selectionPageOnly ? this.dataToRender(processedData) : processedData;
|
|
var val = this.props.frozenValue ? [].concat(_toConsumableArray(this.props.frozenValue), _toConsumableArray(data)) : data;
|
|
var selectableVal = this.getSelectableData(val);
|
|
return selectableVal && this.props.selection && selectableVal.every(function (sv) {
|
|
return _this6.props.selection.some(function (s) {
|
|
return _this6.isEquals(s, sv);
|
|
});
|
|
});
|
|
}
|
|
}
|
|
}, {
|
|
key: "getSelectionModeInColumn",
|
|
value: function getSelectionModeInColumn(columns) {
|
|
if (columns) {
|
|
var col = columns.find(function (c) {
|
|
return !!c.props.selectionMode;
|
|
});
|
|
return col ? col.props.selectionMode : null;
|
|
}
|
|
|
|
return null;
|
|
}
|
|
}, {
|
|
key: "findColumnByKey",
|
|
value: function findColumnByKey(columns, key) {
|
|
return ObjectUtils.isNotEmpty(columns) ? columns.find(function (col) {
|
|
return col.props.columnKey === key || col.props.field === key;
|
|
}) : null;
|
|
}
|
|
}, {
|
|
key: "getTotalRecords",
|
|
value: function getTotalRecords(data) {
|
|
return this.props.lazy ? this.props.totalRecords : data ? data.length : 0;
|
|
}
|
|
}, {
|
|
key: "onEditingMetaChange",
|
|
value: function onEditingMetaChange(e) {
|
|
var rowData = e.rowData,
|
|
field = e.field,
|
|
rowIndex = e.rowIndex,
|
|
editing = e.editing;
|
|
|
|
var editingMeta = _objectSpread({}, this.state.editingMeta);
|
|
|
|
var meta = editingMeta[rowIndex];
|
|
|
|
if (editing) {
|
|
!meta && (meta = editingMeta[rowIndex] = {
|
|
data: _objectSpread({}, rowData),
|
|
fields: []
|
|
});
|
|
meta['fields'].push(field);
|
|
} else if (meta) {
|
|
var fields = meta['fields'].filter(function (f) {
|
|
return f !== field;
|
|
});
|
|
!fields.length ? delete editingMeta[rowIndex] : meta['fields'] = fields;
|
|
}
|
|
|
|
this.setState({
|
|
editingMeta: editingMeta
|
|
});
|
|
}
|
|
}, {
|
|
key: "clearEditingMetaData",
|
|
value: function clearEditingMetaData() {
|
|
if (this.props.editMode && ObjectUtils.isNotEmpty(this.state.editingMeta)) {
|
|
this.setState({
|
|
editingMeta: {}
|
|
});
|
|
}
|
|
}
|
|
}, {
|
|
key: "onColumnResizeStart",
|
|
value: function onColumnResizeStart(e) {
|
|
var event = e.originalEvent,
|
|
column = e.column;
|
|
var containerLeft = DomHandler.getOffset(this.el).left;
|
|
this.resizeColumn = column;
|
|
this.resizeColumnElement = event.currentTarget.parentElement;
|
|
this.columnResizing = true;
|
|
this.lastResizeHelperX = event.pageX - containerLeft + this.el.scrollLeft;
|
|
this.bindColumnResizeEvents();
|
|
}
|
|
}, {
|
|
key: "onColumnResize",
|
|
value: function onColumnResize(event) {
|
|
var containerLeft = DomHandler.getOffset(this.el).left;
|
|
DomHandler.addClass(this.el, 'p-unselectable-text');
|
|
this.resizeHelper.style.height = this.el.offsetHeight + 'px';
|
|
this.resizeHelper.style.top = 0 + 'px';
|
|
this.resizeHelper.style.left = event.pageX - containerLeft + this.el.scrollLeft + 'px';
|
|
this.resizeHelper.style.display = 'block';
|
|
}
|
|
}, {
|
|
key: "onColumnResizeEnd",
|
|
value: function onColumnResizeEnd() {
|
|
var delta = this.resizeHelper.offsetLeft - this.lastResizeHelperX;
|
|
var columnWidth = this.resizeColumnElement.offsetWidth;
|
|
var newColumnWidth = columnWidth + delta;
|
|
var minWidth = this.resizeColumnElement.style.minWidth || 15;
|
|
|
|
if (columnWidth + delta > parseInt(minWidth, 10)) {
|
|
if (this.props.columnResizeMode === 'fit') {
|
|
var nextColumn = this.resizeColumnElement.nextElementSibling;
|
|
var nextColumnWidth = nextColumn.offsetWidth - delta;
|
|
|
|
if (newColumnWidth > 15 && nextColumnWidth > 15) {
|
|
this.resizeTableCells(newColumnWidth, nextColumnWidth);
|
|
}
|
|
} else if (this.props.columnResizeMode === 'expand') {
|
|
var tableWidth = this.table.offsetWidth + delta + 'px';
|
|
this.table.style.width = tableWidth;
|
|
this.table.style.minWidth = tableWidth;
|
|
this.resizeTableCells(newColumnWidth);
|
|
}
|
|
|
|
if (this.props.onColumnResizeEnd) {
|
|
this.props.onColumnResizeEnd({
|
|
element: this.resizeColumnElement,
|
|
column: this.resizeColumn,
|
|
delta: delta
|
|
});
|
|
}
|
|
|
|
if (this.isStateful()) {
|
|
this.saveState();
|
|
}
|
|
}
|
|
|
|
this.resizeHelper.style.display = 'none';
|
|
this.resizeColumn = null;
|
|
this.resizeColumnElement = null;
|
|
DomHandler.removeClass(this.el, 'p-unselectable-text');
|
|
this.unbindColumnResizeEvents();
|
|
}
|
|
}, {
|
|
key: "resizeTableCells",
|
|
value: function resizeTableCells(newColumnWidth, nextColumnWidth) {
|
|
var _this7 = this;
|
|
|
|
var widths = [];
|
|
var colIndex = DomHandler.index(this.resizeColumnElement);
|
|
var headers = DomHandler.find(this.table, '.p-datatable-thead > tr > th');
|
|
headers.forEach(function (header) {
|
|
return widths.push(DomHandler.getOuterWidth(header));
|
|
});
|
|
this.destroyStyleElement();
|
|
this.createStyleElement();
|
|
var innerHTML = '';
|
|
widths.forEach(function (width, index) {
|
|
var colWidth = index === colIndex ? newColumnWidth : nextColumnWidth && index === colIndex + 1 ? nextColumnWidth : width;
|
|
var style = _this7.props.scrollable ? "flex: 1 1 ".concat(colWidth, "px !important") : "width: ".concat(colWidth, "px !important");
|
|
innerHTML += "\n .p-datatable[".concat(_this7.state.attributeSelector, "] .p-datatable-thead > tr > th:nth-child(").concat(index + 1, "),\n .p-datatable[").concat(_this7.state.attributeSelector, "] .p-datatable-tbody > tr > td:nth-child(").concat(index + 1, "),\n .p-datatable[").concat(_this7.state.attributeSelector, "] .p-datatable-tfoot > tr > td:nth-child(").concat(index + 1, ") {\n ").concat(style, "\n }\n ");
|
|
});
|
|
this.styleElement.innerHTML = innerHTML;
|
|
}
|
|
}, {
|
|
key: "bindColumnResizeEvents",
|
|
value: function bindColumnResizeEvents() {
|
|
var _this8 = this;
|
|
|
|
if (!this.documentColumnResizeListener) {
|
|
this.documentColumnResizeListener = document.addEventListener('mousemove', function (event) {
|
|
if (_this8.columnResizing) {
|
|
_this8.onColumnResize(event);
|
|
}
|
|
});
|
|
}
|
|
|
|
if (!this.documentColumnResizeEndListener) {
|
|
this.documentColumnResizeEndListener = document.addEventListener('mouseup', function () {
|
|
if (_this8.columnResizing) {
|
|
_this8.columnResizing = false;
|
|
|
|
_this8.onColumnResizeEnd();
|
|
}
|
|
});
|
|
}
|
|
}
|
|
}, {
|
|
key: "unbindColumnResizeEvents",
|
|
value: function unbindColumnResizeEvents() {
|
|
if (this.documentColumnResizeListener) {
|
|
document.removeEventListener('document', this.documentColumnResizeListener);
|
|
this.documentColumnResizeListener = null;
|
|
}
|
|
|
|
if (this.documentColumnResizeEndListener) {
|
|
document.removeEventListener('document', this.documentColumnResizeEndListener);
|
|
this.documentColumnResizeEndListener = null;
|
|
}
|
|
}
|
|
}, {
|
|
key: "onColumnHeaderMouseDown",
|
|
value: function onColumnHeaderMouseDown(e) {
|
|
DomHandler.clearSelection();
|
|
var event = e.originalEvent,
|
|
column = e.column;
|
|
|
|
if (this.props.reorderableColumns && this.getColumnProp(column, 'reorderable') !== false) {
|
|
if (event.target.nodeName === 'INPUT' || event.target.nodeName === 'TEXTAREA' || DomHandler.hasClass(event.target, 'p-column-resizer')) event.currentTarget.draggable = false;else event.currentTarget.draggable = true;
|
|
}
|
|
}
|
|
}, {
|
|
key: "onColumnHeaderCheckboxChange",
|
|
value: function onColumnHeaderCheckboxChange(e, processedData) {
|
|
var _this9 = this;
|
|
|
|
if (this.props.onSelectAllChange) {
|
|
this.props.onSelectAllChange(e);
|
|
} else {
|
|
var originalEvent = e.originalEvent,
|
|
checked = e.checked;
|
|
var data = this.props.selectionPageOnly ? this.dataToRender(processedData) : processedData;
|
|
var selection = this.props.selectionPageOnly && this.props.selection ? this.props.selection.filter(function (s) {
|
|
return !data.some(function (d) {
|
|
return _this9.isEquals(s, d);
|
|
});
|
|
}) : [];
|
|
|
|
if (checked) {
|
|
selection = this.props.frozenValue ? [].concat(_toConsumableArray(selection), _toConsumableArray(this.props.frozenValue), _toConsumableArray(data)) : [].concat(_toConsumableArray(selection), _toConsumableArray(data));
|
|
selection = this.getSelectableData(selection);
|
|
this.props.onAllRowsSelect && this.props.onAllRowsSelect({
|
|
originalEvent: originalEvent,
|
|
data: selection,
|
|
type: 'all'
|
|
});
|
|
} else {
|
|
this.props.onAllRowsUnselect && this.props.onAllRowsUnselect({
|
|
originalEvent: originalEvent,
|
|
data: selection,
|
|
type: 'all'
|
|
});
|
|
}
|
|
|
|
if (this.props.onSelectionChange) {
|
|
this.props.onSelectionChange({
|
|
originalEvent: originalEvent,
|
|
value: selection,
|
|
type: 'all'
|
|
});
|
|
}
|
|
}
|
|
}
|
|
}, {
|
|
key: "onColumnHeaderDragStart",
|
|
value: function onColumnHeaderDragStart(e) {
|
|
var event = e.originalEvent,
|
|
column = e.column;
|
|
|
|
if (this.columnResizing) {
|
|
event.preventDefault();
|
|
return;
|
|
}
|
|
|
|
this.colReorderIconWidth = DomHandler.getHiddenElementOuterWidth(this.reorderIndicatorUp);
|
|
this.colReorderIconHeight = DomHandler.getHiddenElementOuterHeight(this.reorderIndicatorUp);
|
|
this.draggedColumn = column;
|
|
this.draggedColumnElement = this.findParentHeader(event.currentTarget);
|
|
event.dataTransfer.setData('text', 'b'); // Firefox requires this to make dragging possible
|
|
}
|
|
}, {
|
|
key: "onColumnHeaderDragOver",
|
|
value: function onColumnHeaderDragOver(e) {
|
|
var event = e.originalEvent;
|
|
var dropHeader = this.findParentHeader(event.currentTarget);
|
|
|
|
if (this.props.reorderableColumns && this.draggedColumnElement && dropHeader) {
|
|
event.preventDefault();
|
|
|
|
if (this.draggedColumnElement !== dropHeader) {
|
|
var containerOffset = DomHandler.getOffset(this.el);
|
|
var dropHeaderOffset = DomHandler.getOffset(dropHeader);
|
|
var targetLeft = dropHeaderOffset.left - containerOffset.left;
|
|
var columnCenter = dropHeaderOffset.left + dropHeader.offsetWidth / 2;
|
|
this.reorderIndicatorUp.style.top = dropHeaderOffset.top - containerOffset.top - (this.colReorderIconHeight - 1) + 'px';
|
|
this.reorderIndicatorDown.style.top = dropHeaderOffset.top - containerOffset.top + dropHeader.offsetHeight + 'px';
|
|
|
|
if (event.pageX > columnCenter) {
|
|
this.reorderIndicatorUp.style.left = targetLeft + dropHeader.offsetWidth - Math.ceil(this.colReorderIconWidth / 2) + 'px';
|
|
this.reorderIndicatorDown.style.left = targetLeft + dropHeader.offsetWidth - Math.ceil(this.colReorderIconWidth / 2) + 'px';
|
|
this.dropPosition = 1;
|
|
} else {
|
|
this.reorderIndicatorUp.style.left = targetLeft - Math.ceil(this.colReorderIconWidth / 2) + 'px';
|
|
this.reorderIndicatorDown.style.left = targetLeft - Math.ceil(this.colReorderIconWidth / 2) + 'px';
|
|
this.dropPosition = -1;
|
|
}
|
|
|
|
this.reorderIndicatorUp.style.display = 'block';
|
|
this.reorderIndicatorDown.style.display = 'block';
|
|
}
|
|
}
|
|
}
|
|
}, {
|
|
key: "onColumnHeaderDragLeave",
|
|
value: function onColumnHeaderDragLeave(e) {
|
|
var event = e.originalEvent;
|
|
|
|
if (this.props.reorderableColumns && this.draggedColumnElement) {
|
|
event.preventDefault();
|
|
this.reorderIndicatorUp.style.display = 'none';
|
|
this.reorderIndicatorDown.style.display = 'none';
|
|
}
|
|
}
|
|
}, {
|
|
key: "onColumnHeaderDrop",
|
|
value: function onColumnHeaderDrop(e) {
|
|
var _this10 = this;
|
|
|
|
var event = e.originalEvent,
|
|
column = e.column;
|
|
event.preventDefault();
|
|
|
|
if (this.draggedColumnElement) {
|
|
var dragIndex = DomHandler.index(this.draggedColumnElement);
|
|
var dropIndex = DomHandler.index(this.findParentHeader(event.currentTarget));
|
|
var allowDrop = dragIndex !== dropIndex;
|
|
|
|
if (allowDrop && (dropIndex - dragIndex === 1 && this.dropPosition === -1 || dragIndex - dropIndex === 1 && this.dropPosition === 1)) {
|
|
allowDrop = false;
|
|
}
|
|
|
|
if (allowDrop) {
|
|
var columns = this.getColumns();
|
|
|
|
var isSameColumn = function isSameColumn(col1, col2) {
|
|
return col1.props.columnKey || col2.props.columnKey ? ObjectUtils.equals(col1.props, col2.props, 'columnKey') : ObjectUtils.equals(col1.props, col2.props, 'field');
|
|
};
|
|
|
|
var dragColIndex = columns.findIndex(function (child) {
|
|
return isSameColumn(child, _this10.draggedColumn);
|
|
});
|
|
var dropColIndex = columns.findIndex(function (child) {
|
|
return isSameColumn(child, column);
|
|
});
|
|
|
|
if (dropColIndex < dragColIndex && this.dropPosition === 1) {
|
|
dropColIndex++;
|
|
}
|
|
|
|
if (dropColIndex > dragColIndex && this.dropPosition === -1) {
|
|
dropColIndex--;
|
|
}
|
|
|
|
ObjectUtils.reorderArray(columns, dragColIndex, dropColIndex);
|
|
var columnOrder = columns.reduce(function (orders, col) {
|
|
orders.push(col.props.columnKey || col.props.field);
|
|
return orders;
|
|
}, []);
|
|
this.setState({
|
|
columnOrder: columnOrder
|
|
});
|
|
|
|
if (this.props.onColReorder) {
|
|
this.props.onColReorder({
|
|
originalEvent: event,
|
|
dragIndex: dragColIndex,
|
|
dropIndex: dropColIndex,
|
|
columns: columns
|
|
});
|
|
}
|
|
}
|
|
|
|
this.reorderIndicatorUp.style.display = 'none';
|
|
this.reorderIndicatorDown.style.display = 'none';
|
|
this.draggedColumnElement.draggable = false;
|
|
this.draggedColumnElement = null;
|
|
this.draggedColumn = null;
|
|
this.dropPosition = null;
|
|
}
|
|
}
|
|
}, {
|
|
key: "createStyleElement",
|
|
value: function createStyleElement() {
|
|
this.styleElement = DomHandler.createInlineStyle(PrimeReact.nonce);
|
|
}
|
|
}, {
|
|
key: "createResponsiveStyle",
|
|
value: function createResponsiveStyle() {
|
|
if (!this.responsiveStyleElement) {
|
|
this.responsiveStyleElement = DomHandler.createInlineStyle(PrimeReact.nonce);
|
|
var innerHTML = "\n@media screen and (max-width: ".concat(this.props.breakpoint, ") {\n .p-datatable[").concat(this.state.attributeSelector, "] .p-datatable-thead > tr > th,\n .p-datatable[").concat(this.state.attributeSelector, "] .p-datatable-tfoot > tr > td {\n display: none !important;\n }\n\n .p-datatable[").concat(this.state.attributeSelector, "] .p-datatable-tbody > tr > td {\n display: flex;\n width: 100% !important;\n align-items: center;\n justify-content: space-between;\n }\n\n .p-datatable[").concat(this.state.attributeSelector, "] .p-datatable-tbody > tr > td:not(:last-child) {\n border: 0 none;\n }\n\n .p-datatable[").concat(this.state.attributeSelector, "].p-datatable-gridlines .p-datatable-tbody > tr > td:last-child {\n border-top: 0;\n border-right: 0;\n border-left: 0;\n }\n\n .p-datatable[").concat(this.state.attributeSelector, "] .p-datatable-tbody > tr > td > .p-column-title {\n display: block;\n }\n}\n");
|
|
this.responsiveStyleElement.innerHTML = innerHTML;
|
|
}
|
|
}
|
|
}, {
|
|
key: "destroyResponsiveStyle",
|
|
value: function destroyResponsiveStyle() {
|
|
this.responsiveStyleElement = DomHandler.removeInlineStyle(this.responsiveStyleElement);
|
|
}
|
|
}, {
|
|
key: "destroyStyleElement",
|
|
value: function destroyStyleElement() {
|
|
this.styleElement = DomHandler.removeInlineStyle(this.styleElement);
|
|
}
|
|
}, {
|
|
key: "onPageChange",
|
|
value: function onPageChange(e) {
|
|
this.clearEditingMetaData();
|
|
if (this.props.onPage) this.props.onPage(this.createEvent(e));else this.setState({
|
|
first: e.first,
|
|
rows: e.rows
|
|
});
|
|
|
|
if (this.props.onValueChange) {
|
|
this.props.onValueChange(this.processedData());
|
|
}
|
|
}
|
|
}, {
|
|
key: "onSortChange",
|
|
value: function onSortChange(e) {
|
|
this.clearEditingMetaData();
|
|
var event = e.originalEvent,
|
|
column = e.column,
|
|
sortableDisabledFields = e.sortableDisabledFields;
|
|
var sortField = column.props.sortField || column.props.field;
|
|
var sortOrder = this.props.defaultSortOrder;
|
|
var multiSortMeta;
|
|
var eventMeta;
|
|
this.columnSortable = column.props.sortable;
|
|
this.columnSortFunction = column.props.sortFunction;
|
|
this.columnField = column.props.sortField;
|
|
|
|
if (this.props.sortMode === 'multiple') {
|
|
var metaKey = event.metaKey || event.ctrlKey;
|
|
multiSortMeta = _toConsumableArray(this.getMultiSortMeta());
|
|
var sortMeta = multiSortMeta.find(function (sortMeta) {
|
|
return sortMeta.field === sortField;
|
|
});
|
|
sortOrder = sortMeta ? this.getCalculatedSortOrder(sortMeta.order) : sortOrder;
|
|
var newMetaData = {
|
|
field: sortField,
|
|
order: sortOrder
|
|
};
|
|
|
|
if (sortOrder) {
|
|
multiSortMeta = metaKey ? multiSortMeta : multiSortMeta.filter(function (meta) {
|
|
return sortableDisabledFields.some(function (field) {
|
|
return field === meta.field;
|
|
});
|
|
});
|
|
this.addSortMeta(newMetaData, multiSortMeta);
|
|
} else if (this.props.removableSort) {
|
|
this.removeSortMeta(newMetaData, multiSortMeta);
|
|
}
|
|
|
|
eventMeta = {
|
|
multiSortMeta: multiSortMeta
|
|
};
|
|
} else {
|
|
sortOrder = this.getSortField() === sortField ? this.getCalculatedSortOrder(this.getSortOrder()) : sortOrder;
|
|
|
|
if (this.props.removableSort) {
|
|
sortField = sortOrder ? sortField : null;
|
|
}
|
|
|
|
eventMeta = {
|
|
sortField: sortField,
|
|
sortOrder: sortOrder
|
|
};
|
|
}
|
|
|
|
if (this.props.onSort) {
|
|
this.props.onSort(this.createEvent(eventMeta));
|
|
} else {
|
|
eventMeta.first = 0;
|
|
this.setState(eventMeta);
|
|
}
|
|
|
|
if (this.props.onValueChange) {
|
|
this.props.onValueChange(this.processedData({
|
|
sortField: sortField,
|
|
sortOrder: sortOrder,
|
|
multiSortMeta: multiSortMeta
|
|
}));
|
|
}
|
|
}
|
|
}, {
|
|
key: "getCalculatedSortOrder",
|
|
value: function getCalculatedSortOrder(currentOrder) {
|
|
return this.props.removableSort ? this.props.defaultSortOrder === currentOrder ? currentOrder * -1 : 0 : currentOrder * -1;
|
|
}
|
|
}, {
|
|
key: "compareValuesOnSort",
|
|
value: function compareValuesOnSort(value1, value2) {
|
|
var result = null;
|
|
if (value1 == null && value2 != null) result = -1;else if (value1 != null && value2 == null) result = 1;else if (value1 == null && value2 == null) result = 0;else if (typeof value1 === 'string' && typeof value2 === 'string') result = value1.localeCompare(value2, undefined, {
|
|
numeric: true
|
|
});else result = value1 < value2 ? -1 : value1 > value2 ? 1 : 0;
|
|
return result;
|
|
}
|
|
}, {
|
|
key: "addSortMeta",
|
|
value: function addSortMeta(meta, multiSortMeta) {
|
|
var index = multiSortMeta.findIndex(function (sortMeta) {
|
|
return sortMeta.field === meta.field;
|
|
});
|
|
if (index >= 0) multiSortMeta[index] = meta;else multiSortMeta.push(meta);
|
|
}
|
|
}, {
|
|
key: "removeSortMeta",
|
|
value: function removeSortMeta(meta, multiSortMeta) {
|
|
var index = multiSortMeta.findIndex(function (sortMeta) {
|
|
return sortMeta.field === meta.field;
|
|
});
|
|
|
|
if (index >= 0) {
|
|
multiSortMeta.splice(index, 1);
|
|
}
|
|
|
|
multiSortMeta = multiSortMeta.length > 0 ? multiSortMeta : null;
|
|
}
|
|
}, {
|
|
key: "sortSingle",
|
|
value: function sortSingle(data, field, order) {
|
|
var _this11 = this;
|
|
|
|
if (this.props.groupRowsBy && this.props.groupRowsBy === this.props.sortField) {
|
|
var multiSortMeta = [{
|
|
field: this.props.sortField,
|
|
order: this.props.sortOrder || this.props.defaultSortOrder
|
|
}];
|
|
this.props.sortField !== field && multiSortMeta.push({
|
|
field: field,
|
|
order: order
|
|
});
|
|
return this.sortMultiple(data, multiSortMeta);
|
|
}
|
|
|
|
var value = _toConsumableArray(data);
|
|
|
|
if (this.columnSortable && this.columnSortFunction) {
|
|
value = this.columnSortFunction({
|
|
field: field,
|
|
order: order
|
|
});
|
|
} else {
|
|
value.sort(function (data1, data2) {
|
|
var value1 = ObjectUtils.resolveFieldData(data1, field);
|
|
var value2 = ObjectUtils.resolveFieldData(data2, field);
|
|
|
|
var result = _this11.compareValuesOnSort(value1, value2);
|
|
|
|
return order * result;
|
|
});
|
|
}
|
|
|
|
return value;
|
|
}
|
|
}, {
|
|
key: "sortMultiple",
|
|
value: function sortMultiple(data) {
|
|
var _this12 = this;
|
|
|
|
var multiSortMeta = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
|
|
|
if (this.props.groupRowsBy && (this.groupRowsSortMeta || multiSortMeta.length && this.props.groupRowsBy === multiSortMeta[0].field)) {
|
|
var firstSortMeta = multiSortMeta[0];
|
|
!this.groupRowsSortMeta && (this.groupRowsSortMeta = firstSortMeta);
|
|
|
|
if (firstSortMeta.field !== this.groupRowsSortMeta.field) {
|
|
multiSortMeta = [this.groupRowsSortMeta].concat(_toConsumableArray(multiSortMeta));
|
|
}
|
|
}
|
|
|
|
var value = _toConsumableArray(data);
|
|
|
|
if (this.columnSortable && this.columnSortFunction) {
|
|
var meta = multiSortMeta.find(function (meta) {
|
|
return meta.field === _this12.columnField;
|
|
});
|
|
var field = this.columnField;
|
|
var order = meta ? meta.order : this.defaultSortOrder;
|
|
value = this.columnSortFunction({
|
|
field: field,
|
|
order: order
|
|
});
|
|
} else {
|
|
value.sort(function (data1, data2) {
|
|
return _this12.multisortField(data1, data2, multiSortMeta, 0);
|
|
});
|
|
}
|
|
|
|
return value;
|
|
}
|
|
}, {
|
|
key: "multisortField",
|
|
value: function multisortField(data1, data2, multiSortMeta, index) {
|
|
var value1 = ObjectUtils.resolveFieldData(data1, multiSortMeta[index].field);
|
|
var value2 = ObjectUtils.resolveFieldData(data2, multiSortMeta[index].field);
|
|
|
|
if (value1 === value2) {
|
|
return multiSortMeta.length - 1 > index ? this.multisortField(data1, data2, multiSortMeta, index + 1) : 0;
|
|
}
|
|
|
|
var result = this.compareValuesOnSort(value1, value2);
|
|
return multiSortMeta[index].order * result;
|
|
}
|
|
}, {
|
|
key: "onFilterChange",
|
|
value: function onFilterChange(filters) {
|
|
this.clearEditingMetaData();
|
|
this.setState({
|
|
d_filters: filters
|
|
});
|
|
}
|
|
}, {
|
|
key: "onFilterApply",
|
|
value: function onFilterApply() {
|
|
var _this13 = this;
|
|
|
|
clearTimeout(this.filterTimeout);
|
|
this.filterTimeout = setTimeout(function () {
|
|
var filters = _this13.cloneFilters(_this13.state.d_filters);
|
|
|
|
if (_this13.props.onFilter) {
|
|
_this13.props.onFilter(_this13.createEvent({
|
|
filters: filters
|
|
}));
|
|
} else {
|
|
_this13.setState({
|
|
first: 0,
|
|
filters: filters
|
|
});
|
|
}
|
|
|
|
if (_this13.props.onValueChange) {
|
|
_this13.props.onValueChange(_this13.processedData({
|
|
filters: filters
|
|
}));
|
|
}
|
|
}, this.props.filterDelay);
|
|
}
|
|
}, {
|
|
key: "filterLocal",
|
|
value: function filterLocal(data, filters) {
|
|
if (!data) return;
|
|
filters = filters || {};
|
|
var columns = this.getColumns();
|
|
var filteredValue = [];
|
|
var isGlobalFilter = filters['global'] || this.props.globalFilter;
|
|
var globalFilterFieldsArray;
|
|
|
|
if (isGlobalFilter) {
|
|
globalFilterFieldsArray = this.props.globalFilterFields || columns.filter(function (col) {
|
|
return !col.props.excludeGlobalFilter;
|
|
}).map(function (col) {
|
|
return col.props.filterField || col.props.field;
|
|
});
|
|
}
|
|
|
|
for (var i = 0; i < data.length; i++) {
|
|
var localMatch = true;
|
|
var globalMatch = false;
|
|
var localFiltered = false;
|
|
|
|
for (var prop in filters) {
|
|
if (Object.prototype.hasOwnProperty.call(filters, prop) && prop !== 'global') {
|
|
localFiltered = true;
|
|
var filterField = prop;
|
|
var filterMeta = filters[filterField];
|
|
|
|
if (filterMeta.operator) {
|
|
for (var j = 0; j < filterMeta.constraints.length; j++) {
|
|
var filterConstraint = filterMeta.constraints[j];
|
|
localMatch = this.executeLocalFilter(filterField, data[i], filterConstraint, j);
|
|
|
|
if (filterMeta.operator === FilterOperator.OR && localMatch || filterMeta.operator === FilterOperator.AND && !localMatch) {
|
|
break;
|
|
}
|
|
}
|
|
} else {
|
|
localMatch = this.executeLocalFilter(filterField, data[i], filterMeta, 0);
|
|
}
|
|
|
|
if (!localMatch) {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (isGlobalFilter && !globalMatch && globalFilterFieldsArray) {
|
|
for (var _j = 0; _j < globalFilterFieldsArray.length; _j++) {
|
|
var globalFilterField = globalFilterFieldsArray[_j];
|
|
var matchMode = filters['global'] ? filters['global'].matchMode : FilterMatchMode.CONTAINS;
|
|
var value = filters['global'] ? filters['global'].value : this.props.globalFilter;
|
|
globalMatch = FilterService.filters[matchMode](ObjectUtils.resolveFieldData(data[i], globalFilterField), value, this.props.filterLocale);
|
|
|
|
if (globalMatch) {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
var matches = void 0;
|
|
|
|
if (isGlobalFilter) {
|
|
matches = localFiltered ? localFiltered && localMatch && globalMatch : globalMatch;
|
|
} else {
|
|
matches = localFiltered && localMatch;
|
|
}
|
|
|
|
if (matches) {
|
|
filteredValue.push(data[i]);
|
|
}
|
|
}
|
|
|
|
if (filteredValue.length === this.props.value.length) {
|
|
filteredValue = data;
|
|
}
|
|
|
|
return filteredValue;
|
|
}
|
|
}, {
|
|
key: "executeLocalFilter",
|
|
value: function executeLocalFilter(field, rowData, filterMeta, index) {
|
|
var filterValue = filterMeta.value;
|
|
var filterMatchMode = filterMeta.matchMode === 'custom' ? "custom_".concat(field) : filterMeta.matchMode || FilterMatchMode.STARTS_WITH;
|
|
var dataFieldValue = ObjectUtils.resolveFieldData(rowData, field);
|
|
var filterConstraint = FilterService.filters[filterMatchMode];
|
|
return filterConstraint(dataFieldValue, filterValue, this.props.filterLocale, index);
|
|
}
|
|
}, {
|
|
key: "cloneFilters",
|
|
value: function cloneFilters(filters) {
|
|
var _this14 = this;
|
|
|
|
filters = filters || this.props.filters;
|
|
var cloned = {};
|
|
|
|
if (filters) {
|
|
Object.entries(filters).forEach(function (_ref) {
|
|
var _ref2 = _slicedToArray(_ref, 2),
|
|
prop = _ref2[0],
|
|
value = _ref2[1];
|
|
|
|
cloned[prop] = value.operator ? {
|
|
operator: value.operator,
|
|
constraints: value.constraints.map(function (constraint) {
|
|
return _objectSpread({}, constraint);
|
|
})
|
|
} : _objectSpread({}, value);
|
|
});
|
|
} else {
|
|
var columns = this.getColumns();
|
|
cloned = columns.reduce(function (_filters, col) {
|
|
var field = col.props.filterField || col.props.field;
|
|
var filterFunction = col.props.filterFunction;
|
|
var dataType = col.props.dataType;
|
|
var matchMode = col.props.filterMatchMode || (PrimeReact.filterMatchModeOptions[dataType] ? PrimeReact.filterMatchModeOptions[dataType][0] : FilterMatchMode.STARTS_WITH);
|
|
var constraint = {
|
|
value: null,
|
|
matchMode: matchMode
|
|
};
|
|
|
|
if (filterFunction) {
|
|
FilterService.register("custom_".concat(field), function () {
|
|
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
args[_key] = arguments[_key];
|
|
}
|
|
|
|
return filterFunction.apply(void 0, args.concat([{
|
|
column: col
|
|
}]));
|
|
});
|
|
}
|
|
|
|
_filters[field] = _this14.props.filterDisplay === 'menu' ? {
|
|
operator: FilterOperator.AND,
|
|
constraints: [constraint]
|
|
} : constraint;
|
|
return _filters;
|
|
}, {});
|
|
}
|
|
|
|
return cloned;
|
|
}
|
|
}, {
|
|
key: "filter",
|
|
value: function filter(value, field, matchMode) {
|
|
var index = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;
|
|
|
|
var filters = _objectSpread({}, this.state.d_filters);
|
|
|
|
var meta = filters[field];
|
|
var constraint = meta && meta.operator ? meta.constraints[index] : meta;
|
|
constraint = meta ? {
|
|
value: value,
|
|
matchMode: matchMode || constraint.matchMode
|
|
} : {
|
|
value: value,
|
|
matchMode: matchMode
|
|
};
|
|
this.props.filterDisplay === 'menu' && meta && meta.operator ? filters[field].constraints[index] = constraint : filters[field] = constraint;
|
|
this.setState({
|
|
d_filters: filters
|
|
}, this.onFilterApply);
|
|
}
|
|
}, {
|
|
key: "reset",
|
|
value: function reset() {
|
|
var state = {
|
|
d_rows: this.props.rows,
|
|
d_filters: this.cloneFilters(this.props.filters),
|
|
groupRowsSortMeta: null,
|
|
editingMeta: {}
|
|
};
|
|
|
|
if (!this.props.onPage) {
|
|
state.first = this.props.first;
|
|
state.rows = this.props.rows;
|
|
}
|
|
|
|
if (!this.props.onSort) {
|
|
state.sortField = this.props.sortField;
|
|
state.sortOrder = this.props.sortOrder;
|
|
state.multiSortMeta = this.props.multiSortMeta;
|
|
}
|
|
|
|
if (!this.props.onFilter) {
|
|
state.filters = this.props.filters;
|
|
}
|
|
|
|
this.resetColumnOrder();
|
|
this.setState(state);
|
|
}
|
|
}, {
|
|
key: "resetColumnOrder",
|
|
value: function resetColumnOrder() {
|
|
var columns = this.getColumns(true);
|
|
var columnOrder = [];
|
|
|
|
if (columns) {
|
|
columnOrder = columns.reduce(function (orders, col) {
|
|
orders.push(col.props.columnKey || col.props.field);
|
|
return orders;
|
|
}, []);
|
|
}
|
|
|
|
this.setState({
|
|
columnOrder: columnOrder
|
|
});
|
|
}
|
|
}, {
|
|
key: "exportCSV",
|
|
value: function exportCSV(options) {
|
|
var _this15 = this;
|
|
|
|
var data;
|
|
var csv = "\uFEFF";
|
|
var columns = this.getColumns();
|
|
|
|
if (options && options.selectionOnly) {
|
|
data = this.props.selection || [];
|
|
} else {
|
|
data = [].concat(_toConsumableArray(this.props.frozenValue || []), _toConsumableArray(this.processedData() || []));
|
|
} //headers
|
|
|
|
|
|
columns.forEach(function (column, i) {
|
|
var _column$props = column.props,
|
|
field = _column$props.field,
|
|
header = _column$props.header,
|
|
exportable = _column$props.exportable;
|
|
|
|
if (exportable && field) {
|
|
csv += '"' + (header || field) + '"';
|
|
|
|
if (i < columns.length - 1) {
|
|
csv += _this15.props.csvSeparator;
|
|
}
|
|
}
|
|
}); //body
|
|
|
|
data.forEach(function (record) {
|
|
csv += '\n';
|
|
columns.forEach(function (column, i) {
|
|
var _column$props2 = column.props,
|
|
columnField = _column$props2.field,
|
|
exportField = _column$props2.exportField,
|
|
exportable = _column$props2.exportable;
|
|
var field = exportField || columnField;
|
|
|
|
if (exportable && field) {
|
|
var cellData = ObjectUtils.resolveFieldData(record, field);
|
|
|
|
if (cellData != null) {
|
|
cellData = _this15.props.exportFunction ? _this15.props.exportFunction({
|
|
data: cellData,
|
|
field: field,
|
|
rowData: record,
|
|
column: column
|
|
}) : String(cellData).replace(/"/g, '""');
|
|
} else cellData = '';
|
|
|
|
csv += '"' + cellData + '"';
|
|
|
|
if (i < columns.length - 1) {
|
|
csv += _this15.props.csvSeparator;
|
|
}
|
|
}
|
|
});
|
|
});
|
|
DomHandler.exportCSV(csv, this.props.exportFilename);
|
|
}
|
|
}, {
|
|
key: "closeEditingCell",
|
|
value: function closeEditingCell() {
|
|
if (this.props.editMode !== "row") {
|
|
document.body.click();
|
|
}
|
|
}
|
|
}, {
|
|
key: "createEvent",
|
|
value: function createEvent(event) {
|
|
return _objectSpread({
|
|
first: this.getFirst(),
|
|
rows: this.getRows(),
|
|
sortField: this.getSortField(),
|
|
sortOrder: this.getSortOrder(),
|
|
multiSortMeta: this.getMultiSortMeta(),
|
|
filters: this.getFilters()
|
|
}, event);
|
|
}
|
|
}, {
|
|
key: "processedData",
|
|
value: function processedData(localState) {
|
|
var data = this.props.value || [];
|
|
|
|
if (!this.props.lazy) {
|
|
if (data && data.length) {
|
|
var filters = localState && localState.filters || this.getFilters();
|
|
var sortField = localState && localState.sortField || this.getSortField();
|
|
var sortOrder = localState && localState.sortOrder || this.getSortOrder();
|
|
var multiSortMeta = localState && localState.multiSortMeta || this.getMultiSortMeta();
|
|
|
|
if (ObjectUtils.isNotEmpty(filters) || this.props.globalFilter) {
|
|
data = this.filterLocal(data, filters);
|
|
}
|
|
|
|
if (sortField || ObjectUtils.isNotEmpty(multiSortMeta)) {
|
|
if (this.props.sortMode === 'single') data = this.sortSingle(data, sortField, sortOrder);else if (this.props.sortMode === 'multiple') data = this.sortMultiple(data, multiSortMeta);
|
|
}
|
|
}
|
|
}
|
|
|
|
return data;
|
|
}
|
|
}, {
|
|
key: "dataToRender",
|
|
value: function dataToRender(data) {
|
|
if (data && this.props.paginator) {
|
|
var first = this.props.lazy ? 0 : this.getFirst();
|
|
return data.slice(first, first + this.getRows());
|
|
}
|
|
|
|
return data;
|
|
}
|
|
}, {
|
|
key: "componentDidMount",
|
|
value: function componentDidMount() {
|
|
var _this16 = this;
|
|
|
|
this.setState({
|
|
attributeSelector: UniqueComponentId()
|
|
}, function () {
|
|
_this16.el.setAttribute(_this16.state.attributeSelector, '');
|
|
});
|
|
|
|
if (this.props.responsiveLayout === 'stack' && !this.props.scrollable) {
|
|
this.createResponsiveStyle();
|
|
}
|
|
|
|
if (this.isStateful()) {
|
|
this.setState(this.restoreState(this.state));
|
|
|
|
if (this.props.resizableColumns) {
|
|
this.restoreColumnWidths();
|
|
}
|
|
}
|
|
}
|
|
}, {
|
|
key: "componentDidUpdate",
|
|
value: function componentDidUpdate(prevProps, prevState) {
|
|
if (this.isStateful()) {
|
|
this.saveState();
|
|
}
|
|
|
|
if (prevProps.responsiveLayout !== this.props.responsiveLayout) {
|
|
this.destroyResponsiveStyle();
|
|
|
|
if (this.props.responsiveLayout === 'stack' && !this.props.scrollable) {
|
|
this.createResponsiveStyle();
|
|
}
|
|
}
|
|
|
|
if (prevProps.filters !== this.props.filters) {
|
|
this.setState({
|
|
filters: this.cloneFilters(this.props.filters),
|
|
d_filters: this.cloneFilters(this.props.filters)
|
|
});
|
|
}
|
|
|
|
if (prevProps.globalFilter !== this.props.globalFilter) {
|
|
this.filter(this.props.globalFilter, 'global', 'contains');
|
|
}
|
|
}
|
|
}, {
|
|
key: "componentWillUnmount",
|
|
value: function componentWillUnmount() {
|
|
this.unbindColumnResizeEvents();
|
|
this.destroyStyleElement();
|
|
this.destroyResponsiveStyle();
|
|
}
|
|
}, {
|
|
key: "renderLoader",
|
|
value: function renderLoader() {
|
|
if (this.props.loading) {
|
|
var iconClassName = classNames('p-datatable-loading-icon pi-spin', this.props.loadingIcon);
|
|
return /*#__PURE__*/React.createElement("div", {
|
|
className: "p-datatable-loading-overlay p-component-overlay"
|
|
}, /*#__PURE__*/React.createElement("i", {
|
|
className: iconClassName
|
|
}));
|
|
}
|
|
|
|
return null;
|
|
}
|
|
}, {
|
|
key: "renderHeader",
|
|
value: function renderHeader() {
|
|
if (this.props.header) {
|
|
var content = ObjectUtils.getJSXElement(this.props.header, {
|
|
props: this.props
|
|
});
|
|
return /*#__PURE__*/React.createElement("div", {
|
|
className: "p-datatable-header"
|
|
}, content);
|
|
}
|
|
|
|
return null;
|
|
}
|
|
}, {
|
|
key: "renderTableHeader",
|
|
value: function renderTableHeader(options, empty) {
|
|
var sortField = this.getSortField();
|
|
var sortOrder = this.getSortOrder();
|
|
|
|
var multiSortMeta = _toConsumableArray(this.getMultiSortMeta());
|
|
|
|
var groupRowSortField = this.getGroupRowSortField();
|
|
var filters = this.state.d_filters;
|
|
var filtersStore = this.getFilters();
|
|
var processedData = options.items,
|
|
columns = options.columns;
|
|
return /*#__PURE__*/React.createElement(TableHeader, {
|
|
value: processedData,
|
|
tableProps: this.props,
|
|
columns: columns,
|
|
tabIndex: this.props.tabIndex,
|
|
empty: empty,
|
|
headerColumnGroup: this.props.headerColumnGroup,
|
|
resizableColumns: this.props.resizableColumns,
|
|
onColumnResizeStart: this.onColumnResizeStart,
|
|
onColumnResizerClick: this.props.onColumnResizerClick,
|
|
onColumnResizerDoubleClick: this.props.onColumnResizerDoubleClick,
|
|
sortMode: this.props.sortMode,
|
|
sortField: sortField,
|
|
sortOrder: sortOrder,
|
|
multiSortMeta: multiSortMeta,
|
|
groupRowsBy: this.props.groupRowsBy,
|
|
groupRowSortField: groupRowSortField,
|
|
onSortChange: this.onSortChange,
|
|
filterDisplay: this.props.filterDisplay,
|
|
filters: filters,
|
|
filtersStore: filtersStore,
|
|
onFilterChange: this.onFilterChange,
|
|
onFilterApply: this.onFilterApply,
|
|
showSelectAll: this.props.showSelectAll,
|
|
allRowsSelected: this.allRowsSelected,
|
|
onColumnCheckboxChange: this.onColumnHeaderCheckboxChange,
|
|
onColumnMouseDown: this.onColumnHeaderMouseDown,
|
|
onColumnDragStart: this.onColumnHeaderDragStart,
|
|
onColumnDragOver: this.onColumnHeaderDragOver,
|
|
onColumnDragLeave: this.onColumnHeaderDragLeave,
|
|
onColumnDrop: this.onColumnHeaderDrop,
|
|
rowGroupMode: this.props.rowGroupMode,
|
|
reorderableColumns: this.props.reorderableColumns
|
|
});
|
|
}
|
|
}, {
|
|
key: "renderTableBody",
|
|
value: function renderTableBody(options, selectionModeInColumn, empty, isVirtualScrollerDisabled) {
|
|
var tableSelector = this.state.attributeSelector;
|
|
var first = this.getFirst();
|
|
var editingMeta = this.state.editingMeta;
|
|
var rows = options.rows,
|
|
columns = options.columns,
|
|
contentRef = options.contentRef,
|
|
className = options.className;
|
|
var frozenBody = this.props.frozenValue && /*#__PURE__*/React.createElement(TableBody, {
|
|
value: this.props.frozenValue,
|
|
className: "p-datatable-frozen-tbody",
|
|
frozenRow: true,
|
|
tableProps: this.props,
|
|
tableSelector: tableSelector,
|
|
columns: columns,
|
|
selectionModeInColumn: selectionModeInColumn,
|
|
first: first,
|
|
editingMeta: editingMeta,
|
|
onEditingMetaChange: this.onEditingMetaChange,
|
|
tabIndex: this.props.tabIndex,
|
|
onRowClick: this.props.onRowClick,
|
|
onRowDoubleClick: this.props.onRowDoubleClick,
|
|
onCellClick: this.props.onCellClick,
|
|
selection: this.props.selection,
|
|
onSelectionChange: this.props.onSelectionChange,
|
|
lazy: this.props.lazy,
|
|
paginator: this.props.paginator,
|
|
onCellSelect: this.props.onCellSelect,
|
|
onCellUnselect: this.props.onCellUnselect,
|
|
onRowSelect: this.props.onRowSelect,
|
|
onRowUnselect: this.props.onRowUnselect,
|
|
dragSelection: this.props.dragSelection,
|
|
onContextMenu: this.props.onContextMenu,
|
|
onContextMenuSelectionChange: this.props.onContextMenuSelectionChange,
|
|
metaKeySelection: this.props.metaKeySelection,
|
|
selectionMode: this.props.selectionMode,
|
|
cellSelection: this.props.cellSelection,
|
|
contextMenuSelection: this.props.contextMenuSelection,
|
|
dataKey: this.props.dataKey,
|
|
expandedRows: this.props.expandedRows,
|
|
onRowCollapse: this.props.onRowCollapse,
|
|
onRowExpand: this.props.onRowExpand,
|
|
onRowToggle: this.props.onRowToggle,
|
|
editMode: this.props.editMode,
|
|
editingRows: this.props.editingRows,
|
|
onRowReorder: this.props.onRowReorder,
|
|
scrollable: this.props.scrollable,
|
|
rowGroupMode: this.props.rowGroupMode,
|
|
groupRowsBy: this.props.groupRowsBy,
|
|
expandableRowGroups: this.props.expandableRowGroups,
|
|
loading: this.props.loading,
|
|
emptyMessage: this.props.emptyMessage,
|
|
rowGroupHeaderTemplate: this.props.rowGroupHeaderTemplate,
|
|
rowExpansionTemplate: this.props.rowExpansionTemplate,
|
|
rowGroupFooterTemplate: this.props.rowGroupFooterTemplate,
|
|
onRowEditChange: this.props.onRowEditChange,
|
|
compareSelectionBy: this.props.compareSelectionBy,
|
|
selectOnEdit: this.props.selectOnEdit,
|
|
onRowEditInit: this.props.onRowEditInit,
|
|
rowEditValidator: this.props.rowEditValidator,
|
|
onRowEditSave: this.props.onRowEditSave,
|
|
onRowEditComplete: this.props.onRowEditComplete,
|
|
onRowEditCancel: this.props.onRowEditCancel,
|
|
cellClassName: this.props.cellClassName,
|
|
responsiveLayout: this.props.responsiveLayout,
|
|
selectionAutoFocus: this.props.selectionAutoFocus,
|
|
isDataSelectable: this.props.isDataSelectable,
|
|
showSelectionElement: this.props.showSelectionElement,
|
|
showRowReorderElement: this.props.showRowReorderElement,
|
|
expandedRowIcon: this.props.expandedRowIcon,
|
|
collapsedRowIcon: this.props.collapsedRowIcon,
|
|
rowClassName: this.props.rowClassName,
|
|
isVirtualScrollerDisabled: true
|
|
});
|
|
var body = /*#__PURE__*/React.createElement(TableBody, {
|
|
value: this.dataToRender(rows),
|
|
className: className,
|
|
empty: empty,
|
|
frozenRow: false,
|
|
tableProps: this.props,
|
|
tableSelector: tableSelector,
|
|
columns: columns,
|
|
selectionModeInColumn: selectionModeInColumn,
|
|
first: first,
|
|
editingMeta: editingMeta,
|
|
onEditingMetaChange: this.onEditingMetaChange,
|
|
tabIndex: this.props.tabIndex,
|
|
onRowClick: this.props.onRowClick,
|
|
onRowDoubleClick: this.props.onRowDoubleClick,
|
|
onCellClick: this.props.onCellClick,
|
|
selection: this.props.selection,
|
|
onSelectionChange: this.props.onSelectionChange,
|
|
lazy: this.props.lazy,
|
|
paginator: this.props.paginator,
|
|
onCellSelect: this.props.onCellSelect,
|
|
onCellUnselect: this.props.onCellUnselect,
|
|
onRowSelect: this.props.onRowSelect,
|
|
onRowUnselect: this.props.onRowUnselect,
|
|
dragSelection: this.props.dragSelection,
|
|
onContextMenu: this.props.onContextMenu,
|
|
onContextMenuSelectionChange: this.props.onContextMenuSelectionChange,
|
|
metaKeySelection: this.props.metaKeySelection,
|
|
selectionMode: this.props.selectionMode,
|
|
cellSelection: this.props.cellSelection,
|
|
contextMenuSelection: this.props.contextMenuSelection,
|
|
dataKey: this.props.dataKey,
|
|
expandedRows: this.props.expandedRows,
|
|
onRowCollapse: this.props.onRowCollapse,
|
|
onRowExpand: this.props.onRowExpand,
|
|
onRowToggle: this.props.onRowToggle,
|
|
editMode: this.props.editMode,
|
|
editingRows: this.props.editingRows,
|
|
onRowReorder: this.props.onRowReorder,
|
|
scrollable: this.props.scrollable,
|
|
rowGroupMode: this.props.rowGroupMode,
|
|
groupRowsBy: this.props.groupRowsBy,
|
|
expandableRowGroups: this.props.expandableRowGroups,
|
|
loading: this.props.loading,
|
|
emptyMessage: this.props.emptyMessage,
|
|
rowGroupHeaderTemplate: this.props.rowGroupHeaderTemplate,
|
|
rowExpansionTemplate: this.props.rowExpansionTemplate,
|
|
rowGroupFooterTemplate: this.props.rowGroupFooterTemplate,
|
|
onRowEditChange: this.props.onRowEditChange,
|
|
compareSelectionBy: this.props.compareSelectionBy,
|
|
selectOnEdit: this.props.selectOnEdit,
|
|
onRowEditInit: this.props.onRowEditInit,
|
|
rowEditValidator: this.props.rowEditValidator,
|
|
onRowEditSave: this.props.onRowEditSave,
|
|
onRowEditComplete: this.props.onRowEditComplete,
|
|
onRowEditCancel: this.props.onRowEditCancel,
|
|
cellClassName: this.props.cellClassName,
|
|
responsiveLayout: this.props.responsiveLayout,
|
|
selectionAutoFocus: this.props.selectionAutoFocus,
|
|
isDataSelectable: this.props.isDataSelectable,
|
|
showSelectionElement: this.props.showSelectionElement,
|
|
showRowReorderElement: this.props.showRowReorderElement,
|
|
expandedRowIcon: this.props.expandedRowIcon,
|
|
collapsedRowIcon: this.props.collapsedRowIcon,
|
|
rowClassName: this.props.rowClassName,
|
|
virtualScrollerContentRef: contentRef,
|
|
virtualScrollerOptions: options,
|
|
isVirtualScrollerDisabled: isVirtualScrollerDisabled
|
|
});
|
|
return /*#__PURE__*/React.createElement(React.Fragment, null, frozenBody, body);
|
|
}
|
|
}, {
|
|
key: "renderTableFooter",
|
|
value: function renderTableFooter(options) {
|
|
var columns = options.columns;
|
|
return /*#__PURE__*/React.createElement(TableFooter, {
|
|
tableProps: this.props,
|
|
columns: columns,
|
|
footerColumnGroup: this.props.footerColumnGroup
|
|
});
|
|
}
|
|
}, {
|
|
key: "renderContent",
|
|
value: function renderContent(processedData, columns, selectionModeInColumn, empty) {
|
|
var _this17 = this;
|
|
|
|
if (!columns) return;
|
|
var isVirtualScrollerDisabled = this.isVirtualScrollerDisabled();
|
|
var virtualScrollerOptions = this.props.virtualScrollerOptions || {};
|
|
return /*#__PURE__*/React.createElement("div", {
|
|
className: "p-datatable-wrapper",
|
|
style: {
|
|
maxHeight: isVirtualScrollerDisabled ? this.props.scrollHeight : null
|
|
}
|
|
}, /*#__PURE__*/React.createElement(VirtualScroller, _extends({}, virtualScrollerOptions, {
|
|
items: processedData,
|
|
columns: columns,
|
|
scrollHeight: this.props.scrollHeight,
|
|
disabled: isVirtualScrollerDisabled,
|
|
loaderDisabled: true,
|
|
showSpacer: false,
|
|
contentTemplate: function contentTemplate(options) {
|
|
var ref = function ref(el) {
|
|
_this17.table = el;
|
|
options.spacerRef && options.spacerRef(el);
|
|
};
|
|
|
|
var tableClassName = classNames('p-datatable-table', _this17.props.tableClassName);
|
|
|
|
var tableHeader = _this17.renderTableHeader(options, empty);
|
|
|
|
var tableBody = _this17.renderTableBody(options, selectionModeInColumn, empty, isVirtualScrollerDisabled);
|
|
|
|
var tableFooter = _this17.renderTableFooter(options);
|
|
|
|
return /*#__PURE__*/React.createElement("table", {
|
|
ref: ref,
|
|
style: _this17.props.tableStyle,
|
|
className: tableClassName,
|
|
role: "table"
|
|
}, tableHeader, tableBody, tableFooter);
|
|
}
|
|
})));
|
|
}
|
|
}, {
|
|
key: "renderFooter",
|
|
value: function renderFooter() {
|
|
if (this.props.footer) {
|
|
var content = ObjectUtils.getJSXElement(this.props.footer, {
|
|
props: this.props
|
|
});
|
|
return /*#__PURE__*/React.createElement("div", {
|
|
className: "p-datatable-footer"
|
|
}, content);
|
|
}
|
|
|
|
return null;
|
|
}
|
|
}, {
|
|
key: "renderPaginator",
|
|
value: function renderPaginator(position, totalRecords) {
|
|
var className = classNames('p-paginator-' + position, this.props.paginatorClassName);
|
|
return /*#__PURE__*/React.createElement(Paginator, {
|
|
first: this.getFirst(),
|
|
rows: this.getRows(),
|
|
pageLinkSize: this.props.pageLinkSize,
|
|
className: className,
|
|
onPageChange: this.onPageChange,
|
|
template: this.props.paginatorTemplate,
|
|
totalRecords: totalRecords,
|
|
rowsPerPageOptions: this.props.rowsPerPageOptions,
|
|
currentPageReportTemplate: this.props.currentPageReportTemplate,
|
|
leftContent: this.props.paginatorLeft,
|
|
rightContent: this.props.paginatorRight,
|
|
alwaysShow: this.props.alwaysShowPaginator,
|
|
dropdownAppendTo: this.props.paginatorDropdownAppendTo
|
|
});
|
|
}
|
|
}, {
|
|
key: "renderPaginatorTop",
|
|
value: function renderPaginatorTop(totalRecords) {
|
|
if (this.props.paginator && this.props.paginatorPosition !== 'bottom') {
|
|
return this.renderPaginator('top', totalRecords);
|
|
}
|
|
|
|
return null;
|
|
}
|
|
}, {
|
|
key: "renderPaginatorBottom",
|
|
value: function renderPaginatorBottom(totalRecords) {
|
|
if (this.props.paginator && this.props.paginatorPosition !== 'top') {
|
|
return this.renderPaginator('bottom', totalRecords);
|
|
}
|
|
|
|
return null;
|
|
}
|
|
}, {
|
|
key: "renderResizeHelper",
|
|
value: function renderResizeHelper() {
|
|
var _this18 = this;
|
|
|
|
if (this.props.resizableColumns) {
|
|
return /*#__PURE__*/React.createElement("div", {
|
|
ref: function ref(el) {
|
|
return _this18.resizeHelper = el;
|
|
},
|
|
className: "p-column-resizer-helper",
|
|
style: {
|
|
display: 'none'
|
|
}
|
|
});
|
|
}
|
|
|
|
return null;
|
|
}
|
|
}, {
|
|
key: "renderReorderIndicators",
|
|
value: function renderReorderIndicators() {
|
|
var _this19 = this;
|
|
|
|
if (this.props.reorderableColumns) {
|
|
var style = {
|
|
position: 'absolute',
|
|
display: 'none'
|
|
};
|
|
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("span", {
|
|
ref: function ref(el) {
|
|
return _this19.reorderIndicatorUp = el;
|
|
},
|
|
className: "pi pi-arrow-down p-datatable-reorder-indicator-up",
|
|
style: style
|
|
}), /*#__PURE__*/React.createElement("span", {
|
|
ref: function ref(el) {
|
|
return _this19.reorderIndicatorDown = el;
|
|
},
|
|
className: "pi pi-arrow-up p-datatable-reorder-indicator-down",
|
|
style: style
|
|
}));
|
|
}
|
|
|
|
return null;
|
|
}
|
|
}, {
|
|
key: "render",
|
|
value: function render() {
|
|
var _this20 = this;
|
|
|
|
var processedData = this.processedData();
|
|
var columns = this.getColumns();
|
|
var totalRecords = this.getTotalRecords(processedData);
|
|
var empty = ObjectUtils.isEmpty(processedData);
|
|
var selectionModeInColumn = this.getSelectionModeInColumn(columns);
|
|
var selectable = this.props.selectionMode || selectionModeInColumn;
|
|
var className = classNames('p-datatable p-component', {
|
|
'p-datatable-hoverable-rows': this.props.rowHover,
|
|
'p-datatable-selectable': selectable && !this.props.cellSelection,
|
|
'p-datatable-selectable-cell': selectable && this.props.cellSelection,
|
|
'p-datatable-auto-layout': this.props.autoLayout,
|
|
'p-datatable-resizable': this.props.resizableColumns,
|
|
'p-datatable-resizable-fit': this.props.resizableColumns && this.props.columnResizeMode === 'fit',
|
|
'p-datatable-scrollable': this.props.scrollable,
|
|
'p-datatable-scrollable-vertical': this.props.scrollable && this.props.scrollDirection === 'vertical',
|
|
'p-datatable-scrollable-horizontal': this.props.scrollable && this.props.scrollDirection === 'horizontal',
|
|
'p-datatable-scrollable-both': this.props.scrollable && this.props.scrollDirection === 'both',
|
|
'p-datatable-flex-scrollable': this.props.scrollable && this.props.scrollHeight === 'flex',
|
|
'p-datatable-responsive-stack': this.props.responsiveLayout === 'stack',
|
|
'p-datatable-responsive-scroll': this.props.responsiveLayout === 'scroll',
|
|
'p-datatable-striped': this.props.stripedRows,
|
|
'p-datatable-gridlines': this.props.showGridlines,
|
|
'p-datatable-grouped-header': this.props.headerColumnGroup != null,
|
|
'p-datatable-grouped-footer': this.props.footerColumnGroup != null,
|
|
'p-datatable-sm': this.props.size === 'small',
|
|
'p-datatable-lg': this.props.size === 'large'
|
|
}, this.props.className);
|
|
var loader = this.renderLoader();
|
|
var header = this.renderHeader();
|
|
var paginatorTop = this.renderPaginatorTop(totalRecords);
|
|
var content = this.renderContent(processedData, columns, selectionModeInColumn, empty);
|
|
var paginatorBottom = this.renderPaginatorBottom(totalRecords);
|
|
var footer = this.renderFooter();
|
|
var resizeHelper = this.renderResizeHelper();
|
|
var reorderIndicators = this.renderReorderIndicators();
|
|
return /*#__PURE__*/React.createElement("div", {
|
|
ref: function ref(el) {
|
|
return _this20.el = el;
|
|
},
|
|
id: this.props.id,
|
|
className: className,
|
|
style: this.props.style,
|
|
"data-scrollselectors": ".p-datatable-wrapper"
|
|
}, loader, header, paginatorTop, content, paginatorBottom, footer, resizeHelper, reorderIndicators);
|
|
}
|
|
}], [{
|
|
key: "getDerivedStateFromProps",
|
|
value: function getDerivedStateFromProps(nextProps, prevState) {
|
|
if (nextProps.rows !== prevState.d_rows && !nextProps.onPage) {
|
|
return {
|
|
rows: nextProps.rows,
|
|
d_rows: nextProps.rows
|
|
};
|
|
}
|
|
|
|
return null;
|
|
}
|
|
}]);
|
|
|
|
return DataTable;
|
|
}(Component);
|
|
|
|
_defineProperty(DataTable, "defaultProps", {
|
|
id: null,
|
|
value: null,
|
|
header: null,
|
|
footer: null,
|
|
style: null,
|
|
className: null,
|
|
tableStyle: null,
|
|
tableClassName: null,
|
|
paginator: false,
|
|
paginatorPosition: 'bottom',
|
|
alwaysShowPaginator: true,
|
|
paginatorClassName: null,
|
|
paginatorTemplate: 'FirstPageLink PrevPageLink PageLinks NextPageLink LastPageLink RowsPerPageDropdown',
|
|
paginatorLeft: null,
|
|
paginatorRight: null,
|
|
paginatorDropdownAppendTo: null,
|
|
pageLinkSize: 5,
|
|
rowsPerPageOptions: null,
|
|
currentPageReportTemplate: '({currentPage} of {totalPages})',
|
|
first: 0,
|
|
rows: null,
|
|
totalRecords: null,
|
|
lazy: false,
|
|
sortField: null,
|
|
sortOrder: null,
|
|
multiSortMeta: null,
|
|
sortMode: 'single',
|
|
defaultSortOrder: 1,
|
|
removableSort: false,
|
|
emptyMessage: null,
|
|
selectionMode: null,
|
|
dragSelection: false,
|
|
cellSelection: false,
|
|
selection: null,
|
|
onSelectionChange: null,
|
|
contextMenuSelection: null,
|
|
onContextMenuSelectionChange: null,
|
|
compareSelectionBy: 'deepEquals',
|
|
dataKey: null,
|
|
metaKeySelection: true,
|
|
selectOnEdit: true,
|
|
selectionPageOnly: false,
|
|
selectionAutoFocus: true,
|
|
showSelectAll: true,
|
|
selectAll: false,
|
|
onSelectAllChange: null,
|
|
headerColumnGroup: null,
|
|
footerColumnGroup: null,
|
|
rowExpansionTemplate: null,
|
|
expandedRows: null,
|
|
onRowToggle: null,
|
|
resizableColumns: false,
|
|
columnResizeMode: 'fit',
|
|
reorderableColumns: false,
|
|
filters: null,
|
|
globalFilter: null,
|
|
filterDelay: 300,
|
|
filterLocale: undefined,
|
|
scrollable: false,
|
|
scrollHeight: null,
|
|
scrollDirection: 'vertical',
|
|
virtualScrollerOptions: null,
|
|
frozenWidth: null,
|
|
frozenValue: null,
|
|
csvSeparator: ',',
|
|
exportFilename: 'download',
|
|
rowGroupMode: null,
|
|
autoLayout: false,
|
|
rowClassName: null,
|
|
cellClassName: null,
|
|
rowGroupHeaderTemplate: null,
|
|
rowGroupFooterTemplate: null,
|
|
loading: false,
|
|
loadingIcon: 'pi pi-spinner',
|
|
tabIndex: 0,
|
|
stateKey: null,
|
|
stateStorage: 'session',
|
|
groupRowsBy: null,
|
|
editMode: 'cell',
|
|
editingRows: null,
|
|
expandableRowGroups: false,
|
|
rowHover: false,
|
|
showGridlines: false,
|
|
stripedRows: false,
|
|
size: 'normal',
|
|
responsiveLayout: 'stack',
|
|
breakpoint: '960px',
|
|
filterDisplay: 'menu',
|
|
expandedRowIcon: 'pi pi-chevron-down',
|
|
collapsedRowIcon: 'pi pi-chevron-right',
|
|
onRowEditComplete: null,
|
|
globalFilterFields: null,
|
|
showSelectionElement: null,
|
|
showRowReorderElement: null,
|
|
isDataSelectable: null,
|
|
onColumnResizeEnd: null,
|
|
onColumnResizerClick: null,
|
|
onColumnResizerDoubleClick: null,
|
|
onSort: null,
|
|
onPage: null,
|
|
onFilter: null,
|
|
onAllRowsSelect: null,
|
|
onAllRowsUnselect: null,
|
|
onRowClick: null,
|
|
onRowDoubleClick: null,
|
|
onRowSelect: null,
|
|
onRowUnselect: null,
|
|
onRowExpand: null,
|
|
onRowCollapse: null,
|
|
onContextMenu: null,
|
|
onColReorder: null,
|
|
onCellClick: null,
|
|
onCellSelect: null,
|
|
onCellUnselect: null,
|
|
onRowReorder: null,
|
|
onValueChange: null,
|
|
rowEditValidator: null,
|
|
onRowEditInit: null,
|
|
onRowEditSave: null,
|
|
onRowEditCancel: null,
|
|
onRowEditChange: null,
|
|
exportFunction: null,
|
|
customSaveState: null,
|
|
customRestoreState: null,
|
|
onStateSave: null,
|
|
onStateRestore: null
|
|
});
|
|
|
|
export { DataTable };
|