diff --git a/package.json b/package.json index ab034c31866d7ff1005ba2d72dc636361f0a72b5..dc1083a872e2b171e6cfb9ebf60565960c40ee64 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "version": "0.0.1", "scripts": { "ng": "ng", - "start": "ng serve --proxy-config proxy.json", + "start": "ng serve --proxy-config proxy.json --open", "build": "ng build", "test": " ng test --browsers ChromeHeadless", "test-coverage": " ng test --browsers ChromeHeadless --watch=false --code-coverage", diff --git a/src/app/app.component.html b/src/app/app.component.html index 048567132ec861d4b37f993a14740abae7d5c928..448fd246545e84f825760b1257286352de62c365 100644 --- a/src/app/app.component.html +++ b/src/app/app.component.html @@ -1,7 +1,20 @@ <cse-header></cse-header> <cse-navigation></cse-navigation> -<main class="uw-row"> - <div class="uw-col"> - <router-outlet></router-outlet> - </div> +<main> + <mat-sidenav-container class="example-container" hasBackdrop="false"> + <mat-sidenav #rightAddCourse2 mode="over" position="end">Drawer content 2 + </mat-sidenav> + <mat-sidenav-content> + <mat-sidenav-container> + <mat-sidenav #rightAddCourse class="add-sidenav1"mode="over" position="end"> + <div>content + <button mat-button class="btn-primary" (click)="rightAddCourse2.toggle()">Next side nav</button> + </div> + </mat-sidenav> + <mat-sidenav-content> + <router-outlet></router-outlet> + </mat-sidenav-content> + </mat-sidenav-container> + </mat-sidenav-content> + </mat-sidenav-container> </main> diff --git a/src/app/app.component.scss b/src/app/app.component.scss index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..117d81243568f6da8091164a644f6eff3367f5e9 100644 --- a/src/app/app.component.scss +++ b/src/app/app.component.scss @@ -0,0 +1,3 @@ +.add-sidenav1 { + width:380px; +} \ No newline at end of file diff --git a/src/app/app.component.ts b/src/app/app.component.ts index 5a968eef267f0f9a0e0ec720ee29f6c7ae1f983e..4501fdf66bc70fe63cd767152d57724b9e28bf44 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -1,11 +1,20 @@ -import { Component } from '@angular/core'; +import { SidenavService } from './core/service/sidenav.service'; +import { Component, ViewChild, OnInit } from '@angular/core'; +import { MatSidenav } from '@angular/material'; @Component({ selector: 'cse-root', templateUrl: './app.component.html', styleUrls: ['./app.component.scss'] }) -export class AppComponent { } +export class AppComponent implements OnInit { + @ViewChild('rightAddCourse') public rightAddCourse: MatSidenav; + constructor(private sidenavService: SidenavService) { } + + ngOnInit() { + this.sidenavService.setSidenav(this.rightAddCourse); + } +} document.addEventListener('WebComponentsReady', function() { const customEvent = new CustomEvent('myuw-login', { diff --git a/src/app/app.module.ts b/src/app/app.module.ts index f15c253ab0455532e7274b2f0fcdc340e81f8b2d..d4bcc51323c45014a5e8c7de5b4896dc7b791b8a 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -8,6 +8,7 @@ import { AppComponent } from './app.component'; import { CoreModule } from '@app/core/core.module'; import { SharedModule } from '@app/shared/shared.module'; import { HeaderComponent } from './core/header/header.component'; +import { SidenavService } from './core/service/sidenav.service'; @NgModule({ imports: [ @@ -22,7 +23,7 @@ import { HeaderComponent } from './core/header/header.component'; AppComponent, HeaderComponent ], - providers: [], + providers: [ SidenavService ], bootstrap: [ AppComponent ], schemas: [ CUSTOM_ELEMENTS_SCHEMA ] }) diff --git a/src/app/core/service/sidenav.service.ts b/src/app/core/service/sidenav.service.ts new file mode 100644 index 0000000000000000000000000000000000000000..12ddbf060e1425c16867e701d0206e896fa640da --- /dev/null +++ b/src/app/core/service/sidenav.service.ts @@ -0,0 +1,24 @@ +import { Injectable } from '@angular/core'; +import { MatSidenav } from '@angular/material'; + +@Injectable() +export class SidenavService { + private sidenav: MatSidenav; + + + public setSidenav(sidenav: MatSidenav) { + this.sidenav = sidenav; + } + + public open() { + return this.sidenav.open(); + } + + public close() { + return this.sidenav.close(); + } + + public toggle(): void { + this.sidenav.toggle(); + } +} diff --git a/src/app/degree-planner/degree-planner.component.html b/src/app/degree-planner/degree-planner.component.html index 49eca23573e3875916c1baac87f735239aa78edb..6e05000c47e14ae3bfc5545cceed6ffc66fbeed4 100644 --- a/src/app/degree-planner/degree-planner.component.html +++ b/src/app/degree-planner/degree-planner.component.html @@ -1,63 +1,46 @@ <mat-sidenav-container id="plans-container"> <!-- Menu side nav --> - <mat-sidenav #rightSideNav position="end" [mode]="mobileView.matches ? 'over' : 'side'" [opened]="mobileView.matches ? false : true"> + <mat-sidenav #rightMenu position="end" [mode]="mobileView.matches ? 'over' : 'side'" [opened]="mobileView.matches ? false : true"> <cse-sidenav-menu-item [favoriteDropZone]="getTermDropZone()" [subjectsMap]="subjectsMap"></cse-sidenav-menu-item> </mat-sidenav> - <!-- Add course sidenav --> - <mat-sidenav #leftSideNav position="start" mode="side" [opened]="false"> - <div>sidenav 2</div> - <button mat-button class="btn-primary" (click)="leftSideNav2.toggle()">Three</button> - </mat-sidenav> - <mat-sidenav-content> - <mat-sidenav-container hasBackdrop="false"> - <!-- Secondary side nav used after #leftSideNav is shown --> - <mat-sidenav #leftSideNav2 position="start" mode="over" [opened]="false"> - <div>sidenav 3</div> - </mat-sidenav> - - <mat-sidenav-content> - <div fxLayout="row" fxLayout.lt-sm="column" fxLayoutGap="20px" fxLayoutAlign="start center" style="margin: 24px 0px 24px 24px;"> - <mat-form-field> - <mat-select placeholder="Degree Plans" [disableOptionCentering]="true" [(ngModel)]="selectedDegreePlan"> - <mat-option *ngFor="let degreePlan of degreePlans" [value]="degreePlan.roadmapId"> - {{ degreePlan.name }} - </mat-option> - </mat-select> - </mat-form-field> - <button mat-button class="btn-primary">Check Plan (DARS)</button> - <button id="menu-toggle-btn" mat-button (click)="rightSideNav.toggle()"> - <i *ngIf="rightSideNav.opened" class="material-icons">chevron_right</i> - <i *ngIf="!rightSideNav.opened" class="material-icons">chevron_left</i> - </button> - </div> + <div fxLayout="row" fxLayout.lt-sm="column" fxLayoutGap="20px" fxLayoutAlign="start center" style="margin: 24px 0px 24px 24px;"> + <mat-form-field> + <mat-select placeholder="Degree Plans" [disableOptionCentering]="true" [(ngModel)]="selectedDegreePlan"> + <mat-option *ngFor="let degreePlan of degreePlans" [value]="degreePlan.roadmapId"> + {{ degreePlan.name }} + </mat-option> + </mat-select> + </mat-form-field> + <button mat-button class="btn-primary">Check Plan (DARS)</button> + <button id="menu-toggle-btn" mat-button (click)="rightMenu.toggle()"> + <i *ngIf="rightMenu.opened" class="material-icons">chevron_right</i> + <i *ngIf="!rightMenu.opened" class="material-icons">chevron_left</i> + </button> + </div> - <div fxLayout="column" fxLayoutGap="20px" fxLayoutAlign="start stretch" style="margin: 24px"> - <mat-accordion multi="true"> - <mat-expansion-panel *ngFor="let year of termsByAcademicYear | keyvalue" class="year-container"> <!--[expanded]="true"--> - <mat-expansion-panel-header> - <mat-panel-title> - {{ termsByAcademicYear[year.key].year | academicYearState }} - </mat-panel-title> - </mat-expansion-panel-header> - <div fxLayout="row" fxLayout.lt-md="column" fxLayoutGap="20px" fxLayoutAlign="start stretch" class="term-container-wrapper"> - <cse-term-container - *ngFor="let term of termsByAcademicYear[year.key].terms | keyvalue" - [term]="termsByAcademicYear[year.key].terms[term.key]" - [courses]="termsByAcademicYear[year.key].terms[term.key]['courses']" - [termCodes]="getTermDropZone()" - [termsByAcademicYear]="termsByAcademicYear" - [subjectsMap]="subjectsMap" - fxFlex="33%" - ></cse-term-container> - </div> - </mat-expansion-panel> - </mat-accordion> - </div> - </mat-sidenav-content> - - </mat-sidenav-container> + <div fxLayout="column" fxLayoutGap="20px" fxLayoutAlign="start stretch" style="margin: 24px"> + <mat-accordion multi="true"> + <mat-expansion-panel *ngFor="let year of termsByAcademicYear | keyvalue" class="year-container"> <!--[expanded]="true"--> + <mat-expansion-panel-header> + <mat-panel-title> + {{ termsByAcademicYear[year.key].year | academicYearState }} + </mat-panel-title> + </mat-expansion-panel-header> + <div fxLayout="row" fxLayout.lt-md="column" fxLayoutGap="20px" fxLayoutAlign="start stretch" class="term-container-wrapper"> + <cse-term-container + *ngFor="let term of termsByAcademicYear[year.key].terms | keyvalue" + [term]="termsByAcademicYear[year.key].terms[term.key]" + [courses]="termsByAcademicYear[year.key].terms[term.key]['courses']" + [termCodes]="getTermDropZone()" + [termsByAcademicYear]="termsByAcademicYear" + [subjectsMap]="subjectsMap" + fxFlex="33%" + ></cse-term-container> + </div> + </mat-expansion-panel> + </mat-accordion> + </div> </mat-sidenav-content> - </mat-sidenav-container> diff --git a/src/app/degree-planner/term-container/term-container.component.html b/src/app/degree-planner/term-container/term-container.component.html index 23f15eb4664f036c11f20ce05b52127350af2411..f7cac00fc9e45093c11e58ca7d92f6468857c95d 100644 --- a/src/app/degree-planner/term-container/term-container.component.html +++ b/src/app/degree-planner/term-container/term-container.component.html @@ -1,41 +1,41 @@ <mat-card class="term-container"> - <div class="term-inner"> - <div fxLayout="row" class="term-header" fxLayoutAlign="space-between center"> - <h2>{{ term.termCode | getTermDescription }}</h2> - <div fxLayout="row" fxLayoutAlign="end center"> - <p class="text-right semi-bold credits">{{getTotalCredits()}} Cr</p> - <button mat-icon-button> - <mat-icon aria-label="Open dialog with notes in this term" class="add-note-icon" (click)="openNotesDialog(false, term.termCode)" matTooltip="Add Note" matTooltipPosition="above">note_add</mat-icon> - <!-- <mat-icon aria-label="Open dialog with notes in this term" class="add-note-icon" (click)="openNotesDialog(false, term.termCode)" matTooltip="Edit Note" matTooltipPosition="above">insert_drive_file</mat-icon> --> - </button> - </div> - </div> - <div - cdkDropList - id="term-{{term.termCode}}" - [cdkDropListData]="courses" - [cdkDropListConnectedTo]="termCodes" - class="course-list" - (cdkDropListDropped)="drop($event)"> - <ng-container *ngFor="let note of notes | async"> - <div *ngIf="note.termCode == term.termCode" class="note-item" (click)="openNotesDialog(note, term.termCode)" > - <p class="semi-bold">Note</p> - <p class="note-excerpt">{{ note.note }}</p> - </div> - </ng-container> - <div class="course-wrapper" [cdkDragData]="course" *ngFor="let course of courses" cdkDrag> - <div class="course-wrapper-inner"> - <cse-course-item - [course]="course" - (click)="openCourseDetailsDialog(course)" - [status]="'in-progress'" - [subject]="subjectsMap[course.subjectCode]" - ></cse-course-item> - </div> - </div> - </div> - </div> - <div class="add-new-wrapper"> - <button mat-raised-button>+ Add Course</button> - </div> + <div class="term-inner"> + <div fxLayout="row" class="term-header" fxLayoutAlign="space-between center"> + <h2>{{ term.termCode | getTermDescription }}</h2> + <div fxLayout="row" fxLayoutAlign="end center"> + <p class="text-right semi-bold credits">{{getTotalCredits()}} Cr</p> + <button mat-icon-button> + <mat-icon aria-label="Open dialog with notes in this term" class="add-note-icon" (click)="openNotesDialog(false, term.termCode)" matTooltip="Add Note" matTooltipPosition="above">note_add</mat-icon> + <!-- <mat-icon aria-label="Open dialog with notes in this term" class="add-note-icon" (click)="openNotesDialog(false, term.termCode)" matTooltip="Edit Note" matTooltipPosition="above">insert_drive_file</mat-icon> --> + </button> + </div> + </div> + <div + cdkDropList + id="term-{{term.termCode}}" + [cdkDropListData]="courses" + [cdkDropListConnectedTo]="termCodes" + class="course-list" + (cdkDropListDropped)="drop($event)"> + <ng-container *ngFor="let note of notes | async"> + <div *ngIf="note.termCode == term.termCode" class="note-item" (click)="openNotesDialog(note, term.termCode)" > + <p class="semi-bold">Note</p> + <p class="note-excerpt">{{ note.note }}</p> + </div> + </ng-container> + <div class="course-wrapper" [cdkDragData]="course" *ngFor="let course of courses" cdkDrag> + <div class="course-wrapper-inner"> + <cse-course-item + [course]="course" + (click)="openCourseDetailsDialog(course)" + [status]="'in-progress'" + [subject]="subjectsMap[course.subjectCode]" + ></cse-course-item> + </div> + </div> + </div> + </div> + <div class="add-new-wrapper"> + <button mat-raised-button (click)="openAddSidenav()">+ Add Course</button> + </div> </mat-card> \ No newline at end of file diff --git a/src/app/degree-planner/term-container/term-container.component.ts b/src/app/degree-planner/term-container/term-container.component.ts index 3fd90d111053190122b54d0734a63198b2b81442..474465d50fb4e8f76ab68a32b48af0f18049a8d9 100644 --- a/src/app/degree-planner/term-container/term-container.component.ts +++ b/src/app/degree-planner/term-container/term-container.component.ts @@ -1,4 +1,5 @@ -import { Component, Input, ChangeDetectorRef } from '@angular/core'; +import { SidenavService } from './../../core/service/sidenav.service'; +import { Component, Input, ChangeDetectorRef, ViewChild } from '@angular/core'; import { Term } from '../../core/models/term'; import { Course } from '../../core/models/course'; import { DataService } from '../../core/data.service'; @@ -34,8 +35,12 @@ export class TermContainerComponent { constructor( private dataService: DataService, public dialog: MatDialog, + private sidenavService: SidenavService, private cdRef: ChangeDetectorRef) { } + openAddSidenav() { + this.sidenavService.open(); + } openNotesDialog(note, termCode) { let dialogRef; if (!note) {