Enhancement: Auto-request geolocation if permission already granted (#5638)

This commit is contained in:
shamoon 2025-08-04 23:16:22 -04:00 committed by GitHub
parent bb23c25690
commit 5870111d11
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 39 additions and 9 deletions

View File

@ -1,5 +1,5 @@
import { useTranslation } from "next-i18next"; import { useTranslation } from "next-i18next";
import { useState } from "react"; import { useCallback, useEffect, useState } from "react";
import { MdLocationDisabled, MdLocationSearching } from "react-icons/md"; import { MdLocationDisabled, MdLocationSearching } from "react-icons/md";
import { WiCloudDown } from "react-icons/wi"; import { WiCloudDown } from "react-icons/wi";
import useSWR from "swr"; import useSWR from "swr";
@ -64,7 +64,7 @@ export default function OpenMeteo({ options }) {
setLocation({ latitude: options.latitude, longitude: options.longitude }); setLocation({ latitude: options.latitude, longitude: options.longitude });
} }
const requestLocation = () => { const requestLocation = useCallback(() => {
setRequesting(true); setRequesting(true);
if (typeof window !== "undefined") { if (typeof window !== "undefined") {
navigator.geolocation.getCurrentPosition( navigator.geolocation.getCurrentPosition(
@ -82,7 +82,17 @@ export default function OpenMeteo({ options }) {
}, },
); );
} }
}; }, []);
useEffect(() => {
if (!options.latitude && !options.longitude && typeof navigator !== "undefined") {
navigator.permissions?.query({ name: "geolocation" }).then((result) => {
if (result.state === "granted") {
requestLocation();
}
});
}
}, [options.latitude, options.longitude, requestLocation]);
if (!location) { if (!location) {
return ( return (

View File

@ -1,5 +1,5 @@
import { useTranslation } from "next-i18next"; import { useTranslation } from "next-i18next";
import { useState } from "react"; import { useCallback, useEffect, useState } from "react";
import { MdLocationDisabled, MdLocationSearching } from "react-icons/md"; import { MdLocationDisabled, MdLocationSearching } from "react-icons/md";
import { WiCloudDown } from "react-icons/wi"; import { WiCloudDown } from "react-icons/wi";
import useSWR from "swr"; import useSWR from "swr";
@ -59,7 +59,7 @@ export default function OpenWeatherMap({ options }) {
setLocation({ latitude: options.latitude, longitude: options.longitude }); setLocation({ latitude: options.latitude, longitude: options.longitude });
} }
const requestLocation = () => { const requestLocation = useCallback(() => {
setRequesting(true); setRequesting(true);
if (typeof window !== "undefined") { if (typeof window !== "undefined") {
navigator.geolocation.getCurrentPosition( navigator.geolocation.getCurrentPosition(
@ -77,7 +77,17 @@ export default function OpenWeatherMap({ options }) {
}, },
); );
} }
}; }, []);
useEffect(() => {
if (!options.latitude && !options.longitude && typeof navigator !== "undefined") {
navigator.permissions?.query({ name: "geolocation" }).then((result) => {
if (result.state === "granted") {
requestLocation();
}
});
}
}, [options.latitude, options.longitude, requestLocation]);
if (!location) { if (!location) {
return ( return (

View File

@ -1,5 +1,5 @@
import { useTranslation } from "next-i18next"; import { useTranslation } from "next-i18next";
import { useState } from "react"; import { useCallback, useEffect, useState } from "react";
import { MdLocationDisabled, MdLocationSearching } from "react-icons/md"; import { MdLocationDisabled, MdLocationSearching } from "react-icons/md";
import { WiCloudDown } from "react-icons/wi"; import { WiCloudDown } from "react-icons/wi";
import useSWR from "swr"; import useSWR from "swr";
@ -63,7 +63,7 @@ export default function WeatherApi({ options }) {
setLocation({ latitude: options.latitude, longitude: options.longitude }); setLocation({ latitude: options.latitude, longitude: options.longitude });
} }
const requestLocation = () => { const requestLocation = useCallback(() => {
setRequesting(true); setRequesting(true);
if (typeof window !== "undefined") { if (typeof window !== "undefined") {
navigator.geolocation.getCurrentPosition( navigator.geolocation.getCurrentPosition(
@ -81,7 +81,17 @@ export default function WeatherApi({ options }) {
}, },
); );
} }
}; }, []);
useEffect(() => {
if (!options.latitude && !options.longitude && typeof navigator !== "undefined") {
navigator.permissions?.query({ name: "geolocation" }).then((result) => {
if (result.state === "granted") {
requestLocation();
}
});
}
}, [options.latitude, options.longitude, requestLocation]);
if (!location) { if (!location) {
return ( return (