Skip to content

Commit 8349e39

Browse files
authored
updated tasks with new flyout (#356)
1 parent d38149c commit 8349e39

File tree

2 files changed

+34
-43
lines changed

2 files changed

+34
-43
lines changed

src/components/mgt-tasks/mgt-tasks.scss

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -390,7 +390,7 @@ mgt-tasks,
390390
-webkit-background-clip: padding-box;
391391
-moz-background-clip: padding-box;
392392
background-clip: padding-box;
393-
width: 350px;
393+
width: var(--mgt-flyout-set-width, 350px);
394394
color: var(--task-detail-color, black);
395395
mgt-people-picker {
396396
--separator-margin: 0px 10px 0px 10px;

src/components/mgt-tasks/mgt-tasks.ts

Lines changed: 33 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ import { MgtPeople } from '../mgt-people/mgt-people';
2525
import '../mgt-person/mgt-person';
2626
import '../sub-components/mgt-arrow-options/mgt-arrow-options';
2727
import '../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

Comments
 (0)