Skip to content

Commit 95986e2

Browse files
authored
fix(ui5-avatar-group): click event is fired only once (#3196)
1 parent 55a7add commit 95986e2

File tree

3 files changed

+84
-9
lines changed

3 files changed

+84
-9
lines changed

packages/main/src/AvatarGroup.js

+12-9
Original file line numberDiff line numberDiff line change
@@ -341,20 +341,23 @@ class AvatarGroup extends UI5Element {
341341
}
342342

343343
_onkeydown(event) {
344-
if (isEnter(event)) {
345-
this._fireGroupEvent(event.target);
346-
}
347-
348-
if (isSpace(event)) {
349-
// prevent scrolling
350-
event.preventDefault();
344+
// when type is "Individual" the ui5-avatar and ui5-button both
345+
// fire "click" event when SPACE or ENTER are pressed and
346+
// AvatarGroup "click" is fired in their handlers (_onClick, _onUI5Click).
347+
if (this._isGroup) {
348+
if (isEnter(event)) {
349+
this._fireGroupEvent(event.target);
350+
} else if (isSpace(event)) {
351+
// prevent scrolling
352+
event.preventDefault();
353+
}
351354
}
352355
}
353356

354357
_onkeyup(event) {
355-
if (!event.shiftKey && isSpace(event)) {
356-
event.preventDefault();
358+
if (!event.shiftKey && isSpace(event) && this._isGroup) {
357359
this._fireGroupEvent(event.target);
360+
event.preventDefault();
358361
}
359362
}
360363

packages/main/test/pages/AvatarGroup.html

+39
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,27 @@ <h5>Business card</h5>
144144
</ui5-avatar-group>
145145
<br>
146146

147+
<h3>Test Fired Events</h3>
148+
<br>
149+
<div style="width: 400px;">
150+
<ui5-avatar-group type="Individual" avatar-size="XL" id="avatar-group-individual-events">
151+
<ui5-avatar interactive icon="home" initials="XL" id="avatar-1-test-events"></ui5-avatar>
152+
<ui5-avatar interactive initials="XL"></ui5-avatar>
153+
<ui5-avatar interactive icon="home"></ui5-avatar>
154+
<ui5-avatar interactive initials="XL"></ui5-avatar>
155+
</ui5-avatar-group>
156+
</div>
157+
<br>
158+
<div style="width: 400px;">
159+
<ui5-avatar-group type="Group" avatar-size="XL" id="avatar-group-group-events">
160+
<ui5-avatar interactive icon="home" initials="XL"></ui5-avatar>
161+
<ui5-avatar interactive initials="XL"></ui5-avatar>
162+
<ui5-avatar interactive icon="home"></ui5-avatar>
163+
<ui5-avatar interactive initials="XL"></ui5-avatar>
164+
</ui5-avatar-group>
165+
</div>
166+
<br>
167+
147168
<div class="demo-section">
148169
<span>TargetRef Tag Name: </span>
149170
<input type="text" id="event-target" />
@@ -157,6 +178,12 @@ <h5>Business card</h5>
157178
<br>
158179
<br>
159180

181+
<span>Avatars clicked count: </span>
182+
<input type="text" id="event-avatars-clicked" value="0" />
183+
184+
<br>
185+
<br>
186+
160187
<button id="reset-btn">Reset fields</button>
161188
</div>
162189
<br>
@@ -237,7 +264,11 @@ <h3>AvatarGroup with user defined overflow button</h3>
237264
var eventName = document.getElementById("event-name");
238265
var eventTargetRef = document.getElementById("event-target");
239266
var eventOverflowButtonClicked = document.getElementById("event-overflow-button-clicked");
267+
var eventAvatarsClicked = document.getElementById("event-avatars-clicked");
268+
var eventAvatarsClickedValue = eventAvatarsClicked.value;
240269
var avatarGroupIndividual = document.getElementById("avatar-group-individual");
270+
var avatarGroupIndividualEvents = document.getElementById("avatar-group-individual-events");
271+
var avatarGroupGroupEvents = document.getElementById("avatar-group-group-events");
241272
var avatarGroupGroup = document.getElementById("avatar-group-group");
242273
var groupPop = document.getElementById("group-pop")
243274
var individualPop = document.getElementById("individual-pop")
@@ -289,6 +320,13 @@ <h3>AvatarGroup with user defined overflow button</h3>
289320
individualPop.openBy(avatarRef);
290321
}
291322

323+
avatarGroupGroupEvents.addEventListener("ui5-click", function (event) {
324+
eventAvatarsClicked.value= ++eventAvatarsClickedValue;
325+
});
326+
327+
avatarGroupIndividualEvents.addEventListener("ui5-click", function (event) {
328+
eventAvatarsClicked.value= ++eventAvatarsClickedValue;
329+
});
292330

293331
avatarGroupIndividual.addEventListener("ui5-click", function (event) {
294332
eventTargetRef.value = event.detail.targetRef.tagName;
@@ -316,6 +354,7 @@ <h3>AvatarGroup with user defined overflow button</h3>
316354
eventName.value = "";
317355
eventTargetRef.value = "";
318356
eventOverflowButtonClicked.value = "";
357+
eventAvatarsClicked.value = "";
319358
});
320359

321360
function formatBtnText(group) {

packages/main/test/specs/AvatarGroup.spec.js

+33
Original file line numberDiff line numberDiff line change
@@ -110,4 +110,37 @@ describe("avatar-group rendering", () => {
110110
assert.strictEqual(`+${hiddenItemsCount}`, overflowButtonText, "Overflow button shows the hidden items count correctly");
111111
});
112112

113+
it("tests if click event is firing only once", () => {
114+
browser.url(`http://localhost:${PORT}/test-resources/pages/AvatarGroup.html`);
115+
let eventCounter = 0;
116+
117+
const avatar = browser.$("#avatar-1-test-events");
118+
const overflowButton = browser.$("#avatar-group-individual-events").shadow$("ui5-button");
119+
const avatarGroupTypeGroup = browser.$("#avatar-group-group-events");
120+
const eventAvatarsClicked = browser.$("#event-avatars-clicked");
121+
const getEventsCount = () => parseInt(eventAvatarsClicked.getValue())
122+
123+
avatar.click() // set focus (important for the keys interaction to take action)
124+
assert.strictEqual(getEventsCount(), ++eventCounter, "Avatar group 'click' event only fires once per mouse click interaction - Avatar");
125+
avatar.keys('Enter');
126+
assert.strictEqual(getEventsCount(), ++eventCounter, "Avatar group 'click' event only fires once per keyboard 'Enter' interaction - Avatar");
127+
avatar.keys('Space');
128+
assert.strictEqual(getEventsCount(), ++eventCounter, "Avatar group 'click' event only fires once per keyboard 'Space' interaction - Avatar");
129+
130+
overflowButton.click() // set focus (important for the keys interaction to take action)
131+
assert.strictEqual(getEventsCount(), ++eventCounter, "Avatar group 'click' event only fires once per mouse click interaction - Overflow Button");
132+
overflowButton.keys('Enter');
133+
assert.strictEqual(getEventsCount(), ++eventCounter, "Avatar group 'click' event only fires once per keyboard 'Enter' interaction - Overflow Button");
134+
overflowButton.keys('Space');
135+
assert.strictEqual(getEventsCount(), ++eventCounter, "Avatar group 'click' event only fires once per keyboard 'Space' interaction - Overflow Button");
136+
137+
avatarGroupTypeGroup.click() // set focus (important for the keys interaction to take action)
138+
assert.strictEqual(getEventsCount(), ++eventCounter, "Avatar group 'click' event only fires once per mouse click interaction - Avatar Group type Group");
139+
avatarGroupTypeGroup.keys('Enter');
140+
assert.strictEqual(getEventsCount(), ++eventCounter, "Avatar group 'click' event only fires once per keyboard 'Enter' interaction - Avatar Group type Group");
141+
avatarGroupTypeGroup.keys('Space');
142+
assert.strictEqual(getEventsCount(), ++eventCounter, "Avatar group 'click' event only fires once per keyboard 'Space' interaction - Avatar Group type Group");
143+
144+
145+
});
113146
});

0 commit comments

Comments
 (0)