Skip to content

Commit e15bb38

Browse files
committed
Feat: Implement hideMode for Grid Columns to support OffscreenCanvas buffering (#8959)
1 parent 12f4f6d commit e15bb38

3 files changed

Lines changed: 47 additions & 6 deletions

File tree

src/grid/Body.mjs

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -643,7 +643,8 @@ class GridBody extends Component {
643643
id = me.getRowId(rowIndex),
644644
recordId = record[me.store.getKeyProperty()],
645645
rowCls = me.getRowClass(record, rowIndex),
646-
config, column, columnPosition, gridRow, i;
646+
countColumns = columns.getCount(),
647+
config, column, columnPosition, gridRow, i, isMounted;
647648

648649
if (rowIndex % 2 !== 0) {
649650
rowCls.push('neo-even')
@@ -673,8 +674,14 @@ class GridBody extends Component {
673674
gridContainer.fire('select', {record})
674675
}
675676

676-
for (i=mountedColumns[0]; i <= mountedColumns[1]; i++) {
677-
column = columns.getAt(i);
677+
for (i=0; i < countColumns; i++) {
678+
isMounted = i >= mountedColumns[0] && i <= mountedColumns[1];
679+
column = columns.getAt(i);
680+
681+
if (!isMounted && column.hideMode === 'removeDom') {
682+
continue
683+
}
684+
678685
config = me.applyRendererOutput({column, columnIndex: i, record, rowIndex});
679686

680687
if (column.dock) {
@@ -687,11 +694,19 @@ class GridBody extends Component {
687694
...config.style,
688695
left : columnPosition.x + 'px',
689696
width: columnPosition.width + 'px'
690-
}
697+
};
691698

692699
// Happens during a column header drag OP, when leaving the painted range
693-
if (columnPosition.hidden) {
694-
config.style.visibility = 'hidden'
700+
if (isMounted) {
701+
if (columnPosition.hidden) {
702+
config.style.visibility = 'hidden'
703+
}
704+
} else {
705+
if (column.hideMode === 'visibility') {
706+
config.style.visibility = 'hidden'
707+
} else if (column.hideMode === 'display') {
708+
config.style.display = 'none'
709+
}
695710
}
696711

697712
gridRow.cn.push(config)

src/grid/column/Base.mjs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,14 @@ import {resolveCallback} from '../../util/Function.mjs';
66
* @extends Neo.core.Base
77
*/
88
class Column extends Base {
9+
/**
10+
* Valid values for hideMode
11+
* @member {String[]} hideModes=['display','removeDom','visibility']
12+
* @protected
13+
* @static
14+
*/
15+
static hideModes = ['display', 'removeDom', 'visibility']
16+
917
static config = {
1018
/**
1119
* @member {String} className='Neo.grid.column.Base'
@@ -16,6 +24,10 @@ class Column extends Base {
1624
* @member {String|null} dataField=null
1725
*/
1826
dataField: null,
27+
/**
28+
* @member {String} hideMode_='removeDom'
29+
*/
30+
hideMode_: 'removeDom',
1931
/**
2032
* @member {Neo.grid.Container|null} parent=null
2133
*/
@@ -54,6 +66,16 @@ class Column extends Base {
5466
value && Neo.currentWorker.insertThemeFiles(value, this.__proto__)
5567
}
5668

69+
/**
70+
* Triggered before the hideMode config gets changed
71+
* @param {String} value
72+
* @param {String} oldValue
73+
* @protected
74+
*/
75+
beforeSetHideMode(value, oldValue) {
76+
return this.beforeSetEnumValue(value, oldValue, 'hideMode')
77+
}
78+
5779
/**
5880
* Triggered before the renderer config gets changed
5981
* @param {Function|String|null} value

src/grid/column/Sparkline.mjs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,10 @@ class Sparkline extends ComponentColumn {
1919
defaults: {
2020
module: SparklineComponent
2121
},
22+
/**
23+
* @member {String} hideMode='visibility'
24+
*/
25+
hideMode: 'visibility',
2226
/**
2327
* @member {String|null} rendererClassName=null
2428
*/

0 commit comments

Comments
 (0)