@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"viewport.service.js","sourceRoot":"","sources":["../../../src/components/revoGrid/viewport.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { Observable, RevoGrid, Selection } from '../../interfaces';\nimport DimensionProvider from '../../services/dimension.provider';\nimport SelectionStoreConnector, { EMPTY_INDEX } from '../../services/selection.store.connector';\nimport ViewportProvider from '../../services/viewport.provider';\nimport { DataSourceState, getSourceItem, getVisibleSourceItem } from '../../store/dataSource/data.store';\nimport { columnTypes, rowTypes } from '../../store/storeTypes';\nimport { UUID } from '../../utils/consts';\nimport { OrdererService } from '../order/orderRenderer';\nimport GridScrollingService from './viewport.scrolling.service';\nimport { CONTENT_SLOT, FOOTER_SLOT, getLastCell, HEADER_SLOT } from './viewport.helpers';\nimport { HeaderProperties, SlotType, ViewportColumn, ViewportData, ViewportProps } from './viewport.interfaces';\nimport ColumnDataProvider from '../../services/column.data.provider';\nimport { DataProvider } from '../../services/data.provider';\nimport { reduce } from 'lodash';\n\nexport type ResizeDetails = { [index: number]: RevoGrid.ColumnRegular };\ntype Config = {\n columnProvider: ColumnDataProvider;\n dataProvider: DataProvider;\n dimensionProvider: DimensionProvider;\n viewportProvider: ViewportProvider;\n uuid: string | null;\n scrollingService: GridScrollingService;\n orderService: OrdererService;\n selectionStoreConnector: SelectionStoreConnector;\n\n resize(r: ResizeDetails): void;\n};\n\nexport type FocusedData = {\n model: any;\n cell: Selection.Cell;\n colType: RevoGrid.DimensionCols;\n rowType: RevoGrid.DimensionRows;\n column?: RevoGrid.ColumnRegular;\n};\n\nexport default class ViewportService {\n readonly columns: ViewportProps[];\n constructor(private sv: Config, contentHeight: number) {\n this.sv.selectionStoreConnector?.beforeUpdate();\n this.columns = this.getViewportColumnData(contentHeight);\n this.sv.scrollingService?.unregister();\n }\n\n private onColumnResize(\n type: RevoGrid.DimensionCols,\n { detail }: CustomEvent<RevoGrid.ViewSettingSizeProp>,\n store: Observable<DataSourceState<RevoGrid.ColumnRegular, RevoGrid.DimensionCols>>,\n ) {\n this.sv.dimensionProvider?.setCustomSizes(type, detail, true);\n const changedItems = reduce(\n detail || {},\n (r: ResizeDetails, size, i) => {\n const index = parseInt(i, 10);\n const item = getSourceItem(store, index);\n if (item) {\n r[index] = { ...item, size };\n }\n return r;\n },\n {},\n );\n this.sv.resize(changedItems);\n }\n\n /**\n * Transform data from stores and apply it to different components\n */\n private getViewportColumnData(contentHeight: number): ViewportProps[] {\n const columns: ViewportProps[] = [];\n let x = 0; // we increase x only if column present\n columnTypes.forEach(val => {\n const colStore = this.sv.columnProvider.stores[val].store;\n // only columns that have data show\n if (!colStore.get('items').length) {\n return;\n }\n const column: ViewportColumn = {\n colType: val,\n position: { x, y: 1 },\n\n contentHeight,\n fixWidth: val !== 'rgCol',\n uuid: `${this.sv.uuid}-${x}`,\n\n viewports: this.sv.viewportProvider.stores,\n dimensions: this.sv.dimensionProvider.stores,\n rowStores: this.sv.dataProvider.stores,\n\n colStore,\n onHeaderresize: e => this.onColumnResize(val, e, colStore),\n };\n if (val === 'rgCol') {\n column.onResizeViewport = (e: CustomEvent<RevoGrid.ViewPortResizeEvent>) => this.sv.viewportProvider?.setViewport(e.detail.dimension, { virtualSize: e.detail.size });\n }\n const colData = this.gatherColumnData(column);\n const columnSelectionStore = this.registerCol(colData.position.x, val);\n\n // render per each column data collections vertically\n const dataPorts = this.dataViewPort(column).reduce<ViewportData[]>((r, rgRow) => {\n // register selection store for Segment\n const segmentSelection = this.registerSegment(rgRow.position);\n segmentSelection.setLastCell(rgRow.lastCell);\n\n // register selection store for Row\n const rowSelectionStore = this.registerRow(rgRow.position.y, rgRow.type);\n const rowDef: ViewportData = {\n ...rgRow,\n rowSelectionStore,\n segmentSelectionStore: segmentSelection.store,\n ref: (e: Element) => this.sv.selectionStoreConnector.registerSection(e),\n onSetRange: e => segmentSelection.setRangeArea(e.detail),\n onSetTempRange: e => segmentSelection.setTempArea(e.detail),\n onFocusCell: e => {\n segmentSelection.clearFocus();\n this.sv.selectionStoreConnector.focus(segmentSelection, e.detail);\n },\n };\n r.push(rowDef);\n return r;\n }, []);\n columns.push({\n ...colData,\n columnSelectionStore,\n dataPorts,\n });\n x++;\n });\n return columns;\n }\n\n /** register selection store for Segment */\n private registerSegment(position: Selection.Cell) {\n return this.sv.selectionStoreConnector.register(position);\n }\n\n /** register selection store for Row */\n private registerRow(y: number, type: RevoGrid.DimensionRows) {\n return this.sv.selectionStoreConnector.registerRow(y, type).store;\n }\n\n /** register selection store for Column */\n private registerCol(x: number, type: RevoGrid.DimensionCols) {\n return this.sv.selectionStoreConnector.registerColumn(x, type).store;\n }\n\n /** Collect Column data */\n private gatherColumnData(data: ViewportColumn) {\n const parent = data.uuid;\n const realSize = data.dimensions[data.colType].store.get('realSize');\n const prop: Record<string, any> = {\n contentWidth: realSize,\n class: data.colType,\n [`${UUID}`]: data.uuid,\n contentHeight: data.contentHeight,\n key: data.colType,\n onResizeViewport: data.onResizeViewport,\n };\n if (data.fixWidth) {\n prop.style = { minWidth: `${realSize}px` };\n }\n const headerProp: HeaderProperties = {\n parent,\n colData: getVisibleSourceItem(data.colStore),\n dimensionCol: data.dimensions[data.colType].store,\n groups: data.colStore.get('groups'),\n groupingDepth: data.colStore.get('groupingDepth'),\n onHeaderresize: data.onHeaderresize,\n };\n\n return {\n prop,\n type: data.colType,\n position: data.position,\n headerProp,\n parent,\n viewportCol: data.viewports[data.colType].store,\n };\n }\n\n /** Collect Row data */\n private dataViewPort(data: ViewportColumn) {\n const slots: { [key in RevoGrid.DimensionRows]: SlotType } = {\n rowPinStart: HEADER_SLOT,\n rgRow: CONTENT_SLOT,\n rowPinEnd: FOOTER_SLOT,\n };\n\n // y position for selection\n let y = 0;\n return rowTypes.reduce((r, type) => {\n // filter out empty sources, we still need to return source to keep slot working\n const isPresent = data.viewports[type].store.get('realCount') || type === 'rgRow';\n const rgCol = {\n ...data,\n position: { ...data.position, y: isPresent ? y : EMPTY_INDEX },\n };\n r.push(\n this.dataPartition(\n rgCol,\n type,\n slots[type],\n type !== 'rgRow', // is fixed\n ),\n );\n if (isPresent) {\n y++;\n }\n return r;\n }, []);\n }\n\n private dataPartition(data: ViewportColumn, type: RevoGrid.DimensionRows, slot: SlotType, fixed?: boolean) {\n return {\n colData: data.colStore,\n viewportCol: data.viewports[data.colType].store,\n viewportRow: data.viewports[type].store,\n lastCell: getLastCell(data, type),\n slot,\n type,\n canDrag: !fixed,\n position: data.position,\n uuid: `${data.uuid}-${data.position.x}-${data.position.y}`,\n dataStore: data.rowStores[type].store,\n dimensionCol: data.dimensions[data.colType].store,\n dimensionRow: data.dimensions[type].store,\n style: fixed ? { height: `${data.dimensions[type].store.get('realSize')}px` } : undefined,\n };\n }\n\n scrollToCell(cell: Partial<Selection.Cell>) {\n for (let key in cell) {\n const coordinate = cell[key as keyof Selection.Cell];\n this.sv.scrollingService.onScroll({ dimension: key === 'x' ? 'rgCol' : 'rgRow', coordinate });\n }\n }\n\n /**\n * Clear current grid focus\n */\n clearFocused() {\n this.sv.selectionStoreConnector.clearAll();\n }\n\n clearEdit() {\n this.sv.selectionStoreConnector.setEdit(false);\n }\n\n getFocused(): FocusedData | null {\n const focused = this.sv.selectionStoreConnector.focusedStore;\n if (!focused) {\n return null;\n }\n const colType = this.sv.selectionStoreConnector.storesXToType[focused.position.x];\n const column = this.sv.columnProvider.getColumn(focused.cell.x, colType);\n const rowType = this.sv.selectionStoreConnector.storesYToType[focused.position.x];\n const model = this.sv.dataProvider.getModel(focused.cell.y, rowType);\n return {\n column,\n model,\n cell: focused.cell,\n colType,\n rowType,\n };\n }\n\n getStoreCoordinateByType(colType: RevoGrid.DimensionCols, rowType: RevoGrid.DimensionRows) {\n const stores = this.sv.selectionStoreConnector.storesByType;\n const storeCoordinate = {\n x: stores[colType],\n y: stores[rowType],\n };\n return storeCoordinate;\n }\n\n setFocus(colType: string, rowType: string, start: Selection.Cell, end: Selection.Cell) {\n this.sv.selectionStoreConnector?.focusByCell(\n this.getStoreCoordinateByType(\n colType as RevoGrid.DimensionCols,\n rowType as RevoGrid.DimensionRows\n ), start, end);\n }\n\n getSelectedRange(): Selection.RangeArea | null {\n return this.sv.selectionStoreConnector.selectedRange;\n }\n\n setEdit(rowIndex: number, colIndex: number, colType: RevoGrid.DimensionCols, rowType: RevoGrid.DimensionRows) {\n this.sv.selectionStoreConnector?.setEditByCell(this.getStoreCoordinateByType(colType, rowType), { x: colIndex, y: rowIndex });\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"viewport.service.js","sourceRoot":"","sources":["../../../src/components/revoGrid/viewport.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { Observable, RevoGrid, Selection } from '../../interfaces';\nimport DimensionProvider from '../../services/dimension.provider';\nimport SelectionStoreConnector, { EMPTY_INDEX } from '../../services/selection.store.connector';\nimport ViewportProvider from '../../services/viewport.provider';\nimport { DataSourceState, getSourceItem, getVisibleSourceItem } from '../../store/dataSource/data.store';\nimport { columnTypes, rowTypes } from '../../store/storeTypes';\nimport { UUID } from '../../utils/consts';\nimport { OrdererService } from '../order/orderRenderer';\nimport GridScrollingService from './viewport.scrolling.service';\nimport { CONTENT_SLOT, FOOTER_SLOT, getLastCell, HEADER_SLOT } from './viewport.helpers';\nimport { HeaderProperties, SlotType, ViewportColumn, ViewportData, ViewportProps } from './viewport.interfaces';\nimport ColumnDataProvider from '../../services/column.data.provider';\nimport { DataProvider } from '../../services/data.provider';\nimport { reduce } from 'lodash';\n\nexport type ResizeDetails = { [index: number]: RevoGrid.ColumnRegular };\ntype Config = {\n columnProvider: ColumnDataProvider;\n dataProvider: DataProvider;\n dimensionProvider: DimensionProvider;\n viewportProvider: ViewportProvider;\n uuid: string | null;\n scrollingService: GridScrollingService;\n orderService: OrdererService;\n selectionStoreConnector: SelectionStoreConnector;\n\n resize(r: ResizeDetails): void;\n};\n\nexport type FocusedData = {\n model: any;\n cell: Selection.Cell;\n colType: RevoGrid.DimensionCols;\n rowType: RevoGrid.DimensionRows;\n column?: RevoGrid.ColumnRegular;\n};\n\nexport default class ViewportService {\n readonly columns: ViewportProps[];\n constructor(private sv: Config, contentHeight: number) {\n this.sv.selectionStoreConnector?.beforeUpdate();\n this.columns = this.getViewportColumnData(contentHeight);\n this.sv.scrollingService?.unregister();\n }\n\n private onColumnResize(\n type: RevoGrid.DimensionCols,\n { detail }: CustomEvent<RevoGrid.ViewSettingSizeProp>,\n store: Observable<DataSourceState<RevoGrid.ColumnRegular, RevoGrid.DimensionCols>>,\n ) {\n this.sv.dimensionProvider?.setCustomSizes(type, detail, true);\n const changedItems = reduce(\n detail || {},\n (r: ResizeDetails, size, i) => {\n const index = parseInt(i, 10);\n const item = getSourceItem(store, index);\n if (item) {\n r[index] = { ...item, size };\n }\n return r;\n },\n {},\n );\n this.sv.resize(changedItems);\n }\n\n /**\n * Transform data from stores and apply it to different components\n * Handle columns\n */\n private getViewportColumnData(contentHeight: number): ViewportProps[] {\n const columns: ViewportProps[] = [];\n let x = 0; // we increase x only if column present\n columnTypes.forEach(val => {\n const colStore = this.sv.columnProvider.stores[val].store;\n // only columns that have data show\n if (!colStore.get('items').length) {\n return;\n }\n const column: ViewportColumn = {\n colType: val,\n position: { x, y: 1 },\n\n contentHeight,\n fixWidth: val !== 'rgCol',\n uuid: `${this.sv.uuid}-${x}`,\n\n viewports: this.sv.viewportProvider.stores,\n dimensions: this.sv.dimensionProvider.stores,\n rowStores: this.sv.dataProvider.stores,\n\n colStore,\n onHeaderresize: e => this.onColumnResize(val, e, colStore),\n };\n if (val === 'rgCol') {\n column.onResizeViewport = (e: CustomEvent<RevoGrid.ViewPortResizeEvent>) => this.sv.viewportProvider?.setViewport(e.detail.dimension, { virtualSize: e.detail.size });\n }\n const colData = this.gatherColumnData(column);\n const columnSelectionStore = this.registerCol(colData.position.x, val);\n\n // render per each column data collections vertically\n const dataPorts = this.dataViewPort(column).reduce<ViewportData[]>((r, rgRow) => {\n // register selection store for Segment\n const segmentSelection = this.registerSegment(rgRow.position);\n segmentSelection.setLastCell(rgRow.lastCell);\n\n // register selection store for Row\n const rowSelectionStore = this.registerRow(rgRow.position.y, rgRow.type);\n const rowDef: ViewportData = {\n ...rgRow,\n rowSelectionStore,\n segmentSelectionStore: segmentSelection.store,\n ref: (e: Element) => this.sv.selectionStoreConnector.registerSection(e),\n onSetRange: e => {\n segmentSelection.setRangeArea(e.detail);\n },\n onSetTempRange: e => {\n segmentSelection.setTempArea(e.detail);\n },\n onFocusCell: e => {\n // todo: multi focus\n segmentSelection.clearFocus();\n this.sv.selectionStoreConnector.focus(segmentSelection, e.detail);\n },\n };\n r.push(rowDef);\n return r;\n }, []);\n columns.push({\n ...colData,\n columnSelectionStore,\n dataPorts,\n });\n x++;\n });\n return columns;\n }\n\n /** register selection store for Segment */\n private registerSegment(position: Selection.Cell) {\n return this.sv.selectionStoreConnector.register(position);\n }\n\n /** register selection store for Row */\n private registerRow(y: number, type: RevoGrid.DimensionRows) {\n return this.sv.selectionStoreConnector.registerRow(y, type).store;\n }\n\n /** register selection store for Column */\n private registerCol(x: number, type: RevoGrid.DimensionCols) {\n return this.sv.selectionStoreConnector.registerColumn(x, type).store;\n }\n\n /** Collect Column data */\n private gatherColumnData(data: ViewportColumn) {\n const parent = data.uuid;\n const realSize = data.dimensions[data.colType].store.get('realSize');\n const prop: Record<string, any> = {\n contentWidth: realSize,\n class: data.colType,\n [`${UUID}`]: data.uuid,\n contentHeight: data.contentHeight,\n key: data.colType,\n onResizeViewport: data.onResizeViewport,\n };\n if (data.fixWidth) {\n prop.style = { minWidth: `${realSize}px` };\n }\n const headerProp: HeaderProperties = {\n parent,\n colData: getVisibleSourceItem(data.colStore),\n dimensionCol: data.dimensions[data.colType].store,\n groups: data.colStore.get('groups'),\n groupingDepth: data.colStore.get('groupingDepth'),\n resizeHandler: data.colType === 'colPinEnd' ? ['l'] : undefined,\n onHeaderresize: data.onHeaderresize,\n };\n\n return {\n prop,\n type: data.colType,\n position: data.position,\n headerProp,\n parent,\n viewportCol: data.viewports[data.colType].store,\n };\n }\n\n /** Collect Row data */\n private dataViewPort(data: ViewportColumn) {\n const slots: { [key in RevoGrid.DimensionRows]: SlotType } = {\n rowPinStart: HEADER_SLOT,\n rgRow: CONTENT_SLOT,\n rowPinEnd: FOOTER_SLOT,\n };\n\n // y position for selection\n let y = 0;\n return rowTypes.reduce((r, type) => {\n // filter out empty sources, we still need to return source to keep slot working\n const isPresent = data.viewports[type].store.get('realCount') || type === 'rgRow';\n const rgCol = {\n ...data,\n position: { ...data.position, y: isPresent ? y : EMPTY_INDEX },\n };\n r.push(\n this.dataPartition(\n rgCol,\n type,\n slots[type],\n type !== 'rgRow', // is fixed\n ),\n );\n if (isPresent) {\n y++;\n }\n return r;\n }, []);\n }\n\n private dataPartition(data: ViewportColumn, type: RevoGrid.DimensionRows, slot: SlotType, fixed?: boolean) {\n return {\n colData: data.colStore,\n viewportCol: data.viewports[data.colType].store,\n viewportRow: data.viewports[type].store,\n lastCell: getLastCell(data, type),\n slot,\n type,\n canDrag: !fixed,\n position: data.position,\n uuid: `${data.uuid}-${data.position.x}-${data.position.y}`,\n dataStore: data.rowStores[type].store,\n dimensionCol: data.dimensions[data.colType].store,\n dimensionRow: data.dimensions[type].store,\n style: fixed ? { height: `${data.dimensions[type].store.get('realSize')}px` } : undefined,\n };\n }\n\n scrollToCell(cell: Partial<Selection.Cell>) {\n for (let key in cell) {\n const coordinate = cell[key as keyof Selection.Cell];\n this.sv.scrollingService.scrollService({ dimension: key === 'x' ? 'rgCol' : 'rgRow', coordinate });\n }\n }\n\n /**\n * Clear current grid focus\n */\n clearFocused() {\n this.sv.selectionStoreConnector.clearAll();\n }\n\n clearEdit() {\n this.sv.selectionStoreConnector.setEdit(false);\n }\n\n /**\n * Collect focused element data\n */\n getFocused(): FocusedData | null {\n const focused = this.sv.selectionStoreConnector.focusedStore;\n if (!focused) {\n return null;\n }\n // get column data\n const colType = this.sv.selectionStoreConnector.storesXToType[focused.position.x];\n const column = this.sv.columnProvider.getColumn(focused.cell.x, colType);\n\n // get row data\n const rowType = this.sv.selectionStoreConnector.storesYToType[focused.position.y];\n const model = this.sv.dataProvider.getModel(focused.cell.y, rowType);\n return {\n column,\n model,\n cell: focused.cell,\n colType,\n rowType,\n };\n }\n\n getStoreCoordinateByType(colType: RevoGrid.DimensionCols, rowType: RevoGrid.DimensionRows) {\n const stores = this.sv.selectionStoreConnector.storesByType;\n const storeCoordinate = {\n x: stores[colType],\n y: stores[rowType],\n };\n return storeCoordinate;\n }\n\n setFocus(colType: string, rowType: string, start: Selection.Cell, end: Selection.Cell) {\n this.sv.selectionStoreConnector?.focusByCell(\n this.getStoreCoordinateByType(\n colType as RevoGrid.DimensionCols,\n rowType as RevoGrid.DimensionRows\n ), start, end);\n }\n\n getSelectedRange(): Selection.RangeArea | null {\n return this.sv.selectionStoreConnector.selectedRange;\n }\n\n setEdit(rowIndex: number, colIndex: number, colType: RevoGrid.DimensionCols, rowType: RevoGrid.DimensionRows) {\n this.sv.selectionStoreConnector?.setEditByCell(this.getStoreCoordinateByType(colType, rowType), { x: colIndex, y: rowIndex });\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"revogr-row-headers.js","sourceRoot":"","sources":["../../../src/components/rowHeaders/revogr-row-headers.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAgB,MAAM,eAAe,CAAC;AAErE,OAAO,SAAS,MAAM,mCAAmC,CAAC;AAC1D,OAAO,aAAa,MAAM,qCAAqC,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAG3D,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"revogr-row-headers.js","sourceRoot":"","sources":["../../../src/components/rowHeaders/revogr-row-headers.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAgB,MAAM,eAAe,CAAC;AAErE,OAAO,SAAS,MAAM,mCAAmC,CAAC;AAC1D,OAAO,aAAa,MAAM,qCAAqC,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAG3D,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAG3D;;;GAGG;AAGH,MAAM,OAAO,gBAAgB;;;;;;;;;;;EAgB3B,MAAM;IACJ,MAAM,SAAS,GAAkB,EAAE,CAAC;IACpC,MAAM,QAAQ,GAAG,IAAI,aAAa,CAAC,aAAa,CAAC,CAAC;IAElD,4BAA4B;IAC5B,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE;MAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;MACrD,oBAAoB;MACpB,MAAM,SAAS,GAAG,IAAI,SAAS,CAA4C,IAAI,CAAC,IAAI,CAAC,CAAC;MACtF,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;MACnD,uBAAuB;MACvB,MAAM,OAAO,GAAG,IAAI,SAAS,CAAiD,aAAa,CAAC,CAAC;MAC7F,MAAM,MAAM,mBACV,YAAY,EAAE,eAAe,CAAC,WAAW,CAAC,IACvC,IAAI,CAAC,eAAe,CACxB,CAAC;MACF,OAAO,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;MAE7B,MAAM,QAAQ,mCACT,IAAI,KACP,QAAQ,EAAE,IAAI,CAAC,QAAQ,EACvB,SAAS,EAAE,SAAS,CAAC,KAAK,EAC1B,OAAO,EAAE,OAAO,CAAC,KAAK,EACtB,WAAW,EAAE,QAAQ,CAAC,KAAK,EAC3B,QAAQ,EAAE,IAAI,EACd,KAAK,EAAE,KAAK,GACb,CAAC;MACF,SAAS,CAAC,IAAI,CAAC,mCAAiB,QAAQ,EAAI,CAAC,CAAC;MAC9C,WAAW,IAAI,SAAS,CAAC;KAC1B;IAED,MAAM,OAAO,GAAG,sBAAsB,CAAC,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;IAC1E,QAAQ,CAAC,WAAW,CAAC;MACnB,SAAS,EAAE,CAAC;MACZ,WAAW,EAAE,CAAC;MACd,KAAK,EAAE;QACL;UACE,IAAI,EAAE,OAAO;UACb,KAAK,EAAE,CAAC;UACR,GAAG,EAAE,OAAO;UACZ,SAAS,EAAE,CAAC;SACb;OACF;KACF,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,aAAa,CAAC;IACzC,MAAM,cAAc,GAAG;MACrB,CAAC,IAAI,CAAC,EAAE,MAAM;MACd,aAAa,EAAE,IAAI,CAAC,MAAM;MAC1B,YAAY,EAAE,CAAC;MACf,KAAK,EAAE,EAAE,QAAQ,EAAE,GAAG,OAAO,IAAI,EAAE;MACnC,GAAG,EAAE,CAAC,EAAiB,EAAE,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;MACzD,gBAAgB,EAAE,CAAC,CAAc,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;KACzE,CAAC;IACF,MAAM,cAAc,mCACf,IAAI,CAAC,UAAU,KAClB,OAAO,EAAE,OAAO,IAAI,CAAC,eAAe,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE,EAC/E,WAAW,EAAE,QAAQ,CAAC,KAAK,EAC3B,SAAS,EAAE,KAAK,EAChB,IAAI,EAAE,eAAe,EACrB,MAAM,EACN,IAAI,EAAE,WAAW,GAClB,CAAC;IACF,OAAO,CACL,EAAC,IAAI,IAAC,KAAK,EAAG,EAAE,CAAC,eAAe,CAAC,EAAE,IAAI,EAAE,EAAG,GAAG,EAAE,eAAe;MAC9D,8CAA4B,cAAc;QACxC,qCAAmB,cAAc,EAAI;QACpC,SAAS,CACa,CACpB,CACR,CAAC;EACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import { h, Host } from '@stencil/core';\nimport { Component, Prop, Event, EventEmitter } from '@stencil/core';\nimport { RevoGrid } from '../../interfaces';\nimport DataStore from '../../store/dataSource/data.store';\nimport ViewportStore from '../../store/viewPort/viewport.store';\nimport { ROW_HEADER_TYPE, UUID } from '../../utils/consts';\nimport { ElementScroll } from '../revoGrid/viewport.scrolling.service';\nimport { ViewportData } from '../revoGrid/viewport.interfaces';\nimport { RowHeaderRender } from './row-header-render';\nimport { calculateRowHeaderSize } from '../../utils/row-header-utils';\nimport { HEADER_SLOT } from '../revoGrid/viewport.helpers';\nimport { JSX } from '../..';\n\n/**\n * Row headers component\n * Visible on the left side of the table\n */\n\n@Component({ tag: 'revogr-row-headers' })\nexport class RevogrRowHeaders {\n @Prop() height: number;\n\n @Prop() dataPorts: ViewportData[];\n @Prop() headerProp: Record<string, any>;\n @Prop() uiid: string;\n @Prop() rowClass: string;\n\n @Prop() resize: boolean;\n @Prop() rowHeaderColumn: RevoGrid.RowHeaders;\n /** Additional data to pass to renderer */\n @Prop() additionalData: any;\n\n @Event({ bubbles: false }) scrollViewport: EventEmitter<RevoGrid.ViewPortScrollEvent>;\n @Event({ bubbles: false }) elementToScroll: EventEmitter<ElementScroll>;\n\n render() {\n const dataViews: HTMLElement[] = [];\n const viewport = new ViewportStore('colPinStart');\n\n /** render viewports rows */\n let totalLength = 1;\n for (let data of this.dataPorts) {\n const itemCount = data.dataStore.get('items').length;\n // initiate row data\n const dataStore = new DataStore<RevoGrid.DataType, RevoGrid.DimensionRows>(data.type);\n dataStore.updateData(data.dataStore.get('source'));\n // initiate column data\n const colData = new DataStore<RevoGrid.ColumnRegular, RevoGrid.DimensionCols>('colPinStart');\n const column = {\n cellTemplate: RowHeaderRender(totalLength),\n ...this.rowHeaderColumn,\n };\n colData.updateData([column]);\n\n const viewData = {\n ...data,\n rowClass: this.rowClass,\n dataStore: dataStore.store,\n colData: colData.store,\n viewportCol: viewport.store,\n readonly: true,\n range: false,\n };\n dataViews.push(<revogr-data {...viewData} />);\n totalLength += itemCount;\n }\n\n const colSize = calculateRowHeaderSize(totalLength, this.rowHeaderColumn);\n viewport.setViewport({\n realCount: 1,\n virtualSize: 0,\n items: [\n {\n size: colSize,\n start: 0,\n end: colSize,\n itemIndex: 0,\n },\n ],\n });\n\n const parent = `${this.uiid}-rowHeaders`;\n const viewportScroll = {\n [UUID]: parent,\n contentHeight: this.height,\n contentWidth: 0,\n style: { minWidth: `${colSize}px` },\n ref: (el: ElementScroll) => this.elementToScroll.emit(el),\n onScrollViewport: (e: CustomEvent) => this.scrollViewport.emit(e.detail),\n };\n const viewportHeader: JSX.RevogrHeader & { slot: string } = {\n ...this.headerProp,\n colData: typeof this.rowHeaderColumn === 'object' ? [this.rowHeaderColumn] : [],\n viewportCol: viewport.store,\n canResize: false,\n type: ROW_HEADER_TYPE,\n parent,\n slot: HEADER_SLOT,\n };\n return (\n <Host class={ { [ROW_HEADER_TYPE]: true } } key={ROW_HEADER_TYPE}>\n <revogr-viewport-scroll {...viewportScroll}>\n <revogr-header {...viewportHeader} />\n {dataViews}\n </revogr-viewport-scroll>\n </Host>\n );\n }\n}\n"]}
|
|
@@ -100,6 +100,9 @@ revogr-viewport-scroll::-webkit-scrollbar {
|
|
|
100
100
|
revogr-viewport-scroll.colPinStart, revogr-viewport-scroll.colPinEnd {
|
|
101
101
|
z-index: 2;
|
|
102
102
|
}
|
|
103
|
+
revogr-viewport-scroll.colPinEnd:has(.active) {
|
|
104
|
+
overflow: visible;
|
|
105
|
+
}
|
|
103
106
|
revogr-viewport-scroll.rgCol {
|
|
104
107
|
flex-grow: 1;
|
|
105
108
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { EventEmitter } from '../../stencil-public-runtime';
|
|
2
2
|
import { RevoGrid, ScrollCoordinateEvent } from '../../interfaces';
|
|
3
3
|
type Delta = 'deltaX' | 'deltaY';
|
|
4
|
-
type
|
|
4
|
+
type LocalScrollEvent = {
|
|
5
5
|
preventDefault(): void;
|
|
6
6
|
} & {
|
|
7
7
|
[x in Delta]: number;
|
|
@@ -16,6 +16,11 @@ export declare class RevogrViewportScroll {
|
|
|
16
16
|
type: RevoGrid.DimensionType;
|
|
17
17
|
hasScroll: boolean;
|
|
18
18
|
}>;
|
|
19
|
+
/**
|
|
20
|
+
* Silently scroll to coordinate
|
|
21
|
+
* Made to align negative coordinates for mobile devices
|
|
22
|
+
*/
|
|
23
|
+
silentScroll: EventEmitter<RevoGrid.ViewPortScrollEvent>;
|
|
19
24
|
private scrollThrottling;
|
|
20
25
|
/**
|
|
21
26
|
* Width of inner content
|
|
@@ -48,13 +53,19 @@ export declare class RevogrViewportScroll {
|
|
|
48
53
|
* update on delta in case we don't know existing position or external change
|
|
49
54
|
* @param e
|
|
50
55
|
*/
|
|
51
|
-
changeScroll(e: RevoGrid.ViewPortScrollEvent): Promise<RevoGrid.ViewPortScrollEvent>;
|
|
52
|
-
|
|
53
|
-
|
|
56
|
+
changeScroll(e: RevoGrid.ViewPortScrollEvent, silent?: boolean): Promise<RevoGrid.ViewPortScrollEvent>;
|
|
57
|
+
/**
|
|
58
|
+
* Dispatch this event to trigger vertical mouse wheel from plugins
|
|
59
|
+
*/
|
|
60
|
+
mousewheelVertical({ detail: e, }: CustomEvent<LocalScrollEvent>): void;
|
|
61
|
+
/**
|
|
62
|
+
* Dispatch this event to trigger horizontal mouse wheel from plugins
|
|
63
|
+
*/
|
|
64
|
+
mousewheelHorizontal({ detail: e, }: CustomEvent<LocalScrollEvent>): void;
|
|
54
65
|
/**
|
|
55
66
|
* Allows to use outside listener
|
|
56
67
|
*/
|
|
57
|
-
scrollApply({ detail: { type, coordinate } }: CustomEvent<ScrollCoordinateEvent>): void;
|
|
68
|
+
scrollApply({ detail: { type, coordinate }, }: CustomEvent<ScrollCoordinateEvent>): void;
|
|
58
69
|
connectedCallback(): void;
|
|
59
70
|
componentDidLoad(): void;
|
|
60
71
|
/**
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* Built by Revolist
|
|
3
3
|
*/
|
|
4
|
-
import { h, Host } from '@stencil/core';
|
|
4
|
+
import { h, Host, } from '@stencil/core';
|
|
5
5
|
import each from 'lodash/each';
|
|
6
6
|
import GridResizeService from '../revoGrid/viewport.resize.service';
|
|
7
7
|
import LocalScrollService from '../../services/localScrollService';
|
|
8
|
-
import { CONTENT_SLOT, FOOTER_SLOT, HEADER_SLOT } from '../revoGrid/viewport.helpers';
|
|
8
|
+
import { CONTENT_SLOT, FOOTER_SLOT, HEADER_SLOT, } from '../revoGrid/viewport.helpers';
|
|
9
9
|
/**
|
|
10
10
|
* Service for tracking grid scrolling
|
|
11
11
|
*/
|
|
@@ -18,7 +18,10 @@ export class RevogrViewportScroll {
|
|
|
18
18
|
* Last mw event time for trigger scroll function below
|
|
19
19
|
* If mousewheel function was ignored we still need to trigger render
|
|
20
20
|
*/
|
|
21
|
-
this.mouseWheelScroll = {
|
|
21
|
+
this.mouseWheelScroll = {
|
|
22
|
+
rgCol: 0,
|
|
23
|
+
rgRow: 0,
|
|
24
|
+
};
|
|
22
25
|
this.contentWidth = 0;
|
|
23
26
|
this.contentHeight = 0;
|
|
24
27
|
}
|
|
@@ -31,7 +34,18 @@ export class RevogrViewportScroll {
|
|
|
31
34
|
* update on delta in case we don't know existing position or external change
|
|
32
35
|
* @param e
|
|
33
36
|
*/
|
|
34
|
-
async changeScroll(e) {
|
|
37
|
+
async changeScroll(e, silent = false) {
|
|
38
|
+
if (silent) {
|
|
39
|
+
if (e.coordinate) {
|
|
40
|
+
switch (e.dimension) {
|
|
41
|
+
// for mobile devices to skip negative scroll loop. only on vertical scroll
|
|
42
|
+
case 'rgRow':
|
|
43
|
+
this.verticalScroll.style.transform = `translateY(${-1 * e.coordinate}px)`;
|
|
44
|
+
break;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
35
49
|
if (e.delta) {
|
|
36
50
|
switch (e.dimension) {
|
|
37
51
|
case 'rgCol':
|
|
@@ -45,16 +59,22 @@ export class RevogrViewportScroll {
|
|
|
45
59
|
}
|
|
46
60
|
return e;
|
|
47
61
|
}
|
|
48
|
-
|
|
62
|
+
/**
|
|
63
|
+
* Dispatch this event to trigger vertical mouse wheel from plugins
|
|
64
|
+
*/
|
|
65
|
+
mousewheelVertical({ detail: e, }) {
|
|
49
66
|
this.verticalMouseWheel(e);
|
|
50
67
|
}
|
|
51
|
-
|
|
68
|
+
/**
|
|
69
|
+
* Dispatch this event to trigger horizontal mouse wheel from plugins
|
|
70
|
+
*/
|
|
71
|
+
mousewheelHorizontal({ detail: e, }) {
|
|
52
72
|
this.horizontalMouseWheel(e);
|
|
53
73
|
}
|
|
54
74
|
/**
|
|
55
75
|
* Allows to use outside listener
|
|
56
76
|
*/
|
|
57
|
-
scrollApply({ detail: { type, coordinate } }) {
|
|
77
|
+
scrollApply({ detail: { type, coordinate }, }) {
|
|
58
78
|
this.applyOnScroll(type, coordinate, true);
|
|
59
79
|
}
|
|
60
80
|
connectedCallback() {
|
|
@@ -80,6 +100,10 @@ export class RevogrViewportScroll {
|
|
|
80
100
|
break;
|
|
81
101
|
case 'rgRow':
|
|
82
102
|
this.verticalScroll.scrollTop = e.coordinate;
|
|
103
|
+
// for mobile devices to skip negative scroll loop. only on vertical scroll
|
|
104
|
+
if (this.verticalScroll.style.transform) {
|
|
105
|
+
this.verticalScroll.style.transform = '';
|
|
106
|
+
}
|
|
83
107
|
break;
|
|
84
108
|
}
|
|
85
109
|
},
|
|
@@ -181,6 +205,9 @@ export class RevogrViewportScroll {
|
|
|
181
205
|
* We need to trigger scroll event in case there is no mousewheel event
|
|
182
206
|
*/
|
|
183
207
|
onScroll(type, e) {
|
|
208
|
+
if (!(e.target instanceof HTMLElement)) {
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
184
211
|
const target = e.target;
|
|
185
212
|
let scroll = 0;
|
|
186
213
|
switch (type) {
|
|
@@ -191,6 +218,11 @@ export class RevogrViewportScroll {
|
|
|
191
218
|
scroll = target === null || target === void 0 ? void 0 : target.scrollTop;
|
|
192
219
|
break;
|
|
193
220
|
}
|
|
221
|
+
// for mobile devices to skip negative scroll loop
|
|
222
|
+
if (scroll < 0) {
|
|
223
|
+
this.silentScroll.emit({ dimension: type, coordinate: scroll });
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
194
226
|
this.applyOnScroll(type, scroll);
|
|
195
227
|
}
|
|
196
228
|
applyOnScroll(type, coordinate, outside = false) {
|
|
@@ -334,7 +366,7 @@ export class RevogrViewportScroll {
|
|
|
334
366
|
"text": ""
|
|
335
367
|
},
|
|
336
368
|
"complexType": {
|
|
337
|
-
"original": "{
|
|
369
|
+
"original": "{\n type: RevoGrid.DimensionType;\n hasScroll: boolean;\n }",
|
|
338
370
|
"resolved": "{ type: DimensionType; hasScroll: boolean; }",
|
|
339
371
|
"references": {
|
|
340
372
|
"RevoGrid": {
|
|
@@ -343,6 +375,26 @@ export class RevogrViewportScroll {
|
|
|
343
375
|
}
|
|
344
376
|
}
|
|
345
377
|
}
|
|
378
|
+
}, {
|
|
379
|
+
"method": "silentScroll",
|
|
380
|
+
"name": "silentScroll",
|
|
381
|
+
"bubbles": true,
|
|
382
|
+
"cancelable": true,
|
|
383
|
+
"composed": true,
|
|
384
|
+
"docs": {
|
|
385
|
+
"tags": [],
|
|
386
|
+
"text": "Silently scroll to coordinate\nMade to align negative coordinates for mobile devices"
|
|
387
|
+
},
|
|
388
|
+
"complexType": {
|
|
389
|
+
"original": "RevoGrid.ViewPortScrollEvent",
|
|
390
|
+
"resolved": "{ dimension: DimensionType; coordinate: number; delta?: number; outside?: boolean; }",
|
|
391
|
+
"references": {
|
|
392
|
+
"RevoGrid": {
|
|
393
|
+
"location": "import",
|
|
394
|
+
"path": "../../interfaces"
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
}
|
|
346
398
|
}];
|
|
347
399
|
}
|
|
348
400
|
static get methods() {
|
|
@@ -372,13 +424,16 @@ export class RevogrViewportScroll {
|
|
|
372
424
|
},
|
|
373
425
|
"changeScroll": {
|
|
374
426
|
"complexType": {
|
|
375
|
-
"signature": "(e: RevoGrid.ViewPortScrollEvent) => Promise<RevoGrid.ViewPortScrollEvent>",
|
|
427
|
+
"signature": "(e: RevoGrid.ViewPortScrollEvent, silent?: boolean) => Promise<RevoGrid.ViewPortScrollEvent>",
|
|
376
428
|
"parameters": [{
|
|
377
429
|
"tags": [{
|
|
378
430
|
"name": "param",
|
|
379
431
|
"text": "e"
|
|
380
432
|
}],
|
|
381
433
|
"text": ""
|
|
434
|
+
}, {
|
|
435
|
+
"tags": [],
|
|
436
|
+
"text": ""
|
|
382
437
|
}],
|
|
383
438
|
"references": {
|
|
384
439
|
"Promise": {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"revogr-viewport-scroll.js","sourceRoot":"","sources":["../../../src/components/scroll/revogr-viewport-scroll.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAgB,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvG,OAAO,IAAI,MAAM,aAAa,CAAC;AAE/B,OAAO,iBAAiB,MAAM,qCAAqC,CAAC;AACpE,OAAO,kBAAkB,MAAM,mCAAmC,CAAC;AAEnE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAKtF;;GAEG;AAKH,MAAM,OAAO,oBAAoB;;IAKvB,qBAAgB,GAAG,EAAE,CAAC;IAWtB,YAAO,GAAG,IAAI,CAAC,aAAa,CAAC;IAC7B,YAAO,GAAG,IAAI,CAAC,YAAY,CAAC;IAgBpC;;;OAGG;IACK,qBAAgB,GAA2C,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;wBA3BnE,CAAC;yBAIA,CAAC;;EAwBf,KAAK,CAAC,SAAS,CAAC,CAA+B;;IACvD,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACrC,MAAA,IAAI,CAAC,aAAa,0CAAE,SAAS,CAAC,CAAC,CAAC,CAAC;EACnC,CAAC;EAED;;;KAGG;EACO,KAAK,CAAC,YAAY,CAAC,CAA+B;IAC1D,IAAI,CAAC,CAAC,KAAK,EAAE;MACX,QAAQ,CAAC,CAAC,SAAS,EAAE;QACnB,KAAK,OAAO;UACV,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC;UAC1D,MAAM;QACR,KAAK,OAAO;UACV,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC;UACvD,MAAM;OACT;MACD,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;KACnB;IACD,OAAO,CAAC,CAAC;EACX,CAAC;EAE8B,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC,EAA4B;IACvF,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;EAC7B,CAAC;EACgC,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC,EAA4B;IAC3F,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;EAC/B,CAAC;EACD;;KAEG;EAC0B,WAAW,CAAC,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,EAAsC;IAC3G,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;EAC7C,CAAC;EAED,iBAAiB;IACf;;OAEG;IAEH,IAAI,cAAc,IAAI,QAAQ,CAAC,eAAe,EAAE;MAC9C,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;KAC3B;SAAM;MACL,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;MAClF,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;KACvF;IACD;;OAEG;IACH,IAAI,CAAC,aAAa,GAAG,IAAI,kBAAkB,CAAC;MAC1C,YAAY,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;MAC9C,WAAW,EAAE,CAAC,CAAC,EAAE;QACf,QAAQ,CAAC,CAAC,SAAS,EAAE;UACnB,KAAK,OAAO;YACV,IAAI,CAAC,gBAAgB,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC;YAChD,MAAM;UACR,KAAK,OAAO;YACV,IAAI,CAAC,cAAc,CAAC,SAAS,GAAG,CAAC,CAAC,UAAU,CAAC;YAC7C,MAAM;SACT;MACH,CAAC;KACF,CAAC,CAAC;EACL,CAAC;EAED,gBAAgB;IACd,mCAAmC;IACnC,IAAI,CAAC,aAAa,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,gBAAgB,EAAE;MAChE,MAAM,EAAE,OAAO,CAAC,EAAE;;QAChB,IAAI,MAAM,GAAG,CAAA,MAAA,OAAO,CAAC,CAAC,CAAC,0CAAE,WAAW,CAAC,MAAM,KAAI,CAAC,CAAC;QACjD,IAAI,MAAM,EAAE;UACV,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;SAC/D;QACD,MAAM,GAAG,GAAG;UACV,KAAK,EAAE;YACL,IAAI,EAAE,MAAM;YACZ,WAAW,EAAE,IAAI,CAAC,aAAa;YAC/B,MAAM,EAAE,IAAI,CAAC,cAAc,CAAC,SAAS;WACtC;UACD,KAAK,EAAE;YACL,IAAI,EAAE,CAAA,MAAA,OAAO,CAAC,CAAC,CAAC,0CAAE,WAAW,CAAC,KAAK,KAAI,CAAC;YACxC,WAAW,EAAE,IAAI,CAAC,YAAY;YAC9B,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,UAAU;WACzC;SACF,CAAC;QACF,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,SAAiC,EAAE,EAAE;;UACpD,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;UACzD,MAAA,IAAI,CAAC,aAAa,0CAAE,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;UACzD,kDAAkD;UAClD,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;MACL,CAAC;KACF,CAAC,CAAC;EACL,CAAC;EAED;;;;;;;KAOG;EACH,mBAAmB,CAAC,IAA4B,EAAE,IAAY,EAAE,gBAAwB;IACtF,yBAAyB;IACzB,MAAM,SAAS,GAAG,IAAI,GAAG,gBAAgB,CAAC;IAC1C,IAAI,EAAe,CAAC;IACpB,8BAA8B;IAC9B,QAAQ,IAAI,EAAE;MACZ,KAAK,OAAO;QACV,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC;QAC3B,MAAM;MACR,KAAK,OAAO;QACV,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC;QACzB,MAAM;KACT;IACD,8DAA8D;IAC9D,IAAI,SAAS,EAAE;MACb,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;KACpC;SAAM;MACL,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;KACvC;IACD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;EAC9C,CAAC;EAED,oBAAoB;IAClB,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;EAC/B,CAAC;EAED,KAAK,CAAC,kBAAkB;IACtB,0CAA0C;IAC1C,IAAI,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,cAAc,EAAE;MAC5D,IAAI,CAAC,cAAc,CAAC,SAAS,IAAI,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC;KACpE;IACD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC;IAElC,0CAA0C;IAC1C,IAAI,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,EAAE;MACpC,IAAI,CAAC,gBAAgB,CAAC,UAAU,IAAI,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC;KACtE;IACD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC;IAEjC,IAAI,CAAC,aAAa,CAAC,SAAS,CAC1B;MACE,WAAW,EAAE,IAAI,CAAC,aAAa;MAC/B,UAAU,EAAE,IAAI,CAAC,cAAc,CAAC,YAAY;MAC5C,WAAW,EAAE,CAAC;KACf,EACD,OAAO,CACR,CAAC;IAEF,IAAI,CAAC,aAAa,CAAC,SAAS,CAC1B;MACE,WAAW,EAAE,IAAI,CAAC,YAAY;MAC9B,UAAU,EAAE,IAAI,CAAC,gBAAgB,CAAC,WAAW;MAC7C,WAAW,EAAE,CAAC;KACf,EACD,OAAO,CACR,CAAC;IACF,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IACxF,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;EAC1F,CAAC;EAED,MAAM;IACJ,OAAO,CACL,EAAC,IAAI,IAAC,OAAO,EAAE,IAAI,CAAC,oBAAoB,EAAE,QAAQ,EAAE,CAAC,CAAa,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;MAC9F,WAAK,KAAK,EAAC,qBAAqB,EAAC,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,YAAY,IAAI,EAAE;QACzE,WAAK,KAAK,EAAC,gBAAgB,EAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;UACrD,YAAM,IAAI,EAAE,WAAW,GAAI,CACvB;QACN,WAAK,KAAK,EAAC,gBAAgB,EACzB,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC,EACrC,OAAO,EAAE,IAAI,CAAC,kBAAkB,EAChC,QAAQ,EAAE,CAAC,CAAa,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;UACtD,WAAK,KAAK,EAAC,iBAAiB,EAAC,KAAK,EAAE,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,IAAI,EAAE;YACvE,YAAM,IAAI,EAAE,YAAY,GAAI,CACxB,CACF;QACN,WAAK,KAAK,EAAC,gBAAgB,EAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;UACrD,YAAM,IAAI,EAAE,WAAW,GAAI,CACvB,CACF,CACD,CACR,CAAC;EACJ,CAAC;EAED;;;KAGG;EACK,QAAQ,CAAC,IAA4B,EAAE,CAAa;IAC1D,MAAM,MAAM,GAAG,CAAC,CAAC,MAAiC,CAAC;IACnD,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,QAAQ,IAAI,EAAE;MACZ,KAAK,OAAO;QACV,MAAM,GAAG,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,UAAU,CAAC;QAC5B,MAAM;MACR,KAAK,OAAO;QACV,MAAM,GAAG,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,SAAS,CAAC;QAC3B,MAAM;KACT;IACD,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;EACnC,CAAC;EAEO,aAAa,CAAC,IAA4B,EAAE,UAAkB,EAAE,OAAO,GAAG,KAAK;;IACrF,MAAM,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAClE,yBAAyB;IACzB,IAAI,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE;MAClC,MAAA,IAAI,CAAC,aAAa,0CAAE,MAAM,CAAC,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;KAC7E;EACH,CAAC;EAED,kCAAkC;EAC1B,kBAAkB,CAAC,SAAiC;IAC1D,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;EAC1D,CAAC;EAED;;;;;KAKG;EACK,oBAAoB,CAAC,IAA4B,EAAE,KAAY,EAAE,CAAc;;IACrF,CAAC,CAAC,cAAc,IAAI,CAAC,CAAC,cAAc,EAAE,CAAC;IACvC,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IACrD,MAAA,IAAI,CAAC,aAAa,0CAAE,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3D,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;EAChC,CAAC;EAED;;;;;KAKG;EACK,sBAAsB,CAAC,IAA4B,EAAE,KAAY,EAAE,CAAc;;IACvF,CAAC,CAAC,cAAc,IAAI,CAAC,CAAC,cAAc,EAAE,CAAC;IACvC,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IACxD,MAAA,IAAI,CAAC,aAAa,0CAAE,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3D,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;EAChC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import { Component, Event, EventEmitter, h, Method, Element, Prop, Host, Listen } from '@stencil/core';\nimport each from 'lodash/each';\n\nimport GridResizeService from '../revoGrid/viewport.resize.service';\nimport LocalScrollService from '../../services/localScrollService';\nimport { RevoGrid, ScrollCoordinateEvent } from '../../interfaces';\nimport { CONTENT_SLOT, FOOTER_SLOT, HEADER_SLOT } from '../revoGrid/viewport.helpers';\ntype Delta = 'deltaX' | 'deltaY';\ntype ScrollEvent = {\n preventDefault(): void;\n} & {[x in Delta]: number;};\n/**\n * Service for tracking grid scrolling\n */\n@Component({\n tag: 'revogr-viewport-scroll',\n styleUrl: 'revogr-viewport-scroll-style.scss',\n})\nexport class RevogrViewportScroll {\n @Event({ bubbles: true }) scrollViewport: EventEmitter<RevoGrid.ViewPortScrollEvent>;\n @Event() resizeViewport: EventEmitter<RevoGrid.ViewPortResizeEvent>;\n @Event() scrollchange: EventEmitter<{ type: RevoGrid.DimensionType; hasScroll: boolean }>;\n\n private scrollThrottling = 10;\n\n /**\n * Width of inner content\n */\n @Prop() contentWidth = 0;\n /**\n * Height of inner content\n */\n @Prop() contentHeight = 0;\n\n private oldValY = this.contentHeight;\n private oldValX = this.contentWidth;\n\n @Element() horizontalScroll: HTMLElement;\n private verticalScroll: HTMLElement;\n private header: HTMLElement;\n private footer: HTMLElement;\n\n /**\n * Static functions to bind wheel change\n */\n private horizontalMouseWheel: (e: Partial<ScrollEvent>) => void;\n private verticalMouseWheel: (e: Partial<ScrollEvent>) => void;\n\n private resizeService: GridResizeService;\n private scrollService: LocalScrollService;\n\n /**\n * Last mw event time for trigger scroll function below\n * If mousewheel function was ignored we still need to trigger render\n */\n private mouseWheelScroll: Record<RevoGrid.DimensionType, number> = { rgCol: 0, rgRow: 0 };\n @Method() async setScroll(e: RevoGrid.ViewPortScrollEvent): Promise<void> {\n this.latestScrollUpdate(e.dimension);\n this.scrollService?.setScroll(e);\n }\n\n /**\n * update on delta in case we don't know existing position or external change\n * @param e\n */\n @Method() async changeScroll(e: RevoGrid.ViewPortScrollEvent): Promise<RevoGrid.ViewPortScrollEvent> {\n if (e.delta) {\n switch (e.dimension) {\n case 'rgCol':\n e.coordinate = this.horizontalScroll.scrollLeft + e.delta;\n break;\n case 'rgRow':\n e.coordinate = this.verticalScroll.scrollTop + e.delta;\n break;\n }\n this.setScroll(e);\n }\n return e;\n }\n\n @Listen('mousewheel-vertical') mousewheelVertical({ detail: e }: CustomEvent<ScrollEvent>) {\n this.verticalMouseWheel(e);\n }\n @Listen('mousewheel-horizontal') mousewheelHorizontal({ detail: e }: CustomEvent<ScrollEvent>) {\n this.horizontalMouseWheel(e);\n }\n /**\n * Allows to use outside listener\n */\n @Listen('scroll-coordinate') scrollApply({ detail: { type, coordinate } }: CustomEvent<ScrollCoordinateEvent>) {\n this.applyOnScroll(type, coordinate, true);\n }\n\n connectedCallback() {\n /**\n * Bind scroll functions for farther usage\n */\n\n if ('ontouchstart' in document.documentElement) {\n this.scrollThrottling = 0;\n } else {\n this.verticalMouseWheel = this.onVerticalMouseWheel.bind(this, 'rgRow', 'deltaY');\n this.horizontalMouseWheel = this.onHorizontalMouseWheel.bind(this, 'rgCol', 'deltaX');\n }\n /**\n * Create local scroll service\n */\n this.scrollService = new LocalScrollService({\n beforeScroll: e => this.scrollViewport.emit(e),\n afterScroll: e => {\n switch (e.dimension) {\n case 'rgCol':\n this.horizontalScroll.scrollLeft = e.coordinate;\n break;\n case 'rgRow':\n this.verticalScroll.scrollTop = e.coordinate;\n break;\n }\n },\n });\n }\n\n componentDidLoad() {\n // track horizontal viewport resize\n this.resizeService = new GridResizeService(this.horizontalScroll, {\n resize: entries => {\n let height = entries[0]?.contentRect.height || 0;\n if (height) {\n height -= this.header.clientHeight + this.footer.clientHeight;\n }\n const els = {\n rgRow: {\n size: height,\n contentSize: this.contentHeight,\n scroll: this.verticalScroll.scrollTop,\n },\n rgCol: {\n size: entries[0]?.contentRect.width || 0,\n contentSize: this.contentWidth,\n scroll: this.horizontalScroll.scrollLeft,\n },\n };\n each(els, (item, dimension: RevoGrid.DimensionType) => {\n this.resizeViewport.emit({ dimension, size: item.size });\n this.scrollService?.scroll(item.scroll, dimension, true);\n // track scroll visibility on outer element change\n this.setScrollVisibility(dimension, item.size, item.contentSize);\n });\n },\n });\n }\n\n /**\n * Check if scroll present or not per type\n * Trigger this method on inner content size change or on outer element size change\n * If inner content bigger then outer size then scroll is present and mousewheel binding required\n * @param type - dimension type 'rgRow/y' or 'rgCol/x'\n * @param size - outer content size\n * @param innerContentSize - inner content size\n */\n setScrollVisibility(type: RevoGrid.DimensionType, size: number, innerContentSize: number) {\n // test if scroll present\n const hasScroll = size < innerContentSize;\n let el: HTMLElement;\n // event reference for binding\n switch (type) {\n case 'rgCol':\n el = this.horizontalScroll;\n break;\n case 'rgRow':\n el = this.verticalScroll;\n break;\n }\n // based on scroll visibility assign or remove class and event\n if (hasScroll) {\n el.classList.add(`scroll-${type}`);\n } else {\n el.classList.remove(`scroll-${type}`);\n }\n this.scrollchange.emit({ type, hasScroll });\n }\n\n disconnectedCallback() {\n this.resizeService.destroy();\n }\n\n async componentDidRender() {\n // scroll update if number of rows changed\n if (this.contentHeight < this.oldValY && this.verticalScroll) {\n this.verticalScroll.scrollTop += this.contentHeight - this.oldValY;\n }\n this.oldValY = this.contentHeight;\n\n // scroll update if number of cols changed\n if (this.contentWidth < this.oldValX) {\n this.horizontalScroll.scrollLeft += this.contentWidth - this.oldValX;\n }\n this.oldValX = this.contentWidth;\n\n this.scrollService.setParams(\n {\n contentSize: this.contentHeight,\n clientSize: this.verticalScroll.clientHeight,\n virtualSize: 0,\n },\n 'rgRow',\n );\n\n this.scrollService.setParams(\n {\n contentSize: this.contentWidth,\n clientSize: this.horizontalScroll.clientWidth,\n virtualSize: 0,\n },\n 'rgCol',\n );\n this.setScrollVisibility('rgRow', this.verticalScroll.clientHeight, this.contentHeight);\n this.setScrollVisibility('rgCol', this.horizontalScroll.clientWidth, this.contentWidth);\n }\n\n render() {\n return (\n <Host onWheel={this.horizontalMouseWheel} onScroll={(e: MouseEvent) => this.onScroll('rgCol', e)}>\n <div class=\"inner-content-table\" style={{ width: `${this.contentWidth}px` }}>\n <div class=\"header-wrapper\" ref={e => (this.header = e)}>\n <slot name={HEADER_SLOT} />\n </div>\n <div class=\"vertical-inner\"\n ref={el => (this.verticalScroll = el)}\n onWheel={this.verticalMouseWheel}\n onScroll={(e: MouseEvent) => this.onScroll('rgRow', e)}>\n <div class=\"content-wrapper\" style={{ height: `${this.contentHeight}px` }}>\n <slot name={CONTENT_SLOT} />\n </div>\n </div>\n <div class=\"footer-wrapper\" ref={e => (this.footer = e)}>\n <slot name={FOOTER_SLOT} />\n </div>\n </div>\n </Host>\n );\n }\n\n /**\n * Extra layer for scroll event monitoring, where MouseWheel event is not passing\n * We need to trigger scroll event in case there is no mousewheel event\n */\n private onScroll(type: RevoGrid.DimensionType, e: MouseEvent) {\n const target = e.target as HTMLElement | undefined;\n let scroll = 0;\n switch (type) {\n case 'rgCol':\n scroll = target?.scrollLeft;\n break;\n case 'rgRow':\n scroll = target?.scrollTop;\n break;\n }\n this.applyOnScroll(type, scroll);\n }\n\n private applyOnScroll(type: RevoGrid.DimensionType, coordinate: number, outside = false) {\n const change = new Date().getTime() - this.mouseWheelScroll[type];\n // apply after throttling\n if (change > this.scrollThrottling) {\n this.scrollService?.scroll(coordinate, type, undefined, undefined, outside);\n }\n }\n\n /** remember last mw event time */\n private latestScrollUpdate(dimension: RevoGrid.DimensionType) {\n this.mouseWheelScroll[dimension] = new Date().getTime();\n }\n\n /**\n * On vertical mousewheel event\n * @param type\n * @param delta\n * @param e\n */\n private onVerticalMouseWheel(type: RevoGrid.DimensionType, delta: Delta, e: ScrollEvent) {\n e.preventDefault && e.preventDefault();\n const pos = this.verticalScroll.scrollTop + e[delta];\n this.scrollService?.scroll(pos, type, undefined, e[delta]);\n this.latestScrollUpdate(type);\n }\n\n /**\n * On horizontal mousewheel event\n * @param type\n * @param delta\n * @param e\n */\n private onHorizontalMouseWheel(type: RevoGrid.DimensionType, delta: Delta, e: ScrollEvent) {\n e.preventDefault && e.preventDefault();\n const pos = this.horizontalScroll.scrollLeft + e[delta];\n this.scrollService?.scroll(pos, type, undefined, e[delta]);\n this.latestScrollUpdate(type);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"revogr-viewport-scroll.js","sourceRoot":"","sources":["../../../src/components/scroll/revogr-viewport-scroll.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Event,\n EventEmitter,\n h,\n Method,\n Element,\n Prop,\n Host,\n Listen,\n} from '@stencil/core';\nimport each from 'lodash/each';\n\nimport GridResizeService from '../revoGrid/viewport.resize.service';\nimport LocalScrollService from '../../services/localScrollService';\nimport { RevoGrid, ScrollCoordinateEvent } from '../../interfaces';\nimport {\n CONTENT_SLOT,\n FOOTER_SLOT,\n HEADER_SLOT,\n} from '../revoGrid/viewport.helpers';\ntype Delta = 'deltaX' | 'deltaY';\ntype LocalScrollEvent = {\n preventDefault(): void;\n} & { [x in Delta]: number };\n/**\n * Service for tracking grid scrolling\n */\n@Component({\n tag: 'revogr-viewport-scroll',\n styleUrl: 'revogr-viewport-scroll-style.scss',\n})\nexport class RevogrViewportScroll {\n @Event({ bubbles: true })\n scrollViewport: EventEmitter<RevoGrid.ViewPortScrollEvent>;\n @Event() resizeViewport: EventEmitter<RevoGrid.ViewPortResizeEvent>;\n @Event() scrollchange: EventEmitter<{\n type: RevoGrid.DimensionType;\n hasScroll: boolean;\n }>;\n\n /**\n * Silently scroll to coordinate\n * Made to align negative coordinates for mobile devices\n */\n @Event()\n silentScroll: EventEmitter<RevoGrid.ViewPortScrollEvent>;\n\n private scrollThrottling = 10;\n\n /**\n * Width of inner content\n */\n @Prop() contentWidth = 0;\n /**\n * Height of inner content\n */\n @Prop() contentHeight = 0;\n\n private oldValY = this.contentHeight;\n private oldValX = this.contentWidth;\n\n @Element() horizontalScroll: HTMLElement;\n private verticalScroll: HTMLElement;\n private header: HTMLElement;\n private footer: HTMLElement;\n\n /**\n * Static functions to bind wheel change\n */\n private horizontalMouseWheel: (e: Partial<LocalScrollEvent>) => void;\n private verticalMouseWheel: (e: Partial<LocalScrollEvent>) => void;\n\n private resizeService: GridResizeService;\n private scrollService: LocalScrollService;\n\n /**\n * Last mw event time for trigger scroll function below\n * If mousewheel function was ignored we still need to trigger render\n */\n private mouseWheelScroll: Record<RevoGrid.DimensionType, number> = {\n rgCol: 0,\n rgRow: 0,\n };\n @Method() async setScroll(e: RevoGrid.ViewPortScrollEvent) {\n this.latestScrollUpdate(e.dimension);\n this.scrollService?.setScroll(e);\n }\n\n /**\n * update on delta in case we don't know existing position or external change\n * @param e\n */\n @Method() async changeScroll(\n e: RevoGrid.ViewPortScrollEvent,\n silent = false,\n ) {\n if (silent) {\n if (e.coordinate) {\n switch (e.dimension) {\n // for mobile devices to skip negative scroll loop. only on vertical scroll\n case 'rgRow':\n this.verticalScroll.style.transform = `translateY(${-1 * e.coordinate}px)`;\n break;\n }\n }\n return null;\n }\n if (e.delta) {\n switch (e.dimension) {\n case 'rgCol':\n e.coordinate = this.horizontalScroll.scrollLeft + e.delta;\n break;\n case 'rgRow':\n e.coordinate = this.verticalScroll.scrollTop + e.delta;\n break;\n }\n this.setScroll(e);\n }\n return e;\n }\n\n /**\n * Dispatch this event to trigger vertical mouse wheel from plugins\n */\n @Listen('mousewheel-vertical') mousewheelVertical({\n detail: e,\n }: CustomEvent<LocalScrollEvent>) {\n this.verticalMouseWheel(e);\n }\n /**\n * Dispatch this event to trigger horizontal mouse wheel from plugins\n */\n @Listen('mousewheel-horizontal') mousewheelHorizontal({\n detail: e,\n }: CustomEvent<LocalScrollEvent>) {\n this.horizontalMouseWheel(e);\n }\n /**\n * Allows to use outside listener\n */\n @Listen('scroll-coordinate') scrollApply({\n detail: { type, coordinate },\n }: CustomEvent<ScrollCoordinateEvent>) {\n this.applyOnScroll(type, coordinate, true);\n }\n\n connectedCallback() {\n /**\n * Bind scroll functions for farther usage\n */\n if ('ontouchstart' in document.documentElement) {\n this.scrollThrottling = 0;\n } else {\n this.verticalMouseWheel = this.onVerticalMouseWheel.bind(\n this,\n 'rgRow',\n 'deltaY',\n );\n this.horizontalMouseWheel = this.onHorizontalMouseWheel.bind(\n this,\n 'rgCol',\n 'deltaX',\n );\n }\n /**\n * Create local scroll service\n */\n this.scrollService = new LocalScrollService({\n beforeScroll: e => this.scrollViewport.emit(e),\n afterScroll: e => {\n switch (e.dimension) {\n case 'rgCol':\n this.horizontalScroll.scrollLeft = e.coordinate;\n break;\n case 'rgRow':\n this.verticalScroll.scrollTop = e.coordinate;\n // for mobile devices to skip negative scroll loop. only on vertical scroll\n if (this.verticalScroll.style.transform) {\n this.verticalScroll.style.transform = '';\n }\n break;\n }\n },\n });\n }\n\n componentDidLoad() {\n // track horizontal viewport resize\n this.resizeService = new GridResizeService(this.horizontalScroll, {\n resize: entries => {\n let height = entries[0]?.contentRect.height || 0;\n if (height) {\n height -= this.header.clientHeight + this.footer.clientHeight;\n }\n const els = {\n rgRow: {\n size: height,\n contentSize: this.contentHeight,\n scroll: this.verticalScroll.scrollTop,\n },\n rgCol: {\n size: entries[0]?.contentRect.width || 0,\n contentSize: this.contentWidth,\n scroll: this.horizontalScroll.scrollLeft,\n },\n };\n each(els, (item, dimension: RevoGrid.DimensionType) => {\n this.resizeViewport.emit({ dimension, size: item.size });\n this.scrollService?.scroll(item.scroll, dimension, true);\n // track scroll visibility on outer element change\n this.setScrollVisibility(dimension, item.size, item.contentSize);\n });\n },\n });\n }\n\n /**\n * Check if scroll present or not per type\n * Trigger this method on inner content size change or on outer element size change\n * If inner content bigger then outer size then scroll is present and mousewheel binding required\n * @param type - dimension type 'rgRow/y' or 'rgCol/x'\n * @param size - outer content size\n * @param innerContentSize - inner content size\n */\n setScrollVisibility(\n type: RevoGrid.DimensionType,\n size: number,\n innerContentSize: number,\n ) {\n // test if scroll present\n const hasScroll = size < innerContentSize;\n let el: HTMLElement;\n // event reference for binding\n switch (type) {\n case 'rgCol':\n el = this.horizontalScroll;\n break;\n case 'rgRow':\n el = this.verticalScroll;\n break;\n }\n // based on scroll visibility assign or remove class and event\n if (hasScroll) {\n el.classList.add(`scroll-${type}`);\n } else {\n el.classList.remove(`scroll-${type}`);\n }\n this.scrollchange.emit({ type, hasScroll });\n }\n\n disconnectedCallback() {\n this.resizeService.destroy();\n }\n\n async componentDidRender() {\n // scroll update if number of rows changed\n if (this.contentHeight < this.oldValY && this.verticalScroll) {\n this.verticalScroll.scrollTop += this.contentHeight - this.oldValY;\n }\n this.oldValY = this.contentHeight;\n\n // scroll update if number of cols changed\n if (this.contentWidth < this.oldValX) {\n this.horizontalScroll.scrollLeft += this.contentWidth - this.oldValX;\n }\n this.oldValX = this.contentWidth;\n\n this.scrollService.setParams(\n {\n contentSize: this.contentHeight,\n clientSize: this.verticalScroll.clientHeight,\n virtualSize: 0,\n },\n 'rgRow',\n );\n\n this.scrollService.setParams(\n {\n contentSize: this.contentWidth,\n clientSize: this.horizontalScroll.clientWidth,\n virtualSize: 0,\n },\n 'rgCol',\n );\n this.setScrollVisibility(\n 'rgRow',\n this.verticalScroll.clientHeight,\n this.contentHeight,\n );\n this.setScrollVisibility(\n 'rgCol',\n this.horizontalScroll.clientWidth,\n this.contentWidth,\n );\n }\n\n render() {\n return (\n <Host\n onWheel={this.horizontalMouseWheel}\n onScroll={(e: UIEvent) => this.onScroll('rgCol', e)}\n >\n <div\n class=\"inner-content-table\"\n style={{ width: `${this.contentWidth}px` }}\n >\n <div class=\"header-wrapper\" ref={e => (this.header = e)}>\n <slot name={HEADER_SLOT} />\n </div>\n <div\n class=\"vertical-inner\"\n ref={el => (this.verticalScroll = el)}\n onWheel={this.verticalMouseWheel}\n onScroll={(e: MouseEvent) => this.onScroll('rgRow', e)}\n >\n <div\n class=\"content-wrapper\"\n style={{ height: `${this.contentHeight}px` }}\n >\n <slot name={CONTENT_SLOT} />\n </div>\n </div>\n <div class=\"footer-wrapper\" ref={e => (this.footer = e)}>\n <slot name={FOOTER_SLOT} />\n </div>\n </div>\n </Host>\n );\n }\n /**\n * Extra layer for scroll event monitoring, where MouseWheel event is not passing\n * We need to trigger scroll event in case there is no mousewheel event\n */\n private onScroll(type: RevoGrid.DimensionType, e: UIEvent) {\n if (!(e.target instanceof HTMLElement)) {\n return;\n }\n const target = e.target;\n let scroll = 0;\n switch (type) {\n case 'rgCol':\n scroll = target?.scrollLeft;\n break;\n case 'rgRow':\n scroll = target?.scrollTop;\n break;\n }\n\n // for mobile devices to skip negative scroll loop\n if (scroll < 0) {\n this.silentScroll.emit({ dimension: type, coordinate: scroll });\n return;\n }\n this.applyOnScroll(type, scroll);\n }\n\n private applyOnScroll(\n type: RevoGrid.DimensionType,\n coordinate: number,\n outside = false,\n ) {\n const change = new Date().getTime() - this.mouseWheelScroll[type];\n // apply after throttling\n if (change > this.scrollThrottling) {\n this.scrollService?.scroll(\n coordinate,\n type,\n undefined,\n undefined,\n outside,\n );\n }\n }\n\n /** remember last mw event time */\n private latestScrollUpdate(dimension: RevoGrid.DimensionType) {\n this.mouseWheelScroll[dimension] = new Date().getTime();\n }\n\n /**\n * On vertical mousewheel event\n * @param type\n * @param delta\n * @param e\n */\n private onVerticalMouseWheel(\n type: RevoGrid.DimensionType,\n delta: Delta,\n e: LocalScrollEvent,\n ) {\n e.preventDefault && e.preventDefault();\n const pos = this.verticalScroll.scrollTop + e[delta];\n this.scrollService?.scroll(pos, type, undefined, e[delta]);\n this.latestScrollUpdate(type);\n }\n\n /**\n * On horizontal mousewheel event\n * @param type\n * @param delta\n * @param e\n */\n private onHorizontalMouseWheel(\n type: RevoGrid.DimensionType,\n delta: Delta,\n e: LocalScrollEvent,\n ) {\n e.preventDefault && e.preventDefault();\n const pos = this.horizontalScroll.scrollLeft + e[delta];\n this.scrollService?.scroll(pos, type, undefined, e[delta]);\n this.latestScrollUpdate(type);\n }\n}\n"]}
|