From e0f76fc5ded4a885b5a2df376c8936d4fbfb4a99 Mon Sep 17 00:00:00 2001 From: Toast Date: Tue, 4 Feb 2025 10:50:33 +0100 Subject: [PATCH 01/11] Add navbar --- src/app/app.component.html | 15 +++++++++++++++ src/app/app.component.ts | 8 ++++++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/app/app.component.html b/src/app/app.component.html index caeea25..c8c2a5e 100644 --- a/src/app/app.component.html +++ b/src/app/app.component.html @@ -1,2 +1,17 @@ + diff --git a/src/app/app.component.ts b/src/app/app.component.ts index 42eed63..9302976 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -1,13 +1,17 @@ import { Component } from '@angular/core'; -import { RouterOutlet } from '@angular/router'; +import {RouterLink, RouterLinkActive, RouterOutlet} from '@angular/router'; import {ToastContainerComponent} from '../components/toast-container/toast-container/toast-container.component'; +import {NgbCollapse} from '@ng-bootstrap/ng-bootstrap'; +import {routes} from './app.routes'; @Component({ selector: 'app-root', - imports: [RouterOutlet, ToastContainerComponent], + imports: [RouterOutlet, ToastContainerComponent, NgbCollapse, RouterLink, RouterLinkActive], templateUrl: './app.component.html', styleUrl: './app.component.css' }) export class AppComponent { title = 'untitled'; + isMenuCollapsed: boolean = true; + protected readonly routes = routes; } From c1c49e91e59e555cc5761b18e76ff9f8a25446cb Mon Sep 17 00:00:00 2001 From: Toast Date: Tue, 4 Feb 2025 11:20:56 +0100 Subject: [PATCH 02/11] Add bootstrap-icons --- angular.json | 1 + package-lock.json | 17 +++++++++++++++++ package.json | 3 ++- 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/angular.json b/angular.json index ed3f93d..be39ad0 100644 --- a/angular.json +++ b/angular.json @@ -29,6 +29,7 @@ ], "styles": [ "node_modules/bootstrap/dist/css/bootstrap.min.css", + "node_modules/bootstrap-icons/font/bootstrap-icons.min.css", "src/styles.css" ], "scripts": [ diff --git a/package-lock.json b/package-lock.json index ed0b417..275ea54 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,6 +19,7 @@ "@ng-bootstrap/ng-bootstrap": "^18.0.0", "@popperjs/core": "^2.11.8", "bootstrap": "^5.3.3", + "bootstrap-icons": "^1.11.3", "rxjs": "~7.8.0", "tslib": "^2.3.0", "zone.js": "~0.15.0" @@ -5840,6 +5841,22 @@ "@popperjs/core": "^2.11.8" } }, + "node_modules/bootstrap-icons": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/bootstrap-icons/-/bootstrap-icons-1.11.3.tgz", + "integrity": "sha512-+3lpHrCw/it2/7lBL15VR0HEumaBss0+f/Lb6ZvHISn1mlK83jjFpooTLsMWbIjJMDjDjOExMsTxnXSIT4k4ww==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/twbs" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/bootstrap" + } + ], + "license": "MIT" + }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", diff --git a/package.json b/package.json index f072623..f4ab0c1 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,7 @@ "@ng-bootstrap/ng-bootstrap": "^18.0.0", "@popperjs/core": "^2.11.8", "bootstrap": "^5.3.3", + "bootstrap-icons": "^1.11.3", "rxjs": "~7.8.0", "tslib": "^2.3.0", "zone.js": "~0.15.0" @@ -39,4 +40,4 @@ "karma-jasmine-html-reporter": "~2.1.0", "typescript": "~5.7.2" } -} \ No newline at end of file +} From 4c91d8a87d0e3af67b0af1b64a1cbfd7a480662f Mon Sep 17 00:00:00 2001 From: Toast Date: Tue, 4 Feb 2025 11:30:01 +0100 Subject: [PATCH 03/11] Pages/shows: add delete and edit buttons --- src/pages/shows/shows.component.html | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/pages/shows/shows.component.html b/src/pages/shows/shows.component.html index 12fb737..9e94b84 100644 --- a/src/pages/shows/shows.component.html +++ b/src/pages/shows/shows.component.html @@ -6,6 +6,12 @@
{{ show.title }}

{{ show.date | date }}

+ +
} From 353fec9fe0e028a823a897b92f7c739fe105768f Mon Sep 17 00:00:00 2001 From: Toast Date: Tue, 4 Feb 2025 11:50:41 +0100 Subject: [PATCH 04/11] Components/create-modal: move submit button to footer --- .../create-modal/create-modal/create-modal.component.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/create-modal/create-modal/create-modal.component.html b/src/components/create-modal/create-modal/create-modal.component.html index 9527110..2855ece 100644 --- a/src/components/create-modal/create-modal/create-modal.component.html +++ b/src/components/create-modal/create-modal/create-modal.component.html @@ -24,8 +24,8 @@ -
- -
+ From f4c344633a7d0bd8ddbde37eae466eefcbd26b25 Mon Sep 17 00:00:00 2001 From: Toast Date: Tue, 4 Feb 2025 13:30:41 +0100 Subject: [PATCH 05/11] Components: add delete-modal --- .../delete-modal/delete-modal.component.css | 0 .../delete-modal/delete-modal.component.html | 25 +++++++++ .../delete-modal.component.spec.ts | 23 ++++++++ .../delete-modal/delete-modal.component.ts | 52 +++++++++++++++++++ 4 files changed, 100 insertions(+) create mode 100644 src/components/delete-modal/delete-modal.component.css create mode 100644 src/components/delete-modal/delete-modal.component.html create mode 100644 src/components/delete-modal/delete-modal.component.spec.ts create mode 100644 src/components/delete-modal/delete-modal.component.ts diff --git a/src/components/delete-modal/delete-modal.component.css b/src/components/delete-modal/delete-modal.component.css new file mode 100644 index 0000000..e69de29 diff --git a/src/components/delete-modal/delete-modal.component.html b/src/components/delete-modal/delete-modal.component.html new file mode 100644 index 0000000..1942fd6 --- /dev/null +++ b/src/components/delete-modal/delete-modal.component.html @@ -0,0 +1,25 @@ + + + diff --git a/src/components/delete-modal/delete-modal.component.spec.ts b/src/components/delete-modal/delete-modal.component.spec.ts new file mode 100644 index 0000000..7c29c0f --- /dev/null +++ b/src/components/delete-modal/delete-modal.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { DeleteModalComponent } from './delete-modal.component'; + +describe('DeleteModalComponent', () => { + let component: DeleteModalComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [DeleteModalComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(DeleteModalComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/components/delete-modal/delete-modal.component.ts b/src/components/delete-modal/delete-modal.component.ts new file mode 100644 index 0000000..759d264 --- /dev/null +++ b/src/components/delete-modal/delete-modal.component.ts @@ -0,0 +1,52 @@ +import {Component, inject} from '@angular/core'; +import {NgbActiveModal, NgbCollapse} from '@ng-bootstrap/ng-bootstrap'; +import { + FormControl, + FormGroup, + FormsModule, + ReactiveFormsModule, + Validators +} from '@angular/forms'; + +@Component({ + selector: 'app-delete-modal', + imports: [ + NgbCollapse, + FormsModule, + ReactiveFormsModule + ], + templateUrl: './delete-modal.component.html', + styleUrl: './delete-modal.component.css' +}) +export class DeleteModalComponent { + protected activeModal: NgbActiveModal = inject(NgbActiveModal) + showName: string = "" + formHidden: boolean = true; + buttonDisabled: boolean = false; + confirmationForm: FormGroup + + constructor() { + this.confirmationForm = new FormGroup({ + name: new FormControl("",Validators.required) + }) + } + + + deletePressed() { + if (this.formHidden) { + const regex = new RegExp(this.showName) + const control = new FormControl("", [Validators.required, Validators.pattern(regex)]) + this.confirmationForm.setControl("name", control) + this.formHidden = false; + this.buttonDisabled = true; + } else { + this.formSubmitted() + } + } + + formSubmitted() { + if (this.confirmationForm.valid) { + this.activeModal.close(true) + } + } +} From 37604c40a23ba60389d0393d98b1de401be1491c Mon Sep 17 00:00:00 2001 From: Toast Date: Tue, 4 Feb 2025 14:00:22 +0100 Subject: [PATCH 06/11] Components/create-modal: fix --- .../create-modal/create-modal.component.html | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/components/create-modal/create-modal/create-modal.component.html b/src/components/create-modal/create-modal/create-modal.component.html index 2855ece..69e43d5 100644 --- a/src/components/create-modal/create-modal/create-modal.component.html +++ b/src/components/create-modal/create-modal/create-modal.component.html @@ -2,8 +2,9 @@ - + + From e32f36d10f55afd43f7155e9c1acd027566e41a5 Mon Sep 17 00:00:00 2001 From: Toast Date: Tue, 4 Feb 2025 14:01:38 +0100 Subject: [PATCH 07/11] Pages/shows: delete leftover log statement --- src/pages/shows/shows.component.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/pages/shows/shows.component.ts b/src/pages/shows/shows.component.ts index 6d25a13..9150744 100644 --- a/src/pages/shows/shows.component.ts +++ b/src/pages/shows/shows.component.ts @@ -51,7 +51,6 @@ export class ShowsComponent { this.api.getShow(result).subscribe({ next: (response: ShowsApiIdResponse) => { - console.log(response.show) this.shows.push(response.show) }, error: (err: any) => { console.error(`Error: ${err}`) From bd10e7637965afd36c0fa5da7a8789d361812f0b Mon Sep 17 00:00:00 2001 From: Toast Date: Tue, 4 Feb 2025 14:13:56 +0100 Subject: [PATCH 08/11] Pages/shows: reformat --- src/pages/shows/shows.component.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/pages/shows/shows.component.ts b/src/pages/shows/shows.component.ts index 9150744..1359f61 100644 --- a/src/pages/shows/shows.component.ts +++ b/src/pages/shows/shows.component.ts @@ -54,7 +54,8 @@ export class ShowsComponent { this.shows.push(response.show) }, error: (err: any) => { console.error(`Error: ${err}`) - }, complete: () => {} + }, complete: () => { + } }) } ) From 1b199882791aaed4d5f75a194e7303fa45ff0179 Mon Sep 17 00:00:00 2001 From: Toast Date: Tue, 4 Feb 2025 14:14:44 +0100 Subject: [PATCH 09/11] Services/shows: add function to remove show --- src/interfaces/shows-api-deletion.ts | 4 ++++ src/services/shows/shows-api.service.ts | 5 +++++ 2 files changed, 9 insertions(+) create mode 100644 src/interfaces/shows-api-deletion.ts diff --git a/src/interfaces/shows-api-deletion.ts b/src/interfaces/shows-api-deletion.ts new file mode 100644 index 0000000..207da69 --- /dev/null +++ b/src/interfaces/shows-api-deletion.ts @@ -0,0 +1,4 @@ +export interface ShowsApiDeletion { + status: string + message: string +} diff --git a/src/services/shows/shows-api.service.ts b/src/services/shows/shows-api.service.ts index d2f0e2e..3ef5a39 100644 --- a/src/services/shows/shows-api.service.ts +++ b/src/services/shows/shows-api.service.ts @@ -4,6 +4,7 @@ import {Observable} from 'rxjs'; import {ShowsApiResponse} from '../../interfaces/shows-api-response'; import {ShowsApiCreation} from '../../interfaces/shows-api-creation'; import {ShowsApiIdResponse} from '../../interfaces/shows-api-id-response'; +import {ShowsApiDeletion} from '../../interfaces/shows-api-deletion'; @Injectable({ providedIn: 'root' @@ -29,4 +30,8 @@ export class ShowsApiService { sendShow(newShow: {}) { return this.http.post(this.showsEndpoint, newShow) } + + deleteShw(id: string): Observable { + return this.http.delete(this.showsEndpoint + "id/" + id) + } } From 4b10d3d05635977de1349728b76b01d09aa0f6f4 Mon Sep 17 00:00:00 2001 From: Toast Date: Tue, 4 Feb 2025 14:15:10 +0100 Subject: [PATCH 10/11] Pages/shows: implement delete button --- src/pages/shows/shows.component.html | 2 +- src/pages/shows/shows.component.ts | 29 +++++++++++++++++++++++++++- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/src/pages/shows/shows.component.html b/src/pages/shows/shows.component.html index 9e94b84..924e8b1 100644 --- a/src/pages/shows/shows.component.html +++ b/src/pages/shows/shows.component.html @@ -6,7 +6,7 @@
{{ show.title }}

{{ show.date | date }}

- diff --git a/src/app/app.component.spec.ts b/src/app/app.component.spec.ts index 0196821..d51da8f 100644 --- a/src/app/app.component.spec.ts +++ b/src/app/app.component.spec.ts @@ -1,5 +1,5 @@ -import { TestBed } from '@angular/core/testing'; -import { AppComponent } from './app.component'; +import {TestBed} from '@angular/core/testing'; +import {AppComponent} from './app.component'; describe('AppComponent', () => { beforeEach(async () => { diff --git a/src/app/app.component.ts b/src/app/app.component.ts index 9302976..2e9431a 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -1,4 +1,4 @@ -import { Component } from '@angular/core'; +import {Component} from '@angular/core'; import {RouterLink, RouterLinkActive, RouterOutlet} from '@angular/router'; import {ToastContainerComponent} from '../components/toast-container/toast-container/toast-container.component'; import {NgbCollapse} from '@ng-bootstrap/ng-bootstrap'; diff --git a/src/app/app.routes.ts b/src/app/app.routes.ts index e56aaee..e6930b8 100644 --- a/src/app/app.routes.ts +++ b/src/app/app.routes.ts @@ -1,4 +1,4 @@ -import { Routes } from '@angular/router'; +import {Routes} from '@angular/router'; import {ShowsComponent} from '../pages/shows/shows.component'; export const routes: Routes = [ diff --git a/src/components/create-modal/create-modal/create-modal.component.spec.ts b/src/components/create-modal/create-modal/create-modal.component.spec.ts index c52da61..66f91f8 100644 --- a/src/components/create-modal/create-modal/create-modal.component.spec.ts +++ b/src/components/create-modal/create-modal/create-modal.component.spec.ts @@ -1,6 +1,6 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; +import {ComponentFixture, TestBed} from '@angular/core/testing'; -import { CreateModalComponent } from './create-modal.component'; +import {CreateModalComponent} from './create-modal.component'; describe('CreateModalComponent', () => { let component: CreateModalComponent; @@ -10,7 +10,7 @@ describe('CreateModalComponent', () => { await TestBed.configureTestingModule({ imports: [CreateModalComponent] }) - .compileComponents(); + .compileComponents(); fixture = TestBed.createComponent(CreateModalComponent); component = fixture.componentInstance; diff --git a/src/components/delete-modal/delete-modal.component.html b/src/components/delete-modal/delete-modal.component.html index 1942fd6..2d87fad 100644 --- a/src/components/delete-modal/delete-modal.component.html +++ b/src/components/delete-modal/delete-modal.component.html @@ -1,25 +1,25 @@