Skip to content

Commit d4ed92a

Browse files
jessewashburndogi
andauthored
teams: smoother tasks (fixes #7971) (#8626)
Co-authored-by: dogi <[email protected]>
1 parent 3ad1a22 commit d4ed92a

File tree

6 files changed

+121
-25
lines changed

6 files changed

+121
-25
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "planet",
33
"license": "AGPL-3.0",
4-
"version": "0.18.88",
4+
"version": "0.18.89",
55
"myplanet": {
66
"latest": "v0.25.42",
77
"min": "v0.24.42"

src/app/meetups/view-meetups/meetups-view.component.html

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,26 +5,28 @@
55
<div class="space-container">
66
<mat-toolbar class="primary-color font-size-1 action-buttons">
77
<h3 class="margin-lr-3 ellipsis-title">{{meetupDetail?.title}}</h3>
8-
<ng-container *ngIf="editable === true">
9-
<button mat-stroked-button *ngIf="canManage && !meetupDetail.isTask" (click)="routeToEdit()">
10-
<mat-icon>edit</mat-icon>
11-
</button>
12-
<button mat-stroked-button *ngIf="canManage && !meetupDetail.isTask" (click)="deleteMeetup()">
13-
<mat-icon>delete</mat-icon>
14-
</button>
15-
</ng-container>
168
<span class="toolbar-fill"></span>
17-
<div>
18-
<ng-container *ngIf="!parent && !isDialog">
19-
<button mat-stroked-button class="margin-lr-3" [disabled]="this.dateNow > (meetupDetail?.endDate || meetupDetail?.startDate)" (click)="openInviteMemberDialog()">
20-
<span i18n>Invite Member</span>
9+
<div class="button-group-right">
10+
<ng-container *ngIf="editable === true">
11+
<button mat-stroked-button *ngIf="(canManage && !meetupDetail.isTask) || meetupDetail.isTask"
12+
(click)="meetupDetail.isTask ? editTask() : routeToEdit()">
13+
<mat-icon>edit</mat-icon>
2114
</button>
22-
<button mat-raised-button color="accent" class="margin-lr-3" [matTooltip]="isMeetupDisabled() ? 'You cannot join old meetup' : ''" [disabled]="isMeetupDisabled()" (click)="joinMeetup()">
23-
<span *ngIf="meetupDetail?.participate; else joinMeetupText" i18n>Leave</span>
24-
<ng-template #joinMeetupText><span i18n>Join</span></ng-template>
15+
<button mat-stroked-button *ngIf="(canManage && !meetupDetail.isTask) || meetupDetail.isTask"
16+
(click)="meetupDetail.isTask ? deleteTask() : deleteMeetup()">
17+
<mat-icon>delete</mat-icon>
2518
</button>
2619
</ng-container>
2720
</div>
21+
<div *ngIf="!parent && !isDialog">
22+
<button mat-stroked-button class="margin-lr-3" [disabled]="this.dateNow > (meetupDetail?.endDate || meetupDetail?.startDate)" (click)="openInviteMemberDialog()">
23+
<span i18n>Invite Member</span>
24+
</button>
25+
<button mat-raised-button color="accent" class="margin-lr-3" [matTooltip]="isMeetupDisabled() ? 'You cannot join old meetup' : ''" [disabled]="isMeetupDisabled()" (click)="joinMeetup()">
26+
<span *ngIf="meetupDetail?.participate; else joinMeetupText" i18n>Leave</span>
27+
<ng-template #joinMeetupText><span i18n>Join</span></ng-template>
28+
</button>
29+
</div>
2830
</mat-toolbar>
2931
<div class="view-container">
3032
<div [ngClass]="{'left-tile':!isDialog}">

src/app/meetups/view-meetups/meetups-view.component.ts

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
import { Component, OnInit, OnDestroy, Input, Output, EventEmitter } from '@angular/core';
1+
import { Component, OnInit, OnDestroy, Input, Output, EventEmitter, Inject, Optional } from '@angular/core';
22
import { CouchService } from '../../shared/couchdb.service';
33
import { Router, ActivatedRoute, ParamMap } from '@angular/router';
44
import { takeUntil } from 'rxjs/operators';
55
import { MeetupService } from '../meetups.service';
66
import { Subject } from 'rxjs';
77
import { UserService } from '../../shared/user.service';
8-
import { MatDialog, MatDialogRef } from '@angular/material/dialog';
8+
import { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
99
import { PlanetMessageService } from '../../shared/planet-message.service';
1010
import { DialogsListService } from '../../shared/dialogs/dialogs-list.service';
1111
import { DialogsListComponent } from '../../shared/dialogs/dialogs-list.component';
@@ -37,7 +37,8 @@ export class MeetupsViewComponent implements OnInit, OnDestroy {
3737

3838
constructor(
3939
public dialog: MatDialog,
40-
public dialogRef: MatDialogRef<MeetupsViewComponent>,
40+
@Optional() public dialogRef: MatDialogRef<MeetupsViewComponent>,
41+
@Optional() @Inject(MAT_DIALOG_DATA) public data: any,
4142
private couchService: CouchService,
4243
private router: Router,
4344
private route: ActivatedRoute,
@@ -184,4 +185,18 @@ export class MeetupsViewComponent implements OnInit, OnDestroy {
184185
);
185186
}
186187

188+
editTask() {
189+
if (this.dialogRef && this.data && this.data.onEditTask) {
190+
this.dialogRef.close();
191+
this.data.onEditTask();
192+
}
193+
}
194+
195+
deleteTask() {
196+
if (this.dialogRef && this.data && this.data.onDeleteTask) {
197+
this.dialogRef.close();
198+
this.data.onDeleteTask();
199+
}
200+
}
201+
187202
}

src/app/meetups/view-meetups/meetups-view.scss

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,11 @@
1313
}
1414
}
1515

16+
.button-group-right {
17+
display: flex;
18+
19+
button {
20+
margin-right: 4px;
21+
}
22+
}
1623
}

src/app/shared/calendar.component.ts

Lines changed: 70 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,16 @@ import interactionPlugin from '@fullcalendar/interaction';
77
import allLocales from '@fullcalendar/core/locales-all';
88
import { MatDialog } from '@angular/material/dialog';
99
import { DialogsAddMeetupsComponent } from './dialogs/dialogs-add-meetups.component';
10+
import { DialogsPromptComponent } from './dialogs/dialogs-prompt.component';
1011
import { days, millisecondsToDay } from '../meetups/constants';
1112
import { CouchService } from './couchdb.service';
1213
import { findDocuments } from './mangoQueries';
1314
import { addDateAndTime, styleVariables } from './utils';
1415
import { AuthService } from './auth-guard.service';
16+
import { TasksService } from '../tasks/tasks.service';
17+
import { DialogsFormService } from './dialogs/dialogs-form.service';
18+
import { PlanetMessageService } from './planet-message.service';
19+
import { DialogsLoadingService } from './dialogs/dialogs-loading.service';
1520

1621
@Component({
1722
selector: 'planet-calendar',
@@ -85,7 +90,11 @@ export class PlanetCalendarComponent implements OnInit, OnChanges {
8590
@Inject(DOCUMENT) private document: Document,
8691
private dialog: MatDialog,
8792
private couchService: CouchService,
88-
private authService: AuthService
93+
private authService: AuthService,
94+
private tasksService: TasksService,
95+
private dialogsFormService: DialogsFormService,
96+
private planetMessageService: PlanetMessageService,
97+
private dialogsLoadingService: DialogsLoadingService
8998
) {}
9099

91100
ngOnInit() {
@@ -217,16 +226,74 @@ export class PlanetCalendarComponent implements OnInit, OnChanges {
217226
}
218227

219228
eventClick({ event }) {
229+
const eventData = event.extendedProps.meetup;
230+
231+
if (eventData.isTask) {
232+
this.openTaskDialog(eventData);
233+
} else {
234+
this.dialog.open(DialogsAddMeetupsComponent, {
235+
data: {
236+
meetup: eventData,
237+
view: 'view',
238+
link: this.link,
239+
sync: this.sync,
240+
editable: this.editable,
241+
onMeetupsChange: this.onMeetupsChange.bind(this)
242+
}
243+
});
244+
}
245+
}
246+
247+
openTaskDialog(task) {
220248
this.dialog.open(DialogsAddMeetupsComponent, {
221249
data: {
222-
meetup: event.extendedProps.meetup,
250+
meetup: task,
223251
view: 'view',
224252
link: this.link,
225253
sync: this.sync,
226254
editable: this.editable,
227-
onMeetupsChange: this.onMeetupsChange.bind(this)
255+
isTask: true,
256+
onEditTask: () => this.openTaskEditDialog(task),
257+
onDeleteTask: () => this.openTaskDeleteDialog(task)
228258
}
229259
});
230260
}
231261

262+
openTaskEditDialog(task) {
263+
const { fields, formGroup } = this.tasksService.addDialogForm(task);
264+
this.dialogsFormService.openDialogsForm(task.title ? $localize`Edit Task` : $localize`Add Task`, fields, formGroup, {
265+
onSubmit: (newTask) => {
266+
if (newTask) {
267+
this.tasksService.addDialogSubmit({ link: this.link, sync: this.sync }, task, newTask, () => {
268+
this.getTasks();
269+
this.planetMessageService.showMessage($localize`Task updated successfully`);
270+
this.dialogsFormService.closeDialogsForm();
271+
});
272+
}
273+
},
274+
autoFocus: true
275+
});
276+
}
277+
278+
openTaskDeleteDialog(task) {
279+
const dialogRef = this.dialog.open(DialogsPromptComponent, {
280+
data: {
281+
okClick: {
282+
request: this.tasksService.archiveTask(task)(),
283+
onNext: () => {
284+
this.getTasks();
285+
this.planetMessageService.showMessage($localize`Task deleted successfully`);
286+
dialogRef.close();
287+
},
288+
onError: () => {
289+
this.planetMessageService.showAlert($localize`There was an error deleting this task`);
290+
dialogRef.close();
291+
}
292+
},
293+
changeType: 'delete',
294+
type: 'task',
295+
displayName: task.title
296+
}
297+
});
298+
}
232299
}

src/app/tasks/tasks.service.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,12 @@ export class TasksService {
9090
...task,
9191
completed: task.completed || false,
9292
completedTime: task.completed ? (task.completedTime || this.couchService.datePlaceholder) : undefined
93-
});
93+
}).pipe(
94+
map(res => {
95+
this.getTasks();
96+
return res;
97+
})
98+
);
9499
}
95100

96101
sortedTasks(tasks, tasksInOrder = []) {
@@ -100,9 +105,9 @@ export class TasksService {
100105
-1 :
101106
false;
102107
return tasks.sort((a, b) =>
103-
compare(tasksInOrder.findIndex(t => t._id === a._id), tasksInOrder.findIndex(t => t._id === b._id)) ||
104-
compare(a.completed, b.completed) ||
105108
compare(new Date(a.deadline), new Date(b.deadline)) ||
109+
compare(a.completed, b.completed) ||
110+
compare(tasksInOrder.findIndex(t => t._id === a._id), tasksInOrder.findIndex(t => t._id === b._id)) ||
106111
0
107112
);
108113
}

0 commit comments

Comments
 (0)