prepara update

This commit is contained in:
2026-07-31 20:47:15 +02:00
parent a0908e1b5a
commit b02c885b83
74 changed files with 1379 additions and 883 deletions

View File

@@ -1,46 +1,41 @@
// Angular
import { Injectable, inject } from '@angular/core';
// Ngrx
import { Store } from '@ngrx/store';
import { Injectable } from '@angular/core';
// Rxjs
import { Observable } from 'rxjs';
import { BehaviorSubject, Observable, combineLatest } from 'rxjs';
import { map } from 'rxjs/operators';
// State
import { Browser, Device, Size } from '../entities/device-configs.model';
import * as fromActions from '../state/device-configs.actions';
import * as fromState from '../state/device-configs.reducer';
import * as fromSelectors from '../state/device-configs.selectors';
import { getUserBrowser } from '../services/device-configs.service';
@Injectable({ providedIn: 'root' })
export class DeviceConfigsFacade {
// `inject()` en vez de parámetro de constructor: los inicializadores de
// propiedad de abajo se evalúan antes que los parámetros del constructor.
private readonly store = inject<Store<fromState.DeviceConfigsState>>(Store);
private readonly deviceSubject = new BehaviorSubject<Device>('DESKTOP');
private readonly sizeSubject = new BehaviorSubject<Size | null>(null);
private readonly browserSubject = new BehaviorSubject<Browser>('UNKNOWN');
// Device
readonly device$: Observable<Device> = this.store.select(
fromSelectors.getDevice,
);
readonly device$: Observable<Device> = this.deviceSubject.asObservable();
// `null` hasta que se resuelve el tamaño (así lo declara el estado inicial)
readonly size$: Observable<Size | null> = this.store.select(
fromSelectors.getSize,
);
readonly isSmallDevice$: Observable<boolean> = this.store.select(
fromSelectors.getIsSmallDevice,
);
readonly size$: Observable<Size | null> = this.sizeSubject.asObservable();
readonly isSmallDevice$: Observable<boolean> = combineLatest([
this.device$,
this.size$,
]).pipe(map(([device, size]) => device !== 'DESKTOP' && size !== 'LARGE'));
// Browser
readonly browser$: Observable<Browser> = this.store.select(
fromSelectors.getBrowser,
);
readonly browser$: Observable<Browser> = this.browserSubject.asObservable();
getBrowser(): void {
this.store.dispatch(fromActions.BrowserActions.getBrowser());
this.browserSubject.next(getUserBrowser());
}
setDevice(device: Device): void {
this.store.dispatch(fromActions.DeviceActions.saveDeviceType({ device }));
this.deviceSubject.next(device);
}
setSize(size: Size): void {
this.sizeSubject.next(size);
}
}