@revolist/revogrid 4.9.41 → 4.9.42
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/app-globals-c0b20747.js.map +1 -1
- package/dist/cjs/{column.drag.plugin-fcd892ec.js → column.drag.plugin-a6ef25bf.js} +1034 -149
- package/dist/cjs/column.drag.plugin-a6ef25bf.js.map +1 -0
- package/dist/cjs/column.service-831e1c92.js +1321 -0
- package/dist/cjs/column.service-831e1c92.js.map +1 -0
- package/dist/cjs/{column.service-26c61ed6.js → dimension.helpers-1927ad24.js} +490 -1273
- package/dist/cjs/dimension.helpers-1927ad24.js.map +1 -0
- package/dist/cjs/{edit.utils-179c0800.js → edit.utils-e51411f6.js} +3 -3
- package/dist/cjs/{edit.utils-179c0800.js.map → edit.utils-e51411f6.js.map} +1 -1
- package/dist/cjs/{header-cell-renderer-d879d95e.js → header-cell-renderer-53ecdcdb.js} +2 -2
- package/dist/cjs/{header-cell-renderer-d879d95e.js.map → header-cell-renderer-53ecdcdb.js.map} +1 -1
- package/dist/cjs/index.cjs.js +127 -69
- package/dist/cjs/index.cjs.js.map +1 -1
- package/dist/cjs/key.utils-96d0bc42.js +101 -0
- package/dist/cjs/key.utils-96d0bc42.js.map +1 -0
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/revo-grid.cjs.entry.js +310 -941
- package/dist/cjs/revo-grid.cjs.entry.js.map +1 -1
- package/dist/cjs/revo-grid.cjs.js +1 -1
- package/dist/cjs/revogr-attribution_7.cjs.entry.js +100 -70
- package/dist/cjs/revogr-attribution_7.cjs.entry.js.map +1 -1
- package/dist/cjs/revogr-clipboard_3.cjs.entry.js +11 -10
- package/dist/cjs/revogr-clipboard_3.cjs.entry.js.map +1 -1
- package/dist/cjs/revogr-data_4.cjs.entry.js +88 -78
- package/dist/cjs/revogr-data_4.cjs.entry.js.map +1 -1
- package/dist/cjs/revogr-filter-panel.cjs.entry.js +33 -13
- package/dist/cjs/revogr-filter-panel.cjs.entry.js.map +1 -1
- package/dist/cjs/{text-editor-b756d6b3.js → text-editor-1afffaf1.js} +6 -6
- package/dist/cjs/text-editor-1afffaf1.js.map +1 -0
- package/dist/cjs/{throttle-a57f51f9.js → throttle-bb713c73.js} +4 -4
- package/dist/cjs/{throttle-a57f51f9.js.map → throttle-bb713c73.js.map} +1 -1
- package/dist/cjs/{row-header-utils-c37f76e4.js → viewport.store-69b45f22.js} +15 -14
- package/dist/cjs/viewport.store-69b45f22.js.map +1 -0
- package/dist/collection/components/attribution/revogr-attribution.js +1 -1
- package/dist/collection/components/attribution/revogr-attribution.js.map +1 -1
- package/dist/collection/components/data/cell-renderer.js +11 -9
- package/dist/collection/components/data/cell-renderer.js.map +1 -1
- package/dist/collection/components/data/column.service.js +7 -19
- package/dist/collection/components/data/column.service.js.map +1 -1
- package/dist/collection/components/data/revogr-data-style.css +10 -5
- package/dist/collection/components/data/revogr-data.js +50 -28
- package/dist/collection/components/data/revogr-data.js.map +1 -1
- package/dist/collection/components/data/row-highlight.plugin.js.map +1 -1
- package/dist/collection/components/data/row-renderer.js.map +1 -1
- package/dist/collection/components/editors/revogr-edit-style.css +8 -5
- package/dist/collection/components/editors/revogr-edit.js +2 -2
- package/dist/collection/components/editors/revogr-edit.js.map +1 -1
- package/dist/collection/components/editors/text-editor.js +2 -2
- package/dist/collection/components/editors/text-editor.js.map +1 -1
- package/dist/collection/components/extra/revogr-extra.js +44 -6
- package/dist/collection/components/extra/revogr-extra.js.map +1 -1
- package/dist/collection/components/header/header-cell-renderer.js.map +1 -1
- package/dist/collection/components/header/header-renderer.js.map +1 -1
- package/dist/collection/components/header/resizable.element.js.map +1 -1
- package/dist/collection/components/header/revogr-header-style.css +8 -5
- package/dist/collection/components/header/revogr-header.js +9 -9
- package/dist/collection/components/header/revogr-header.js.map +1 -1
- package/dist/collection/components/order/order-renderer.js.map +1 -1
- package/dist/collection/components/order/revogr-order-editor.js +12 -24
- package/dist/collection/components/order/revogr-order-editor.js.map +1 -1
- package/dist/collection/components/overlay/autofill.service.js +7 -5
- package/dist/collection/components/overlay/autofill.service.js.map +1 -1
- package/dist/collection/components/overlay/keyboard.service.js +1 -4
- package/dist/collection/components/overlay/keyboard.service.js.map +1 -1
- package/dist/collection/components/overlay/revogr-overlay-selection.js +88 -72
- package/dist/collection/components/overlay/revogr-overlay-selection.js.map +1 -1
- package/dist/collection/components/overlay/revogr-overlay-style.css +8 -5
- package/dist/collection/components/overlay/selection.utils.js.map +1 -1
- package/dist/collection/components/revoGrid/plugin.service.js +81 -0
- package/dist/collection/components/revoGrid/plugin.service.js.map +1 -0
- package/dist/collection/components/revoGrid/revo-grid-style.css +18 -11
- package/dist/collection/components/revoGrid/revo-grid.js +289 -140
- package/dist/collection/components/revoGrid/revo-grid.js.map +1 -1
- package/dist/collection/components/revoGrid/viewport.service.js +9 -9
- package/dist/collection/components/revoGrid/viewport.service.js.map +1 -1
- package/dist/collection/components/rowHeaders/revogr-row-headers.js +1 -1
- package/dist/collection/components/rowHeaders/revogr-row-headers.js.map +1 -1
- package/dist/collection/components/rowHeaders/row-header-render.js.map +1 -1
- package/dist/collection/components/scroll/revogr-viewport-scroll-style.css +8 -5
- package/dist/collection/components/scroll/revogr-viewport-scroll.js +26 -20
- package/dist/collection/components/scroll/revogr-viewport-scroll.js.map +1 -1
- package/dist/collection/components/scrollable/revogr-scroll-style.css +10 -7
- package/dist/collection/components/scrollable/revogr-scroll-virtual.js +10 -8
- package/dist/collection/components/scrollable/revogr-scroll-virtual.js.map +1 -1
- package/dist/collection/components/selectionFocus/revogr-focus-style.css +8 -5
- package/dist/collection/components/selectionFocus/revogr-focus.js +10 -10
- package/dist/collection/components/selectionFocus/revogr-focus.js.map +1 -1
- package/dist/collection/components/selectionTempRange/revogr-temp-range-style.css +8 -5
- package/dist/collection/components/selectionTempRange/revogr-temp-range.js +6 -6
- package/dist/collection/components/selectionTempRange/revogr-temp-range.js.map +1 -1
- package/dist/collection/components/vnode/vnode-converter.js +1 -1
- package/dist/collection/components/vnode/vnode-converter.js.map +1 -1
- package/dist/collection/components/vnode/vnode.utils.js.map +1 -1
- package/dist/collection/index.js.map +1 -1
- package/dist/collection/plugins/add-rows-on-paste.plugin.js +40 -0
- package/dist/collection/plugins/add-rows-on-paste.plugin.js.map +1 -0
- package/dist/collection/plugins/base.plugin.js.map +1 -1
- package/dist/collection/plugins/column.auto-size.plugin.js +1 -1
- package/dist/collection/plugins/column.auto-size.plugin.js.map +1 -1
- package/dist/collection/plugins/column.stretch.plugin.js +1 -1
- package/dist/collection/plugins/column.stretch.plugin.js.map +1 -1
- package/dist/collection/plugins/export/csv.js +1 -1
- package/dist/collection/plugins/export/csv.js.map +1 -1
- package/dist/collection/plugins/export/export.plugin.js +4 -2
- package/dist/collection/plugins/export/export.plugin.js.map +1 -1
- package/dist/collection/plugins/filter/filter.indexed.js +1 -0
- package/dist/collection/plugins/filter/filter.indexed.js.map +1 -1
- package/dist/collection/plugins/filter/filter.panel.js +35 -35
- package/dist/collection/plugins/filter/filter.panel.js.map +1 -1
- package/dist/collection/plugins/filter/filter.plugin.js +117 -77
- package/dist/collection/plugins/filter/filter.plugin.js.map +1 -1
- package/dist/collection/plugins/filter/filter.style.css +19 -5
- package/dist/collection/plugins/filter/filter.types.js.map +1 -1
- package/dist/collection/plugins/groupingColumn/columnGroupsRenderer.js.map +1 -1
- package/dist/collection/plugins/groupingColumn/headerGroupRenderer.js.map +1 -1
- package/dist/collection/plugins/groupingRow/grouping.const.js +1 -0
- package/dist/collection/plugins/groupingRow/grouping.const.js.map +1 -1
- package/dist/collection/plugins/groupingRow/grouping.row.plugin.js +64 -79
- package/dist/collection/plugins/groupingRow/grouping.row.plugin.js.map +1 -1
- package/dist/collection/plugins/groupingRow/grouping.row.renderer.js +3 -3
- package/dist/collection/plugins/groupingRow/grouping.row.renderer.js.map +1 -1
- package/dist/collection/plugins/groupingRow/grouping.row.types.js.map +1 -1
- package/dist/collection/plugins/groupingRow/grouping.service.js +40 -6
- package/dist/collection/plugins/groupingRow/grouping.service.js.map +1 -1
- package/dist/collection/plugins/index.js +2 -0
- package/dist/collection/plugins/index.js.map +1 -1
- package/dist/collection/plugins/moveColumn/column.drag.plugin.js +12 -6
- package/dist/collection/plugins/moveColumn/column.drag.plugin.js.map +1 -1
- package/dist/collection/plugins/sorting/sorting.func.js +42 -0
- package/dist/collection/plugins/sorting/sorting.func.js.map +1 -0
- package/dist/collection/plugins/sorting/sorting.plugin.js +71 -69
- package/dist/collection/plugins/sorting/sorting.plugin.js.map +1 -1
- package/dist/collection/plugins/sorting/sorting.types.js +2 -0
- package/dist/collection/plugins/sorting/sorting.types.js.map +1 -0
- package/dist/collection/serve/controller.js +32 -15
- package/dist/collection/serve/data.js +18 -11
- package/dist/collection/services/column.data.provider.js +5 -2
- package/dist/collection/services/column.data.provider.js.map +1 -1
- package/dist/collection/services/data.provider.js +18 -7
- package/dist/collection/services/data.provider.js.map +1 -1
- package/dist/collection/services/dimension.provider.js +32 -33
- package/dist/collection/services/dimension.provider.js.map +1 -1
- package/dist/collection/services/selection.store.connector.js +1 -1
- package/dist/collection/services/selection.store.connector.js.map +1 -1
- package/dist/collection/store/dataSource/data.proxy.js +9 -15
- package/dist/collection/store/dataSource/data.proxy.js.map +1 -1
- package/dist/collection/store/dataSource/data.store.js +1 -1
- package/dist/collection/store/dataSource/data.store.js.map +1 -1
- package/dist/collection/store/dataSource/trimmed.plugin.js +5 -8
- package/dist/collection/store/dataSource/trimmed.plugin.js.map +1 -1
- package/dist/collection/store/dimension/dimension.helpers.js +7 -9
- package/dist/collection/store/dimension/dimension.helpers.js.map +1 -1
- package/dist/collection/store/dimension/dimension.recalculate.plugin.js +35 -0
- package/dist/collection/store/dimension/dimension.recalculate.plugin.js.map +1 -0
- package/dist/collection/store/dimension/dimension.store.js +47 -67
- package/dist/collection/store/dimension/dimension.store.js.map +1 -1
- package/dist/collection/store/dimension/dimension.trim.plugin.js +61 -0
- package/dist/collection/store/dimension/dimension.trim.plugin.js.map +1 -0
- package/dist/collection/store/selection/selection.store.js +1 -1
- package/dist/collection/store/selection/selection.store.js.map +1 -1
- package/dist/collection/store/vp/viewport.store.js +4 -2
- package/dist/collection/store/vp/viewport.store.js.map +1 -1
- package/dist/collection/types/events.js +6 -2
- package/dist/collection/types/events.js.map +1 -1
- package/dist/collection/types/interfaces.js +4 -0
- package/dist/collection/types/interfaces.js.map +1 -1
- package/dist/collection/types/plugin.types.js.map +1 -1
- package/dist/collection/types/selection.js.map +1 -1
- package/dist/collection/types/viewport.interfaces.js.map +1 -1
- package/dist/collection/utils/column.utils.js +13 -3
- package/dist/collection/utils/column.utils.js.map +1 -1
- package/dist/esm/app-globals-3a760941.js.map +1 -1
- package/dist/esm/{column.drag.plugin-3cc77986.js → column.drag.plugin-50f49fa9.js} +1012 -130
- package/dist/esm/column.drag.plugin-50f49fa9.js.map +1 -0
- package/dist/esm/column.service-a6a7c415.js +1281 -0
- package/dist/esm/column.service-a6a7c415.js.map +1 -0
- package/dist/esm/{debounce-72878ced.js → debounce-b3166f78.js} +2 -2
- package/dist/esm/{debounce-72878ced.js.map → debounce-b3166f78.js.map} +1 -1
- package/dist/esm/{column.service-751345b2.js → dimension.helpers-d0d709c4.js} +450 -1234
- package/dist/esm/dimension.helpers-d0d709c4.js.map +1 -0
- package/dist/esm/{edit.utils-6fc686b9.js → edit.utils-0ae0db50.js} +2 -2
- package/dist/esm/{edit.utils-6fc686b9.js.map → edit.utils-0ae0db50.js.map} +1 -1
- package/dist/esm/{header-cell-renderer-32d2ed96.js → header-cell-renderer-36ecbdef.js} +2 -2
- package/dist/esm/{header-cell-renderer-32d2ed96.js.map → header-cell-renderer-36ecbdef.js.map} +1 -1
- package/dist/esm/index.js +52 -11
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/{key.utils-17273f42.js → key.utils-7c3218d4.js} +2 -2
- package/dist/esm/{key.utils-17273f42.js.map → key.utils-7c3218d4.js.map} +1 -1
- package/dist/esm/loader.js +1 -1
- package/dist/esm/revo-grid.entry.js +246 -877
- package/dist/esm/revo-grid.entry.js.map +1 -1
- package/dist/esm/revo-grid.js +1 -1
- package/dist/esm/revogr-attribution_7.entry.js +63 -33
- package/dist/esm/revogr-attribution_7.entry.js.map +1 -1
- package/dist/esm/revogr-clipboard_3.entry.js +7 -6
- package/dist/esm/revogr-clipboard_3.entry.js.map +1 -1
- package/dist/esm/revogr-data_4.entry.js +60 -50
- package/dist/esm/revogr-data_4.entry.js.map +1 -1
- package/dist/esm/revogr-filter-panel.entry.js +34 -14
- package/dist/esm/revogr-filter-panel.entry.js.map +1 -1
- package/dist/esm/{text-editor-901c3eb8.js → text-editor-148a17c1.js} +5 -5
- package/dist/esm/text-editor-148a17c1.js.map +1 -0
- package/dist/esm/{throttle-138d69c3.js → throttle-394e489c.js} +3 -3
- package/dist/esm/{throttle-138d69c3.js.map → throttle-394e489c.js.map} +1 -1
- package/dist/esm/{row-header-utils-3dfbb81f.js → viewport.store-afa8c4fe.js} +11 -10
- package/dist/esm/viewport.store-afa8c4fe.js.map +1 -0
- package/dist/revo-grid/app-globals-3a760941.js +8 -1
- package/dist/revo-grid/app-globals-3a760941.js.map +1 -1
- package/dist/revo-grid/column.drag.plugin-50f49fa9.js +2541 -0
- package/dist/revo-grid/column.drag.plugin-50f49fa9.js.map +1 -0
- package/dist/revo-grid/column.service-a6a7c415.js +1281 -0
- package/dist/revo-grid/column.service-a6a7c415.js.map +1 -0
- package/dist/revo-grid/debounce-b3166f78.js +495 -0
- package/dist/revo-grid/debounce-b3166f78.js.map +1 -0
- package/dist/revo-grid/dimension.helpers-d0d709c4.js +3611 -0
- package/dist/revo-grid/dimension.helpers-d0d709c4.js.map +1 -0
- package/dist/revo-grid/edit.utils-0ae0db50.js +17 -0
- package/dist/revo-grid/edit.utils-0ae0db50.js.map +1 -0
- package/dist/revo-grid/events-cf0893a3.js +38 -1
- package/dist/revo-grid/events-cf0893a3.js.map +1 -1
- package/dist/revo-grid/filter.button-d40ab17b.js +34 -1
- package/dist/revo-grid/filter.button-d40ab17b.js.map +1 -1
- package/dist/revo-grid/header-cell-renderer-36ecbdef.js +339 -0
- package/dist/revo-grid/header-cell-renderer-36ecbdef.js.map +1 -0
- package/dist/revo-grid/index-a61f225b.js +1845 -2
- package/dist/revo-grid/index-a61f225b.js.map +1 -1
- package/dist/revo-grid/index.esm.js +160 -1
- package/dist/revo-grid/index.esm.js.map +1 -1
- package/dist/revo-grid/key.utils-7c3218d4.js +89 -0
- package/dist/revo-grid/key.utils-7c3218d4.js.map +1 -0
- package/dist/revo-grid/resize-observer-83c9e167.js +501 -1
- package/dist/revo-grid/resize-observer-83c9e167.js.map +1 -1
- package/dist/revo-grid/revo-grid.entry.js +1934 -1
- package/dist/revo-grid/revo-grid.entry.js.map +1 -1
- package/dist/revo-grid/revo-grid.esm.js +21 -1
- package/dist/revo-grid/revo-grid.esm.js.map +1 -1
- package/dist/revo-grid/revogr-attribution_7.entry.js +1431 -1
- package/dist/revo-grid/revogr-attribution_7.entry.js.map +1 -1
- package/dist/revo-grid/revogr-clipboard_3.entry.js +455 -1
- package/dist/revo-grid/revogr-clipboard_3.entry.js.map +1 -1
- package/dist/revo-grid/revogr-data_4.entry.js +974 -1
- package/dist/revo-grid/revogr-data_4.entry.js.map +1 -1
- package/dist/revo-grid/revogr-filter-panel.entry.js +340 -1
- package/dist/revo-grid/revogr-filter-panel.entry.js.map +1 -1
- package/dist/revo-grid/sorting.sign-1a675bf7.js +9 -1
- package/dist/revo-grid/sorting.sign-1a675bf7.js.map +1 -1
- package/dist/revo-grid/text-editor-148a17c1.js +80 -0
- package/dist/revo-grid/text-editor-148a17c1.js.map +1 -0
- package/dist/revo-grid/throttle-394e489c.js +230 -0
- package/dist/revo-grid/throttle-394e489c.js.map +1 -0
- package/dist/revo-grid/viewport.helpers-7e7f9dad.js +48 -1
- package/dist/revo-grid/viewport.helpers-7e7f9dad.js.map +1 -1
- package/dist/revo-grid/viewport.store-afa8c4fe.js +406 -0
- package/dist/revo-grid/viewport.store-afa8c4fe.js.map +1 -0
- package/dist/types/components/data/cell-renderer.d.ts +3 -5
- package/dist/types/components/data/column.service.d.ts +2 -3
- package/dist/types/components/data/revogr-data.d.ts +10 -6
- package/dist/types/components/data/row-highlight.plugin.d.ts +1 -1
- package/dist/types/components/data/row-renderer.d.ts +1 -1
- package/dist/types/components/editors/revogr-edit.d.ts +2 -2
- package/dist/types/components/editors/text-editor.d.ts +5 -6
- package/dist/types/components/extra/revogr-extra.d.ts +17 -3
- package/dist/types/components/header/header-cell-renderer.d.ts +1 -1
- package/dist/types/components/header/header-renderer.d.ts +2 -2
- package/dist/types/components/header/resizable.element.d.ts +1 -1
- package/dist/types/components/header/revogr-header.d.ts +2 -3
- package/dist/types/components/order/order-renderer.d.ts +1 -1
- package/dist/types/components/order/revogr-order-editor.d.ts +4 -10
- package/dist/types/components/overlay/autofill.service.d.ts +2 -2
- package/dist/types/components/overlay/keyboard.service.d.ts +1 -1
- package/dist/types/components/overlay/revogr-overlay-selection.d.ts +16 -13
- package/dist/types/components/overlay/selection.utils.d.ts +1 -1
- package/dist/types/components/revoGrid/plugin.service.d.ts +37 -0
- package/dist/types/components/revoGrid/revo-grid.d.ts +105 -61
- package/dist/types/components/revoGrid/viewport.service.d.ts +2 -2
- package/dist/types/components/rowHeaders/row-header-render.d.ts +2 -2
- package/dist/types/components/scroll/revogr-viewport-scroll.d.ts +2 -5
- package/dist/types/components/scrollable/revogr-scroll-virtual.d.ts +2 -3
- package/dist/types/components/selectionFocus/revogr-focus.d.ts +2 -2
- package/dist/types/components/selectionTempRange/revogr-temp-range.d.ts +2 -3
- package/dist/types/components/vnode/vnode-converter.d.ts +1 -1
- package/dist/types/components/vnode/vnode.utils.d.ts +2 -2
- package/dist/types/components.d.ts +191 -108
- package/dist/types/index.d.ts +1 -1
- package/dist/types/plugins/add-rows-on-paste.plugin.d.ts +14 -0
- package/dist/types/plugins/base.plugin.d.ts +3 -4
- package/dist/types/plugins/column.auto-size.plugin.d.ts +1 -1
- package/dist/types/plugins/column.stretch.plugin.d.ts +1 -1
- package/dist/types/plugins/export/csv.d.ts +1 -1
- package/dist/types/plugins/export/export.plugin.d.ts +4 -3
- package/dist/types/plugins/filter/filter.panel.d.ts +2 -2
- package/dist/types/plugins/filter/filter.plugin.d.ts +25 -7
- package/dist/types/plugins/filter/filter.types.d.ts +32 -10
- package/dist/types/plugins/groupingColumn/columnGroupsRenderer.d.ts +2 -2
- package/dist/types/plugins/groupingColumn/headerGroupRenderer.d.ts +3 -4
- package/dist/types/plugins/groupingRow/grouping.const.d.ts +3 -1
- package/dist/types/plugins/groupingRow/grouping.row.plugin.d.ts +15 -10
- package/dist/types/plugins/groupingRow/grouping.row.types.d.ts +38 -4
- package/dist/types/plugins/groupingRow/grouping.service.d.ts +9 -12
- package/dist/types/plugins/index.d.ts +2 -0
- package/dist/types/plugins/moveColumn/column.drag.plugin.d.ts +2 -2
- package/dist/types/plugins/sorting/sorting.func.d.ts +3 -0
- package/dist/types/plugins/sorting/sorting.plugin.d.ts +14 -13
- package/dist/types/plugins/sorting/sorting.types.d.ts +13 -0
- package/dist/types/services/column.data.provider.d.ts +5 -2
- package/dist/types/services/data.provider.d.ts +3 -1
- package/dist/types/services/dimension.provider.d.ts +9 -4
- package/dist/types/services/selection.store.connector.d.ts +4 -4
- package/dist/types/store/dataSource/data.proxy.d.ts +7 -9
- package/dist/types/store/dataSource/data.store.d.ts +2 -3
- package/dist/types/store/dataSource/trimmed.plugin.d.ts +1 -1
- package/dist/types/store/dimension/dimension.helpers.d.ts +1 -4
- package/dist/types/store/dimension/dimension.recalculate.plugin.d.ts +9 -0
- package/dist/types/store/dimension/dimension.store.d.ts +3 -2
- package/dist/types/store/dimension/dimension.trim.plugin.d.ts +13 -0
- package/dist/types/store/selection/selection.store.d.ts +1 -1
- package/dist/types/store/vp/viewport.store.d.ts +1 -1
- package/dist/types/types/events.d.ts +1 -1
- package/dist/types/types/interfaces.d.ts +36 -12
- package/dist/types/types/plugin.types.d.ts +17 -1
- package/dist/types/types/selection.d.ts +23 -17
- package/dist/types/types/viewport.interfaces.d.ts +1 -3
- package/dist/types/utils/column.utils.d.ts +1 -0
- package/hydrate/index.js +2490 -2135
- package/hydrate/index.mjs +2490 -2135
- package/package.json +20 -19
- package/readme.md +15 -17
- package/standalone/column.service.js +192 -160
- package/standalone/column.service.js.map +1 -1
- package/standalone/data.store.js +36 -25
- package/standalone/data.store.js.map +1 -1
- package/standalone/dimension.helpers.js +8 -10
- package/standalone/dimension.helpers.js.map +1 -1
- package/standalone/index.js +46 -6
- package/standalone/index.js.map +1 -1
- package/standalone/revo-grid.js +1275 -1022
- package/standalone/revo-grid.js.map +1 -1
- package/standalone/revogr-attribution2.js +1 -1
- package/standalone/revogr-attribution2.js.map +1 -1
- package/standalone/revogr-data2.js +26 -22
- package/standalone/revogr-data2.js.map +1 -1
- package/standalone/revogr-edit2.js +3 -3
- package/standalone/revogr-edit2.js.map +1 -1
- package/standalone/revogr-extra2.js +25 -4
- package/standalone/revogr-extra2.js.map +1 -1
- package/standalone/revogr-filter-panel.js +34 -14
- package/standalone/revogr-filter-panel.js.map +1 -1
- package/standalone/revogr-focus2.js +2 -1
- package/standalone/revogr-focus2.js.map +1 -1
- package/standalone/revogr-header2.js +6 -5
- package/standalone/revogr-header2.js.map +1 -1
- package/standalone/revogr-order-editor2.js +3 -0
- package/standalone/revogr-order-editor2.js.map +1 -1
- package/standalone/revogr-overlay-selection2.js +29 -17
- package/standalone/revogr-overlay-selection2.js.map +1 -1
- package/standalone/revogr-row-headers2.js +12 -9
- package/standalone/revogr-row-headers2.js.map +1 -1
- package/standalone/revogr-scroll-virtual2.js +6 -4
- package/standalone/revogr-scroll-virtual2.js.map +1 -1
- package/standalone/revogr-temp-range2.js +1 -1
- package/standalone/revogr-temp-range2.js.map +1 -1
- package/standalone/revogr-viewport-scroll2.js +27 -21
- package/standalone/revogr-viewport-scroll2.js.map +1 -1
- package/standalone/selection.utils.js +1 -0
- package/standalone/selection.utils.js.map +1 -1
- package/standalone/vnode-converter.js +1 -1
- package/standalone/vnode-converter.js.map +1 -1
- package/dist/cjs/column.drag.plugin-fcd892ec.js.map +0 -1
- package/dist/cjs/column.service-26c61ed6.js.map +0 -1
- package/dist/cjs/index-3ab26ab9.js +0 -513
- package/dist/cjs/index-3ab26ab9.js.map +0 -1
- package/dist/cjs/key.utils-f49d7bee.js +0 -101
- package/dist/cjs/key.utils-f49d7bee.js.map +0 -1
- package/dist/cjs/row-header-utils-c37f76e4.js.map +0 -1
- package/dist/cjs/text-editor-b756d6b3.js.map +0 -1
- package/dist/esm/column.drag.plugin-3cc77986.js.map +0 -1
- package/dist/esm/column.service-751345b2.js.map +0 -1
- package/dist/esm/index-1dcad6ef.js +0 -476
- package/dist/esm/index-1dcad6ef.js.map +0 -1
- package/dist/esm/row-header-utils-3dfbb81f.js.map +0 -1
- package/dist/esm/text-editor-901c3eb8.js.map +0 -1
- package/dist/revo-grid/column.drag.plugin-3cc77986.js +0 -5
- package/dist/revo-grid/column.drag.plugin-3cc77986.js.map +0 -1
- package/dist/revo-grid/column.service-751345b2.js +0 -5
- package/dist/revo-grid/column.service-751345b2.js.map +0 -1
- package/dist/revo-grid/debounce-72878ced.js +0 -5
- package/dist/revo-grid/debounce-72878ced.js.map +0 -1
- package/dist/revo-grid/edit.utils-6fc686b9.js +0 -5
- package/dist/revo-grid/edit.utils-6fc686b9.js.map +0 -1
- package/dist/revo-grid/header-cell-renderer-32d2ed96.js +0 -5
- package/dist/revo-grid/header-cell-renderer-32d2ed96.js.map +0 -1
- package/dist/revo-grid/index-1dcad6ef.js +0 -5
- package/dist/revo-grid/index-1dcad6ef.js.map +0 -1
- package/dist/revo-grid/key.utils-17273f42.js +0 -5
- package/dist/revo-grid/key.utils-17273f42.js.map +0 -1
- package/dist/revo-grid/row-header-utils-3dfbb81f.js +0 -5
- package/dist/revo-grid/row-header-utils-3dfbb81f.js.map +0 -1
- package/dist/revo-grid/text-editor-901c3eb8.js +0 -5
- package/dist/revo-grid/text-editor-901c3eb8.js.map +0 -1
- package/dist/revo-grid/throttle-138d69c3.js +0 -5
- package/dist/revo-grid/throttle-138d69c3.js.map +0 -1
- package/standalone/identity.js +0 -26
- package/standalone/identity.js.map +0 -1
|
@@ -1,20 +1,52 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* Built by Revolist OU ❤️
|
|
3
3
|
*/
|
|
4
|
-
import { GROUP_DEPTH, GROUP_EXPANDED, PSEUDO_GROUP_COLUMN, PSEUDO_GROUP_ITEM, PSEUDO_GROUP_ITEM_ID, PSEUDO_GROUP_ITEM_VALUE, GROUP_ORIGINAL_INDEX, } from "./grouping.const";
|
|
4
|
+
import { GROUP_DEPTH, GROUP_EXPANDED, PSEUDO_GROUP_COLUMN, PSEUDO_GROUP_ITEM, PSEUDO_GROUP_ITEM_ID, PSEUDO_GROUP_ITEM_VALUE, GROUP_ORIGINAL_INDEX, GROUP_COLUMN_PROP, } from "./grouping.const";
|
|
5
5
|
function getGroupValueDefault(item, prop) {
|
|
6
6
|
return item[prop] || null;
|
|
7
7
|
}
|
|
8
|
+
// get source based on proxy item collection to preserve rgRow order
|
|
9
|
+
export function getSource(source, items, withoutGrouping = false) {
|
|
10
|
+
let index = 0;
|
|
11
|
+
const result = {
|
|
12
|
+
source: [],
|
|
13
|
+
prevExpanded: {},
|
|
14
|
+
oldNewIndexes: {},
|
|
15
|
+
};
|
|
16
|
+
// order important here, expected parent is first, then others
|
|
17
|
+
items.forEach(i => {
|
|
18
|
+
const model = source[i];
|
|
19
|
+
if (!withoutGrouping) {
|
|
20
|
+
result.source.push(model);
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
// grouping filter
|
|
24
|
+
if (isGrouping(model)) {
|
|
25
|
+
if (getExpanded(model)) {
|
|
26
|
+
result.prevExpanded[model[PSEUDO_GROUP_ITEM_VALUE]] = true;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
result.source.push(model);
|
|
31
|
+
result.oldNewIndexes[i] = index;
|
|
32
|
+
index++;
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
return result;
|
|
36
|
+
}
|
|
37
|
+
export function getExpanded(model = {}) {
|
|
38
|
+
return model[GROUP_EXPANDED];
|
|
39
|
+
}
|
|
8
40
|
/**
|
|
9
41
|
* Gather data for grouping
|
|
10
42
|
* @param array - flat data array
|
|
11
|
-
* @param
|
|
43
|
+
* @param columnProps - ids of groups
|
|
12
44
|
* @param expanded - potentially expanded items if present
|
|
13
45
|
*/
|
|
14
|
-
export function gatherGrouping(array,
|
|
46
|
+
export function gatherGrouping(array, columnProps, { prevExpanded, expandedAll, getGroupValue = getGroupValueDefault, }) {
|
|
15
47
|
const groupedItems = new Map();
|
|
16
48
|
array.forEach((item, originalIndex) => {
|
|
17
|
-
const groupLevelValues =
|
|
49
|
+
const groupLevelValues = columnProps.map(groupId => getGroupValue(item, groupId));
|
|
18
50
|
const lastLevelValue = groupLevelValues.pop();
|
|
19
51
|
let currentGroupLevel = groupedItems;
|
|
20
52
|
groupLevelValues.forEach(value => {
|
|
@@ -30,7 +62,7 @@ export function gatherGrouping(array, groupIds, { prevExpanded, expandedAll, get
|
|
|
30
62
|
lastLevelItems.push(Object.assign(Object.assign({}, item), { [GROUP_ORIGINAL_INDEX]: originalIndex }));
|
|
31
63
|
});
|
|
32
64
|
let itemIndex = -1;
|
|
33
|
-
const groupingDepth =
|
|
65
|
+
const groupingDepth = columnProps.length;
|
|
34
66
|
// collapse all groups in the beginning
|
|
35
67
|
const trimmed = {};
|
|
36
68
|
// index mapping
|
|
@@ -50,6 +82,8 @@ export function gatherGrouping(array, groupIds, { prevExpanded, expandedAll, get
|
|
|
50
82
|
[PSEUDO_GROUP_ITEM_ID]: JSON.stringify(levelIds),
|
|
51
83
|
[PSEUDO_GROUP_ITEM_VALUE]: mergedIds,
|
|
52
84
|
[GROUP_EXPANDED]: isGroupExpanded,
|
|
85
|
+
[GROUP_COLUMN_PROP]: columnProps[depth],
|
|
86
|
+
[columnProps[depth]]: groupId,
|
|
53
87
|
});
|
|
54
88
|
itemIndex += 1;
|
|
55
89
|
if (!isGroupExpanded && depth) {
|
|
@@ -93,7 +127,7 @@ export function isGrouping(rgRow) {
|
|
|
93
127
|
return typeof (rgRow === null || rgRow === void 0 ? void 0 : rgRow[PSEUDO_GROUP_ITEM]) !== 'undefined';
|
|
94
128
|
}
|
|
95
129
|
export function isGroupingColumn(column) {
|
|
96
|
-
return column
|
|
130
|
+
return typeof (column === null || column === void 0 ? void 0 : column[PSEUDO_GROUP_COLUMN]) !== 'undefined';
|
|
97
131
|
}
|
|
98
132
|
export function measureEqualDepth(groupA, groupB) {
|
|
99
133
|
const ln = groupA.length;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grouping.service.js","sourceRoot":"","sources":["../../../src/plugins/groupingRow/grouping.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { DataType, ColumnProp, ColumnRegular } from '@type';\nimport {\n GROUP_DEPTH,\n GROUP_EXPANDED,\n PSEUDO_GROUP_COLUMN,\n PSEUDO_GROUP_ITEM,\n PSEUDO_GROUP_ITEM_ID,\n PSEUDO_GROUP_ITEM_VALUE,\n GROUP_ORIGINAL_INDEX,\n} from './grouping.const';\nimport { GroupLabelTemplateFunc } from './grouping.row.types';\n\nexport type ExpandedOptions = {\n prevExpanded?: Record<string, boolean>;\n expandedAll?: boolean; // skip trim\n\n getGroupValue?(item: DataType, prop: string | number): any;\n groupLabelTemplate?: GroupLabelTemplateFunc;\n};\n\ntype GroupedData = Map<string, GroupedData | DataType[]>;\n\nfunction getGroupValueDefault(item: DataType, prop: string | number) {\n return item[prop] || null;\n}\n\n/**\n * Gather data for grouping\n * @param array - flat data array\n * @param groupIds - ids of groups\n * @param expanded - potentially expanded items if present\n */\nexport function gatherGrouping(\n array: DataType[],\n groupIds: ColumnProp[],\n {\n prevExpanded,\n expandedAll,\n getGroupValue = getGroupValueDefault,\n }: ExpandedOptions,\n) {\n const groupedItems: GroupedData = new Map();\n array.forEach((item, originalIndex) => {\n const groupLevelValues = groupIds.map(groupId =>\n getGroupValue(item, groupId),\n );\n const lastLevelValue = groupLevelValues.pop();\n let currentGroupLevel = groupedItems;\n groupLevelValues.forEach(value => {\n if (!currentGroupLevel.has(value)) {\n currentGroupLevel.set(value, new Map());\n }\n currentGroupLevel = currentGroupLevel.get(value) as GroupedData;\n });\n if (!currentGroupLevel.has(lastLevelValue)) {\n currentGroupLevel.set(lastLevelValue, []);\n }\n const lastLevelItems = currentGroupLevel.get(lastLevelValue) as DataType[];\n lastLevelItems.push({\n ...item,\n [GROUP_ORIGINAL_INDEX]: originalIndex,\n });\n });\n\n let itemIndex = -1;\n const groupingDepth = groupIds.length;\n // collapse all groups in the beginning\n const trimmed: Record<number, boolean> = {};\n // index mapping\n const oldNewIndexMap: Record<number, number> = {};\n // check if group header exists\n const pseudoGroupTest: Record<string, number[]> = {};\n const sourceWithGroups: DataType[] = [];\n function flattenGroupMaps(\n groupedValues: GroupedData,\n parentIds: string[],\n isExpanded: boolean,\n ) {\n const depth = parentIds.length;\n groupedValues.forEach((innerGroupedValues, groupId) => {\n const levelIds = [...parentIds, groupId];\n const mergedIds = levelIds.join(',');\n const isGroupExpanded =\n isExpanded && (!!expandedAll || !!prevExpanded?.[mergedIds]);\n sourceWithGroups.push({\n [PSEUDO_GROUP_ITEM]: groupId,\n [GROUP_DEPTH]: depth,\n [PSEUDO_GROUP_ITEM_ID]: JSON.stringify(levelIds),\n [PSEUDO_GROUP_ITEM_VALUE]: mergedIds,\n [GROUP_EXPANDED]: isGroupExpanded,\n });\n itemIndex += 1;\n if (!isGroupExpanded && depth) {\n trimmed[itemIndex] = true;\n }\n if (Array.isArray(innerGroupedValues)) {\n innerGroupedValues.forEach(value => {\n itemIndex += 1;\n if (!isGroupExpanded) {\n trimmed[itemIndex] = true;\n }\n oldNewIndexMap[value[GROUP_ORIGINAL_INDEX]] = itemIndex;\n const pseudoGroupTestIds = levelIds.map((_value, index) =>\n levelIds.slice(0, index + 1).join(','),\n );\n pseudoGroupTestIds.forEach(pseudoGroupTestId => {\n if (!pseudoGroupTest[pseudoGroupTestId]) {\n pseudoGroupTest[pseudoGroupTestId] = [];\n }\n pseudoGroupTest[pseudoGroupTestId].push(itemIndex);\n });\n });\n sourceWithGroups.push(...innerGroupedValues);\n } else {\n flattenGroupMaps(innerGroupedValues, levelIds, isGroupExpanded);\n }\n });\n }\n flattenGroupMaps(groupedItems, [], true);\n\n return {\n sourceWithGroups, // updates source mirror\n depth: groupingDepth, // largest depth for grouping\n trimmed, // used for expand/collapse grouping values\n oldNewIndexMap, // used for mapping old values to new\n childrenByGroup: pseudoGroupTest, // used to get child items in group\n };\n}\n\nexport function getGroupingName(rgRow?: DataType) {\n return rgRow && rgRow[PSEUDO_GROUP_ITEM];\n}\n\ntype GroupingItem = {\n [PSEUDO_GROUP_ITEM]: string;\n [GROUP_EXPANDED]: boolean;\n [PSEUDO_GROUP_ITEM_VALUE]: string;\n [GROUP_DEPTH]: number;\n};\n\nexport function isGrouping(rgRow?: DataType): rgRow is GroupingItem {\n return typeof rgRow?.[PSEUDO_GROUP_ITEM] !== 'undefined';\n}\n\nexport function isGroupingColumn(column?: ColumnRegular) {\n return column && typeof column[PSEUDO_GROUP_COLUMN] !== 'undefined';\n}\n\nexport function measureEqualDepth<T>(groupA: T[], groupB: T[]) {\n const ln = groupA.length;\n let i = 0;\n for (; i < ln; i++) {\n if (groupA[i] !== groupB[i]) {\n return i;\n }\n }\n return i;\n}\n\nexport function getParsedGroup(id: string) {\n const parseGroup = JSON.parse(id);\n // extra precaution and type safeguard\n if (!Array.isArray(parseGroup)) {\n return null;\n }\n return parseGroup;\n}\n\n// check if items is child of current clicked group\nexport function isSameGroup(\n currentGroup: any[],\n currentModel: DataType,\n nextModel: DataType,\n) {\n const nextGroup = getParsedGroup(nextModel[PSEUDO_GROUP_ITEM_ID]);\n if (!nextGroup) {\n return false;\n }\n\n const depth = measureEqualDepth(currentGroup, nextGroup);\n return currentModel[GROUP_DEPTH] < depth;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"grouping.service.js","sourceRoot":"","sources":["../../../src/plugins/groupingRow/grouping.service.ts"],"names":[],"mappings":"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","sourcesContent":["import type { DataType, ColumnProp, ColumnRegular } from '@type';\nimport {\n GROUP_DEPTH,\n GROUP_EXPANDED,\n PSEUDO_GROUP_COLUMN,\n PSEUDO_GROUP_ITEM,\n PSEUDO_GROUP_ITEM_ID,\n PSEUDO_GROUP_ITEM_VALUE,\n GROUP_ORIGINAL_INDEX,\n GROUP_COLUMN_PROP,\n} from './grouping.const';\nimport type { ExpandedOptions, SourceGather } from './grouping.row.types';\n\n\ntype GroupedData = Map<string, GroupedData | DataType[]>;\n\nfunction getGroupValueDefault(item: DataType, prop: string | number) {\n return item[prop] || null;\n}\n\n// get source based on proxy item collection to preserve rgRow order\nexport function getSource(\n source: DataType[],\n items: number[],\n withoutGrouping = false,\n) {\n let index = 0;\n const result: Required<SourceGather> = {\n source: [],\n prevExpanded: {},\n oldNewIndexes: {},\n };\n // order important here, expected parent is first, then others\n items.forEach(i => {\n const model = source[i];\n if (!withoutGrouping) {\n result.source.push(model);\n return;\n }\n\n // grouping filter\n if (isGrouping(model)) {\n if (getExpanded(model)) {\n result.prevExpanded[model[PSEUDO_GROUP_ITEM_VALUE]] = true;\n }\n } else {\n result.source.push(model);\n result.oldNewIndexes[i] = index;\n index++;\n }\n });\n return result;\n}\n\nexport function getExpanded(model: DataType = {}) {\n return model[GROUP_EXPANDED];\n}\n\n/**\n * Gather data for grouping\n * @param array - flat data array\n * @param columnProps - ids of groups\n * @param expanded - potentially expanded items if present\n */\nexport function gatherGrouping(\n array: DataType[],\n columnProps: ColumnProp[],\n {\n prevExpanded,\n expandedAll,\n getGroupValue = getGroupValueDefault,\n }: ExpandedOptions,\n) {\n const groupedItems: GroupedData = new Map();\n array.forEach((item, originalIndex) => {\n const groupLevelValues = columnProps.map(groupId =>\n getGroupValue(item, groupId),\n );\n const lastLevelValue = groupLevelValues.pop();\n let currentGroupLevel = groupedItems;\n groupLevelValues.forEach(value => {\n if (!currentGroupLevel.has(value)) {\n currentGroupLevel.set(value, new Map());\n }\n currentGroupLevel = currentGroupLevel.get(value) as GroupedData;\n });\n if (!currentGroupLevel.has(lastLevelValue)) {\n currentGroupLevel.set(lastLevelValue, []);\n }\n const lastLevelItems = currentGroupLevel.get(lastLevelValue) as DataType[];\n lastLevelItems.push({\n ...item,\n [GROUP_ORIGINAL_INDEX]: originalIndex,\n });\n });\n\n let itemIndex = -1;\n const groupingDepth = columnProps.length;\n // collapse all groups in the beginning\n const trimmed: Record<number, boolean> = {};\n // index mapping\n const oldNewIndexMap: Record<number, number> = {};\n // check if group header exists\n const pseudoGroupTest: Record<string, number[]> = {};\n const sourceWithGroups: DataType[] = [];\n function flattenGroupMaps(\n groupedValues: GroupedData,\n parentIds: string[],\n isExpanded: boolean,\n ) {\n const depth = parentIds.length;\n groupedValues.forEach((innerGroupedValues, groupId) => {\n const levelIds = [...parentIds, groupId];\n const mergedIds = levelIds.join(',');\n const isGroupExpanded =\n isExpanded && (!!expandedAll || !!prevExpanded?.[mergedIds]);\n sourceWithGroups.push({\n [PSEUDO_GROUP_ITEM]: groupId,\n [GROUP_DEPTH]: depth,\n [PSEUDO_GROUP_ITEM_ID]: JSON.stringify(levelIds),\n [PSEUDO_GROUP_ITEM_VALUE]: mergedIds,\n [GROUP_EXPANDED]: isGroupExpanded,\n [GROUP_COLUMN_PROP]: columnProps[depth],\n [columnProps[depth]]: groupId,\n });\n itemIndex += 1;\n if (!isGroupExpanded && depth) {\n trimmed[itemIndex] = true;\n }\n if (Array.isArray(innerGroupedValues)) {\n innerGroupedValues.forEach(value => {\n itemIndex += 1;\n if (!isGroupExpanded) {\n trimmed[itemIndex] = true;\n }\n oldNewIndexMap[value[GROUP_ORIGINAL_INDEX]] = itemIndex;\n const pseudoGroupTestIds = levelIds.map((_value, index) =>\n levelIds.slice(0, index + 1).join(','),\n );\n pseudoGroupTestIds.forEach(pseudoGroupTestId => {\n if (!pseudoGroupTest[pseudoGroupTestId]) {\n pseudoGroupTest[pseudoGroupTestId] = [];\n }\n pseudoGroupTest[pseudoGroupTestId].push(itemIndex);\n });\n });\n sourceWithGroups.push(...innerGroupedValues);\n } else {\n flattenGroupMaps(innerGroupedValues, levelIds, isGroupExpanded);\n }\n });\n }\n flattenGroupMaps(groupedItems, [], true);\n\n return {\n sourceWithGroups, // updates source mirror\n depth: groupingDepth, // largest depth for grouping\n trimmed, // used for expand/collapse grouping values\n oldNewIndexMap, // used for mapping old values to new\n childrenByGroup: pseudoGroupTest, // used to get child items in group\n };\n}\n\nexport function getGroupingName(rgRow?: DataType) {\n return rgRow && rgRow[PSEUDO_GROUP_ITEM];\n}\n\ntype GroupingItem = {\n [PSEUDO_GROUP_ITEM]: string;\n [GROUP_EXPANDED]: boolean;\n [PSEUDO_GROUP_ITEM_VALUE]: string;\n [GROUP_DEPTH]: number;\n [GROUP_COLUMN_PROP]: ColumnProp;\n};\n\nexport function isGrouping(rgRow?: DataType): rgRow is GroupingItem {\n return typeof rgRow?.[PSEUDO_GROUP_ITEM] !== 'undefined';\n}\n\nexport function isGroupingColumn(column?: ColumnRegular) {\n return typeof column?.[PSEUDO_GROUP_COLUMN] !== 'undefined';\n}\n\nexport function measureEqualDepth<T>(groupA: T[], groupB: T[]) {\n const ln = groupA.length;\n let i = 0;\n for (; i < ln; i++) {\n if (groupA[i] !== groupB[i]) {\n return i;\n }\n }\n return i;\n}\n\nexport function getParsedGroup(id: string) {\n const parseGroup = JSON.parse(id);\n // extra precaution and type safeguard\n if (!Array.isArray(parseGroup)) {\n return null;\n }\n return parseGroup;\n}\n\n// check if items is child of current clicked group\nexport function isSameGroup(\n currentGroup: any[],\n currentModel: DataType,\n nextModel: DataType,\n) {\n const nextGroup = getParsedGroup(nextModel[PSEUDO_GROUP_ITEM_ID]);\n if (!nextGroup) {\n return false;\n }\n\n const depth = measureEqualDepth(currentGroup, nextGroup);\n return currentModel[GROUP_DEPTH] < depth;\n}\n"]}
|
|
@@ -10,7 +10,9 @@ export * from './filter/filter.plugin';
|
|
|
10
10
|
export * from './groupingColumn/columnGroupsRenderer';
|
|
11
11
|
export * from './groupingColumn/headerGroupRenderer';
|
|
12
12
|
export * from './groupingRow/grouping.row.plugin';
|
|
13
|
+
export * from './groupingRow/grouping.service';
|
|
13
14
|
export * from './moveColumn/column.drag.plugin';
|
|
14
15
|
export * from './sorting/sorting.plugin';
|
|
15
16
|
export * from './sorting/sorting.sign';
|
|
17
|
+
export * from './add-rows-on-paste.plugin';
|
|
16
18
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/plugins/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,cAAc,CAAC;AAC7B,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uCAAuC,CAAC;AACtD,cAAc,sCAAsC,CAAC;AACrD,cAAc,mCAAmC,CAAC;AAClD,cAAc,iCAAiC,CAAC;AAChD,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC","sourcesContent":["export * from './base.plugin';\nexport * from './column.auto-size.plugin';\nexport * from './column.stretch.plugin';\nexport * from './dispatcher';\nexport * from './export/export.plugin';\nexport * from './filter/filter.plugin';\nexport * from './groupingColumn/columnGroupsRenderer';\nexport * from './groupingColumn/headerGroupRenderer';\nexport * from './groupingRow/grouping.row.plugin';\nexport * from './moveColumn/column.drag.plugin';\nexport * from './sorting/sorting.plugin';\nexport * from './sorting/sorting.sign';\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/plugins/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,cAAc,CAAC;AAC7B,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uCAAuC,CAAC;AACtD,cAAc,sCAAsC,CAAC;AACrD,cAAc,mCAAmC,CAAC;AAClD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iCAAiC,CAAC;AAChD,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,4BAA4B,CAAC","sourcesContent":["export * from './base.plugin';\nexport * from './column.auto-size.plugin';\nexport * from './column.stretch.plugin';\nexport * from './dispatcher';\nexport * from './export/export.plugin';\nexport * from './filter/filter.plugin';\nexport * from './groupingColumn/columnGroupsRenderer';\nexport * from './groupingColumn/headerGroupRenderer';\nexport * from './groupingRow/grouping.row.plugin';\nexport * from './groupingRow/grouping.service';\nexport * from './moveColumn/column.drag.plugin';\nexport * from './sorting/sorting.plugin';\nexport * from './sorting/sorting.sign';\nexport * from './add-rows-on-paste.plugin';\n"]}
|
|
@@ -18,7 +18,7 @@ const DRAG_END = 'columndragend';
|
|
|
18
18
|
const BEFORE_DRAG_END = 'beforecolumndragend';
|
|
19
19
|
// use this event subscription to drop D&D for particular columns
|
|
20
20
|
const DRAG_START = 'columndragstart';
|
|
21
|
-
export
|
|
21
|
+
export class ColumnMovePlugin extends BasePlugin {
|
|
22
22
|
constructor(revogrid, providers) {
|
|
23
23
|
super(revogrid, providers);
|
|
24
24
|
this.revogrid = revogrid;
|
|
@@ -97,6 +97,10 @@ export default class ColumnPlugin extends BasePlugin {
|
|
|
97
97
|
const x = getLeftRelative(e.x, this.dragData.gridRect.left, this.dragData.scrollOffset);
|
|
98
98
|
const rgCol = getItemByPosition(this.staticDragData.cols, x);
|
|
99
99
|
this.orderUi.autoscroll(x, dragData.elRect.width);
|
|
100
|
+
// prevent position change if out of bounds
|
|
101
|
+
if (rgCol.itemIndex >= this.staticDragData.cols.count) {
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
100
104
|
this.orderUi.showHandler(rgCol.end + dragData.scrollOffset, dragData.gridRect.width);
|
|
101
105
|
}
|
|
102
106
|
}
|
|
@@ -117,14 +121,16 @@ export default class ColumnPlugin extends BasePlugin {
|
|
|
117
121
|
}
|
|
118
122
|
const newPosition = getItemByPosition(this.staticDragData.cols, relativePos);
|
|
119
123
|
const store = this.providers.column.stores[this.dragData.type].store;
|
|
120
|
-
const
|
|
124
|
+
const newItems = [...store.get('items')];
|
|
121
125
|
// prevent position change if needed
|
|
122
|
-
const { defaultPrevented: stopDrag } = dispatch(this.revogrid, BEFORE_DRAG_END, Object.assign(Object.assign({}, this.staticDragData), { startPosition: this.staticDragData.startItem, newPosition, newItem: store.get('source')[
|
|
126
|
+
const { defaultPrevented: stopDrag } = dispatch(this.revogrid, BEFORE_DRAG_END, Object.assign(Object.assign({}, this.staticDragData), { startPosition: this.staticDragData.startItem, newPosition, newItem: store.get('source')[newItems[this.staticDragData.startItem.itemIndex]] }));
|
|
123
127
|
if (!stopDrag) {
|
|
128
|
+
const prevItems = [...newItems];
|
|
124
129
|
// todo: if move item out of group remove item from group
|
|
125
|
-
const toMove =
|
|
126
|
-
|
|
127
|
-
store.set('items',
|
|
130
|
+
const toMove = newItems.splice(this.staticDragData.startItem.itemIndex, 1);
|
|
131
|
+
newItems.splice(newPosition.itemIndex, 0, ...toMove);
|
|
132
|
+
store.set('items', newItems);
|
|
133
|
+
this.providers.dimension.updateSizesPositionByNewDataIndexes(this.dragData.type, newItems, prevItems);
|
|
128
134
|
}
|
|
129
135
|
dispatch(this.revogrid, DRAG_END, this.dragData);
|
|
130
136
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"column.drag.plugin.js","sourceRoot":"","sources":["../../../src/plugins/moveColumn/column.drag.plugin.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Plugin for column manual move\n */\nimport debounce from 'lodash/debounce';\nimport each from 'lodash/each';\nimport { getItemByPosition } from '@store';\nimport { BasePlugin } from '../base.plugin';\nimport { ColumnOrderHandler } from './order-column.handler';\nimport { dispatch } from '../dispatcher';\nimport { ColumnPropProp, ColumnRegular, DimensionSettingsState, PositionItem, DimensionCols, MultiDimensionType, PluginProviders } from '@type';\nimport { ON_COLUMN_CLICK } from '../../components/header/header-cell-renderer';\nimport { isColGrouping } from '../../utils/column.utils';\n\nconst COLUMN_CLICK = ON_COLUMN_CLICK;\nconst MOVE = 'columndragmousemove';\nconst DRAG_END = 'columndragend';\nconst BEFORE_DRAG_END = 'beforecolumndragend';\n\n// use this event subscription to drop D&D for particular columns\nconst DRAG_START = 'columndragstart';\n\nexport type DragStartEventDetails = {\n event: MouseEvent;\n data: ColumnPropProp;\n};\n\ntype StaticData = {\n startPos: number;\n startItem: PositionItem;\n data: ColumnRegular;\n dataEl: HTMLElement;\n scrollEl: Element;\n gridEl: HTMLElement;\n cols: DimensionSettingsState;\n};\n\ntype LocalSubscriptions = Record<string, LocalSubscription>;\ntype LocalSubscription = {\n target: Element | Document;\n callback(...params: any[]): void;\n};\nexport type ColumnDragEventData = {\n elRect: DOMRect;\n gridRect: DOMRect;\n scrollOffset: number;\n type: DimensionCols;\n};\nexport default class ColumnPlugin extends BasePlugin {\n private moveFunc = debounce((e: MouseEvent) => this.doMove(e), 5);\n private staticDragData: StaticData | null = null;\n private dragData: ColumnDragEventData | null = null;\n private readonly orderUi: ColumnOrderHandler;\n protected readonly localSubscriptions: LocalSubscriptions = {};\n constructor(public revogrid: HTMLRevoGridElement, public providers: PluginProviders) {\n super(revogrid, providers);\n this.orderUi = new ColumnOrderHandler();\n revogrid.appendChild(this.orderUi.render());\n revogrid.classList.add('column-draggable');\n\n // Register events\n this.localSubscriptions['mouseleave'] = {\n target: document,\n callback: (e: MouseEvent) => this.onMouseOut(e),\n };\n this.localSubscriptions['mouseup'] = {\n target: document,\n callback: (e: MouseEvent) => this.onMouseUp(e),\n };\n\n this.localSubscriptions['mousemove'] = {\n target: document,\n callback: (e: MouseEvent) => this.move(e),\n };\n\n this.addEventListener(COLUMN_CLICK, ({ detail }) => this.dragStart(detail));\n }\n\n dragStart({ event, data }: DragStartEventDetails) {\n if (event.defaultPrevented) {\n return;\n }\n const { defaultPrevented } = dispatch(this.revogrid, DRAG_START, data);\n // check if allowed to drag particulat column\n if (defaultPrevented) {\n return;\n }\n this.clearOrder();\n const { mouseleave, mouseup, mousemove } = this.localSubscriptions;\n mouseleave.target.addEventListener('mouseleave', mouseleave.callback);\n mouseup.target.addEventListener('mouseup', mouseup.callback);\n\n const dataEl = (event.target as HTMLElement).closest('revogr-header');\n const scrollEl = (event.target as HTMLElement).closest('revogr-viewport-scroll');\n if (!dataEl || !scrollEl) {\n return;\n }\n\n // no grouping drag and no row header column drag\n if (isColGrouping(data) || data.providers.type === 'rowHeaders') {\n return;\n }\n\n const cols = this.getDimension(data.pin || 'rgCol');\n const gridRect = this.revogrid.getBoundingClientRect();\n const elRect = dataEl.getBoundingClientRect();\n const startItem = getItemByPosition(\n cols,\n getLeftRelative(event.x, gridRect.left, elRect.left - gridRect.left));\n \n this.staticDragData = {\n startPos: event.x,\n startItem,\n data,\n dataEl,\n scrollEl,\n gridEl: this.revogrid,\n cols,\n };\n this.dragData = this.getData(this.staticDragData);\n mousemove.target.addEventListener('mousemove', mousemove.callback);\n this.orderUi.start(event, {\n ...this.dragData,\n ...this.staticDragData,\n });\n }\n\n doMove(e: MouseEvent) {\n if (!this.staticDragData) {\n return;\n }\n\n const dragData = (this.dragData = this.getData(this.staticDragData));\n if (!dragData) {\n return;\n }\n const start = this.staticDragData.startPos;\n if (Math.abs(start - e.x) > 10) {\n const x = getLeftRelative(e.x, this.dragData.gridRect.left, this.dragData.scrollOffset);\n const rgCol = getItemByPosition(this.staticDragData.cols, x);\n this.orderUi.autoscroll(x, dragData.elRect.width);\n this.orderUi.showHandler(\n rgCol.end + dragData.scrollOffset,\n dragData.gridRect.width\n );\n }\n }\n\n move(e: MouseEvent) {\n dispatch(this.revogrid, MOVE, e);\n // then do move\n this.moveFunc(e);\n }\n onMouseOut(_: MouseEvent) {\n this.clearOrder();\n }\n onMouseUp(e: MouseEvent) {\n // apply new positions\n if (this.dragData && this.staticDragData) {\n let relativePos = getLeftRelative(e.x, this.dragData.gridRect.left, this.dragData.scrollOffset);\n if (relativePos < 0) {\n relativePos = 0;\n }\n const newPosition = getItemByPosition(this.staticDragData.cols, relativePos);\n\n const store = this.providers.column.stores[this.dragData.type].store;\n const items = [...store.get('items')];\n\n // prevent position change if needed\n const { defaultPrevented: stopDrag } = dispatch(this.revogrid, BEFORE_DRAG_END, {\n ...this.staticDragData,\n startPosition: this.staticDragData.startItem,\n newPosition,\n newItem: store.get('source')[items[this.staticDragData.startItem.itemIndex]]\n });\n if (!stopDrag) {\n // todo: if move item out of group remove item from group\n const toMove = items.splice(this.staticDragData.startItem.itemIndex, 1);\n items.splice(newPosition.itemIndex, 0, ...toMove);\n store.set('items', items);\n }\n dispatch(this.revogrid, DRAG_END, this.dragData);\n }\n this.clearOrder();\n }\n\n private clearLocalSubscriptions() {\n each(this.localSubscriptions, ({ target, callback }, key) => target.removeEventListener(key, callback));\n }\n\n clearOrder() {\n this.staticDragData = null;\n this.dragData = null;\n this.clearLocalSubscriptions();\n this.orderUi.stop(this.revogrid);\n }\n /**\n * Clearing subscription\n */\n clearSubscriptions() {\n super.clearSubscriptions();\n this.clearLocalSubscriptions();\n }\n\n private getData({\n gridEl,\n dataEl,\n data,\n }: StaticData): ColumnDragEventData {\n const gridRect = gridEl.getBoundingClientRect();\n const elRect = dataEl.getBoundingClientRect();\n const scrollOffset = elRect.left - gridRect.left;\n return {\n elRect,\n gridRect,\n type: data.pin || 'rgCol',\n scrollOffset,\n };\n }\n private getDimension(type: MultiDimensionType) {\n return this.providers.dimension.stores[type].getCurrentState();\n }\n}\n\nexport function getLeftRelative(\n absoluteX: number,\n gridPos: number,\n offset: number\n): number {\n return absoluteX - gridPos - offset;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"column.drag.plugin.js","sourceRoot":"","sources":["../../../src/plugins/moveColumn/column.drag.plugin.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Plugin for column manual move\n */\nimport debounce from 'lodash/debounce';\nimport each from 'lodash/each';\nimport { getItemByPosition } from '@store';\nimport { BasePlugin } from '../base.plugin';\nimport { ColumnOrderHandler } from './order-column.handler';\nimport { dispatch } from '../dispatcher';\nimport type { ColumnPropProp, ColumnTemplateProp, DimensionSettingsState, PositionItem, DimensionCols, MultiDimensionType, PluginProviders } from '@type';\nimport { ON_COLUMN_CLICK } from '../../components/header/header-cell-renderer';\nimport { isColGrouping } from '../../utils/column.utils';\n\nconst COLUMN_CLICK = ON_COLUMN_CLICK;\nconst MOVE = 'columndragmousemove';\nconst DRAG_END = 'columndragend';\nconst BEFORE_DRAG_END = 'beforecolumndragend';\n\n// use this event subscription to drop D&D for particular columns\nconst DRAG_START = 'columndragstart';\n\nexport type DragStartEventDetails = {\n event: MouseEvent;\n data: ColumnPropProp;\n};\n\ntype StaticData = {\n startPos: number;\n startItem: PositionItem;\n data: ColumnTemplateProp;\n dataEl: HTMLElement;\n scrollEl: Element;\n gridEl: HTMLElement;\n cols: DimensionSettingsState;\n};\n\ntype LocalSubscriptions = Record<string, LocalSubscription>;\ntype LocalSubscription = {\n target: Element | Document;\n callback(...params: any[]): void;\n};\nexport type ColumnDragEventData = {\n elRect: DOMRect;\n gridRect: DOMRect;\n scrollOffset: number;\n type: DimensionCols;\n};\nexport class ColumnMovePlugin extends BasePlugin {\n private moveFunc = debounce((e: MouseEvent) => this.doMove(e), 5);\n private staticDragData: StaticData | null = null;\n private dragData: ColumnDragEventData | null = null;\n private readonly orderUi: ColumnOrderHandler;\n protected readonly localSubscriptions: LocalSubscriptions = {};\n constructor(public revogrid: HTMLRevoGridElement, public providers: PluginProviders) {\n super(revogrid, providers);\n this.orderUi = new ColumnOrderHandler();\n revogrid.appendChild(this.orderUi.render());\n revogrid.classList.add('column-draggable');\n\n // Register events\n this.localSubscriptions['mouseleave'] = {\n target: document,\n callback: (e: MouseEvent) => this.onMouseOut(e),\n };\n this.localSubscriptions['mouseup'] = {\n target: document,\n callback: (e: MouseEvent) => this.onMouseUp(e),\n };\n\n this.localSubscriptions['mousemove'] = {\n target: document,\n callback: (e: MouseEvent) => this.move(e),\n };\n\n this.addEventListener(COLUMN_CLICK, ({ detail }) => this.dragStart(detail));\n }\n\n dragStart({ event, data }: DragStartEventDetails) {\n if (event.defaultPrevented) {\n return;\n }\n const { defaultPrevented } = dispatch(this.revogrid, DRAG_START, data);\n // check if allowed to drag particulat column\n if (defaultPrevented) {\n return;\n }\n this.clearOrder();\n const { mouseleave, mouseup, mousemove } = this.localSubscriptions;\n mouseleave.target.addEventListener('mouseleave', mouseleave.callback);\n mouseup.target.addEventListener('mouseup', mouseup.callback);\n\n const dataEl = (event.target as HTMLElement).closest('revogr-header');\n const scrollEl = (event.target as HTMLElement).closest('revogr-viewport-scroll');\n if (!dataEl || !scrollEl) {\n return;\n }\n\n // no grouping drag and no row header column drag\n if (isColGrouping(data) || data.providers.type === 'rowHeaders') {\n return;\n }\n\n const cols = this.getDimension(data.pin || 'rgCol');\n const gridRect = this.revogrid.getBoundingClientRect();\n const elRect = dataEl.getBoundingClientRect();\n const startItem = getItemByPosition(\n cols,\n getLeftRelative(event.x, gridRect.left, elRect.left - gridRect.left));\n \n this.staticDragData = {\n startPos: event.x,\n startItem,\n data,\n dataEl,\n scrollEl,\n gridEl: this.revogrid,\n cols,\n };\n this.dragData = this.getData(this.staticDragData);\n mousemove.target.addEventListener('mousemove', mousemove.callback);\n this.orderUi.start(event, {\n ...this.dragData,\n ...this.staticDragData,\n });\n }\n\n doMove(e: MouseEvent) {\n if (!this.staticDragData) {\n return;\n }\n\n const dragData = (this.dragData = this.getData(this.staticDragData));\n if (!dragData) {\n return;\n }\n const start = this.staticDragData.startPos;\n if (Math.abs(start - e.x) > 10) {\n const x = getLeftRelative(e.x, this.dragData.gridRect.left, this.dragData.scrollOffset);\n const rgCol = getItemByPosition(this.staticDragData.cols, x);\n this.orderUi.autoscroll(x, dragData.elRect.width);\n\n // prevent position change if out of bounds\n if (rgCol.itemIndex >= this.staticDragData.cols.count) {\n return;\n }\n this.orderUi.showHandler(\n rgCol.end + dragData.scrollOffset,\n dragData.gridRect.width\n );\n }\n }\n\n move(e: MouseEvent) {\n dispatch(this.revogrid, MOVE, e);\n // then do move\n this.moveFunc(e);\n }\n onMouseOut(_: MouseEvent) {\n this.clearOrder();\n }\n onMouseUp(e: MouseEvent) {\n // apply new positions\n if (this.dragData && this.staticDragData) {\n let relativePos = getLeftRelative(e.x, this.dragData.gridRect.left, this.dragData.scrollOffset);\n if (relativePos < 0) {\n relativePos = 0;\n }\n const newPosition = getItemByPosition(this.staticDragData.cols, relativePos);\n\n const store = this.providers.column.stores[this.dragData.type].store;\n const newItems = [...store.get('items')];\n\n // prevent position change if needed\n const { defaultPrevented: stopDrag } = dispatch(this.revogrid, BEFORE_DRAG_END, {\n ...this.staticDragData,\n startPosition: this.staticDragData.startItem,\n newPosition,\n newItem: store.get('source')[newItems[this.staticDragData.startItem.itemIndex]]\n });\n if (!stopDrag) {\n const prevItems = [...newItems];\n // todo: if move item out of group remove item from group\n const toMove = newItems.splice(this.staticDragData.startItem.itemIndex, 1);\n newItems.splice(newPosition.itemIndex, 0, ...toMove);\n store.set('items', newItems);\n this.providers.dimension.updateSizesPositionByNewDataIndexes(this.dragData.type, newItems, prevItems);\n }\n dispatch(this.revogrid, DRAG_END, this.dragData);\n }\n this.clearOrder();\n }\n\n private clearLocalSubscriptions() {\n each(this.localSubscriptions, ({ target, callback }, key) => target.removeEventListener(key, callback));\n }\n\n clearOrder() {\n this.staticDragData = null;\n this.dragData = null;\n this.clearLocalSubscriptions();\n this.orderUi.stop(this.revogrid);\n }\n /**\n * Clearing subscription\n */\n clearSubscriptions() {\n super.clearSubscriptions();\n this.clearLocalSubscriptions();\n }\n\n private getData({\n gridEl,\n dataEl,\n data,\n }: StaticData): ColumnDragEventData {\n const gridRect = gridEl.getBoundingClientRect();\n const elRect = dataEl.getBoundingClientRect();\n const scrollOffset = elRect.left - gridRect.left;\n return {\n elRect,\n gridRect,\n type: data.pin || 'rgCol',\n scrollOffset,\n };\n }\n private getDimension(type: MultiDimensionType) {\n return this.providers.dimension.stores[type].getCurrentState();\n }\n}\n\nexport function getLeftRelative(\n absoluteX: number,\n gridPos: number,\n offset: number\n): number {\n return absoluteX - gridPos - offset;\n}\n"]}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Built by Revolist OU ❤️
|
|
3
|
+
*/
|
|
4
|
+
import { isGrouping } from "../groupingRow/grouping.service";
|
|
5
|
+
export function sortIndexByItems(indexes, source, sortingFunc = {}) {
|
|
6
|
+
// if no sorting - return unsorted indexes
|
|
7
|
+
if (Object.entries(sortingFunc).length === 0) {
|
|
8
|
+
// Unsorted indexes
|
|
9
|
+
return [...Array(indexes.length).keys()];
|
|
10
|
+
}
|
|
11
|
+
//
|
|
12
|
+
/**
|
|
13
|
+
* go through all indexes and align in new order
|
|
14
|
+
* performs a multi-level sorting by applying multiple comparison functions to determine the order of the items based on different properties.
|
|
15
|
+
*/
|
|
16
|
+
return indexes.sort((a, b) => {
|
|
17
|
+
const itemA = source[a];
|
|
18
|
+
const itemB = source[b];
|
|
19
|
+
for (const [prop, cmp] of Object.entries(sortingFunc)) {
|
|
20
|
+
if (isGrouping(itemA)) {
|
|
21
|
+
if (itemA['__rvgr-prop'] !== prop) {
|
|
22
|
+
return 0;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
if (isGrouping(itemB)) {
|
|
26
|
+
if (itemB['__rvgr-prop'] !== prop) {
|
|
27
|
+
return 0;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* 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.
|
|
32
|
+
* 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.
|
|
33
|
+
*/
|
|
34
|
+
const sorted = cmp === null || cmp === void 0 ? void 0 : cmp(prop, itemA, itemB);
|
|
35
|
+
if (sorted) {
|
|
36
|
+
return sorted;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return 0;
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=sorting.func.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sorting.func.js","sourceRoot":"","sources":["../../../src/plugins/sorting/sorting.func.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAE7D,MAAM,UAAU,gBAAgB,CAC9B,OAAiB,EACjB,MAAkB,EAClB,cAAoC,EAAE;IAEtC,0CAA0C;IAC1C,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7C,mBAAmB;QACnB,OAAO,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3C,CAAC;IACD,EAAE;IACF;;;OAGG;IACH,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC3B,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACxB,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACxB,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;YACtD,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;gBACtB,IAAI,KAAK,CAAC,aAAa,CAAC,KAAK,IAAI,EAAE,CAAC;oBAClC,OAAO,CAAC,CAAC;gBACX,CAAC;YACH,CAAC;YACD,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;gBACtB,IAAI,KAAK,CAAC,aAAa,CAAC,KAAK,IAAI,EAAE,CAAC;oBAClC,OAAO,CAAC,CAAC;gBACX,CAAC;YACH,CAAC;YACD;;;eAGG;YACH,MAAM,MAAM,GAAG,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAG,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;YACzC,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO,MAAM,CAAC;YAChB,CAAC;QACH,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC,CAAC,CAAC;AACL,CAAC","sourcesContent":["import type { DataType } from '@type';\nimport type { SortingOrderFunction } from './sorting.types';\nimport { isGrouping } from '../groupingRow/grouping.service';\n\nexport function sortIndexByItems(\n indexes: number[],\n source: DataType[],\n sortingFunc: SortingOrderFunction = {},\n): number[] {\n // if no sorting - return unsorted indexes\n if (Object.entries(sortingFunc).length === 0) {\n // Unsorted 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 const itemA = source[a];\n const itemB = source[b];\n for (const [prop, cmp] of Object.entries(sortingFunc)) {\n if (isGrouping(itemA)) {\n if (itemA['__rvgr-prop'] !== prop) {\n return 0;\n }\n }\n if (isGrouping(itemB)) {\n if (itemB['__rvgr-prop'] !== prop) {\n return 0;\n }\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"]}
|
|
@@ -4,73 +4,100 @@
|
|
|
4
4
|
import size from "lodash/size";
|
|
5
5
|
import debounce from "lodash/debounce";
|
|
6
6
|
import { BasePlugin } from "../base.plugin";
|
|
7
|
-
import { getColumnByProp } from "../../utils/column.utils";
|
|
7
|
+
import { getCellRaw, getColumnByProp } from "../../utils/column.utils";
|
|
8
8
|
import { rowTypes } from "../../store/index";
|
|
9
|
+
import { sortIndexByItems } from "./sorting.func";
|
|
10
|
+
export * from './sorting.types';
|
|
9
11
|
/**
|
|
10
12
|
* Lifecycle
|
|
11
13
|
* 1. @event `beforesorting` - Triggered when sorting just starts. Nothing has happened yet. This can be triggered from a column or from the source. If the type is from rows, the column will be undefined.
|
|
14
|
+
* 1.1. @event `beforesourcesortingapply` - Triggered before the sorting data is applied to the data source. You can prevent this event, and the data will not be sorted.
|
|
12
15
|
* 2. @method `updateColumnSorting` - Updates the column sorting icon on the grid and the column itself, but the data remains untouched.
|
|
13
16
|
* 3. @event `beforesortingapply` - Triggered before the sorting data is applied to the data source. You can prevent this event, and the data will not be sorted. This event is only called from a column sorting click.
|
|
14
17
|
* 4. @event `aftersortingapply` - Triggered after sorting has been applied and completed. This event occurs for both row and column sorting.
|
|
15
18
|
*
|
|
16
19
|
* Note: If you prevent an event, it will not proceed to the subsequent steps.
|
|
17
20
|
*/
|
|
18
|
-
export
|
|
19
|
-
runSorting(order, comparison) {
|
|
21
|
+
export class SortingPlugin extends BasePlugin {
|
|
22
|
+
runSorting(order, comparison, ignoreViewportUpdate) {
|
|
20
23
|
var _a;
|
|
21
|
-
this.sort(order, comparison);
|
|
24
|
+
this.sort(order, comparison, undefined, ignoreViewportUpdate);
|
|
22
25
|
(_a = this.sortingPromise) === null || _a === void 0 ? void 0 : _a.call(this);
|
|
23
26
|
this.sortingPromise = null;
|
|
24
27
|
}
|
|
25
|
-
constructor(revogrid, providers) {
|
|
28
|
+
constructor(revogrid, providers, config) {
|
|
26
29
|
super(revogrid, providers);
|
|
27
30
|
this.revogrid = revogrid;
|
|
28
31
|
this.sortingPromise = null;
|
|
29
|
-
this.postponeSort = debounce((order, comparison) => this.runSorting(order, comparison), 50);
|
|
30
|
-
const
|
|
32
|
+
this.postponeSort = debounce((order, comparison, ignoreViewportUpdate) => this.runSorting(order, comparison, ignoreViewportUpdate), 50);
|
|
33
|
+
const setConfig = (cfg) => {
|
|
34
|
+
var _a;
|
|
35
|
+
if (cfg) {
|
|
36
|
+
const sortingFunc = {};
|
|
37
|
+
const order = {};
|
|
38
|
+
(_a = cfg.columns) === null || _a === void 0 ? void 0 : _a.forEach(col => {
|
|
39
|
+
sortingFunc[col.prop] = this.getComparer(col, col.order);
|
|
40
|
+
order[col.prop] = col.order;
|
|
41
|
+
});
|
|
42
|
+
// // set sorting
|
|
43
|
+
this.sorting = order;
|
|
44
|
+
this.sortingFunc = sortingFunc;
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
setConfig(config);
|
|
48
|
+
this.addEventListener('sortingconfigchanged', ({ detail }) => {
|
|
49
|
+
config = detail;
|
|
50
|
+
setConfig(detail);
|
|
51
|
+
this.startSorting(this.sorting, this.sortingFunc);
|
|
52
|
+
});
|
|
53
|
+
this.addEventListener('beforeanysource', ({ detail: { type }, }) => {
|
|
31
54
|
// if sorting was provided - sort data
|
|
32
55
|
if (!!this.sorting && this.sortingFunc) {
|
|
33
|
-
const
|
|
34
|
-
if (
|
|
56
|
+
const event = this.emit('beforesourcesortingapply', { type, sorting: this.sorting });
|
|
57
|
+
if (event.defaultPrevented) {
|
|
35
58
|
return;
|
|
36
59
|
}
|
|
37
60
|
this.startSorting(this.sorting, this.sortingFunc);
|
|
38
61
|
}
|
|
39
|
-
};
|
|
40
|
-
|
|
62
|
+
});
|
|
63
|
+
this.addEventListener('aftercolumnsset', ({ detail: { order }, }) => {
|
|
64
|
+
// if config provided - do nothing, read from config
|
|
65
|
+
if (config) {
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
41
68
|
const columns = this.providers.column.getColumns();
|
|
42
69
|
const sortingFunc = {};
|
|
43
70
|
for (let prop in order) {
|
|
44
71
|
const cmp = this.getComparer(getColumnByProp(columns, prop), order[prop]);
|
|
45
72
|
sortingFunc[prop] = cmp;
|
|
46
73
|
}
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
74
|
+
// set sorting
|
|
75
|
+
this.sorting = order;
|
|
76
|
+
this.sortingFunc = order && sortingFunc;
|
|
77
|
+
});
|
|
78
|
+
this.addEventListener('beforeheaderclick', (e) => {
|
|
79
|
+
var _a, _b, _c, _d;
|
|
51
80
|
if (e.defaultPrevented) {
|
|
52
81
|
return;
|
|
53
82
|
}
|
|
54
|
-
if (!e.detail.column.sortable) {
|
|
83
|
+
if (!((_b = (_a = e.detail) === null || _a === void 0 ? void 0 : _a.column) === null || _b === void 0 ? void 0 : _b.sortable)) {
|
|
55
84
|
return;
|
|
56
85
|
}
|
|
57
|
-
this.headerclick(e.detail.column, e.detail.index, (
|
|
58
|
-
};
|
|
59
|
-
this.addEventListener('beforeanysource', beforeanysource);
|
|
60
|
-
this.addEventListener('aftercolumnsset', aftercolumnsset);
|
|
61
|
-
this.addEventListener('beforeheaderclick', headerclick);
|
|
86
|
+
this.headerclick(e.detail.column, e.detail.index, (_d = (_c = e.detail) === null || _c === void 0 ? void 0 : _c.originalEvent) === null || _d === void 0 ? void 0 : _d.shiftKey);
|
|
87
|
+
});
|
|
62
88
|
}
|
|
63
|
-
startSorting(order, sortingFunc) {
|
|
89
|
+
startSorting(order, sortingFunc, ignoreViewportUpdate) {
|
|
64
90
|
if (!this.sortingPromise) {
|
|
91
|
+
// add job before render
|
|
65
92
|
this.revogrid.jobsBeforeRender.push(new Promise(resolve => {
|
|
66
93
|
this.sortingPromise = resolve;
|
|
67
94
|
}));
|
|
68
95
|
}
|
|
69
|
-
this.postponeSort(order, sortingFunc);
|
|
96
|
+
this.postponeSort(order, sortingFunc, ignoreViewportUpdate);
|
|
70
97
|
}
|
|
71
98
|
getComparer(column, order) {
|
|
72
|
-
var _a;
|
|
73
|
-
const cellCmp = ((_a = column === null || column === void 0 ? void 0 : column.cellCompare) === null || _a === void 0 ? void 0 : _a.bind({ order })) || this.defaultCellCompare;
|
|
99
|
+
var _a, _b;
|
|
100
|
+
const cellCmp = ((_a = column === null || column === void 0 ? void 0 : column.cellCompare) === null || _a === void 0 ? void 0 : _a.bind({ order })) || ((_b = this.defaultCellCompare) === null || _b === void 0 ? void 0 : _b.bind({ column, order }));
|
|
74
101
|
if (order == 'asc') {
|
|
75
102
|
return cellCmp;
|
|
76
103
|
}
|
|
@@ -101,9 +128,8 @@ export default class SortingPlugin extends BasePlugin {
|
|
|
101
128
|
if (beforeApplyEvent.defaultPrevented) {
|
|
102
129
|
return;
|
|
103
130
|
}
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
if (additive && this.sorting) {
|
|
131
|
+
const cmp = this.getComparer(beforeApplyEvent.detail.column, beforeApplyEvent.detail.order);
|
|
132
|
+
if (beforeApplyEvent.detail.additive && this.sorting) {
|
|
107
133
|
const sorting = {};
|
|
108
134
|
const sortingFunc = {};
|
|
109
135
|
this.sorting = Object.assign(Object.assign({}, this.sorting), sorting);
|
|
@@ -139,11 +165,9 @@ export default class SortingPlugin extends BasePlugin {
|
|
|
139
165
|
* @param sorting - per column sorting
|
|
140
166
|
* @param data - this.stores['rgRow'].store.get('source')
|
|
141
167
|
*/
|
|
142
|
-
sort(sorting, sortingFunc, types = rowTypes) {
|
|
168
|
+
sort(sorting, sortingFunc, types = rowTypes, ignoreViewportUpdate = false) {
|
|
143
169
|
// if no sorting - reset
|
|
144
|
-
if (!
|
|
145
|
-
this.sorting = undefined;
|
|
146
|
-
this.sortingFunc = undefined;
|
|
170
|
+
if (!Object.keys(sorting || {}).length) {
|
|
147
171
|
for (let type of types) {
|
|
148
172
|
const storeService = this.providers.data.stores[type];
|
|
149
173
|
// row data
|
|
@@ -151,35 +175,40 @@ export default class SortingPlugin extends BasePlugin {
|
|
|
151
175
|
// row indexes
|
|
152
176
|
const proxyItems = storeService.store.get('proxyItems');
|
|
153
177
|
// row indexes
|
|
154
|
-
const newItemsOrder =
|
|
178
|
+
const newItemsOrder = Array.from({ length: source.length }, (_, i) => i); // recover indexes range(0, source.length)
|
|
155
179
|
this.providers.dimension.updateSizesPositionByNewDataIndexes(type, newItemsOrder, proxyItems);
|
|
156
|
-
storeService.setData({ proxyItems: newItemsOrder, source: [...source] });
|
|
180
|
+
storeService.setData({ proxyItems: newItemsOrder, source: [...source], });
|
|
157
181
|
}
|
|
158
182
|
}
|
|
159
183
|
else {
|
|
160
|
-
// set sorting
|
|
161
|
-
this.sorting = sorting;
|
|
162
|
-
this.sortingFunc = sortingFunc;
|
|
163
184
|
for (let type of types) {
|
|
164
185
|
const storeService = this.providers.data.stores[type];
|
|
165
186
|
// row data
|
|
166
187
|
const source = storeService.store.get('source');
|
|
167
188
|
// row indexes
|
|
168
189
|
const proxyItems = storeService.store.get('proxyItems');
|
|
169
|
-
const newItemsOrder =
|
|
170
|
-
|
|
190
|
+
const newItemsOrder = sortIndexByItems([...proxyItems], source, sortingFunc);
|
|
191
|
+
// take row indexes before trim applied and proxy items
|
|
192
|
+
const prevItems = storeService.store.get('items');
|
|
171
193
|
storeService.setData({
|
|
172
194
|
proxyItems: newItemsOrder,
|
|
173
195
|
source: [...source],
|
|
174
196
|
});
|
|
197
|
+
// take currently visible row indexes
|
|
198
|
+
const newItems = storeService.store.get('items');
|
|
199
|
+
if (!ignoreViewportUpdate) {
|
|
200
|
+
this.providers.dimension
|
|
201
|
+
.updateSizesPositionByNewDataIndexes(type, newItems, prevItems);
|
|
202
|
+
}
|
|
175
203
|
}
|
|
176
204
|
}
|
|
177
205
|
this.emit('aftersortingapply');
|
|
178
206
|
}
|
|
179
207
|
defaultCellCompare(prop, a, b) {
|
|
180
|
-
|
|
181
|
-
const
|
|
182
|
-
const
|
|
208
|
+
const aRaw = this.column ? getCellRaw(a, this.column) : a === null || a === void 0 ? void 0 : a[prop];
|
|
209
|
+
const bRaw = this.column ? getCellRaw(b, this.column) : b === null || b === void 0 ? void 0 : b[prop];
|
|
210
|
+
const av = aRaw === null || aRaw === void 0 ? void 0 : aRaw.toString().toLowerCase();
|
|
211
|
+
const bv = bRaw === null || bRaw === void 0 ? void 0 : bRaw.toString().toLowerCase();
|
|
183
212
|
return av == bv ? 0 : av > bv ? 1 : -1;
|
|
184
213
|
}
|
|
185
214
|
descCellCompare(cmp) {
|
|
@@ -187,33 +216,6 @@ export default class SortingPlugin extends BasePlugin {
|
|
|
187
216
|
return -1 * cmp(prop, a, b);
|
|
188
217
|
};
|
|
189
218
|
}
|
|
190
|
-
sortIndexByItems(indexes, source, sortingFunc = {}) {
|
|
191
|
-
// if no sorting - return unsorted indexes
|
|
192
|
-
if (Object.entries(sortingFunc).length === 0) {
|
|
193
|
-
// Unsorted indexes
|
|
194
|
-
return [...Array(indexes.length).keys()];
|
|
195
|
-
}
|
|
196
|
-
//
|
|
197
|
-
/**
|
|
198
|
-
* go through all indexes and align in new order
|
|
199
|
-
* performs a multi-level sorting by applying multiple comparison functions to determine the order of the items based on different properties.
|
|
200
|
-
*/
|
|
201
|
-
return indexes.sort((a, b) => {
|
|
202
|
-
for (const [prop, cmp] of Object.entries(sortingFunc)) {
|
|
203
|
-
const itemA = source[a];
|
|
204
|
-
const itemB = source[b];
|
|
205
|
-
/**
|
|
206
|
-
* 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.
|
|
207
|
-
* 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.
|
|
208
|
-
*/
|
|
209
|
-
const sorted = cmp === null || cmp === void 0 ? void 0 : cmp(prop, itemA, itemB);
|
|
210
|
-
if (sorted) {
|
|
211
|
-
return sorted;
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
return 0;
|
|
215
|
-
});
|
|
216
|
-
}
|
|
217
219
|
getNextOrder(currentOrder) {
|
|
218
220
|
switch (currentOrder) {
|
|
219
221
|
case undefined:
|