import { useState } from "react";
import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query";
import { api, type Library, type AuthUser } from "../api/client";
import { useAuth } from "../auth/useAuth";
function LibraryRow({ lib, onRemove }: { lib: Library; onRemove: (id: number) => void }) {
const qc = useQueryClient();
const { data } = useQuery({
queryKey: ["scan-status", lib.id],
queryFn: () => api.libraries.scanStatus(lib.id),
refetchInterval: (query) => (query.state.data?.scanning ? 2000 : false),
});
const scanning = data?.scanning ?? false;
const rescanMutation = useMutation({
mutationFn: () => api.libraries.rescan(lib.id),
onSuccess: () => qc.invalidateQueries({ queryKey: ["scan-status", lib.id] }),
});
return (
{lib.name}
{scanning && (
Scanning…
)}
{lib.path}
);
}
function UserManagement() {
const qc = useQueryClient();
const { user: currentUser } = useAuth();
const { data: users = [] } = useQuery({
queryKey: ["users"],
queryFn: api.auth.listUsers,
});
const [newUsername, setNewUsername] = useState("");
const [newPassword, setNewPassword] = useState("");
const [userError, setUserError] = useState("");
const createMutation = useMutation({
mutationFn: () => api.auth.createUser(newUsername, newPassword),
onSuccess: () => {
qc.invalidateQueries({ queryKey: ["users"] });
setNewUsername("");
setNewPassword("");
setUserError("");
},
onError: (e: Error) => setUserError(e.message),
});
const deleteMutation = useMutation({
mutationFn: (id: number) => api.auth.deleteUser(id),
onSuccess: () => qc.invalidateQueries({ queryKey: ["users"] }),
onError: (e: Error) => setUserError(e.message),
});
return (
);
}
export default function SettingsPage() {
const qc = useQueryClient();
const { data: libraries = [] } = useQuery({
queryKey: ["libraries"],
queryFn: api.libraries.list,
});
const [name, setName] = useState("");
const [path, setPath] = useState("");
const [error, setError] = useState("");
const addMutation = useMutation({
mutationFn: () => api.libraries.create(name, path),
onSuccess: () => {
qc.invalidateQueries({ queryKey: ["libraries"] });
setName("");
setPath("");
setError("");
},
onError: (e: Error) => setError(e.message),
});
const deleteMutation = useMutation({
mutationFn: (id: number) => api.libraries.delete(id),
onSuccess: () => qc.invalidateQueries({ queryKey: ["libraries"] }),
});
return (
Settings
Libraries
{libraries.map((lib) => (
deleteMutation.mutate(id)} />
))}
);
}