@elliemae/ds-data-table 2.0.0-rc.1 → 2.0.0-rc.13

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 (138) hide show
  1. package/cjs/DataTableSchema.js +21 -12
  2. package/cjs/addons/Editables/TextEditableCell/TextEditableCell.js +16 -0
  3. package/cjs/addons/Filters/Components/CurrencyRangeFilter/index.js +24 -2
  4. package/cjs/addons/Filters/Components/DateRangeFilter/index.js +4 -1
  5. package/cjs/addons/Filters/Components/NumberRangeFilter/index.js +25 -3
  6. package/cjs/addons/Filters/Components/SingleDateFilter/index.js +4 -1
  7. package/cjs/addons/Filters/Components/index.js +0 -2
  8. package/cjs/addons/Filters/index.js +0 -2
  9. package/cjs/configs/usePaginationConfig.js +1 -1
  10. package/cjs/configs/useRowFlattenization.js +3 -3
  11. package/cjs/exported-related/EditableCell.js +13 -7
  12. package/cjs/exported-related/FilterPopover.js +17 -3
  13. package/cjs/exported-related/FilterTypes.js +0 -1
  14. package/cjs/exported-related/Filters/applyOutOfTheBoxFilters.js +0 -2
  15. package/cjs/exported-related/Filters/index.js +0 -2
  16. package/cjs/exported-related/index.js +0 -2
  17. package/cjs/helpers/refs-helpers.js +2 -2
  18. package/cjs/index.js +0 -2
  19. package/cjs/parts/FilterBar/FiltersBar.js +0 -2
  20. package/cjs/parts/FilterBar/components/index.js +0 -2
  21. package/cjs/parts/Filters/index.js +10 -12
  22. package/cjs/parts/Headers/HeaderCellGroup.js +4 -3
  23. package/cjs/parts/Headers/index.js +1 -1
  24. package/cjs/parts/Headers/useHeaderCellHandlers.js +4 -2
  25. package/cjs/parts/HoC/withConditionalDnDColumnContext.js +37 -16
  26. package/cjs/parts/HoC/withConditionalDnDRowContext.js +11 -12
  27. package/cjs/parts/HoC/withConditionalDnDSortableContext.js +1 -1
  28. package/cjs/parts/HoC/withDnDSortableColumnContext.js +5 -19
  29. package/cjs/parts/HoC/withDnDSortableRowContext.js +3 -17
  30. package/cjs/parts/Row.js +10 -10
  31. package/cjs/parts/Rows.js +1 -1
  32. package/cjs/parts/index.js +1 -1
  33. package/cjs/styled.js +18 -13
  34. package/esm/DataTableSchema.js +21 -12
  35. package/esm/addons/Editables/TextEditableCell/TextEditableCell.js +16 -0
  36. package/esm/addons/Filters/Components/CurrencyRangeFilter/index.js +24 -2
  37. package/esm/addons/Filters/Components/DateRangeFilter/index.js +4 -1
  38. package/esm/addons/Filters/Components/NumberRangeFilter/index.js +25 -3
  39. package/esm/addons/Filters/Components/SingleDateFilter/index.js +4 -1
  40. package/esm/addons/Filters/Components/index.js +0 -1
  41. package/esm/addons/Filters/index.js +0 -1
  42. package/esm/configs/usePaginationConfig.js +1 -1
  43. package/esm/configs/useRowFlattenization.js +3 -3
  44. package/esm/exported-related/EditableCell.js +13 -7
  45. package/esm/exported-related/FilterPopover.js +17 -3
  46. package/esm/exported-related/FilterTypes.js +0 -1
  47. package/esm/exported-related/Filters/applyOutOfTheBoxFilters.js +0 -2
  48. package/esm/exported-related/Filters/index.js +0 -1
  49. package/esm/exported-related/index.js +0 -1
  50. package/esm/helpers/refs-helpers.js +2 -2
  51. package/esm/index.js +0 -1
  52. package/esm/parts/FilterBar/FiltersBar.js +0 -2
  53. package/esm/parts/FilterBar/components/index.js +0 -1
  54. package/esm/parts/Filters/index.js +0 -2
  55. package/esm/parts/Headers/HeaderCellGroup.js +4 -4
  56. package/esm/parts/Headers/index.js +2 -2
  57. package/esm/parts/Headers/useHeaderCellHandlers.js +4 -2
  58. package/esm/parts/HoC/withConditionalDnDColumnContext.js +38 -17
  59. package/esm/parts/HoC/withConditionalDnDRowContext.js +12 -13
  60. package/esm/parts/HoC/withConditionalDnDSortableContext.js +1 -1
  61. package/esm/parts/HoC/withDnDSortableColumnContext.js +6 -20
  62. package/esm/parts/HoC/withDnDSortableRowContext.js +4 -18
  63. package/esm/parts/Row.js +7 -10
  64. package/esm/styled.js +18 -13
  65. package/package.json +26 -103
  66. package/types/DataTable.d.ts +245 -43
  67. package/types/DataTableSchema.d.ts +245 -43
  68. package/types/addons/Filters/Components/SelectFilter/components.d.ts +6 -6
  69. package/types/addons/Filters/Components/index.d.ts +0 -1
  70. package/types/exported-related/FilterTypes.d.ts +0 -1
  71. package/types/exported-related/Filters/index.d.ts +0 -1
  72. package/types/helpers/refs-helpers.d.ts +1 -1
  73. package/types/parts/FilterBar/components/index.d.ts +0 -1
  74. package/types/parts/FilterBar/styled.d.ts +165 -30
  75. package/types/parts/Headers/HeaderCellGroup.d.ts +4 -3
  76. package/types/parts/Row.d.ts +2 -1
  77. package/types/styled.d.ts +21 -19
  78. package/types/types/props.d.ts +2 -2
  79. package/cjs/addons/Filters/Components/TextInputFilter/index.js +0 -92
  80. package/cjs/exported-related/Filters/textFilterFn.js +0 -14
  81. package/cjs/helpers/dndkit/hierarchy/customCollisionDetection.js +0 -76
  82. package/cjs/helpers/dndkit/hierarchy/getHierarchyKeyboardCoordinates.js +0 -141
  83. package/cjs/helpers/dndkit/hierarchy/types.js +0 -2
  84. package/cjs/helpers/dndkit/hierarchy/useHierarchyActionHandlers.js +0 -55
  85. package/cjs/helpers/dndkit/hierarchy/useHierarchyAnnouncements.js +0 -36
  86. package/cjs/helpers/dndkit/hierarchy/useHierarchyDndkitConfig.js +0 -109
  87. package/cjs/helpers/dndkit/hierarchy/useHierarchyPreviewHandlers.js +0 -87
  88. package/cjs/helpers/dndkit/tree/customCollisionDetection.js +0 -98
  89. package/cjs/helpers/dndkit/tree/getTreeKeyboardCoordinates.js +0 -139
  90. package/cjs/helpers/dndkit/tree/types.js +0 -2
  91. package/cjs/helpers/dndkit/tree/useTreeActionHandlers.js +0 -75
  92. package/cjs/helpers/dndkit/tree/useTreeAnnouncements.js +0 -55
  93. package/cjs/helpers/dndkit/tree/useTreeDndkitConfig.js +0 -139
  94. package/cjs/helpers/dndkit/tree/useTreePreviewHandlers.js +0 -54
  95. package/cjs/helpers/dndkit/types.js +0 -2
  96. package/cjs/helpers/dndkit/utilities.js +0 -52
  97. package/cjs/parts/FilterBar/components/TextPill.js +0 -42
  98. package/cjs/parts/HoC/DragOverlayContext.js +0 -11
  99. package/esm/addons/Filters/Components/TextInputFilter/index.js +0 -84
  100. package/esm/exported-related/Filters/textFilterFn.js +0 -10
  101. package/esm/helpers/dndkit/hierarchy/customCollisionDetection.js +0 -72
  102. package/esm/helpers/dndkit/hierarchy/getHierarchyKeyboardCoordinates.js +0 -133
  103. package/esm/helpers/dndkit/hierarchy/types.js +0 -1
  104. package/esm/helpers/dndkit/hierarchy/useHierarchyActionHandlers.js +0 -51
  105. package/esm/helpers/dndkit/hierarchy/useHierarchyAnnouncements.js +0 -32
  106. package/esm/helpers/dndkit/hierarchy/useHierarchyDndkitConfig.js +0 -103
  107. package/esm/helpers/dndkit/hierarchy/useHierarchyPreviewHandlers.js +0 -83
  108. package/esm/helpers/dndkit/tree/customCollisionDetection.js +0 -94
  109. package/esm/helpers/dndkit/tree/getTreeKeyboardCoordinates.js +0 -131
  110. package/esm/helpers/dndkit/tree/types.js +0 -1
  111. package/esm/helpers/dndkit/tree/useTreeActionHandlers.js +0 -71
  112. package/esm/helpers/dndkit/tree/useTreeAnnouncements.js +0 -51
  113. package/esm/helpers/dndkit/tree/useTreeDndkitConfig.js +0 -133
  114. package/esm/helpers/dndkit/tree/useTreePreviewHandlers.js +0 -50
  115. package/esm/helpers/dndkit/types.js +0 -1
  116. package/esm/helpers/dndkit/utilities.js +0 -47
  117. package/esm/parts/FilterBar/components/TextPill.js +0 -34
  118. package/esm/parts/HoC/DragOverlayContext.js +0 -7
  119. package/types/addons/Filters/Components/TextInputFilter/index.d.ts +0 -3
  120. package/types/exported-related/Filters/textFilterFn.d.ts +0 -2
  121. package/types/helpers/dndkit/hierarchy/customCollisionDetection.d.ts +0 -3
  122. package/types/helpers/dndkit/hierarchy/getHierarchyKeyboardCoordinates.d.ts +0 -3
  123. package/types/helpers/dndkit/hierarchy/types.d.ts +0 -66
  124. package/types/helpers/dndkit/hierarchy/useHierarchyActionHandlers.d.ts +0 -2
  125. package/types/helpers/dndkit/hierarchy/useHierarchyAnnouncements.d.ts +0 -3
  126. package/types/helpers/dndkit/hierarchy/useHierarchyDndkitConfig.d.ts +0 -3
  127. package/types/helpers/dndkit/hierarchy/useHierarchyPreviewHandlers.d.ts +0 -2
  128. package/types/helpers/dndkit/tree/customCollisionDetection.d.ts +0 -4
  129. package/types/helpers/dndkit/tree/getTreeKeyboardCoordinates.d.ts +0 -3
  130. package/types/helpers/dndkit/tree/types.d.ts +0 -83
  131. package/types/helpers/dndkit/tree/useTreeActionHandlers.d.ts +0 -2
  132. package/types/helpers/dndkit/tree/useTreeAnnouncements.d.ts +0 -4
  133. package/types/helpers/dndkit/tree/useTreeDndkitConfig.d.ts +0 -3
  134. package/types/helpers/dndkit/tree/useTreePreviewHandlers.d.ts +0 -2
  135. package/types/helpers/dndkit/types.d.ts +0 -20
  136. package/types/helpers/dndkit/utilities.d.ts +0 -7
  137. package/types/parts/FilterBar/components/TextPill.d.ts +0 -2
  138. package/types/parts/HoC/DragOverlayContext.d.ts +0 -6
@@ -8,14 +8,17 @@ require('core-js/modules/esnext.async-iterator.for-each.js');
8
8
  require('core-js/modules/esnext.iterator.constructor.js');
9
9
  require('core-js/modules/esnext.iterator.for-each.js');
10
10
  require('core-js/modules/web.dom-collections.iterator.js');
11
+ require('core-js/modules/esnext.async-iterator.find.js');
12
+ require('core-js/modules/esnext.iterator.find.js');
11
13
  require('core-js/modules/esnext.async-iterator.filter.js');
12
14
  require('core-js/modules/esnext.iterator.filter.js');
13
15
  var React = require('react');
14
16
  var core = require('@dnd-kit/core');
17
+ var dsDragAndDrop = require('@elliemae/ds-drag-and-drop');
15
18
  var sortable = require('@dnd-kit/sortable');
16
- var DragOverlayContext = require('./DragOverlayContext.js');
17
- var useHierarchyDndkitConfig = require('../../helpers/dndkit/hierarchy/useHierarchyDndkitConfig.js');
18
19
  var DataTableContext = require('../../DataTableContext.js');
20
+ var HeaderCellGroup = require('../Headers/HeaderCellGroup.js');
21
+ var constants = require('../../configs/constants.js');
19
22
  var jsxRuntime = require('react/jsx-runtime');
20
23
 
21
24
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
@@ -36,7 +39,9 @@ const flattenColumns = cols => {
36
39
 
37
40
  const flatten = function (col, index) {
38
41
  let parentId = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
39
- const id = col.Header;
42
+ const {
43
+ id
44
+ } = col;
40
45
  flattened.push([{
41
46
  id,
42
47
  parentId,
@@ -54,13 +59,11 @@ const withConditionalDnDColumnContext = Component => props => {
54
59
  const {
55
60
  tableProps: {
56
61
  dragAndDropColumns,
57
- columns,
58
62
  onColumnsReorder
59
- }
63
+ },
64
+ visibleColumns
60
65
  } = React__default["default"].useContext(DataTableContext["default"]);
61
- const [PureDraggedJSX, setPureDraggedJSX] = React__default["default"].useState(null); // todo: check if this can be done via portal
62
-
63
- const flattenedItems = React.useMemo(() => flattenColumns(columns), [columns]);
66
+ const flattenedItems = React.useMemo(() => flattenColumns(visibleColumns), [visibleColumns]);
64
67
  const onReorder = React.useCallback((movedItem, indexes) => {
65
68
  // Send from index to target index
66
69
  const newFlattenedData = sortable.arrayMove(flattenedItems, indexes.fromIndex, indexes.targetIndex); // Pull the cols's data into an object
@@ -84,25 +87,43 @@ const withConditionalDnDColumnContext = Component => props => {
84
87
  });
85
88
  onColumnsReorder(newData, indexes);
86
89
  }, [flattenedItems, onColumnsReorder]);
90
+ const onPreviewResetState = React.useCallback(() => {
91
+ const el = document.body.querySelector("[data-testid=\"".concat(constants.DATA_TESTID.DATA_TABLE_SCROLLABLE_CONTAINER, "\"]"));
92
+ if (el) el.onscroll = () => null;
93
+ }, []);
94
+ const onPreviewDragStart = React.useCallback(() => {
95
+ const el = document.body.querySelector("[data-testid=\"".concat(constants.DATA_TESTID.DATA_TABLE_SCROLLABLE_CONTAINER, "\"]"));
96
+
97
+ if (el) {
98
+ const y = el.scrollTop;
99
+
100
+ el.onscroll = () => el.scrollTo(0, y);
101
+ }
102
+ }, []);
87
103
  const {
88
104
  dndContextProps,
89
105
  activeId,
90
106
  activeIndex
91
- } = useHierarchyDndkitConfig({
107
+ } = dsDragAndDrop.useHierarchyDndkitConfig({
92
108
  flattenedItems,
109
+ dragOverlayDataTestid: constants.DATA_TESTID.DATA_TABLE_COLUMN_DRAG_OVERLAY,
93
110
  isHorizontalDnD: true,
94
- onReorder
111
+ onReorder,
112
+ onPreviewResetState,
113
+ onPreviewDragStart
95
114
  });
96
115
  if (dragAndDropColumns) return /*#__PURE__*/jsxRuntime.jsxs(core.DndContext, _objectSpread(_objectSpread({}, dndContextProps), {}, {
97
- children: [/*#__PURE__*/_jsx__default["default"](DragOverlayContext.DragOverlayContext.Provider, {
98
- value: {
99
- setPureDraggedJSX
100
- }
101
- }, void 0, /*#__PURE__*/_jsx__default["default"](DnDGroupContext.Provider, {
116
+ children: [/*#__PURE__*/_jsx__default["default"](DnDGroupContext.Provider, {
102
117
  value: {
103
118
  activeIndex
104
119
  }
105
- }, void 0, /*#__PURE__*/jsxRuntime.jsx(Component, _objectSpread({}, props)))), /*#__PURE__*/_jsx__default["default"](core.DragOverlay, {}, void 0, activeId ? PureDraggedJSX : null)]
120
+ }, void 0, /*#__PURE__*/jsxRuntime.jsx(Component, _objectSpread({}, props))), /*#__PURE__*/_jsx__default["default"](core.DragOverlay, {}, void 0, activeId ? /*#__PURE__*/_jsx__default["default"](HeaderCellGroup.HeaderCellGroup, {
121
+ header: flattenedItems.find(_ref3 => {
122
+ let [item] = _ref3;
123
+ return item.id === activeId;
124
+ })[1],
125
+ isDragOverlay: true
126
+ }) : null)]
106
127
  }));
107
128
  return /*#__PURE__*/jsxRuntime.jsx(Component, _objectSpread({}, props));
108
129
  };
@@ -8,15 +8,17 @@ require('core-js/modules/web.dom-collections.iterator.js');
8
8
  require('core-js/modules/esnext.async-iterator.for-each.js');
9
9
  require('core-js/modules/esnext.iterator.constructor.js');
10
10
  require('core-js/modules/esnext.iterator.for-each.js');
11
+ require('core-js/modules/esnext.async-iterator.find.js');
12
+ require('core-js/modules/esnext.iterator.find.js');
11
13
  require('core-js/modules/esnext.async-iterator.filter.js');
12
14
  require('core-js/modules/esnext.iterator.filter.js');
13
15
  var React = require('react');
14
16
  var core = require('@dnd-kit/core');
15
17
  var sortable = require('@dnd-kit/sortable');
16
18
  var DataTableContext = require('../../DataTableContext.js');
17
- var useTreeDndkitConfig = require('../../helpers/dndkit/tree/useTreeDndkitConfig.js');
18
- var DragOverlayContext = require('./DragOverlayContext.js');
19
+ var dsDragAndDrop = require('@elliemae/ds-drag-and-drop');
19
20
  var SortableItemContext = require('./SortableItemContext.js');
21
+ var Row = require('../Row.js');
20
22
  var jsxRuntime = require('react/jsx-runtime');
21
23
 
22
24
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
@@ -48,8 +50,6 @@ const withConditionalDnDRowContext = Component => props => {
48
50
  flattenedData,
49
51
  allDataFlattened
50
52
  } = React__default["default"].useContext(DataTableContext["default"]);
51
- const [PureDraggedJSX, setPureDraggedJSX] = React__default["default"].useState(null); // todo: check if this can be done via portal
52
-
53
53
  const [lastActiveId, setLastActiveId] = React__default["default"].useState(null);
54
54
  const onReorder = React.useCallback((newData, indexes, considerExpanding) => {
55
55
  // Pull the row's original data into an object
@@ -78,7 +78,7 @@ const withConditionalDnDRowContext = Component => props => {
78
78
  depth,
79
79
  dropIndicatorPosition,
80
80
  visibleItems
81
- } = useTreeDndkitConfig({
81
+ } = dsDragAndDrop.useTreeDndkitConfig({
82
82
  flattenedItems: allDataFlattened,
83
83
  visibleItems: flattenedData,
84
84
  isHorizontalDnD: false,
@@ -89,11 +89,7 @@ const withConditionalDnDRowContext = Component => props => {
89
89
  if (lastActiveId !== activeId && activeId) setLastActiveId(activeId);
90
90
  if (dragAndDropRows) return /*#__PURE__*/jsxRuntime.jsxs(core.DndContext, _objectSpread(_objectSpread({}, dndContextProps), {}, {
91
91
  children: [/*#__PURE__*/jsxRuntime.jsx(sortable.SortableContext, _objectSpread(_objectSpread({}, sortableContextProps), {}, {
92
- children: /*#__PURE__*/_jsx__default["default"](DragOverlayContext.DragOverlayContext.Provider, {
93
- value: {
94
- setPureDraggedJSX
95
- }
96
- }, void 0, /*#__PURE__*/_jsx__default["default"](DnDTreeContext.Provider, {
92
+ children: /*#__PURE__*/_jsx__default["default"](DnDTreeContext.Provider, {
97
93
  value: {
98
94
  activeIndex,
99
95
  depth,
@@ -102,12 +98,15 @@ const withConditionalDnDRowContext = Component => props => {
102
98
  lastActiveId,
103
99
  setLastActiveId
104
100
  }
105
- }, void 0, /*#__PURE__*/jsxRuntime.jsx(Component, _objectSpread({}, props))))
101
+ }, void 0, /*#__PURE__*/jsxRuntime.jsx(Component, _objectSpread({}, props)))
106
102
  })), /*#__PURE__*/_jsx__default["default"](core.DragOverlay, {
107
103
  style: {
108
104
  width: 'auto'
109
105
  }
110
- }, void 0, activeId ? PureDraggedJSX : null)]
106
+ }, void 0, activeId ? /*#__PURE__*/_jsx__default["default"](Row.Row, {
107
+ row: flattenedData.find(row => row.uid === activeId),
108
+ isDragOverlay: true
109
+ }) : null)]
111
110
  }));
112
111
  return /*#__PURE__*/jsxRuntime.jsx(Component, _objectSpread({}, props));
113
112
  };
@@ -35,7 +35,7 @@ const withConditionalDnDSortableContext = function (items) {
35
35
  // It's important that drag overlays DO NOT have any sortable functionality!
36
36
 
37
37
  if (!isDragOverlay && dragAndDropColumns) return /*#__PURE__*/_jsx__default["default"](sortable.SortableContext, {
38
- items: items.map(item => item.Header),
38
+ items: items.map(item => item.id),
39
39
  strategy: sortable.horizontalListSortingStrategy
40
40
  }, void 0, /*#__PURE__*/jsxRuntime.jsx(Component, _objectSpread({}, props)));
41
41
  return /*#__PURE__*/jsxRuntime.jsx(Component, _objectSpread({}, props));
@@ -12,7 +12,6 @@ var _defineProperty = require('@babel/runtime/helpers/defineProperty');
12
12
  var React = require('react');
13
13
  var sortable = require('@dnd-kit/sortable');
14
14
  var DataTableContext = require('../../DataTableContext.js');
15
- var DragOverlayContext = require('./DragOverlayContext.js');
16
15
  var withConditionalDnDColumnContext = require('./withConditionalDnDColumnContext.js');
17
16
  var SortableItemContext = require('./SortableItemContext.js');
18
17
  var jsxRuntime = require('react/jsx-runtime');
@@ -31,18 +30,14 @@ const withDnDSortableColumnContext = Component => props => {
31
30
  dragAndDropColumns
32
31
  }
33
32
  } = React.useContext(DataTableContext["default"]);
34
- const {
35
- setPureDraggedJSX
36
- } = React.useContext(DragOverlayContext.DragOverlayContext);
37
33
  const {
38
34
  activeIndex
39
35
  } = React.useContext(withConditionalDnDColumnContext.DnDGroupContext); // onMount generate unique options, so everyting is only ran once
40
36
 
41
37
  const draggableOptions = React.useMemo(() => ({
42
- id: props.header.Header
43
- }), [props.header.Header]);
44
- const useSortableHelpers = sortable.useSortable(draggableOptions);
45
- const PureComponentJSX = React.useMemo(() => /*#__PURE__*/jsxRuntime.jsx(Component, _objectSpread({}, props)), [props]); // calculate all the "useSortable" values as per required
38
+ id: props.header.id
39
+ }), [props.header.id]);
40
+ const useSortableHelpers = sortable.useSortable(draggableOptions); // calculate all the "useSortable" values as per required
46
41
 
47
42
  const draggableProps = React.useMemo(() => {
48
43
  if (!dragAndDropColumns) return false;
@@ -54,16 +49,7 @@ const withDnDSortableColumnContext = Component => props => {
54
49
  shouldShowDropIndicatorPosition: overIndex === index && overIndex !== -1,
55
50
  dropIndicatorPosition: index > activeIndex ? SortableItemContext.DropIndicatorPosition.After : SortableItemContext.DropIndicatorPosition.Before
56
51
  });
57
- }, [useSortableHelpers, dragAndDropColumns, activeIndex]);
58
- React.useEffect(() => {
59
- // We assume the structure of the inner element WON'T change during DnD
60
- // This is a huge performance boost
61
- if (useSortableHelpers.isDragging) {
62
- setPureDraggedJSX( /*#__PURE__*/React.cloneElement(PureComponentJSX, {
63
- isDragOverlay: true
64
- }));
65
- }
66
- }, [useSortableHelpers.isDragging, setPureDraggedJSX]); // we use a context so we can easly access information wherever without bubbling down
52
+ }, [useSortableHelpers, dragAndDropColumns, activeIndex]); // we use a context so we can easly access information wherever without bubbling down
67
53
  // this context is all Memoized so as long as component is not re-mounted,
68
54
  // the context won't trigger un-required renders per-se...
69
55
 
@@ -73,7 +59,7 @@ const withDnDSortableColumnContext = Component => props => {
73
59
 
74
60
  return /*#__PURE__*/_jsx__default["default"](SortableItemContext.SortableItemContext.Provider, {
75
61
  value: ctx
76
- }, void 0, PureComponentJSX);
62
+ }, void 0, /*#__PURE__*/jsxRuntime.jsx(Component, _objectSpread({}, props)));
77
63
  };
78
64
 
79
65
  exports.withDnDSortableColumnContext = withDnDSortableColumnContext;
@@ -13,7 +13,6 @@ var React = require('react');
13
13
  var sortable = require('@dnd-kit/sortable');
14
14
  var DataTableContext = require('../../DataTableContext.js');
15
15
  var withConditionalDnDRowContext = require('./withConditionalDnDRowContext.js');
16
- var DragOverlayContext = require('./DragOverlayContext.js');
17
16
  var SortableItemContext = require('./SortableItemContext.js');
18
17
  var jsxRuntime = require('react/jsx-runtime');
19
18
 
@@ -31,9 +30,6 @@ const withDnDSortableRowContext = Component => props => {
31
30
  dragAndDropRows
32
31
  }
33
32
  } = React.useContext(DataTableContext["default"]);
34
- const {
35
- setPureDraggedJSX
36
- } = React.useContext(DragOverlayContext.DragOverlayContext);
37
33
  const {
38
34
  dropIndicatorPosition,
39
35
  lastActiveId,
@@ -43,8 +39,7 @@ const withDnDSortableRowContext = Component => props => {
43
39
  const draggableOptions = React.useMemo(() => ({
44
40
  id: props.row.uid
45
41
  }), [props.row]);
46
- const useSortableHelpers = sortable.useSortable(draggableOptions);
47
- const PureComponentJSX = React.useMemo(() => /*#__PURE__*/jsxRuntime.jsx(Component, _objectSpread({}, props)), [props]); // calculate all the "useSortable" values as per required
42
+ const useSortableHelpers = sortable.useSortable(draggableOptions); // calculate all the "useSortable" values as per required
48
43
 
49
44
  const draggableProps = React.useMemo(() => {
50
45
  if (!dragAndDropRows) return false;
@@ -58,16 +53,7 @@ const withDnDSortableRowContext = Component => props => {
58
53
  lastActiveId,
59
54
  setLastActiveId
60
55
  });
61
- }, [dragAndDropRows, useSortableHelpers, dropIndicatorPosition, lastActiveId, setLastActiveId]);
62
- React.useEffect(() => {
63
- // We assume the structure of the inner element WON'T change during DnD
64
- // This is a huge performance boost
65
- if (useSortableHelpers.isDragging) {
66
- setPureDraggedJSX( /*#__PURE__*/React.cloneElement(PureComponentJSX, {
67
- isDragOverlay: true
68
- }));
69
- }
70
- }, [useSortableHelpers.isDragging, setPureDraggedJSX]); // we use a context so we can easly access information wherever without bubbling down
56
+ }, [dragAndDropRows, useSortableHelpers, dropIndicatorPosition, lastActiveId, setLastActiveId]); // we use a context so we can easly access information wherever without bubbling down
71
57
  // this context is all Memoized so as long as component is not re-mounted,
72
58
  // the context won't trigger un-required renders per-se...
73
59
 
@@ -77,7 +63,7 @@ const withDnDSortableRowContext = Component => props => {
77
63
 
78
64
  return /*#__PURE__*/_jsx__default["default"](SortableItemContext.SortableItemContext.Provider, {
79
65
  value: ctx
80
- }, void 0, PureComponentJSX);
66
+ }, void 0, /*#__PURE__*/jsxRuntime.jsx(Component, _objectSpread({}, props)));
81
67
  };
82
68
 
83
69
  exports.withDnDSortableRowContext = withDnDSortableRowContext;
package/cjs/parts/Row.js CHANGED
@@ -1,5 +1,7 @@
1
1
  'use strict';
2
2
 
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
3
5
  var _jsx = require('@babel/runtime/helpers/jsx');
4
6
  require('core-js/modules/web.dom-collections.iterator.js');
5
7
  var React = require('react');
@@ -22,17 +24,17 @@ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'defau
22
24
  var _jsx__default = /*#__PURE__*/_interopDefaultLegacy(_jsx);
23
25
 
24
26
  const setItemRefs = (measureRef, draggableRef, ref) => {
25
- const refsToSet = [measureRef];
27
+ const refsToSet = [];
28
+ if (measureRef) refsToSet.push(measureRef);
26
29
  if (draggableRef) refsToSet.push(draggableRef);
27
30
  refsHelpers.setMultipleRefs(...refsToSet)(ref);
28
31
  };
29
32
 
30
- const Row = props => {
33
+ const RowComp = props => {
31
34
  const {
32
35
  row,
33
36
  measureRef,
34
37
  itemWrapperStyle,
35
- itemIndex,
36
38
  isDragOverlay,
37
39
  focusedRowId,
38
40
  selectedRowId
@@ -47,7 +49,7 @@ const Row = props => {
47
49
  ref: ref => setItemRefs(measureRef, draggableRef, ref),
48
50
  children: /*#__PURE__*/_jsx__default["default"](index.RowVariantMapItem, {
49
51
  row: row,
50
- itemIndex: itemIndex,
52
+ itemIndex: row.realIndex,
51
53
  isDragOverlay: isDragOverlay,
52
54
  ctx: ctx,
53
55
  focusedRowId: focusedRowId,
@@ -56,15 +58,13 @@ const Row = props => {
56
58
  });
57
59
  };
58
60
 
59
- Row.defaultProps = {
60
- itemWrapperStyle: {}
61
- };
62
-
63
61
  const mapStateToProps = state => ({
64
62
  focusedRowId: state.rows.focusedRowId,
65
63
  selectedRowId: state.rows.selectedRowId
66
64
  });
67
65
 
68
- var Row$1 = withDnDSortableRowContext.withDnDSortableRowContext(reactRedux.connect(mapStateToProps)(Row));
66
+ const Row = reactRedux.connect(mapStateToProps)(RowComp);
67
+ var Row$1 = withDnDSortableRowContext.withDnDSortableRowContext(Row);
69
68
 
70
- module.exports = Row$1;
69
+ exports.Row = Row;
70
+ exports["default"] = Row$1;
package/cjs/parts/Rows.js CHANGED
@@ -64,7 +64,7 @@ const Rows = () => {
64
64
  itemIndex: index,
65
65
  itemWrapperStyle: style
66
66
  };
67
- return /*#__PURE__*/jsxRuntime.jsx(Row, _objectSpread({}, rowProps));
67
+ return /*#__PURE__*/jsxRuntime.jsx(Row["default"], _objectSpread({}, rowProps));
68
68
  })
69
69
  }), [virtualItems, items, visibleColumns, totalColumnsWidth]);
70
70
  return PureVirtualizedRows;
@@ -14,6 +14,6 @@ var DnDHandle = require('./DnDHandle.js');
14
14
  exports.TableContent = TableContent;
15
15
  exports.Loader = Loader;
16
16
  exports.EmptyContent = EmptyContent;
17
- exports.Row = Row;
17
+ exports.Row = Row["default"];
18
18
  exports.Footer = Footer;
19
19
  exports.DnDHandle = DnDHandle;
package/cjs/styled.js CHANGED
@@ -158,22 +158,27 @@ const StyledPencilIcon = /*#__PURE__*/styled__default["default"](dsIcons.EditPen
158
158
  })([""]);
159
159
  const StyledEditableContainer = /*#__PURE__*/styled__default["default"](Grid__default["default"]).withConfig({
160
160
  componentId: "sc-38sgfo-14"
161
- })(["width:100%;height:100%;align-items:center;& ", "{display:", ";}&:hover{", "{display:block;}}&:focus{", " ", "{display:block;}}outline:none;"], StyledPencilIcon, props => props.shouldDisplayEditIcon ? 'block' : 'none', StyledPencilIcon, styledFocusCss, StyledPencilIcon); // ROW ************************************************************************/
161
+ })(["width:100%;height:100%;align-items:center;& ", "{display:", ";}&:hover{", "{display:block;}}&:focus{", " ", "{display:block;}}outline:none;"], StyledPencilIcon, _ref8 => {
162
+ let {
163
+ shouldDisplayEditIcon
164
+ } = _ref8;
165
+ return shouldDisplayEditIcon ? 'block' : 'none';
166
+ }, StyledPencilIcon, styledFocusCss, StyledPencilIcon); // ROW ************************************************************************/
162
167
 
163
168
  const StyledFullsizeGrid = /*#__PURE__*/styled__default["default"](Grid__default["default"]).withConfig({
164
169
  componentId: "sc-38sgfo-15"
165
170
  })(["position:relative;z-index:", ";min-height:", ";height:", ";"], zIndexInternalConfig.ZIndexDataTable.ROW, props => props.minHeight || '36px', props => props.height || 'auto');
166
171
  const GroupHeaderContainer = /*#__PURE__*/styled__default["default"](Grid__default["default"]).withConfig({
167
172
  componentId: "sc-38sgfo-16"
168
- })(["position:relative;background-color:", ";align-items:center;padding:0 ", ";border-top:1px solid ", ";grid-template-columns:min-content 1fr;"], _ref8 => {
173
+ })(["position:relative;background-color:", ";align-items:center;padding:0 ", ";border-top:1px solid ", ";grid-template-columns:min-content 1fr;"], _ref9 => {
169
174
  let {
170
175
  theme
171
- } = _ref8;
176
+ } = _ref9;
172
177
  return theme.colors.brand[200];
173
- }, props => props.padding, _ref9 => {
178
+ }, props => props.padding, _ref10 => {
174
179
  let {
175
180
  theme
176
- } = _ref9;
181
+ } = _ref10;
177
182
  return theme.colors.brand[300];
178
183
  });
179
184
  const GroupHeaderTitle = /*#__PURE__*/styled__default["default"].span.withConfig({
@@ -181,33 +186,33 @@ const GroupHeaderTitle = /*#__PURE__*/styled__default["default"].span.withConfig
181
186
  })(["font-weight:", ";font-size:12px;color:", ";"], props => props.theme.fontWeights.semibold, props => props.theme.colors.neutral[700]);
182
187
  const StyledCellContainer = /*#__PURE__*/styled__default["default"](Grid__default["default"]).withConfig({
183
188
  componentId: "sc-38sgfo-18"
184
- })(["position:relative;z-index:2;min-height:", ";height:", ";width:", ";", ";background-color:", ";outline:none;:focus{", "}", " ", " box-shadow:0 2px 4px 0 ", ";opacity:", ";", " color:", ";"], props => props.minHeight || '36px', props => props.height || 'auto', props => props.colLayoutStyle === constants.ColsLayoutStyle.Fixed ? sizeToCss.sizeToCss(props.totalColumnsWidth) : '100%', props => getGridTemplateColumnsStyle({
189
+ })(["position:relative;z-index:2;min-height:", ";height:", ";width:", ";", ";", ";background-color:", ";outline:none;:focus{", "}", " ", " box-shadow:0 2px 4px 0 ", ";opacity:", ";", " color:", ";"], props => props.minHeight || '36px', props => props.height || 'auto', props => props.colLayoutStyle === constants.ColsLayoutStyle.Fixed ? sizeToCss.sizeToCss(props.totalColumnsWidth) : '100%', props => props.isDragOverlay ? 'width: fit-content;' : '', props => getGridTemplateColumnsStyle({
185
190
  cols: props.cols,
186
191
  colsLayoutStyle: props.colLayoutStyle,
187
192
  isExpandable: props.isExpandable
188
- }), _ref10 => {
193
+ }), _ref11 => {
189
194
  let {
190
195
  backgroundColor,
191
196
  isDragging,
192
197
  theme
193
- } = _ref10;
198
+ } = _ref11;
194
199
  return isDragging ? theme.colors.neutral[100] : backgroundColor || 'white';
195
- }, props => props.isDragOverlay ? '' : styledFocusCss(props), _ref11 => {
200
+ }, props => props.isDragOverlay ? '' : styledFocusCss(props), _ref12 => {
196
201
  let {
197
202
  isDropIndicatorPositionInside,
198
203
  theme
199
- } = _ref11;
204
+ } = _ref12;
200
205
  if (!isDropIndicatorPositionInside) return '';
201
206
  return styledFocusCss({
202
207
  theme
203
208
  });
204
- }, _ref12 => {
209
+ }, _ref13 => {
205
210
  let {
206
211
  shouldDisplayHover,
207
212
  theme
208
- } = _ref12;
213
+ } = _ref13;
209
214
  return shouldDisplayHover ? ":hover {\n background-color: ".concat(theme.colors.brand[200], ";\n }") : '';
210
- }, props => props.isDragOverlay ? 'rgba(0,0,0,0.5)' : 'transparent', props => props.isDragging ? 0.8 : 1, props => !props.selected ? '' : "\n background-color: ".concat(props.theme.colors.brand[200], ";\n border: 1px solid ").concat(props.theme.colors.brand[300], ";\n "), props => props.disabled ? props.theme.colors.neutral['500'] : '#333333');
215
+ }, props => props.isDragOverlay ? 'rgba(0,0,0,0.5)' : 'transparent', props => props.isDragging ? 0.8 : 1, props => !props.selected ? '' : "\n background-color: ".concat(props.theme.colors.brand[200], ";\n border: 1px solid ").concat(props.theme.colors.brand[500], ";\n "), props => props.disabled ? props.theme.colors.neutral['500'] : '#333333');
211
216
 
212
217
  exports.GroupHeaderContainer = GroupHeaderContainer;
213
218
  exports.GroupHeaderTitle = GroupHeaderTitle;
@@ -1,7 +1,7 @@
1
1
  import { PropTypes } from 'react-desc';
2
2
 
3
3
  /* eslint-disable max-lines */
4
- const outOfTheBoxFilterType = PropTypes.oneOf(['ds-filter-select', 'ds-filter-multi-select', 'ds-filter-text', 'ds-filter-single-date', 'ds-filter-date-range', 'ds-filter-number-range']);
4
+ const outOfTheBoxFilterType = PropTypes.oneOf(['ds-filter-select', 'ds-filter-multi-select', 'ds-filter-single-date', 'ds-filter-date-range', 'ds-filter-number-range']);
5
5
  const textWrappingType = PropTypes.oneOf(['wrap', 'wrap-all', 'truncate']);
6
6
  const rowVariantType = PropTypes.oneOf(['ds_header_group_row', 'ds_primary_row', 'ds_secondary_row']);
7
7
  const columnPropTypes = {
@@ -64,20 +64,29 @@ const DataTableSchema = {
64
64
  })).description('Any extra option you want in the dropdownmenu of the filter bar')
65
65
  }).description('Props for the filter bar'),
66
66
  onFiltersChange: PropTypes.func.description('Function invoked when filters change'),
67
- pagination: PropTypes.oneOfType([PropTypes.bool, PropTypes.shape({
68
- pageIndex: PropTypes.number.description('Index of the current page, starting from 1'),
69
- canPreviousPage: PropTypes.bool.description('Whether the previous button is disabled or not'),
70
- canNextPage: PropTypes.bool.description('Whether the next button is disabled or not'),
71
- pageSize: PropTypes.number.description('The current page size'),
72
- perPageOptions: PropTypes.arrayOf(PropTypes.number).description('The available options for page size'),
73
- onPageChange: PropTypes.func.description('Function invoked when the page is changed'),
74
- onPreviousPage: PropTypes.func.description('Function invoked when the previous button is pressed'),
75
- onNextPage: PropTypes.func.description('Function invoked when next button is pressed'),
76
- pageCount: PropTypes.number.description('How many pages are there. By default it will be calculated based on the ammount of rows you have'),
67
+ pagination: PropTypes.shape({
68
+ pageCount: PropTypes.number.description('How many pages are there'),
69
+ pageIndex: PropTypes.number.description('Index of the current page, starting from 1').defaultValue(1),
70
+ canPreviousPage: PropTypes.bool.description('Whether the previous button is disabled or not').defaultValue(true),
71
+ canNextPage: PropTypes.bool.description('Whether the next button is disabled or not').defaultValue(true),
72
+ pageSize: PropTypes.number.description('The current page size').defaultValue(10),
77
73
  showPerPageSelector: PropTypes.bool.description('Whether to show the page selector').defaultValue(true),
74
+ perPageOptions: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.shape({
75
+ dsId: PropTypes.string,
76
+ value: PropTypes.number,
77
+ label: PropTypes.string,
78
+ type: PropTypes.oneOf(['single'])
79
+ })])).description('The available options for page size').defaultValue([10]),
80
+ perPageStep: PropTypes.number.description('Step for the per page options').defaultValue(5),
81
+ minPerPage: PropTypes.number.description('Step for the per page options').defaultValue(0),
82
+ maxPerPage: PropTypes.number.description('Step for the per page options').defaultValue(100),
83
+ onPageSizeChange: PropTypes.func.description('Function invoked when the page size changes').defaultValue(() => null),
84
+ onPreviousPage: PropTypes.func.description('Function invoked when the previous button is pressed').defaultValue(() => null),
85
+ onPageChange: PropTypes.func.description('Function invoked when the page changes').defaultValue(() => null),
86
+ onNextPage: PropTypes.func.description('Function invoked when next button is pressed').defaultValue(() => null),
78
87
  pageDetails: PropTypes.arrayOf(PropTypes.string).description('Details to provide for each page').defaultValue([]),
79
88
  pageDetailsTitle: PropTypes.string.description('The title of the details (usually a column of your dataset)').defaultValue('')
80
- })]).description('Object containing the data for the pagination'),
89
+ }).description('Object containing the data for the pagination'),
81
90
  colsLayoutStyle: PropTypes.oneOf(['auto', 'fixed']).description('Whether the datatable fills its container or not'),
82
91
  hiddenColumns: PropTypes.arrayOf(PropTypes.string).description('IDs of columns not to render'),
83
92
  dragAndDropRows: PropTypes.bool.description('Whether to turn on the d&d feature for the rows').defaultValue(false),
@@ -70,15 +70,31 @@ const TextEditableCell = props => {
70
70
  rowIndex
71
71
  });
72
72
  }, [value, onCellValueChange, cell.column.id, cell.row.index]);
73
+ const handleOnKeyDown = useCallback(e => {
74
+ if (e.code === 'Enter') {
75
+ cell.ref.current.focus(); // will exec on blur callback from input and save new value
76
+ }
77
+
78
+ if (e.code === 'Escape') {
79
+ setValue(cell.value);
80
+ const auxRef = cell.ref.current; // this prevent the on blur
81
+
82
+ setTimeout(() => {
83
+ auxRef.focus();
84
+ });
85
+ }
86
+ }, [cell]);
73
87
  return /*#__PURE__*/_jsx(EditableCell, {
74
88
  StandardRender: DefaultCellRender,
75
89
  EditableRenderer: /*#__PURE__*/_jsx(StyledInput, {
76
90
  value: value,
91
+ onKeyDown: handleOnKeyDown,
77
92
  onChange: handleOnChange,
78
93
  onBlur: handleOnBlur,
79
94
  autoFocus: true
80
95
  }),
81
96
  cell: cell,
97
+ setValue: setValue,
82
98
  isRowSelected: isRowSelected
83
99
  });
84
100
  };
@@ -37,6 +37,8 @@ import '../../../../exported-related/Filters/applyOutOfTheBoxFilters.js';
37
37
  import 'moment';
38
38
  import 'core-js/modules/esnext.async-iterator.some.js';
39
39
  import 'core-js/modules/esnext.iterator.some.js';
40
+ import '../../../../redux/reducers/headersReducers/headersReducers.js';
41
+ import { useDispatchHeadersActions } from '../../../../redux/reducers/headersReducers/useDispatchHeadersActions.js';
40
42
 
41
43
  var _SearchXsmall;
42
44
 
@@ -82,6 +84,20 @@ const CurrencyRangeFilter = props => {
82
84
  onValueChange(FILTER_TYPES.CURRENCY_RANGE, nextValue);
83
85
  };
84
86
 
87
+ const {
88
+ patchHeader
89
+ } = useDispatchHeadersActions(); // workaround to close menu with esc key since DSInputMask has stoppropagation on key down
90
+
91
+ const closePopover = e => {
92
+ if (e.code === 'Escape') {
93
+ patchHeader(column.id, {
94
+ hideFilterMenu: true,
95
+ hideFilterButton: false
96
+ });
97
+ innerRef.current.focus();
98
+ }
99
+ };
100
+
85
101
  const idPreffix = 'datatable-currency-range';
86
102
  return /*#__PURE__*/_jsx(FilterPopover, {
87
103
  reduxHeader: reduxHeader,
@@ -106,7 +122,10 @@ const CurrencyRangeFilter = props => {
106
122
  onChange: handleFromChange,
107
123
  placeholder: "0.00",
108
124
  mask: number => MASK_TYPES.NUMBER(opts)(number),
109
- autoFocus: true
125
+ autoFocus: true,
126
+ onKeyDown: e => {
127
+ closePopover(e);
128
+ }
110
129
  })), /*#__PURE__*/_jsx(DSFormLayoutBlockItem, {
111
130
  label: "Max",
112
131
  inputID: "".concat(idPreffix, "-max-").concat(column.id)
@@ -120,7 +139,10 @@ const CurrencyRangeFilter = props => {
120
139
  value: "".concat((_filterValue$to = filterValue === null || filterValue === void 0 ? void 0 : filterValue.to) !== null && _filterValue$to !== void 0 ? _filterValue$to : ''),
121
140
  onChange: handleToChange,
122
141
  placeholder: "0.00",
123
- mask: number => MASK_TYPES.NUMBER(opts)(number)
142
+ mask: number => MASK_TYPES.NUMBER(opts)(number),
143
+ onKeyDown: e => {
144
+ closePopover(e);
145
+ }
124
146
  }))),
125
147
  triggerIcon: _SearchXsmall || (_SearchXsmall = /*#__PURE__*/_jsx(SearchXsmall, {})),
126
148
  customStyles: {
@@ -80,7 +80,10 @@ const DateRangeFilter = props => {
80
80
  width: "260px",
81
81
  "data-testid": DATA_TESTID.DATA_TABLE_DATE_RANGE_CONTROLLER
82
82
  }, void 0, /*#__PURE__*/_jsx(Grid, {
83
- p: "xxs"
83
+ p: "xxs",
84
+ style: {
85
+ background: 'white'
86
+ }
84
87
  }, void 0, /*#__PURE__*/_jsx(DSControlledDateRangePicker, {
85
88
  fromDate: startDate,
86
89
  onFromDateChange: setStartDate,