Skip to content

Commit d38149c

Browse files
authored
updated people picker with new flyout (#355)
1 parent 6baeef2 commit d38149c

File tree

2 files changed

+20
-39
lines changed

2 files changed

+20
-39
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
@@ -115,7 +115,6 @@ mgt-people-picker .people-person {
115115
mgt-people-picker .list-person {
116116
display: flex;
117117
flex-direction: row;
118-
flex-wrap: wrap;
119118
align-items: center;
120119
padding: 12px;
121120
font-style: normal;
@@ -253,4 +252,5 @@ mgt-people-picker .people-person-text-area {
253252
margin-left: 13px;
254253
flex: 1 1 0;
255254
max-height: 40px;
255+
overflow: hidden;
256256
}

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

Lines changed: 19 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
* -------------------------------------------------------------------------------------------
66
*/
77

8-
import { customElement, html, property, TemplateResult } from 'lit-element';
8+
import { customElement, html, property, query, TemplateResult } from 'lit-element';
99
import { classMap } from 'lit-html/directives/class-map';
1010
import { repeat } from 'lit-html/directives/repeat';
1111
import { findPerson, getPeopleFromGroup } from '../../graph/graph.people';
@@ -15,6 +15,7 @@ import { ProviderState } from '../../providers/IProvider';
1515
import '../../styles/fabric-icon-font';
1616
import { debounce } from '../../utils/Utils';
1717
import { IDynamicPerson } from '../mgt-person/mgt-person';
18+
import { MgtFlyout } from '../sub-components/mgt-flyout/mgt-flyout';
1819
import { MgtTemplatedComponent } from '../templatedComponent';
1920
import { styles } from './mgt-people-picker-css';
2021

@@ -106,26 +107,17 @@ export class MgtPeoplePicker extends MgtTemplatedComponent {
106107
protected userInput: string;
107108

108109
/**
109-
* Check the current state of the results flyout
110+
* Gets the flyout element
110111
*
111-
* @readonly
112112
* @protected
113-
* @type {boolean}
114-
* @memberof MgtPeoplePicker
113+
* @type {MgtFlyout}
114+
* @memberof MgtLogin
115115
*/
116-
protected get isFlyoutOpen(): boolean {
117-
return this._showFlyout;
118-
}
116+
@query('.flyout') protected flyout: MgtFlyout;
119117

120118
// if search is still loading don't load "people not found" state
121119
@property({ attribute: false }) private _showLoading: boolean;
122120

123-
/**
124-
* determines if login menu popup should be showing
125-
* @type {boolean}
126-
*/
127-
@property({ attribute: false }) private _showFlyout: boolean;
128-
129121
private _groupId: string;
130122
// tracking of user arrow key input for selection
131123
private _arrowSelectionCount: number = 0;
@@ -137,12 +129,10 @@ export class MgtPeoplePicker extends MgtTemplatedComponent {
137129
super();
138130

139131
this._showLoading = true;
140-
this._showFlyout = false;
141132
this._groupId = null;
142133
this.userInput = '';
143134
this.showMax = 6;
144135
this.selectedPeople = [];
145-
this.handleWindowClick = this.handleWindowClick.bind(this);
146136
}
147137

148138
/**
@@ -153,17 +143,6 @@ export class MgtPeoplePicker extends MgtTemplatedComponent {
153143
public connectedCallback() {
154144
super.connectedCallback();
155145
this.addEventListener('click', e => e.stopPropagation());
156-
window.addEventListener('click', this.handleWindowClick);
157-
}
158-
159-
/**
160-
* Invoked each time the custom element is disconnected from the document's DOM
161-
*
162-
* @memberof MgtLogin
163-
*/
164-
public disconnectedCallback() {
165-
window.removeEventListener('click', this.handleWindowClick);
166-
super.disconnectedCallback();
167146
}
168147

169148
/**
@@ -227,17 +206,16 @@ export class MgtPeoplePicker extends MgtTemplatedComponent {
227206

228207
const selectedPeopleTemplate = this.renderSelectedPeople(this.selectedPeople);
229208
const inputTemplate = this.renderInput();
230-
const flyoutTemplate = this.renderFlyout();
209+
const flyoutTemplate = this.renderFlyout(inputTemplate);
231210
return html`
232211
<div class="people-picker" @click=${() => this.focus()}>
233212
<div class="people-picker-input">
234213
<div class="people-selected-list">
235-
${selectedPeopleTemplate} ${inputTemplate}
214+
${selectedPeopleTemplate} ${flyoutTemplate}
236215
</div>
237216
</div>
238217
<div class="people-list-separator"></div>
239218
</div>
240-
${flyoutTemplate}
241219
`;
242220
}
243221

@@ -324,9 +302,10 @@ export class MgtPeoplePicker extends MgtTemplatedComponent {
324302
* @returns {TemplateResult}
325303
* @memberof MgtPeoplePicker
326304
*/
327-
protected renderFlyout(): TemplateResult {
305+
protected renderFlyout(anchor: TemplateResult): TemplateResult {
328306
return html`
329-
<mgt-flyout .isOpen=${this._showFlyout}>
307+
<mgt-flyout light-dismiss class="flyout">
308+
${anchor}
330309
<div slot="flyout">
331310
<div class="flyout-root">
332311
${this.renderFlyoutContent()}
@@ -517,7 +496,10 @@ export class MgtPeoplePicker extends MgtTemplatedComponent {
517496
* @memberof MgtPeoplePicker
518497
*/
519498
protected hideFlyout(): void {
520-
this._showFlyout = false;
499+
const flyout = this.flyout;
500+
if (flyout) {
501+
flyout.close();
502+
}
521503
}
522504

523505
/**
@@ -527,7 +509,10 @@ export class MgtPeoplePicker extends MgtTemplatedComponent {
527509
* @memberof MgtPeoplePicker
528510
*/
529511
protected showFlyout(): void {
530-
this._showFlyout = true;
512+
const flyout = this.flyout;
513+
if (flyout) {
514+
flyout.open();
515+
}
531516
}
532517

533518
/**
@@ -749,8 +734,4 @@ export class MgtPeoplePicker extends MgtTemplatedComponent {
749734
return filtered;
750735
}
751736
}
752-
753-
private handleWindowClick(e: MouseEvent): void {
754-
this.hideFlyout();
755-
}
756737
}

0 commit comments

Comments
 (0)