import { ChangeDetectionStrategy, Component, input, output } from '@angular/core'; import { AsyncPipe, DatePipe } from '@angular/common'; import { inject } from '@angular/core'; import { QueryClient } from '@tanstack/angular-query-experimental'; import { filter, map, shareReplay, switchMap, tap, timer } from 'rxjs'; import { UnixTimePipe } from '@/core/pipes/unix-time.pipe'; import { injectCatalogsService } from '@/core/services/catalogs.service'; @Component({ selector: 'app-session-times', templateUrl: './session-times.component.html', styleUrl: './session-times.component.scss', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [AsyncPipe, UnixTimePipe], providers: [DatePipe], }) export class SessionTimesComponent { private queryClient = inject(QueryClient); private catalogServ = injectCatalogsService(); hasTimes = output(); showTimes = input(true); copy$ = this.catalogServ.getWelcomeCopy(); times$ = this.catalogServ.getSessionHours().pipe( shareReplay(1), tap((times) => this.hasTimes.emit(times.length > 0)) ); checkTimes$ = this.times$.pipe( switchMap((sessionHours) => timer(0, 5_000).pipe( map(() => { const currentTime = Math.floor(Date.now() / 1000); return sessionHours.some((sessionHour) => currentTime >= sessionHour.unixtime_end); }) ) ), filter(Boolean), tap(() => this.queryClient.invalidateQueries({ queryKey: ['sessionHours'] })) ); }