diff --git a/kontor-angular/public/cross.png b/kontor-angular/public/cross.png
new file mode 100644
index 0000000..6b9fa6d
Binary files /dev/null and b/kontor-angular/public/cross.png differ
diff --git a/kontor-angular/public/logo.png b/kontor-angular/public/logo.png
new file mode 100644
index 0000000..7499bdf
Binary files /dev/null and b/kontor-angular/public/logo.png differ
diff --git a/kontor-angular/public/tick.png b/kontor-angular/public/tick.png
new file mode 100644
index 0000000..2414885
Binary files /dev/null and b/kontor-angular/public/tick.png differ
diff --git a/kontor-angular/src/app/app.component.html b/kontor-angular/src/app/app.component.html
index def9b90..604f43b 100644
--- a/kontor-angular/src/app/app.component.html
+++ b/kontor-angular/src/app/app.component.html
@@ -1,5 +1,6 @@
+
diff --git a/kontor-angular/src/app/app.component.ts b/kontor-angular/src/app/app.component.ts
index f8f2137..d4b268e 100644
--- a/kontor-angular/src/app/app.component.ts
+++ b/kontor-angular/src/app/app.component.ts
@@ -2,10 +2,11 @@ import { Component } from '@angular/core';
import { RouterOutlet } from '@angular/router';
import { KontorHeaderComponent } from "./kontor/header/header.component";
import { KontorFooterComponent } from './kontor/footer/footer.component';
+import { NavigationComponent } from "./kontor/navigation/navigation.component";
@Component({
selector: 'app-root',
- imports: [RouterOutlet, KontorHeaderComponent, KontorFooterComponent],
+ imports: [RouterOutlet, KontorHeaderComponent, KontorFooterComponent, NavigationComponent],
templateUrl: './app.component.html',
styleUrl: './app.component.css'
})
diff --git a/kontor-angular/src/app/app.routes.ts b/kontor-angular/src/app/app.routes.ts
index 7740668..07d6491 100644
--- a/kontor-angular/src/app/app.routes.ts
+++ b/kontor-angular/src/app/app.routes.ts
@@ -1,52 +1,26 @@
import { Routes } from '@angular/router';
import { KontorComponent } from './kontor/kontor.component';
import { Login } from './common/login/login';
-import { ComicOverviewComponent } from './comic/comic-overview/comic-overview.component';
-import { MediaOverviewComponent } from './media/media-overview/media-overview.component';
-import { ArtistListComponent } from './comic/artist/artist-list/artist-list.component';
-import { ComicListComponent } from './comic/comic/comic-list/comic-list.component';
-import { MediaFileListComponent } from './media/media-file/media-file-list/media-file-list.component';
-import { MediaActorListComponent } from './media/media-actor/media-actor-list/media-actor-list.component';
-import { MediaVideoListComponent } from './media/media-video/media-video-list/media-video-list.component';
-import { PublisherListComponent } from './comic/publisher/publisher-list/publisher-list.component';
-import { TyscMenuComponent } from './tysc/tysc-menu/tysc-menu.component';
-import { TeamListComponent } from './tysc/team/team-list/team-list.component';
-import { VendorListComponent } from './tysc/vendor/vendor-list/vendor-list.component';
-import { CardsetListComponent } from './tysc/cardset/cardset-list/cardset-list.component';
-import { PositionListComponent } from './tysc/position/position-list/position-list.component';
-import { PlayerListComponent } from './tysc/player/player-list/player-list.component';
-import { SportListComponent } from './tysc/sport/sport-list/sport-list.component';
+import { ComicSectionComponent } from './kontor/comic/comic-section/comic-section.component';
+import { comicRoutes } from './kontor/comic/comic-section/comic-section.routes';
+import { TyscSectionComponent } from './kontor/tysc/tysc-section/tysc-section.component';
+import { tyscRoutes } from './kontor/tysc/tysc-section/tysc-section.routes';
+import { MediaSectionComponent } from './kontor/media/media-section/media-section.component';
+import { mediaRoutes } from './kontor/media/media-section/media-section.routes';
export const routes: Routes = [
{ path: '', component: KontorComponent, },
{ path: 'login', component: Login, },
{
- path: 'comic', component: ComicOverviewComponent,
- children: [
- { path: '', component: ComicListComponent},
- { path: 'comics', component: ComicListComponent},
- { path: 'publisher', component: PublisherListComponent},
- { path: 'artist', component: ArtistListComponent},
- ],
+ path: 'comic', component: ComicSectionComponent,
+ children: comicRoutes,
},
{
- path: 'tysc', component: TyscMenuComponent,
- children: [
- { path: '', component: SportListComponent},
- { path: 'team', component: TeamListComponent},
- { path: 'player', component: PlayerListComponent},
- { path: 'position', component: PositionListComponent},
- { path: 'cardset', component: CardsetListComponent},
- { path: 'vendor', component: VendorListComponent},
- ],
+ path: 'tysc', component: TyscSectionComponent,
+ children: tyscRoutes,
},
{
- path: 'media', component: MediaOverviewComponent,
- children: [
- { path: '', component: MediaFileListComponent},
- { path: 'mediafiles', component: MediaFileListComponent},
- { path: 'mediaactors', component: MediaActorListComponent},
- { path: 'mediavideos', component: MediaVideoListComponent},
- ],
+ path: 'media', component: MediaSectionComponent,
+ children: mediaRoutes,
},
];
diff --git a/kontor-angular/src/app/comic/artist/artist-detail/artist-detail.component.html b/kontor-angular/src/app/comic/artist/artist-detail/artist-detail.component.html
deleted file mode 100644
index 8c949f3..0000000
--- a/kontor-angular/src/app/comic/artist/artist-detail/artist-detail.component.html
+++ /dev/null
@@ -1,5 +0,0 @@
-
diff --git a/kontor-angular/src/app/comic/artist/artist-detail/artist-detail.component.ts b/kontor-angular/src/app/comic/artist/artist-detail/artist-detail.component.ts
deleted file mode 100644
index 5bf9f95..0000000
--- a/kontor-angular/src/app/comic/artist/artist-detail/artist-detail.component.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-import { Component, input, signal } from '@angular/core';
-import { Artist } from '../artist.model';
-import { RouterLink, RouterLinkActive } from '@angular/router';
-
-@Component({
- selector: 'app-artist-detail',
- imports: [RouterLink, RouterLinkActive],
- templateUrl: './artist-detail.component.html',
- styleUrl: './artist-detail.component.css'
-})
-export class ArtistDetailComponent {
- artist = input.required
();
-
-}
diff --git a/kontor-angular/src/app/comic/artist/artist.model.ts b/kontor-angular/src/app/comic/artist/artist.model.ts
deleted file mode 100644
index 8529fa7..0000000
--- a/kontor-angular/src/app/comic/artist/artist.model.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-export interface Artist {
- id: string;
- name: string;
-}
diff --git a/kontor-angular/src/app/comic/comic-overview/comic-overview.component.html b/kontor-angular/src/app/comic/comic-overview/comic-overview.component.html
deleted file mode 100644
index 54c8b3c..0000000
--- a/kontor-angular/src/app/comic/comic-overview/comic-overview.component.html
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
diff --git a/kontor-angular/src/app/comic/comic-overview/comic-overview.component.ts b/kontor-angular/src/app/comic/comic-overview/comic-overview.component.ts
deleted file mode 100644
index 32c15f4..0000000
--- a/kontor-angular/src/app/comic/comic-overview/comic-overview.component.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-import { Component } from '@angular/core';
-import { RouterLink, RouterOutlet, RouterLinkActive } from '@angular/router';
-
-@Component({
- selector: 'app-comic-overview',
- imports: [RouterLink, RouterOutlet, RouterLinkActive],
- templateUrl: './comic-overview.component.html',
- styleUrl: './comic-overview.component.css'
-})
-export class ComicOverviewComponent {
-
-}
diff --git a/kontor-angular/src/app/comic/comic/comic-list/comic-list.component.html b/kontor-angular/src/app/comic/comic/comic-list/comic-list.component.html
deleted file mode 100644
index 5beb054..0000000
--- a/kontor-angular/src/app/comic/comic/comic-list/comic-list.component.html
+++ /dev/null
@@ -1 +0,0 @@
-comic-list works!
diff --git a/kontor-angular/src/app/comic/comic/comic-list/comic-list.component.ts b/kontor-angular/src/app/comic/comic/comic-list/comic-list.component.ts
deleted file mode 100644
index a09eb12..0000000
--- a/kontor-angular/src/app/comic/comic/comic-list/comic-list.component.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import { Component } from '@angular/core';
-
-@Component({
- selector: 'app-comic-list',
- imports: [],
- templateUrl: './comic-list.component.html',
- styleUrl: './comic-list.component.css'
-})
-export class ComicListComponent {
-
-}
diff --git a/kontor-angular/src/app/comic/publisher/publisher-list/publisher-list.component.html b/kontor-angular/src/app/comic/publisher/publisher-list/publisher-list.component.html
deleted file mode 100644
index d533325..0000000
--- a/kontor-angular/src/app/comic/publisher/publisher-list/publisher-list.component.html
+++ /dev/null
@@ -1 +0,0 @@
-publisher-list works!
diff --git a/kontor-angular/src/app/comic/publisher/publisher-list/publisher-list.component.ts b/kontor-angular/src/app/comic/publisher/publisher-list/publisher-list.component.ts
deleted file mode 100644
index 43daa01..0000000
--- a/kontor-angular/src/app/comic/publisher/publisher-list/publisher-list.component.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import { Component } from '@angular/core';
-
-@Component({
- selector: 'app-publisher-list',
- imports: [],
- templateUrl: './publisher-list.component.html',
- styleUrl: './publisher-list.component.css'
-})
-export class PublisherListComponent {
-
-}
diff --git a/kontor-angular/src/app/comic/artist/artist-detail/artist-detail.component.css b/kontor-angular/src/app/kontor/comic/comic-artist/comic-artist.component.css
similarity index 100%
rename from kontor-angular/src/app/comic/artist/artist-detail/artist-detail.component.css
rename to kontor-angular/src/app/kontor/comic/comic-artist/comic-artist.component.css
diff --git a/kontor-angular/src/app/kontor/comic/comic-artist/comic-artist.component.html b/kontor-angular/src/app/kontor/comic/comic-artist/comic-artist.component.html
new file mode 100644
index 0000000..b702b13
--- /dev/null
+++ b/kontor-angular/src/app/kontor/comic/comic-artist/comic-artist.component.html
@@ -0,0 +1,5 @@
+
diff --git a/kontor-angular/src/app/tysc/cardset/cardset-list/cardset-list.component.spec.ts b/kontor-angular/src/app/kontor/comic/comic-artist/comic-artist.component.spec.ts
similarity index 52%
rename from kontor-angular/src/app/tysc/cardset/cardset-list/cardset-list.component.spec.ts
rename to kontor-angular/src/app/kontor/comic/comic-artist/comic-artist.component.spec.ts
index c957e68..19737d5 100644
--- a/kontor-angular/src/app/tysc/cardset/cardset-list/cardset-list.component.spec.ts
+++ b/kontor-angular/src/app/kontor/comic/comic-artist/comic-artist.component.spec.ts
@@ -1,18 +1,18 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
-import { CardsetListComponent } from './cardset-list.component';
+import { ComicArtistComponent } from './comic-artist.component';
-describe('CardsetListComponent', () => {
- let component: CardsetListComponent;
- let fixture: ComponentFixture;
+describe('ComicArtistComponent', () => {
+ let component: ComicArtistComponent;
+ let fixture: ComponentFixture;
beforeEach(async () => {
await TestBed.configureTestingModule({
- imports: [CardsetListComponent]
+ imports: [ComicArtistComponent]
})
.compileComponents();
- fixture = TestBed.createComponent(CardsetListComponent);
+ fixture = TestBed.createComponent(ComicArtistComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
diff --git a/kontor-angular/src/app/kontor/comic/comic-artist/comic-artist.component.ts b/kontor-angular/src/app/kontor/comic/comic-artist/comic-artist.component.ts
new file mode 100644
index 0000000..99a7938
--- /dev/null
+++ b/kontor-angular/src/app/kontor/comic/comic-artist/comic-artist.component.ts
@@ -0,0 +1,13 @@
+import { Component, input } from '@angular/core';
+import { Artist } from '../comic.model';
+import { RouterLink, RouterLinkActive } from '@angular/router';
+
+@Component({
+ selector: 'app-comic-artist',
+ imports: [RouterLink, RouterLinkActive],
+ templateUrl: './comic-artist.component.html',
+ styleUrl: './comic-artist.component.css'
+})
+export class ComicArtistComponent {
+ artist = input.required();
+}
diff --git a/kontor-angular/src/app/comic/artist/artist-list/artist-list.component.css b/kontor-angular/src/app/kontor/comic/comic-artists-list/comic-artists-list.component.css
similarity index 100%
rename from kontor-angular/src/app/comic/artist/artist-list/artist-list.component.css
rename to kontor-angular/src/app/kontor/comic/comic-artists-list/comic-artists-list.component.css
diff --git a/kontor-angular/src/app/comic/artist/artist-list/artist-list.component.html b/kontor-angular/src/app/kontor/comic/comic-artists-list/comic-artists-list.component.html
similarity index 64%
rename from kontor-angular/src/app/comic/artist/artist-list/artist-list.component.html
rename to kontor-angular/src/app/kontor/comic/comic-artists-list/comic-artists-list.component.html
index 984357c..1bbc4f3 100644
--- a/kontor-angular/src/app/comic/artist/artist-list/artist-list.component.html
+++ b/kontor-angular/src/app/kontor/comic/comic-artists-list/comic-artists-list.component.html
@@ -1,7 +1,7 @@
@for (artist of artists(); track artist.id) {
-
-
+
}
diff --git a/kontor-angular/src/app/kontor/comic/comic-artists-list/comic-artists-list.component.spec.ts b/kontor-angular/src/app/kontor/comic/comic-artists-list/comic-artists-list.component.spec.ts
new file mode 100644
index 0000000..dd0c4d3
--- /dev/null
+++ b/kontor-angular/src/app/kontor/comic/comic-artists-list/comic-artists-list.component.spec.ts
@@ -0,0 +1,23 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { ComicArtistsListComponent } from './comic-artists-list.component';
+
+describe('ComicArtistsListComponent', () => {
+ let component: ComicArtistsListComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async () => {
+ await TestBed.configureTestingModule({
+ imports: [ComicArtistsListComponent]
+ })
+ .compileComponents();
+
+ fixture = TestBed.createComponent(ComicArtistsListComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/kontor-angular/src/app/comic/artist/artist-list/artist-list.component.ts b/kontor-angular/src/app/kontor/comic/comic-artists-list/comic-artists-list.component.ts
similarity index 59%
rename from kontor-angular/src/app/comic/artist/artist-list/artist-list.component.ts
rename to kontor-angular/src/app/kontor/comic/comic-artists-list/comic-artists-list.component.ts
index 441b24a..44e22cc 100644
--- a/kontor-angular/src/app/comic/artist/artist-list/artist-list.component.ts
+++ b/kontor-angular/src/app/kontor/comic/comic-artists-list/comic-artists-list.component.ts
@@ -1,16 +1,17 @@
import { Component, DestroyRef, inject, OnInit, signal } from '@angular/core';
-import { Artist } from '../artist.model';
-import { ArtistService } from '../artist.service';
-import { ArtistDetailComponent } from "../artist-detail/artist-detail.component";
+import { Artist } from '../comic.model';
+import { ComicArtistComponent } from '../comic-artist/comic-artist.component';
+import { ArtistService } from '../comic-artists/artist.service';
@Component({
- selector: 'app-artist-list',
- imports: [ArtistDetailComponent],
- templateUrl: './artist-list.component.html',
- styleUrl: './artist-list.component.css'
+ selector: 'app-comic-artists-list',
+ imports: [ComicArtistComponent],
+ templateUrl: './comic-artists-list.component.html',
+ styleUrl: './comic-artists-list.component.css'
})
-export class ArtistListComponent implements OnInit {
- artists = signal(undefined);
+export class ComicArtistsListComponent implements OnInit {
+
+ artists = signal([]);
isFetching = signal(false);
error = signal('');
private artistService = inject(ArtistService);
@@ -34,5 +35,4 @@ export class ArtistListComponent implements OnInit {
subscription.unsubscribe();
});
}
-
}
diff --git a/kontor-angular/src/app/comic/artist/artist.service.ts b/kontor-angular/src/app/kontor/comic/comic-artists/artist.service.ts
similarity index 55%
rename from kontor-angular/src/app/comic/artist/artist.service.ts
rename to kontor-angular/src/app/kontor/comic/comic-artists/artist.service.ts
index 6852eba..a755f91 100644
--- a/kontor-angular/src/app/comic/artist/artist.service.ts
+++ b/kontor-angular/src/app/kontor/comic/comic-artists/artist.service.ts
@@ -1,8 +1,8 @@
import { inject, Injectable, signal } from "@angular/core";
-import { ErrorService } from "../../shared/error.service";
import { HttpClient } from "@angular/common/http";
-import { Artist } from "./artist.model";
import { catchError, map, throwError } from "rxjs";
+import { ErrorService } from "../../../shared/error.service";
+import { Artist, ArtistDetails } from "../comic.model";
@Injectable({
providedIn: 'root',
@@ -18,6 +18,10 @@ export class ArtistService {
return this.fetchArtists('http://127.0.0.1:8800/api/comics/artists', 'Someting went wrong fetching artists. Please try again later-');
}
+ loadArtistDetails(artistId: string | null) {
+ return this.fetchArtistDetails('http://127.0.0.1:8800/api/comics/artists/' + artistId, 'Someting went wrong fetching comic artists. Please try again later.');
+ }
+
private fetchArtists(url: string, errorMessage: string) {
return this.httpClient.get(url).pipe(
map((resData) => resData),
@@ -27,4 +31,17 @@ export class ArtistService {
})
);
}
+
+ private fetchArtistDetails(url: string, errorMessage: string) {
+ return this.httpClient.get(url).pipe(
+ map((resData) => {
+ console.log(resData);
+ return resData;
+ }),
+ catchError((error) => {
+ console.log(error);
+ return throwError(() => new Error(errorMessage));
+ })
+ );
+ }
}
diff --git a/kontor-angular/src/app/kontor/comic/comic-artists/comic-artists.component.css b/kontor-angular/src/app/kontor/comic/comic-artists/comic-artists.component.css
new file mode 100644
index 0000000..4008df7
--- /dev/null
+++ b/kontor-angular/src/app/kontor/comic/comic-artists/comic-artists.component.css
@@ -0,0 +1,16 @@
+.grid-container {
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ grid-gap: 20px;
+}
+section {
+ margin-left: 10px;
+ padding: 10px;
+ background-color: darkgrey;
+ border-radius: 10px;
+ margin-bottom: 10px;
+}
+article {
+ margin-left: 10px;
+ padding: 5px;
+}
diff --git a/kontor-angular/src/app/kontor/comic/comic-artists/comic-artists.component.html b/kontor-angular/src/app/kontor/comic/comic-artists/comic-artists.component.html
new file mode 100644
index 0000000..af4861d
--- /dev/null
+++ b/kontor-angular/src/app/kontor/comic/comic-artists/comic-artists.component.html
@@ -0,0 +1,35 @@
+
+
+
+ @if (artist()) {
+
+
+ @for (work of artist().comic_works; track work.worktype.id) {
+
+ @for (comic of work.comics; track comic.id) {
+
+
+
+ }
+ }
+
+
+ @for (work of artist().issue_works; track work.worktype.id) {
+
+ @for (issue of work.issues; track issue.id) {
+
+
+
+ }
+ }
+
+ } @else {
+
Artist Details
+ }
+
+
diff --git a/kontor-angular/src/app/tysc/position/position-list/position-list.component.spec.ts b/kontor-angular/src/app/kontor/comic/comic-artists/comic-artists.component.spec.ts
similarity index 52%
rename from kontor-angular/src/app/tysc/position/position-list/position-list.component.spec.ts
rename to kontor-angular/src/app/kontor/comic/comic-artists/comic-artists.component.spec.ts
index 9034de6..99f3089 100644
--- a/kontor-angular/src/app/tysc/position/position-list/position-list.component.spec.ts
+++ b/kontor-angular/src/app/kontor/comic/comic-artists/comic-artists.component.spec.ts
@@ -1,18 +1,18 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
-import { PositionListComponent } from './position-list.component';
+import { ComicArtistsComponent } from './comic-artists.component';
-describe('PositionListComponent', () => {
- let component: PositionListComponent;
- let fixture: ComponentFixture;
+describe('ComicArtistsComponent', () => {
+ let component: ComicArtistsComponent;
+ let fixture: ComponentFixture;
beforeEach(async () => {
await TestBed.configureTestingModule({
- imports: [PositionListComponent]
+ imports: [ComicArtistsComponent]
})
.compileComponents();
- fixture = TestBed.createComponent(PositionListComponent);
+ fixture = TestBed.createComponent(ComicArtistsComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
diff --git a/kontor-angular/src/app/kontor/comic/comic-artists/comic-artists.component.ts b/kontor-angular/src/app/kontor/comic/comic-artists/comic-artists.component.ts
new file mode 100644
index 0000000..9542c18
--- /dev/null
+++ b/kontor-angular/src/app/kontor/comic/comic-artists/comic-artists.component.ts
@@ -0,0 +1,25 @@
+import { Component, inject, input } from '@angular/core';
+import { ComicArtistsListComponent } from '../comic-artists-list/comic-artists-list.component';
+import { ActivatedRouteSnapshot, ResolveFn, RouterStateSnapshot } from '@angular/router';
+import { ArtistService } from './artist.service';
+import { ComicComicComponent } from "../comic-comic/comic-comic.component";
+import { ComicWorktypeComponent } from "../comic-worktype/comic-worktype.component";
+import { ArtistDetails } from '../comic.model';
+
+@Component({
+ selector: 'app-comic-artists',
+ imports: [ComicArtistsListComponent, ComicComicComponent, ComicWorktypeComponent],
+ templateUrl: './comic-artists.component.html',
+ styleUrl: './comic-artists.component.css'
+})
+export class ComicArtistsComponent {
+ artist = input.required();
+}
+
+export const artistResolver: ResolveFn = (route: ActivatedRouteSnapshot, state: RouterStateSnapshot) => {
+ const artistService = inject(ArtistService);
+ const artistId = route.paramMap.get('artistId');
+ const artistDetails = artistService.loadArtistDetails(artistId);
+ console.log(artistDetails);
+ return artistDetails;
+};
diff --git a/kontor-angular/src/app/comic/comic-overview/comic-overview.component.css b/kontor-angular/src/app/kontor/comic/comic-comic/comic-comic.component.css
similarity index 100%
rename from kontor-angular/src/app/comic/comic-overview/comic-overview.component.css
rename to kontor-angular/src/app/kontor/comic/comic-comic/comic-comic.component.css
diff --git a/kontor-angular/src/app/kontor/comic/comic-comic/comic-comic.component.html b/kontor-angular/src/app/kontor/comic/comic-comic/comic-comic.component.html
new file mode 100644
index 0000000..ac9bb02
--- /dev/null
+++ b/kontor-angular/src/app/kontor/comic/comic-comic/comic-comic.component.html
@@ -0,0 +1,5 @@
+
diff --git a/kontor-angular/src/app/comic/artist/artist-list/artist-list.component.spec.ts b/kontor-angular/src/app/kontor/comic/comic-comic/comic-comic.component.spec.ts
similarity index 52%
rename from kontor-angular/src/app/comic/artist/artist-list/artist-list.component.spec.ts
rename to kontor-angular/src/app/kontor/comic/comic-comic/comic-comic.component.spec.ts
index 4a58cbb..c390c8d 100644
--- a/kontor-angular/src/app/comic/artist/artist-list/artist-list.component.spec.ts
+++ b/kontor-angular/src/app/kontor/comic/comic-comic/comic-comic.component.spec.ts
@@ -1,18 +1,18 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
-import { ArtistListComponent } from './artist-list.component';
+import { ComicComicComponent } from './comic-comic.component';
-describe('ArtistListComponent', () => {
- let component: ArtistListComponent;
- let fixture: ComponentFixture;
+describe('ComicComicComponent', () => {
+ let component: ComicComicComponent;
+ let fixture: ComponentFixture;
beforeEach(async () => {
await TestBed.configureTestingModule({
- imports: [ArtistListComponent]
+ imports: [ComicComicComponent]
})
.compileComponents();
- fixture = TestBed.createComponent(ArtistListComponent);
+ fixture = TestBed.createComponent(ComicComicComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
diff --git a/kontor-angular/src/app/kontor/comic/comic-comic/comic-comic.component.ts b/kontor-angular/src/app/kontor/comic/comic-comic/comic-comic.component.ts
new file mode 100644
index 0000000..ad24f26
--- /dev/null
+++ b/kontor-angular/src/app/kontor/comic/comic-comic/comic-comic.component.ts
@@ -0,0 +1,13 @@
+import { Component, input } from '@angular/core';
+import { Comic } from '../comic.model';
+import { RouterLink, RouterLinkActive } from '@angular/router';
+
+@Component({
+ selector: 'app-comic-comic',
+ imports: [RouterLink, RouterLinkActive],
+ templateUrl: './comic-comic.component.html',
+ styleUrl: './comic-comic.component.css'
+})
+export class ComicComicComponent {
+ comic = input.required();
+}
diff --git a/kontor-angular/src/app/kontor/comic/comic-comics-list/comic-comics-list.component.css b/kontor-angular/src/app/kontor/comic/comic-comics-list/comic-comics-list.component.css
new file mode 100644
index 0000000..d95c44d
--- /dev/null
+++ b/kontor-angular/src/app/kontor/comic/comic-comics-list/comic-comics-list.component.css
@@ -0,0 +1,14 @@
+ul {
+ list-style: none;
+ margin: 0;
+ padding: 0;
+ display: flex;
+ gap: 0.5rem;
+ overflow: auto;
+}
+
+@media (min-width: 768px) {
+ ul {
+ flex-direction: column;
+ }
+}
diff --git a/kontor-angular/src/app/kontor/comic/comic-comics-list/comic-comics-list.component.html b/kontor-angular/src/app/kontor/comic/comic-comics-list/comic-comics-list.component.html
new file mode 100644
index 0000000..3c6d0ba
--- /dev/null
+++ b/kontor-angular/src/app/kontor/comic/comic-comics-list/comic-comics-list.component.html
@@ -0,0 +1,7 @@
+
+ @for (comic of comics(); track comic.id) {
+ -
+
+
+ }
+
diff --git a/kontor-angular/src/app/kontor/comic/comic-comics-list/comic-comics-list.component.spec.ts b/kontor-angular/src/app/kontor/comic/comic-comics-list/comic-comics-list.component.spec.ts
new file mode 100644
index 0000000..a68ff6d
--- /dev/null
+++ b/kontor-angular/src/app/kontor/comic/comic-comics-list/comic-comics-list.component.spec.ts
@@ -0,0 +1,23 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { ComicComicsListComponent } from './comic-comics-list.component';
+
+describe('ComicComicsListComponent', () => {
+ let component: ComicComicsListComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async () => {
+ await TestBed.configureTestingModule({
+ imports: [ComicComicsListComponent]
+ })
+ .compileComponents();
+
+ fixture = TestBed.createComponent(ComicComicsListComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/kontor-angular/src/app/kontor/comic/comic-comics-list/comic-comics-list.component.ts b/kontor-angular/src/app/kontor/comic/comic-comics-list/comic-comics-list.component.ts
new file mode 100644
index 0000000..057306c
--- /dev/null
+++ b/kontor-angular/src/app/kontor/comic/comic-comics-list/comic-comics-list.component.ts
@@ -0,0 +1,37 @@
+import { Component, DestroyRef, inject, OnInit, signal } from '@angular/core';
+import { Comic } from '../comic.model';
+import { ComicService } from '../comic-comics/comic.service';
+import { ComicComicComponent } from "../comic-comic/comic-comic.component";
+
+@Component({
+ selector: 'app-comic-comics-list',
+ imports: [ComicComicComponent],
+ templateUrl: './comic-comics-list.component.html',
+ styleUrl: './comic-comics-list.component.css'
+})
+export class ComicComicsListComponent implements OnInit {
+ comics = signal(undefined);
+ isFetching = signal(false);
+ error = signal('');
+ private comicsService = inject(ComicService);
+ private destroyRef = inject(DestroyRef);
+
+ ngOnInit() {
+ this.isFetching.set(true);
+ const subscription = this.comicsService.loadComics().subscribe({
+ next: (comics) => {
+ this.comics.set(comics);
+ },
+ error: (error: Error) => {
+ this.error.set(error.message);
+ },
+ complete: () => {
+ this.isFetching.set(false);
+ }
+ });
+
+ this.destroyRef.onDestroy(() => {
+ subscription.unsubscribe();
+ })
+ }
+}
diff --git a/kontor-angular/src/app/kontor/comic/comic-comics/comic-comics.component.css b/kontor-angular/src/app/kontor/comic/comic-comics/comic-comics.component.css
new file mode 100644
index 0000000..9ec0bbd
--- /dev/null
+++ b/kontor-angular/src/app/kontor/comic/comic-comics/comic-comics.component.css
@@ -0,0 +1,29 @@
+.float-parent-element {
+ width: 50%;
+}
+.float-child-element {
+ float: left;
+ width: 50%;
+ border-width: 10px;
+ border-color: black;
+}
+.float-details-element {
+ border: 1px solid darkgreen;
+ background-color: lightgreen;
+ margin: 5px;
+ padding: 1rem;
+ height: 100%;
+}
+
+.parent {
+ border: 1px solid black;
+ margin: 1rem;
+ padding: 2rem 2rem;
+ text-align: left;
+}
+.child {
+ display: inline-block;
+ border: 1px solid red;
+ padding: 1rem 1rem;
+ vertical-align: top;
+}
diff --git a/kontor-angular/src/app/kontor/comic/comic-comics/comic-comics.component.html b/kontor-angular/src/app/kontor/comic/comic-comics/comic-comics.component.html
new file mode 100644
index 0000000..7f8a5ac
--- /dev/null
+++ b/kontor-angular/src/app/kontor/comic/comic-comics/comic-comics.component.html
@@ -0,0 +1,32 @@
+
+
+
+ @if (comic()) {
+
+
+ @for (issue of comic().issues; track issue.id) {
+
+ }
+
+
+ @for (work of comic().works; track work.worktype.id) {
+
+ @for (artist of work.artists; track artist.id) {
+
+
+
+ }
+ }
+
+ } @else {
+
Comic Details
+ }
+
+
+
diff --git a/kontor-angular/src/app/kontor/comic/comic-comics/comic-comics.component.spec.ts b/kontor-angular/src/app/kontor/comic/comic-comics/comic-comics.component.spec.ts
new file mode 100644
index 0000000..66a2c25
--- /dev/null
+++ b/kontor-angular/src/app/kontor/comic/comic-comics/comic-comics.component.spec.ts
@@ -0,0 +1,23 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { ComicComicsComponent } from './comic-comics.component';
+
+describe('ComicComicsComponent', () => {
+ let component: ComicComicsComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async () => {
+ await TestBed.configureTestingModule({
+ imports: [ComicComicsComponent]
+ })
+ .compileComponents();
+
+ fixture = TestBed.createComponent(ComicComicsComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/kontor-angular/src/app/kontor/comic/comic-comics/comic-comics.component.ts b/kontor-angular/src/app/kontor/comic/comic-comics/comic-comics.component.ts
new file mode 100644
index 0000000..983f1a1
--- /dev/null
+++ b/kontor-angular/src/app/kontor/comic/comic-comics/comic-comics.component.ts
@@ -0,0 +1,27 @@
+import { Component, inject, input } from '@angular/core';
+import { ComicComicsListComponent } from "../comic-comics-list/comic-comics-list.component";
+import { ComicDetails } from '../comic.model';
+import { ActivatedRouteSnapshot, ResolveFn, RouterStateSnapshot } from '@angular/router';
+import { ComicService } from './comic.service';
+import { ComicWorktypeComponent } from '../comic-worktype/comic-worktype.component';
+import { ComicArtistComponent } from '../comic-artist/comic-artist.component';
+import { ComicIssueComponent } from '../comic-issue/comic-issue.component';
+import { ComicPublisherComponent } from "../comic-publisher/comic-publisher.component";
+
+@Component({
+ selector: 'app-comic-comics',
+ imports: [ComicComicsListComponent, ComicWorktypeComponent, ComicArtistComponent, ComicIssueComponent, ComicPublisherComponent],
+ templateUrl: './comic-comics.component.html',
+ styleUrl: './comic-comics.component.css'
+})
+export class ComicComicsComponent {
+ comic = input.required();
+}
+
+export const comicResolver: ResolveFn = (route: ActivatedRouteSnapshot, state: RouterStateSnapshot) => {
+ const comicService = inject(ComicService);
+ const comicId = route.paramMap.get('comicId');
+ const comicDetails = comicService.loadComicDetails(comicId);
+ console.log(comicDetails);
+ return comicDetails;
+};
diff --git a/kontor-angular/src/app/kontor/comic/comic-comics/comic.service.ts b/kontor-angular/src/app/kontor/comic/comic-comics/comic.service.ts
new file mode 100644
index 0000000..76a8d35
--- /dev/null
+++ b/kontor-angular/src/app/kontor/comic/comic-comics/comic.service.ts
@@ -0,0 +1,45 @@
+import { HttpClient } from "@angular/common/http";
+import { inject, Injectable, signal } from "@angular/core";
+import { Comic, ComicDetails } from "../comic.model";
+import { catchError, map, throwError } from "rxjs";
+
+@Injectable({
+ providedIn: 'root'
+})
+export class ComicService {
+ private httpClient = inject(HttpClient);
+ private comics = signal([]);
+
+ loadedComics = this.comics.asReadonly();
+
+ loadComics() {
+ return this.fetchComics('http://127.0.0.1:8800/api/comics/comics', 'Someting went wrong fetching comics. Please try again later.');
+ }
+
+ loadComicDetails(comicId: string | null) {
+ return this.fetchComicDetails('http://127.0.0.1:8800/api/comics/comics/' + comicId, 'Someting went wrong fetching comics. Please try again later.');
+ }
+
+ private fetchComicDetails(url: string, errorMessage: string) {
+ return this.httpClient.get(url).pipe(
+ map((resData) => {
+ console.log(resData);
+ return resData;
+ }),
+ catchError((error) => {
+ console.log(error);
+ return throwError(() => new Error(errorMessage));
+ })
+ );
+ }
+
+ private fetchComics(url: string, errorMessage: string) {
+ return this.httpClient.get(url).pipe(
+ map((resData) => resData),
+ catchError((error) => {
+ console.log(error);
+ return throwError(() => new Error(errorMessage));
+ })
+ );
+ }
+}
diff --git a/kontor-angular/src/app/comic/comic/comic-list/comic-list.component.css b/kontor-angular/src/app/kontor/comic/comic-issue/comic-issue.component.css
similarity index 100%
rename from kontor-angular/src/app/comic/comic/comic-list/comic-list.component.css
rename to kontor-angular/src/app/kontor/comic/comic-issue/comic-issue.component.css
diff --git a/kontor-angular/src/app/kontor/comic/comic-issue/comic-issue.component.html b/kontor-angular/src/app/kontor/comic/comic-issue/comic-issue.component.html
new file mode 100644
index 0000000..a96f8c1
--- /dev/null
+++ b/kontor-angular/src/app/kontor/comic/comic-issue/comic-issue.component.html
@@ -0,0 +1,5 @@
+
diff --git a/kontor-angular/src/app/tysc/player/player-list/player-list.component.spec.ts b/kontor-angular/src/app/kontor/comic/comic-issue/comic-issue.component.spec.ts
similarity index 52%
rename from kontor-angular/src/app/tysc/player/player-list/player-list.component.spec.ts
rename to kontor-angular/src/app/kontor/comic/comic-issue/comic-issue.component.spec.ts
index 0d08ee9..51c1fb0 100644
--- a/kontor-angular/src/app/tysc/player/player-list/player-list.component.spec.ts
+++ b/kontor-angular/src/app/kontor/comic/comic-issue/comic-issue.component.spec.ts
@@ -1,18 +1,18 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
-import { PlayerListComponent } from './player-list.component';
+import { ComicIssueComponent } from './comic-issue.component';
-describe('PlayerListComponent', () => {
- let component: PlayerListComponent;
- let fixture: ComponentFixture;
+describe('ComicIssueComponent', () => {
+ let component: ComicIssueComponent;
+ let fixture: ComponentFixture;
beforeEach(async () => {
await TestBed.configureTestingModule({
- imports: [PlayerListComponent]
+ imports: [ComicIssueComponent]
})
.compileComponents();
- fixture = TestBed.createComponent(PlayerListComponent);
+ fixture = TestBed.createComponent(ComicIssueComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
diff --git a/kontor-angular/src/app/kontor/comic/comic-issue/comic-issue.component.ts b/kontor-angular/src/app/kontor/comic/comic-issue/comic-issue.component.ts
new file mode 100644
index 0000000..ec004e6
--- /dev/null
+++ b/kontor-angular/src/app/kontor/comic/comic-issue/comic-issue.component.ts
@@ -0,0 +1,13 @@
+import { Component, input } from '@angular/core';
+import { Issue } from '../comic.model';
+import { RouterLink, RouterLinkActive } from '@angular/router';
+
+@Component({
+ selector: 'app-comic-issue',
+ imports: [RouterLink, RouterLinkActive],
+ templateUrl: './comic-issue.component.html',
+ styleUrl: './comic-issue.component.css'
+})
+export class ComicIssueComponent {
+ issue = input.required();
+}
diff --git a/kontor-angular/src/app/comic/publisher/publisher-list/publisher-list.component.css b/kontor-angular/src/app/kontor/comic/comic-navigation/comic-navigation.component.css
similarity index 100%
rename from kontor-angular/src/app/comic/publisher/publisher-list/publisher-list.component.css
rename to kontor-angular/src/app/kontor/comic/comic-navigation/comic-navigation.component.css
diff --git a/kontor-angular/src/app/kontor/comic/comic-navigation/comic-navigation.component.html b/kontor-angular/src/app/kontor/comic/comic-navigation/comic-navigation.component.html
new file mode 100644
index 0000000..87b4fd0
--- /dev/null
+++ b/kontor-angular/src/app/kontor/comic/comic-navigation/comic-navigation.component.html
@@ -0,0 +1,5 @@
+
diff --git a/kontor-angular/src/app/kontor/comic/comic-navigation/comic-navigation.component.spec.ts b/kontor-angular/src/app/kontor/comic/comic-navigation/comic-navigation.component.spec.ts
new file mode 100644
index 0000000..faab5bb
--- /dev/null
+++ b/kontor-angular/src/app/kontor/comic/comic-navigation/comic-navigation.component.spec.ts
@@ -0,0 +1,23 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { ComicNavigationComponent } from './comic-navigation.component';
+
+describe('ComicNavigationComponent', () => {
+ let component: ComicNavigationComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async () => {
+ await TestBed.configureTestingModule({
+ imports: [ComicNavigationComponent]
+ })
+ .compileComponents();
+
+ fixture = TestBed.createComponent(ComicNavigationComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/kontor-angular/src/app/kontor/comic/comic-navigation/comic-navigation.component.ts b/kontor-angular/src/app/kontor/comic/comic-navigation/comic-navigation.component.ts
new file mode 100644
index 0000000..62dce29
--- /dev/null
+++ b/kontor-angular/src/app/kontor/comic/comic-navigation/comic-navigation.component.ts
@@ -0,0 +1,12 @@
+import { Component } from '@angular/core';
+import { RouterLink, RouterLinkActive } from '@angular/router';
+
+@Component({
+ selector: 'app-comic-navigation',
+ imports: [RouterLink, RouterLinkActive],
+ templateUrl: './comic-navigation.component.html',
+ styleUrl: './comic-navigation.component.css'
+})
+export class ComicNavigationComponent {
+
+}
diff --git a/kontor-angular/src/app/media/media-actor/media-actor-list/media-actor-list.component.css b/kontor-angular/src/app/kontor/comic/comic-publisher/comic-publisher.component.css
similarity index 100%
rename from kontor-angular/src/app/media/media-actor/media-actor-list/media-actor-list.component.css
rename to kontor-angular/src/app/kontor/comic/comic-publisher/comic-publisher.component.css
diff --git a/kontor-angular/src/app/kontor/comic/comic-publisher/comic-publisher.component.html b/kontor-angular/src/app/kontor/comic/comic-publisher/comic-publisher.component.html
new file mode 100644
index 0000000..e964901
--- /dev/null
+++ b/kontor-angular/src/app/kontor/comic/comic-publisher/comic-publisher.component.html
@@ -0,0 +1,5 @@
+
diff --git a/kontor-angular/src/app/kontor/comic/comic-publisher/comic-publisher.component.spec.ts b/kontor-angular/src/app/kontor/comic/comic-publisher/comic-publisher.component.spec.ts
new file mode 100644
index 0000000..10036f5
--- /dev/null
+++ b/kontor-angular/src/app/kontor/comic/comic-publisher/comic-publisher.component.spec.ts
@@ -0,0 +1,23 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { ComicPublisherComponent } from './comic-publisher.component';
+
+describe('ComicPublisherComponent', () => {
+ let component: ComicPublisherComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async () => {
+ await TestBed.configureTestingModule({
+ imports: [ComicPublisherComponent]
+ })
+ .compileComponents();
+
+ fixture = TestBed.createComponent(ComicPublisherComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/kontor-angular/src/app/kontor/comic/comic-publisher/comic-publisher.component.ts b/kontor-angular/src/app/kontor/comic/comic-publisher/comic-publisher.component.ts
new file mode 100644
index 0000000..33d903b
--- /dev/null
+++ b/kontor-angular/src/app/kontor/comic/comic-publisher/comic-publisher.component.ts
@@ -0,0 +1,13 @@
+import { Component, input } from '@angular/core';
+import { Publisher } from '../comic.model';
+import { RouterLink, RouterLinkActive } from '@angular/router';
+
+@Component({
+ selector: 'app-comic-publisher',
+ imports: [RouterLink, RouterLinkActive],
+ templateUrl: './comic-publisher.component.html',
+ styleUrl: './comic-publisher.component.css'
+})
+export class ComicPublisherComponent {
+ publisher = input.required();
+}
diff --git a/kontor-angular/src/app/kontor/comic/comic-publishers-list/comic-publishers-list.component.css b/kontor-angular/src/app/kontor/comic/comic-publishers-list/comic-publishers-list.component.css
new file mode 100644
index 0000000..d95c44d
--- /dev/null
+++ b/kontor-angular/src/app/kontor/comic/comic-publishers-list/comic-publishers-list.component.css
@@ -0,0 +1,14 @@
+ul {
+ list-style: none;
+ margin: 0;
+ padding: 0;
+ display: flex;
+ gap: 0.5rem;
+ overflow: auto;
+}
+
+@media (min-width: 768px) {
+ ul {
+ flex-direction: column;
+ }
+}
diff --git a/kontor-angular/src/app/kontor/comic/comic-publishers-list/comic-publishers-list.component.html b/kontor-angular/src/app/kontor/comic/comic-publishers-list/comic-publishers-list.component.html
new file mode 100644
index 0000000..6592f11
--- /dev/null
+++ b/kontor-angular/src/app/kontor/comic/comic-publishers-list/comic-publishers-list.component.html
@@ -0,0 +1,7 @@
+
+ @for (publisher of publishers(); track publisher.id) {
+ -
+
+
+ }
+
diff --git a/kontor-angular/src/app/kontor/comic/comic-publishers-list/comic-publishers-list.component.spec.ts b/kontor-angular/src/app/kontor/comic/comic-publishers-list/comic-publishers-list.component.spec.ts
new file mode 100644
index 0000000..c83a6fe
--- /dev/null
+++ b/kontor-angular/src/app/kontor/comic/comic-publishers-list/comic-publishers-list.component.spec.ts
@@ -0,0 +1,23 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { ComicPublishersListComponent } from './comic-publishers-list.component';
+
+describe('ComicPublishersListComponent', () => {
+ let component: ComicPublishersListComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async () => {
+ await TestBed.configureTestingModule({
+ imports: [ComicPublishersListComponent]
+ })
+ .compileComponents();
+
+ fixture = TestBed.createComponent(ComicPublishersListComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/kontor-angular/src/app/kontor/comic/comic-publishers-list/comic-publishers-list.component.ts b/kontor-angular/src/app/kontor/comic/comic-publishers-list/comic-publishers-list.component.ts
new file mode 100644
index 0000000..6f47536
--- /dev/null
+++ b/kontor-angular/src/app/kontor/comic/comic-publishers-list/comic-publishers-list.component.ts
@@ -0,0 +1,37 @@
+import { Component, DestroyRef, inject, OnInit, signal } from '@angular/core';
+import { Publisher } from '../comic.model';
+import { PublisherService } from '../comic-publishers/publisher.service';
+import { ComicPublisherComponent } from "../comic-publisher/comic-publisher.component";
+
+@Component({
+ selector: 'app-comic-publishers-list',
+ imports: [ComicPublisherComponent],
+ templateUrl: './comic-publishers-list.component.html',
+ styleUrl: './comic-publishers-list.component.css'
+})
+export class ComicPublishersListComponent implements OnInit {
+ publishers = signal([]);
+ isFetching = signal(false);
+ error = signal('');
+ private publisherService = inject(PublisherService);
+ private destroyRef = inject(DestroyRef);
+
+ ngOnInit() {
+ this.isFetching.set(true);
+ const subscription = this.publisherService.loadPublishers().subscribe({
+ next: (publishers) => {
+ this.publishers.set(publishers);
+ },
+ error: (error: Error) => {
+ this.error.set(error.message);
+ },
+ complete: () => {
+ this.isFetching.set(false);
+ },
+ });
+
+ this.destroyRef.onDestroy(() => {
+ subscription.unsubscribe();
+ });
+ }
+}
diff --git a/kontor-angular/src/app/media/media-file/media-file-list/media-file-list.component.css b/kontor-angular/src/app/kontor/comic/comic-publishers/comic-publishers.component.css
similarity index 100%
rename from kontor-angular/src/app/media/media-file/media-file-list/media-file-list.component.css
rename to kontor-angular/src/app/kontor/comic/comic-publishers/comic-publishers.component.css
diff --git a/kontor-angular/src/app/kontor/comic/comic-publishers/comic-publishers.component.html b/kontor-angular/src/app/kontor/comic/comic-publishers/comic-publishers.component.html
new file mode 100644
index 0000000..3507aff
--- /dev/null
+++ b/kontor-angular/src/app/kontor/comic/comic-publishers/comic-publishers.component.html
@@ -0,0 +1,14 @@
+
+
+
+ @if (publisher()) {
+
+ {{ publisher().name }}
+
+ } @else {
+
Publisher Details
+ }
+
+
diff --git a/kontor-angular/src/app/kontor/comic/comic-publishers/comic-publishers.component.spec.ts b/kontor-angular/src/app/kontor/comic/comic-publishers/comic-publishers.component.spec.ts
new file mode 100644
index 0000000..184f6e7
--- /dev/null
+++ b/kontor-angular/src/app/kontor/comic/comic-publishers/comic-publishers.component.spec.ts
@@ -0,0 +1,23 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { ComicPublishersComponent } from './comic-publishers.component';
+
+describe('ComicPublishersComponent', () => {
+ let component: ComicPublishersComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async () => {
+ await TestBed.configureTestingModule({
+ imports: [ComicPublishersComponent]
+ })
+ .compileComponents();
+
+ fixture = TestBed.createComponent(ComicPublishersComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/kontor-angular/src/app/kontor/comic/comic-publishers/comic-publishers.component.ts b/kontor-angular/src/app/kontor/comic/comic-publishers/comic-publishers.component.ts
new file mode 100644
index 0000000..068d81c
--- /dev/null
+++ b/kontor-angular/src/app/kontor/comic/comic-publishers/comic-publishers.component.ts
@@ -0,0 +1,23 @@
+import { Component, inject, input } from '@angular/core';
+import { Publisher, PublisherDetails } from '../comic.model';
+import { ComicPublishersListComponent } from '../comic-publishers-list/comic-publishers-list.component';
+import { ActivatedRouteSnapshot, ResolveFn, RouterStateSnapshot } from '@angular/router';
+import { PublisherService } from './publisher.service';
+
+@Component({
+ selector: 'app-comic-publishers',
+ imports: [ComicPublishersListComponent],
+ templateUrl: './comic-publishers.component.html',
+ styleUrl: './comic-publishers.component.css'
+})
+export class ComicPublishersComponent {
+ publisher = input.required();
+}
+
+export const publisherResolver: ResolveFn = (route: ActivatedRouteSnapshot, state: RouterStateSnapshot) => {
+ const publisherService = inject(PublisherService);
+ const publisherId = route.paramMap.get('publisherId');
+ const publisherDetails = publisherService.loadPublisherDetails(publisherId);
+ console.log(publisherDetails);
+ return publisherDetails;
+};
diff --git a/kontor-angular/src/app/kontor/comic/comic-publishers/publisher.service.ts b/kontor-angular/src/app/kontor/comic/comic-publishers/publisher.service.ts
new file mode 100644
index 0000000..7ff0bff
--- /dev/null
+++ b/kontor-angular/src/app/kontor/comic/comic-publishers/publisher.service.ts
@@ -0,0 +1,47 @@
+import { inject, Injectable, signal } from "@angular/core";
+import { HttpClient } from "@angular/common/http";
+import { catchError, map, throwError } from "rxjs";
+import { ErrorService } from "../../../shared/error.service";
+import { Publisher, PublisherDetails } from "../comic.model";
+
+@Injectable({
+ providedIn: 'root',
+})
+export class PublisherService {
+ private errorService = inject(ErrorService);
+ private httpClient = inject(HttpClient);
+ private publishers = signal([]);
+
+ loadedPublishers = this.publishers.asReadonly();
+
+ loadPublishers() {
+ return this.fetchPublishers('http://127.0.0.1:8800/api/comics/publishers', 'Someting went wrong fetching artists. Please try again later-');
+ }
+
+ loadPublisherDetails(artistId: string | null) {
+ return this.fetchPublisherDetails('http://127.0.0.1:8800/api/comics/publishers/' + artistId, 'Someting went wrong fetching comic artists. Please try again later.');
+ }
+
+ private fetchPublishers(url: string, errorMessage: string) {
+ return this.httpClient.get(url).pipe(
+ map((resData) => resData),
+ catchError((error) => {
+ console.log(error);
+ return throwError(() => new Error(errorMessage));
+ })
+ );
+ }
+
+ private fetchPublisherDetails(url: string, errorMessage: string) {
+ return this.httpClient.get(url).pipe(
+ map((resData) => {
+ console.log(resData);
+ return resData;
+ }),
+ catchError((error) => {
+ console.log(error);
+ return throwError(() => new Error(errorMessage));
+ })
+ );
+ }
+}
diff --git a/kontor-angular/src/app/media/media-overview/media-overview.component.css b/kontor-angular/src/app/kontor/comic/comic-section/comic-section.component.css
similarity index 100%
rename from kontor-angular/src/app/media/media-overview/media-overview.component.css
rename to kontor-angular/src/app/kontor/comic/comic-section/comic-section.component.css
diff --git a/kontor-angular/src/app/kontor/comic/comic-section/comic-section.component.html b/kontor-angular/src/app/kontor/comic/comic-section/comic-section.component.html
new file mode 100644
index 0000000..570e4d6
--- /dev/null
+++ b/kontor-angular/src/app/kontor/comic/comic-section/comic-section.component.html
@@ -0,0 +1,2 @@
+
+
diff --git a/kontor-angular/src/app/comic/artist/artist-detail/artist-detail.component.spec.ts b/kontor-angular/src/app/kontor/comic/comic-section/comic-section.component.spec.ts
similarity index 52%
rename from kontor-angular/src/app/comic/artist/artist-detail/artist-detail.component.spec.ts
rename to kontor-angular/src/app/kontor/comic/comic-section/comic-section.component.spec.ts
index cf1fa88..9acbb1a 100644
--- a/kontor-angular/src/app/comic/artist/artist-detail/artist-detail.component.spec.ts
+++ b/kontor-angular/src/app/kontor/comic/comic-section/comic-section.component.spec.ts
@@ -1,18 +1,18 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
-import { ArtistDetailComponent } from './artist-detail.component';
+import { ComicSectionComponent } from './comic-section.component';
-describe('ArtistDetailComponent', () => {
- let component: ArtistDetailComponent;
- let fixture: ComponentFixture;
+describe('ComicSectionComponent', () => {
+ let component: ComicSectionComponent;
+ let fixture: ComponentFixture;
beforeEach(async () => {
await TestBed.configureTestingModule({
- imports: [ArtistDetailComponent]
+ imports: [ComicSectionComponent]
})
.compileComponents();
- fixture = TestBed.createComponent(ArtistDetailComponent);
+ fixture = TestBed.createComponent(ComicSectionComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
diff --git a/kontor-angular/src/app/kontor/comic/comic-section/comic-section.component.ts b/kontor-angular/src/app/kontor/comic/comic-section/comic-section.component.ts
new file mode 100644
index 0000000..76c2cef
--- /dev/null
+++ b/kontor-angular/src/app/kontor/comic/comic-section/comic-section.component.ts
@@ -0,0 +1,13 @@
+import { Component } from '@angular/core';
+import { ComicNavigationComponent } from "../comic-navigation/comic-navigation.component";
+import { RouterOutlet } from '@angular/router';
+
+@Component({
+ selector: 'app-comic-section',
+ imports: [ComicNavigationComponent, RouterOutlet],
+ templateUrl: './comic-section.component.html',
+ styleUrl: './comic-section.component.css'
+})
+export class ComicSectionComponent {
+
+}
diff --git a/kontor-angular/src/app/kontor/comic/comic-section/comic-section.routes.ts b/kontor-angular/src/app/kontor/comic/comic-section/comic-section.routes.ts
new file mode 100644
index 0000000..cc57991
--- /dev/null
+++ b/kontor-angular/src/app/kontor/comic/comic-section/comic-section.routes.ts
@@ -0,0 +1,40 @@
+import { Routes } from "@angular/router";
+import { artistResolver, ComicArtistsComponent } from "../comic-artists/comic-artists.component";
+import { ComicPublishersComponent, publisherResolver } from './../comic-publishers/comic-publishers.component';
+import { ComicComicsComponent, comicResolver } from "../comic-comics/comic-comics.component";
+
+export const comicRoutes: Routes = [
+ {
+ path: 'comics',
+ component: ComicComicsComponent
+ },
+ {
+ path: 'comics/:comicId',
+ component: ComicComicsComponent,
+ resolve: {
+ comic: comicResolver
+ }
+ },
+ {
+ path: 'publisher',
+ component: ComicPublishersComponent
+ },
+ {
+ path: 'publisher/:publisherId',
+ component: ComicPublishersComponent,
+ resolve: {
+ publisher: publisherResolver
+ }
+ },
+ {
+ path: 'artist',
+ component: ComicArtistsComponent
+ },
+ {
+ path: 'artist/:artistId',
+ component: ComicArtistsComponent,
+ resolve: {
+ artist: artistResolver
+ }
+ },
+];
diff --git a/kontor-angular/src/app/media/media-video/media-video-list/media-video-list.component.css b/kontor-angular/src/app/kontor/comic/comic-worktype/comic-worktype.component.css
similarity index 100%
rename from kontor-angular/src/app/media/media-video/media-video-list/media-video-list.component.css
rename to kontor-angular/src/app/kontor/comic/comic-worktype/comic-worktype.component.css
diff --git a/kontor-angular/src/app/kontor/comic/comic-worktype/comic-worktype.component.html b/kontor-angular/src/app/kontor/comic/comic-worktype/comic-worktype.component.html
new file mode 100644
index 0000000..a9709ce
--- /dev/null
+++ b/kontor-angular/src/app/kontor/comic/comic-worktype/comic-worktype.component.html
@@ -0,0 +1,5 @@
+
diff --git a/kontor-angular/src/app/comic/publisher/publisher-list/publisher-list.component.spec.ts b/kontor-angular/src/app/kontor/comic/comic-worktype/comic-worktype.component.spec.ts
similarity index 52%
rename from kontor-angular/src/app/comic/publisher/publisher-list/publisher-list.component.spec.ts
rename to kontor-angular/src/app/kontor/comic/comic-worktype/comic-worktype.component.spec.ts
index 00f7266..88c4876 100644
--- a/kontor-angular/src/app/comic/publisher/publisher-list/publisher-list.component.spec.ts
+++ b/kontor-angular/src/app/kontor/comic/comic-worktype/comic-worktype.component.spec.ts
@@ -1,18 +1,18 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
-import { PublisherListComponent } from './publisher-list.component';
+import { ComicWorktypeComponent } from './comic-worktype.component';
-describe('PublisherListComponent', () => {
- let component: PublisherListComponent;
- let fixture: ComponentFixture;
+describe('ComicWorktypeComponent', () => {
+ let component: ComicWorktypeComponent;
+ let fixture: ComponentFixture;
beforeEach(async () => {
await TestBed.configureTestingModule({
- imports: [PublisherListComponent]
+ imports: [ComicWorktypeComponent]
})
.compileComponents();
- fixture = TestBed.createComponent(PublisherListComponent);
+ fixture = TestBed.createComponent(ComicWorktypeComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
diff --git a/kontor-angular/src/app/kontor/comic/comic-worktype/comic-worktype.component.ts b/kontor-angular/src/app/kontor/comic/comic-worktype/comic-worktype.component.ts
new file mode 100644
index 0000000..260ad68
--- /dev/null
+++ b/kontor-angular/src/app/kontor/comic/comic-worktype/comic-worktype.component.ts
@@ -0,0 +1,13 @@
+import { Component, input } from '@angular/core';
+import { RouterLink, RouterLinkActive } from '@angular/router';
+import { Worktype } from '../comic.model';
+
+@Component({
+ selector: 'app-comic-worktype',
+ imports: [RouterLink, RouterLinkActive],
+ templateUrl: './comic-worktype.component.html',
+ styleUrl: './comic-worktype.component.css'
+})
+export class ComicWorktypeComponent {
+ worktype = input.required();
+}
diff --git a/kontor-angular/src/app/kontor/comic/comic.model.ts b/kontor-angular/src/app/kontor/comic/comic.model.ts
new file mode 100644
index 0000000..16ec960
--- /dev/null
+++ b/kontor-angular/src/app/kontor/comic/comic.model.ts
@@ -0,0 +1,78 @@
+export interface Artist {
+ id: string;
+ name: string;
+}
+
+export interface Worktype {
+ id: string;
+ name: string;
+}
+
+export interface Publisher {
+ id: string;
+ name: string;
+}
+
+export interface PublisherDetails {
+ id: string;
+ name: string;
+
+}
+export interface Comic {
+ id: string;
+ title: string;
+ completed: boolean;
+}
+
+export interface Volume {
+ id: string;
+ name: string;
+}
+
+export interface Issue {
+ id: string;
+ issue_number: string;
+ in_stock: boolean;
+ is_read: boolean;
+ comic: Comic;
+ volume: Volume;
+}
+
+export interface ComicWork {
+ worktype: string;
+}
+
+export interface ComicWorktypeArtists {
+ worktype: Worktype;
+ artists: Artist[];
+}
+
+export interface ComicDetails {
+ id: string;
+ created: string;
+ title: string;
+ completed: boolean;
+ current_order: boolean;
+ weblink: string;
+ publisher: Publisher;
+ issues: Issue[];
+ volumes: Volume[];
+ works: ComicWorktypeArtists[];
+}
+
+export interface ArtistWorktypeComics {
+ worktype: Worktype;
+ comics: Comic[];
+}
+
+export interface ArtistWorktypeIssues {
+ worktype: Worktype;
+ issues: Issue[];
+}
+export interface ArtistDetails {
+ id: string;
+ name: string;
+ weblink: string;
+ comic_works: ArtistWorktypeComics[];
+ issue_works: ArtistWorktypeIssues[];
+}
diff --git a/kontor-angular/src/app/kontor/footer/footer.component.css b/kontor-angular/src/app/kontor/footer/footer.component.css
index 1d66ed7..1a660c1 100644
--- a/kontor-angular/src/app/kontor/footer/footer.component.css
+++ b/kontor-angular/src/app/kontor/footer/footer.component.css
@@ -1,7 +1,12 @@
/* Footer */
-a {
+.footer {
padding: 20px;
text-align: center;
- background: #ddd;
- margin-top: 20px;
+ background-color: lightblue;
+ position: sticky;
+ bottom: 0px;
+}
+
+.footer a {
+ font-size: 20px;
}
diff --git a/kontor-angular/src/app/kontor/footer/footer.component.html b/kontor-angular/src/app/kontor/footer/footer.component.html
index 1f376c3..912cc1d 100644
--- a/kontor-angular/src/app/kontor/footer/footer.component.html
+++ b/kontor-angular/src/app/kontor/footer/footer.component.html
@@ -1,3 +1,5 @@
-
+
+
+
diff --git a/kontor-angular/src/app/kontor/footer/footer.component.ts b/kontor-angular/src/app/kontor/footer/footer.component.ts
index 8262425..7ded191 100644
--- a/kontor-angular/src/app/kontor/footer/footer.component.ts
+++ b/kontor-angular/src/app/kontor/footer/footer.component.ts
@@ -9,5 +9,4 @@ import { Component } from '@angular/core';
export class KontorFooterComponent {
footerUrl = "https://kontor.thpeetz.de";
footerLink = "kontor.thpeetz.de";
-
}
diff --git a/kontor-angular/src/app/kontor/header/header.component.html b/kontor-angular/src/app/kontor/header/header.component.html
index 9c1f7a2..3191f24 100644
--- a/kontor-angular/src/app/kontor/header/header.component.html
+++ b/kontor-angular/src/app/kontor/header/header.component.html
@@ -2,18 +2,4 @@
-
-
diff --git a/kontor-angular/src/app/kontor/header/header.component.ts b/kontor-angular/src/app/kontor/header/header.component.ts
index 8808cc8..3b8a262 100644
--- a/kontor-angular/src/app/kontor/header/header.component.ts
+++ b/kontor-angular/src/app/kontor/header/header.component.ts
@@ -1,9 +1,8 @@
import { Component, signal } from '@angular/core';
-import { RouterLink, RouterLinkActive } from '@angular/router';
@Component({
selector: 'kontor-header',
- imports: [RouterLink, RouterLinkActive],
+ imports: [],
templateUrl: './header.component.html',
styleUrl: './header.component.css'
})
diff --git a/kontor-angular/src/app/tysc/cardset/cardset-list/cardset-list.component.css b/kontor-angular/src/app/kontor/media/media-actors/media-actors.component.css
similarity index 100%
rename from kontor-angular/src/app/tysc/cardset/cardset-list/cardset-list.component.css
rename to kontor-angular/src/app/kontor/media/media-actors/media-actors.component.css
diff --git a/kontor-angular/src/app/kontor/media/media-actors/media-actors.component.html b/kontor-angular/src/app/kontor/media/media-actors/media-actors.component.html
new file mode 100644
index 0000000..3904b79
--- /dev/null
+++ b/kontor-angular/src/app/kontor/media/media-actors/media-actors.component.html
@@ -0,0 +1 @@
+media-actors works!
diff --git a/kontor-angular/src/app/kontor/media/media-actors/media-actors.component.spec.ts b/kontor-angular/src/app/kontor/media/media-actors/media-actors.component.spec.ts
new file mode 100644
index 0000000..1448ea4
--- /dev/null
+++ b/kontor-angular/src/app/kontor/media/media-actors/media-actors.component.spec.ts
@@ -0,0 +1,23 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { MediaActorsComponent } from './media-actors.component';
+
+describe('MediaActorsComponent', () => {
+ let component: MediaActorsComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async () => {
+ await TestBed.configureTestingModule({
+ imports: [MediaActorsComponent]
+ })
+ .compileComponents();
+
+ fixture = TestBed.createComponent(MediaActorsComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/kontor-angular/src/app/kontor/media/media-actors/media-actors.component.ts b/kontor-angular/src/app/kontor/media/media-actors/media-actors.component.ts
new file mode 100644
index 0000000..8fbb7f8
--- /dev/null
+++ b/kontor-angular/src/app/kontor/media/media-actors/media-actors.component.ts
@@ -0,0 +1,11 @@
+import { Component } from '@angular/core';
+
+@Component({
+ selector: 'app-media-actors',
+ imports: [],
+ templateUrl: './media-actors.component.html',
+ styleUrl: './media-actors.component.css'
+})
+export class MediaActorsComponent {
+
+}
diff --git a/kontor-angular/src/app/tysc/player/player-list/player-list.component.css b/kontor-angular/src/app/kontor/media/media-file/media-file.component.css
similarity index 100%
rename from kontor-angular/src/app/tysc/player/player-list/player-list.component.css
rename to kontor-angular/src/app/kontor/media/media-file/media-file.component.css
diff --git a/kontor-angular/src/app/kontor/media/media-file/media-file.component.html b/kontor-angular/src/app/kontor/media/media-file/media-file.component.html
new file mode 100644
index 0000000..b735566
--- /dev/null
+++ b/kontor-angular/src/app/kontor/media/media-file/media-file.component.html
@@ -0,0 +1,17 @@
+
diff --git a/kontor-angular/src/app/tysc/sport/sport-list/sport-list.component.spec.ts b/kontor-angular/src/app/kontor/media/media-file/media-file.component.spec.ts
similarity index 53%
rename from kontor-angular/src/app/tysc/sport/sport-list/sport-list.component.spec.ts
rename to kontor-angular/src/app/kontor/media/media-file/media-file.component.spec.ts
index 7a1c646..4050101 100644
--- a/kontor-angular/src/app/tysc/sport/sport-list/sport-list.component.spec.ts
+++ b/kontor-angular/src/app/kontor/media/media-file/media-file.component.spec.ts
@@ -1,18 +1,18 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
-import { SportListComponent } from './sport-list.component';
+import { MediaFileComponent } from './media-file.component';
-describe('SportListComponent', () => {
- let component: SportListComponent;
- let fixture: ComponentFixture;
+describe('MediaFileComponent', () => {
+ let component: MediaFileComponent;
+ let fixture: ComponentFixture;
beforeEach(async () => {
await TestBed.configureTestingModule({
- imports: [SportListComponent]
+ imports: [MediaFileComponent]
})
.compileComponents();
- fixture = TestBed.createComponent(SportListComponent);
+ fixture = TestBed.createComponent(MediaFileComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
diff --git a/kontor-angular/src/app/kontor/media/media-file/media-file.component.ts b/kontor-angular/src/app/kontor/media/media-file/media-file.component.ts
new file mode 100644
index 0000000..924844b
--- /dev/null
+++ b/kontor-angular/src/app/kontor/media/media-file/media-file.component.ts
@@ -0,0 +1,13 @@
+import { Component, input } from '@angular/core';
+import { MediaFile } from '../media-files/media-file.model';
+import { RouterLink, RouterLinkActive } from '@angular/router';
+
+@Component({
+ selector: 'app-media-file',
+ imports: [RouterLink, RouterLinkActive],
+ templateUrl: './media-file.component.html',
+ styleUrl: './media-file.component.css'
+})
+export class MediaFileComponent {
+ mediafile = input.required();
+}
diff --git a/kontor-angular/src/app/kontor/media/media-files-list/media-files-list.component.css b/kontor-angular/src/app/kontor/media/media-files-list/media-files-list.component.css
new file mode 100644
index 0000000..d95c44d
--- /dev/null
+++ b/kontor-angular/src/app/kontor/media/media-files-list/media-files-list.component.css
@@ -0,0 +1,14 @@
+ul {
+ list-style: none;
+ margin: 0;
+ padding: 0;
+ display: flex;
+ gap: 0.5rem;
+ overflow: auto;
+}
+
+@media (min-width: 768px) {
+ ul {
+ flex-direction: column;
+ }
+}
diff --git a/kontor-angular/src/app/kontor/media/media-files-list/media-files-list.component.html b/kontor-angular/src/app/kontor/media/media-files-list/media-files-list.component.html
new file mode 100644
index 0000000..1688d6b
--- /dev/null
+++ b/kontor-angular/src/app/kontor/media/media-files-list/media-files-list.component.html
@@ -0,0 +1,7 @@
+
+ @for (mediafile of files(); track mediafile.id) {
+ -
+
+
+ }
+
\ No newline at end of file
diff --git a/kontor-angular/src/app/media/media-actor/media-actor-list/media-actor-list.component.spec.ts b/kontor-angular/src/app/kontor/media/media-files-list/media-files-list.component.spec.ts
similarity index 51%
rename from kontor-angular/src/app/media/media-actor/media-actor-list/media-actor-list.component.spec.ts
rename to kontor-angular/src/app/kontor/media/media-files-list/media-files-list.component.spec.ts
index 1eae192..a97b136 100644
--- a/kontor-angular/src/app/media/media-actor/media-actor-list/media-actor-list.component.spec.ts
+++ b/kontor-angular/src/app/kontor/media/media-files-list/media-files-list.component.spec.ts
@@ -1,18 +1,18 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
-import { MediaActorListComponent } from './media-actor-list.component';
+import { MediaFilesListComponent } from './media-files-list.component';
-describe('MediaActorListComponent', () => {
- let component: MediaActorListComponent;
- let fixture: ComponentFixture;
+describe('MediaFilesListComponent', () => {
+ let component: MediaFilesListComponent;
+ let fixture: ComponentFixture;
beforeEach(async () => {
await TestBed.configureTestingModule({
- imports: [MediaActorListComponent]
+ imports: [MediaFilesListComponent]
})
.compileComponents();
- fixture = TestBed.createComponent(MediaActorListComponent);
+ fixture = TestBed.createComponent(MediaFilesListComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
diff --git a/kontor-angular/src/app/kontor/media/media-files-list/media-files-list.component.ts b/kontor-angular/src/app/kontor/media/media-files-list/media-files-list.component.ts
new file mode 100644
index 0000000..eac3322
--- /dev/null
+++ b/kontor-angular/src/app/kontor/media/media-files-list/media-files-list.component.ts
@@ -0,0 +1,37 @@
+import { Component, DestroyRef, inject, OnInit, signal } from '@angular/core';
+import { MediaFileComponent } from '../media-file/media-file.component';
+import { MediaFileService } from '../media-files/media-file.service';
+import { MediaFile } from '../media-files/media-file.model';
+
+@Component({
+ selector: 'app-media-files-list',
+ imports: [MediaFileComponent],
+ templateUrl: './media-files-list.component.html',
+ styleUrl: './media-files-list.component.css'
+})
+export class MediaFilesListComponent implements OnInit {
+ files = signal([]);
+ isFetching = signal(false);
+ error = signal('');
+ private mediaFileService = inject(MediaFileService);
+ private destroyRef = inject(DestroyRef);
+
+ ngOnInit() {
+ this.isFetching.set(true);
+ const subscription = this.mediaFileService.loadFiles().subscribe({
+ next: (files) => {
+ this.files.set(files);
+ },
+ error: (error: Error) => {
+ this.error.set(error.message);
+ },
+ complete: () => {
+ this.isFetching.set(false);
+ },
+ });
+
+ this.destroyRef.onDestroy(() => {
+ subscription.unsubscribe();
+ });
+ }
+}
diff --git a/kontor-angular/src/app/kontor/media/media-files/media-file.model.ts b/kontor-angular/src/app/kontor/media/media-files/media-file.model.ts
new file mode 100644
index 0000000..9418003
--- /dev/null
+++ b/kontor-angular/src/app/kontor/media/media-files/media-file.model.ts
@@ -0,0 +1,11 @@
+import { StreamingResourceOptions } from "@angular/core";
+
+export interface MediaFile {
+ id: string;
+ title: string;
+ file_name: string;
+ cloud_link: string;
+ url: string;
+ review: boolean;
+ should_download: boolean;
+}
\ No newline at end of file
diff --git a/kontor-angular/src/app/kontor/media/media-files/media-file.service.ts b/kontor-angular/src/app/kontor/media/media-files/media-file.service.ts
new file mode 100644
index 0000000..96e24e7
--- /dev/null
+++ b/kontor-angular/src/app/kontor/media/media-files/media-file.service.ts
@@ -0,0 +1,30 @@
+import { inject, Injectable, signal } from "@angular/core";
+import { ErrorService } from "../../../shared/error.service";
+import { HttpClient } from "@angular/common/http";
+import { MediaFile } from "./media-file.model";
+import { catchError, map, throwError } from "rxjs";
+
+@Injectable({
+ providedIn: 'root',
+})
+export class MediaFileService {
+ private errorService = inject(ErrorService);
+ private httpClient = inject(HttpClient);
+ private files = signal([]);
+
+ loadedFiles = this.files.asReadonly();
+
+ loadFiles() {
+ return this.fetchMediaFiles('http://127.0.0.1:8800/api/media/files', 'Someting went wrong fetching artists. Please try again later-');
+ }
+
+ private fetchMediaFiles(url: string, errorMessage: string) {
+ return this.httpClient.get(url).pipe(
+ map((resData) => resData),
+ catchError((error) => {
+ console.log(error);
+ return throwError(() => new Error(errorMessage));
+ })
+ );
+ }
+}
diff --git a/kontor-angular/src/app/kontor/media/media-files/media-files.component.css b/kontor-angular/src/app/kontor/media/media-files/media-files.component.css
new file mode 100644
index 0000000..a997f58
--- /dev/null
+++ b/kontor-angular/src/app/kontor/media/media-files/media-files.component.css
@@ -0,0 +1,5 @@
+.grid-container {
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ grid-gap: 20px;
+}
diff --git a/kontor-angular/src/app/kontor/media/media-files/media-files.component.html b/kontor-angular/src/app/kontor/media/media-files/media-files.component.html
new file mode 100644
index 0000000..ac8ed9f
--- /dev/null
+++ b/kontor-angular/src/app/kontor/media/media-files/media-files.component.html
@@ -0,0 +1,7 @@
+
diff --git a/kontor-angular/src/app/comic/comic/comic-list/comic-list.component.spec.ts b/kontor-angular/src/app/kontor/media/media-files/media-files.component.spec.ts
similarity index 52%
rename from kontor-angular/src/app/comic/comic/comic-list/comic-list.component.spec.ts
rename to kontor-angular/src/app/kontor/media/media-files/media-files.component.spec.ts
index 6a5109e..c8f1c9f 100644
--- a/kontor-angular/src/app/comic/comic/comic-list/comic-list.component.spec.ts
+++ b/kontor-angular/src/app/kontor/media/media-files/media-files.component.spec.ts
@@ -1,18 +1,18 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
-import { ComicListComponent } from './comic-list.component';
+import { MediaFilesComponent } from './media-files.component';
-describe('ComicListComponent', () => {
- let component: ComicListComponent;
- let fixture: ComponentFixture;
+describe('MediaFilesComponent', () => {
+ let component: MediaFilesComponent;
+ let fixture: ComponentFixture;
beforeEach(async () => {
await TestBed.configureTestingModule({
- imports: [ComicListComponent]
+ imports: [MediaFilesComponent]
})
.compileComponents();
- fixture = TestBed.createComponent(ComicListComponent);
+ fixture = TestBed.createComponent(MediaFilesComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
diff --git a/kontor-angular/src/app/kontor/media/media-files/media-files.component.ts b/kontor-angular/src/app/kontor/media/media-files/media-files.component.ts
new file mode 100644
index 0000000..06fbc0e
--- /dev/null
+++ b/kontor-angular/src/app/kontor/media/media-files/media-files.component.ts
@@ -0,0 +1,12 @@
+import { Component } from '@angular/core';
+import { MediaFilesListComponent } from '../media-files-list/media-files-list.component';
+
+@Component({
+ selector: 'app-media-files',
+ imports: [MediaFilesListComponent],
+ templateUrl: './media-files.component.html',
+ styleUrl: './media-files.component.css'
+})
+export class MediaFilesComponent {
+
+}
diff --git a/kontor-angular/src/app/tysc/position/position-list/position-list.component.css b/kontor-angular/src/app/kontor/media/media-navigation/media-navigation.component.css
similarity index 100%
rename from kontor-angular/src/app/tysc/position/position-list/position-list.component.css
rename to kontor-angular/src/app/kontor/media/media-navigation/media-navigation.component.css
diff --git a/kontor-angular/src/app/kontor/media/media-navigation/media-navigation.component.html b/kontor-angular/src/app/kontor/media/media-navigation/media-navigation.component.html
new file mode 100644
index 0000000..846dd50
--- /dev/null
+++ b/kontor-angular/src/app/kontor/media/media-navigation/media-navigation.component.html
@@ -0,0 +1,5 @@
+
diff --git a/kontor-angular/src/app/kontor/media/media-navigation/media-navigation.component.spec.ts b/kontor-angular/src/app/kontor/media/media-navigation/media-navigation.component.spec.ts
new file mode 100644
index 0000000..e1c7fdf
--- /dev/null
+++ b/kontor-angular/src/app/kontor/media/media-navigation/media-navigation.component.spec.ts
@@ -0,0 +1,23 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { MediaNavigationComponent } from './media-navigation.component';
+
+describe('MediaNavigationComponent', () => {
+ let component: MediaNavigationComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async () => {
+ await TestBed.configureTestingModule({
+ imports: [MediaNavigationComponent]
+ })
+ .compileComponents();
+
+ fixture = TestBed.createComponent(MediaNavigationComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/kontor-angular/src/app/kontor/media/media-navigation/media-navigation.component.ts b/kontor-angular/src/app/kontor/media/media-navigation/media-navigation.component.ts
new file mode 100644
index 0000000..673afd9
--- /dev/null
+++ b/kontor-angular/src/app/kontor/media/media-navigation/media-navigation.component.ts
@@ -0,0 +1,12 @@
+import { Component } from '@angular/core';
+import { RouterLink, RouterLinkActive } from '@angular/router';
+
+@Component({
+ selector: 'app-media-navigation',
+ imports: [RouterLink, RouterLinkActive],
+ templateUrl: './media-navigation.component.html',
+ styleUrl: './media-navigation.component.css'
+})
+export class MediaNavigationComponent {
+
+}
diff --git a/kontor-angular/src/app/tysc/sport/sport-list/sport-list.component.css b/kontor-angular/src/app/kontor/media/media-section/media-section.component.css
similarity index 100%
rename from kontor-angular/src/app/tysc/sport/sport-list/sport-list.component.css
rename to kontor-angular/src/app/kontor/media/media-section/media-section.component.css
diff --git a/kontor-angular/src/app/kontor/media/media-section/media-section.component.html b/kontor-angular/src/app/kontor/media/media-section/media-section.component.html
new file mode 100644
index 0000000..d31e086
--- /dev/null
+++ b/kontor-angular/src/app/kontor/media/media-section/media-section.component.html
@@ -0,0 +1,2 @@
+
+
diff --git a/kontor-angular/src/app/kontor/media/media-section/media-section.component.spec.ts b/kontor-angular/src/app/kontor/media/media-section/media-section.component.spec.ts
new file mode 100644
index 0000000..fa766d5
--- /dev/null
+++ b/kontor-angular/src/app/kontor/media/media-section/media-section.component.spec.ts
@@ -0,0 +1,23 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { MediaSectionComponent } from './media-section.component';
+
+describe('MediaSectionComponent', () => {
+ let component: MediaSectionComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async () => {
+ await TestBed.configureTestingModule({
+ imports: [MediaSectionComponent]
+ })
+ .compileComponents();
+
+ fixture = TestBed.createComponent(MediaSectionComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/kontor-angular/src/app/kontor/media/media-section/media-section.component.ts b/kontor-angular/src/app/kontor/media/media-section/media-section.component.ts
new file mode 100644
index 0000000..a4c17d3
--- /dev/null
+++ b/kontor-angular/src/app/kontor/media/media-section/media-section.component.ts
@@ -0,0 +1,13 @@
+import { Component } from '@angular/core';
+import { MediaNavigationComponent } from "../media-navigation/media-navigation.component";
+import { RouterOutlet } from '@angular/router';
+
+@Component({
+ selector: 'app-media-section',
+ imports: [MediaNavigationComponent, RouterOutlet],
+ templateUrl: './media-section.component.html',
+ styleUrl: './media-section.component.css'
+})
+export class MediaSectionComponent {
+
+}
diff --git a/kontor-angular/src/app/kontor/media/media-section/media-section.routes.ts b/kontor-angular/src/app/kontor/media/media-section/media-section.routes.ts
new file mode 100644
index 0000000..8214e84
--- /dev/null
+++ b/kontor-angular/src/app/kontor/media/media-section/media-section.routes.ts
@@ -0,0 +1,31 @@
+import { Routes } from "@angular/router";
+import { MediaFilesComponent } from './../media-files/media-files.component';
+import { MediaActorsComponent } from '../media-actors/media-actors.component';
+import { MediaVideosComponent } from '../media-videos/media-videos.component';
+
+export const mediaRoutes: Routes = [
+ {
+ path: 'file',
+ component: MediaFilesComponent
+ },
+ {
+ path: 'file/:fileId',
+ component: MediaFilesComponent,
+ },
+ {
+ path: 'actor',
+ component: MediaActorsComponent
+ },
+ {
+ path: 'actor/:actorId',
+ component: MediaActorsComponent,
+ },
+ {
+ path: 'video',
+ component: MediaVideosComponent
+ },
+ {
+ path: 'video/:videoId',
+ component: MediaVideosComponent,
+ },
+];
diff --git a/kontor-angular/src/app/tysc/sport/sport-selector/sport-selector.component.css b/kontor-angular/src/app/kontor/media/media-videos/media-videos.component.css
similarity index 100%
rename from kontor-angular/src/app/tysc/sport/sport-selector/sport-selector.component.css
rename to kontor-angular/src/app/kontor/media/media-videos/media-videos.component.css
diff --git a/kontor-angular/src/app/kontor/media/media-videos/media-videos.component.html b/kontor-angular/src/app/kontor/media/media-videos/media-videos.component.html
new file mode 100644
index 0000000..2aaafcb
--- /dev/null
+++ b/kontor-angular/src/app/kontor/media/media-videos/media-videos.component.html
@@ -0,0 +1 @@
+media-videos works!
diff --git a/kontor-angular/src/app/kontor/media/media-videos/media-videos.component.spec.ts b/kontor-angular/src/app/kontor/media/media-videos/media-videos.component.spec.ts
new file mode 100644
index 0000000..ccde24c
--- /dev/null
+++ b/kontor-angular/src/app/kontor/media/media-videos/media-videos.component.spec.ts
@@ -0,0 +1,23 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { MediaVideosComponent } from './media-videos.component';
+
+describe('MediaVideosComponent', () => {
+ let component: MediaVideosComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async () => {
+ await TestBed.configureTestingModule({
+ imports: [MediaVideosComponent]
+ })
+ .compileComponents();
+
+ fixture = TestBed.createComponent(MediaVideosComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/kontor-angular/src/app/kontor/media/media-videos/media-videos.component.ts b/kontor-angular/src/app/kontor/media/media-videos/media-videos.component.ts
new file mode 100644
index 0000000..5b1f52e
--- /dev/null
+++ b/kontor-angular/src/app/kontor/media/media-videos/media-videos.component.ts
@@ -0,0 +1,11 @@
+import { Component } from '@angular/core';
+
+@Component({
+ selector: 'app-media-videos',
+ imports: [],
+ templateUrl: './media-videos.component.html',
+ styleUrl: './media-videos.component.css'
+})
+export class MediaVideosComponent {
+
+}
diff --git a/kontor-angular/src/app/tysc/team/team-list/team-list.component.css b/kontor-angular/src/app/kontor/navigation/navigation.component.css
similarity index 100%
rename from kontor-angular/src/app/tysc/team/team-list/team-list.component.css
rename to kontor-angular/src/app/kontor/navigation/navigation.component.css
diff --git a/kontor-angular/src/app/kontor/navigation/navigation.component.html b/kontor-angular/src/app/kontor/navigation/navigation.component.html
new file mode 100644
index 0000000..f7c8699
--- /dev/null
+++ b/kontor-angular/src/app/kontor/navigation/navigation.component.html
@@ -0,0 +1,6 @@
+
diff --git a/kontor-angular/src/app/tysc/team/team-list/team-list.component.spec.ts b/kontor-angular/src/app/kontor/navigation/navigation.component.spec.ts
similarity index 53%
rename from kontor-angular/src/app/tysc/team/team-list/team-list.component.spec.ts
rename to kontor-angular/src/app/kontor/navigation/navigation.component.spec.ts
index b8a8711..a161d31 100644
--- a/kontor-angular/src/app/tysc/team/team-list/team-list.component.spec.ts
+++ b/kontor-angular/src/app/kontor/navigation/navigation.component.spec.ts
@@ -1,18 +1,18 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
-import { TeamListComponent } from './team-list.component';
+import { NavigationComponent } from './navigation.component';
-describe('TeamListComponent', () => {
- let component: TeamListComponent;
- let fixture: ComponentFixture;
+describe('NavigationComponent', () => {
+ let component: NavigationComponent;
+ let fixture: ComponentFixture;
beforeEach(async () => {
await TestBed.configureTestingModule({
- imports: [TeamListComponent]
+ imports: [NavigationComponent]
})
.compileComponents();
- fixture = TestBed.createComponent(TeamListComponent);
+ fixture = TestBed.createComponent(NavigationComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
diff --git a/kontor-angular/src/app/kontor/navigation/navigation.component.ts b/kontor-angular/src/app/kontor/navigation/navigation.component.ts
new file mode 100644
index 0000000..c5feb48
--- /dev/null
+++ b/kontor-angular/src/app/kontor/navigation/navigation.component.ts
@@ -0,0 +1,12 @@
+import { Component } from '@angular/core';
+import { RouterLink, RouterLinkActive } from '@angular/router';
+
+@Component({
+ selector: 'app-navigation',
+ imports: [RouterLink, RouterLinkActive],
+ templateUrl: './navigation.component.html',
+ styleUrl: './navigation.component.css'
+})
+export class NavigationComponent {
+
+}
diff --git a/kontor-angular/src/app/tysc/tysc-menu/tysc-menu.component.css b/kontor-angular/src/app/kontor/tysc/tysc-cardsets/tysc-cardsets.component.css
similarity index 100%
rename from kontor-angular/src/app/tysc/tysc-menu/tysc-menu.component.css
rename to kontor-angular/src/app/kontor/tysc/tysc-cardsets/tysc-cardsets.component.css
diff --git a/kontor-angular/src/app/kontor/tysc/tysc-cardsets/tysc-cardsets.component.html b/kontor-angular/src/app/kontor/tysc/tysc-cardsets/tysc-cardsets.component.html
new file mode 100644
index 0000000..72cccd1
--- /dev/null
+++ b/kontor-angular/src/app/kontor/tysc/tysc-cardsets/tysc-cardsets.component.html
@@ -0,0 +1 @@
+tysc-cardsets works!
diff --git a/kontor-angular/src/app/kontor/tysc/tysc-cardsets/tysc-cardsets.component.spec.ts b/kontor-angular/src/app/kontor/tysc/tysc-cardsets/tysc-cardsets.component.spec.ts
new file mode 100644
index 0000000..b01812b
--- /dev/null
+++ b/kontor-angular/src/app/kontor/tysc/tysc-cardsets/tysc-cardsets.component.spec.ts
@@ -0,0 +1,23 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { TyscCardsetsComponent } from './tysc-cardsets.component';
+
+describe('TyscCardsetsComponent', () => {
+ let component: TyscCardsetsComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async () => {
+ await TestBed.configureTestingModule({
+ imports: [TyscCardsetsComponent]
+ })
+ .compileComponents();
+
+ fixture = TestBed.createComponent(TyscCardsetsComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/kontor-angular/src/app/kontor/tysc/tysc-cardsets/tysc-cardsets.component.ts b/kontor-angular/src/app/kontor/tysc/tysc-cardsets/tysc-cardsets.component.ts
new file mode 100644
index 0000000..fc3bc35
--- /dev/null
+++ b/kontor-angular/src/app/kontor/tysc/tysc-cardsets/tysc-cardsets.component.ts
@@ -0,0 +1,11 @@
+import { Component } from '@angular/core';
+
+@Component({
+ selector: 'app-tysc-cardsets',
+ imports: [],
+ templateUrl: './tysc-cardsets.component.html',
+ styleUrl: './tysc-cardsets.component.css'
+})
+export class TyscCardsetsComponent {
+
+}
diff --git a/kontor-angular/src/app/tysc/vendor/vendor-list/vendor-list.component.css b/kontor-angular/src/app/kontor/tysc/tysc-navigation/tysc-navigation.component.css
similarity index 100%
rename from kontor-angular/src/app/tysc/vendor/vendor-list/vendor-list.component.css
rename to kontor-angular/src/app/kontor/tysc/tysc-navigation/tysc-navigation.component.css
diff --git a/kontor-angular/src/app/tysc/tysc-menu/tysc-menu.component.html b/kontor-angular/src/app/kontor/tysc/tysc-navigation/tysc-navigation.component.html
similarity index 74%
rename from kontor-angular/src/app/tysc/tysc-menu/tysc-menu.component.html
rename to kontor-angular/src/app/kontor/tysc/tysc-navigation/tysc-navigation.component.html
index 7f5e8d2..1baa47f 100644
--- a/kontor-angular/src/app/tysc/tysc-menu/tysc-menu.component.html
+++ b/kontor-angular/src/app/kontor/tysc/tysc-navigation/tysc-navigation.component.html
@@ -2,7 +2,6 @@
Team
Player
Position
- CardSets
+ CardSets
Vendor
-