import { inject, Injectable, Provider } from '@angular/core'; import { injectDispatch } from '@ngrx/signals/events'; import { homePageEvents } from '../events/home.events'; import { HomeStore } from '../stores/home.store'; /** "My work" on the home page: my tickets, waiting for QA, upcoming releases. */ @Injectable() export class HomeFacade { private readonly store = inject(HomeStore); private readonly dispatch = injectDispatch(homePageEvents); /** My open tickets (most recently updated first) and how many there are. */ readonly mine = this.store.mine; readonly mineTotal = this.store.mineTotal; /** The same, grouped by category (in progress, QA, pending), QA failures first. */ readonly mineByCategory = this.store.mineByCategory; readonly qaFailed = this.store.qaFailed; /** Tickets of my projects in a QA-category status (anyone's). */ readonly awaitingQa = this.store.awaitingQa; readonly awaitingQaTotal = this.store.awaitingQaTotal; /** Open tickets I follow, whoever works on them. */ readonly following = this.store.following; readonly followingTotal = this.store.followingTotal; /** Planned releases of my projects, soonest first. */ readonly releases = this.store.releases; /** False until the first load: show skeletons, not empty states. */ readonly loaded = this.store.loaded; readonly loading = this.store.loading; readonly error = this.store.error; /** Loads my work; call again to refresh (e.g. when the tab regains focus). */ load(): void { this.dispatch.opened(); } } /** «Mi trabajo» on the home page: provided by the route that shows it, not the root. */ export function provideHomeFacade(): Provider[] { return [HomeStore, HomeFacade]; }