Skip to content

Commit 54a27ec

Browse files
dobrinyonkovilhan007
authored andcommitted
fix(ui5-avatar-group): click event is fired only once (#3196)
1 parent faff1f0 commit 54a27ec

File tree

3 files changed

+84
-9
lines changed

3 files changed

+84
-9
lines changed

packages/main/src/AvatarGroup.js

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -337,20 +337,23 @@ class AvatarGroup extends UI5Element {
337337
}
338338

339339
_onkeydown(event) {
340-
if (isEnter(event)) {
341-
this._fireGroupEvent(event.target);
342-
}
343-
344-
if (isSpace(event)) {
345-
// prevent scrolling
346-
event.preventDefault();
340+
// when type is "Individual" the ui5-avatar and ui5-button both
341+
// fire "click" event when SPACE or ENTER are pressed and
342+
// AvatarGroup "click" is fired in their handlers (_onClick, _onUI5Click).
343+
if (this._isGroup) {
344+
if (isEnter(event)) {
345+
this._fireGroupEvent(event.target);
346+
} else if (isSpace(event)) {
347+
// prevent scrolling
348+
event.preventDefault();
349+
}
347350
}
348351
}
349352

350353
_onkeyup(event) {
351-
if (!event.shiftKey && isSpace(event)) {
352-
event.preventDefault();
354+
if (!event.shiftKey && isSpace(event) && this._isGroup) {
353355
this._fireGroupEvent(event.target);
356+
event.preventDefault();
354357
}
355358
}
356359

packages/main/test/pages/AvatarGroup.html

Lines changed: 39 additions & 0 deletions
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

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,4 +109,37 @@ describe("avatar-group rendering", () => {
109109
assert.strictEqual(`+${hiddenItemsCount}`, overflowButtonText, "Overflow button shows the hidden items count correctly");
110110
});
111111

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

0 commit comments

Comments
 (0)