new project modal & seperate playback and music likes

This commit is contained in:
2025-10-24 16:12:07 +02:00
parent 47d5b92a57
commit 2599a25d77
12 changed files with 415 additions and 63 deletions
+2
View File
@@ -5,6 +5,7 @@ import DeleteAccountModal from "../components/modal/DeleteAccountModal";
import DeletePlaybackModal from "../components/modal/DeletePlaybackModal";
import DeleteAudioModal from "../components/modal/DeleteAudioModal";
import PlaylistModal from "../components/modal/PlaylistModal";
import PlaybackPickerModal from "../components/modal/PlaybackPickerModal";
import ShareModal from "../components/modal/ShareModal";
registerSheet("Delete", DeleteModal);
@@ -13,6 +14,7 @@ registerSheet("DeleteAccount", DeleteAccountModal);
registerSheet("DeletePlayback", DeletePlaybackModal);
registerSheet("DeleteAudio", DeleteAudioModal);
registerSheet("Playlist", PlaylistModal);
registerSheet("PlaybackPicker", PlaybackPickerModal);
registerSheet("Share", ShareModal);
export {};
+45
View File
@@ -0,0 +1,45 @@
import { arrayRemove, arrayUnion, projectsRef } from "../config/firebase";
export const LIKE_TARGET = {
SONG: "song",
PLAYBACK: "playback",
};
export const getLikeFieldPath = (target = LIKE_TARGET.SONG) => {
return target === LIKE_TARGET.PLAYBACK ? "likes.playback" : "likes.song";
};
export const getProjectLikes = (project, target = LIKE_TARGET.SONG) => {
const path = target === LIKE_TARGET.PLAYBACK ? "playback" : "song";
const likes = project?.likes;
const list = likes ? likes[path] : null;
return Array.isArray(list) ? list : [];
};
export const isProjectLikedByUser = (
project,
target,
currentUID
) => {
if (!currentUID) return false;
return getProjectLikes(project, target).includes(currentUID);
};
export const toggleProjectLike = async ({
projectId,
target = LIKE_TARGET.SONG,
currentUID,
next,
}) => {
if (!projectId || !currentUID) return;
const fieldPath = getLikeFieldPath(target);
await projectsRef.doc(projectId).set(
{
[fieldPath]: next
? arrayUnion(currentUID)
: arrayRemove(currentUID),
},
{ merge: true }
);
};