Include list names in search results for saved places
This commit is contained in:
@@ -51,6 +51,29 @@ export default class SearchBoxComponent extends Component {
|
|||||||
this.searchTask.perform(value);
|
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) => {
|
searchTask = task({ restartable: true }, async (term) => {
|
||||||
await timeout(300);
|
await timeout(300);
|
||||||
|
|
||||||
@@ -82,17 +105,7 @@ export default class SearchBoxComponent extends Component {
|
|||||||
if (q.length >= 3) {
|
if (q.length >= 3) {
|
||||||
savedMatches = this.storage.savedPlaces
|
savedMatches = this.storage.savedPlaces
|
||||||
.filter((p) => p.title && p.title.toLowerCase().includes(q))
|
.filter((p) => p.title && p.title.toLowerCase().includes(q))
|
||||||
.map((p) => ({
|
.map((p) => this.formatSavedPlace(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,
|
|
||||||
}));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const results = await this.photon.search(query, lat, lon);
|
const results = await this.photon.search(query, lat, lon);
|
||||||
|
|||||||
@@ -249,6 +249,7 @@ module('Integration | Component | search-box', function (hooks) {
|
|||||||
|
|
||||||
// Mock Storage Service
|
// Mock Storage Service
|
||||||
class MockStorageService extends Service {
|
class MockStorageService extends Service {
|
||||||
|
lists = [{ id: 'favs', title: 'Favorites' }];
|
||||||
savedPlaces = [
|
savedPlaces = [
|
||||||
{
|
{
|
||||||
title: 'Awesome Coffee',
|
title: 'Awesome Coffee',
|
||||||
@@ -256,6 +257,7 @@ module('Integration | Component | search-box', function (hooks) {
|
|||||||
lon: 13.4,
|
lon: 13.4,
|
||||||
osmId: '999',
|
osmId: '999',
|
||||||
osmType: 'node',
|
osmType: 'node',
|
||||||
|
_listIds: ['favs'],
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
@@ -355,6 +357,7 @@ module('Integration | Component | search-box', function (hooks) {
|
|||||||
|
|
||||||
// Mock Storage Service
|
// Mock Storage Service
|
||||||
class MockStorageService extends Service {
|
class MockStorageService extends Service {
|
||||||
|
lists = [{ id: 'favs', title: 'Favorites' }];
|
||||||
savedPlaces = [
|
savedPlaces = [
|
||||||
{
|
{
|
||||||
title: 'Awesome Coffee',
|
title: 'Awesome Coffee',
|
||||||
@@ -362,6 +365,7 @@ module('Integration | Component | search-box', function (hooks) {
|
|||||||
lon: 13.4,
|
lon: 13.4,
|
||||||
osmId: '999',
|
osmId: '999',
|
||||||
osmType: 'node',
|
osmType: 'node',
|
||||||
|
_listIds: ['favs'],
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
@@ -430,6 +434,12 @@ module('Integration | Component | search-box', function (hooks) {
|
|||||||
resultItems.some((item) => item.textContent.includes('Awesome Coffee')),
|
resultItems.some((item) => item.textContent.includes('Awesome Coffee')),
|
||||||
'Saved place is now shown'
|
'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) {
|
test('it navigates to internal ID for custom saved places without an OSM ID', async function (assert) {
|
||||||
|
|||||||
Reference in New Issue
Block a user