1
1
import { Panel , Widget } from '@lumino/widgets' ;
2
2
import { Toolbar , ToolbarButton , closeIcon } from '@jupyterlab/ui-components' ;
3
+ import { Message } from '@lumino/messaging' ;
3
4
import { ISignal , Signal } from '@lumino/signaling' ;
5
+ import { DATASET_MIME } from '../types' ;
4
6
5
7
export class GridStackItem extends Panel {
6
8
constructor ( options : GridStackItem . IOptions ) {
@@ -10,12 +12,13 @@ export class GridStackItem extends Panel {
10
12
this . addClass ( 'grid-stack-item' ) ;
11
13
this . addClass ( 'glue-item' ) ;
12
14
13
- const { cellIdentity, cell, itemTitle = '' , pos, size } = options ;
15
+ const { cellIdentity, cell, itemTitle = '' , pos, size, tabName } = options ;
14
16
this . _cellOutput = cell ;
15
17
this . cellIdentity = cellIdentity ;
16
18
this . _pos = pos ;
17
19
this . _size = size ;
18
20
this . _title = itemTitle ;
21
+ this . _tabName = tabName ;
19
22
20
23
const content = new Panel ( ) ;
21
24
content . addClass ( 'grid-stack-item-content' ) ;
@@ -63,10 +66,35 @@ export class GridStackItem extends Panel {
63
66
this . _size = value ;
64
67
}
65
68
69
+ get tabName ( ) : string {
70
+ return this . _tabName ;
71
+ }
72
+
73
+ set tabName ( value : string ) {
74
+ this . _tabName = value ;
75
+ }
66
76
get changed ( ) : ISignal < GridStackItem , GridStackItem . IChange > {
67
77
return this . _changed ;
68
78
}
69
79
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
+
70
98
private _createToolbar ( itemTitle : string ) : Toolbar {
71
99
const toolbar = new Toolbar ( ) ;
72
100
toolbar . node . addEventListener ( 'click' , ( ) => {
@@ -97,7 +125,7 @@ export class GridStackItem extends Panel {
97
125
private _size : number [ ] ;
98
126
private _title : string ;
99
127
private _cellOutput : Widget ;
100
-
128
+ private _tabName : string ;
101
129
private _changed : Signal < GridStackItem , GridStackItem . IChange > ;
102
130
}
103
131
@@ -108,9 +136,11 @@ export namespace GridStackItem {
108
136
itemTitle ?: string ;
109
137
pos : number [ ] ;
110
138
size : number [ ] ;
139
+ tabName : string ;
111
140
}
112
141
113
142
export interface IChange {
114
- action : 'close' | 'lock' | 'edit' ;
143
+ action : 'close' | 'lock' | 'edit' | 'layer' ;
144
+ dataLayer ?: string ;
115
145
}
116
146
}
0 commit comments