From 4082932095ad388e2993d39e5716c1fd34529784 Mon Sep 17 00:00:00 2001 From: eneller Date: Sat, 31 Jan 2026 20:36:49 +0100 Subject: [PATCH] feat: dataservice --- src/app/app.component.html | 7 +++--- src/app/app.routes.ts | 17 ++++++++++++- src/app/data.service.spec.ts | 16 ++++++++++++ src/app/data.service.ts | 25 +++++++++++++++++++ .../screen-basic/screen-basic.component.ts | 7 +++--- .../screen-edit/screen-edit.component.html | 4 +-- src/app/screen-edit/screen-edit.component.ts | 9 ++++--- 7 files changed, 71 insertions(+), 14 deletions(-) create mode 100644 src/app/data.service.spec.ts create mode 100644 src/app/data.service.ts diff --git a/src/app/app.component.html b/src/app/app.component.html index 89e1eca..281de12 100644 --- a/src/app/app.component.html +++ b/src/app/app.component.html @@ -1,5 +1,4 @@
- -
- - + + + \ No newline at end of file diff --git a/src/app/app.routes.ts b/src/app/app.routes.ts index dc39edb..9dd2521 100644 --- a/src/app/app.routes.ts +++ b/src/app/app.routes.ts @@ -1,3 +1,18 @@ import { Routes } from '@angular/router'; +import { ScreenBasicComponent } from './screen-basic/screen-basic.component'; +import { ScreenEditComponent } from './screen-edit/screen-edit.component'; +import { ScreenRotationsComponent } from './screen-rotations/screen-rotations.component'; +import { AppComponent } from './app.component'; -export const routes: Routes = []; +export const routes: Routes = [ + { + path: '', + component: AppComponent, + children: [ + { path: '', redirectTo: 'edit', pathMatch: 'full' }, + { path: 'edit', component: ScreenEditComponent }, + { path: 'basic', component: ScreenBasicComponent }, + { path: 'rotations', component: ScreenRotationsComponent } + ] + } +]; diff --git a/src/app/data.service.spec.ts b/src/app/data.service.spec.ts new file mode 100644 index 0000000..38e8d9e --- /dev/null +++ b/src/app/data.service.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; + +import { DataService } from './data.service'; + +describe('DataService', () => { + let service: DataService; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(DataService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/src/app/data.service.ts b/src/app/data.service.ts new file mode 100644 index 0000000..b2d1f7a --- /dev/null +++ b/src/app/data.service.ts @@ -0,0 +1,25 @@ +import { Injectable } from '@angular/core'; +import { Player } from './model'; + +@Injectable({ + providedIn: 'root' +}) +export class DataService { + private players: Player[] = []; + + setPlayers(players: Player[]){ + this.players = players; + } + + addPlayer(player: Player): boolean{ + if (Player.isNew(player, this.players)){ + this.players.push(player); + return true + } + return false + } + getPlayers(): Player[] { + let clone =Object.assign([],this.players); + return clone + } +} diff --git a/src/app/screen-basic/screen-basic.component.ts b/src/app/screen-basic/screen-basic.component.ts index 46fc6d7..9b2a70a 100644 --- a/src/app/screen-basic/screen-basic.component.ts +++ b/src/app/screen-basic/screen-basic.component.ts @@ -1,11 +1,12 @@ // Original Team Generation Screen for arbitrary size and number of teams -import { Component, Input, OnInit} from '@angular/core'; +import { Component, inject, Input, OnInit} from '@angular/core'; import { FormsModule } from '@angular/forms'; import { RouterOutlet, ActivatedRoute } from '@angular/router'; import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; import { CommonModule } from '@angular/common'; import { Player } from '../model'; import { iter } from '../util'; +import { DataService } from '../data.service'; @Component({ selector: 'app-screen-basic', @@ -14,7 +15,7 @@ import { iter } from '../util'; styleUrl: './screen-basic.component.less' }) export class ScreenBasicComponent { - @Input() players!: Player[]; + data = inject(DataService); numTeamsSelectorValue = "2"; numTeamsSelected = 2; nTeamsValue = "4"; @@ -30,7 +31,7 @@ export class ScreenBasicComponent { let teams = Array.from({ length: this.numTeamsSelected }, () => []); // clone array here - let localPlayers: Player[] = Object.assign([],this.players); + let localPlayers: Player[] = this.data.getPlayers(); let nameslen = localPlayers.length; let iterator = iter(teams); diff --git a/src/app/screen-edit/screen-edit.component.html b/src/app/screen-edit/screen-edit.component.html index 0d26edb..8913ac5 100644 --- a/src/app/screen-edit/screen-edit.component.html +++ b/src/app/screen-edit/screen-edit.component.html @@ -1,5 +1,5 @@
-

Players: {{ players.length }}

+

Players: {{ data.getPlayers().length }}

    - @for (player of players; track $index) { + @for (player of data.getPlayers(); track $index) {
  • {{ player.name }}
  • diff --git a/src/app/screen-edit/screen-edit.component.ts b/src/app/screen-edit/screen-edit.component.ts index 54ca885..d321b86 100644 --- a/src/app/screen-edit/screen-edit.component.ts +++ b/src/app/screen-edit/screen-edit.component.ts @@ -1,4 +1,4 @@ -import { Component, Input, ViewChild } from '@angular/core'; +import { Component, inject, Input, ViewChild } from '@angular/core'; import { NgbAlert, NgbModal } from '@ng-bootstrap/ng-bootstrap'; import { Player } from '../model'; import { ModalRotationsComponent } from '../modal-rotations/modal-rotations.component'; @@ -6,6 +6,7 @@ import { FormsModule } from '@angular/forms'; import { Subject } from 'rxjs/internal/Subject'; import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; import { debounceTime, tap } from 'rxjs/operators'; +import { DataService } from '../data.service'; @Component({ selector: 'app-screen-edit', @@ -14,7 +15,7 @@ import { debounceTime, tap } from 'rxjs/operators'; styleUrl: './screen-edit.component.less' }) export class ScreenEditComponent { - @Input() players!: Player[]; + data = inject(DataService); @ViewChild('selfClosingAlert', { static: false })selfClosingAlert!: NgbAlert; private _message$ = new Subject(); newItem: string = ""; @@ -34,9 +35,9 @@ export class ScreenEditComponent { const name = this.newItem.trim() if (name) { let newPlayer = new Player(name); - if (Player.isNew(newPlayer, this.players)){ - this.players.push(newPlayer); + if(this.data.addPlayer(newPlayer)){ this.newItem = ''; + return } else{ this.setAlertMessage(newPlayer.name);