diff --git a/apps/testing-todos-list/src/app/backend.service.ts b/apps/testing-todos-list/src/app/backend.service.ts index 550cb79..2af814b 100644 --- a/apps/testing-todos-list/src/app/backend.service.ts +++ b/apps/testing-todos-list/src/app/backend.service.ts @@ -6,19 +6,19 @@ export type User = { name: string; }; -export type Ticket = { +export interface BaseTicket { id: number; description: string; - assigneeId: number | null; completed: boolean; -}; +} -export type TicketUser = { - id: number; - description: string; +export interface Ticket extends BaseTicket { + assigneeId: number | null; +} + +export interface TicketUser extends BaseTicket { assignee: string; - completed: boolean; -}; +} function randomDelay() { return Math.random() * 1000; diff --git a/apps/testing-todos-list/src/app/list/ticket.store.ts b/apps/testing-todos-list/src/app/list/ticket.store.ts index 59bf902..8445aa1 100644 --- a/apps/testing-todos-list/src/app/list/ticket.store.ts +++ b/apps/testing-todos-list/src/app/list/ticket.store.ts @@ -1,7 +1,8 @@ -import { Injectable } from '@angular/core'; +import { Injectable, inject } from '@angular/core'; import { ComponentStore, OnStateInit, + OnStoreInit, tapResponse, } from '@ngrx/component-store'; import { pipe } from 'rxjs'; @@ -27,7 +28,7 @@ const initialState: TicketState = { @Injectable() export class TicketStore extends ComponentStore - implements OnStateInit + implements OnStoreInit, OnStateInit { readonly users$ = this.select((state) => state.users); readonly error$ = this.select((state) => state.error); @@ -35,15 +36,11 @@ export class TicketStore private readonly ticketsInput$ = this.select((state) => state.tickets); private readonly search$ = this.select((state) => state.search); - constructor(private backend: BackendService) { - super(initialState); - } - private readonly ticketsUsers$ = this.select( this.users$, this.ticketsInput$, (users, tickets) => - users + users && users.length > 0 ? tickets.map((ticket) => ({ ...ticket, assignee: @@ -78,6 +75,17 @@ export class TicketStore search, })); + private backend = inject(BackendService); + + ngrxOnStoreInit() { + this.setState(initialState); + } + + ngrxOnStateInit() { + this.loadTickets(); + this.loadUsers(); + } + readonly loadTickets = this.effect( pipe( tap(() => this.patchState({ loading: true, error: '' })), @@ -159,9 +167,4 @@ export class TicketStore ) ) ); - - ngrxOnStateInit() { - this.loadTickets(); - this.loadUsers(); - } }