From 5517e826aaa56552196d7162e848287472bb0943 Mon Sep 17 00:00:00 2001 From: Ryanba <92616678+Gujiassh@users.noreply.github.com> Date: Wed, 29 Apr 2026 11:55:25 +0800 Subject: [PATCH] fix(UI): improve global map banner display logic (#702) --- admin/inertia/lib/global_map_banner.ts | 10 ++++++ admin/inertia/pages/settings/maps.tsx | 20 +++++++++++- admin/tests/unit/global_map_banner.spec.ts | 37 ++++++++++++++++++++++ 3 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 admin/inertia/lib/global_map_banner.ts create mode 100644 admin/tests/unit/global_map_banner.spec.ts diff --git a/admin/inertia/lib/global_map_banner.ts b/admin/inertia/lib/global_map_banner.ts new file mode 100644 index 0000000..1693dac --- /dev/null +++ b/admin/inertia/lib/global_map_banner.ts @@ -0,0 +1,10 @@ +export function hasDownloadedGlobalMap( + globalMapKey: string | null | undefined, + storedMapFiles: Array<{ name: string }> +): boolean { + if (!globalMapKey) { + return false + } + + return storedMapFiles.some((file) => file.name === globalMapKey || /^\d{8}\.pmtiles$/.test(file.name)) +} diff --git a/admin/inertia/pages/settings/maps.tsx b/admin/inertia/pages/settings/maps.tsx index 0212931..da97bb1 100644 --- a/admin/inertia/pages/settings/maps.tsx +++ b/admin/inertia/pages/settings/maps.tsx @@ -17,6 +17,7 @@ import type { CollectionWithStatus } from '../../../types/collections' import ActiveDownloads from '~/components/ActiveDownloads' import Alert from '~/components/Alert' import { formatBytes } from '~/lib/util' +import { hasDownloadedGlobalMap } from '~/lib/global_map_banner' const CURATED_COLLECTIONS_KEY = 'curated-map-collections' const GLOBAL_MAP_INFO_KEY = 'global-map-info' @@ -45,6 +46,7 @@ export default function MapsManager(props: { queryFn: () => api.getGlobalMapInfo(), refetchOnWindowFocus: false, }) + const globalMapAlreadyDownloaded = hasDownloadedGlobalMap(globalMapInfo?.key, props.maps.regionFiles) const downloadGlobalMap = useMutation({ mutationFn: () => api.downloadGlobalMap(), @@ -251,7 +253,23 @@ export default function MapsManager(props: { }} /> )} - {globalMapInfo && ( + {globalMapInfo && globalMapAlreadyDownloaded && ( + confirmGlobalMapDownload(), + }} + /> + )} + {globalMapInfo && !globalMapAlreadyDownloaded && ( { + assert.equal( + hasDownloadedGlobalMap('20260402.pmtiles', [ + { name: '20260402.pmtiles' }, + { name: 'california.pmtiles' }, + ]), + true + ) +}) + +test('returns false when the global map key is missing', () => { + assert.equal( + hasDownloadedGlobalMap('20260402.pmtiles', [ + { name: 'california.pmtiles' }, + ]), + false + ) +}) + +test('returns true when an older global map build is already on disk', () => { + assert.equal( + hasDownloadedGlobalMap('20260402.pmtiles', [ + { name: '20260315.pmtiles' }, + { name: 'california.pmtiles' }, + ]), + true + ) +}) + +test('returns false when there is no global map info', () => { + assert.equal(hasDownloadedGlobalMap(undefined, [{ name: '20260402.pmtiles' }]), false) +})