diff --git a/mocks/data.json b/mocks/data.json index 09fa3d9..d5c39ec 100644 --- a/mocks/data.json +++ b/mocks/data.json @@ -1,21 +1,11 @@ { "courses": [ - { - "id": "1", - "title": "Video about Denmark", - "createdAtDate": "1/1/2019", - "durationTime": 120, - "topRated": true, - "authors": [], - "description": "Lorem, ipsum dolor sit amet consectetur adipisicing elit. Fuga at magni dignissimos accusamus asperiores enim corrupti nobis dolorem ducimus nostrum dolor, consequuntur, quia laudantium tempore? Neque doloremque eos rerum nulla. Fuga at magni dignissimos accusamus asperiores enim corrupti nobis dolorem ducimus nostrum dolor, consequuntur, quia laudantium tempore? Neque doloremque eos rerum nulla." - }, { "id": "2", "title": "Video about Canada", - "createdAtDate": "5/20/2020", + "createdAtDate": "5/2/2020", "durationTime": 180, "authors": [ - "me", "me" ], "description": "Lorem, ipsum dolor sit amet consectetur adipisicing elit. Fuga at magni dignissimos accusamus asperiores enim corrupti nobis dolorem ducimus nostrum dolor, consequuntur, quia laudantium tempore? Neque doloremque eos rerum nulla. Fuga at magni dignissimos accusamus asperiores enim corrupti nobis dolorem ducimus nostrum dolor, consequuntur, quia laudantium tempore? Neque doloremque eos rerum nulla." @@ -23,11 +13,10 @@ { "id": "3", "title": "Video about Brazil", - "createdAtDate": "12/14/2021", + "createdAtDate": "12/12/2021", "durationTime": 180, "topRated": false, "authors": [ - "me", "me", "id3" ], @@ -36,11 +25,10 @@ { "id": "4", "title": "Video about Australia", - "createdAtDate": "10/20/2020", + "createdAtDate": "11/12/2020", "durationTime": 132, "topRated": false, "authors": [ - "me", "me", "id4" ], @@ -53,7 +41,6 @@ "durationTime": 119, "topRated": true, "authors": [ - "me", "me", "id6" ], @@ -61,13 +48,33 @@ }, { "title": "yurikmurik", - "createdAtDate": "2020-05-20T21:00:00.000Z", - "durationTime": "12", + "createdAtDate": "04/05/2020", + "durationTime": 12, "description": "123", "authors": [ "df" ], "id": "l9muna723" + }, + { + "title": "Video about Canada", + "description": "Lorem, ipsum dolor sit amet consectetur adipisicing elit. Fuga at magni dignissimos accusamus asperiores enim corrupti nobis dolorem ducimus nostrum dolor, consequuntur, quia laudantium tempore? Neque doloremque eos rerum nulla. Fuga at magni dignissimos accusamus asperiores enim corrupti nobis dolorem ducimus nostrum dolor, consequuntur, quia laudantium tempore? Neque doloremque eos rerum nulla.", + "durationTime": 180, + "createdAtDate": "5/2/2020", + "authors": [ + "me" + ], + "id": "bwqs6nfo6" + }, + { + "title": "asa", + "description": "a", + "durationTime": 12, + "createdAtDate": "12/12/1212", + "authors": [ + "Andrew Vorobiev" + ], + "id": "dfh962g0a" } ], "users": [ @@ -79,5 +86,19 @@ "password": "12345", "token": "randomtoken_1234556789$" } + ], + "authors": [ + { + "id": "1", + "name": "Andrew Vorobiev" + }, + { + "id": "2", + "name": "Andrey Morozov" + }, + { + "id": "3", + "name": "Andy Panda" + } ] } \ No newline at end of file diff --git a/src/app/add-course-page/add-course-page.component.html b/src/app/add-course-page/add-course-page.component.html index 42f3c6c..44975ea 100644 --- a/src/app/add-course-page/add-course-page.component.html +++ b/src/app/add-course-page/add-course-page.component.html @@ -1,77 +1,125 @@ -
- - - New course - - -
- - Title - - - - Description - - - - Duration: - - - - Date: - - - - - - Authors: - - +
+
+
+

{{pageTitle}}

+
+
+ +
+
+ Title should be not more 50 character. +
+
+ Required +
+
+ + +
+
+ Title should be not more 500 character. +
+
+ Required +
+
+ + +
+
+ Date format should be dd/MM/yyyy +
+
+ Required +
- - - -
+
+ There are should be digits only! +
+
+ + +
- Save - - - -
\ No newline at end of file +
+ There is should be one author at least! +
+
+
+ + + +
+ +
+ diff --git a/src/app/add-course-page/add-course-page.component.less b/src/app/add-course-page/add-course-page.component.less index 34761e4..4cd0bc6 100644 --- a/src/app/add-course-page/add-course-page.component.less +++ b/src/app/add-course-page/add-course-page.component.less @@ -1,6 +1,6 @@ @import '../../assets/less/modules/variables'; -mat-card { +.add-course-card { display: flex; flex-direction: column; max-width: 60%; @@ -11,12 +11,248 @@ mat-card { left: 0; margin: 0 auto; margin-top: 30px; + background-color: @color-white; + + &-header { + margin-bottom: 15px; + + p { + font-family: 'SourseSansPro Regular'; + font-size: 16px; + text-align: left; + } + } .add-course-form { + &-label, &-label-time, &-label-time-duration { + text-align: left; + display: block; + font-family: 'SourseSansPro Semibold'; + font-size: 14px; + margin-bottom: 15px; + + p { + margin-bottom: 0; + padding-left: 7px; + font-family: 'SourseSansPro Semibold'; + } + + input, textarea { + border: 1px solid @color-gray; + border-radius: 2px; + padding: 7px; + width: 100%; + font-family: 'SourseSansPro Semibold'; + font-size: 14px; + color: @color-black; + box-sizing: border-box; + + &:focus { + outline: 1px solid @color-gray2; + } + + &::placeholder { + color: @color-gray2; + } + } + + textarea { + resize: vertical; + min-height: 125px; + max-height: 300px; + } + } + + &-label { + app-authors-input { + + .tags-clouds { + display: flex; + border: 1px solid @color-gray; + border-radius: 2px; + width: 100%; + + &-categories { + display: flex; + align-items: center; + span { + display: flex; + flex-wrap: nowrap; + border: 1px solid @color-gray; + padding-left: 5px; + padding-right: 5px; + margin-left: 5px; + } + &-delete { + border: none; + margin-left: 5px; + padding-left: 5px; + padding-right: 5px; + cursor: pointer; + } + } + + input { + border: none; + width: auto; + &:focus { + outline: none; + } + } + } + + .tags-clouds-list { + margin-top: -15px; + ul { + list-style-type: none; + text-align: left; + padding-left: 0px; + + li { + font-family: 'SourseSansPro Semibold'; + border: 1px solid @color-gray2; + padding: 5px; + width: 50%; + } + } + } + + &.ng-touched.ng-invalid { + .tags-clouds { + border: 1px solid @color-red; + } + } + } + } + + &-label-time-duration { + app-duration-field { + &.ng-invalid.ng-touched input { + border-color: @color-red; + } + + input { + border: 1px solid @color-gray; + border-radius: 2px; + padding: 7px; + width: 100%; + font-family: 'SourseSansPro Semibold'; + font-size: 14px; + color: @color-black; + box-sizing: border-box; + width: 50%; + + &::placeholder { + color: @color-gray2; + } + + &:focus { + outline: 1px solid @color-gray2; + } + } + + .transformed-duration { + margin-left: 20px; + } + } + } + + &-label-time { + app-created-at-date-field { + + &.ng-invalid.ng-touched input { + border-color: @color-red; + } + + input { + border: 1px solid @color-gray; + border-radius: 2px; + padding: 7px; + width: 100%; + font-family: 'SourseSansPro Semibold'; + font-size: 14px; + color: @color-black; + box-sizing: border-box; + + &::placeholder { + color: @color-gray2; + } + + &:focus { + outline: 1px solid @color-gray2; + } + } + } + } + + .error { + text-align: left; + &-input-validation { + border-color: @color-red; + } + &-message { + color: @color-red; + padding-left: 10px; + text-align: left; + margin-bottom: 10px; + margin-top: -10px; + } + input, textarea { + &:focus { + outline: 1px solid @color-red; + } + } + } + + &-label-time { + width: 20%; + + &-picker { + position: relative; + mat-datepicker-toggle { + position: absolute; + top: -2px; + right: 0px; + } + } + &-duration { + width: 40%; + } + } + &-field { max-width: 50%; } + + &-actions { + display: flex; + justify-content: flex-end; + margin-top: 35px; + + button { + transition-duration: 0.4s; + + &.add-course-form-button-cancel { + background-color: @color-gray; + color: @color-dark; + } + &.add-course-form-button-save { + color: @color-white; + background-color: @color-green1; + margin-left: 10px; + + &--disabled { + background-color: @color-green2; + transition: none; + box-shadow: none; + } + } + &:hover { + box-shadow: inset 0 0 100px 100px @color-black1; + } + } + } } } @@ -59,24 +295,3 @@ mat-card-content { } } -mat-card-actions { - display: flex; - justify-content: end; - - button { - transition-duration: 0.4s; - - &.add-course-form-button-cancel { - background-color: @color-gray; - color: @color-dark; - } - &.add-course-form-button-save { - color: @color-white; - background-color: @color-green1; - margin-left: 10px; - } - &:hover { - box-shadow: inset 0 0 100px 100px @color-black1; - } - } -} \ No newline at end of file diff --git a/src/app/add-course-page/add-course-page.component.ts b/src/app/add-course-page/add-course-page.component.ts index 08a7044..d0678c3 100644 --- a/src/app/add-course-page/add-course-page.component.ts +++ b/src/app/add-course-page/add-course-page.component.ts @@ -1,49 +1,94 @@ -import { Component } from '@angular/core'; -import { Router } from '@angular/router'; +import { Component, OnInit, ViewEncapsulation } from '@angular/core'; +import { FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { ActivatedRoute, Router } from '@angular/router'; +import { Observable } from 'rxjs'; +import { CourseItemInfo, GetFormControls } from '../core/models'; import { HomePageService } from '../core/services/home-page.service'; -import { CourseItemInfo } from '../core/models'; -import { MatDatepickerInputEvent } from '@angular/material/datepicker'; const coursesURL: string = '/courses'; @Component({ selector: 'app-add-course-page', templateUrl: './add-course-page.component.html', - styleUrls: ['./add-course-page.component.less'] + styleUrls: ['./add-course-page.component.less'], + encapsulation: ViewEncapsulation.None }) -export class AddCoursePageComponent { - public title: string; - public description: string; - public duration: number; - public datapicker: Date; - public authors: string; +export class AddCoursePageComponent implements OnInit { + public addNewCourseForm: FormGroup; + public editableCourseItems: CourseItemInfo; + public courseId: string; + public pageTitle: string; constructor ( private router: Router, + private activatedRoute: ActivatedRoute, private homePageService: HomePageService, + private fb: FormBuilder, ) { } + public ngOnInit(): void { + this.addNewCourseForm = this.fb.group({ + title: [(this.editableCourseItems && this.editableCourseItems.title), [ + Validators.required, + Validators.maxLength(50) + ]], + description: ['', [ + Validators.required, + Validators.maxLength(500) + ]], + durationTime: ['', [Validators.required]], + createdAtDate: ['', Validators.required], + authors: [[]] + }); + + this.activatedRoute.paramMap.subscribe(params => { + const courseId: string = params.get('courseId'); + this.courseId = courseId; + courseId + ? this.pageTitle = 'Edit course' + : this.pageTitle = 'Add new course'; + if (courseId) { + this.getCourseItemById(courseId); + } + }); + } + + public getCourseItemById(id: string): void { + this.homePageService.getCourseById(id).subscribe( + data => this.editCourse(data)); + } + + public editCourse(course: CourseItemInfo): void { + this.addNewCourseForm.patchValue({ + title: course.title, + description: course.description, + durationTime: +course.durationTime, + createdAtDate: course.createdAtDate, + authors: course.authors + }); + } + public cancelClick(): void { this.router.navigate([coursesURL]); } public addNewCourse(): void { - const authorsArr: string[] = this.authors.split(', '); - const sentDataCourse: CourseItemInfo = { - title: this.title, - createdAtDate: this.datapicker, - durationTime: this.duration, - description: this.description, - authors: authorsArr - }; - - this.homePageService.createCourse(sentDataCourse).subscribe ( + const sentDataCourse: CourseItemInfo = this.addNewCourseForm.value; + let changeCourseItems: Observable; + + if (this.courseId) { + changeCourseItems = this.homePageService.updateCourse(this.courseId, sentDataCourse); + } else { + changeCourseItems = this.homePageService.createCourse(sentDataCourse); + } + + changeCourseItems.subscribe( data => { this.router.navigate([coursesURL]); } ); } - public addEvent(event: MatDatepickerInputEvent): void { - this.datapicker = event.value; + get formControls(): GetFormControls { + return this.addNewCourseForm.controls; } } diff --git a/src/app/add-course-page/add-course-page.module.ts b/src/app/add-course-page/add-course-page.module.ts index 5edb84f..608a967 100644 --- a/src/app/add-course-page/add-course-page.module.ts +++ b/src/app/add-course-page/add-course-page.module.ts @@ -3,13 +3,24 @@ import { CommonModule } from '@angular/common'; import { AddCoursePageComponent } from './add-course-page.component'; import { CustomMaterialModule } from '../core/modules/material.module'; import { RouterModule } from '@angular/router'; -import { FormsModule } from '@angular/forms'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { CustomDurationFieldComponent } from '../shared/custom-form-field-control/custom-duration-field/custom-duration-field.component'; +import { TransformMinutesToHoursModule } from '../core/pipes/transform-minutes/transform-minutes.module'; +import { CustomAuthorsInputComponent } from '../shared/custom-form-field-control/custom-authors-input/custom-authors-input.component'; +import { CustomCreatedAtDateFieldComponent } from '../shared/custom-form-field-control/custom-created-at-date-field/custom-created-at-date-field.component'; @NgModule({ - declarations: [ AddCoursePageComponent ], + declarations: [ + AddCoursePageComponent, + CustomDurationFieldComponent, + CustomCreatedAtDateFieldComponent, + CustomAuthorsInputComponent + ], imports: [ CommonModule, CustomMaterialModule, + TransformMinutesToHoursModule, + ReactiveFormsModule, RouterModule, FormsModule ], diff --git a/src/app/app.module.ts b/src/app/app.module.ts index c92f528..c3b31b9 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -7,12 +7,10 @@ import { CoreModule } from './core/core.module'; import { LoginPageModule } from './login-page/login-page.module'; import { HomePageModule } from './home-page/home-page.module'; import { SharedModule } from './shared/shared.module'; -import { CoursePageModule } from './course-page/course-page.module'; import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; import { CustomMaterialModule } from './core/modules/material.module'; import { AddCoursePageModule } from './add-course-page/add-course-page.module'; import { NotFoundPageModule } from './not-found-page/not-found-page.module'; -import { EditCoursePageModule } from './edit-course-page/edit-course-page.module'; import { BreadcrumbModule } from './breadcrumb/breadcrumb.module'; import { HttpClientModule } from '@angular/common/http'; @@ -25,12 +23,10 @@ import { HttpClientModule } from '@angular/common/http'; AppRoutingModule, CoreModule, SharedModule, - CoursePageModule, LoginPageModule, HomePageModule, AddCoursePageModule, NotFoundPageModule, - EditCoursePageModule, BreadcrumbModule, BrowserAnimationsModule, CustomMaterialModule, diff --git a/src/app/core/models/course-authors.interface.ts b/src/app/core/models/course-authors.interface.ts new file mode 100644 index 0000000..aec0554 --- /dev/null +++ b/src/app/core/models/course-authors.interface.ts @@ -0,0 +1,4 @@ +export interface CourseAuthors { + id: string; + name: string; +} diff --git a/src/app/core/models/course-item.interface.ts b/src/app/core/models/course-item.interface.ts index 7b3540e..f095ffd 100644 --- a/src/app/core/models/course-item.interface.ts +++ b/src/app/core/models/course-item.interface.ts @@ -1,4 +1,3 @@ - export interface CourseItemInfo { id?: string; title: string; diff --git a/src/app/core/models/form-controls.interface.ts b/src/app/core/models/form-controls.interface.ts new file mode 100644 index 0000000..bf7729c --- /dev/null +++ b/src/app/core/models/form-controls.interface.ts @@ -0,0 +1,5 @@ +import { AbstractControl } from '@angular/forms'; + +export interface GetFormControls { + [key: string]: AbstractControl; +} diff --git a/src/app/core/models/index.ts b/src/app/core/models/index.ts index e704b9c..dad934c 100644 --- a/src/app/core/models/index.ts +++ b/src/app/core/models/index.ts @@ -2,3 +2,5 @@ export * from './course-item.interface'; export * from './environment-type.interface'; export * from './test-context.interface'; export * from './user-info.interface'; +export * from './course-authors.interface'; +export * from './form-controls.interface'; diff --git a/src/app/core/pipes/transform-minutes/transform-minutes.module.ts b/src/app/core/pipes/transform-minutes/transform-minutes.module.ts new file mode 100644 index 0000000..6606bb7 --- /dev/null +++ b/src/app/core/pipes/transform-minutes/transform-minutes.module.ts @@ -0,0 +1,10 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { TransformMinutesToHoursPipe } from './transform-minutes.pipe'; + +@NgModule({ + declarations: [ TransformMinutesToHoursPipe ], + exports: [ TransformMinutesToHoursPipe ], + imports: [ CommonModule ], +}) +export class TransformMinutesToHoursModule { } diff --git a/src/app/core/pipes/transform-minutes.pipe.ts b/src/app/core/pipes/transform-minutes/transform-minutes.pipe.ts similarity index 57% rename from src/app/core/pipes/transform-minutes.pipe.ts rename to src/app/core/pipes/transform-minutes/transform-minutes.pipe.ts index 6fb81e3..5dbf89d 100644 --- a/src/app/core/pipes/transform-minutes.pipe.ts +++ b/src/app/core/pipes/transform-minutes/transform-minutes.pipe.ts @@ -18,17 +18,20 @@ const MINUTE_IN_SEC: number = 60; export class TransformMinutesToHoursPipe implements PipeTransform { public transform(time: number): string { - if (time < MINUTE_IN_SEC) { - return `${time}min`; - } + if (time && !isNaN(time)) { + if (time < MINUTE_IN_SEC) { + return `${time}min`; + } - if (time % MINUTE_IN_SEC === 0) { - return `${Math.floor(time / MINUTE_IN_SEC)}h`; - } + if (time % MINUTE_IN_SEC === 0) { + return `${Math.floor(time / MINUTE_IN_SEC)}h`; + } - const hours: number = Math.floor(time / MINUTE_IN_SEC); - const minutes: number = time % MINUTE_IN_SEC; + const hours: number = Math.floor(time / MINUTE_IN_SEC); + const minutes: number = time % MINUTE_IN_SEC; - return `${hours}h ${minutes}min`; + return `${hours}h ${minutes}min`; + } + return ''; } } diff --git a/src/app/core/services/custom-authors-input.ts b/src/app/core/services/custom-authors-input.ts new file mode 100644 index 0000000..6a54137 --- /dev/null +++ b/src/app/core/services/custom-authors-input.ts @@ -0,0 +1,30 @@ +import { HttpClient, HttpParams } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { Observable } from 'rxjs'; +import { CourseAuthors } from '../models'; +import { LoadingBlockService } from './loading-block.service'; + +const BASE_URL: string = 'http://localhost:3000/authors'; +@Injectable({ + providedIn: 'root' +}) + +export class CustomAuthorsInputService { + + constructor( + private http: HttpClient, + private loadingBlockService: LoadingBlockService + ) { } + + public getAuthors(id: string): Observable { + return this.http.get(`${BASE_URL}/${id}`); + } + + public searchAuthors(text: string): Observable { + const params: HttpParams = new HttpParams().set('name_like', text); + return this.http.get(`${BASE_URL}`, { + params, + responseType: 'json' + }); + } +} diff --git a/src/app/core/services/home-page.service.ts b/src/app/core/services/home-page.service.ts index 7919f25..b01ba99 100644 --- a/src/app/core/services/home-page.service.ts +++ b/src/app/core/services/home-page.service.ts @@ -56,11 +56,19 @@ export class HomePageService { ); } - public updateItem(id: string): Observable { + public getCourseById(id: string): Observable { this.loadingBlockService.updateLoadingBlockState(true); return this.http.get(`${BASE_URL}/${id}`) .pipe( tap(() => this.loadingBlockService.updateLoadingBlockState(false)) ); } + + public updateCourse(id: string, data: CourseItemInfo): Observable { + this.loadingBlockService.updateLoadingBlockState(true); + return this.http.put(`${BASE_URL}/${id}`, data) + .pipe( + tap(() => this.loadingBlockService.updateLoadingBlockState(false)) + ); + } } diff --git a/src/app/course-page/course-page.component.html b/src/app/course-page/course-page.component.html deleted file mode 100644 index b9d1c81..0000000 --- a/src/app/course-page/course-page.component.html +++ /dev/null @@ -1 +0,0 @@ -

course-page works!

diff --git a/src/app/course-page/course-page.component.spec.ts b/src/app/course-page/course-page.component.spec.ts deleted file mode 100644 index c795e29..0000000 --- a/src/app/course-page/course-page.component.spec.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; - -import { CoursePageComponent } from './course-page.component'; - -describe('CoursePageComponent', () => { - let component: CoursePageComponent; - let fixture: ComponentFixture; - - beforeEach(async(() => { - TestBed.configureTestingModule({ - declarations: [ CoursePageComponent ] - }) - .compileComponents(); - })); - - beforeEach(() => { - fixture = TestBed.createComponent(CoursePageComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/src/app/course-page/course-page.component.ts b/src/app/course-page/course-page.component.ts deleted file mode 100644 index 550e833..0000000 --- a/src/app/course-page/course-page.component.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Component } from '@angular/core'; - -@Component({ - selector: 'app-course-page', - templateUrl: './course-page.component.html', - styleUrls: ['./course-page.component.less'] -}) -export class CoursePageComponent { } diff --git a/src/app/course-page/course-page.module.ts b/src/app/course-page/course-page.module.ts deleted file mode 100644 index abd3368..0000000 --- a/src/app/course-page/course-page.module.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { CoursePageComponent } from './course-page.component'; - -@NgModule({ - declarations: [CoursePageComponent], - exports: [CoursePageComponent], - imports: [CommonModule] -}) -export class CoursePageModule { } diff --git a/src/app/edit-course-page/edit-course-page.component.html b/src/app/edit-course-page/edit-course-page.component.html deleted file mode 100644 index 83caa71..0000000 --- a/src/app/edit-course-page/edit-course-page.component.html +++ /dev/null @@ -1,14 +0,0 @@ -
-

- Title: {{editableCourse.title}} -

-

- Description: {{editableCourse.description}} -

-

- Duration: {{editableCourse.durationTime}} -

-

- Created at: {{editableCourse.createdAtDate}} -

-
diff --git a/src/app/edit-course-page/edit-course-page.component.less b/src/app/edit-course-page/edit-course-page.component.less deleted file mode 100644 index b5a41d1..0000000 --- a/src/app/edit-course-page/edit-course-page.component.less +++ /dev/null @@ -1,3 +0,0 @@ -.container { - margin-top: 40px; -} \ No newline at end of file diff --git a/src/app/edit-course-page/edit-course-page.component.spec.ts b/src/app/edit-course-page/edit-course-page.component.spec.ts deleted file mode 100644 index 52da59f..0000000 --- a/src/app/edit-course-page/edit-course-page.component.spec.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; - -import { EditCoursePageComponent } from './edit-course-page.component'; - -describe('EditCoursePageComponent', () => { - let component: EditCoursePageComponent; - let fixture: ComponentFixture; - - beforeEach(async(() => { - TestBed.configureTestingModule({ - declarations: [ EditCoursePageComponent ] - }) - .compileComponents(); - })); - - beforeEach(() => { - fixture = TestBed.createComponent(EditCoursePageComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/src/app/edit-course-page/edit-course-page.component.ts b/src/app/edit-course-page/edit-course-page.component.ts deleted file mode 100644 index f8a0c57..0000000 --- a/src/app/edit-course-page/edit-course-page.component.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { Component, OnInit } from '@angular/core'; -import { HomePageService } from '../core/services/home-page.service'; -import { ActivatedRoute } from '@angular/router'; -import { CourseItemInfo } from '../core/models'; - -@Component({ - selector: 'app-edit-course-page', - templateUrl: './edit-course-page.component.html', - styleUrls: ['./edit-course-page.component.less'] -}) -export class EditCoursePageComponent implements OnInit { - public editableCourse: CourseItemInfo; - - constructor( - private homePageService: HomePageService, - private route: ActivatedRoute) { } - - public ngOnInit(): void { - this.route.paramMap.subscribe(params => { - const courseId: string = params.get('courseId'); - this.editCourseById(courseId); - }); - } - - public editCourseById(id: string): void { - this.homePageService.updateItem(id).subscribe(data => { - return this.editableCourse = data; - }); - } -} diff --git a/src/app/edit-course-page/edit-course-page.module.ts b/src/app/edit-course-page/edit-course-page.module.ts deleted file mode 100644 index 265a730..0000000 --- a/src/app/edit-course-page/edit-course-page.module.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { EditCoursePageComponent } from './edit-course-page.component'; - -@NgModule({ - declarations: [ EditCoursePageComponent ], - imports: [ CommonModule ], - exports: [ EditCoursePageComponent ] -}) -export class EditCoursePageModule { } diff --git a/src/app/home-page/course-list/course-item/course-item.component.ts b/src/app/home-page/course-list/course-item/course-item.component.ts index 5dff41f..6c69f86 100644 --- a/src/app/home-page/course-list/course-item/course-item.component.ts +++ b/src/app/home-page/course-list/course-item/course-item.component.ts @@ -39,7 +39,6 @@ export class CourseItemComponent implements OnInit { } public isEditedCourse(id: string): void { - this.homePageService.updateItem(id); this.router.navigate(['/courses', id]); } diff --git a/src/app/home-page/home-page.module.ts b/src/app/home-page/home-page.module.ts index 672fa55..65e3977 100644 --- a/src/app/home-page/home-page.module.ts +++ b/src/app/home-page/home-page.module.ts @@ -1,5 +1,5 @@ import { NgModule } from '@angular/core'; -import { FormsModule } from '@angular/forms'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { CommonModule, DatePipe } from '@angular/common'; import { HomePageComponent } from './home-page.component'; import { CourseListComponent } from './course-list/course-list.component'; @@ -7,12 +7,12 @@ import { SearchComponent } from './search/search.component'; import { AddCourseComponent } from './add-course/add-course.component'; import { FontAwesomeModule } from '@fortawesome/angular-fontawesome'; import { CourseItemComponent } from './course-list/course-item/course-item.component'; -import { TransformMinutesToHoursPipe } from '../core/pipes/transform-minutes.pipe'; import { ChangeBorderColorDirective } from '../core/directives/change-border-color.directive'; import { OrderByDateCreationPipe } from '../core/pipes/order-by-date-creation.pipe'; import { OrderByTitleNamePipe } from '../core/pipes/order-by-title-name.pipe'; import { RouterModule } from '@angular/router'; import { NgxPaginationModule } from 'ngx-pagination'; +import { TransformMinutesToHoursModule } from '../core/pipes/transform-minutes/transform-minutes.module'; @NgModule({ declarations: [ @@ -21,7 +21,6 @@ import { NgxPaginationModule } from 'ngx-pagination'; SearchComponent, AddCourseComponent, CourseItemComponent, - TransformMinutesToHoursPipe, OrderByDateCreationPipe, OrderByTitleNamePipe, ChangeBorderColorDirective, @@ -30,7 +29,9 @@ import { NgxPaginationModule } from 'ngx-pagination'; imports: [ CommonModule, FontAwesomeModule, + TransformMinutesToHoursModule, FormsModule, + ReactiveFormsModule, RouterModule, NgxPaginationModule ], diff --git a/src/app/home-page/search/search.component.html b/src/app/home-page/search/search.component.html index 12c5a51..730a430 100644 --- a/src/app/home-page/search/search.component.html +++ b/src/app/home-page/search/search.component.html @@ -1,9 +1,7 @@