Column Collapse Plugin
The Column Collapse plugin allows you to make grouped columns collapsible. When a group is collapsed, only columns marked as “sealed” remain visible, while other columns are hidden.
Source code
import { ColumnCollapsePlugin, FilterHeaderPlugin, RowSelectPlugin, RowOddPlugin, columnTypeRenderer,} from '@revolist/revogrid-pro';import { defineCustomElements } from '@revolist/revogrid/loader';defineCustomElements();
const grid = document.querySelector('revo-grid');if (grid) { grid.colSize = 120; grid.source = [ { firstName: 'John', lastName: 'Doe', age: 30, street: '123 Main St', city: 'New York', country: 'USA', phone: '123-456-7890', mobile: '098-765-4321', }, { firstName: 'Jane', lastName: 'Smith', age: 28, street: '456 Oak Ave', city: 'São Paulo', country: 'Brazil', phone: '234-567-8901', mobile: '987-654-3210', }, { firstName: 'Bob', lastName: 'Johnson', age: 35, street: '789 Pine Rd', city: 'Madrid', country: 'Spain', phone: '345-678-9012', mobile: '876-543-2109', }, ];
grid.columns = [ { name: 'Personal Information', collapsible: true, collapsed: true, columnTemplate: columnTypeRenderer, children: [ { prop: 'firstName', name: 'First Name', size: 125, }, { prop: 'lastName', name: 'Last Name', }, { prop: 'age', name: 'Age', sealed: true, rowSelect: true, filterPlaceholder: 'Age?', }, ], }, { name: 'Address', collapsible: true, columnType: 'id', columnTemplate: columnTypeRenderer, children: [ { prop: 'street', name: 'Street', size: 155, sealed: true, filterPlaceholder: 'Where?', }, { prop: 'city', name: 'City', filterPlaceholder: 'Where?', }, { prop: 'country', name: 'Country', filterPlaceholder: 'Where?', }, ], }, { name: 'Contact', collapsible: true, columnType: 'integer', columnTemplate: columnTypeRenderer, children: [ { prop: 'email', name: 'Email', sealed: true, }, { prop: 'phone', name: 'Phone', }, { prop: 'mobile', name: 'Mobile', }, ], }, ];
grid.plugins = [ColumnCollapsePlugin, FilterHeaderPlugin, RowSelectPlugin, RowOddPlugin]; grid.theme = 'material';}
import React from 'react';import { RevoGrid } from '@revolist/react-datagrid';import { ColumnCollapsePlugin, FilterHeaderPlugin, RowSelectPlugin, RowOddPlugin, columnTypeRenderer,} from '@revolist/revogrid-pro';
const ColumnCollapse: React.FC = () => { const source = [ { firstName: 'John', lastName: 'Doe', age: 30, street: '123 Main St', city: 'New York', country: 'USA', phone: '123-456-7890', mobile: '098-765-4321', }, { firstName: 'Jane', lastName: 'Smith', age: 28, street: '456 Oak Ave', city: 'São Paulo', country: 'Brazil', phone: '234-567-8901', mobile: '987-654-3210', }, { firstName: 'Bob', lastName: 'Johnson', age: 35, street: '789 Pine Rd', city: 'Madrid', country: 'Spain', phone: '345-678-9012', mobile: '876-543-2109', }, ];
const columns = [ { name: 'Personal Information', collapsible: true, collapsed: true, columnTemplate: columnTypeRenderer, children: [ { prop: 'firstName', name: 'First Name', size: 125, }, { prop: 'lastName', name: 'Last Name', }, { prop: 'age', name: 'Age', sealed: true, rowSelect: true, filterPlaceholder: 'Age?', }, ], }, { name: 'Address', collapsible: true, columnType: 'id', columnTemplate: columnTypeRenderer, children: [ { prop: 'street', name: 'Street', size: 155, sealed: true, filterPlaceholder: 'Where?', }, { prop: 'city', name: 'City', filterPlaceholder: 'Where?', }, { prop: 'country', name: 'Country', filterPlaceholder: 'Where?', }, ], }, { name: 'Contact', collapsible: true, columnType: 'integer', columnTemplate: columnTypeRenderer, children: [ { prop: 'email', name: 'Email', sealed: true, }, { prop: 'phone', name: 'Phone', }, { prop: 'mobile', name: 'Mobile', }, ], }, ];
const plugins = [ColumnCollapsePlugin, FilterHeaderPlugin, RowSelectPlugin, RowOddPlugin];
return ( <RevoGrid className="cell-border" source={source} columns={columns} plugins={plugins} resize hide-attribution style={{ minHeight: '300px' }} /> );};
export default ColumnCollapse;
<template> <RevoGrid class="cell-border" :theme="isDark ? 'darkMaterial' : 'material'" :columns="columns" :source="source" :plugins="plugins" resize hide-attribution style="min-height: 300px;" /></template>
<script setup lang="ts">import { ref } from 'vue';import RevoGrid from '@revolist/vue3-datagrid';import { ColumnCollapsePlugin, FilterHeaderPlugin, RowSelectPlugin, RowOddPlugin, columnTypeRenderer,} from '@revolist/revogrid-pro';import { currentThemeVue } from '../composables/useRandomData';
const { isDark } = currentThemeVue();
const source = ref([ { firstName: 'John', lastName: 'Doe', age: 30, street: '123 Main St', city: 'New York', country: 'USA', phone: '123-456-7890', mobile: '098-765-4321', }, { firstName: 'Jane', lastName: 'Smith', age: 28, street: '456 Oak Ave', city: 'São Paulo', country: 'Brazil', phone: '234-567-8901', mobile: '987-654-3210', }, { firstName: 'Bob', lastName: 'Johnson', age: 35, street: '789 Pine Rd', city: 'Madrid', country: 'Spain', phone: '345-678-9012', mobile: '876-543-2109', },]);
const columns = ref([ { name: 'Personal Information', collapsible: true, collapsed: true, columnTemplate: columnTypeRenderer, children: [ { prop: 'firstName', name: 'First Name', size: 125, }, { prop: 'lastName', name: 'Last Name', }, { prop: 'age', name: 'Age', sealed: true, rowSelect: true, filterPlaceholder: 'Age?', }, ], }, { name: 'Address', collapsible: true, columnType: 'id', columnTemplate: columnTypeRenderer, children: [ { prop: 'street', name: 'Street', size: 155, sealed: true, filterPlaceholder: 'Where?', }, { prop: 'city', name: 'City', filterPlaceholder: 'Where?', }, { prop: 'country', name: 'Country', filterPlaceholder: 'Where?', }, ], }, { name: 'Contact', collapsible: true, columnType: 'integer', columnTemplate: columnTypeRenderer, children: [ { prop: 'email', name: 'Email', sealed: true, }, { prop: 'phone', name: 'Phone', }, { prop: 'mobile', name: 'Mobile', }, ], },]);
const plugins = [ColumnCollapsePlugin, FilterHeaderPlugin, RowSelectPlugin, RowOddPlugin];</script>
import { Component } from '@angular/core';import { RevoGrid } from '@revolist/angular-datagrid';import { ColumnCollapsePlugin, FilterHeaderPlugin, RowSelectPlugin, RowOddPlugin, columnTypeRenderer,} from '@revolist/revogrid-pro';
@Component({ selector: 'app-column-collapse', standalone: true, imports: [RevoGrid], template: ` <revo-grid class="cell-border" [source]="source" [columns]="columns" [plugins]="plugins" resize hide-attribution style="min-height: 300px;" ></revo-grid> `,})export class ColumnCollapseComponent { source = [ { firstName: 'John', lastName: 'Doe', age: 30, street: '123 Main St', city: 'New York', country: 'USA', phone: '123-456-7890', mobile: '098-765-4321', }, { firstName: 'Jane', lastName: 'Smith', age: 28, street: '456 Oak Ave', city: 'São Paulo', country: 'Brazil', phone: '234-567-8901', mobile: '987-654-3210', }, { firstName: 'Bob', lastName: 'Johnson', age: 35, street: '789 Pine Rd', city: 'Madrid', country: 'Spain', phone: '345-678-9012', mobile: '876-543-2109', }, ];
columns = [ { name: 'Personal Information', collapsible: true, collapsed: true, columnTemplate: columnTypeRenderer, children: [ { prop: 'firstName', name: 'First Name', size: 125, }, { prop: 'lastName', name: 'Last Name', }, { prop: 'age', name: 'Age', sealed: true, rowSelect: true, filterPlaceholder: 'Age?', }, ], }, { name: 'Address', collapsible: true, columnType: 'id', columnTemplate: columnTypeRenderer, children: [ { prop: 'street', name: 'Street', size: 155, sealed: true, filterPlaceholder: 'Where?', }, { prop: 'city', name: 'City', filterPlaceholder: 'Where?', }, { prop: 'country', name: 'Country', filterPlaceholder: 'Where?', }, ], }, { name: 'Contact', collapsible: true, columnType: 'integer', columnTemplate: columnTypeRenderer, children: [ { prop: 'email', name: 'Email', sealed: true, }, { prop: 'phone', name: 'Phone', }, { prop: 'mobile', name: 'Mobile', }, ], }, ];
plugins = [ColumnCollapsePlugin, FilterHeaderPlugin, RowSelectPlugin, RowOddPlugin];}
Features
- Add collapse/expand functionality to column groups
- Maintain “sealed” columns visible even when group is collapsed
- Support for nested column groups
- Customizable initial collapse state
- Smooth animations and intuitive UI
Installation
The Column Collapse plugin is included in the RevoGrid Pro package. To use it, simply import and add it to your grid’s plugins:
import { ColumnCollapsePlugin } from '@revolist/revogrid-pro';
const grid = document.createElement('revo-grid');grid.plugins = [ColumnCollapsePlugin];
Usage
To make a column group collapsible:
- Add the
collapsible
property to the group configuration - Mark important columns as
sealed
to keep them visible when collapsed - Optionally set initial collapse state through
additionalData
const grid = document.createElement('revo-grid');grid.plugins = [ColumnCollapsePlugin];
// Configure columns with collapsible groupsgrid.columns = [ { id: 'personalInfo', name: 'Personal Information', collapsible: true, // Enable collapse for this group children: [ { prop: 'name', name: 'Name', sealed: true // This column will stay visible when collapsed }, { prop: 'email', name: 'Email' }, { prop: 'phone', name: 'Phone' } ] }, { id: 'addressInfo', name: 'Address', collapsible: true, children: [ { prop: 'street', name: 'Street', sealed: true }, { prop: 'city', name: 'City' }, { prop: 'country', name: 'Country' } ] }];
// Sample datagrid.source = [ { name: 'John Doe', phone: '123-456-7890', street: '123 Main St', city: 'New York', country: 'USA' }, // ... more rows];
Best Practices
- Use
sealed
for essential columns that should always be visible - Keep group names concise to avoid UI clutter
- Use nested groups sparingly to maintain clarity
- Consider your users’ needs when deciding which columns to make collapsible
The Column Collapse plugin helps manage complex data grids by allowing users to focus on relevant information while keeping essential data visible at all times.