start refacto home and fix description

This commit is contained in:
Thomas Demirdjian
2025-09-30 13:37:12 +02:00
parent 3dcf5453ca
commit 306918de00
21 changed files with 1219 additions and 231 deletions
+77 -8
View File
@@ -3,7 +3,7 @@ import { useDataFromRef } from "react-native-minuit/src/hooks";
import useMinuit from "react-native-minuit/src/hooks/useMinuit";
import { createContext, useContext, useGlobal } from "reactn";
import { useState } from "react";
import { useCallback, useEffect, useState } from "react";
import { checkIfEmailIsValid } from "../actions/signupActions";
import firebase, {
arrayRemove,
@@ -104,11 +104,49 @@ export default ({ children }) => {
refreshArray: [selectedProjectId],
});
const resetSelectedProject = () => {
setSelectedProjectId(null);
setSelectedProject(null);
};
const selectProject = (projectId) => setSelectedProjectId(projectId || null);
const persistSelectedProjectId = useCallback(
async (projectId) => {
if (!currentUID) return;
try {
await usersRef.doc(currentUID).set(
{
selectedProjectId: projectId || null,
},
{ merge: true },
);
} catch (error) {
console.log(
"UserDataProvider: unable to persist selectedProjectId",
error?.message || error,
);
}
},
[currentUID],
);
const selectProject = useCallback(
(projectId) => {
const safeId = projectId || null;
setSelectedProjectId(safeId);
if (!safeId) {
setSelectedProject(null);
}
if (currentUID) {
persistSelectedProjectId(safeId).catch((error) => {
console.log(
"UserDataProvider: persist selectedProjectId failed",
error?.message || error,
);
});
}
},
[currentUID, persistSelectedProjectId, setSelectedProject],
);
const resetSelectedProject = useCallback(() => {
selectProject(null);
}, [selectProject]);
// Ancienne variante de création de projet supprimée pour éviter les doublons.
@@ -139,7 +177,7 @@ export default ({ children }) => {
updatedAt: firebase.firestore.FieldValue.serverTimestamp(),
};
const { id } = await projectsRef.add(payload);
setSelectedProjectId(id);
selectProject(id);
return id;
} catch (e) {
console.log("createNewProject error", e?.message);
@@ -294,6 +332,37 @@ export default ({ children }) => {
const isSuperAdmin = currentUserRoles.some((role) => role === "SUPERADMIN");
useEffect(() => {
const remoteSelectedId = currentUserDoc?.selectedProjectId;
if (!remoteSelectedId) {
if (remoteSelectedId === null && selectedProjectId !== null) {
setSelectedProjectId(null);
setSelectedProject(null);
}
return;
}
if (remoteSelectedId !== selectedProjectId) {
setSelectedProjectId(remoteSelectedId);
}
}, [currentUserDoc?.selectedProjectId, selectedProjectId, setSelectedProject]);
useEffect(() => {
if (!Array.isArray(userProjects) || userProjects.length === 0) return;
if (selectedProjectId) return;
if (currentUserDoc?.selectedProjectId) return;
const fallbackProjectId = userProjects[0]?.id;
if (!fallbackProjectId) return;
selectProject(fallbackProjectId);
}, [
currentUserDoc?.selectedProjectId,
selectProject,
selectedProjectId,
userProjects,
]);
return (
<UserDataContext.Provider
value={{
@@ -323,7 +392,7 @@ export default ({ children }) => {
unfollowUser,
resetSelectedProject,
selectProject,
setSelectedProjectId,
setSelectedProjectId: selectProject,
updateProjectData,
createNewProject,
}}