primereact 10.9.5 → 10.9.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (120) hide show
  1. package/api/api.cjs.js +9 -1
  2. package/api/api.cjs.min.js +1 -1
  3. package/api/api.d.ts +5 -3
  4. package/api/api.esm.js +9 -1
  5. package/api/api.esm.min.js +1 -1
  6. package/api/api.js +9 -1
  7. package/api/api.min.js +1 -1
  8. package/autocomplete/autocomplete.d.ts +5 -5
  9. package/calendar/calendar.cjs.js +27 -5
  10. package/calendar/calendar.cjs.min.js +1 -1
  11. package/calendar/calendar.esm.js +27 -5
  12. package/calendar/calendar.esm.min.js +1 -1
  13. package/calendar/calendar.js +27 -5
  14. package/calendar/calendar.min.js +1 -1
  15. package/cascadeselect/cascadeselect.cjs.js +53 -3
  16. package/cascadeselect/cascadeselect.cjs.min.js +1 -1
  17. package/cascadeselect/cascadeselect.d.ts +13 -0
  18. package/cascadeselect/cascadeselect.esm.js +54 -4
  19. package/cascadeselect/cascadeselect.esm.min.js +1 -1
  20. package/cascadeselect/cascadeselect.js +54 -5
  21. package/cascadeselect/cascadeselect.min.js +1 -1
  22. package/core/core.js +44 -10
  23. package/core/core.min.js +6 -6
  24. package/datatable/datatable.cjs.js +86 -58
  25. package/datatable/datatable.cjs.min.js +1 -1
  26. package/datatable/datatable.d.ts +79 -3
  27. package/datatable/datatable.esm.js +86 -58
  28. package/datatable/datatable.esm.min.js +1 -1
  29. package/datatable/datatable.js +86 -58
  30. package/datatable/datatable.min.js +1 -1
  31. package/dialog/dialog.cjs.js +3 -2
  32. package/dialog/dialog.cjs.min.js +1 -1
  33. package/dialog/dialog.d.ts +6 -1
  34. package/dialog/dialog.esm.js +3 -2
  35. package/dialog/dialog.esm.min.js +1 -1
  36. package/dialog/dialog.js +3 -2
  37. package/dialog/dialog.min.js +1 -1
  38. package/dropdown/dropdown.cjs.js +13 -3
  39. package/dropdown/dropdown.cjs.min.js +1 -1
  40. package/dropdown/dropdown.esm.js +13 -3
  41. package/dropdown/dropdown.esm.min.js +1 -1
  42. package/dropdown/dropdown.js +13 -3
  43. package/dropdown/dropdown.min.js +1 -1
  44. package/fileupload/fileupload.cjs.js +4 -2
  45. package/fileupload/fileupload.cjs.min.js +1 -1
  46. package/fileupload/fileupload.esm.js +4 -2
  47. package/fileupload/fileupload.esm.min.js +1 -1
  48. package/fileupload/fileupload.js +4 -2
  49. package/fileupload/fileupload.min.js +1 -1
  50. package/galleria/galleria.cjs.js +1 -0
  51. package/galleria/galleria.cjs.min.js +1 -1
  52. package/galleria/galleria.esm.js +1 -0
  53. package/galleria/galleria.esm.min.js +1 -1
  54. package/galleria/galleria.js +1 -0
  55. package/galleria/galleria.min.js +1 -1
  56. package/inputnumber/inputnumber.cjs.js +7 -2
  57. package/inputnumber/inputnumber.cjs.min.js +1 -1
  58. package/inputnumber/inputnumber.esm.js +7 -2
  59. package/inputnumber/inputnumber.esm.min.js +1 -1
  60. package/inputnumber/inputnumber.js +7 -2
  61. package/inputnumber/inputnumber.min.js +1 -1
  62. package/listbox/listbox.d.ts +4 -4
  63. package/menu/menu.cjs.js +3 -0
  64. package/menu/menu.cjs.min.js +1 -1
  65. package/menu/menu.esm.js +3 -0
  66. package/menu/menu.esm.min.js +1 -1
  67. package/menu/menu.js +3 -0
  68. package/menu/menu.min.js +1 -1
  69. package/multiselect/multiselect.cjs.js +61 -15
  70. package/multiselect/multiselect.cjs.min.js +1 -1
  71. package/multiselect/multiselect.esm.js +61 -15
  72. package/multiselect/multiselect.esm.min.js +1 -1
  73. package/multiselect/multiselect.js +61 -15
  74. package/multiselect/multiselect.min.js +1 -1
  75. package/multistatecheckbox/multistatecheckbox.cjs.js +16 -8
  76. package/multistatecheckbox/multistatecheckbox.cjs.min.js +1 -1
  77. package/multistatecheckbox/multistatecheckbox.esm.js +16 -8
  78. package/multistatecheckbox/multistatecheckbox.esm.min.js +1 -1
  79. package/multistatecheckbox/multistatecheckbox.js +16 -8
  80. package/multistatecheckbox/multistatecheckbox.min.js +1 -1
  81. package/package.json +1 -1
  82. package/paginator/paginator.cjs.js +9 -1
  83. package/paginator/paginator.cjs.min.js +1 -1
  84. package/paginator/paginator.esm.js +9 -1
  85. package/paginator/paginator.esm.min.js +1 -1
  86. package/paginator/paginator.js +9 -1
  87. package/paginator/paginator.min.js +1 -1
  88. package/picklist/picklist.cjs.js +9 -1
  89. package/picklist/picklist.cjs.min.js +1 -1
  90. package/picklist/picklist.esm.js +9 -1
  91. package/picklist/picklist.esm.min.js +1 -1
  92. package/picklist/picklist.js +9 -1
  93. package/picklist/picklist.min.js +1 -1
  94. package/primereact.all.cjs.js +297 -115
  95. package/primereact.all.cjs.min.js +1 -1
  96. package/primereact.all.esm.js +297 -115
  97. package/primereact.all.esm.min.js +1 -1
  98. package/primereact.all.js +297 -115
  99. package/primereact.all.min.js +1 -1
  100. package/treeselect/treeselect.cjs.js +4 -0
  101. package/treeselect/treeselect.cjs.min.js +1 -1
  102. package/treeselect/treeselect.d.ts +33 -0
  103. package/treeselect/treeselect.esm.js +4 -0
  104. package/treeselect/treeselect.esm.min.js +1 -1
  105. package/treeselect/treeselect.js +4 -0
  106. package/treeselect/treeselect.min.js +1 -1
  107. package/tristatecheckbox/tristatecheckbox.cjs.js +1 -0
  108. package/tristatecheckbox/tristatecheckbox.cjs.min.js +1 -1
  109. package/tristatecheckbox/tristatecheckbox.esm.js +1 -0
  110. package/tristatecheckbox/tristatecheckbox.esm.min.js +1 -1
  111. package/tristatecheckbox/tristatecheckbox.js +1 -0
  112. package/tristatecheckbox/tristatecheckbox.min.js +1 -1
  113. package/utils/utils.cjs.js +3 -1
  114. package/utils/utils.cjs.min.js +1 -1
  115. package/utils/utils.d.ts +1 -1
  116. package/utils/utils.esm.js +3 -1
  117. package/utils/utils.esm.min.js +1 -1
  118. package/utils/utils.js +3 -1
  119. package/utils/utils.min.js +1 -1
  120. package/web-types.json +77 -10
@@ -1013,33 +1013,70 @@ export interface DataTablePassThroughOptions {
1013
1013
  }
1014
1014
 
1015
1015
  /**
1016
- * Defines current options in DataTable bodyRow.
1016
+ * Defines current options in DataTable BodyRow which is the table <TR> element.
1017
1017
  */
1018
1018
  export interface DataTableBodyRowContext {
1019
+ /**
1020
+ * Whether the row is selected.
1021
+ */
1019
1022
  selected: boolean;
1023
+ /**
1024
+ * Whether the row is selectable.
1025
+ */
1020
1026
  selectable: boolean;
1027
+ /**
1028
+ * Whether the rows have striped styling.
1029
+ */
1021
1030
  stripedRows: boolean;
1031
+ /**
1032
+ * Index of the row. Note: this is not the index of the value array its the index of the row <TR in the table.
1033
+ */
1022
1034
  index: number;
1023
1035
  }
1024
1036
 
1025
1037
  /**
1026
- * Defines current inline state in DataTable bodyRow.
1038
+ * Defines current inline state in DataTable BodyRow which is the table <TR> element.
1027
1039
  */
1028
1040
  export interface DataTableBodyRowState {
1041
+ /**
1042
+ * Whether the row is in editing mode.
1043
+ */
1029
1044
  editing: boolean;
1030
1045
  }
1031
1046
 
1032
1047
  /**
1033
- * Custom passthrough(pt) option method for bodyRow.
1048
+ * Custom passthrough(pt) option method for BodyRow which is the table <TR> element.
1034
1049
  */
1035
1050
  export interface DataTableBodyRowPassThroughMethodOptions<TValue extends DataTableValueArray> {
1051
+ /**
1052
+ * Name of the component.
1053
+ */
1036
1054
  hostName: string;
1055
+ /**
1056
+ * Current context of the bodyRow.
1057
+ */
1037
1058
  context: DataTableBodyRowContext;
1059
+ /**
1060
+ * Parent options.
1061
+ */
1038
1062
  parent: DataTablePassThroughMethodOptions<TValue>;
1063
+ /**
1064
+ * Component props.
1065
+ */
1039
1066
  props: DataTableBaseProps<TValue>;
1067
+ /**
1068
+ * Current state of the bodyRow.
1069
+ */
1040
1070
  state: DataTableBodyRowState;
1041
1071
  }
1042
1072
 
1073
+ /**
1074
+ * Type for sort order values.
1075
+ * - 1: Ascending order
1076
+ * - 0: No sorting
1077
+ * - -1: Descending order
1078
+ * - null or undefined: No sorting
1079
+ */
1043
1080
  type SortOrder = 1 | 0 | -1 | null | undefined;
1044
1081
 
1045
1082
  /**
@@ -1064,6 +1101,45 @@ interface DataTableBaseProps<TValue extends DataTableValueArray> extends Omit<Re
1064
1101
  * @defaultValue 960px
1065
1102
  */
1066
1103
  breakpoint?: string | undefined;
1104
+ /**
1105
+ * Whether to enable cell memoization.
1106
+ *
1107
+ * When the memoization is enabled, be sure to:
1108
+ * 1- Update the value prop (i.e., row data) to trigger a re-render of the cells of a given row.
1109
+ * 2- Where necessary, use the spread operator (...) when updating the value prop objs which creates new fresh
1110
+ * objects and avoids mutating the same objects.
1111
+ *
1112
+ * When the memoization is disabled, a re-render of the datatable will trigger a re-render of all cells, which can
1113
+ * lead to performance issues with large datasets and is therefore not recommended.
1114
+ * @defaultValue true
1115
+ */
1116
+ cellMemo?: boolean;
1117
+ /**
1118
+ * The cell props to be checked at memoization.
1119
+ *
1120
+ * Possible cell props are:
1121
+ * 'hostName', 'allowCellSelection', 'cellMemo', 'cellMemoProps', 'cellMemoPropsDepth', 'cellClassName', 'checkIcon', 'collapsedRowIcon',
1122
+ * 'field', 'resolveFieldData', 'column', 'cProps', 'dataKey', 'editMode', 'editing', 'editingMeta', 'onEditingMetaChange', 'editingKey',
1123
+ * 'getEditingRowData', 'expanded', 'expandedRowIcon', 'frozenRow', 'frozenCol', 'alignFrozenCol', 'index', 'isSelectable', 'onCheckboxChange',
1124
+ * 'onClick', 'onMouseDown', 'onMouseUp', 'onRadioChange', 'onRowEditCancel', 'onRowEditInit', 'onRowEditSave', 'onRowToggle', 'responsiveLayout',
1125
+ * 'rowData', 'rowEditorCancelIcon', 'rowEditorInitIcon', 'rowEditorSaveIcon', 'rowIndex', 'rowSpan', 'selectOnEdit', 'isRowSelected', 'isCellSelected',
1126
+ * 'selectionAriaLabel', 'showRowReorderElement', 'showSelectionElement', 'tabIndex', 'getTabIndex', 'tableProps', 'tableSelector', 'value',
1127
+ * 'getVirtualScrollerOption', 'ptCallbacks', 'metaData', 'unstyled', 'findNextSelectableCell', 'findPrevSelectableCell', 'findDownSelectableCell',
1128
+ * 'findUpSelectableCell', 'focusOnElement', 'focusOnInit', 'updateStickyPosition'
1129
+ *
1130
+ * IMPORTANT: Including a function to be checked will in general disable the memoization in practice, since functions are
1131
+ * compared by reference.
1132
+ *
1133
+ * @defaultValue ['rowData', 'field', 'allowCellSelection', 'isCellSelected', 'editMode', 'index', 'tabIndex',
1134
+ * 'editing', 'expanded', 'editingMeta', 'frozenCol', 'alignFrozenCol']
1135
+ */
1136
+ cellMemoProps?: string[];
1137
+ /**
1138
+ * The comparison depth when checking cell props (e.g., rowData) at memoization.
1139
+ *
1140
+ * @defaultValue 1
1141
+ */
1142
+ cellMemoPropsDepth?: number;
1067
1143
  /**
1068
1144
  * Icon to display in the checkbox.
1069
1145
  */
@@ -1304,7 +1304,7 @@ var Cell = function Cell(props) {
1304
1304
  editingRowDataStateRef.current = editingRowData;
1305
1305
  };
1306
1306
  var _onClick = function onClick(event) {
1307
- props.onClick(event, getCellCallbackParams(event), isEditable(), editingState, setEditingState, selfClick, props.column, bindDocumentClickListener, overlayEventListener);
1307
+ props.onClick(event, getCellCallbackParams(event), isEditable(), editingState, setEditingState, selfClick, props.column, bindDocumentClickListener, overlayEventListener, isOutsideClicked);
1308
1308
  };
1309
1309
  var _onMouseDown = function onMouseDown(event) {
1310
1310
  var params = getCellCallbackParams(event);
@@ -1426,7 +1426,7 @@ var Cell = function Cell(props) {
1426
1426
  field: props.field,
1427
1427
  index: props.rowIndex
1428
1428
  });
1429
- props.focusOnInit();
1429
+ props.focusOnInit(initFocusTimeout, elementRef);
1430
1430
  };
1431
1431
  React.useEffect(function () {
1432
1432
  if (props.frozenCol) props.updateStickyPosition(elementRef, props.frozenCol, props.alignFrozenCol, styleObjectState, setStyleObjectState);
@@ -1767,11 +1767,18 @@ var RadioCheckCell = /*#__PURE__*/React.memo(function (props) {
1767
1767
  return ObjectUtils.selectiveCompare(prevProps, nextProps, keysToCompare);
1768
1768
  });
1769
1769
  RadioCheckCell.displayName = 'RadioCheckCell';
1770
+ var defaultKeysToCompare = ['rowData', 'field', 'allowCellSelection', 'isCellSelected', 'editMode', 'index', 'tabIndex', 'editing', 'expanded', 'editingMeta', 'frozenCol', 'alignFrozenCol'];
1770
1771
  var BodyCell = /*#__PURE__*/React.memo(function (props) {
1771
1772
  return /*#__PURE__*/React.createElement(Cell, props);
1772
1773
  }, function (prevProps, nextProps) {
1773
- var keysToCompare = ['field', 'allowCellSelection', 'isCellSelected', 'editMode', 'index', 'tabIndex', 'editing', 'expanded', 'editingMeta', 'rowData', 'frozenCol', 'alignFrozenCol'];
1774
- return ObjectUtils.selectiveCompare(prevProps, nextProps, keysToCompare);
1774
+ if (nextProps.cellMemo === false) return false;
1775
+ var memoProps = nextProps.cellMemoProps;
1776
+ var keysToCompare = Array.isArray(memoProps) && memoProps.every(function (prop) {
1777
+ return typeof prop === 'string';
1778
+ }) ? memoProps : defaultKeysToCompare;
1779
+ var memoPropsDepth = nextProps.cellMemoPropsDepth;
1780
+ var depth = typeof memoPropsDepth === 'number' && memoPropsDepth > 0 ? memoPropsDepth : 1;
1781
+ return ObjectUtils.selectiveCompare(prevProps, nextProps, keysToCompare, depth);
1775
1782
  });
1776
1783
  BodyCell.displayName = 'BodyCell';
1777
1784
 
@@ -2248,7 +2255,7 @@ var BodyRow = /*#__PURE__*/React.memo(function (props) {
2248
2255
  !isSameStyle && setStyleObjectState(styleObject);
2249
2256
  }
2250
2257
  }, []);
2251
- var onCellClick = function onCellClick(event, params, isEditable, editingState, setEditingState, selfClick, column, bindDocumentClickListener, overlayEventListener) {
2258
+ var onCellClick = function onCellClick(event, params, isEditable, editingState, setEditingState, selfClick, column, bindDocumentClickListener, overlayEventListener, isOutsideClicked) {
2252
2259
  if (props.editMode !== 'row' && isEditable && !editingState && (props.selectOnEdit || !props.selectOnEdit && props.isRowSelected)) {
2253
2260
  selfClick.current = true;
2254
2261
  var onBeforeCellEditShow = getColumnProp(column, 'onBeforeCellEditShow');
@@ -2307,6 +2314,9 @@ var BodyRow = /*#__PURE__*/React.memo(function (props) {
2307
2314
  var cellProps = mergeProps({
2308
2315
  hostName: props.hostName,
2309
2316
  allowCellSelection: props.allowCellSelection,
2317
+ cellMemo: props.cellMemo,
2318
+ cellMemoProps: props.cellMemoProps,
2319
+ cellMemoPropsDepth: props.cellMemoPropsDepth,
2310
2320
  cellClassName: props.cellClassName,
2311
2321
  checkIcon: props.checkIcon,
2312
2322
  collapsedRowIcon: props.collapsedRowIcon,
@@ -2674,9 +2684,6 @@ var TableBody = /*#__PURE__*/React.memo(/*#__PURE__*/React.forwardRef(function (
2674
2684
  options = options || props.virtualScrollerOptions;
2675
2685
  return options ? options[option] : null;
2676
2686
  };
2677
- var getProcessedDataIndex = function getProcessedDataIndex(rowIndex) {
2678
- return props.lazy ? rowIndex - props.first : rowIndex;
2679
- };
2680
2687
  var findIndex = function findIndex(collection, rowData) {
2681
2688
  return (collection || []).findIndex(function (data) {
2682
2689
  return equals(rowData, data);
@@ -2847,16 +2854,14 @@ var TableBody = /*#__PURE__*/React.memo(/*#__PURE__*/React.forwardRef(function (
2847
2854
  var rangeStart;
2848
2855
  var rangeEnd;
2849
2856
  var isAllowCellSelection = allowCellSelection();
2850
- var rangeRowIndexInProcessedData = getProcessedDataIndex(rangeRowIndex.current);
2851
- var anchorRowIndexInProcessedData = getProcessedDataIndex(anchorRowIndex.current);
2852
- if (rangeRowIndexInProcessedData > anchorRowIndexInProcessedData) {
2853
- rangeStart = anchorRowIndexInProcessedData;
2854
- rangeEnd = rangeRowIndexInProcessedData;
2855
- } else if (rangeRowIndexInProcessedData < anchorRowIndexInProcessedData) {
2856
- rangeStart = rangeRowIndexInProcessedData;
2857
- rangeEnd = anchorRowIndexInProcessedData;
2857
+ if (rangeRowIndex.current > anchorRowIndex.current) {
2858
+ rangeStart = anchorRowIndex.current;
2859
+ rangeEnd = rangeRowIndex.current;
2860
+ } else if (rangeRowIndex.current < anchorRowIndex.current) {
2861
+ rangeStart = rangeRowIndex.current;
2862
+ rangeEnd = anchorRowIndex.current;
2858
2863
  } else {
2859
- rangeStart = rangeEnd = rangeRowIndexInProcessedData;
2864
+ rangeStart = rangeEnd = rangeRowIndex.current;
2860
2865
  }
2861
2866
  return isAllowCellSelection ? selectRangeOnCell(event, rangeStart, rangeEnd) : selectRangeOnRow(event, rangeStart, rangeEnd);
2862
2867
  };
@@ -2897,7 +2902,7 @@ var TableBody = /*#__PURE__*/React.memo(/*#__PURE__*/React.forwardRef(function (
2897
2902
  for (var i = rowRangeStart; i <= rowRangeEnd; i++) {
2898
2903
  var rowData = value[i];
2899
2904
  var columns = props.columns;
2900
- var rowIndex = props.lazy ? i + props.first : i;
2905
+ var rowIndex = props.paginator ? i + props.first : i;
2901
2906
  for (var j = cellRangeStart; j <= cellRangeEnd; j++) {
2902
2907
  var field = getColumnProp(columns[j], 'field');
2903
2908
  var _value = ObjectUtils.resolveFieldData(rowData, field);
@@ -3096,13 +3101,17 @@ var TableBody = /*#__PURE__*/React.memo(/*#__PURE__*/React.forwardRef(function (
3096
3101
  onRangeSelection(event, 'row');
3097
3102
  }
3098
3103
  };
3104
+ var expandedRowsRef = React.useRef(props.expandedRows);
3105
+ React.useEffect(function () {
3106
+ expandedRowsRef.current = props.expandedRows;
3107
+ }, [props.expandedRows]);
3099
3108
  var onRowToggle = function onRowToggle(event) {
3100
3109
  var expandedRows;
3101
3110
  var dataKey = props.dataKey;
3102
3111
  var hasDataKey = props.groupRowsBy ? dataKey === props.groupRowsBy : !!dataKey;
3103
3112
  if (hasDataKey) {
3104
3113
  var dataKeyValue = String(ObjectUtils.resolveFieldData(event.data, dataKey));
3105
- expandedRows = props.expandedRows ? _objectSpread$8({}, props.expandedRows) : {};
3114
+ expandedRows = expandedRowsRef.current ? _objectSpread$8({}, expandedRowsRef.current) : {};
3106
3115
  if (expandedRows[dataKeyValue] != null) {
3107
3116
  delete expandedRows[dataKeyValue];
3108
3117
  if (props.onRowCollapse) {
@@ -3121,8 +3130,8 @@ var TableBody = /*#__PURE__*/React.memo(/*#__PURE__*/React.forwardRef(function (
3121
3130
  }
3122
3131
  }
3123
3132
  } else {
3124
- var expandedRowIndex = findIndex(props.expandedRows, event.data);
3125
- expandedRows = props.expandedRows ? _toConsumableArray(props.expandedRows) : [];
3133
+ var expandedRowIndex = findIndex(expandedRowsRef.current, event.data);
3134
+ expandedRows = expandedRowsRef.current ? _toConsumableArray(expandedRowsRef.current) : [];
3126
3135
  if (expandedRowIndex !== -1) {
3127
3136
  expandedRows = expandedRows.filter(function (_, i) {
3128
3137
  return i !== expandedRowIndex;
@@ -3372,7 +3381,7 @@ var TableBody = /*#__PURE__*/React.memo(/*#__PURE__*/React.forwardRef(function (
3372
3381
  return null;
3373
3382
  };
3374
3383
  var createGroupHeader = function createGroupHeader(rowData, rowIndex, expanded, colSpan) {
3375
- if (isSubheaderGrouping && shouldRenderRowGroupHeader(props.value, rowData, getProcessedDataIndex(rowIndex))) {
3384
+ if (isSubheaderGrouping && shouldRenderRowGroupHeader(props.value, rowData, rowIndex - props.first)) {
3376
3385
  var style = rowGroupHeaderStyle();
3377
3386
  var toggler = props.expandableRowGroups && /*#__PURE__*/React.createElement(RowTogglerButton, {
3378
3387
  hostName: props.hostName,
@@ -3422,6 +3431,9 @@ var TableBody = /*#__PURE__*/React.memo(/*#__PURE__*/React.forwardRef(function (
3422
3431
  hostName: props.hostName,
3423
3432
  allowCellSelection: _allowCellSelection,
3424
3433
  allowRowSelection: _allowRowSelection,
3434
+ cellMemo: props.cellMemo,
3435
+ cellMemoProps: props.cellMemoProps,
3436
+ cellMemoPropsDepth: props.cellMemoPropsDepth,
3425
3437
  cellClassName: props.cellClassName,
3426
3438
  checkIcon: props.checkIcon,
3427
3439
  collapsedRowIcon: props.collapsedRowIcon,
@@ -3814,6 +3826,7 @@ var FilterMatchMode = Object.freeze({
3814
3826
  EQUALS: 'equals',
3815
3827
  NOT_EQUALS: 'notEquals',
3816
3828
  IN: 'in',
3829
+ NOT_IN: 'notIn',
3817
3830
  LESS_THAN: 'lt',
3818
3831
  LESS_THAN_OR_EQUAL_TO: 'lte',
3819
3832
  GREATER_THAN: 'gt',
@@ -3902,6 +3915,7 @@ var locales = {
3902
3915
  emptySelectionMessage: 'No selected item',
3903
3916
  endsWith: 'Ends with',
3904
3917
  equals: 'Equals',
3918
+ fileChosenMessage: '{0} files',
3905
3919
  fileSizeTypes: ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'],
3906
3920
  filter: 'Filter',
3907
3921
  firstDayOfWeek: 0,
@@ -3920,6 +3934,7 @@ var locales = {
3920
3934
  nextMonth: 'Next Month',
3921
3935
  nextSecond: 'Next Second',
3922
3936
  nextYear: 'Next Year',
3937
+ noFileChosenMessage: 'No file chosen',
3923
3938
  noFilter: 'No Filter',
3924
3939
  notContains: 'Not contains',
3925
3940
  notEquals: 'Not equals',
@@ -3947,8 +3962,10 @@ var locales = {
3947
3962
  aria: {
3948
3963
  cancelEdit: 'Cancel Edit',
3949
3964
  close: 'Close',
3965
+ collapseLabel: 'Collapse',
3950
3966
  collapseRow: 'Row Collapsed',
3951
3967
  editRow: 'Edit Row',
3968
+ expandLabel: 'Expand',
3952
3969
  expandRow: 'Row Expanded',
3953
3970
  falseLabel: 'False',
3954
3971
  filterConstraint: 'Filter Constraint',
@@ -3973,18 +3990,20 @@ var locales = {
3973
3990
  next: 'Next',
3974
3991
  nextPageLabel: 'Next Page',
3975
3992
  nullLabel: 'Not Selected',
3976
- pageLabel: 'Page {page}',
3977
3993
  otpLabel: 'Please enter one time password character {0}',
3994
+ pageLabel: 'Page {page}',
3978
3995
  passwordHide: 'Hide Password',
3979
3996
  passwordShow: 'Show Password',
3980
3997
  previous: 'Previous',
3981
3998
  prevPageLabel: 'Previous Page',
3999
+ removeLabel: 'Remove',
3982
4000
  rotateLeft: 'Rotate Left',
3983
4001
  rotateRight: 'Rotate Right',
3984
4002
  rowsPerPageLabel: 'Rows per page',
3985
4003
  saveEdit: 'Save Edit',
3986
4004
  scrollTop: 'Scroll Top',
3987
4005
  selectAll: 'All items selected',
4006
+ selectLabel: 'Select',
3988
4007
  selectRow: 'Row Selected',
3989
4008
  showFilterMenu: 'Show Filter Menu',
3990
4009
  slide: 'Slide',
@@ -3993,6 +4012,7 @@ var locales = {
3993
4012
  stars: '{star} stars',
3994
4013
  trueLabel: 'True',
3995
4014
  unselectAll: 'All items unselected',
4015
+ unselectLabel: 'Unselect',
3996
4016
  unselectRow: 'Row Unselected',
3997
4017
  zoomImage: 'Zoom Image',
3998
4018
  zoomIn: 'Zoom In',
@@ -6919,58 +6939,60 @@ var DataTable = /*#__PURE__*/React.forwardRef(function (inProps, ref) {
6919
6939
  var exportCSV = function exportCSV(options) {
6920
6940
  var data;
6921
6941
  var csv = "\uFEFF";
6922
- var columns = getColumns();
6923
6942
  if (options && options.selectionOnly) {
6924
6943
  data = props.selection || [];
6925
6944
  } else {
6926
6945
  data = [].concat(_toConsumableArray(props.frozenValue || []), _toConsumableArray(processedData() || []));
6927
6946
  }
6928
6947
 
6929
- //headers
6930
- columns.forEach(function (column, i) {
6931
- var _ref5 = [getColumnProp(column, 'field'), getColumnProp(column, 'header'), getColumnProp(column, 'exportHeader'), getColumnProp(column, 'exportable')],
6948
+ // First build collection of exportable columns
6949
+ var exportableColumns = getColumns().filter(function (column) {
6950
+ var exportable = getColumnProp(column, 'exportable');
6951
+ var field = getColumnProp(column, 'field');
6952
+
6953
+ // Column must be exportable (or undefined/not set) and have a field defined
6954
+ return exportable !== false && field;
6955
+ });
6956
+
6957
+ // headers
6958
+ exportableColumns.forEach(function (column, i) {
6959
+ var _ref5 = [getColumnProp(column, 'field'), getColumnProp(column, 'header'), getColumnProp(column, 'exportHeader')],
6932
6960
  field = _ref5[0],
6933
6961
  header = _ref5[1],
6934
- exportHeader = _ref5[2],
6935
- exportable = _ref5[3];
6936
- if (exportable && field) {
6937
- var columnHeader = String(exportHeader || header || field).replace(/"/g, '""').replace(/\n/g, "\u2028");
6938
- csv = csv + ('"' + columnHeader + '"');
6939
- if (i < columns.length - 1) {
6940
- csv = csv + props.csvSeparator;
6941
- }
6962
+ exportHeader = _ref5[2];
6963
+ var columnHeader = String(exportHeader || header || field).replace(/"/g, '""').replace(/\n/g, "\u2028");
6964
+ csv = csv + ('"' + columnHeader + '"');
6965
+ if (i < exportableColumns.length - 1) {
6966
+ csv = csv + props.csvSeparator;
6942
6967
  }
6943
6968
  });
6944
6969
 
6945
- //body
6970
+ // body
6946
6971
  data.forEach(function (record) {
6947
6972
  csv = csv + '\n';
6948
- columns.forEach(function (column, i) {
6949
- var _ref6 = [getColumnProp(column, 'field'), getColumnProp(column, 'exportField'), getColumnProp(column, 'exportable')],
6973
+ exportableColumns.forEach(function (column, i) {
6974
+ var _ref6 = [getColumnProp(column, 'field'), getColumnProp(column, 'exportField')],
6950
6975
  colField = _ref6[0],
6951
- exportField = _ref6[1],
6952
- exportable = _ref6[2];
6976
+ exportField = _ref6[1];
6953
6977
  var field = exportField || colField;
6954
- if (exportable && field) {
6955
- var cellData = ObjectUtils.resolveFieldData(record, field);
6956
- if (cellData != null) {
6957
- if (props.exportFunction) {
6958
- cellData = props.exportFunction({
6959
- data: cellData,
6960
- field: field,
6961
- rowData: record,
6962
- column: column
6963
- });
6964
- } else {
6965
- cellData = String(cellData).replace(/"/g, '""').replace(/\n/g, "\u2028");
6966
- }
6978
+ var cellData = ObjectUtils.resolveFieldData(record, field);
6979
+ if (cellData != null) {
6980
+ if (props.exportFunction) {
6981
+ cellData = props.exportFunction({
6982
+ data: cellData,
6983
+ field: field,
6984
+ rowData: record,
6985
+ column: column
6986
+ });
6967
6987
  } else {
6968
- cellData = '';
6969
- }
6970
- csv = csv + ('"' + cellData + '"');
6971
- if (i < columns.length - 1) {
6972
- csv = csv + props.csvSeparator;
6988
+ cellData = String(cellData).replace(/"/g, '""').replace(/\n/g, "\u2028");
6973
6989
  }
6990
+ } else {
6991
+ cellData = '';
6992
+ }
6993
+ csv = csv + ('"' + cellData + '"');
6994
+ if (i < exportableColumns.length - 1) {
6995
+ csv = csv + props.csvSeparator;
6974
6996
  }
6975
6997
  });
6976
6998
  });
@@ -7235,6 +7257,9 @@ var DataTable = /*#__PURE__*/React.forwardRef(function (inProps, ref) {
7235
7257
  var frozenBody = ObjectUtils.isNotEmpty(props.frozenValue) && /*#__PURE__*/React.createElement(TableBody, {
7236
7258
  hostName: "DataTable",
7237
7259
  ref: frozenBodyRef,
7260
+ cellMemo: props.cellMemo,
7261
+ cellMemoProps: props.cellMemoProps,
7262
+ cellMemoPropsDepth: props.cellMemoPropsDepth,
7238
7263
  cellClassName: props.cellClassName,
7239
7264
  cellSelection: props.cellSelection,
7240
7265
  checkIcon: props.checkIcon,
@@ -7319,6 +7344,9 @@ var DataTable = /*#__PURE__*/React.forwardRef(function (inProps, ref) {
7319
7344
  var body = /*#__PURE__*/React.createElement(TableBody, {
7320
7345
  hostName: "DataTable",
7321
7346
  ref: bodyRef,
7347
+ cellMemo: props.cellMemo,
7348
+ cellMemoProps: props.cellMemoProps,
7349
+ cellMemoPropsDepth: props.cellMemoPropsDepth,
7322
7350
  cellClassName: props.cellClassName,
7323
7351
  cellSelection: props.cellSelection,
7324
7352
  checkIcon: props.checkIcon,