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