Skip to content
Snippets Groups Projects
Commit d98662c0 authored by Paulina Nogal's avatar Paulina Nogal
Browse files

Roenroll 1411 dialog explaining error

parent 2ea6bba6
No related branches found
No related tags found
No related merge requests found
...@@ -16,8 +16,13 @@ import * as selectors from '@app/degree-planner/store/selectors'; ...@@ -16,8 +16,13 @@ import * as selectors from '@app/degree-planner/store/selectors';
import { DegreePlannerApiService } from '@app/degree-planner/services/api.service'; import { DegreePlannerApiService } from '@app/degree-planner/services/api.service';
import { ConfirmDialogComponent } from '@app/shared/dialogs/confirm-dialog/confirm-dialog.component'; import { ConfirmDialogComponent } from '@app/shared/dialogs/confirm-dialog/confirm-dialog.component';
import { CourseDetailsDialogComponent } from '@app/degree-planner/dialogs/course-details-dialog/course-details-dialog.component'; import { CourseDetailsDialogComponent } from '@app/degree-planner/dialogs/course-details-dialog/course-details-dialog.component';
import { distinctUntilChanged } from 'rxjs/operators'; import { distinctUntilChanged, filter } from 'rxjs/operators';
import { TermCode } from '@app/core/models/termcode'; import { TermCode } from '@app/core/models/termcode';
import { PlannedTerm } from '@app/core/models/planned-term';
const isntUndefined = <T>(thing: T | undefined): thing is T => {
return thing !== undefined;
};
@Component({ @Component({
selector: 'cse-course-item', selector: 'cse-course-item',
...@@ -35,6 +40,8 @@ export class CourseItemComponent implements OnInit { ...@@ -35,6 +40,8 @@ export class CourseItemComponent implements OnInit {
status: string; status: string;
public visibleTermCodes$: Observable<string[]>; public visibleTermCodes$: Observable<string[]>;
public droppableTermCodes$: Observable<string[]>; public droppableTermCodes$: Observable<string[]>;
public term$: Observable<PlannedTerm>;
public plannedCourses: Course[];
constructor( constructor(
private api: DegreePlannerApiService, private api: DegreePlannerApiService,
...@@ -84,13 +91,47 @@ export class CourseItemComponent implements OnInit { ...@@ -84,13 +91,47 @@ export class CourseItemComponent implements OnInit {
* Handle moving a course to different terms based on course type * Handle moving a course to different terms based on course type
* *
*/ */
onMove(toTermCode: TermCode) { onMove(termCode: string) {
const toTermCode = new TermCode(termCode);
this.term$ = this.store.pipe(
select(selectors.selectVisibleTerm, { termCode: toTermCode }),
filter(isntUndefined),
distinctUntilChanged(),
);
this.term$.subscribe(term => {
this.plannedCourses = term.plannedCourses;
});
const isCourseInPlannedCourses = this.plannedCourses.some(
course => course.courseId === this.course.courseId,
);
if (isCourseInPlannedCourses) {
this.dialog
.open(ConfirmDialogComponent, {
data: {
title: "Can't add course",
confirmText: 'OK',
dialogClass: 'alertDialog',
text: `This course already exists in selected term!`,
},
})
.afterClosed();
return;
}
switch (this.type) { switch (this.type) {
case 'course': { case 'course': {
const id = this.course.id as number; const id = this.course.id as number;
const from = new TermCode(this.course.termCode); const from = new TermCode(this.course.termCode);
this.store.dispatch( this.store.dispatch(
new MoveCourseBetweenTerms({ to: toTermCode, from, id, newIndex: 0 }), new MoveCourseBetweenTerms({
to: toTermCode,
from,
id,
newIndex: 0,
}),
); );
break; break;
} }
......
...@@ -134,6 +134,25 @@ export class TermContainerComponent implements OnInit, OnDestroy { ...@@ -134,6 +134,25 @@ export class TermContainerComponent implements OnInit, OnDestroy {
const newContainer = event.container.id; const newContainer = event.container.id;
const previousContainer = event.previousContainer.id; const previousContainer = event.previousContainer.id;
const { courseId } = event.item.data as Course;
const isCourseInPlannedCourses = this.plannedCourses.some(
course => course.courseId === courseId,
);
if (newContainer !== previousContainer && isCourseInPlannedCourses) {
this.dialog
.open(ConfirmDialogComponent, {
data: {
title: "Can't add course to term",
confirmText: 'OK',
dialogClass: 'alertDialog',
text: `This course already exists in selected term!`,
},
})
.afterClosed();
return;
}
if (newContainer === previousContainer) { if (newContainer === previousContainer) {
const newIndex = event.currentIndex; const newIndex = event.currentIndex;
const { id: recordId, termCode } = event.item.data as Course; const { id: recordId, termCode } = event.item.data as Course;
......
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
id="confirmation-dialog" id="confirmation-dialog"
class="mat-typography dialog-with-toolbar" class="mat-typography dialog-with-toolbar"
> >
<div class="{{ dialogClass }}">
<mat-dialog-content> <mat-dialog-content>
<p class="dialog-text" *ngFor="let line of text">{{ line }}</p> <p class="dialog-text" *ngFor="let line of text">{{ line }}</p>
</mat-dialog-content> </mat-dialog-content>
...@@ -35,4 +36,6 @@ ...@@ -35,4 +36,6 @@
{{ confirmText }} {{ confirmText }}
</button> </button>
</mat-dialog-actions> </mat-dialog-actions>
</div>
</mat-dialog-content> </mat-dialog-content>
...@@ -9,6 +9,7 @@ import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material'; ...@@ -9,6 +9,7 @@ import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material';
export class ConfirmDialogComponent { export class ConfirmDialogComponent {
title: string; title: string;
text: string[]; text: string[];
dialogClass: string;
cancelText: string; cancelText: string;
confirmText: string; confirmText: string;
confirmColor: string; confirmColor: string;
...@@ -20,6 +21,7 @@ export class ConfirmDialogComponent { ...@@ -20,6 +21,7 @@ export class ConfirmDialogComponent {
const { const {
title = 'Are you sure?', title = 'Are you sure?',
text = '', text = '',
dialogClass = '',
cancelText = 'Cancel', cancelText = 'Cancel',
confirmText = 'Confirm', confirmText = 'Confirm',
confirmColor = 'primary', confirmColor = 'primary',
...@@ -27,6 +29,7 @@ export class ConfirmDialogComponent { ...@@ -27,6 +29,7 @@ export class ConfirmDialogComponent {
this.title = title; this.title = title;
this.text = text; this.text = text;
this.dialogClass = dialogClass;
this.cancelText = cancelText; this.cancelText = cancelText;
this.confirmText = confirmText; this.confirmText = confirmText;
this.confirmColor = confirmColor; this.confirmColor = confirmColor;
......
...@@ -18,3 +18,9 @@ ...@@ -18,3 +18,9 @@
button.mat-primary { button.mat-primary {
text-transform: uppercase; text-transform: uppercase;
} }
.alertDialog {
.confirm-button:first-of-type {
display: none;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment