@@ -4,6 +4,10 @@ import { Column } from '../src/';
44import Group from '../src/components/Group' ;
55import Row from '../src/components/Row' ;
66import { RowProps , ColumnProps , GetRowKey } from '../src/types' ;
7+ import {
8+ getRowData ,
9+ DataScrollerContextProvider ,
10+ } from '../src/components/DataScrollerContext/DataScrollerContext' ;
711
812import { storiesOf } from '@storybook/react' ;
913import DataScroller , {
@@ -284,3 +288,132 @@ storiesOf('react-data-scroller', module).add('custom rowRenderer', () => {
284288 />
285289 ) ;
286290} ) ;
291+
292+ storiesOf ( 'react-data-scroller' , module ) . add ( 'DataScrollerContext' , ( ) => {
293+ const DetachedIndexCell = ( { index } : { index : number } ) => {
294+ return (
295+ < div
296+ style = { {
297+ boxShadow : '0 0 5px 2px black' ,
298+ } }
299+ >
300+ { index }
301+ </ div >
302+ ) ;
303+ } ;
304+
305+ const DetachedFirstNameCell = ( { firstName } : { firstName : string } ) => {
306+ return < CustomInput value = { firstName } /> ;
307+ } ;
308+
309+ const DetachedLastNameCell = ( { lastName } : { lastName : string } ) => {
310+ return < div > { lastName } </ div > ;
311+ } ;
312+
313+ const InjectedIndexCell = getRowData ( ( props : any , data : any ) => ( {
314+ ...props ,
315+ index : data [ props . rowIndex ] . index ,
316+ } ) ) ( DetachedIndexCell ) ;
317+
318+ const InjectedFirstNameCell = getRowData ( ( props : any , data : any ) => ( {
319+ ...props ,
320+ firstName : data [ props . rowIndex ] . firstName ,
321+ } ) ) ( DetachedFirstNameCell ) ;
322+
323+ const InjectedLastNameCell = getRowData ( ( props : any , data : any ) => ( {
324+ ...props ,
325+ lastName : data [ props . rowIndex ] . lastName ,
326+ } ) ) ( DetachedLastNameCell ) ;
327+
328+ const initialContextColumns = [
329+ {
330+ cellRenderer : InjectedIndexCell ,
331+ columnData : { } ,
332+ dataKey : 'lastName' ,
333+ headerRenderer : ( { columnData } : HeaderRendererArgs ) => (
334+ < div style = { { background : 'white' } } >
335+ Header { columnData . columnIndex }
336+ </ div >
337+ ) ,
338+ label : 'index' ,
339+ width : 200 ,
340+ } ,
341+ {
342+ cellRenderer : InjectedLastNameCell ,
343+ columnData : { } ,
344+ dataKey : 'lastName' ,
345+ headerRenderer : ( { columnData } : HeaderRendererArgs ) => (
346+ < div style = { { background : 'white' } } >
347+ Header { columnData . columnIndex }
348+ </ div >
349+ ) ,
350+ label : 'last name' ,
351+ width : 200 ,
352+ } ,
353+ {
354+ cellRenderer : InjectedFirstNameCell ,
355+ columnData : { } ,
356+ dataKey : 'firstName' ,
357+ headerRenderer : ( { columnData } : HeaderRendererArgs ) => (
358+ < div > Header{ columnData . columnIndex } </ div >
359+ ) ,
360+ label : 'first name' ,
361+ width : 200 ,
362+ } ,
363+ ] ;
364+
365+ const rowGetter = ( ) => { } ;
366+
367+ let contextColumns : any [ ] = [ ] ;
368+ for ( let counter = 0 ; counter < 10 ; counter += 1 ) {
369+ contextColumns = [ ...initialContextColumns , ...( contextColumns || [ ] ) ] ;
370+ }
371+
372+ contextColumns = contextColumns . map ( ( column , index ) => ( {
373+ ...column ,
374+ columnData : { ...( column . columnData || { } ) , columnIndex : index } ,
375+ } ) ) ;
376+
377+ let frozenContextColumns : any [ ] = [ ] ;
378+ for ( let counter = 0 ; counter < 2 ; counter += 1 ) {
379+ frozenContextColumns = [
380+ ...initialContextColumns ,
381+ ...( frozenContextColumns || [ ] ) ,
382+ ] ;
383+ }
384+
385+ frozenContextColumns = frozenContextColumns . map ( ( column , index ) => ( {
386+ ...column ,
387+ columnData : { ...( column . columnData || { } ) , columnIndex : index } ,
388+ } ) ) ;
389+
390+ return (
391+ < DataScrollerContextProvider data = { rows } >
392+ < DataScroller
393+ rowCount = { rowCount }
394+ rowGetter = { rowGetter }
395+ rowHeight = { 50 }
396+ height = { 500 }
397+ headerHeight = { 100 }
398+ width = { 500 }
399+ initialTopRowIndex = { 0 }
400+ groupHeaderHeight = { 30 }
401+ columns = { [
402+ < Group key = "groupa" headerRenderer = { GroupHeaderA } >
403+ { contextColumns . map ( ( column , index ) => (
404+ < Column key = { index } { ...column } />
405+ ) ) }
406+ </ Group > ,
407+ < Group key = "groupb" headerRenderer = { GroupHeaderB } >
408+ { contextColumns . map ( ( column , index ) => (
409+ < Column key = { index } { ...column } />
410+ ) ) }
411+ </ Group > ,
412+ ] }
413+ frozenColumns = { frozenContextColumns . map ( ( column , index ) => (
414+ < Column key = { index } { ...column } />
415+ ) ) }
416+ />
417+ </ DataScrollerContextProvider >
418+ ) ;
419+ } ) ;
0 commit comments