fix: sync store state when like/favorite actions complete
- Update templateSocialStore when like/unlike succeeds - Update templateSocialStore when favorite/unfavorite succeeds - Sync likeCount and favoriteCount from API response - Ensure state consistency across video page and detail page Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
30625bc820
commit
e6416ee604
|
|
@ -11,6 +11,7 @@ import { useCallback, useState } from 'react'
|
|||
import { type ApiError } from '@/lib/types'
|
||||
|
||||
import { handleError } from './use-error'
|
||||
import { templateSocialStore } from '@/stores/templateSocialStore'
|
||||
|
||||
export const useTemplateFavorite = (
|
||||
templateId?: string,
|
||||
|
|
@ -44,6 +45,13 @@ export const useTemplateFavorite = (
|
|||
}
|
||||
|
||||
setFavorited(true)
|
||||
|
||||
// 同步更新 store
|
||||
templateSocialStore.setFavorited(templateId, true)
|
||||
if (data?.favoriteCount !== undefined) {
|
||||
templateSocialStore.setFavoriteCount(templateId, data.favoriteCount)
|
||||
}
|
||||
|
||||
setLoading(false)
|
||||
return { data, error: null }
|
||||
}, [templateId])
|
||||
|
|
@ -72,6 +80,13 @@ export const useTemplateFavorite = (
|
|||
}
|
||||
|
||||
setFavorited(false)
|
||||
|
||||
// 同步更新 store
|
||||
templateSocialStore.setFavorited(templateId, false)
|
||||
if (data?.favoriteCount !== undefined) {
|
||||
templateSocialStore.setFavoriteCount(templateId, data.favoriteCount)
|
||||
}
|
||||
|
||||
setLoading(false)
|
||||
return { data, error: null }
|
||||
}, [templateId])
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ import { useCallback, useState } from 'react'
|
|||
|
||||
import { type ApiError } from '@/lib/types'
|
||||
import { handleError } from './use-error'
|
||||
import { templateSocialStore } from '@/stores/templateSocialStore'
|
||||
|
||||
export const useTemplateLike = (templateId?: string) => {
|
||||
const [liked, setLiked] = useState<boolean>(false)
|
||||
|
|
@ -31,6 +32,13 @@ export const useTemplateLike = (templateId?: string) => {
|
|||
}
|
||||
|
||||
setLiked(true)
|
||||
|
||||
// 同步更新 store
|
||||
templateSocialStore.setLiked(templateId, true)
|
||||
if (data?.likeCount !== undefined) {
|
||||
templateSocialStore.setLikeCount(templateId, data.likeCount)
|
||||
}
|
||||
|
||||
return {}
|
||||
}, [templateId])
|
||||
|
||||
|
|
@ -55,6 +63,13 @@ export const useTemplateLike = (templateId?: string) => {
|
|||
}
|
||||
|
||||
setLiked(false)
|
||||
|
||||
// 同步更新 store
|
||||
templateSocialStore.setLiked(templateId, false)
|
||||
if (data?.likeCount !== undefined) {
|
||||
templateSocialStore.setLikeCount(templateId, data.likeCount)
|
||||
}
|
||||
|
||||
return {}
|
||||
}, [templateId])
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue