mirror of
https://github.com/duckietm/Nitro-V3.git
synced 2026-06-19 15:06:20 +00:00
e610cfeef4
Move favourite room ids out of the useBetween navigator store into a dedicated Zustand store. useNavigatorFavourite(roomId) subscribes only to s.ids.has(roomId) (a boolean), so a FavouriteChangedEvent for one room no longer re-renders every favourite-aware view. apply() returns the same state reference when membership is unchanged.
26 lines
768 B
TypeScript
26 lines
768 B
TypeScript
import { createNitroStore } from '../../state/createNitroStore';
|
|
|
|
export type NavigatorFavouritesState = {
|
|
ids: Set<number>;
|
|
};
|
|
|
|
export type NavigatorFavouritesActions = {
|
|
setAll(roomIds: number[]): void;
|
|
apply(roomId: number, added: boolean): void;
|
|
};
|
|
|
|
export const useNavigatorFavouritesStore = createNitroStore<NavigatorFavouritesState & NavigatorFavouritesActions>()((set) => ({
|
|
ids: new Set<number>(),
|
|
|
|
setAll: (roomIds) => set({ ids: new Set(roomIds.map(Number)) }),
|
|
apply: (roomId, added) => set((s) =>
|
|
{
|
|
const id = Number(roomId);
|
|
if(added ? s.ids.has(id) : !s.ids.has(id)) return s;
|
|
const ids = new Set(s.ids);
|
|
if(added) ids.add(id);
|
|
else ids.delete(id);
|
|
return { ids };
|
|
})
|
|
}));
|