mirror of
https://github.com/heygen-com/hyperframes.git
synced 2026-09-10 22:20:14 +00:00
fix(studio): add preview audio mute controls (#853)
This commit is contained in:
@@ -16,6 +16,7 @@ describe("usePlayerStore", () => {
|
||||
expect(state.elements).toEqual([]);
|
||||
expect(state.selectedElementId).toBeNull();
|
||||
expect(state.playbackRate).toBe(1);
|
||||
expect(state.audioMuted).toBe(false);
|
||||
expect(state.loopEnabled).toBe(false);
|
||||
expect(state.zoomMode).toBe("fit");
|
||||
expect(state.manualZoomPercent).toBe(100);
|
||||
@@ -62,6 +63,13 @@ describe("usePlayerStore", () => {
|
||||
});
|
||||
});
|
||||
|
||||
describe("setAudioMuted", () => {
|
||||
it("updates audioMuted", () => {
|
||||
usePlayerStore.getState().setAudioMuted(true);
|
||||
expect(usePlayerStore.getState().audioMuted).toBe(true);
|
||||
});
|
||||
});
|
||||
|
||||
describe("setLoopEnabled", () => {
|
||||
it("updates loopEnabled", () => {
|
||||
usePlayerStore.getState().setLoopEnabled(true);
|
||||
@@ -213,9 +221,10 @@ describe("usePlayerStore", () => {
|
||||
expect(state.selectedElementId).toBeNull();
|
||||
});
|
||||
|
||||
it("does not reset playbackRate, loopEnabled, zoomMode, or manualZoomPercent", () => {
|
||||
it("does not reset playbackRate, audioMuted, loopEnabled, zoomMode, or manualZoomPercent", () => {
|
||||
const store = usePlayerStore.getState();
|
||||
store.setPlaybackRate(2);
|
||||
store.setAudioMuted(true);
|
||||
store.setLoopEnabled(true);
|
||||
store.setZoomMode("manual");
|
||||
store.setManualZoomPercent(200);
|
||||
@@ -225,6 +234,7 @@ describe("usePlayerStore", () => {
|
||||
const state = usePlayerStore.getState();
|
||||
// reset() only resets the fields explicitly listed in the reset function
|
||||
expect(state.playbackRate).toBe(2);
|
||||
expect(state.audioMuted).toBe(true);
|
||||
expect(state.loopEnabled).toBe(true);
|
||||
expect(state.zoomMode).toBe("manual");
|
||||
expect(state.manualZoomPercent).toBe(200);
|
||||
|
||||
@@ -38,6 +38,7 @@ interface PlayerState {
|
||||
elements: TimelineElement[];
|
||||
selectedElementId: string | null;
|
||||
playbackRate: number;
|
||||
audioMuted: boolean;
|
||||
loopEnabled: boolean;
|
||||
/** Timeline zoom: 'fit' auto-scales to viewport, 'manual' uses manualZoomPercent */
|
||||
zoomMode: ZoomMode;
|
||||
@@ -52,6 +53,7 @@ interface PlayerState {
|
||||
setCurrentTime: (time: number) => void;
|
||||
setDuration: (duration: number) => void;
|
||||
setPlaybackRate: (rate: number) => void;
|
||||
setAudioMuted: (muted: boolean) => void;
|
||||
setLoopEnabled: (enabled: boolean) => void;
|
||||
setTimelineReady: (ready: boolean) => void;
|
||||
setElements: (elements: TimelineElement[]) => void;
|
||||
@@ -96,6 +98,7 @@ export const usePlayerStore = create<PlayerState>((set) => ({
|
||||
elements: [],
|
||||
selectedElementId: null,
|
||||
playbackRate: readStudioUiPreferences().playbackRate ?? 1,
|
||||
audioMuted: readStudioUiPreferences().audioMuted ?? false,
|
||||
loopEnabled: false,
|
||||
zoomMode: "fit",
|
||||
manualZoomPercent: 100,
|
||||
@@ -111,6 +114,10 @@ export const usePlayerStore = create<PlayerState>((set) => ({
|
||||
writeStudioUiPreferences({ playbackRate: rate });
|
||||
set({ playbackRate: rate });
|
||||
},
|
||||
setAudioMuted: (muted) => {
|
||||
writeStudioUiPreferences({ audioMuted: muted });
|
||||
set({ audioMuted: muted });
|
||||
},
|
||||
setLoopEnabled: (enabled) => set({ loopEnabled: enabled }),
|
||||
setZoomMode: (mode) => set({ zoomMode: mode }),
|
||||
setInPoint: (time) =>
|
||||
@@ -144,7 +151,7 @@ export const usePlayerStore = create<PlayerState>((set) => ({
|
||||
),
|
||||
})),
|
||||
// Resets project-specific state when switching compositions.
|
||||
// playbackRate, loopEnabled, zoomMode, and manualZoomPercent are intentionally preserved
|
||||
// playbackRate, audioMuted, loopEnabled, zoomMode, and manualZoomPercent are intentionally preserved
|
||||
// because they are user preferences that should survive project switches.
|
||||
reset: () =>
|
||||
set({
|
||||
|
||||
Reference in New Issue
Block a user