UNPKG

imng-kendo-ngrx-idle

Version:

This library was generated with [Nx](https://nx.dev).

1 lines 14.6 kB
{"version":3,"file":"imng-kendo-ngrx-idle.mjs","sources":["../../../../libs/imng-kendo-ngrx-idle/src/lib/+state/idle.actions.ts","../../../../libs/imng-kendo-ngrx-idle/src/lib/idle-config.ts","../../../../libs/imng-kendo-ngrx-idle/src/lib/+state/idle.reducer.ts","../../../../libs/imng-kendo-ngrx-idle/src/lib/+state/idle.selectors.ts","../../../../libs/imng-kendo-ngrx-idle/src/lib/+state/idle.effects.ts","../../../../libs/imng-kendo-ngrx-idle/src/lib/+state/idle.facade.ts","../../../../libs/imng-kendo-ngrx-idle/src/lib/idle-warning/idle-warning.component.ts","../../../../libs/imng-kendo-ngrx-idle/src/lib/imng-ngrx-idle.module.ts","../../../../libs/imng-kendo-ngrx-idle/src/imng-kendo-ngrx-idle.ts"],"sourcesContent":["import { createAction } from '@ngrx/store';\nimport { IdleConfig } from '../idle-config';\nimport { createPayloadAction } from 'imng-ngrx-utils';\n\nexport const onSessionExtended = createAction(\n '[Idle] Session Extended'\n);\nexport const onSessionTimingOut = createPayloadAction<IdleConfig>(\n '[Idle] Session Timing Out'\n);\nexport const signOutRedirect = createAction('[Oidc] sign out redirect');\n","import { InjectionToken } from '@angular/core';\n\nexport interface IdleConfig {\n timeoutWarningInMs: number;\n autoLogoutInMs: number;\n}\nexport const IDLE_CONFIG = new InjectionToken<IdleConfig>('idle-config');\n","import { createFeature, createReducer, on } from '@ngrx/store';\nimport * as idleActions from './idle.actions';\n\nexport const IDLE_FEATURE_KEY = 'idle';\n\nexport interface IdleState {\n isTimingOut: boolean;\n timeoutSpanInMs: number | undefined;\n}\n\nexport const initialState: IdleState = {\n isTimingOut: false,\n timeoutSpanInMs: undefined,\n};\n\nexport const idleFeature = createFeature({\n name: IDLE_FEATURE_KEY,\n reducer: createReducer(\n initialState,\n on(idleActions.onSessionTimingOut,\n (state, { payload }): IdleState => ({\n ...state,\n isTimingOut: true,\n timeoutSpanInMs: payload.autoLogoutInMs - payload.timeoutWarningInMs,\n })),\n on(idleActions.onSessionExtended, idleActions.signOutRedirect,\n (state): IdleState => ({\n ...state,\n isTimingOut: false,\n timeoutSpanInMs: undefined,\n })),\n )\n});\n","import { createSelector } from '@ngrx/store';\nimport { oidcFeature } from 'imng-oidc-client';\nimport { idleFeature } from './idle.reducer';\n\nconst getIsTimingOut = idleFeature.selectIsTimingOut;\nconst getTimeoutSpanInMs = idleFeature.selectTimeoutSpanInMs;\n\nconst selectLoggedInAndIsNotTimingOut = createSelector(\n oidcFeature.selectIsLoggedIn,\n idleFeature.selectIsTimingOut,\n (isLoggedIn, IsTimingOut) => isLoggedIn && !IsTimingOut,\n);\n\nexport const idleQuery = { getIsTimingOut, getTimeoutSpanInMs, selectLoggedInAndIsNotTimingOut };\n","import { Injectable, inject } from '@angular/core';\nimport { Actions, createEffect } from '@ngrx/effects';\nimport { map, filter, switchMap } from 'rxjs/operators';\nimport { timer, Observable } from 'rxjs';\n\nimport { Store } from '@ngrx/store';\nimport { signOutRedirect, onSessionTimingOut } from './idle.actions';\nimport { IDLE_CONFIG, IdleConfig } from '../idle-config';\nimport { idleQuery } from './idle.selectors';\n\n@Injectable({ providedIn: 'root' })\nexport class IdleEffects {\n private readonly idleConfig = inject<IdleConfig>(IDLE_CONFIG);\n private readonly store = inject(Store);\n private readonly actions$ = inject(Actions);\n\n public signOutRedirect$ = createEffect(() => {\n return this.getLoggedInActionPipe().pipe(\n switchMap(() => timer(this.idleConfig.autoLogoutInMs)),\n map(() => signOutRedirect()),\n );\n });\n\n public timingOut$ = createEffect(() => {\n return this.getLoggedInActionPipe().pipe(\n switchMap(() => timer(this.idleConfig.timeoutWarningInMs)),\n map(() => onSessionTimingOut(this.idleConfig)),\n );\n });\n\n public getLoggedInActionPipe(): Observable<boolean> {\n return this.actions$.pipe(\n switchMap(() =>\n this.store\n .select(idleQuery.selectLoggedInAndIsNotTimingOut)\n .pipe(filter((val) => val)),\n ),\n );\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { Store } from '@ngrx/store';\nimport { idleQuery } from './idle.selectors';\nimport { Observable } from 'rxjs';\nimport { onSessionExtended } from './idle.actions';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class IdleFacade {\n private readonly store = inject(Store);\n\n\n isTimingOut$: Observable<boolean> = this.store.select(\n idleQuery.getIsTimingOut\n );\n timeOutSpanInMs$: Observable<number | undefined> = this.store.select(\n idleQuery.getTimeoutSpanInMs\n );\n\n public extendSession(): void {\n this.store.dispatch(onSessionExtended());\n }\n}\n","import { Component, OnInit, OnDestroy, inject } from '@angular/core';\nimport { IdleFacade } from '../+state/idle.facade';\nimport { BehaviorSubject, Subscription, interval, Observable } from 'rxjs';\nimport { tap, filter, switchMap, map } from 'rxjs/operators';\nimport { KENDO_DIALOG } from '@progress/kendo-angular-dialog';\nimport { AsyncPipe } from '@angular/common';\nimport { KENDO_BUTTON } from '@progress/kendo-angular-buttons';\n\n@Component({\n selector: 'imng-idle-warning',\n imports: [AsyncPipe, KENDO_DIALOG, KENDO_BUTTON],\n template: `@if (isSessionTimingOut$ | async) {\n <kendo-dialog\n title=\"Idle Session Warning\"\n (close)=\"close()\"\n [minWidth]=\"250\"\n [width]=\"450\">\n <p class=\"warn-msg\">Do you wish to extend your session?</p>\n <p class=\"warn-msg\">{{ secondsRemaining$ | async }} Seconds remaining</p>\n <kendo-dialog-actions>\n <button kendoButton (click)=\"close()\">No</button>\n <button kendoButton (click)=\"extend()\" themeColor=\"primary\">Yes</button>\n </kendo-dialog-actions>\n </kendo-dialog>\n }`,\n styles: [\n `\n .warn-msg {\n margin: 30px;\n text-align: center;\n }\n `,\n ],\n})\nexport class IMNG_KENDO_IDLE_WARNING implements OnInit, OnDestroy {\n readonly idleFacade = inject(IdleFacade);\n\n public readonly isSessionTimingOut$ = new BehaviorSubject<boolean>(false);\n public secondsRemaining$?: Observable<number>;\n private timeoutSub?: Subscription;\n\n public ngOnInit(): void {\n let timeOutSpan = 0;\n const msInSec = 1000;\n this.timeoutSub = this.idleFacade.isTimingOut$\n .pipe(tap((value) => this.isSessionTimingOut$.next(value)))\n .subscribe();\n this.secondsRemaining$ = this.idleFacade.timeOutSpanInMs$.pipe(\n filter((t) => (t ?? 0) > 0),\n tap((t) => (timeOutSpan = t as number)),\n switchMap(() => interval(msInSec)),\n map(() => Math.floor(timeOutSpan / msInSec)),\n tap(() => (timeOutSpan -= msInSec)),\n );\n }\n\n public ngOnDestroy(): void {\n this.timeoutSub?.unsubscribe();\n }\n\n public close(): void {\n this.isSessionTimingOut$.next(false);\n }\n\n public extend(): void {\n this.idleFacade.extendSession();\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule, ModuleWithProviders } from '@angular/core';\nimport { EffectsModule } from '@ngrx/effects';\nimport { StoreModule } from '@ngrx/store';\nimport { IdleEffects } from './+state/idle.effects';\nimport { IdleFacade } from './+state/idle.facade';\nimport { idleFeature } from './+state/idle.reducer';\nimport { IdleConfig, IDLE_CONFIG } from './idle-config';\nimport { IMNG_KENDO_IDLE_WARNING } from './idle-warning/idle-warning.component';\n\n@NgModule({\n imports: [\n CommonModule,\n StoreModule.forFeature(idleFeature),\n EffectsModule.forFeature([IdleEffects]),\n IMNG_KENDO_IDLE_WARNING,\n ],\n exports: [IMNG_KENDO_IDLE_WARNING],\n})\nexport class ImngNgrxIdleModule {\n static forRoot(\n idleConfig: IdleConfig,\n ): ModuleWithProviders<ImngNgrxIdleModule> {\n return {\n ngModule: ImngNgrxIdleModule,\n providers: [{ provide: IDLE_CONFIG, useValue: idleConfig }, IdleFacade],\n };\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["idleActions.onSessionTimingOut","idleActions.onSessionExtended","idleActions.signOutRedirect","i1","i2"],"mappings":"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"}