11import { Panel , Widget } from '@lumino/widgets' ;
22import { Toolbar , ToolbarButton , closeIcon } from '@jupyterlab/ui-components' ;
3+ import { Message } from '@lumino/messaging' ;
34import { ISignal , Signal } from '@lumino/signaling' ;
5+ import { DATASET_MIME } from '../types' ;
46
57export class GridStackItem extends Panel {
68 constructor ( options : GridStackItem . IOptions ) {
@@ -10,12 +12,13 @@ export class GridStackItem extends Panel {
1012 this . addClass ( 'grid-stack-item' ) ;
1113 this . addClass ( 'glue-item' ) ;
1214
13- const { cellIdentity, cell, itemTitle = '' , pos, size } = options ;
15+ const { cellIdentity, cell, itemTitle = '' , pos, size, tabName } = options ;
1416 this . _cellOutput = cell ;
1517 this . cellIdentity = cellIdentity ;
1618 this . _pos = pos ;
1719 this . _size = size ;
1820 this . _title = itemTitle ;
21+ this . _tabName = tabName ;
1922
2023 const content = new Panel ( ) ;
2124 content . addClass ( 'grid-stack-item-content' ) ;
@@ -63,10 +66,35 @@ export class GridStackItem extends Panel {
6366 this . _size = value ;
6467 }
6568
69+ get tabName ( ) : string {
70+ return this . _tabName ;
71+ }
72+
73+ set tabName ( value : string ) {
74+ this . _tabName = value ;
75+ }
6676 get changed ( ) : ISignal < GridStackItem , GridStackItem . IChange > {
6777 return this . _changed ;
6878 }
6979
80+ protected onAfterAttach ( msg : Message ) : void {
81+ super . onAfterAttach ( msg ) ;
82+ this . node . addEventListener ( 'drop' , this . _ondrop . bind ( this ) ) ;
83+ }
84+
85+ protected onBeforeDetach ( msg : Message ) : void {
86+ this . node . removeEventListener ( 'drop' , this . _ondrop . bind ( this ) ) ;
87+ super . onBeforeDetach ( msg ) ;
88+ }
89+
90+ private async _ondrop ( event : DragEvent ) {
91+ const datasetId = event . dataTransfer ?. getData ( DATASET_MIME ) ;
92+ if ( ! datasetId ) {
93+ return ;
94+ }
95+ this . _changed . emit ( { action : 'layer' , dataLayer : datasetId } ) ;
96+ }
97+
7098 private _createToolbar ( itemTitle : string ) : Toolbar {
7199 const toolbar = new Toolbar ( ) ;
72100 toolbar . node . addEventListener ( 'click' , ( ) => {
@@ -97,7 +125,7 @@ export class GridStackItem extends Panel {
97125 private _size : number [ ] ;
98126 private _title : string ;
99127 private _cellOutput : Widget ;
100-
128+ private _tabName : string ;
101129 private _changed : Signal < GridStackItem , GridStackItem . IChange > ;
102130}
103131
@@ -108,9 +136,11 @@ export namespace GridStackItem {
108136 itemTitle ?: string ;
109137 pos : number [ ] ;
110138 size : number [ ] ;
139+ tabName : string ;
111140 }
112141
113142 export interface IChange {
114- action : 'close' | 'lock' | 'edit' ;
143+ action : 'close' | 'lock' | 'edit' | 'layer' ;
144+ dataLayer ?: string ;
115145 }
116146}
0 commit comments