@revolist/revogrid 3.1.6 → 3.2.4
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.
- package/dist/revo-grid/_baseIteratee-af30b221.js +2070 -0
- package/dist/{collection/global/global.js → revo-grid/app-globals-7e6866ba.js} +11 -2
- package/dist/{collection/components/data/columnService.js → revo-grid/columnService-91e552ba.js} +11 -6
- package/dist/revo-grid/consts-ef824e6f.js +46 -0
- package/dist/revo-grid/css-shim-5387c708.js +7 -0
- package/dist/revo-grid/data.store-3263fff9.js +557 -0
- package/dist/revo-grid/debounce-aaa4b4da.js +217 -0
- package/dist/revo-grid/dimension.helpers-a7944fc4.js +340 -0
- package/dist/revo-grid/dispatcher-891af82e.js +24 -0
- package/dist/{cjs/dom-c8b6d1a7.js → revo-grid/dom-21bd1807.js} +4 -3
- package/dist/revo-grid/each-0378e5a3.js +180 -0
- package/dist/{collection/plugins/filter/filter.button.js → revo-grid/filter.button-74c1cd9c.js} +16 -10
- package/dist/revo-grid/identity-c8c7d3d8.js +26 -0
- package/dist/revo-grid/index-8a604c17.js +3067 -0
- package/dist/revo-grid/index.esm.js +3 -0
- package/dist/revo-grid/isString-a51066b5.js +34 -0
- package/dist/revo-grid/isSymbol-e4b5dafe.js +247 -0
- package/dist/revo-grid/keyCodes.utils-bd06e3ba.js +299 -0
- package/dist/revo-grid/keys-70b7c240.js +561 -0
- package/dist/{collection/services/localScrollService.js → revo-grid/localScrollService-e9b73323.js} +8 -2
- package/dist/{esm/revo-grid_11.entry.js → revo-grid/lodash-a0ab4cdd.js} +13773 -24597
- package/dist/{cjs/resize-observer-8dc80084.js → revo-grid/resize-observer-00c48d78.js} +25 -14
- package/dist/revo-grid/revo-grid.entry.js +3484 -0
- package/dist/revo-grid/revo-grid.esm.js +133 -1
- package/dist/revo-grid/revogr-clipboard.entry.js +52 -1
- package/dist/revo-grid/revogr-data.entry.js +152 -0
- package/dist/revo-grid/revogr-edit.entry.js +105 -0
- package/dist/revo-grid/revogr-filter-panel.entry.js +277 -1
- package/dist/revo-grid/revogr-focus.entry.js +41 -0
- package/dist/revo-grid/revogr-header.entry.js +560 -0
- package/dist/revo-grid/revogr-order-editor.entry.js +175 -0
- package/dist/revo-grid/revogr-overlay-selection.entry.js +711 -0
- package/dist/revo-grid/revogr-row-headers.entry.js +73 -0
- package/dist/revo-grid/revogr-scroll-virtual.entry.js +114 -0
- package/dist/revo-grid/revogr-temp-range.entry.js +73 -0
- package/dist/revo-grid/revogr-viewport-scroll.entry.js +340 -0
- package/dist/revo-grid/selection.store.connector-2b613fd0.js +503 -0
- package/dist/{collection/components/overlay/selection.utils.js → revo-grid/selection.utils-a9932db6.js} +15 -9
- package/dist/revo-grid/shadow-css-602a09db.js +390 -0
- package/dist/{collection/themeManager/themeService.js → revo-grid/themeService-ddaaa364.js} +26 -6
- package/dist/revo-grid/toInteger-9e6cbfd2.js +107 -0
- package/dist/revo-grid/toNumber-913b0b72.js +105 -0
- package/dist/{collection/utils/utils.js → revo-grid/utils-2c3b3857.js} +13 -8
- package/dist/revo-grid/viewport.helpers-49d3f031.js +16 -0
- package/dist/{collection/store/viewPort/viewport.helpers.js → revo-grid/viewport.store-ffaaab6d.js} +135 -9
- package/dist/types/components/revo-grid/revo-grid.d.ts +6 -0
- package/dist/types/components.d.ts +110 -58
- package/dist/types/plugins/dispatcher.d.ts +10 -0
- package/dist/types/plugins/moveColumn/columnDragPlugin.d.ts +66 -0
- package/dist/types/plugins/moveColumn/columnOrderHandler.d.ts +12 -0
- package/dist/types/services/resizable.directive.d.ts +1 -1
- package/dist/types/stencil-public-runtime.d.ts +189 -186
- package/package.json +22 -20
- package/custom-element/index.js +0 -28972
- package/custom-element/resize-observer.js +0 -489
- package/dist/cjs/css-shim-e33df79c.js +0 -6
- package/dist/cjs/debounce-e9b040d9.js +0 -575
- package/dist/cjs/index-d3f67f2e.js +0 -1729
- package/dist/cjs/index.cjs.js +0 -2
- package/dist/cjs/loader.cjs.js +0 -35
- package/dist/cjs/revo-grid.cjs.js +0 -73
- package/dist/cjs/revo-grid_11.cjs.entry.js +0 -28056
- package/dist/cjs/revogr-clipboard.cjs.entry.js +0 -53
- package/dist/cjs/revogr-filter-panel.cjs.entry.js +0 -275
- package/dist/collection/collection-manifest.json +0 -25
- package/dist/collection/components/button/button.js +0 -4
- package/dist/collection/components/clipboard/revogr-clipboard.js +0 -121
- package/dist/collection/components/data/cellRenderer.js +0 -24
- package/dist/collection/components/data/revogr-data-style.css +0 -135
- package/dist/collection/components/data/revogr-data.js +0 -322
- package/dist/collection/components/data/rowRenderer.js +0 -6
- package/dist/collection/components/header/headerCellRenderer.js +0 -19
- package/dist/collection/components/header/headerRenderer.js +0 -45
- package/dist/collection/components/header/revogr-header-style.css +0 -198
- package/dist/collection/components/header/revogr-header.js +0 -297
- package/dist/collection/components/order/orderRenderer.js +0 -50
- package/dist/collection/components/order/revogr-order-editor.js +0 -358
- package/dist/collection/components/order/rowOrderService.js +0 -68
- package/dist/collection/components/overlay/autofill.service.js +0 -182
- package/dist/collection/components/overlay/clipboard.service.js +0 -39
- package/dist/collection/components/overlay/editors/edit.utils.js +0 -5
- package/dist/collection/components/overlay/editors/text.js +0 -35
- package/dist/collection/components/overlay/keyboard.service.js +0 -128
- package/dist/collection/components/overlay/revogr-edit-style.css +0 -86
- package/dist/collection/components/overlay/revogr-edit.js +0 -159
- package/dist/collection/components/overlay/revogr-overlay-selection.js +0 -726
- package/dist/collection/components/overlay/revogr-overlay-style.css +0 -98
- package/dist/collection/components/revo-grid/revo-grid-style.css +0 -527
- package/dist/collection/components/revo-grid/revo-grid.js +0 -2186
- package/dist/collection/components/revo-grid/viewport.helpers.js +0 -11
- package/dist/collection/components/revo-grid/viewport.interfaces.js +0 -1
- package/dist/collection/components/revo-grid/viewport.js +0 -18
- package/dist/collection/components/revo-grid/viewport.resize.service.js +0 -21
- package/dist/collection/components/revo-grid/viewport.scrolling.service.js +0 -60
- package/dist/collection/components/revo-grid/viewport.section.js +0 -28
- package/dist/collection/components/revo-grid/viewport.service.js +0 -209
- package/dist/collection/components/rowHeaders/revogr-row-headers.js +0 -210
- package/dist/collection/components/rowHeaders/row-header-render.js +0 -1
- package/dist/collection/components/scroll/revogr-viewport-scroll-style.css +0 -137
- package/dist/collection/components/scroll/revogr-viewport-scroll.js +0 -399
- package/dist/collection/components/scrollable/revogr-scroll-style.css +0 -104
- package/dist/collection/components/scrollable/revogr-scroll-virtual.js +0 -253
- package/dist/collection/components/selection-focus/revogr-focus-style.css +0 -77
- package/dist/collection/components/selection-focus/revogr-focus.js +0 -103
- package/dist/collection/components/selection-temp-range/revogr-temp-range-style.css +0 -98
- package/dist/collection/components/selection-temp-range/revogr-temp-range.js +0 -138
- package/dist/collection/index.js +0 -1
- package/dist/collection/plugins/autoSizeColumn.js +0 -230
- package/dist/collection/plugins/basePlugin.js +0 -27
- package/dist/collection/plugins/export/csv.js +0 -68
- package/dist/collection/plugins/export/export.plugin.js +0 -165
- package/dist/collection/plugins/export/types.js +0 -1
- package/dist/collection/plugins/filter/conditions/equal.js +0 -17
- package/dist/collection/plugins/filter/conditions/number/greaterThan.js +0 -10
- package/dist/collection/plugins/filter/conditions/number/greaterThanOrEqual.js +0 -7
- package/dist/collection/plugins/filter/conditions/number/lessThan.js +0 -12
- package/dist/collection/plugins/filter/conditions/number/lessThanOrEqual.js +0 -7
- package/dist/collection/plugins/filter/conditions/set.js +0 -3
- package/dist/collection/plugins/filter/conditions/string/beginswith.js +0 -17
- package/dist/collection/plugins/filter/conditions/string/contains.js +0 -18
- package/dist/collection/plugins/filter/filter.plugin.js +0 -256
- package/dist/collection/plugins/filter/filter.pop.js +0 -485
- package/dist/collection/plugins/filter/filter.service.js +0 -44
- package/dist/collection/plugins/filter/filter.style.css +0 -239
- package/dist/collection/plugins/filter/filter.types.js +0 -1
- package/dist/collection/plugins/groupingColumn/columnGroupsRenderer.js +0 -30
- package/dist/collection/plugins/groupingColumn/grouping.col.plugin.js +0 -36
- package/dist/collection/plugins/groupingColumn/headerGroupRenderer.js +0 -21
- package/dist/collection/plugins/groupingRow/grouping.const.js +0 -10
- package/dist/collection/plugins/groupingRow/grouping.row.expand.service.js +0 -76
- package/dist/collection/plugins/groupingRow/grouping.row.plugin.js +0 -258
- package/dist/collection/plugins/groupingRow/grouping.row.renderer.js +0 -29
- package/dist/collection/plugins/groupingRow/grouping.row.types.js +0 -1
- package/dist/collection/plugins/groupingRow/grouping.service.js +0 -155
- package/dist/collection/plugins/groupingRow/grouping.trimmed.service.js +0 -57
- package/dist/collection/plugins/sorting/sorting.plugin.js +0 -181
- package/dist/collection/plugins/sorting/sorting.sign.js +0 -6
- package/dist/collection/plugins/stretchPlugin.js +0 -68
- package/dist/collection/plugins/trimmed/trimmed.plugin.js +0 -32
- package/dist/collection/services/cell.helpers.js +0 -7
- package/dist/collection/services/column.data.provider.js +0 -188
- package/dist/collection/services/data.provider.js +0 -47
- package/dist/collection/services/dimension.provider.js +0 -78
- package/dist/collection/services/resizable.directive.js +0 -250
- package/dist/collection/services/selection.store.connector.js +0 -213
- package/dist/collection/services/viewport.provider.js +0 -14
- package/dist/collection/store/dataSource/data.proxy.js +0 -34
- package/dist/collection/store/dataSource/data.store.js +0 -127
- package/dist/collection/store/dimension/dimension.helpers.js +0 -107
- package/dist/collection/store/dimension/dimension.store.js +0 -59
- package/dist/collection/store/selection/selection.helpers.js +0 -53
- package/dist/collection/store/selection/selection.store.js +0 -68
- package/dist/collection/store/selection/selection.store.service.js +0 -35
- package/dist/collection/store/storeTypes.js +0 -5
- package/dist/collection/store/viewPort/viewport.store.js +0 -121
- package/dist/collection/themeManager/theme.compact.js +0 -5
- package/dist/collection/themeManager/theme.default.js +0 -5
- package/dist/collection/themeManager/theme.material.js +0 -5
- package/dist/collection/utils/closestPolifill.js +0 -18
- package/dist/collection/utils/consts.js +0 -19
- package/dist/collection/utils/generateAlphabetHeader.js +0 -20
- package/dist/collection/utils/keyCodes.js +0 -70
- package/dist/collection/utils/keyCodes.utils.js +0 -64
- package/dist/collection/utils/platform.js +0 -5
- package/dist/collection/utils/resizeObserver.js +0 -6
- package/dist/collection/utils/store.utils.js +0 -7
- package/dist/collection/utilsExternal/generate-data.js +0 -132
- package/dist/esm/css-shim-8d75038b.js +0 -4
- package/dist/esm/debounce-8dadcda7.js +0 -558
- package/dist/esm/dom-1b195079.js +0 -73
- package/dist/esm/index-42c84e7c.js +0 -1694
- package/dist/esm/index.js +0 -1
- package/dist/esm/loader.js +0 -31
- package/dist/esm/polyfills/core-js.js +0 -11
- package/dist/esm/polyfills/css-shim.js +0 -1
- package/dist/esm/polyfills/dom.js +0 -79
- package/dist/esm/polyfills/es5-html-element.js +0 -1
- package/dist/esm/polyfills/index.js +0 -34
- package/dist/esm/polyfills/system.js +0 -6
- package/dist/esm/resize-observer-56b7b34f.js +0 -489
- package/dist/esm/revo-grid.js +0 -71
- package/dist/esm/revogr-clipboard.entry.js +0 -49
- package/dist/esm/revogr-filter-panel.entry.js +0 -271
- package/dist/esm-es5/css-shim-8d75038b.js +0 -1
- package/dist/esm-es5/debounce-8dadcda7.js +0 -1
- package/dist/esm-es5/dom-1b195079.js +0 -21
- package/dist/esm-es5/index-42c84e7c.js +0 -1
- package/dist/esm-es5/index.js +0 -0
- package/dist/esm-es5/loader.js +0 -1
- package/dist/esm-es5/resize-observer-56b7b34f.js +0 -1
- package/dist/esm-es5/revo-grid.js +0 -1
- package/dist/esm-es5/revo-grid_11.entry.js +0 -1
- package/dist/esm-es5/revogr-clipboard.entry.js +0 -1
- package/dist/esm-es5/revogr-filter-panel.entry.js +0 -1
- package/dist/index.cjs.js +0 -1
- package/dist/index.js +0 -1
- package/dist/revo-grid/css-shim-88bfb262.system.js +0 -1
- package/dist/revo-grid/css-shim-8d75038b.js +0 -1
- package/dist/revo-grid/debounce-d097578d.js +0 -1
- package/dist/revo-grid/debounce-f40a88f6.system.js +0 -1
- package/dist/revo-grid/dom-1b195079.js +0 -19
- package/dist/revo-grid/dom-ee2dd1b3.system.js +0 -21
- package/dist/revo-grid/index-a15e7527.system.js +0 -1
- package/dist/revo-grid/index-a7f99799.js +0 -1
- package/dist/revo-grid/index.system.js +0 -1
- package/dist/revo-grid/resize-observer-56b7b34f.js +0 -1
- package/dist/revo-grid/resize-observer-7a7b9757.system.js +0 -1
- package/dist/revo-grid/revo-grid.js +0 -132
- package/dist/revo-grid/revo-grid.system.js +0 -1
- package/dist/revo-grid/revo-grid_11.entry.js +0 -1
- package/dist/revo-grid/revo-grid_11.system.entry.js +0 -1
- package/dist/revo-grid/revogr-clipboard.system.entry.js +0 -1
- package/dist/revo-grid/revogr-filter-panel.system.entry.js +0 -1
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { h } from '@stencil/core';
|
|
2
|
-
import RowRenderer from '../../components/data/rowRenderer';
|
|
3
|
-
import { GROUP_DEPTH, GROUP_EXPANDED, GROUP_EXPAND_BTN, GROUP_EXPAND_EVENT, PSEUDO_GROUP_ITEM } from './grouping.const';
|
|
4
|
-
function expandEvent(e, model, virtualIndex) {
|
|
5
|
-
const event = new CustomEvent(GROUP_EXPAND_EVENT, {
|
|
6
|
-
detail: {
|
|
7
|
-
model,
|
|
8
|
-
virtualIndex,
|
|
9
|
-
},
|
|
10
|
-
cancelable: true,
|
|
11
|
-
bubbles: true,
|
|
12
|
-
});
|
|
13
|
-
e.target.dispatchEvent(event);
|
|
14
|
-
}
|
|
15
|
-
const GroupingRowRenderer = (props) => {
|
|
16
|
-
const { model, itemIndex, hasExpand } = props;
|
|
17
|
-
const name = model[PSEUDO_GROUP_ITEM];
|
|
18
|
-
const expanded = model[GROUP_EXPANDED];
|
|
19
|
-
const depth = parseInt(model[GROUP_DEPTH], 10) || 0;
|
|
20
|
-
if (!hasExpand) {
|
|
21
|
-
return h(RowRenderer, Object.assign({}, props, { rowClass: "groupingRow", depth: depth }));
|
|
22
|
-
}
|
|
23
|
-
return (h(RowRenderer, Object.assign({}, props, { rowClass: "groupingRow", depth: depth }),
|
|
24
|
-
h("button", { class: { [GROUP_EXPAND_BTN]: true }, onClick: e => expandEvent(e, model, itemIndex) },
|
|
25
|
-
h("svg", { "aria-hidden": "true", style: { transform: `rotate(${!expanded ? -90 : 0}deg)` }, focusable: "false", viewBox: "0 0 448 512" },
|
|
26
|
-
h("path", { fill: "currentColor", d: "M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z" }))),
|
|
27
|
-
name));
|
|
28
|
-
};
|
|
29
|
-
export default GroupingRowRenderer;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,155 +0,0 @@
|
|
|
1
|
-
import { GROUP_DEPTH, GROUP_EXPANDED, PSEUDO_GROUP_COLUMN, PSEUDO_GROUP_ITEM, PSEUDO_GROUP_ITEM_ID, PSEUDO_GROUP_ITEM_VALUE } from './grouping.const';
|
|
2
|
-
/**
|
|
3
|
-
* Do actual grouping
|
|
4
|
-
* @param array - items to group
|
|
5
|
-
* @param f - function responsible for grouping, returns property to group by
|
|
6
|
-
*/
|
|
7
|
-
function groupBy(array, f) {
|
|
8
|
-
const groupsOrder = [];
|
|
9
|
-
const itemsByGroup = {};
|
|
10
|
-
array.forEach((item, i) => {
|
|
11
|
-
// get grouping values
|
|
12
|
-
const groupKeys = JSON.stringify(f(item));
|
|
13
|
-
// new group identification
|
|
14
|
-
if (!itemsByGroup[groupKeys]) {
|
|
15
|
-
itemsByGroup[groupKeys] = new Map();
|
|
16
|
-
// create group parents
|
|
17
|
-
groupsOrder.push({
|
|
18
|
-
children: itemsByGroup[groupKeys],
|
|
19
|
-
id: groupKeys,
|
|
20
|
-
});
|
|
21
|
-
}
|
|
22
|
-
// save to group with previous index
|
|
23
|
-
itemsByGroup[groupKeys].set(i, item);
|
|
24
|
-
});
|
|
25
|
-
return groupsOrder;
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Gather data for grouping
|
|
29
|
-
* @param array - flat data array
|
|
30
|
-
* @param mapFunc - mapping function for stringify
|
|
31
|
-
* @param expanded - potentially expanded items if present
|
|
32
|
-
*/
|
|
33
|
-
export function gatherGrouping(array, mapFunc, { prevExpanded, expandedAll }) {
|
|
34
|
-
// build groups
|
|
35
|
-
const groupsOrder = groupBy(array, mapFunc);
|
|
36
|
-
const itemsMirror = []; // grouped source
|
|
37
|
-
const pseudoGroupTest = {}; // check if group header exists
|
|
38
|
-
// item index in source
|
|
39
|
-
let itemIndex = 0;
|
|
40
|
-
// to save max group depth
|
|
41
|
-
let groupingDepth = 0;
|
|
42
|
-
// collapse all groups in the beginning
|
|
43
|
-
const trimmed = {};
|
|
44
|
-
// index mapping
|
|
45
|
-
const oldNewIndexMap = {};
|
|
46
|
-
// go through groups
|
|
47
|
-
groupsOrder.forEach(group => {
|
|
48
|
-
const parseGroup = getParsedGroup(group.id);
|
|
49
|
-
// extra precaution and type safe guard
|
|
50
|
-
if (!parseGroup) {
|
|
51
|
-
return;
|
|
52
|
-
}
|
|
53
|
-
let depth = 0;
|
|
54
|
-
let skipTrim = !!expandedAll;
|
|
55
|
-
let isExpanded = skipTrim;
|
|
56
|
-
const children = [];
|
|
57
|
-
// add group headers
|
|
58
|
-
parseGroup.reduce((prevVal, groupValue) => {
|
|
59
|
-
prevVal.push(groupValue);
|
|
60
|
-
const newVal = prevVal.join(',');
|
|
61
|
-
// if header not added, add new header
|
|
62
|
-
if (!pseudoGroupTest[newVal]) {
|
|
63
|
-
isExpanded = expandedAll || (prevExpanded && prevExpanded[newVal]);
|
|
64
|
-
itemsMirror.push(getPseudoGroup(groupValue, newVal, depth, group.id, isExpanded));
|
|
65
|
-
// if not first level auto collapse
|
|
66
|
-
if (depth && !isExpanded && !skipTrim) {
|
|
67
|
-
// check if parent expanded, expand this layer too
|
|
68
|
-
const parent = prevVal.slice(0, prevVal.length - 1);
|
|
69
|
-
if (!(prevExpanded && parent.length && prevExpanded[parent.join(',')])) {
|
|
70
|
-
trimmed[itemIndex] = true;
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
itemIndex++;
|
|
74
|
-
pseudoGroupTest[newVal] = children;
|
|
75
|
-
}
|
|
76
|
-
// calculate depth
|
|
77
|
-
depth++;
|
|
78
|
-
groupingDepth = depth;
|
|
79
|
-
return prevVal;
|
|
80
|
-
}, []);
|
|
81
|
-
// add regular items
|
|
82
|
-
group.children.forEach((item, oldIndex) => {
|
|
83
|
-
// hide items if group colapsed
|
|
84
|
-
if (!isExpanded && !skipTrim) {
|
|
85
|
-
// collapse rgRow
|
|
86
|
-
trimmed[itemIndex] = true;
|
|
87
|
-
}
|
|
88
|
-
// add items to new source
|
|
89
|
-
itemsMirror.push(item);
|
|
90
|
-
oldNewIndexMap[oldIndex] = itemIndex;
|
|
91
|
-
children.push(itemIndex);
|
|
92
|
-
itemIndex++;
|
|
93
|
-
});
|
|
94
|
-
});
|
|
95
|
-
return {
|
|
96
|
-
// updates source mirror
|
|
97
|
-
sourceWithGroups: itemsMirror,
|
|
98
|
-
// largest depth for grouping
|
|
99
|
-
depth: groupingDepth,
|
|
100
|
-
// used for expand/collapse grouping values
|
|
101
|
-
trimmed,
|
|
102
|
-
// used for mapping old values to new
|
|
103
|
-
oldNewIndexMap,
|
|
104
|
-
// used to get child items in group
|
|
105
|
-
childrenByGroup: pseudoGroupTest,
|
|
106
|
-
};
|
|
107
|
-
}
|
|
108
|
-
function getPseudoGroup(groupValue, value, depth, id, isExpanded = false) {
|
|
109
|
-
return {
|
|
110
|
-
[PSEUDO_GROUP_ITEM]: groupValue,
|
|
111
|
-
[GROUP_DEPTH]: depth,
|
|
112
|
-
[PSEUDO_GROUP_ITEM_ID]: id,
|
|
113
|
-
[PSEUDO_GROUP_ITEM_VALUE]: value,
|
|
114
|
-
[GROUP_EXPANDED]: isExpanded,
|
|
115
|
-
};
|
|
116
|
-
}
|
|
117
|
-
export function getGroupingName(rgRow) {
|
|
118
|
-
return rgRow && rgRow[PSEUDO_GROUP_ITEM];
|
|
119
|
-
}
|
|
120
|
-
export function isGrouping(rgRow) {
|
|
121
|
-
return rgRow && typeof rgRow[PSEUDO_GROUP_ITEM] !== 'undefined';
|
|
122
|
-
}
|
|
123
|
-
export function isGroupingColumn(column) {
|
|
124
|
-
return column && typeof column[PSEUDO_GROUP_COLUMN] !== 'undefined';
|
|
125
|
-
}
|
|
126
|
-
export function isArray(data) {
|
|
127
|
-
return typeof data.push !== 'undefined';
|
|
128
|
-
}
|
|
129
|
-
export function measureEqualDepth(groupA, groupB) {
|
|
130
|
-
const ln = groupA.length;
|
|
131
|
-
let i = 0;
|
|
132
|
-
for (; i < ln; i++) {
|
|
133
|
-
if (groupA[i] !== groupB[i]) {
|
|
134
|
-
return i;
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
return i;
|
|
138
|
-
}
|
|
139
|
-
export function getParsedGroup(id) {
|
|
140
|
-
const parseGroup = JSON.parse(id);
|
|
141
|
-
// extra precaution and type safe guard
|
|
142
|
-
if (!isArray(parseGroup)) {
|
|
143
|
-
return null;
|
|
144
|
-
}
|
|
145
|
-
return parseGroup;
|
|
146
|
-
}
|
|
147
|
-
// check if items is child of current clicked group
|
|
148
|
-
export function isSameGroup(currentGroup, currentModel, nextModel) {
|
|
149
|
-
const nextGroup = getParsedGroup(nextModel[PSEUDO_GROUP_ITEM_ID]);
|
|
150
|
-
if (!nextGroup) {
|
|
151
|
-
return false;
|
|
152
|
-
}
|
|
153
|
-
const depth = measureEqualDepth(currentGroup, nextGroup);
|
|
154
|
-
return currentModel[GROUP_DEPTH] < depth;
|
|
155
|
-
}
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
import { gatherTrimmedItems } from '../trimmed/trimmed.plugin';
|
|
2
|
-
export const TRIMMED_GROUPING = 'grouping';
|
|
3
|
-
/**
|
|
4
|
-
* Prepare trimming updated indexes for grouping
|
|
5
|
-
* @param initiallyTrimed
|
|
6
|
-
* @param firstLevelMap
|
|
7
|
-
* @param secondLevelMap
|
|
8
|
-
*/
|
|
9
|
-
export function processDoubleConversionTrimmed(initiallyTrimed, firstLevelMap, secondLevelMap) {
|
|
10
|
-
const trimemedOptionsToUpgrade = {};
|
|
11
|
-
/**
|
|
12
|
-
* go through all groups except grouping
|
|
13
|
-
*/
|
|
14
|
-
for (let type in initiallyTrimed) {
|
|
15
|
-
if (type === TRIMMED_GROUPING) {
|
|
16
|
-
continue;
|
|
17
|
-
}
|
|
18
|
-
const items = initiallyTrimed[type];
|
|
19
|
-
const newItems = {};
|
|
20
|
-
for (let initialIndex in items) {
|
|
21
|
-
/**
|
|
22
|
-
* if item exists we find it in collection
|
|
23
|
-
* we support 2 level of conversions
|
|
24
|
-
*/
|
|
25
|
-
let newConversionIndex = firstLevelMap[initialIndex];
|
|
26
|
-
if (secondLevelMap) {
|
|
27
|
-
newConversionIndex = secondLevelMap[newConversionIndex];
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* if item was trimmed previously
|
|
31
|
-
* trimming makes sense to apply
|
|
32
|
-
*/
|
|
33
|
-
if (items[initialIndex]) {
|
|
34
|
-
newItems[newConversionIndex] = true;
|
|
35
|
-
/**
|
|
36
|
-
* If changes present apply changes to new source
|
|
37
|
-
*/
|
|
38
|
-
if (newConversionIndex !== parseInt(initialIndex, 10)) {
|
|
39
|
-
trimemedOptionsToUpgrade[type] = newItems;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
return trimemedOptionsToUpgrade;
|
|
45
|
-
}
|
|
46
|
-
export function filterOutEmptyGroups(allTrimmedGroups, childrenByGroup = {}) {
|
|
47
|
-
const trimmedGroup = {};
|
|
48
|
-
const allTrimmed = gatherTrimmedItems(allTrimmedGroups);
|
|
49
|
-
// find is groups are filled
|
|
50
|
-
for (let groupIndex in childrenByGroup) {
|
|
51
|
-
const hasChidlren = childrenByGroup[groupIndex].filter(childIndex => !allTrimmed[childIndex]).length > 0;
|
|
52
|
-
if (!hasChidlren) {
|
|
53
|
-
trimmedGroup[groupIndex] = true;
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
return trimmedGroup;
|
|
57
|
-
}
|
|
@@ -1,181 +0,0 @@
|
|
|
1
|
-
import size from 'lodash/size';
|
|
2
|
-
import { setStore } from '../../utils/store.utils';
|
|
3
|
-
import ColumnDataProvider from '../../services/column.data.provider';
|
|
4
|
-
import BasePlugin from '../basePlugin';
|
|
5
|
-
/**
|
|
6
|
-
* lifecycle
|
|
7
|
-
* 1) @event beforesorting - sorting just started, nothing happened yet
|
|
8
|
-
* 2) @metod updateColumnSorting - column sorting icon applied to grid and column get updated, data still untiuched
|
|
9
|
-
* 3) @event beforesortingapply - before we applied sorting data to data source, you can prevent data apply from here
|
|
10
|
-
* 4) @event afterSortingApply - sorting applied, just finished event
|
|
11
|
-
*
|
|
12
|
-
* If you prevent event it'll not reach farther steps
|
|
13
|
-
*/
|
|
14
|
-
export default class SortingPlugin extends BasePlugin {
|
|
15
|
-
constructor(revogrid) {
|
|
16
|
-
super(revogrid);
|
|
17
|
-
this.revogrid = revogrid;
|
|
18
|
-
this.sorting = null;
|
|
19
|
-
this.sortingFunc = null;
|
|
20
|
-
const beforesourceset = ({ detail }) => {
|
|
21
|
-
if (this.hasSorting) {
|
|
22
|
-
// is sorting allowed
|
|
23
|
-
const event = this.emit('beforesourcesortingapply');
|
|
24
|
-
// sorting prevented
|
|
25
|
-
if (event.defaultPrevented) {
|
|
26
|
-
return;
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
const data = this.setData(detail.source, detail.type);
|
|
30
|
-
if (data) {
|
|
31
|
-
detail.source = data;
|
|
32
|
-
}
|
|
33
|
-
};
|
|
34
|
-
const aftercolumnsset = async ({ detail: { order } }) => {
|
|
35
|
-
const columns = await this.revogrid.getColumns();
|
|
36
|
-
const sortingFunc = {};
|
|
37
|
-
for (let prop in order) {
|
|
38
|
-
const column = ColumnDataProvider.getColumnByProp(columns, prop);
|
|
39
|
-
const cmp = (column === null || column === void 0 ? void 0 : column.cellCompare) || this.defaultCellCompare;
|
|
40
|
-
sortingFunc[prop] = order[prop] == 'desc' ? this.descCellCompare(cmp) : cmp;
|
|
41
|
-
}
|
|
42
|
-
this.sort(order, sortingFunc);
|
|
43
|
-
};
|
|
44
|
-
const headerclick = async (e) => {
|
|
45
|
-
var _a, _b;
|
|
46
|
-
if (e.defaultPrevented) {
|
|
47
|
-
return;
|
|
48
|
-
}
|
|
49
|
-
if (!e.detail.column.sortable) {
|
|
50
|
-
return;
|
|
51
|
-
}
|
|
52
|
-
this.headerclick(e.detail.column, e.detail.index, (_b = (_a = e.detail) === null || _a === void 0 ? void 0 : _a.originalEvent) === null || _b === void 0 ? void 0 : _b.shiftKey);
|
|
53
|
-
};
|
|
54
|
-
this.addEventListener('beforesourceset', beforesourceset);
|
|
55
|
-
this.addEventListener('aftercolumnsset', aftercolumnsset);
|
|
56
|
-
this.addEventListener('initialHeaderClick', headerclick);
|
|
57
|
-
}
|
|
58
|
-
get hasSorting() {
|
|
59
|
-
return !!this.sorting;
|
|
60
|
-
}
|
|
61
|
-
async headerclick(column, index, additive) {
|
|
62
|
-
let order = this.getNextOrder(column.order);
|
|
63
|
-
const beforeEvent = this.emit('beforesorting', { column, order, additive });
|
|
64
|
-
if (beforeEvent.defaultPrevented) {
|
|
65
|
-
return;
|
|
66
|
-
}
|
|
67
|
-
order = beforeEvent.detail.order;
|
|
68
|
-
const newCol = await this.revogrid.updateColumnSorting(beforeEvent.detail.column, index, order, additive);
|
|
69
|
-
// apply sort data
|
|
70
|
-
const beforeApplyEvent = this.emit('beforesortingapply', { column: newCol, order, additive });
|
|
71
|
-
if (beforeApplyEvent.defaultPrevented) {
|
|
72
|
-
return;
|
|
73
|
-
}
|
|
74
|
-
order = beforeApplyEvent.detail.order;
|
|
75
|
-
const cellCmp = (column === null || column === void 0 ? void 0 : column.cellCompare) || this.defaultCellCompare;
|
|
76
|
-
const cmp = order == 'asc' ? cellCmp : order == 'desc' ? this.descCellCompare(cellCmp) : undefined;
|
|
77
|
-
if (additive && this.sorting) {
|
|
78
|
-
const sorting = {};
|
|
79
|
-
const sortingFunc = {};
|
|
80
|
-
Object.assign(sorting, this.sorting);
|
|
81
|
-
Object.assign(sortingFunc, this.sortingFunc);
|
|
82
|
-
if (column.prop in sorting && size(sorting) > 1 && order === undefined) {
|
|
83
|
-
delete sorting[column.prop];
|
|
84
|
-
delete sortingFunc[column.prop];
|
|
85
|
-
}
|
|
86
|
-
else {
|
|
87
|
-
sorting[column.prop] = order;
|
|
88
|
-
sortingFunc[column.prop] = cmp;
|
|
89
|
-
}
|
|
90
|
-
this.sort(sorting, sortingFunc);
|
|
91
|
-
}
|
|
92
|
-
else {
|
|
93
|
-
this.sort({ [column.prop]: order }, { [column.prop]: cmp });
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
setData(data, type) {
|
|
97
|
-
// sorting available for rgRow type only
|
|
98
|
-
if (type === 'rgRow' && this.sortingFunc) {
|
|
99
|
-
return this.sortItems(data, this.sortingFunc);
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
/**
|
|
103
|
-
* Sorting apply, available for rgRow type only
|
|
104
|
-
* @param sorting - per column sorting
|
|
105
|
-
* @param data - this.stores['rgRow'].store.get('source')
|
|
106
|
-
*/
|
|
107
|
-
async sort(sorting, sortingFunc) {
|
|
108
|
-
if (!size(sorting)) {
|
|
109
|
-
this.sorting = null;
|
|
110
|
-
this.sortingFunc = null;
|
|
111
|
-
return;
|
|
112
|
-
}
|
|
113
|
-
this.sorting = sorting;
|
|
114
|
-
this.sortingFunc = sortingFunc;
|
|
115
|
-
const store = await this.revogrid.getSourceStore();
|
|
116
|
-
const source = store.get('source');
|
|
117
|
-
const proxyItems = this.sortIndexByItems([...store.get('proxyItems')], source, this.sortingFunc);
|
|
118
|
-
setStore(store, {
|
|
119
|
-
proxyItems,
|
|
120
|
-
source: [...source],
|
|
121
|
-
});
|
|
122
|
-
this.emit('afterSortingApply');
|
|
123
|
-
}
|
|
124
|
-
defaultCellCompare(prop, a, b) {
|
|
125
|
-
var _a, _b;
|
|
126
|
-
const av = (_a = a[prop]) === null || _a === void 0 ? void 0 : _a.toString().toLowerCase();
|
|
127
|
-
const bv = (_b = b[prop]) === null || _b === void 0 ? void 0 : _b.toString().toLowerCase();
|
|
128
|
-
return av == bv ? 0 : av > bv ? 1 : -1;
|
|
129
|
-
}
|
|
130
|
-
descCellCompare(cmp) {
|
|
131
|
-
return (prop, a, b) => { return -1 * cmp(prop, a, b); };
|
|
132
|
-
}
|
|
133
|
-
sortIndexByItems(indexes, source, sortingFunc) {
|
|
134
|
-
// TODO - is there a situation where multiple kvps in the `sorting` object would cause this to break?
|
|
135
|
-
for (let prop in sortingFunc) {
|
|
136
|
-
if (typeof sortingFunc[prop] === 'undefined') {
|
|
137
|
-
// Unsort indexes
|
|
138
|
-
return [...Array(indexes.length).keys()];
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
return indexes.sort((a, b) => {
|
|
142
|
-
let sorted = 0;
|
|
143
|
-
for (let prop in sortingFunc) {
|
|
144
|
-
const cmp = sortingFunc[prop];
|
|
145
|
-
const itemA = source[a];
|
|
146
|
-
const itemB = source[b];
|
|
147
|
-
sorted = cmp(prop, itemA, itemB);
|
|
148
|
-
if (sorted) {
|
|
149
|
-
break;
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
return sorted;
|
|
153
|
-
});
|
|
154
|
-
}
|
|
155
|
-
sortItems(source, sortingFunc) {
|
|
156
|
-
return source.sort((a, b) => {
|
|
157
|
-
let sorted = 0;
|
|
158
|
-
for (let prop in sortingFunc) {
|
|
159
|
-
const cmp = sortingFunc[prop];
|
|
160
|
-
if (!cmp) {
|
|
161
|
-
continue;
|
|
162
|
-
}
|
|
163
|
-
sorted = cmp(prop, a, b);
|
|
164
|
-
if (sorted) {
|
|
165
|
-
break;
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
return sorted;
|
|
169
|
-
});
|
|
170
|
-
}
|
|
171
|
-
getNextOrder(currentOrder) {
|
|
172
|
-
switch (currentOrder) {
|
|
173
|
-
case undefined:
|
|
174
|
-
return 'asc';
|
|
175
|
-
case 'asc':
|
|
176
|
-
return 'desc';
|
|
177
|
-
case 'desc':
|
|
178
|
-
return undefined;
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
}
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
import { each } from 'lodash';
|
|
2
|
-
import { getScrollbarWidth } from '../utils/utils';
|
|
3
|
-
import BasePlugin from './basePlugin';
|
|
4
|
-
export default class StretchColumn extends BasePlugin {
|
|
5
|
-
constructor(revogrid, dimensionProvider) {
|
|
6
|
-
super(revogrid);
|
|
7
|
-
this.dimensionProvider = dimensionProvider;
|
|
8
|
-
this.stretchedColumn = null;
|
|
9
|
-
this.scrollSize = getScrollbarWidth(document);
|
|
10
|
-
const beforecolumnapplied = ({ detail: { columns } }) => this.applyStretch(columns);
|
|
11
|
-
this.addEventListener('beforecolumnapplied', beforecolumnapplied);
|
|
12
|
-
}
|
|
13
|
-
setScroll({ type, hasScroll }) {
|
|
14
|
-
var _a;
|
|
15
|
-
if (type === 'rgRow' && this.stretchedColumn && ((_a = this.stretchedColumn) === null || _a === void 0 ? void 0 : _a.initialSize) === this.stretchedColumn.size) {
|
|
16
|
-
if (hasScroll) {
|
|
17
|
-
this.stretchedColumn.size -= this.scrollSize;
|
|
18
|
-
this.apply();
|
|
19
|
-
this.dropChanges();
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
activateChanges() {
|
|
24
|
-
const setScroll = ({ detail }) => this.setScroll(detail);
|
|
25
|
-
this.addEventListener('scrollchange', setScroll);
|
|
26
|
-
}
|
|
27
|
-
dropChanges() {
|
|
28
|
-
this.stretchedColumn = null;
|
|
29
|
-
this.removeEventListener('scrollchange');
|
|
30
|
-
}
|
|
31
|
-
apply() {
|
|
32
|
-
if (!this.stretchedColumn) {
|
|
33
|
-
return;
|
|
34
|
-
}
|
|
35
|
-
const type = 'rgCol';
|
|
36
|
-
this.dimensionProvider.setDimensionSize(type, { [this.stretchedColumn.index]: this.stretchedColumn.size });
|
|
37
|
-
}
|
|
38
|
-
applyStretch(columns) {
|
|
39
|
-
this.dropChanges();
|
|
40
|
-
let sizeDifference = this.revogrid.clientWidth - 1;
|
|
41
|
-
each(columns, (_c, type) => {
|
|
42
|
-
const realSize = this.dimensionProvider.stores[type].store.get('realSize');
|
|
43
|
-
sizeDifference -= realSize;
|
|
44
|
-
});
|
|
45
|
-
if (sizeDifference > 0) {
|
|
46
|
-
// currently plugin accepts last column
|
|
47
|
-
const index = columns.rgCol.length - 1;
|
|
48
|
-
const last = columns.rgCol[index];
|
|
49
|
-
// has column
|
|
50
|
-
// no auto size applied
|
|
51
|
-
// size for column shouldn't be defined
|
|
52
|
-
const colSize = (last === null || last === void 0 ? void 0 : last.size) || this.revogrid.colSize || 0;
|
|
53
|
-
const size = sizeDifference + colSize - 1;
|
|
54
|
-
if (last && !last.autoSize && (colSize < size)) {
|
|
55
|
-
this.stretchedColumn = {
|
|
56
|
-
initialSize: size,
|
|
57
|
-
index,
|
|
58
|
-
size
|
|
59
|
-
};
|
|
60
|
-
this.apply();
|
|
61
|
-
this.activateChanges();
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
export function isStretchPlugin(plugin) {
|
|
67
|
-
return !!plugin.applyStretch;
|
|
68
|
-
}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Hide items from main collection
|
|
3
|
-
* But keep them in store
|
|
4
|
-
*/
|
|
5
|
-
export const trimmedPlugin = (store) => ({
|
|
6
|
-
set(k, newVal) {
|
|
7
|
-
switch (k) {
|
|
8
|
-
case 'trimmed':
|
|
9
|
-
const proxy = store.get('proxyItems');
|
|
10
|
-
const trimmed = gatherTrimmedItems(newVal);
|
|
11
|
-
const newItems = proxy.reduce((result, v) => {
|
|
12
|
-
// check if present in new trimmed remove from items (filter)
|
|
13
|
-
if (!trimmed[v]) {
|
|
14
|
-
result.push(v);
|
|
15
|
-
}
|
|
16
|
-
return result;
|
|
17
|
-
}, []);
|
|
18
|
-
store.set('items', newItems);
|
|
19
|
-
break;
|
|
20
|
-
}
|
|
21
|
-
},
|
|
22
|
-
});
|
|
23
|
-
export function gatherTrimmedItems(trimmedItems) {
|
|
24
|
-
const trimmed = {};
|
|
25
|
-
for (let trimmedKey in trimmedItems) {
|
|
26
|
-
// trimmed overweight not trimmed
|
|
27
|
-
for (let t in trimmedItems[trimmedKey]) {
|
|
28
|
-
trimmed[t] = trimmed[t] || trimmedItems[trimmedKey][t];
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
return trimmed;
|
|
32
|
-
}
|