61 lines
1.8 KiB
TypeScript
61 lines
1.8 KiB
TypeScript
import { useRouter } from 'next/navigation'
|
|
import { flashcardsService } from '@/lib/services/flashcards'
|
|
import { useToast } from '@/components/shared/Toast'
|
|
import type { Flashcard } from '@/lib/services/flashcards'
|
|
|
|
interface UseFlashcardOperationsReturn {
|
|
handleEdit: (card: Flashcard) => void
|
|
handleDelete: (card: Flashcard, onSuccess?: () => void) => Promise<void>
|
|
handleToggleFavorite: (card: Flashcard, onSuccess?: () => void) => Promise<void>
|
|
}
|
|
|
|
export const useFlashcardOperations = (): UseFlashcardOperationsReturn => {
|
|
const router = useRouter()
|
|
const toast = useToast()
|
|
|
|
const handleEdit = (card: Flashcard) => {
|
|
router.push(`/flashcards/${card.id}?edit=true`)
|
|
}
|
|
|
|
const handleDelete = async (card: Flashcard, onSuccess?: () => void) => {
|
|
if (!confirm(`確定要刪除詞卡「${card.word}」嗎?`)) {
|
|
return
|
|
}
|
|
|
|
try {
|
|
const result = await flashcardsService.deleteFlashcard(card.id)
|
|
if (result.success) {
|
|
if (onSuccess) {
|
|
await onSuccess()
|
|
}
|
|
toast.success(`詞卡「${card.word}」已刪除`)
|
|
} else {
|
|
toast.error(result.error || '刪除失敗')
|
|
}
|
|
} catch (err) {
|
|
toast.error('刪除失敗,請重試')
|
|
}
|
|
}
|
|
|
|
const handleToggleFavorite = async (card: Flashcard, onSuccess?: () => void) => {
|
|
try {
|
|
const result = await flashcardsService.toggleFavorite(card.id)
|
|
if (result.success) {
|
|
if (onSuccess) {
|
|
await onSuccess()
|
|
}
|
|
toast.success(`${card.isFavorite ? '已取消收藏' : '已加入收藏'}「${card.word}」`)
|
|
} else {
|
|
toast.error(result.error || '操作失敗')
|
|
}
|
|
} catch (err) {
|
|
toast.error('操作失敗,請重試')
|
|
}
|
|
}
|
|
|
|
return {
|
|
handleEdit,
|
|
handleDelete,
|
|
handleToggleFavorite
|
|
}
|
|
} |