import { useState, useCallback } from "react" import { useMutation, useQueryClient } from "@tanstack/react-query" import { message } from "antd" import { createAssetLibrary, deleteAssetLibrary } from "@/api/assets" import type { AssetKind, LibraryItem } from "../types" /** * 视频库管理 Hook * 封装视频库的创建、删除操作,以及新建弹窗的表单状态 */ interface UseLibraryManagementProps { libraries: LibraryItem[] activeLibId: string setActiveLibId: (id: string) => void effectiveLibId: string } export function useLibraryManagement({ libraries, setActiveLibId, effectiveLibId, }: UseLibraryManagementProps) { const queryClient = useQueryClient() /* ── 状态 ── */ const [createModalOpen, setCreateModalOpen] = useState(false) const [newLibName, setNewLibName] = useState("") const [newLibKind, setNewLibKind] = useState("video") /* ── Mutations ── */ const createLibMutation = useMutation({ mutationFn: createAssetLibrary, onSuccess: () => { queryClient.invalidateQueries({ queryKey: ["asset-libraries"] }) message.success("视频库创建成功") }, onError: () => { message.error("创建视频库失败") }, }) const deleteLibMutation = useMutation({ mutationFn: deleteAssetLibrary, onSuccess: () => { queryClient.invalidateQueries({ queryKey: ["asset-libraries"] }) message.success("视频库已删除") }, onError: () => { message.error("删除视频库失败") }, }) /* ── 新建视频库 ── */ const handleCreateLibrary = useCallback(async () => { if (!newLibName.trim()) { message.warning("请输入视频库名称") return } try { const newLib = await createLibMutation.mutateAsync({ name: newLibName.trim(), kind: newLibKind, }) setActiveLibId(newLib.id) setCreateModalOpen(false) setNewLibName("") setNewLibKind("video") } catch { // error handled in mutation } }, [newLibName, newLibKind, createLibMutation, setActiveLibId]) /* ── 删除视频库 ── */ const handleDeleteLibrary = useCallback( async (id: string) => { try { await deleteLibMutation.mutateAsync(id) if (effectiveLibId === id) { const remaining = libraries.filter((l) => l.id !== id) if (remaining.length > 0) setActiveLibId(remaining[0].id) else setActiveLibId("") } } catch { // error handled in mutation } }, [deleteLibMutation, effectiveLibId, libraries, setActiveLibId], ) return { // 弹窗状态 createModalOpen, setCreateModalOpen, // 表单状态 newLibName, setNewLibName, newLibKind, setNewLibKind, // Mutations isCreating: createLibMutation.isPending, isDeleting: deleteLibMutation.isPending, // Handlers handleCreateLibrary, handleDeleteLibrary, } }