Skip to content

Commit

Permalink
geoloc via le paquet react-geolocated
Browse files Browse the repository at this point in the history
  • Loading branch information
cyril charignon committed Dec 21, 2023
1 parent f91f532 commit 7fd2429
Show file tree
Hide file tree
Showing 6 changed files with 61 additions and 157 deletions.
9 changes: 9 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
"react": "^18.2.0",
"react-bootstrap": "^2.9.1",
"react-dom": "^18.2.0",
"react-geolocated": "^4.1.2",
"react-router-dom": "^6.18.0"
},
"devDependencies": {
Expand Down
128 changes: 0 additions & 128 deletions src/composants/forms/#FormItinéraires.1.tsx#

This file was deleted.

Empty file.
74 changes: 48 additions & 26 deletions src/composants/forms/FormItinéraires.tsx
Original file line number Diff line number Diff line change
@@ -1,44 +1,59 @@
import { useContext, useState } from "react";
import ChoixZone from "../molécules/choixZone";
import AutoComplèteDistant from "../molécules/autoComplèteDistant";
import LieuAvecÉtapes from "../../classes/Lieu";
import { ÉtapeClic } from "../../classes/ÉtapeClic";

import SwapVertIcon from '@mui/icons-material/SwapVert';

import { Container, Row, Col } from "react-bootstrap";
import { contexte_iti } from "../../contextes/ctx-page-itinéraire";
import BoutonEnvoi from "../molécules/BoutonEnvoi";
import { useGeolocated } from "react-geolocated";
import IconButton from "@mui/material/IconButton";
import { Button } from "@mui/material";
import { positionVersGeom } from "../../fonctions/pour_leaflet";

import {GéométrieOsm} from "../../classes/types"
import { contexte_iti } from "../../contextes/ctx-page-itinéraire";
import BoutonEnvoi from "../molécules/BoutonEnvoi";
import ChoixZone from "../molécules/choixZone";
import AutoComplèteDistant from "../molécules/autoComplèteDistant";
import LieuAvecÉtapes from "../../classes/Lieu";
import { ÉtapeClic } from "../../classes/ÉtapeClic";


export type propsFormItinéraires = {
setZone: React.Dispatch<React.SetStateAction<string>>,
}

const geo = navigator.geolocation;
//const geo = navigator.geolocation;


export default function FormItinéraires({ setZone }: propsFormItinéraires) {

const { zone, carte, étapes } = useContext(contexte_iti);
const [données_modifiées, setDonnéesModifiées] = useState(true); // Indique si des modifs ont été faites depuis le dernier calcul d’itinéraire

const [ma_position, setMaPosition] = useState<GéométrieOsm>([[0, 0]]);
geo.watchPosition(
position => setMaPosition(positionVersGeom(position))
)
/* const [ma_position, setMaPosition] = useState<GéométrieOsm>([[0, 0]]);
* geo.watchPosition(
* position => setMaPosition(positionVersGeom(position))
* )
*/
const { coords, isGeolocationAvailable, isGeolocationEnabled } =
useGeolocated({
positionOptions: {
enableHighAccuracy: true,
},
userDecisionTimeout: 5000,
watchPosition: true,
watchLocationPermissionChange: true,
onError: e => alert("Erreur à la géolocalisation : " + e)
});


function changePartirDeMaPosition() {
if (!coords){
throw new Error("Localisation pas disponible");
}
const {longitude, latitude} = coords;

étapes.changeDépart({
type_étape: "ma-position",
nom: "Ma position",
géom: ma_position,
});
type_étape: "ma-position",
nom: "Ma position",
géom: [[longitude, latitude]],
});
}


Expand Down Expand Up @@ -66,6 +81,20 @@ export default function FormItinéraires({ setZone }: propsFormItinéraires) {
setDonnéesModifiées: setDonnéesModifiées,
}

const bouton_partir_de_ma_position =
<Button
variant="outlined"
onClick={changePartirDeMaPosition}
disabled={isGeolocationAvailable || isGeolocationEnabled}
>
{
(isGeolocationAvailable || isGeolocationEnabled)
? "Géolocalisation non disponible"
: "Partir de ma position"
}

</Button>;

return (
<form onSubmit={e => e.preventDefault()}>
<Container>
Expand All @@ -83,22 +112,15 @@ export default function FormItinéraires({ setZone }: propsFormItinéraires) {

<Row className="my-3">



<AutoComplèteDistant
{...propsDesAutocomplètes}
étape={étapes.départ}
label="Départ"
placeHolder="2 rue bidule, mon café, ..."
onChange={val => étapes.changeDépart(val)}
/>
<Button
variant="outlined"
onClick={changePartirDeMaPosition}
>
Partir de ma position
</Button>

{bouton_partir_de_ma_position}

<IconButton
onClick={() => étapes.inverse()}
Expand Down
6 changes: 3 additions & 3 deletions src/contextes/ctx-page-itinéraire.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,9 @@ export type tContexteItinéraire = {
setStats: React.Dispatch<React.SetStateAction<ReactNode>>,
}


// Création d’un objet Étapes factice pour initialiser le contexte
const fonctionNull = ((_e: LieuJson | null | ((_prev: LieuJson | null) => LieuJson | null)) => null);
const fonctionNull2 = ((_e: any | ((_prev: any ) => any )) => null);
const fonctionNull2 = ((_e: any | ((_prev: any) => any)) => null);

const gère_une_étape = new GèreUneÉtape(null, fonctionNull, null, [], fonctionNull2, null);

Expand All @@ -29,5 +29,5 @@ export const contexte_iti = createContext<tContexteItinéraire>({
zone: "",
étapes: new Étapes(gère_une_étape, gère_une_étape, [], fonctionNull2, gère_une_étape, null, [], fonctionNull2),
setTiroir: (_clef, _ouvert) => null,
setStats: ()=>null,
setStats: () => null,
})

0 comments on commit 7fd2429

Please sign in to comment.