@@ -143,9 +143,10 @@ const BeautifulWrapper: React.FC<BeautifulProps> = p => {
143143 ) ;
144144} ;
145145
146- function createTextColumnInfo ( index : number ) : GridColumnWithMockingInfo {
146+ function createTextColumnInfo ( index : number , group : boolean ) : GridColumnWithMockingInfo {
147147 return {
148148 title : `Column ${ index } ` ,
149+ group : group ? `Group ${ Math . round ( index / 3 ) } ` : undefined ,
149150 width : 120 ,
150151 icon : GridColumnIcon . HeaderString ,
151152 hasMenu : false ,
@@ -163,10 +164,11 @@ function createTextColumnInfo(index: number): GridColumnWithMockingInfo {
163164 } ;
164165}
165166
166- function getResizableColumns ( amount : number ) : GridColumnWithMockingInfo [ ] {
167+ function getResizableColumns ( amount : number , group : boolean ) : GridColumnWithMockingInfo [ ] {
167168 const defaultColumns : GridColumnWithMockingInfo [ ] = [
168169 {
169170 title : "First name" ,
171+ group : group ? "Name" : undefined ,
170172 width : 120 ,
171173 icon : GridColumnIcon . HeaderString ,
172174 hasMenu : false ,
@@ -183,6 +185,7 @@ function getResizableColumns(amount: number): GridColumnWithMockingInfo[] {
183185 } ,
184186 {
185187 title : "Last name" ,
188+ group : group ? "Name" : undefined ,
186189 width : 120 ,
187190 icon : GridColumnIcon . HeaderString ,
188191 hasMenu : false ,
@@ -200,6 +203,7 @@ function getResizableColumns(amount: number): GridColumnWithMockingInfo[] {
200203 {
201204 title : "Avatar" ,
202205 width : 120 ,
206+ group : group ? "Info" : undefined ,
203207 icon : GridColumnIcon . HeaderImage ,
204208 hasMenu : false ,
205209 getContent : ( ) => {
@@ -217,6 +221,7 @@ function getResizableColumns(amount: number): GridColumnWithMockingInfo[] {
217221 {
218222 title : "Email" ,
219223 width : 120 ,
224+ group : group ? "Info" : undefined ,
220225 icon : GridColumnIcon . HeaderString ,
221226 hasMenu : false ,
222227 getContent : ( ) => {
@@ -233,6 +238,7 @@ function getResizableColumns(amount: number): GridColumnWithMockingInfo[] {
233238 {
234239 title : "Title" ,
235240 width : 120 ,
241+ group : group ? "Info" : undefined ,
236242 icon : GridColumnIcon . HeaderString ,
237243 hasMenu : false ,
238244 getContent : ( ) => {
@@ -249,6 +255,7 @@ function getResizableColumns(amount: number): GridColumnWithMockingInfo[] {
249255 {
250256 title : "More Info" ,
251257 width : 120 ,
258+ group : group ? "Info" : undefined ,
252259 icon : GridColumnIcon . HeaderUri ,
253260 hasMenu : false ,
254261 getContent : ( ) => {
@@ -271,7 +278,7 @@ function getResizableColumns(amount: number): GridColumnWithMockingInfo[] {
271278 const extraColumnsAmount = amount - defaultColumns . length ;
272279
273280 const extraColumns = [ ...new Array ( extraColumnsAmount ) ] . map ( ( _ , index ) =>
274- createTextColumnInfo ( index + defaultColumns . length )
281+ createTextColumnInfo ( index + defaultColumns . length , group )
275282 ) ;
276283
277284 return [ ...defaultColumns , ...extraColumns ] ;
@@ -301,14 +308,14 @@ class ContentCache {
301308 }
302309}
303310
304- function useMockDataGenerator ( numCols : number , readonly : boolean = true ) {
311+ function useMockDataGenerator ( numCols : number , readonly : boolean = true , group : boolean = false ) {
305312 const cache = React . useRef < ContentCache > ( new ContentCache ( ) ) ;
306313
307- const [ colsMap , setColsMap ] = React . useState ( ( ) => getResizableColumns ( numCols ) ) ;
314+ const [ colsMap , setColsMap ] = React . useState ( ( ) => getResizableColumns ( numCols , group ) ) ;
308315
309316 React . useEffect ( ( ) => {
310- setColsMap ( getResizableColumns ( numCols ) ) ;
311- } , [ numCols ] ) ;
317+ setColsMap ( getResizableColumns ( numCols , group ) ) ;
318+ } , [ group , numCols ] ) ;
312319
313320 const onColumnResized = React . useCallback ( ( column : GridColumn , newSize : number ) => {
314321 setColsMap ( prevColsMap => {
@@ -2060,3 +2067,30 @@ export const ReorderRows: React.VFC = () => {
20602067 showPanel : false ,
20612068 } ,
20622069} ;
2070+
2071+ export const ColumnGroups : React . VFC = ( ) => {
2072+ const { cols, getCellContent } = useMockDataGenerator ( 100000 , true , true ) ;
2073+
2074+ return (
2075+ < BeautifulWrapper
2076+ title = "Column Grouping"
2077+ description = {
2078+ < Description >
2079+ Columns in the data grid may be grouped by setting their < PropName > group</ PropName > property.
2080+ </ Description >
2081+ } >
2082+ < DataEditor
2083+ { ...defaultProps }
2084+ getCellContent = { getCellContent }
2085+ columns = { cols }
2086+ rows = { 1000 }
2087+ rowMarkers = "both"
2088+ />
2089+ </ BeautifulWrapper >
2090+ ) ;
2091+ } ;
2092+ ( ColumnGroups as any ) . parameters = {
2093+ options : {
2094+ showPanel : false ,
2095+ } ,
2096+ } ;
0 commit comments