Files
feishin/src/renderer/store/timestamp.store.ts
T
jeffvli 4451389b6a move player timestamp to separate store
- for performance related issue
2025-11-29 19:33:32 -08:00

45 lines
1.2 KiB
TypeScript

import { subscribeWithSelector } from 'zustand/middleware';
import { createWithEqualityFn } from 'zustand/traditional';
interface TimestampState {
setTimestamp: (timestamp: number) => void;
timestamp: number;
}
export const useTimestampStoreBase = createWithEqualityFn<TimestampState>()(
subscribeWithSelector((set) => ({
setTimestamp: (timestamp: number) => {
set({ timestamp });
},
timestamp: 0,
})),
);
export const subscribePlayerProgress = (
onChange: (properties: { timestamp: number }, prev: { timestamp: number }) => void,
) => {
return useTimestampStoreBase.subscribe(
(state) => state.timestamp,
(timestamp, prevTimestamp) => {
onChange({ timestamp }, { timestamp: prevTimestamp });
},
{
equalityFn: (a, b) => {
return a === b;
},
},
);
};
export const usePlayerProgress = () => {
return useTimestampStoreBase((state) => state.timestamp);
};
export const usePlayerTimestamp = () => {
return useTimestampStoreBase((state) => state.timestamp);
};
export const setTimestamp = (timestamp: number) => {
useTimestampStoreBase.getState().setTimestamp(timestamp);
};