Files
lidify/frontend/features/library/hooks/useLibraryData.ts
2025-12-25 18:58:06 -06:00

65 lines
1.8 KiB
TypeScript

import { useEffect, useState, useCallback } from "react";
import { Artist, Album, Track, Tab } from "../types";
import { api } from "@/lib/api";
import { useAuth } from "@/lib/auth-context";
export type LibraryFilter = "owned" | "discovery" | "all";
interface UseLibraryDataProps {
activeTab: Tab;
filter?: LibraryFilter;
}
export function useLibraryData({
activeTab,
filter = "owned",
}: UseLibraryDataProps) {
const [artists, setArtists] = useState<Artist[]>([]);
const [albums, setAlbums] = useState<Album[]>([]);
const [tracks, setTracks] = useState<Track[]>([]);
const [isLoading, setIsLoading] = useState(false);
const { isAuthenticated } = useAuth();
const loadData = useCallback(async () => {
if (!isAuthenticated) return;
setIsLoading(true);
try {
if (activeTab === "artists") {
const { artists } = await api.getArtists({
limit: 500,
filter,
});
setArtists(artists);
} else if (activeTab === "albums") {
const { albums } = await api.getAlbums({ limit: 500, filter });
setAlbums(albums);
} else if (activeTab === "tracks") {
// Tracks filter could be added later if needed
const { tracks } = await api.getTracks({ limit: 500 });
setTracks(tracks);
}
} catch (error) {
console.error("Failed to load library data:", error);
} finally {
setIsLoading(false);
}
}, [activeTab, filter, isAuthenticated]);
useEffect(() => {
loadData();
}, [loadData]);
const reloadData = () => {
loadData();
};
return {
artists,
albums,
tracks,
isLoading,
reloadData,
};
}