start refacto home and fix description
This commit is contained in:
@@ -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,
|
||||
}}
|
||||
|
||||
Reference in New Issue
Block a user