fix(core): sync playback feature state on seeked event (#1000)

This commit is contained in:
rahim
2026-03-18 00:56:26 -07:00
committed by GitHub
parent 59bbf6c209
commit 12f582ec1a
2 changed files with 16 additions and 0 deletions
@@ -37,5 +37,6 @@ export const playbackFeature = definePlayerFeature({
listen(media, 'ended', sync, { signal });
listen(media, 'playing', sync, { signal });
listen(media, 'waiting', sync, { signal });
listen(media, 'seeked', sync, { signal });
},
});
@@ -104,6 +104,21 @@ describe('playbackFeature', () => {
expect(store.state.ended).toBe(true);
});
it('clears ended state on seeked event', () => {
const video = createMockVideo({ ended: true });
const store = createStore<PlayerTarget>()(playbackFeature);
store.attach({ media: video, container: null });
expect(store.state.ended).toBe(true);
// Simulate seeking: browser clears ended when user seeks
Object.defineProperty(video, 'ended', { value: false, writable: false, configurable: true });
video.dispatchEvent(new Event('seeked'));
expect(store.state.ended).toBe(false);
});
it('stops listening when store is destroyed', () => {
const video = createMockVideo({});