From 9e2545da7b09a5c7b168af7ed99c662fa429525a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A2u=20Cao?= Date: Sun, 12 Apr 2026 15:42:36 +0400 Subject: [PATCH] Add mobile phone numbers --- app/components/place-details.gjs | 24 +++++++++---- .../components/place-details-test.gjs | 36 +++++++++++++++++++ 2 files changed, 54 insertions(+), 6 deletions(-) diff --git a/app/components/place-details.gjs b/app/components/place-details.gjs index 2f27201..b3b362a 100644 --- a/app/components/place-details.gjs +++ b/app/components/place-details.gjs @@ -130,10 +130,14 @@ export default class PlaceDetails extends Component { formatMultiLine(val, type) { if (!val) return null; - const parts = val - .split(';') - .map((s) => s.trim()) - .filter(Boolean); + const parts = [ + ...new Set( + val + .split(';') + .map((s) => s.trim()) + .filter(Boolean) + ), + ]; if (parts.length === 0) return null; if (type === 'phone') { @@ -165,8 +169,16 @@ export default class PlaceDetails extends Component { } get phone() { - const val = this.tags.phone || this.tags['contact:phone']; - return this.formatMultiLine(val, 'phone'); + const rawValues = [ + this.tags.phone, + this.tags['contact:phone'], + this.tags.mobile, + this.tags['contact:mobile'], + ].filter(Boolean); + + if (rawValues.length === 0) return null; + + return this.formatMultiLine(rawValues.join(';'), 'phone'); } get email() { diff --git a/tests/integration/components/place-details-test.gjs b/tests/integration/components/place-details-test.gjs index d2d50a3..4956952 100644 --- a/tests/integration/components/place-details-test.gjs +++ b/tests/integration/components/place-details-test.gjs @@ -255,4 +255,40 @@ module('Integration | Component | place-details', function (hooks) { assert.dom('.actions button').hasText('Save'); assert.dom('.actions button').doesNotHaveClass('btn-secondary'); }); + + test('it aggregates phone and mobile tags without duplicates', async function (assert) { + const place = { + title: 'Phone Shop', + osmTags: { + phone: '+1 234 567 8900', + 'contact:phone': '+1 234 567 8900; +1 000 000 0000', + mobile: '+1 987 654 3210', + 'contact:mobile': '+1 987 654 3210', + }, + }; + + await render(); + + // Use specific selector for the phone block since there's no cuisine or opening_hours + const metaInfos = Array.from( + this.element.querySelectorAll('.meta-info .content-with-icon') + ); + const phoneBlock = metaInfos.find((el) => { + const iconSpan = el.querySelector('span.icon[title="Phone"]'); + return !!iconSpan; + }); + + assert.ok(phoneBlock, 'Phone block is rendered'); + + const links = phoneBlock.querySelectorAll('a[href^="tel:"]'); + assert.strictEqual( + links.length, + 3, + 'Rendered exactly 3 unique phone links' + ); + + assert.dom(links[0]).hasText('+1 234 567 8900'); + assert.dom(links[1]).hasText('+1 000 000 0000'); + assert.dom(links[2]).hasText('+1 987 654 3210'); + }); });