@@ -94,6 +94,7 @@ export enum UpdateReasons {
9494 SPLIT = 'split' ,
9595 FITTED_CANVAS = 'fitted_canvas' ,
9696 SHAPES_CONFIG_UPDATED = 'shapes_config_updated' ,
97+ DATA_FAILED = 'data_failed' ,
9798}
9899
99100export enum Mode {
@@ -126,6 +127,7 @@ export interface Canvas3dDataModel {
126127 frameData : any ;
127128 objectStates : ObjectState [ ] ;
128129 } | null ;
130+ exception : Error | null ;
129131}
130132
131133export interface Canvas3dModel {
@@ -135,6 +137,7 @@ export interface Canvas3dModel {
135137 readonly groupData : GroupData ;
136138 readonly mergeData : MergeData ;
137139 readonly objects : ObjectState [ ] ;
140+ readonly exception : Error | null ;
138141 setup ( frameData : any , objectStates : ObjectState [ ] ) : void ;
139142 isAbleToChangeFrame ( ) : boolean ;
140143 draw ( drawData : DrawData ) : void ;
@@ -202,6 +205,7 @@ export class Canvas3dModelImpl extends MasterImpl implements Canvas3dModel {
202205 } ,
203206 isFrameUpdating : false ,
204207 nextSetupRequest : null ,
208+ exception : null ,
205209 } ;
206210 }
207211
@@ -262,7 +266,12 @@ export class Canvas3dModelImpl extends MasterImpl implements Canvas3dModel {
262266 this . data . isFrameUpdating = false ;
263267 // don't notify when the frame is no longer needed
264268 if ( typeof exception !== 'number' || exception === this . data . imageID ) {
265- throw exception ;
269+ if ( exception instanceof Error ) {
270+ this . data . exception = exception ;
271+ } else {
272+ this . data . exception = new Error ( 'Unknown error occurred when fetching image data' ) ;
273+ }
274+ this . notify ( UpdateReasons . DATA_FAILED ) ;
266275 }
267276 } ) ;
268277 }
@@ -436,5 +445,9 @@ export class Canvas3dModelImpl extends MasterImpl implements Canvas3dModel {
436445 return this . data . imageIsDeleted ;
437446 }
438447
448+ public get exception ( ) : Error | null {
449+ return this . data . exception ;
450+ }
451+
439452 public destroy ( ) : void { }
440453}
0 commit comments