close #320 use emitter handler to catch before load state
This commit is contained in:
@@ -403,7 +403,7 @@ export class Replayer {
|
|||||||
|
|
||||||
private rebuildFullSnapshot(
|
private rebuildFullSnapshot(
|
||||||
event: fullSnapshotEvent & { timestamp: number },
|
event: fullSnapshotEvent & { timestamp: number },
|
||||||
isSync: boolean = false
|
isSync: boolean = false,
|
||||||
) {
|
) {
|
||||||
if (!this.iframe.contentDocument) {
|
if (!this.iframe.contentDocument) {
|
||||||
return console.warn('Looks like your replayer has been destroyed.');
|
return console.warn('Looks like your replayer has been destroyed.');
|
||||||
@@ -426,7 +426,9 @@ export class Replayer {
|
|||||||
(styleEl.sheet! as CSSStyleSheet).insertRule(injectStylesRules[idx], idx);
|
(styleEl.sheet! as CSSStyleSheet).insertRule(injectStylesRules[idx], idx);
|
||||||
}
|
}
|
||||||
this.emitter.emit(ReplayerEvents.FullsnapshotRebuilded, event);
|
this.emitter.emit(ReplayerEvents.FullsnapshotRebuilded, event);
|
||||||
if (!isSync) this.waitForStylesheetLoad();
|
if (!isSync) {
|
||||||
|
this.waitForStylesheetLoad();
|
||||||
|
}
|
||||||
if (this.config.UNSAFE_replayCanvas) {
|
if (this.config.UNSAFE_replayCanvas) {
|
||||||
this.preloadAllImages();
|
this.preloadAllImages();
|
||||||
}
|
}
|
||||||
@@ -441,9 +443,15 @@ export class Replayer {
|
|||||||
const unloadSheets: Set<HTMLLinkElement> = new Set();
|
const unloadSheets: Set<HTMLLinkElement> = new Set();
|
||||||
let timer: number;
|
let timer: number;
|
||||||
let beforeLoadState = this.service.state;
|
let beforeLoadState = this.service.state;
|
||||||
const { unsubscribe } = this.service.subscribe((state) => {
|
const stateHandler = () => {
|
||||||
beforeLoadState = state;
|
beforeLoadState = this.service.state;
|
||||||
});
|
};
|
||||||
|
this.emitter.on(ReplayerEvents.Start, stateHandler);
|
||||||
|
this.emitter.on(ReplayerEvents.Pause, stateHandler);
|
||||||
|
const unsubscribe = () => {
|
||||||
|
this.emitter.off(ReplayerEvents.Start, stateHandler);
|
||||||
|
this.emitter.off(ReplayerEvents.Pause, stateHandler);
|
||||||
|
};
|
||||||
head
|
head
|
||||||
.querySelectorAll('link[rel="stylesheet"]')
|
.querySelectorAll('link[rel="stylesheet"]')
|
||||||
.forEach((css: HTMLLinkElement) => {
|
.forEach((css: HTMLLinkElement) => {
|
||||||
@@ -487,9 +495,15 @@ export class Replayer {
|
|||||||
*/
|
*/
|
||||||
private preloadAllImages() {
|
private preloadAllImages() {
|
||||||
let beforeLoadState = this.service.state;
|
let beforeLoadState = this.service.state;
|
||||||
const { unsubscribe } = this.service.subscribe((state) => {
|
const stateHandler = () => {
|
||||||
beforeLoadState = state;
|
beforeLoadState = this.service.state;
|
||||||
});
|
};
|
||||||
|
this.emitter.on(ReplayerEvents.Start, stateHandler);
|
||||||
|
this.emitter.on(ReplayerEvents.Pause, stateHandler);
|
||||||
|
const unsubscribe = () => {
|
||||||
|
this.emitter.off(ReplayerEvents.Start, stateHandler);
|
||||||
|
this.emitter.off(ReplayerEvents.Pause, stateHandler);
|
||||||
|
};
|
||||||
let count = 0;
|
let count = 0;
|
||||||
let resolved = 0;
|
let resolved = 0;
|
||||||
for (const event of this.service.state.context.events) {
|
for (const event of this.service.state.context.events) {
|
||||||
|
|||||||
@@ -116,8 +116,8 @@ export function createPlayerService(
|
|||||||
},
|
},
|
||||||
TO_LIVE: {
|
TO_LIVE: {
|
||||||
target: 'live',
|
target: 'live',
|
||||||
actions: ['startLive']
|
actions: ['startLive'],
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
live: {
|
live: {
|
||||||
|
|||||||
@@ -409,6 +409,7 @@ export type Handler = (event?: unknown) => void;
|
|||||||
export type Emitter = {
|
export type Emitter = {
|
||||||
on(type: string, handler: Handler): void;
|
on(type: string, handler: Handler): void;
|
||||||
emit(type: string, event?: unknown): void;
|
emit(type: string, event?: unknown): void;
|
||||||
|
off(type: string, handler: Handler): void;
|
||||||
};
|
};
|
||||||
|
|
||||||
export type Arguments<T> = T extends (...payload: infer U) => unknown
|
export type Arguments<T> = T extends (...payload: infer U) => unknown
|
||||||
|
|||||||
Reference in New Issue
Block a user