Skip to content

Commit 7e28144

Browse files
authored
people-picker bugs (#461)
* Leftarrow Rightarrow fix for people-picker * removing propagation from picker * flyout functionality upon selection of person * ie11 fix for eight digit hex and Code (enter and tab) incompatibilities. * backspace re-adds removed selected people to list, also handles infinite loading spinner * necessary requestUpdate for ie11 focus change
2 parents 4ab79c8 + 24a4ac0 commit 7e28144

File tree

2 files changed

+22
-11
lines changed

2 files changed

+22
-11
lines changed

src/components/mgt-people-picker/mgt-people-picker.scss

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ $input-focus-color: var(--input-focus-color, #0078d4);
2727
$input-background-color: var(--input-background-color, var(--people-list-background-color, white));
2828

2929
$dropdown-background-color: var(--dropdown-background-color, white);
30-
$dropdown-item-hover-background: var(--dropdown-item-hover-background, #f1f1f1dd);
30+
$dropdown-item-hover-background: var(--dropdown-item-hover-background, rgba(241, 241, 241, 0.87));
3131

3232
$placeholder-default-color: var(--placeholder-default-color, #605e5c);
3333
$placeholder-focus-color: var(--placeholder-focus-color, #323130);

src/components/mgt-people-picker/mgt-people-picker.ts

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -263,6 +263,8 @@ export class MgtPeoplePicker extends MgtTemplatedComponent {
263263

264264
private defaultPeople: IDynamicPerson[];
265265

266+
private selectionMade = false;
267+
266268
// tracking of user arrow key input for selection
267269
private _arrowSelectionCount: number = 0;
268270
// List of people requested if group property is provided
@@ -289,7 +291,6 @@ export class MgtPeoplePicker extends MgtTemplatedComponent {
289291
*/
290292
public connectedCallback() {
291293
super.connectedCallback();
292-
this.addEventListener('click', e => e.stopPropagation());
293294
}
294295

295296
/**
@@ -316,10 +317,14 @@ export class MgtPeoplePicker extends MgtTemplatedComponent {
316317
}
317318

318319
if (shouldShow) {
319-
window.requestAnimationFrame(() => {
320-
// Mouse is focused on input
321-
this.showFlyout();
322-
});
320+
if (!this.selectionMade) {
321+
window.requestAnimationFrame(() => {
322+
// Mouse is focused on input
323+
this.showFlyout();
324+
});
325+
} else {
326+
this.selectionMade = false;
327+
}
323328
}
324329
}
325330

@@ -787,6 +792,7 @@ export class MgtPeoplePicker extends MgtTemplatedComponent {
787792

788793
this.loadState();
789794
this._foundPeople = [];
795+
this.selectionMade = true;
790796
}
791797
}
792798
}
@@ -803,6 +809,7 @@ export class MgtPeoplePicker extends MgtTemplatedComponent {
803809

804810
private lostFocus() {
805811
this._isFocused = false;
812+
this.requestUpdate();
806813
}
807814

808815
private renderHighlightText(person: IDynamicPerson): TemplateResult {
@@ -847,8 +854,8 @@ export class MgtPeoplePicker extends MgtTemplatedComponent {
847854
* Adds debounce method for set delay on user input
848855
*/
849856
private onUserKeyUp(event: KeyboardEvent): void {
850-
if (event.keyCode === 40 || event.keyCode === 38) {
851-
// keyCodes capture: down arrow (40) and up arrow (38)
857+
if (event.keyCode === 40 || event.keyCode === 39 || event.keyCode === 38 || event.keyCode === 37) {
858+
// keyCodes capture: down arrow (40), right arrow (39), up arrow (38) and left arrow (37)
852859
return;
853860
}
854861

@@ -865,6 +872,7 @@ export class MgtPeoplePicker extends MgtTemplatedComponent {
865872
this.userInput = '';
866873
// remove last person in selected list
867874
this.selectedPeople = this.selectedPeople.splice(0, this.selectedPeople.length - 1);
875+
this.loadState();
868876
// reset flyout position
869877
this.hideFlyout();
870878
this.showFlyout();
@@ -873,7 +881,9 @@ export class MgtPeoplePicker extends MgtTemplatedComponent {
873881
return;
874882
}
875883

876-
this.handleUserSearch(input);
884+
if (input.value) {
885+
this.handleUserSearch(input);
886+
}
877887
}
878888

879889
private onPersonClick(person: IDynamicPerson): void {
@@ -882,7 +892,6 @@ export class MgtPeoplePicker extends MgtTemplatedComponent {
882892
if (this.selectionMode === 'single') {
883893
return;
884894
}
885-
this.focus();
886895
}
887896

888897
/**
@@ -933,7 +942,9 @@ export class MgtPeoplePicker extends MgtTemplatedComponent {
933942
event.preventDefault();
934943
}
935944
}
936-
if (event.code === 'Tab' || event.code === 'Enter') {
945+
946+
if (event.keyCode === 9 || event.keyCode === 13) {
947+
// keyCodes capture: tab (9) and enter (13)
937948
if (this._foundPeople.length) {
938949
event.preventDefault();
939950
}

0 commit comments

Comments
 (0)