feat: Implement album and person sharing with user search and a dedicated share dialog.

This commit is contained in:
2025-12-04 00:58:10 +01:00
parent 74d74a128b
commit 7f07169064
23 changed files with 816 additions and 66 deletions

View File

@@ -1,4 +1,4 @@
import type { Album, AlbumPermission, Media } from "@/domain/types";
import type { Album, AlbumPermission, Media, User } from "@/domain/types";
import apiClient from "@/services/api-client";
import { processMediaUrls } from "./media-service";
@@ -87,9 +87,28 @@ export const shareAlbum = async (
await apiClient.post(`/albums/${albumId}/share`, payload);
};
export const unshareAlbum = async (
albumId: string,
targetUserId: string,
): Promise<void> => {
await apiClient.delete(`/albums/${albumId}/share`, {
data: { target_user_id: targetUserId },
});
};
export const setAlbumThumbnail = async (
albumId: string,
payload: SetAlbumThumbnailPayload,
): Promise<void> => {
await apiClient.put(`/albums/${albumId}/thumbnail`, payload);
};
export type AlbumShare = {
user: User;
permission: AlbumPermission;
};
export const getAlbumShares = async (albumId: string): Promise<AlbumShare[]> => {
const { data } = await apiClient.get(`/albums/${albumId}/share`);
return data;
};