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
+7 -9
View File
@@ -1,11 +1,9 @@
import { useContext, useState, useEffect } from "reactn";
import * as Linking from "expo-linking";
import { UserDataContext } from "./UserDataProvider";
import { isWeb } from "../hooks/useLayoutType";
import { navigateToTask } from "../navigation/NavigationService";
import { SplashAnimationContext } from "./SplashAnimationProvider";
const appJson = require("../../app.json");
export const storeURL = {
@@ -21,12 +19,12 @@ const UniversalLinkProvider = ({ children }) => {
useEffect(() => {
const handleDeepLink = async (event) => {
console.log("event", event);
// console.log("event", event);
const { path = "", queryParams } = Linking.parse(event.url);
console.log("path", path);
console.log("queryParams", queryParams);
// console.log("path", path);
// console.log("queryParams", queryParams);
const appSchemeURL = `${
appJson.expo.scheme
@@ -66,7 +64,7 @@ const UniversalLinkProvider = ({ children }) => {
const initDeepLinkHandling = async () => {
const initialUrl = await Linking.getInitialURL();
if (initialUrl) {
console.log("Initial URL:", initialUrl);
// console.log("Initial URL:", initialUrl);
handleDeepLink({ url: initialUrl });
}
@@ -82,14 +80,14 @@ const UniversalLinkProvider = ({ children }) => {
useEffect(() => {
if (tempTaskData && currentUID && isFullyLoaded) {
console.log("try to navigate to task");
// console.log("try to navigate to task");
navigateToTask(tempTaskData);
setTempTaskData(null);
}
}, [tempTaskData, currentUID, isFullyLoaded]);
const handleParams = (path) => {
console.log("path", path);
// console.log("path", path);
cleanURL();
};
@@ -98,7 +96,7 @@ const UniversalLinkProvider = ({ children }) => {
if (isWeb) {
const url = new URL(window.location);
console.log(url);
// console.log(url);
url.search = "";
window.history.replaceState({}, document.title, url.origin.toString());
+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,
}}