From 9b9efdc0977d6986ca909d5432077926864d10a1 Mon Sep 17 00:00:00 2001 From: Marc Littlemore Date: Tue, 26 May 2020 09:04:04 +0100 Subject: [PATCH] feat(autocomplete): add locate event when pin is clicked + tests (#1063) docs(documentation): add locate event for pin --- docs/source/documentation.html.md.erb | 13 +++++++++++++ src/places.js | 1 + src/places.test.js | 28 ++++++++++++++++++++++++++- 3 files changed, 41 insertions(+), 1 deletion(-) diff --git a/docs/source/documentation.html.md.erb b/docs/source/documentation.html.md.erb index 73336e745..30737a407 100644 --- a/docs/source/documentation.html.md.erb +++ b/docs/source/documentation.html.md.erb @@ -546,6 +546,19 @@ live on the [map example](examples.html#link-to-a-map). +
locate
+ +Event data: `undefined` + + + +Fired when the location pin is clicked. This event doesn't return anything. + +You can use this event when the user has chosen to enable geolcation in the browser by clicking on the pin icon. + + + +
limit
Event data: diff --git a/src/places.js b/src/places.js index 17874b64a..4562c84a4 100644 --- a/src/places.js +++ b/src/places.js @@ -159,6 +159,7 @@ export default function places(options) { pin.addEventListener('click', () => { autocompleteDataset.source.configure({ useDeviceLocation: true }); autocompleteInstance.focus(); + placesInstance.emit('locate'); }); clear.addEventListener('click', () => { diff --git a/src/places.test.js b/src/places.test.js index ecc89e7fa..4ffc0d53f 100644 --- a/src/places.test.js +++ b/src/places.test.js @@ -160,9 +160,19 @@ describe('places', () => { describe('places autocomplete', () => { let placesInstance; + let configureMock; beforeEach(() => { autocomplete.mockClear(); + createAutocompleteDataset.mockClear(); + configureMock = jest.fn(); + createAutocompleteDataset.mockImplementation(() => ({ + source: { + configure: configureMock, + }, + other: 'autocompleteDataset', + })); + const container = document .querySelector('body') .appendChild(document.createElement('input')); @@ -184,7 +194,7 @@ describe('places', () => { }, { source: { - configure: 'configure', + configure: configureMock, }, other: 'autocompleteDataset', } @@ -309,6 +319,22 @@ describe('places', () => { expect(pinButton.getAttribute('aria-label')).toEqual('focus'); }); + it('triggers a locate event on pin click', () => { + return new Promise((done) => { + const pinButton = document.querySelector('.ap-icon-pin'); + placesInstance.once('locate', () => { + expect(configureMock).toHaveBeenCalledWith({ + useDeviceLocation: true, + }); + + expect(autocomplete.__instance.focus).toHaveBeenCalled(); + done(); + }); + + pinButton.dispatchEvent(new Event('click')); + }); + }); + describe('input listener', () => { let input; let pinButton;