77 lines
1.7 KiB
TypeScript
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: {},
|
|
})
|
|
},
|
|
}))
|