@@ -9,8 +9,8 @@ import { PrepareDataService } from "../services/prepare-data-service";
99import { PreviewAppLiveSyncEvents } from "../services/livesync/playground/preview-app-constants" ;
1010
1111export class PreviewAppController extends EventEmitter implements IPreviewAppController {
12+ private prepareReadyEventHandler : any = null ;
1213 private deviceInitializationPromise : IDictionary < boolean > = { } ;
13- private platformPrepareHandlers : IDictionary < boolean > = { } ;
1414 private promise = Promise . resolve ( ) ;
1515
1616 constructor (
@@ -41,6 +41,10 @@ export class PreviewAppController extends EventEmitter implements IPreviewAppCon
4141 public async stopPreview ( ) : Promise < void > {
4242 this . $previewSdkService . stop ( ) ;
4343 this . $previewDevicesService . updateConnectedDevices ( [ ] ) ;
44+ if ( this . prepareReadyEventHandler ) {
45+ this . removeListener ( PREPARE_READY_EVENT_NAME , this . prepareReadyEventHandler ) ;
46+ this . prepareReadyEventHandler = null ;
47+ }
4448 }
4549
4650 private async previewCore ( data : IPreviewAppLiveSyncData ) : Promise < void > {
@@ -76,17 +80,11 @@ export class PreviewAppController extends EventEmitter implements IPreviewAppCon
7680
7781 await this . $previewAppPluginsService . comparePluginsOnDevice ( data , device ) ;
7882
79- if ( ! this . platformPrepareHandlers [ device . platform ] ) {
80- // TODO: Unset this property once the preview operation for this platform is stopped
81- this . platformPrepareHandlers [ device . platform ] = true ;
82-
83- // TODO: Remove the handler once the preview operation for this platform is stopped
84- this . $prepareController . on ( PREPARE_READY_EVENT_NAME , async ( currentPrepareData : IFilesChangeEventData ) => {
85- if ( currentPrepareData . platform . toLowerCase ( ) === device . platform . toLowerCase ( ) ) {
86- await this . handlePrepareReadyEvent ( data , currentPrepareData . hmrData , currentPrepareData . files , device . platform ) ;
87- }
88- } ) ;
89-
83+ if ( ! this . prepareReadyEventHandler ) {
84+ this . prepareReadyEventHandler = async ( currentPrepareData : IFilesChangeEventData ) => {
85+ await this . handlePrepareReadyEvent ( data , currentPrepareData ) ;
86+ } ;
87+ this . $prepareController . on ( PREPARE_READY_EVENT_NAME , this . prepareReadyEventHandler . bind ( this ) ) ;
9088 }
9189
9290 data . env = data . env || { } ;
@@ -115,9 +113,10 @@ export class PreviewAppController extends EventEmitter implements IPreviewAppCon
115113 }
116114
117115 @performanceLog ( )
118- private async handlePrepareReadyEvent ( data : IPreviewAppLiveSyncData , hmrData : IPlatformHmrData , files : string [ ] , platform : string ) {
116+ private async handlePrepareReadyEvent ( data : IPreviewAppLiveSyncData , currentPrepareData : IFilesChangeEventData ) {
119117 await this . promise
120118 . then ( async ( ) => {
119+ const { hmrData, files, platform } = currentPrepareData ;
121120 const platformHmrData = _ . cloneDeep ( hmrData ) ;
122121
123122 this . promise = this . syncFilesForPlatformSafe ( data , { filesToSync : files } , platform ) ;
0 commit comments