import { useState } from 'react' import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query' import { Link } from 'react-router-dom' import { createCategory, deleteCategory, listCategories, reorderCategories, updateCategory, } from '../api/client' function Categories() { const queryClient = useQueryClient() const [newName, setNewName] = useState('') const [editingId, setEditingId] = useState(null) const [editingName, setEditingName] = useState('') const categoriesQuery = useQuery({ queryKey: ['categories'], queryFn: listCategories }) const invalidate = () => { queryClient.invalidateQueries({ queryKey: ['categories'] }) queryClient.invalidateQueries({ queryKey: ['channels'] }) } const createMutation = useMutation({ mutationFn: (name: string) => createCategory(name), onSuccess: () => { setNewName('') invalidate() }, }) const updateMutation = useMutation({ mutationFn: ({ id, name }: { id: number; name: string }) => updateCategory(id, name), onSuccess: () => { setEditingId(null) invalidate() }, }) const deleteMutation = useMutation({ mutationFn: (id: number) => deleteCategory(id), onSuccess: invalidate, }) const reorderMutation = useMutation({ mutationFn: (ids: number[]) => reorderCategories(ids), onSuccess: invalidate, }) const categories = categoriesQuery.data ?? [] function move(index: number, direction: -1 | 1) { const target = index + direction if (target < 0 || target >= categories.length) return const ids = categories.map((c) => c.id) ;[ids[index], ids[target]] = [ids[target], ids[index]] reorderMutation.mutate(ids) } return (
← Каналы

Категории

{ e.preventDefault() if (newName.trim()) createMutation.mutate(newName.trim()) }} className="category-form" > setNewName(e.target.value)} />
{createMutation.isError &&

{(createMutation.error as Error).message}

} {categories.length === 0 && !categoriesQuery.isLoading &&

Категорий пока нет.

}
) } export default Categories