mirror of
https://github.com/jeffvli/feishin.git
synced 2026-05-17 06:00:20 +02:00
move player timestamp to separate store
- for performance related issue
This commit is contained in:
@@ -0,0 +1,44 @@
|
||||
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);
|
||||
};
|
||||
Reference in New Issue
Block a user