Include list names in search results for saved places
All checks were successful
CI / Lint (pull_request) Successful in 32s
CI / Test (pull_request) Successful in 55s
Release Drafter / Update release notes draft (pull_request) Successful in 16s

This commit is contained in:
2026-06-06 12:00:48 +04:00
parent f9cb22ee0e
commit f82a797720
2 changed files with 34 additions and 11 deletions

View File

@@ -51,6 +51,29 @@ export default class SearchBoxComponent extends Component {
this.searchTask.perform(value);
}
formatSavedPlace(place) {
const listNames = (place._listIds || [])
.map((id) => this.storage.lists?.find((l) => l.id === id)?.title)
.filter(Boolean)
.join(', ');
const description = listNames
? `Saved place (${listNames})`
: 'Saved place';
return {
source: 'saved',
id: place.id,
title: place.title,
icon: 'bookmark',
description,
osmId: place.osmId,
osmType: place.osmType,
lat: place.lat,
lon: place.lon,
};
}
searchTask = task({ restartable: true }, async (term) => {
await timeout(300);
@@ -82,17 +105,7 @@ export default class SearchBoxComponent extends Component {
if (q.length >= 3) {
savedMatches = this.storage.savedPlaces
.filter((p) => p.title && p.title.toLowerCase().includes(q))
.map((p) => ({
source: 'saved',
id: p.id,
title: p.title,
icon: 'bookmark',
description: 'Saved place',
osmId: p.osmId,
osmType: p.osmType,
lat: p.lat,
lon: p.lon,
}));
.map((p) => this.formatSavedPlace(p));
}
const results = await this.photon.search(query, lat, lon);

View File

@@ -249,6 +249,7 @@ module('Integration | Component | search-box', function (hooks) {
// Mock Storage Service
class MockStorageService extends Service {
lists = [{ id: 'favs', title: 'Favorites' }];
savedPlaces = [
{
title: 'Awesome Coffee',
@@ -256,6 +257,7 @@ module('Integration | Component | search-box', function (hooks) {
lon: 13.4,
osmId: '999',
osmType: 'node',
_listIds: ['favs'],
},
];
}
@@ -355,6 +357,7 @@ module('Integration | Component | search-box', function (hooks) {
// Mock Storage Service
class MockStorageService extends Service {
lists = [{ id: 'favs', title: 'Favorites' }];
savedPlaces = [
{
title: 'Awesome Coffee',
@@ -362,6 +365,7 @@ module('Integration | Component | search-box', function (hooks) {
lon: 13.4,
osmId: '999',
osmType: 'node',
_listIds: ['favs'],
},
];
}
@@ -430,6 +434,12 @@ module('Integration | Component | search-box', function (hooks) {
resultItems.some((item) => item.textContent.includes('Awesome Coffee')),
'Saved place is now shown'
);
assert.ok(
resultItems.some((item) =>
item.textContent.includes('Saved place (Favorites)')
),
'List names are appended to the description'
);
});
test('it navigates to internal ID for custom saved places without an OSM ID', async function (assert) {