useGlobalNoticeStore.ts 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. import { NoticeRep, updateGlobalNoticeApi } from "@/api/home";
  2. import { Result } from "@/types";
  3. import { create } from "zustand";
  4. interface State {
  5. sourceMap: Map<number, NoticeRep>;
  6. unread: number; // 未读数量
  7. userUnred: number; // 未读数量
  8. notices: NoticeRep[]; // 总数据
  9. promotion_count: number;
  10. }
  11. interface Action {
  12. setSourceMap: (key: number, value: NoticeRep) => void;
  13. hasValue: (key: number) => boolean;
  14. setNotices: (notices: NoticeRep[], unread: number) => void;
  15. setReadNotices: (id: number) => Promise<Result<any>>;
  16. setUserUnread: (value: number) => void;
  17. setPromotionCount: (value: number) => void;
  18. }
  19. const initialState: State = {
  20. sourceMap: new Map(),
  21. unread: 0,
  22. userUnred: 0,
  23. notices: [],
  24. promotion_count: 0,
  25. };
  26. export const useGlobalNoticeStore = create<State & Action>()((set, get) => {
  27. return {
  28. ...initialState,
  29. setSourceMap: (key, value) =>
  30. set((state) => {
  31. const newMap = new Map(state.sourceMap);
  32. newMap.set(key, value);
  33. return { sourceMap: newMap };
  34. }),
  35. hasValue: (key) => get().sourceMap.has(key),
  36. setNotices: (notices, unread: number) => set((state) => ({ ...state, notices, unread })),
  37. setUserUnread: (value: number) => set((state) => ({ ...state, userUnred: value })),
  38. setPromotionCount: (value: number) =>
  39. set((state) => ({ ...state, promotion_count: value })),
  40. setReadNotices: (id: number) => {
  41. return updateGlobalNoticeApi(id);
  42. },
  43. reset: () => set(initialState),
  44. };
  45. });