Skip to content

Commit fb99829

Browse files
authored
Merge pull request #4817 from NativeScript/fatme/fix-preview
fix: fix preview from Sidekick
2 parents 4f84379 + 5e93dea commit fb99829

File tree

1 file changed

+12
-13
lines changed

1 file changed

+12
-13
lines changed

lib/controllers/preview-app-controller.ts

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ import { PrepareDataService } from "../services/prepare-data-service";
99
import { PreviewAppLiveSyncEvents } from "../services/livesync/playground/preview-app-constants";
1010

1111
export 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

Comments
 (0)