Skip to content

Instantly share code, notes, and snippets.

@ithustle
Created February 8, 2023 10:30
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ithustle/b9ebee1c1ec39a9e43b766790a52032f to your computer and use it in GitHub Desktop.
Save ithustle/b9ebee1c1ec39a9e43b766790a52032f to your computer and use it in GitHub Desktop.
Zustand with typescript
interface iAppState {
refreshPlaylist: number;
refreshHome: number;
userLogged: AccountUserType | undefined | null;
refreshApp: number;
context: ObjectType | null;
suggestedTracks: AlbumType[];
setRefreshApp: () => void;
setContext: (context: ObjectType) => void;
setRefreshPlaylist: () => void;
setRefreshHome: () => void;
setUserLogged: (userLogged: AccountUserType | undefined | null) => void;
setSuggestedTracks: (tracks: AlbumType[]) => void;
updateSuggestedTracks: (track: AlbumType) => void;
}
export const useStoreApp = create<iAppState>((set) => ({
refreshApp: 0,
refreshPlaylist: 0,
refreshHome: 0,
userLogged: null,
context: null,
suggestedTracks: [],
setRefreshPlaylist: () => set(() => ({ refreshPlaylist: Date.now() })),
setRefreshHome: () => set((state) => ({ refreshHome: state.refreshHome + 1 })),
setRefreshApp: () => set((state) => ({ refreshApp: state.refreshApp + 1 })),
setUserLogged: (userLogged: AccountUserType | undefined | null) => set(() => ({ userLogged })),
setSuggestedTracks: (tracks: AlbumType[]) => set(() => ({ suggestedTracks: tracks })),
setContext: (context: ObjectType) => set(() => ({ context })),
updateSuggestedTracks: (track: AlbumType) => set((state) => ({ suggestedTracks: state.suggestedTracks.filter(t => t.musics[0].id !== track.musics[0].id) }))
}));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment