diff --git a/src/app/app-routing.module.ts b/src/app/app-routing.module.ts index 65dc93b..63bd139 100644 --- a/src/app/app-routing.module.ts +++ b/src/app/app-routing.module.ts @@ -8,8 +8,8 @@ import { Pages } from './shared/models/pages.model'; const routes: Routes = [ { path: Pages.HOME, component: HomeComponent }, - { path: Pages.PROJECTS, component: ProjectsComponent }, - // { path: AppRoutes.CORE, loadChildren: () => import('./galler/gallery.module').then((m) => m.GalleryModule) }, // for future use + { path: Pages.PROJECTS, loadChildren: () => import('./projects/projects.module').then((m) => m.ProjectsModule) }, + // { path: AppRoutes.CORE, loadChildren: () => import('./galler/gallery.module').then((m) => m.GalleryModule) }, // for future use maybe { path: Pages.LINKS, component: LinksComponent }, { path: Pages.PET, component: PetComponent }, { path: '**', redirectTo: Pages.HOME, pathMatch: 'full' }]; diff --git a/src/app/app.module.ts b/src/app/app.module.ts index dfadf08..ab0f8ae 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -9,8 +9,8 @@ import { FooterComponent } from './footer/footer.component'; import { SharedModule } from './shared/shared.module'; import { HomeComponent } from './home/home.component'; import { LinksComponent } from './links/links.component'; -import { ProjectsComponent } from './projects/projects.component'; import { PetComponent } from './pet/pet.component'; +import { HttpClientModule } from '@angular/common/http'; @NgModule({ declarations: [ @@ -20,13 +20,13 @@ import { PetComponent } from './pet/pet.component'; FooterComponent, HomeComponent, LinksComponent, - ProjectsComponent, PetComponent ], imports: [ SharedModule, BrowserModule, - AppRoutingModule + AppRoutingModule, + HttpClientModule ], providers: [], bootstrap: [AppComponent] diff --git a/src/app/projects/project-card/project-card.component.html b/src/app/projects/project-card/project-card.component.html new file mode 100644 index 0000000..98ff4ff --- /dev/null +++ b/src/app/projects/project-card/project-card.component.html @@ -0,0 +1 @@ +

project-card works!

diff --git a/src/app/projects/project-card/project-card.component.scss b/src/app/projects/project-card/project-card.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/projects/project-card/project-card.component.spec.ts b/src/app/projects/project-card/project-card.component.spec.ts new file mode 100644 index 0000000..8815d7d --- /dev/null +++ b/src/app/projects/project-card/project-card.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ProjectCardComponent } from './project-card.component'; + +describe('ProjectCardComponent', () => { + let component: ProjectCardComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ ProjectCardComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(ProjectCardComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/projects/project-card/project-card.component.ts b/src/app/projects/project-card/project-card.component.ts new file mode 100644 index 0000000..06ce8d9 --- /dev/null +++ b/src/app/projects/project-card/project-card.component.ts @@ -0,0 +1,15 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-project-card', + templateUrl: './project-card.component.html', + styleUrls: ['./project-card.component.scss'] +}) +export class ProjectCardComponent implements OnInit { + + constructor() { } + + ngOnInit(): void { + } + +} diff --git a/src/app/projects/project/project.component.html b/src/app/projects/project/project.component.html new file mode 100644 index 0000000..8ea00ea --- /dev/null +++ b/src/app/projects/project/project.component.html @@ -0,0 +1 @@ +

project works!

diff --git a/src/app/projects/project/project.component.scss b/src/app/projects/project/project.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/projects/project/project.component.spec.ts b/src/app/projects/project/project.component.spec.ts new file mode 100644 index 0000000..e0f0d74 --- /dev/null +++ b/src/app/projects/project/project.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ProjectComponent } from './project.component'; + +describe('ProjectComponent', () => { + let component: ProjectComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ ProjectComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(ProjectComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/projects/project/project.component.ts b/src/app/projects/project/project.component.ts new file mode 100644 index 0000000..e4e21ec --- /dev/null +++ b/src/app/projects/project/project.component.ts @@ -0,0 +1,15 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-project', + templateUrl: './project.component.html', + styleUrls: ['./project.component.scss'] +}) +export class ProjectComponent implements OnInit { + + constructor() { } + + ngOnInit(): void { + } + +} diff --git a/src/app/projects/projects-routing.module.ts b/src/app/projects/projects-routing.module.ts new file mode 100644 index 0000000..74cf277 --- /dev/null +++ b/src/app/projects/projects-routing.module.ts @@ -0,0 +1,21 @@ +import { NgModule } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; +import { ProjectComponent } from './project/project.component'; +import { ProjectsComponent } from './projects.component'; + +const routes: Routes = [ + { + path: '', + component: ProjectsComponent + }, + { + path: ':id', + component: ProjectComponent + } +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) +export class ProjectsRoutingModule {} diff --git a/src/app/projects/projects.component.html b/src/app/projects/projects.component.html index 885859a..b8607a9 100644 --- a/src/app/projects/projects.component.html +++ b/src/app/projects/projects.component.html @@ -1 +1,5 @@ -

projects works!

+

Projects on git

+

These are my projects as can be found on my gitlab. Mainly my programming projects that are quality enough for me to be happy for the world to see them. There are more in the works but they are currently private.

+ +

Projects of a personal nature

+

This is (will be) a summary of my personal projects be they my homelab, general electronics projects, or anything else.

\ No newline at end of file diff --git a/src/app/projects/projects.component.ts b/src/app/projects/projects.component.ts index 1172d9c..17af914 100644 --- a/src/app/projects/projects.component.ts +++ b/src/app/projects/projects.component.ts @@ -1,18 +1,37 @@ -import { Component, OnInit } from '@angular/core'; +import { Component, OnDestroy, OnInit } from '@angular/core'; +import { Subject } from 'rxjs/internal/Subject'; +import { takeUntil } from 'rxjs/operators'; import { NavService } from '../nav/nav.service'; import { Pages } from '../shared/models/pages.model'; +import { Project } from '../shared/models/project.model'; +import { ProjectsService } from './projects.service'; @Component({ selector: 'app-projects', templateUrl: './projects.component.html', styleUrls: ['./projects.component.scss'] }) -export class ProjectsComponent implements OnInit { +export class ProjectsComponent implements OnInit, OnDestroy { + _unsubscribe$: Subject = new Subject(); - constructor(private navService:NavService) { } + uncategorizedProjects: Array; + + constructor(private navService: NavService, private projectsService: ProjectsService) { } ngOnInit(): void { this.navService.setPageTitle(Pages.PROJECTS); + + this.projectsService.allProjects$ + .pipe(takeUntil(this._unsubscribe$)) + .subscribe((result: Project[]) => { + this.uncategorizedProjects = result; + }); + this.projectsService.getInvoicesToApprove(); + } + + ngOnDestroy(): void { + this._unsubscribe$.next(false); + this._unsubscribe$.complete(); } } diff --git a/src/app/projects/projects.module.ts b/src/app/projects/projects.module.ts new file mode 100644 index 0000000..bd6f109 --- /dev/null +++ b/src/app/projects/projects.module.ts @@ -0,0 +1,16 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { ProjectCardComponent } from './project-card/project-card.component'; +import { ProjectComponent } from './project/project.component'; +import { ProjectsComponent } from './projects.component'; +import { ProjectsRoutingModule } from './projects-routing.module'; + +@NgModule({ + declarations: [ProjectsComponent, ProjectCardComponent, ProjectComponent], + imports: [ + CommonModule, + ProjectsRoutingModule + ], + providers: [] +}) +export class ProjectsModule { } diff --git a/src/app/projects/projects.service.spec.ts b/src/app/projects/projects.service.spec.ts new file mode 100644 index 0000000..96c6dcc --- /dev/null +++ b/src/app/projects/projects.service.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; + +import { ProjectsService } from './projects.service'; + +describe('ProjectsService', () => { + let service: ProjectsService; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(ProjectsService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/src/app/projects/projects.service.ts b/src/app/projects/projects.service.ts new file mode 100644 index 0000000..384962d --- /dev/null +++ b/src/app/projects/projects.service.ts @@ -0,0 +1,60 @@ +import { HttpClient, HttpHeaders } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { BehaviorSubject } from 'rxjs'; +import { Project } from '../shared/models/project.model'; + +@Injectable({ + providedIn: 'root' +}) +export class ProjectsService { + + private _allProjects = new BehaviorSubject>([]); + readonly allProjects$ = this._allProjects.asObservable(); + + private set allProjects(projects: Array) { + this._allProjects.next(projects); + } + private get allProjects(): Array { + return this._allProjects.getValue(); + } + + private _apiErrored = new BehaviorSubject(false); + readonly apiErrored$ = this._apiErrored.asObservable(); + + private set apiErrored(errored: boolean) { + this._apiErrored.next(errored); + } + private get apiErrored(): boolean { + return this._apiErrored.getValue(); + } + + /** + * I am actively avoiding any kind of environment management, this is a very basic site and currently this is the only api call. + */ + + private PROJECT_API_URL = "https://cms.inkletblot.com/" + + constructor(private http: HttpClient) { } + + httpOptions = { + headers: new HttpHeaders({ + 'Content-Type': 'application/json' + }) + }; + + getInvoicesToApprove(): void { + this.http + .get(`${this.PROJECT_API_URL}`, this.httpOptions) + .subscribe( + (response: Project[]) => { + if (response) { + this.allProjects = response; + // filter out different categories here currently only one + } + }, + (error) => { + this.apiErrored = true; + } + ); + } +} diff --git a/src/app/shared/models/project.model.ts b/src/app/shared/models/project.model.ts new file mode 100644 index 0000000..f5b9aab --- /dev/null +++ b/src/app/shared/models/project.model.ts @@ -0,0 +1,6 @@ +export interface Project { + title: string, + description: string, + ct: string, + body: string +} \ No newline at end of file