Fix place route being active after closing place details

Depending on where a place was opened from, it now goes back to the
index or (active) search route
This commit is contained in:
2026-06-30 18:06:12 +02:00
parent 981502e293
commit 59e334c499
4 changed files with 35 additions and 3 deletions

View File

@@ -33,7 +33,9 @@ export default class SearchController extends Controller {
// 2. If it's a back navigation to the exact same search, resolve instantly with no animation
if (isSameSearch && hasResults) {
this.mapUi.showSidebar();
if (this.mapUi.isSidebarVisible) {
this.mapUi.showSidebar();
}
return;
}

View File

@@ -55,6 +55,14 @@ export default class ApplicationComponent extends Component {
this.mapUi.hideSidebar();
if (name === 'menu' || name.startsWith('lists')) {
this.router.transitionTo('index');
} else if (name === 'place') {
if (this.mapUi.returnToSearch && this.mapUi.currentSearch) {
this.router.transitionTo('search', {
queryParams: this.mapUi.currentSearch,
});
} else {
this.router.transitionTo('index');
}
}
}
}

View File

@@ -104,6 +104,13 @@ export default class PlaceTemplate extends Component {
close() {
this.mapUi.clearSelection();
this.mapUi.hideSidebar();
if (this.mapUi.returnToSearch && this.mapUi.currentSearch) {
this.router.transitionTo('search', {
queryParams: this.mapUi.currentSearch,
});
} else {
this.router.transitionTo('index');
}
}
<template>

View File

@@ -85,7 +85,7 @@ module('Acceptance | navigation', function (hooks) {
);
});
test('closing the sidebar resets the returnToSearch flag', async function (assert) {
test('closing the sidebar transitions back to search route when opened from search results', async function (assert) {
const mapUi = this.owner.lookup('service:map-ui');
await visit('/search?lat=1&lon=1');
@@ -97,7 +97,22 @@ module('Acceptance | navigation', function (hooks) {
await click('.close-btn');
assert.dom('.sidebar').doesNotExist('Sidebar should be closed');
assert.ok(currentURL().includes('/place/'), 'Remains on place route');
assert.strictEqual(
currentURL(),
'/search?lat=1&lon=1',
'Should transition back to search route'
);
});
test('closing the sidebar when visiting a place directly transitions to index', async function (assert) {
await visit('/place/osm:node:123');
assert.ok(currentURL().includes('/place/'), 'Visited place directly');
// Click the Close (X) button
await click('.close-btn');
assert.dom('.sidebar').doesNotExist('Sidebar should be closed');
assert.strictEqual(currentURL(), '/', 'Should transition back to index');
});
test('navigating directly to place and back closes sidebar', async function (assert) {