UNPKG

@tapsellorg/angular-material-library

Version:

Angular library for Tapsell

1 lines 10.6 kB
{"version":3,"file":"tapsellorg-angular-material-library-src-lib-countdown-timer.mjs","sources":["../../projects/pegah-library/src/lib/countdown-timer/countdown-timer.service.ts","../../projects/pegah-library/src/lib/countdown-timer/countdown-timer.component.ts","../../projects/pegah-library/src/lib/countdown-timer/countdown-timer.component.html","../../projects/pegah-library/src/lib/countdown-timer/countdown-timer.module.ts","../../projects/pegah-library/src/lib/countdown-timer/tapsellorg-angular-material-library-src-lib-countdown-timer.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class PghCountdownTimerService {\n static readonly DEFAULT_DURATION = 20;\n\n restartTimerSubject = new Subject<number>();\n restartTimer$ = this.restartTimerSubject.asObservable();\n\n restartTimer(duration?: number) {\n this.restartTimerSubject.next(duration ?? PghCountdownTimerService.DEFAULT_DURATION);\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n input,\n model,\n OnInit,\n output,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { merge, Subject, timer } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { withDestroy } from '@tapsellorg/angular-material-library/src/lib/common';\nimport { PghCountdownTimerService } from './countdown-timer.service';\n\n@Component({\n selector: 'pgh-countdown-timer',\n templateUrl: './countdown-timer.component.html',\n styleUrls: ['./countdown-timer.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class PghCountdownTimerComponent extends withDestroy() implements OnInit {\n durationInSeconds = model<number>(PghCountdownTimerService.DEFAULT_DURATION);\n startAutomatically = input<boolean>(true);\n restartButtonText = input<string>('RESTART_BUTTON_TEXT');\n buttonType = input<'button' | 'submit'>('button');\n timerFinished = output<boolean>();\n restartTimerClick = output();\n\n private readonly _stop = new Subject<void>();\n\n public remainingSeconds = signal<number>(0);\n public remainingMinutes = signal<number>(0);\n private elapsedTime: number = 0;\n\n isTimerRunning = signal<boolean>(false);\n\n private readonly TIMER_DELAY = 1000;\n private readonly TIMER_INTERVAL = 1000;\n private readonly SECONDS_IN_A_MINUTE = 60;\n\n constructor(\n private changeDetectorRef: ChangeDetectorRef,\n private pghCountdownTimerService: PghCountdownTimerService,\n ) {\n super();\n }\n\n ngOnInit(): void {\n if (this.startAutomatically()) {\n this.startTimer();\n }\n this.pghCountdownTimerService.restartTimer$\n .pipe(takeUntil(this._destroyed$))\n .subscribe(duration => {\n this.startTimer(duration);\n });\n }\n\n onRestartTimerClick() {\n this.restartTimerClick.emit();\n }\n\n private startTimer(duration: number = this.durationInSeconds()) {\n if (this.isTimerRunning()) {\n console.error('The countdown timer is already running.');\n return;\n }\n\n if (duration <= 0) {\n console.error('The countdown timer duration must be a positive integer.');\n return;\n }\n\n this.durationInSeconds.set(duration);\n\n this.isTimerRunning.set(true);\n this.elapsedTime = 0;\n\n this.allocateTimeUnits(this.durationInSeconds());\n this.changeDetectorRef.markForCheck();\n\n timer(this.TIMER_DELAY, this.TIMER_INTERVAL)\n .pipe(takeUntil(merge(this._destroyed$, this._stop)))\n .subscribe(() => {\n this.getTimeDifference();\n });\n }\n\n private getTimeDifference() {\n this.elapsedTime++;\n const remainingDuration = this.durationInSeconds() - this.elapsedTime;\n\n if (remainingDuration < 0) {\n this._stop.next();\n this.timerFinished.emit(true);\n this.isTimerRunning.set(false);\n } else {\n this.allocateTimeUnits(remainingDuration);\n }\n\n this.changeDetectorRef.markForCheck();\n }\n\n private allocateTimeUnits(timeDifference: number) {\n this.remainingSeconds.set(timeDifference % this.SECONDS_IN_A_MINUTE);\n this.remainingMinutes.set(Math.floor(timeDifference / this.SECONDS_IN_A_MINUTE));\n }\n}\n","<button\n mat-stroked-button\n color=\"primary\"\n class=\"big-mat-button font-monospaced-numbers w-100\"\n (click)=\"onRestartTimerClick()\"\n [disabled]=\"isTimerRunning()\"\n [type]=\"buttonType()\"\n>\n <div class=\"d-flex align-items-center justify-content-center\">\n @if (!isTimerRunning()) {\n <mat-icon svgIcon=\"update\" class=\"square-24 me-1\"></mat-icon>\n } @if (!isTimerRunning()) {\n <span>{{ restartButtonText() | translate }}</span>\n } @if (isTimerRunning()) {\n <span>\n {{ restartButtonText() | translate }} {{ 'RESTART_BUTTON_TEXT_CONJUNCTION' | translate\n }}{{ ' ' }}{{ remainingMinutes() | number : '2.0' }}:{{ remainingSeconds() | number : '2.0' }}\n </span>\n }\n </div>\n</button>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PghCountdownTimerComponent } from './countdown-timer.component';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { TranslateModule } from '@tapsellorg/angular-material-library/src/lib/translate';\n\n@NgModule({\n declarations: [PghCountdownTimerComponent],\n imports: [CommonModule, MatButtonModule, MatIconModule, TranslateModule],\n exports: [PghCountdownTimerComponent],\n})\nexport class PghCountdownTimerModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.PghCountdownTimerService"],"mappings":"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"}