fix(challenge29): challenge 29

This commit is contained in:
ThomasL
2023-07-05 16:28:59 +02:00
parent 9534fdcd24
commit b7cd85231c
2 changed files with 23 additions and 20 deletions

View File

@@ -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;

View File

@@ -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<TicketState>
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<void>(
pipe(
tap(() => this.patchState({ loading: true, error: '' })),
@@ -159,9 +167,4 @@ export class TicketStore
)
)
);
ngrxOnStateInit() {
this.loadTickets();
this.loadUsers();
}
}