diff --git a/src/features/background/api/backgroundLoader.js b/src/features/background/api/backgroundLoader.js index be4f14cf..857f93c2 100644 --- a/src/features/background/api/backgroundLoader.js +++ b/src/features/background/api/backgroundLoader.js @@ -330,8 +330,8 @@ function getPhotoPackBackground(isOffline) { ...(selected.colour && { colour: selected.colour }), ...(selected.camera && { camera: selected.camera }), ...(selected.category && { category: selected.category }), - ...(selected.latitude && - selected.longitude && { + ...(selected.latitude != null && + selected.longitude != null && { latitude: selected.latitude, longitude: selected.longitude, }), @@ -395,8 +395,8 @@ async function prefetchPhotoPackImages(queueManager, pool, currentPhoto, current ...(photo.colour && { colour: photo.colour }), ...(photo.camera && { camera: photo.camera }), ...(photo.category && { category: photo.category }), - ...(photo.latitude && - photo.longitude && { + ...(photo.latitude != null && + photo.longitude != null && { latitude: photo.latitude, longitude: photo.longitude, }), diff --git a/src/features/background/api/photoPackAPI.js b/src/features/background/api/photoPackAPI.js index 47ec26b7..5a2246a9 100644 --- a/src/features/background/api/photoPackAPI.js +++ b/src/features/background/api/photoPackAPI.js @@ -1,5 +1,14 @@ import variables from 'config/variables'; +const toNumericCoordinate = (value) => { + if (value === null || value === undefined || value === '') { + return null; + } + + const parsed = Number(value); + return Number.isFinite(parsed) ? parsed : null; +}; + const responseParser = { pexels: (data, query) => { const photos = data.photos || []; @@ -59,17 +68,27 @@ const responseParser = { }; }, - default: (data) => ({ - photographer: data.photographer, - location: data.location?.name || data.location || 'Unknown', - url: { default: data.file }, - blur_hash: data.blur_hash || null, - colour: data.colour, - ...(data.photo_page && { photo_page: data.photo_page }), - ...(data.photographer_page && { photographer_page: data.photographer_page }), - ...(data.category && { category: data.category }), - ...(data.camera && { camera: data.camera }), - }), + default: (data) => { + const latitude = toNumericCoordinate(data.location?.latitude); + const longitude = toNumericCoordinate(data.location?.longitude); + + return { + photographer: data.photographer, + location: data.location?.name || data.location || 'Unknown', + url: { default: data.file }, + blur_hash: data.blur_hash || null, + colour: data.colour, + ...(latitude !== null && longitude !== null && { latitude, longitude }), + ...(data.photo_page && { photo_page: data.photo_page }), + ...(data.photographer_page && { photographer_page: data.photographer_page }), + ...(data.category && { category: data.category }), + ...(data.camera && { camera: data.camera }), + ...(data.views !== undefined && { views: data.views }), + ...(data.downloads !== undefined && { downloads: data.downloads }), + ...(data.likes !== undefined && { likes: data.likes }), + ...(data.description && { description: data.description }), + }; + }, }; /** @@ -363,8 +382,8 @@ export function buildPhotoPool() { ...(photo.colour && { colour: photo.colour }), ...(photo.camera && { camera: photo.camera }), ...(photo.category && { category: photo.category }), - ...(photo.latitude && - photo.longitude && { latitude: photo.latitude, longitude: photo.longitude }), + ...(photo.latitude != null && + photo.longitude != null && { latitude: photo.latitude, longitude: photo.longitude }), ...(photo.photo_page && { photo_page: photo.photo_page }), ...(photo.photographer_page && { photographer_page: photo.photographer_page }), }); diff --git a/src/features/background/components/PhotoInformation.jsx b/src/features/background/components/PhotoInformation.jsx index 4355bee4..adf69327 100644 --- a/src/features/background/components/PhotoInformation.jsx +++ b/src/features/background/components/PhotoInformation.jsx @@ -278,6 +278,9 @@ function PhotoInformation({ info, url, api }) { const [shareModal, openShareModal] = useState(false); const [excludeModal, openExcludeModal] = useState(false); const [favouriteTooltipText, setFavouriteTooltipText] = useState(t('widgets.quote.favourite')); + const latitude = Number(info.latitude); + const longitude = Number(info.longitude); + const hasCoordinates = Number.isFinite(latitude) && Number.isFinite(longitude); // Handle pack link click const handlePackClick = (packId) => { @@ -406,7 +409,7 @@ function PhotoInformation({ info, url, api }) { {/* PRIMARY SECTION - Always Visible */}
- {localStorage.getItem('photoMap') === 'true' && info.latitude && info.longitude && ( + {localStorage.getItem('photoMap') === 'true' && hasCoordinates && ( @@ -414,7 +417,7 @@ function PhotoInformation({ info, url, api }) {
} > - + )}
@@ -435,10 +438,10 @@ function PhotoInformation({ info, url, api }) { {/* EXPANDED SECTION - CSS :hover controlled */}
- {localStorage.getItem('photoMap') === 'true' && info.latitude && info.longitude && ( + {localStorage.getItem('photoMap') === 'true' && hasCoordinates && ( <> }> - +