big refacto change all flows
This commit is contained in:
@@ -90,6 +90,62 @@ export default ({ children }) => {
|
||||
...newData,
|
||||
}));
|
||||
};
|
||||
|
||||
// Selected project state and helpers
|
||||
const [selectedProjectId, setSelectedProjectId] = useState(null);
|
||||
const { data: selectedProject = null, setData: setSelectedProject } =
|
||||
useDataFromRef({
|
||||
ref: selectedProjectId ? projectsRef.doc(selectedProjectId) : null,
|
||||
simpleRef: true,
|
||||
listener: true,
|
||||
condition: !!selectedProjectId,
|
||||
refreshArray: [selectedProjectId],
|
||||
});
|
||||
|
||||
const resetSelectedProject = () => {
|
||||
setSelectedProjectId(null);
|
||||
setSelectedProject(null);
|
||||
};
|
||||
const selectProject = (projectId) => setSelectedProjectId(projectId || null);
|
||||
|
||||
// Ancienne variante de création de projet supprimée pour éviter les doublons.
|
||||
|
||||
const updateProjectData = async (partial = {}, options = { merge: true }) => {
|
||||
if (!selectedProjectId) return;
|
||||
try {
|
||||
await projectsRef.doc(selectedProjectId).set(
|
||||
{
|
||||
...partial,
|
||||
updatedAt: firebase.firestore.FieldValue.serverTimestamp(),
|
||||
},
|
||||
options,
|
||||
);
|
||||
} catch (e) {
|
||||
console.log("updateProjectData error", e?.message);
|
||||
throw e;
|
||||
}
|
||||
};
|
||||
|
||||
const createNewProject = async ({ hasLyrics = false } = {}) => {
|
||||
try {
|
||||
await setIsLoading(true);
|
||||
const user = firebase.auth().currentUser;
|
||||
const payload = {
|
||||
userId: user ? user.uid : currentUID || null,
|
||||
hasLyrics: !!hasLyrics,
|
||||
createdAt: firebase.firestore.FieldValue.serverTimestamp(),
|
||||
updatedAt: firebase.firestore.FieldValue.serverTimestamp(),
|
||||
};
|
||||
const { id } = await projectsRef.add(payload);
|
||||
setSelectedProjectId(id);
|
||||
return id;
|
||||
} catch (e) {
|
||||
console.log("createNewProject error", e?.message);
|
||||
throw e;
|
||||
} finally {
|
||||
await setIsLoading(false);
|
||||
}
|
||||
};
|
||||
const followUser = async (userId) => {
|
||||
try {
|
||||
if (currentUID && userId) {
|
||||
@@ -98,7 +154,7 @@ export default ({ children }) => {
|
||||
followedBy: arrayUnion(currentUID),
|
||||
lastFollowersUpdateAt: new Date(),
|
||||
},
|
||||
{ merge: true }
|
||||
{ merge: true },
|
||||
);
|
||||
setTooltip({ type: "success", text: "Abonnement mis à jour" });
|
||||
}
|
||||
@@ -116,7 +172,7 @@ export default ({ children }) => {
|
||||
followedBy: arrayRemove(currentUID),
|
||||
lastFollowersUpdateAt: new Date(),
|
||||
},
|
||||
{ merge: true }
|
||||
{ merge: true },
|
||||
);
|
||||
setTooltip({
|
||||
type: "success",
|
||||
@@ -248,6 +304,8 @@ export default ({ children }) => {
|
||||
userPlaybacks,
|
||||
userLikedProjects,
|
||||
userPlaylists,
|
||||
selectedProjectId,
|
||||
selectedProject,
|
||||
followingCount: userFollowing?.length || 0,
|
||||
|
||||
setCurrentUserData,
|
||||
@@ -260,6 +318,11 @@ export default ({ children }) => {
|
||||
updateUserData,
|
||||
followUser,
|
||||
unfollowUser,
|
||||
resetSelectedProject,
|
||||
selectProject,
|
||||
setSelectedProjectId,
|
||||
updateProjectData,
|
||||
createNewProject,
|
||||
}}
|
||||
>
|
||||
{children}
|
||||
|
||||
Reference in New Issue
Block a user