@@ -25,7 +25,7 @@ import { MgtPeople } from '../mgt-people/mgt-people';
2525import '../mgt-person/mgt-person' ;
2626import '../sub-components/mgt-arrow-options/mgt-arrow-options' ;
2727import '../sub-components/mgt-dot-options/mgt-dot-options' ;
28- import '../sub-components/mgt-flyout/mgt-flyout' ;
28+ import { MgtFlyout } from '../sub-components/mgt-flyout/mgt-flyout' ;
2929
3030/**
3131 * Defines how a person card is shown when a user interacts with
@@ -275,12 +275,8 @@ export class MgtTasks extends MgtTemplatedComponent {
275275
276276 @property ( ) private _currentGroup : string ;
277277 @property ( ) private _currentFolder : string ;
278- @property ( ) private _currentTask : ITask ;
279-
280- @property ( ) private isPeoplePickerVisible : boolean ;
281278
282279 private _me : User = null ;
283- private handleWindowClick : ( event : MouseEvent ) => void ;
284280 private previousMediaQuery : ComponentMediaQuery ;
285281
286282 constructor ( ) {
@@ -297,7 +293,6 @@ export class MgtTasks extends MgtTemplatedComponent {
297293
298294 this . previousMediaQuery = this . mediaQuery ;
299295 this . onResize = this . onResize . bind ( this ) ;
300- this . handleWindowClick = ( ) => this . hidePeoplePicker ( ) ;
301296 }
302297
303298 /**
@@ -308,7 +303,6 @@ export class MgtTasks extends MgtTemplatedComponent {
308303 public connectedCallback ( ) {
309304 super . connectedCallback ( ) ;
310305 window . addEventListener ( 'resize' , this . onResize ) ;
311- window . addEventListener ( 'click' , this . handleWindowClick ) ;
312306 }
313307
314308 /**
@@ -318,7 +312,6 @@ export class MgtTasks extends MgtTemplatedComponent {
318312 */
319313 public disconnectedCallback ( ) {
320314 window . removeEventListener ( 'resize' , this . onResize ) ;
321- window . removeEventListener ( 'click' , this . handleWindowClick ) ;
322315 super . disconnectedCallback ( ) ;
323316 }
324317
@@ -951,39 +944,32 @@ export class MgtTasks extends MgtTemplatedComponent {
951944 ` ;
952945 }
953946
954- private showPeoplePicker ( task : ITask ) {
955- if ( this . isPeoplePickerVisible ) {
956- const isCurrentTask = task === this . _currentTask ;
957- if ( isCurrentTask ) {
958- this . hidePeoplePicker ( ) ;
959- return ;
960- }
961- }
962- this . _currentTask = task ;
963- this . isPeoplePickerVisible = true ;
964-
965- // logic for already created tasks
947+ private togglePeoplePicker ( task : ITask ) {
966948 const picker = this . getPeoplePicker ( task ) ;
967949 const mgtPeople = this . getMgtPeople ( task ) ;
950+ const flyout = this . getFlyout ( task ) ;
968951
969- if ( picker && mgtPeople ) {
970- picker . selectedPeople = mgtPeople . people ;
971- setTimeout ( ( ) => {
972- picker . focus ( ) ;
973- } , 50 ) ;
952+ if ( picker && mgtPeople && flyout ) {
953+ if ( flyout . isOpen ) {
954+ flyout . close ( ) ;
955+ } else {
956+ picker . selectedPeople = mgtPeople . people ;
957+ flyout . open ( ) ;
958+ window . requestAnimationFrame ( ( ) => {
959+ picker . focus ( ) ;
960+ } ) ;
961+ }
974962 }
975963 }
976964
977- private hidePeoplePicker ( ) {
978- const picker = this . getPeoplePicker ( this . _currentTask ) ;
979- const mgtPeople = this . getMgtPeople ( this . _currentTask ) ;
965+ private updateAssignedPeople ( task : ITask ) {
966+ const picker = this . getPeoplePicker ( task ) ;
967+ const mgtPeople = this . getMgtPeople ( task ) ;
980968
981- if ( picker ) {
969+ if ( picker && picker . selectedPeople !== mgtPeople . people ) {
982970 mgtPeople . people = picker . selectedPeople ;
983- this . assignPeople ( this . _currentTask , picker . selectedPeople ) ;
971+ this . assignPeople ( task , picker . selectedPeople ) ;
984972 }
985- this . isPeoplePickerVisible = false ;
986- this . _currentTask = null ;
987973 }
988974
989975 private getPeoplePicker ( task : ITask ) : MgtPeoplePicker {
@@ -1000,6 +986,13 @@ export class MgtTasks extends MgtTemplatedComponent {
1000986 return mgtPeople ;
1001987 }
1002988
989+ private getFlyout ( task : ITask ) : MgtFlyout {
990+ const taskId = task ? task . id : 'newTask' ;
991+ const flyout = this . renderRoot . querySelector ( `.flyout-${ taskId } ` ) as MgtFlyout ;
992+
993+ return flyout ;
994+ }
995+
1003996 private renderTask ( task : ITask ) {
1004997 const { name = 'Task' , completed = false , dueDate } = task ;
1005998
@@ -1157,25 +1150,23 @@ export class MgtTasks extends MgtTemplatedComponent {
11571150 ` ;
11581151
11591152 const taskId = task ? task . id : 'newTask' ;
1153+ taskAssigneeClasses [ `flyout-${ taskId } ` ] = true ;
11601154
11611155 assignedPeopleHTML = html `
11621156 < mgt-people
11631157 class ="people- ${ taskId } "
11641158 .userIds ="${ assignedPeople } "
1165- .personCardInteraction =${ this . isPeoplePickerVisible ? PersonCardInteraction . none : PersonCardInteraction . hover }
1159+ .personCardInteraction =${ PersonCardInteraction . none }
1160+ @click =${ ( e : MouseEvent ) => {
1161+ this . togglePeoplePicker ( task ) ;
1162+ e . stopPropagation ( ) ;
1163+ } }
11661164 > ${ noPeopleTemplate }
11671165 </ mgt-people >
11681166 ` ;
11691167
11701168 return html `
1171- < mgt-flyout
1172- class =${ classMap ( taskAssigneeClasses ) }
1173- @click =${ ( e : MouseEvent ) => {
1174- this . showPeoplePicker ( task ) ;
1175- e . stopPropagation ( ) ;
1176- } }
1177- .isOpen=${ this . isPeoplePickerVisible && task === this . _currentTask }
1178- >
1169+ < mgt-flyout light-dismiss class =${ classMap ( taskAssigneeClasses ) } @closed =${ e => this . updateAssignedPeople ( task ) } >
11791170 ${ assignedPeopleHTML }
11801171 < div slot ="flyout " class =${ classMap ( { Picker : true } ) } >
11811172 < mgt-people-picker
@@ -1188,7 +1179,7 @@ export class MgtTasks extends MgtTemplatedComponent {
11881179 }
11891180
11901181 private handleTaskClick ( task : ITask ) {
1191- if ( task && ! this . isPeoplePickerVisible ) {
1182+ if ( task ) {
11921183 this . fireCustomEvent ( 'taskClick' , { task : task . _raw } ) ;
11931184 }
11941185 }
0 commit comments