Files
expo-popcore-app/stores/templateSocialStore.ts
2026-01-28 18:46:44 +08:00

77 lines
1.7 KiB
TypeScript

import { create } from 'zustand'
interface TemplateSocialState {
// 点赞状态缓存: templateId -> boolean
likedMap: Record<string, boolean>
// 收藏状态缓存: templateId -> boolean
favoritedMap: Record<string, boolean>
// 批量更新点赞状态
setLikedStates: (states: Record<string, boolean>) => void
// 批量更新收藏状态
setFavoritedStates: (states: Record<string, boolean>) => void
// 更新单个点赞状态
setLiked: (templateId: string, liked: boolean) => void
// 更新单个收藏状态
setFavorited: (templateId: string, favorited: boolean) => void
// 获取点赞状态
isLiked: (templateId: string) => boolean
// 获取收藏状态
isFavorited: (templateId: string) => boolean
// 清空所有缓存
clear: () => void
}
export const useTemplateSocialStore = create<TemplateSocialState>((set, get) => ({
// State
likedMap: {},
favoritedMap: {},
// Actions
setLikedStates: (states) => {
set((state) => ({
likedMap: { ...state.likedMap, ...states },
}))
},
setFavoritedStates: (states) => {
set((state) => ({
favoritedMap: { ...state.favoritedMap, ...states },
}))
},
setLiked: (templateId, liked) => {
set((state) => ({
likedMap: { ...state.likedMap, [templateId]: liked },
}))
},
setFavorited: (templateId, favorited) => {
set((state) => ({
favoritedMap: { ...state.favoritedMap, [templateId]: favorited },
}))
},
isLiked: (templateId) => {
return get().likedMap[templateId] || false
},
isFavorited: (templateId) => {
return get().favoritedMap[templateId] || false
},
clear: () => {
set({
likedMap: {},
favoritedMap: {},
})
},
}))