@revolist/revogrid 4.4.0-next.2 → 4.4.0-next.21
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/custom-element/columnService.js +1 -1
- package/custom-element/consts.js +2 -1
- package/custom-element/consts.js.map +1 -1
- package/custom-element/localScrollService.js +1 -1
- package/custom-element/localScrollService.js.map +1 -1
- package/custom-element/revo-grid.js +163 -97
- package/custom-element/revo-grid.js.map +1 -1
- package/custom-element/revogr-clipboard.js +24 -5
- package/custom-element/revogr-clipboard.js.map +1 -1
- package/custom-element/revogr-edit2.js +12 -6
- package/custom-element/revogr-edit2.js.map +1 -1
- package/custom-element/revogr-focus2.js +1 -1
- package/custom-element/revogr-focus2.js.map +1 -1
- package/custom-element/revogr-header2.js +25 -11
- package/custom-element/revogr-header2.js.map +1 -1
- package/custom-element/revogr-overlay-selection2.js +99 -32
- package/custom-element/revogr-overlay-selection2.js.map +1 -1
- package/custom-element/revogr-row-headers2.js +1 -2
- package/custom-element/revogr-row-headers2.js.map +1 -1
- package/custom-element/revogr-viewport-scroll2.js +39 -6
- package/custom-element/revogr-viewport-scroll2.js.map +1 -1
- package/dist/cjs/{debounce-525dd66c.js → debounce-f50730b6.js} +1 -38
- package/dist/cjs/debounce-f50730b6.js.map +1 -0
- package/dist/cjs/dispatcher-20520c70.js +21 -0
- package/dist/cjs/dispatcher-20520c70.js.map +1 -0
- package/dist/cjs/events-030618fc.js +459 -0
- package/dist/cjs/events-030618fc.js.map +1 -0
- package/dist/cjs/filter.button-6badec7a.js +44 -0
- package/dist/cjs/filter.button-6badec7a.js.map +1 -0
- package/dist/cjs/{index-aad39b7b.js → index-ee2ef5ae.js} +96 -36
- package/dist/cjs/index-ee2ef5ae.js.map +1 -0
- package/dist/cjs/index-effc94b9.js +3944 -0
- package/dist/cjs/index-effc94b9.js.map +1 -0
- package/dist/cjs/isString-3dde8d95.js +38 -0
- package/dist/cjs/isString-3dde8d95.js.map +1 -0
- package/dist/cjs/keyCodes.utils-d665ebed.js +271 -0
- package/dist/cjs/keyCodes.utils-d665ebed.js.map +1 -0
- package/dist/cjs/loader.cjs.js +3 -3
- package/dist/cjs/loader.cjs.js.map +1 -1
- package/dist/cjs/localScrollService-a81823c5.js +403 -0
- package/dist/cjs/localScrollService-a81823c5.js.map +1 -0
- package/dist/cjs/revo-grid.cjs.entry.js +3858 -0
- package/dist/cjs/revo-grid.cjs.entry.js.map +1 -0
- package/dist/cjs/revo-grid.cjs.js +3 -3
- package/dist/cjs/revo-grid.cjs.js.map +1 -1
- package/dist/cjs/revogr-clipboard.cjs.entry.js +24 -6
- package/dist/cjs/revogr-clipboard.cjs.entry.js.map +1 -1
- package/dist/cjs/revogr-data_3.cjs.entry.js +1138 -0
- package/dist/cjs/revogr-data_3.cjs.entry.js.map +1 -0
- package/dist/cjs/revogr-edit_2.cjs.entry.js +325 -0
- package/dist/cjs/revogr-edit_2.cjs.entry.js.map +1 -0
- package/dist/cjs/revogr-filter-panel.cjs.entry.js +6 -5
- package/dist/cjs/revogr-filter-panel.cjs.entry.js.map +1 -1
- package/dist/cjs/revogr-focus_5.cjs.entry.js +1231 -0
- package/dist/cjs/revogr-focus_5.cjs.entry.js.map +1 -0
- package/dist/cjs/{revo-grid_11.cjs.entry.js → viewport.helpers-70ccec8f.js} +13978 -25269
- package/dist/cjs/viewport.helpers-70ccec8f.js.map +1 -0
- package/dist/collection/collection-manifest.json +1 -1
- package/dist/collection/components/clipboard/revogr-clipboard.d.ts +6 -2
- package/dist/collection/components/clipboard/revogr-clipboard.js +46 -5
- package/dist/collection/components/clipboard/revogr-clipboard.js.map +1 -1
- package/dist/collection/components/header/headerCellRenderer.d.ts +2 -1
- package/dist/collection/components/header/headerCellRenderer.js +1 -1
- package/dist/collection/components/header/headerCellRenderer.js.map +1 -1
- package/dist/collection/components/header/headerRenderer.d.ts +2 -2
- package/dist/collection/components/header/headerRenderer.js +1 -1
- package/dist/collection/components/header/headerRenderer.js.map +1 -1
- package/dist/collection/components/header/revogr-header.d.ts +15 -1
- package/dist/collection/components/header/revogr-header.js +34 -8
- package/dist/collection/components/header/revogr-header.js.map +1 -1
- package/dist/collection/components/overlay/autofill.service.d.ts +7 -3
- package/dist/collection/components/overlay/autofill.service.js +32 -12
- package/dist/collection/components/overlay/autofill.service.js.map +1 -1
- package/dist/collection/components/overlay/clipboard.service.d.ts +1 -1
- package/dist/collection/components/overlay/clipboard.service.js +2 -2
- package/dist/collection/components/overlay/clipboard.service.js.map +1 -1
- package/dist/collection/components/overlay/keyboard.service.js +2 -6
- package/dist/collection/components/overlay/keyboard.service.js.map +1 -1
- package/dist/collection/components/overlay/revogr-edit.d.ts +8 -0
- package/dist/collection/components/overlay/revogr-edit.js +34 -9
- package/dist/collection/components/overlay/revogr-edit.js.map +1 -1
- package/dist/collection/components/overlay/revogr-overlay-selection.d.ts +32 -10
- package/dist/collection/components/overlay/revogr-overlay-selection.js +80 -12
- package/dist/collection/components/overlay/revogr-overlay-selection.js.map +1 -1
- package/dist/collection/components/overlay/revogr-overlay-style.css +71 -4
- package/dist/collection/components/revoGrid/revo-grid.d.ts +15 -4
- package/dist/collection/components/revoGrid/revo-grid.js +60 -19
- package/dist/collection/components/revoGrid/revo-grid.js.map +1 -1
- package/dist/collection/components/revoGrid/viewport.scrolling.service.d.ts +6 -2
- package/dist/collection/components/revoGrid/viewport.scrolling.service.js +26 -4
- package/dist/collection/components/revoGrid/viewport.scrolling.service.js.map +1 -1
- package/dist/collection/components/revoGrid/viewport.section.d.ts +3 -2
- package/dist/collection/components/revoGrid/viewport.section.js +8 -4
- package/dist/collection/components/revoGrid/viewport.section.js.map +1 -1
- package/dist/collection/components/revoGrid/viewport.service.d.ts +4 -0
- package/dist/collection/components/revoGrid/viewport.service.js +15 -3
- package/dist/collection/components/revoGrid/viewport.service.js.map +1 -1
- package/dist/collection/components/rowHeaders/revogr-row-headers.js.map +1 -1
- package/dist/collection/components/scroll/revogr-viewport-scroll-style.css +3 -0
- package/dist/collection/components/scroll/revogr-viewport-scroll.d.ts +16 -5
- package/dist/collection/components/scroll/revogr-viewport-scroll.js +64 -9
- package/dist/collection/components/scroll/revogr-viewport-scroll.js.map +1 -1
- package/dist/collection/components/selectionFocus/revogr-focus-style.css +1 -1
- package/dist/collection/components.d.ts +110 -6
- package/dist/collection/interfaces.d.ts +4 -1
- package/dist/collection/plugins/groupingColumn/columnGroupsRenderer.d.ts +3 -2
- package/dist/collection/plugins/groupingColumn/columnGroupsRenderer.js +2 -2
- package/dist/collection/plugins/groupingColumn/columnGroupsRenderer.js.map +1 -1
- package/dist/collection/plugins/groupingColumn/headerGroupRenderer.d.ts +2 -2
- package/dist/collection/plugins/groupingColumn/headerGroupRenderer.js +1 -1
- package/dist/collection/plugins/groupingColumn/headerGroupRenderer.js.map +1 -1
- package/dist/collection/plugins/sorting/sorting.plugin.d.ts +21 -13
- package/dist/collection/plugins/sorting/sorting.plugin.js +77 -70
- package/dist/collection/plugins/sorting/sorting.plugin.js.map +1 -1
- package/dist/collection/serve/controller.js +183 -0
- package/dist/collection/services/localScrollService.js +1 -1
- package/dist/collection/services/localScrollService.js.map +1 -1
- package/dist/collection/services/resizable.directive.d.ts +8 -7
- package/dist/collection/services/resizable.directive.js +13 -36
- package/dist/collection/services/resizable.directive.js.map +1 -1
- package/dist/collection/services/resizable.element.d.ts +4 -0
- package/dist/collection/services/resizable.element.js +39 -0
- package/dist/collection/services/resizable.element.js.map +1 -0
- package/dist/collection/stencil-public-runtime.d.ts +1 -0
- package/dist/collection/store/viewPort/viewport.store.js +0 -1
- package/dist/collection/store/viewPort/viewport.store.js.map +1 -1
- package/dist/collection/utils/consts.d.ts +1 -0
- package/dist/collection/utils/consts.js +1 -0
- package/dist/collection/utils/consts.js.map +1 -1
- package/dist/collection/utils/events.d.ts +2 -1
- package/dist/collection/utils/events.js +18 -2
- package/dist/collection/utils/events.js.map +1 -1
- package/dist/collection/utils/mobile.d.ts +1 -0
- package/dist/collection/utils/mobile.js +7 -0
- package/dist/collection/utils/mobile.js.map +1 -0
- package/dist/esm/{debounce-301fd4d2.js → debounce-820b5a8b.js} +2 -34
- package/dist/esm/debounce-820b5a8b.js.map +1 -0
- package/dist/esm/dispatcher-9e9c0233.js +19 -0
- package/dist/esm/dispatcher-9e9c0233.js.map +1 -0
- package/dist/esm/events-31272e5e.js +454 -0
- package/dist/esm/events-31272e5e.js.map +1 -0
- package/dist/esm/filter.button-21ce90ef.js +38 -0
- package/dist/esm/filter.button-21ce90ef.js.map +1 -0
- package/dist/esm/{index-5e90b19b.js → index-05947c5f.js} +97 -37
- package/dist/esm/index-05947c5f.js.map +1 -0
- package/dist/esm/index-728bf6e3.js +3889 -0
- package/dist/esm/index-728bf6e3.js.map +1 -0
- package/dist/esm/isString-d539060a.js +36 -0
- package/dist/esm/isString-d539060a.js.map +1 -0
- package/dist/esm/keyCodes.utils-c0064460.js +265 -0
- package/dist/esm/keyCodes.utils-c0064460.js.map +1 -0
- package/dist/esm/loader.js +4 -4
- package/dist/esm/loader.js.map +1 -1
- package/dist/esm/localScrollService-884d8952.js +400 -0
- package/dist/esm/localScrollService-884d8952.js.map +1 -0
- package/dist/esm/revo-grid.entry.js +3854 -0
- package/dist/esm/revo-grid.entry.js.map +1 -0
- package/dist/esm/revo-grid.js +4 -4
- package/dist/esm/revo-grid.js.map +1 -1
- package/dist/esm/revogr-clipboard.entry.js +24 -6
- package/dist/esm/revogr-clipboard.entry.js.map +1 -1
- package/dist/esm/revogr-data_3.entry.js +1132 -0
- package/dist/esm/revogr-data_3.entry.js.map +1 -0
- package/dist/esm/revogr-edit_2.entry.js +320 -0
- package/dist/esm/revogr-edit_2.entry.js.map +1 -0
- package/dist/esm/revogr-filter-panel.entry.js +3 -2
- package/dist/esm/revogr-filter-panel.entry.js.map +1 -1
- package/dist/esm/revogr-focus_5.entry.js +1223 -0
- package/dist/esm/revogr-focus_5.entry.js.map +1 -0
- package/dist/esm/{revo-grid_11.entry.js → viewport.helpers-c08e729e.js} +13790 -25093
- package/dist/esm/viewport.helpers-c08e729e.js.map +1 -0
- package/dist/revo-grid/debounce-820b5a8b.js +5 -0
- package/dist/revo-grid/debounce-820b5a8b.js.map +1 -0
- package/dist/revo-grid/dispatcher-9e9c0233.js +5 -0
- package/dist/revo-grid/dispatcher-9e9c0233.js.map +1 -0
- package/dist/revo-grid/events-31272e5e.js +5 -0
- package/dist/revo-grid/events-31272e5e.js.map +1 -0
- package/dist/revo-grid/filter.button-21ce90ef.js +5 -0
- package/dist/revo-grid/filter.button-21ce90ef.js.map +1 -0
- package/dist/revo-grid/index-05947c5f.js +6 -0
- package/dist/revo-grid/index-05947c5f.js.map +1 -0
- package/dist/revo-grid/index-728bf6e3.js +5 -0
- package/dist/revo-grid/index-728bf6e3.js.map +1 -0
- package/dist/revo-grid/isString-d539060a.js +5 -0
- package/dist/revo-grid/isString-d539060a.js.map +1 -0
- package/dist/revo-grid/keyCodes.utils-c0064460.js +5 -0
- package/dist/revo-grid/keyCodes.utils-c0064460.js.map +1 -0
- package/dist/revo-grid/localScrollService-884d8952.js +5 -0
- package/dist/revo-grid/localScrollService-884d8952.js.map +1 -0
- package/dist/revo-grid/revo-grid.entry.js +5 -0
- package/dist/revo-grid/revo-grid.entry.js.map +1 -0
- package/dist/revo-grid/revo-grid.esm.js +1 -1
- package/dist/revo-grid/revo-grid.esm.js.map +1 -1
- package/dist/revo-grid/revogr-clipboard.entry.js +1 -1
- package/dist/revo-grid/revogr-clipboard.entry.js.map +1 -1
- package/dist/revo-grid/revogr-data_3.entry.js +5 -0
- package/dist/revo-grid/revogr-data_3.entry.js.map +1 -0
- package/dist/revo-grid/revogr-edit_2.entry.js +5 -0
- package/dist/revo-grid/revogr-edit_2.entry.js.map +1 -0
- package/dist/revo-grid/revogr-filter-panel.entry.js +1 -1
- package/dist/revo-grid/revogr-filter-panel.entry.js.map +1 -1
- package/dist/revo-grid/revogr-focus_5.entry.js +5 -0
- package/dist/revo-grid/revogr-focus_5.entry.js.map +1 -0
- package/dist/revo-grid/viewport.helpers-c08e729e.js +5 -0
- package/dist/revo-grid/viewport.helpers-c08e729e.js.map +1 -0
- package/dist/types/components/clipboard/revogr-clipboard.d.ts +6 -2
- package/dist/types/components/header/headerCellRenderer.d.ts +2 -1
- package/dist/types/components/header/headerRenderer.d.ts +2 -2
- package/dist/types/components/header/revogr-header.d.ts +15 -1
- package/dist/types/components/overlay/autofill.service.d.ts +7 -3
- package/dist/types/components/overlay/clipboard.service.d.ts +1 -1
- package/dist/types/components/overlay/revogr-edit.d.ts +8 -0
- package/dist/types/components/overlay/revogr-overlay-selection.d.ts +32 -10
- package/dist/types/components/revoGrid/revo-grid.d.ts +15 -4
- package/dist/types/components/revoGrid/viewport.scrolling.service.d.ts +6 -2
- package/dist/types/components/revoGrid/viewport.section.d.ts +3 -2
- package/dist/types/components/revoGrid/viewport.service.d.ts +4 -0
- package/dist/types/components/scroll/revogr-viewport-scroll.d.ts +16 -5
- package/dist/types/components.d.ts +110 -6
- package/dist/types/interfaces.d.ts +4 -1
- package/dist/types/plugins/groupingColumn/columnGroupsRenderer.d.ts +3 -2
- package/dist/types/plugins/groupingColumn/headerGroupRenderer.d.ts +2 -2
- package/dist/types/plugins/sorting/sorting.plugin.d.ts +21 -13
- package/dist/types/services/resizable.directive.d.ts +8 -7
- package/dist/types/services/resizable.element.d.ts +4 -0
- package/dist/types/stencil-public-runtime.d.ts +1 -0
- package/dist/types/utils/consts.d.ts +1 -0
- package/dist/types/utils/events.d.ts +2 -1
- package/dist/types/utils/mobile.d.ts +1 -0
- package/package.json +4 -3
- package/dist/cjs/debounce-525dd66c.js.map +0 -1
- package/dist/cjs/index-aad39b7b.js.map +0 -1
- package/dist/cjs/revo-grid_11.cjs.entry.js.map +0 -1
- package/dist/esm/debounce-301fd4d2.js.map +0 -1
- package/dist/esm/index-5e90b19b.js.map +0 -1
- package/dist/esm/revo-grid_11.entry.js.map +0 -1
- package/dist/revo-grid/debounce-301fd4d2.js +0 -5
- package/dist/revo-grid/debounce-301fd4d2.js.map +0 -1
- package/dist/revo-grid/index-5e90b19b.js +0 -6
- package/dist/revo-grid/index-5e90b19b.js.map +0 -1
- package/dist/revo-grid/revo-grid_11.entry.js +0 -5
- package/dist/revo-grid/revo-grid_11.entry.js.map +0 -1
- /package/dist/collection/{utilsExternal/generate-data.js → serve/data.js} +0 -0
|
@@ -2,50 +2,46 @@
|
|
|
2
2
|
* Built by Revolist
|
|
3
3
|
*/
|
|
4
4
|
import size from 'lodash/size';
|
|
5
|
+
import debounce from 'lodash/debounce';
|
|
5
6
|
import { setStore } from '../../utils/store.utils';
|
|
6
7
|
import ColumnDataProvider from '../../services/column.data.provider';
|
|
7
8
|
import BasePlugin from '../basePlugin';
|
|
8
9
|
/**
|
|
9
10
|
* lifecycle
|
|
10
|
-
* 1) @event beforesorting - sorting just started, nothing happened yet
|
|
11
|
+
* 1) @event beforesorting - sorting just started, nothing happened yet, can be from column or from source, if type is from rows - column will be undefined
|
|
11
12
|
* 2) @metod updateColumnSorting - column sorting icon applied to grid and column get updated, data still untiuched
|
|
12
|
-
* 3) @event beforesortingapply - before we applied sorting data to data source, you can prevent data
|
|
13
|
-
* 4) @event afterSortingApply - sorting applied, just finished event
|
|
13
|
+
* 3) @event beforesortingapply - before we applied sorting data to data source, you can prevent event and data will not be sorted. It's called only from column sorting click
|
|
14
|
+
* 4) @event afterSortingApply - sorting applied, just finished event, from rows and columns
|
|
14
15
|
*
|
|
15
16
|
* If you prevent event it'll not reach farther steps
|
|
16
17
|
*/
|
|
17
18
|
export default class SortingPlugin extends BasePlugin {
|
|
18
|
-
get hasSorting() {
|
|
19
|
-
return !!this.sorting;
|
|
20
|
-
}
|
|
21
19
|
constructor(revogrid) {
|
|
22
20
|
super(revogrid);
|
|
23
21
|
this.revogrid = revogrid;
|
|
22
|
+
// sorting order per column
|
|
24
23
|
this.sorting = null;
|
|
24
|
+
// sorting function per column, multiple columns sorting supported
|
|
25
25
|
this.sortingFunc = null;
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
if (
|
|
26
|
+
this.doSort = debounce((order, comparison) => this.sort(order, comparison), 50);
|
|
27
|
+
const aftersourceset = async ({ detail: { type } }) => {
|
|
28
|
+
// if sorting was provided - sort data
|
|
29
|
+
if (!!this.sorting && this.sortingFunc) {
|
|
30
|
+
const beforeEvent = this.emit('beforesorting', { type });
|
|
31
|
+
if (beforeEvent.defaultPrevented) {
|
|
32
32
|
return;
|
|
33
33
|
}
|
|
34
|
-
|
|
35
|
-
const data = this.setData(detail.source, detail.type);
|
|
36
|
-
if (data) {
|
|
37
|
-
detail.source = data;
|
|
34
|
+
this.doSort(this.sorting, this.sortingFunc);
|
|
38
35
|
}
|
|
39
36
|
};
|
|
40
37
|
const aftercolumnsset = async ({ detail: { order } }) => {
|
|
41
38
|
const columns = await this.revogrid.getColumns();
|
|
42
39
|
const sortingFunc = {};
|
|
43
40
|
for (let prop in order) {
|
|
44
|
-
const
|
|
45
|
-
|
|
46
|
-
sortingFunc[prop] = order[prop] == 'desc' ? this.descCellCompare(cmp) : cmp;
|
|
41
|
+
const cmp = this.getComparer(ColumnDataProvider.getColumnByProp(columns, prop), order[prop]);
|
|
42
|
+
sortingFunc[prop] = cmp;
|
|
47
43
|
}
|
|
48
|
-
this.
|
|
44
|
+
this.doSort(order, sortingFunc);
|
|
49
45
|
};
|
|
50
46
|
const headerclick = async (e) => {
|
|
51
47
|
var _a, _b;
|
|
@@ -57,10 +53,24 @@ export default class SortingPlugin extends BasePlugin {
|
|
|
57
53
|
}
|
|
58
54
|
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);
|
|
59
55
|
};
|
|
60
|
-
this.addEventListener('
|
|
56
|
+
this.addEventListener('after-any-source', aftersourceset);
|
|
61
57
|
this.addEventListener('aftercolumnsset', aftercolumnsset);
|
|
62
58
|
this.addEventListener('initialHeaderClick', headerclick);
|
|
63
59
|
}
|
|
60
|
+
getComparer(column, order) {
|
|
61
|
+
const cellCmp = (column === null || column === void 0 ? void 0 : column.cellCompare.bind({ order })) || this.defaultCellCompare;
|
|
62
|
+
if (order == 'asc') {
|
|
63
|
+
return cellCmp;
|
|
64
|
+
}
|
|
65
|
+
if (order == 'desc') {
|
|
66
|
+
return this.descCellCompare(cellCmp);
|
|
67
|
+
}
|
|
68
|
+
return undefined;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Apply sorting to data on header click
|
|
72
|
+
* If additive - add to existing sorting, multiple columns can be sorted
|
|
73
|
+
*/
|
|
64
74
|
async headerclick(column, index, additive) {
|
|
65
75
|
let order = this.getNextOrder(column.order);
|
|
66
76
|
const beforeEvent = this.emit('beforesorting', { column, order, additive });
|
|
@@ -75,13 +85,13 @@ export default class SortingPlugin extends BasePlugin {
|
|
|
75
85
|
return;
|
|
76
86
|
}
|
|
77
87
|
order = beforeApplyEvent.detail.order;
|
|
78
|
-
const
|
|
79
|
-
const cmp = order == 'asc' ? cellCmp : order == 'desc' ? this.descCellCompare(cellCmp) : undefined;
|
|
88
|
+
const cmp = this.getComparer(column, order);
|
|
80
89
|
if (additive && this.sorting) {
|
|
81
90
|
const sorting = {};
|
|
82
91
|
const sortingFunc = {};
|
|
83
|
-
Object.assign(
|
|
84
|
-
|
|
92
|
+
this.sorting = Object.assign(Object.assign({}, this.sorting), sorting);
|
|
93
|
+
// extend sorting function with new sorting for multiple columns sorting
|
|
94
|
+
this.sortingFunc = Object.assign(Object.assign({}, this.sortingFunc), sortingFunc);
|
|
85
95
|
if (column.prop in sorting && size(sorting) > 1 && order === undefined) {
|
|
86
96
|
delete sorting[column.prop];
|
|
87
97
|
delete sortingFunc[column.prop];
|
|
@@ -90,38 +100,46 @@ export default class SortingPlugin extends BasePlugin {
|
|
|
90
100
|
sorting[column.prop] = order;
|
|
91
101
|
sortingFunc[column.prop] = cmp;
|
|
92
102
|
}
|
|
93
|
-
this.sort(sorting, sortingFunc);
|
|
94
103
|
}
|
|
95
104
|
else {
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
setData(data, type) {
|
|
100
|
-
// sorting available for rgRow type only
|
|
101
|
-
if (type === 'rgRow' && this.sortingFunc) {
|
|
102
|
-
return this.sortItems(data, this.sortingFunc);
|
|
105
|
+
// reset sorting
|
|
106
|
+
this.sorting = { [column.prop]: order };
|
|
107
|
+
this.sortingFunc = { [column.prop]: cmp };
|
|
103
108
|
}
|
|
109
|
+
this.doSort(this.sorting, this.sortingFunc);
|
|
104
110
|
}
|
|
105
111
|
/**
|
|
106
|
-
*
|
|
112
|
+
* Sort items by sorting function
|
|
113
|
+
* @requires proxyItems applied to row store
|
|
114
|
+
* @requires source applied to row store
|
|
115
|
+
*
|
|
107
116
|
* @param sorting - per column sorting
|
|
108
117
|
* @param data - this.stores['rgRow'].store.get('source')
|
|
109
118
|
*/
|
|
110
|
-
async sort(sorting, sortingFunc) {
|
|
119
|
+
async sort(sorting, sortingFunc, types = ['rgRow', 'rowPinStart', 'rowPinEnd']) {
|
|
120
|
+
// if no sorting - reset
|
|
111
121
|
if (!size(sorting)) {
|
|
112
122
|
this.sorting = null;
|
|
113
123
|
this.sortingFunc = null;
|
|
114
124
|
return;
|
|
115
125
|
}
|
|
126
|
+
// set sorting
|
|
116
127
|
this.sorting = sorting;
|
|
117
128
|
this.sortingFunc = sortingFunc;
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
source
|
|
124
|
-
|
|
129
|
+
// by default it'll sort by rgRow store
|
|
130
|
+
// todo: support multiple stores
|
|
131
|
+
for (let type of types) {
|
|
132
|
+
const store = await this.revogrid.getSourceStore(type);
|
|
133
|
+
// row data
|
|
134
|
+
const source = store.get('source');
|
|
135
|
+
// row indexes
|
|
136
|
+
const proxyItems = store.get('proxyItems');
|
|
137
|
+
const data = this.sortIndexByItems([...proxyItems], source, sortingFunc);
|
|
138
|
+
setStore(store, {
|
|
139
|
+
proxyItems: data,
|
|
140
|
+
source: [...source],
|
|
141
|
+
});
|
|
142
|
+
}
|
|
125
143
|
this.emit('afterSortingApply');
|
|
126
144
|
}
|
|
127
145
|
defaultCellCompare(prop, a, b) {
|
|
@@ -136,41 +154,30 @@ export default class SortingPlugin extends BasePlugin {
|
|
|
136
154
|
};
|
|
137
155
|
}
|
|
138
156
|
sortIndexByItems(indexes, source, sortingFunc) {
|
|
139
|
-
//
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
return [...Array(indexes.length).keys()];
|
|
144
|
-
}
|
|
157
|
+
// if no sorting - return unsorted indexes
|
|
158
|
+
if (Object.entries(sortingFunc).length === 0) {
|
|
159
|
+
// Unsort indexes
|
|
160
|
+
return [...Array(indexes.length).keys()];
|
|
145
161
|
}
|
|
162
|
+
//
|
|
163
|
+
/**
|
|
164
|
+
* go through all indexes and align in new order
|
|
165
|
+
* performs a multi-level sorting by applying multiple comparison functions to determine the order of the items based on different properties.
|
|
166
|
+
*/
|
|
146
167
|
return indexes.sort((a, b) => {
|
|
147
|
-
|
|
148
|
-
for (let prop in sortingFunc) {
|
|
149
|
-
const cmp = sortingFunc[prop];
|
|
168
|
+
for (const [prop, cmp] of Object.entries(sortingFunc)) {
|
|
150
169
|
const itemA = source[a];
|
|
151
170
|
const itemB = source[b];
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
return sorted;
|
|
158
|
-
});
|
|
159
|
-
}
|
|
160
|
-
sortItems(source, sortingFunc) {
|
|
161
|
-
return source.sort((a, b) => {
|
|
162
|
-
let sorted = 0;
|
|
163
|
-
for (let prop in sortingFunc) {
|
|
164
|
-
const cmp = sortingFunc[prop];
|
|
165
|
-
if (!cmp) {
|
|
166
|
-
continue;
|
|
167
|
-
}
|
|
168
|
-
sorted = cmp(prop, a, b);
|
|
171
|
+
/**
|
|
172
|
+
* If the comparison function returns a non-zero value (sorted), it means that the items should be sorted based on the given property. In such a case, the function immediately returns the sorted value, indicating the order in which the items should be arranged.
|
|
173
|
+
* If none of the comparison functions result in a non-zero value, indicating that the items are equal or should remain in the same order, the function eventually returns 0.
|
|
174
|
+
*/
|
|
175
|
+
const sorted = cmp(prop, itemA, itemB);
|
|
169
176
|
if (sorted) {
|
|
170
|
-
|
|
177
|
+
return sorted;
|
|
171
178
|
}
|
|
172
179
|
}
|
|
173
|
-
return
|
|
180
|
+
return 0;
|
|
174
181
|
});
|
|
175
182
|
}
|
|
176
183
|
getNextOrder(currentOrder) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sorting.plugin.js","sourceRoot":"","sources":["../../../src/plugins/sorting/sorting.plugin.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,aAAa,CAAC;AAG/B,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,kBAAkB,MAAM,qCAAqC,CAAC;AACrE,OAAO,UAAU,MAAM,eAAe,CAAC;AAcvC;;;;;;;;GAQG;AAEH,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,UAAU;EAInD,IAAI,UAAU;IACZ,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;EACxB,CAAC;EAED,YAAsB,QAA6B;IACjD,KAAK,CAAC,QAAQ,CAAC,CAAC;IADI,aAAQ,GAAR,QAAQ,CAAqB;IAP3C,YAAO,GAAwB,IAAI,CAAC;IACpC,gBAAW,GAAgC,IAAI,CAAC;IAStD,MAAM,eAAe,GAAG,CAAC,EAAE,MAAM,EAA+B,EAAE,EAAE;MAClE,IAAI,IAAI,CAAC,UAAU,EAAE;QACnB,qBAAqB;QACrB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QACpD,oBAAoB;QACpB,IAAI,KAAK,CAAC,gBAAgB,EAAE;UAC1B,OAAO;SACR;OACF;MACD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;MACtD,IAAI,IAAI,EAAE;QACR,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;OACtB;IACH,CAAC,CAAC;IACF,MAAM,eAAe,GAAG,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,EAA+B,EAAE,EAAE;MACnF,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;MACjD,MAAM,WAAW,GAAyB,EAAE,CAAC;MAE7C,KAAK,IAAI,IAAI,IAAI,KAAK,EAAE;QACtB,MAAM,MAAM,GAAG,kBAAkB,CAAC,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACjE,MAAM,GAAG,GAA6B,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,WAAW,KAAI,IAAI,CAAC,kBAAkB,CAAC;QAErF,WAAW,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;OAC7E;MACD,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IAChC,CAAC,CAAC;IACF,MAAM,WAAW,GAAG,KAAK,EAAE,CAA2C,EAAE,EAAE;;MACxE,IAAI,CAAC,CAAC,gBAAgB,EAAE;QACtB,OAAO;OACR;MAED,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE;QAC7B,OAAO;OACR;MAED,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,MAAA,MAAA,CAAC,CAAC,MAAM,0CAAE,aAAa,0CAAE,QAAQ,CAAC,CAAC;IACvF,CAAC,CAAC;IAEF,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,eAAe,CAAC,CAAC;IAC1D,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,eAAe,CAAC,CAAC;IAC1D,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,EAAE,WAAW,CAAC,CAAC;EAC3D,CAAC;EAEO,KAAK,CAAC,WAAW,CAAC,MAA8B,EAAE,KAAa,EAAE,QAAiB;IACxF,IAAI,KAAK,GAAmB,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5D,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC5E,IAAI,WAAW,CAAC,gBAAgB,EAAE;MAChC,OAAO;KACR;IACD,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC;IACjC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IAE1G,kBAAkB;IAClB,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC9F,IAAI,gBAAgB,CAAC,gBAAgB,EAAE;MACrC,OAAO;KACR;IACD,KAAK,GAAG,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC;IAEtC,MAAM,OAAO,GAA6B,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,WAAW,KAAI,IAAI,CAAC,kBAAkB,CAAC;IACzF,MAAM,GAAG,GAA6B,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAE7H,IAAI,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE;MAC5B,MAAM,OAAO,GAAiB,EAAE,CAAC;MACjC,MAAM,WAAW,GAAyB,EAAE,CAAC;MAE7C,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;MACrC,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;MAE7C,IAAI,MAAM,CAAC,IAAI,IAAI,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,KAAK,KAAK,SAAS,EAAE;QACtE,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC5B,OAAO,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;OACjC;WAAM;QACL,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;QAC7B,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;OAChC;MAED,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;KACjC;SAAM;MACL,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;KAC7D;EACH,CAAC;EAEO,OAAO,CAAC,IAAyB,EAAE,IAAmB;IAC5D,wCAAwC;IACxC,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,WAAW,EAAE;MACxC,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;KAC/C;EACH,CAAC;EAED;;;;KAIG;EACK,KAAK,CAAC,IAAI,CAAC,OAAqB,EAAE,WAAiC;IACzE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;MAClB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;MACpB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;MACxB,OAAO;KACR;IACD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACvB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IAE/B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC;IAEnD,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACnC,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IACjG,QAAQ,CAAC,KAAK,EAAE;MACd,UAAU;MACV,MAAM,EAAE,CAAC,GAAG,MAAM,CAAC;KACpB,CAAC,CAAC;IACH,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;EACjC,CAAC;EAEO,kBAAkB,CAAC,IAAyB,EAAE,CAAoB,EAAE,CAAoB;;IAC9F,MAAM,EAAE,GAAG,MAAA,CAAC,CAAC,IAAI,CAAC,0CAAE,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC7C,MAAM,EAAE,GAAG,MAAA,CAAC,CAAC,IAAI,CAAC,0CAAE,QAAQ,GAAG,WAAW,EAAE,CAAC;IAE7C,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;EACzC,CAAC;EAEO,eAAe,CAAC,GAA6B;IACnD,OAAO,CAAC,IAAyB,EAAE,CAAoB,EAAE,CAAoB,EAAU,EAAE;MACvF,OAAO,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9B,CAAC,CAAC;EACJ,CAAC;EAEO,gBAAgB,CAAC,OAAiB,EAAE,MAA2B,EAAE,WAAiC;IACxG,qGAAqG;IACrG,KAAK,IAAI,IAAI,IAAI,WAAW,EAAE;MAC5B,IAAI,OAAO,WAAW,CAAC,IAAI,CAAC,KAAK,WAAW,EAAE;QAC5C,iBAAiB;QACjB,OAAO,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;OAC1C;KACF;IACD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;MAC3B,IAAI,MAAM,GAAG,CAAC,CAAC;MACf,KAAK,IAAI,IAAI,IAAI,WAAW,EAAE;QAC5B,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;QAC9B,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACxB,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACxB,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QACjC,IAAI,MAAM,EAAE;UACV,MAAM;SACP;OACF;MACD,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC,CAAC;EACL,CAAC;EAEO,SAAS,CAAC,MAA2B,EAAE,WAAiC;IAC9E,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;MAC1B,IAAI,MAAM,GAAG,CAAC,CAAC;MACf,KAAK,IAAI,IAAI,IAAI,WAAW,EAAE;QAC5B,MAAM,GAAG,GAAyC,WAAW,CAAC,IAAI,CAAC,CAAC;QACpE,IAAI,CAAC,GAAG,EAAE;UACR,SAAS;SACV;QACD,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACzB,IAAI,MAAM,EAAE;UACV,MAAM;SACP;OACF;MACD,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC,CAAC;EACL,CAAC;EAEO,YAAY,CAAC,YAA4B;IAC/C,QAAQ,YAAY,EAAE;MACpB,KAAK,SAAS;QACZ,OAAO,KAAK,CAAC;MACf,KAAK,KAAK;QACR,OAAO,MAAM,CAAC;MAChB,KAAK,MAAM;QACT,OAAO,SAAS,CAAC;KACpB;EACH,CAAC;CACF","sourcesContent":["import size from 'lodash/size';\n\nimport { RevoGrid } from '../../interfaces';\nimport { setStore } from '../../utils/store.utils';\nimport ColumnDataProvider from '../../services/column.data.provider';\nimport BasePlugin from '../basePlugin';\n\nimport DimensionRows = RevoGrid.DimensionRows;\n\nexport type SortingOrder = Record<RevoGrid.ColumnProp, RevoGrid.Order>;\ntype SortingOrderFunction = Record<RevoGrid.ColumnProp, RevoGrid.CellCompareFunc | undefined>;\ntype SourceSetEvent = {\n type: DimensionRows;\n source: RevoGrid.DataType[];\n};\ntype ColumnSetEvent = {\n order: SortingOrder;\n};\n\n/**\n * lifecycle\n * 1) @event beforesorting - sorting just started, nothing happened yet\n * 2) @metod updateColumnSorting - column sorting icon applied to grid and column get updated, data still untiuched\n * 3) @event beforesortingapply - before we applied sorting data to data source, you can prevent data apply from here\n * 4) @event afterSortingApply - sorting applied, just finished event\n *\n * If you prevent event it'll not reach farther steps\n */\n\nexport default class SortingPlugin extends BasePlugin {\n private sorting: SortingOrder | null = null;\n private sortingFunc: SortingOrderFunction | null = null;\n\n get hasSorting() {\n return !!this.sorting;\n }\n\n constructor(protected revogrid: HTMLRevoGridElement) {\n super(revogrid);\n\n const beforesourceset = ({ detail }: CustomEvent<SourceSetEvent>) => {\n if (this.hasSorting) {\n // is sorting allowed\n const event = this.emit('beforesourcesortingapply');\n // sorting prevented\n if (event.defaultPrevented) {\n return;\n }\n }\n const data = this.setData(detail.source, detail.type);\n if (data) {\n detail.source = data;\n }\n };\n const aftercolumnsset = async ({ detail: { order } }: CustomEvent<ColumnSetEvent>) => {\n const columns = await this.revogrid.getColumns();\n const sortingFunc: SortingOrderFunction = {};\n\n for (let prop in order) {\n const column = ColumnDataProvider.getColumnByProp(columns, prop);\n const cmp: RevoGrid.CellCompareFunc = column?.cellCompare || this.defaultCellCompare;\n\n sortingFunc[prop] = order[prop] == 'desc' ? this.descCellCompare(cmp) : cmp;\n }\n this.sort(order, sortingFunc);\n };\n const headerclick = async (e: CustomEvent<RevoGrid.InitialHeaderClick>) => {\n if (e.defaultPrevented) {\n return;\n }\n\n if (!e.detail.column.sortable) {\n return;\n }\n\n this.headerclick(e.detail.column, e.detail.index, e.detail?.originalEvent?.shiftKey);\n };\n\n this.addEventListener('beforesourceset', beforesourceset);\n this.addEventListener('aftercolumnsset', aftercolumnsset);\n this.addEventListener('initialHeaderClick', headerclick);\n }\n\n private async headerclick(column: RevoGrid.ColumnRegular, index: number, additive: boolean) {\n let order: RevoGrid.Order = this.getNextOrder(column.order);\n const beforeEvent = this.emit('beforesorting', { column, order, additive });\n if (beforeEvent.defaultPrevented) {\n return;\n }\n order = beforeEvent.detail.order;\n const newCol = await this.revogrid.updateColumnSorting(beforeEvent.detail.column, index, order, additive);\n\n // apply sort data\n const beforeApplyEvent = this.emit('beforesortingapply', { column: newCol, order, additive });\n if (beforeApplyEvent.defaultPrevented) {\n return;\n }\n order = beforeApplyEvent.detail.order;\n\n const cellCmp: RevoGrid.CellCompareFunc = column?.cellCompare || this.defaultCellCompare;\n const cmp: RevoGrid.CellCompareFunc = order == 'asc' ? cellCmp : order == 'desc' ? this.descCellCompare(cellCmp) : undefined;\n\n if (additive && this.sorting) {\n const sorting: SortingOrder = {};\n const sortingFunc: SortingOrderFunction = {};\n\n Object.assign(sorting, this.sorting);\n Object.assign(sortingFunc, this.sortingFunc);\n\n if (column.prop in sorting && size(sorting) > 1 && order === undefined) {\n delete sorting[column.prop];\n delete sortingFunc[column.prop];\n } else {\n sorting[column.prop] = order;\n sortingFunc[column.prop] = cmp;\n }\n\n this.sort(sorting, sortingFunc);\n } else {\n this.sort({ [column.prop]: order }, { [column.prop]: cmp });\n }\n }\n\n private setData(data: RevoGrid.DataType[], type: DimensionRows): RevoGrid.DataType[] | void {\n // sorting available for rgRow type only\n if (type === 'rgRow' && this.sortingFunc) {\n return this.sortItems(data, this.sortingFunc);\n }\n }\n\n /**\n * Sorting apply, available for rgRow type only\n * @param sorting - per column sorting\n * @param data - this.stores['rgRow'].store.get('source')\n */\n private async sort(sorting: SortingOrder, sortingFunc: SortingOrderFunction) {\n if (!size(sorting)) {\n this.sorting = null;\n this.sortingFunc = null;\n return;\n }\n this.sorting = sorting;\n this.sortingFunc = sortingFunc;\n\n const store = await this.revogrid.getSourceStore();\n\n const source = store.get('source');\n const proxyItems = this.sortIndexByItems([...store.get('proxyItems')], source, this.sortingFunc);\n setStore(store, {\n proxyItems,\n source: [...source],\n });\n this.emit('afterSortingApply');\n }\n\n private defaultCellCompare(prop: RevoGrid.ColumnProp, a: RevoGrid.DataType, b: RevoGrid.DataType) {\n const av = a[prop]?.toString().toLowerCase();\n const bv = b[prop]?.toString().toLowerCase();\n\n return av == bv ? 0 : av > bv ? 1 : -1;\n }\n\n private descCellCompare(cmp: RevoGrid.CellCompareFunc) {\n return (prop: RevoGrid.ColumnProp, a: RevoGrid.DataType, b: RevoGrid.DataType): number => {\n return -1 * cmp(prop, a, b);\n };\n }\n\n private sortIndexByItems(indexes: number[], source: RevoGrid.DataType[], sortingFunc: SortingOrderFunction): number[] {\n // TODO - is there a situation where multiple kvps in the `sorting` object would cause this to break?\n for (let prop in sortingFunc) {\n if (typeof sortingFunc[prop] === 'undefined') {\n // Unsort indexes\n return [...Array(indexes.length).keys()];\n }\n }\n return indexes.sort((a, b) => {\n let sorted = 0;\n for (let prop in sortingFunc) {\n const cmp = sortingFunc[prop];\n const itemA = source[a];\n const itemB = source[b];\n sorted = cmp(prop, itemA, itemB);\n if (sorted) {\n break;\n }\n }\n return sorted;\n });\n }\n\n private sortItems(source: RevoGrid.DataType[], sortingFunc: SortingOrderFunction): RevoGrid.DataType[] {\n return source.sort((a, b) => {\n let sorted = 0;\n for (let prop in sortingFunc) {\n const cmp: RevoGrid.CellCompareFunc | undefined = sortingFunc[prop];\n if (!cmp) {\n continue;\n }\n sorted = cmp(prop, a, b);\n if (sorted) {\n break;\n }\n }\n return sorted;\n });\n }\n\n private getNextOrder(currentOrder: RevoGrid.Order): RevoGrid.Order {\n switch (currentOrder) {\n case undefined:\n return 'asc';\n case 'asc':\n return 'desc';\n case 'desc':\n return undefined;\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"sorting.plugin.js","sourceRoot":"","sources":["../../../src/plugins/sorting/sorting.plugin.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,aAAa,CAAC;AAC/B,OAAO,QAAQ,MAAM,iBAAiB,CAAC;AAGvC,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,kBAAkB,MAAM,qCAAqC,CAAC;AACrE,OAAO,UAAU,MAAM,eAAe,CAAC;AAQvC;;;;;;;;GAQG;AAEH,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,UAAU;EASnD,YAAsB,QAA6B;IACjD,KAAK,CAAC,QAAQ,CAAC,CAAC;IADI,aAAQ,GAAR,QAAQ,CAAqB;IARnD,2BAA2B;IACnB,YAAO,GAAwB,IAAI,CAAC;IAE5C,kEAAkE;IAC1D,gBAAW,GAAgC,IAAI,CAAC;IAChD,WAAM,GAAG,QAAQ,CAAC,CAAC,KAAmB,EAAE,UAAgC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC;IAMrH,MAAM,cAAc,GAAG,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,EAE9C,EAAE,EAAE;MACJ,sCAAsC;MACtC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,WAAW,EAAE;QACtC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QACzD,IAAI,WAAW,CAAC,gBAAgB,EAAE;UAChC,OAAO;SACR;QACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;OAC7C;IACH,CAAC,CAAC;IACF,MAAM,eAAe,GAAG,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,EAA+B,EAAE,EAAE;MACnF,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;MACjD,MAAM,WAAW,GAAyB,EAAE,CAAC;MAE7C,KAAK,IAAI,IAAI,IAAI,KAAK,EAAE;QACtB,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7F,WAAW,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;OACzB;MACD,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IAClC,CAAC,CAAC;IACF,MAAM,WAAW,GAAG,KAAK,EAAE,CAA2C,EAAE,EAAE;;MACxE,IAAI,CAAC,CAAC,gBAAgB,EAAE;QACtB,OAAO;OACR;MAED,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE;QAC7B,OAAO;OACR;MAED,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,MAAA,MAAA,CAAC,CAAC,MAAM,0CAAE,aAAa,0CAAE,QAAQ,CAAC,CAAC;IACvF,CAAC,CAAC;IAEF,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,cAAc,CAAC,CAAC;IAC1D,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,eAAe,CAAC,CAAC;IAC1D,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,EAAE,WAAW,CAAC,CAAC;EAC3D,CAAC;EAEO,WAAW,CAAC,MAA8B,EAAE,KAAqB;IACvE,MAAM,OAAO,GAA6B,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,WAAW,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,KAAI,IAAI,CAAC,kBAAkB,CAAC;IACzG,IAAI,KAAK,IAAI,KAAK,EAAE;MAClB,OAAO,OAAO,CAAC;KAChB;IACD,IAAI,KAAK,IAAI,MAAM,EAAE;MACnB,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;KACtC;IACD,OAAO,SAAS,CAAC;EACnB,CAAC;EAED;;;KAGG;EACH,KAAK,CAAC,WAAW,CAAC,MAA8B,EAAE,KAAa,EAAE,QAAiB;IAChF,IAAI,KAAK,GAAmB,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5D,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC5E,IAAI,WAAW,CAAC,gBAAgB,EAAE;MAChC,OAAO;KACR;IACD,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC;IACjC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IAE1G,kBAAkB;IAClB,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC9F,IAAI,gBAAgB,CAAC,gBAAgB,EAAE;MACrC,OAAO;KACR;IACD,KAAK,GAAG,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC;IACtC,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAE5C,IAAI,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE;MAC5B,MAAM,OAAO,GAAiB,EAAE,CAAC;MACjC,MAAM,WAAW,GAAyB,EAAE,CAAC;MAE7C,IAAI,CAAC,OAAO,mCACP,IAAI,CAAC,OAAO,GACZ,OAAO,CACX,CAAC;MACF,wEAAwE;MACxE,IAAI,CAAC,WAAW,mCACX,IAAI,CAAC,WAAW,GAChB,WAAW,CACf,CAAC;MAEF,IAAI,MAAM,CAAC,IAAI,IAAI,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,KAAK,KAAK,SAAS,EAAE;QACtE,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC5B,OAAO,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;OACjC;WAAM;QACL,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;QAC7B,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;OAChC;KACF;SAAM;MACL,gBAAgB;MAChB,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC;MACxC,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;KAC3C;IAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;EAC9C,CAAC;EAED;;;;;;;KAOG;EACH,KAAK,CAAC,IAAI,CAAC,OAAqB,EAAE,WAAiC,EAAE,QAAkC,CAAC,OAAO,EAAE,aAAa,EAAE,WAAW,CAAC;IAC1I,wBAAwB;IACxB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;MAClB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;MACpB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;MACxB,OAAO;KACR;IACD,cAAc;IACd,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACvB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IAE/B,uCAAuC;IACvC,gCAAgC;IAChC,KAAK,IAAI,IAAI,IAAI,KAAK,EAAE;MACtB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;MACvD,WAAW;MACX,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;MACnC,cAAc;MACd,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;MAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,GAAG,UAAU,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;MACzE,QAAQ,CAAC,KAAK,EAAE;QACd,UAAU,EAAE,IAAI;QAChB,MAAM,EAAE,CAAC,GAAG,MAAM,CAAC;OACpB,CAAC,CAAC;KACJ;IACD,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;EACjC,CAAC;EAED,kBAAkB,CAAC,IAAyB,EAAE,CAAoB,EAAE,CAAoB;;IACtF,MAAM,EAAE,GAAG,MAAA,CAAC,CAAC,IAAI,CAAC,0CAAE,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC7C,MAAM,EAAE,GAAG,MAAA,CAAC,CAAC,IAAI,CAAC,0CAAE,QAAQ,GAAG,WAAW,EAAE,CAAC;IAE7C,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;EACzC,CAAC;EAED,eAAe,CAAC,GAA6B;IAC3C,OAAO,CAAC,IAAyB,EAAE,CAAoB,EAAE,CAAoB,EAAU,EAAE;MACvF,OAAO,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9B,CAAC,CAAC;EACJ,CAAC;EAED,gBAAgB,CAAC,OAAiB,EAAE,MAA2B,EAAE,WAAiC;IAChG,0CAA0C;IAC1C,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;MAC5C,iBAAiB;MACjB,OAAO,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;KAC1C;IACD,GAAG;IACH;;;OAGG;IACH,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;MAC3B,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;QACrD,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACxB,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QAExB;;;WAGG;QACH,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QACvC,IAAI,MAAM,EAAE;UACV,OAAO,MAAM,CAAC;SACf;OACF;MACD,OAAO,CAAC,CAAC;IACX,CAAC,CAAC,CAAC;EACL,CAAC;EAED,YAAY,CAAC,YAA4B;IACvC,QAAQ,YAAY,EAAE;MACpB,KAAK,SAAS;QACZ,OAAO,KAAK,CAAC;MACf,KAAK,KAAK;QACR,OAAO,MAAM,CAAC;MAChB,KAAK,MAAM;QACT,OAAO,SAAS,CAAC;KACpB;EACH,CAAC;CACF","sourcesContent":["import size from 'lodash/size';\nimport debounce from 'lodash/debounce';\n\nimport { RevoGrid } from '../../interfaces';\nimport { setStore } from '../../utils/store.utils';\nimport ColumnDataProvider from '../../services/column.data.provider';\nimport BasePlugin from '../basePlugin';\n\nexport type SortingOrder = Record<RevoGrid.ColumnProp, RevoGrid.Order>;\ntype SortingOrderFunction = Record<RevoGrid.ColumnProp, RevoGrid.CellCompareFunc | undefined>;\ntype ColumnSetEvent = {\n order: SortingOrder;\n};\n\n/**\n * lifecycle\n * 1) @event beforesorting - sorting just started, nothing happened yet, can be from column or from source, if type is from rows - column will be undefined\n * 2) @metod updateColumnSorting - column sorting icon applied to grid and column get updated, data still untiuched\n * 3) @event beforesortingapply - before we applied sorting data to data source, you can prevent event and data will not be sorted. It's called only from column sorting click\n * 4) @event afterSortingApply - sorting applied, just finished event, from rows and columns\n *\n * If you prevent event it'll not reach farther steps\n */\n\nexport default class SortingPlugin extends BasePlugin {\n // sorting order per column\n private sorting: SortingOrder | null = null;\n\n // sorting function per column, multiple columns sorting supported\n private sortingFunc: SortingOrderFunction | null = null;\n private doSort = debounce((order: SortingOrder, comparison: SortingOrderFunction) => this.sort(order, comparison), 50);\n\n\n constructor(protected revogrid: HTMLRevoGridElement) {\n super(revogrid);\n\n const aftersourceset = async ({ detail: { type } }: CustomEvent<{\n type: RevoGrid.DimensionRows\n }>) => {\n // if sorting was provided - sort data\n if (!!this.sorting && this.sortingFunc) {\n const beforeEvent = this.emit('beforesorting', { type });\n if (beforeEvent.defaultPrevented) {\n return;\n }\n this.doSort(this.sorting, this.sortingFunc);\n }\n };\n const aftercolumnsset = async ({ detail: { order } }: CustomEvent<ColumnSetEvent>) => {\n const columns = await this.revogrid.getColumns();\n const sortingFunc: SortingOrderFunction = {};\n\n for (let prop in order) {\n const cmp = this.getComparer(ColumnDataProvider.getColumnByProp(columns, prop), order[prop]);\n sortingFunc[prop] = cmp;\n }\n this.doSort(order, sortingFunc);\n };\n const headerclick = async (e: CustomEvent<RevoGrid.InitialHeaderClick>) => {\n if (e.defaultPrevented) {\n return;\n }\n\n if (!e.detail.column.sortable) {\n return;\n }\n\n this.headerclick(e.detail.column, e.detail.index, e.detail?.originalEvent?.shiftKey);\n };\n\n this.addEventListener('after-any-source', aftersourceset);\n this.addEventListener('aftercolumnsset', aftercolumnsset);\n this.addEventListener('initialHeaderClick', headerclick);\n }\n\n private getComparer(column: RevoGrid.ColumnRegular, order: RevoGrid.Order): RevoGrid.CellCompareFunc {\n const cellCmp: RevoGrid.CellCompareFunc = column?.cellCompare.bind({ order }) || this.defaultCellCompare;\n if (order == 'asc') {\n return cellCmp;\n }\n if (order == 'desc') {\n return this.descCellCompare(cellCmp);\n }\n return undefined;\n }\n\n /**\n * Apply sorting to data on header click\n * If additive - add to existing sorting, multiple columns can be sorted\n */\n async headerclick(column: RevoGrid.ColumnRegular, index: number, additive: boolean) {\n let order: RevoGrid.Order = this.getNextOrder(column.order);\n const beforeEvent = this.emit('beforesorting', { column, order, additive });\n if (beforeEvent.defaultPrevented) {\n return;\n }\n order = beforeEvent.detail.order;\n const newCol = await this.revogrid.updateColumnSorting(beforeEvent.detail.column, index, order, additive);\n\n // apply sort data\n const beforeApplyEvent = this.emit('beforesortingapply', { column: newCol, order, additive });\n if (beforeApplyEvent.defaultPrevented) {\n return;\n }\n order = beforeApplyEvent.detail.order;\n const cmp = this.getComparer(column, order);\n\n if (additive && this.sorting) {\n const sorting: SortingOrder = {};\n const sortingFunc: SortingOrderFunction = {};\n\n this.sorting = {\n ...this.sorting,\n ...sorting,\n };\n // extend sorting function with new sorting for multiple columns sorting\n this.sortingFunc = {\n ...this.sortingFunc,\n ...sortingFunc,\n };\n\n if (column.prop in sorting && size(sorting) > 1 && order === undefined) {\n delete sorting[column.prop];\n delete sortingFunc[column.prop];\n } else {\n sorting[column.prop] = order;\n sortingFunc[column.prop] = cmp;\n }\n } else {\n // reset sorting\n this.sorting = { [column.prop]: order };\n this.sortingFunc = { [column.prop]: cmp };\n }\n\n this.doSort(this.sorting, this.sortingFunc);\n }\n\n /**\n * Sort items by sorting function\n * @requires proxyItems applied to row store\n * @requires source applied to row store\n * \n * @param sorting - per column sorting\n * @param data - this.stores['rgRow'].store.get('source')\n */\n async sort(sorting: SortingOrder, sortingFunc: SortingOrderFunction, types: RevoGrid.DimensionRows[] = ['rgRow', 'rowPinStart', 'rowPinEnd']) {\n // if no sorting - reset\n if (!size(sorting)) {\n this.sorting = null;\n this.sortingFunc = null;\n return;\n }\n // set sorting\n this.sorting = sorting;\n this.sortingFunc = sortingFunc;\n\n // by default it'll sort by rgRow store\n // todo: support multiple stores\n for (let type of types) {\n const store = await this.revogrid.getSourceStore(type);\n // row data\n const source = store.get('source');\n // row indexes\n const proxyItems = store.get('proxyItems');\n const data = this.sortIndexByItems([...proxyItems], source, sortingFunc);\n setStore(store, {\n proxyItems: data,\n source: [...source],\n });\n }\n this.emit('afterSortingApply');\n }\n\n defaultCellCompare(prop: RevoGrid.ColumnProp, a: RevoGrid.DataType, b: RevoGrid.DataType) {\n const av = a[prop]?.toString().toLowerCase();\n const bv = b[prop]?.toString().toLowerCase();\n\n return av == bv ? 0 : av > bv ? 1 : -1;\n }\n\n descCellCompare(cmp: RevoGrid.CellCompareFunc) {\n return (prop: RevoGrid.ColumnProp, a: RevoGrid.DataType, b: RevoGrid.DataType): number => {\n return -1 * cmp(prop, a, b);\n };\n }\n\n sortIndexByItems(indexes: number[], source: RevoGrid.DataType[], sortingFunc: SortingOrderFunction): number[] {\n // if no sorting - return unsorted indexes\n if (Object.entries(sortingFunc).length === 0) {\n // Unsort indexes\n return [...Array(indexes.length).keys()];\n }\n // \n /**\n * go through all indexes and align in new order\n * performs a multi-level sorting by applying multiple comparison functions to determine the order of the items based on different properties.\n */\n return indexes.sort((a, b) => {\n for (const [prop, cmp] of Object.entries(sortingFunc)) {\n const itemA = source[a];\n const itemB = source[b];\n\n /**\n * If the comparison function returns a non-zero value (sorted), it means that the items should be sorted based on the given property. In such a case, the function immediately returns the sorted value, indicating the order in which the items should be arranged.\n * If none of the comparison functions result in a non-zero value, indicating that the items are equal or should remain in the same order, the function eventually returns 0.\n */\n const sorted = cmp(prop, itemA, itemB);\n if (sorted) {\n return sorted;\n }\n }\n return 0;\n });\n }\n\n getNextOrder(currentOrder: RevoGrid.Order): RevoGrid.Order {\n switch (currentOrder) {\n case undefined:\n return 'asc';\n case 'asc':\n return 'desc';\n case 'desc':\n return undefined;\n }\n }\n}\n"]}
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
import { generateFakeDataObject } from './data.js';
|
|
2
|
+
|
|
3
|
+
window.eventsPrevented = {};
|
|
4
|
+
window.showRowHeaders = function (isShow) {
|
|
5
|
+
const grid = document.querySelector('revo-grid');
|
|
6
|
+
grid.rowHeaders = isShow;
|
|
7
|
+
};
|
|
8
|
+
window.showColGrouping = function (isShow) {
|
|
9
|
+
setData({
|
|
10
|
+
groupedHeader: isShow,
|
|
11
|
+
});
|
|
12
|
+
};
|
|
13
|
+
window.setRowSize = function (s) {
|
|
14
|
+
const grid = document.querySelector('revo-grid');
|
|
15
|
+
grid.rowSize = s;
|
|
16
|
+
};
|
|
17
|
+
window.setEdit = function (rgRow, prop) {
|
|
18
|
+
const grid = document.querySelector('revo-grid');
|
|
19
|
+
grid.setCellEdit(rgRow, prop);
|
|
20
|
+
};
|
|
21
|
+
window.scrollToCol = function (x = 30) {
|
|
22
|
+
const grid = document.querySelector('revo-grid');
|
|
23
|
+
grid.scrollToColumnProp(x);
|
|
24
|
+
};
|
|
25
|
+
window.clearGrouping = function () {
|
|
26
|
+
const grid = document.querySelector('revo-grid');
|
|
27
|
+
grid.grouping = {};
|
|
28
|
+
};
|
|
29
|
+
window.setGrouping = function (props = [], expandedAll = false, groupLabelTemplate) {
|
|
30
|
+
const grid = document.querySelector('revo-grid');
|
|
31
|
+
groupLabelTemplate = (createElement, { name, depth }) => {
|
|
32
|
+
return createElement('span', null, `${props[depth]}: ${name}`);
|
|
33
|
+
};
|
|
34
|
+
grid.grouping = { props, expandedAll, groupLabelTemplate };
|
|
35
|
+
};
|
|
36
|
+
window.setTrimmed = function (rows = []) {
|
|
37
|
+
const grid = document.querySelector('revo-grid');
|
|
38
|
+
grid.trimmedRows = rows.reduce((r, v) => {
|
|
39
|
+
r[v] = true;
|
|
40
|
+
return r;
|
|
41
|
+
}, {});
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
window.exportGrid = function (filename = 'new file') {
|
|
45
|
+
const grid = document.querySelector('revo-grid');
|
|
46
|
+
grid.getPlugins().then(plugins => {
|
|
47
|
+
plugins.forEach(p => {
|
|
48
|
+
if (p.exportFile) {
|
|
49
|
+
const exportPlugin = p;
|
|
50
|
+
exportPlugin.exportFile({ filename });
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
let defaultData = {
|
|
57
|
+
rows: 0,
|
|
58
|
+
cols: 0,
|
|
59
|
+
topPinned: [],
|
|
60
|
+
bottomPinned: [],
|
|
61
|
+
colPinEnd: [],
|
|
62
|
+
colPinStart: [],
|
|
63
|
+
// groupedHeader: true,
|
|
64
|
+
// order: 5
|
|
65
|
+
};
|
|
66
|
+
window.setData = function (config = {}) {
|
|
67
|
+
defaultData = { ...defaultData, ...config };
|
|
68
|
+
const $loader = document.querySelector('.loader');
|
|
69
|
+
$loader.style.display = 'block';
|
|
70
|
+
setTimeout(() => {
|
|
71
|
+
const grid = document.querySelector('revo-grid');
|
|
72
|
+
const data = generateFakeDataObject(defaultData);
|
|
73
|
+
|
|
74
|
+
grid.columns = data.headers;
|
|
75
|
+
grid.source = data.rows;
|
|
76
|
+
|
|
77
|
+
grid.pinnedTopSource = data.pinnedTopRows;
|
|
78
|
+
grid.pinnedBottomSource = data.pinnedBottomRows;
|
|
79
|
+
$loader.style.display = 'none';
|
|
80
|
+
}, 0);
|
|
81
|
+
};
|
|
82
|
+
window.setPinned = function (type, checked) {
|
|
83
|
+
const val = [];
|
|
84
|
+
if (checked) {
|
|
85
|
+
switch (type) {
|
|
86
|
+
case 'colPinStart':
|
|
87
|
+
val.push(0);
|
|
88
|
+
break;
|
|
89
|
+
case 'colPinEnd':
|
|
90
|
+
val.push(1);
|
|
91
|
+
break;
|
|
92
|
+
case 'topPinned':
|
|
93
|
+
val.push(0);
|
|
94
|
+
break;
|
|
95
|
+
case 'bottomPinned':
|
|
96
|
+
val.push(1);
|
|
97
|
+
break;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
setData({
|
|
101
|
+
[type]: val,
|
|
102
|
+
});
|
|
103
|
+
};
|
|
104
|
+
window.preventEvent = function (name, checked) {
|
|
105
|
+
eventsPrevented[name] = checked;
|
|
106
|
+
};
|
|
107
|
+
let keys = 2;
|
|
108
|
+
window.toggleVisibility = function (checked) {
|
|
109
|
+
if (!checked) {
|
|
110
|
+
const grid = document.querySelector('revo-grid');
|
|
111
|
+
grid.remove();
|
|
112
|
+
} else {
|
|
113
|
+
const holder = document.querySelector('.grid-holder');
|
|
114
|
+
const grid = document.createElement('revo-grid', { is: 'revo-grid' });
|
|
115
|
+
grid.setAttribute('key', keys++);
|
|
116
|
+
holder.appendChild(grid);
|
|
117
|
+
setData();
|
|
118
|
+
}
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
window.onload = onLoad;
|
|
123
|
+
|
|
124
|
+
function onLoad() {
|
|
125
|
+
const grid = document.querySelector('revo-grid');
|
|
126
|
+
|
|
127
|
+
grid.readonly = false;
|
|
128
|
+
grid.range = true;
|
|
129
|
+
grid.resize = true;
|
|
130
|
+
|
|
131
|
+
const filterFunc = (cellValue, extraValue) => {
|
|
132
|
+
if (!cellValue) {
|
|
133
|
+
return false;
|
|
134
|
+
}
|
|
135
|
+
if (typeof cellValue !== 'string') {
|
|
136
|
+
cellValue = JSON.stringify(cellValue);
|
|
137
|
+
}
|
|
138
|
+
return cellValue === extraValue;
|
|
139
|
+
};
|
|
140
|
+
// if you want extra input field for @extraValue
|
|
141
|
+
filterFunc.extra = 'input';
|
|
142
|
+
|
|
143
|
+
const filterConfig = {
|
|
144
|
+
include: ['newEqual'],
|
|
145
|
+
customFilters: {
|
|
146
|
+
newEqual: {
|
|
147
|
+
columnFilterType: 'myFilterType', // column filter type id
|
|
148
|
+
name: 'myEqual',
|
|
149
|
+
func: filterFunc,
|
|
150
|
+
},
|
|
151
|
+
},
|
|
152
|
+
disableDynamicFiltering: true,
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
grid.filter = filterConfig;
|
|
156
|
+
// grid.stretch = true;
|
|
157
|
+
grid.exporting = true;
|
|
158
|
+
grid.rowDefinitions = [
|
|
159
|
+
{
|
|
160
|
+
type: 'rgRow',
|
|
161
|
+
index: 1,
|
|
162
|
+
size: 100,
|
|
163
|
+
},
|
|
164
|
+
];
|
|
165
|
+
/*
|
|
166
|
+
grid.autoSizeColumn = {
|
|
167
|
+
mode: 'autoSizeAll',
|
|
168
|
+
};*/
|
|
169
|
+
// default
|
|
170
|
+
setData({ rows: 100, cols: 10 });
|
|
171
|
+
|
|
172
|
+
// events testing
|
|
173
|
+
// 'beforerange', 'setRange', 'beforefocuslost', 'beforecellfocus', 'afterfocus', 'beforeedit', 'aftercolumnresize'
|
|
174
|
+
const events = ['beforeedit', 'beforerange', 'setRange', 'afteredit'];
|
|
175
|
+
events.forEach(e => {
|
|
176
|
+
grid.addEventListener(e, $e => {
|
|
177
|
+
if (window.eventsPrevented[e]) {
|
|
178
|
+
$e.preventDefault();
|
|
179
|
+
}
|
|
180
|
+
console.log(`%c${e}`, 'background: #50d260; color: #fff; border-radius: 3px; padding: 2px 5px;', $e);
|
|
181
|
+
});
|
|
182
|
+
});
|
|
183
|
+
}
|
|
@@ -29,7 +29,7 @@ export default class LocalScrollService {
|
|
|
29
29
|
this.cancelScroll(e.dimension);
|
|
30
30
|
const frameAnimation = new Promise((resolve, reject) => {
|
|
31
31
|
const animationId = window.requestAnimationFrame(() => {
|
|
32
|
-
resolve(
|
|
32
|
+
resolve();
|
|
33
33
|
});
|
|
34
34
|
this.preventArtificialScroll[e.dimension] = reject.bind(null, animationId);
|
|
35
35
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"localScrollService.js","sourceRoot":"","sources":["../../src/services/localScrollService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAgBtC,MAAM,aAAa,GAAW;EAC5B,WAAW,EAAE,CAAC;EACd,UAAU,EAAE,CAAC;EACb,WAAW,EAAE,CAAC;EACd,OAAO,EAAE,CAAC;CACX,CAAC;AACF,MAAM,aAAa,GAAG,CAAC,CAAC,CAAC;AACzB,MAAM,CAAC,OAAO,OAAO,kBAAkB;EAMrC,YAAoB,GAAW;IAAX,QAAG,GAAH,GAAG,CAAQ;IALvB,4BAAuB,GAAsD,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAClH,6BAA6B;IACrB,mBAAc,GAA2C,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC;IACxG,WAAM,GAA2C,EAAE,KAAK,oBAAO,aAAa,CAAE,EAAE,KAAK,oBAAO,aAAa,CAAE,EAAE,CAAC;EAEpF,CAAC;EAEnC,MAAM,CAAC,qBAAqB,CAAC,WAAmB,EAAE,UAAkB,EAAE,cAAsB,CAAC;IAC3F,OAAO,WAAW,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;EACpE,CAAC;EAED,SAAS,CAAC,MAAc,EAAE,SAAiC;IACzD,MAAM,kBAAkB,GAAG,kBAAkB,CAAC,qBAAqB,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;IAC/H,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,mCACjB,MAAM,KACT,OAAO,EAAE,kBAAkB,GAAG,MAAM,CAAC,UAAU,EAC/C,kBAAkB,GACnB,CAAC;EACJ,CAAC;EAED,wCAAwC;EACxC,KAAK,CAAC,SAAS,CAAC,CAA+B;IAC7C,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAE/B,MAAM,cAAc,GAAG,IAAI,OAAO,
|
|
1
|
+
{"version":3,"file":"localScrollService.js","sourceRoot":"","sources":["../../src/services/localScrollService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAgBtC,MAAM,aAAa,GAAW;EAC5B,WAAW,EAAE,CAAC;EACd,UAAU,EAAE,CAAC;EACb,WAAW,EAAE,CAAC;EACd,OAAO,EAAE,CAAC;CACX,CAAC;AACF,MAAM,aAAa,GAAG,CAAC,CAAC,CAAC;AACzB,MAAM,CAAC,OAAO,OAAO,kBAAkB;EAMrC,YAAoB,GAAW;IAAX,QAAG,GAAH,GAAG,CAAQ;IALvB,4BAAuB,GAAsD,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAClH,6BAA6B;IACrB,mBAAc,GAA2C,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC;IACxG,WAAM,GAA2C,EAAE,KAAK,oBAAO,aAAa,CAAE,EAAE,KAAK,oBAAO,aAAa,CAAE,EAAE,CAAC;EAEpF,CAAC;EAEnC,MAAM,CAAC,qBAAqB,CAAC,WAAmB,EAAE,UAAkB,EAAE,cAAsB,CAAC;IAC3F,OAAO,WAAW,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;EACpE,CAAC;EAED,SAAS,CAAC,MAAc,EAAE,SAAiC;IACzD,MAAM,kBAAkB,GAAG,kBAAkB,CAAC,qBAAqB,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;IAC/H,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,mCACjB,MAAM,KACT,OAAO,EAAE,kBAAkB,GAAG,MAAM,CAAC,UAAU,EAC/C,kBAAkB,GACnB,CAAC;EACJ,CAAC;EAED,wCAAwC;EACxC,KAAK,CAAC,SAAS,CAAC,CAA+B;IAC7C,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAE/B,MAAM,cAAc,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;MAC3D,MAAM,WAAW,GAAG,MAAM,CAAC,qBAAqB,CAAC,GAAG,EAAE;QACpD,OAAO,EAAE,CAAC;MACZ,CAAC,CAAC,CAAC;MACH,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAC7E,CAAC,CAAC,CAAC;IACH,IAAI;MACF,MAAM,cAAc,CAAC;MACrB,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;MAC3C,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;MACvC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;MAC7E,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;MACjD,IAAI,CAAC,GAAG,CAAC,WAAW,iCACf,CAAC,KACJ,UAAU,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,IACzF,CAAC;KAEJ;IAAC,OAAO,EAAE,EAAE;MACX,MAAM,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC;KACjC;EACH,CAAC;EAED,2BAA2B;EAC3B,MAAM,CACJ,UAAkB,EAClB,SAAiC,EACjC,KAAK,GAAG,KAAK,EACb,KAAc,EACd,OAAO,GAAG,KAAK;IAEf,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IAC7B,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,KAAK,UAAU,EAAE;MAC3D,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,GAAG,aAAa,CAAC;MAC/C,OAAO;KACR;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IACxC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC;MACpB,SAAS,EAAE,SAAS;MACpB,UAAU,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU;MAC5E,KAAK;MACL,OAAO;KACR,CAAC,CAAC;EACL,CAAC;EAEO,SAAS,CAAC,SAAiC;IACjD,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;EAChC,CAAC;EAED,qDAAqD;EAC7C,cAAc,CAAC,CAAS,EAAE,KAAa;IAC7C,IAAI,CAAC,GAAG,CAAC,EAAE;MACT,OAAO,aAAa,CAAC;KACtB;IAED,IAAI,CAAC,GAAG,KAAK,CAAC,OAAO,EAAE;MACrB,OAAO,KAAK,CAAC,OAAO,CAAC;KACtB;IACD,OAAO,CAAC,CAAC;EACX,CAAC;EAED,2DAA2D;EACnD,YAAY,CAAC,SAAiC;IACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC;IACzD,IAAI,QAAQ,EAAE;MACZ,QAAQ,EAAE,CAAC;MACX,IAAI,CAAC,uBAAuB,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;KAChD;EACH,CAAC;EAED,mDAAmD;EAC3C,OAAO,CAAC,GAAW,EAAE,KAAa,EAAE,SAAkB,IAAI;IAChE,MAAM,QAAQ,GAAW,KAAK,CAAC,UAAU,CAAC;IAC1C,MAAM,IAAI,GAAqB,CAAC,CAAC,EAAE,KAAK,CAAC,kBAAkB,GAAG,QAAQ,CAAC,CAAC;IACxE,MAAM,EAAE,GAAqB,CAAC,CAAC,EAAE,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC;IACxE,IAAI,MAAM,EAAE;MACV,OAAO,UAAU,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;KAClC;IACD,OAAO,UAAU,CAAC,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;EACnC,CAAC;CACF","sourcesContent":["import { scaleValue } from '../utils';\nimport { RevoGrid } from '../interfaces';\n\ninterface Config {\n beforeScroll(e: RevoGrid.ViewPortScrollEvent): void;\n afterScroll(e: RevoGrid.ViewPortScrollEvent): void;\n}\n\ntype Params = {\n contentSize: number;\n virtualContentSize?: number;\n clientSize: number;\n virtualSize: number;\n maxSize?: number;\n};\n\nconst initialParams: Params = {\n contentSize: 0,\n clientSize: 0,\n virtualSize: 0,\n maxSize: 0,\n};\nconst NO_COORDINATE = -1;\nexport default class LocalScrollService {\n private preventArtificialScroll: Record<RevoGrid.DimensionType, () => void | null> = { rgRow: null, rgCol: null };\n // to check if scroll changed\n private previousScroll: Record<RevoGrid.DimensionType, number> = { rgRow: NO_COORDINATE, rgCol: NO_COORDINATE };\n private params: Record<RevoGrid.DimensionType, Params> = { rgRow: { ...initialParams }, rgCol: { ...initialParams } };\n\n constructor(private cfg: Config) {}\n\n static getVirtualContentSize(contentSize: number, clientSize: number, virtualSize: number = 0): number {\n return contentSize + (virtualSize ? clientSize - virtualSize : 0);\n }\n\n setParams(params: Params, dimension: RevoGrid.DimensionType) {\n const virtualContentSize = LocalScrollService.getVirtualContentSize(params.contentSize, params.clientSize, params.virtualSize);\n this.params[dimension] = {\n ...params,\n maxSize: virtualContentSize - params.clientSize,\n virtualContentSize,\n };\n }\n\n // apply scroll values after scroll done\n async setScroll(e: RevoGrid.ViewPortScrollEvent) {\n this.cancelScroll(e.dimension);\n\n const frameAnimation = new Promise<void>((resolve, reject) => {\n const animationId = window.requestAnimationFrame(() => {\n resolve();\n });\n this.preventArtificialScroll[e.dimension] = reject.bind(null, animationId);\n });\n try {\n await frameAnimation;\n const params = this.getParams(e.dimension);\n e.coordinate = Math.ceil(e.coordinate);\n this.previousScroll[e.dimension] = this.wrapCoordinate(e.coordinate, params);\n this.preventArtificialScroll[e.dimension] = null;\n this.cfg.afterScroll({\n ...e,\n coordinate: params.virtualSize ? this.convert(e.coordinate, params, false) : e.coordinate,\n });\n\n } catch (id) {\n window.cancelAnimationFrame(id);\n }\n }\n\n // initiate scrolling event\n scroll(\n coordinate: number,\n dimension: RevoGrid.DimensionType,\n force = false,\n delta?: number,\n outside = false\n ) {\n this.cancelScroll(dimension);\n if (!force && this.previousScroll[dimension] === coordinate) {\n this.previousScroll[dimension] = NO_COORDINATE;\n return;\n }\n\n const param = this.getParams(dimension);\n this.cfg.beforeScroll({\n dimension: dimension,\n coordinate: param.virtualSize ? this.convert(coordinate, param) : coordinate,\n delta,\n outside\n });\n }\n\n private getParams(dimension: RevoGrid.DimensionType): Params {\n return this.params[dimension];\n }\n\n // check if scroll outside of region to avoid looping\n private wrapCoordinate(c: number, param: Params): number {\n if (c < 0) {\n return NO_COORDINATE;\n }\n\n if (c > param.maxSize) {\n return param.maxSize;\n }\n return c;\n }\n\n // prevent already started scroll, performance optimization\n private cancelScroll(dimension: RevoGrid.DimensionType) {\n const canceler = this.preventArtificialScroll[dimension];\n if (canceler) {\n canceler();\n this.preventArtificialScroll[dimension] = null;\n }\n }\n\n /* convert virtual to real and back, scale range */\n private convert(pos: number, param: Params, toReal: boolean = true): number {\n const minRange: number = param.clientSize;\n const from: [number, number] = [0, param.virtualContentSize - minRange];\n const to: [number, number] = [0, param.contentSize - param.virtualSize];\n if (toReal) {\n return scaleValue(pos, from, to);\n }\n return scaleValue(pos, to, from);\n }\n}\n"]}
|
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
import { RevoGrid } from '../interfaces';
|
|
3
|
-
type Props = {
|
|
1
|
+
export type ResizeProps = {
|
|
4
2
|
active: ('r' | 'rb' | 'b' | 'lb' | 'l' | 'lt' | 't' | 'rt')[];
|
|
5
3
|
fitParent: boolean;
|
|
6
4
|
minWidth: number;
|
|
@@ -9,7 +7,7 @@ type Props = {
|
|
|
9
7
|
maxWidth?: number;
|
|
10
8
|
maxHeight?: number;
|
|
11
9
|
onResize?(e: ResizeEvent): void;
|
|
12
|
-
onDoubleClick?(): void;
|
|
10
|
+
onDoubleClick?(originalEvent: MouseEvent): void;
|
|
13
11
|
};
|
|
14
12
|
export type ResizeEvent = {
|
|
15
13
|
eventName: string;
|
|
@@ -18,6 +16,11 @@ export type ResizeEvent = {
|
|
|
18
16
|
width?: number;
|
|
19
17
|
height?: number;
|
|
20
18
|
};
|
|
19
|
+
export declare enum ResizeEvents {
|
|
20
|
+
start = "resize:start",
|
|
21
|
+
move = "resize:move",
|
|
22
|
+
end = "resize:end"
|
|
23
|
+
}
|
|
21
24
|
export declare class ResizeDirective {
|
|
22
25
|
private initialProps;
|
|
23
26
|
private $event?;
|
|
@@ -39,7 +42,7 @@ export declare class ResizeDirective {
|
|
|
39
42
|
private disableCalcMap;
|
|
40
43
|
private mouseMoveFunc;
|
|
41
44
|
private mouseUpFunc;
|
|
42
|
-
constructor(initialProps: Partial<
|
|
45
|
+
constructor(initialProps: Partial<ResizeProps>, $event?: (e: ResizeEvent) => void);
|
|
43
46
|
set($el: HTMLElement): void;
|
|
44
47
|
emitEvent(eventName: string, additionalOptions?: any): void;
|
|
45
48
|
private static isTouchEvent;
|
|
@@ -51,5 +54,3 @@ export declare class ResizeDirective {
|
|
|
51
54
|
private bindMove;
|
|
52
55
|
private unbindMove;
|
|
53
56
|
}
|
|
54
|
-
export declare const ResizableElement: (props: Partial<Props> & RevoGrid.CellProps, children: VNode[]) => any;
|
|
55
|
-
export {};
|