ng-idle / core работает нормально в браузере, но выдает ошибку в консоли - PullRequest
0 голосов
/ 24 мая 2019

Я использую ng-idle / core для реализации всплывающего окна ожидания простоя, счетчик минут и секунд отображается правильно, однако, когда счетчик перемещается от 60 секунд до 58 секунд, он выдает ошибку типа «TypeError: Невозможно установить свойство countMinutes» of null ", однако счетчик продолжает падать, и после 0 секунд он также успешно выходит из системы.

Я попытался поставить нулевую проверку вокруг экземпляра компонента, тогда счетчик не достигнет 0, в промежутке между вызовами и выходом из системы.

            export class TimeOutInvokingComponent implements OnInit {
              timedOut = false;
              countDown: number;
              idleTimeOutdialogRef: MatDialogRef<IdleTimeOutComponent>;
              activityTimerSubscription: Subscription;

              constructor(private idle: Idle,
                public idleTimeWarnDialog: MatDialog,
                public sessionExpiredInfoDialog: MatDialog//, private appComponent: AppComponent
                ,private authService: MsalService
              ) {
                idle.setIdle(environment.idle_warning_time);
                idle.setTimeout(environment.idle_counter_time);
                idle.setInterrupts(DEFAULT_INTERRUPTSOURCES);

                idle.onTimeout.subscribe(() => {
                  this.timedOut = true;
                  this.closeidleTimeOutPopup();
                  this.stopidleTimer();
                  this.logout();
                });
                idle.onIdleStart.subscribe(() => {
                  this.openSessionTimeOutDialog(1);
                });

                idle.onTimeoutWarning.subscribe((countdown: any) => {
                  this.countDown = countdown;

                 // if(this.idleTimeOutdialogRef.componentInstance && this.idleTimeOutdialogRef.componentInstance != null){
                    //alert(typeof this.idleTimeOutdialogRef);
                  this.idleTimeOutdialogRef.componentInstance.countMinutes = (Math.floor(countdown / 60));
                  this.idleTimeOutdialogRef.componentInstance.countSeconds = countdown % 60;
                //}
                });

                this.idle.onIdleEnd.subscribe(() => {
                  console.log('on idle end');
                });


              }

              ngOnInit() { }

              openSessionTimeOutDialog(count: number) {

                const timeOutWarndialogConfig = new MatDialogConfig();

                timeOutWarndialogConfig.disableClose = true;
                timeOutWarndialogConfig.autoFocus = true;
                timeOutWarndialogConfig.panelClass = 'custom-modalbox';

                timeOutWarndialogConfig.data = {
                  sessionExpiry: false,
                  countdown : this.countDown,
                  countMinutes : (Math.floor(this.countDown / 60)),
                  countSeconds : this.countDown % 60
                };

                this.idleTimeWarnDialog.closeAll();
                this.idleTimeOutdialogRef = this.idleTimeWarnDialog.open(
                  IdleTimeOutComponent,
                  timeOutWarndialogConfig
                );
                this.idleTimeOutdialogRef.componentInstance.countdown = count;
                this.idleTimeOutdialogRef.afterClosed().subscribe((result: any) => {
                  //console.log(result);
                  if (result !== '' && 'logout' === result) {
                    //console.log('Logout is initiate');

                    const sessionExpdialogConfig = new MatDialogConfig();

                    sessionExpdialogConfig.disableClose = true;
                    sessionExpdialogConfig.autoFocus = true;
                    sessionExpdialogConfig.panelClass = 'custom-modalbox';

                    sessionExpdialogConfig.data = {
                      sessionExpiry: true
                    };
                    this.sessionExpiredInfoDialog.closeAll();
                    const sessionExpireRef = this.sessionExpiredInfoDialog.open(IdleTimeOutComponent, sessionExpdialogConfig);

                    sessionExpireRef.afterClosed().subscribe((result: any) => {
                      if (result !== '' && 'logout' === result) {
                        this.stopidleTimer();
                        //this.appComponent.logout();
                        this.logout();
                      }
                      else {
                        this.initiateIdleTimer();
                      }
                    });
                  }
                });


              }

              initiateIdleTimer() {
                alert("Initiate idle timer");
                this.idle.watch();
                this.timedOut = false;
              }

              initiateActivityTimer() {
                this.activityTimerSubscription = interval(environment.activity_time).subscribe(val => {
                  console.log(val);
                  this.stopidleTimer();
                  //this.appComponent.logout();
                  this.logout();
                });
              }

              stopidleTimer() {
                this.idle.stop();
               }

              closeidleTimeOutPopup() {
                //console.log('closing popups');
                this.idleTimeOutdialogRef.close();
              }

              logout() {

                this.stopidleTimer();
                if(this.activityTimerSubscription){
                  this.activityTimerSubscription.unsubscribe();
                }
                this.authService.logout();

              }

            }

Не уверен, почему this.idleTimeOutdialogRef.componentInstance.countMinutes выдает ошибку после того, как счетчик переходит с 60 на 58. Что мне здесь не хватает. Любые выводы будут очень признательны.

...