diff --git a/src/components/Home/SearchFields.vue b/src/components/Home/SearchFields.vue index 03f20e8bf..8bfb83cd0 100644 --- a/src/components/Home/SearchFields.vue +++ b/src/components/Home/SearchFields.vue @@ -84,7 +84,9 @@ import { AddressSearchType, ContentType } from "@/types/enums"; import { addressToLocation, getAddressFromLocal, + getRadiusFromLocal, storeAddressInLocal, + storeRadiusInLocal, } from "@/utils/location"; import { computed, defineAsyncComponent } from "vue"; import { useI18n } from "vue-i18n"; @@ -145,11 +147,20 @@ const search = computed({ }); const distance = computed({ - get(): number { - return props.distance; + get(): number | null { + if (props.distance) { + return props.distance; + } + if (props.fromLocalStorage) { + return getRadiusFromLocal(); + } + return null; }, set(newDistance: number) { emit("update:distance", newDistance); + if (props.fromLocalStorage) { + storeRadiusInLocal(newDistance); + } }, }); diff --git a/src/utils/location.ts b/src/utils/location.ts index b87707172..4977b56c4 100644 --- a/src/utils/location.ts +++ b/src/utils/location.ts @@ -64,6 +64,7 @@ export const storeAddressInLocal = (address: IAddress | null): undefined => { window.localStorage.setItem("address", JSON.stringify(address)); } else { window.localStorage.removeItem("address"); + storeRadiusInLocal(null); } }; @@ -79,6 +80,24 @@ export const getAddressFromLocal = (): IAddress | null => { return address; }; +export const storeRadiusInLocal = ( + radius: number | null | undefined +): undefined => { + if (radius) { + window.localStorage.setItem("radius", JSON.stringify(radius)); + } else { + window.localStorage.removeItem("radius"); + } +}; + +export const getRadiusFromLocal = (): number | null => { + const radiusString = window.localStorage.getItem("radius"); + if (!radiusString) { + return null; + } + return JSON.parse(radiusString) as number; +}; + export const storeUserLocationAndRadiusFromUserSettings = ( location: IUserPreferredLocation | null ): undefined => { @@ -91,6 +110,7 @@ export const storeUserLocationAndRadiusFromUserSettings = ( description: location.name || "", type: "administrative", }); + storeRadiusInLocal(location.range); } } else { console.debug("user has not set a location"); diff --git a/src/views/HomeView.vue b/src/views/HomeView.vue index 163aad58d..c7b22f758 100644 --- a/src/views/HomeView.vue +++ b/src/views/HomeView.vue @@ -193,8 +193,10 @@ import { addressToLocation, geoHashToCoords, getAddressFromLocal, + getRadiusFromLocal, locationToAddress, storeAddressInLocal, + storeRadiusInLocal, } from "@/utils/location"; import { useServerProvidedLocation } from "@/composition/apollo/config"; import QuickPublish from "@/components/Home/QuickPublish.vue"; @@ -520,13 +522,19 @@ const distance = computed({ get(): number | null { if (noAddress.value || !userLocation.value?.name) { return null; - } else if (current_distance.value == null) { + } + if (current_distance.value == null) { + const local_radius = getRadiusFromLocal(); + if (local_radius) { + return local_radius; + } return userLocation.value?.isIPLocation ? 150 : 25; } return current_distance.value; }, set(newDistance: number) { current_distance.value = newDistance; + storeRadiusInLocal(newDistance); }, });