Files
cunkebao_v3/Touchkebao/src/store/module/weChat/message.ts

102 lines
3.0 KiB
TypeScript
Raw Normal View History

import { create } from "zustand";
import { persist } from "zustand/middleware";
import { Message, MessageState } from "./message.data";
/**
* Store
*
* state + IndexedDB
*/
export const useMessageStore = create<MessageState>()(
persist(
(set, get) => ({
// ==================== 新增状态管理 ====================
loading: false,
refreshing: false,
refreshTrigger: 0,
lastRefreshTime: null,
setLoading: (loading: boolean) => set({ loading }),
setRefreshing: (refreshing: boolean) => set({ refreshing }),
triggerRefresh: () =>
set({
refreshTrigger: get().refreshTrigger + 1,
lastRefreshTime: new Date().toISOString(),
}),
// ==================== 保留原有接口(向后兼容) ====================
messageList: [],
currentMessage: null,
updateMessageList: (messageList: Message[]) => set({ messageList }),
updateCurrentMessage: (message: Message) =>
set({ currentMessage: message }),
updateMessageStatus: (messageId: number, status: string) =>
set({
messageList: get().messageList.map(message =>
message.id === messageId ? { ...message, status } : message,
),
}),
}),
{
name: "message-storage",
partialize: state => ({
// 只持久化必要的状态,不持久化数据
lastRefreshTime: state.lastRefreshTime,
// 保留原有持久化字段(向后兼容)
messageList: [],
currentMessage: null,
}),
},
),
);
/**
*
* @param message
* @returns void
*/
export const updateCurrentMessage = (message: Message) =>
useMessageStore.getState().updateCurrentMessage(message);
/**
*
* @param messageList
* @returns void
*/
export const updateMessageList = (messageList: Message[]) =>
useMessageStore.getState().updateMessageList(messageList);
/**
*
* @returns Message | null
*/
export const getCurrentMessage = () =>
useMessageStore.getState().currentMessage;
/**
*
* @param messageId ID
* @param status
* @returns void
*/
export const updateMessageStatus = (messageId: number, status: string) =>
useMessageStore.getState().updateMessageStatus(messageId, status);
// ==================== 新增导出函数 ====================
/**
*
* @param loading
*/
export const setLoading = (loading: boolean) =>
useMessageStore.getState().setLoading(loading);
/**
*
* @param refreshing
*/
export const setRefreshing = (refreshing: boolean) =>
useMessageStore.getState().setRefreshing(refreshing);
/**
*
*/
export const triggerRefresh = () => useMessageStore.getState().triggerRefresh();