Files
cunkebao_v3/Touchkebao/src/hooks/weChat/useWeChatSelectors.ts

130 lines
4.0 KiB
TypeScript
Raw Normal View History

2025-12-10 11:58:47 +08:00
import { useWeChatStore } from "@/store/module/weChat/weChat";
import { useShallow } from "zustand/react/shallow";
import { useMemo } from "react";
import type { WeChatState } from "@/store/module/weChat/weChat.data";
/**
* selector
* 使 useShallow shallow
* 使 useMemo selector
*/
export const useWeChatSelectors = () => {
const selector = useMemo(
() => (state: WeChatState) => ({
// 消息相关
currentMessages: state.currentMessages,
currentMessagesHasMore: state.currentMessagesHasMore,
messagesLoading: state.messagesLoading,
isLoadingData: state.isLoadingData,
// 联系人相关
currentContract: state.currentContract,
// UI 状态
showCheckbox: state.showCheckbox,
EnterModule: state.EnterModule,
showChatRecordModel: state.showChatRecordModel,
// AI 相关
isLoadingAiChat: state.isLoadingAiChat,
quoteMessageContent: state.quoteMessageContent,
aiQuoteMessageContent: state.aiQuoteMessageContent,
// 选中记录
selectedChatRecords: state.selectedChatRecords,
}),
[],
);
return useWeChatStore(useShallow(selector));
};
/**
* selector
* 使 useShallow shallow getSnapshot
* 使 useMemo selector
*/
export const useMessageSelectors = (): Pick<
WeChatState,
| "currentMessages"
| "currentMessagesHasMore"
| "messagesLoading"
| "isLoadingData"
> => {
const selector = useMemo(
() => (state: WeChatState) => ({
currentMessages: state.currentMessages,
currentMessagesHasMore: state.currentMessagesHasMore,
messagesLoading: state.messagesLoading,
isLoadingData: state.isLoadingData,
}),
[],
);
return useWeChatStore(useShallow(selector));
};
/**
* UI selector
* 使 useShallow shallow getSnapshot
* 使 useMemo selector
*/
export const useUIStateSelectors = (): Pick<
WeChatState,
"showCheckbox" | "EnterModule" | "showChatRecordModel"
> => {
const selector = useMemo(
() => (state: WeChatState) => ({
showCheckbox: state.showCheckbox,
EnterModule: state.EnterModule,
showChatRecordModel: state.showChatRecordModel,
}),
[],
);
return useWeChatStore(useShallow(selector));
};
/**
* AI selector
* 使 useShallow shallow getSnapshot
* 使 useMemo selector
*/
export const useAISelectors = (): Pick<
WeChatState,
"isLoadingAiChat" | "quoteMessageContent" | "aiQuoteMessageContent"
> => {
const selector = useMemo(
() => (state: WeChatState) => ({
isLoadingAiChat: state.isLoadingAiChat,
quoteMessageContent: state.quoteMessageContent,
aiQuoteMessageContent: state.aiQuoteMessageContent,
}),
[],
);
return useWeChatStore(useShallow(selector));
};
/**
* selector
* 使 useShallow shallow getSnapshot
* shallow
*/
export const useWeChatActions = () => {
const selector = useMemo(
() => (state: WeChatState) => ({
addMessage: state.addMessage,
updateMessage: state.updateMessage,
recallMessage: state.recallMessage,
loadChatMessages: state.loadChatMessages,
updateShowCheckbox: state.updateShowCheckbox,
updateEnterModule: state.updateEnterModule,
updateQuoteMessageContent: state.updateQuoteMessageContent,
updateIsLoadingAiChat: state.updateIsLoadingAiChat,
updateSelectedChatRecords: state.updateSelectedChatRecords,
updateShowChatRecordModel: state.updateShowChatRecordModel,
setCurrentContact: state.setCurrentContact,
updateAiQuoteMessageContent: state.updateAiQuoteMessageContent,
}),
[],
);
return useWeChatStore(useShallow(selector));
};