@revolist/revogrid 4.4.0-next.21 → 4.4.0-next.22
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/consts.js +1 -1
- package/custom-element/revogr-data2.js +6 -5
- package/custom-element/revogr-data2.js.map +1 -1
- package/custom-element/revogr-header2.js +1 -1
- package/custom-element/revogr-row-headers2.js +3 -1
- package/custom-element/revogr-row-headers2.js.map +1 -1
- package/dist/cjs/{events-030618fc.js → events-05e75632.js} +4 -2
- package/dist/cjs/events-05e75632.js.map +1 -0
- package/dist/cjs/revo-grid.cjs.entry.js +1 -1
- package/dist/cjs/revogr-data_3.cjs.entry.js +5 -4
- package/dist/cjs/revogr-data_3.cjs.entry.js.map +1 -1
- package/dist/cjs/revogr-focus_5.cjs.entry.js +1 -1
- package/dist/collection/components/data/revogr-data.js +2 -2
- package/dist/collection/components/data/revogr-data.js.map +1 -1
- package/dist/collection/components/data/rowRenderer.d.ts +2 -1
- package/dist/collection/components/data/rowRenderer.js +4 -2
- package/dist/collection/components/data/rowRenderer.js.map +1 -1
- package/dist/collection/store/viewPort/viewport.store.js +3 -1
- package/dist/collection/store/viewPort/viewport.store.js.map +1 -1
- package/dist/esm/{events-31272e5e.js → events-ba6deadc.js} +5 -3
- package/dist/esm/events-ba6deadc.js.map +1 -0
- package/dist/esm/{index-728bf6e3.js → index-7e15bb75.js} +2 -2
- package/dist/esm/{index-728bf6e3.js.map → index-7e15bb75.js.map} +1 -1
- package/dist/esm/{isString-d539060a.js → isString-c3b446b7.js} +2 -2
- package/dist/esm/{isString-d539060a.js.map → isString-c3b446b7.js.map} +1 -1
- package/dist/esm/{keyCodes.utils-c0064460.js → keyCodes.utils-505274f6.js} +3 -3
- package/dist/esm/{keyCodes.utils-c0064460.js.map → keyCodes.utils-505274f6.js.map} +1 -1
- package/dist/esm/{localScrollService-884d8952.js → localScrollService-2c98a058.js} +3 -3
- package/dist/esm/{localScrollService-884d8952.js.map → localScrollService-2c98a058.js.map} +1 -1
- package/dist/esm/revo-grid.entry.js +4 -4
- package/dist/esm/revogr-data_3.entry.js +8 -7
- package/dist/esm/revogr-data_3.entry.js.map +1 -1
- package/dist/esm/revogr-edit_2.entry.js +3 -3
- package/dist/esm/revogr-focus_5.entry.js +6 -6
- package/dist/esm/{viewport.helpers-c08e729e.js → viewport.helpers-ea0209ba.js} +2 -2
- package/dist/esm/{viewport.helpers-c08e729e.js.map → viewport.helpers-ea0209ba.js.map} +1 -1
- package/dist/revo-grid/{events-31272e5e.js → events-ba6deadc.js} +2 -2
- package/dist/revo-grid/{events-31272e5e.js.map → events-ba6deadc.js.map} +1 -1
- package/dist/revo-grid/{index-728bf6e3.js → index-7e15bb75.js} +2 -2
- package/dist/revo-grid/{isString-d539060a.js → isString-c3b446b7.js} +2 -2
- package/dist/revo-grid/{keyCodes.utils-c0064460.js → keyCodes.utils-505274f6.js} +2 -2
- package/dist/revo-grid/{localScrollService-884d8952.js → localScrollService-2c98a058.js} +2 -2
- package/dist/revo-grid/revo-grid.entry.js +1 -1
- package/dist/revo-grid/revogr-data_3.entry.js +1 -1
- package/dist/revo-grid/revogr-data_3.entry.js.map +1 -1
- package/dist/revo-grid/revogr-edit_2.entry.js +1 -1
- package/dist/revo-grid/revogr-focus_5.entry.js +1 -1
- package/dist/revo-grid/{viewport.helpers-c08e729e.js → viewport.helpers-ea0209ba.js} +2 -2
- package/dist/types/components/data/rowRenderer.d.ts +2 -1
- package/package.json +1 -1
- package/dist/cjs/events-030618fc.js.map +0 -1
- package/dist/esm/events-31272e5e.js.map +0 -1
- /package/dist/revo-grid/{index-728bf6e3.js.map → index-7e15bb75.js.map} +0 -0
- /package/dist/revo-grid/{isString-d539060a.js.map → isString-c3b446b7.js.map} +0 -0
- /package/dist/revo-grid/{keyCodes.utils-c0064460.js.map → keyCodes.utils-505274f6.js.map} +0 -0
- /package/dist/revo-grid/{localScrollService-884d8952.js.map → localScrollService-2c98a058.js.map} +0 -0
- /package/dist/revo-grid/{viewport.helpers-c08e729e.js.map → viewport.helpers-ea0209ba.js.map} +0 -0
package/custom-element/consts.js
CHANGED
|
@@ -46,6 +46,6 @@ const EDIT_INPUT_WR = 'edit-input-wrapper';
|
|
|
46
46
|
const DRAGG_TEXT = 'Draggable item';
|
|
47
47
|
const GRID_INTERNALS = '__rvgr';
|
|
48
48
|
|
|
49
|
-
export { CELL_HANDLER_CLASS as C, DRAGGABLE_CLASS as D, EDIT_INPUT_WR as E, FOCUS_CLASS as F, GRID_INTERNALS as G, HEADER_CLASS as H, MIN_COL_SIZE as M, RESIZE_INTERVAL as R, SELECTION_BORDER_CLASS as S, TMP_SELECTION_BG_CLASS as T, UUID as U, _arrayMap as _, DRAG_ICON_CLASS as a,
|
|
49
|
+
export { CELL_HANDLER_CLASS as C, DRAGGABLE_CLASS as D, EDIT_INPUT_WR as E, FOCUS_CLASS as F, GRID_INTERNALS as G, HEADER_CLASS as H, MIN_COL_SIZE as M, RESIZE_INTERVAL as R, SELECTION_BORDER_CLASS as S, TMP_SELECTION_BG_CLASS as T, UUID as U, _arrayMap as _, DRAG_ICON_CLASS as a, DATA_ROW as b, DATA_COL as c, HEADER_SORTABLE_CLASS as d, HEADER_ROW_CLASS as e, HEADER_ACTUAL_ROW_CLASS as f, DRAGG_TEXT as g, MOBILE_CLASS as h, ROW_HEADER_TYPE as i, CELL_CLASS as j, DISABLED_CLASS as k };
|
|
50
50
|
|
|
51
51
|
//# sourceMappingURL=consts.js.map
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { h, proxyCustomElement, HTMLElement, createEvent } from '@stencil/core/internal/client';
|
|
5
5
|
import { C as ColumnService, l as GROUP_EXPAND_BTN, h as GROUP_EXPAND_EVENT, m as PSEUDO_GROUP_ITEM, G as GROUP_EXPANDED, c as GROUP_DEPTH, i as isGrouping } from './columnService.js';
|
|
6
|
-
import { D as DRAGGABLE_CLASS, a as DRAG_ICON_CLASS, b as
|
|
6
|
+
import { D as DRAGGABLE_CLASS, a as DRAG_ICON_CLASS, b as DATA_ROW, c as DATA_COL } from './consts.js';
|
|
7
7
|
import { g as getSourceItem } from './data.store.js';
|
|
8
8
|
|
|
9
9
|
const CellRenderer = ({ model, onDragStart }) => {
|
|
@@ -26,8 +26,9 @@ function isRowDragService(rowDrag, model) {
|
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
const PADDING_DEPTH = 10;
|
|
29
|
-
const RowRenderer = ({ rowClass, size, start, style, depth }, cells) => {
|
|
30
|
-
|
|
29
|
+
const RowRenderer = ({ rowClass, index, size, start, style, depth }, cells) => {
|
|
30
|
+
const props = Object.assign({ [DATA_ROW]: index });
|
|
31
|
+
return (h("div", Object.assign({}, props, { class: `rgRow ${rowClass || ''}`, style: Object.assign(Object.assign({}, style), { height: `${size}px`, transform: `translateY(${start}px)`, paddingLeft: depth ? `${PADDING_DEPTH * depth}px` : undefined }) }), cells));
|
|
31
32
|
};
|
|
32
33
|
|
|
33
34
|
function expandEvent(e, model, virtualIndex) {
|
|
@@ -108,7 +109,7 @@ const RevogrData = /*@__PURE__*/ proxyCustomElement(class RevogrData extends HTM
|
|
|
108
109
|
const dataItem = getSourceItem(this.dataStore, rgRow.itemIndex);
|
|
109
110
|
/** grouping */
|
|
110
111
|
if (isGrouping(dataItem)) {
|
|
111
|
-
rowsEls.push(h(GroupingRowRenderer, Object.assign({}, rgRow, { model: dataItem, groupingCustomRenderer: groupingCustomRenderer, hasExpand: this.columnService.hasGrouping })));
|
|
112
|
+
rowsEls.push(h(GroupingRowRenderer, Object.assign({}, rgRow, { index: rgRow.itemIndex, model: dataItem, groupingCustomRenderer: groupingCustomRenderer, hasExpand: this.columnService.hasGrouping })));
|
|
112
113
|
continue;
|
|
113
114
|
}
|
|
114
115
|
/** grouping end */
|
|
@@ -121,7 +122,7 @@ const RevogrData = /*@__PURE__*/ proxyCustomElement(class RevogrData extends HTM
|
|
|
121
122
|
cells.push(this.getCellRenderer(rgRow, rgCol,
|
|
122
123
|
/** grouping apply*/ this.columnService.hasGrouping ? depth : 0));
|
|
123
124
|
}
|
|
124
|
-
const row = h(RowRenderer, { rowClass: rowClass, size: rgRow.size, start: rgRow.start }, cells);
|
|
125
|
+
const row = h(RowRenderer, { index: rgRow.itemIndex, rowClass: rowClass, size: rgRow.size, start: rgRow.start }, cells);
|
|
125
126
|
this.beforeRowRender.emit({
|
|
126
127
|
node: row,
|
|
127
128
|
item: rgRow,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"file":"revogr-data2.js","mappings":"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","names":[],"sources":["./src/components/data/cellRenderer.tsx","./src/components/data/rowRenderer.tsx","./src/plugins/groupingRow/grouping.row.renderer.tsx","./src/components/data/revogr-data-style.scss?tag=revogr-data","./src/components/data/revogr-data.tsx"],"sourcesContent":["import { h, VNode } from '@stencil/core';\nimport { DragStartEvent, RevoGrid } from '../../interfaces';\nimport ColumnService from './columnService';\nimport { DRAG_ICON_CLASS, DRAGGABLE_CLASS } from '../../utils/consts';\n\n\ntype Props = {\n model: RevoGrid.ColumnDataSchemaModel;\n onDragStart?(e: DragStartEvent): void;\n};\n\nconst CellRenderer = ({ model, onDragStart }: Props) => {\n const els: (VNode | string)[] = [];\n if (model.column.rowDrag && isRowDragService(model.column.rowDrag, model)) {\n els.push(\n <span class={DRAGGABLE_CLASS} onMouseDown={originalEvent => onDragStart({\n originalEvent,\n model\n })}>\n <span class={DRAG_ICON_CLASS} />\n </span>,\n );\n }\n els.push(`${ColumnService.getData(model.model[model.prop])}`);\n return els;\n};\n\nexport default CellRenderer;\n\nfunction isRowDragService(rowDrag: RevoGrid.RowDrag, model: RevoGrid.ColumnDataSchemaModel): boolean {\n if (typeof rowDrag === 'function') {\n return rowDrag(model);\n }\n return !!rowDrag;\n}\n","import { h, VNode } from '@stencil/core';\nimport { JSXBase } from '@stencil/core/internal';\n\nexport interface RowProps extends JSXBase.HTMLAttributes {\n size: number;\n start: number;\n rowClass?: string;\n depth?: number;\n}\n\nexport const PADDING_DEPTH = 10;\n\nconst RowRenderer = ({ rowClass, size, start, style, depth }: RowProps, cells: VNode[]) => {\n return (\n <div\n class={`rgRow ${rowClass || ''}`}\n style={{\n ...style,\n height: `${size}px`,\n transform: `translateY(${start}px)`,\n paddingLeft: depth ? `${PADDING_DEPTH * depth}px` : undefined,\n }}\n >\n {cells}\n </div>\n );\n};\n\nexport default RowRenderer;\n","import { h } from '@stencil/core';\nimport RowRenderer, { RowProps } from '../../components/data/rowRenderer';\nimport { RevoGrid } from '../../interfaces';\nimport { GROUP_DEPTH, GROUP_EXPANDED, GROUP_EXPAND_BTN, GROUP_EXPAND_EVENT, PSEUDO_GROUP_ITEM } from './grouping.const';\nimport { GroupLabelTemplateFunc } from './grouping.row.types';\n\ninterface GroupRowPros extends RowProps {\n model: RevoGrid.DataType;\n hasExpand: boolean;\n groupingCustomRenderer?: GroupLabelTemplateFunc;\n}\ntype Props = GroupRowPros & RevoGrid.PositionItem;\n\nfunction expandEvent(e: MouseEvent, model: RevoGrid.DataType, virtualIndex: number) {\n const event = new CustomEvent(GROUP_EXPAND_EVENT, {\n detail: {\n model,\n virtualIndex,\n },\n cancelable: true,\n bubbles: true,\n });\n e.target.dispatchEvent(event);\n}\n\nconst GroupingRowRenderer = (props: Props) => {\n const { model, itemIndex, hasExpand, groupingCustomRenderer } = props;\n const name: string = model[PSEUDO_GROUP_ITEM];\n const expanded: boolean = model[GROUP_EXPANDED];\n const depth = parseInt(model[GROUP_DEPTH], 10) || 0;\n if (!hasExpand) {\n return <RowRenderer {...props} rowClass=\"groupingRow\" depth={depth} />;\n }\n\n if (groupingCustomRenderer) {\n return (\n <RowRenderer {...props} rowClass=\"groupingRow\" depth={depth}>\n <div onClick={e => expandEvent(e, model, itemIndex)}>\n {groupingCustomRenderer(h, { name, itemIndex, expanded, depth })}\n </div>\n </RowRenderer>\n );\n }\n\n return (\n <RowRenderer {...props} rowClass=\"groupingRow\" depth={depth}>\n <button class={{ [GROUP_EXPAND_BTN]: true }} onClick={e => expandEvent(e, model, itemIndex)}>\n <svg aria-hidden=\"true\" style={{ transform: `rotate(${!expanded ? -90 : 0}deg)` }} focusable=\"false\" viewBox=\"0 0 448 512\">\n <path\n fill=\"currentColor\"\n d=\"M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z\"\n ></path>\n </svg>\n </button>\n {name}\n </RowRenderer>\n );\n};\nexport default GroupingRowRenderer;\n","revogr-data {\n display: block;\n width: 100%;\n position: relative;\n\n .rgRow {\n position: absolute;\n width: 100%;\n left: 0;\n\n &.groupingRow {\n font-weight: 600;\n\n .group-expand {\n width: 25px;\n height: 100%;\n max-height: 25px;\n margin-right: 2px;\n background-color: transparent;\n border-color: transparent;\n\n svg {\n width: 7px;\n }\n }\n }\n }\n\n .revo-draggable {\n $w: 24px;\n\n border: none;\n height: 32px;\n display: inline-flex;\n outline: 0;\n padding: 0;\n font-size: 0.8125rem;\n box-sizing: border-box;\n align-items: center;\n white-space: nowrap;\n vertical-align: middle;\n justify-content: center;\n text-decoration: none;\n width: $w;\n height: 100%;\n cursor: pointer;\n\n > .revo-drag-icon {\n vertical-align: middle;\n display: inline-block;\n pointer-events: none;\n transition: background-color 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms, box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;\n }\n }\n\n .rgCell {\n top: 0;\n position: absolute;\n box-sizing: border-box;\n height: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n\n &.align-center {\n text-align: center;\n }\n &.align-left {\n text-align: left;\n }\n &.align-right {\n text-align: right;\n }\n }\n}\n","import { Component, Element, Event, Prop, VNode, EventEmitter, h } from '@stencil/core';\nimport { HTMLStencilElement, Watch } from '@stencil/core/internal';\n\nimport ColumnService, { ColumnSource, RowSource } from './columnService';\nimport { DATA_COL, DATA_ROW } from '../../utils/consts';\n\nimport { getSourceItem } from '../../store/dataSource/data.store';\nimport { BeforeCellRenderEvent, DragStartEvent, Observable, RevoGrid, Selection } from '../../interfaces';\nimport CellRenderer from './cellRenderer';\nimport RowRenderer, { PADDING_DEPTH } from './rowRenderer';\nimport GroupingRowRenderer from '../../plugins/groupingRow/grouping.row.renderer';\nimport { isGrouping } from '../../plugins/groupingRow/grouping.service';\n\nconst DRAG_START_EVENT = 'dragStartCell';\n\n/**\n * This component is responsible for rendering data\n * Rows, columns, groups and cells\n */\n@Component({\n tag: 'revogr-data',\n styleUrl: 'revogr-data-style.scss',\n})\nexport class RevogrData {\n private columnService: ColumnService;\n\n @Element() element!: HTMLStencilElement;\n\n /**\n * If readonly mode enables\n */\n @Prop() readonly: boolean;\n /**\n * Range selection mode\n */\n @Prop() range: boolean;\n\n /**\n * Defines property from which to read row class\n */\n @Prop() rowClass: string;\n /** Additional data to pass to renderer */\n @Prop() additionalData: any;\n @Prop() rowSelectionStore!: Observable<Selection.SelectionStoreState>;\n @Prop() viewportRow!: Observable<RevoGrid.ViewportState>;\n @Prop() viewportCol!: Observable<RevoGrid.ViewportState>;\n\n @Prop() dimensionRow!: Observable<RevoGrid.DimensionSettingsState>;\n\n /** Static stores, not expected to change during component lifetime */\n @Prop() colData!: ColumnSource;\n @Prop() dataStore!: RowSource;\n @Prop() type!: RevoGrid.DimensionRows;\n\n @Event({ eventName: DRAG_START_EVENT }) dragStartCell: EventEmitter<DragStartEvent>;\n @Event() beforeRowRender: EventEmitter;\n @Event({ eventName: 'before-cell-render' }) beforeCellRender: EventEmitter<BeforeCellRenderEvent>;\n\n @Watch('dataStore')\n @Watch('colData')\n onStoreChange() {\n this.columnService?.destroy();\n this.columnService = new ColumnService(this.dataStore, this.colData);\n }\n\n connectedCallback() {\n this.onStoreChange();\n }\n\n disconnectedCallback() {\n this.columnService?.destroy();\n }\n\n render() {\n const rows = this.viewportRow.get('items');\n const cols = this.viewportCol.get('items');\n if (!this.columnService.columns.length || !rows.length || !cols.length) {\n return '';\n }\n const range = this.rowSelectionStore?.get('range');\n const rowsEls: VNode[] = [];\n\n const depth = this.dataStore.get('groupingDepth');\n const groupingCustomRenderer = this.dataStore.get('groupingCustomRenderer');\n for (let rgRow of rows) {\n const dataItem = getSourceItem(this.dataStore, rgRow.itemIndex);\n /** grouping */\n if (isGrouping(dataItem)) {\n rowsEls.push(<GroupingRowRenderer {...rgRow} model={dataItem} groupingCustomRenderer={groupingCustomRenderer} hasExpand={this.columnService.hasGrouping} />);\n continue;\n }\n /** grouping end */\n const cells: (VNode | string | void)[] = [];\n let rowClass = this.rowClass ? this.columnService.getRowClass(rgRow.itemIndex, this.rowClass) : '';\n if (range && rgRow.itemIndex >= range.y && rgRow.itemIndex <= range.y1) {\n rowClass += ' focused-rgRow';\n }\n for (let rgCol of cols) {\n cells.push(\n this.getCellRenderer(\n rgRow, rgCol,\n /** grouping apply*/ this.columnService.hasGrouping ? depth : 0\n )\n );\n }\n const row = <RowRenderer rowClass={rowClass} size={rgRow.size} start={rgRow.start}>\n {cells}\n </RowRenderer>;\n this.beforeRowRender.emit({\n node: row,\n item: rgRow,\n dataItem\n });\n rowsEls.push(row);\n }\n return rowsEls;\n }\n\n private getCellRenderer(rgRow: RevoGrid.VirtualPositionItem, rgCol: RevoGrid.VirtualPositionItem, depth = 0) {\n const model = this.columnService.rowDataModel(rgRow.itemIndex, rgCol.itemIndex);\n const cellEvent = this.beforeCellRender.emit({\n column: { ...rgCol },\n row: {\n ...rgRow,\n size: undefined\n },\n model,\n rowType: this.type,\n colType: this.columnService.type,\n });\n if (cellEvent.defaultPrevented) {\n return;\n }\n const {\n detail: {\n column: columnProps,\n row: rowProps\n }\n } = cellEvent;\n const defaultProps: RevoGrid.CellProps = {\n [DATA_COL]: columnProps.itemIndex,\n [DATA_ROW]: rowProps.itemIndex,\n style: {\n width: `${columnProps.size}px`,\n transform: `translateX(${columnProps.start}px)`,\n height: rowProps.size ? `${rowProps.size}px` : undefined,\n },\n };\n /**\n * For grouping, can be removed in the future and replaced with event\n */\n if (depth && !columnProps.itemIndex) {\n defaultProps.style.paddingLeft = `${PADDING_DEPTH * depth}px`;\n }\n const props = this.columnService.mergeProperties(rowProps.itemIndex, columnProps.itemIndex, defaultProps);\n const custom = this.columnService.customRenderer(\n columnProps.itemIndex, model, this.providers, this.additionalData\n );\n\n // if custom render\n if (typeof custom !== 'undefined') {\n return <div {...props}>{custom}</div>;\n }\n\n // something is wrong with data\n if (!model.column) {\n console.error('Investigate column problem');\n return;\n }\n\n // if regular render\n return (\n <div {...props}>\n <CellRenderer model={model} onDragStart={e => this.dragStartCell.emit(e)} />\n </div>\n );\n }\n\n get providers(): RevoGrid.Providers {\n return {\n type: this.type,\n data: this.dataStore,\n viewport: this.viewportCol,\n dimension: this.dimensionRow,\n selection: this.rowSelectionStore,\n };\n }\n}\n"],"version":3}
|
|
1
|
+
{"file":"revogr-data2.js","mappings":"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","names":[],"sources":["./src/components/data/cellRenderer.tsx","./src/components/data/rowRenderer.tsx","./src/plugins/groupingRow/grouping.row.renderer.tsx","./src/components/data/revogr-data-style.scss?tag=revogr-data","./src/components/data/revogr-data.tsx"],"sourcesContent":["import { h, VNode } from '@stencil/core';\nimport { DragStartEvent, RevoGrid } from '../../interfaces';\nimport ColumnService from './columnService';\nimport { DRAG_ICON_CLASS, DRAGGABLE_CLASS } from '../../utils/consts';\n\n\ntype Props = {\n model: RevoGrid.ColumnDataSchemaModel;\n onDragStart?(e: DragStartEvent): void;\n};\n\nconst CellRenderer = ({ model, onDragStart }: Props) => {\n const els: (VNode | string)[] = [];\n if (model.column.rowDrag && isRowDragService(model.column.rowDrag, model)) {\n els.push(\n <span class={DRAGGABLE_CLASS} onMouseDown={originalEvent => onDragStart({\n originalEvent,\n model\n })}>\n <span class={DRAG_ICON_CLASS} />\n </span>,\n );\n }\n els.push(`${ColumnService.getData(model.model[model.prop])}`);\n return els;\n};\n\nexport default CellRenderer;\n\nfunction isRowDragService(rowDrag: RevoGrid.RowDrag, model: RevoGrid.ColumnDataSchemaModel): boolean {\n if (typeof rowDrag === 'function') {\n return rowDrag(model);\n }\n return !!rowDrag;\n}\n","import { h, VNode } from '@stencil/core';\nimport { JSXBase } from '@stencil/core/internal';\nimport { DATA_ROW } from '../../utils/consts';\n\nexport interface RowProps extends JSXBase.HTMLAttributes {\n size: number;\n start: number;\n index: number;\n rowClass?: string;\n depth?: number;\n}\n\nexport const PADDING_DEPTH = 10;\n\nconst RowRenderer = ({ rowClass, index, size, start, style, depth }: RowProps, cells: VNode[]) => {\n const props = {\n ...{ [DATA_ROW]: index },\n };\n return (\n <div\n {...props}\n class={`rgRow ${rowClass || ''}`}\n style={{\n ...style,\n height: `${size}px`,\n transform: `translateY(${start}px)`,\n paddingLeft: depth ? `${PADDING_DEPTH * depth}px` : undefined,\n }}\n >\n {cells}\n </div>\n );\n};\n\nexport default RowRenderer;\n","import { h } from '@stencil/core';\nimport RowRenderer, { RowProps } from '../../components/data/rowRenderer';\nimport { RevoGrid } from '../../interfaces';\nimport { GROUP_DEPTH, GROUP_EXPANDED, GROUP_EXPAND_BTN, GROUP_EXPAND_EVENT, PSEUDO_GROUP_ITEM } from './grouping.const';\nimport { GroupLabelTemplateFunc } from './grouping.row.types';\n\ninterface GroupRowPros extends RowProps {\n model: RevoGrid.DataType;\n hasExpand: boolean;\n groupingCustomRenderer?: GroupLabelTemplateFunc;\n}\ntype Props = GroupRowPros & RevoGrid.PositionItem;\n\nfunction expandEvent(e: MouseEvent, model: RevoGrid.DataType, virtualIndex: number) {\n const event = new CustomEvent(GROUP_EXPAND_EVENT, {\n detail: {\n model,\n virtualIndex,\n },\n cancelable: true,\n bubbles: true,\n });\n e.target.dispatchEvent(event);\n}\n\nconst GroupingRowRenderer = (props: Props) => {\n const { model, itemIndex, hasExpand, groupingCustomRenderer } = props;\n const name: string = model[PSEUDO_GROUP_ITEM];\n const expanded: boolean = model[GROUP_EXPANDED];\n const depth = parseInt(model[GROUP_DEPTH], 10) || 0;\n if (!hasExpand) {\n return <RowRenderer {...props} rowClass=\"groupingRow\" depth={depth} />;\n }\n\n if (groupingCustomRenderer) {\n return (\n <RowRenderer {...props} rowClass=\"groupingRow\" depth={depth}>\n <div onClick={e => expandEvent(e, model, itemIndex)}>\n {groupingCustomRenderer(h, { name, itemIndex, expanded, depth })}\n </div>\n </RowRenderer>\n );\n }\n\n return (\n <RowRenderer {...props} rowClass=\"groupingRow\" depth={depth}>\n <button class={{ [GROUP_EXPAND_BTN]: true }} onClick={e => expandEvent(e, model, itemIndex)}>\n <svg aria-hidden=\"true\" style={{ transform: `rotate(${!expanded ? -90 : 0}deg)` }} focusable=\"false\" viewBox=\"0 0 448 512\">\n <path\n fill=\"currentColor\"\n d=\"M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z\"\n ></path>\n </svg>\n </button>\n {name}\n </RowRenderer>\n );\n};\nexport default GroupingRowRenderer;\n","revogr-data {\n display: block;\n width: 100%;\n position: relative;\n\n .rgRow {\n position: absolute;\n width: 100%;\n left: 0;\n\n &.groupingRow {\n font-weight: 600;\n\n .group-expand {\n width: 25px;\n height: 100%;\n max-height: 25px;\n margin-right: 2px;\n background-color: transparent;\n border-color: transparent;\n\n svg {\n width: 7px;\n }\n }\n }\n }\n\n .revo-draggable {\n $w: 24px;\n\n border: none;\n height: 32px;\n display: inline-flex;\n outline: 0;\n padding: 0;\n font-size: 0.8125rem;\n box-sizing: border-box;\n align-items: center;\n white-space: nowrap;\n vertical-align: middle;\n justify-content: center;\n text-decoration: none;\n width: $w;\n height: 100%;\n cursor: pointer;\n\n > .revo-drag-icon {\n vertical-align: middle;\n display: inline-block;\n pointer-events: none;\n transition: background-color 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms, box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;\n }\n }\n\n .rgCell {\n top: 0;\n position: absolute;\n box-sizing: border-box;\n height: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n\n &.align-center {\n text-align: center;\n }\n &.align-left {\n text-align: left;\n }\n &.align-right {\n text-align: right;\n }\n }\n}\n","import { Component, Element, Event, Prop, VNode, EventEmitter, h } from '@stencil/core';\nimport { HTMLStencilElement, Watch } from '@stencil/core/internal';\n\nimport ColumnService, { ColumnSource, RowSource } from './columnService';\nimport { DATA_COL, DATA_ROW } from '../../utils/consts';\n\nimport { getSourceItem } from '../../store/dataSource/data.store';\nimport { BeforeCellRenderEvent, DragStartEvent, Observable, RevoGrid, Selection } from '../../interfaces';\nimport CellRenderer from './cellRenderer';\nimport RowRenderer, { PADDING_DEPTH } from './rowRenderer';\nimport GroupingRowRenderer from '../../plugins/groupingRow/grouping.row.renderer';\nimport { isGrouping } from '../../plugins/groupingRow/grouping.service';\n\nconst DRAG_START_EVENT = 'dragStartCell';\n\n/**\n * This component is responsible for rendering data\n * Rows, columns, groups and cells\n */\n@Component({\n tag: 'revogr-data',\n styleUrl: 'revogr-data-style.scss',\n})\nexport class RevogrData {\n private columnService: ColumnService;\n\n @Element() element!: HTMLStencilElement;\n\n /**\n * If readonly mode enables\n */\n @Prop() readonly: boolean;\n /**\n * Range selection mode\n */\n @Prop() range: boolean;\n\n /**\n * Defines property from which to read row class\n */\n @Prop() rowClass: string;\n /** Additional data to pass to renderer */\n @Prop() additionalData: any;\n @Prop() rowSelectionStore!: Observable<Selection.SelectionStoreState>;\n @Prop() viewportRow!: Observable<RevoGrid.ViewportState>;\n @Prop() viewportCol!: Observable<RevoGrid.ViewportState>;\n\n @Prop() dimensionRow!: Observable<RevoGrid.DimensionSettingsState>;\n\n /** Static stores, not expected to change during component lifetime */\n @Prop() colData!: ColumnSource;\n @Prop() dataStore!: RowSource;\n @Prop() type!: RevoGrid.DimensionRows;\n\n @Event({ eventName: DRAG_START_EVENT }) dragStartCell: EventEmitter<DragStartEvent>;\n @Event() beforeRowRender: EventEmitter;\n @Event({ eventName: 'before-cell-render' }) beforeCellRender: EventEmitter<BeforeCellRenderEvent>;\n\n @Watch('dataStore')\n @Watch('colData')\n onStoreChange() {\n this.columnService?.destroy();\n this.columnService = new ColumnService(this.dataStore, this.colData);\n }\n\n connectedCallback() {\n this.onStoreChange();\n }\n\n disconnectedCallback() {\n this.columnService?.destroy();\n }\n\n render() {\n const rows = this.viewportRow.get('items');\n const cols = this.viewportCol.get('items');\n if (!this.columnService.columns.length || !rows.length || !cols.length) {\n return '';\n }\n const range = this.rowSelectionStore?.get('range');\n const rowsEls: VNode[] = [];\n\n const depth = this.dataStore.get('groupingDepth');\n const groupingCustomRenderer = this.dataStore.get('groupingCustomRenderer');\n for (let rgRow of rows) {\n const dataItem = getSourceItem(this.dataStore, rgRow.itemIndex);\n /** grouping */\n if (isGrouping(dataItem)) {\n rowsEls.push(<GroupingRowRenderer {...rgRow} index={rgRow.itemIndex} model={dataItem} groupingCustomRenderer={groupingCustomRenderer} hasExpand={this.columnService.hasGrouping} />);\n continue;\n }\n /** grouping end */\n const cells: (VNode | string | void)[] = [];\n let rowClass = this.rowClass ? this.columnService.getRowClass(rgRow.itemIndex, this.rowClass) : '';\n if (range && rgRow.itemIndex >= range.y && rgRow.itemIndex <= range.y1) {\n rowClass += ' focused-rgRow';\n }\n for (let rgCol of cols) {\n cells.push(\n this.getCellRenderer(\n rgRow, rgCol,\n /** grouping apply*/ this.columnService.hasGrouping ? depth : 0\n )\n );\n }\n const row = <RowRenderer index={rgRow.itemIndex} rowClass={rowClass} size={rgRow.size} start={rgRow.start}>\n {cells}\n </RowRenderer>;\n this.beforeRowRender.emit({\n node: row,\n item: rgRow,\n dataItem\n });\n rowsEls.push(row);\n }\n return rowsEls;\n }\n\n private getCellRenderer(rgRow: RevoGrid.VirtualPositionItem, rgCol: RevoGrid.VirtualPositionItem, depth = 0) {\n const model = this.columnService.rowDataModel(rgRow.itemIndex, rgCol.itemIndex);\n const cellEvent = this.beforeCellRender.emit({\n column: { ...rgCol },\n row: {\n ...rgRow,\n size: undefined\n },\n model,\n rowType: this.type,\n colType: this.columnService.type,\n });\n if (cellEvent.defaultPrevented) {\n return;\n }\n const {\n detail: {\n column: columnProps,\n row: rowProps\n }\n } = cellEvent;\n const defaultProps: RevoGrid.CellProps = {\n [DATA_COL]: columnProps.itemIndex,\n [DATA_ROW]: rowProps.itemIndex,\n style: {\n width: `${columnProps.size}px`,\n transform: `translateX(${columnProps.start}px)`,\n height: rowProps.size ? `${rowProps.size}px` : undefined,\n },\n };\n /**\n * For grouping, can be removed in the future and replaced with event\n */\n if (depth && !columnProps.itemIndex) {\n defaultProps.style.paddingLeft = `${PADDING_DEPTH * depth}px`;\n }\n const props = this.columnService.mergeProperties(rowProps.itemIndex, columnProps.itemIndex, defaultProps);\n const custom = this.columnService.customRenderer(\n columnProps.itemIndex, model, this.providers, this.additionalData\n );\n\n // if custom render\n if (typeof custom !== 'undefined') {\n return <div {...props}>{custom}</div>;\n }\n\n // something is wrong with data\n if (!model.column) {\n console.error('Investigate column problem');\n return;\n }\n\n // if regular render\n return (\n <div {...props}>\n <CellRenderer model={model} onDragStart={e => this.dragStartCell.emit(e)} />\n </div>\n );\n }\n\n get providers(): RevoGrid.Providers {\n return {\n type: this.type,\n data: this.dataStore,\n viewport: this.viewportCol,\n dimension: this.dimensionRow,\n selection: this.rowSelectionStore,\n };\n }\n}\n"],"version":3}
|
|
@@ -6,7 +6,7 @@ import { a as _getNative } from './_stringToPath.js';
|
|
|
6
6
|
import { _ as _baseEach } from './each.js';
|
|
7
7
|
import { _ as _baseIteratee } from './_baseIteratee.js';
|
|
8
8
|
import { a as isArray_1 } from './keys.js';
|
|
9
|
-
import { F as FOCUS_CLASS, H as HEADER_CLASS, d as HEADER_SORTABLE_CLASS,
|
|
9
|
+
import { F as FOCUS_CLASS, H as HEADER_CLASS, d as HEADER_SORTABLE_CLASS, c as DATA_COL, M as MIN_COL_SIZE, e as HEADER_ROW_CLASS, f as HEADER_ACTUAL_ROW_CLASS } from './consts.js';
|
|
10
10
|
import { a as FilterButton } from './filter.button.js';
|
|
11
11
|
import { C as ColumnService } from './columnService.js';
|
|
12
12
|
import { f as findIndex_1 } from './data.store.js';
|
|
@@ -364,7 +364,9 @@ class ViewportStore {
|
|
|
364
364
|
let start = this.store.get('start');
|
|
365
365
|
// drop to original size if requested
|
|
366
366
|
if (dropToOriginalSize) {
|
|
367
|
-
|
|
367
|
+
const allItems = this.getItems();
|
|
368
|
+
const firstItem = getFirstItem(allItems);
|
|
369
|
+
items = setItemSizes(items, start, dropToOriginalSize, firstItem.start);
|
|
368
370
|
}
|
|
369
371
|
// loop through array from initial item after recombination
|
|
370
372
|
// if size change present, change position for all items after
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"file":"revogr-row-headers2.js","mappings":";;;;;;;;;;;AASA;;;;;SAKgB,yBAAyB,CACvC,GAAW;AACX,KAAQ,EACR,SAAiB,EACjB,WAAmB,EACnB,SAAgC;EAEhC,MAAM,UAAU,GAA0B,iBAAiB,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;EAC5E,MAAM,SAAS,GAA0B,YAAY,CAAC,KAAK,CAAC,CAAC;EAC7D,IAAI,QAAuB,CAAC;;EAE5B,IAAI,SAAS,EAAE;IACb,IAAI,kBAAkB,GAAG,UAAU,CAAC,SAAS,IAAI,SAAS,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC;;IAE3E,IAAI,kBAAkB,EAAE;;MAEtB,QAAQ,GAAG,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,gCACvD,iBAAiB,EAAE,kBAAkB,GAAG,CAAC,CAAC,IACvC,SAAS,GACT,KAAK,EACR,CAAC;KACJ;GACF;EAED,MAAM,kBAAkB,GAAG,iBAAiB,CAAC,WAAW,EAAE,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;;EAE1F,IAAI,QAAQ,EAAE;IACZ,MAAM,KAAK,GAAG,eAAe,CAAC,UAAU,EAAE,SAAS,EAAE,kBAAkB,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;IAC9F,IAAI,KAAK,CAAC,MAAM,EAAE;MAChB,qBAAqB,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;KACxD;GACF;;EAGD,IAAI,CAAC,QAAQ,EAAE;IACb,MAAM,KAAK,GAAG,QAAQ,CAAC;MACrB,cAAc,EAAE,UAAU,CAAC,KAAK;MAChC,cAAc,EAAE,UAAU,CAAC,SAAS;MACpC,QAAQ,EAAE,SAAS,CAAC,cAAc;MAClC,OAAO,EAAE,kBAAkB;MAC3B,QAAQ,EAAE,SAAS;MACnB,KAAK,EAAE,SAAS,CAAC,KAAK;KACvB,CAAC,CAAC;;IAGH,QAAQ,GAAG;MACT,KAAK;MACL,KAAK,EAAE,CAAC;MACR,GAAG,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC;KACtB,CAAC;GACH;EACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;AACA;AACA;AACA,SAAS,iBAAiB,CAAC,WAAmB,EAAE,QAAgB,EAAE,UAAiC;EACjG,OAAO,IAAI,CAAC,GAAG,CAAC,WAAW,IAAI,UAAU,CAAC,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,CAAA;AAC9E,CAAC;SAEe,qBAAqB,CACnC,KAAqC,EACrC,OAAuC,EACvC,KAAqB;EAErB,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC;;EAE3C,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,KAAK,KAAK,CAAC,CAAC,EAAE;IACjF,KAAK,CAAC,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;GAC/B;EACD,KAAK,CAAC,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;AAC9B,CAAC;AAED;;;;SAIgB,eAAe,CAC7B,SAAgC,EAChC,SAAiB,EACjB,WAAmB,EACnB,kBAAqB,EACrB,SAA4E;EAE5E,MAAM,QAAQ,GAAiC,WAAW,CAAC,kBAAkB,CAAC,CAAC;EAC/E,MAAM,KAAK,GAAG,QAAQ,CAAC;IACrB,KAAK,EAAE,SAAS,CAAC,KAAK;IACtB,cAAc,EAAE,QAAQ,CAAC,GAAG;IAC5B,cAAc,EAAE,QAAQ,CAAC,SAAS,GAAG,CAAC;IACtC,QAAQ,EAAE,SAAS,CAAC,cAAc;IAClC,OAAO,EAAE,WAAW,IAAI,QAAQ,CAAC,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC;IACvD,QAAQ,EAAE,SAAS;GACpB,CAAC,CAAC;EACH,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;SAIgB,QAAQ,CACtB,GAOC,EACD,WAAW,GAAG,CAAC;EAEf,MAAM,KAAK,GAAmC,EAAE,CAAC;EAEjD,IAAI,KAAK,GAAG,GAAG,CAAC,cAAc,CAAC;EAC/B,IAAI,IAAI,GAAG,WAAW,CAAC;;EAGvB,OAAO,IAAI,IAAI,GAAG,CAAC,OAAO,IAAI,KAAK,GAAG,GAAG,CAAC,QAAQ,EAAE;IAClD,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC5D,KAAK,CAAC,IAAI,CAAC;MACT,KAAK,EAAE,GAAG,CAAC,cAAc,GAAG,IAAI;MAChC,GAAG,EAAE,GAAG,CAAC,cAAc,GAAG,IAAI,GAAG,OAAO;MACxC,SAAS,EAAE,KAAK;MAChB,IAAI,EAAE,OAAO;KACd,CAAC,CAAC;IACH,IAAI,IAAI,OAAO,CAAC;IAChB,KAAK,EAAE,CAAC;GACT;EACD,OAAO,KAAK,CAAC;AACf,CAAC;SAUe,iBAAiB,CAC/B,MAAc,EACd,IAAyB;EAEzB,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;EACjC,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC;EACnC,IAAI,QAAQ,GAAG;IACb,KAAK,EAAE,IAAI,CAAC,KAAK;IACjB,GAAG,EAAE,IAAI,CAAC,GAAG;GACd,CAAC;;EAGF,IAAI,MAAM,GAAG,UAAU,EAAE;IACvB,OAAO,IAAI,CAAC;GACb;;EAGD,IAAI,IAAI,CAAC,iBAAiB,EAAE;;IAE1B,IAAI,QAAQ,GAAiC,WAAW,CAAC,IAAI,CAAC,CAAC;IAE/D,IAAI,CAAC,GAAW,QAAQ,CAAC,KAAK,CAAC;IAC/B,MAAM,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC;IAC1B,OAAO,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;MACtB,MAAM,QAAQ,GAAW,QAAQ,CAAC,SAAS,GAAG,CAAC,CAAC;MAChD,MAAM,IAAI,GAAW,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;;MAG5E,IAAI,QAAQ,CAAC,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE;QACvC,MAAM;OACP;;MAGD,IAAI,MAAM,GAAG,CAAC,GAAG,UAAU,CAAC;;MAG5B,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;QACrB,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;OACpC;;MAGD,QAAQ,CAAC,MAAM,CAAC,GAAG,QAAQ,GAAG;QAC5B,KAAK,EAAE,QAAQ,CAAC,GAAG;QACnB,GAAG,EAAE,QAAQ,CAAC,GAAG,GAAG,IAAI;QACxB,SAAS,EAAE,QAAQ;QACnB,IAAI,EAAE,IAAI;OACX,CAAC;;MAEF,QAAQ,CAAC,KAAK,EAAE,CAAC;MACjB,QAAQ,CAAC,GAAG,GAAG,MAAM,CAAC;KACvB;;GAGF;OAAM;;IAEL,IAAI,SAAS,GAAiC,YAAY,CAAC,IAAI,CAAC,CAAC;IAEjE,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC;IACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;MAC/B,MAAM,QAAQ,GAAW,SAAS,CAAC,SAAS,GAAG,CAAC,CAAC;MACjD,MAAM,IAAI,GAAW,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;;MAG5E,IAAI,QAAQ,GAAG,GAAG,GAAG,CAAC,CAAC;MACvB,QAAQ,GAAG,CAAC,QAAQ,GAAG,CAAC,GAAG,UAAU,GAAG,QAAQ,GAAG,QAAQ,IAAI,UAAU,CAAC;;MAG1E,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;QACvB,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;OACpC;;MAGD,QAAQ,CAAC,QAAQ,CAAC,GAAG,SAAS,GAAG;QAC/B,KAAK,EAAE,SAAS,CAAC,KAAK,GAAG,IAAI;QAC7B,GAAG,EAAE,SAAS,CAAC,KAAK;QACpB,SAAS,EAAE,QAAQ;QACnB,IAAI,EAAE,IAAI;OACX,CAAC;;MAEF,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAC;MAC1B,QAAQ,CAAC,GAAG,EAAE,CAAC;KAChB;GACF;EACD,MAAM,KAAK,GAAG;IACZ,KAAK,EAAE,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,GAAG,UAAU,GAAG,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,IAAI,UAAU;IACvF,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,GAAG,UAAU,GAAG,QAAQ,CAAC,GAAG,GAAG,QAAQ,CAAC,GAAG,IAAI,UAAU;GAChF,CAAC;EACF,uBACE,KAAK,EAAE,QAAQ,IACZ,KAAK,EACR;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,KAAa,EAAE,KAAoC,EAAE,WAAmB,CAAC;EAC5F,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE;IACzB,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC;GACrB;EACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;SAGgB,aAAa,CAC3B,GAAW,EACX,QAAgB,EAChB,KAA6B,EAC7B,IAA4B;EAE5B,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,EAAE;IACnB,OAAO,KAAK,CAAC;GACd;;;EAGD,OAAO,GAAG,IAAI,KAAK,CAAC,KAAK,IAAI,GAAG,IAAI,KAAK,CAAC,GAAG;IAC3C,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,KAAK,QAAQ,CAAC;AAC7C,CAAC;SAEe,4BAA4B,CAAC,GAAW,EAAE,WAAmB,EAAE,SAAiC,EAAE,QAAgC;;EAEhJ,IAAI,CAAC,SAAS,EAAE;IACd,OAAO,KAAK,CAAC;GACd;EACD,OAAO,WAAW,GAAG,GAAG,IAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,GAAG,CAAA,CAAA;AAC1C,CAAC;SAEe,YAAY,CAAC,CAAgB;EAC3C,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAC1B,CAAC;SAEe,WAAW,CAAC,CAAgB;EAC1C,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACxB,CAAC;AAED;;;;;;;;SAQgB,YAAY,CAC1B,OAAuC,EACvC,YAAoB,EACpB,IAAY,EACZ,cAAsB;EAEtB,MAAM,KAAK,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;EAC3B,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC;EAE3B,IAAI,GAAG,GAAG,cAAc,CAAC;EACzB,IAAI,CAAC,GAAG,CAAC,CAAC;EACV,IAAI,KAAK,GAAG,YAAY,CAAC;;EAGzB,IAAI,CAAC,KAAK,EAAE;IACV,OAAO,EAAE,CAAC;GACX;;EAEA,OAAO,CAAC,GAAG,KAAK,EAAE;IACjB,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;IAC1B,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC;IACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACjB,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IAC7B,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;;IAEf,KAAK,EAAE,CAAC;IACR,CAAC,EAAE,CAAC;;IAGJ,IAAI,KAAK,KAAK,KAAK,EAAE;MACnB,KAAK,GAAG,CAAC,CAAC;KACX;GACF;EACD,OAAO,KAAK,CAAC;AACf;;AC1UA;;;;;AAuBA,SAAS,YAAY;EACnB,OAAO;;IAEL,KAAK,EAAE,EAAE;;IAET,KAAK,EAAE,CAAC;IAER,GAAG,EAAE,CAAC;;IAGN,WAAW,EAAE,CAAC;;IAGd,SAAS,EAAE,CAAC;GACb,CAAC;AACJ,CAAC;MAEoB,aAAa;EAIhC,IAAI,cAAc;IAChB,OAAO,IAAI,CAAC,eAAe,CAAC;GAC7B;EACD,IAAY,cAAc,CAAC,KAAa;IACtC,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;GAC9B;EACD,YAAqB,IAAiC;IAAjC,SAAI,GAAJ,IAAI,CAA6B;;IAP9C,oBAAe,GAAG,CAAC,CAAC;IAQ1B,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,YAAY,EAAE,CAAC,CAAC;IACzC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;;IAE1D,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,EAAE,MAAM,IAAI,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;GAC3E;;;;;EAMD,qBAAqB,CAAC,QAAgB,EAAE,SAAgC;IACtE,IAAI,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;;IAEhD,IAAI,CAAC,WAAW,EAAE;MAChB,OAAO;KACR;IAED,MAAM,WAAW,GAAG,CAAC,CAAC;IACtB,MAAM,gBAAgB,GAAG,SAAS,CAAC,cAAc,GAAG,WAAW,CAAC;;IAEhE,MAAM,OAAO,GAAG,gBAAgB,GAAG,CAAC,CAAC;;IAErC,WAAW,IAAI,OAAO,CAAC;;IAGvB,IAAI,aAAa,GAAG,CAAC,CAAC;;IAEtB,IAAI,SAAS,CAAC,QAAQ,GAAG,WAAW,EAAE;;MAEpC,aAAa,GAAG,SAAS,CAAC,QAAQ,GAAG,WAAW,CAAC;KAClD;IAED,IAAI,GAAG,GAAG,QAAQ,CAAC;;IAEnB,IAAI,GAAG,GAAG,CAAC,EAAE;MACX,GAAG,GAAG,CAAC,CAAC;KACT;SAAM,IAAI,GAAG,GAAG,aAAa,EAAE;MAC9B,GAAG,GAAG,aAAa,CAAC;KACrB;;IAGD,IAAI,CAAC,cAAc,GAAG,GAAG,CAAC;;IAG1B,GAAG,IAAI,WAAW,GAAG,SAAS,CAAC,cAAc,CAAC;IAC9C,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,aAAa,GAAG,GAAG,GAAG,aAAa,CAAC;IAE9D,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;IACjC,MAAM,SAAS,GAA6C,YAAY,CAAC,QAAQ,CAAC,CAAC;IACnF,MAAM,QAAQ,GAA6C,WAAW,CAAC,QAAQ,CAAC,CAAC;IAGjF,IAAI,QAAQ,GAAoC,EAAE,CAAC;;;IAGnD,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,SAAS,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE;MAChE,QAAQ,mCACH,QAAQ,GACR,yBAAyB,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,SAAS,CAAC,CACjG,CAAC;MACF,IAAI,CAAC,WAAW,mBAAM,QAAQ,EAAG,CAAC;;KAEnC;SAAM,IAAI,4BAA4B,CAAC,GAAG,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE;;MAE9E,MAAM,OAAO,GAAG,eAAe,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,WAAW,GAAG,GAAG,GAAG,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;;MAGlI,IAAI,OAAO,CAAC,MAAM,EAAE;QAClB,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;QAC3C,MAAM,KAAK,GAAG;UACZ,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC;UAC9B,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;SAC3B,CAAC;QACF,qBAAqB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;QAC7C,QAAQ,iDACH,QAAQ,KACX,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,KACd,KAAK,CACT,CAAC;QACF,IAAI,CAAC,WAAW,mBAAM,QAAQ,EAAG,CAAC;OACnC;KACF;GACF;;;;;;;EAQD,yBAAyB,CAAC,KAAmC,EAAE,kBAA2B;IACxF,IAAI,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;IACzC,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC;;IAE3B,IAAI,CAAC,KAAK,EAAE;MACV,OAAO;KACR;IAED,IAAI,iBAAiB,GAAG,CAAC,CAAC;IAC1B,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;;IAGpC,IAAI,kBAAkB,EAAE;MACtB,KAAK,GAAG,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,kBAAkB,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;KAC7E;;;IAID,OAAO,CAAC,GAAG,KAAK,EAAE;MAChB,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;;MAE1B,IAAI,iBAAiB,EAAE;QACrB,IAAI,CAAC,KAAK,IAAI,iBAAiB,CAAC;QAChC,IAAI,CAAC,GAAG,IAAI,iBAAiB,CAAC;OAC/B;;MAED,MAAM,IAAI,GAAuB,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;;MAEvD,IAAI,IAAI,EAAE;QACR,MAAM,WAAW,GAAG,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACrC,iBAAiB,IAAI,WAAW,CAAC;QACjC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;;OAE9B;;MAGD,KAAK,EAAE,CAAC;MACR,CAAC,EAAE,CAAC;;MAEJ,IAAI,KAAK,KAAK,KAAK,EAAE;QACnB,KAAK,GAAG,CAAC,CAAC;OACX;KACF;IAED,IAAI,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;GACzC;;;;EAKD,gBAAgB,CAAC,IAAY;IAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACtC,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC;;IAE3B,IAAI,CAAC,KAAK,EAAE;MACV,OAAO;KACR;IAED,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE;MACnB,KAAK,EAAE,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC;KAC/E,CAAC,CAAC;GACJ;EAED,QAAQ;IACN,OAAO;MACL,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC;MAC9B,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC;MAC9B,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;KAC3B,CAAC;GACH;EAED,WAAW,CAAC,IAAqC;IAC/C,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;GAC5B;EAED,UAAU;IACR,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;GAC7B;;;AC1NH,MAAM,iBAAiB,GAAG,EAAE,CAAC;MAChB,sBAAsB,GAAG,CAAC,WAAmB,EAAE,eAAqC;EAC/F,OAAO,CAAA,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,IAAI,KAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,iBAAiB,CAAC;AAC1F;;ACCO,MAAM,eAAe,GAAiB,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC;;MCanE,gBAAgB;;;;;;;;;;;;;;;EAgB3B,MAAM;IACJ,MAAM,SAAS,GAAkB,EAAE,CAAC;IACpC,MAAM,QAAQ,GAAG,IAAI,aAAa,CAAC,aAAa,CAAC,CAAC;;IAGlD,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;;MAErD,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;;MAEnD,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,GAAG,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,KAAK,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;MACzD,gBAAgB,EAAE,CAAC,CAAc,KAAK,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,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,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,QACE,EAAC,IAAI,IAAC,KAAK,EAAG,EAAE,CAAC,eAAe,GAAG,IAAI,EAAE,EAAG,GAAG,EAAE,eAAe,IAC9D,8CAA4B,cAAc,GACxC,qCAAmB,cAAc,EAAI,EACpC,SAAS,CACa,CACpB,EACP;GACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","names":[],"sources":["./src/store/viewPort/viewport.helpers.ts","./src/store/viewPort/viewport.store.ts","./src/utils/row-header-utils.ts","./src/components/rowHeaders/row-header-render.tsx","./src/components/rowHeaders/revogr-row-headers.tsx"],"sourcesContent":["import { getItemByPosition } from '../dimension/dimension.helpers';\nimport { RevoGrid } from '../../interfaces';\n\nexport type DimensionDataViewport = Pick<\n RevoGrid.DimensionSettingsState,\n 'indexes' | 'positionIndexes' | 'positionIndexToItem' | 'sizes' | 'originItemSize' | 'realSize'\n>;\n\ntype ItemsToUpdate = Pick<RevoGrid.ViewportStateItems, 'items' | 'start' | 'end'>;\n/**\n * Update items based on new scroll position\n * If viewport wasn't changed fully simple recombination of positions\n * Otherwise rebuild viewport items\n */\nexport function getUpdatedItemsByPosition<T extends ItemsToUpdate>(\n pos: number, // coordinate\n items: T,\n realCount: number,\n virtualSize: number,\n dimension: DimensionDataViewport\n): ItemsToUpdate {\n const activeItem: RevoGrid.PositionItem = getItemByPosition(dimension, pos);\n const firstItem: RevoGrid.PositionItem = getFirstItem(items);\n let toUpdate: ItemsToUpdate;\n // do simple position recombination if items already present in viewport\n if (firstItem) {\n let changedOffsetStart = activeItem.itemIndex - (firstItem.itemIndex || 0);\n // if item changed\n if (changedOffsetStart) {\n // simple recombination\n toUpdate = recombineByOffset(Math.abs(changedOffsetStart), {\n positiveDirection: changedOffsetStart > -1,\n ...dimension,\n ...items,\n });\n }\n }\n\n const maxSizeVirtualSize = getMaxVirtualSize(virtualSize, dimension.realSize, activeItem);\n // if partial recombination add items if revo-viewport has some space left\n if (toUpdate) {\n const extra = addMissingItems(activeItem, realCount, maxSizeVirtualSize, toUpdate, dimension);\n if (extra.length) {\n updateMissingAndRange(toUpdate.items, extra, toUpdate);\n }\n }\n\n // new collection if no items after replacement full replacement\n if (!toUpdate) {\n const items = getItems({\n firstItemStart: activeItem.start,\n firstItemIndex: activeItem.itemIndex,\n origSize: dimension.originItemSize,\n maxSize: maxSizeVirtualSize,\n maxCount: realCount,\n sizes: dimension.sizes,\n });\n\n // range now comes from 0 to length - 1\n toUpdate = {\n items,\n start: 0,\n end: items.length - 1,\n };\n }\n return toUpdate;\n}\n\n// virtual size can differ based on scroll position if some big items are present\n// scroll can be in the middle of item and virtual size will be larger\n// so we need to exclude this part from virtual size hence it's already passed\nfunction getMaxVirtualSize(virtualSize: number, realSize: number, activeItem: RevoGrid.PositionItem) {\n return Math.min(virtualSize + (activeItem.end - activeItem.start), realSize)\n}\n\nexport function updateMissingAndRange(\n items: RevoGrid.VirtualPositionItem[],\n missing: RevoGrid.VirtualPositionItem[],\n range: RevoGrid.Range\n) {\n items.splice(range.end + 1, 0, ...missing);\n // update range if start larger after recombination\n if (range.start >= range.end && !(range.start === range.end && range.start === 0)) {\n range.start += missing.length;\n }\n range.end += missing.length;\n}\n\n/**\n * If partial replacement\n * this function adds items if viewport has some space left\n */\nexport function addMissingItems<T extends ItemsToUpdate>(\n firstItem: RevoGrid.PositionItem,\n realCount: number,\n virtualSize: number,\n existingCollection: T,\n dimension: Pick<RevoGrid.DimensionSettingsState, 'sizes' | 'originItemSize'>,\n): RevoGrid.VirtualPositionItem[] {\n const lastItem: RevoGrid.VirtualPositionItem = getLastItem(existingCollection);\n const items = getItems({\n sizes: dimension.sizes,\n firstItemStart: lastItem.end,\n firstItemIndex: lastItem.itemIndex + 1,\n origSize: dimension.originItemSize,\n maxSize: virtualSize - (lastItem.end - firstItem.start),\n maxCount: realCount,\n });\n return items;\n}\n\n/**\n * Get wiewport items parameters\n * caching position and calculating items count in viewport\n */\nexport function getItems(\n opt: {\n firstItemIndex: number;\n firstItemStart: number;\n origSize: number;\n maxSize: number; // virtual size\n maxCount: number; // real item count, where the last item\n sizes?: RevoGrid.ViewSettingSizeProp;\n },\n currentSize = 0,\n) {\n const items: RevoGrid.VirtualPositionItem[] = [];\n\n let index = opt.firstItemIndex;\n let size = currentSize;\n\n // max size or max count\n while (size <= opt.maxSize && index < opt.maxCount) {\n const newSize = getItemSize(index, opt.sizes, opt.origSize);\n items.push({\n start: opt.firstItemStart + size,\n end: opt.firstItemStart + size + newSize,\n itemIndex: index,\n size: newSize,\n });\n size += newSize;\n index++;\n }\n return items;\n}\n\n/**\n * Do batch items recombination\n * If items not overlapped with existing viewport returns null\n */\ntype RecombindDimensionData = Pick<RevoGrid.DimensionSettingsState, 'sizes' | 'realSize' | 'originItemSize'>;\ntype RecombineOffsetData = {\n positiveDirection: boolean;\n} & ItemsToUpdate & RecombindDimensionData;\nexport function recombineByOffset(\n offset: number,\n data: RecombineOffsetData\n): ItemsToUpdate | null {\n const newItems = [...data.items];\n const itemsCount = newItems.length;\n let newRange = {\n start: data.start,\n end: data.end,\n };\n\n // if offset out of revo-viewport, makes sense whole redraw\n if (offset > itemsCount) {\n return null;\n }\n\n // is direction of scroll positive\n if (data.positiveDirection) {\n // push item to the end\n let lastItem: RevoGrid.VirtualPositionItem = getLastItem(data);\n\n let i: number = newRange.start;\n const length = i + offset;\n for (; i < length; i++) {\n const newIndex: number = lastItem.itemIndex + 1;\n const size: number = getItemSize(newIndex, data.sizes, data.originItemSize);\n\n // if item overlapped limit break a loop\n if (lastItem.end + size > data.realSize) {\n break;\n }\n\n // new item index to recombine\n let newEnd = i % itemsCount;\n\n // item should always present, we do not create new item, we recombine them\n if (!newItems[newEnd]) {\n throw new Error('incorrect index');\n }\n\n // do recombination\n newItems[newEnd] = lastItem = {\n start: lastItem.end,\n end: lastItem.end + size,\n itemIndex: newIndex,\n size: size,\n };\n // update range\n newRange.start++;\n newRange.end = newEnd;\n }\n\n // direction is negative\n } else {\n // push item to the start\n let firstItem: RevoGrid.VirtualPositionItem = getFirstItem(data);\n\n const end = newRange.end;\n for (let i = 0; i < offset; i++) {\n const newIndex: number = firstItem.itemIndex - 1;\n const size: number = getItemSize(newIndex, data.sizes, data.originItemSize);\n\n // new item index to recombine\n let newStart = end - i;\n newStart = (newStart < 0 ? itemsCount + newStart : newStart) % itemsCount;\n\n // item should always present, we do not create new item, we recombine them\n if (!newItems[newStart]) {\n throw new Error('incorrect index');\n }\n\n // do recombination\n newItems[newStart] = firstItem = {\n start: firstItem.start - size,\n end: firstItem.start,\n itemIndex: newIndex,\n size: size,\n };\n // update range\n newRange.start = newStart;\n newRange.end--;\n }\n }\n const range = {\n start: (newRange.start < 0 ? itemsCount + newRange.start : newRange.start) % itemsCount,\n end: (newRange.end < 0 ? itemsCount + newRange.end : newRange.end) % itemsCount,\n };\n return {\n items: newItems,\n ...range,\n };\n}\n\nfunction getItemSize(index: number, sizes?: RevoGrid.ViewSettingSizeProp, origSize: number = 0): number {\n if (sizes && sizes[index]) {\n return sizes[index];\n }\n return origSize;\n}\n\n/**\n * Verify if position is in range of the PositionItem, start and end are included\n */\nexport function isActiveRange(\n pos: number,\n realSize: number,\n first?: RevoGrid.PositionItem,\n last?: RevoGrid.PositionItem\n): boolean {\n if (!first || !last) {\n return false;\n }\n // if position is in range of first item\n // or position is after first item and last item is the last item in real size\n return pos >= first.start && pos <= first.end ||\n pos > first.end && last.end === realSize;\n}\n\nexport function isActiveRangeOutsideLastItem(pos: number, virtualSize: number, firstItem?: RevoGrid.PositionItem, lastItem?: RevoGrid.PositionItem) {\n // if no first item, means no items in viewport\n if (!firstItem) {\n return false;\n }\n return virtualSize + pos > lastItem?.end\n}\n\nexport function getFirstItem(s: ItemsToUpdate): RevoGrid.VirtualPositionItem | undefined {\n return s.items[s.start];\n}\n\nexport function getLastItem(s: ItemsToUpdate): RevoGrid.VirtualPositionItem {\n return s.items[s.end];\n}\n\n/**\n * Set items sizes from start index to end\n * @param vpItems \n * @param start \n * @param size \n * @param lastCoordinate \n * @returns \n */\nexport function setItemSizes(\n vpItems: RevoGrid.VirtualPositionItem[],\n initialIndex: number,\n size: number,\n lastCoordinate: number\n) {\n const items = [...vpItems];\n const count = items.length;\n\n let pos = lastCoordinate;\n let i = 0;\n let start = initialIndex;\n\n // viewport not inited\n if (!count) {\n return [];\n }\n // loop through array from initial item after recombination\n while (i < count) {\n const item = items[start];\n item.start = pos;\n item.size = size;\n item.end = item.start + size;\n pos = item.end;\n // loop by start index\n start++;\n i++;\n\n // if start index out of array, reset it\n if (start === count) {\n start = 0;\n }\n }\n return items;\n}\n","/**\n * Store is responsible for visible\n * Viewport information for each dimension\n * Redraw items during scrolling\n */\n\nimport { createStore } from '@stencil/store';\n\nimport {\n addMissingItems,\n DimensionDataViewport,\n getFirstItem,\n getLastItem,\n getUpdatedItemsByPosition,\n isActiveRange,\n setItemSizes,\n updateMissingAndRange,\n isActiveRangeOutsideLastItem,\n} from './viewport.helpers';\n\nimport { setStore } from '../../utils/store.utils';\nimport { Observable, RevoGrid } from '../../interfaces';\n\nfunction initialState(): RevoGrid.ViewportState {\n return {\n // virtual item information per rendered item\n items: [],\n // virtual dom item order to render\n start: 0,\n\n end: 0,\n\n // size of viewport in px\n virtualSize: 0,\n\n // total number of items\n realCount: 0,\n };\n}\n\nexport default class ViewportStore {\n readonly store: Observable<RevoGrid.ViewportState>;\n // last coordinate for store position restore\n private lastKnownScroll = 0;\n get lastCoordinate() {\n return this.lastKnownScroll;\n }\n private set lastCoordinate(value: number) {\n this.lastKnownScroll = value;\n }\n constructor(readonly type: RevoGrid.MultiDimensionType) {\n this.store = createStore(initialState());\n this.store.onChange('realCount', () => this.clearItems());\n // drop items on virtual size change, require a new item set\n this.store.onChange('virtualSize', () => this.setViewport({ items: [] }));\n }\n\n /**\n * Render viewport based on coordinate\n * It's the main method for draw\n */\n setViewPortCoordinate(position: number, dimension: DimensionDataViewport) {\n let virtualSize = this.store.get('virtualSize');\n // no visible data to calculate\n if (!virtualSize) {\n return;\n }\n\n const frameOffset = 1;\n const singleOffsetInPx = dimension.originItemSize * frameOffset;\n // add offset to virtual size from both sides\n const outsize = singleOffsetInPx * 2;\n // math virtual size is based on visible area + 2 items outside of visible area\n virtualSize += outsize;\n\n // expected no scroll if real size less than virtual size, position is 0\n let maxCoordinate = 0;\n // if there is nodes outside of viewport, max coordinate has to be adjusted\n if (dimension.realSize > virtualSize) {\n // max coordinate is real size minus virtual/rendered space\n maxCoordinate = dimension.realSize - virtualSize;\n }\n\n let pos = position;\n // limit position to max and min coordinates\n if (pos < 0) {\n pos = 0;\n } else if (pos > maxCoordinate) {\n pos = maxCoordinate;\n }\n\n // store last coordinate for further restore on redraw\n this.lastCoordinate = pos;\n\n // actual position is less than first item start based on offset\n pos -= frameOffset * dimension.originItemSize;\n pos = pos < 0 ? 0 : pos < maxCoordinate ? pos : maxCoordinate;\n\n const allItems = this.getItems();\n const firstItem: RevoGrid.VirtualPositionItem | undefined = getFirstItem(allItems);\n const lastItem: RevoGrid.VirtualPositionItem | undefined = getLastItem(allItems);\n\n\n let toUpdate: Partial<RevoGrid.ViewportState> = {};\n // left position changed\n // verify if new position is in range of previously rendered first item\n if (!isActiveRange(pos, dimension.realSize, firstItem, lastItem)) {\n toUpdate = {\n ...toUpdate,\n ...getUpdatedItemsByPosition(pos, allItems, this.store.get('realCount'), virtualSize, dimension),\n };\n this.setViewport({ ...toUpdate });\n // right position changed\n } else if (isActiveRangeOutsideLastItem(pos, virtualSize, firstItem, lastItem)) {\n // check is any item missing for full fill content\n const missing = addMissingItems(firstItem, this.store.get('realCount'), virtualSize + pos - firstItem.start, allItems, dimension);\n\n // update missing items\n if (missing.length) {\n const items = [...this.store.get('items')];\n const range = {\n start: this.store.get('start'),\n end: this.store.get('end'),\n };\n updateMissingAndRange(items, missing, range);\n toUpdate = {\n ...toUpdate,\n items: [...items],\n ...range,\n };\n this.setViewport({ ...toUpdate });\n }\n }\n }\n\n /**\n * Update viewport sizes for existing items\n * This method is generating new item positions based on custom sizes and original sizes\n * @param sizes - custom sizes for each item\n * @param dropToOriginalSize - drop to original size if requested\n */\n setViewPortDimensionSizes(sizes: RevoGrid.ViewSettingSizeProp, dropToOriginalSize?: number) {\n let items = [...this.store.get('items')];\n const count = items.length;\n // viewport not inited\n if (!count) {\n return;\n }\n\n let changedCoordinate = 0;\n let i = 0;\n let start = this.store.get('start');\n\n // drop to original size if requested\n if (dropToOriginalSize) {\n items = setItemSizes(items, start, dropToOriginalSize, this.lastCoordinate);\n }\n\n // loop through array from initial item after recombination\n // if size change present, change position for all items after\n while (i < count) {\n const item = items[start];\n // change pos if size change present before\n if (changedCoordinate) {\n item.start += changedCoordinate;\n item.end += changedCoordinate;\n }\n // check if size change present\n const size: number | undefined = sizes[item.itemIndex];\n // size found\n if (size) {\n const changedSize = size - item.size;\n changedCoordinate += changedSize;\n item.size = size;\n item.end = item.start + size;\n // size lost\n }\n\n // loop by start index\n start++;\n i++;\n // if start index out of array, reset it\n if (start === count) {\n start = 0;\n }\n }\n\n this.setViewport({ items: [...items] });\n }\n\n /**\n * Set sizes for existing items\n */\n setOriginalSizes(size: number) {\n const items = this.store.get('items');\n const count = items.length;\n // viewport not inited\n if (!count) {\n return;\n }\n\n setStore(this.store, {\n items: setItemSizes(items, this.store.get('start'), size, this.lastCoordinate),\n });\n }\n\n getItems(): Pick<RevoGrid.ViewportStateItems, 'items' | 'start' | 'end'> {\n return {\n items: this.store.get('items'),\n start: this.store.get('start'),\n end: this.store.get('end'),\n };\n }\n\n setViewport(data: Partial<RevoGrid.ViewportState>) {\n setStore(this.store, data);\n }\n\n clearItems() {\n this.store.set('items', []);\n }\n}\n","import { RevoGrid } from '../interfaces';\n\nconst LETTER_BLOCK_SIZE = 10;\nexport const calculateRowHeaderSize = (itemsLength: number, rowHeaderColumn?: RevoGrid.RowHeaders) => {\n return rowHeaderColumn?.size || (itemsLength.toString().length + 1) * LETTER_BLOCK_SIZE;\n};\n","import { VNode } from '@stencil/core';\nimport { RevoGrid } from '../../interfaces';\n\ntype HeaderRender = {\n (start: number): (h: RevoGrid.HyperFunc<VNode>, e: { rowIndex: number }) => number;\n};\nexport const RowHeaderRender: HeaderRender = s => (__, { rowIndex: i }) => s + i;\n","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"],"version":3}
|
|
1
|
+
{"file":"revogr-row-headers2.js","mappings":"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","names":[],"sources":["./src/store/viewPort/viewport.helpers.ts","./src/store/viewPort/viewport.store.ts","./src/utils/row-header-utils.ts","./src/components/rowHeaders/row-header-render.tsx","./src/components/rowHeaders/revogr-row-headers.tsx"],"sourcesContent":["import { getItemByPosition } from '../dimension/dimension.helpers';\nimport { RevoGrid } from '../../interfaces';\n\nexport type DimensionDataViewport = Pick<\n RevoGrid.DimensionSettingsState,\n 'indexes' | 'positionIndexes' | 'positionIndexToItem' | 'sizes' | 'originItemSize' | 'realSize'\n>;\n\ntype ItemsToUpdate = Pick<RevoGrid.ViewportStateItems, 'items' | 'start' | 'end'>;\n/**\n * Update items based on new scroll position\n * If viewport wasn't changed fully simple recombination of positions\n * Otherwise rebuild viewport items\n */\nexport function getUpdatedItemsByPosition<T extends ItemsToUpdate>(\n pos: number, // coordinate\n items: T,\n realCount: number,\n virtualSize: number,\n dimension: DimensionDataViewport\n): ItemsToUpdate {\n const activeItem: RevoGrid.PositionItem = getItemByPosition(dimension, pos);\n const firstItem: RevoGrid.PositionItem = getFirstItem(items);\n let toUpdate: ItemsToUpdate;\n // do simple position recombination if items already present in viewport\n if (firstItem) {\n let changedOffsetStart = activeItem.itemIndex - (firstItem.itemIndex || 0);\n // if item changed\n if (changedOffsetStart) {\n // simple recombination\n toUpdate = recombineByOffset(Math.abs(changedOffsetStart), {\n positiveDirection: changedOffsetStart > -1,\n ...dimension,\n ...items,\n });\n }\n }\n\n const maxSizeVirtualSize = getMaxVirtualSize(virtualSize, dimension.realSize, activeItem);\n // if partial recombination add items if revo-viewport has some space left\n if (toUpdate) {\n const extra = addMissingItems(activeItem, realCount, maxSizeVirtualSize, toUpdate, dimension);\n if (extra.length) {\n updateMissingAndRange(toUpdate.items, extra, toUpdate);\n }\n }\n\n // new collection if no items after replacement full replacement\n if (!toUpdate) {\n const items = getItems({\n firstItemStart: activeItem.start,\n firstItemIndex: activeItem.itemIndex,\n origSize: dimension.originItemSize,\n maxSize: maxSizeVirtualSize,\n maxCount: realCount,\n sizes: dimension.sizes,\n });\n\n // range now comes from 0 to length - 1\n toUpdate = {\n items,\n start: 0,\n end: items.length - 1,\n };\n }\n return toUpdate;\n}\n\n// virtual size can differ based on scroll position if some big items are present\n// scroll can be in the middle of item and virtual size will be larger\n// so we need to exclude this part from virtual size hence it's already passed\nfunction getMaxVirtualSize(virtualSize: number, realSize: number, activeItem: RevoGrid.PositionItem) {\n return Math.min(virtualSize + (activeItem.end - activeItem.start), realSize)\n}\n\nexport function updateMissingAndRange(\n items: RevoGrid.VirtualPositionItem[],\n missing: RevoGrid.VirtualPositionItem[],\n range: RevoGrid.Range\n) {\n items.splice(range.end + 1, 0, ...missing);\n // update range if start larger after recombination\n if (range.start >= range.end && !(range.start === range.end && range.start === 0)) {\n range.start += missing.length;\n }\n range.end += missing.length;\n}\n\n/**\n * If partial replacement\n * this function adds items if viewport has some space left\n */\nexport function addMissingItems<T extends ItemsToUpdate>(\n firstItem: RevoGrid.PositionItem,\n realCount: number,\n virtualSize: number,\n existingCollection: T,\n dimension: Pick<RevoGrid.DimensionSettingsState, 'sizes' | 'originItemSize'>,\n): RevoGrid.VirtualPositionItem[] {\n const lastItem: RevoGrid.VirtualPositionItem = getLastItem(existingCollection);\n const items = getItems({\n sizes: dimension.sizes,\n firstItemStart: lastItem.end,\n firstItemIndex: lastItem.itemIndex + 1,\n origSize: dimension.originItemSize,\n maxSize: virtualSize - (lastItem.end - firstItem.start),\n maxCount: realCount,\n });\n return items;\n}\n\n/**\n * Get wiewport items parameters\n * caching position and calculating items count in viewport\n */\nexport function getItems(\n opt: {\n firstItemIndex: number;\n firstItemStart: number;\n origSize: number;\n maxSize: number; // virtual size\n maxCount: number; // real item count, where the last item\n sizes?: RevoGrid.ViewSettingSizeProp;\n },\n currentSize = 0,\n) {\n const items: RevoGrid.VirtualPositionItem[] = [];\n\n let index = opt.firstItemIndex;\n let size = currentSize;\n\n // max size or max count\n while (size <= opt.maxSize && index < opt.maxCount) {\n const newSize = getItemSize(index, opt.sizes, opt.origSize);\n items.push({\n start: opt.firstItemStart + size,\n end: opt.firstItemStart + size + newSize,\n itemIndex: index,\n size: newSize,\n });\n size += newSize;\n index++;\n }\n return items;\n}\n\n/**\n * Do batch items recombination\n * If items not overlapped with existing viewport returns null\n */\ntype RecombindDimensionData = Pick<RevoGrid.DimensionSettingsState, 'sizes' | 'realSize' | 'originItemSize'>;\ntype RecombineOffsetData = {\n positiveDirection: boolean;\n} & ItemsToUpdate & RecombindDimensionData;\nexport function recombineByOffset(\n offset: number,\n data: RecombineOffsetData\n): ItemsToUpdate | null {\n const newItems = [...data.items];\n const itemsCount = newItems.length;\n let newRange = {\n start: data.start,\n end: data.end,\n };\n\n // if offset out of revo-viewport, makes sense whole redraw\n if (offset > itemsCount) {\n return null;\n }\n\n // is direction of scroll positive\n if (data.positiveDirection) {\n // push item to the end\n let lastItem: RevoGrid.VirtualPositionItem = getLastItem(data);\n\n let i: number = newRange.start;\n const length = i + offset;\n for (; i < length; i++) {\n const newIndex: number = lastItem.itemIndex + 1;\n const size: number = getItemSize(newIndex, data.sizes, data.originItemSize);\n\n // if item overlapped limit break a loop\n if (lastItem.end + size > data.realSize) {\n break;\n }\n\n // new item index to recombine\n let newEnd = i % itemsCount;\n\n // item should always present, we do not create new item, we recombine them\n if (!newItems[newEnd]) {\n throw new Error('incorrect index');\n }\n\n // do recombination\n newItems[newEnd] = lastItem = {\n start: lastItem.end,\n end: lastItem.end + size,\n itemIndex: newIndex,\n size: size,\n };\n // update range\n newRange.start++;\n newRange.end = newEnd;\n }\n\n // direction is negative\n } else {\n // push item to the start\n let firstItem: RevoGrid.VirtualPositionItem = getFirstItem(data);\n\n const end = newRange.end;\n for (let i = 0; i < offset; i++) {\n const newIndex: number = firstItem.itemIndex - 1;\n const size: number = getItemSize(newIndex, data.sizes, data.originItemSize);\n\n // new item index to recombine\n let newStart = end - i;\n newStart = (newStart < 0 ? itemsCount + newStart : newStart) % itemsCount;\n\n // item should always present, we do not create new item, we recombine them\n if (!newItems[newStart]) {\n throw new Error('incorrect index');\n }\n\n // do recombination\n newItems[newStart] = firstItem = {\n start: firstItem.start - size,\n end: firstItem.start,\n itemIndex: newIndex,\n size: size,\n };\n // update range\n newRange.start = newStart;\n newRange.end--;\n }\n }\n const range = {\n start: (newRange.start < 0 ? itemsCount + newRange.start : newRange.start) % itemsCount,\n end: (newRange.end < 0 ? itemsCount + newRange.end : newRange.end) % itemsCount,\n };\n return {\n items: newItems,\n ...range,\n };\n}\n\nfunction getItemSize(index: number, sizes?: RevoGrid.ViewSettingSizeProp, origSize: number = 0): number {\n if (sizes && sizes[index]) {\n return sizes[index];\n }\n return origSize;\n}\n\n/**\n * Verify if position is in range of the PositionItem, start and end are included\n */\nexport function isActiveRange(\n pos: number,\n realSize: number,\n first?: RevoGrid.PositionItem,\n last?: RevoGrid.PositionItem\n): boolean {\n if (!first || !last) {\n return false;\n }\n // if position is in range of first item\n // or position is after first item and last item is the last item in real size\n return pos >= first.start && pos <= first.end ||\n pos > first.end && last.end === realSize;\n}\n\nexport function isActiveRangeOutsideLastItem(pos: number, virtualSize: number, firstItem?: RevoGrid.PositionItem, lastItem?: RevoGrid.PositionItem) {\n // if no first item, means no items in viewport\n if (!firstItem) {\n return false;\n }\n return virtualSize + pos > lastItem?.end\n}\n\nexport function getFirstItem(s: ItemsToUpdate): RevoGrid.VirtualPositionItem | undefined {\n return s.items[s.start];\n}\n\nexport function getLastItem(s: ItemsToUpdate): RevoGrid.VirtualPositionItem {\n return s.items[s.end];\n}\n\n/**\n * Set items sizes from start index to end\n * @param vpItems \n * @param start \n * @param size \n * @param lastCoordinate \n * @returns \n */\nexport function setItemSizes(\n vpItems: RevoGrid.VirtualPositionItem[],\n initialIndex: number,\n size: number,\n lastCoordinate: number\n) {\n const items = [...vpItems];\n const count = items.length;\n\n let pos = lastCoordinate;\n let i = 0;\n let start = initialIndex;\n\n // viewport not inited\n if (!count) {\n return [];\n }\n // loop through array from initial item after recombination\n while (i < count) {\n const item = items[start];\n item.start = pos;\n item.size = size;\n item.end = item.start + size;\n pos = item.end;\n // loop by start index\n start++;\n i++;\n\n // if start index out of array, reset it\n if (start === count) {\n start = 0;\n }\n }\n return items;\n}\n","/**\n * Store is responsible for visible\n * Viewport information for each dimension\n * Redraw items during scrolling\n */\n\nimport { createStore } from '@stencil/store';\n\nimport {\n addMissingItems,\n DimensionDataViewport,\n getFirstItem,\n getLastItem,\n getUpdatedItemsByPosition,\n isActiveRange,\n setItemSizes,\n updateMissingAndRange,\n isActiveRangeOutsideLastItem,\n} from './viewport.helpers';\n\nimport { setStore } from '../../utils/store.utils';\nimport { Observable, RevoGrid } from '../../interfaces';\n\nfunction initialState(): RevoGrid.ViewportState {\n return {\n // virtual item information per rendered item\n items: [],\n // virtual dom item order to render\n start: 0,\n\n end: 0,\n\n // size of viewport in px\n virtualSize: 0,\n\n // total number of items\n realCount: 0,\n };\n}\n\nexport default class ViewportStore {\n readonly store: Observable<RevoGrid.ViewportState>;\n // last coordinate for store position restore\n private lastKnownScroll = 0;\n get lastCoordinate() {\n return this.lastKnownScroll;\n }\n private set lastCoordinate(value: number) {\n this.lastKnownScroll = value;\n }\n constructor(readonly type: RevoGrid.MultiDimensionType) {\n this.store = createStore(initialState());\n this.store.onChange('realCount', () => this.clearItems());\n // drop items on virtual size change, require a new item set\n this.store.onChange('virtualSize', () => this.setViewport({ items: [] }));\n }\n\n /**\n * Render viewport based on coordinate\n * It's the main method for draw\n */\n setViewPortCoordinate(position: number, dimension: DimensionDataViewport) {\n let virtualSize = this.store.get('virtualSize');\n // no visible data to calculate\n if (!virtualSize) {\n return;\n }\n\n const frameOffset = 1;\n const singleOffsetInPx = dimension.originItemSize * frameOffset;\n // add offset to virtual size from both sides\n const outsize = singleOffsetInPx * 2;\n // math virtual size is based on visible area + 2 items outside of visible area\n virtualSize += outsize;\n\n // expected no scroll if real size less than virtual size, position is 0\n let maxCoordinate = 0;\n // if there is nodes outside of viewport, max coordinate has to be adjusted\n if (dimension.realSize > virtualSize) {\n // max coordinate is real size minus virtual/rendered space\n maxCoordinate = dimension.realSize - virtualSize;\n }\n\n let pos = position;\n // limit position to max and min coordinates\n if (pos < 0) {\n pos = 0;\n } else if (pos > maxCoordinate) {\n pos = maxCoordinate;\n }\n\n // store last coordinate for further restore on redraw\n this.lastCoordinate = pos;\n\n // actual position is less than first item start based on offset\n pos -= frameOffset * dimension.originItemSize;\n pos = pos < 0 ? 0 : pos < maxCoordinate ? pos : maxCoordinate;\n\n const allItems = this.getItems();\n const firstItem: RevoGrid.VirtualPositionItem | undefined = getFirstItem(allItems);\n const lastItem: RevoGrid.VirtualPositionItem | undefined = getLastItem(allItems);\n\n\n let toUpdate: Partial<RevoGrid.ViewportState> = {};\n // left position changed\n // verify if new position is in range of previously rendered first item\n if (!isActiveRange(pos, dimension.realSize, firstItem, lastItem)) {\n toUpdate = {\n ...toUpdate,\n ...getUpdatedItemsByPosition(pos, allItems, this.store.get('realCount'), virtualSize, dimension),\n };\n this.setViewport({ ...toUpdate });\n // right position changed\n } else if (isActiveRangeOutsideLastItem(pos, virtualSize, firstItem, lastItem)) {\n // check is any item missing for full fill content\n const missing = addMissingItems(firstItem, this.store.get('realCount'), virtualSize + pos - firstItem.start, allItems, dimension);\n\n // update missing items\n if (missing.length) {\n const items = [...this.store.get('items')];\n const range = {\n start: this.store.get('start'),\n end: this.store.get('end'),\n };\n updateMissingAndRange(items, missing, range);\n toUpdate = {\n ...toUpdate,\n items: [...items],\n ...range,\n };\n this.setViewport({ ...toUpdate });\n }\n }\n }\n\n /**\n * Update viewport sizes for existing items\n * This method is generating new item positions based on custom sizes and original sizes\n * @param sizes - custom sizes for each item\n * @param dropToOriginalSize - drop to original size if requested\n */\n setViewPortDimensionSizes(sizes: RevoGrid.ViewSettingSizeProp, dropToOriginalSize?: number) {\n let items = [...this.store.get('items')];\n const count = items.length;\n // viewport not inited\n if (!count) {\n return;\n }\n\n let changedCoordinate = 0;\n let i = 0;\n let start = this.store.get('start');\n\n // drop to original size if requested\n if (dropToOriginalSize) {\n const allItems = this.getItems();\n const firstItem: RevoGrid.VirtualPositionItem | undefined = getFirstItem(allItems);\n items = setItemSizes(items, start, dropToOriginalSize, firstItem.start);\n }\n\n // loop through array from initial item after recombination\n // if size change present, change position for all items after\n while (i < count) {\n const item = items[start];\n // change pos if size change present before\n if (changedCoordinate) {\n item.start += changedCoordinate;\n item.end += changedCoordinate;\n }\n // check if size change present\n const size: number | undefined = sizes[item.itemIndex];\n // size found\n if (size) {\n const changedSize = size - item.size;\n changedCoordinate += changedSize;\n item.size = size;\n item.end = item.start + size;\n // size lost\n }\n\n // loop by start index\n start++;\n i++;\n // if start index out of array, reset it\n if (start === count) {\n start = 0;\n }\n }\n\n this.setViewport({ items: [...items] });\n }\n\n /**\n * Set sizes for existing items\n */\n setOriginalSizes(size: number) {\n const items = this.store.get('items');\n const count = items.length;\n // viewport not inited\n if (!count) {\n return;\n }\n\n setStore(this.store, {\n items: setItemSizes(items, this.store.get('start'), size, this.lastCoordinate),\n });\n }\n\n getItems(): Pick<RevoGrid.ViewportStateItems, 'items' | 'start' | 'end'> {\n return {\n items: this.store.get('items'),\n start: this.store.get('start'),\n end: this.store.get('end'),\n };\n }\n\n setViewport(data: Partial<RevoGrid.ViewportState>) {\n setStore(this.store, data);\n }\n\n clearItems() {\n this.store.set('items', []);\n }\n}\n","import { RevoGrid } from '../interfaces';\n\nconst LETTER_BLOCK_SIZE = 10;\nexport const calculateRowHeaderSize = (itemsLength: number, rowHeaderColumn?: RevoGrid.RowHeaders) => {\n return rowHeaderColumn?.size || (itemsLength.toString().length + 1) * LETTER_BLOCK_SIZE;\n};\n","import { VNode } from '@stencil/core';\nimport { RevoGrid } from '../../interfaces';\n\ntype HeaderRender = {\n (start: number): (h: RevoGrid.HyperFunc<VNode>, e: { rowIndex: number }) => number;\n};\nexport const RowHeaderRender: HeaderRender = s => (__, { rowIndex: i }) => s + i;\n","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"],"version":3}
|
|
@@ -360,7 +360,9 @@ class ViewportStore {
|
|
|
360
360
|
let start = this.store.get('start');
|
|
361
361
|
// drop to original size if requested
|
|
362
362
|
if (dropToOriginalSize) {
|
|
363
|
-
|
|
363
|
+
const allItems = this.getItems();
|
|
364
|
+
const firstItem = getFirstItem(allItems);
|
|
365
|
+
items = setItemSizes(items, start, dropToOriginalSize, firstItem.start);
|
|
364
366
|
}
|
|
365
367
|
// loop through array from initial item after recombination
|
|
366
368
|
// if size change present, change position for all items after
|
|
@@ -456,4 +458,4 @@ exports.calculateRowHeaderSize = calculateRowHeaderSize;
|
|
|
456
458
|
exports.getFromEvent = getFromEvent;
|
|
457
459
|
exports.verifyTouchTarget = verifyTouchTarget;
|
|
458
460
|
|
|
459
|
-
//# sourceMappingURL=events-
|
|
461
|
+
//# sourceMappingURL=events-05e75632.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"file":"events-05e75632.js","mappings":"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","names":["getItemByPosition","createStore","setStore"],"sources":["./src/store/viewPort/viewport.helpers.ts","./src/store/viewPort/viewport.store.ts","./src/utils/row-header-utils.ts","./src/utils/events.ts"],"sourcesContent":["import { getItemByPosition } from '../dimension/dimension.helpers';\nimport { RevoGrid } from '../../interfaces';\n\nexport type DimensionDataViewport = Pick<\n RevoGrid.DimensionSettingsState,\n 'indexes' | 'positionIndexes' | 'positionIndexToItem' | 'sizes' | 'originItemSize' | 'realSize'\n>;\n\ntype ItemsToUpdate = Pick<RevoGrid.ViewportStateItems, 'items' | 'start' | 'end'>;\n/**\n * Update items based on new scroll position\n * If viewport wasn't changed fully simple recombination of positions\n * Otherwise rebuild viewport items\n */\nexport function getUpdatedItemsByPosition<T extends ItemsToUpdate>(\n pos: number, // coordinate\n items: T,\n realCount: number,\n virtualSize: number,\n dimension: DimensionDataViewport\n): ItemsToUpdate {\n const activeItem: RevoGrid.PositionItem = getItemByPosition(dimension, pos);\n const firstItem: RevoGrid.PositionItem = getFirstItem(items);\n let toUpdate: ItemsToUpdate;\n // do simple position recombination if items already present in viewport\n if (firstItem) {\n let changedOffsetStart = activeItem.itemIndex - (firstItem.itemIndex || 0);\n // if item changed\n if (changedOffsetStart) {\n // simple recombination\n toUpdate = recombineByOffset(Math.abs(changedOffsetStart), {\n positiveDirection: changedOffsetStart > -1,\n ...dimension,\n ...items,\n });\n }\n }\n\n const maxSizeVirtualSize = getMaxVirtualSize(virtualSize, dimension.realSize, activeItem);\n // if partial recombination add items if revo-viewport has some space left\n if (toUpdate) {\n const extra = addMissingItems(activeItem, realCount, maxSizeVirtualSize, toUpdate, dimension);\n if (extra.length) {\n updateMissingAndRange(toUpdate.items, extra, toUpdate);\n }\n }\n\n // new collection if no items after replacement full replacement\n if (!toUpdate) {\n const items = getItems({\n firstItemStart: activeItem.start,\n firstItemIndex: activeItem.itemIndex,\n origSize: dimension.originItemSize,\n maxSize: maxSizeVirtualSize,\n maxCount: realCount,\n sizes: dimension.sizes,\n });\n\n // range now comes from 0 to length - 1\n toUpdate = {\n items,\n start: 0,\n end: items.length - 1,\n };\n }\n return toUpdate;\n}\n\n// virtual size can differ based on scroll position if some big items are present\n// scroll can be in the middle of item and virtual size will be larger\n// so we need to exclude this part from virtual size hence it's already passed\nfunction getMaxVirtualSize(virtualSize: number, realSize: number, activeItem: RevoGrid.PositionItem) {\n return Math.min(virtualSize + (activeItem.end - activeItem.start), realSize)\n}\n\nexport function updateMissingAndRange(\n items: RevoGrid.VirtualPositionItem[],\n missing: RevoGrid.VirtualPositionItem[],\n range: RevoGrid.Range\n) {\n items.splice(range.end + 1, 0, ...missing);\n // update range if start larger after recombination\n if (range.start >= range.end && !(range.start === range.end && range.start === 0)) {\n range.start += missing.length;\n }\n range.end += missing.length;\n}\n\n/**\n * If partial replacement\n * this function adds items if viewport has some space left\n */\nexport function addMissingItems<T extends ItemsToUpdate>(\n firstItem: RevoGrid.PositionItem,\n realCount: number,\n virtualSize: number,\n existingCollection: T,\n dimension: Pick<RevoGrid.DimensionSettingsState, 'sizes' | 'originItemSize'>,\n): RevoGrid.VirtualPositionItem[] {\n const lastItem: RevoGrid.VirtualPositionItem = getLastItem(existingCollection);\n const items = getItems({\n sizes: dimension.sizes,\n firstItemStart: lastItem.end,\n firstItemIndex: lastItem.itemIndex + 1,\n origSize: dimension.originItemSize,\n maxSize: virtualSize - (lastItem.end - firstItem.start),\n maxCount: realCount,\n });\n return items;\n}\n\n/**\n * Get wiewport items parameters\n * caching position and calculating items count in viewport\n */\nexport function getItems(\n opt: {\n firstItemIndex: number;\n firstItemStart: number;\n origSize: number;\n maxSize: number; // virtual size\n maxCount: number; // real item count, where the last item\n sizes?: RevoGrid.ViewSettingSizeProp;\n },\n currentSize = 0,\n) {\n const items: RevoGrid.VirtualPositionItem[] = [];\n\n let index = opt.firstItemIndex;\n let size = currentSize;\n\n // max size or max count\n while (size <= opt.maxSize && index < opt.maxCount) {\n const newSize = getItemSize(index, opt.sizes, opt.origSize);\n items.push({\n start: opt.firstItemStart + size,\n end: opt.firstItemStart + size + newSize,\n itemIndex: index,\n size: newSize,\n });\n size += newSize;\n index++;\n }\n return items;\n}\n\n/**\n * Do batch items recombination\n * If items not overlapped with existing viewport returns null\n */\ntype RecombindDimensionData = Pick<RevoGrid.DimensionSettingsState, 'sizes' | 'realSize' | 'originItemSize'>;\ntype RecombineOffsetData = {\n positiveDirection: boolean;\n} & ItemsToUpdate & RecombindDimensionData;\nexport function recombineByOffset(\n offset: number,\n data: RecombineOffsetData\n): ItemsToUpdate | null {\n const newItems = [...data.items];\n const itemsCount = newItems.length;\n let newRange = {\n start: data.start,\n end: data.end,\n };\n\n // if offset out of revo-viewport, makes sense whole redraw\n if (offset > itemsCount) {\n return null;\n }\n\n // is direction of scroll positive\n if (data.positiveDirection) {\n // push item to the end\n let lastItem: RevoGrid.VirtualPositionItem = getLastItem(data);\n\n let i: number = newRange.start;\n const length = i + offset;\n for (; i < length; i++) {\n const newIndex: number = lastItem.itemIndex + 1;\n const size: number = getItemSize(newIndex, data.sizes, data.originItemSize);\n\n // if item overlapped limit break a loop\n if (lastItem.end + size > data.realSize) {\n break;\n }\n\n // new item index to recombine\n let newEnd = i % itemsCount;\n\n // item should always present, we do not create new item, we recombine them\n if (!newItems[newEnd]) {\n throw new Error('incorrect index');\n }\n\n // do recombination\n newItems[newEnd] = lastItem = {\n start: lastItem.end,\n end: lastItem.end + size,\n itemIndex: newIndex,\n size: size,\n };\n // update range\n newRange.start++;\n newRange.end = newEnd;\n }\n\n // direction is negative\n } else {\n // push item to the start\n let firstItem: RevoGrid.VirtualPositionItem = getFirstItem(data);\n\n const end = newRange.end;\n for (let i = 0; i < offset; i++) {\n const newIndex: number = firstItem.itemIndex - 1;\n const size: number = getItemSize(newIndex, data.sizes, data.originItemSize);\n\n // new item index to recombine\n let newStart = end - i;\n newStart = (newStart < 0 ? itemsCount + newStart : newStart) % itemsCount;\n\n // item should always present, we do not create new item, we recombine them\n if (!newItems[newStart]) {\n throw new Error('incorrect index');\n }\n\n // do recombination\n newItems[newStart] = firstItem = {\n start: firstItem.start - size,\n end: firstItem.start,\n itemIndex: newIndex,\n size: size,\n };\n // update range\n newRange.start = newStart;\n newRange.end--;\n }\n }\n const range = {\n start: (newRange.start < 0 ? itemsCount + newRange.start : newRange.start) % itemsCount,\n end: (newRange.end < 0 ? itemsCount + newRange.end : newRange.end) % itemsCount,\n };\n return {\n items: newItems,\n ...range,\n };\n}\n\nfunction getItemSize(index: number, sizes?: RevoGrid.ViewSettingSizeProp, origSize: number = 0): number {\n if (sizes && sizes[index]) {\n return sizes[index];\n }\n return origSize;\n}\n\n/**\n * Verify if position is in range of the PositionItem, start and end are included\n */\nexport function isActiveRange(\n pos: number,\n realSize: number,\n first?: RevoGrid.PositionItem,\n last?: RevoGrid.PositionItem\n): boolean {\n if (!first || !last) {\n return false;\n }\n // if position is in range of first item\n // or position is after first item and last item is the last item in real size\n return pos >= first.start && pos <= first.end ||\n pos > first.end && last.end === realSize;\n}\n\nexport function isActiveRangeOutsideLastItem(pos: number, virtualSize: number, firstItem?: RevoGrid.PositionItem, lastItem?: RevoGrid.PositionItem) {\n // if no first item, means no items in viewport\n if (!firstItem) {\n return false;\n }\n return virtualSize + pos > lastItem?.end\n}\n\nexport function getFirstItem(s: ItemsToUpdate): RevoGrid.VirtualPositionItem | undefined {\n return s.items[s.start];\n}\n\nexport function getLastItem(s: ItemsToUpdate): RevoGrid.VirtualPositionItem {\n return s.items[s.end];\n}\n\n/**\n * Set items sizes from start index to end\n * @param vpItems \n * @param start \n * @param size \n * @param lastCoordinate \n * @returns \n */\nexport function setItemSizes(\n vpItems: RevoGrid.VirtualPositionItem[],\n initialIndex: number,\n size: number,\n lastCoordinate: number\n) {\n const items = [...vpItems];\n const count = items.length;\n\n let pos = lastCoordinate;\n let i = 0;\n let start = initialIndex;\n\n // viewport not inited\n if (!count) {\n return [];\n }\n // loop through array from initial item after recombination\n while (i < count) {\n const item = items[start];\n item.start = pos;\n item.size = size;\n item.end = item.start + size;\n pos = item.end;\n // loop by start index\n start++;\n i++;\n\n // if start index out of array, reset it\n if (start === count) {\n start = 0;\n }\n }\n return items;\n}\n","/**\n * Store is responsible for visible\n * Viewport information for each dimension\n * Redraw items during scrolling\n */\n\nimport { createStore } from '@stencil/store';\n\nimport {\n addMissingItems,\n DimensionDataViewport,\n getFirstItem,\n getLastItem,\n getUpdatedItemsByPosition,\n isActiveRange,\n setItemSizes,\n updateMissingAndRange,\n isActiveRangeOutsideLastItem,\n} from './viewport.helpers';\n\nimport { setStore } from '../../utils/store.utils';\nimport { Observable, RevoGrid } from '../../interfaces';\n\nfunction initialState(): RevoGrid.ViewportState {\n return {\n // virtual item information per rendered item\n items: [],\n // virtual dom item order to render\n start: 0,\n\n end: 0,\n\n // size of viewport in px\n virtualSize: 0,\n\n // total number of items\n realCount: 0,\n };\n}\n\nexport default class ViewportStore {\n readonly store: Observable<RevoGrid.ViewportState>;\n // last coordinate for store position restore\n private lastKnownScroll = 0;\n get lastCoordinate() {\n return this.lastKnownScroll;\n }\n private set lastCoordinate(value: number) {\n this.lastKnownScroll = value;\n }\n constructor(readonly type: RevoGrid.MultiDimensionType) {\n this.store = createStore(initialState());\n this.store.onChange('realCount', () => this.clearItems());\n // drop items on virtual size change, require a new item set\n this.store.onChange('virtualSize', () => this.setViewport({ items: [] }));\n }\n\n /**\n * Render viewport based on coordinate\n * It's the main method for draw\n */\n setViewPortCoordinate(position: number, dimension: DimensionDataViewport) {\n let virtualSize = this.store.get('virtualSize');\n // no visible data to calculate\n if (!virtualSize) {\n return;\n }\n\n const frameOffset = 1;\n const singleOffsetInPx = dimension.originItemSize * frameOffset;\n // add offset to virtual size from both sides\n const outsize = singleOffsetInPx * 2;\n // math virtual size is based on visible area + 2 items outside of visible area\n virtualSize += outsize;\n\n // expected no scroll if real size less than virtual size, position is 0\n let maxCoordinate = 0;\n // if there is nodes outside of viewport, max coordinate has to be adjusted\n if (dimension.realSize > virtualSize) {\n // max coordinate is real size minus virtual/rendered space\n maxCoordinate = dimension.realSize - virtualSize;\n }\n\n let pos = position;\n // limit position to max and min coordinates\n if (pos < 0) {\n pos = 0;\n } else if (pos > maxCoordinate) {\n pos = maxCoordinate;\n }\n\n // store last coordinate for further restore on redraw\n this.lastCoordinate = pos;\n\n // actual position is less than first item start based on offset\n pos -= frameOffset * dimension.originItemSize;\n pos = pos < 0 ? 0 : pos < maxCoordinate ? pos : maxCoordinate;\n\n const allItems = this.getItems();\n const firstItem: RevoGrid.VirtualPositionItem | undefined = getFirstItem(allItems);\n const lastItem: RevoGrid.VirtualPositionItem | undefined = getLastItem(allItems);\n\n\n let toUpdate: Partial<RevoGrid.ViewportState> = {};\n // left position changed\n // verify if new position is in range of previously rendered first item\n if (!isActiveRange(pos, dimension.realSize, firstItem, lastItem)) {\n toUpdate = {\n ...toUpdate,\n ...getUpdatedItemsByPosition(pos, allItems, this.store.get('realCount'), virtualSize, dimension),\n };\n this.setViewport({ ...toUpdate });\n // right position changed\n } else if (isActiveRangeOutsideLastItem(pos, virtualSize, firstItem, lastItem)) {\n // check is any item missing for full fill content\n const missing = addMissingItems(firstItem, this.store.get('realCount'), virtualSize + pos - firstItem.start, allItems, dimension);\n\n // update missing items\n if (missing.length) {\n const items = [...this.store.get('items')];\n const range = {\n start: this.store.get('start'),\n end: this.store.get('end'),\n };\n updateMissingAndRange(items, missing, range);\n toUpdate = {\n ...toUpdate,\n items: [...items],\n ...range,\n };\n this.setViewport({ ...toUpdate });\n }\n }\n }\n\n /**\n * Update viewport sizes for existing items\n * This method is generating new item positions based on custom sizes and original sizes\n * @param sizes - custom sizes for each item\n * @param dropToOriginalSize - drop to original size if requested\n */\n setViewPortDimensionSizes(sizes: RevoGrid.ViewSettingSizeProp, dropToOriginalSize?: number) {\n let items = [...this.store.get('items')];\n const count = items.length;\n // viewport not inited\n if (!count) {\n return;\n }\n\n let changedCoordinate = 0;\n let i = 0;\n let start = this.store.get('start');\n\n // drop to original size if requested\n if (dropToOriginalSize) {\n const allItems = this.getItems();\n const firstItem: RevoGrid.VirtualPositionItem | undefined = getFirstItem(allItems);\n items = setItemSizes(items, start, dropToOriginalSize, firstItem.start);\n }\n\n // loop through array from initial item after recombination\n // if size change present, change position for all items after\n while (i < count) {\n const item = items[start];\n // change pos if size change present before\n if (changedCoordinate) {\n item.start += changedCoordinate;\n item.end += changedCoordinate;\n }\n // check if size change present\n const size: number | undefined = sizes[item.itemIndex];\n // size found\n if (size) {\n const changedSize = size - item.size;\n changedCoordinate += changedSize;\n item.size = size;\n item.end = item.start + size;\n // size lost\n }\n\n // loop by start index\n start++;\n i++;\n // if start index out of array, reset it\n if (start === count) {\n start = 0;\n }\n }\n\n this.setViewport({ items: [...items] });\n }\n\n /**\n * Set sizes for existing items\n */\n setOriginalSizes(size: number) {\n const items = this.store.get('items');\n const count = items.length;\n // viewport not inited\n if (!count) {\n return;\n }\n\n setStore(this.store, {\n items: setItemSizes(items, this.store.get('start'), size, this.lastCoordinate),\n });\n }\n\n getItems(): Pick<RevoGrid.ViewportStateItems, 'items' | 'start' | 'end'> {\n return {\n items: this.store.get('items'),\n start: this.store.get('start'),\n end: this.store.get('end'),\n };\n }\n\n setViewport(data: Partial<RevoGrid.ViewportState>) {\n setStore(this.store, data);\n }\n\n clearItems() {\n this.store.set('items', []);\n }\n}\n","import { RevoGrid } from '../interfaces';\n\nconst LETTER_BLOCK_SIZE = 10;\nexport const calculateRowHeaderSize = (itemsLength: number, rowHeaderColumn?: RevoGrid.RowHeaders) => {\n return rowHeaderColumn?.size || (itemsLength.toString().length + 1) * LETTER_BLOCK_SIZE;\n};\n","function isTouch(e: MouseEvent | TouchEvent): e is TouchEvent {\n return !!(e as TouchEvent).touches;\n}\n\nexport function verifyTouchTarget(touchEvent?: Touch, focusClass?: string) {\n if (focusClass && touchEvent) {\n if (!(touchEvent.target instanceof Element && touchEvent.target.classList.contains(focusClass))) { \n return false;\n }\n }\n return true;\n}\n\n\nexport function getFromEvent(\n e: MouseEvent | TouchEvent,\n prop: keyof Pick<Touch, 'clientX' | 'clientY' | 'screenX' | 'screenY'>,\n focusClass?: string // for touch events\n): number | null {\n if (isTouch(e)) {\n if (e.touches.length > 0) {\n const touchEvent = e.touches[0];\n if (!verifyTouchTarget(touchEvent, focusClass)) {\n return null;\n }\n return (touchEvent[prop] as number) || 0;\n }\n return null;\n }\n return e[prop] || 0;\n}\n"],"version":3}
|
|
@@ -8,7 +8,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
8
8
|
const index$1 = require('./index-ee2ef5ae.js');
|
|
9
9
|
const index = require('./index-effc94b9.js');
|
|
10
10
|
const viewport_helpers = require('./viewport.helpers-70ccec8f.js');
|
|
11
|
-
const events = require('./events-
|
|
11
|
+
const events = require('./events-05e75632.js');
|
|
12
12
|
const filter_button = require('./filter.button-6badec7a.js');
|
|
13
13
|
const isString = require('./isString-3dde8d95.js');
|
|
14
14
|
const debounce = require('./debounce-f50730b6.js');
|
|
@@ -33,8 +33,9 @@ function isRowDragService(rowDrag, model) {
|
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
const PADDING_DEPTH = 10;
|
|
36
|
-
const RowRenderer = ({ rowClass, size, start, style, depth }, cells) => {
|
|
37
|
-
|
|
36
|
+
const RowRenderer = ({ rowClass, index: index$2, size, start, style, depth }, cells) => {
|
|
37
|
+
const props = Object.assign({ [index$1.DATA_ROW]: index$2 });
|
|
38
|
+
return (index.h("div", Object.assign({}, props, { class: `rgRow ${rowClass || ''}`, style: Object.assign(Object.assign({}, style), { height: `${size}px`, transform: `translateY(${start}px)`, paddingLeft: depth ? `${PADDING_DEPTH * depth}px` : undefined }) }), cells));
|
|
38
39
|
};
|
|
39
40
|
|
|
40
41
|
function expandEvent(e, model, virtualIndex) {
|
|
@@ -114,7 +115,7 @@ const RevogrData = class {
|
|
|
114
115
|
const dataItem = index$1.getSourceItem(this.dataStore, rgRow.itemIndex);
|
|
115
116
|
/** grouping */
|
|
116
117
|
if (viewport_helpers.isGrouping(dataItem)) {
|
|
117
|
-
rowsEls.push(index.h(GroupingRowRenderer, Object.assign({}, rgRow, { model: dataItem, groupingCustomRenderer: groupingCustomRenderer, hasExpand: this.columnService.hasGrouping })));
|
|
118
|
+
rowsEls.push(index.h(GroupingRowRenderer, Object.assign({}, rgRow, { index: rgRow.itemIndex, model: dataItem, groupingCustomRenderer: groupingCustomRenderer, hasExpand: this.columnService.hasGrouping })));
|
|
118
119
|
continue;
|
|
119
120
|
}
|
|
120
121
|
/** grouping end */
|
|
@@ -127,7 +128,7 @@ const RevogrData = class {
|
|
|
127
128
|
cells.push(this.getCellRenderer(rgRow, rgCol,
|
|
128
129
|
/** grouping apply*/ this.columnService.hasGrouping ? depth : 0));
|
|
129
130
|
}
|
|
130
|
-
const row = index.h(RowRenderer, { rowClass: rowClass, size: rgRow.size, start: rgRow.start }, cells);
|
|
131
|
+
const row = index.h(RowRenderer, { index: rgRow.itemIndex, rowClass: rowClass, size: rgRow.size, start: rgRow.start }, cells);
|
|
131
132
|
this.beforeRowRender.emit({
|
|
132
133
|
node: row,
|
|
133
134
|
item: rgRow,
|