From b1a9bf47ade61a89fd59491a41c146d47f6c365b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Ta=C3=AFeb?= Date: Tue, 3 Dec 2024 17:08:19 +0100 Subject: [PATCH 1/2] feat: add visibility toggle in sourcing side panel component --- .../common/projet-visibility-reduced.tsx | 70 +++++++++++++++++++ .../sourcing-user-projet-location.tsx | 24 +++++-- .../sourcing/sourcing-projet-visibility.tsx | 35 +++++++--- 3 files changed, 114 insertions(+), 15 deletions(-) create mode 100644 src/components/common/projet-visibility-reduced.tsx diff --git a/src/components/common/projet-visibility-reduced.tsx b/src/components/common/projet-visibility-reduced.tsx new file mode 100644 index 00000000..72a68ec3 --- /dev/null +++ b/src/components/common/projet-visibility-reduced.tsx @@ -0,0 +1,70 @@ +import clsx from "clsx"; +import Image from "next/image"; +import ToggleSwitch from "@codegouvfr/react-dsfr/ToggleSwitch"; + +type ProjetVisibilityReducedProps = { + isPublic?: boolean | null; + isLoading?: boolean; + onVisibilityChange: (_checked: boolean) => void; + disabled?: boolean; +}; + +export const ProjetVisibilityReduced = ({ + isPublic, + isLoading, + onVisibilityChange, + disabled, +}: ProjetVisibilityReducedProps) => { + return ( +
+
+ Souhaitez-vous rendre votre projet visible par les autres membres de la communauté Plus fraîche ma ville ? +
+
+ {!isLoading ? ( +

+ {isPublic ? ( + + ) : ( + + {/* eslint-disable-next-line max-len */} + + + )} + {isPublic ? "Visible" : "Masqué"} {"sur l'annuaire"} +

+ ) : ( +
+ )} + {!isLoading ? ( +
+ +
+ ) : ( +
+
+
+ )} +
+
+ ); +}; diff --git a/src/components/sourcing/side-panel/sourcing-user-projet-location.tsx b/src/components/sourcing/side-panel/sourcing-user-projet-location.tsx index 859ffc45..e48253c2 100644 --- a/src/components/sourcing/side-panel/sourcing-user-projet-location.tsx +++ b/src/components/sourcing/side-panel/sourcing-user-projet-location.tsx @@ -1,14 +1,24 @@ import Image from "next/image"; +import { SourcingProjetVisibility } from "@/src/components/sourcing/sourcing-projet-visibility"; +import { useProjetsStore } from "@/src/stores/projets/provider"; +import { useIsLecteur } from "@/src/hooks/use-is-lecteur"; export const SourcingUserProjetLocation = () => { + const currentProjet = useProjetsStore((state) => state.getCurrentProjet()); + const isLecteur = useIsLecteur(currentProjet?.id); return ( -
- -

Votre projet

-

Vous êtes sur le point de géolocalisation de votre projet.

-

- {"Pour découvrir d'autres prestataires, cliquez sur les autres projets à proximité."} -

+
+
+ +

Votre projet

+

Vous êtes sur le point de géolocalisation de votre projet.

+

+ {"Pour découvrir d'autres prestataires, cliquez sur les autres projets à proximité."} +

+
+
+ +
); }; diff --git a/src/components/sourcing/sourcing-projet-visibility.tsx b/src/components/sourcing/sourcing-projet-visibility.tsx index 36d4f7ea..c9f33372 100644 --- a/src/components/sourcing/sourcing-projet-visibility.tsx +++ b/src/components/sourcing/sourcing-projet-visibility.tsx @@ -3,9 +3,17 @@ import { updateProjetVisibilityAction } from "@/src/actions/projets/update-projet-visibility-action"; import { useProjetsStore } from "@/src/stores/projets/provider"; import { notifications } from "../common/notifications"; -import { ProjetVisibility } from "../common/projet-visibility"; +import { ProjetVisibilityReduced } from "@/src/components/common/projet-visibility-reduced"; +import React from "react"; +import { ProjetVisibility } from "@/src/components/common/projet-visibility"; -export const SourcingProjetVisibility = ({ isLecteur }: { isLecteur: boolean }) => { +export const SourcingProjetVisibility = ({ + isLecteur, + reducedComponent = false, +}: { + isLecteur: boolean; + reducedComponent?: boolean; +}) => { const currentProjet = useProjetsStore((state) => state.getCurrentProjet()); const isPublic = currentProjet?.is_public; const projetId = currentProjet?.id; @@ -22,11 +30,22 @@ export const SourcingProjetVisibility = ({ isLecteur }: { isLecteur: boolean }) }; return ( - + <> + {reducedComponent ? ( + + ) : ( + + )} + ); }; From 58533c2b2a37f904cdd045bf7e835e0e1ac5d774 Mon Sep 17 00:00:00 2001 From: mehdilouraoui Date: Thu, 5 Dec 2024 11:04:57 +0100 Subject: [PATCH 2/2] feat: refacto projet visibility component --- .../common/projet-visibility-reduced.tsx | 70 ----------- src/components/common/projet-visibility.tsx | 112 +++++++++++------- .../sourcing/map/sourcing-map-client.tsx | 4 + .../sourcing-user-projet-location.tsx | 2 +- .../sourcing/sourcing-projet-visibility.tsx | 36 ++---- 5 files changed, 83 insertions(+), 141 deletions(-) delete mode 100644 src/components/common/projet-visibility-reduced.tsx diff --git a/src/components/common/projet-visibility-reduced.tsx b/src/components/common/projet-visibility-reduced.tsx deleted file mode 100644 index 72a68ec3..00000000 --- a/src/components/common/projet-visibility-reduced.tsx +++ /dev/null @@ -1,70 +0,0 @@ -import clsx from "clsx"; -import Image from "next/image"; -import ToggleSwitch from "@codegouvfr/react-dsfr/ToggleSwitch"; - -type ProjetVisibilityReducedProps = { - isPublic?: boolean | null; - isLoading?: boolean; - onVisibilityChange: (_checked: boolean) => void; - disabled?: boolean; -}; - -export const ProjetVisibilityReduced = ({ - isPublic, - isLoading, - onVisibilityChange, - disabled, -}: ProjetVisibilityReducedProps) => { - return ( -
-
- Souhaitez-vous rendre votre projet visible par les autres membres de la communauté Plus fraîche ma ville ? -
-
- {!isLoading ? ( -

- {isPublic ? ( - - ) : ( - - {/* eslint-disable-next-line max-len */} - - - )} - {isPublic ? "Visible" : "Masqué"} {"sur l'annuaire"} -

- ) : ( -
- )} - {!isLoading ? ( -
- -
- ) : ( -
-
-
- )} -
-
- ); -}; diff --git a/src/components/common/projet-visibility.tsx b/src/components/common/projet-visibility.tsx index e945d1ab..094c54fb 100644 --- a/src/components/common/projet-visibility.tsx +++ b/src/components/common/projet-visibility.tsx @@ -7,64 +7,90 @@ type ProjetVisibilityProps = { isLoading?: boolean; onVisibilityChange: (_checked: boolean) => void; disabled?: boolean; + reduced?: boolean; }; -export const ProjetVisibility = ({ isPublic, isLoading, onVisibilityChange, disabled }: ProjetVisibilityProps) => { - return ( -
- {!isLoading ? ( -

- {isPublic ? ( - - ) : ( - - {/* eslint-disable-next-line max-len */} - - - )} - {isPublic ? "Visible" : "Masqué"} {"sur l'annuaire des projets"} -

+export const ProjetVisibility = ({ + isPublic, + isLoading, + onVisibilityChange, + disabled, + reduced = false, +}: ProjetVisibilityProps) => { + const Badge = !isLoading ? ( +

+ {isPublic ? ( + ) : ( -

+ + {/* eslint-disable-next-line max-len */} + + )} + {isPublic ? "Visible" : "Masqué"} {reduced ? "sur l'annuaire" : "sur l'annuaire des projets"} +

+ ) : ( +
+ ); + + const Toggle = !isLoading ? ( +
+ +
+ ) : ( +
+
+
+ ); + if (reduced) { + return ( +
+
+ Souhaitez-vous rendre votre projet visible par les autres membres de la communauté Plus fraîche ma ville ? +
+
+ {Badge} + {Toggle} +
+
+ ); + } + + return ( +
+ {Badge}

Souhaitez-vous rendre votre projet visible par les autres membres de la communauté Plus fraîche ma ville ?

- Rendez votre projet visible dans {"l'annuaire"} des projets pour partager son objet, sa localisation et son - état d’avancement aux autres membres de la communauté. Grâce à cette fonctionnalité, découvrez les - initiatives voisines, échangez avec d’autres porteurs de projet, et obtenez des contacts de prestataires. + Rendez votre projet visible dans {`l'annuaire`} des projets pour partager son objet, sa localisation et son + état {`d'avancement`} aux autres membres de la communauté. Grâce à cette fonctionnalité, découvrez les + initiatives voisines, échangez avec {`d'autres`} porteurs de projet, et obtenez des contacts de + prestataires.

- En tant qu’administrateur d’un projet, vos prénom, nom et adresse mail seront partagés avec les utilisateurs - connectés. + En tant {`qu'administrateur`} {`d'un`} projet, vos prénom, nom et adresse mail seront partagés avec les + utilisateurs connectés.

- {!isLoading ? ( -
- -
- ) : ( -
-
-
- )} + {Toggle}
); diff --git a/src/components/sourcing/map/sourcing-map-client.tsx b/src/components/sourcing/map/sourcing-map-client.tsx index 150b1ec8..19dd6075 100644 --- a/src/components/sourcing/map/sourcing-map-client.tsx +++ b/src/components/sourcing/map/sourcing-map-client.tsx @@ -38,6 +38,10 @@ const SourcingMapClient = ({ markers, setSelectedMarker, selectedMarker, mapFocu setSelectedMarker(selectedMarker); }; + if (!currentProjetCoordinates) { + return null; + } + return (
diff --git a/src/components/sourcing/side-panel/sourcing-user-projet-location.tsx b/src/components/sourcing/side-panel/sourcing-user-projet-location.tsx index e48253c2..dbd1e51e 100644 --- a/src/components/sourcing/side-panel/sourcing-user-projet-location.tsx +++ b/src/components/sourcing/side-panel/sourcing-user-projet-location.tsx @@ -17,7 +17,7 @@ export const SourcingUserProjetLocation = () => {

- +
); diff --git a/src/components/sourcing/sourcing-projet-visibility.tsx b/src/components/sourcing/sourcing-projet-visibility.tsx index c9f33372..9203acf4 100644 --- a/src/components/sourcing/sourcing-projet-visibility.tsx +++ b/src/components/sourcing/sourcing-projet-visibility.tsx @@ -3,17 +3,9 @@ import { updateProjetVisibilityAction } from "@/src/actions/projets/update-projet-visibility-action"; import { useProjetsStore } from "@/src/stores/projets/provider"; import { notifications } from "../common/notifications"; -import { ProjetVisibilityReduced } from "@/src/components/common/projet-visibility-reduced"; -import React from "react"; -import { ProjetVisibility } from "@/src/components/common/projet-visibility"; +import { ProjetVisibility } from "../common/projet-visibility"; -export const SourcingProjetVisibility = ({ - isLecteur, - reducedComponent = false, -}: { - isLecteur: boolean; - reducedComponent?: boolean; -}) => { +export const SourcingProjetVisibility = ({ isLecteur, reduced = false }: { isLecteur: boolean; reduced?: boolean }) => { const currentProjet = useProjetsStore((state) => state.getCurrentProjet()); const isPublic = currentProjet?.is_public; const projetId = currentProjet?.id; @@ -30,22 +22,12 @@ export const SourcingProjetVisibility = ({ }; return ( - <> - {reducedComponent ? ( - - ) : ( - - )} - + ); };