Skip to content
Snippets Groups Projects
Commit 3c545fb2 authored by Scott Berg's avatar Scott Berg
Browse files

Fix drag and drop

parent a509cf7b
No related branches found
No related tags found
No related merge requests found
...@@ -120,7 +120,7 @@ export class DataService { ...@@ -120,7 +120,7 @@ export class DataService {
test() { test() {
// return this.http.delete(this.plannerApiUrl + '/degreePlan/519260/courses/259445', httpOptions) // return this.http.delete(this.plannerApiUrl + '/degreePlan/519260/courses/259445', httpOptions)
return this.http.put(this.plannerApiUrl + '/degreePlan/520224/courses/272973?termCode=1176', httpOptions) return this.http.put(this.plannerApiUrl + '/degreePlan/519260/courses/259465?termCode=1174', httpOptions)
.pipe(catchError(this.errorHandler)); .pipe(catchError(this.errorHandler));
} }
......
...@@ -13,6 +13,7 @@ export class DegreePlannerDataService { ...@@ -13,6 +13,7 @@ export class DegreePlannerDataService {
degreePlannerData: Observable<any>; degreePlannerData: Observable<any>;
coursesData$: any; coursesData$: any;
termCodes: any; termCodes: any;
dropZones: String[];
planId: number; planId: number;
constructor(private dataService: DataService) { } constructor(private dataService: DataService) { }
...@@ -31,7 +32,11 @@ export class DegreePlannerDataService { ...@@ -31,7 +32,11 @@ export class DegreePlannerDataService {
map(course => course.termCode), map(course => course.termCode),
distinct(), distinct(),
toArray() toArray()
).subscribe(termCodes => this.termCodes = termCodes); ).subscribe(termCodes => {
this.termCodes = termCodes;
this.dropZones = termCodes.map(termCode => `term-${termCode}`);
this.dropZones.push('saved-courses');
});
this.coursesData$ = this.degreePlannerData.pipe( this.coursesData$ = this.degreePlannerData.pipe(
groupBy(course => course.termCode), groupBy(course => course.termCode),
......
<div class="term-container"> <div class="term-container">
<div <div
cdkDropList cdkDropList
id="favoriteCourse-dropZone" id="saved-courses"
class="course-list" class="course-list"
[cdkDropListData]="favoriteCourses" [cdkDropListData]="favoriteCourses"
[cdkDropListConnectedTo]="favoriteDropZone" [cdkDropListConnectedTo]="this.degreePlannerDataSvc.dropZones"
(cdkDropListDropped)="drop($event)"> (cdkDropListDropped)="drop($event)">
<div class="course-wrapper" [cdkDragData]="course" *ngFor="let course of favoriteCourses" cdkDrag> <div class="course-wrapper" [cdkDragData]="course" *ngFor="let course of favoriteCourses" cdkDrag>
<div class="course-wrapper-inner"> <div class="course-wrapper-inner">
......
import { Component, OnInit, Input } from '@angular/core'; import { Component, Input } from '@angular/core';
import { DataService } from '../../core/data.service'; import { DataService } from '../../core/data.service';
import { FavoriteCourse } from '../../core/models/favorite-course'; import { FavoriteCourse } from '../../core/models/favorite-course';
import { CdkDragDrop, moveItemInArray, transferArrayItem } from '@angular/cdk/drag-drop'; import { CdkDragDrop, moveItemInArray, transferArrayItem } from '@angular/cdk/drag-drop';
...@@ -15,22 +15,26 @@ export class FavoritesContainerComponent { ...@@ -15,22 +15,26 @@ export class FavoritesContainerComponent {
favoriteCourse: FavoriteCourse; favoriteCourse: FavoriteCourse;
termCodes$: any; termCodes$: any;
@Input() favoriteDropZone: []; @Input() favoriteDropZone: [];
dropZones: any[];
favoriteCourses: FavoriteCourse[]; favoriteCourses: FavoriteCourse[];
constructor( constructor(
private route: ActivatedRoute, private route: ActivatedRoute,
private degreePlannerDataSvc: DegreePlannerDataService, public degreePlannerDataSvc: DegreePlannerDataService,
private dataService: DataService) { private dataService: DataService) {
this.favoriteCourses = route.snapshot.data.requiredData.favorites; this.favoriteCourses = route.snapshot.data.requiredData.favorites;
this.termCodes$ = route.snapshot.data.requiredData.termCodes$; this.termCodes$ = route.snapshot.data.requiredData.termCodes$;
} }
drop(event: CdkDragDrop<string[]>) { drop(event: CdkDragDrop<string[]>) {
const { container, previousContainer, previousIndex } = event;
// Get the course JSON
const item = event.item.data;
if (event.previousContainer.id !== event.container.id) { if (event.previousContainer.id !== event.container.id) {
transferArrayItem(event.previousContainer.data,
event.container.data, container.data.push(item);
event.previousIndex, previousContainer.data.splice(previousIndex, 1);
event.currentIndex);
// Add this coruse to the favorites list // Add this coruse to the favorites list
this.dataService.saveFavoriteCourse(event.item.data.subjectCode, event.item.data.courseId) this.dataService.saveFavoriteCourse(event.item.data.subjectCode, event.item.data.courseId)
...@@ -39,12 +43,7 @@ export class FavoritesContainerComponent { ...@@ -39,12 +43,7 @@ export class FavoritesContainerComponent {
}); });
// Remove this course from the degree plan // Remove this course from the degree plan
this.dataService.removeCourse(this.degreePlannerDataSvc.getPlanId(), event.item.data.id) this.dataService.removeCourse(this.degreePlannerDataSvc.getPlanId(), event.item.data.id);
.subscribe(data => {
console.log(data);
});
console.log(event);
} }
} }
} }
...@@ -78,13 +78,13 @@ export class CourseItemComponent implements OnInit { ...@@ -78,13 +78,13 @@ export class CourseItemComponent implements OnInit {
moveToFavorites(course) { moveToFavorites(course) {
this.dataService.saveFavoriteCourse(course.subjectCode, course.courseId) this.dataService.saveFavoriteCourse(course.subjectCode, course.courseId)
.subscribe(favoriteCourse => { .subscribe(favoriteCourse => {
console.log("Update UI missing"); console.log('Update UI missing');
// this.favoriteCourses.push(this.course); // this.favoriteCourses.push(this.course);
}); });
// Remove this course from term // Remove this course from term
this.dataService.removeCourse(this.degreePlannerDataSvc.getPlanId(), course.id) this.dataService.removeCourse(this.degreePlannerDataSvc.getPlanId(), course.id)
.subscribe(data => { .subscribe(data => {
console.log("Update UI missing"); console.log('Update UI missing');
// this.removeCourseFromUI(this.courses); // this.removeCourseFromUI(this.courses);
}); });
} }
...@@ -93,20 +93,20 @@ export class CourseItemComponent implements OnInit { ...@@ -93,20 +93,20 @@ export class CourseItemComponent implements OnInit {
addToTerm(newTermCode) { addToTerm(newTermCode) {
this.dataService.addCourse( this.course.subjectCode, this.course.courseId, newTermCode, this.degreePlannerDataSvc.getPlanId()) this.dataService.addCourse( this.course.subjectCode, this.course.courseId, newTermCode, this.degreePlannerDataSvc.getPlanId())
.subscribe( data => { .subscribe( data => {
console.log("Update UI missing"); console.log('Update UI missing');
}); });
// Remove course from favorites list // Remove course from favorites list
this.dataService.removeFavoriteCourse(this.course.subjectCode, this.course.courseId) this.dataService.removeFavoriteCourse(this.course.subjectCode, this.course.courseId)
.subscribe(data => { .subscribe(data => {
console.log("Update UI missing"); console.log('Update UI missing');
}); });
} }
// Move course to another term // Move course to another term
switchTerm(newTermCode) { switchTerm(newTermCode) {
this.dataService.updateCourseTerm(this.degreePlannerDataSvc.getPlanId(), this.course.id, newTermCode) this.dataService.updateCourseTerm(this.degreePlannerDataSvc.getPlanId(), this.course.id, newTermCode)
.subscribe(data => { console.log("Update UI missing"); .subscribe(data => { console.log('Update UI missing');
}); });
} }
......
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
<div cdkDropList <div cdkDropList
id="term-{{termCode}}" id="term-{{termCode}}"
[cdkDropListData]="courses" [cdkDropListData]="courses"
[cdkDropListConnectedTo]="this.dropZones" [cdkDropListConnectedTo]="this.degreePlannerDataSvc.dropZones"
class="course-list" class="course-list"
(cdkDropListDropped)="drop($event)"> (cdkDropListDropped)="drop($event)">
......
...@@ -35,7 +35,7 @@ export class TermContainerComponent implements OnInit { ...@@ -35,7 +35,7 @@ export class TermContainerComponent implements OnInit {
constructor( constructor(
private dataService: DataService, private dataService: DataService,
private degreePlannerDataSvc: DegreePlannerDataService, public degreePlannerDataSvc: DegreePlannerDataService,
private route: ActivatedRoute, private route: ActivatedRoute,
public dialog: MatDialog, public dialog: MatDialog,
private sidenavService: SidenavService, private sidenavService: SidenavService,
...@@ -46,12 +46,11 @@ export class TermContainerComponent implements OnInit { ...@@ -46,12 +46,11 @@ export class TermContainerComponent implements OnInit {
ngOnInit() { ngOnInit() {
this.termsWithNotes = this.notes.map(note => note.termCode); this.termsWithNotes = this.notes.map(note => note.termCode);
this.degreePlannerDataSvc.getAllTerms().subscribe(data => { // this.dropZones = this.degreePlannerDataSvc.getAllTerms().map(termCode => {
this.dropZones = data.map(termCode => { // return `term-${termCode}`;
return `term-${termCode}`; // });
}); // this.dropZones.push('favoriteCourse-dropZone');
this.dropZones.push('favoriteCourse-dropZone');
});
} }
openAddSidenav() { openAddSidenav() {
...@@ -111,12 +110,8 @@ export class TermContainerComponent implements OnInit { ...@@ -111,12 +110,8 @@ export class TermContainerComponent implements OnInit {
return total; return total;
} }
getDropZones() {
return [];
}
drop(event: CdkDragDrop<string[]>) { drop(event: CdkDragDrop<string[]>) {
const { container, currentIndex, previousContainer, previousIndex } = event; const { container, previousContainer, previousIndex } = event;
// Get the course JSON // Get the course JSON
const item = event.item.data; const item = event.item.data;
...@@ -125,18 +120,18 @@ export class TermContainerComponent implements OnInit { ...@@ -125,18 +120,18 @@ export class TermContainerComponent implements OnInit {
const newTermCode = event.container.id.substr(5, 4); const newTermCode = event.container.id.substr(5, 4);
if (event.previousContainer.id === 'favoriteCourse-dropZone' && event.container.id !== 'favoriteCourse-dropZone') { if (event.previousContainer.id === 'saved-courses' && event.container.id !== 'saved-courses') {
// If moving from favorites to term // If moving from favorites to term
container.data.push(item);
previousContainer.data.splice(previousIndex, 1);
this.dataService.addCourse(event.item.data.subjectCode, event.item.data.courseId, newTermCode, this.degreePlannerDataSvc.getPlanId()) this.dataService.addCourse(this.degreePlannerDataSvc.getPlanId(), event.item.data.subjectCode, event.item.data.courseId, newTermCode)
.subscribe(data => { .subscribe(data => {
const yearCode = newTermCode.substring(0, 3); const yearCode = newTermCode.substring(0, 3);
const termCode = newTermCode.substring(3); const termCode = newTermCode.substring(3);
// this.termsByAcademicYear[yearCode].terms[termCode].courses[event.currentIndex] = data;
}); });
this.dataService.removeFavoriteCourse(event.item.data.subjectCode, event.item.data.courseId) this.dataService.removeFavoriteCourse(event.item.data.subjectCode, event.item.data.courseId);
.subscribe(data => {});
} else if (event.previousContainer.id !== event.container.id) { } else if (event.previousContainer.id !== event.container.id) {
...@@ -144,11 +139,8 @@ export class TermContainerComponent implements OnInit { ...@@ -144,11 +139,8 @@ export class TermContainerComponent implements OnInit {
previousContainer.data.splice(previousIndex, 1); previousContainer.data.splice(previousIndex, 1);
// Tell the API this course updated // Tell the API this course updated
this.dataService.updateCourseTerm(this.degreePlannerDataSvc.getPlanId(), event.item.data.id, newTermCode) this.dataService.updateCourseTerm(this.degreePlannerDataSvc.getPlanId(), event.item.data.id, newTermCode);
.subscribe( data => {
this.degreePlannerDataSvc.getDegreePlanDataById(this.degreePlannerDataSvc.getPlanId());
});
} }
// Do nothing on drop to same term // Do nothing on drop to same term
} }
} }
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