@@ -713,9 +713,7 @@ export const SimpleEditable = () => {
713713} ;
714714
715715export function GroupHeaderActionClick ( ) {
716- const cols = [
717- { title : "Col1" , width : 100 , grow : 1 , group : "Group" } ,
718- ] ;
716+ const cols = [ { title : "Col1" , width : 100 , grow : 1 , group : "Group" } ] ;
719717
720718 const [ clickCount , setClickCount ] = useState ( 0 ) ;
721719
@@ -727,16 +725,72 @@ export function GroupHeaderActionClick() {
727725 height = { 500 }
728726 rows = { 0 }
729727 columns = { cols }
730- getCellContent = { ( ) => ( { kind : GridCellKind . Text , data : '' , displayData : '' , allowOverlay : false } ) }
731- getGroupDetails = { ( name ) => ( {
732- name,
733- actions : [ {
734- icon : 'headerString' ,
735- title : "Action" ,
736- onClick : ( e ) => setClickCount ( c => c + 1 ) ,
737- } ]
728+ getCellContent = { ( ) => ( { kind : GridCellKind . Text , data : "" , displayData : "" , allowOverlay : false } ) }
729+ getGroupDetails = { name => ( {
730+ name,
731+ actions : [
732+ {
733+ icon : "headerString" ,
734+ title : "Action" ,
735+ onClick : _e => setClickCount ( c => c + 1 ) ,
736+ } ,
737+ ] ,
738738 } ) }
739739 />
740740 </ div >
741741 ) ;
742742}
743+
744+ export function DeleteColumnsViaOnDelete ( ) {
745+ const [ headers , setHeaders ] = useState < string [ ] > ( [ "col-a" , "col-b" ] ) ;
746+
747+ const dynColumns : GridColumn [ ] = headers . map ( value => ( {
748+ id : value ,
749+ title : value ,
750+ width : 100 ,
751+ } ) ) ;
752+
753+ const renderCell = React . useCallback ( ( ) : GridCell => {
754+ return { kind : GridCellKind . Loading , allowOverlay : false } ;
755+ } , [ ] ) ;
756+
757+ const addColumn = ( ) => {
758+ const str = Math . random ( ) . toString ( 36 ) . slice ( 2 , 8 ) ;
759+ setHeaders ( prev => [ ...prev , str ] ) ;
760+ } ;
761+
762+ const removeColumns = ( indices : number [ ] ) => {
763+ setHeaders ( prev => prev . filter ( ( _ , i ) => ! indices . includes ( i ) ) ) ;
764+ } ;
765+
766+ const [ selection , setSelection ] = useState < GridSelection | undefined > ( undefined ) ;
767+
768+ const onDelete = ( sel : GridSelection ) => {
769+ if ( sel . columns . length > 0 ) {
770+ setSelection ( undefined ) ;
771+ removeColumns ( sel . columns . toArray ( ) ) ;
772+ return false ;
773+ }
774+ return true ;
775+ } ;
776+
777+ return (
778+ < div style = { { display : "flex" , flexDirection : "column" , height : "100%" } } >
779+ < div style = { { marginBottom : 8 } } >
780+ < button onClick = { addColumn } > Add</ button >
781+ </ div >
782+ < div style = { { flex : 1 , position : "relative" } } >
783+ < DataEditor
784+ width = "100%"
785+ height = "100%"
786+ columns = { dynColumns }
787+ rows = { 0 }
788+ getCellContent = { renderCell }
789+ gridSelection = { selection }
790+ onGridSelectionChange = { setSelection }
791+ onDelete = { onDelete }
792+ />
793+ </ div >
794+ </ div >
795+ ) ;
796+ }
0 commit comments