my liked music

This commit is contained in:
2025-08-29 10:34:52 +02:00
parent bb7b35626f
commit d857be1424
4 changed files with 65 additions and 2551 deletions
-2545
View File
File diff suppressed because it is too large Load Diff
+44
View File
@@ -0,0 +1,44 @@
/* eslint-disable react/display-name */
import { useDataFromRef } from "react-native-minuit/src/hooks";
import useMinuit from "react-native-minuit/src/hooks/useMinuit";
import { createContext, useContext, useGlobal } from "reactn";
import { usersRef } from "../config/firebase";
export const UserDataContext = createContext();
export default ({ children }) => {
const { setIsLoading, setTooltip } = useMinuit();
const [currentUID] = useGlobal("currentUID");
const [currentUserData, setCurrentUserData] = useGlobal("currentUserData");
const [currentUserRoles] = useGlobal("currentUserRoles");
useDataFromRef({
ref: currentUID ? usersRef.doc(currentUID) : null,
simpleRef: true,
listener: true,
condition: currentUID,
refreshArray: [currentUID],
onUpdate: (data) => {
if (data) {
setCurrentUserData(data);
} else {
setCurrentUserData(null);
}
},
});
return (
<UserDataContext.Provider value={{}}>{children}</UserDataContext.Provider>
);
};
export const useUserData = () => {
return useContext(UserDataContext);
};
// Convenience alias returning the same context, as requested
export const useUser = () => {
return useContext(UserDataContext);
};
+20 -3
View File
@@ -1,10 +1,11 @@
import { useContext, createContext, useGlobal } from "reactn"; /* eslint-disable react/display-name */
import { useDataFromRef } from "react-native-minuit/src/hooks"; import { useDataFromRef } from "react-native-minuit/src/hooks";
import useMinuit from "react-native-minuit/src/hooks/useMinuit"; import useMinuit from "react-native-minuit/src/hooks/useMinuit";
import { createContext, useContext, useGlobal } from "reactn";
import firebase, { usersRef } from "../config/firebase";
import { useState } from "react"; import { useState } from "react";
import { checkIfEmailIsValid } from "../actions/signupActions"; import { checkIfEmailIsValid } from "../actions/signupActions";
import firebase, { usersRef } from "../config/firebase";
export const UserDataContext = createContext(); export const UserDataContext = createContext();
@@ -20,7 +21,7 @@ export default ({ children }) => {
const [currentUserRoles] = useGlobal("currentUserRoles"); const [currentUserRoles] = useGlobal("currentUserRoles");
const [userProjects, setUserProjects] = useState([]); const [userProjects, setUserProjects] = useState([]);
const [userLikedProjects, setUserLikedProjects] = useState([]); const [userLikedProjects, setUserLikedProjects] = useState([]);
const [userLikedMusic, setUserLikedMusic] = useState([]);
useDataFromRef({ useDataFromRef({
ref: currentUID ? usersRef.doc(currentUID) : null, ref: currentUID ? usersRef.doc(currentUID) : null,
simpleRef: true, simpleRef: true,
@@ -68,6 +69,22 @@ export default ({ children }) => {
onUpdate: (list) => setUserLikedProjects(Array.isArray(list) ? list : []), onUpdate: (list) => setUserLikedProjects(Array.isArray(list) ? list : []),
}); });
// userLiked music
useDataFromRef({
ref: currentUID
? firebase
.firestore()
.collection("projects")
.where("likedBy", "array-contains", currentUID)
.orderBy("updatedAt", "desc")
: null,
simpleRef: false,
listener: true,
condition: !!currentUID,
refreshArray: [currentUID],
onUpdate: (list) => setUserLikedMusic(Array.isArray(list) ? list : []),
});
const updatePendingUserData = (newData) => { const updatePendingUserData = (newData) => {
setPendingUserData((prevData) => ({ setPendingUserData((prevData) => ({
...prevData, ...prevData,
+1 -3
View File
@@ -1,5 +1,5 @@
import React, { useEffect, useContext } from "reactn";
import { View } from "react-native"; import { View } from "react-native";
import React, { useContext, useEffect } from "reactn";
import firebase, { usersRef } from "../config/firebase"; import firebase, { usersRef } from "../config/firebase";
import { Routes } from "../navigation"; import { Routes } from "../navigation";
@@ -7,8 +7,6 @@ import { Routes } from "../navigation";
import { SplashAnimationContext } from "../providers/SplashAnimationProvider"; import { SplashAnimationContext } from "../providers/SplashAnimationProvider";
import { UserDataContext } from "../providers/UserDataProvider"; import { UserDataContext } from "../providers/UserDataProvider";
import { isDesktop, isWeb } from "../hooks/useLayoutType";
export default ({ navigation }) => { export default ({ navigation }) => {
const { setCurrentUserData } = useContext(UserDataContext); const { setCurrentUserData } = useContext(UserDataContext);
const { setIsFullyLoaded } = useContext(SplashAnimationContext); const { setIsFullyLoaded } = useContext(SplashAnimationContext);