- -
- - Rocket Ship - - - - - - - - - - {{ title }} app is running! - - - Rocket Ship Smoke - - -
- - -

Resources

-

Here are some links to help you get started:

- - - - -

Next Steps

-

What do you want to do next with your app?

- - - -
-
- - - - - New Component -
- -
- - - - - Angular Material -
- -
- - - - - Add PWA Support -
- -
- - - - - Add Dependency -
- -
- - - - - Run and Watch Tests -
- -
- - - - - Build for Production -
+
+
- -
-
ng generate component xyz
-
ng add @angular/material
-
ng add @angular/pwa
-
ng add _____
-
ng test
-
ng build
-
- - - - - - - - Gray Clouds Background - -
- - - - - - - - - - diff --git a/src/app/app.component.scss b/src/app/app.component.scss index e69de29..e51aae2 100644 --- a/src/app/app.component.scss +++ b/src/app/app.component.scss @@ -0,0 +1,6 @@ +.pages-container { + background-color: whitesmoke; + height: calc(100vh - 192px); + overflow-y: overlay; + padding: 0px 50px; +} diff --git a/src/app/app.component.spec.ts b/src/app/app.component.spec.ts index 2e7cfc8..882e31d 100644 --- a/src/app/app.component.spec.ts +++ b/src/app/app.component.spec.ts @@ -16,18 +16,18 @@ describe('AppComponent', () => { expect(app).toBeTruthy(); }); - it(`should have as title 'courses-app'`, () => { + it(`should have as title 'video-course'`, () => { const fixture = TestBed.createComponent(AppComponent); const app = fixture.componentInstance; - expect(app.title).toEqual('courses-app'); + expect(app.title).toEqual('video-course'); }); it('should render title', () => { const fixture = TestBed.createComponent(AppComponent); fixture.detectChanges(); - const compiled = fixture.nativeElement; - expect(compiled.querySelector('.content span').textContent).toContain( - 'courses-app app is running!', + const compiled = fixture.nativeElement as HTMLElement; + expect(compiled.querySelector('.content span')?.textContent).toContain( + 'video-course app is running!', ); }); }); diff --git a/src/app/app.component.ts b/src/app/app.component.ts index 5ec3950..8f5b6ea 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -6,5 +6,5 @@ import { Component } from '@angular/core'; styleUrls: ['./app.component.scss'], }) export class AppComponent { - title = 'courses-app'; + title = 'video-course'; } diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 8cd9343..730abe4 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -1,11 +1,25 @@ import { NgModule } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; +import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; +import { BreadcrumbModule } from 'angular-crumbs'; + import { AppRoutingModule } from './app-routing.module'; import { AppComponent } from './app.component'; +import { CoreModule } from './core/core.module'; +import { PagesModule } from './pages/pages.module'; +import { SharedModule } from './shared/shared.module'; @NgModule({ declarations: [AppComponent], - imports: [BrowserModule, AppRoutingModule], + imports: [ + AppRoutingModule, + BreadcrumbModule, + BrowserAnimationsModule, + BrowserModule, + CoreModule, + PagesModule, + SharedModule, + ], providers: [], bootstrap: [AppComponent], }) diff --git a/src/app/core/constants/routes.ts b/src/app/core/constants/routes.ts new file mode 100644 index 0000000..8a842b0 --- /dev/null +++ b/src/app/core/constants/routes.ts @@ -0,0 +1,3 @@ +export const HOME = 'home'; +export const COURSES = 'courses'; +export const EDIT_COURSE = 'edit-course'; diff --git a/src/app/core/core.module.ts b/src/app/core/core.module.ts new file mode 100644 index 0000000..339a911 --- /dev/null +++ b/src/app/core/core.module.ts @@ -0,0 +1,12 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; + + + +@NgModule({ + declarations: [], + imports: [ + CommonModule + ] +}) +export class CoreModule { } diff --git a/src/app/core/models/course_model.ts b/src/app/core/models/course_model.ts new file mode 100644 index 0000000..5d8bf27 --- /dev/null +++ b/src/app/core/models/course_model.ts @@ -0,0 +1,7 @@ +export interface Course { + id: number; + title: string; + creationDate: string; + duration: number; + description: string; +} diff --git a/src/app/core/models/user_model.ts b/src/app/core/models/user_model.ts new file mode 100644 index 0000000..027dcf1 --- /dev/null +++ b/src/app/core/models/user_model.ts @@ -0,0 +1,5 @@ +export interface User { + id: number; + firstName: string; + lastName: string; +} diff --git a/src/app/core/services/courses_data_service.ts b/src/app/core/services/courses_data_service.ts new file mode 100644 index 0000000..461fcb9 --- /dev/null +++ b/src/app/core/services/courses_data_service.ts @@ -0,0 +1,52 @@ +import { Injectable } from '@angular/core'; +import { Course } from '../models/course_model'; + +@Injectable({ providedIn: 'root' }) +export class CoursesService { + public defaultCourses: Course[] = [ + { + id: 1, + title: 'Course 1 - Lorem ipsum dolor sit', + creationDate: new Date(Date.UTC(new Date().getFullYear(), 0, 1)) + .toISOString() + .substring(0, 10), + duration: 135, + description: + 'Lorem ipsum dolor sit amet consectetur adipisicing elit. Animi ex, hic ullam ab maxime atque fuga, dolorem dignissimos dicta praesentium iure, quia odit. Accusamus, doloremque.', + }, + { + id: 2, + title: 'Course 2 - A veniam ut vel velit', + creationDate: new Date(Date.UTC(new Date().getFullYear(), 2, 5)) + .toISOString() + .substring(0, 10), + duration: 213, + description: + 'A veniam ut vel velit sint iure quo nihil sit amet consectetur adipisicing. Dignissimos odio mollitia nam tempore.', + }, + { + id: 3, + title: 'Course 3 - Lorem ipsum dolor sit amet', + creationDate: new Date(Date.UTC(new Date().getFullYear(), 1, 21)) + .toISOString() + .substring(0, 10), + duration: 97, + description: + 'Lorem ipsum dolor sit amet consectetur adipisicing elit. Facilis quaerat quo soluta iure vero aliquam libero tenetur, consequatur deleniti consectetur, quam voluptate deserunt perferendis, magni sit quisquam fuga ipsum ex mollitia unde exercitationem. Voluptate earum reprehenderit aliquid quisquam eum dicta.', + }, + { + id: 4, + title: 'Course 4 - Facilis quaerat quo soluta', + creationDate: new Date(Date.UTC(new Date().getFullYear(), 3, 17)) + .toISOString() + .substring(0, 10), + duration: 88, + description: + 'Facilis quaerat quo soluta iure vero aliquam libero tenetur, consequatur deleniti consectetur, quam voluptate deserunt perferendis, magni sit quisquam fuga ipsum ex mollitia unde exercitationem.', + }, + ]; + + getCourses(): Course[] { + return this.defaultCourses; + } +} diff --git a/src/app/pages/courses/components/add-course/add-course.component.html b/src/app/pages/courses/components/add-course/add-course.component.html new file mode 100644 index 0000000..b2a2345 --- /dev/null +++ b/src/app/pages/courses/components/add-course/add-course.component.html @@ -0,0 +1,3 @@ +
+ +
diff --git a/src/app/pages/courses/components/add-course/add-course.component.scss b/src/app/pages/courses/components/add-course/add-course.component.scss new file mode 100644 index 0000000..1f645fa --- /dev/null +++ b/src/app/pages/courses/components/add-course/add-course.component.scss @@ -0,0 +1,22 @@ +.add-container { + display: flex; + justify-content: flex-end; + + button { + align-items: center; + background-color: blue; + border: none; + border-radius: 2px; + color: white; + display: flex; + gap: 5px; + margin-left: 4px; + padding: 5px 15px 5px 10px; + transition: all 0.5s ease; + + &:hover { + background-color: rgb(0, 0, 192); + cursor: pointer; + } + } +} diff --git a/src/app/pages/courses/components/add-course/add-course.component.spec.ts b/src/app/pages/courses/components/add-course/add-course.component.spec.ts new file mode 100644 index 0000000..ee3154b --- /dev/null +++ b/src/app/pages/courses/components/add-course/add-course.component.spec.ts @@ -0,0 +1,24 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { AddCourseComponent } from './add-course.component'; + +describe('AddCourseComponent', () => { + let component: AddCourseComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [AddCourseComponent], + }).compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(AddCourseComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/pages/courses/components/add-course/add-course.component.ts b/src/app/pages/courses/components/add-course/add-course.component.ts new file mode 100644 index 0000000..e34660e --- /dev/null +++ b/src/app/pages/courses/components/add-course/add-course.component.ts @@ -0,0 +1,12 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-add-course', + templateUrl: './add-course.component.html', + styleUrls: ['./add-course.component.scss'], +}) +export class AddCourseComponent implements OnInit { + constructor() {} + + ngOnInit(): void {} +} diff --git a/src/app/pages/courses/components/courses-list/courses-list.component.html b/src/app/pages/courses/components/courses-list/courses-list.component.html new file mode 100644 index 0000000..e6c85c9 --- /dev/null +++ b/src/app/pages/courses/components/courses-list/courses-list.component.html @@ -0,0 +1,34 @@ + + +
+
+ {{ course.title }} + + access_time + {{ course.duration | m2h }} + calendar_today + {{ course.creationDate | date }} + +
+ +

+ {{ course.description }} +

+
+
+ + + + +
+
+ +
+ + + +
diff --git a/src/app/pages/courses/components/courses-list/courses-list.component.scss b/src/app/pages/courses/components/courses-list/courses-list.component.scss new file mode 100644 index 0000000..0f31f02 --- /dev/null +++ b/src/app/pages/courses/components/courses-list/courses-list.component.scss @@ -0,0 +1,106 @@ +.course-card { + background-color: white; + box-shadow: 0px 0px 10px rgba(128, 128, 128, 0.3); + display: flex; + justify-content: space-between; + margin-top: 10px; + margin-bottom: 20px; + transition: all 0.5s ease; + + &:hover { + box-shadow: 0px 0px 10px grey; + } + + .card-container { + width: 100%; + } + + .card-header { + align-items: center; + display: flex; + height: 40px; + justify-content: space-between; + width: 100%; + + .card-title { + color: black; + line-height: 28px; + margin: 0; + max-width: 600px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + + .card-subtitle { + align-items: center; + color: grey; + display: flex; + margin: 0; + white-space: nowrap; + + mat-icon { + font-size: 16px; + height: 16px; + padding: 0px 5px 0px 15px; + width: 16px; + } + } + } + + .card-content { + color: grey; + line-height: 25px; + margin: 0; + padding: 0; + padding-top: 8px; + } + + .card-actions { + align-items: flex-end; + display: flex; + justify-content: flex-end; + margin: 0; + margin-right: 0; + padding-bottom: 10px; + width: 350px; + + button { + align-items: center; + background-color: blue; + border: none; + border-radius: 2px; + color: white; + display: flex; + gap: 5px; + margin-left: 5px; + padding: 5px 15px 5px 10px; + transition: all 0.5s ease; + + mat-icon { + font-size: 18px; + height: 18px; + } + + &:hover { + background-color: rgb(0, 0, 192); + cursor: pointer; + } + } + } +} + +.load-more-btn { + background-color: transparent; + border: none; + color: blue; + margin: 0 auto; + text-decoration: underline; + text-transform: uppercase; + transition: all 0.5s ease; + + &:hover { + color: rgb(0, 0, 192); + cursor: pointer; + } +} diff --git a/src/app/pages/courses/components/courses-list/courses-list.component.spec.ts b/src/app/pages/courses/components/courses-list/courses-list.component.spec.ts new file mode 100644 index 0000000..615781b --- /dev/null +++ b/src/app/pages/courses/components/courses-list/courses-list.component.spec.ts @@ -0,0 +1,24 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { CoursesListComponent } from './courses-list.component'; + +describe('CoursesListComponent', () => { + let component: CoursesListComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [CoursesListComponent], + }).compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(CoursesListComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/pages/courses/components/courses-list/courses-list.component.ts b/src/app/pages/courses/components/courses-list/courses-list.component.ts new file mode 100644 index 0000000..fcb945b --- /dev/null +++ b/src/app/pages/courses/components/courses-list/courses-list.component.ts @@ -0,0 +1,28 @@ +import { Component, OnInit, Input } from '@angular/core'; +import { Router } from '@angular/router'; +import { Course } from '../../../../core/models/course_model'; +import { COURSES, EDIT_COURSE } from '../../../../core/constants/routes'; + +@Component({ + selector: 'app-courses-list', + templateUrl: './courses-list.component.html', + styleUrls: ['./courses-list.component.scss'], +}) +export class CoursesListComponent implements OnInit { + public loadMore: boolean = false; + public preShowNumber: number = 2; + + @Input() courses!: Course[]; + + constructor(private router: Router) {} + + ngOnInit(): void {} + + loadMoreToggle(): void { + this.loadMore = !this.loadMore; + } + + openCourseEdit(id: number): void { + this.router.navigate([`${COURSES}/${EDIT_COURSE}`, id]); + } +} diff --git a/src/app/pages/courses/components/find-course/find-course.component.html b/src/app/pages/courses/components/find-course/find-course.component.html new file mode 100644 index 0000000..6d56d18 --- /dev/null +++ b/src/app/pages/courses/components/find-course/find-course.component.html @@ -0,0 +1,7 @@ +
+
+ search + +
+ +
diff --git a/src/app/pages/courses/components/find-course/find-course.component.scss b/src/app/pages/courses/components/find-course/find-course.component.scss new file mode 100644 index 0000000..d693fc3 --- /dev/null +++ b/src/app/pages/courses/components/find-course/find-course.component.scss @@ -0,0 +1,45 @@ +.search-container { + align-items: center; + display: flex; + padding-top: 20px; + + .search-btn { + color: white; + background-color: rgb(0, 179, 0); + border: none; + border-radius: 2px; + height: 35px; + margin-left: 4px; + padding: 0 10px; + transition: all 0.5s ease; + + &:hover { + background-color: green; + cursor: pointer; + } + } +} + +.search-field { + align-items: center; + background-color: white; + border: 1px solid #ddd; + border-radius: 2px; + display: flex; + height: 35px; + width: 300px; + + mat-icon { + color: grey; + padding: 5px; + transform: rotate(360deg) scaleX(-1); + width: 25px; + } + + .search-input { + background-color: transparent; + border: none; + outline: none; + width: 260px; + } +} diff --git a/src/app/pages/courses/components/find-course/find-course.component.spec.ts b/src/app/pages/courses/components/find-course/find-course.component.spec.ts new file mode 100644 index 0000000..616a9ba --- /dev/null +++ b/src/app/pages/courses/components/find-course/find-course.component.spec.ts @@ -0,0 +1,24 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { FindCourseComponent } from './find-course.component'; + +describe('FindCourseComponent', () => { + let component: FindCourseComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [FindCourseComponent], + }).compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(FindCourseComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/pages/courses/components/find-course/find-course.component.ts b/src/app/pages/courses/components/find-course/find-course.component.ts new file mode 100644 index 0000000..2505a0a --- /dev/null +++ b/src/app/pages/courses/components/find-course/find-course.component.ts @@ -0,0 +1,12 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-find-course', + templateUrl: './find-course.component.html', + styleUrls: ['./find-course.component.scss'], +}) +export class FindCourseComponent implements OnInit { + constructor() {} + + ngOnInit(): void {} +} diff --git a/src/app/pages/courses/courses.component.html b/src/app/pages/courses/courses.component.html new file mode 100644 index 0000000..13cf129 --- /dev/null +++ b/src/app/pages/courses/courses.component.html @@ -0,0 +1,6 @@ +
+ + +
+ + diff --git a/src/app/pages/courses/courses.component.scss b/src/app/pages/courses/courses.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/pages/courses/courses.component.spec.ts b/src/app/pages/courses/courses.component.spec.ts new file mode 100644 index 0000000..5735004 --- /dev/null +++ b/src/app/pages/courses/courses.component.spec.ts @@ -0,0 +1,24 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { CoursesComponent } from './courses.component'; + +describe('CoursesComponent', () => { + let component: CoursesComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [CoursesComponent], + }).compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(CoursesComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/pages/courses/courses.component.ts b/src/app/pages/courses/courses.component.ts new file mode 100644 index 0000000..59f5bd5 --- /dev/null +++ b/src/app/pages/courses/courses.component.ts @@ -0,0 +1,18 @@ +import { Component, OnInit } from '@angular/core'; +import { CoursesService } from '../../core/services/courses_data_service'; +import { Course } from '../../core/models/course_model'; + +@Component({ + selector: 'app-courses', + templateUrl: './courses.component.html', + styleUrls: ['./courses.component.scss'], +}) +export class CoursesComponent implements OnInit { + public courses!: Course[]; + + constructor(private readonly coursesService: CoursesService) {} + + ngOnInit(): void { + this.courses = this.coursesService.getCourses(); + } +} diff --git a/src/app/pages/courses/courses.module.ts b/src/app/pages/courses/courses.module.ts new file mode 100644 index 0000000..1a520ec --- /dev/null +++ b/src/app/pages/courses/courses.module.ts @@ -0,0 +1,31 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { MatCardModule } from '@angular/material/card'; +import { MatFormFieldModule } from '@angular/material/form-field'; +import { MatIconModule } from '@angular/material/icon'; +import { MatInputModule } from '@angular/material/input'; + +import { AddCourseComponent } from './components/add-course/add-course.component'; +import { CoursesComponent } from './courses.component'; +import { CoursesListComponent } from './components/courses-list/courses-list.component'; +import { FindCourseComponent } from './components/find-course/find-course.component'; +import { SharedModule } from 'src/app/shared/shared.module'; + +@NgModule({ + declarations: [ + AddCourseComponent, + CoursesComponent, + CoursesListComponent, + FindCourseComponent, + ], + imports: [ + CommonModule, + MatCardModule, + MatFormFieldModule, + MatIconModule, + MatInputModule, + SharedModule, + ], + exports: [CoursesComponent, FindCourseComponent], +}) +export class CoursesModule {} diff --git a/src/app/pages/edit-course/edit-course.component.html b/src/app/pages/edit-course/edit-course.component.html new file mode 100644 index 0000000..d9d8e42 --- /dev/null +++ b/src/app/pages/edit-course/edit-course.component.html @@ -0,0 +1 @@ +

edit-course works!

diff --git a/src/app/pages/edit-course/edit-course.component.scss b/src/app/pages/edit-course/edit-course.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/pages/edit-course/edit-course.component.spec.ts b/src/app/pages/edit-course/edit-course.component.spec.ts new file mode 100644 index 0000000..0ba4996 --- /dev/null +++ b/src/app/pages/edit-course/edit-course.component.spec.ts @@ -0,0 +1,24 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { EditCourseComponent } from './edit-course.component'; + +describe('EditCourseComponent', () => { + let component: EditCourseComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [EditCourseComponent], + }).compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(EditCourseComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/pages/edit-course/edit-course.component.ts b/src/app/pages/edit-course/edit-course.component.ts new file mode 100644 index 0000000..9fa97ad --- /dev/null +++ b/src/app/pages/edit-course/edit-course.component.ts @@ -0,0 +1,12 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-edit-course', + templateUrl: './edit-course.component.html', + styleUrls: ['./edit-course.component.scss'], +}) +export class EditCourseComponent implements OnInit { + constructor() {} + + ngOnInit(): void {} +} diff --git a/src/app/pages/home/home.component.html b/src/app/pages/home/home.component.html new file mode 100644 index 0000000..038b202 --- /dev/null +++ b/src/app/pages/home/home.component.html @@ -0,0 +1,6 @@ +
+ +
diff --git a/src/app/pages/home/home.component.scss b/src/app/pages/home/home.component.scss new file mode 100644 index 0000000..3fd9401 --- /dev/null +++ b/src/app/pages/home/home.component.scss @@ -0,0 +1,29 @@ +.home-page-container { + align-items: center; + display: flex; + height: 100%; + justify-content: center; + + .start-btn { + align-items: center; + background-color: transparent; + border: none; + color: black; + display: flex; + font-size: 24px; + font-weight: bold; + margin: 0 auto; + text-transform: uppercase; + transition: all 0.5s ease; + + img { + margin-right: 10px; + width: 60px; + } + + &:hover { + color: rgb(124, 196, 255); + cursor: pointer; + } + } +} diff --git a/src/app/pages/home/home.component.spec.ts b/src/app/pages/home/home.component.spec.ts new file mode 100644 index 0000000..9deb854 --- /dev/null +++ b/src/app/pages/home/home.component.spec.ts @@ -0,0 +1,24 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { HomeComponent } from './home.component'; + +describe('HomeComponent', () => { + let component: HomeComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [HomeComponent], + }).compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(HomeComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/pages/home/home.component.ts b/src/app/pages/home/home.component.ts new file mode 100644 index 0000000..538be34 --- /dev/null +++ b/src/app/pages/home/home.component.ts @@ -0,0 +1,18 @@ +import { Component, OnInit } from '@angular/core'; +import { Router } from '@angular/router'; +import { COURSES } from '../../core/constants/routes'; + +@Component({ + selector: 'app-home', + templateUrl: './home.component.html', + styleUrls: ['./home.component.scss'], +}) +export class HomeComponent implements OnInit { + constructor(private router: Router) {} + + ngOnInit(): void {} + + openCoursesPage(): void { + this.router.navigate([COURSES]); + } +} diff --git a/src/app/pages/pages.module.ts b/src/app/pages/pages.module.ts new file mode 100644 index 0000000..576e793 --- /dev/null +++ b/src/app/pages/pages.module.ts @@ -0,0 +1,13 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; + +import { CoursesModule } from './courses/courses.module'; +import { EditCourseComponent } from './edit-course/edit-course.component'; +import { HomeComponent } from './home/home.component'; + +@NgModule({ + declarations: [EditCourseComponent, HomeComponent], + imports: [CommonModule, CoursesModule], + exports: [EditCourseComponent, HomeComponent], +}) +export class PagesModule {} diff --git a/src/app/shared/components/breadcrumbs/breadcrumbs.component.html b/src/app/shared/components/breadcrumbs/breadcrumbs.component.html new file mode 100644 index 0000000..86b62be --- /dev/null +++ b/src/app/shared/components/breadcrumbs/breadcrumbs.component.html @@ -0,0 +1,13 @@ + + + diff --git a/src/app/shared/components/breadcrumbs/breadcrumbs.component.scss b/src/app/shared/components/breadcrumbs/breadcrumbs.component.scss new file mode 100644 index 0000000..6158e6b --- /dev/null +++ b/src/app/shared/components/breadcrumbs/breadcrumbs.component.scss @@ -0,0 +1,20 @@ +.breadcrumb { + border-bottom: 1px solid whitesmoke; + box-sizing: border-box; + display: flex; + height: 64px; + list-style: none; + margin: 0; + padding: 0 50px; + + .breadcrumb-item { + align-items: center; + display: flex; + font-weight: bold; + height: 100%; + + a { + text-decoration: none; + } + } +} diff --git a/src/app/shared/components/breadcrumbs/breadcrumbs.component.spec.ts b/src/app/shared/components/breadcrumbs/breadcrumbs.component.spec.ts new file mode 100644 index 0000000..9c54e6c --- /dev/null +++ b/src/app/shared/components/breadcrumbs/breadcrumbs.component.spec.ts @@ -0,0 +1,24 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { BreadcrumbsComponent } from './breadcrumbs.component'; + +describe('BreadcrumbsComponent', () => { + let component: BreadcrumbsComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [BreadcrumbsComponent], + }).compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(BreadcrumbsComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/shared/components/breadcrumbs/breadcrumbs.component.ts b/src/app/shared/components/breadcrumbs/breadcrumbs.component.ts new file mode 100644 index 0000000..13ea0cb --- /dev/null +++ b/src/app/shared/components/breadcrumbs/breadcrumbs.component.ts @@ -0,0 +1,12 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-breadcrumbs', + templateUrl: './breadcrumbs.component.html', + styleUrls: ['./breadcrumbs.component.scss'], +}) +export class BreadcrumbsComponent implements OnInit { + constructor() {} + + ngOnInit(): void {} +} diff --git a/src/app/shared/components/footer/footer.component.html b/src/app/shared/components/footer/footer.component.html new file mode 100644 index 0000000..beeac62 --- /dev/null +++ b/src/app/shared/components/footer/footer.component.html @@ -0,0 +1,3 @@ + + Copyright © Videocourses. All rights reserved + diff --git a/src/app/shared/components/footer/footer.component.scss b/src/app/shared/components/footer/footer.component.scss new file mode 100644 index 0000000..8404879 --- /dev/null +++ b/src/app/shared/components/footer/footer.component.scss @@ -0,0 +1,6 @@ +.footer { + font-size: 12px; + font-weight: 400; + justify-content: flex-end; + padding: 0 50px; +} diff --git a/src/app/shared/components/footer/footer.component.spec.ts b/src/app/shared/components/footer/footer.component.spec.ts new file mode 100644 index 0000000..910cf4a --- /dev/null +++ b/src/app/shared/components/footer/footer.component.spec.ts @@ -0,0 +1,24 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { FooterComponent } from './footer.component'; + +describe('FooterComponent', () => { + let component: FooterComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [FooterComponent], + }).compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(FooterComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/shared/components/footer/footer.component.ts b/src/app/shared/components/footer/footer.component.ts new file mode 100644 index 0000000..6e29889 --- /dev/null +++ b/src/app/shared/components/footer/footer.component.ts @@ -0,0 +1,12 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-footer', + templateUrl: './footer.component.html', + styleUrls: ['./footer.component.scss'], +}) +export class FooterComponent implements OnInit { + constructor() {} + + ngOnInit(): void {} +} diff --git a/src/app/shared/components/header/header.component.html b/src/app/shared/components/header/header.component.html new file mode 100644 index 0000000..6fd516b --- /dev/null +++ b/src/app/shared/components/header/header.component.html @@ -0,0 +1,16 @@ + + + + + + diff --git a/src/app/shared/components/header/header.component.scss b/src/app/shared/components/header/header.component.scss new file mode 100644 index 0000000..aa0e4be --- /dev/null +++ b/src/app/shared/components/header/header.component.scss @@ -0,0 +1,30 @@ +.header { + padding: 0 16px 0 50px; + + .spacer { + flex: 1 1 auto; + } + + .icon-button { + align-items: center; + background-color: transparent; + border: none; + color: white; + display: flex; + gap: 5px; + margin: 0 10px; + transition: all 0.5s ease; + + &:hover { + color: rgb(124, 196, 255); + cursor: pointer; + } + } + + .home-btn { + font-size: 16px; + margin: 0; + text-decoration: none; + text-transform: uppercase; + } +} diff --git a/src/app/shared/components/header/header.component.spec.ts b/src/app/shared/components/header/header.component.spec.ts new file mode 100644 index 0000000..4b96ac0 --- /dev/null +++ b/src/app/shared/components/header/header.component.spec.ts @@ -0,0 +1,24 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { HeaderComponent } from './header.component'; + +describe('HeaderComponent', () => { + let component: HeaderComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [HeaderComponent], + }).compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(HeaderComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/shared/components/header/header.component.ts b/src/app/shared/components/header/header.component.ts new file mode 100644 index 0000000..9edf6ce --- /dev/null +++ b/src/app/shared/components/header/header.component.ts @@ -0,0 +1,12 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-header', + templateUrl: './header.component.html', + styleUrls: ['./header.component.scss'], +}) +export class HeaderComponent implements OnInit { + constructor() {} + + ngOnInit(): void {} +} diff --git a/src/app/shared/components/logo/logo.component.html b/src/app/shared/components/logo/logo.component.html new file mode 100644 index 0000000..b5cf6b4 --- /dev/null +++ b/src/app/shared/components/logo/logo.component.html @@ -0,0 +1,4 @@ + diff --git a/src/app/shared/components/logo/logo.component.scss b/src/app/shared/components/logo/logo.component.scss new file mode 100644 index 0000000..750d48d --- /dev/null +++ b/src/app/shared/components/logo/logo.component.scss @@ -0,0 +1,22 @@ +.logo { + margin-right: 10px; + width: 40px; +} + +.logo-btn { + align-items: center; + background-color: transparent; + border: none; + color: white; + display: flex; + font-size: 18px; + font-weight: bold; + margin: 0 auto; + text-transform: uppercase; + transition: all 0.5s ease; + + &:hover { + color: rgb(124, 196, 255); + cursor: pointer; + } +} diff --git a/src/app/shared/components/logo/logo.component.spec.ts b/src/app/shared/components/logo/logo.component.spec.ts new file mode 100644 index 0000000..84e5811 --- /dev/null +++ b/src/app/shared/components/logo/logo.component.spec.ts @@ -0,0 +1,24 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { LogoComponent } from './logo.component'; + +describe('LogoComponent', () => { + let component: LogoComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [LogoComponent], + }).compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(LogoComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/shared/components/logo/logo.component.ts b/src/app/shared/components/logo/logo.component.ts new file mode 100644 index 0000000..9782ba5 --- /dev/null +++ b/src/app/shared/components/logo/logo.component.ts @@ -0,0 +1,18 @@ +import { Component, OnInit } from '@angular/core'; +import { Router } from '@angular/router'; +import { HOME } from '../../../core/constants/routes'; + +@Component({ + selector: 'app-logo', + templateUrl: './logo.component.html', + styleUrls: ['./logo.component.scss'], +}) +export class LogoComponent implements OnInit { + constructor(private router: Router) {} + + ngOnInit(): void {} + + openCoursesPage(): void { + this.router.navigate([HOME]); + } +} diff --git a/src/app/shared/pipes/time_pipe.ts b/src/app/shared/pipes/time_pipe.ts new file mode 100644 index 0000000..4293d64 --- /dev/null +++ b/src/app/shared/pipes/time_pipe.ts @@ -0,0 +1,12 @@ +import { Pipe, PipeTransform } from '@angular/core'; + +@Pipe({ + name: 'm2h', +}) +export class MinutesToHours implements PipeTransform { + transform(value: number): string { + let hours = Math.floor(value / 60); + let minutes = Math.floor(value % 60); + return hours + 'h ' + minutes + 'min'; + } +} diff --git a/src/app/shared/shared.module.ts b/src/app/shared/shared.module.ts new file mode 100644 index 0000000..35381cb --- /dev/null +++ b/src/app/shared/shared.module.ts @@ -0,0 +1,35 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { MatIconModule } from '@angular/material/icon'; +import { MatSlideToggleModule } from '@angular/material/slide-toggle'; +import { MatToolbarModule } from '@angular/material/toolbar'; +import { MatTooltipModule } from '@angular/material/tooltip'; + +import { AppRoutingModule } from '../app-routing.module'; +import { BreadcrumbsComponent } from './components/breadcrumbs/breadcrumbs.component'; +import { BreadcrumbModule } from 'angular-crumbs'; +import { FooterComponent } from './components/footer/footer.component'; +import { HeaderComponent } from './components/header/header.component'; +import { LogoComponent } from './components/logo/logo.component'; +import { MinutesToHours } from './pipes/time_pipe'; + +@NgModule({ + declarations: [ + BreadcrumbsComponent, + FooterComponent, + HeaderComponent, + LogoComponent, + MinutesToHours, + ], + imports: [ + AppRoutingModule, + BreadcrumbModule, + CommonModule, + MatIconModule, + MatSlideToggleModule, + MatToolbarModule, + MatTooltipModule, + ], + exports: [BreadcrumbsComponent, FooterComponent, HeaderComponent, MinutesToHours], +}) +export class SharedModule {} diff --git a/src/assets/images/player-icon.png b/src/assets/images/player-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..6a3549fe24047330ef7360dbc35c9b4f9a1d9023 GIT binary patch literal 72642 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 z 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 + - - - CoursesApp - - - - - - - + + + Video Course + + + + + + + + + + diff --git a/src/main.ts b/src/main.ts index a576b2e..207c6dd 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,5 +1,6 @@ import { enableProdMode } from '@angular/core'; import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; + import { AppModule } from './app/app.module'; import { environment } from './environments/environment'; diff --git a/src/polyfills.ts b/src/polyfills.ts index 8a120c3..e4555ed 100644 --- a/src/polyfills.ts +++ b/src/polyfills.ts @@ -8,8 +8,8 @@ * file. * * The current setup is for so-called "evergreen" browsers; the last versions of browsers that - * automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera), - * Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile. + * automatically update themselves. This includes recent versions of Safari, Chrome (including + * Opera), Edge on the desktop, and iOS and Chrome on mobile. * * Learn more in https://angular.io/guide/browser-support */ @@ -18,18 +18,6 @@ * BROWSER POLYFILLS */ -/** - * IE11 requires the following for NgClass support on SVG elements - */ -// import 'classlist.js'; // Run `npm install --save classlist.js`. - -/** - * Web Animations `@angular/platform-browser/animations` - * Only required if AnimationBuilder is used within the application and using IE/Edge or Safari. - * Standard animation support in Angular DOES NOT require any polyfills (as of Angular 6.0). - */ -// import 'web-animations-js'; // Run `npm install --save web-animations-js`. - /** * By default, zone.js will patch all possible macroTask and DomEvents * user can disable parts of macroTask/DomEvents patch by setting following flags diff --git a/src/styles.scss b/src/styles.scss index 90d4ee0..a32fefe 100644 --- a/src/styles.scss +++ b/src/styles.scss @@ -1 +1,20 @@ /* You can add global styles to this file, and also import other style files */ + +html, +body { + height: 100%; +} +body { + font-family: Roboto, "Helvetica Neue", sans-serif; + margin: 0; + min-width: 1200px; +} + +html, +body { + height: 100%; +} +body { + font-family: Roboto, "Helvetica Neue", sans-serif; + margin: 0; +} diff --git a/src/test.ts b/src/test.ts index fb39732..00025da 100644 --- a/src/test.ts +++ b/src/test.ts @@ -1,28 +1,25 @@ // This file is required by karma.conf.js and loads recursively all the .spec and framework files +import 'zone.js/testing'; import { getTestBed } from '@angular/core/testing'; import { - BrowserDynamicTestingModule, - platformBrowserDynamicTesting, + BrowserDynamicTestingModule, + platformBrowserDynamicTesting } from '@angular/platform-browser-dynamic/testing'; -import 'zone.js/testing'; declare const require: { - context( - path: string, - deep?: boolean, - filter?: RegExp, - ): { - keys(): string[]; - (id: string): T; - }; + context(path: string, deep?: boolean, filter?: RegExp): { + (id: string): T; + keys(): string[]; + }; }; // First, initialize the Angular testing environment. getTestBed().initTestEnvironment( - BrowserDynamicTestingModule, - platformBrowserDynamicTesting(), + BrowserDynamicTestingModule, + platformBrowserDynamicTesting(), ); + // Then we find all the tests. const context = require.context('./', true, /\.spec\.ts$/); // And load the modules.