feat: implement add media to album functionality with dialog and API integration

This commit is contained in:
2025-11-16 01:38:04 +01:00
parent 43157cef4e
commit 07b797b82b
10 changed files with 321 additions and 57 deletions

View File

@@ -1,5 +1,7 @@
import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'
import { createAlbum, getAlbums } from '@/services/album-service'
import { addMediaToAlbum, createAlbum, getAlbum, getAlbumMedia, getAlbums, type AddMediaToAlbumPayload } from '@/services/album-service'
const ALBUMS_KEY = ["albums"];
/**
* Query hook to fetch a list of all albums.
@@ -27,4 +29,49 @@ export const useCreateAlbum = () => {
// TODO: Add user-facing toast
},
})
}
}
export const useGetAlbumMedia = (albumId: string) => {
return useQuery({
queryKey: [ALBUMS_KEY, albumId, "media"],
queryFn: () => getAlbumMedia(albumId),
enabled: !!albumId,
});
};
/**
* Mutation hook to add media to an album.
*/
export const useAddMediaToAlbum = () => {
const queryClient = useQueryClient();
return useMutation({
mutationFn: ({
albumId,
payload,
}: {
albumId: string;
payload: AddMediaToAlbumPayload;
}) => addMediaToAlbum(albumId, payload),
onSuccess: (_data, variables) => {
queryClient.invalidateQueries({
queryKey: [ALBUMS_KEY, variables.albumId, "media"],
});
},
onError: (error) => {
console.error("Failed to add media to album:", error);
// TODO: Add user-facing toast
},
});
};
/**
* Query hook to fetch a single album by ID.
*/
export const useGetAlbum = (albumId: string) => {
return useQuery({
queryKey: [ALBUMS_KEY, albumId],
queryFn: () => getAlbum(albumId),
enabled: !!albumId,
});
};