@bravobit/bb-foundation 0.52.4 → 0.52.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { ActivatedRouteSnapshot, RouterStateSnapshot, UrlTree } from '@angular/router';
|
|
2
|
+
import { StorageOption } from '@bravobit/bb-foundation/storage';
|
|
2
3
|
import { InjectionToken } from '@angular/core';
|
|
3
4
|
export type AuthStrategy = 'httpOnlyCookie' | 'browserStorage';
|
|
4
5
|
export interface AuthConfig {
|
|
5
6
|
applicationId: string;
|
|
6
7
|
strategy: AuthStrategy;
|
|
8
|
+
preferredStorageOptions?: StorageOption[];
|
|
7
9
|
http?: {
|
|
8
10
|
scheme?: string;
|
|
9
11
|
header?: string;
|
|
@@ -304,7 +304,7 @@ class Auth {
|
|
|
304
304
|
// We select a storage strategy based on the server/browser.
|
|
305
305
|
// Only cookies CAN work on the server.
|
|
306
306
|
const storageStrategy = this._platform.isBrowser
|
|
307
|
-
? this._storage.select([StorageOption.Cookie, StorageOption.Local])
|
|
307
|
+
? this._storage.select(this._config?.preferredStorageOptions ?? [StorageOption.Cookie, StorageOption.Local])
|
|
308
308
|
: this._storage.cookie;
|
|
309
309
|
// Starting the new session.
|
|
310
310
|
this.session = new AuthSession({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bravobit-bb-foundation-auth.mjs","sources":["../../../projects/bb-foundation/auth/src/lib/interfaces/config.interface.ts","../../../projects/bb-foundation/auth/src/lib/tokens/use-authorization.token.ts","../../../projects/bb-foundation/auth/src/lib/helpers/jwt.helper.ts","../../../projects/bb-foundation/auth/src/lib/providers/verify.provider.ts","../../../projects/bb-foundation/auth/src/lib/providers/email.provider.ts","../../../projects/bb-foundation/auth/src/lib/auth.session.ts","../../../projects/bb-foundation/auth/src/lib/auth.service.ts","../../../projects/bb-foundation/auth/src/lib/directives/authenticated.directive.ts","../../../projects/bb-foundation/auth/src/lib/guards/anonymous.guard.ts","../../../projects/bb-foundation/auth/src/lib/guards/authenticated.guard.ts","../../../projects/bb-foundation/auth/src/lib/acting.service.ts","../../../projects/bb-foundation/auth/src/lib/acting.interceptor.ts","../../../projects/bb-foundation/auth/src/lib/auth.interceptor.ts","../../../projects/bb-foundation/auth/src/lib/auth.config.ts","../../../projects/bb-foundation/auth/src/lib/auth.module.ts","../../../projects/bb-foundation/auth/src/bravobit-bb-foundation-auth.ts"],"sourcesContent":["import {ActivatedRouteSnapshot, RouterStateSnapshot, UrlTree} from '@angular/router';\nimport {InjectionToken} from '@angular/core';\n\nexport type AuthStrategy = 'httpOnlyCookie' | 'browserStorage';\n\nexport interface AuthConfig {\n applicationId: string;\n strategy: AuthStrategy;\n\n http?: {\n scheme?: string,\n header?: string\n };\n\n redirects?: {\n authenticated?: string | string[];\n unauthenticated?: string | string[];\n };\n setRedirectOnFailedAuth?: boolean;\n\n interceptActing?: boolean;\n\n bootstrap?: boolean;\n providers?: string[];\n autoRefresh?: boolean;\n}\n\nexport const AUTH_CONFIG = new InjectionToken<AuthConfig>('auth config');\n\nexport const AUTH_REDIRECT_HANDLER = new InjectionToken<AuthRedirectHandler>('auth redirect handler');\n\nexport interface AuthRedirectHandler {\n\n onFailedAuthenticated(snapshot?: ActivatedRouteSnapshot, state?: RouterStateSnapshot): boolean | UrlTree;\n\n onFailedAnonymous(snapshot?: ActivatedRouteSnapshot, state?: RouterStateSnapshot): boolean | UrlTree;\n\n}\n","import {HttpContextToken} from '@angular/common/http';\n\nexport const USE_AUTHORIZATION = new HttpContextToken(() => true);","import {AuthToken} from '../interfaces/token.interface';\n\nexport class JwtHelper {\n\n decode(token: string) {\n try {\n if (token === null || token === undefined) {\n return null;\n }\n\n const json = JSON.parse(\n this.urlDecode(token.split('.')[1])\n );\n\n return this.parse(json);\n } catch {\n return null;\n }\n }\n\n private urlDecode(token: string | null) {\n const value = token || '';\n let output = value\n .replace(/-/g, '+')\n .replace(/_/g, '/');\n\n switch (output.length % 4) {\n case 0:\n break;\n case 2:\n output += '==';\n break;\n case 3:\n output += '=';\n break;\n default:\n throw 'Illegal base64url string!';\n }\n\n try {\n return this.baseDecodeUnicode(output);\n } catch {\n return atob(output);\n }\n }\n\n private baseDecodeUnicode = (value: string) => {\n return decodeURIComponent(atob(value).replace(/(.)/g, (_, p) => {\n let code = p.charCodeAt(0).toString(16).toUpperCase();\n if (code.length < 2) {\n code = '0' + code;\n }\n return '%' + code;\n }));\n };\n\n private parse = (data: object) => {\n return {\n id: data['jti'] ?? null,\n type: data['typ'] ?? null,\n audience: data['aud'] ?? null,\n issuer: data['iss'] ?? null,\n subject: data['sub'] ?? null,\n role: data['role'] ?? null,\n notValidBefore: this.parseDate(data['nbf']),\n expiresAt: this.parseDate(data['exp']),\n issuedAt: this.parseDate(data['iat'])\n } as AuthToken;\n };\n\n private parseDate = (epochInSeconds: number) => {\n if (!epochInSeconds || epochInSeconds <= 0) {\n return null;\n }\n\n return new Date(epochInSeconds * 1000);\n };\n\n}\n","import {AuthProvider, AuthProviderResponse, AuthProviderResult} from '../interfaces/provider.interface';\nimport {HttpClient} from '@angular/common/http';\nimport {firstValueFrom} from 'rxjs';\n\nexport class AuthVerifyProvider implements AuthProvider {\n\n constructor(private _code: string,\n private _verifyToken: string,\n private _endpoint: string) {\n }\n\n async authenticate(httpClient: HttpClient): Promise<AuthProviderResult> {\n // Execute API call.\n const data$ = httpClient.post<Pick<AuthProviderResponse, 'token' | 'refresh_token' | 'user'>>(this._endpoint, {\n token: this._code,\n verify_token: this._verifyToken\n });\n\n const data = await firstValueFrom(data$);\n return {\n accessToken: data?.token,\n refreshToken: data?.refresh_token,\n user: data?.user\n };\n }\n\n}\n","import {AuthProvider, AuthProviderResponse, AuthProviderResult} from '../interfaces/provider.interface';\nimport {HttpClient} from '@angular/common/http';\nimport {firstValueFrom} from 'rxjs';\n\nexport class AuthEmailProvider implements AuthProvider {\n\n constructor(private _email: string,\n private _password: string,\n private _endpoint: string) {\n }\n\n async authenticate(httpClient: HttpClient): Promise<AuthProviderResult> {\n // Execute API call.\n const data$ = httpClient.post<AuthProviderResponse>(this._endpoint, {\n email: this._email,\n password: this._password\n });\n\n const data = await firstValueFrom(data$);\n return {\n accessToken: data?.token,\n refreshToken: data?.refresh_token,\n user: data?.user,\n provider: data?.provider,\n verifyToken: data?.verify_token\n };\n }\n\n}\n","import {StorageStrategy} from '@bravobit/bb-foundation/storage';\nimport {AuthStrategy} from './interfaces/config.interface';\nimport {AuthToken} from './interfaces/token.interface';\nimport {JwtHelper} from './helpers/jwt.helper';\nimport {shareReplay} from 'rxjs/operators';\nimport {BehaviorSubject} from 'rxjs';\n\nexport class AuthSession {\n\n // Readonly data.\n private readonly _jwt = new JwtHelper();\n private readonly _storage: StorageStrategy | null;\n private readonly _accessTokenStorageKey: string;\n private readonly _refreshTokenStorageKey: string;\n private readonly _userStorageKey: string;\n private readonly _strategy: AuthStrategy;\n\n // Token strings.\n private _accessTokenString: string | null = null;\n private _refreshTokenString: string | null = null;\n\n // Token payloads.\n private _accessTokenPayload: AuthToken | null = null;\n private _refreshTokenPayload: AuthToken | null = null;\n\n // Private user data.\n private _user$ = new BehaviorSubject<any | null>(null);\n\n // Public user data.\n user = this._user$.pipe(\n shareReplay({refCount: true, bufferSize: 1})\n );\n\n constructor(options?: { id?: string, storage?: StorageStrategy, strategy?: AuthStrategy }) {\n const applicationId = options?.id ?? 'ng';\n\n // Setting up the readonly storage keys.\n this._accessTokenStorageKey = this.generateKey(applicationId, 'au_act');\n this._refreshTokenStorageKey = this.generateKey(applicationId, 'au_rft');\n this._userStorageKey = this.generateKey(applicationId, 'au_usr');\n\n // Setting up the storage.\n this._storage = options?.storage ?? null;\n this._strategy = options?.strategy ?? null;\n\n // Init methods.\n this.restoreFromStorage();\n }\n\n get snapshot() {\n if (this._strategy === 'httpOnlyCookie') {\n return {user: this._user$.getValue()};\n }\n return {\n user: this._user$.getValue(),\n accessToken: this.accessToken,\n refreshToken: this.refreshToken\n };\n }\n\n get accessToken() {\n return this.isTokenValid(this._accessTokenPayload)\n ? this._accessTokenString\n : null;\n }\n\n get refreshToken() {\n return this.isTokenValid(this.refreshTokenPayload)\n ? this._refreshTokenString\n : null;\n }\n\n get accessTokenPayload() {\n return this._accessTokenPayload ?? null;\n }\n\n get refreshTokenPayload() {\n return this._refreshTokenPayload ?? null;\n }\n\n authenticated() {\n return !!this.snapshot?.user;\n }\n\n setTokens(accessToken: string | null, refreshToken: string | null, persist: boolean = true) {\n if (this._strategy === 'httpOnlyCookie') {\n return;\n }\n\n this.setAccessToken(accessToken);\n this.setRefreshToken(refreshToken);\n\n if (persist) {\n this.persistTokensInStorage();\n }\n }\n\n setUser(user: unknown, persist: boolean = true) {\n this._user$.next(user ?? null);\n\n if (persist) {\n this.persistUserInStorage();\n }\n }\n\n clear() {\n this.setTokens(null, null);\n this.setUser(null);\n }\n\n private restoreFromStorage() {\n if (!this._storage) {\n return;\n }\n\n if (this._strategy === 'browserStorage') {\n // Set the access token.\n const accessToken = this._storage.get<string>(this._accessTokenStorageKey);\n this.setAccessToken(accessToken);\n\n // Set the refresh token.\n const refreshToken = this._storage.get<string>(this._refreshTokenStorageKey);\n this.setRefreshToken(refreshToken);\n }\n\n // Set the user if we have any correct token payloads.\n if ((this._accessTokenPayload || this._refreshTokenPayload) || this._strategy === 'httpOnlyCookie') {\n const user = this._storage.get<unknown>(this._userStorageKey);\n this._user$.next(user ?? null); // Note: just settings here instead of setUser() because of syncing to the storage.\n }\n }\n\n private persistTokensInStorage() {\n if (!this._storage || this._strategy === 'httpOnlyCookie') {\n return;\n }\n\n // Set the access token if completely valid.\n if (!!this.accessToken) {\n this._storage.set<string>(this._accessTokenStorageKey, this._accessTokenString, {\n expires: this._accessTokenPayload?.expiresAt\n });\n } else {\n this._storage.remove(this._accessTokenStorageKey);\n }\n\n // Set the refresh token if completely valid.\n if (!!this.refreshToken) {\n this._storage.set<string>(this._refreshTokenStorageKey, this._refreshTokenString, {\n expires: this._refreshTokenPayload?.expiresAt\n });\n } else {\n this._storage.remove(this._refreshTokenStorageKey);\n }\n }\n\n private persistUserInStorage() {\n if (!this._storage) {\n return;\n }\n\n const user = this._user$.getValue();\n if (!user) {\n return this._storage.remove(this._userStorageKey);\n }\n\n const date = new Date();\n date.setFullYear(date.getFullYear() + 1);\n this._storage.set<unknown>(this._userStorageKey, user, {\n expires: new Date(date.getTime())\n });\n }\n\n private setAccessToken(value: string | null) {\n this._accessTokenString = value ?? null;\n this._accessTokenPayload = this._jwt.decode(this._accessTokenString);\n }\n\n private setRefreshToken(value: string | null) {\n this._refreshTokenString = value ?? null;\n this._refreshTokenPayload = this._jwt.decode(this._refreshTokenString);\n }\n\n private generateKey(applicationId: string, key: string) {\n return [applicationId, key].join('_');\n }\n\n private isTokenValid(token: AuthToken) {\n if (!token) {\n return false;\n }\n\n return token?.expiresAt?.getTime() > Date.now();\n }\n\n}\n","import {AUTH_CONFIG, AUTH_REDIRECT_HANDLER, AuthConfig, AuthRedirectHandler} from './interfaces/config.interface';\nimport {inject, Injectable, Injector, makeStateKey, StateKey, TransferState} from '@angular/core';\nimport {HttpClient, HttpContext, HttpHeaders, HttpParams} from '@angular/common/http';\nimport {AuthProvider, AuthSignInResponse} from './interfaces/provider.interface';\nimport {Storage, StorageOption} from '@bravobit/bb-foundation/storage';\nimport {HttpConfig, HTTP_CONFIG} from '@bravobit/bb-foundation/http';\nimport {USE_AUTHORIZATION} from './tokens/use-authorization.token';\nimport {AuthVerifyProvider} from './providers/verify.provider';\nimport {AuthEmailProvider} from './providers/email.provider';\nimport {firstValueFrom, Observable, of} from 'rxjs';\nimport {Platform} from '@angular/cdk/platform';\nimport {AuthSession} from './auth.session';\nimport {map, tap} from 'rxjs/operators';\nimport {Router} from '@angular/router';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class Auth {\n\n // Dependencies.\n private readonly _storage: Storage = inject(Storage);\n private readonly _injector: Injector = inject(Injector);\n private readonly _platform: Platform = inject(Platform);\n private readonly _httpClient: HttpClient = inject(HttpClient);\n private readonly _state?: TransferState = inject(TransferState, {optional: true});\n private readonly _config?: AuthConfig = inject(AUTH_CONFIG, {optional: true});\n private readonly _httpConfig?: HttpConfig = inject(HTTP_CONFIG, {optional: true});\n private readonly _handler?: AuthRedirectHandler = inject(AUTH_REDIRECT_HANDLER, {optional: true});\n\n // Readonly data.\n private readonly _authStateKey: StateKey<any | null> = makeStateKey(`bbAuthStateKey`);\n private readonly _httpAlias: string | null = this._httpConfig?.defaultAlias ?? null;\n\n readonly session: AuthSession;\n readonly user: Observable<any | null>;\n\n private _refreshHandler: number | null = null;\n\n constructor() {\n // We select a storage strategy based on the server/browser.\n // Only cookies CAN work on the server.\n const storageStrategy = this._platform.isBrowser\n ? this._storage.select([StorageOption.Cookie, StorageOption.Local])\n : this._storage.cookie;\n\n // Starting the new session.\n this.session = new AuthSession({\n id: this._config?.applicationId,\n storage: storageStrategy,\n strategy: this._config?.strategy\n });\n this.user = this.session.user;\n }\n\n async initialize() {\n // Check if the app should bootstrap the authentication.\n const shouldBootstrap = this._config?.bootstrap ?? true;\n if (!shouldBootstrap) {\n return this.handleAutoRefreshing();\n }\n\n // Only retrieve from the server when we are actually authenticated.\n if (!this.session.authenticated()) {\n return;\n }\n\n // Get the key from the server state.\n if (this._state && this._state?.hasKey(this._authStateKey)) {\n const user = this._state?.get(this._authStateKey, null) ?? null;\n return this.session.setUser(user);\n }\n\n if (this._config?.strategy === 'browserStorage' || (this._config?.strategy === 'httpOnlyCookie' && this._platform.isBrowser)) {\n // Try to fetch the user from the server.\n const user$ = this.me();\n const user = await firstValueFrom(user$, {defaultValue: null});\n\n // Set the state if exists.\n if (this._state) {\n this._state?.set<any>(this._authStateKey, user ?? null);\n }\n\n this.session.setUser(user);\n }\n\n this.handleAutoRefreshing();\n }\n\n me<T = any>() {\n const url = this.getUrl('auth/me');\n return this._httpClient.get<T>(url);\n }\n\n async signIn<T = any>(provider: AuthProvider, verify?: (user: T) => void) {\n const {accessToken, refreshToken, user, ...result} = await provider.authenticate(this._httpClient);\n\n // Verify the user.\n verify?.(user);\n\n // Validate if the provider is one of the available\n // providers then return the user object and the provider.\n const apiProvider = result?.provider ?? null;\n const apiVerifyToken = result?.verifyToken ?? null;\n const availableProviders = this._config?.providers ?? ['email', 'sms', 'totp'];\n if (availableProviders.includes(apiProvider)) {\n return <AuthSignInResponse>{user, provider: apiProvider, verifyToken: apiVerifyToken};\n }\n\n // Set the tokens in storage.\n this.setTokens(accessToken, refreshToken);\n\n // Set the user in storage.\n this.session.setUser(user);\n\n // Return the user.\n return <AuthSignInResponse>{user};\n }\n\n async signInWithEmail<T = any>(email: string, password: string, verify?: (user: T) => void) {\n const url = this.getUrl('auth/login');\n return this.signIn(new AuthEmailProvider(email, password, url), verify);\n }\n\n async signInWithVerifyCode(code: string, verifyToken: string) {\n const url = this.getUrl('auth/verify');\n return this.signIn(new AuthVerifyProvider(code, verifyToken, url));\n }\n\n async resendVerifyCode(verifyToken: string) {\n const url = this.getUrl('auth/resend');\n const result$ = this._httpClient.post(url, {verify_token: verifyToken});\n return await firstValueFrom(result$);\n }\n\n async register<T = any>(data: any, options?: {\n headers?: HttpHeaders | {\n [header: string]: string | string[];\n };\n params?: HttpParams | {\n [param: string]: string | number | boolean | ReadonlyArray<string | number | boolean>;\n };\n }) {\n // Execute API call.\n const url = this.getUrl('auth/register');\n const result$ = this._httpClient.post<{ token: string, refresh_token: string, user: any }>(url, data, options);\n const result = await firstValueFrom(result$);\n\n // Set the tokens in storage.\n this.setTokens(result?.token, result?.refresh_token);\n\n // Set the user in storage.\n const user = result?.user;\n this.session.setUser(user);\n\n // Return the user.\n return <T>user;\n }\n\n logout() {\n // If we don't have a refresh token just clear the session.\n // Note: We do this because else we try to invalidate\n // an \"undefined\" refresh token.\n const refreshToken = this.session.refreshToken;\n if (!refreshToken && this._config?.strategy === 'browserStorage') {\n return this.session.clear();\n }\n\n // We do have a refresh token, so try to invalidate it in the backend.\n // or we are httpOnlyCookie authenticated.\n try {\n const url = this.getUrl('auth/logout');\n const headerName = this._config?.http?.header ?? 'Authorization';\n\n const headers = new HttpHeaders({\n [headerName]: refreshToken\n });\n\n const observable$ = this._httpClient.get(url, {\n ...(this._config?.strategy === 'browserStorage' ? {headers} : {}),\n ...(this._config?.strategy === 'httpOnlyCookie' ? {withCredentials: true} : {})\n });\n firstValueFrom(observable$).then(_ => _).catch(_ => _);\n } catch {\n // Do nothing because the tokens will be deleted anyways from the session.\n } finally {\n // Delete the tokens from the session.\n this.session.clear();\n }\n }\n\n refresh() {\n // If the refresh token does\n // not exist just return an observable of null.\n const refreshToken = this.session.refreshToken;\n if (!refreshToken && this._config?.strategy === 'browserStorage') {\n return of(null);\n }\n\n // Perform the refresh call.\n const headerName = this._config?.http?.header ?? 'Authorization';\n const scheme = this._config?.http?.scheme ?? 'Bearer';\n\n const url = this.getUrl('auth/refresh');\n const context = new HttpContext().set(USE_AUTHORIZATION, false);\n\n const headers = new HttpHeaders({\n [headerName]: `${scheme} ${refreshToken}`\n });\n\n return this._httpClient.get<{ token: string, refresh_token: string }>(url, {\n ...(this._config?.strategy === 'browserStorage' ? {headers} : {}),\n ...(this._config?.strategy === 'httpOnlyCookie' ? {withCredentials: true} : {}),\n context: context\n }).pipe(\n tap(({token, refresh_token}) => this.setTokens(token, refresh_token)),\n map(({token}) => token)\n );\n }\n\n async requestPassword(email: string, extraParams: { [key: string]: any } = {}) {\n const url = this.getUrl('auth/reset');\n const observable$ = this._httpClient.post(url, {...extraParams, email});\n return firstValueFrom(observable$);\n }\n\n async resetPassword(token: string, newPassword: string, extraParams: { [key: string]: any } = {}) {\n const url = this.getUrl('auth/reset-password');\n const observable$ = this._httpClient.post(url, {...extraParams, token, password: newPassword});\n return firstValueFrom(observable$);\n }\n\n clearAndRedirect() {\n // 1. Delete the tokens from the session.\n this.session.clear();\n\n if (this._handler) {\n const urlTree = this._handler.onFailedAuthenticated();\n if (typeof urlTree === 'boolean' || urlTree === null || urlTree === undefined) {\n return;\n }\n\n this.router.navigateByUrl(urlTree).then(_ => _);\n return;\n }\n\n // 2. Compose the route url.\n const redirectUrl = this._config?.redirects.unauthenticated ?? null;\n\n // 3. Route back if the user provided a redirect url.\n if (this.router && redirectUrl) {\n const commands = Array.isArray(redirectUrl) ? redirectUrl : [redirectUrl];\n this.router.navigate(commands).then(_ => _);\n }\n }\n\n private setTokens(accessToken: string, refreshToken: string) {\n // Set the tokens in our session.\n this.session.setTokens(accessToken, refreshToken);\n\n // We need to update the auto refresh of the refresh token.\n this.handleAutoRefreshing();\n }\n\n private handleAutoRefreshing() {\n const shouldAutoRefresh = this._config?.autoRefresh ?? false;\n if (!shouldAutoRefresh || this._config?.strategy === 'httpOnlyCookie') {\n return;\n }\n\n const expiresAt = this.session.refreshTokenPayload?.expiresAt ?? null;\n if (expiresAt === null || !this._platform.isBrowser) {\n return;\n }\n\n const differenceInMilliseconds = expiresAt.getTime() - Date.now();\n const offsetInMilliseconds = 10_000; // 10 seconds.\n\n // We want to start the refresh 10 seconds before it expires.\n const actualTiming = differenceInMilliseconds - offsetInMilliseconds;\n if (actualTiming <= 0) {\n return;\n }\n\n // We need to cap the timings because if\n // we get large numbers it might cause unwanted results.\n const maxTiming = 1000 * 60 * 60 * 24; // 24 hours.\n const cappedTiming = Math.max(1, Math.min(actualTiming, maxTiming));\n try {\n if (this._refreshHandler !== null) {\n clearTimeout?.(this._refreshHandler);\n this._refreshHandler = null;\n }\n this._refreshHandler = window?.setTimeout?.(() => this.autoRefresh(), cappedTiming);\n } catch {\n // Just ignore it.\n }\n }\n\n private async autoRefresh() {\n try {\n // We just need to wait for it to refresh.\n const refresh$ = this.refresh();\n await firstValueFrom(refresh$);\n } catch {\n // Something went wrong refreshing, we need to clear.\n this.clearAndRedirect();\n }\n }\n\n private get router() {\n return this._injector.get(Router);\n }\n\n private getUrl(endpoint: string) {\n return [this._httpAlias, endpoint]\n .filter(item => !!item)\n .join('/');\n }\n\n}\n","import {Directive, EmbeddedViewRef, Input, OnDestroy, OnInit, TemplateRef, ViewContainerRef} from '@angular/core';\nimport {distinctUntilChanged, map} from 'rxjs/operators';\nimport {Auth} from '../auth.service';\nimport {Subscription} from 'rxjs';\n\n@Directive({\n selector: 'ng-template[bbAuthenticated]'\n})\nexport class BbAuthenticated implements OnInit, OnDestroy {\n\n // Data.\n private _valid: boolean = false;\n\n // Templates.\n private _elseTemplateRef: TemplateRef<any> | null = null;\n\n // View refs.\n private _thenViewRef: EmbeddedViewRef<any> | null = null;\n private _elseViewRef: EmbeddedViewRef<any> | null = null;\n\n // Subscriptions.\n private _subscription = new Subscription();\n\n @Input()\n set bbAuthenticatedElse(templateRef: TemplateRef<any>) {\n this.assertTemplate('bbAuthenticatedElse', templateRef);\n this._elseTemplateRef = templateRef;\n this.updateView();\n }\n\n constructor(private _auth: Auth,\n private _templateRef: TemplateRef<any>,\n private _viewContainerRef: ViewContainerRef) {\n }\n\n ngOnInit() {\n const subscription = this._auth.user.pipe(\n map(user => !!user),\n distinctUntilChanged()\n ).subscribe(valid => {\n this._valid = valid;\n this.updateView();\n });\n this._subscription.add(subscription);\n }\n\n ngOnDestroy() {\n this._subscription?.unsubscribe();\n }\n\n private updateView() {\n if (this._valid) {\n if (!this._thenViewRef) {\n this._viewContainerRef.clear();\n this._elseViewRef = null;\n if (this._templateRef) {\n this._thenViewRef = this._viewContainerRef.createEmbeddedView(this._templateRef);\n }\n }\n } else {\n if (!this._elseViewRef) {\n this._viewContainerRef.clear();\n this._thenViewRef = null;\n if (this._elseTemplateRef) {\n this._elseViewRef = this._viewContainerRef.createEmbeddedView(this._elseTemplateRef);\n }\n }\n }\n }\n\n private assertTemplate(property: string, templateRef: TemplateRef<any> | null) {\n const isTemplateRefOrNull = !!(!templateRef || templateRef.createEmbeddedView);\n if (!isTemplateRefOrNull) {\n throw new Error(`${property} must be a TemplateRef.`);\n }\n }\n\n static ngAcceptInputType_bbAuthenticatedElse: TemplateRef<any>;\n\n}\n","import {ActivatedRouteSnapshot, CanActivateFn, Router, RouterStateSnapshot} from '@angular/router';\nimport {AUTH_CONFIG, AUTH_REDIRECT_HANDLER} from '../interfaces/config.interface';\nimport {inject} from '@angular/core';\nimport {Auth} from '../auth.service';\nimport {map} from 'rxjs/operators';\nimport {first} from 'rxjs';\n\nexport const bbAnonymousGuard: CanActivateFn = (route: ActivatedRouteSnapshot, state: RouterStateSnapshot) => {\n const auth = inject(Auth);\n const router = inject(Router);\n const config = inject(AUTH_CONFIG, {optional: true});\n const redirectHandler = inject(AUTH_REDIRECT_HANDLER, {optional: true});\n\n return auth.user.pipe(\n map(user => !!user),\n map(authenticated => {\n if (!authenticated) {\n return true;\n }\n\n if (redirectHandler) {\n return redirectHandler.onFailedAnonymous(route, state);\n }\n\n // If we don't have a URL to go to we can just say\n // the user is not allowed in this route by returning false.\n const nextUrl = config?.redirects?.authenticated ?? null;\n if (!nextUrl) {\n return false;\n }\n\n const commands = Array.isArray(nextUrl) ? nextUrl : [nextUrl];\n return router.createUrlTree(commands);\n }),\n first()\n );\n};\n","import {ActivatedRouteSnapshot, CanActivateFn, Router, RouterStateSnapshot} from '@angular/router';\nimport {AUTH_CONFIG, AUTH_REDIRECT_HANDLER} from '../interfaces/config.interface';\nimport {Auth} from '../auth.service';\nimport {inject} from '@angular/core';\nimport {map} from 'rxjs/operators';\nimport {first} from 'rxjs';\n\nexport const bbAuthenticatedGuard: CanActivateFn = (route: ActivatedRouteSnapshot, state: RouterStateSnapshot) => {\n const auth = inject(Auth);\n const router = inject(Router);\n const config = inject(AUTH_CONFIG, {optional: true});\n const redirectHandler = inject(AUTH_REDIRECT_HANDLER, {optional: true});\n\n return auth.user.pipe(\n map(user => !!user),\n map(authenticated => {\n if (authenticated) {\n return true;\n }\n\n if (redirectHandler) {\n return redirectHandler.onFailedAuthenticated(route, state);\n }\n\n // If we don't have a URL to go to we can just say\n // the user is not allowed in this route by returning false.\n const nextUrl = config?.redirects?.unauthenticated ?? null;\n if (!nextUrl) {\n return false;\n }\n\n const setRedirectOnFailedAuth = config?.setRedirectOnFailedAuth ?? true;\n const redirectUrl = state?.url ?? null;\n const queryParams = setRedirectOnFailedAuth && redirectUrl ? {redirectUrl} : {};\n const commands = Array.isArray(nextUrl) ? nextUrl : [nextUrl];\n return router.createUrlTree(commands, {queryParams});\n }),\n first()\n );\n};\n","import {BehaviorSubject, firstValueFrom, Observable} from 'rxjs';\nimport {combineLatestMap} from '@bravobit/bb-foundation/rxjs';\nimport {distinctUntilChanged, map} from 'rxjs/operators';\nimport {inject, Injectable} from '@angular/core';\nimport {Auth} from './auth.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class Acting {\n\n // Dependencies.\n private readonly _auth: Auth = inject(Auth);\n\n // Cache.\n private _userId$ = new BehaviorSubject<number>(null);\n\n // State.\n readonly info$: Observable<{ active?: boolean, user?: any }> = this.getInfo();\n\n async start(userId: number) {\n this._userId$.next(userId);\n return await this.fetchUserDetails();\n }\n\n async stop() {\n this._userId$.next(null);\n return await this.fetchUserDetails();\n }\n\n getCurrent() {\n return this._userId$.getValue();\n }\n\n private async fetchUserDetails() {\n const user$ = this._auth.me();\n const user = await firstValueFrom(user$);\n this._auth.session.setUser(user);\n }\n\n private getInfo() {\n const active$ = this._userId$.pipe(\n map(item => !!item),\n distinctUntilChanged()\n );\n\n return combineLatestMap({active: active$, user: this._auth.user});\n }\n\n}\n","import {HttpHandler, HttpInterceptor, HttpRequest} from '@angular/common/http';\nimport {inject, Injectable} from '@angular/core';\nimport {Acting} from './acting.service';\n\n@Injectable()\nexport class ActingInterceptor implements HttpInterceptor {\n\n // Dependencies.\n private readonly _acting: Acting = inject(Acting);\n\n // Readonly data.\n private readonly _headerString: string = 'X-Act-User-Id';\n\n intercept(request: HttpRequest<unknown>, next: HttpHandler) {\n const userId = this._acting.getCurrent();\n if (userId === null || userId === undefined) {\n return next.handle(request);\n }\n\n const modified = request.clone({\n setHeaders: {[this._headerString]: `${userId}`}\n });\n\n return next.handle(modified);\n }\n\n}\n","import {HttpErrorResponse, HttpHandler, HttpInterceptor, HttpRequest} from '@angular/common/http';\nimport {catchError, filter, finalize, switchMap, take} from 'rxjs/operators';\nimport {AUTH_CONFIG, AuthConfig} from './interfaces/config.interface';\nimport {USE_AUTHORIZATION} from './tokens/use-authorization.token';\nimport {HttpError} from '@bravobit/bb-foundation/http';\nimport {BehaviorSubject, of, throwError} from 'rxjs';\nimport {inject, Injectable} from '@angular/core';\nimport {Auth} from './auth.service';\n\n@Injectable()\nexport class AuthInterceptor implements HttpInterceptor {\n\n // Dependencies.\n private readonly _auth: Auth = inject(Auth);\n private readonly _config?: AuthConfig = inject(AUTH_CONFIG, {optional: true});\n\n // Readonly data.\n private readonly _authHeaderString: string = this._config?.http?.header ?? 'Authorization';\n private readonly _authScheme: string = this._config?.http?.scheme ?? 'Bearer';\n\n // Data.\n isRefreshing: boolean = false;\n refreshingAccessToken$ = new BehaviorSubject<boolean>(false);\n\n intercept(request: HttpRequest<unknown>, next: HttpHandler) {\n // 1. Check if the user wants to use the authorization for this request.\n if (!request.context.get(USE_AUTHORIZATION)) {\n return next.handle(request);\n }\n\n // 2. Compose the new request.\n const newRequest = this.modifyRequest(request);\n\n // 3. Handle all errors.\n return next.handle(newRequest).pipe(\n catchError(error => {\n // Handle the HTTP401 error.\n if ((error instanceof HttpErrorResponse || error instanceof HttpError) && error?.status === 401) {\n return this.handle401Error(request, next);\n }\n\n // Just re-throw the parsed error.\n return throwError(() => error);\n })\n );\n }\n\n private modifyRequest<T>(request: HttpRequest<T>) {\n switch (this._config?.strategy) {\n case 'browserStorage':\n return this.handleBrowserStorageRequest(request);\n case 'httpOnlyCookie':\n return this.handleHttpOnlyCookieRequest(request);\n default:\n throw new Error(`invalid auth strategy \"${this._config?.strategy}\"`);\n }\n }\n\n private handleBrowserStorageRequest<T>(request: HttpRequest<T>) {\n const accessToken = this.getAccessTokenFromSession(request);\n if (!accessToken) {\n return request.clone({headers: request.headers.delete(this._authHeaderString)});\n }\n\n return request.clone({\n setHeaders: {[this._authHeaderString]: `${this._authScheme} ${accessToken}`}\n });\n }\n\n private handleHttpOnlyCookieRequest<T>(request: HttpRequest<T>) {\n return request.clone({withCredentials: true});\n }\n\n private handle401Error(request: HttpRequest<unknown>, next: HttpHandler) {\n // If already refreshing wait for the refresh token to complete.\n if (this.isRefreshing) {\n return this.refreshingAccessToken$.pipe(\n filter(accessToken => accessToken !== false),\n take(1),\n switchMap(() => next.handle(this.modifyRequest(request)))\n );\n }\n\n // Set the refreshing to true.\n this.isRefreshing = true;\n this.refreshingAccessToken$.next(false);\n\n return this._auth.refresh().pipe(\n switchMap(newAccessToken => {\n if (!newAccessToken && this._config?.strategy === 'browserStorage') {\n return throwError(() => new Error('No refresh token was available.'));\n }\n\n this.refreshingAccessToken$.next(true);\n return next.handle(this.modifyRequest(request));\n }),\n catchError(() => this.logoutUser()),\n finalize(() => this.isRefreshing = false)\n );\n }\n\n private logoutUser() {\n // Handle the refresh error.\n this._auth.clearAndRedirect();\n\n // Return null as data.\n return of(null);\n }\n\n private getAccessTokenFromSession(request: HttpRequest<unknown>) {\n // Get the token based on header.\n if (request.headers.has(this._authHeaderString)) {\n return request.headers.get(this._authHeaderString);\n }\n\n // Return the default access token.\n return this._auth.session.accessToken;\n }\n\n}\n","import {EnvironmentProviders, makeEnvironmentProviders, inject, provideAppInitializer, Provider} from '@angular/core';\nimport {AUTH_CONFIG, AuthConfig} from './interfaces/config.interface';\nimport {HTTP_INTERCEPTORS} from '@angular/common/http';\nimport {ActingInterceptor} from './acting.interceptor';\nimport {AuthInterceptor} from './auth.interceptor';\nimport {Auth} from './auth.service';\n\nexport function provideAuthConfig(config?: AuthConfig): EnvironmentProviders {\n const providers: Provider = [\n {provide: AUTH_CONFIG, useValue: config},\n {provide: HTTP_INTERCEPTORS, useClass: AuthInterceptor, multi: true},\n provideAppInitializer(() => inject(Auth).initialize())\n ];\n\n if (config?.strategy === 'httpOnlyCookie' && !config?.bootstrap) {\n throw new Error('the \"bootstrap\" option must be enabled when using strategy=httpOnlyCookie');\n }\n\n if (config?.interceptActing) {\n providers.push({provide: HTTP_INTERCEPTORS, useClass: ActingInterceptor, multi: true});\n }\n\n return makeEnvironmentProviders(providers);\n}\n","import {BbAuthenticated} from './directives/authenticated.directive';\nimport {ModuleWithProviders, NgModule} from '@angular/core';\nimport {AuthConfig} from './interfaces/config.interface';\nimport {provideAuthConfig} from './auth.config';\n\n@NgModule({\n imports: [BbAuthenticated],\n exports: [BbAuthenticated]\n})\nexport class AuthModule {\n\n static forRoot(config: AuthConfig): ModuleWithProviders<AuthModule> {\n return {\n ngModule: AuthModule,\n providers: [\n provideAuthConfig(config)\n ]\n };\n }\n\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.Auth"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"bravobit-bb-foundation-auth.mjs","sources":["../../../projects/bb-foundation/auth/src/lib/interfaces/config.interface.ts","../../../projects/bb-foundation/auth/src/lib/tokens/use-authorization.token.ts","../../../projects/bb-foundation/auth/src/lib/helpers/jwt.helper.ts","../../../projects/bb-foundation/auth/src/lib/providers/verify.provider.ts","../../../projects/bb-foundation/auth/src/lib/providers/email.provider.ts","../../../projects/bb-foundation/auth/src/lib/auth.session.ts","../../../projects/bb-foundation/auth/src/lib/auth.service.ts","../../../projects/bb-foundation/auth/src/lib/directives/authenticated.directive.ts","../../../projects/bb-foundation/auth/src/lib/guards/anonymous.guard.ts","../../../projects/bb-foundation/auth/src/lib/guards/authenticated.guard.ts","../../../projects/bb-foundation/auth/src/lib/acting.service.ts","../../../projects/bb-foundation/auth/src/lib/acting.interceptor.ts","../../../projects/bb-foundation/auth/src/lib/auth.interceptor.ts","../../../projects/bb-foundation/auth/src/lib/auth.config.ts","../../../projects/bb-foundation/auth/src/lib/auth.module.ts","../../../projects/bb-foundation/auth/src/bravobit-bb-foundation-auth.ts"],"sourcesContent":["import {ActivatedRouteSnapshot, RouterStateSnapshot, UrlTree} from '@angular/router';\nimport {StorageOption} from '@bravobit/bb-foundation/storage';\nimport {InjectionToken} from '@angular/core';\n\nexport type AuthStrategy = 'httpOnlyCookie' | 'browserStorage';\n\nexport interface AuthConfig {\n applicationId: string;\n strategy: AuthStrategy;\n\n preferredStorageOptions?: StorageOption[];\n\n http?: {\n scheme?: string,\n header?: string\n };\n\n redirects?: {\n authenticated?: string | string[];\n unauthenticated?: string | string[];\n };\n setRedirectOnFailedAuth?: boolean;\n\n interceptActing?: boolean;\n\n bootstrap?: boolean;\n providers?: string[];\n autoRefresh?: boolean;\n}\n\nexport const AUTH_CONFIG = new InjectionToken<AuthConfig>('auth config');\n\nexport const AUTH_REDIRECT_HANDLER = new InjectionToken<AuthRedirectHandler>('auth redirect handler');\n\nexport interface AuthRedirectHandler {\n\n onFailedAuthenticated(snapshot?: ActivatedRouteSnapshot, state?: RouterStateSnapshot): boolean | UrlTree;\n\n onFailedAnonymous(snapshot?: ActivatedRouteSnapshot, state?: RouterStateSnapshot): boolean | UrlTree;\n\n}\n","import {HttpContextToken} from '@angular/common/http';\n\nexport const USE_AUTHORIZATION = new HttpContextToken(() => true);","import {AuthToken} from '../interfaces/token.interface';\n\nexport class JwtHelper {\n\n decode(token: string) {\n try {\n if (token === null || token === undefined) {\n return null;\n }\n\n const json = JSON.parse(\n this.urlDecode(token.split('.')[1])\n );\n\n return this.parse(json);\n } catch {\n return null;\n }\n }\n\n private urlDecode(token: string | null) {\n const value = token || '';\n let output = value\n .replace(/-/g, '+')\n .replace(/_/g, '/');\n\n switch (output.length % 4) {\n case 0:\n break;\n case 2:\n output += '==';\n break;\n case 3:\n output += '=';\n break;\n default:\n throw 'Illegal base64url string!';\n }\n\n try {\n return this.baseDecodeUnicode(output);\n } catch {\n return atob(output);\n }\n }\n\n private baseDecodeUnicode = (value: string) => {\n return decodeURIComponent(atob(value).replace(/(.)/g, (_, p) => {\n let code = p.charCodeAt(0).toString(16).toUpperCase();\n if (code.length < 2) {\n code = '0' + code;\n }\n return '%' + code;\n }));\n };\n\n private parse = (data: object) => {\n return {\n id: data['jti'] ?? null,\n type: data['typ'] ?? null,\n audience: data['aud'] ?? null,\n issuer: data['iss'] ?? null,\n subject: data['sub'] ?? null,\n role: data['role'] ?? null,\n notValidBefore: this.parseDate(data['nbf']),\n expiresAt: this.parseDate(data['exp']),\n issuedAt: this.parseDate(data['iat'])\n } as AuthToken;\n };\n\n private parseDate = (epochInSeconds: number) => {\n if (!epochInSeconds || epochInSeconds <= 0) {\n return null;\n }\n\n return new Date(epochInSeconds * 1000);\n };\n\n}\n","import {AuthProvider, AuthProviderResponse, AuthProviderResult} from '../interfaces/provider.interface';\nimport {HttpClient} from '@angular/common/http';\nimport {firstValueFrom} from 'rxjs';\n\nexport class AuthVerifyProvider implements AuthProvider {\n\n constructor(private _code: string,\n private _verifyToken: string,\n private _endpoint: string) {\n }\n\n async authenticate(httpClient: HttpClient): Promise<AuthProviderResult> {\n // Execute API call.\n const data$ = httpClient.post<Pick<AuthProviderResponse, 'token' | 'refresh_token' | 'user'>>(this._endpoint, {\n token: this._code,\n verify_token: this._verifyToken\n });\n\n const data = await firstValueFrom(data$);\n return {\n accessToken: data?.token,\n refreshToken: data?.refresh_token,\n user: data?.user\n };\n }\n\n}\n","import {AuthProvider, AuthProviderResponse, AuthProviderResult} from '../interfaces/provider.interface';\nimport {HttpClient} from '@angular/common/http';\nimport {firstValueFrom} from 'rxjs';\n\nexport class AuthEmailProvider implements AuthProvider {\n\n constructor(private _email: string,\n private _password: string,\n private _endpoint: string) {\n }\n\n async authenticate(httpClient: HttpClient): Promise<AuthProviderResult> {\n // Execute API call.\n const data$ = httpClient.post<AuthProviderResponse>(this._endpoint, {\n email: this._email,\n password: this._password\n });\n\n const data = await firstValueFrom(data$);\n return {\n accessToken: data?.token,\n refreshToken: data?.refresh_token,\n user: data?.user,\n provider: data?.provider,\n verifyToken: data?.verify_token\n };\n }\n\n}\n","import {StorageStrategy} from '@bravobit/bb-foundation/storage';\nimport {AuthStrategy} from './interfaces/config.interface';\nimport {AuthToken} from './interfaces/token.interface';\nimport {JwtHelper} from './helpers/jwt.helper';\nimport {shareReplay} from 'rxjs/operators';\nimport {BehaviorSubject} from 'rxjs';\n\nexport class AuthSession {\n\n // Readonly data.\n private readonly _jwt = new JwtHelper();\n private readonly _storage: StorageStrategy | null;\n private readonly _accessTokenStorageKey: string;\n private readonly _refreshTokenStorageKey: string;\n private readonly _userStorageKey: string;\n private readonly _strategy: AuthStrategy;\n\n // Token strings.\n private _accessTokenString: string | null = null;\n private _refreshTokenString: string | null = null;\n\n // Token payloads.\n private _accessTokenPayload: AuthToken | null = null;\n private _refreshTokenPayload: AuthToken | null = null;\n\n // Private user data.\n private _user$ = new BehaviorSubject<any | null>(null);\n\n // Public user data.\n user = this._user$.pipe(\n shareReplay({refCount: true, bufferSize: 1})\n );\n\n constructor(options?: { id?: string, storage?: StorageStrategy, strategy?: AuthStrategy }) {\n const applicationId = options?.id ?? 'ng';\n\n // Setting up the readonly storage keys.\n this._accessTokenStorageKey = this.generateKey(applicationId, 'au_act');\n this._refreshTokenStorageKey = this.generateKey(applicationId, 'au_rft');\n this._userStorageKey = this.generateKey(applicationId, 'au_usr');\n\n // Setting up the storage.\n this._storage = options?.storage ?? null;\n this._strategy = options?.strategy ?? null;\n\n // Init methods.\n this.restoreFromStorage();\n }\n\n get snapshot() {\n if (this._strategy === 'httpOnlyCookie') {\n return {user: this._user$.getValue()};\n }\n return {\n user: this._user$.getValue(),\n accessToken: this.accessToken,\n refreshToken: this.refreshToken\n };\n }\n\n get accessToken() {\n return this.isTokenValid(this._accessTokenPayload)\n ? this._accessTokenString\n : null;\n }\n\n get refreshToken() {\n return this.isTokenValid(this.refreshTokenPayload)\n ? this._refreshTokenString\n : null;\n }\n\n get accessTokenPayload() {\n return this._accessTokenPayload ?? null;\n }\n\n get refreshTokenPayload() {\n return this._refreshTokenPayload ?? null;\n }\n\n authenticated() {\n return !!this.snapshot?.user;\n }\n\n setTokens(accessToken: string | null, refreshToken: string | null, persist: boolean = true) {\n if (this._strategy === 'httpOnlyCookie') {\n return;\n }\n\n this.setAccessToken(accessToken);\n this.setRefreshToken(refreshToken);\n\n if (persist) {\n this.persistTokensInStorage();\n }\n }\n\n setUser(user: unknown, persist: boolean = true) {\n this._user$.next(user ?? null);\n\n if (persist) {\n this.persistUserInStorage();\n }\n }\n\n clear() {\n this.setTokens(null, null);\n this.setUser(null);\n }\n\n private restoreFromStorage() {\n if (!this._storage) {\n return;\n }\n\n if (this._strategy === 'browserStorage') {\n // Set the access token.\n const accessToken = this._storage.get<string>(this._accessTokenStorageKey);\n this.setAccessToken(accessToken);\n\n // Set the refresh token.\n const refreshToken = this._storage.get<string>(this._refreshTokenStorageKey);\n this.setRefreshToken(refreshToken);\n }\n\n // Set the user if we have any correct token payloads.\n if ((this._accessTokenPayload || this._refreshTokenPayload) || this._strategy === 'httpOnlyCookie') {\n const user = this._storage.get<unknown>(this._userStorageKey);\n this._user$.next(user ?? null); // Note: just settings here instead of setUser() because of syncing to the storage.\n }\n }\n\n private persistTokensInStorage() {\n if (!this._storage || this._strategy === 'httpOnlyCookie') {\n return;\n }\n\n // Set the access token if completely valid.\n if (!!this.accessToken) {\n this._storage.set<string>(this._accessTokenStorageKey, this._accessTokenString, {\n expires: this._accessTokenPayload?.expiresAt\n });\n } else {\n this._storage.remove(this._accessTokenStorageKey);\n }\n\n // Set the refresh token if completely valid.\n if (!!this.refreshToken) {\n this._storage.set<string>(this._refreshTokenStorageKey, this._refreshTokenString, {\n expires: this._refreshTokenPayload?.expiresAt\n });\n } else {\n this._storage.remove(this._refreshTokenStorageKey);\n }\n }\n\n private persistUserInStorage() {\n if (!this._storage) {\n return;\n }\n\n const user = this._user$.getValue();\n if (!user) {\n return this._storage.remove(this._userStorageKey);\n }\n\n const date = new Date();\n date.setFullYear(date.getFullYear() + 1);\n this._storage.set<unknown>(this._userStorageKey, user, {\n expires: new Date(date.getTime())\n });\n }\n\n private setAccessToken(value: string | null) {\n this._accessTokenString = value ?? null;\n this._accessTokenPayload = this._jwt.decode(this._accessTokenString);\n }\n\n private setRefreshToken(value: string | null) {\n this._refreshTokenString = value ?? null;\n this._refreshTokenPayload = this._jwt.decode(this._refreshTokenString);\n }\n\n private generateKey(applicationId: string, key: string) {\n return [applicationId, key].join('_');\n }\n\n private isTokenValid(token: AuthToken) {\n if (!token) {\n return false;\n }\n\n return token?.expiresAt?.getTime() > Date.now();\n }\n\n}\n","import {AUTH_CONFIG, AUTH_REDIRECT_HANDLER, AuthConfig, AuthRedirectHandler} from './interfaces/config.interface';\nimport {inject, Injectable, Injector, makeStateKey, StateKey, TransferState} from '@angular/core';\nimport {HttpClient, HttpContext, HttpHeaders, HttpParams} from '@angular/common/http';\nimport {AuthProvider, AuthSignInResponse} from './interfaces/provider.interface';\nimport {Storage, StorageOption} from '@bravobit/bb-foundation/storage';\nimport {HttpConfig, HTTP_CONFIG} from '@bravobit/bb-foundation/http';\nimport {USE_AUTHORIZATION} from './tokens/use-authorization.token';\nimport {AuthVerifyProvider} from './providers/verify.provider';\nimport {AuthEmailProvider} from './providers/email.provider';\nimport {firstValueFrom, Observable, of} from 'rxjs';\nimport {Platform} from '@angular/cdk/platform';\nimport {AuthSession} from './auth.session';\nimport {map, tap} from 'rxjs/operators';\nimport {Router} from '@angular/router';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class Auth {\n\n // Dependencies.\n private readonly _storage: Storage = inject(Storage);\n private readonly _injector: Injector = inject(Injector);\n private readonly _platform: Platform = inject(Platform);\n private readonly _httpClient: HttpClient = inject(HttpClient);\n private readonly _state?: TransferState = inject(TransferState, {optional: true});\n private readonly _config?: AuthConfig = inject(AUTH_CONFIG, {optional: true});\n private readonly _httpConfig?: HttpConfig = inject(HTTP_CONFIG, {optional: true});\n private readonly _handler?: AuthRedirectHandler = inject(AUTH_REDIRECT_HANDLER, {optional: true});\n\n // Readonly data.\n private readonly _authStateKey: StateKey<any | null> = makeStateKey(`bbAuthStateKey`);\n private readonly _httpAlias: string | null = this._httpConfig?.defaultAlias ?? null;\n\n readonly session: AuthSession;\n readonly user: Observable<any | null>;\n\n private _refreshHandler: number | null = null;\n\n constructor() {\n // We select a storage strategy based on the server/browser.\n // Only cookies CAN work on the server.\n const storageStrategy = this._platform.isBrowser\n ? this._storage.select(this._config?.preferredStorageOptions ?? [StorageOption.Cookie, StorageOption.Local])\n : this._storage.cookie;\n\n // Starting the new session.\n this.session = new AuthSession({\n id: this._config?.applicationId,\n storage: storageStrategy,\n strategy: this._config?.strategy\n });\n this.user = this.session.user;\n }\n\n async initialize() {\n // Check if the app should bootstrap the authentication.\n const shouldBootstrap = this._config?.bootstrap ?? true;\n if (!shouldBootstrap) {\n return this.handleAutoRefreshing();\n }\n\n // Only retrieve from the server when we are actually authenticated.\n if (!this.session.authenticated()) {\n return;\n }\n\n // Get the key from the server state.\n if (this._state && this._state?.hasKey(this._authStateKey)) {\n const user = this._state?.get(this._authStateKey, null) ?? null;\n return this.session.setUser(user);\n }\n\n if (this._config?.strategy === 'browserStorage' || (this._config?.strategy === 'httpOnlyCookie' && this._platform.isBrowser)) {\n // Try to fetch the user from the server.\n const user$ = this.me();\n const user = await firstValueFrom(user$, {defaultValue: null});\n\n // Set the state if exists.\n if (this._state) {\n this._state?.set<any>(this._authStateKey, user ?? null);\n }\n\n this.session.setUser(user);\n }\n\n this.handleAutoRefreshing();\n }\n\n me<T = any>() {\n const url = this.getUrl('auth/me');\n return this._httpClient.get<T>(url);\n }\n\n async signIn<T = any>(provider: AuthProvider, verify?: (user: T) => void) {\n const {accessToken, refreshToken, user, ...result} = await provider.authenticate(this._httpClient);\n\n // Verify the user.\n verify?.(user);\n\n // Validate if the provider is one of the available\n // providers then return the user object and the provider.\n const apiProvider = result?.provider ?? null;\n const apiVerifyToken = result?.verifyToken ?? null;\n const availableProviders = this._config?.providers ?? ['email', 'sms', 'totp'];\n if (availableProviders.includes(apiProvider)) {\n return <AuthSignInResponse>{user, provider: apiProvider, verifyToken: apiVerifyToken};\n }\n\n // Set the tokens in storage.\n this.setTokens(accessToken, refreshToken);\n\n // Set the user in storage.\n this.session.setUser(user);\n\n // Return the user.\n return <AuthSignInResponse>{user};\n }\n\n async signInWithEmail<T = any>(email: string, password: string, verify?: (user: T) => void) {\n const url = this.getUrl('auth/login');\n return this.signIn(new AuthEmailProvider(email, password, url), verify);\n }\n\n async signInWithVerifyCode(code: string, verifyToken: string) {\n const url = this.getUrl('auth/verify');\n return this.signIn(new AuthVerifyProvider(code, verifyToken, url));\n }\n\n async resendVerifyCode(verifyToken: string) {\n const url = this.getUrl('auth/resend');\n const result$ = this._httpClient.post(url, {verify_token: verifyToken});\n return await firstValueFrom(result$);\n }\n\n async register<T = any>(data: any, options?: {\n headers?: HttpHeaders | {\n [header: string]: string | string[];\n };\n params?: HttpParams | {\n [param: string]: string | number | boolean | ReadonlyArray<string | number | boolean>;\n };\n }) {\n // Execute API call.\n const url = this.getUrl('auth/register');\n const result$ = this._httpClient.post<{ token: string, refresh_token: string, user: any }>(url, data, options);\n const result = await firstValueFrom(result$);\n\n // Set the tokens in storage.\n this.setTokens(result?.token, result?.refresh_token);\n\n // Set the user in storage.\n const user = result?.user;\n this.session.setUser(user);\n\n // Return the user.\n return <T>user;\n }\n\n logout() {\n // If we don't have a refresh token just clear the session.\n // Note: We do this because else we try to invalidate\n // an \"undefined\" refresh token.\n const refreshToken = this.session.refreshToken;\n if (!refreshToken && this._config?.strategy === 'browserStorage') {\n return this.session.clear();\n }\n\n // We do have a refresh token, so try to invalidate it in the backend.\n // or we are httpOnlyCookie authenticated.\n try {\n const url = this.getUrl('auth/logout');\n const headerName = this._config?.http?.header ?? 'Authorization';\n\n const headers = new HttpHeaders({\n [headerName]: refreshToken\n });\n\n const observable$ = this._httpClient.get(url, {\n ...(this._config?.strategy === 'browserStorage' ? {headers} : {}),\n ...(this._config?.strategy === 'httpOnlyCookie' ? {withCredentials: true} : {})\n });\n firstValueFrom(observable$).then(_ => _).catch(_ => _);\n } catch {\n // Do nothing because the tokens will be deleted anyways from the session.\n } finally {\n // Delete the tokens from the session.\n this.session.clear();\n }\n }\n\n refresh() {\n // If the refresh token does\n // not exist just return an observable of null.\n const refreshToken = this.session.refreshToken;\n if (!refreshToken && this._config?.strategy === 'browserStorage') {\n return of(null);\n }\n\n // Perform the refresh call.\n const headerName = this._config?.http?.header ?? 'Authorization';\n const scheme = this._config?.http?.scheme ?? 'Bearer';\n\n const url = this.getUrl('auth/refresh');\n const context = new HttpContext().set(USE_AUTHORIZATION, false);\n\n const headers = new HttpHeaders({\n [headerName]: `${scheme} ${refreshToken}`\n });\n\n return this._httpClient.get<{ token: string, refresh_token: string }>(url, {\n ...(this._config?.strategy === 'browserStorage' ? {headers} : {}),\n ...(this._config?.strategy === 'httpOnlyCookie' ? {withCredentials: true} : {}),\n context: context\n }).pipe(\n tap(({token, refresh_token}) => this.setTokens(token, refresh_token)),\n map(({token}) => token)\n );\n }\n\n async requestPassword(email: string, extraParams: { [key: string]: any } = {}) {\n const url = this.getUrl('auth/reset');\n const observable$ = this._httpClient.post(url, {...extraParams, email});\n return firstValueFrom(observable$);\n }\n\n async resetPassword(token: string, newPassword: string, extraParams: { [key: string]: any } = {}) {\n const url = this.getUrl('auth/reset-password');\n const observable$ = this._httpClient.post(url, {...extraParams, token, password: newPassword});\n return firstValueFrom(observable$);\n }\n\n clearAndRedirect() {\n // 1. Delete the tokens from the session.\n this.session.clear();\n\n if (this._handler) {\n const urlTree = this._handler.onFailedAuthenticated();\n if (typeof urlTree === 'boolean' || urlTree === null || urlTree === undefined) {\n return;\n }\n\n this.router.navigateByUrl(urlTree).then(_ => _);\n return;\n }\n\n // 2. Compose the route url.\n const redirectUrl = this._config?.redirects.unauthenticated ?? null;\n\n // 3. Route back if the user provided a redirect url.\n if (this.router && redirectUrl) {\n const commands = Array.isArray(redirectUrl) ? redirectUrl : [redirectUrl];\n this.router.navigate(commands).then(_ => _);\n }\n }\n\n private setTokens(accessToken: string, refreshToken: string) {\n // Set the tokens in our session.\n this.session.setTokens(accessToken, refreshToken);\n\n // We need to update the auto refresh of the refresh token.\n this.handleAutoRefreshing();\n }\n\n private handleAutoRefreshing() {\n const shouldAutoRefresh = this._config?.autoRefresh ?? false;\n if (!shouldAutoRefresh || this._config?.strategy === 'httpOnlyCookie') {\n return;\n }\n\n const expiresAt = this.session.refreshTokenPayload?.expiresAt ?? null;\n if (expiresAt === null || !this._platform.isBrowser) {\n return;\n }\n\n const differenceInMilliseconds = expiresAt.getTime() - Date.now();\n const offsetInMilliseconds = 10_000; // 10 seconds.\n\n // We want to start the refresh 10 seconds before it expires.\n const actualTiming = differenceInMilliseconds - offsetInMilliseconds;\n if (actualTiming <= 0) {\n return;\n }\n\n // We need to cap the timings because if\n // we get large numbers it might cause unwanted results.\n const maxTiming = 1000 * 60 * 60 * 24; // 24 hours.\n const cappedTiming = Math.max(1, Math.min(actualTiming, maxTiming));\n try {\n if (this._refreshHandler !== null) {\n clearTimeout?.(this._refreshHandler);\n this._refreshHandler = null;\n }\n this._refreshHandler = window?.setTimeout?.(() => this.autoRefresh(), cappedTiming);\n } catch {\n // Just ignore it.\n }\n }\n\n private async autoRefresh() {\n try {\n // We just need to wait for it to refresh.\n const refresh$ = this.refresh();\n await firstValueFrom(refresh$);\n } catch {\n // Something went wrong refreshing, we need to clear.\n this.clearAndRedirect();\n }\n }\n\n private get router() {\n return this._injector.get(Router);\n }\n\n private getUrl(endpoint: string) {\n return [this._httpAlias, endpoint]\n .filter(item => !!item)\n .join('/');\n }\n\n}\n","import {Directive, EmbeddedViewRef, Input, OnDestroy, OnInit, TemplateRef, ViewContainerRef} from '@angular/core';\nimport {distinctUntilChanged, map} from 'rxjs/operators';\nimport {Auth} from '../auth.service';\nimport {Subscription} from 'rxjs';\n\n@Directive({\n selector: 'ng-template[bbAuthenticated]'\n})\nexport class BbAuthenticated implements OnInit, OnDestroy {\n\n // Data.\n private _valid: boolean = false;\n\n // Templates.\n private _elseTemplateRef: TemplateRef<any> | null = null;\n\n // View refs.\n private _thenViewRef: EmbeddedViewRef<any> | null = null;\n private _elseViewRef: EmbeddedViewRef<any> | null = null;\n\n // Subscriptions.\n private _subscription = new Subscription();\n\n @Input()\n set bbAuthenticatedElse(templateRef: TemplateRef<any>) {\n this.assertTemplate('bbAuthenticatedElse', templateRef);\n this._elseTemplateRef = templateRef;\n this.updateView();\n }\n\n constructor(private _auth: Auth,\n private _templateRef: TemplateRef<any>,\n private _viewContainerRef: ViewContainerRef) {\n }\n\n ngOnInit() {\n const subscription = this._auth.user.pipe(\n map(user => !!user),\n distinctUntilChanged()\n ).subscribe(valid => {\n this._valid = valid;\n this.updateView();\n });\n this._subscription.add(subscription);\n }\n\n ngOnDestroy() {\n this._subscription?.unsubscribe();\n }\n\n private updateView() {\n if (this._valid) {\n if (!this._thenViewRef) {\n this._viewContainerRef.clear();\n this._elseViewRef = null;\n if (this._templateRef) {\n this._thenViewRef = this._viewContainerRef.createEmbeddedView(this._templateRef);\n }\n }\n } else {\n if (!this._elseViewRef) {\n this._viewContainerRef.clear();\n this._thenViewRef = null;\n if (this._elseTemplateRef) {\n this._elseViewRef = this._viewContainerRef.createEmbeddedView(this._elseTemplateRef);\n }\n }\n }\n }\n\n private assertTemplate(property: string, templateRef: TemplateRef<any> | null) {\n const isTemplateRefOrNull = !!(!templateRef || templateRef.createEmbeddedView);\n if (!isTemplateRefOrNull) {\n throw new Error(`${property} must be a TemplateRef.`);\n }\n }\n\n static ngAcceptInputType_bbAuthenticatedElse: TemplateRef<any>;\n\n}\n","import {ActivatedRouteSnapshot, CanActivateFn, Router, RouterStateSnapshot} from '@angular/router';\nimport {AUTH_CONFIG, AUTH_REDIRECT_HANDLER} from '../interfaces/config.interface';\nimport {inject} from '@angular/core';\nimport {Auth} from '../auth.service';\nimport {map} from 'rxjs/operators';\nimport {first} from 'rxjs';\n\nexport const bbAnonymousGuard: CanActivateFn = (route: ActivatedRouteSnapshot, state: RouterStateSnapshot) => {\n const auth = inject(Auth);\n const router = inject(Router);\n const config = inject(AUTH_CONFIG, {optional: true});\n const redirectHandler = inject(AUTH_REDIRECT_HANDLER, {optional: true});\n\n return auth.user.pipe(\n map(user => !!user),\n map(authenticated => {\n if (!authenticated) {\n return true;\n }\n\n if (redirectHandler) {\n return redirectHandler.onFailedAnonymous(route, state);\n }\n\n // If we don't have a URL to go to we can just say\n // the user is not allowed in this route by returning false.\n const nextUrl = config?.redirects?.authenticated ?? null;\n if (!nextUrl) {\n return false;\n }\n\n const commands = Array.isArray(nextUrl) ? nextUrl : [nextUrl];\n return router.createUrlTree(commands);\n }),\n first()\n );\n};\n","import {ActivatedRouteSnapshot, CanActivateFn, Router, RouterStateSnapshot} from '@angular/router';\nimport {AUTH_CONFIG, AUTH_REDIRECT_HANDLER} from '../interfaces/config.interface';\nimport {Auth} from '../auth.service';\nimport {inject} from '@angular/core';\nimport {map} from 'rxjs/operators';\nimport {first} from 'rxjs';\n\nexport const bbAuthenticatedGuard: CanActivateFn = (route: ActivatedRouteSnapshot, state: RouterStateSnapshot) => {\n const auth = inject(Auth);\n const router = inject(Router);\n const config = inject(AUTH_CONFIG, {optional: true});\n const redirectHandler = inject(AUTH_REDIRECT_HANDLER, {optional: true});\n\n return auth.user.pipe(\n map(user => !!user),\n map(authenticated => {\n if (authenticated) {\n return true;\n }\n\n if (redirectHandler) {\n return redirectHandler.onFailedAuthenticated(route, state);\n }\n\n // If we don't have a URL to go to we can just say\n // the user is not allowed in this route by returning false.\n const nextUrl = config?.redirects?.unauthenticated ?? null;\n if (!nextUrl) {\n return false;\n }\n\n const setRedirectOnFailedAuth = config?.setRedirectOnFailedAuth ?? true;\n const redirectUrl = state?.url ?? null;\n const queryParams = setRedirectOnFailedAuth && redirectUrl ? {redirectUrl} : {};\n const commands = Array.isArray(nextUrl) ? nextUrl : [nextUrl];\n return router.createUrlTree(commands, {queryParams});\n }),\n first()\n );\n};\n","import {BehaviorSubject, firstValueFrom, Observable} from 'rxjs';\nimport {combineLatestMap} from '@bravobit/bb-foundation/rxjs';\nimport {distinctUntilChanged, map} from 'rxjs/operators';\nimport {inject, Injectable} from '@angular/core';\nimport {Auth} from './auth.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class Acting {\n\n // Dependencies.\n private readonly _auth: Auth = inject(Auth);\n\n // Cache.\n private _userId$ = new BehaviorSubject<number>(null);\n\n // State.\n readonly info$: Observable<{ active?: boolean, user?: any }> = this.getInfo();\n\n async start(userId: number) {\n this._userId$.next(userId);\n return await this.fetchUserDetails();\n }\n\n async stop() {\n this._userId$.next(null);\n return await this.fetchUserDetails();\n }\n\n getCurrent() {\n return this._userId$.getValue();\n }\n\n private async fetchUserDetails() {\n const user$ = this._auth.me();\n const user = await firstValueFrom(user$);\n this._auth.session.setUser(user);\n }\n\n private getInfo() {\n const active$ = this._userId$.pipe(\n map(item => !!item),\n distinctUntilChanged()\n );\n\n return combineLatestMap({active: active$, user: this._auth.user});\n }\n\n}\n","import {HttpHandler, HttpInterceptor, HttpRequest} from '@angular/common/http';\nimport {inject, Injectable} from '@angular/core';\nimport {Acting} from './acting.service';\n\n@Injectable()\nexport class ActingInterceptor implements HttpInterceptor {\n\n // Dependencies.\n private readonly _acting: Acting = inject(Acting);\n\n // Readonly data.\n private readonly _headerString: string = 'X-Act-User-Id';\n\n intercept(request: HttpRequest<unknown>, next: HttpHandler) {\n const userId = this._acting.getCurrent();\n if (userId === null || userId === undefined) {\n return next.handle(request);\n }\n\n const modified = request.clone({\n setHeaders: {[this._headerString]: `${userId}`}\n });\n\n return next.handle(modified);\n }\n\n}\n","import {HttpErrorResponse, HttpHandler, HttpInterceptor, HttpRequest} from '@angular/common/http';\nimport {catchError, filter, finalize, switchMap, take} from 'rxjs/operators';\nimport {AUTH_CONFIG, AuthConfig} from './interfaces/config.interface';\nimport {USE_AUTHORIZATION} from './tokens/use-authorization.token';\nimport {HttpError} from '@bravobit/bb-foundation/http';\nimport {BehaviorSubject, of, throwError} from 'rxjs';\nimport {inject, Injectable} from '@angular/core';\nimport {Auth} from './auth.service';\n\n@Injectable()\nexport class AuthInterceptor implements HttpInterceptor {\n\n // Dependencies.\n private readonly _auth: Auth = inject(Auth);\n private readonly _config?: AuthConfig = inject(AUTH_CONFIG, {optional: true});\n\n // Readonly data.\n private readonly _authHeaderString: string = this._config?.http?.header ?? 'Authorization';\n private readonly _authScheme: string = this._config?.http?.scheme ?? 'Bearer';\n\n // Data.\n isRefreshing: boolean = false;\n refreshingAccessToken$ = new BehaviorSubject<boolean>(false);\n\n intercept(request: HttpRequest<unknown>, next: HttpHandler) {\n // 1. Check if the user wants to use the authorization for this request.\n if (!request.context.get(USE_AUTHORIZATION)) {\n return next.handle(request);\n }\n\n // 2. Compose the new request.\n const newRequest = this.modifyRequest(request);\n\n // 3. Handle all errors.\n return next.handle(newRequest).pipe(\n catchError(error => {\n // Handle the HTTP401 error.\n if ((error instanceof HttpErrorResponse || error instanceof HttpError) && error?.status === 401) {\n return this.handle401Error(request, next);\n }\n\n // Just re-throw the parsed error.\n return throwError(() => error);\n })\n );\n }\n\n private modifyRequest<T>(request: HttpRequest<T>) {\n switch (this._config?.strategy) {\n case 'browserStorage':\n return this.handleBrowserStorageRequest(request);\n case 'httpOnlyCookie':\n return this.handleHttpOnlyCookieRequest(request);\n default:\n throw new Error(`invalid auth strategy \"${this._config?.strategy}\"`);\n }\n }\n\n private handleBrowserStorageRequest<T>(request: HttpRequest<T>) {\n const accessToken = this.getAccessTokenFromSession(request);\n if (!accessToken) {\n return request.clone({headers: request.headers.delete(this._authHeaderString)});\n }\n\n return request.clone({\n setHeaders: {[this._authHeaderString]: `${this._authScheme} ${accessToken}`}\n });\n }\n\n private handleHttpOnlyCookieRequest<T>(request: HttpRequest<T>) {\n return request.clone({withCredentials: true});\n }\n\n private handle401Error(request: HttpRequest<unknown>, next: HttpHandler) {\n // If already refreshing wait for the refresh token to complete.\n if (this.isRefreshing) {\n return this.refreshingAccessToken$.pipe(\n filter(accessToken => accessToken !== false),\n take(1),\n switchMap(() => next.handle(this.modifyRequest(request)))\n );\n }\n\n // Set the refreshing to true.\n this.isRefreshing = true;\n this.refreshingAccessToken$.next(false);\n\n return this._auth.refresh().pipe(\n switchMap(newAccessToken => {\n if (!newAccessToken && this._config?.strategy === 'browserStorage') {\n return throwError(() => new Error('No refresh token was available.'));\n }\n\n this.refreshingAccessToken$.next(true);\n return next.handle(this.modifyRequest(request));\n }),\n catchError(() => this.logoutUser()),\n finalize(() => this.isRefreshing = false)\n );\n }\n\n private logoutUser() {\n // Handle the refresh error.\n this._auth.clearAndRedirect();\n\n // Return null as data.\n return of(null);\n }\n\n private getAccessTokenFromSession(request: HttpRequest<unknown>) {\n // Get the token based on header.\n if (request.headers.has(this._authHeaderString)) {\n return request.headers.get(this._authHeaderString);\n }\n\n // Return the default access token.\n return this._auth.session.accessToken;\n }\n\n}\n","import {EnvironmentProviders, makeEnvironmentProviders, inject, provideAppInitializer, Provider} from '@angular/core';\nimport {AUTH_CONFIG, AuthConfig} from './interfaces/config.interface';\nimport {HTTP_INTERCEPTORS} from '@angular/common/http';\nimport {ActingInterceptor} from './acting.interceptor';\nimport {AuthInterceptor} from './auth.interceptor';\nimport {Auth} from './auth.service';\n\nexport function provideAuthConfig(config?: AuthConfig): EnvironmentProviders {\n const providers: Provider = [\n {provide: AUTH_CONFIG, useValue: config},\n {provide: HTTP_INTERCEPTORS, useClass: AuthInterceptor, multi: true},\n provideAppInitializer(() => inject(Auth).initialize())\n ];\n\n if (config?.strategy === 'httpOnlyCookie' && !config?.bootstrap) {\n throw new Error('the \"bootstrap\" option must be enabled when using strategy=httpOnlyCookie');\n }\n\n if (config?.interceptActing) {\n providers.push({provide: HTTP_INTERCEPTORS, useClass: ActingInterceptor, multi: true});\n }\n\n return makeEnvironmentProviders(providers);\n}\n","import {BbAuthenticated} from './directives/authenticated.directive';\nimport {ModuleWithProviders, NgModule} from '@angular/core';\nimport {AuthConfig} from './interfaces/config.interface';\nimport {provideAuthConfig} from './auth.config';\n\n@NgModule({\n imports: [BbAuthenticated],\n exports: [BbAuthenticated]\n})\nexport class AuthModule {\n\n static forRoot(config: AuthConfig): ModuleWithProviders<AuthModule> {\n return {\n ngModule: AuthModule,\n providers: [\n provideAuthConfig(config)\n ]\n };\n }\n\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.Auth"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bravobit-bb-foundation-collections.mjs","sources":["../../../projects/bb-foundation/collections/src/lib/providers/collection.provider.ts","../../../projects/bb-foundation/collections/src/lib/providers/api-collection.provider.ts","../../../projects/bb-foundation/collections/src/lib/classes/array.collection.ts","../../../projects/bb-foundation/collections/src/lib/providers/local-collection.provider.ts","../../../projects/bb-foundation/collections/src/lib/directives/collections-data.directive.ts","../../../projects/bb-foundation/collections/src/lib/directives/collections-data-row.directive.ts","../../../projects/bb-foundation/collections/src/lib/directives/collections-empty.directive.ts","../../../projects/bb-foundation/collections/src/lib/directives/collections-error.directive.ts","../../../projects/bb-foundation/collections/src/lib/directives/collections-initial.directive.ts","../../../projects/bb-foundation/collections/src/lib/directives/collections-item.directive.ts","../../../projects/bb-foundation/collections/src/lib/components/collections-viewer/collections-viewer.component.ts","../../../projects/bb-foundation/collections/src/lib/components/collections-viewer/collections-viewer.component.html","../../../projects/bb-foundation/collections/src/lib/collections.interfaces.ts","../../../projects/bb-foundation/collections/src/lib/components/collections-pager/collections-pager.component.ts","../../../projects/bb-foundation/collections/src/lib/components/collections-pager/collections-pager.component.html","../../../projects/bb-foundation/collections/src/lib/components/collections-actions/collections-actions.component.ts","../../../projects/bb-foundation/collections/src/lib/components/collections-actions/collections-actions.component.html","../../../projects/bb-foundation/collections/src/lib/components/collections-table/collections-table.component.ts","../../../projects/bb-foundation/collections/src/lib/components/collections-table/collections-table.component.html","../../../projects/bb-foundation/collections/src/lib/components/collections-table-sorting/collections-table-sorting.component.ts","../../../projects/bb-foundation/collections/src/lib/components/collections-table-sorting/collections-table-sorting.component.html","../../../projects/bb-foundation/collections/src/lib/components/collections-table-label/collections-table-label.component.ts","../../../projects/bb-foundation/collections/src/lib/components/collections-table-label/collections-table-label.component.html","../../../projects/bb-foundation/collections/src/lib/components/collections-grid/collections-grid.component.ts","../../../projects/bb-foundation/collections/src/lib/components/collections-grid/collections-grid.component.html","../../../projects/bb-foundation/collections/src/lib/collection.ts","../../../projects/bb-foundation/collections/src/lib/collections.module.ts","../../../projects/bb-foundation/collections/src/lib/collections.config.ts","../../../projects/bb-foundation/collections/src/bravobit-bb-foundation-collections.ts"],"sourcesContent":["import {CollectionApiParams, CollectionContext, CollectionData, CollectionRequest} from '../interfaces/collection.interface';\nimport {Observable} from 'rxjs';\n\nexport abstract class CollectionProvider<T> {\n\n protected cachedRequestParams: Record<string, CollectionApiParams> | null = null;\n\n abstract transform(request: CollectionRequest, context: CollectionContext<T>): Observable<CollectionData<T>>;\n\n protected validateParams(request: Record<string, CollectionApiParams>, _context: CollectionContext<T>) {\n return request;\n }\n\n protected formatArrayToCollectionData(items: T[]) {\n const count = items?.length ?? 1;\n return <CollectionData<T>>{\n pageSize: count,\n totalEntries: count,\n pageNumber: 1,\n totalPages: 1,\n data: items\n };\n }\n\n protected deepCompare(value1: unknown, value2: unknown) {\n if (value1 === value2) {\n return true;\n }\n\n if (typeof value1 !== 'object' || typeof value2 !== 'object' || value1 === null || value2 === null) {\n return false;\n }\n\n const keys1 = Object.keys(value1);\n const keys2 = Object.keys(value2);\n if (keys1.length !== keys2.length) {\n return false;\n }\n\n for (const key of keys1) {\n if (!keys2.includes(key)) {\n return false;\n }\n if (!this.deepCompare(value1[key], value2[key])) {\n return false;\n }\n }\n\n return true;\n }\n\n}\n","import {CollectionApiResponse, CollectionData, CollectionApiParams, CollectionRequest, CollectionContext} from '../interfaces/collection.interface';\nimport {combineLatest, isObservable, Observable, of} from 'rxjs';\nimport {CollectionProvider} from './collection.provider';\nimport {HttpClient} from '@angular/common/http';\nimport {map, switchMap, tap} from 'rxjs/operators';\n\nexport class ApiCollectionProvider<T> extends CollectionProvider<T> {\n\n // State.\n protected extraParams: Record<string, Observable<CollectionApiParams>> = {};\n protected extraObjectParams: Observable<Record<string, CollectionApiParams>>[] = [];\n\n constructor(protected readonly endpoint: string | Observable<string>,\n protected readonly httpClient: HttpClient) {\n super();\n }\n\n append(name: string, value: CollectionApiParams | Observable<CollectionApiParams>) {\n this.extraParams[name] = isObservable(value) ? value : of(value);\n return this;\n }\n\n appendObject(value: Record<string, CollectionApiParams> | Observable<Record<string, CollectionApiParams>>) {\n const params = isObservable(value) ? value : of(value);\n this.extraObjectParams.push(params);\n }\n\n transform(request: CollectionRequest, context: CollectionContext<T>) {\n const endpoint$ = isObservable(this.endpoint) ? this.endpoint : of(this.endpoint);\n const params = this.getBackendFormat(request);\n const extraParams$ = this.getExtraParams(this.extraParams);\n const extraObjectParams$ = this.getExtraObjectParams(this.extraObjectParams);\n\n return combineLatest([endpoint$, extraParams$, extraObjectParams$]).pipe(\n tap(() => context.collection.loading$.next(true)),\n switchMap(([endpoint, extraParams, extraObjectParams]) => {\n const validatedParams = this.validateParams({...params, ...extraParams, ...extraObjectParams}, context);\n return this.httpClient.get<CollectionApiResponse<T> | T[]>(endpoint, {params: validatedParams});\n }),\n map(response => this.formatToCollectionData(response))\n );\n }\n\n protected override validateParams(request: Record<string, CollectionApiParams>, context: CollectionContext<T>) {\n if (!this.deepCompare(request, this.cachedRequestParams)) {\n if (request?.['page'] && request?.['page'] === this.cachedRequestParams?.['page']) {\n context.collection.pageNumberControl?.setValue(1);\n request['page'] = context.collection.pageNumberControl?.value;\n }\n }\n\n this.cachedRequestParams = {...request};\n return request;\n }\n\n protected getExtraParams(params: Record<string, Observable<CollectionApiParams>>) {\n const keys = Object.keys(params ?? {});\n if (keys?.length <= 0) {\n return of({});\n }\n\n const observables$ = keys.map(key => params?.[key]);\n return combineLatest(observables$).pipe(\n map(data => {\n return data.reduce((previous, current, index) => {\n if (current === null || current === undefined) {\n return previous;\n }\n const key = keys?.[index];\n return {...previous, [key]: current};\n }, {});\n })\n );\n }\n\n protected getExtraObjectParams(params$: Observable<Record<string, CollectionApiParams>>[]) {\n if (params$?.length <= 0) {\n return of({});\n }\n return combineLatest(params$).pipe(\n map(data => (data ?? []).reduce((previous, current) => ({...previous, ...(current ?? {})}), {})),\n map(data => {\n return Object.keys(data ?? {}).reduce((previous, current) => {\n const value = data?.[current] ?? null;\n if (value === null || value === undefined) {\n return previous;\n }\n\n return {...previous, [current]: value};\n }, {});\n })\n );\n }\n\n protected formatToCollectionData(response: CollectionApiResponse<T> | T[]) {\n if (Array.isArray(response)) {\n return this.formatArrayToCollectionData(response);\n }\n\n return <CollectionData<T>>{\n pageSize: response?.page_size,\n pageNumber: response?.page_number,\n totalPages: response?.total_pages,\n totalEntries: response?.total_entries,\n data: response?.data,\n raw: response\n };\n }\n\n protected getBackendFormat(request: CollectionRequest) {\n const params = {};\n\n params['page'] = request?.pageNumber ?? 1;\n params['page_size'] = request?.pageSize ?? 25;\n\n if (request?.sort) {\n const sort = Array.isArray(request?.sort) ? request?.sort : [request?.sort];\n const filteredSort = sort?.filter(item => !!item?.name && !!item?.direction);\n\n params['sort'] = filteredSort?.map(item => item?.name)?.join(',');\n params['sort_direction'] = filteredSort?.map(item => item?.direction)?.join(',');\n }\n\n if (request?.query && request?.query?.length > 0 && request?.queryFields && request?.queryFields?.length > 0) {\n params['query'] = request?.query;\n params['query_fields'] = request?.queryFields?.join(',');\n }\n\n return params;\n }\n\n}\n","import {ArrayCollectionStringKeys} from '../interfaces/array-collection.interface';\nimport {CollectionRequestSort} from '../interfaces/collection.interface';\n\nexport class ArrayCollection<T> {\n\n constructor(protected value: T[]) {\n }\n\n search(query: string, fields: ArrayCollectionStringKeys<T>[]) {\n const normalizedQuery = this.normalizeValueAsString(query);\n if (normalizedQuery === null || normalizedQuery?.length <= 0) {\n return this;\n }\n\n const queryFields = fields ?? [];\n if (queryFields.length <= 0) {\n throw new Error('cannot search without query fields');\n }\n\n this.value = this.value.filter(item => {\n for (const field of queryFields) {\n const normalizedValue = this.normalizeValueAsString(item?.[field]);\n if (normalizedValue === null) {\n continue;\n }\n\n if (normalizedValue.includes(normalizedQuery)) {\n return true;\n }\n }\n\n return false;\n });\n\n return this;\n }\n\n sortBy(sort: CollectionRequestSort<keyof T> | CollectionRequestSort<keyof T>[], sortables: Partial<Record<ArrayCollectionStringKeys<T>, 'string' | 'number'>>) {\n if (sort === null || sort === undefined) {\n return this;\n }\n \n const sorts = Array.isArray(sort) ? sort : [sort];\n if (sorts.length <= 0) {\n return this;\n }\n\n this.value = this.value.sort((a, b) => {\n for (const item of sorts) {\n const type = sortables?.[<any>item?.name] ?? null;\n if (type === null) {\n throw new Error(`invalid sorting key \"${item?.name?.toString()}\"`);\n }\n const aValue = a?.[item?.name] ?? null;\n const bValue = b?.[item?.name] ?? null;\n const direction = item?.direction ?? null;\n\n if (type === 'string') {\n const comparison = String(aValue).localeCompare(String(bValue));\n if (comparison !== 0) {\n return direction === 'asc' ? comparison : -comparison;\n }\n } else if (type === 'number') {\n if (aValue < bValue) return direction === 'asc' ? -1 : 1;\n if (aValue > bValue) return direction === 'asc' ? 1 : -1;\n }\n }\n\n return 0;\n });\n\n return this;\n }\n\n toPage(pageNumber: number, pageSize: number) {\n const totalEntries = this.value?.length ?? 0;\n const totalPages = Math.max(1, Math.ceil(totalEntries / pageSize));\n\n const startIndex = (pageNumber - 1) * pageSize;\n const endIndex = startIndex + pageSize;\n const data = this.value?.slice(startIndex, endIndex) ?? [];\n\n return {totalPages, totalEntries, pageSize, pageNumber, data};\n }\n\n toArray() {\n return this.value;\n }\n\n protected normalizeValueAsString(value: unknown) {\n if (value === null || value === undefined) {\n return null;\n }\n return value\n .toString()\n .toLowerCase()\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '');\n }\n\n}\n","import {ArrayCollectionOptions} from '../interfaces/array-collection.interface';\nimport {CollectionRequest} from '../interfaces/collection.interface';\nimport {ArrayCollection} from '../classes/array.collection';\nimport {CollectionProvider} from './collection.provider';\nimport {delay, map} from 'rxjs/operators';\nimport {BehaviorSubject} from 'rxjs';\n\nexport class LocalCollectionProvider<T> extends CollectionProvider<T> {\n\n private _items$ = new BehaviorSubject<T[]>([]);\n\n constructor(items: T[],\n private _options?: ArrayCollectionOptions<T>) {\n super();\n this.update(items);\n }\n\n update(value: T[]) {\n this._items$.next(value);\n }\n\n transform(request: CollectionRequest) {\n return this._items$.pipe(\n map(items => {\n return new ArrayCollection<T>(items)\n .search(request?.query, <any>request.queryFields)\n .sortBy(<any>request?.sort, this._options?.sortables ?? {})\n .toPage(request?.pageNumber, request?.pageSize);\n }),\n delay(1)\n );\n }\n\n}\n","import {Directive, TemplateRef} from '@angular/core';\n\nexport class BbCollectionsDataContext<T> {\n items!: T[];\n loading!: boolean;\n\n constructor(items: T[], loading: boolean) {\n this.items = items;\n this.loading = loading;\n }\n}\n\n@Directive({\n selector: 'ng-template[bbCollectionsData]'\n})\nexport class BbCollectionsData<T> {\n\n constructor(public template: TemplateRef<BbCollectionsDataContext<T>>) {\n }\n\n static ngTemplateContextGuard<T>(dir: BbCollectionsData<T>, ctx: unknown): ctx is BbCollectionsDataContext<T> {\n return true;\n }\n\n}\n","import {Directive, TemplateRef} from '@angular/core';\n\nexport class BbCollectionsDataRowContext<T> {\n item!: T;\n $implicit!: T;\n\n constructor(item: T) {\n this.item = item;\n this.$implicit = item;\n }\n}\n\n@Directive({\n selector: 'ng-template[bbCollectionsDataRow]'\n})\nexport class BbCollectionsDataRow<T> {\n\n constructor(public template: TemplateRef<BbCollectionsDataRowContext<T>>) {\n }\n\n static ngTemplateContextGuard<T>(dir: BbCollectionsDataRow<T>, ctx: unknown): ctx is BbCollectionsDataRowContext<T> {\n return true;\n }\n\n}\n","import {Directive, TemplateRef} from '@angular/core';\n\nexport class BbCollectionsEmptyContext<T> {\n query!: string;\n loading!: boolean;\n\n constructor(query: string, loading: boolean) {\n this.query = query;\n this.loading = loading;\n }\n}\n\n@Directive({\n selector: 'ng-template[bbCollectionsEmpty]'\n})\nexport class BbCollectionsEmpty<T> {\n\n constructor(public template: TemplateRef<BbCollectionsEmptyContext<T>>) {\n }\n\n static ngTemplateContextGuard<T>(dir: BbCollectionsEmpty<T>, ctx: unknown): ctx is BbCollectionsEmptyContext<T> {\n return true;\n }\n\n}\n","import {Directive, TemplateRef} from '@angular/core';\n\nexport class BbCollectionsErrorContext<T> {\n error!: Error;\n loading!: boolean;\n\n constructor(error: Error, loading: boolean) {\n this.error = error;\n this.loading = loading;\n }\n}\n\n@Directive({\n selector: 'ng-template[bbCollectionsError]'\n})\nexport class BbCollectionsError<T> {\n\n constructor(public template: TemplateRef<BbCollectionsErrorContext<T>>) {\n }\n\n static ngTemplateContextGuard<T>(dir: BbCollectionsError<T>, ctx: unknown): ctx is BbCollectionsErrorContext<T> {\n return true;\n }\n\n}\n","import {Directive, TemplateRef} from '@angular/core';\n\nexport class BbCollectionsInitialContext<T> {\n}\n\n@Directive({\n selector: 'ng-template[bbCollectionsInitial]'\n})\nexport class BbCollectionsInitial<T> {\n\n constructor(public template: TemplateRef<BbCollectionsInitialContext<T>>) {\n }\n\n static ngTemplateContextGuard<T>(dir: BbCollectionsInitial<T>, ctx: unknown): ctx is BbCollectionsInitialContext<T> {\n return true;\n }\n\n}\n","import {Directive, TemplateRef} from '@angular/core';\n\nexport class BbCollectionsItemContext<T> {\n item!: T;\n $implicit!: T;\n\n constructor(item: T) {\n this.item = item;\n this.$implicit = item;\n }\n}\n\n@Directive({\n selector: 'ng-template[bbCollectionsItem]'\n})\nexport class BbCollectionsItem<T> {\n\n constructor(public template: TemplateRef<BbCollectionsItemContext<T>>) {\n }\n\n static ngTemplateContextGuard<T>(dir: BbCollectionsItem<T>, ctx: unknown): ctx is BbCollectionsItemContext<T> {\n return true;\n }\n\n}\n","import {ChangeDetectionStrategy, Component, ContentChild, Input, TemplateRef, ViewEncapsulation} from '@angular/core';\nimport {BbCollectionsInitial, BbCollectionsInitialContext} from '../../directives/collections-initial.directive';\nimport {BbCollectionsError, BbCollectionsErrorContext} from '../../directives/collections-error.directive';\nimport {BbCollectionsEmpty, BbCollectionsEmptyContext} from '../../directives/collections-empty.directive';\nimport {BbCollectionsData, BbCollectionsDataContext} from '../../directives/collections-data.directive';\nimport {AsyncPipe, NgTemplateOutlet} from '@angular/common';\nimport {Collection} from '../../collection';\n\n@Component({\n selector: '[bb-collections-viewer]',\n templateUrl: './collections-viewer.component.html',\n styleUrls: ['./collections-viewer.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {'class': 'bb-collections-viewer'},\n imports: [AsyncPipe, NgTemplateOutlet]\n})\nexport class BbCollectionsViewer<T = unknown> {\n\n // Content.\n @ContentChild(BbCollectionsData, {read: TemplateRef, static: false}) dataTemplate?: TemplateRef<BbCollectionsDataContext<T>>;\n @ContentChild(BbCollectionsEmpty, {read: TemplateRef, static: false}) emptyTemplate?: TemplateRef<BbCollectionsEmptyContext<T>>;\n @ContentChild(BbCollectionsError, {read: TemplateRef, static: false}) errorTemplate?: TemplateRef<BbCollectionsErrorContext<T>>;\n @ContentChild(BbCollectionsInitial, {read: TemplateRef, static: false}) initialTemplate?: TemplateRef<BbCollectionsInitialContext<T>>;\n\n // Inputs.\n @Input() collection: Collection<T> | null = null;\n\n}\n","@if (collection?.data$ | async; as data) {\n @switch (data?.state) {\n @case ('initial') {\n <ng-container *ngTemplateOutlet=\"initialTemplate\"></ng-container>\n }\n @case ('empty') {\n <ng-container\n *ngTemplateOutlet=\"emptyTemplate; context: {query: data?.request?.query, loading: data?.loading}\"></ng-container>\n }\n @case ('error') {\n <ng-container\n *ngTemplateOutlet=\"errorTemplate; context: {error: data?.error, loading: data?.loading}\"></ng-container>\n }\n @default {\n <ng-container\n *ngTemplateOutlet=\"dataTemplate; context: {items: data?.response?.data, loading: data?.loading}\"></ng-container>\n }\n }\n}\n","import {InjectionToken} from '@angular/core';\n\nexport const COLLECTIONS_CONFIG = new InjectionToken<CollectionsConfig>('collections config');\n\nexport interface CollectionsConfig {\n icons?: {\n actionsSearch?: string;\n actionsClose?: string;\n pagerArrowPrevious?: string;\n pagerArrowNext?: string;\n };\n}\n","import {ChangeDetectionStrategy, Component, inject, Input, numberAttribute, OnDestroy, OnInit, ViewEncapsulation} from '@angular/core';\nimport {BbLocalize, BbLocalizeString, BbLocalizeTemplate} from '@bravobit/bb-foundation/localize';\nimport {COLLECTIONS_CONFIG, CollectionsConfig} from '../../collections.interfaces';\nimport {CollectionData} from '../../interfaces/collection.interface';\nimport {BehaviorSubject, Observable, Subscription} from 'rxjs';\nimport {combineLatestMap} from '@bravobit/bb-foundation/rxjs';\nimport {BbIcon} from '@bravobit/bb-foundation/elements';\nimport {map, shareReplay} from 'rxjs/operators';\nimport {Collection} from '../../collection';\nimport {AsyncPipe} from '@angular/common';\n\n@Component({\n selector: 'bb-collections-pager',\n templateUrl: './collections-pager.component.html',\n styleUrls: ['./collections-pager.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {'class': 'bb-collections-pager'},\n imports: [AsyncPipe, BbLocalizeString, BbLocalize, BbLocalizeTemplate, BbIcon]\n})\nexport class BbCollectionsPager implements OnInit, OnDestroy {\n\n // Dependencies.\n private readonly _config?: CollectionsConfig = inject(COLLECTIONS_CONFIG, {optional: true});\n\n // Readonly data.\n readonly arrowPreviousIconName: string = this._config?.icons?.pagerArrowPrevious ?? 'material:arrow_back';\n readonly arrowNextIconName: string = this._config?.icons?.pagerArrowNext ?? 'material:arrow_forward';\n\n @Input({transform: numberAttribute})\n set maxAmountOfButtons(value: number) {\n this._maxAmountOfButtons$.next(Math.max(1, value));\n }\n\n get maxAmountOfButtons() {\n return this._maxAmountOfButtons$.getValue();\n }\n\n @Input({required: true})\n set collection(collection: Collection<unknown> | null) {\n this._collection = collection;\n this.observeCollectionChanges();\n }\n\n get collection() {\n return this._collection;\n }\n\n // Data.\n data$: Observable<{\n start?: number,\n end?: number,\n totalEntries?: number,\n totalPages?: number,\n pageNumber?: number,\n pages?: { page: number, active: boolean }[]\n }>;\n\n // State and subscriptions.\n private _collection: Collection<unknown> | null = null;\n private _subscription: Subscription | null = null;\n private _cache$ = new BehaviorSubject<Partial<CollectionData<unknown>>>({});\n private _maxAmountOfButtons$ = new BehaviorSubject<number>(3);\n\n ngOnInit() {\n this.setData();\n }\n\n ngOnDestroy() {\n this._subscription?.unsubscribe();\n }\n\n setPage(pageNumber: number, totalPages: number) {\n // Calculate the new value.\n const newValue = Math.min(\n totalPages,\n Math.max(1, pageNumber)\n );\n\n // Validate the value is actually different.\n const currentValue = this._collection?.pageNumberControl?.value;\n if (currentValue === newValue) {\n return;\n }\n\n this._collection?.pageNumberControl?.setValue(pageNumber);\n }\n\n private setData() {\n this.data$ = combineLatestMap({\n cache: this._cache$,\n maxAmountOfButtons: this._maxAmountOfButtons$\n }).pipe(\n map(({cache, maxAmountOfButtons}) => {\n const pageSize = cache?.pageSize ?? 1;\n const pageNumber = cache?.pageNumber ?? 1;\n\n const totalEntries = Math.max(0, cache?.totalEntries ?? 0);\n const start = Math.max(0, Math.min((pageSize * (pageNumber - 1)) + 1, totalEntries));\n const end = Math.max(0, Math.min((start - 1) + pageSize, totalEntries));\n const totalPages = Math.max(0, cache?.totalPages ?? 1);\n\n const pages = this.filterActivePages(pageNumber, totalPages, maxAmountOfButtons);\n\n return {start, end, totalEntries, totalPages, pages, pageNumber};\n }),\n shareReplay({refCount: true, bufferSize: 1})\n );\n }\n\n private observeCollectionChanges() {\n if (this._subscription) {\n this._subscription?.unsubscribe();\n }\n\n if (!this._collection) {\n return;\n }\n\n this._subscription = this._collection.raw$.subscribe(data => {\n if (data) {\n this._cache$.next(data);\n }\n });\n }\n\n private calculatePages(pageNumber: number, totalPages: number, maxAmountOfButtons: number) {\n const min = 1;\n const max = totalPages;\n const amount = Math.max(1, maxAmountOfButtons);\n\n const start = Math.max(0, pageNumber - Math.floor(amount / 2));\n const data = Array(amount)\n .fill(0)\n .map((_, index) => start + index);\n\n // Validate if the minimum value less than\n // the first value.\n if (data[0] < min) {\n return data.map(item => item + 1);\n }\n\n // Calculate the difference with the max\n // if this value is higher than 0 we should minus it.\n const lastValueInArray = data[data.length - 1];\n const differenceWithMax = lastValueInArray - max;\n if (differenceWithMax > 0) {\n return data.map(item => item - differenceWithMax);\n }\n\n // Just return the default data.\n return data;\n }\n\n private filterActivePages(pageNumber: number, totalPages: number, maxAmountOfButtons: number) {\n return this.calculatePages(pageNumber, totalPages, maxAmountOfButtons)\n .filter(page => page > 0 && page <= totalPages)\n .map(page => ({page, active: pageNumber === page}));\n }\n\n}\n","@if (data$ | async; as data) {\n <div [bb-localize-string]=\"'collection.showing_label' | bbLocalize\"\n class=\"bb-collections-pager-text\">\n <strong *bbLocalizeTemplate=\"'start'\">{{ data?.start }}</strong>\n <strong *bbLocalizeTemplate=\"'end'\">{{ data?.end }}</strong>\n <strong *bbLocalizeTemplate=\"'total'\">{{ data?.totalEntries }}</strong>\n </div>\n\n <div class=\"bb-collections-pager-container\">\n <ul class=\"bb-collections-pager-list\">\n <li class=\"bb-collections-pager-item\"\n title=\"Previous page\">\n <button [disabled]=\"data?.pageNumber <= 1\"\n (click)=\"setPage(data?.pageNumber - 1, data?.totalPages)\"\n class=\"bb-collections-pager-button arrow first\"\n type=\"button\">\n <bb-icon [src]=\"arrowPreviousIconName\"\n size=\"1.125\"></bb-icon>\n </button>\n </li>\n @for (item of data?.pages; track item?.page) {\n <li [title]=\"'Page ' + item?.page\"\n class=\"bb-collections-pager-item\">\n <button [class.active]=\"item?.active\"\n (click)=\"setPage(item?.page, data?.totalPages)\"\n class=\"bb-collections-pager-button\"\n type=\"button\">\n {{ item?.page }}\n </button>\n </li>\n }\n <li class=\"bb-collections-pager-item\"\n title=\"Next page\">\n <button [disabled]=\"data?.pageNumber >= data?.totalPages\"\n (click)=\"setPage(data?.pageNumber + 1, data?.totalPages)\"\n class=\"bb-collections-pager-button arrow last\"\n type=\"button\">\n <bb-icon [src]=\"arrowNextIconName\"\n size=\"1.125\"></bb-icon>\n </button>\n </li>\n </ul>\n </div>\n}\n","import {booleanAttribute, ChangeDetectionStrategy, Component, inject, Input, ViewEncapsulation} from '@angular/core';\nimport {COLLECTIONS_CONFIG, CollectionsConfig} from '../../collections.interfaces';\nimport {BbFormControl, BbIcon, BbInput} from '@bravobit/bb-foundation/elements';\nimport {BbLocalize} from '@bravobit/bb-foundation/localize';\nimport {ReactiveFormsModule} from '@angular/forms';\nimport {Collection} from '../../collection';\n\n@Component({\n selector: 'bb-collections-actions',\n templateUrl: './collections-actions.component.html',\n styleUrls: ['./collections-actions.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'class': 'bb-collections-actions',\n '[class.standalone]': 'standalone'\n },\n imports: [ReactiveFormsModule, BbInput, BbLocalize, BbIcon, BbFormControl]\n})\nexport class BbCollectionsActions<T> {\n\n // Dependencies.\n private readonly _config?: CollectionsConfig = inject(COLLECTIONS_CONFIG, {optional: true});\n\n // Readonly data.\n readonly searchIconName: string = this._config?.icons?.actionsSearch ?? 'material:search';\n readonly closeIconName: string = this._config?.icons?.actionsClose ?? 'material:close';\n\n // Inputs.\n @Input({required: true}) collection: Collection<T> | null = null;\n @Input() queryPlaceholder: string | null = null;\n @Input({transform: booleanAttribute}) standalone: boolean = false;\n\n}\n","<div class=\"bb-collections-actions-row\">\n @if (collection?.queryFieldsControl?.value?.length > 0) {\n <bb-form-control class=\"bb-collections-actions-search\">\n <bb-icon [src]=\"searchIconName\"\n bbPrefix></bb-icon>\n <input [formControl]=\"collection?.queryControl\"\n [placeholder]=\"queryPlaceholder ?? ('collection.search_label' | bbLocalize)\"\n bbInput\n autocomplete=\"off\"\n type=\"search\">\n @if (collection?.queryControl?.value?.length > 0) {\n <button (click)=\"collection?.queryControl?.setValue('')\"\n bbSuffix\n data-button\n type=\"button\">\n <bb-icon [src]=\"closeIconName\"></bb-icon>\n </button>\n }\n </bb-form-control>\n }\n <ng-content select=\"[data-collections-action]\"></ng-content>\n</div>\n<ng-content></ng-content>\n","import {booleanAttribute, ChangeDetectionStrategy, Component, ContentChild, Input, TemplateRef, ViewEncapsulation} from '@angular/core';\nimport {BbCollectionsDataRow, BbCollectionsDataRowContext} from '../../directives/collections-data-row.directive';\nimport {BbCollectionsData, BbCollectionsDataContext} from '../../directives/collections-data.directive';\nimport {BbLocalize, BbLocalizeString, BbLocalizeTemplate} from '@bravobit/bb-foundation/localize';\nimport {BbCollectionsActions} from '../collections-actions/collections-actions.component';\nimport {BbCollectionsViewer} from '../collections-viewer/collections-viewer.component';\nimport {BbCollectionsInitial} from '../../directives/collections-initial.directive';\nimport {BbCollectionsPager} from '../collections-pager/collections-pager.component';\nimport {BbCollectionsEmpty} from '../../directives/collections-empty.directive';\nimport {BbCollectionsError} from '../../directives/collections-error.directive';\nimport {AsyncPipe, NgTemplateOutlet} from '@angular/common';\nimport {BbSpinner} from '@bravobit/bb-foundation/elements';\nimport {BbTemplate} from '@bravobit/bb-foundation/utils';\nimport {Collection} from '../../collection';\nimport {BehaviorSubject} from 'rxjs';\n\n@Component({\n selector: 'bb-collections-table',\n templateUrl: './collections-table.component.html',\n styleUrls: ['./collections-table.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'class': 'bb-collections-table',\n '[class.include-vertical-lines]': 'includeVerticalLines'\n },\n imports: [\n NgTemplateOutlet,\n BbCollectionsViewer,\n BbCollectionsData,\n BbCollectionsEmpty,\n BbCollectionsError,\n BbCollectionsInitial,\n BbCollectionsActions,\n BbCollectionsPager,\n BbLocalizeString,\n BbTemplate,\n BbLocalize,\n BbLocalizeTemplate,\n BbSpinner,\n AsyncPipe\n ]\n})\nexport class BbCollectionsTable<T = any> {\n\n // Readonly data.\n readonly collection$ = new BehaviorSubject<Collection<T> | null>(null);\n\n // Views.\n @ContentChild(BbCollectionsData, {read: TemplateRef, static: false}) dataTemplate?: TemplateRef<BbCollectionsDataContext<T>>;\n @ContentChild(BbCollectionsDataRow, {read: TemplateRef, static: false}) dataRowTemplate?: TemplateRef<BbCollectionsDataRowContext<T>>;\n\n // Inputs.\n @Input() queryPlaceholder: string | null = null;\n @Input() emptyContent: string | TemplateRef<any> | null = null;\n @Input() noResultsContent: string | TemplateRef<any> | null = null;\n @Input() errorContent: string | TemplateRef<any> | null = null;\n @Input() trackByProperty: string | null = 'id';\n @Input({transform: booleanAttribute}) includeVerticalLines: boolean = false;\n @Input({transform: booleanAttribute}) hideActions: boolean = false;\n @Input({transform: booleanAttribute}) hidePager: boolean = false;\n\n @Input({required: true})\n set collection(collection: Collection<T>) {\n this.collection$.next(collection);\n }\n\n get collection() {\n return this.collection$.getValue();\n }\n\n}\n","@if (!hideActions) {\n <bb-collections-actions [collection]=\"collection\"\n [queryPlaceholder]=\"queryPlaceholder\">\n <ng-content ngProjectAs=\"[data-collections-action]\"\n select=\"[data-collections-action]\"></ng-content>\n <ng-content ngProjectAs=\"[data-collections-row]\"\n select=\"[data-collections-row]\"></ng-content>\n </bb-collections-actions>\n}\n\n<div [class.loading]=\"collection?.loading$ | async\"\n class=\"bb-collections-table-wrapper\">\n <div [collection]=\"collection\"\n class=\"bb-collections-table-container\"\n bb-collections-viewer>\n @if (collection?.loading$ | async) {\n <div class=\"bb-collections-table-loading\"></div>\n }\n <table *bbCollectionsData=\"let items = items; let loading = loading\">\n <ng-content select=\"thead\"></ng-content>\n @if (dataTemplate) {\n <ng-container\n *ngTemplateOutlet=\"dataTemplate; context: {items: $any(items), loading: loading}\"></ng-container>\n } @else {\n <tbody>\n @for (item of items; track (trackByProperty === null ? $index : item[trackByProperty])) {\n <ng-container\n *ngTemplateOutlet=\"dataRowTemplate; context: {$implicit: item, item: item}\"></ng-container>\n }\n </tbody>\n }\n <ng-content select=\"tfoot\"></ng-content>\n </table>\n <div *bbCollectionsEmpty=\"let query = query\"\n class=\"bb-collections-table-info\">\n <div class=\"bb-collections-table-image empty\"></div>\n @if (query?.length > 0) {\n <ng-template [bbTemplate]=\"noResultsContent\">\n <p [bb-localize-string]=\"$any(noResultsContent) ?? ('collection.no_results_label' | bbLocalize)\"\n class=\"bb-collections-table-info-text\">\n <strong *bbLocalizeTemplate=\"'query'\">{{ query ?? '...' }}</strong>\n </p>\n </ng-template>\n } @else {\n <ng-template [bbTemplate]=\"emptyContent\">\n <p class=\"bb-collections-table-info-text\">\n {{ $any(emptyContent) ?? ('collection.empty_label' | bbLocalize) }}\n </p>\n </ng-template>\n }\n </div>\n <div *bbCollectionsError=\"let error = error\"\n class=\"bb-collections-table-info\">\n <div class=\"bb-collections-table-image error\"></div>\n <ng-template [bbTemplate]=\"errorContent\">\n <p class=\"bb-collections-table-info-text\">\n {{ $any(errorContent) ?? ('collection.error_label' | bbLocalize) }}\n </p>\n </ng-template>\n </div>\n <div *bbCollectionsInitial\n class=\"bb-collections-table-info\">\n <bb-spinner class=\"block\"></bb-spinner>\n </div>\n </div>\n</div>\n\n@if (!hidePager) {\n <footer class=\"bb-collections-table-footer\">\n <bb-collections-pager [collection]=\"collection\"></bb-collections-pager>\n </footer>\n}\n","import {Attribute, ChangeDetectionStrategy, ChangeDetectorRef, Component, HostListener, OnDestroy, OnInit, Optional, ViewEncapsulation} from '@angular/core';\nimport {BbCollectionsTable} from '../collections-table/collections-table.component';\nimport {distinctUntilChanged, map, switchMap} from 'rxjs/operators';\nimport {getControlValue} from '@bravobit/bb-foundation/rxjs';\nimport {Subscription} from 'rxjs';\n\n@Component({\n selector: 'th[bb-collections-table-sorting]',\n templateUrl: './collections-table-sorting.component.html',\n styleUrls: ['./collections-table-sorting.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'class': 'bb-collections-table-sorting',\n '[class.asc]': 'direction === \\'asc\\'',\n '[class.desc]': 'direction === \\'desc\\''\n },\n})\nexport class BbCollectionsTableSorting implements OnInit, OnDestroy {\n\n // Readonly data.\n readonly orderedOptions: [null, 'asc', 'desc'] = [null, 'asc', 'desc'];\n\n // State.\n direction: 'asc' | 'desc' | null = null;\n\n // Subscription.\n private _subscription = new Subscription();\n\n constructor(@Attribute('bb-collections-table-sorting') private _name: string,\n private _changeDetectorRef: ChangeDetectorRef,\n @Optional() private _parent?: BbCollectionsTable<unknown>) {\n }\n\n ngOnInit() {\n const direction$ = this._parent.collection$.pipe(\n switchMap(collection => getControlValue(collection.sortControl)),\n map(value => Array.isArray(value) ? value : [value]),\n map(value => value?.find(item => item?.name === this._name)),\n map(sorting => sorting?.direction ?? null),\n distinctUntilChanged()\n );\n const subscription = direction$.subscribe(direction => {\n this.direction = direction;\n this._changeDetectorRef.markForCheck();\n });\n this._subscription.add(subscription);\n }\n\n ngOnDestroy() {\n this._subscription?.unsubscribe();\n }\n\n @HostListener('click')\n onClick() {\n if (!this._name) {\n return;\n }\n\n const nextDirection = this.getNextOption(this.direction);\n const controlValue = nextDirection === null ? null : {name: this._name, direction: nextDirection};\n this._parent?.collection?.sortControl?.setValue(controlValue);\n }\n\n private getNextOption(direction: string) {\n const index = this.orderedOptions.findIndex(item => item === direction);\n const newIndex = (index + 1) % this.orderedOptions?.length;\n return this.orderedOptions?.[newIndex] ?? null;\n }\n\n}\n","<ng-content></ng-content>\n","import {ChangeDetectionStrategy, Component, Input, TemplateRef, ViewEncapsulation} from '@angular/core';\nimport {BbAvatar} from '@bravobit/bb-foundation/elements';\nimport {BbTemplate} from '@bravobit/bb-foundation/utils';\n\n@Component({\n selector: '[bb-collections-table-label]',\n templateUrl: './collections-table-label.component.html',\n styleUrls: ['./collections-table-label.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {'class': 'bb-collections-table-label'},\n imports: [BbAvatar, BbTemplate]\n})\nexport class BbCollectionsTableLabel {\n\n // Inputs.\n @Input({required: true}) titleLabel: string | TemplateRef<any> | null = null;\n @Input() descriptionLabel: string | TemplateRef<any> | null = null;\n @Input() imageUrl: string | null = null;\n @Input() alt: string | null = null;\n @Input() type: 'image' | 'avatar' | 'content' = 'image';\n\n}\n","@switch (type) {\n @case ('avatar') {\n <bb-avatar [title]=\"alt ?? '...'\"\n [src]=\"imageUrl\"\n size=\"2\"\n class=\"bb-collections-table-label-avatar\">\n </bb-avatar>\n }\n @case ('content') {\n <ng-content></ng-content>\n }\n @default {\n @if (imageUrl; as src) {\n <div [style.background-image]=\"'url(' + src + ')'\"\n class=\"bb-collections-table-label-image\"></div>\n }\n }\n}\n\n<div class=\"bb-collections-table-label-content\">\n <span class=\"bb-collections-table-label-title\"><ng-template\n [bbTemplate]=\"titleLabel\">{{ titleLabel }}</ng-template></span>\n @if (descriptionLabel; as descriptionContent) {\n <small class=\"bb-collections-table-label-description\">\n <ng-template [bbTemplate]=\"descriptionContent\">{{ descriptionContent }}</ng-template>\n </small>\n }\n</div>\n","import {booleanAttribute, ChangeDetectionStrategy, Component, ContentChild, Input, TemplateRef, ViewEncapsulation} from '@angular/core';\nimport {BbCollectionsItem, BbCollectionsItemContext} from '../../directives/collections-item.directive';\nimport {BbCollectionsActions} from '../collections-actions/collections-actions.component';\nimport {BbCollectionsViewer} from '../collections-viewer/collections-viewer.component';\nimport {BbCollectionsPager} from '../collections-pager/collections-pager.component';\nimport {BbCollectionsData} from '../../directives/collections-data.directive';\nimport {NgTemplateOutlet} from '@angular/common';\nimport {Collection} from '../../collection';\nimport {BehaviorSubject} from 'rxjs';\n\n@Component({\n selector: 'bb-collections-grid',\n templateUrl: './collections-grid.component.html',\n styleUrls: ['./collections-grid.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {'class': 'bb-collections-grid'},\n imports: [\n BbCollectionsData,\n BbCollectionsViewer,\n NgTemplateOutlet,\n BbCollectionsActions,\n BbCollectionsPager\n ]\n})\nexport class BbCollectionsGrid<T> {\n\n // Readonly data.\n readonly collection$ = new BehaviorSubject<Collection<T> | null>(null);\n\n // Views.\n @ContentChild(BbCollectionsItem, {read: TemplateRef, static: false}) itemTemplate?: TemplateRef<BbCollectionsItemContext<T>>;\n\n // Inputs.\n @Input() queryPlaceholder: string | null = null;\n @Input({transform: booleanAttribute}) hideActions: boolean = false;\n @Input({transform: booleanAttribute}) hidePager: boolean = false;\n\n @Input({required: true})\n set collection(collection: Collection<T>) {\n this.collection$.next(collection);\n }\n\n get collection() {\n return this.collection$.getValue();\n }\n\n}\n","@if (!hideActions) {\n <bb-collections-actions [collection]=\"collection\"\n [queryPlaceholder]=\"queryPlaceholder\"\n standalone>\n <ng-content ngProjectAs=\"[data-collections-action]\"\n select=\"[data-collections-action]\"></ng-content>\n <ng-content ngProjectAs=\"[data-collections-row]\"\n select=\"[data-collections-row]\"></ng-content>\n </bb-collections-actions>\n}\n\n<div [collection]=\"collection\"\n class=\"bb-collections-grid-container\"\n bb-collections-viewer>\n <ul *bbCollectionsData=\"let items = items\"\n class=\"bb-collections-grid-list\">\n @for (item of items; track $index) {\n <li class=\"bb-collections-grid-item\">\n <ng-container *ngTemplateOutlet=\"itemTemplate; context: {$implicit: item, item: item}\"></ng-container>\n </li>\n }\n </ul>\n</div>\n\n@if (!hidePager) {\n <footer class=\"bb-collections-grid-footer\">\n <bb-collections-pager [collection]=\"collection\"></bb-collections-pager>\n </footer>\n}\n","import {catchError, debounceTime, distinctUntilChanged, map, shareReplay, startWith, switchMap, tap} from 'rxjs/operators';\nimport {CollectionData, CollectionRequest, CollectionRequestSort} from './interfaces/collection.interface';\nimport {BehaviorSubject, combineLatest, defer, isObservable, merge, Observable, of} from 'rxjs';\nimport {CollectionProvider} from './providers/collection.provider';\nimport {getControlValue} from '@bravobit/bb-foundation/rxjs';\nimport {FormControl} from '@angular/forms';\n\nexport const enum CollectionState {\n Initial = 'initial',\n Error = 'error',\n Empty = 'empty',\n Data = 'data'\n}\n\nexport class Collection<T> {\n\n // Controls.\n readonly queryControl: FormControl<string | null>;\n readonly queryFieldsControl: FormControl<string[]>;\n readonly pageNumberControl: FormControl<number>;\n readonly pageSizeControl: FormControl<number>;\n readonly sortControl: FormControl<CollectionRequestSort | CollectionRequestSort[]>;\n\n // Request.\n readonly data$: Observable<{\n response?: CollectionData<T>,\n request?: CollectionRequest,\n error?: Error\n state: CollectionState,\n loading: boolean,\n initial: boolean\n }>;\n\n readonly raw$ = new BehaviorSubject<CollectionData<T> | null>(null);\n readonly loading$ = new BehaviorSubject<boolean>(true);\n\n // State.\n private _formatter: (item: T[]) => T[] | Observable<T[]> = null;\n private _refresh$ = new BehaviorSubject<number>(0);\n\n constructor(private readonly _provider: CollectionProvider<T>,\n readonly _initialValues: Partial<CollectionRequest> = {}) {\n this.queryControl = new FormControl<string | null>(_initialValues?.query ?? null);\n this.queryFieldsControl = new FormControl<string[]>(_initialValues?.queryFields ?? []);\n this.pageNumberControl = new FormControl<number>(_initialValues?.pageNumber ?? 1);\n this.pageSizeControl = new FormControl<number>(_initialValues?.pageSize ?? 25);\n this.sortControl = new FormControl<CollectionRequestSort | CollectionRequestSort[] | null>(_initialValues?.sort ?? null);\n\n this.data$ = this.getData();\n }\n\n refresh() {\n this._refresh$.next(0);\n }\n\n setFormatter(callback: (items: T[]) => T[] | Observable<T[]>) {\n this._formatter = callback;\n return this;\n }\n\n private getData() {\n const data$ = this.request.pipe(\n tap(() => this.loading$.next(true)),\n switchMap(request => {\n return this._provider.transform(request, {collection: this}).pipe(\n tap(response => this.cacheCollectionData(response)),\n map(response => ({response, request, initial: false})),\n catchError(error => of<{ error: Error, response: CollectionData<T> | null, request: CollectionRequest, initial: boolean }>({\n error,\n request,\n response: null,\n initial: false\n })),\n tap(() => this.loading$.next(false))\n );\n }),\n startWith<{ initial: boolean, response: CollectionData<T> | null }>({initial: true, response: null}),\n shareReplay({refCount: true, bufferSize: 1})\n );\n\n return combineLatest([data$, this.loading$.asObservable()]).pipe(\n switchMap(([data, loading]) => {\n const combined = {...data, loading};\n return this.formatResponse(data?.response).pipe(\n map(response => {\n const data = {...combined, response};\n return {...data, state: this.getState(data)};\n })\n );\n })\n );\n }\n\n private formatResponse(response: CollectionData<T>) {\n if (!response || !this._formatter) {\n return of(response);\n }\n\n const items = response?.data ?? [];\n const data = this._formatter?.(items) ?? items;\n const data$ = isObservable(data) ? data : of(data);\n\n return data$.pipe(\n map(data => ({...response, data}))\n );\n }\n\n private getState(data: { response?: CollectionData<T>, request?: CollectionRequest, error?: Error, loading: boolean, initial: boolean }) {\n if (!!data?.error) {\n return CollectionState.Error;\n }\n\n if (!!data?.initial) {\n return CollectionState.Initial;\n }\n\n const count = data?.response?.data?.length ?? 0;\n if (count <= 0) {\n return CollectionState.Empty;\n }\n\n return CollectionState.Data;\n }\n\n private cacheCollectionData(data: CollectionData<T>) {\n this.raw$.next(data);\n }\n\n private get request() {\n const pageNumber$ = getControlValue<number>(this.pageNumberControl);\n const pageSize$ = getControlValue<number>(this.pageSizeControl);\n const query$ = this.getQueryObservable();\n const queryFields$ = getControlValue<string[]>(this.queryFieldsControl);\n const sort$ = getControlValue<CollectionRequestSort | CollectionRequestSort[]>(this.sortControl);\n\n return combineLatest([pageNumber$, pageSize$, query$, queryFields$, sort$, this._refresh$.asObservable()]).pipe(\n map(([pageNumber, pageSize, query, queryFields, sort]) => ({\n pageNumber,\n pageSize,\n query,\n queryFields,\n sort\n }))\n );\n }\n\n private getQueryObservable() {\n return merge(this.queryControl.valueChanges, defer(() => of(this.queryControl?.value))).pipe(\n debounceTime(400),\n distinctUntilChanged()\n );\n }\n\n}\n\n","import {BbCollectionsTableSorting} from './components/collections-table-sorting/collections-table-sorting.component';\nimport {BbCollectionsTableLabel} from './components/collections-table-label/collections-table-label.component';\nimport {BbCollectionsActions} from './components/collections-actions/collections-actions.component';\nimport {BbCollectionsViewer} from './components/collections-viewer/collections-viewer.component';\nimport {BbCollectionsPager} from './components/collections-pager/collections-pager.component';\nimport {BbCollectionsTable} from './components/collections-table/collections-table.component';\nimport {BbCollectionsGrid} from './components/collections-grid/collections-grid.component';\nimport {BbCollectionsDataRow} from './directives/collections-data-row.directive';\nimport {BbCollectionsInitial} from './directives/collections-initial.directive';\nimport {BbCollectionsEmpty} from './directives/collections-empty.directive';\nimport {BbCollectionsError} from './directives/collections-error.directive';\nimport {BbCollectionsData} from './directives/collections-data.directive';\nimport {BbCollectionsItem} from './directives/collections-item.directive';\nimport {NgModule} from '@angular/core';\n\n@NgModule({\n imports: [\n BbCollectionsViewer,\n BbCollectionsPager,\n BbCollectionsTable,\n BbCollectionsTableSorting,\n BbCollectionsTableLabel,\n BbCollectionsGrid,\n BbCollectionsActions,\n BbCollectionsData,\n BbCollectionsDataRow,\n BbCollectionsEmpty,\n BbCollectionsError,\n BbCollectionsInitial,\n BbCollectionsItem\n ],\n exports: [\n BbCollectionsViewer,\n BbCollectionsPager,\n BbCollectionsTable,\n BbCollectionsTableSorting,\n BbCollectionsTableLabel,\n BbCollectionsGrid,\n BbCollectionsActions,\n BbCollectionsData,\n BbCollectionsDataRow,\n BbCollectionsEmpty,\n BbCollectionsError,\n BbCollectionsInitial,\n BbCollectionsItem\n ]\n})\nexport class CollectionsModule {\n}\n","import {COLLECTIONS_CONFIG, CollectionsConfig} from './collections.interfaces';\nimport {EnvironmentProviders, makeEnvironmentProviders} from '@angular/core';\n\nexport function provideCollectionsConfig(config: CollectionsConfig): EnvironmentProviders {\n return makeEnvironmentProviders([\n {provide: COLLECTIONS_CONFIG, useValue: config}\n ]);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.BbCollectionsTable"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"bravobit-bb-foundation-collections.mjs","sources":["../../../projects/bb-foundation/collections/src/lib/providers/collection.provider.ts","../../../projects/bb-foundation/collections/src/lib/providers/api-collection.provider.ts","../../../projects/bb-foundation/collections/src/lib/classes/array.collection.ts","../../../projects/bb-foundation/collections/src/lib/providers/local-collection.provider.ts","../../../projects/bb-foundation/collections/src/lib/directives/collections-data.directive.ts","../../../projects/bb-foundation/collections/src/lib/directives/collections-data-row.directive.ts","../../../projects/bb-foundation/collections/src/lib/directives/collections-empty.directive.ts","../../../projects/bb-foundation/collections/src/lib/directives/collections-error.directive.ts","../../../projects/bb-foundation/collections/src/lib/directives/collections-initial.directive.ts","../../../projects/bb-foundation/collections/src/lib/directives/collections-item.directive.ts","../../../projects/bb-foundation/collections/src/lib/components/collections-viewer/collections-viewer.component.ts","../../../projects/bb-foundation/collections/src/lib/components/collections-viewer/collections-viewer.component.html","../../../projects/bb-foundation/collections/src/lib/collections.interfaces.ts","../../../projects/bb-foundation/collections/src/lib/components/collections-pager/collections-pager.component.ts","../../../projects/bb-foundation/collections/src/lib/components/collections-pager/collections-pager.component.html","../../../projects/bb-foundation/collections/src/lib/components/collections-actions/collections-actions.component.ts","../../../projects/bb-foundation/collections/src/lib/components/collections-actions/collections-actions.component.html","../../../projects/bb-foundation/collections/src/lib/components/collections-table/collections-table.component.ts","../../../projects/bb-foundation/collections/src/lib/components/collections-table/collections-table.component.html","../../../projects/bb-foundation/collections/src/lib/components/collections-table-sorting/collections-table-sorting.component.ts","../../../projects/bb-foundation/collections/src/lib/components/collections-table-sorting/collections-table-sorting.component.html","../../../projects/bb-foundation/collections/src/lib/components/collections-table-label/collections-table-label.component.ts","../../../projects/bb-foundation/collections/src/lib/components/collections-table-label/collections-table-label.component.html","../../../projects/bb-foundation/collections/src/lib/components/collections-grid/collections-grid.component.ts","../../../projects/bb-foundation/collections/src/lib/components/collections-grid/collections-grid.component.html","../../../projects/bb-foundation/collections/src/lib/collection.ts","../../../projects/bb-foundation/collections/src/lib/collections.module.ts","../../../projects/bb-foundation/collections/src/lib/collections.config.ts","../../../projects/bb-foundation/collections/src/bravobit-bb-foundation-collections.ts"],"sourcesContent":["import {CollectionApiParams, CollectionContext, CollectionData, CollectionRequest} from '../interfaces/collection.interface';\nimport {Observable} from 'rxjs';\n\nexport abstract class CollectionProvider<T> {\n\n protected cachedRequestParams: Record<string, CollectionApiParams> | null = null;\n\n abstract transform(request: CollectionRequest, context: CollectionContext<T>): Observable<CollectionData<T>>;\n\n protected validateParams(request: Record<string, CollectionApiParams>, _context: CollectionContext<T>) {\n return request;\n }\n\n protected formatArrayToCollectionData(items: T[]) {\n const count = items?.length ?? 1;\n return <CollectionData<T>>{\n pageSize: count,\n totalEntries: count,\n pageNumber: 1,\n totalPages: 1,\n data: items\n };\n }\n\n protected deepCompare(value1: unknown, value2: unknown) {\n if (value1 === value2) {\n return true;\n }\n\n if (typeof value1 !== 'object' || typeof value2 !== 'object' || value1 === null || value2 === null) {\n return false;\n }\n\n const keys1 = Object.keys(value1);\n const keys2 = Object.keys(value2);\n if (keys1.length !== keys2.length) {\n return false;\n }\n\n for (const key of keys1) {\n if (!keys2.includes(key)) {\n return false;\n }\n if (!this.deepCompare(value1[key], value2[key])) {\n return false;\n }\n }\n\n return true;\n }\n\n}\n","import {CollectionApiResponse, CollectionData, CollectionApiParams, CollectionRequest, CollectionContext} from '../interfaces/collection.interface';\nimport {combineLatest, isObservable, Observable, of} from 'rxjs';\nimport {CollectionProvider} from './collection.provider';\nimport {map, switchMap, tap} from 'rxjs/operators';\nimport {HttpClient} from '@angular/common/http';\n\nexport class ApiCollectionProvider<T> extends CollectionProvider<T> {\n\n // State.\n protected extraParams: Record<string, Observable<CollectionApiParams>> = {};\n protected extraObjectParams: Observable<Record<string, CollectionApiParams>>[] = [];\n\n constructor(protected readonly endpoint: string | Observable<string>,\n protected readonly httpClient: HttpClient) {\n super();\n }\n\n append(name: string, value: CollectionApiParams | Observable<CollectionApiParams>) {\n this.extraParams[name] = isObservable(value) ? value : of(value);\n return this;\n }\n\n appendObject(value: Record<string, CollectionApiParams> | Observable<Record<string, CollectionApiParams>>) {\n const params = isObservable(value) ? value : of(value);\n this.extraObjectParams.push(params);\n }\n\n transform(request: CollectionRequest, context: CollectionContext<T>) {\n const endpoint$ = isObservable(this.endpoint) ? this.endpoint : of(this.endpoint);\n const params = this.getBackendFormat(request);\n const extraParams$ = this.getExtraParams(this.extraParams);\n const extraObjectParams$ = this.getExtraObjectParams(this.extraObjectParams);\n\n return combineLatest([endpoint$, extraParams$, extraObjectParams$]).pipe(\n tap(() => context.collection.loading$.next(true)),\n switchMap(([endpoint, extraParams, extraObjectParams]) => {\n const validatedParams = this.validateParams({...params, ...extraParams, ...extraObjectParams}, context);\n return this.httpClient.get<CollectionApiResponse<T> | T[]>(endpoint, {params: validatedParams});\n }),\n map(response => this.formatToCollectionData(response))\n );\n }\n\n protected override validateParams(request: Record<string, CollectionApiParams>, context: CollectionContext<T>) {\n if (!this.deepCompare(request, this.cachedRequestParams)) {\n if (request?.['page'] && request?.['page'] === this.cachedRequestParams?.['page']) {\n context.collection.pageNumberControl?.setValue(1);\n request['page'] = context.collection.pageNumberControl?.value;\n }\n }\n\n this.cachedRequestParams = {...request};\n return request;\n }\n\n protected getExtraParams(params: Record<string, Observable<CollectionApiParams>>) {\n const keys = Object.keys(params ?? {});\n if (keys?.length <= 0) {\n return of({});\n }\n\n const observables$ = keys.map(key => params?.[key]);\n return combineLatest(observables$).pipe(\n map(data => {\n return data.reduce((previous, current, index) => {\n if (current === null || current === undefined) {\n return previous;\n }\n const key = keys?.[index];\n return {...previous, [key]: current};\n }, {});\n })\n );\n }\n\n protected getExtraObjectParams(params$: Observable<Record<string, CollectionApiParams>>[]) {\n if (params$?.length <= 0) {\n return of({});\n }\n return combineLatest(params$).pipe(\n map(data => (data ?? []).reduce((previous, current) => ({...previous, ...(current ?? {})}), {})),\n map(data => {\n return Object.keys(data ?? {}).reduce((previous, current) => {\n const value = data?.[current] ?? null;\n if (value === null || value === undefined) {\n return previous;\n }\n\n return {...previous, [current]: value};\n }, {});\n })\n );\n }\n\n protected formatToCollectionData(response: CollectionApiResponse<T> | T[]) {\n if (Array.isArray(response)) {\n return this.formatArrayToCollectionData(response);\n }\n\n return <CollectionData<T>>{\n pageSize: response?.page_size,\n pageNumber: response?.page_number,\n totalPages: response?.total_pages,\n totalEntries: response?.total_entries,\n data: response?.data,\n raw: response\n };\n }\n\n protected getBackendFormat(request: CollectionRequest) {\n const params = {};\n\n params['page'] = request?.pageNumber ?? 1;\n params['page_size'] = request?.pageSize ?? 25;\n\n if (request?.sort) {\n const sort = Array.isArray(request?.sort) ? request?.sort : [request?.sort];\n const filteredSort = sort?.filter(item => !!item?.name && !!item?.direction);\n\n params['sort'] = filteredSort?.map(item => item?.name)?.join(',');\n params['sort_direction'] = filteredSort?.map(item => item?.direction)?.join(',');\n }\n\n if (request?.query && request?.query?.length > 0 && request?.queryFields && request?.queryFields?.length > 0) {\n params['query'] = request?.query;\n params['query_fields'] = request?.queryFields?.join(',');\n }\n\n return params;\n }\n\n}\n","import {ArrayCollectionStringKeys} from '../interfaces/array-collection.interface';\nimport {CollectionRequestSort} from '../interfaces/collection.interface';\n\nexport class ArrayCollection<T> {\n\n constructor(protected value: T[]) {\n }\n\n search(query: string, fields: ArrayCollectionStringKeys<T>[]) {\n const normalizedQuery = this.normalizeValueAsString(query);\n if (normalizedQuery === null || normalizedQuery?.length <= 0) {\n return this;\n }\n\n const queryFields = fields ?? [];\n if (queryFields.length <= 0) {\n throw new Error('cannot search without query fields');\n }\n\n this.value = this.value.filter(item => {\n for (const field of queryFields) {\n const normalizedValue = this.normalizeValueAsString(item?.[field]);\n if (normalizedValue === null) {\n continue;\n }\n\n if (normalizedValue.includes(normalizedQuery)) {\n return true;\n }\n }\n\n return false;\n });\n\n return this;\n }\n\n sortBy(sort: CollectionRequestSort<keyof T> | CollectionRequestSort<keyof T>[], sortables: Partial<Record<ArrayCollectionStringKeys<T>, 'string' | 'number'>>) {\n if (sort === null || sort === undefined) {\n return this;\n }\n \n const sorts = Array.isArray(sort) ? sort : [sort];\n if (sorts.length <= 0) {\n return this;\n }\n\n this.value = this.value.sort((a, b) => {\n for (const item of sorts) {\n const type = sortables?.[<any>item?.name] ?? null;\n if (type === null) {\n throw new Error(`invalid sorting key \"${item?.name?.toString()}\"`);\n }\n const aValue = a?.[item?.name] ?? null;\n const bValue = b?.[item?.name] ?? null;\n const direction = item?.direction ?? null;\n\n if (type === 'string') {\n const comparison = String(aValue).localeCompare(String(bValue));\n if (comparison !== 0) {\n return direction === 'asc' ? comparison : -comparison;\n }\n } else if (type === 'number') {\n if (aValue < bValue) return direction === 'asc' ? -1 : 1;\n if (aValue > bValue) return direction === 'asc' ? 1 : -1;\n }\n }\n\n return 0;\n });\n\n return this;\n }\n\n toPage(pageNumber: number, pageSize: number) {\n const totalEntries = this.value?.length ?? 0;\n const totalPages = Math.max(1, Math.ceil(totalEntries / pageSize));\n\n const startIndex = (pageNumber - 1) * pageSize;\n const endIndex = startIndex + pageSize;\n const data = this.value?.slice(startIndex, endIndex) ?? [];\n\n return {totalPages, totalEntries, pageSize, pageNumber, data};\n }\n\n toArray() {\n return this.value;\n }\n\n protected normalizeValueAsString(value: unknown) {\n if (value === null || value === undefined) {\n return null;\n }\n return value\n .toString()\n .toLowerCase()\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '');\n }\n\n}\n","import {ArrayCollectionOptions} from '../interfaces/array-collection.interface';\nimport {CollectionRequest} from '../interfaces/collection.interface';\nimport {ArrayCollection} from '../classes/array.collection';\nimport {CollectionProvider} from './collection.provider';\nimport {delay, map} from 'rxjs/operators';\nimport {BehaviorSubject} from 'rxjs';\n\nexport class LocalCollectionProvider<T> extends CollectionProvider<T> {\n\n private _items$ = new BehaviorSubject<T[]>([]);\n\n constructor(items: T[],\n private _options?: ArrayCollectionOptions<T>) {\n super();\n this.update(items);\n }\n\n update(value: T[]) {\n this._items$.next(value);\n }\n\n transform(request: CollectionRequest) {\n return this._items$.pipe(\n map(items => {\n return new ArrayCollection<T>(items)\n .search(request?.query, <any>request.queryFields)\n .sortBy(<any>request?.sort, this._options?.sortables ?? {})\n .toPage(request?.pageNumber, request?.pageSize);\n }),\n delay(1)\n );\n }\n\n}\n","import {Directive, TemplateRef} from '@angular/core';\n\nexport class BbCollectionsDataContext<T> {\n items!: T[];\n loading!: boolean;\n\n constructor(items: T[], loading: boolean) {\n this.items = items;\n this.loading = loading;\n }\n}\n\n@Directive({\n selector: 'ng-template[bbCollectionsData]'\n})\nexport class BbCollectionsData<T> {\n\n constructor(public template: TemplateRef<BbCollectionsDataContext<T>>) {\n }\n\n static ngTemplateContextGuard<T>(dir: BbCollectionsData<T>, ctx: unknown): ctx is BbCollectionsDataContext<T> {\n return true;\n }\n\n}\n","import {Directive, TemplateRef} from '@angular/core';\n\nexport class BbCollectionsDataRowContext<T> {\n item!: T;\n $implicit!: T;\n\n constructor(item: T) {\n this.item = item;\n this.$implicit = item;\n }\n}\n\n@Directive({\n selector: 'ng-template[bbCollectionsDataRow]'\n})\nexport class BbCollectionsDataRow<T> {\n\n constructor(public template: TemplateRef<BbCollectionsDataRowContext<T>>) {\n }\n\n static ngTemplateContextGuard<T>(dir: BbCollectionsDataRow<T>, ctx: unknown): ctx is BbCollectionsDataRowContext<T> {\n return true;\n }\n\n}\n","import {Directive, TemplateRef} from '@angular/core';\n\nexport class BbCollectionsEmptyContext<T> {\n query!: string;\n loading!: boolean;\n\n constructor(query: string, loading: boolean) {\n this.query = query;\n this.loading = loading;\n }\n}\n\n@Directive({\n selector: 'ng-template[bbCollectionsEmpty]'\n})\nexport class BbCollectionsEmpty<T> {\n\n constructor(public template: TemplateRef<BbCollectionsEmptyContext<T>>) {\n }\n\n static ngTemplateContextGuard<T>(dir: BbCollectionsEmpty<T>, ctx: unknown): ctx is BbCollectionsEmptyContext<T> {\n return true;\n }\n\n}\n","import {Directive, TemplateRef} from '@angular/core';\n\nexport class BbCollectionsErrorContext<T> {\n error!: Error;\n loading!: boolean;\n\n constructor(error: Error, loading: boolean) {\n this.error = error;\n this.loading = loading;\n }\n}\n\n@Directive({\n selector: 'ng-template[bbCollectionsError]'\n})\nexport class BbCollectionsError<T> {\n\n constructor(public template: TemplateRef<BbCollectionsErrorContext<T>>) {\n }\n\n static ngTemplateContextGuard<T>(dir: BbCollectionsError<T>, ctx: unknown): ctx is BbCollectionsErrorContext<T> {\n return true;\n }\n\n}\n","import {Directive, TemplateRef} from '@angular/core';\n\nexport class BbCollectionsInitialContext<T> {\n}\n\n@Directive({\n selector: 'ng-template[bbCollectionsInitial]'\n})\nexport class BbCollectionsInitial<T> {\n\n constructor(public template: TemplateRef<BbCollectionsInitialContext<T>>) {\n }\n\n static ngTemplateContextGuard<T>(dir: BbCollectionsInitial<T>, ctx: unknown): ctx is BbCollectionsInitialContext<T> {\n return true;\n }\n\n}\n","import {Directive, TemplateRef} from '@angular/core';\n\nexport class BbCollectionsItemContext<T> {\n item!: T;\n $implicit!: T;\n\n constructor(item: T) {\n this.item = item;\n this.$implicit = item;\n }\n}\n\n@Directive({\n selector: 'ng-template[bbCollectionsItem]'\n})\nexport class BbCollectionsItem<T> {\n\n constructor(public template: TemplateRef<BbCollectionsItemContext<T>>) {\n }\n\n static ngTemplateContextGuard<T>(dir: BbCollectionsItem<T>, ctx: unknown): ctx is BbCollectionsItemContext<T> {\n return true;\n }\n\n}\n","import {ChangeDetectionStrategy, Component, ContentChild, Input, TemplateRef, ViewEncapsulation} from '@angular/core';\nimport {BbCollectionsInitial, BbCollectionsInitialContext} from '../../directives/collections-initial.directive';\nimport {BbCollectionsError, BbCollectionsErrorContext} from '../../directives/collections-error.directive';\nimport {BbCollectionsEmpty, BbCollectionsEmptyContext} from '../../directives/collections-empty.directive';\nimport {BbCollectionsData, BbCollectionsDataContext} from '../../directives/collections-data.directive';\nimport {AsyncPipe, NgTemplateOutlet} from '@angular/common';\nimport {Collection} from '../../collection';\n\n@Component({\n selector: '[bb-collections-viewer]',\n templateUrl: './collections-viewer.component.html',\n styleUrls: ['./collections-viewer.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {'class': 'bb-collections-viewer'},\n imports: [AsyncPipe, NgTemplateOutlet]\n})\nexport class BbCollectionsViewer<T = unknown> {\n\n // Content.\n @ContentChild(BbCollectionsData, {read: TemplateRef, static: false}) dataTemplate?: TemplateRef<BbCollectionsDataContext<T>>;\n @ContentChild(BbCollectionsEmpty, {read: TemplateRef, static: false}) emptyTemplate?: TemplateRef<BbCollectionsEmptyContext<T>>;\n @ContentChild(BbCollectionsError, {read: TemplateRef, static: false}) errorTemplate?: TemplateRef<BbCollectionsErrorContext<T>>;\n @ContentChild(BbCollectionsInitial, {read: TemplateRef, static: false}) initialTemplate?: TemplateRef<BbCollectionsInitialContext<T>>;\n\n // Inputs.\n @Input() collection: Collection<T> | null = null;\n\n}\n","@if (collection?.data$ | async; as data) {\n @switch (data?.state) {\n @case ('initial') {\n <ng-container *ngTemplateOutlet=\"initialTemplate\"></ng-container>\n }\n @case ('empty') {\n <ng-container\n *ngTemplateOutlet=\"emptyTemplate; context: {query: data?.request?.query, loading: data?.loading}\"></ng-container>\n }\n @case ('error') {\n <ng-container\n *ngTemplateOutlet=\"errorTemplate; context: {error: data?.error, loading: data?.loading}\"></ng-container>\n }\n @default {\n <ng-container\n *ngTemplateOutlet=\"dataTemplate; context: {items: data?.response?.data, loading: data?.loading}\"></ng-container>\n }\n }\n}\n","import {InjectionToken} from '@angular/core';\n\nexport const COLLECTIONS_CONFIG = new InjectionToken<CollectionsConfig>('collections config');\n\nexport interface CollectionsConfig {\n icons?: {\n actionsSearch?: string;\n actionsClose?: string;\n pagerArrowPrevious?: string;\n pagerArrowNext?: string;\n };\n}\n","import {ChangeDetectionStrategy, Component, inject, Input, numberAttribute, OnDestroy, OnInit, ViewEncapsulation} from '@angular/core';\nimport {BbLocalize, BbLocalizeString, BbLocalizeTemplate} from '@bravobit/bb-foundation/localize';\nimport {COLLECTIONS_CONFIG, CollectionsConfig} from '../../collections.interfaces';\nimport {CollectionData} from '../../interfaces/collection.interface';\nimport {BehaviorSubject, Observable, Subscription} from 'rxjs';\nimport {combineLatestMap} from '@bravobit/bb-foundation/rxjs';\nimport {BbIcon} from '@bravobit/bb-foundation/elements';\nimport {map, shareReplay} from 'rxjs/operators';\nimport {Collection} from '../../collection';\nimport {AsyncPipe} from '@angular/common';\n\n@Component({\n selector: 'bb-collections-pager',\n templateUrl: './collections-pager.component.html',\n styleUrls: ['./collections-pager.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {'class': 'bb-collections-pager'},\n imports: [AsyncPipe, BbLocalizeString, BbLocalize, BbLocalizeTemplate, BbIcon]\n})\nexport class BbCollectionsPager implements OnInit, OnDestroy {\n\n // Dependencies.\n private readonly _config?: CollectionsConfig = inject(COLLECTIONS_CONFIG, {optional: true});\n\n // Readonly data.\n readonly arrowPreviousIconName: string = this._config?.icons?.pagerArrowPrevious ?? 'material:arrow_back';\n readonly arrowNextIconName: string = this._config?.icons?.pagerArrowNext ?? 'material:arrow_forward';\n\n @Input({transform: numberAttribute})\n set maxAmountOfButtons(value: number) {\n this._maxAmountOfButtons$.next(Math.max(1, value));\n }\n\n get maxAmountOfButtons() {\n return this._maxAmountOfButtons$.getValue();\n }\n\n @Input({required: true})\n set collection(collection: Collection<unknown> | null) {\n this._collection = collection;\n this.observeCollectionChanges();\n }\n\n get collection() {\n return this._collection;\n }\n\n // Data.\n data$: Observable<{\n start?: number,\n end?: number,\n totalEntries?: number,\n totalPages?: number,\n pageNumber?: number,\n pages?: { page: number, active: boolean }[]\n }>;\n\n // State and subscriptions.\n private _collection: Collection<unknown> | null = null;\n private _subscription: Subscription | null = null;\n private _cache$ = new BehaviorSubject<Partial<CollectionData<unknown>>>({});\n private _maxAmountOfButtons$ = new BehaviorSubject<number>(3);\n\n ngOnInit() {\n this.setData();\n }\n\n ngOnDestroy() {\n this._subscription?.unsubscribe();\n }\n\n setPage(pageNumber: number, totalPages: number) {\n // Calculate the new value.\n const newValue = Math.min(\n totalPages,\n Math.max(1, pageNumber)\n );\n\n // Validate the value is actually different.\n const currentValue = this._collection?.pageNumberControl?.value;\n if (currentValue === newValue) {\n return;\n }\n\n this._collection?.pageNumberControl?.setValue(pageNumber);\n }\n\n private setData() {\n this.data$ = combineLatestMap({\n cache: this._cache$,\n maxAmountOfButtons: this._maxAmountOfButtons$\n }).pipe(\n map(({cache, maxAmountOfButtons}) => {\n const pageSize = cache?.pageSize ?? 1;\n const pageNumber = cache?.pageNumber ?? 1;\n\n const totalEntries = Math.max(0, cache?.totalEntries ?? 0);\n const start = Math.max(0, Math.min((pageSize * (pageNumber - 1)) + 1, totalEntries));\n const end = Math.max(0, Math.min((start - 1) + pageSize, totalEntries));\n const totalPages = Math.max(0, cache?.totalPages ?? 1);\n\n const pages = this.filterActivePages(pageNumber, totalPages, maxAmountOfButtons);\n\n return {start, end, totalEntries, totalPages, pages, pageNumber};\n }),\n shareReplay({refCount: true, bufferSize: 1})\n );\n }\n\n private observeCollectionChanges() {\n if (this._subscription) {\n this._subscription?.unsubscribe();\n }\n\n if (!this._collection) {\n return;\n }\n\n this._subscription = this._collection.raw$.subscribe(data => {\n if (data) {\n this._cache$.next(data);\n }\n });\n }\n\n private calculatePages(pageNumber: number, totalPages: number, maxAmountOfButtons: number) {\n const min = 1;\n const max = totalPages;\n const amount = Math.max(1, maxAmountOfButtons);\n\n const start = Math.max(0, pageNumber - Math.floor(amount / 2));\n const data = Array(amount)\n .fill(0)\n .map((_, index) => start + index);\n\n // Validate if the minimum value less than\n // the first value.\n if (data[0] < min) {\n return data.map(item => item + 1);\n }\n\n // Calculate the difference with the max\n // if this value is higher than 0 we should minus it.\n const lastValueInArray = data[data.length - 1];\n const differenceWithMax = lastValueInArray - max;\n if (differenceWithMax > 0) {\n return data.map(item => item - differenceWithMax);\n }\n\n // Just return the default data.\n return data;\n }\n\n private filterActivePages(pageNumber: number, totalPages: number, maxAmountOfButtons: number) {\n return this.calculatePages(pageNumber, totalPages, maxAmountOfButtons)\n .filter(page => page > 0 && page <= totalPages)\n .map(page => ({page, active: pageNumber === page}));\n }\n\n}\n","@if (data$ | async; as data) {\n <div [bb-localize-string]=\"'collection.showing_label' | bbLocalize\"\n class=\"bb-collections-pager-text\">\n <strong *bbLocalizeTemplate=\"'start'\">{{ data?.start }}</strong>\n <strong *bbLocalizeTemplate=\"'end'\">{{ data?.end }}</strong>\n <strong *bbLocalizeTemplate=\"'total'\">{{ data?.totalEntries }}</strong>\n </div>\n\n <div class=\"bb-collections-pager-container\">\n <ul class=\"bb-collections-pager-list\">\n <li class=\"bb-collections-pager-item\"\n title=\"Previous page\">\n <button [disabled]=\"data?.pageNumber <= 1\"\n (click)=\"setPage(data?.pageNumber - 1, data?.totalPages)\"\n class=\"bb-collections-pager-button arrow first\"\n type=\"button\">\n <bb-icon [src]=\"arrowPreviousIconName\"\n size=\"1.125\"></bb-icon>\n </button>\n </li>\n @for (item of data?.pages; track item?.page) {\n <li [title]=\"'Page ' + item?.page\"\n class=\"bb-collections-pager-item\">\n <button [class.active]=\"item?.active\"\n (click)=\"setPage(item?.page, data?.totalPages)\"\n class=\"bb-collections-pager-button\"\n type=\"button\">\n {{ item?.page }}\n </button>\n </li>\n }\n <li class=\"bb-collections-pager-item\"\n title=\"Next page\">\n <button [disabled]=\"data?.pageNumber >= data?.totalPages\"\n (click)=\"setPage(data?.pageNumber + 1, data?.totalPages)\"\n class=\"bb-collections-pager-button arrow last\"\n type=\"button\">\n <bb-icon [src]=\"arrowNextIconName\"\n size=\"1.125\"></bb-icon>\n </button>\n </li>\n </ul>\n </div>\n}\n","import {booleanAttribute, ChangeDetectionStrategy, Component, inject, Input, ViewEncapsulation} from '@angular/core';\nimport {COLLECTIONS_CONFIG, CollectionsConfig} from '../../collections.interfaces';\nimport {BbFormControl, BbIcon, BbInput} from '@bravobit/bb-foundation/elements';\nimport {BbLocalize} from '@bravobit/bb-foundation/localize';\nimport {ReactiveFormsModule} from '@angular/forms';\nimport {Collection} from '../../collection';\n\n@Component({\n selector: 'bb-collections-actions',\n templateUrl: './collections-actions.component.html',\n styleUrls: ['./collections-actions.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'class': 'bb-collections-actions',\n '[class.standalone]': 'standalone'\n },\n imports: [ReactiveFormsModule, BbInput, BbLocalize, BbIcon, BbFormControl]\n})\nexport class BbCollectionsActions<T> {\n\n // Dependencies.\n private readonly _config?: CollectionsConfig = inject(COLLECTIONS_CONFIG, {optional: true});\n\n // Readonly data.\n readonly searchIconName: string = this._config?.icons?.actionsSearch ?? 'material:search';\n readonly closeIconName: string = this._config?.icons?.actionsClose ?? 'material:close';\n\n // Inputs.\n @Input({required: true}) collection: Collection<T> | null = null;\n @Input() queryPlaceholder: string | null = null;\n @Input({transform: booleanAttribute}) standalone: boolean = false;\n\n}\n","<div class=\"bb-collections-actions-row\">\n @if (collection?.queryFieldsControl?.value?.length > 0) {\n <bb-form-control class=\"bb-collections-actions-search\">\n <bb-icon [src]=\"searchIconName\"\n bbPrefix></bb-icon>\n <input [formControl]=\"collection?.queryControl\"\n [placeholder]=\"queryPlaceholder ?? ('collection.search_label' | bbLocalize)\"\n bbInput\n autocomplete=\"off\"\n type=\"search\">\n @if (collection?.queryControl?.value?.length > 0) {\n <button (click)=\"collection?.queryControl?.setValue('')\"\n bbSuffix\n data-button\n type=\"button\">\n <bb-icon [src]=\"closeIconName\"></bb-icon>\n </button>\n }\n </bb-form-control>\n }\n <ng-content select=\"[data-collections-action]\"></ng-content>\n</div>\n<ng-content></ng-content>\n","import {booleanAttribute, ChangeDetectionStrategy, Component, ContentChild, Input, TemplateRef, ViewEncapsulation} from '@angular/core';\nimport {BbCollectionsDataRow, BbCollectionsDataRowContext} from '../../directives/collections-data-row.directive';\nimport {BbCollectionsData, BbCollectionsDataContext} from '../../directives/collections-data.directive';\nimport {BbLocalize, BbLocalizeString, BbLocalizeTemplate} from '@bravobit/bb-foundation/localize';\nimport {BbCollectionsActions} from '../collections-actions/collections-actions.component';\nimport {BbCollectionsViewer} from '../collections-viewer/collections-viewer.component';\nimport {BbCollectionsInitial} from '../../directives/collections-initial.directive';\nimport {BbCollectionsPager} from '../collections-pager/collections-pager.component';\nimport {BbCollectionsEmpty} from '../../directives/collections-empty.directive';\nimport {BbCollectionsError} from '../../directives/collections-error.directive';\nimport {AsyncPipe, NgTemplateOutlet} from '@angular/common';\nimport {BbSpinner} from '@bravobit/bb-foundation/elements';\nimport {BbTemplate} from '@bravobit/bb-foundation/utils';\nimport {Collection} from '../../collection';\nimport {BehaviorSubject} from 'rxjs';\n\n@Component({\n selector: 'bb-collections-table',\n templateUrl: './collections-table.component.html',\n styleUrls: ['./collections-table.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'class': 'bb-collections-table',\n '[class.include-vertical-lines]': 'includeVerticalLines'\n },\n imports: [\n NgTemplateOutlet,\n BbCollectionsViewer,\n BbCollectionsData,\n BbCollectionsEmpty,\n BbCollectionsError,\n BbCollectionsInitial,\n BbCollectionsActions,\n BbCollectionsPager,\n BbLocalizeString,\n BbTemplate,\n BbLocalize,\n BbLocalizeTemplate,\n BbSpinner,\n AsyncPipe\n ]\n})\nexport class BbCollectionsTable<T = any> {\n\n // Readonly data.\n readonly collection$ = new BehaviorSubject<Collection<T> | null>(null);\n\n // Views.\n @ContentChild(BbCollectionsData, {read: TemplateRef, static: false}) dataTemplate?: TemplateRef<BbCollectionsDataContext<T>>;\n @ContentChild(BbCollectionsDataRow, {read: TemplateRef, static: false}) dataRowTemplate?: TemplateRef<BbCollectionsDataRowContext<T>>;\n\n // Inputs.\n @Input() queryPlaceholder: string | null = null;\n @Input() emptyContent: string | TemplateRef<any> | null = null;\n @Input() noResultsContent: string | TemplateRef<any> | null = null;\n @Input() errorContent: string | TemplateRef<any> | null = null;\n @Input() trackByProperty: string | null = 'id';\n @Input({transform: booleanAttribute}) includeVerticalLines: boolean = false;\n @Input({transform: booleanAttribute}) hideActions: boolean = false;\n @Input({transform: booleanAttribute}) hidePager: boolean = false;\n\n @Input({required: true})\n set collection(collection: Collection<T>) {\n this.collection$.next(collection);\n }\n\n get collection() {\n return this.collection$.getValue();\n }\n\n}\n","@if (!hideActions) {\n <bb-collections-actions [collection]=\"collection\"\n [queryPlaceholder]=\"queryPlaceholder\">\n <ng-content ngProjectAs=\"[data-collections-action]\"\n select=\"[data-collections-action]\"></ng-content>\n <ng-content ngProjectAs=\"[data-collections-row]\"\n select=\"[data-collections-row]\"></ng-content>\n </bb-collections-actions>\n}\n\n<div [class.loading]=\"collection?.loading$ | async\"\n class=\"bb-collections-table-wrapper\">\n <div [collection]=\"collection\"\n class=\"bb-collections-table-container\"\n bb-collections-viewer>\n @if (collection?.loading$ | async) {\n <div class=\"bb-collections-table-loading\"></div>\n }\n <table *bbCollectionsData=\"let items = items; let loading = loading\">\n <ng-content select=\"thead\"></ng-content>\n @if (dataTemplate) {\n <ng-container\n *ngTemplateOutlet=\"dataTemplate; context: {items: $any(items), loading: loading}\"></ng-container>\n } @else {\n <tbody>\n @for (item of items; track (trackByProperty === null ? $index : item[trackByProperty])) {\n <ng-container\n *ngTemplateOutlet=\"dataRowTemplate; context: {$implicit: item, item: item}\"></ng-container>\n }\n </tbody>\n }\n <ng-content select=\"tfoot\"></ng-content>\n </table>\n <div *bbCollectionsEmpty=\"let query = query\"\n class=\"bb-collections-table-info\">\n <div class=\"bb-collections-table-image empty\"></div>\n @if (query?.length > 0) {\n <ng-template [bbTemplate]=\"noResultsContent\">\n <p [bb-localize-string]=\"$any(noResultsContent) ?? ('collection.no_results_label' | bbLocalize)\"\n class=\"bb-collections-table-info-text\">\n <strong *bbLocalizeTemplate=\"'query'\">{{ query ?? '...' }}</strong>\n </p>\n </ng-template>\n } @else {\n <ng-template [bbTemplate]=\"emptyContent\">\n <p class=\"bb-collections-table-info-text\">\n {{ $any(emptyContent) ?? ('collection.empty_label' | bbLocalize) }}\n </p>\n </ng-template>\n }\n </div>\n <div *bbCollectionsError=\"let error = error\"\n class=\"bb-collections-table-info\">\n <div class=\"bb-collections-table-image error\"></div>\n <ng-template [bbTemplate]=\"errorContent\">\n <p class=\"bb-collections-table-info-text\">\n {{ $any(errorContent) ?? ('collection.error_label' | bbLocalize) }}\n </p>\n </ng-template>\n </div>\n <div *bbCollectionsInitial\n class=\"bb-collections-table-info\">\n <bb-spinner class=\"block\"></bb-spinner>\n </div>\n </div>\n</div>\n\n@if (!hidePager) {\n <footer class=\"bb-collections-table-footer\">\n <bb-collections-pager [collection]=\"collection\"></bb-collections-pager>\n </footer>\n}\n","import {Attribute, ChangeDetectionStrategy, ChangeDetectorRef, Component, HostListener, OnDestroy, OnInit, Optional, ViewEncapsulation} from '@angular/core';\nimport {BbCollectionsTable} from '../collections-table/collections-table.component';\nimport {distinctUntilChanged, map, switchMap} from 'rxjs/operators';\nimport {getControlValue} from '@bravobit/bb-foundation/rxjs';\nimport {Subscription} from 'rxjs';\n\n@Component({\n selector: 'th[bb-collections-table-sorting]',\n templateUrl: './collections-table-sorting.component.html',\n styleUrls: ['./collections-table-sorting.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'class': 'bb-collections-table-sorting',\n '[class.asc]': 'direction === \\'asc\\'',\n '[class.desc]': 'direction === \\'desc\\''\n },\n})\nexport class BbCollectionsTableSorting implements OnInit, OnDestroy {\n\n // Readonly data.\n readonly orderedOptions: [null, 'asc', 'desc'] = [null, 'asc', 'desc'];\n\n // State.\n direction: 'asc' | 'desc' | null = null;\n\n // Subscription.\n private _subscription = new Subscription();\n\n constructor(@Attribute('bb-collections-table-sorting') private _name: string,\n private _changeDetectorRef: ChangeDetectorRef,\n @Optional() private _parent?: BbCollectionsTable<unknown>) {\n }\n\n ngOnInit() {\n const direction$ = this._parent.collection$.pipe(\n switchMap(collection => getControlValue(collection.sortControl)),\n map(value => Array.isArray(value) ? value : [value]),\n map(value => value?.find(item => item?.name === this._name)),\n map(sorting => sorting?.direction ?? null),\n distinctUntilChanged()\n );\n const subscription = direction$.subscribe(direction => {\n this.direction = direction;\n this._changeDetectorRef.markForCheck();\n });\n this._subscription.add(subscription);\n }\n\n ngOnDestroy() {\n this._subscription?.unsubscribe();\n }\n\n @HostListener('click')\n onClick() {\n if (!this._name) {\n return;\n }\n\n const nextDirection = this.getNextOption(this.direction);\n const controlValue = nextDirection === null ? null : {name: this._name, direction: nextDirection};\n this._parent?.collection?.sortControl?.setValue(controlValue);\n }\n\n private getNextOption(direction: string) {\n const index = this.orderedOptions.findIndex(item => item === direction);\n const newIndex = (index + 1) % this.orderedOptions?.length;\n return this.orderedOptions?.[newIndex] ?? null;\n }\n\n}\n","<ng-content></ng-content>\n","import {ChangeDetectionStrategy, Component, Input, TemplateRef, ViewEncapsulation} from '@angular/core';\nimport {BbAvatar} from '@bravobit/bb-foundation/elements';\nimport {BbTemplate} from '@bravobit/bb-foundation/utils';\n\n@Component({\n selector: '[bb-collections-table-label]',\n templateUrl: './collections-table-label.component.html',\n styleUrls: ['./collections-table-label.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {'class': 'bb-collections-table-label'},\n imports: [BbAvatar, BbTemplate]\n})\nexport class BbCollectionsTableLabel {\n\n // Inputs.\n @Input({required: true}) titleLabel: string | TemplateRef<any> | null = null;\n @Input() descriptionLabel: string | TemplateRef<any> | null = null;\n @Input() imageUrl: string | null = null;\n @Input() alt: string | null = null;\n @Input() type: 'image' | 'avatar' | 'content' = 'image';\n\n}\n","@switch (type) {\n @case ('avatar') {\n <bb-avatar [title]=\"alt ?? '...'\"\n [src]=\"imageUrl\"\n size=\"2\"\n class=\"bb-collections-table-label-avatar\">\n </bb-avatar>\n }\n @case ('content') {\n <ng-content></ng-content>\n }\n @default {\n @if (imageUrl; as src) {\n <div [style.background-image]=\"'url(' + src + ')'\"\n class=\"bb-collections-table-label-image\"></div>\n }\n }\n}\n\n<div class=\"bb-collections-table-label-content\">\n <span class=\"bb-collections-table-label-title\"><ng-template\n [bbTemplate]=\"titleLabel\">{{ titleLabel }}</ng-template></span>\n @if (descriptionLabel; as descriptionContent) {\n <small class=\"bb-collections-table-label-description\">\n <ng-template [bbTemplate]=\"descriptionContent\">{{ descriptionContent }}</ng-template>\n </small>\n }\n</div>\n","import {booleanAttribute, ChangeDetectionStrategy, Component, ContentChild, Input, TemplateRef, ViewEncapsulation} from '@angular/core';\nimport {BbCollectionsItem, BbCollectionsItemContext} from '../../directives/collections-item.directive';\nimport {BbCollectionsActions} from '../collections-actions/collections-actions.component';\nimport {BbCollectionsViewer} from '../collections-viewer/collections-viewer.component';\nimport {BbCollectionsPager} from '../collections-pager/collections-pager.component';\nimport {BbCollectionsData} from '../../directives/collections-data.directive';\nimport {NgTemplateOutlet} from '@angular/common';\nimport {Collection} from '../../collection';\nimport {BehaviorSubject} from 'rxjs';\n\n@Component({\n selector: 'bb-collections-grid',\n templateUrl: './collections-grid.component.html',\n styleUrls: ['./collections-grid.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {'class': 'bb-collections-grid'},\n imports: [\n BbCollectionsData,\n BbCollectionsViewer,\n NgTemplateOutlet,\n BbCollectionsActions,\n BbCollectionsPager\n ]\n})\nexport class BbCollectionsGrid<T> {\n\n // Readonly data.\n readonly collection$ = new BehaviorSubject<Collection<T> | null>(null);\n\n // Views.\n @ContentChild(BbCollectionsItem, {read: TemplateRef, static: false}) itemTemplate?: TemplateRef<BbCollectionsItemContext<T>>;\n\n // Inputs.\n @Input() queryPlaceholder: string | null = null;\n @Input({transform: booleanAttribute}) hideActions: boolean = false;\n @Input({transform: booleanAttribute}) hidePager: boolean = false;\n\n @Input({required: true})\n set collection(collection: Collection<T>) {\n this.collection$.next(collection);\n }\n\n get collection() {\n return this.collection$.getValue();\n }\n\n}\n","@if (!hideActions) {\n <bb-collections-actions [collection]=\"collection\"\n [queryPlaceholder]=\"queryPlaceholder\"\n standalone>\n <ng-content ngProjectAs=\"[data-collections-action]\"\n select=\"[data-collections-action]\"></ng-content>\n <ng-content ngProjectAs=\"[data-collections-row]\"\n select=\"[data-collections-row]\"></ng-content>\n </bb-collections-actions>\n}\n\n<div [collection]=\"collection\"\n class=\"bb-collections-grid-container\"\n bb-collections-viewer>\n <ul *bbCollectionsData=\"let items = items\"\n class=\"bb-collections-grid-list\">\n @for (item of items; track $index) {\n <li class=\"bb-collections-grid-item\">\n <ng-container *ngTemplateOutlet=\"itemTemplate; context: {$implicit: item, item: item}\"></ng-container>\n </li>\n }\n </ul>\n</div>\n\n@if (!hidePager) {\n <footer class=\"bb-collections-grid-footer\">\n <bb-collections-pager [collection]=\"collection\"></bb-collections-pager>\n </footer>\n}\n","import {catchError, debounceTime, distinctUntilChanged, map, shareReplay, startWith, switchMap, tap} from 'rxjs/operators';\nimport {CollectionData, CollectionRequest, CollectionRequestSort} from './interfaces/collection.interface';\nimport {BehaviorSubject, combineLatest, defer, isObservable, merge, Observable, of} from 'rxjs';\nimport {CollectionProvider} from './providers/collection.provider';\nimport {getControlValue} from '@bravobit/bb-foundation/rxjs';\nimport {FormControl} from '@angular/forms';\n\nexport const enum CollectionState {\n Initial = 'initial',\n Error = 'error',\n Empty = 'empty',\n Data = 'data'\n}\n\nexport class Collection<T> {\n\n // Controls.\n readonly queryControl: FormControl<string | null>;\n readonly queryFieldsControl: FormControl<string[]>;\n readonly pageNumberControl: FormControl<number>;\n readonly pageSizeControl: FormControl<number>;\n readonly sortControl: FormControl<CollectionRequestSort | CollectionRequestSort[]>;\n\n // Request.\n readonly data$: Observable<{\n response?: CollectionData<T>,\n request?: CollectionRequest,\n error?: Error\n state: CollectionState,\n loading: boolean,\n initial: boolean\n }>;\n\n readonly raw$ = new BehaviorSubject<CollectionData<T> | null>(null);\n readonly loading$ = new BehaviorSubject<boolean>(true);\n\n // State.\n private _formatter: (item: T[]) => T[] | Observable<T[]> = null;\n private _refresh$ = new BehaviorSubject<number>(0);\n\n constructor(private readonly _provider: CollectionProvider<T>,\n readonly _initialValues: Partial<CollectionRequest> = {}) {\n this.queryControl = new FormControl<string | null>(_initialValues?.query ?? null);\n this.queryFieldsControl = new FormControl<string[]>(_initialValues?.queryFields ?? []);\n this.pageNumberControl = new FormControl<number>(_initialValues?.pageNumber ?? 1);\n this.pageSizeControl = new FormControl<number>(_initialValues?.pageSize ?? 25);\n this.sortControl = new FormControl<CollectionRequestSort | CollectionRequestSort[] | null>(_initialValues?.sort ?? null);\n\n this.data$ = this.getData();\n }\n\n refresh() {\n this._refresh$.next(0);\n }\n\n setFormatter(callback: (items: T[]) => T[] | Observable<T[]>) {\n this._formatter = callback;\n return this;\n }\n\n private getData() {\n const data$ = this.request.pipe(\n tap(() => this.loading$.next(true)),\n switchMap(request => {\n return this._provider.transform(request, {collection: this}).pipe(\n tap(response => this.cacheCollectionData(response)),\n map(response => ({response, request, initial: false})),\n catchError(error => of<{ error: Error, response: CollectionData<T> | null, request: CollectionRequest, initial: boolean }>({\n error,\n request,\n response: null,\n initial: false\n })),\n tap(() => this.loading$.next(false))\n );\n }),\n startWith<{ initial: boolean, response: CollectionData<T> | null }>({initial: true, response: null}),\n shareReplay({refCount: true, bufferSize: 1})\n );\n\n return combineLatest([data$, this.loading$.asObservable()]).pipe(\n switchMap(([data, loading]) => {\n const combined = {...data, loading};\n return this.formatResponse(data?.response).pipe(\n map(response => {\n const data = {...combined, response};\n return {...data, state: this.getState(data)};\n })\n );\n })\n );\n }\n\n private formatResponse(response: CollectionData<T>) {\n if (!response || !this._formatter) {\n return of(response);\n }\n\n const items = response?.data ?? [];\n const data = this._formatter?.(items) ?? items;\n const data$ = isObservable(data) ? data : of(data);\n\n return data$.pipe(\n map(data => ({...response, data}))\n );\n }\n\n private getState(data: { response?: CollectionData<T>, request?: CollectionRequest, error?: Error, loading: boolean, initial: boolean }) {\n if (!!data?.error) {\n return CollectionState.Error;\n }\n\n if (!!data?.initial) {\n return CollectionState.Initial;\n }\n\n const count = data?.response?.data?.length ?? 0;\n if (count <= 0) {\n return CollectionState.Empty;\n }\n\n return CollectionState.Data;\n }\n\n private cacheCollectionData(data: CollectionData<T>) {\n this.raw$.next(data);\n }\n\n private get request() {\n const pageNumber$ = getControlValue<number>(this.pageNumberControl);\n const pageSize$ = getControlValue<number>(this.pageSizeControl);\n const query$ = this.getQueryObservable();\n const queryFields$ = getControlValue<string[]>(this.queryFieldsControl);\n const sort$ = getControlValue<CollectionRequestSort | CollectionRequestSort[]>(this.sortControl);\n\n return combineLatest([pageNumber$, pageSize$, query$, queryFields$, sort$, this._refresh$.asObservable()]).pipe(\n map(([pageNumber, pageSize, query, queryFields, sort]) => ({\n pageNumber,\n pageSize,\n query,\n queryFields,\n sort\n }))\n );\n }\n\n private getQueryObservable() {\n return merge(this.queryControl.valueChanges, defer(() => of(this.queryControl?.value))).pipe(\n debounceTime(400),\n distinctUntilChanged()\n );\n }\n\n}\n\n","import {BbCollectionsTableSorting} from './components/collections-table-sorting/collections-table-sorting.component';\nimport {BbCollectionsTableLabel} from './components/collections-table-label/collections-table-label.component';\nimport {BbCollectionsActions} from './components/collections-actions/collections-actions.component';\nimport {BbCollectionsViewer} from './components/collections-viewer/collections-viewer.component';\nimport {BbCollectionsPager} from './components/collections-pager/collections-pager.component';\nimport {BbCollectionsTable} from './components/collections-table/collections-table.component';\nimport {BbCollectionsGrid} from './components/collections-grid/collections-grid.component';\nimport {BbCollectionsDataRow} from './directives/collections-data-row.directive';\nimport {BbCollectionsInitial} from './directives/collections-initial.directive';\nimport {BbCollectionsEmpty} from './directives/collections-empty.directive';\nimport {BbCollectionsError} from './directives/collections-error.directive';\nimport {BbCollectionsData} from './directives/collections-data.directive';\nimport {BbCollectionsItem} from './directives/collections-item.directive';\nimport {NgModule} from '@angular/core';\n\n@NgModule({\n imports: [\n BbCollectionsViewer,\n BbCollectionsPager,\n BbCollectionsTable,\n BbCollectionsTableSorting,\n BbCollectionsTableLabel,\n BbCollectionsGrid,\n BbCollectionsActions,\n BbCollectionsData,\n BbCollectionsDataRow,\n BbCollectionsEmpty,\n BbCollectionsError,\n BbCollectionsInitial,\n BbCollectionsItem\n ],\n exports: [\n BbCollectionsViewer,\n BbCollectionsPager,\n BbCollectionsTable,\n BbCollectionsTableSorting,\n BbCollectionsTableLabel,\n BbCollectionsGrid,\n BbCollectionsActions,\n BbCollectionsData,\n BbCollectionsDataRow,\n BbCollectionsEmpty,\n BbCollectionsError,\n BbCollectionsInitial,\n BbCollectionsItem\n ]\n})\nexport class CollectionsModule {\n}\n","import {COLLECTIONS_CONFIG, CollectionsConfig} from './collections.interfaces';\nimport {EnvironmentProviders, makeEnvironmentProviders} from '@angular/core';\n\nexport function provideCollectionsConfig(config: CollectionsConfig): EnvironmentProviders {\n return makeEnvironmentProviders([\n {provide: COLLECTIONS_CONFIG, useValue: config}\n ]);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.BbCollectionsTable"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bravobit/bb-foundation",
|
|
3
|
-
"version": "0.52.
|
|
3
|
+
"version": "0.52.5",
|
|
4
4
|
"description": "The Angular core foundation of the Bravobit team.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Stan van Heumen",
|
|
@@ -44,18 +44,14 @@
|
|
|
44
44
|
"types": "./collections/index.d.ts",
|
|
45
45
|
"default": "./fesm2022/bravobit-bb-foundation-collections.mjs"
|
|
46
46
|
},
|
|
47
|
-
"./
|
|
48
|
-
"types": "./
|
|
49
|
-
"default": "./fesm2022/bravobit-bb-foundation-
|
|
47
|
+
"./combobox": {
|
|
48
|
+
"types": "./combobox/index.d.ts",
|
|
49
|
+
"default": "./fesm2022/bravobit-bb-foundation-combobox.mjs"
|
|
50
50
|
},
|
|
51
51
|
"./dialog": {
|
|
52
52
|
"types": "./dialog/index.d.ts",
|
|
53
53
|
"default": "./fesm2022/bravobit-bb-foundation-dialog.mjs"
|
|
54
54
|
},
|
|
55
|
-
"./combobox": {
|
|
56
|
-
"types": "./combobox/index.d.ts",
|
|
57
|
-
"default": "./fesm2022/bravobit-bb-foundation-combobox.mjs"
|
|
58
|
-
},
|
|
59
55
|
"./elements": {
|
|
60
56
|
"types": "./elements/index.d.ts",
|
|
61
57
|
"default": "./fesm2022/bravobit-bb-foundation-elements.mjs"
|
|
@@ -64,6 +60,10 @@
|
|
|
64
60
|
"types": "./http/index.d.ts",
|
|
65
61
|
"default": "./fesm2022/bravobit-bb-foundation-http.mjs"
|
|
66
62
|
},
|
|
63
|
+
"./dashboard": {
|
|
64
|
+
"types": "./dashboard/index.d.ts",
|
|
65
|
+
"default": "./fesm2022/bravobit-bb-foundation-dashboard.mjs"
|
|
66
|
+
},
|
|
67
67
|
"./localize": {
|
|
68
68
|
"types": "./localize/index.d.ts",
|
|
69
69
|
"default": "./fesm2022/bravobit-bb-foundation-localize.mjs"
|
|
@@ -92,14 +92,14 @@
|
|
|
92
92
|
"types": "./select/index.d.ts",
|
|
93
93
|
"default": "./fesm2022/bravobit-bb-foundation-select.mjs"
|
|
94
94
|
},
|
|
95
|
-
"./table": {
|
|
96
|
-
"types": "./table/index.d.ts",
|
|
97
|
-
"default": "./fesm2022/bravobit-bb-foundation-table.mjs"
|
|
98
|
-
},
|
|
99
95
|
"./storage": {
|
|
100
96
|
"types": "./storage/index.d.ts",
|
|
101
97
|
"default": "./fesm2022/bravobit-bb-foundation-storage.mjs"
|
|
102
98
|
},
|
|
99
|
+
"./table": {
|
|
100
|
+
"types": "./table/index.d.ts",
|
|
101
|
+
"default": "./fesm2022/bravobit-bb-foundation-table.mjs"
|
|
102
|
+
},
|
|
103
103
|
"./tooltip": {
|
|
104
104
|
"types": "./tooltip/index.d.ts",
|
|
105
105
|
"default": "./fesm2022/bravobit-bb-foundation-tooltip.mjs"
|