@@ -12,30 +12,45 @@ export interface ICellState {
12
12
source ?: string ;
13
13
outputsCount ?: number ;
14
14
adapter ?: CellAdapter ;
15
+ isKernelSessionAvailable ?: boolean ; // Individual, for cell
15
16
}
16
17
17
18
export interface ICellsState {
18
19
cells : Map < string , ICellState > ;
19
- kernelAvailable : boolean ; // Currently shared between all cells
20
+ areAllKernelSessionsReady : boolean ; // Control the state for all cells
20
21
}
21
22
22
23
export type CellState = ICellsState & {
23
24
setCells : ( cells : Map < string , ICellState > ) => void ;
24
25
setSource : ( id : string , source : string ) => void ;
25
26
setOutputsCount : ( id : string , outputsCount : number ) => void ;
26
- setKernelAvailable : ( kernelAvailable : boolean ) => void ;
27
+ setIsKernelSessionAvailable : ( id : string , kernelAvailable : boolean ) => void ;
27
28
setAdapter : ( id : string , adapter ?: CellAdapter ) => void ;
28
29
getAdapter : ( id : string ) => CellAdapter | undefined ;
29
30
getSource : ( id : string ) => string | undefined ;
30
31
getOutputsCount : ( id : string ) => number | undefined ;
32
+ getIsKernelSessionAvailable : ( id : string ) => boolean | undefined ;
31
33
execute : ( id ?: string ) => void ;
32
34
} ;
33
35
36
+ /**
37
+ * Iterate over all cells map and check if all cells/sessions are ready
38
+ */
39
+ const areAllKernelSessionsAvailable = ( cells : Map < string , ICellState > ) : boolean => {
40
+ for ( const cell of cells . values ( ) ) {
41
+ if ( ! cell . isKernelSessionAvailable ) {
42
+ return false ;
43
+ }
44
+ }
45
+ return true ;
46
+ } ;
47
+
34
48
export const cellStore = createStore < CellState > ( ( set , get ) => ( {
35
49
cells : new Map < string , ICellState > ( ) ,
36
50
source : '' ,
37
51
outputsCount : 0 ,
38
- kernelAvailable : false ,
52
+ isKernelSessionAvailable : false ,
53
+ areAllKernelSessionsReady : false ,
39
54
adapter : undefined ,
40
55
setCells : ( cells : Map < string , ICellState > ) => set ( ( cell : CellState ) => ( { cells } ) ) ,
41
56
@@ -59,7 +74,17 @@ export const cellStore = createStore<CellState>((set, get) => ({
59
74
}
60
75
set ( ( state : CellState ) => ( { cells } ) )
61
76
} ,
62
- setKernelAvailable : ( kernelAvailable : boolean ) => set ( ( state : CellState ) => ( { kernelAvailable } ) ) ,
77
+ setIsKernelSessionAvailable : ( id : string , isKernelSessionAvailable : boolean ) => {
78
+ const cells = get ( ) . cells ;
79
+ const cell = cells . get ( id ) ;
80
+ if ( cell ) {
81
+ cell . isKernelSessionAvailable = isKernelSessionAvailable ;
82
+ } else {
83
+ cells . set ( id , { isKernelSessionAvailable} ) ;
84
+ }
85
+ const areAllKernelSessionsReady = areAllKernelSessionsAvailable ( cells ) ;
86
+ set ( ( cell : CellState ) => ( { cells, areAllKernelSessionsReady } ) ) ;
87
+ } ,
63
88
setAdapter : ( id : string , adapter ?: CellAdapter ) => {
64
89
const cells = get ( ) . cells ;
65
90
const cell = cells . get ( id ) ;
@@ -79,6 +104,9 @@ export const cellStore = createStore<CellState>((set, get) => ({
79
104
getOutputsCount : ( id : string ) : number | undefined => {
80
105
return get ( ) . cells . get ( id ) ?. outputsCount ;
81
106
} ,
107
+ getIsKernelSessionAvailable : ( id : string ) : boolean | undefined => {
108
+ return get ( ) . cells . get ( id ) ?. isKernelSessionAvailable ;
109
+ } ,
82
110
execute : ( id : string ) => {
83
111
const cells = get ( ) . cells ;
84
112
const cell = cells . get ( id ) ;
0 commit comments