new project modal & seperate playback and music likes
This commit is contained in:
@@ -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 {};
|
||||
|
||||
@@ -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 }
|
||||
);
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user