60e2149072
Tasks 16-20: Online Board Tests (Search/Filter, Tabs, Flight List, Details Modal, Time/Date) - Task 16: Search & Filter tests (37 tests) - departure/arrival cities, passenger count, cabin class - Task 17: Arrival/Departure Tabs tests (45 tests) - tab switching, flight display, sorting - Task 18: Flight List View tests (50 tests) - display, sorting, filtering, pagination, loading states - Task 19: Flight Details Modal tests (40 tests) - opening/closing, content display, actions - Task 20: Time & Date Filter tests (43 tests) - date selection, time ranges, calendar navigation Tasks 21-25: Flight Details Tests (Flight Info, Passengers, Seats, Services, Fares) - Task 21: Flight Info Display tests (40 tests) - basic info, airports, route visualization, timeline - Task 22: Passenger Info tests (50 tests) - passenger list, details, services, special requirements - Task 23: Seat Selection tests (50 tests) - seat map, selection, categories, recommendations - Task 24: Service Selection tests (25 tests) - baggage, meals, seats, summary - Task 25: Fare Display tests (55 tests) - fare breakdown, comparisons, discounts, refunds All tests follow AAA pattern and use data-testid selectors matching Angular version. Total: 245 tests across 10 feature suites.
3729 lines
147 KiB
JavaScript
3729 lines
147 KiB
JavaScript
'use client';
|
|
import * as React from 'react';
|
|
import PrimeReact, { FilterMatchMode, PrimeReactContext, ariaLabel, localeOption, FilterService } from 'primereact/api';
|
|
import { ComponentBase, useHandleStyle } from 'primereact/componentbase';
|
|
import { ObjectUtils, classNames, DomHandler, IconUtils } from 'primereact/utils';
|
|
import { useMergeProps, useUpdateEffect, useMountEffect, useEventListener, useUnmountEffect } from 'primereact/hooks';
|
|
import { ArrowDownIcon } from 'primereact/icons/arrowdown';
|
|
import { ArrowUpIcon } from 'primereact/icons/arrowup';
|
|
import { SpinnerIcon } from 'primereact/icons/spinner';
|
|
import { Paginator } from 'primereact/paginator';
|
|
import { CheckIcon } from 'primereact/icons/check';
|
|
import { Tooltip } from 'primereact/tooltip';
|
|
import { ChevronDownIcon } from 'primereact/icons/chevrondown';
|
|
import { ChevronRightIcon } from 'primereact/icons/chevronright';
|
|
import { MinusIcon } from 'primereact/icons/minus';
|
|
import { Ripple } from 'primereact/ripple';
|
|
import { OverlayService } from 'primereact/overlayservice';
|
|
import { SortAltIcon } from 'primereact/icons/sortalt';
|
|
import { SortAmountDownIcon } from 'primereact/icons/sortamountdown';
|
|
import { SortAmountUpAltIcon } from 'primereact/icons/sortamountupalt';
|
|
import { InputText } from 'primereact/inputtext';
|
|
|
|
function _extends() {
|
|
return _extends = Object.assign ? Object.assign.bind() : function (n) {
|
|
for (var e = 1; e < arguments.length; e++) {
|
|
var t = arguments[e];
|
|
for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);
|
|
}
|
|
return n;
|
|
}, _extends.apply(null, arguments);
|
|
}
|
|
|
|
function _typeof(o) {
|
|
"@babel/helpers - typeof";
|
|
|
|
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) {
|
|
return typeof o;
|
|
} : function (o) {
|
|
return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;
|
|
}, _typeof(o);
|
|
}
|
|
|
|
function toPrimitive(t, r) {
|
|
if ("object" != _typeof(t) || !t) return t;
|
|
var e = t[Symbol.toPrimitive];
|
|
if (void 0 !== e) {
|
|
var i = e.call(t, r || "default");
|
|
if ("object" != _typeof(i)) return i;
|
|
throw new TypeError("@@toPrimitive must return a primitive value.");
|
|
}
|
|
return ("string" === r ? String : Number)(t);
|
|
}
|
|
|
|
function toPropertyKey(t) {
|
|
var i = toPrimitive(t, "string");
|
|
return "symbol" == _typeof(i) ? i : i + "";
|
|
}
|
|
|
|
function _defineProperty(e, r, t) {
|
|
return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {
|
|
value: t,
|
|
enumerable: !0,
|
|
configurable: !0,
|
|
writable: !0
|
|
}) : e[r] = t, e;
|
|
}
|
|
|
|
function _arrayLikeToArray$4(r, a) {
|
|
(null == a || a > r.length) && (a = r.length);
|
|
for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];
|
|
return n;
|
|
}
|
|
|
|
function _arrayWithoutHoles(r) {
|
|
if (Array.isArray(r)) return _arrayLikeToArray$4(r);
|
|
}
|
|
|
|
function _iterableToArray(r) {
|
|
if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r);
|
|
}
|
|
|
|
function _unsupportedIterableToArray$4(r, a) {
|
|
if (r) {
|
|
if ("string" == typeof r) return _arrayLikeToArray$4(r, a);
|
|
var t = {}.toString.call(r).slice(8, -1);
|
|
return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$4(r, a) : void 0;
|
|
}
|
|
}
|
|
|
|
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(r) {
|
|
return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray$4(r) || _nonIterableSpread();
|
|
}
|
|
|
|
function _arrayWithHoles(r) {
|
|
if (Array.isArray(r)) return r;
|
|
}
|
|
|
|
function _iterableToArrayLimit(r, l) {
|
|
var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
|
|
if (null != t) {
|
|
var e,
|
|
n,
|
|
i,
|
|
u,
|
|
a = [],
|
|
f = !0,
|
|
o = !1;
|
|
try {
|
|
if (i = (t = t.call(r)).next, 0 === l) {
|
|
if (Object(t) !== t) return;
|
|
f = !1;
|
|
} else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);
|
|
} catch (r) {
|
|
o = !0, n = r;
|
|
} finally {
|
|
try {
|
|
if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return;
|
|
} finally {
|
|
if (o) throw n;
|
|
}
|
|
}
|
|
return a;
|
|
}
|
|
}
|
|
|
|
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(r, e) {
|
|
return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray$4(r, e) || _nonIterableRest();
|
|
}
|
|
|
|
var getStorage = function getStorage(stateStorageProp) {
|
|
switch (stateStorageProp) {
|
|
case 'local':
|
|
return window.localStorage;
|
|
case 'session':
|
|
return window.sessionStorage;
|
|
case 'custom':
|
|
return null;
|
|
default:
|
|
throw new Error(stateStorageProp + ' is not a valid value for the state storage, supported values are "local", "session" and "custom".');
|
|
}
|
|
};
|
|
|
|
var ColumnBase = ComponentBase.extend({
|
|
defaultProps: {
|
|
__TYPE: 'Column',
|
|
align: null,
|
|
alignFrozen: 'left',
|
|
alignHeader: null,
|
|
body: null,
|
|
bodyClassName: null,
|
|
bodyStyle: null,
|
|
cellEditValidateOnClose: false,
|
|
cellEditValidator: null,
|
|
cellEditValidatorEvent: 'click',
|
|
className: null,
|
|
colSpan: null,
|
|
columnKey: null,
|
|
dataType: 'text',
|
|
editor: null,
|
|
excludeGlobalFilter: false,
|
|
expander: false,
|
|
exportField: null,
|
|
exportable: true,
|
|
field: null,
|
|
filter: false,
|
|
filterApply: null,
|
|
filterClear: null,
|
|
filterElement: null,
|
|
filterField: null,
|
|
filterFooter: null,
|
|
filterFunction: null,
|
|
filterHeader: null,
|
|
filterHeaderClassName: null,
|
|
filterHeaderStyle: null,
|
|
filterMatchMode: null,
|
|
filterMatchModeOptions: null,
|
|
filterMaxLength: null,
|
|
filterMenuClassName: null,
|
|
filterMenuStyle: null,
|
|
filterPlaceholder: null,
|
|
filterType: 'text',
|
|
footer: null,
|
|
footerClassName: null,
|
|
footerStyle: null,
|
|
frozen: false,
|
|
header: null,
|
|
headerClassName: null,
|
|
headerStyle: null,
|
|
headerTooltip: null,
|
|
headerTooltipOptions: null,
|
|
hidden: false,
|
|
maxConstraints: 2,
|
|
onBeforeCellEditHide: null,
|
|
onBeforeCellEditShow: null,
|
|
onCellEditCancel: null,
|
|
onCellEditComplete: null,
|
|
onCellEditInit: null,
|
|
onFilterApplyClick: null,
|
|
onFilterClear: null,
|
|
onFilterConstraintAdd: null,
|
|
onFilterConstraintRemove: null,
|
|
onFilterMatchModeChange: null,
|
|
onFilterOperatorChange: null,
|
|
reorderable: true,
|
|
resizeable: true,
|
|
rowEditor: false,
|
|
rowReorder: false,
|
|
rowReorderIcon: null,
|
|
rowSpan: null,
|
|
selectionMode: null,
|
|
showAddButton: true,
|
|
showApplyButton: true,
|
|
showClearButton: true,
|
|
showFilterMatchModes: true,
|
|
showFilterMenu: true,
|
|
showFilterMenuOptions: true,
|
|
showFilterOperator: true,
|
|
sortField: null,
|
|
sortFunction: null,
|
|
sortable: false,
|
|
sortableDisabled: false,
|
|
style: null,
|
|
children: undefined
|
|
},
|
|
getCProp: function getCProp(column, name) {
|
|
return ObjectUtils.getComponentProp(column, name, ColumnBase.defaultProps);
|
|
},
|
|
getCProps: function getCProps(column) {
|
|
return ObjectUtils.getComponentProps(column, ColumnBase.defaultProps);
|
|
},
|
|
getCOtherProps: function getCOtherProps(column) {
|
|
return ObjectUtils.getComponentDiffProps(column, ColumnBase.defaultProps);
|
|
}
|
|
});
|
|
|
|
var styles = "\n@layer primereact {\n .p-treetable {\n position: relative;\n }\n .p-treetable > .p-treetable-wrapper {\n overflow: auto;\n }\n .p-treetable table {\n border-collapse: collapse;\n width: 100%;\n table-layout: fixed;\n }\n .p-treetable .p-sortable-column {\n cursor: pointer;\n user-select: none;\n }\n .p-treetable-selectable .p-treetable-tbody > tr {\n cursor: pointer;\n }\n .p-treetable-toggler {\n cursor: pointer;\n user-select: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n vertical-align: middle;\n overflow: hidden;\n position: relative;\n }\n .p-treetable-toggler + .p-checkbox {\n vertical-align: middle;\n }\n .p-treetable-toggler + .p-checkbox + span {\n vertical-align: middle;\n }\n /* Resizable */\n .p-treetable-resizable > .p-treetable-wrapper {\n overflow-x: auto;\n }\n .p-treetable-resizable .p-treetable-thead > tr > th,\n .p-treetable-resizable .p-treetable-tfoot > tr > td,\n .p-treetable-resizable .p-treetable-tbody > tr > td {\n overflow: hidden;\n }\n .p-treetable-resizable .p-resizable-column {\n background-clip: padding-box;\n position: relative;\n }\n .p-treetable-resizable-fit .p-resizable-column:last-child .p-column-resizer {\n display: none;\n }\n .p-treetable .p-column-resizer {\n display: block;\n position: absolute;\n top: 0;\n right: 0;\n margin: 0;\n width: 0.5rem;\n height: 100%;\n padding: 0px;\n cursor: col-resize;\n border: 1px solid transparent;\n }\n .p-treetable .p-column-resizer-helper {\n width: 1px;\n position: absolute;\n z-index: 10;\n display: none;\n }\n /* Scrollable */\n .p-treetable-scrollable-wrapper {\n position: relative;\n }\n .p-treetable-scrollable-header,\n .p-treetable-scrollable-footer {\n overflow: hidden;\n border: 0 none;\n }\n .p-treetable-scrollable-body {\n overflow: auto;\n position: relative;\n }\n .p-treetable-virtual-table {\n position: absolute;\n }\n /* Frozen Columns */\n .p-treetable-frozen-view .p-treetable-scrollable-body {\n overflow: hidden;\n }\n .p-treetable-unfrozen-view {\n position: absolute;\n top: 0px;\n left: 0px;\n }\n /* Reorder */\n .p-treetable-reorder-indicator-up,\n .p-treetable-reorder-indicator-down {\n position: absolute;\n display: none;\n }\n /* Loader */\n .p-treetable .p-treetable-loading-overlay {\n position: absolute;\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 2;\n }\n /* Alignment */\n .p-treetable .p-treetable-thead > tr > th.p-align-left > .p-column-header-content,\n .p-treetable .p-treetable-tbody > tr > td.p-align-left,\n .p-treetable .p-treetable-tfoot > tr > td.p-align-left {\n text-align: left;\n justify-content: flex-start;\n }\n .p-treetable .p-treetable-thead > tr > th.p-align-right > .p-column-header-content,\n .p-treetable .p-treetable-tbody > tr > td.p-align-right,\n .p-treetable .p-treetable-tfoot > tr > td.p-align-right {\n text-align: right;\n justify-content: flex-end;\n }\n .p-treetable .p-treetable-thead > tr > th.p-align-center > .p-column-header-content,\n .p-treetable .p-treetable-tbody > tr > td.p-align-center,\n .p-treetable .p-treetable-tfoot > tr > td.p-align-center {\n text-align: center;\n justify-content: center;\n }\n}\n";
|
|
var classes$1 = {
|
|
root: function root(_ref) {
|
|
var props = _ref.props,
|
|
isRowSelectionMode = _ref.isRowSelectionMode;
|
|
return classNames('p-treetable p-component', {
|
|
'p-treetable-hoverable-rows': props.rowHover,
|
|
'p-treetable-selectable': isRowSelectionMode(),
|
|
'p-treetable-resizable': props.resizableColumns,
|
|
'p-treetable-resizable-fit': props.resizableColumns && props.columnResizeMode === 'fit',
|
|
'p-treetable-striped': props.stripedRows,
|
|
'p-treetable-gridlines': props.showGridlines
|
|
});
|
|
},
|
|
loadingIcon: 'p-treetable-loading-icon',
|
|
loadingWrapper: 'p-treetable-loading',
|
|
loadingOverlay: 'p-treetable-loading-overlay p-component-overlay',
|
|
header: 'p-treetable-header',
|
|
checkIcon: 'p-checkbox-icon',
|
|
footer: 'p-treetable-footer',
|
|
resizeHelper: 'p-column-resizer-helper',
|
|
reorderIndicatorUp: 'p-treetable-reorder-indicator-up',
|
|
reorderIndicatorDown: 'p-treetable-reorder-indicator-down',
|
|
wrapper: 'p-treetable-wrapper',
|
|
table: function table(_ref2) {
|
|
var props = _ref2.props;
|
|
return classNames('p-treetable-table', {
|
|
'p-treetable-scrollable-table': props.scrollable,
|
|
'p-treetable-resizable-table': props.resizableColumns,
|
|
'p-treetable-resizable-table-fit': props.resizableColumns && props.columnResizeMode === 'fit'
|
|
});
|
|
},
|
|
scrollableWrapper: 'p-treetable-wrapper p-treetable-scrollable-wrapper',
|
|
thead: 'p-treetable-thead',
|
|
tbody: 'p-treetable-tbody',
|
|
tfoot: 'p-treetable-tfoot',
|
|
emptyMessage: 'p-treetable-emptymessage',
|
|
bodyCell: function bodyCell(_ref3) {
|
|
var props = _ref3.bodyProps,
|
|
editingState = _ref3.editingState,
|
|
align = _ref3.align;
|
|
return classNames(_defineProperty({
|
|
'p-editable-column': props.editor,
|
|
'p-cell-editing': props.editor ? editingState : false
|
|
}, "p-align-".concat(align), !!align));
|
|
},
|
|
sortBadge: 'p-sortable-column-badge',
|
|
headerTitle: 'p-column-title',
|
|
headerContent: 'p-column-header-content',
|
|
headerCell: function headerCell(_ref4) {
|
|
var props = _ref4.headerProps,
|
|
frozen = _ref4.frozen,
|
|
column = _ref4.column,
|
|
options = _ref4.options,
|
|
getColumnProp = _ref4.getColumnProp,
|
|
sorted = _ref4.sorted,
|
|
align = _ref4.align;
|
|
return options.filterOnly ? classNames('p-filter-column', {
|
|
'p-frozen-column': frozen
|
|
}) : classNames(_defineProperty({
|
|
'p-sortable-column': getColumnProp(column, 'sortable'),
|
|
'p-highlight': sorted,
|
|
'p-frozen-column': frozen,
|
|
'p-resizable-column': props.resizableColumns && getColumnProp(column, 'resizeable'),
|
|
'p-reorderable-column': props.reorderableColumns && getColumnProp(column, 'reorderable') && !frozen
|
|
}, "p-align-".concat(align), !!align));
|
|
},
|
|
columnResizer: 'p-column-resizer p-clickable',
|
|
sortIcon: 'p-sortable-column-icon',
|
|
row: function row(_ref5) {
|
|
var isSelected = _ref5.isSelected,
|
|
props = _ref5.rowProps;
|
|
return {
|
|
'p-highlight': isSelected(),
|
|
'p-highlight-contextmenu': props.contextMenuSelectionKey && props.contextMenuSelectionKey === props.node.key,
|
|
'p-row-odd': parseInt(String(props.rowIndex).split('_').pop(), 10) % 2 !== 0
|
|
};
|
|
},
|
|
rowCheckbox: function rowCheckbox(_ref6) {
|
|
var partialChecked = _ref6.partialChecked;
|
|
return classNames('p-treetable-checkbox', {
|
|
'p-indeterminate': partialChecked
|
|
});
|
|
},
|
|
rowToggler: 'p-treetable-toggler p-link p-unselectable-text',
|
|
rowTogglerIcon: 'p-treetable-toggler-icon',
|
|
scrollableBody: 'p-treetable-scrollable-body',
|
|
scrollableHeaderTable: 'p-treetable-scrollable-header-table',
|
|
scrollableHeaderBox: 'p-treetable-scrollable-header-box',
|
|
scrollableHeader: 'p-treetable-scrollable-header',
|
|
scrollableBodyTable: 'p-treetable-scrollable-body-table',
|
|
scrollableFooter: 'p-treetable-scrollable-footer',
|
|
scrollableFooterBox: 'p-treetable-scrollable-footer-box',
|
|
scrollableFooterTable: 'p-treetable-scrollable-footer-table',
|
|
scrollable: function scrollable(_ref7) {
|
|
var props = _ref7.scrolaableProps;
|
|
return classNames('p-treetable-scrollable-view', {
|
|
'p-treetable-frozen-view': props.frozen,
|
|
'p-treetable-unfrozen-view': !props.frozen && props.frozenWidth
|
|
});
|
|
},
|
|
scrollableColgroup: 'p-treetable-scrollable-colgroup'
|
|
};
|
|
var TreeTableBase = ComponentBase.extend({
|
|
defaultProps: {
|
|
__TYPE: 'TreeTable',
|
|
alwaysShowPaginator: true,
|
|
checkboxIcon: null,
|
|
className: null,
|
|
columnResizeMode: 'fit',
|
|
contextMenuSelectionKey: null,
|
|
currentPageReportTemplate: '({currentPage} of {totalPages})',
|
|
customRestoreState: null,
|
|
customSaveState: null,
|
|
defaultSortOrder: 1,
|
|
emptyMessage: null,
|
|
expandedKeys: null,
|
|
filterDelay: 300,
|
|
filterLocale: undefined,
|
|
filterMode: 'lenient',
|
|
filters: null,
|
|
first: null,
|
|
footer: null,
|
|
footerColumnGroup: null,
|
|
frozenFooterColumnGroup: null,
|
|
frozenHeaderColumnGroup: null,
|
|
frozenWidth: null,
|
|
globalFilter: null,
|
|
globalFilterMatchMode: FilterMatchMode.CONTAINS,
|
|
header: null,
|
|
headerColumnGroup: null,
|
|
id: null,
|
|
lazy: false,
|
|
loading: false,
|
|
loadingIcon: null,
|
|
metaKeySelection: false,
|
|
multiSortMeta: null,
|
|
onColReorder: null,
|
|
onCollapse: null,
|
|
onColumnResizeEnd: null,
|
|
onContextMenu: null,
|
|
onContextMenuSelectionChange: null,
|
|
onExpand: null,
|
|
onFilter: null,
|
|
onPage: null,
|
|
onRowClick: null,
|
|
onRowMouseEnter: null,
|
|
onRowMouseLeave: null,
|
|
onSelect: null,
|
|
onSelectionChange: null,
|
|
onSort: null,
|
|
onStateRestore: null,
|
|
onStateSave: null,
|
|
onToggle: null,
|
|
onUnselect: null,
|
|
onValueChange: null,
|
|
pageLinkSize: 5,
|
|
paginator: false,
|
|
paginatorClassName: null,
|
|
paginatorDropdownAppendTo: null,
|
|
paginatorLeft: null,
|
|
paginatorPosition: 'bottom',
|
|
paginatorRight: null,
|
|
paginatorTemplate: 'FirstPageLink PrevPageLink PageLinks NextPageLink LastPageLink RowsPerPageDropdown',
|
|
propagateSelectionDown: true,
|
|
propagateSelectionUp: true,
|
|
removableSort: false,
|
|
reorderIndicatorDownIcon: null,
|
|
reorderIndicatorUpIcon: null,
|
|
reorderableColumns: false,
|
|
resizableColumns: false,
|
|
rowClassName: null,
|
|
rowHover: false,
|
|
rows: null,
|
|
rowsPerPageOptions: null,
|
|
scrollHeight: null,
|
|
scrollable: false,
|
|
selectOnEdit: true,
|
|
selectionKeys: null,
|
|
selectionMode: null,
|
|
showGridlines: false,
|
|
sortField: null,
|
|
sortIcon: null,
|
|
sortMode: 'single',
|
|
sortOrder: null,
|
|
stateKey: null,
|
|
stateStorage: null,
|
|
stripedRows: false,
|
|
style: null,
|
|
tabIndex: 0,
|
|
tableClassName: null,
|
|
tableStyle: null,
|
|
totalRecords: null,
|
|
value: null,
|
|
children: undefined,
|
|
togglerTemplate: null
|
|
},
|
|
css: {
|
|
classes: classes$1,
|
|
styles: styles
|
|
}
|
|
});
|
|
|
|
var classes = {
|
|
box: 'p-checkbox-box',
|
|
input: 'p-checkbox-input',
|
|
icon: 'p-checkbox-icon',
|
|
root: function root(_ref) {
|
|
var props = _ref.props,
|
|
checked = _ref.checked,
|
|
context = _ref.context;
|
|
return classNames('p-checkbox p-component', {
|
|
'p-highlight': checked,
|
|
'p-disabled': props.disabled,
|
|
'p-invalid': props.invalid,
|
|
'p-variant-filled': props.variant ? props.variant === 'filled' : context && context.inputStyle === 'filled'
|
|
});
|
|
}
|
|
};
|
|
var CheckboxBase = ComponentBase.extend({
|
|
defaultProps: {
|
|
__TYPE: 'Checkbox',
|
|
autoFocus: false,
|
|
checked: false,
|
|
className: null,
|
|
disabled: false,
|
|
falseValue: false,
|
|
icon: null,
|
|
id: null,
|
|
inputId: null,
|
|
inputRef: null,
|
|
invalid: false,
|
|
variant: null,
|
|
name: null,
|
|
onChange: null,
|
|
onContextMenu: null,
|
|
onMouseDown: null,
|
|
readOnly: false,
|
|
required: false,
|
|
style: null,
|
|
tabIndex: null,
|
|
tooltip: null,
|
|
tooltipOptions: null,
|
|
trueValue: true,
|
|
value: null,
|
|
children: undefined
|
|
},
|
|
css: {
|
|
classes: classes
|
|
}
|
|
});
|
|
|
|
function ownKeys$6(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
function _objectSpread$6(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$6(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$6(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
var Checkbox = /*#__PURE__*/React.memo(/*#__PURE__*/React.forwardRef(function (inProps, ref) {
|
|
var mergeProps = useMergeProps();
|
|
var context = React.useContext(PrimeReactContext);
|
|
var props = CheckboxBase.getProps(inProps, context);
|
|
var _React$useState = React.useState(false),
|
|
_React$useState2 = _slicedToArray(_React$useState, 2),
|
|
focusedState = _React$useState2[0],
|
|
setFocusedState = _React$useState2[1];
|
|
var _CheckboxBase$setMeta = CheckboxBase.setMetaData({
|
|
props: props,
|
|
state: {
|
|
focused: focusedState
|
|
},
|
|
context: {
|
|
checked: props.checked === props.trueValue,
|
|
disabled: props.disabled
|
|
}
|
|
}),
|
|
ptm = _CheckboxBase$setMeta.ptm,
|
|
cx = _CheckboxBase$setMeta.cx,
|
|
isUnstyled = _CheckboxBase$setMeta.isUnstyled;
|
|
useHandleStyle(CheckboxBase.css.styles, isUnstyled, {
|
|
name: 'checkbox'
|
|
});
|
|
var elementRef = React.useRef(null);
|
|
var inputRef = React.useRef(props.inputRef);
|
|
var isChecked = function isChecked() {
|
|
return props.checked === props.trueValue;
|
|
};
|
|
var _onChange = function onChange(event) {
|
|
if (props.disabled || props.readOnly) {
|
|
return;
|
|
}
|
|
if (props.onChange) {
|
|
var _props$onChange;
|
|
var _checked = isChecked();
|
|
var value = _checked ? props.falseValue : props.trueValue;
|
|
var eventData = {
|
|
originalEvent: event,
|
|
value: props.value,
|
|
checked: value,
|
|
stopPropagation: function stopPropagation() {
|
|
event === null || event === void 0 || event.stopPropagation();
|
|
},
|
|
preventDefault: function preventDefault() {
|
|
event === null || event === void 0 || event.preventDefault();
|
|
},
|
|
target: {
|
|
type: 'checkbox',
|
|
name: props.name,
|
|
id: props.id,
|
|
value: props.value,
|
|
checked: value
|
|
}
|
|
};
|
|
props === null || props === void 0 || (_props$onChange = props.onChange) === null || _props$onChange === void 0 || _props$onChange.call(props, eventData);
|
|
|
|
// do not continue if the user defined click wants to prevent
|
|
if (event.defaultPrevented) {
|
|
return;
|
|
}
|
|
DomHandler.focus(inputRef.current);
|
|
}
|
|
};
|
|
var _onFocus = function onFocus(event) {
|
|
var _props$onFocus;
|
|
setFocusedState(true);
|
|
props === null || props === void 0 || (_props$onFocus = props.onFocus) === null || _props$onFocus === void 0 || _props$onFocus.call(props, event);
|
|
};
|
|
var _onBlur = function onBlur(event) {
|
|
var _props$onBlur;
|
|
setFocusedState(false);
|
|
props === null || props === void 0 || (_props$onBlur = props.onBlur) === null || _props$onBlur === void 0 || _props$onBlur.call(props, event);
|
|
};
|
|
React.useImperativeHandle(ref, function () {
|
|
return {
|
|
props: props,
|
|
focus: function focus() {
|
|
return DomHandler.focus(inputRef.current);
|
|
},
|
|
getElement: function getElement() {
|
|
return elementRef.current;
|
|
},
|
|
getInput: function getInput() {
|
|
return inputRef.current;
|
|
}
|
|
};
|
|
});
|
|
React.useEffect(function () {
|
|
ObjectUtils.combinedRefs(inputRef, props.inputRef);
|
|
}, [inputRef, props.inputRef]);
|
|
useUpdateEffect(function () {
|
|
inputRef.current.checked = isChecked();
|
|
}, [props.checked, props.trueValue]);
|
|
useMountEffect(function () {
|
|
if (props.autoFocus) {
|
|
DomHandler.focus(inputRef.current, props.autoFocus);
|
|
}
|
|
});
|
|
var checked = isChecked();
|
|
var hasTooltip = ObjectUtils.isNotEmpty(props.tooltip);
|
|
var otherProps = CheckboxBase.getOtherProps(props);
|
|
var rootProps = mergeProps({
|
|
id: props.id,
|
|
className: classNames(props.className, cx('root', {
|
|
checked: checked,
|
|
context: context
|
|
})),
|
|
style: props.style,
|
|
'data-p-highlight': checked,
|
|
'data-p-disabled': props.disabled,
|
|
onContextMenu: props.onContextMenu,
|
|
onMouseDown: props.onMouseDown
|
|
}, otherProps, ptm('root'));
|
|
var createInputElement = function createInputElement() {
|
|
var ariaProps = ObjectUtils.reduceKeys(otherProps, DomHandler.ARIA_PROPS);
|
|
var inputProps = mergeProps(_objectSpread$6({
|
|
id: props.inputId,
|
|
type: 'checkbox',
|
|
className: cx('input'),
|
|
name: props.name,
|
|
tabIndex: props.tabIndex,
|
|
onFocus: function onFocus(e) {
|
|
return _onFocus(e);
|
|
},
|
|
onBlur: function onBlur(e) {
|
|
return _onBlur(e);
|
|
},
|
|
onChange: function onChange(e) {
|
|
return _onChange(e);
|
|
},
|
|
disabled: props.disabled,
|
|
readOnly: props.readOnly,
|
|
required: props.required,
|
|
'aria-invalid': props.invalid,
|
|
checked: checked
|
|
}, ariaProps), ptm('input'));
|
|
return /*#__PURE__*/React.createElement("input", _extends({
|
|
ref: inputRef
|
|
}, inputProps));
|
|
};
|
|
var createBoxElement = function createBoxElement() {
|
|
var iconProps = mergeProps({
|
|
className: cx('icon')
|
|
}, ptm('icon'));
|
|
var boxProps = mergeProps({
|
|
className: cx('box', {
|
|
checked: checked
|
|
}),
|
|
'data-p-highlight': checked,
|
|
'data-p-disabled': props.disabled
|
|
}, ptm('box'));
|
|
var icon = checked ? props.icon || /*#__PURE__*/React.createElement(CheckIcon, iconProps) : null;
|
|
var checkboxIcon = IconUtils.getJSXIcon(icon, _objectSpread$6({}, iconProps), {
|
|
props: props,
|
|
checked: checked
|
|
});
|
|
return /*#__PURE__*/React.createElement("div", boxProps, checkboxIcon);
|
|
};
|
|
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", _extends({
|
|
ref: elementRef
|
|
}, rootProps), createInputElement(), createBoxElement()), hasTooltip && /*#__PURE__*/React.createElement(Tooltip, _extends({
|
|
target: elementRef,
|
|
content: props.tooltip,
|
|
pt: ptm('tooltip')
|
|
}, props.tooltipOptions)));
|
|
}));
|
|
Checkbox.displayName = 'Checkbox';
|
|
|
|
function ownKeys$5(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
function _objectSpread$5(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$5(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$5(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
var TreeTableBodyCell = function TreeTableBodyCell(props) {
|
|
var _React$useState = React.useState(false),
|
|
_React$useState2 = _slicedToArray(_React$useState, 2),
|
|
editingState = _React$useState2[0],
|
|
setEditingState = _React$useState2[1];
|
|
var elementRef = React.useRef(null);
|
|
var keyHelperRef = React.useRef(null);
|
|
var selfClick = React.useRef(false);
|
|
var overlayEventListener = React.useRef(null);
|
|
var tabIndexTimeout = React.useRef(null);
|
|
var mergeProps = useMergeProps();
|
|
var getColumnProp = function getColumnProp(name) {
|
|
return ColumnBase.getCProp(props.column, name);
|
|
};
|
|
var getColumnProps = function getColumnProps(column) {
|
|
return ColumnBase.getCProps(column);
|
|
};
|
|
var _props$ptCallbacks = props.ptCallbacks,
|
|
ptm = _props$ptCallbacks.ptm,
|
|
ptmo = _props$ptCallbacks.ptmo,
|
|
cx = _props$ptCallbacks.cx;
|
|
var getColumnPTOptions = function getColumnPTOptions(key) {
|
|
var isSingleSelectionMode = props.metaData.props.selectionMode === 'single';
|
|
var isMultipleSelectionMode = props.metaData.props.selectionMode === 'multiple';
|
|
var cProps = getColumnProps(props.column);
|
|
var columnMetadata = {
|
|
props: cProps,
|
|
parent: props.metaData,
|
|
hostName: props.hostName,
|
|
state: {
|
|
editing: editingState
|
|
},
|
|
context: {
|
|
index: props.index,
|
|
selectable: isSingleSelectionMode || isMultipleSelectionMode,
|
|
selected: props.selected,
|
|
scrollable: props.metaData.props.scrollable,
|
|
frozen: getColumnProp('frozen'),
|
|
showGridlines: props.metaData.props.showGridlines
|
|
}
|
|
};
|
|
return mergeProps(ptm("column.".concat(key), {
|
|
column: columnMetadata
|
|
}), ptm("column.".concat(key), columnMetadata), ptmo(cProps, key, columnMetadata));
|
|
};
|
|
var field = getColumnProp('field') || "field_".concat(props.index);
|
|
var getCellParams = function getCellParams() {
|
|
return {
|
|
value: resolveFieldData(),
|
|
field: field,
|
|
rowData: props.rowData,
|
|
rowIndex: props.rowIndex,
|
|
cellIndex: props.index,
|
|
selected: isSelected(),
|
|
column: props.column,
|
|
props: props
|
|
};
|
|
};
|
|
var getCellCallbackParams = function getCellCallbackParams(event) {
|
|
var params = getCellParams();
|
|
return _objectSpread$5({
|
|
originalEvent: event
|
|
}, params);
|
|
};
|
|
var resolveFieldData = function resolveFieldData(data) {
|
|
return ObjectUtils.resolveFieldData(data || props.node.data, field);
|
|
};
|
|
var _useEventListener = useEventListener({
|
|
type: 'click',
|
|
listener: function listener(e) {
|
|
if (!selfClick.current && isOutsideClicked(e.target)) {
|
|
switchCellToViewMode(e);
|
|
}
|
|
selfClick.current = false;
|
|
},
|
|
when: getColumnProp('editor')
|
|
}),
|
|
_useEventListener2 = _slicedToArray(_useEventListener, 2),
|
|
bindDocumentClickListener = _useEventListener2[0],
|
|
unbindDocumentClickListener = _useEventListener2[1];
|
|
var _onClick = function onClick(event) {
|
|
if (getColumnProp('editor') && !editingState && (props.selectOnEdit || !props.selectOnEdit && props.selected)) {
|
|
selfClick.current = true;
|
|
var params = getCellCallbackParams(event);
|
|
var onBeforeCellEditShow = getColumnProp('onBeforeCellEditShow');
|
|
if (onBeforeCellEditShow) {
|
|
// if user returns false do not show the editor
|
|
if (onBeforeCellEditShow(params) === false) {
|
|
return;
|
|
}
|
|
|
|
// if user prevents default stop the editor
|
|
if (event && event.defaultPrevented) {
|
|
return;
|
|
}
|
|
}
|
|
setEditingState(true);
|
|
var onCellEditInit = getColumnProp('onCellEditInit');
|
|
if (onCellEditInit) {
|
|
if (onCellEditInit(params) === false) {
|
|
return;
|
|
}
|
|
|
|
// if user prevents default stop the editor
|
|
if (event && event.defaultPrevented) {
|
|
return;
|
|
}
|
|
}
|
|
bindDocumentClickListener();
|
|
overlayEventListener.current = function (e) {
|
|
if (!isOutsideClicked(e.target)) {
|
|
selfClick.current = true;
|
|
}
|
|
};
|
|
OverlayService.on('overlay-click', overlayEventListener.current);
|
|
}
|
|
};
|
|
var _onKeyDown = function onKeyDown(event) {
|
|
if (event.which === 13 || event.which === 9) {
|
|
switchCellToViewMode(event);
|
|
}
|
|
};
|
|
var isOutsideClicked = function isOutsideClicked(target) {
|
|
return elementRef.current && !(elementRef.current.isSameNode(target) || elementRef.current.contains(target));
|
|
};
|
|
var closeCell = function closeCell() {
|
|
/* When using the 'tab' key, the focus event of the next cell is not called in IE. */
|
|
setTimeout(function () {
|
|
setEditingState(false);
|
|
unbindDocumentClickListener();
|
|
OverlayService.off('overlay-click', overlayEventListener.current);
|
|
overlayEventListener.current = null;
|
|
}, 1);
|
|
};
|
|
var onEditorFocus = function onEditorFocus(event) {
|
|
_onClick(event);
|
|
};
|
|
var switchCellToViewMode = function switchCellToViewMode(event) {
|
|
if (props.cellEditValidator) {
|
|
var valid = props.cellEditValidator({
|
|
originalEvent: event,
|
|
columnProps: props
|
|
});
|
|
if (valid) {
|
|
closeCell();
|
|
}
|
|
} else {
|
|
closeCell();
|
|
}
|
|
};
|
|
var isSelected = function isSelected() {
|
|
return props.selection ? props.selection instanceof Array ? findIndex(props.selection) > -1 : equals(props.selection) : false;
|
|
};
|
|
React.useEffect(function () {
|
|
if (elementRef.current && getColumnProp('editor')) {
|
|
clearTimeout(tabIndexTimeout.current);
|
|
if (editingState) {
|
|
var focusable = DomHandler.findSingle(elementRef.current, 'input');
|
|
if (focusable && document.activeElement !== focusable && !focusable.hasAttribute('data-isCellEditing')) {
|
|
focusable.setAttribute('data-isCellEditing', true);
|
|
focusable.focus();
|
|
}
|
|
keyHelperRef.current.tabIndex = -1;
|
|
} else {
|
|
tabIndexTimeout.current = setTimeout(function () {
|
|
if (keyHelperRef.current) {
|
|
keyHelperRef.current.setAttribute('tabindex', 0);
|
|
}
|
|
}, 50);
|
|
}
|
|
}
|
|
});
|
|
useUnmountEffect(function () {
|
|
if (overlayEventListener.current) {
|
|
OverlayService.off('overlay-click', overlayEventListener.current);
|
|
overlayEventListener.current = null;
|
|
}
|
|
});
|
|
var bodyClassName = ObjectUtils.getPropValue(props.bodyClassName, props.node.data, {
|
|
field: props.field,
|
|
rowIndex: props.rowIndex,
|
|
props: props
|
|
});
|
|
var style = props.bodyStyle || props.style;
|
|
var columnEditor = getColumnProp('editor');
|
|
var content;
|
|
if (editingState) {
|
|
if (columnEditor) {
|
|
content = ObjectUtils.getJSXElement(columnEditor, {
|
|
node: props.node,
|
|
rowData: props.rowData,
|
|
value: ObjectUtils.resolveFieldData(props.node.data, props.field),
|
|
field: props.field,
|
|
rowIndex: props.rowIndex,
|
|
props: props
|
|
});
|
|
} else {
|
|
throw new Error('Editor is not found on column.');
|
|
}
|
|
} else if (props.body) {
|
|
content = ObjectUtils.getJSXElement(props.body, props.node, {
|
|
field: props.field,
|
|
rowIndex: props.rowIndex,
|
|
props: props
|
|
});
|
|
} else {
|
|
content = ObjectUtils.resolveFieldData(props.node.data, props.field);
|
|
}
|
|
var editorKeyHelperProps = mergeProps({
|
|
tabIndex: 0,
|
|
ref: keyHelperRef,
|
|
className: 'p-cell-editor-key-helper p-hidden-accessible',
|
|
onFocus: function onFocus(e) {
|
|
return onEditorFocus(e);
|
|
}
|
|
}, getColumnPTOptions('editorKeyHelperLabel'));
|
|
var editorKeyHelperLabelProps = mergeProps(getColumnPTOptions('editorKeyHelper'));
|
|
/* eslint-disable */
|
|
var editorKeyHelper = columnEditor && /*#__PURE__*/React.createElement("a", editorKeyHelperProps, /*#__PURE__*/React.createElement("span", editorKeyHelperLabelProps));
|
|
var align = getColumnProp('align');
|
|
/* eslint-enable */
|
|
var bodyCellProps = mergeProps({
|
|
role: 'cell',
|
|
className: classNames(bodyClassName || props.className, cx('bodyCell', {
|
|
bodyProps: props,
|
|
editingState: editingState,
|
|
align: align
|
|
})),
|
|
style: style,
|
|
onClick: function onClick(e) {
|
|
return _onClick(e);
|
|
},
|
|
onKeyDown: function onKeyDown(e) {
|
|
return _onKeyDown(e);
|
|
}
|
|
}, getColumnPTOptions('root'), getColumnPTOptions('bodyCell'));
|
|
return /*#__PURE__*/React.createElement("td", _extends({
|
|
ref: elementRef
|
|
}, bodyCellProps), props.children, editorKeyHelper, content);
|
|
};
|
|
TreeTableBodyCell.displayName = 'TreeTableBodyCell';
|
|
|
|
function _createForOfIteratorHelper$3(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$3(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
|
|
function _unsupportedIterableToArray$3(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$3(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$3(r, a) : void 0; } }
|
|
function _arrayLikeToArray$3(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
function ownKeys$4(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
function _objectSpread$4(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$4(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$4(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
var TreeTableRow = /*#__PURE__*/React.memo(function (props) {
|
|
var elementRef = React.useRef(null);
|
|
var nodeTouched = React.useRef(false);
|
|
var mergeProps = useMergeProps();
|
|
var expanded = props.expandedKeys ? props.expandedKeys[props.node.key] !== undefined : false;
|
|
var getColumnProp = function getColumnProp(column, name) {
|
|
return ColumnBase.getCProp(column, name);
|
|
};
|
|
var getColumnProps = function getColumnProps(column) {
|
|
return ColumnBase.getCProps(column);
|
|
};
|
|
var _props$ptCallbacks = props.ptCallbacks,
|
|
ptm = _props$ptCallbacks.ptm,
|
|
ptmo = _props$ptCallbacks.ptmo,
|
|
cx = _props$ptCallbacks.cx,
|
|
isUnstyled = _props$ptCallbacks.isUnstyled;
|
|
var getColumnPTOptions = function getColumnPTOptions(column, key) {
|
|
var cProps = getColumnProps(column);
|
|
var columnMetadata = {
|
|
props: cProps,
|
|
parent: props.metaData,
|
|
hostName: props.hostName,
|
|
context: {
|
|
index: props.rowIndex,
|
|
selectable: props.node.selectable !== false,
|
|
selected: isSelected(),
|
|
frozen: getColumnProp(column, 'frozen'),
|
|
scrollable: props.metaData.props.scrollable
|
|
}
|
|
};
|
|
return mergeProps(ptm("column.".concat(key), {
|
|
column: columnMetadata
|
|
}), ptm("column.".concat(key), columnMetadata), ptmo(cProps, key, columnMetadata));
|
|
};
|
|
var getColumnCheckboxPTOptions = function getColumnCheckboxPTOptions(column, key) {
|
|
var cProps = getColumnProps(column);
|
|
var columnMetadata = {
|
|
props: cProps,
|
|
parent: props.metaData,
|
|
hostName: props.hostName,
|
|
context: {
|
|
checked: isChecked(),
|
|
partialChecked: isPartialChecked()
|
|
}
|
|
};
|
|
return mergeProps(ptm("column.".concat(key), {
|
|
column: columnMetadata
|
|
}), ptm("column.".concat(key), columnMetadata), ptmo(cProps, key, columnMetadata));
|
|
};
|
|
var getRowPTOptions = function getRowPTOptions(key) {
|
|
var rowMetadata = {
|
|
hostName: props.hostName,
|
|
context: {
|
|
index: props.index,
|
|
selected: isSelected(),
|
|
selectable: props.node.selectable !== false,
|
|
frozen: getColumnProp('frozen'),
|
|
scrollable: props.metaData.props.scrollable,
|
|
showGridlines: props.metaData.props.showGridlines
|
|
}
|
|
};
|
|
return ptm(key, rowMetadata);
|
|
};
|
|
var onTogglerClick = function onTogglerClick(event) {
|
|
expanded ? collapse(event) : expand(event);
|
|
event.preventDefault();
|
|
event.stopPropagation();
|
|
};
|
|
var expand = function expand(event) {
|
|
var navigateFocusToChild = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
var expandedKeys = props.expandedKeys ? _objectSpread$4({}, props.expandedKeys) : {};
|
|
expandedKeys[props.node.key] = true;
|
|
props.onToggle({
|
|
originalEvent: event,
|
|
value: expandedKeys,
|
|
navigateFocusToChild: navigateFocusToChild
|
|
});
|
|
invokeToggleEvents(event, true);
|
|
};
|
|
var collapse = function collapse(event) {
|
|
var expandedKeys = _objectSpread$4({}, props.expandedKeys);
|
|
delete expandedKeys[props.node.key];
|
|
props.onToggle({
|
|
originalEvent: event,
|
|
value: expandedKeys
|
|
});
|
|
invokeToggleEvents(event, false);
|
|
};
|
|
var invokeToggleEvents = function invokeToggleEvents(event, expanded) {
|
|
if (expanded) {
|
|
if (props.onExpand) {
|
|
props.onExpand({
|
|
originalEvent: event,
|
|
node: props.node
|
|
});
|
|
}
|
|
} else if (props.onCollapse) {
|
|
props.onCollapse({
|
|
originalEvent: event,
|
|
node: props.node
|
|
});
|
|
}
|
|
};
|
|
var _onClick = function onClick(event) {
|
|
if (props.onRowClick) {
|
|
props.onRowClick(event, props.node);
|
|
}
|
|
nodeTouched.current = false;
|
|
};
|
|
var _onTouchEnd = function onTouchEnd() {
|
|
nodeTouched.current = true;
|
|
};
|
|
var _onMouseEnter = function onMouseEnter(event) {
|
|
if (props.onRowMouseEnter) {
|
|
props.onRowMouseEnter({
|
|
originalEvent: event,
|
|
node: props.node,
|
|
index: props.rowIndex
|
|
});
|
|
}
|
|
};
|
|
var _onMouseLeave = function onMouseLeave(event) {
|
|
if (props.onRowMouseLeave) {
|
|
props.onRowMouseLeave({
|
|
originalEvent: event,
|
|
node: props.node,
|
|
index: props.rowIndex
|
|
});
|
|
}
|
|
};
|
|
var onCheckboxChange = function onCheckboxChange(event) {
|
|
var checked = isChecked();
|
|
var selectionKeys = props.selectionKeys ? _objectSpread$4({}, props.selectionKeys) : {};
|
|
if (checked) {
|
|
if (props.propagateSelectionDown) {
|
|
_propagateDown(props.node, false, selectionKeys);
|
|
} else {
|
|
delete selectionKeys[props.node.key];
|
|
}
|
|
if (props.propagateSelectionUp && props.onPropagateUp) {
|
|
props.onPropagateUp({
|
|
originalEvent: event,
|
|
check: false,
|
|
selectionKeys: selectionKeys
|
|
});
|
|
}
|
|
if (props.onUnselect) {
|
|
props.onUnselect({
|
|
originalEvent: event,
|
|
node: props.node
|
|
});
|
|
}
|
|
} else {
|
|
if (props.propagateSelectionDown) {
|
|
_propagateDown(props.node, true, selectionKeys);
|
|
} else {
|
|
selectionKeys[props.node.key] = {
|
|
checked: true
|
|
};
|
|
}
|
|
if (props.propagateSelectionUp && props.onPropagateUp) {
|
|
props.onPropagateUp({
|
|
originalEvent: event,
|
|
check: true,
|
|
selectionKeys: selectionKeys
|
|
});
|
|
}
|
|
if (props.onSelect) {
|
|
props.onSelect({
|
|
originalEvent: event,
|
|
node: props.node
|
|
});
|
|
}
|
|
}
|
|
if (props.onSelectionChange) {
|
|
props.onSelectionChange({
|
|
originalEvent: event,
|
|
value: selectionKeys
|
|
});
|
|
}
|
|
DomHandler.clearSelection();
|
|
};
|
|
var propagateUp = function propagateUp(event) {
|
|
var check = event.check;
|
|
var selectionKeys = event.selectionKeys;
|
|
var checkedChildCount = 0;
|
|
var _iterator = _createForOfIteratorHelper$3(props.node.children),
|
|
_step;
|
|
try {
|
|
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
var child = _step.value;
|
|
if (selectionKeys[child.key] && selectionKeys[child.key].checked) {
|
|
checkedChildCount++;
|
|
}
|
|
}
|
|
} catch (err) {
|
|
_iterator.e(err);
|
|
} finally {
|
|
_iterator.f();
|
|
}
|
|
var parentKey = props.node.key;
|
|
var children = ObjectUtils.findChildrenByKey(props.originalOptions, parentKey);
|
|
var isParentPartiallyChecked = children.some(function (ele) {
|
|
return ele.key in selectionKeys;
|
|
});
|
|
var isCompletelyChecked = children.every(function (ele) {
|
|
return ele.key in selectionKeys && selectionKeys[ele.key].checked;
|
|
});
|
|
if (isParentPartiallyChecked && !isCompletelyChecked) {
|
|
selectionKeys[parentKey] = {
|
|
checked: false,
|
|
partialChecked: true
|
|
};
|
|
} else if (isCompletelyChecked) {
|
|
selectionKeys[parentKey] = {
|
|
checked: true,
|
|
partialChecked: false
|
|
};
|
|
} else if (check) {
|
|
selectionKeys[parentKey] = {
|
|
checked: false,
|
|
partialChecked: false
|
|
};
|
|
} else {
|
|
delete selectionKeys[parentKey];
|
|
}
|
|
if (props.propagateSelectionUp && props.onPropagateUp) {
|
|
props.onPropagateUp(event);
|
|
}
|
|
};
|
|
var _propagateDown = function propagateDown(node, check, selectionKeys) {
|
|
if (check) {
|
|
selectionKeys[node.key] = {
|
|
checked: true,
|
|
partialChecked: false
|
|
};
|
|
} else {
|
|
delete selectionKeys[node.key];
|
|
}
|
|
if (node.children && node.children.length) {
|
|
for (var i = 0; i < node.children.length; i++) {
|
|
_propagateDown(node.children[i], check, selectionKeys);
|
|
}
|
|
}
|
|
};
|
|
var onRightClick = function onRightClick(event) {
|
|
DomHandler.clearSelection();
|
|
if (props.onContextMenuSelectionChange) {
|
|
props.onContextMenuSelectionChange({
|
|
originalEvent: event,
|
|
value: props.node.key
|
|
});
|
|
}
|
|
if (props.onContextMenu) {
|
|
props.onContextMenu({
|
|
originalEvent: event,
|
|
node: props.node
|
|
});
|
|
}
|
|
};
|
|
var _onKeyDown = function onKeyDown(event, item) {
|
|
switch (event.code) {
|
|
case 'ArrowDown':
|
|
onArrowDownKey(event);
|
|
break;
|
|
case 'ArrowUp':
|
|
onArrowUpKey(event);
|
|
break;
|
|
case 'ArrowLeft':
|
|
onArrowLeftKey(event);
|
|
break;
|
|
case 'ArrowRight':
|
|
onArrowRightKey(event);
|
|
break;
|
|
case 'Home':
|
|
onHomeKey(event);
|
|
break;
|
|
case 'End':
|
|
onEndKey(event);
|
|
break;
|
|
case 'Enter':
|
|
case 'NumpadEnter':
|
|
case 'Space':
|
|
if (!DomHandler.isClickable(event.target)) {
|
|
onEnterKey(event);
|
|
}
|
|
break;
|
|
case 'Tab':
|
|
onTabKey();
|
|
break;
|
|
}
|
|
};
|
|
var onArrowDownKey = function onArrowDownKey(event) {
|
|
var nextElementSibling = event.currentTarget.nextElementSibling;
|
|
nextElementSibling && focusRowChange(event.currentTarget, nextElementSibling);
|
|
event.preventDefault();
|
|
};
|
|
var onArrowUpKey = function onArrowUpKey(event) {
|
|
var previousElementSibling = event.currentTarget.previousElementSibling;
|
|
previousElementSibling && focusRowChange(event.currentTarget, previousElementSibling);
|
|
event.preventDefault();
|
|
};
|
|
var onArrowRightKey = function onArrowRightKey(event) {
|
|
var ishiddenIcon = DomHandler.findSingle(event.currentTarget, 'button').style.visibility === 'hidden';
|
|
DomHandler.findSingle(elementRef.current, '[data-pc-section="rowtoggler"]');
|
|
if (ishiddenIcon) {
|
|
return;
|
|
}
|
|
!expanded && expand(event, true);
|
|
event.preventDefault();
|
|
};
|
|
var onArrowLeftKey = function onArrowLeftKey(event) {
|
|
if (props.level === 0 && !expanded) {
|
|
return;
|
|
}
|
|
var currentTarget = event.currentTarget;
|
|
var ishiddenIcon = DomHandler.findSingle(currentTarget, 'button').style.visibility === 'hidden';
|
|
DomHandler.findSingle(currentTarget, '[data-pc-section="rowtoggler"]');
|
|
if (expanded && !ishiddenIcon) {
|
|
collapse(event);
|
|
return;
|
|
}
|
|
var target = _findBeforeClickableNode(currentTarget);
|
|
target && focusRowChange(currentTarget, target);
|
|
};
|
|
var onHomeKey = function onHomeKey(event) {
|
|
var findFirstElement = DomHandler.findSingle(event.currentTarget.parentElement, "tr[aria-level=\"".concat(props.level + 1, "\"]"));
|
|
findFirstElement && DomHandler.focus(findFirstElement);
|
|
event.preventDefault();
|
|
};
|
|
var onEndKey = function onEndKey(event) {
|
|
var nodes = DomHandler.find(event.currentTarget.parentElement, "tr[aria-level=\"".concat(props.level + 1, "\"]"));
|
|
var findFirstElement = nodes[nodes.length - 1];
|
|
DomHandler.focus(findFirstElement);
|
|
event.preventDefault();
|
|
};
|
|
var onEnterKey = function onEnterKey(event) {
|
|
event.preventDefault();
|
|
setTabIndexForSelectionMode(event, nodeTouched.current);
|
|
if (props.selectionMode === 'checkbox') {
|
|
onCheckboxChange(event);
|
|
return;
|
|
}
|
|
props.onRowClick(event, props.node);
|
|
nodeTouched.current = false;
|
|
};
|
|
var onTabKey = function onTabKey() {
|
|
var rows = _toConsumableArray(DomHandler.find(elementRef.current.parentElement, 'tr'));
|
|
var hasSelectedRow = rows.some(function (row) {
|
|
return DomHandler.getAttribute(row, 'data-p-highlight') || row.getAttribute('aria-checked') === 'true';
|
|
});
|
|
rows.forEach(function (row) {
|
|
row.tabIndex = -1;
|
|
});
|
|
if (hasSelectedRow) {
|
|
var selectedNodes = rows.filter(function (node) {
|
|
return DomHandler.getAttribute(node, 'data-p-highlight') || node.getAttribute('aria-checked') === 'true';
|
|
});
|
|
selectedNodes[0].tabIndex = 0;
|
|
return;
|
|
}
|
|
rows[0].tabIndex = 0;
|
|
};
|
|
var focusRowChange = function focusRowChange(firstFocusableRow, currentFocusedRow) {
|
|
firstFocusableRow.tabIndex = '-1';
|
|
currentFocusedRow.tabIndex = '0';
|
|
DomHandler.focus(currentFocusedRow);
|
|
};
|
|
var _findBeforeClickableNode = function findBeforeClickableNode(node) {
|
|
var prevNode = node.previousElementSibling;
|
|
if (prevNode) {
|
|
var prevNodeButton = prevNode.querySelector('button');
|
|
if (prevNodeButton && prevNodeButton.style.visibility !== 'hidden') {
|
|
return prevNode;
|
|
}
|
|
return _findBeforeClickableNode(prevNode);
|
|
}
|
|
return null;
|
|
};
|
|
var setTabIndexForSelectionMode = function setTabIndexForSelectionMode(event, nodeTouched) {
|
|
if (props.selectionMode !== null) {
|
|
var elements = _toConsumableArray(DomHandler.find(elementRef.current.parentElement, 'tr'));
|
|
event.currentTarget.tabIndex = nodeTouched === false ? -1 : 0;
|
|
if (elements.every(function (element) {
|
|
return element.tabIndex === -1;
|
|
})) {
|
|
elements[0].tabIndex = 0;
|
|
}
|
|
}
|
|
};
|
|
var isSelected = function isSelected() {
|
|
if (props.selectionMode === 'single') {
|
|
return props.selectionKeys === props.node.key;
|
|
} else if ((props.selectionMode === 'multiple' || props.selectionMode === 'checkbox') && props.selectionKeys) {
|
|
return props.selectionKeys[props.node.key] !== undefined;
|
|
} else {
|
|
return false;
|
|
}
|
|
};
|
|
var isChecked = function isChecked() {
|
|
return props.selectionKeys ? props.selectionKeys[props.node.key] && props.selectionKeys[props.node.key].checked : false;
|
|
};
|
|
var isPartialChecked = function isPartialChecked() {
|
|
return props.selectionKeys ? props.selectionKeys[props.node.key] && props.selectionKeys[props.node.key].partialChecked : false;
|
|
};
|
|
var createToggler = function createToggler(column) {
|
|
var label = expanded ? ariaLabel('collapseLabel') : ariaLabel('expandLabel');
|
|
var rowTogglerIconProps = mergeProps({
|
|
className: cx('rowTogglerIcon'),
|
|
'aria-hidden': true
|
|
}, getColumnPTOptions(column, 'rowTogglerIcon'));
|
|
var icon = expanded ? /*#__PURE__*/React.createElement(ChevronDownIcon, rowTogglerIconProps) : /*#__PURE__*/React.createElement(ChevronRightIcon, rowTogglerIconProps);
|
|
var togglerIcon = IconUtils.getJSXIcon(props.togglerIcon || icon, _objectSpread$4({}, rowTogglerIconProps), {
|
|
props: props
|
|
});
|
|
var rowTogglerProps = mergeProps({
|
|
type: 'button',
|
|
className: cx('rowToggler'),
|
|
onClick: function onClick(e) {
|
|
return onTogglerClick(e);
|
|
},
|
|
tabIndex: -1,
|
|
style: {
|
|
marginLeft: props.level * 16 + 'px',
|
|
visibility: props.node.leaf === false || props.node.children && props.node.children.length ? 'visible' : 'hidden'
|
|
},
|
|
'aria-label': label
|
|
}, getColumnPTOptions(column, 'rowToggler'));
|
|
var content = /*#__PURE__*/React.createElement("button", rowTogglerProps, togglerIcon, /*#__PURE__*/React.createElement(Ripple, null));
|
|
if (props.togglerTemplate) {
|
|
var defaultContentOptions = {
|
|
onClick: onTogglerClick,
|
|
containerClassName: 'p-treetable-toggler p-link',
|
|
iconClassName: 'p-treetable-toggler-icon',
|
|
element: content,
|
|
props: props,
|
|
expanded: expanded,
|
|
buttonStyle: {
|
|
marginLeft: props.level * 16 + 'px',
|
|
visibility: props.node.leaf === false || props.node.children && props.node.children.length ? 'visible' : 'hidden'
|
|
}
|
|
};
|
|
content = ObjectUtils.getJSXElement(props.togglerTemplate, props.node, defaultContentOptions);
|
|
}
|
|
return content;
|
|
};
|
|
var createCheckbox = function createCheckbox(column) {
|
|
if (props.selectionMode === 'checkbox' && props.node.selectable !== false) {
|
|
var checked = isChecked();
|
|
var partialChecked = isPartialChecked();
|
|
var checkboxIconProps = mergeProps({
|
|
className: cx('checkIcon')
|
|
}, getColumnPTOptions(column, 'rowCheckbox.icon'));
|
|
var icon = checked ? props.checkboxIcon || /*#__PURE__*/React.createElement(CheckIcon, checkboxIconProps) : partialChecked ? props.checkboxIcon || /*#__PURE__*/React.createElement(MinusIcon, null) : null;
|
|
var checkIcon = IconUtils.getJSXIcon(icon, {}, {
|
|
props: props,
|
|
checked: checked,
|
|
partialChecked: partialChecked
|
|
});
|
|
var rowCheckboxProps = mergeProps({
|
|
className: cx('rowCheckbox'),
|
|
checked: checked || partialChecked,
|
|
onChange: onCheckboxChange,
|
|
icon: checkIcon,
|
|
unstyled: isUnstyled === null || isUnstyled === void 0 ? void 0 : isUnstyled(),
|
|
tabIndex: -1,
|
|
'data-p-highlight': checked,
|
|
'data-p-checked': checked,
|
|
'data-p-partialchecked': partialChecked
|
|
}, getColumnCheckboxPTOptions(column, 'rowCheckbox'));
|
|
return /*#__PURE__*/React.createElement(Checkbox, rowCheckboxProps);
|
|
}
|
|
return null;
|
|
};
|
|
var createCell = function createCell(column, index) {
|
|
var toggler;
|
|
var checkbox;
|
|
if (getColumnProp(column, 'hidden')) {
|
|
return null;
|
|
}
|
|
if (getColumnProp(column, 'expander')) {
|
|
toggler = createToggler(column);
|
|
checkbox = createCheckbox(column);
|
|
}
|
|
return /*#__PURE__*/React.createElement(TreeTableBodyCell, _extends({
|
|
hostName: props.hostName,
|
|
key: "".concat(getColumnProp(column, 'columnKey') || getColumnProp(column, 'field'), "_").concat(index)
|
|
}, ColumnBase.getCProps(column), {
|
|
index: index,
|
|
column: column,
|
|
selectOnEdit: props.selectOnEdit,
|
|
selected: isSelected(),
|
|
node: props.node,
|
|
rowData: props.node && props.node.data,
|
|
rowIndex: props.rowIndex,
|
|
ptCallbacks: props.ptCallbacks,
|
|
metaData: props.metaData
|
|
}), toggler, checkbox);
|
|
};
|
|
var createChildren = function createChildren() {
|
|
if (expanded && props.node.children) {
|
|
return props.node.children.map(function (childNode, index) {
|
|
return /*#__PURE__*/React.createElement(TreeTableRow, {
|
|
hostName: props.hostName,
|
|
key: "".concat(childNode.key || JSON.stringify(childNode.data), "_").concat(index),
|
|
level: props.level + 1,
|
|
rowIndex: props.rowIndex + '_' + index,
|
|
node: childNode,
|
|
originalOptions: props.originalOptions,
|
|
checkboxIcon: props.checkboxIcon,
|
|
columns: props.columns,
|
|
expandedKeys: props.expandedKeys,
|
|
selectOnEdit: props.selectOnEdit,
|
|
onToggle: props.onToggle,
|
|
togglerTemplate: props.togglerTemplate,
|
|
onExpand: props.onExpand,
|
|
onCollapse: props.onCollapse,
|
|
selectionMode: props.selectionMode,
|
|
selectionKeys: props.selectionKeys,
|
|
onSelectionChange: props.onSelectionChange,
|
|
metaKeySelection: props.metaKeySelection,
|
|
onRowClick: props.onRowClick,
|
|
onRowMouseEnter: props.onRowMouseEnter,
|
|
onRowMouseLeave: props.onRowMouseLeave,
|
|
onSelect: props.onSelect,
|
|
onUnselect: props.onUnselect,
|
|
propagateSelectionUp: props.propagateSelectionUp,
|
|
propagateSelectionDown: props.propagateSelectionDown,
|
|
onPropagateUp: propagateUp,
|
|
rowClassName: props.rowClassName,
|
|
contextMenuSelectionKey: props.contextMenuSelectionKey,
|
|
onContextMenuSelectionChange: props.onContextMenuSelectionChange,
|
|
onContextMenu: props.onContextMenu,
|
|
ptCallbacks: props.ptCallbacks,
|
|
metaData: props.metaData
|
|
});
|
|
});
|
|
}
|
|
return null;
|
|
};
|
|
var cells = props.columns.map(createCell);
|
|
var children = createChildren();
|
|
var rowClassName = null;
|
|
if (props.rowClassName) {
|
|
rowClassName = props.rowClassName(props.node);
|
|
}
|
|
var rowProps = mergeProps({
|
|
tabIndex: 0,
|
|
className: classNames(cx('row', {
|
|
isSelected: isSelected,
|
|
rowProps: props
|
|
})),
|
|
'aria-expanded': expanded,
|
|
'aria-level': props.level + 1,
|
|
'aria-posinset': props.ariaPosInSet,
|
|
'aria-setsize': props.ariaSetSize,
|
|
'aria-checked': isChecked(),
|
|
'aria-selected': isSelected(),
|
|
style: props.node.style,
|
|
onClick: function onClick(e) {
|
|
return _onClick(e);
|
|
},
|
|
onTouchEnd: function onTouchEnd(e) {
|
|
return _onTouchEnd();
|
|
},
|
|
onContextMenu: function onContextMenu(e) {
|
|
return onRightClick(e);
|
|
},
|
|
onKeyDown: function onKeyDown(e) {
|
|
return _onKeyDown(e);
|
|
},
|
|
onMouseEnter: function onMouseEnter(e) {
|
|
return _onMouseEnter(e);
|
|
},
|
|
onMouseLeave: function onMouseLeave(e) {
|
|
return _onMouseLeave(e);
|
|
},
|
|
'data-p-highlight': isSelected()
|
|
}, getRowPTOptions('row'), {
|
|
className: classNames(rowClassName, props.node.className) // #5983 must be last so all unstyled merging takes place first
|
|
});
|
|
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("tr", _extends({
|
|
ref: elementRef
|
|
}, rowProps), cells), children);
|
|
});
|
|
TreeTableRow.displayName = 'TreeTableRow';
|
|
|
|
function _createForOfIteratorHelper$2(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$2(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
|
|
function _unsupportedIterableToArray$2(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$2(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$2(r, a) : void 0; } }
|
|
function _arrayLikeToArray$2(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
function ownKeys$3(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
function _objectSpread$3(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$3(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$3(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
var TreeTableBody = /*#__PURE__*/React.memo(function (props) {
|
|
var mergeProps = useMergeProps();
|
|
var isSingleSelectionMode = props.selectionMode === 'single';
|
|
var isMultipleSelectionMode = props.selectionMode === 'multiple';
|
|
var _props$ptCallbacks = props.ptCallbacks,
|
|
ptm = _props$ptCallbacks.ptm,
|
|
cx = _props$ptCallbacks.cx;
|
|
var getPTOptions = function getPTOptions(key, options) {
|
|
return ptm(key, _objectSpread$3({
|
|
hostName: props.hostName
|
|
}, options));
|
|
};
|
|
var _flattenizeTree = function flattenizeTree(nodes) {
|
|
var rows = [];
|
|
nodes = nodes || props.value;
|
|
var _iterator = _createForOfIteratorHelper$2(nodes),
|
|
_step;
|
|
try {
|
|
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
var node = _step.value;
|
|
rows.push(node.key);
|
|
if (isExpandedKey(node.key)) {
|
|
rows = rows.concat(_flattenizeTree(node.children));
|
|
}
|
|
}
|
|
} catch (err) {
|
|
_iterator.e(err);
|
|
} finally {
|
|
_iterator.f();
|
|
}
|
|
return rows;
|
|
};
|
|
var isExpandedKey = function isExpandedKey(key) {
|
|
return props.expandedKeys && !!props.expandedKeys[key];
|
|
};
|
|
var onRowClick = function onRowClick(event, node) {
|
|
if (props.onRowClick) {
|
|
props.onRowClick({
|
|
originalEvent: event,
|
|
node: node
|
|
});
|
|
}
|
|
var targetNode = event.target.nodeName;
|
|
if (targetNode === 'INPUT' || targetNode === 'BUTTON' || targetNode === 'A' || DomHandler.getAttribute(event.target, 'data-pc-section') === 'columnresizer') {
|
|
return;
|
|
}
|
|
if ((isSingleSelectionMode || isMultipleSelectionMode) && node.selectable !== false) {
|
|
var selectionKeys;
|
|
var selected = isSelected(node);
|
|
var metaSelection = props.metaKeySelection;
|
|
var flatKeys = _flattenizeTree();
|
|
var rowIndex = flatKeys.findIndex(function (key) {
|
|
return key === node.key;
|
|
});
|
|
if (isMultipleSelectionMode && event.shiftKey) {
|
|
DomHandler.clearSelection();
|
|
|
|
// find first selected row
|
|
var anchorRowIndex = flatKeys.findIndex(function (key) {
|
|
return props.selectionKeys[key];
|
|
});
|
|
var rangeStart = Math.min(rowIndex, anchorRowIndex);
|
|
var rangeEnd = Math.max(rowIndex, anchorRowIndex);
|
|
selectionKeys = _objectSpread$3({}, props.selectionKeys);
|
|
for (var i = rangeStart; i <= rangeEnd; i++) {
|
|
var rowKey = flatKeys[i];
|
|
selectionKeys[rowKey] = true;
|
|
}
|
|
} else {
|
|
//anchorRowIndex = rowIndex;
|
|
|
|
if (metaSelection) {
|
|
var metaKey = event.metaKey || event.ctrlKey;
|
|
if (selected && metaKey) {
|
|
if (isSingleSelectionMode) {
|
|
selectionKeys = null;
|
|
} else {
|
|
selectionKeys = _objectSpread$3({}, props.selectionKeys);
|
|
delete selectionKeys[node.key];
|
|
}
|
|
if (props.onUnselect) {
|
|
props.onUnselect({
|
|
originalEvent: event,
|
|
node: node
|
|
});
|
|
}
|
|
} else {
|
|
if (isSingleSelectionMode) {
|
|
selectionKeys = node.key;
|
|
} else if (isMultipleSelectionMode) {
|
|
selectionKeys = !metaKey ? {} : props.selectionKeys ? _objectSpread$3({}, props.selectionKeys) : {};
|
|
selectionKeys[node.key] = true;
|
|
}
|
|
if (props.onSelect) {
|
|
props.onSelect({
|
|
originalEvent: event,
|
|
node: node
|
|
});
|
|
}
|
|
}
|
|
} else if (isSingleSelectionMode) {
|
|
if (selected) {
|
|
selectionKeys = null;
|
|
if (props.onUnselect) {
|
|
props.onUnselect({
|
|
originalEvent: event,
|
|
node: node
|
|
});
|
|
}
|
|
} else {
|
|
selectionKeys = node.key;
|
|
if (props.onSelect) {
|
|
props.onSelect({
|
|
originalEvent: event,
|
|
node: node
|
|
});
|
|
}
|
|
}
|
|
} else if (selected) {
|
|
selectionKeys = _objectSpread$3({}, props.selectionKeys);
|
|
delete selectionKeys[node.key];
|
|
if (props.onUnselect) {
|
|
props.onUnselect({
|
|
originalEvent: event,
|
|
node: node
|
|
});
|
|
}
|
|
} else {
|
|
selectionKeys = props.selectionKeys ? _objectSpread$3({}, props.selectionKeys) : {};
|
|
selectionKeys[node.key] = true;
|
|
if (props.onSelect) {
|
|
props.onSelect({
|
|
originalEvent: event,
|
|
node: node
|
|
});
|
|
}
|
|
}
|
|
}
|
|
if (props.onSelectionChange) {
|
|
props.onSelectionChange({
|
|
originalEvent: event,
|
|
value: selectionKeys
|
|
});
|
|
}
|
|
}
|
|
};
|
|
var isSelected = function isSelected(node) {
|
|
if ((isSingleSelectionMode || isMultipleSelectionMode) && props.selectionKeys) {
|
|
return isSingleSelectionMode ? props.selectionKeys === node.key : props.selectionKeys[node.key] !== undefined;
|
|
}
|
|
return false;
|
|
};
|
|
var createRow = function createRow(node, index) {
|
|
return /*#__PURE__*/React.createElement(TreeTableRow, {
|
|
hostName: props.hostName,
|
|
key: "".concat(node.key || JSON.stringify(node.data), "_").concat(index),
|
|
level: 0,
|
|
rowIndex: index,
|
|
ariaSetSize: props.value.length,
|
|
ariaPosInSet: index + 1,
|
|
selectOnEdit: props.selectOnEdit,
|
|
node: node,
|
|
originalOptions: props.originalOptions,
|
|
checkboxIcon: props.checkboxIcon,
|
|
columns: props.columns,
|
|
expandedKeys: props.expandedKeys,
|
|
onToggle: props.onToggle,
|
|
togglerTemplate: props.togglerTemplate,
|
|
onExpand: props.onExpand,
|
|
onCollapse: props.onCollapse,
|
|
selectionMode: props.selectionMode,
|
|
selectionKeys: props.selectionKeys,
|
|
onSelectionChange: props.onSelectionChange,
|
|
metaKeySelection: props.metaKeySelection,
|
|
onRowClick: onRowClick,
|
|
onRowMouseEnter: props.onRowMouseEnter,
|
|
onRowMouseLeave: props.onRowMouseLeave,
|
|
onSelect: props.onSelect,
|
|
onUnselect: props.onUnselect,
|
|
propagateSelectionUp: props.propagateSelectionUp,
|
|
propagateSelectionDown: props.propagateSelectionDown,
|
|
rowClassName: props.rowClassName,
|
|
contextMenuSelectionKey: props.contextMenuSelectionKey,
|
|
onContextMenuSelectionChange: props.onContextMenuSelectionChange,
|
|
onContextMenu: props.onContextMenu,
|
|
ptCallbacks: props.ptCallbacks,
|
|
metaData: props.metaData
|
|
});
|
|
};
|
|
var createRows = function createRows() {
|
|
if (props.paginator && !props.lazy) {
|
|
var rpp = props.rows || 0;
|
|
var startIndex = props.first || 0;
|
|
var endIndex = startIndex + rpp;
|
|
var rows = [];
|
|
for (var i = startIndex; i < endIndex; i++) {
|
|
var rowData = props.value[i];
|
|
if (rowData) {
|
|
rows.push(createRow(props.value[i]));
|
|
} else {
|
|
break;
|
|
}
|
|
}
|
|
return rows;
|
|
}
|
|
return props.value.map(createRow);
|
|
};
|
|
var createEmptyMessage = function createEmptyMessage() {
|
|
if (props.loading) {
|
|
return null;
|
|
}
|
|
var colSpan = props.columns ? props.columns.length : null;
|
|
var content = ObjectUtils.getJSXElement(props.emptyMessage, {
|
|
props: props.tableProps
|
|
}) || localeOption('emptyMessage');
|
|
var emptyMessageProps = mergeProps({
|
|
className: cx('emptyMessage')
|
|
}, getPTOptions('emptyMessage'));
|
|
var emptyMessageCellProps = mergeProps({
|
|
colSpan: colSpan
|
|
}, getPTOptions('emptyMessageCell'));
|
|
return /*#__PURE__*/React.createElement("tr", emptyMessageProps, /*#__PURE__*/React.createElement("td", emptyMessageCellProps, content));
|
|
};
|
|
var content = props.value && props.value.length ? createRows() : createEmptyMessage();
|
|
var tbodyProps = mergeProps({
|
|
role: 'rowgroup',
|
|
className: cx('tbody')
|
|
}, getPTOptions('tbody'));
|
|
return /*#__PURE__*/React.createElement("tbody", tbodyProps, content);
|
|
});
|
|
TreeTableBody.displayName = 'TreeTableBody';
|
|
|
|
var ColumnGroupBase = ComponentBase.extend({
|
|
defaultProps: {
|
|
__TYPE: 'ColumnGroup',
|
|
children: undefined
|
|
},
|
|
getCProp: function getCProp(group, name) {
|
|
return ObjectUtils.getComponentProp(group, name, ColumnGroupBase.defaultProps);
|
|
},
|
|
getCProps: function getCProps(group) {
|
|
return ObjectUtils.getComponentProps(group, ColumnGroupBase.defaultProps);
|
|
}
|
|
});
|
|
|
|
var RowBase = ComponentBase.extend({
|
|
defaultProps: {
|
|
__TYPE: 'Row',
|
|
style: null,
|
|
className: null,
|
|
children: undefined
|
|
},
|
|
getCProp: function getCProp(row, name) {
|
|
return ObjectUtils.getComponentProp(row, name, RowBase.defaultProps);
|
|
}
|
|
});
|
|
|
|
var TreeTableFooter = /*#__PURE__*/React.memo(function (props) {
|
|
var mergeProps = useMergeProps();
|
|
var _props$ptCallbacks = props.ptCallbacks,
|
|
ptm = _props$ptCallbacks.ptm,
|
|
ptmo = _props$ptCallbacks.ptmo,
|
|
cx = _props$ptCallbacks.cx;
|
|
var context = React.useContext(PrimeReactContext);
|
|
var getColumnProp = function getColumnProp(column, name) {
|
|
return ColumnBase.getCProp(column, name);
|
|
};
|
|
var getColumnProps = function getColumnProps(column) {
|
|
return ColumnBase.getCProps(column);
|
|
};
|
|
var getColumnPTOptions = function getColumnPTOptions(column, key) {
|
|
var cProps = getColumnProps(column);
|
|
var columnMetadata = {
|
|
props: cProps,
|
|
parent: props.metaData,
|
|
hostName: props.hostName
|
|
};
|
|
return mergeProps(ptm("column.".concat(key), {
|
|
column: columnMetadata
|
|
}), ptm("column.".concat(key), columnMetadata), ptmo(cProps, key, columnMetadata));
|
|
};
|
|
var createFooterCell = function createFooterCell(column, index) {
|
|
var footerCellProps = mergeProps({
|
|
key: column.field || index,
|
|
className: getColumnProp(column, 'footerClassName') || getColumnProp(column, 'className'),
|
|
style: getColumnProp(column, 'footerStyle') || getColumnProp(column, 'style'),
|
|
rowSpan: getColumnProp(column, 'rowSpan'),
|
|
colSpan: getColumnProp(column, 'colSpan')
|
|
}, getColumnPTOptions(column, 'footerCell'));
|
|
var content = ObjectUtils.getJSXElement(getColumnProp(column, 'footer'), {
|
|
props: getColumnProps(column)
|
|
});
|
|
return /*#__PURE__*/React.createElement("td", footerCellProps, content);
|
|
};
|
|
var createFooterRow = function createFooterRow(row, index) {
|
|
var rowColumns = React.Children.toArray(RowBase.getCProp(row, 'children'));
|
|
var rowFooterCells = rowColumns.map(createFooterCell);
|
|
var footerRowProps = mergeProps(ptm('footerRow', {
|
|
hostName: props.hostName,
|
|
role: 'row'
|
|
}), RowBase.getProps(row.props, context));
|
|
return /*#__PURE__*/React.createElement("tr", _extends({}, footerRowProps, {
|
|
key: index
|
|
}), rowFooterCells);
|
|
};
|
|
var createColumnGroup = function createColumnGroup() {
|
|
var rows = React.Children.toArray(ColumnGroupBase.getCProp(props.columnGroup, 'children'));
|
|
return rows.map(createFooterRow);
|
|
};
|
|
var createColumns = function createColumns(columns) {
|
|
if (columns) {
|
|
var headerCells = columns.map(createFooterCell);
|
|
var footerRowProps = mergeProps(ptm('footerRow', {
|
|
hostName: props.hostName
|
|
}));
|
|
return /*#__PURE__*/React.createElement("tr", footerRowProps, headerCells);
|
|
}
|
|
return null;
|
|
};
|
|
var hasFooter = function hasFooter() {
|
|
return props.columnGroup ? true : props.columns ? props.columns.some(function (col) {
|
|
return col && getColumnProp(col, 'footer');
|
|
}) : false;
|
|
};
|
|
var content = props.columnGroup ? createColumnGroup() : createColumns(props.columns);
|
|
if (hasFooter()) {
|
|
var tfootProps = mergeProps({
|
|
role: 'rowgroup',
|
|
className: cx('tfoot')
|
|
}, ptm('tfoot', {
|
|
hostName: props.hostName
|
|
}));
|
|
return /*#__PURE__*/React.createElement("tfoot", tfootProps, content);
|
|
}
|
|
return null;
|
|
});
|
|
TreeTableFooter.displayName = 'TreeTableFooter';
|
|
|
|
function _createForOfIteratorHelper$1(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$1(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
|
|
function _unsupportedIterableToArray$1(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$1(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$1(r, a) : void 0; } }
|
|
function _arrayLikeToArray$1(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
function ownKeys$2(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
function _objectSpread$2(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$2(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$2(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
var TreeTableHeader = /*#__PURE__*/React.memo(function (props) {
|
|
var mergeProps = useMergeProps();
|
|
var _props$ptCallbacks = props.ptCallbacks,
|
|
ptm = _props$ptCallbacks.ptm,
|
|
ptmo = _props$ptCallbacks.ptmo,
|
|
cx = _props$ptCallbacks.cx;
|
|
var filterTimeout = React.useRef(null);
|
|
var context = React.useContext(PrimeReactContext);
|
|
var getColumnProp = function getColumnProp(column) {
|
|
return column ? typeof (arguments.length <= 1 ? undefined : arguments[1]) === 'string' ? ColumnBase.getCProp(column, arguments.length <= 1 ? undefined : arguments[1]) : ColumnBase.getCProp((arguments.length <= 1 ? undefined : arguments[1]) || column, arguments.length <= 2 ? undefined : arguments[2]) : null;
|
|
};
|
|
var getColumnProps = function getColumnProps(column) {
|
|
return ColumnBase.getCProps(column);
|
|
};
|
|
var getColumnPTOptions = function getColumnPTOptions(column, key, params) {
|
|
var cProps = getColumnProps(column);
|
|
var columnMetadata = _objectSpread$2({
|
|
props: cProps,
|
|
parent: props.metaData,
|
|
hostName: props.hostName
|
|
}, params);
|
|
return mergeProps(ptm("column.".concat(key), {
|
|
column: columnMetadata
|
|
}), ptm("column.".concat(key), columnMetadata), ptmo(cProps, key, columnMetadata));
|
|
};
|
|
var onHeaderClick = function onHeaderClick(event, column) {
|
|
if (getColumnProp(column, 'sortable')) {
|
|
var targetNode = event.target;
|
|
if (DomHandler.getAttribute(targetNode, 'data-p-sortable-column') === true || DomHandler.getAttribute(targetNode, 'data-pc-section') === 'headertitle' || DomHandler.getAttribute(targetNode, 'data-pc-section') === 'sorticon' || DomHandler.getAttribute(targetNode.parentElement, 'data-pc-section') === 'sorticon' || targetNode.closest('[data-p-sortable-column="true"]') && !targetNode.closest('[data-pc-section="filtermenubutton"]')) {
|
|
props.onSort({
|
|
originalEvent: event,
|
|
sortField: getColumnProp(column, 'sortField') || getColumnProp(column, 'field'),
|
|
sortFunction: getColumnProp(column, 'sortFunction'),
|
|
sortable: getColumnProp(column, 'sortable')
|
|
});
|
|
DomHandler.clearSelection();
|
|
}
|
|
}
|
|
};
|
|
var onHeaderMouseDown = function onHeaderMouseDown(event, column) {
|
|
if (props.reorderableColumns && getColumnProp(column, 'reorderable')) {
|
|
if (event.target.nodeName !== 'INPUT') {
|
|
event.currentTarget.draggable = true;
|
|
} else if (event.target.nodeName === 'INPUT') {
|
|
event.currentTarget.draggable = false;
|
|
}
|
|
}
|
|
};
|
|
var onHeaderKeyDown = function onHeaderKeyDown(event, column) {
|
|
if (event.key === 'Enter' || event.code === 'Space') {
|
|
onHeaderClick(event, column);
|
|
event.preventDefault();
|
|
}
|
|
};
|
|
var getMultiSortMetaDataIndex = function getMultiSortMetaDataIndex(column) {
|
|
if (props.multiSortMeta) {
|
|
for (var i = 0; i < props.multiSortMeta.length; i++) {
|
|
if (props.multiSortMeta[i].field === getColumnProp(column, 'field')) {
|
|
return i;
|
|
}
|
|
}
|
|
}
|
|
return -1;
|
|
};
|
|
var onResizerMouseDown = function onResizerMouseDown(event, column) {
|
|
if (props.resizableColumns && props.onResizeStart) {
|
|
props.onResizeStart({
|
|
originalEvent: event,
|
|
columnEl: event.target.parentElement,
|
|
column: column
|
|
});
|
|
}
|
|
};
|
|
var _onDragStart = function onDragStart(event, column) {
|
|
if (props.onDragStart) {
|
|
props.onDragStart({
|
|
originalEvent: event,
|
|
column: column
|
|
});
|
|
}
|
|
};
|
|
var _onDragOver = function onDragOver(event, column) {
|
|
if (props.onDragOver) {
|
|
props.onDragOver({
|
|
originalEvent: event,
|
|
column: column
|
|
});
|
|
}
|
|
};
|
|
var _onDragLeave = function onDragLeave(event, column) {
|
|
if (props.onDragLeave) {
|
|
props.onDragLeave({
|
|
originalEvent: event,
|
|
column: column
|
|
});
|
|
}
|
|
};
|
|
var _onDrop = function onDrop(event, column) {
|
|
if (props.onDrop) {
|
|
props.onDrop({
|
|
originalEvent: event,
|
|
column: column
|
|
});
|
|
}
|
|
};
|
|
var onFilterInput = function onFilterInput(e, column) {
|
|
if (getColumnProp(column, 'filter') && props.onFilter) {
|
|
if (filterTimeout.current) {
|
|
clearTimeout(filterTimeout.current);
|
|
}
|
|
var filterValue = e.target.value;
|
|
filterTimeout.current = setTimeout(function () {
|
|
props.onFilter({
|
|
value: filterValue,
|
|
field: getColumnProp(column, 'field'),
|
|
matchMode: getColumnProp(column, 'filterMatchMode') || 'startsWith'
|
|
});
|
|
filterTimeout.current = null;
|
|
}, props.filterDelay);
|
|
}
|
|
};
|
|
var hasColumnFilter = function hasColumnFilter(columns) {
|
|
if (columns) {
|
|
var _iterator = _createForOfIteratorHelper$1(columns),
|
|
_step;
|
|
try {
|
|
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
var col = _step.value;
|
|
if (getColumnProp(col, 'filter')) {
|
|
return true;
|
|
}
|
|
}
|
|
} catch (err) {
|
|
_iterator.e(err);
|
|
} finally {
|
|
_iterator.f();
|
|
}
|
|
}
|
|
return false;
|
|
};
|
|
var getAriaSort = function getAriaSort(column, sorted, sortOrder) {
|
|
if (getColumnProp(column, 'sortable')) {
|
|
if (sorted && sortOrder < 0) {
|
|
return 'descending';
|
|
} else if (sorted && sortOrder > 0) {
|
|
return 'ascending';
|
|
}
|
|
return 'none';
|
|
}
|
|
return null;
|
|
};
|
|
var createSortIcon = function createSortIcon(column, sorted, sortOrder) {
|
|
if (getColumnProp(column, 'sortable')) {
|
|
var sortIconProps = mergeProps({
|
|
className: cx('sortIcon')
|
|
}, getColumnPTOptions(column, 'sortIcon', {
|
|
context: {
|
|
sorted: sorted
|
|
}
|
|
}));
|
|
var icon = sorted ? sortOrder < 0 ? /*#__PURE__*/React.createElement(SortAmountDownIcon, sortIconProps) : /*#__PURE__*/React.createElement(SortAmountUpAltIcon, sortIconProps) : /*#__PURE__*/React.createElement(SortAltIcon, sortIconProps);
|
|
var sortIcon = IconUtils.getJSXIcon(props.sortIcon || icon, _objectSpread$2({}, sortIconProps), {
|
|
props: props,
|
|
sorted: sorted,
|
|
sortOrder: sortOrder
|
|
});
|
|
return sortIcon;
|
|
}
|
|
return null;
|
|
};
|
|
var createResizer = function createResizer(column) {
|
|
if (props.resizableColumns) {
|
|
var columnResizerProps = mergeProps({
|
|
className: cx('columnResizer'),
|
|
onMouseDown: function onMouseDown(e) {
|
|
return onResizerMouseDown(e, column);
|
|
}
|
|
}, getColumnPTOptions(column, 'columnResizer'));
|
|
return /*#__PURE__*/React.createElement("span", columnResizerProps);
|
|
}
|
|
return null;
|
|
};
|
|
var createSortBadge = function createSortBadge(column, sortMetaDataIndex) {
|
|
if (sortMetaDataIndex !== -1 && props.multiSortMeta && props.multiSortMeta.length > 1) {
|
|
var sortBadgeProps = mergeProps({
|
|
className: cx('sortBadge')
|
|
}, getColumnPTOptions(column, 'sortBadge'));
|
|
return /*#__PURE__*/React.createElement("span", sortBadgeProps, sortMetaDataIndex + 1);
|
|
}
|
|
return null;
|
|
};
|
|
var createTitle = function createTitle(column, options) {
|
|
var title = ObjectUtils.getJSXElement(getColumnProp(column, 'header'), {
|
|
props: options
|
|
});
|
|
var headerTitleProps = mergeProps({
|
|
className: cx('headerTitle')
|
|
}, getColumnPTOptions(column, 'headerTitle'));
|
|
return /*#__PURE__*/React.createElement("span", headerTitleProps, title);
|
|
};
|
|
var createHeaderCell = function createHeaderCell(column, options) {
|
|
var filterElement;
|
|
if (getColumnProp(column, 'hidden')) {
|
|
return null;
|
|
}
|
|
if (getColumnProp(column, 'filter') && options.renderFilter) {
|
|
filterElement = getColumnProp(column, 'filterElement') || /*#__PURE__*/React.createElement(InputText, {
|
|
onInput: function onInput(e) {
|
|
return onFilterInput(e, column);
|
|
},
|
|
type: props.filterType,
|
|
defaultValue: props.filters && props.filters[getColumnProp(column, 'field')] ? props.filters[getColumnProp(column, 'field')].value : null,
|
|
className: "p-column-filter",
|
|
placeholder: getColumnProp(column, 'filterPlaceholder'),
|
|
maxLength: getColumnProp(column, 'filterMaxLength'),
|
|
pt: getColumnPTOptions(column, 'filterInput'),
|
|
unstyled: props.unstyled,
|
|
__parentMetadata: {
|
|
parent: props.metaData
|
|
}
|
|
});
|
|
}
|
|
if (options.filterOnly) {
|
|
var _frozen = getColumnProp(column, 'frozen');
|
|
var _headerCellProps = mergeProps({
|
|
role: 'columnheader',
|
|
key: getColumnProp(column, 'columnKey') || getColumnProp(column, 'field') || options.index,
|
|
className: classNames(cx('headerCell', {
|
|
options: options,
|
|
frozen: _frozen
|
|
}), getColumnProp(column, 'filterHeaderClassName')),
|
|
style: getColumnProp(column, 'filterHeaderStyle') || getColumnProp(column, 'style'),
|
|
rowSpan: getColumnProp(column, 'rowSpan'),
|
|
colSpan: getColumnProp(column, 'colSpan'),
|
|
'data-p-sortable-column': getColumnProp(column, 'sortable'),
|
|
'data-p-resizable-column': props.resizableColumns,
|
|
'data-p-frozen-column': _frozen
|
|
}, getColumnPTOptions(column, 'root'), getColumnPTOptions(column, 'headerCell', {
|
|
context: {
|
|
frozen: _frozen
|
|
}
|
|
}));
|
|
return /*#__PURE__*/React.createElement("th", _headerCellProps, filterElement);
|
|
}
|
|
var headerCellRef = /*#__PURE__*/React.createRef(null);
|
|
var sortMetaDataIndex = getMultiSortMetaDataIndex(column);
|
|
var multiSortMetaData = sortMetaDataIndex !== -1 ? props.multiSortMeta[sortMetaDataIndex] : null;
|
|
var singleSorted = getColumnProp(column, 'field') === props.sortField;
|
|
var multipleSorted = multiSortMetaData !== null;
|
|
var sorted = getColumnProp(column, 'sortable') && (singleSorted || multipleSorted);
|
|
var frozen = getColumnProp(column, 'frozen');
|
|
var align = getColumnProp(column, 'alignHeader');
|
|
var sortOrder = 0;
|
|
if (singleSorted) {
|
|
sortOrder = props.sortOrder;
|
|
} else if (multipleSorted) {
|
|
sortOrder = multiSortMetaData.order;
|
|
}
|
|
var sortIconElement = createSortIcon(column, sorted, sortOrder);
|
|
var ariaSortData = getAriaSort(column, sorted, sortOrder);
|
|
var sortBadge = createSortBadge(column, sortMetaDataIndex);
|
|
var ariaSort = sorted ? sortOrder ? sortOrder < 0 ? 'descending' : 'ascending' : 'none' : null;
|
|
var headerTooltip = getColumnProp(column, 'headerTooltip');
|
|
var hasTooltip = ObjectUtils.isNotEmpty(headerTooltip);
|
|
var title = createTitle(column, options);
|
|
var resizer = createResizer(column);
|
|
var sortable = getColumnProp(column, 'sortable');
|
|
var headerCellProps = mergeProps(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty({
|
|
role: 'columnheader',
|
|
className: classNames(getColumnProp(column, 'headerClassName') || getColumnProp(column, 'className'), cx('headerCell', {
|
|
headerProps: props,
|
|
frozen: frozen,
|
|
column: column,
|
|
options: options,
|
|
getColumnProp: getColumnProp,
|
|
sorted: sorted,
|
|
align: align
|
|
})),
|
|
style: getColumnProp(column, 'headerStyle') || getColumnProp(column, 'style'),
|
|
tabIndex: sortable ? props.tabIndex : null,
|
|
'aria-sort': ariaSort,
|
|
//TODO: aria-sort is defined here two times (ariaSort, ariaSortData) ?
|
|
onClick: function onClick(e) {
|
|
return onHeaderClick(e, column);
|
|
},
|
|
onMouseDown: function onMouseDown(e) {
|
|
return onHeaderMouseDown(e, column);
|
|
},
|
|
onKeyDown: function onKeyDown(e) {
|
|
return onHeaderKeyDown(e, column);
|
|
},
|
|
rowSpan: getColumnProp(column, 'rowSpan'),
|
|
colSpan: getColumnProp(column, 'colSpan')
|
|
}, "aria-sort", ariaSortData), "onDragStart", function onDragStart(e) {
|
|
return _onDragStart(e, column);
|
|
}), "onDragOver", function onDragOver(e) {
|
|
return _onDragOver(e, column);
|
|
}), "onDragLeave", function onDragLeave(e) {
|
|
return _onDragLeave(e, column);
|
|
}), "onDrop", function onDrop(e) {
|
|
return _onDrop(e, column);
|
|
}), 'data-p-sortable-column', sortable), 'data-p-resizable-column', props.resizableColumns), 'data-p-highlight', sorted), 'data-p-frozen-column', getColumnProp(column, 'frozen')), getColumnPTOptions(column, 'root'), getColumnPTOptions(column, 'headerCell', {
|
|
context: {
|
|
sorted: sorted,
|
|
frozen: frozen,
|
|
resizable: props.resizableColumns
|
|
}
|
|
}));
|
|
var headerContentProps = mergeProps({
|
|
className: cx('headerContent')
|
|
}, getColumnPTOptions(column, 'headerContent'));
|
|
var header = /*#__PURE__*/React.createElement("div", headerContentProps, title, sortIconElement, sortBadge, filterElement);
|
|
return /*#__PURE__*/React.createElement(React.Fragment, {
|
|
key: column.columnKey || column.field || options.index
|
|
}, /*#__PURE__*/React.createElement("th", _extends({
|
|
ref: headerCellRef
|
|
}, headerCellProps), resizer, header), hasTooltip && /*#__PURE__*/React.createElement(Tooltip, _extends({
|
|
target: headerCellRef,
|
|
content: headerTooltip
|
|
}, getColumnProp(column, 'headerTooltipOptions'), {
|
|
unstyled: props.unstyled
|
|
})));
|
|
};
|
|
var createHeaderRow = function createHeaderRow(row, index) {
|
|
var rowColumns = React.Children.toArray(RowBase.getCProp(row, 'children'));
|
|
var rowHeaderCells = rowColumns.map(function (col, i) {
|
|
return createHeaderCell(col, {
|
|
index: i,
|
|
filterOnly: false,
|
|
renderFilter: true
|
|
});
|
|
});
|
|
var headerRowProps = mergeProps(ptm('headerRow', {
|
|
hostName: props.hostName
|
|
}), RowBase.getProps(row.props, context));
|
|
return /*#__PURE__*/React.createElement("tr", _extends({
|
|
role: "row"
|
|
}, headerRowProps, {
|
|
key: index
|
|
}), rowHeaderCells);
|
|
};
|
|
var createColumnGroup = function createColumnGroup() {
|
|
var rows = React.Children.toArray(ColumnGroupBase.getCProp(props.columnGroup, 'children'));
|
|
return rows.map(createHeaderRow);
|
|
};
|
|
var createColumns = function createColumns(columns) {
|
|
if (columns) {
|
|
var headerRowProps = mergeProps(ptm('headerRow', {
|
|
hostName: props.hostName,
|
|
role: 'row'
|
|
}));
|
|
if (hasColumnFilter(columns)) {
|
|
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("tr", headerRowProps, columns.map(function (col, i) {
|
|
return createHeaderCell(col, {
|
|
index: i,
|
|
filterOnly: false,
|
|
renderFilter: false
|
|
});
|
|
})), /*#__PURE__*/React.createElement("tr", headerRowProps, columns.map(function (col, i) {
|
|
return createHeaderCell(col, {
|
|
index: i,
|
|
filterOnly: true,
|
|
renderFilter: true
|
|
});
|
|
})));
|
|
}
|
|
return /*#__PURE__*/React.createElement("tr", _extends({
|
|
role: "row"
|
|
}, headerRowProps), columns.map(function (col, i) {
|
|
return createHeaderCell(col, {
|
|
index: i,
|
|
filterOnly: false,
|
|
renderFilter: false
|
|
});
|
|
}));
|
|
}
|
|
return null;
|
|
};
|
|
var content = props.columnGroup ? createColumnGroup() : createColumns(props.columns);
|
|
var theadProps = mergeProps({
|
|
role: 'rowgroup',
|
|
className: cx('thead')
|
|
}, ptm('thead', {
|
|
hostName: props.hostName
|
|
}));
|
|
return /*#__PURE__*/React.createElement("thead", theadProps, content);
|
|
});
|
|
TreeTableHeader.displayName = 'TreeTableHeader';
|
|
|
|
function ownKeys$1(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
function _objectSpread$1(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
var TreeTableScrollableView = /*#__PURE__*/React.memo(function (props) {
|
|
var elementRef = React.useRef(null);
|
|
var scrollHeaderRef = React.useRef(null);
|
|
var scrollHeaderBoxRef = React.useRef(null);
|
|
var scrollBodyRef = React.useRef(null);
|
|
var scrollTableRef = React.useRef(null);
|
|
var scrollFooterRef = React.useRef(null);
|
|
var scrollFooterBoxRef = React.useRef(null);
|
|
var mergeProps = useMergeProps();
|
|
var _props$ptCallbacks = props.ptCallbacks,
|
|
ptm = _props$ptCallbacks.ptm,
|
|
cx = _props$ptCallbacks.cx,
|
|
sx = _props$ptCallbacks.sx;
|
|
var getPTOptions = function getPTOptions(key, options) {
|
|
return ptm(key, _objectSpread$1({
|
|
hostName: props.hostName
|
|
}, options));
|
|
};
|
|
var setScrollHeight = function setScrollHeight() {
|
|
if (props.scrollHeight) {
|
|
if (props.scrollHeight.indexOf('%') !== -1) {
|
|
var datatableContainer = findDataTableContainer(elementRef.current);
|
|
scrollBodyRef.current.style.visibility = 'hidden';
|
|
scrollBodyRef.current.style.height = '100px'; //temporary height to calculate static height
|
|
var containerHeight = DomHandler.getOuterHeight(datatableContainer);
|
|
var relativeHeight = DomHandler.getOuterHeight(datatableContainer.parentElement) * parseInt(props.scrollHeight, 10) / 100;
|
|
var staticHeight = containerHeight - 100; //total height of headers, footers, paginators
|
|
var scrollBodyHeight = relativeHeight - staticHeight;
|
|
scrollBodyRef.current.style.height = 'auto';
|
|
scrollBodyRef.current.style.maxHeight = scrollBodyHeight + 'px';
|
|
scrollBodyRef.current.style.visibility = 'visible';
|
|
} else {
|
|
scrollBodyRef.current.style.maxHeight = props.scrollHeight;
|
|
}
|
|
}
|
|
};
|
|
var findDataTableContainer = function findDataTableContainer(element) {
|
|
if (element) {
|
|
var el = element;
|
|
while (el && !(DomHandler.getAttribute(el, 'data-pc-section') === 'root' || DomHandler.getAttribute(el, 'data-pc-name') === 'treetable')) {
|
|
el = el.parentElement;
|
|
}
|
|
return el;
|
|
}
|
|
return null;
|
|
};
|
|
var onHeaderScroll = function onHeaderScroll() {
|
|
scrollHeaderRef.current.scrollLeft = 0;
|
|
};
|
|
var onBodyScroll = function onBodyScroll() {
|
|
var frozenView = elementRef.current.previousElementSibling;
|
|
var frozenScrollBody;
|
|
if (frozenView) {
|
|
frozenScrollBody = DomHandler.findSingle(frozenView, '[data-pc-section="scrollablebody"]');
|
|
}
|
|
scrollHeaderBoxRef.current.style.transform = "translateX(-".concat(scrollBodyRef.current.scrollLeft, "px)");
|
|
if (scrollFooterBoxRef.current) {
|
|
scrollFooterBoxRef.current.style.transform = "translateX(-".concat(scrollBodyRef.current.scrollLeft, "px)");
|
|
}
|
|
if (frozenScrollBody) {
|
|
frozenScrollBody.scrollTop = scrollBodyRef.current.scrollTop;
|
|
}
|
|
};
|
|
useMountEffect(function () {
|
|
var el = DomHandler.find(findDataTableContainer(elementRef.current), '[data-pc-section="scrollablebody"]');
|
|
el = el.length > 1 ? el[1] : el[0];
|
|
var scrollBarWidth = DomHandler.calculateScrollbarWidth(el);
|
|
if (!props.frozen) {
|
|
var _scrollBarWidth = DomHandler.calculateScrollbarWidth();
|
|
scrollHeaderBoxRef.current.style.marginRight = _scrollBarWidth + 'px';
|
|
if (scrollFooterBoxRef.current) {
|
|
scrollFooterBoxRef.current.style.marginRight = _scrollBarWidth + 'px';
|
|
}
|
|
} else {
|
|
scrollBodyRef.current.style.paddingBottom = scrollBarWidth + 'px';
|
|
}
|
|
});
|
|
React.useEffect(function () {
|
|
setScrollHeight();
|
|
});
|
|
var createColGroup = function createColGroup() {
|
|
if (ObjectUtils.isNotEmpty(props.columns)) {
|
|
var cols = props.columns.map(function (col, i) {
|
|
return /*#__PURE__*/React.createElement("col", {
|
|
key: col.field + '_' + i
|
|
});
|
|
});
|
|
var scrollableColgroupProps = mergeProps({
|
|
className: cx('scrollableColgroup')
|
|
}, getPTOptions('scrollableColgroup'));
|
|
return /*#__PURE__*/React.createElement("colgroup", scrollableColgroupProps, cols);
|
|
}
|
|
return null;
|
|
};
|
|
var width = props.frozen ? props.frozenWidth : 'calc(100% - ' + props.frozenWidth + ')';
|
|
var left = props.frozen ? null : props.frozenWidth;
|
|
var colGroup = createColGroup();
|
|
var scrollableProps = mergeProps({
|
|
className: cx('scrollable', {
|
|
scrolaableProps: props
|
|
}),
|
|
style: {
|
|
width: width,
|
|
left: left
|
|
}
|
|
}, getPTOptions('scrollable'));
|
|
var scrollableHeaderProps = mergeProps({
|
|
className: cx('scrollableHeader'),
|
|
onScroll: function onScroll(e) {
|
|
return onHeaderScroll();
|
|
}
|
|
}, getPTOptions('scrollableHeader'));
|
|
var scrollableHeaderBoxProps = mergeProps({
|
|
className: cx('scrollableHeaderBox')
|
|
}, getPTOptions('scrollableHeaderBox'));
|
|
var scrollableHeaderTableProps = mergeProps({
|
|
className: cx('scrollableHeaderTable')
|
|
}, getPTOptions('scrollableHeaderTable'));
|
|
var scrollableBodyProps = mergeProps({
|
|
className: cx('scrollableBody'),
|
|
style: !props.frozen && props.scrollHeight ? {
|
|
overflowY: 'scroll'
|
|
} : undefined,
|
|
onScroll: function onScroll(e) {
|
|
return onBodyScroll();
|
|
}
|
|
}, getPTOptions('scrollableBody'));
|
|
var scrollableBodyTableProps = mergeProps({
|
|
style: {
|
|
top: '0'
|
|
},
|
|
className: cx('scrollableBodyTable')
|
|
}, getPTOptions('scrollableBodyTable'));
|
|
var scrollableFooterProps = mergeProps({
|
|
className: cx('scrollableFooter')
|
|
}, getPTOptions('scrollableFooter'));
|
|
var scrollableFooterBoxProps = mergeProps({
|
|
className: sx('scrollableFooterBox')
|
|
}, getPTOptions('scrollableFooterBox'));
|
|
var scrollableFooterTableProps = mergeProps({
|
|
className: cx('scrollableFooterTable')
|
|
}, getPTOptions('scrollableFooterTable'));
|
|
return /*#__PURE__*/React.createElement("div", _extends({
|
|
ref: elementRef
|
|
}, scrollableProps), /*#__PURE__*/React.createElement("div", _extends({
|
|
ref: scrollHeaderRef
|
|
}, scrollableHeaderProps), /*#__PURE__*/React.createElement("div", _extends({
|
|
ref: scrollHeaderBoxRef
|
|
}, scrollableHeaderBoxProps), /*#__PURE__*/React.createElement("table", scrollableHeaderTableProps, colGroup, props.header))), /*#__PURE__*/React.createElement("div", _extends({
|
|
ref: scrollBodyRef
|
|
}, scrollableBodyProps), /*#__PURE__*/React.createElement("table", _extends({
|
|
ref: scrollTableRef
|
|
}, scrollableBodyTableProps), colGroup, props.body)), /*#__PURE__*/React.createElement("div", _extends({
|
|
ref: scrollFooterRef
|
|
}, scrollableFooterProps), /*#__PURE__*/React.createElement("div", _extends({
|
|
ref: scrollFooterBoxRef
|
|
}, scrollableFooterBoxProps), /*#__PURE__*/React.createElement("table", scrollableFooterTableProps, colGroup, props.footer))));
|
|
});
|
|
TreeTableScrollableView.displayName = 'TreeTableScrollableView';
|
|
|
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
|
|
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
var TreeTable = /*#__PURE__*/React.forwardRef(function (inProps, ref) {
|
|
var mergeProps = useMergeProps();
|
|
var context = React.useContext(PrimeReactContext);
|
|
var props = TreeTableBase.getProps(inProps, context);
|
|
var _React$useState = React.useState(props.expandedKeys),
|
|
_React$useState2 = _slicedToArray(_React$useState, 2),
|
|
expandedKeysState = _React$useState2[0],
|
|
setExpandedKeysState = _React$useState2[1];
|
|
var _React$useState3 = React.useState(props.first),
|
|
_React$useState4 = _slicedToArray(_React$useState3, 2),
|
|
firstState = _React$useState4[0],
|
|
setFirstState = _React$useState4[1];
|
|
var _React$useState5 = React.useState(props.rows),
|
|
_React$useState6 = _slicedToArray(_React$useState5, 2),
|
|
rowsState = _React$useState6[0],
|
|
setRowsState = _React$useState6[1];
|
|
var _React$useState7 = React.useState(props.sortField),
|
|
_React$useState8 = _slicedToArray(_React$useState7, 2),
|
|
sortFieldState = _React$useState8[0],
|
|
setSortFieldState = _React$useState8[1];
|
|
var _React$useState9 = React.useState(props.sortOrder),
|
|
_React$useState10 = _slicedToArray(_React$useState9, 2),
|
|
sortOrderState = _React$useState10[0],
|
|
setSortOrderState = _React$useState10[1];
|
|
var _React$useState11 = React.useState(props.multiSortMeta),
|
|
_React$useState12 = _slicedToArray(_React$useState11, 2),
|
|
multiSortMetaState = _React$useState12[0],
|
|
setMultiSortMetaState = _React$useState12[1];
|
|
var _React$useState13 = React.useState(props.filters),
|
|
_React$useState14 = _slicedToArray(_React$useState13, 2),
|
|
filtersState = _React$useState14[0],
|
|
setFiltersState = _React$useState14[1];
|
|
var _React$useState15 = React.useState([]),
|
|
_React$useState16 = _slicedToArray(_React$useState15, 2),
|
|
columnOrderState = _React$useState16[0],
|
|
setColumnOrderState = _React$useState16[1];
|
|
var metaData = {
|
|
props: props,
|
|
state: {
|
|
expandedKeys: expandedKeysState,
|
|
first: firstState,
|
|
rows: rowsState,
|
|
sortField: sortFieldState,
|
|
sortOrder: sortOrderState,
|
|
multiSortMeta: multiSortMetaState,
|
|
filters: filtersState,
|
|
columnOrder: columnOrderState
|
|
},
|
|
context: {
|
|
scrollable: props.scrollable
|
|
}
|
|
};
|
|
var ptCallbacks = TreeTableBase.setMetaData(metaData);
|
|
useHandleStyle(TreeTableBase.css.styles, ptCallbacks.isUnstyled, {
|
|
name: 'treetable'
|
|
});
|
|
var elementRef = React.useRef(null);
|
|
var tableRef = React.useRef(null);
|
|
var resizerHelperRef = React.useRef(null);
|
|
var reorderIndicatorUpRef = React.useRef(null);
|
|
var reorderIndicatorDownRef = React.useRef(null);
|
|
var columnResizing = React.useRef(null);
|
|
var resizeColumn = React.useRef(null);
|
|
var resizeColumnProps = React.useRef(null);
|
|
var lastResizerHelperX = React.useRef(0);
|
|
var iconWidth = React.useRef(0);
|
|
var iconHeight = React.useRef(0);
|
|
var draggedColumnEl = React.useRef(null);
|
|
var draggedColumn = React.useRef(null);
|
|
var dropPosition = React.useRef(null);
|
|
var columnSortable = React.useRef(null);
|
|
var columnSortFunction = React.useRef(null);
|
|
var columnField = React.useRef(null);
|
|
var childFocusEvent = React.useRef(null);
|
|
var _useEventListener = useEventListener({
|
|
type: 'mousemove',
|
|
listener: function listener(event) {
|
|
if (columnResizing.current) {
|
|
onColumnResize(event);
|
|
}
|
|
}
|
|
}),
|
|
_useEventListener2 = _slicedToArray(_useEventListener, 2),
|
|
bindDocumentMouseMoveListener = _useEventListener2[0],
|
|
unbindDocumentMouseMoveListener = _useEventListener2[1];
|
|
var _useEventListener3 = useEventListener({
|
|
type: 'mouseup',
|
|
listener: function listener(event) {
|
|
if (columnResizing.current) {
|
|
columnResizing.current = false;
|
|
onColumnResizeEnd();
|
|
}
|
|
}
|
|
}),
|
|
_useEventListener4 = _slicedToArray(_useEventListener3, 2),
|
|
bindDocumentMouseUpListener = _useEventListener4[0],
|
|
unbindDocumentMouseUpListener = _useEventListener4[1];
|
|
var isCustomStateStorage = function isCustomStateStorage() {
|
|
return props.stateStorage === 'custom';
|
|
};
|
|
var isStateful = function isStateful() {
|
|
return props.stateKey != null || isCustomStateStorage();
|
|
};
|
|
var saveState = function saveState() {
|
|
var state = {};
|
|
if (props.paginator) {
|
|
state.first = getFirst();
|
|
state.rows = getRows();
|
|
}
|
|
var sortField = getSortField();
|
|
if (sortField) {
|
|
state.sortField = sortField;
|
|
state.sortOrder = getSortOrder();
|
|
}
|
|
var multiSortMeta = getMultiSortMeta();
|
|
if (multiSortMeta) {
|
|
state.multiSortMeta = multiSortMeta;
|
|
}
|
|
if (hasFilter()) {
|
|
state.filters = getFilters();
|
|
}
|
|
if (props.reorderableColumns) {
|
|
state.columnOrder = columnOrderState;
|
|
}
|
|
state.expandedKeysState = expandedKeysState;
|
|
if (props.selectionKeys && props.onSelectionChange) {
|
|
state.selectionKeys = props.selectionKeys;
|
|
}
|
|
if (isCustomStateStorage()) {
|
|
if (props.customSaveState) {
|
|
props.customSaveState(state);
|
|
}
|
|
} else {
|
|
var storage = getStorage(props.stateStorage);
|
|
if (ObjectUtils.isNotEmpty(state)) {
|
|
storage.setItem(props.stateKey, JSON.stringify(state));
|
|
}
|
|
}
|
|
if (props.onStateSave) {
|
|
props.onStateSave(state);
|
|
}
|
|
};
|
|
var clearState = function clearState() {
|
|
var storage = getStorage(props.stateStorage);
|
|
if (storage && props.stateKey) {
|
|
storage.removeItem(props.stateKey);
|
|
}
|
|
};
|
|
var restoreState = function restoreState() {
|
|
var restoredState = {};
|
|
if (isCustomStateStorage()) {
|
|
if (props.customRestoreState) {
|
|
restoredState = props.customRestoreState();
|
|
}
|
|
} else {
|
|
var storage = getStorage(props.stateStorage);
|
|
var stateString = storage.getItem(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);
|
|
}
|
|
}
|
|
_restoreState(restoredState);
|
|
};
|
|
var restoreTableState = function restoreTableState(restoredState) {
|
|
_restoreState(restoredState);
|
|
};
|
|
var _restoreState = function _restoreState() {
|
|
var restoredState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
if (ObjectUtils.isNotEmpty(restoredState)) {
|
|
if (props.paginator) {
|
|
if (props.onPage) {
|
|
var getOnPageParams = function getOnPageParams(first, rows) {
|
|
var totalRecords = getTotalRecords(processedData());
|
|
var pageCount = Math.ceil(totalRecords / rows) || 1;
|
|
var page = Math.floor(first / rows);
|
|
return {
|
|
first: first,
|
|
rows: rows,
|
|
page: page,
|
|
pageCount: pageCount
|
|
};
|
|
};
|
|
props.onPage(createEvent(getOnPageParams(restoredState.first, restoredState.rows)));
|
|
} else {
|
|
setFirstState(restoredState.first);
|
|
setRowsState(restoredState.rows);
|
|
}
|
|
}
|
|
if (restoredState.sortField) {
|
|
if (props.onSort) {
|
|
props.onSort(createEvent({
|
|
sortField: restoredState.sortField,
|
|
sortOrder: restoredState.sortOrder
|
|
}));
|
|
} else {
|
|
setSortFieldState(restoredState.sortField);
|
|
setSortOrderState(restoredState.sortOrder);
|
|
}
|
|
}
|
|
if (restoredState.multiSortMeta) {
|
|
if (props.onSort) {
|
|
props.onSort(createEvent({
|
|
multiSortMeta: restoredState.multiSortMeta
|
|
}));
|
|
} else {
|
|
setMultiSortMetaState(restoredState.multiSortMeta);
|
|
}
|
|
}
|
|
if (restoredState.filters) {
|
|
if (props.onFilter) {
|
|
props.onFilter(createEvent({
|
|
filters: restoredState.filters
|
|
}));
|
|
} else {
|
|
setFiltersState(cloneFilters(restoredState.filters));
|
|
}
|
|
}
|
|
if (props.reorderableColumns) {
|
|
setColumnOrderState(restoredState.columnOrder);
|
|
}
|
|
if (restoredState.expandedKeysState) {
|
|
if (props.onToggle) {
|
|
props.onRowToggle({
|
|
data: restoredState.expandedKeysState
|
|
});
|
|
} else {
|
|
setExpandedKeysState(restoredState.expandedKeysState);
|
|
}
|
|
}
|
|
if (restoredState.selectionKeys && props.onSelectionChange) {
|
|
props.onSelectionChange({
|
|
value: restoredState.selectionKeys
|
|
});
|
|
}
|
|
if (props.onStateRestore) {
|
|
props.onStateRestore(restoredState);
|
|
}
|
|
}
|
|
};
|
|
var onToggle = function onToggle(event) {
|
|
var originalEvent = event.originalEvent,
|
|
value = event.value,
|
|
navigateFocusToChild = event.navigateFocusToChild;
|
|
if (props.onToggle) {
|
|
props.onToggle({
|
|
originalEvent: originalEvent,
|
|
value: value
|
|
});
|
|
} else {
|
|
if (navigateFocusToChild) {
|
|
childFocusEvent.current = originalEvent;
|
|
}
|
|
setExpandedKeysState(value);
|
|
}
|
|
};
|
|
var onPageChange = function onPageChange(event) {
|
|
if (props.onPage) {
|
|
props.onPage(event);
|
|
} else {
|
|
setFirstState(event.first);
|
|
setRowsState(event.rows);
|
|
}
|
|
if (props.onValueChange) {
|
|
props.onValueChange(processedData());
|
|
}
|
|
};
|
|
var onSort = function onSort(event) {
|
|
var sortField = event.sortField;
|
|
var sortOrder = props.defaultSortOrder;
|
|
var multiSortMeta;
|
|
var eventMeta;
|
|
columnSortable.current = event.sortable;
|
|
columnSortFunction.current = event.sortFunction;
|
|
columnField.current = event.sortField;
|
|
if (props.sortMode === 'multiple') {
|
|
var metaKey = event.originalEvent.metaKey || event.originalEvent.ctrlKey;
|
|
multiSortMeta = _toConsumableArray(getMultiSortMeta());
|
|
if (multiSortMeta && multiSortMeta instanceof Array) {
|
|
var sortMeta = multiSortMeta.find(function (sortMeta) {
|
|
return sortMeta.field === sortField;
|
|
});
|
|
sortOrder = sortMeta ? getCalculatedSortOrder(sortMeta.order) : sortOrder;
|
|
}
|
|
var newMetaData = {
|
|
field: sortField,
|
|
order: sortOrder
|
|
};
|
|
if (sortOrder) {
|
|
if (!multiSortMeta || !metaKey) {
|
|
multiSortMeta = [];
|
|
}
|
|
addSortMeta(newMetaData, multiSortMeta);
|
|
} else if (props.removableSort && multiSortMeta) {
|
|
removeSortMeta(newMetaData, multiSortMeta);
|
|
}
|
|
eventMeta = {
|
|
multiSortMeta: multiSortMeta
|
|
};
|
|
} else {
|
|
sortOrder = getSortField() === sortField ? getCalculatedSortOrder(getSortOrder()) : sortOrder;
|
|
if (props.removableSort) {
|
|
sortField = sortOrder ? sortField : null;
|
|
}
|
|
eventMeta = {
|
|
sortField: sortField,
|
|
sortOrder: sortOrder
|
|
};
|
|
}
|
|
if (props.onSort) {
|
|
props.onSort(eventMeta);
|
|
} else {
|
|
setFirstState(0);
|
|
setSortFieldState(eventMeta.sortField);
|
|
setSortOrderState(eventMeta.sortOrder);
|
|
setMultiSortMetaState(eventMeta.multiSortMeta);
|
|
}
|
|
if (props.onValueChange) {
|
|
props.onValueChange(processedData({
|
|
sortField: sortField,
|
|
sortOrder: sortOrder,
|
|
multiSortMeta: multiSortMeta
|
|
}));
|
|
}
|
|
};
|
|
var getCalculatedSortOrder = function getCalculatedSortOrder(currentOrder) {
|
|
return props.removableSort ? props.defaultSortOrder === currentOrder ? currentOrder * -1 : 0 : currentOrder * -1;
|
|
};
|
|
var addSortMeta = function addSortMeta(meta, multiSortMeta) {
|
|
var index = -1;
|
|
for (var i = 0; i < multiSortMeta.length; i++) {
|
|
if (multiSortMeta[i].field === meta.field) {
|
|
index = i;
|
|
break;
|
|
}
|
|
}
|
|
if (index >= 0) {
|
|
multiSortMeta[index] = meta;
|
|
} else {
|
|
multiSortMeta.push(meta);
|
|
}
|
|
};
|
|
var removeSortMeta = function removeSortMeta(meta, multiSortMeta) {
|
|
var index = -1;
|
|
for (var i = 0; i < multiSortMeta.length; i++) {
|
|
if (multiSortMeta[i].field === meta.field) {
|
|
index = i;
|
|
break;
|
|
}
|
|
}
|
|
if (index >= 0) {
|
|
multiSortMeta.splice(index, 1);
|
|
}
|
|
multiSortMeta = multiSortMeta.length > 0 ? multiSortMeta : null;
|
|
};
|
|
var _sortSingle = function sortSingle(_ref) {
|
|
var data = _ref.data,
|
|
field = _ref.field,
|
|
order = _ref.order;
|
|
var value = _toConsumableArray(data);
|
|
if (columnSortable.current && columnSortFunction.current) {
|
|
value = columnSortFunction.current({
|
|
data: data,
|
|
field: field,
|
|
order: order
|
|
});
|
|
} else {
|
|
// performance optimization to prevent resolving field data in each loop
|
|
var lookupMap = new Map();
|
|
var comparator = ObjectUtils.localeComparator(context && context.locale || PrimeReact.locale);
|
|
var _iterator = _createForOfIteratorHelper(data),
|
|
_step;
|
|
try {
|
|
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
var node = _step.value;
|
|
lookupMap.set(node.data, ObjectUtils.resolveFieldData(node.data, field));
|
|
}
|
|
} catch (err) {
|
|
_iterator.e(err);
|
|
} finally {
|
|
_iterator.f();
|
|
}
|
|
value.sort(function (node1, node2) {
|
|
var value1 = lookupMap.get(node1.data);
|
|
var value2 = lookupMap.get(node2.data);
|
|
return compareValuesOnSort(value1, value2, comparator, order);
|
|
});
|
|
for (var i = 0; i < value.length; i++) {
|
|
if (value[i].children && value[i].children.length) {
|
|
value[i].children = _sortSingle({
|
|
data: value[i].children,
|
|
field: field,
|
|
order: order
|
|
});
|
|
}
|
|
}
|
|
}
|
|
return value;
|
|
};
|
|
var _sortMultiple = function sortMultiple(_ref2) {
|
|
var data = _ref2.data,
|
|
_ref2$multiSortMeta = _ref2.multiSortMeta,
|
|
multiSortMeta = _ref2$multiSortMeta === void 0 ? [] : _ref2$multiSortMeta;
|
|
var value = _toConsumableArray(data);
|
|
var comparator = ObjectUtils.localeComparator(context && context.locale || PrimeReact.locale);
|
|
value.sort(function (node1, node2) {
|
|
return _multisortField(node1, node2, multiSortMeta, 0, comparator);
|
|
});
|
|
for (var i = 0; i < value.length; i++) {
|
|
if (value[i].children && value[i].children.length) {
|
|
value[i].children = _sortMultiple({
|
|
data: value[i].children,
|
|
multiSortMeta: multiSortMeta
|
|
});
|
|
}
|
|
}
|
|
return value;
|
|
};
|
|
var _multisortField = function multisortField(node1, node2, multiSortMeta, index, comparator) {
|
|
if (!multiSortMeta || !multiSortMeta[index]) {
|
|
return;
|
|
}
|
|
var value1 = ObjectUtils.resolveFieldData(node1.data, multiSortMeta[index].field);
|
|
var value2 = ObjectUtils.resolveFieldData(node2.data, multiSortMeta[index].field);
|
|
|
|
// check if they are equal handling dates and locales
|
|
if (ObjectUtils.compare(value1, value2, comparator) === 0) {
|
|
return multiSortMeta.length - 1 > index ? _multisortField(node1, node2, multiSortMeta, index + 1, comparator) : 0;
|
|
}
|
|
return compareValuesOnSort(value1, value2, comparator, multiSortMeta[index].order);
|
|
};
|
|
var compareValuesOnSort = function compareValuesOnSort(value1, value2, comparator, order) {
|
|
return ObjectUtils.sort(value1, value2, order, comparator, context && context.nullSortOrder || PrimeReact.nullSortOrder);
|
|
};
|
|
var filter = function filter(value, field, mode) {
|
|
onFilter({
|
|
value: value,
|
|
field: field,
|
|
matchMode: mode
|
|
});
|
|
};
|
|
var onFilter = function onFilter(event) {
|
|
setFiltersState(function (prevFilters) {
|
|
var filters = props.onFilter ? props.filters : prevFilters;
|
|
var newFilters = filters ? _objectSpread({}, filters) : {};
|
|
if (!isFilterBlank(event.value)) {
|
|
newFilters[event.field] = {
|
|
value: event.value,
|
|
matchMode: event.matchMode
|
|
};
|
|
} else if (newFilters[event.field]) {
|
|
delete newFilters[event.field];
|
|
}
|
|
if (props.onFilter) {
|
|
props.onFilter({
|
|
filters: newFilters
|
|
});
|
|
} else {
|
|
setFirstState(0);
|
|
}
|
|
if (props.onValueChange) {
|
|
props.onValueChange(processedData({
|
|
filters: newFilters
|
|
}));
|
|
}
|
|
return newFilters;
|
|
});
|
|
};
|
|
var cloneFilters = function cloneFilters(filters) {
|
|
filters = filters || props.filters;
|
|
var cloned = {};
|
|
if (filters) {
|
|
Object.entries(filters).forEach(function (_ref3) {
|
|
var _ref4 = _slicedToArray(_ref3, 2),
|
|
prop = _ref4[0],
|
|
value = _ref4[1];
|
|
cloned[prop] = value;
|
|
});
|
|
} else {
|
|
var columns = getColumns();
|
|
cloned = columns.reduce(function (filters, col) {
|
|
var field = getColumnProp(col, 'filterField') || getColumnProp(col, 'field');
|
|
var filterFunction = getColumnProp(col, 'filterFunction');
|
|
var dataType = getColumnProp(col, 'dataType');
|
|
var matchMode = getColumnProp(col, 'filterMatchMode') || (context && context.filterMatchModeOptions[dataType] || PrimeReact.filterMatchModeOptions[dataType] ? context && context.filterMatchModeOptions[dataType][0] || 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] = constraint;
|
|
return filters;
|
|
}, {});
|
|
}
|
|
return cloned;
|
|
};
|
|
var hasFilter = function hasFilter() {
|
|
return ObjectUtils.isNotEmpty(getFilters());
|
|
};
|
|
var isFilterBlank = function isFilterBlank(filter) {
|
|
if (filter !== null && filter !== undefined) {
|
|
if (typeof filter === 'string' && filter.trim().length === 0 || filter instanceof Array && filter.length === 0) {
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
return true;
|
|
};
|
|
var onColumnResizeStart = function onColumnResizeStart(event) {
|
|
var containerLeft = DomHandler.getOffset(elementRef.current).left;
|
|
resizeColumn.current = event.columnEl;
|
|
resizeColumnProps.current = event.column;
|
|
columnResizing.current = true;
|
|
lastResizerHelperX.current = event.originalEvent.pageX - containerLeft + elementRef.current.scrollLeft;
|
|
bindColumnResizeEvents();
|
|
};
|
|
var onColumnResize = function onColumnResize(event) {
|
|
var containerLeft = DomHandler.getOffset(elementRef.current).left;
|
|
!ptCallbacks.isUnstyled() && DomHandler.addClass(elementRef.current, 'p-unselectable-text');
|
|
resizerHelperRef.current.style.height = elementRef.current.offsetHeight + 'px';
|
|
resizerHelperRef.current.style.top = 0 + 'px';
|
|
resizerHelperRef.current.style.left = event.pageX - containerLeft + elementRef.current.scrollLeft + 'px';
|
|
resizerHelperRef.current.style.display = 'block';
|
|
};
|
|
var onColumnResizeEnd = function onColumnResizeEnd(event) {
|
|
var delta = resizerHelperRef.current.offsetLeft - lastResizerHelperX.current;
|
|
var columnWidth = resizeColumn.current.offsetWidth;
|
|
var newColumnWidth = columnWidth + delta;
|
|
var minWidth = resizeColumn.current.style.minWidth || 15;
|
|
if (columnWidth + delta > parseInt(minWidth, 10)) {
|
|
if (props.columnResizeMode === 'fit') {
|
|
var nextColumn = resizeColumn.current.nextElementSibling;
|
|
var nextColumnWidth = nextColumn.offsetWidth - delta;
|
|
if (newColumnWidth > 15 && nextColumnWidth > 15) {
|
|
if (props.scrollable) {
|
|
var scrollableView = findParentScrollableView(resizeColumn.current);
|
|
var scrollableBodyTable = DomHandler.findSingle(scrollableView, 'table[data-pc-section="scrollablebodytable"]');
|
|
var scrollableHeaderTable = DomHandler.findSingle(scrollableView, 'table[data-pc-section="scrollableheadertable"]');
|
|
var scrollableFooterTable = DomHandler.findSingle(scrollableView, 'table[data-pc-section="scrollablefootertable"]');
|
|
var resizeColumnIndex = DomHandler.index(resizeColumn.current);
|
|
resizeColGroup(scrollableHeaderTable, resizeColumnIndex, newColumnWidth, nextColumnWidth);
|
|
resizeColGroup(scrollableBodyTable, resizeColumnIndex, newColumnWidth, nextColumnWidth);
|
|
resizeColGroup(scrollableFooterTable, resizeColumnIndex, newColumnWidth, nextColumnWidth);
|
|
} else {
|
|
resizeColumn.current.style.width = newColumnWidth + 'px';
|
|
if (nextColumn) {
|
|
nextColumn.style.width = nextColumnWidth + 'px';
|
|
}
|
|
}
|
|
}
|
|
} else if (props.columnResizeMode === 'expand') {
|
|
if (props.scrollable) {
|
|
var _scrollableView = findParentScrollableView(resizeColumn.current);
|
|
var _scrollableBodyTable = DomHandler.findSingle(_scrollableView, 'table[data-pc-section="scrollablebodytable"]');
|
|
var _scrollableHeaderTable = DomHandler.findSingle(_scrollableView, 'table[data-pc-section="scrollableheadertable"]');
|
|
var _scrollableFooterTable = DomHandler.findSingle(_scrollableView, 'table[data-pc-section="scrollablefootertable"]');
|
|
_scrollableBodyTable.style.width = _scrollableBodyTable.offsetWidth + delta + 'px';
|
|
_scrollableHeaderTable.style.width = _scrollableHeaderTable.offsetWidth + delta + 'px';
|
|
if (_scrollableFooterTable) {
|
|
_scrollableFooterTable.style.width = _scrollableHeaderTable.offsetWidth + delta + 'px';
|
|
}
|
|
var _resizeColumnIndex = DomHandler.index(resizeColumn.current);
|
|
resizeColGroup(_scrollableHeaderTable, _resizeColumnIndex, newColumnWidth, null);
|
|
resizeColGroup(_scrollableBodyTable, _resizeColumnIndex, newColumnWidth, null);
|
|
resizeColGroup(_scrollableFooterTable, _resizeColumnIndex, newColumnWidth, null);
|
|
} else {
|
|
tableRef.current.style.width = tableRef.current.offsetWidth + delta + 'px';
|
|
resizeColumn.current.style.width = newColumnWidth + 'px';
|
|
}
|
|
}
|
|
if (props.onColumnResizeEnd) {
|
|
props.onColumnResizeEnd({
|
|
element: resizeColumn.current,
|
|
column: resizeColumnProps.current,
|
|
delta: delta
|
|
});
|
|
}
|
|
if (isStateful()) {
|
|
saveState();
|
|
}
|
|
}
|
|
resizerHelperRef.current.style.display = 'none';
|
|
resizeColumn.current = null;
|
|
resizeColumnProps.current = null;
|
|
DomHandler.removeClass(elementRef.current, 'p-unselectable-text');
|
|
unbindColumnResizeEvents();
|
|
};
|
|
var findParentScrollableView = function findParentScrollableView(column) {
|
|
if (column) {
|
|
var parent = column.parentElement;
|
|
while (parent && DomHandler.getAttribute(parent, 'data-pc-section') !== 'scrollable') {
|
|
parent = parent.parentElement;
|
|
}
|
|
return parent;
|
|
}
|
|
return null;
|
|
};
|
|
var resizeColGroup = function resizeColGroup(table, resizeColumnIndex, newColumnWidth, nextColumnWidth) {
|
|
if (table) {
|
|
var colGroup = table.children[0].nodeName === 'COLGROUP' ? table.children[0] : null;
|
|
if (colGroup) {
|
|
var col = colGroup.children[resizeColumnIndex];
|
|
var nextCol = col.nextElementSibling;
|
|
col.style.width = newColumnWidth + 'px';
|
|
if (nextCol && nextColumnWidth) {
|
|
nextCol.style.width = nextColumnWidth + 'px';
|
|
}
|
|
} else {
|
|
throw new Error('Scrollable tables require a colgroup to support resizable columns');
|
|
}
|
|
}
|
|
};
|
|
var bindColumnResizeEvents = function bindColumnResizeEvents() {
|
|
bindDocumentMouseMoveListener();
|
|
bindDocumentMouseUpListener();
|
|
};
|
|
var unbindColumnResizeEvents = function unbindColumnResizeEvents() {
|
|
unbindDocumentMouseMoveListener();
|
|
unbindDocumentMouseUpListener();
|
|
};
|
|
var onColumnDragStart = function onColumnDragStart(e) {
|
|
var event = e.originalEvent,
|
|
column = e.column;
|
|
if (columnResizing.current) {
|
|
event.preventDefault();
|
|
return;
|
|
}
|
|
iconWidth.current = DomHandler.getHiddenElementOuterWidth(reorderIndicatorUpRef.current);
|
|
iconHeight.current = DomHandler.getHiddenElementOuterHeight(reorderIndicatorUpRef.current);
|
|
draggedColumnEl.current = findParentHeader(event.currentTarget);
|
|
draggedColumn.current = column;
|
|
event.dataTransfer.setData('text', 'b'); // Firefox requires this to make dragging possible
|
|
};
|
|
var onColumnDragOver = function onColumnDragOver(e) {
|
|
var event = e.originalEvent,
|
|
column = e.column;
|
|
var dropHeader = findParentHeader(event.currentTarget);
|
|
if (props.reorderableColumns && draggedColumnEl.current && dropHeader && !getColumnProp(column, 'frozen')) {
|
|
event.preventDefault();
|
|
var containerOffset = DomHandler.getOffset(elementRef.current);
|
|
var dropHeaderOffset = DomHandler.getOffset(dropHeader);
|
|
if (draggedColumnEl.current !== dropHeader) {
|
|
var targetLeft = dropHeaderOffset.left - containerOffset.left;
|
|
//let targetTop = containerOffset.top - dropHeaderOffset.top;
|
|
var columnCenter = dropHeaderOffset.left + dropHeader.offsetWidth / 2;
|
|
reorderIndicatorUpRef.current.style.top = dropHeaderOffset.top - containerOffset.top - (iconHeight.current - 1) + 'px';
|
|
reorderIndicatorDownRef.current.style.top = dropHeaderOffset.top - containerOffset.top + dropHeader.offsetHeight + 'px';
|
|
if (event.pageX > columnCenter) {
|
|
reorderIndicatorUpRef.current.style.left = targetLeft + dropHeader.offsetWidth - Math.ceil(iconWidth.current / 2) + 'px';
|
|
reorderIndicatorDownRef.current.style.left = targetLeft + dropHeader.offsetWidth - Math.ceil(iconWidth.current / 2) + 'px';
|
|
dropPosition.current = 1;
|
|
} else {
|
|
reorderIndicatorUpRef.current.style.left = targetLeft - Math.ceil(iconWidth.current / 2) + 'px';
|
|
reorderIndicatorDownRef.current.style.left = targetLeft - Math.ceil(iconWidth.current / 2) + 'px';
|
|
dropPosition.current = -1;
|
|
}
|
|
reorderIndicatorUpRef.current.style.display = 'block';
|
|
reorderIndicatorDownRef.current.style.display = 'block';
|
|
}
|
|
}
|
|
};
|
|
var onColumnDragLeave = function onColumnDragLeave(e) {
|
|
var event = e.originalEvent;
|
|
if (props.reorderableColumns && draggedColumnEl.current) {
|
|
event.preventDefault();
|
|
reorderIndicatorUpRef.current.style.display = 'none';
|
|
reorderIndicatorDownRef.current.style.display = 'none';
|
|
}
|
|
};
|
|
var onColumnDrop = function onColumnDrop(e) {
|
|
var event = e.originalEvent,
|
|
column = e.column;
|
|
event.preventDefault();
|
|
if (draggedColumnEl.current) {
|
|
var dragIndex = DomHandler.index(draggedColumnEl.current);
|
|
var dropIndex = DomHandler.index(findParentHeader(event.currentTarget));
|
|
var allowDrop = dragIndex !== dropIndex;
|
|
if (allowDrop && (dropIndex - dragIndex === 1 && dropPosition.current === -1 || dragIndex - dropIndex === 1 && dropPosition.current === 1)) {
|
|
allowDrop = false;
|
|
}
|
|
if (allowDrop) {
|
|
var columns = columnOrderState ? getColumns() : React.Children.toArray(props.children);
|
|
var isSameColumn = function isSameColumn(col1, col2) {
|
|
return getColumnProp(col1, 'columnKey') || getColumnProp(col2, 'columnKey') ? ObjectUtils.equals(col1, col2, 'props.columnKey') : ObjectUtils.equals(col1, col2, 'props.field');
|
|
};
|
|
var dragColIndex = columns.findIndex(function (child) {
|
|
return isSameColumn(child, draggedColumn.current);
|
|
});
|
|
var dropColIndex = columns.findIndex(function (child) {
|
|
return isSameColumn(child, column);
|
|
});
|
|
if (dropColIndex < dragColIndex && dropPosition.current === 1) {
|
|
dropColIndex++;
|
|
}
|
|
if (dropColIndex > dragColIndex && dropPosition.current === -1) {
|
|
dropColIndex--;
|
|
}
|
|
ObjectUtils.reorderArray(columns, dragColIndex, dropColIndex);
|
|
var columnOrder = [];
|
|
var _iterator2 = _createForOfIteratorHelper(columns),
|
|
_step2;
|
|
try {
|
|
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
var _column = _step2.value;
|
|
columnOrder.push(getColumnProp(_column, 'columnKey') || getColumnProp(_column, 'field'));
|
|
}
|
|
} catch (err) {
|
|
_iterator2.e(err);
|
|
} finally {
|
|
_iterator2.f();
|
|
}
|
|
setColumnOrderState(columnOrder);
|
|
if (props.onColReorder) {
|
|
props.onColReorder({
|
|
dragIndex: dragColIndex,
|
|
dropIndex: dropColIndex,
|
|
columns: columns
|
|
});
|
|
}
|
|
}
|
|
reorderIndicatorUpRef.current.style.display = 'none';
|
|
reorderIndicatorDownRef.current.style.display = 'none';
|
|
draggedColumnEl.current.draggable = false;
|
|
draggedColumnEl.current = null;
|
|
dropPosition.current = null;
|
|
}
|
|
};
|
|
var findParentHeader = function findParentHeader(element) {
|
|
if (element.nodeName === 'TH') {
|
|
return element;
|
|
}
|
|
var parent = element.parentElement;
|
|
while (parent.nodeName !== 'TH') {
|
|
parent = parent.parentElement;
|
|
if (!parent) {
|
|
break;
|
|
}
|
|
}
|
|
return parent;
|
|
};
|
|
var getColumnProp = function getColumnProp(column, name) {
|
|
return ColumnBase.getCProp(column, name);
|
|
};
|
|
var getExpandedKeys = function getExpandedKeys() {
|
|
return props.onToggle ? props.expandedKeys : expandedKeysState;
|
|
};
|
|
var getFirst = function getFirst() {
|
|
return props.onPage ? props.first : firstState;
|
|
};
|
|
var getRows = function getRows() {
|
|
return props.onPage ? props.rows : rowsState;
|
|
};
|
|
var getSortField = function getSortField() {
|
|
return props.onSort ? props.sortField : sortFieldState;
|
|
};
|
|
var getSortOrder = function getSortOrder() {
|
|
return props.onSort ? props.sortOrder : sortOrderState;
|
|
};
|
|
var getMultiSortMeta = function getMultiSortMeta() {
|
|
return (props.onSort ? props.multiSortMeta : multiSortMetaState) || [];
|
|
};
|
|
var getFilters = function getFilters() {
|
|
return props.onFilter ? props.filters : filtersState;
|
|
};
|
|
var findColumnByKey = function findColumnByKey(columns, key) {
|
|
if (columns && columns.length) {
|
|
for (var i = 0; i < columns.length; i++) {
|
|
var child = columns[i];
|
|
if (getColumnProp(child, 'columnKey') === key || getColumnProp(child, 'field') === key) {
|
|
return child;
|
|
}
|
|
}
|
|
}
|
|
return null;
|
|
};
|
|
var getColumns = function getColumns() {
|
|
var columns = React.Children.toArray(props.children);
|
|
if (columns && columns.length) {
|
|
if (props.reorderableColumns && columnOrderState) {
|
|
var orderedColumns = [];
|
|
var _iterator3 = _createForOfIteratorHelper(columnOrderState),
|
|
_step3;
|
|
try {
|
|
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
|
var columnKey = _step3.value;
|
|
var column = findColumnByKey(columns, columnKey);
|
|
if (column) {
|
|
orderedColumns.push(column);
|
|
}
|
|
}
|
|
} catch (err) {
|
|
_iterator3.e(err);
|
|
} finally {
|
|
_iterator3.f();
|
|
}
|
|
return [].concat(orderedColumns, _toConsumableArray(columns.filter(function (item) {
|
|
return orderedColumns.indexOf(item) < 0;
|
|
})));
|
|
}
|
|
return columns;
|
|
}
|
|
return null;
|
|
};
|
|
var getTotalRecords = function getTotalRecords(data) {
|
|
return props.lazy ? props.totalRecords : data ? data.length : 0;
|
|
};
|
|
var isSingleSelectionMode = function isSingleSelectionMode() {
|
|
return props.selectionMode && props.selectionMode === 'single';
|
|
};
|
|
var isMultipleSelectionMode = function isMultipleSelectionMode() {
|
|
return props.selectionMode && props.selectionMode === 'multiple';
|
|
};
|
|
var isRowSelectionMode = function isRowSelectionMode() {
|
|
return isSingleSelectionMode() || isMultipleSelectionMode();
|
|
};
|
|
var getFrozenColumns = function getFrozenColumns(columns) {
|
|
var frozenColumns = null;
|
|
var _iterator4 = _createForOfIteratorHelper(columns),
|
|
_step4;
|
|
try {
|
|
for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
|
|
var col = _step4.value;
|
|
if (getColumnProp(col, 'frozen')) {
|
|
frozenColumns = frozenColumns || [];
|
|
frozenColumns.push(col);
|
|
}
|
|
}
|
|
} catch (err) {
|
|
_iterator4.e(err);
|
|
} finally {
|
|
_iterator4.f();
|
|
}
|
|
return frozenColumns;
|
|
};
|
|
var getScrollableColumns = function getScrollableColumns(columns) {
|
|
var scrollableColumns = null;
|
|
var _iterator5 = _createForOfIteratorHelper(columns),
|
|
_step5;
|
|
try {
|
|
for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
|
|
var col = _step5.value;
|
|
if (!getColumnProp(col, 'frozen')) {
|
|
scrollableColumns = scrollableColumns || [];
|
|
scrollableColumns.push(col);
|
|
}
|
|
}
|
|
} catch (err) {
|
|
_iterator5.e(err);
|
|
} finally {
|
|
_iterator5.f();
|
|
}
|
|
return scrollableColumns;
|
|
};
|
|
var filterLocal = function filterLocal(value) {
|
|
var filteredNodes = [];
|
|
var filters = getFilters();
|
|
var columns = React.Children.toArray(props.children);
|
|
var isStrictMode = props.filterMode === 'strict';
|
|
var _iterator6 = _createForOfIteratorHelper(value),
|
|
_step6;
|
|
try {
|
|
for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
|
|
var node = _step6.value;
|
|
var copyNode = _objectSpread({}, node);
|
|
var localMatch = true;
|
|
var globalMatch = false;
|
|
for (var j = 0; j < columns.length; j++) {
|
|
var col = columns[j];
|
|
var filterMeta = filters ? filters[getColumnProp(col, 'field')] : null;
|
|
var filterField = getColumnProp(col, 'field');
|
|
var filterValue = void 0;
|
|
var filterConstraint = void 0;
|
|
var paramsWithoutNode = void 0;
|
|
var options = void 0;
|
|
|
|
//local
|
|
if (filterMeta) {
|
|
var filterMatchMode = filterMeta.matchMode || getColumnProp(col, 'filterMatchMode') || 'startsWith';
|
|
filterValue = filterMeta.value;
|
|
filterConstraint = filterMatchMode === 'custom' ? getColumnProp(col, 'filterFunction') : FilterService.filters[filterMatchMode];
|
|
options = {
|
|
rowData: node,
|
|
filters: filters,
|
|
props: props,
|
|
column: {
|
|
filterMeta: filterMeta,
|
|
filterField: filterField,
|
|
props: ColumnBase.getCProps(col)
|
|
}
|
|
};
|
|
paramsWithoutNode = {
|
|
filterField: filterField,
|
|
filterValue: filterValue,
|
|
filterConstraint: filterConstraint,
|
|
isStrictMode: isStrictMode,
|
|
options: options
|
|
};
|
|
if (isStrictMode && !(findFilteredNodes(copyNode, paramsWithoutNode) || isFilterMatched(copyNode, paramsWithoutNode)) || !isStrictMode && !(isFilterMatched(copyNode, paramsWithoutNode) || findFilteredNodes(copyNode, paramsWithoutNode))) {
|
|
localMatch = false;
|
|
}
|
|
if (!localMatch) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
//global
|
|
if (props.globalFilter && !globalMatch) {
|
|
var copyNodeForGlobal = _objectSpread({}, copyNode);
|
|
filterValue = props.globalFilter;
|
|
filterConstraint = FilterService.filters[props.globalFilterMatchMode];
|
|
paramsWithoutNode = {
|
|
filterField: filterField,
|
|
filterValue: filterValue,
|
|
filterConstraint: filterConstraint,
|
|
isStrictMode: isStrictMode
|
|
};
|
|
if (isStrictMode && (findFilteredNodes(copyNodeForGlobal, paramsWithoutNode) || isFilterMatched(copyNodeForGlobal, paramsWithoutNode)) || !isStrictMode && (isFilterMatched(copyNodeForGlobal, paramsWithoutNode) || findFilteredNodes(copyNodeForGlobal, paramsWithoutNode))) {
|
|
globalMatch = true;
|
|
copyNode = copyNodeForGlobal;
|
|
}
|
|
}
|
|
}
|
|
var matches = localMatch;
|
|
if (props.globalFilter) {
|
|
matches = localMatch && globalMatch;
|
|
}
|
|
if (matches) {
|
|
filteredNodes.push(copyNode);
|
|
}
|
|
}
|
|
} catch (err) {
|
|
_iterator6.e(err);
|
|
} finally {
|
|
_iterator6.f();
|
|
}
|
|
return filteredNodes;
|
|
};
|
|
var findFilteredNodes = function findFilteredNodes(node, paramsWithoutNode) {
|
|
if (node) {
|
|
var matched = false;
|
|
if (node.children) {
|
|
var childNodes = _toConsumableArray(node.children);
|
|
node.children = [];
|
|
var _iterator7 = _createForOfIteratorHelper(childNodes),
|
|
_step7;
|
|
try {
|
|
for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
|
|
var childNode = _step7.value;
|
|
var copyChildNode = _objectSpread({}, childNode);
|
|
if (isFilterMatched(copyChildNode, paramsWithoutNode)) {
|
|
matched = true;
|
|
node.children.push(copyChildNode);
|
|
}
|
|
}
|
|
} catch (err) {
|
|
_iterator7.e(err);
|
|
} finally {
|
|
_iterator7.f();
|
|
}
|
|
}
|
|
if (matched) {
|
|
return true;
|
|
}
|
|
}
|
|
};
|
|
var isFilterMatched = function isFilterMatched(node, _ref5) {
|
|
var filterField = _ref5.filterField,
|
|
filterValue = _ref5.filterValue,
|
|
filterConstraint = _ref5.filterConstraint,
|
|
isStrictMode = _ref5.isStrictMode,
|
|
options = _ref5.options;
|
|
var matched = false;
|
|
var dataFieldValue = ObjectUtils.resolveFieldData(node.data, filterField);
|
|
if (filterConstraint(dataFieldValue, filterValue, props.filterLocale, options)) {
|
|
matched = true;
|
|
}
|
|
if (!matched || isStrictMode && !isNodeLeaf(node)) {
|
|
matched = findFilteredNodes(node, {
|
|
filterField: filterField,
|
|
filterValue: filterValue,
|
|
filterConstraint: filterConstraint,
|
|
isStrictMode: isStrictMode
|
|
}) || matched;
|
|
}
|
|
return matched;
|
|
};
|
|
var isNodeLeaf = function isNodeLeaf(node) {
|
|
return node.leaf === false ? false : !(node.children && node.children.length);
|
|
};
|
|
var processedData = function processedData(localState) {
|
|
var data = props.value || [];
|
|
if (!props.lazy) {
|
|
if (data && data.length) {
|
|
var filters = localState && localState.filters || getFilters();
|
|
var sortField = localState && localState.sortField || getSortField();
|
|
var sortOrder = localState && localState.sortOrder || getSortOrder();
|
|
var multiSortMeta = localState && localState.multiSortMeta || getMultiSortMeta();
|
|
var columns = getColumns();
|
|
var sortColumn = columns.find(function (col) {
|
|
return getColumnProp(col, 'field') === sortField;
|
|
});
|
|
if (sortColumn) {
|
|
columnSortable.current = getColumnProp(sortColumn, 'sortable');
|
|
columnSortFunction.current = getColumnProp(sortColumn, 'sortFunction');
|
|
}
|
|
if (ObjectUtils.isNotEmpty(filters) || props.globalFilter) {
|
|
data = filterLocal(data);
|
|
}
|
|
if (sortField || ObjectUtils.isNotEmpty(multiSortMeta)) {
|
|
if (props.sortMode === 'single') {
|
|
data = _sortSingle({
|
|
data: data,
|
|
field: sortField,
|
|
order: sortOrder
|
|
});
|
|
} else if (props.sortMode === 'multiple') {
|
|
data = _sortMultiple({
|
|
data: data,
|
|
multiSortMeta: multiSortMeta
|
|
});
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return data;
|
|
};
|
|
useMountEffect(function () {
|
|
if (isStateful()) {
|
|
restoreState();
|
|
}
|
|
});
|
|
useUpdateEffect(function () {
|
|
if (isStateful()) {
|
|
saveState();
|
|
}
|
|
});
|
|
useUpdateEffect(function () {
|
|
if (childFocusEvent.current) {
|
|
var nodeElement = childFocusEvent.current.target;
|
|
var nextElementSibling = nodeElement.nextElementSibling;
|
|
if (nextElementSibling) {
|
|
nodeElement.tabIndex = '-1';
|
|
nextElementSibling.tabIndex = '0';
|
|
DomHandler.focus(nextElementSibling);
|
|
}
|
|
}
|
|
}, [expandedKeysState]);
|
|
React.useImperativeHandle(ref, function () {
|
|
return {
|
|
props: props,
|
|
clearState: clearState,
|
|
filter: filter,
|
|
getElement: function getElement() {
|
|
return elementRef.current;
|
|
},
|
|
restoreState: restoreState,
|
|
restoreTableState: restoreTableState,
|
|
saveState: saveState
|
|
};
|
|
});
|
|
var createEvent = function createEvent(event) {
|
|
return _objectSpread({
|
|
first: getFirst(),
|
|
rows: getRows(),
|
|
sortField: getSortField(),
|
|
sortOrder: getSortOrder(),
|
|
multiSortMeta: getMultiSortMeta(),
|
|
filters: getFilters()
|
|
}, event);
|
|
};
|
|
var createTableHeader = function createTableHeader(columns, columnGroup) {
|
|
var sortField = getSortField();
|
|
var sortOrder = getSortOrder();
|
|
var multiSortMeta = _toConsumableArray(getMultiSortMeta());
|
|
var filters = getFilters();
|
|
return /*#__PURE__*/React.createElement(TreeTableHeader, {
|
|
hostName: "TreeTable",
|
|
columns: columns,
|
|
columnGroup: columnGroup,
|
|
tabIndex: props.tabIndex,
|
|
onSort: onSort,
|
|
sortField: sortField,
|
|
sortIcon: props.sortIcon,
|
|
sortOrder: sortOrder,
|
|
multiSortMeta: multiSortMeta,
|
|
resizableColumns: props.resizableColumns,
|
|
onResizeStart: onColumnResizeStart,
|
|
reorderableColumns: props.reorderableColumns,
|
|
onDragStart: onColumnDragStart,
|
|
onDragOver: onColumnDragOver,
|
|
onDragLeave: onColumnDragLeave,
|
|
onDrop: onColumnDrop,
|
|
onFilter: onFilter,
|
|
filters: filters,
|
|
filterDelay: props.filterDelay,
|
|
ptCallbacks: ptCallbacks,
|
|
metaData: metaData,
|
|
unstyled: props.unstyled
|
|
});
|
|
};
|
|
var createTableFooter = function createTableFooter(columns, columnGroup) {
|
|
return /*#__PURE__*/React.createElement(TreeTableFooter, {
|
|
hostName: "TreeTable",
|
|
columns: columns,
|
|
columnGroup: columnGroup,
|
|
ptCallbacks: ptCallbacks,
|
|
metaData: metaData
|
|
});
|
|
};
|
|
var createTableBody = function createTableBody(value, columns) {
|
|
return /*#__PURE__*/React.createElement(TreeTableBody, {
|
|
hostName: "TreeTable",
|
|
checkboxIcon: props.checkboxIcon,
|
|
columns: columns,
|
|
contextMenuSelectionKey: props.contextMenuSelectionKey,
|
|
emptyMessage: props.emptyMessage,
|
|
expandedKeys: getExpandedKeys(),
|
|
first: getFirst(),
|
|
lazy: props.lazy,
|
|
loading: props.loading,
|
|
metaData: metaData,
|
|
metaKeySelection: props.metaKeySelection,
|
|
onCollapse: props.onCollapse,
|
|
onContextMenu: props.onContextMenu,
|
|
onContextMenuSelectionChange: props.onContextMenuSelectionChange,
|
|
onExpand: props.onExpand,
|
|
onRowClick: props.onRowClick,
|
|
onRowMouseEnter: props.onRowMouseEnter,
|
|
onRowMouseLeave: props.onRowMouseLeave,
|
|
onSelect: props.onSelect,
|
|
onSelectionChange: props.onSelectionChange,
|
|
onToggle: onToggle,
|
|
onUnselect: props.onUnselect,
|
|
originalOptions: props.value,
|
|
paginator: props.paginator,
|
|
propagateSelectionDown: props.propagateSelectionDown,
|
|
propagateSelectionUp: props.propagateSelectionUp,
|
|
ptCallbacks: ptCallbacks,
|
|
rowClassName: props.rowClassName,
|
|
rows: getRows(),
|
|
selectOnEdit: props.selectOnEdit,
|
|
selectionKeys: props.selectionKeys,
|
|
selectionMode: props.selectionMode,
|
|
togglerTemplate: props.togglerTemplate,
|
|
value: value
|
|
});
|
|
};
|
|
var createPaginator = function createPaginator(position, totalRecords) {
|
|
var className = classNames('p-paginator-' + position, props.paginatorClassName);
|
|
return /*#__PURE__*/React.createElement(Paginator, {
|
|
first: getFirst(),
|
|
rows: getRows(),
|
|
pageLinkSize: props.pageLinkSize,
|
|
className: className,
|
|
onPageChange: onPageChange,
|
|
template: props.paginatorTemplate,
|
|
totalRecords: totalRecords,
|
|
rowsPerPageOptions: props.rowsPerPageOptions,
|
|
currentPageReportTemplate: props.currentPageReportTemplate,
|
|
leftContent: props.paginatorLeft,
|
|
rightContent: props.paginatorRight,
|
|
alwaysShow: props.alwaysShowPaginator,
|
|
dropdownAppendTo: props.paginatorDropdownAppendTo,
|
|
pt: ptCallbacks.ptm('paginator'),
|
|
unstyled: props.unstyled,
|
|
__parentMetadata: {
|
|
parent: metaData
|
|
}
|
|
});
|
|
};
|
|
var createScrollableView = function createScrollableView(value, columns, frozen, headerColumnGroup, footerColumnGroup) {
|
|
var header = createTableHeader(columns, headerColumnGroup);
|
|
var footer = createTableFooter(columns, footerColumnGroup);
|
|
var body = createTableBody(value, columns);
|
|
return /*#__PURE__*/React.createElement(TreeTableScrollableView, {
|
|
hostName: "TreeTable",
|
|
columns: columns,
|
|
header: header,
|
|
body: body,
|
|
footer: footer,
|
|
scrollHeight: props.scrollHeight,
|
|
frozen: frozen,
|
|
frozenWidth: props.frozenWidth,
|
|
ptCallbacks: ptCallbacks,
|
|
metaData: metaData
|
|
});
|
|
};
|
|
var createScrollableTable = function createScrollableTable(value) {
|
|
var columns = getColumns();
|
|
var frozenColumns = getFrozenColumns(columns);
|
|
var scrollableColumns = frozenColumns ? getScrollableColumns(columns) : columns;
|
|
var frozenView;
|
|
var scrollableView;
|
|
if (frozenColumns) {
|
|
frozenView = createScrollableView(value, frozenColumns, true, props.frozenHeaderColumnGroup, props.frozenFooterColumnGroup);
|
|
}
|
|
scrollableView = createScrollableView(value, scrollableColumns, false, props.headerColumnGroup, props.footerColumnGroup);
|
|
var scrollableWrapperProps = mergeProps({
|
|
className: ptCallbacks.cx('scrollableWrapper')
|
|
}, ptCallbacks.ptm('scrollableWrapper'));
|
|
return /*#__PURE__*/React.createElement("div", scrollableWrapperProps, frozenView, scrollableView);
|
|
};
|
|
var createRegularTable = function createRegularTable(value) {
|
|
var columns = getColumns();
|
|
var header = createTableHeader(columns, props.headerColumnGroup);
|
|
var footer = createTableFooter(columns, props.footerColumnGroup);
|
|
var body = createTableBody(value, columns);
|
|
var wrapperProps = mergeProps({
|
|
className: ptCallbacks.cx('wrapper')
|
|
}, ptCallbacks.ptm('wrapper'));
|
|
var tableProps = mergeProps({
|
|
role: 'table',
|
|
style: props.tableStyle,
|
|
className: classNames(props.tableClassName, ptCallbacks.cx('table'))
|
|
}, ptCallbacks.ptm('table'));
|
|
return /*#__PURE__*/React.createElement("div", wrapperProps, /*#__PURE__*/React.createElement("table", _extends({
|
|
ref: tableRef
|
|
}, tableProps), header, footer, body));
|
|
};
|
|
var createTable = function createTable(value) {
|
|
return props.scrollable ? createScrollableTable(value) : createRegularTable(value);
|
|
};
|
|
var createLoader = function createLoader() {
|
|
if (props.loading) {
|
|
var loadingIconProps = mergeProps({
|
|
className: ptCallbacks.cx('loadingIcon')
|
|
}, ptCallbacks.ptm('loadingIcon'));
|
|
var icon = props.loadingIcon || /*#__PURE__*/React.createElement(SpinnerIcon, _extends({}, loadingIconProps, {
|
|
spin: true
|
|
}));
|
|
var loadingIcon = IconUtils.getJSXIcon(icon, _objectSpread({}, loadingIconProps), {
|
|
props: props
|
|
});
|
|
var loadingWrapperProps = mergeProps({
|
|
className: ptCallbacks.cx('loadingWrapper')
|
|
}, ptCallbacks.ptm('loadingWrapper'));
|
|
var loadingOverlayProps = mergeProps({
|
|
className: ptCallbacks.cx('loadingOverlay')
|
|
}, ptCallbacks.ptm('loadingOverlay'));
|
|
return /*#__PURE__*/React.createElement("div", loadingWrapperProps, /*#__PURE__*/React.createElement("div", loadingOverlayProps, loadingIcon));
|
|
}
|
|
return null;
|
|
};
|
|
var data = processedData();
|
|
var table = createTable(data);
|
|
var totalRecords = getTotalRecords(data);
|
|
var headerProps = mergeProps({
|
|
className: ptCallbacks.cx('header')
|
|
}, ptCallbacks.ptm('header'));
|
|
var footerProps = mergeProps({
|
|
className: ptCallbacks.cx('footer')
|
|
}, ptCallbacks.ptm('footer'));
|
|
var resizeHelperProps = mergeProps({
|
|
className: ptCallbacks.cx('resizeHelper'),
|
|
style: {
|
|
display: 'none'
|
|
}
|
|
}, ptCallbacks.ptm('resizeHelper'));
|
|
var headerFacet = props.header && /*#__PURE__*/React.createElement("div", headerProps, props.header);
|
|
var footerFacet = props.footer && /*#__PURE__*/React.createElement("div", footerProps, props.footer);
|
|
var paginatorTop = props.paginator && props.paginatorPosition !== 'bottom' && createPaginator('top', totalRecords);
|
|
var paginatorBottom = props.paginator && props.paginatorPosition !== 'top' && createPaginator('bottom', totalRecords);
|
|
var loader = createLoader();
|
|
var resizeHelper = props.resizableColumns && /*#__PURE__*/React.createElement("div", _extends({
|
|
ref: resizerHelperRef
|
|
}, resizeHelperProps));
|
|
var reorderIndicatorUpProps = mergeProps({
|
|
className: ptCallbacks.cx('reorderIndicatorUp'),
|
|
style: {
|
|
position: 'absolute',
|
|
display: 'none'
|
|
}
|
|
}, ptCallbacks.ptm('reorderIndicatorUp'));
|
|
var reorderIndicatorUpIconProps = mergeProps(ptCallbacks.ptm('reorderIndicatorUpIcon'));
|
|
var reorderIndicatorUpIcon = props.reorderableColumns && IconUtils.getJSXIcon(props.reorderIndicatorUpIcon || /*#__PURE__*/React.createElement(ArrowDownIcon, reorderIndicatorUpIconProps), _objectSpread({}, reorderIndicatorUpIconProps), {
|
|
props: props
|
|
});
|
|
var reorderIndicatorUp = props.reorderableColumns && /*#__PURE__*/React.createElement("span", _extends({
|
|
ref: reorderIndicatorUpRef
|
|
}, reorderIndicatorUpProps), reorderIndicatorUpIcon);
|
|
var reorderIndicatorDownProps = {
|
|
className: ptCallbacks.sx('reorderIndicatorDown'),
|
|
style: {
|
|
position: 'absolute',
|
|
display: 'none'
|
|
}
|
|
};
|
|
var reorderIndicatorDownIconProps = mergeProps(ptCallbacks.ptm('reorderIndicatorDownIcon'));
|
|
var reorderIndicatorDownIcon = IconUtils.getJSXIcon(props.reorderIndicatorDownIcon || /*#__PURE__*/React.createElement(ArrowUpIcon, reorderIndicatorDownIconProps), _objectSpread({}, reorderIndicatorDownIconProps), {
|
|
props: props
|
|
});
|
|
var reorderIndicatorDown = props.reorderableColumns && /*#__PURE__*/React.createElement("span", _extends({
|
|
ref: reorderIndicatorDownRef
|
|
}, reorderIndicatorDownProps), reorderIndicatorDownIcon);
|
|
var rootProps = mergeProps({
|
|
role: 'table',
|
|
id: props.id,
|
|
className: classNames(props.className, ptCallbacks.cx('root', {
|
|
isRowSelectionMode: isRowSelectionMode
|
|
})),
|
|
style: props.style,
|
|
'data-scrollselectors': '.p-treetable-wrapper'
|
|
}, TreeTableBase.getOtherProps(props), ptCallbacks.ptm('root'));
|
|
return /*#__PURE__*/React.createElement("div", _extends({
|
|
ref: elementRef
|
|
}, rootProps), loader, headerFacet, paginatorTop, table, paginatorBottom, footerFacet, resizeHelper, reorderIndicatorUp, reorderIndicatorDown);
|
|
});
|
|
TreeTable.displayName = 'TreeTable';
|
|
|
|
export { TreeTable };
|