@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
|
@@ -0,0 +1,400 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Built by Revolist
|
|
3
|
+
*/
|
|
4
|
+
import { h } from './index-05947c5f.js';
|
|
5
|
+
import { h as getVisibleSourceItem, H as CELL_CLASS, I as DISABLED_CLASS, g as getSourceItem, s as setSourceByVirtualIndex, J as scaleValue } from './index-728bf6e3.js';
|
|
6
|
+
import { k as isGroupingColumn, l as lodash, n as getRange } from './viewport.helpers-c08e729e.js';
|
|
7
|
+
|
|
8
|
+
class ColumnService {
|
|
9
|
+
get columns() {
|
|
10
|
+
return getVisibleSourceItem(this.source);
|
|
11
|
+
}
|
|
12
|
+
constructor(dataStore, source) {
|
|
13
|
+
this.dataStore = dataStore;
|
|
14
|
+
this.source = source;
|
|
15
|
+
this.unsubscribe = [];
|
|
16
|
+
this.hasGrouping = false;
|
|
17
|
+
this.unsubscribe.push(source.onChange('source', s => this.checkGrouping(s)));
|
|
18
|
+
this.checkGrouping(source.get('source'));
|
|
19
|
+
this.type = source.get('type');
|
|
20
|
+
}
|
|
21
|
+
checkGrouping(cols) {
|
|
22
|
+
for (let rgCol of cols) {
|
|
23
|
+
if (isGroupingColumn(rgCol)) {
|
|
24
|
+
this.hasGrouping = true;
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
this.hasGrouping = false;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
isReadOnly(r, c) {
|
|
31
|
+
var _a;
|
|
32
|
+
const readOnly = (_a = this.columns[c]) === null || _a === void 0 ? void 0 : _a.readonly;
|
|
33
|
+
if (typeof readOnly === 'function') {
|
|
34
|
+
const data = this.rowDataModel(r, c);
|
|
35
|
+
return readOnly(data);
|
|
36
|
+
}
|
|
37
|
+
return readOnly;
|
|
38
|
+
}
|
|
39
|
+
static doMerge(existing, extra) {
|
|
40
|
+
let props = Object.assign(Object.assign({}, extra), existing);
|
|
41
|
+
// extend existing props
|
|
42
|
+
if (extra.class) {
|
|
43
|
+
if (typeof extra.class === 'object' && typeof props.class === 'object') {
|
|
44
|
+
props.class = Object.assign(Object.assign({}, extra.class), props.class);
|
|
45
|
+
}
|
|
46
|
+
else if (typeof extra.class === 'string' && typeof props.class === 'object') {
|
|
47
|
+
props.class[extra.class] = true;
|
|
48
|
+
}
|
|
49
|
+
else if (typeof props.class === 'string') {
|
|
50
|
+
props.class += ' ' + extra.class;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
if (extra.style) {
|
|
54
|
+
props.style = Object.assign(Object.assign({}, extra.style), props.style);
|
|
55
|
+
}
|
|
56
|
+
return props;
|
|
57
|
+
}
|
|
58
|
+
mergeProperties(r, c, defaultProps) {
|
|
59
|
+
var _a;
|
|
60
|
+
const cellClass = {
|
|
61
|
+
[CELL_CLASS]: true,
|
|
62
|
+
[DISABLED_CLASS]: this.isReadOnly(r, c),
|
|
63
|
+
};
|
|
64
|
+
let props = Object.assign(Object.assign({}, defaultProps), { class: cellClass });
|
|
65
|
+
const extraPropsFunc = (_a = this.columns[c]) === null || _a === void 0 ? void 0 : _a.cellProperties;
|
|
66
|
+
if (extraPropsFunc) {
|
|
67
|
+
const data = this.rowDataModel(r, c);
|
|
68
|
+
const extra = extraPropsFunc(data);
|
|
69
|
+
if (!extra) {
|
|
70
|
+
return props;
|
|
71
|
+
}
|
|
72
|
+
return ColumnService.doMerge(props, extra);
|
|
73
|
+
}
|
|
74
|
+
return props;
|
|
75
|
+
}
|
|
76
|
+
customRenderer(c, model, providers, additionalData) {
|
|
77
|
+
var _a;
|
|
78
|
+
const tpl = (_a = this.columns[c]) === null || _a === void 0 ? void 0 : _a.cellTemplate;
|
|
79
|
+
if (tpl) {
|
|
80
|
+
return tpl(h, Object.assign(Object.assign({}, model), { providers }), additionalData);
|
|
81
|
+
}
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
getRowClass(r, prop) {
|
|
85
|
+
const model = getSourceItem(this.dataStore, r) || {};
|
|
86
|
+
return model[prop] || '';
|
|
87
|
+
}
|
|
88
|
+
getCellData(r, c) {
|
|
89
|
+
const data = this.rowDataModel(r, c);
|
|
90
|
+
return ColumnService.getData(data.model[data.prop]);
|
|
91
|
+
}
|
|
92
|
+
getSaveData(rowIndex, c, val) {
|
|
93
|
+
if (typeof val === 'undefined') {
|
|
94
|
+
val = this.getCellData(rowIndex, c);
|
|
95
|
+
}
|
|
96
|
+
const data = this.rowDataModel(rowIndex, c);
|
|
97
|
+
return {
|
|
98
|
+
prop: data.prop,
|
|
99
|
+
rowIndex,
|
|
100
|
+
val,
|
|
101
|
+
model: data.model,
|
|
102
|
+
type: this.dataStore.get('type'),
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
getCellEditor(_r, c, editors) {
|
|
106
|
+
var _a;
|
|
107
|
+
const editor = (_a = this.columns[c]) === null || _a === void 0 ? void 0 : _a.editor;
|
|
108
|
+
if (!editor) {
|
|
109
|
+
return undefined;
|
|
110
|
+
}
|
|
111
|
+
// reference
|
|
112
|
+
if (typeof editor === 'string') {
|
|
113
|
+
return editors[editor];
|
|
114
|
+
}
|
|
115
|
+
return editor;
|
|
116
|
+
}
|
|
117
|
+
rowDataModel(rowIndex, c) {
|
|
118
|
+
const column = this.columns[c];
|
|
119
|
+
const prop = column === null || column === void 0 ? void 0 : column.prop;
|
|
120
|
+
const model = getSourceItem(this.dataStore, rowIndex) || {};
|
|
121
|
+
return {
|
|
122
|
+
prop,
|
|
123
|
+
model,
|
|
124
|
+
data: this.dataStore.get('source'),
|
|
125
|
+
column,
|
|
126
|
+
rowIndex,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
getRangeData(d, columns) {
|
|
130
|
+
var _a;
|
|
131
|
+
const changed = {};
|
|
132
|
+
// get original length sizes
|
|
133
|
+
const copyColLength = d.oldRange.x1 - d.oldRange.x + 1;
|
|
134
|
+
const copyRowLength = d.oldRange.y1 - d.oldRange.y + 1;
|
|
135
|
+
const mapping = {};
|
|
136
|
+
// rows
|
|
137
|
+
for (let rowIndex = d.newRange.y, i = 0; rowIndex < d.newRange.y1 + 1; rowIndex++, i++) {
|
|
138
|
+
// copy original data link
|
|
139
|
+
const oldRowIndex = d.oldRange.y + i % copyRowLength;
|
|
140
|
+
const copyRow = getSourceItem(this.dataStore, oldRowIndex) || {};
|
|
141
|
+
// columns
|
|
142
|
+
for (let colIndex = d.newRange.x, j = 0; colIndex < d.newRange.x1 + 1; colIndex++, j++) {
|
|
143
|
+
// check if old range area
|
|
144
|
+
if (rowIndex >= d.oldRange.y && rowIndex <= d.oldRange.y1 && colIndex >= d.oldRange.x && colIndex <= d.oldRange.x1) {
|
|
145
|
+
continue;
|
|
146
|
+
}
|
|
147
|
+
// requested column beyond range
|
|
148
|
+
if (!this.columns[colIndex]) {
|
|
149
|
+
continue;
|
|
150
|
+
}
|
|
151
|
+
const prop = (_a = this.columns[colIndex]) === null || _a === void 0 ? void 0 : _a.prop;
|
|
152
|
+
const copyColIndex = d.oldRange.x + j % copyColLength;
|
|
153
|
+
const copyColumnProp = columns[copyColIndex].prop;
|
|
154
|
+
/** if can write */
|
|
155
|
+
if (!this.isReadOnly(rowIndex, colIndex)) {
|
|
156
|
+
/** to show before save */
|
|
157
|
+
if (!changed[rowIndex]) {
|
|
158
|
+
changed[rowIndex] = {};
|
|
159
|
+
}
|
|
160
|
+
changed[rowIndex][prop] = copyRow[copyColumnProp];
|
|
161
|
+
/** Generate mapping object */
|
|
162
|
+
if (!mapping[rowIndex]) {
|
|
163
|
+
mapping[rowIndex] = {};
|
|
164
|
+
}
|
|
165
|
+
mapping[rowIndex][prop] = {
|
|
166
|
+
colProp: copyColumnProp,
|
|
167
|
+
rowIndex: oldRowIndex
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
return {
|
|
173
|
+
changed,
|
|
174
|
+
mapping,
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
getTransformedDataToApply(start, data) {
|
|
178
|
+
const changed = {};
|
|
179
|
+
const copyRowLength = data.length;
|
|
180
|
+
const colLength = this.columns.length;
|
|
181
|
+
const rowLength = this.dataStore.get('items').length;
|
|
182
|
+
// rows
|
|
183
|
+
let rowIndex = start.y;
|
|
184
|
+
let maxCol = 0;
|
|
185
|
+
for (let i = 0; rowIndex < rowLength && i < copyRowLength; rowIndex++, i++) {
|
|
186
|
+
// copy original data link
|
|
187
|
+
const copyRow = data[i % copyRowLength];
|
|
188
|
+
const copyColLength = (copyRow === null || copyRow === void 0 ? void 0 : copyRow.length) || 0;
|
|
189
|
+
// columns
|
|
190
|
+
let colIndex = start.x;
|
|
191
|
+
for (let j = 0; colIndex < colLength && j < copyColLength; colIndex++, j++) {
|
|
192
|
+
const p = this.columns[colIndex].prop;
|
|
193
|
+
const currentCol = j % colLength;
|
|
194
|
+
/** if can write */
|
|
195
|
+
if (!this.isReadOnly(rowIndex, colIndex)) {
|
|
196
|
+
/** to show before save */
|
|
197
|
+
if (!changed[rowIndex]) {
|
|
198
|
+
changed[rowIndex] = {};
|
|
199
|
+
}
|
|
200
|
+
changed[rowIndex][p] = copyRow[currentCol];
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
maxCol = Math.max(maxCol, colIndex - 1);
|
|
204
|
+
}
|
|
205
|
+
const range = getRange(start, {
|
|
206
|
+
y: rowIndex - 1,
|
|
207
|
+
x: maxCol,
|
|
208
|
+
});
|
|
209
|
+
return {
|
|
210
|
+
changed,
|
|
211
|
+
range,
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
applyRangeData(data) {
|
|
215
|
+
const items = {};
|
|
216
|
+
for (let rowIndex in data) {
|
|
217
|
+
const oldModel = (items[rowIndex] = getSourceItem(this.dataStore, parseInt(rowIndex, 10)));
|
|
218
|
+
if (!oldModel) {
|
|
219
|
+
continue;
|
|
220
|
+
}
|
|
221
|
+
for (let prop in data[rowIndex]) {
|
|
222
|
+
oldModel[prop] = data[rowIndex][prop];
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
setSourceByVirtualIndex(this.dataStore, items);
|
|
226
|
+
}
|
|
227
|
+
getRangeStaticData(d, value) {
|
|
228
|
+
const changed = {};
|
|
229
|
+
// rows
|
|
230
|
+
for (let rowIndex = d.y, i = 0; rowIndex < d.y1 + 1; rowIndex++, i++) {
|
|
231
|
+
// columns
|
|
232
|
+
for (let colIndex = d.x, j = 0; colIndex < d.x1 + 1; colIndex++, j++) {
|
|
233
|
+
// requested column beyond range
|
|
234
|
+
if (!this.columns[colIndex]) {
|
|
235
|
+
continue;
|
|
236
|
+
}
|
|
237
|
+
const p = this.columns[colIndex].prop;
|
|
238
|
+
/** if can write */
|
|
239
|
+
if (!this.isReadOnly(rowIndex, colIndex)) {
|
|
240
|
+
/** to show before save */
|
|
241
|
+
if (!changed[rowIndex]) {
|
|
242
|
+
changed[rowIndex] = {};
|
|
243
|
+
}
|
|
244
|
+
changed[rowIndex][p] = value;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
return changed;
|
|
249
|
+
}
|
|
250
|
+
getRangeTransformedToProps(d, store) {
|
|
251
|
+
var _a;
|
|
252
|
+
const area = [];
|
|
253
|
+
const type = this.dataStore.get('type');
|
|
254
|
+
// rows
|
|
255
|
+
for (let rowIndex = d.y, i = 0; rowIndex < d.y1 + 1; rowIndex++, i++) {
|
|
256
|
+
// columns
|
|
257
|
+
for (let colIndex = d.x, j = 0; colIndex < d.x1 + 1; colIndex++, j++) {
|
|
258
|
+
const prop = (_a = this.columns[colIndex]) === null || _a === void 0 ? void 0 : _a.prop;
|
|
259
|
+
area.push({
|
|
260
|
+
prop,
|
|
261
|
+
rowIndex,
|
|
262
|
+
model: getSourceItem(store, rowIndex),
|
|
263
|
+
type,
|
|
264
|
+
});
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
return area;
|
|
268
|
+
}
|
|
269
|
+
copyRangeArray(range, store) {
|
|
270
|
+
const cols = [...this.columns];
|
|
271
|
+
const props = lodash.slice(cols, range.x, range.x1 + 1).map(v => v.prop);
|
|
272
|
+
const toCopy = [];
|
|
273
|
+
const mapping = {};
|
|
274
|
+
// rows indexes
|
|
275
|
+
for (let i = range.y; i <= range.y1; i++) {
|
|
276
|
+
const rgRow = [];
|
|
277
|
+
mapping[i] = {};
|
|
278
|
+
// columns indexes
|
|
279
|
+
for (let prop of props) {
|
|
280
|
+
const item = getSourceItem(store, i);
|
|
281
|
+
// if no item - skip
|
|
282
|
+
if (!item) {
|
|
283
|
+
continue;
|
|
284
|
+
}
|
|
285
|
+
const val = item[prop];
|
|
286
|
+
rgRow.push(val);
|
|
287
|
+
mapping[i][prop] = val;
|
|
288
|
+
}
|
|
289
|
+
toCopy.push(rgRow);
|
|
290
|
+
}
|
|
291
|
+
return {
|
|
292
|
+
data: toCopy,
|
|
293
|
+
mapping
|
|
294
|
+
};
|
|
295
|
+
}
|
|
296
|
+
static getData(val) {
|
|
297
|
+
if (typeof val === 'undefined' || val === null) {
|
|
298
|
+
return '';
|
|
299
|
+
}
|
|
300
|
+
return val;
|
|
301
|
+
}
|
|
302
|
+
destroy() {
|
|
303
|
+
this.unsubscribe.forEach(f => f());
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
const initialParams = {
|
|
308
|
+
contentSize: 0,
|
|
309
|
+
clientSize: 0,
|
|
310
|
+
virtualSize: 0,
|
|
311
|
+
maxSize: 0,
|
|
312
|
+
};
|
|
313
|
+
const NO_COORDINATE = -1;
|
|
314
|
+
class LocalScrollService {
|
|
315
|
+
constructor(cfg) {
|
|
316
|
+
this.cfg = cfg;
|
|
317
|
+
this.preventArtificialScroll = { rgRow: null, rgCol: null };
|
|
318
|
+
// to check if scroll changed
|
|
319
|
+
this.previousScroll = { rgRow: NO_COORDINATE, rgCol: NO_COORDINATE };
|
|
320
|
+
this.params = { rgRow: Object.assign({}, initialParams), rgCol: Object.assign({}, initialParams) };
|
|
321
|
+
}
|
|
322
|
+
static getVirtualContentSize(contentSize, clientSize, virtualSize = 0) {
|
|
323
|
+
return contentSize + (virtualSize ? clientSize - virtualSize : 0);
|
|
324
|
+
}
|
|
325
|
+
setParams(params, dimension) {
|
|
326
|
+
const virtualContentSize = LocalScrollService.getVirtualContentSize(params.contentSize, params.clientSize, params.virtualSize);
|
|
327
|
+
this.params[dimension] = Object.assign(Object.assign({}, params), { maxSize: virtualContentSize - params.clientSize, virtualContentSize });
|
|
328
|
+
}
|
|
329
|
+
// apply scroll values after scroll done
|
|
330
|
+
async setScroll(e) {
|
|
331
|
+
this.cancelScroll(e.dimension);
|
|
332
|
+
const frameAnimation = new Promise((resolve, reject) => {
|
|
333
|
+
const animationId = window.requestAnimationFrame(() => {
|
|
334
|
+
resolve();
|
|
335
|
+
});
|
|
336
|
+
this.preventArtificialScroll[e.dimension] = reject.bind(null, animationId);
|
|
337
|
+
});
|
|
338
|
+
try {
|
|
339
|
+
await frameAnimation;
|
|
340
|
+
const params = this.getParams(e.dimension);
|
|
341
|
+
e.coordinate = Math.ceil(e.coordinate);
|
|
342
|
+
this.previousScroll[e.dimension] = this.wrapCoordinate(e.coordinate, params);
|
|
343
|
+
this.preventArtificialScroll[e.dimension] = null;
|
|
344
|
+
this.cfg.afterScroll(Object.assign(Object.assign({}, e), { coordinate: params.virtualSize ? this.convert(e.coordinate, params, false) : e.coordinate }));
|
|
345
|
+
}
|
|
346
|
+
catch (id) {
|
|
347
|
+
window.cancelAnimationFrame(id);
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
// initiate scrolling event
|
|
351
|
+
scroll(coordinate, dimension, force = false, delta, outside = false) {
|
|
352
|
+
this.cancelScroll(dimension);
|
|
353
|
+
if (!force && this.previousScroll[dimension] === coordinate) {
|
|
354
|
+
this.previousScroll[dimension] = NO_COORDINATE;
|
|
355
|
+
return;
|
|
356
|
+
}
|
|
357
|
+
const param = this.getParams(dimension);
|
|
358
|
+
this.cfg.beforeScroll({
|
|
359
|
+
dimension: dimension,
|
|
360
|
+
coordinate: param.virtualSize ? this.convert(coordinate, param) : coordinate,
|
|
361
|
+
delta,
|
|
362
|
+
outside
|
|
363
|
+
});
|
|
364
|
+
}
|
|
365
|
+
getParams(dimension) {
|
|
366
|
+
return this.params[dimension];
|
|
367
|
+
}
|
|
368
|
+
// check if scroll outside of region to avoid looping
|
|
369
|
+
wrapCoordinate(c, param) {
|
|
370
|
+
if (c < 0) {
|
|
371
|
+
return NO_COORDINATE;
|
|
372
|
+
}
|
|
373
|
+
if (c > param.maxSize) {
|
|
374
|
+
return param.maxSize;
|
|
375
|
+
}
|
|
376
|
+
return c;
|
|
377
|
+
}
|
|
378
|
+
// prevent already started scroll, performance optimization
|
|
379
|
+
cancelScroll(dimension) {
|
|
380
|
+
const canceler = this.preventArtificialScroll[dimension];
|
|
381
|
+
if (canceler) {
|
|
382
|
+
canceler();
|
|
383
|
+
this.preventArtificialScroll[dimension] = null;
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
/* convert virtual to real and back, scale range */
|
|
387
|
+
convert(pos, param, toReal = true) {
|
|
388
|
+
const minRange = param.clientSize;
|
|
389
|
+
const from = [0, param.virtualContentSize - minRange];
|
|
390
|
+
const to = [0, param.contentSize - param.virtualSize];
|
|
391
|
+
if (toReal) {
|
|
392
|
+
return scaleValue(pos, from, to);
|
|
393
|
+
}
|
|
394
|
+
return scaleValue(pos, to, from);
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
export { ColumnService as C, LocalScrollService as L };
|
|
399
|
+
|
|
400
|
+
//# sourceMappingURL=localScrollService-884d8952.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"file":"localScrollService-884d8952.js","mappings":"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","names":["slice"],"sources":["./src/components/data/columnService.ts","./src/services/localScrollService.ts"],"sourcesContent":["import { h, VNode } from '@stencil/core';\nimport { DataSourceState, getSourceItem, getVisibleSourceItem, setSourceByVirtualIndex } from '../../store/dataSource/data.store';\nimport { CELL_CLASS, DISABLED_CLASS } from '../../utils/consts';\nimport { Edition, Observable, RevoGrid, Selection } from '../../interfaces';\nimport { getRange } from '../../store/selection/selection.helpers';\n\nimport { isGroupingColumn } from '../../plugins/groupingRow/grouping.service';\nimport { slice } from 'lodash';\n\nexport type ColumnSource = Observable<DataSourceState<RevoGrid.ColumnRegular, RevoGrid.DimensionCols>>;\nexport type RowSource = Observable<DataSourceState<RevoGrid.DataType, RevoGrid.DimensionRows>>;\n\nexport type ColumnStores = {\n [T in RevoGrid.DimensionCols]: ColumnSource;\n};\nexport type RowStores = {\n [T in RevoGrid.DimensionRows]: RowSource;\n};\n\nexport default class ColumnService {\n private unsubscribe: { (): void }[] = [];\n get columns(): RevoGrid.ColumnRegular[] {\n return getVisibleSourceItem(this.source);\n }\n\n hasGrouping = false;\n type: RevoGrid.DimensionCols;\n\n constructor(private dataStore: RowSource, private source: ColumnSource) {\n this.unsubscribe.push(source.onChange('source', s => this.checkGrouping(s)));\n this.checkGrouping(source.get('source'));\n this.type = source.get('type');\n }\n\n private checkGrouping(cols: RevoGrid.ColumnRegular[]) {\n for (let rgCol of cols) {\n if (isGroupingColumn(rgCol)) {\n this.hasGrouping = true;\n return;\n }\n this.hasGrouping = false;\n }\n }\n\n isReadOnly(r: number, c: number): boolean {\n const readOnly: RevoGrid.ReadOnlyFormat = this.columns[c]?.readonly;\n if (typeof readOnly === 'function') {\n const data = this.rowDataModel(r, c);\n return readOnly(data);\n }\n return readOnly;\n }\n\n static doMerge(existing: RevoGrid.CellProps, extra: RevoGrid.CellProps) {\n let props: RevoGrid.CellProps = { ...extra, ...existing };\n // extend existing props\n if (extra.class) {\n if (typeof extra.class === 'object' && typeof props.class === 'object') {\n props.class = { ...extra.class, ...props.class };\n } else if (typeof extra.class === 'string' && typeof props.class === 'object') {\n props.class[extra.class] = true;\n } else if (typeof props.class === 'string') {\n props.class += ' ' + extra.class;\n }\n }\n if (extra.style) {\n props.style = { ...extra.style, ...props.style };\n }\n return props;\n }\n\n mergeProperties(r: number, c: number, defaultProps: RevoGrid.CellProps): RevoGrid.CellProps {\n const cellClass: { [key: string]: boolean } = {\n [CELL_CLASS]: true,\n [DISABLED_CLASS]: this.isReadOnly(r, c),\n };\n let props: RevoGrid.CellProps = {\n ...defaultProps,\n class: cellClass,\n };\n const extraPropsFunc = this.columns[c]?.cellProperties;\n if (extraPropsFunc) {\n const data = this.rowDataModel(r, c);\n const extra = extraPropsFunc(data);\n if (!extra) {\n return props;\n }\n return ColumnService.doMerge(props, extra);\n }\n return props;\n }\n\n customRenderer(\n c: number, model: RevoGrid.ColumnDataSchemaModel, providers: RevoGrid.Providers, additionalData: any\n ): VNode | string | void {\n const tpl = this.columns[c]?.cellTemplate;\n if (tpl) {\n return tpl(h, { ...model, providers }, additionalData);\n }\n return;\n }\n\n getRowClass(r: number, prop: string): string {\n const model = getSourceItem(this.dataStore, r) || {};\n return model[prop] || '';\n }\n\n getCellData(r: number, c: number): string {\n const data = this.rowDataModel(r, c);\n return ColumnService.getData(data.model[data.prop as number]);\n }\n\n getSaveData(rowIndex: number, c: number, val?: string): Edition.BeforeSaveDataDetails {\n if (typeof val === 'undefined') {\n val = this.getCellData(rowIndex, c);\n }\n const data = this.rowDataModel(rowIndex, c);\n return {\n prop: data.prop,\n rowIndex,\n val,\n model: data.model,\n type: this.dataStore.get('type'),\n };\n }\n\n getCellEditor(_r: number, c: number, editors: Edition.Editors): Edition.EditorCtr | undefined {\n const editor = this.columns[c]?.editor;\n if (!editor) {\n return undefined;\n }\n // reference\n if (typeof editor === 'string') {\n return editors[editor];\n }\n return editor;\n }\n\n rowDataModel(rowIndex: number, c: number): RevoGrid.ColumnDataSchemaModel {\n const column = this.columns[c];\n const prop: RevoGrid.ColumnProp | undefined = column?.prop;\n const model = getSourceItem(this.dataStore, rowIndex) || {};\n return {\n prop,\n model,\n data: this.dataStore.get('source'),\n column,\n rowIndex,\n };\n }\n\n getRangeData(d: Selection.ChangedRange, columns: RevoGrid.ColumnRegular[]): {\n changed: RevoGrid.DataLookup,\n mapping: Selection.OldNewRangeMapping,\n } {\n const changed: RevoGrid.DataLookup = {};\n\n // get original length sizes\n const copyColLength = d.oldRange.x1 - d.oldRange.x + 1;\n const copyRowLength = d.oldRange.y1 - d.oldRange.y + 1;\n const mapping: Selection.OldNewRangeMapping = {};\n\n // rows\n for (let rowIndex = d.newRange.y, i = 0; rowIndex < d.newRange.y1 + 1; rowIndex++, i++) {\n // copy original data link\n const oldRowIndex = d.oldRange.y + i % copyRowLength;\n const copyRow = getSourceItem(this.dataStore, oldRowIndex) || {};\n\n // columns\n for (let colIndex = d.newRange.x, j = 0; colIndex < d.newRange.x1 + 1; colIndex++, j++) {\n // check if old range area\n if (rowIndex >= d.oldRange.y && rowIndex <= d.oldRange.y1 && colIndex >= d.oldRange.x && colIndex <= d.oldRange.x1) {\n continue;\n }\n\n // requested column beyond range\n if (!this.columns[colIndex]) {\n continue;\n }\n const prop = this.columns[colIndex]?.prop;\n const copyColIndex = d.oldRange.x + j % copyColLength;\n const copyColumnProp = columns[copyColIndex].prop;\n\n /** if can write */\n if (!this.isReadOnly(rowIndex, colIndex)) {\n /** to show before save */\n if (!changed[rowIndex]) {\n changed[rowIndex] = {};\n }\n changed[rowIndex][prop] = copyRow[copyColumnProp];\n /** Generate mapping object */\n if (!mapping[rowIndex]) {\n mapping[rowIndex] = {};\n }\n mapping[rowIndex][prop] = {\n colProp: copyColumnProp,\n rowIndex: oldRowIndex\n };\n }\n }\n }\n return {\n changed,\n mapping,\n };\n }\n\n getTransformedDataToApply(\n start: Selection.Cell,\n data: RevoGrid.DataFormat[][],\n ): {\n changed: RevoGrid.DataLookup;\n range: Selection.RangeArea;\n } {\n const changed: RevoGrid.DataLookup = {};\n const copyRowLength = data.length;\n const colLength = this.columns.length;\n const rowLength = this.dataStore.get('items').length;\n // rows\n let rowIndex = start.y;\n let maxCol = 0;\n for (let i = 0; rowIndex < rowLength && i < copyRowLength; rowIndex++, i++) {\n // copy original data link\n const copyRow = data[i % copyRowLength];\n const copyColLength = copyRow?.length || 0;\n // columns\n let colIndex = start.x;\n for (let j = 0; colIndex < colLength && j < copyColLength; colIndex++, j++) {\n const p = this.columns[colIndex].prop;\n const currentCol = j % colLength;\n\n /** if can write */\n if (!this.isReadOnly(rowIndex, colIndex)) {\n /** to show before save */\n if (!changed[rowIndex]) {\n changed[rowIndex] = {};\n }\n changed[rowIndex][p] = copyRow[currentCol];\n }\n }\n maxCol = Math.max(maxCol, colIndex - 1);\n }\n const range = getRange(start, {\n y: rowIndex - 1,\n x: maxCol,\n });\n return {\n changed,\n range,\n };\n }\n\n applyRangeData(data: RevoGrid.DataLookup) {\n const items: Record<number, RevoGrid.DataType> = {};\n for (let rowIndex in data) {\n const oldModel = (items[rowIndex] = getSourceItem(this.dataStore, parseInt(rowIndex, 10)));\n if (!oldModel) {\n continue;\n }\n for (let prop in data[rowIndex]) {\n oldModel[prop] = data[rowIndex][prop];\n }\n }\n setSourceByVirtualIndex(this.dataStore, items);\n }\n\n getRangeStaticData(d: Selection.RangeArea, value: RevoGrid.DataFormat): RevoGrid.DataLookup {\n const changed: RevoGrid.DataLookup = {};\n\n // rows\n for (let rowIndex = d.y, i = 0; rowIndex < d.y1 + 1; rowIndex++, i++) {\n // columns\n for (let colIndex = d.x, j = 0; colIndex < d.x1 + 1; colIndex++, j++) {\n // requested column beyond range\n if (!this.columns[colIndex]) {\n continue;\n }\n const p = this.columns[colIndex].prop;\n\n /** if can write */\n if (!this.isReadOnly(rowIndex, colIndex)) {\n /** to show before save */\n if (!changed[rowIndex]) {\n changed[rowIndex] = {};\n }\n changed[rowIndex][p] = value;\n }\n }\n }\n return changed;\n }\n\n getRangeTransformedToProps(\n d: Selection.RangeArea,\n store: Observable<DataSourceState<RevoGrid.DataType, RevoGrid.DimensionRows>>,\n ) {\n const area: {\n prop: RevoGrid.ColumnProp,\n rowIndex: number,\n model: RevoGrid.DataSource,\n type: RevoGrid.MultiDimensionType,\n }[] = [];\n\n const type = this.dataStore.get('type');\n // rows\n for (let rowIndex = d.y, i = 0; rowIndex < d.y1 + 1; rowIndex++, i++) {\n // columns\n for (let colIndex = d.x, j = 0; colIndex < d.x1 + 1; colIndex++, j++) {\n const prop = this.columns[colIndex]?.prop;\n area.push({\n prop,\n rowIndex,\n model: getSourceItem(store, rowIndex),\n type,\n });\n }\n }\n return area;\n }\n\n copyRangeArray(\n range: Selection.RangeArea,\n store: Observable<DataSourceState<RevoGrid.DataType, RevoGrid.DimensionRows>>,\n ) {\n const cols = [...this.columns];\n const props = slice(cols, range.x, range.x1 + 1).map(v => v.prop);\n const toCopy: RevoGrid.DataFormat[][] = [];\n const mapping: { [rowIndex: number]: { [colProp: RevoGrid.ColumnProp]: any } } = {};\n\n // rows indexes\n for (let i = range.y; i <= range.y1; i++) {\n const rgRow: RevoGrid.DataFormat[] = [];\n mapping[i] = {};\n\n // columns indexes\n for (let prop of props) {\n const item = getSourceItem(store, i);\n\n // if no item - skip\n if (!item) {\n continue;\n }\n const val = item[prop];\n rgRow.push(val);\n mapping[i][prop] = val;\n }\n\n toCopy.push(rgRow);\n }\n return {\n data: toCopy,\n mapping\n };\n }\n\n static getData(val?: any) {\n if (typeof val === 'undefined' || val === null) {\n return '';\n }\n return val;\n }\n\n destroy() {\n this.unsubscribe.forEach(f => f());\n }\n}\n","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"],"version":3}
|