@ng-vagabond-lab/ng-dsv 0.1.95 → 0.1.98

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.
package/assets/style.scss CHANGED
@@ -35,7 +35,7 @@
35
35
 
36
36
  .error {
37
37
  background-color: var(--error);
38
- color: var(button-text);
38
+ color: var(--button-text);
39
39
  }
40
40
 
41
41
  .text,
@@ -1,12 +1,12 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { inject, signal, effect, TransferState, makeStateKey, Directive, Injectable } from '@angular/core';
3
- import { Router, Scroll, ActivatedRoute } from '@angular/router';
3
+ import { toSignal } from '@angular/core/rxjs-interop';
4
+ import { Router, NavigationEnd, Scroll, ActivatedRoute } from '@angular/router';
4
5
  import { ApiService } from '@ng-vagabond-lab/ng-dsv/api';
5
6
  import { EnvironmentService } from '@ng-vagabond-lab/ng-dsv/environment';
6
7
  import { PlatformService } from '@ng-vagabond-lab/ng-dsv/platform';
7
8
  import { StorageService } from '@ng-vagabond-lab/ng-dsv/storage';
8
9
  import { filter, map } from 'rxjs';
9
- import { toSignal } from '@angular/core/rxjs-interop';
10
10
  import { Title, Meta } from '@angular/platform-browser';
11
11
 
12
12
  class BaseAppComponent {
@@ -15,6 +15,8 @@ class BaseAppComponent {
15
15
  environmentService = inject(EnvironmentService);
16
16
  apiService = inject(ApiService);
17
17
  scrollService = inject(ScrollService);
18
+ router = inject(Router);
19
+ currentUrl = toSignal(this.router.events.pipe(filter((event) => event instanceof NavigationEnd), map((event) => event.urlAfterRedirects)), { initialValue: this.router.url });
18
20
  scroll = signal(0, ...(ngDevMode ? [{ debugName: "scroll" }] : /* istanbul ignore next */ []));
19
21
  load = signal(false, ...(ngDevMode ? [{ debugName: "load" }] : /* istanbul ignore next */ []));
20
22
  constructor() {
@@ -1 +1 @@
1
- {"version":3,"file":"ng-vagabond-lab-ng-dsv-base.mjs","sources":["../../../projects/ng-dsv/base/component/base.app.component.ts","../../../projects/ng-dsv/base/component/base.seo.container.ts","../../../projects/ng-dsv/base/component/base.route.component.ts","../../../projects/ng-dsv/base/component/base.scroll.component.ts","../../../projects/ng-dsv/base/service/base.service.ts","../../../projects/ng-dsv/base/service/scroll.service.ts","../../../projects/ng-dsv/base/utils/base.utils.ts","../../../projects/ng-dsv/base/ng-vagabond-lab-ng-dsv-base.ts"],"sourcesContent":["import { effect, inject, signal } from '@angular/core';\nimport { Router, Scroll } from '@angular/router';\nimport { ApiService } from '@ng-vagabond-lab/ng-dsv/api';\nimport { EnvironmentService } from '@ng-vagabond-lab/ng-dsv/environment';\nimport { PlatformService } from '@ng-vagabond-lab/ng-dsv/platform';\nimport { StorageService } from '@ng-vagabond-lab/ng-dsv/storage';\nimport { filter, map } from 'rxjs';\nimport { ScrollService } from '../public-api';\n\nexport abstract class BaseAppComponent {\n readonly platformService = inject(PlatformService);\n readonly storageService: StorageService = inject(StorageService);\n readonly environmentService = inject(EnvironmentService);\n readonly apiService = inject(ApiService);\n readonly scrollService = inject(ScrollService);\n\n scroll = signal<number>(0);\n\n load = signal<boolean>(false);\n\n constructor() {\n inject(Router)\n .events.pipe(\n filter((event): event is Scroll => event instanceof Scroll),\n map((event: Scroll) => event.position),\n )\n .subscribe(() => {\n if (this.platformService.isPlatformBrowser() && this.scrollService.getScroll()) {\n const divScrolls = document.getElementsByClassName('scroll');\n Array.from(divScrolls).forEach((scroll) => {\n setTimeout(() => {\n scroll?.scrollTo(0, this.scrollService.getScroll() ?? 0);\n }, 100);\n });\n }\n });\n\n effect(() => {\n if (this.environmentService.env()) {\n const apiUrl = this.environmentService.env()?.API_URL!;\n this.apiService.setBaseUrl(apiUrl);\n this.load.set(true);\n }\n });\n }\n\n doScroll() {\n const divScroll = document.getElementsByClassName('scroll')?.[0];\n if (document.getElementsByClassName('scroll').length === 1) {\n this.scrollService.saveScroll(divScroll.scrollTop);\n this.scrollService.scroll.set(divScroll.scrollTop);\n }\n }\n}\n","import { inject, makeStateKey, TransferState } from '@angular/core';\nimport { Meta, Title } from '@angular/platform-browser';\n\nexport abstract class BaseSeoContainer {\n public readonly title = inject(Title);\n public readonly transferState = inject(TransferState);\n public readonly meta = inject(Meta);\n\n setMeta(titleApp: string, title: string, description: string, image?: string) {\n const newTitle = titleApp + ' - ' + title;\n this.title.setTitle(newTitle);\n this.transferState.set(makeStateKey<string>('title'), newTitle);\n this.meta.updateTag({ name: 'description', content: description });\n image && this.meta.updateTag({ property: 'og:image', content: image });\n }\n}\n","import { inject } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { ActivatedRoute } from '@angular/router';\nimport { Subscription } from 'rxjs';\nimport { BaseSeoContainer } from './base.seo.container';\n\nexport abstract class BaseRouteComponent extends BaseSeoContainer {\n activatedRoute = inject<ActivatedRoute>(ActivatedRoute);\n\n routeParams = toSignal(this.activatedRoute.params);\n\n routeObservable: Subscription | null = null;\n}\n","import { inject } from '@angular/core';\nimport { BaseSeoContainer, ScrollService } from '../public-api';\n\nexport abstract class BaseScrollComponent extends BaseSeoContainer {\n readonly scrollService = inject(ScrollService);\n\n loadMore() {\n if (!this.scrollService.getlocked()) {\n this.scrollService.doBlocked();\n this.doLoad();\n this.scrollService.doBlockedWithTimeout(false, 500);\n }\n }\n\n abstract doLoad(): void;\n}\n","import { Directive } from '@angular/core';\n\n@Directive()\nexport abstract class BaseService {}\n","import { Injectable, signal } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class ScrollService {\n scrolls = signal<Map<string, number>>(new Map());\n blocked = signal<Map<string, boolean>>(new Map());\n scroll = signal<number>(0);\n\n saveScroll(scrollTop: number) {\n this.scrolls.update((value) => {\n if (scrollTop !== 0) {\n value.set(location.href, scrollTop);\n }\n return value;\n });\n }\n\n getScroll() {\n return this.scrolls().get(location.href);\n }\n\n doBlocked(blocked: boolean = true) {\n this.blocked.update((value) => {\n value.set(location.href, blocked);\n return value;\n });\n }\n\n doBlockedWithTimeout(blocked: boolean, timeout: number = 1000) {\n setTimeout(() => {\n this.doBlocked(blocked);\n }, timeout);\n }\n\n getlocked() {\n return this.blocked().get(location.href);\n }\n}\n","import { OutputEmitterRef } from '@angular/core';\n\nexport const isCallback = <T>(callback: OutputEmitterRef<T>) => {\n const listeners = callback['listeners' as keyof OutputEmitterRef<T>];\n return listeners?.length > 0;\n};\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ng-vagabond-lab-ng-dsv-base.mjs","sources":["../../../projects/ng-dsv/base/component/base.app.component.ts","../../../projects/ng-dsv/base/component/base.seo.container.ts","../../../projects/ng-dsv/base/component/base.route.component.ts","../../../projects/ng-dsv/base/component/base.scroll.component.ts","../../../projects/ng-dsv/base/service/base.service.ts","../../../projects/ng-dsv/base/service/scroll.service.ts","../../../projects/ng-dsv/base/utils/base.utils.ts","../../../projects/ng-dsv/base/ng-vagabond-lab-ng-dsv-base.ts"],"sourcesContent":["import { effect, inject, signal } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { NavigationEnd, Router, Scroll } from '@angular/router';\nimport { ApiService } from '@ng-vagabond-lab/ng-dsv/api';\nimport { EnvironmentService } from '@ng-vagabond-lab/ng-dsv/environment';\nimport { PlatformService } from '@ng-vagabond-lab/ng-dsv/platform';\nimport { StorageService } from '@ng-vagabond-lab/ng-dsv/storage';\nimport { filter, map } from 'rxjs';\nimport { ScrollService } from '../public-api';\n\nexport abstract class BaseAppComponent {\n readonly platformService = inject(PlatformService);\n readonly storageService: StorageService = inject(StorageService);\n readonly environmentService = inject(EnvironmentService);\n readonly apiService = inject(ApiService);\n readonly scrollService = inject(ScrollService);\n readonly router = inject(Router);\n\n currentUrl = toSignal(\n this.router.events.pipe(\n filter((event) => event instanceof NavigationEnd),\n map((event) => event.urlAfterRedirects),\n ),\n { initialValue: this.router.url },\n );\n scroll = signal<number>(0);\n\n load = signal<boolean>(false);\n\n constructor() {\n inject(Router)\n .events.pipe(\n filter((event): event is Scroll => event instanceof Scroll),\n map((event: Scroll) => event.position),\n )\n .subscribe(() => {\n if (this.platformService.isPlatformBrowser() && this.scrollService.getScroll()) {\n const divScrolls = document.getElementsByClassName('scroll');\n Array.from(divScrolls).forEach((scroll) => {\n setTimeout(() => {\n scroll?.scrollTo(0, this.scrollService.getScroll() ?? 0);\n }, 100);\n });\n }\n });\n\n effect(() => {\n if (this.environmentService.env()) {\n const apiUrl = this.environmentService.env()?.API_URL!;\n this.apiService.setBaseUrl(apiUrl);\n this.load.set(true);\n }\n });\n }\n\n doScroll() {\n const divScroll = document.getElementsByClassName('scroll')?.[0];\n if (document.getElementsByClassName('scroll').length === 1) {\n this.scrollService.saveScroll(divScroll.scrollTop);\n this.scrollService.scroll.set(divScroll.scrollTop);\n }\n }\n}\n","import { inject, makeStateKey, TransferState } from '@angular/core';\nimport { Meta, Title } from '@angular/platform-browser';\n\nexport abstract class BaseSeoContainer {\n public readonly title = inject(Title);\n public readonly transferState = inject(TransferState);\n public readonly meta = inject(Meta);\n\n setMeta(titleApp: string, title: string, description: string, image?: string) {\n const newTitle = titleApp + ' - ' + title;\n this.title.setTitle(newTitle);\n this.transferState.set(makeStateKey<string>('title'), newTitle);\n this.meta.updateTag({ name: 'description', content: description });\n image && this.meta.updateTag({ property: 'og:image', content: image });\n }\n}\n","import { inject } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { ActivatedRoute } from '@angular/router';\nimport { Subscription } from 'rxjs';\nimport { BaseSeoContainer } from './base.seo.container';\n\nexport abstract class BaseRouteComponent extends BaseSeoContainer {\n activatedRoute = inject<ActivatedRoute>(ActivatedRoute);\n\n routeParams = toSignal(this.activatedRoute.params);\n\n routeObservable: Subscription | null = null;\n}\n","import { inject } from '@angular/core';\nimport { BaseSeoContainer, ScrollService } from '../public-api';\n\nexport abstract class BaseScrollComponent extends BaseSeoContainer {\n readonly scrollService = inject(ScrollService);\n\n loadMore() {\n if (!this.scrollService.getlocked()) {\n this.scrollService.doBlocked();\n this.doLoad();\n this.scrollService.doBlockedWithTimeout(false, 500);\n }\n }\n\n abstract doLoad(): void;\n}\n","import { Directive } from '@angular/core';\n\n@Directive()\nexport abstract class BaseService {}\n","import { Injectable, signal } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class ScrollService {\n scrolls = signal<Map<string, number>>(new Map());\n blocked = signal<Map<string, boolean>>(new Map());\n scroll = signal<number>(0);\n\n saveScroll(scrollTop: number) {\n this.scrolls.update((value) => {\n if (scrollTop !== 0) {\n value.set(location.href, scrollTop);\n }\n return value;\n });\n }\n\n getScroll() {\n return this.scrolls().get(location.href);\n }\n\n doBlocked(blocked: boolean = true) {\n this.blocked.update((value) => {\n value.set(location.href, blocked);\n return value;\n });\n }\n\n doBlockedWithTimeout(blocked: boolean, timeout: number = 1000) {\n setTimeout(() => {\n this.doBlocked(blocked);\n }, timeout);\n }\n\n getlocked() {\n return this.blocked().get(location.href);\n }\n}\n","import { OutputEmitterRef } from '@angular/core';\n\nexport const isCallback = <T>(callback: OutputEmitterRef<T>) => {\n const listeners = callback['listeners' as keyof OutputEmitterRef<T>];\n return listeners?.length > 0;\n};\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -61,6 +61,9 @@ class MenuService extends BaseService {
61
61
  toogleMenu() {
62
62
  this.isMenuOpen.update((toogle) => !toogle);
63
63
  }
64
+ closeMenu() {
65
+ this.isMenuOpen.set(false);
66
+ }
64
67
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: MenuService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
65
68
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: MenuService, providedIn: 'root' });
66
69
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ng-vagabond-lab-ng-dsv-ds-menu.mjs","sources":["../../../projects/ng-dsv/ds/menu/component/button/menu.button.component.ts","../../../projects/ng-dsv/ds/menu/component/button/menu.button.component.html","../../../projects/ng-dsv/ds/menu/component/menu.component.ts","../../../projects/ng-dsv/ds/menu/component/menu.component.html","../../../projects/ng-dsv/ds/menu/service/menu.service.ts","../../../projects/ng-dsv/ds/menu/ng-vagabond-lab-ng-dsv-ds-menu.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport { Component, inject } from '@angular/core';\nimport { DsvButtonComponent } from '@ng-vagabond-lab/ng-dsv/ds/button';\nimport { MenuService } from '../../public-api';\n\n@Component({\n selector: 'dsv-menu-button',\n imports: [CommonModule, DsvButtonComponent],\n templateUrl: './menu.button.component.html',\n styleUrls: ['./menu.button.component.scss'],\n})\nexport class DsvMenuButtonComponent {\n private readonly menuService = inject(MenuService);\n\n doToogleMenu() {\n this.menuService.toogleMenu();\n }\n}\n","<dsv-button\n class=\"dsv-menu-button\"\n icon=\"ri-menu-line\"\n color=\"inherit\"\n (callback)=\"doToogleMenu()\"\n [noHover]=\"true\"\n></dsv-button>\n","import { CommonModule } from '@angular/common';\nimport { Component, effect, ElementRef, HostListener, inject, input } from '@angular/core';\nimport { DsvContainerComponent } from '@ng-vagabond-lab/ng-dsv/ds/container';\nimport { DsvThemeSwitchComponent } from '@ng-vagabond-lab/ng-dsv/ds/theme';\nimport { PlatformService } from '@ng-vagabond-lab/ng-dsv/platform';\nimport { MenuService } from '../public-api';\n\n@Component({\n selector: 'dsv-menu',\n imports: [CommonModule, DsvThemeSwitchComponent, DsvContainerComponent],\n templateUrl: './menu.component.html',\n styleUrls: ['./menu.component.scss'],\n})\nexport class DsvMenuComponent {\n readonly platformService = inject(PlatformService);\n readonly menuService = inject(MenuService);\n readonly elementRef = inject(ElementRef);\n\n showFooter = input<boolean>(true);\n\n constructor() {\n effect(() => {\n if (this.platformService.isPlatformBrowser()) {\n const menu = document.getElementsByTagName('dsv-menu')[0];\n if (this.menuService.isMenuOpen()) {\n menu?.classList?.add('open');\n } else {\n menu?.classList?.remove('open');\n }\n }\n });\n }\n\n @HostListener('document:click', ['$event'])\n onClickOutside(event: Event) {\n if (\n this.platformService.isPlatformBrowser() &&\n this.menuService.isMenuOpen() &&\n !this.elementRef.nativeElement.contains(event.target)\n ) {\n this.menuService.toogleMenu();\n }\n }\n}\n","<dsv-container>\n <ng-content></ng-content>\n</dsv-container>\n@if (showFooter()) {\n <div class=\"footer\">\n <dsv-theme-switch></dsv-theme-switch>\n </div>\n}\n","import { Injectable, signal } from '@angular/core';\nimport { BaseService } from '@ng-vagabond-lab/ng-dsv/base';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class MenuService extends BaseService {\n isMenuOpen = signal<boolean>(false);\n\n toogleMenu() {\n this.isMenuOpen.update((toogle) => !toogle);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;MAWa,sBAAsB,CAAA;AACd,IAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;IAElD,YAAY,GAAA;AACR,QAAA,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE;IACjC;uGALS,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECXnC,2KAOA,EAAA,MAAA,EAAA,CAAA,+FAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDAc,YAAY,+BAAE,kBAAkB,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,MAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAIjC,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBANlC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,EAAA,OAAA,EAClB,CAAC,YAAY,EAAE,kBAAkB,CAAC,EAAA,QAAA,EAAA,2KAAA,EAAA,MAAA,EAAA,CAAA,+FAAA,CAAA,EAAA;;;MEMlC,gBAAgB,CAAA;AAChB,IAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AACzC,IAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACjC,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAExC,IAAA,UAAU,GAAG,KAAK,CAAU,IAAI,iFAAC;AAEjC,IAAA,WAAA,GAAA;QACI,MAAM,CAAC,MAAK;AACR,YAAA,IAAI,IAAI,CAAC,eAAe,CAAC,iBAAiB,EAAE,EAAE;gBAC1C,MAAM,IAAI,GAAG,QAAQ,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AACzD,gBAAA,IAAI,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,EAAE;AAC/B,oBAAA,IAAI,EAAE,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC;gBAChC;qBAAO;AACH,oBAAA,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC;gBACnC;YACJ;AACJ,QAAA,CAAC,CAAC;IACN;AAGA,IAAA,cAAc,CAAC,KAAY,EAAA;AACvB,QAAA,IACI,IAAI,CAAC,eAAe,CAAC,iBAAiB,EAAE;AACxC,YAAA,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE;AAC7B,YAAA,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EACvD;AACE,YAAA,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE;QACjC;IACJ;uGA7BS,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAhB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gBAAgB,4RCb7B,oLAQA,EAAA,MAAA,EAAA,CAAA,0eAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDCc,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,uBAAuB,6DAAE,qBAAqB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAI7D,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAN5B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,UAAU,WACX,CAAC,YAAY,EAAE,uBAAuB,EAAE,qBAAqB,CAAC,EAAA,QAAA,EAAA,oLAAA,EAAA,MAAA,EAAA,CAAA,0eAAA,CAAA,EAAA;;sBAwBtE,YAAY;uBAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC;;;AE3BxC,MAAO,WAAY,SAAQ,WAAW,CAAA;AACxC,IAAA,UAAU,GAAG,MAAM,CAAU,KAAK,iFAAC;IAEnC,UAAU,GAAA;AACN,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC;IAC/C;uGALS,WAAW,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAX,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,cAFR,MAAM,EAAA,CAAA;;2FAET,WAAW,EAAA,UAAA,EAAA,CAAA;kBAHvB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE,MAAM;AACrB,iBAAA;;;ACLD;;AAEG;;;;"}
1
+ {"version":3,"file":"ng-vagabond-lab-ng-dsv-ds-menu.mjs","sources":["../../../projects/ng-dsv/ds/menu/component/button/menu.button.component.ts","../../../projects/ng-dsv/ds/menu/component/button/menu.button.component.html","../../../projects/ng-dsv/ds/menu/component/menu.component.ts","../../../projects/ng-dsv/ds/menu/component/menu.component.html","../../../projects/ng-dsv/ds/menu/service/menu.service.ts","../../../projects/ng-dsv/ds/menu/ng-vagabond-lab-ng-dsv-ds-menu.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport { Component, inject } from '@angular/core';\nimport { DsvButtonComponent } from '@ng-vagabond-lab/ng-dsv/ds/button';\nimport { MenuService } from '../../public-api';\n\n@Component({\n selector: 'dsv-menu-button',\n imports: [CommonModule, DsvButtonComponent],\n templateUrl: './menu.button.component.html',\n styleUrls: ['./menu.button.component.scss'],\n})\nexport class DsvMenuButtonComponent {\n private readonly menuService = inject(MenuService);\n\n doToogleMenu() {\n this.menuService.toogleMenu();\n }\n}\n","<dsv-button\n class=\"dsv-menu-button\"\n icon=\"ri-menu-line\"\n color=\"inherit\"\n (callback)=\"doToogleMenu()\"\n [noHover]=\"true\"\n></dsv-button>\n","import { CommonModule } from '@angular/common';\nimport { Component, effect, ElementRef, HostListener, inject, input } from '@angular/core';\nimport { DsvContainerComponent } from '@ng-vagabond-lab/ng-dsv/ds/container';\nimport { DsvThemeSwitchComponent } from '@ng-vagabond-lab/ng-dsv/ds/theme';\nimport { PlatformService } from '@ng-vagabond-lab/ng-dsv/platform';\nimport { MenuService } from '../public-api';\n\n@Component({\n selector: 'dsv-menu',\n imports: [CommonModule, DsvThemeSwitchComponent, DsvContainerComponent],\n templateUrl: './menu.component.html',\n styleUrls: ['./menu.component.scss'],\n})\nexport class DsvMenuComponent {\n readonly platformService = inject(PlatformService);\n readonly menuService = inject(MenuService);\n readonly elementRef = inject(ElementRef);\n\n showFooter = input<boolean>(true);\n\n constructor() {\n effect(() => {\n if (this.platformService.isPlatformBrowser()) {\n const menu = document.getElementsByTagName('dsv-menu')[0];\n if (this.menuService.isMenuOpen()) {\n menu?.classList?.add('open');\n } else {\n menu?.classList?.remove('open');\n }\n }\n });\n }\n\n @HostListener('document:click', ['$event'])\n onClickOutside(event: Event) {\n if (\n this.platformService.isPlatformBrowser() &&\n this.menuService.isMenuOpen() &&\n !this.elementRef.nativeElement.contains(event.target)\n ) {\n this.menuService.toogleMenu();\n }\n }\n}\n","<dsv-container>\n <ng-content></ng-content>\n</dsv-container>\n@if (showFooter()) {\n <div class=\"footer\">\n <dsv-theme-switch></dsv-theme-switch>\n </div>\n}\n","import { Injectable, signal } from '@angular/core';\nimport { BaseService } from '@ng-vagabond-lab/ng-dsv/base';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class MenuService extends BaseService {\n isMenuOpen = signal<boolean>(false);\n\n toogleMenu() {\n this.isMenuOpen.update((toogle) => !toogle);\n }\n\n closeMenu() {\n this.isMenuOpen.set(false);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -30,7 +30,7 @@ class AuthComponent {
30
30
  this.authGoogleService.loginWithGoogle();
31
31
  }
32
32
  else {
33
- this.callbackInitMember.emit(this.authService.userConnected()?.user?.id);
33
+ this.callbackInitMember.emit(this.authService.userConnected()?.id);
34
34
  }
35
35
  }
36
36
  });
@@ -40,11 +40,11 @@ class AuthComponent {
40
40
  this.callbackLogout.emit();
41
41
  }
42
42
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AuthComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
43
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AuthComponent, isStandalone: true, selector: "dsv-auth", outputs: { callbackInitMember: "callbackInitMember", callbackLogout: "callbackLogout" }, ngImport: i0, template: "<div class=\"auth-button\">\n <button\n id=\"google-signin-button\"\n [class.hidden]=\"authService.userConnected() !== null\"\n ></button>\n</div>\n\n@if (authService.userConnected()) {\n <div class=\"profile\">\n <img\n [src]=\"authService.userConnected()?.user?.avatar\"\n alt=\"profile\"\n />\n <dsv-modal-button\n id=\"logout\"\n icon=\"ri-logout-box-line\"\n />\n </div>\n <dsv-modal-alert\n id=\"logout\"\n title=\"De\u0301connexion\"\n text=\"Voulez-vous vraiment vous de\u0301connecter ?\"\n button=\"Oui\"\n buttonClose=\"Non\"\n (callback)=\"logout()\"\n ></dsv-modal-alert>\n}\n", styles: [".auth-button button{margin:0;padding:0;background:transparent;border:0px}.profile{display:flex;gap:.5rem;flex-flow:nowrap;align-items:center}.profile img{width:30px;height:30px;border-radius:50%}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: ModalButtonComponent, selector: "dsv-modal-button", inputs: ["id", "icon", "variant", "text", "color"], outputs: ["callback"] }, { kind: "component", type: ModalAlertComponent, selector: "dsv-modal-alert", inputs: ["id", "titleText", "text", "button", "buttonClose"], outputs: ["callback"] }] });
43
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AuthComponent, isStandalone: true, selector: "dsv-auth", outputs: { callbackInitMember: "callbackInitMember", callbackLogout: "callbackLogout" }, ngImport: i0, template: "<div class=\"auth-button\">\n <button\n id=\"google-signin-button\"\n [class.hidden]=\"authService.userConnected() !== null\"\n ></button>\n</div>\n\n@if (authService.userConnected()) {\n <div class=\"profile\">\n <img\n [src]=\"authService.userConnected()?.avatar\"\n alt=\"profile\"\n />\n <dsv-modal-button\n id=\"logout\"\n icon=\"ri-logout-box-line\"\n />\n </div>\n <dsv-modal-alert\n id=\"logout\"\n title=\"De\u0301connexion\"\n text=\"Voulez-vous vraiment vous de\u0301connecter ?\"\n button=\"Oui\"\n buttonClose=\"Non\"\n (callback)=\"logout()\"\n ></dsv-modal-alert>\n}\n", styles: [".auth-button button{margin:0;padding:0;background:transparent;border:0px}.profile{display:flex;gap:.5rem;flex-flow:nowrap;align-items:center}.profile img{width:30px;height:30px;border-radius:50%}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: ModalButtonComponent, selector: "dsv-modal-button", inputs: ["id", "icon", "variant", "text", "color"], outputs: ["callback"] }, { kind: "component", type: ModalAlertComponent, selector: "dsv-modal-alert", inputs: ["id", "titleText", "text", "button", "buttonClose"], outputs: ["callback"] }] });
44
44
  }
45
45
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AuthComponent, decorators: [{
46
46
  type: Component,
47
- args: [{ selector: 'dsv-auth', imports: [CommonModule, ModalButtonComponent, ModalAlertComponent], template: "<div class=\"auth-button\">\n <button\n id=\"google-signin-button\"\n [class.hidden]=\"authService.userConnected() !== null\"\n ></button>\n</div>\n\n@if (authService.userConnected()) {\n <div class=\"profile\">\n <img\n [src]=\"authService.userConnected()?.user?.avatar\"\n alt=\"profile\"\n />\n <dsv-modal-button\n id=\"logout\"\n icon=\"ri-logout-box-line\"\n />\n </div>\n <dsv-modal-alert\n id=\"logout\"\n title=\"De\u0301connexion\"\n text=\"Voulez-vous vraiment vous de\u0301connecter ?\"\n button=\"Oui\"\n buttonClose=\"Non\"\n (callback)=\"logout()\"\n ></dsv-modal-alert>\n}\n", styles: [".auth-button button{margin:0;padding:0;background:transparent;border:0px}.profile{display:flex;gap:.5rem;flex-flow:nowrap;align-items:center}.profile img{width:30px;height:30px;border-radius:50%}\n"] }]
47
+ args: [{ selector: 'dsv-auth', imports: [CommonModule, ModalButtonComponent, ModalAlertComponent], template: "<div class=\"auth-button\">\n <button\n id=\"google-signin-button\"\n [class.hidden]=\"authService.userConnected() !== null\"\n ></button>\n</div>\n\n@if (authService.userConnected()) {\n <div class=\"profile\">\n <img\n [src]=\"authService.userConnected()?.avatar\"\n alt=\"profile\"\n />\n <dsv-modal-button\n id=\"logout\"\n icon=\"ri-logout-box-line\"\n />\n </div>\n <dsv-modal-alert\n id=\"logout\"\n title=\"De\u0301connexion\"\n text=\"Voulez-vous vraiment vous de\u0301connecter ?\"\n button=\"Oui\"\n buttonClose=\"Non\"\n (callback)=\"logout()\"\n ></dsv-modal-alert>\n}\n", styles: [".auth-button button{margin:0;padding:0;background:transparent;border:0px}.profile{display:flex;gap:.5rem;flex-flow:nowrap;align-items:center}.profile img{width:30px;height:30px;border-radius:50%}\n"] }]
48
48
  }], ctorParameters: () => [], propDecorators: { callbackInitMember: [{ type: i0.Output, args: ["callbackInitMember"] }], callbackLogout: [{ type: i0.Output, args: ["callbackLogout"] }] } });
49
49
 
50
50
  const authGuard = (route) => {
@@ -59,7 +59,7 @@ const authGuard = (route) => {
59
59
  console.warn('No role specified in route data.');
60
60
  return false;
61
61
  }
62
- const profiles = authService.userConnected()?.user?.profiles;
62
+ const profiles = authService.userConnected()?.profiles;
63
63
  if (hasRole(requiredRole, profiles)) {
64
64
  return true;
65
65
  }
@@ -115,8 +115,8 @@ class AuthService {
115
115
  userConnected = signal(null, ...(ngDevMode ? [{ debugName: "userConnected" }] : /* istanbul ignore next */ []));
116
116
  userToken = signal('', ...(ngDevMode ? [{ debugName: "userToken" }] : /* istanbul ignore next */ []));
117
117
  initUser(user = null) {
118
- this.userConnected.set(user);
119
- this.userToken.set(user?.['jwt'] ?? '');
118
+ this.userConnected.set(user?.user ?? null);
119
+ this.userToken.set(user?.jwt ?? '');
120
120
  }
121
121
  googleLogin(credential) {
122
122
  this.apiService.post('auth/google-identity-connect', {
@@ -1 +1 @@
1
- {"version":3,"file":"ng-vagabond-lab-ng-dsv-modules-auth.mjs","sources":["../../../projects/ng-dsv/modules/auth/component/auth.component.ts","../../../projects/ng-dsv/modules/auth/component/auth.component.html","../../../projects/ng-dsv/modules/auth/guard/auth.guard.ts","../../../projects/ng-dsv/modules/auth/interceptor/auth.interceptor.ts","../../../projects/ng-dsv/modules/auth/service/auth.service.ts","../../../projects/ng-dsv/modules/auth/service/auth.google.service.ts","../../../projects/ng-dsv/modules/auth/utils/auth.utils.ts","../../../projects/ng-dsv/modules/auth/ng-vagabond-lab-ng-dsv-modules-auth.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport { Component, effect, inject, output, signal } from '@angular/core';\nimport { ID } from '@ng-vagabond-lab/ng-dsv/api';\nimport { ModalAlertComponent, ModalButtonComponent } from '@ng-vagabond-lab/ng-dsv/ds/modal';\nimport { AuthGoogleService, AuthService } from '../public-api';\n\n@Component({\n selector: 'dsv-auth',\n imports: [CommonModule, ModalButtonComponent, ModalAlertComponent],\n templateUrl: './auth.component.html',\n styleUrls: ['./auth.component.scss'],\n})\nexport class AuthComponent {\n readonly authService = inject(AuthService);\n readonly authGoogleService = inject(AuthGoogleService);\n\n callbackInitMember = output<ID>();\n callbackLogout = output<void>();\n\n initAuth = signal<boolean>(false);\n\n constructor() {\n effect(() => {\n if (this.authService.apiService.isPlatformBrowser() && !this.initAuth()) {\n this.authGoogleService.initGoogleAuth();\n this.authService.refreshToken();\n this.initAuth.set(true);\n }\n });\n effect(() => {\n if (this.authService.apiService.isPlatformBrowser()) {\n if (this.authService.userConnected() === null) {\n this.authGoogleService.loginWithGoogle();\n } else {\n this.callbackInitMember.emit(this.authService.userConnected()?.user?.id);\n }\n }\n });\n }\n\n logout() {\n this.authService.logout();\n this.callbackLogout.emit();\n }\n}\n","<div class=\"auth-button\">\n <button\n id=\"google-signin-button\"\n [class.hidden]=\"authService.userConnected() !== null\"\n ></button>\n</div>\n\n@if (authService.userConnected()) {\n <div class=\"profile\">\n <img\n [src]=\"authService.userConnected()?.user?.avatar\"\n alt=\"profile\"\n />\n <dsv-modal-button\n id=\"logout\"\n icon=\"ri-logout-box-line\"\n />\n </div>\n <dsv-modal-alert\n id=\"logout\"\n title=\"Déconnexion\"\n text=\"Voulez-vous vraiment vous déconnecter ?\"\n button=\"Oui\"\n buttonClose=\"Non\"\n (callback)=\"logout()\"\n ></dsv-modal-alert>\n}\n","import { inject } from '@angular/core';\nimport { ActivatedRouteSnapshot, CanActivateFn, Router } from '@angular/router';\nimport { PlatformService } from '@ng-vagabond-lab/ng-dsv/platform';\nimport { AuthService, hasRole } from '../public-api';\n\nexport const authGuard: CanActivateFn = (route: ActivatedRouteSnapshot) => {\n const platformService = inject(PlatformService);\n\n if (!platformService.isPlatformBrowser()) {\n return true;\n }\n\n const authService = inject(AuthService);\n const router = inject(Router);\n\n const requiredRole = route.data['role'];\n\n if (!requiredRole) {\n console.warn('No role specified in route data.');\n return false;\n }\n\n const profiles = authService.userConnected()?.user?.profiles;\n if (hasRole(requiredRole, profiles)) {\n return true;\n }\n\n router.navigate(['/']);\n return false;\n};\n","import { HttpClient, HttpErrorResponse, HttpHandlerFn, HttpRequest } from '@angular/common/http';\nimport { inject } from '@angular/core';\nimport { ToastService } from '@ng-vagabond-lab/ng-dsv/ds/toast';\nimport { catchError, switchMap, throwError } from 'rxjs';\nimport { AuthService } from '../public-api';\n\nexport const authInterceptor = (req: HttpRequest<unknown>, next: HttpHandlerFn) => {\n const httpClient = inject(HttpClient);\n const authService = inject(AuthService);\n const toastService = inject(ToastService);\n\n return next(getToken(req, authService)).pipe(\n catchError((error) => {\n if (\n error instanceof HttpErrorResponse &&\n !req.url.includes('auth/') &&\n req.url.includes(authService.apiService.baseUrl) &&\n error.status === 401\n ) {\n return handle401Error(httpClient, authService, req, next);\n }\n\n const errorMessage = error.error.debugMessage ?? error.error.message ?? error.message;\n\n if (errorMessage === 'NO_REFRESH_TOKEN') {\n authService.logout(false);\n } else {\n toastService.showToast({\n type: 'error',\n text: errorMessage,\n });\n }\n\n return throwError(() => error);\n }),\n );\n};\n\nconst getToken = <T>(req: HttpRequest<T>, authService: AuthService) => {\n const jwt = authService.userToken();\n if (!req.url.includes('/auth/') && req.url.includes(authService.apiService.baseUrl) && jwt) {\n const headers = req.headers.set('Authorization', `Bearer ${jwt}`);\n\n return req.clone({\n headers,\n });\n }\n return req;\n};\n\nconst handle401Error = <T>(\n httpClient: HttpClient,\n authService: AuthService,\n request: HttpRequest<T>,\n next: HttpHandlerFn,\n) => {\n return httpClient\n .post(authService.apiService.baseUrl + '/auth/refresh-token', {}, { withCredentials: true })\n .pipe(\n switchMap((response) => {\n authService.initUser(response);\n return next(getToken(request, authService));\n }),\n );\n};\n","import { inject, Injectable, signal } from '@angular/core';\nimport { ApiService, JSONObject } from '@ng-vagabond-lab/ng-dsv/api';\nimport { UserConnectedDto } from '../dto/user.dto';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AuthService {\n readonly apiService = inject(ApiService);\n\n userConnected = signal<UserConnectedDto | null>(null);\n userToken = signal<string>('');\n\n initUser(user: UserConnectedDto | null = null) {\n this.userConnected.set(user);\n this.userToken.set(user?.['jwt' as keyof JSONObject] ?? '');\n }\n\n googleLogin(credential: string) {\n this.apiService.post<UserConnectedDto>(\n 'auth/google-identity-connect',\n {\n googleToken: credential,\n },\n (data) => {\n this.initUser(data);\n this.apiService.toastService.showToast({\n type: 'success',\n text: 'Connexion réussie',\n });\n },\n true,\n );\n }\n\n refreshToken() {\n this.apiService.post<UserConnectedDto>('auth/refresh-token', {}, (data) => this.initUser(data), true);\n }\n\n logout(showToast: boolean = true) {\n this.apiService.post<UserConnectedDto>(\n 'auth/logout',\n {},\n () => {\n this.initUser();\n if (showToast) {\n this.apiService.toastService.showToast({\n type: 'success',\n text: 'Déconnexion réussie',\n });\n }\n },\n true,\n );\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { EnvironmentService } from '@ng-vagabond-lab/ng-dsv/environment';\nimport { AuthService } from './auth.service';\n\ndeclare const google: any;\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AuthGoogleService {\n private readonly authService = inject(AuthService);\n private readonly environmentService = inject(EnvironmentService);\n\n initGoogleAuth(googleButtonid: string = 'google-signin-button') {\n google.accounts.id.initialize({\n client_id: this.environmentService.env()?.GOOGLE_CLIENT_ID,\n callback: this.handleCredentialResponse.bind(this),\n });\n google.accounts.id.renderButton(document.getElementById(googleButtonid)!, {\n theme: 'outline',\n size: 'medium',\n type: 'icon',\n });\n }\n\n handleCredentialResponse(response: { credential: string }) {\n this.authService.googleLogin(response.credential);\n }\n\n loginWithGoogle() {\n google.accounts.id.prompt();\n }\n}\n","import { ApiDto } from '@ng-vagabond-lab/ng-dsv/api';\n\nexport const hasRole = (roles: string, userRoles?: ApiDto[]) => {\n const roleSplit = roles.split(',');\n let find = false;\n roleSplit.forEach((role) => {\n if (\n userRoles?.find(\n (userRole) =>\n userRole['roles' as keyof ApiDto]?.toString().includes(role) ||\n userRole['name' as keyof ApiDto] === role,\n )\n ) {\n find = true;\n }\n });\n return find;\n};\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ng-vagabond-lab-ng-dsv-modules-auth.mjs","sources":["../../../projects/ng-dsv/modules/auth/component/auth.component.ts","../../../projects/ng-dsv/modules/auth/component/auth.component.html","../../../projects/ng-dsv/modules/auth/guard/auth.guard.ts","../../../projects/ng-dsv/modules/auth/interceptor/auth.interceptor.ts","../../../projects/ng-dsv/modules/auth/service/auth.service.ts","../../../projects/ng-dsv/modules/auth/service/auth.google.service.ts","../../../projects/ng-dsv/modules/auth/utils/auth.utils.ts","../../../projects/ng-dsv/modules/auth/ng-vagabond-lab-ng-dsv-modules-auth.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport { Component, effect, inject, output, signal } from '@angular/core';\nimport { ID } from '@ng-vagabond-lab/ng-dsv/api';\nimport { ModalAlertComponent, ModalButtonComponent } from '@ng-vagabond-lab/ng-dsv/ds/modal';\nimport { AuthGoogleService, AuthService } from '../public-api';\n\n@Component({\n selector: 'dsv-auth',\n imports: [CommonModule, ModalButtonComponent, ModalAlertComponent],\n templateUrl: './auth.component.html',\n styleUrls: ['./auth.component.scss'],\n})\nexport class AuthComponent {\n readonly authService = inject(AuthService);\n readonly authGoogleService = inject(AuthGoogleService);\n\n callbackInitMember = output<ID>();\n callbackLogout = output<void>();\n\n initAuth = signal<boolean>(false);\n\n constructor() {\n effect(() => {\n if (this.authService.apiService.isPlatformBrowser() && !this.initAuth()) {\n this.authGoogleService.initGoogleAuth();\n this.authService.refreshToken();\n this.initAuth.set(true);\n }\n });\n effect(() => {\n if (this.authService.apiService.isPlatformBrowser()) {\n if (this.authService.userConnected() === null) {\n this.authGoogleService.loginWithGoogle();\n } else {\n this.callbackInitMember.emit(this.authService.userConnected()?.id);\n }\n }\n });\n }\n\n logout() {\n this.authService.logout();\n this.callbackLogout.emit();\n }\n}\n","<div class=\"auth-button\">\n <button\n id=\"google-signin-button\"\n [class.hidden]=\"authService.userConnected() !== null\"\n ></button>\n</div>\n\n@if (authService.userConnected()) {\n <div class=\"profile\">\n <img\n [src]=\"authService.userConnected()?.avatar\"\n alt=\"profile\"\n />\n <dsv-modal-button\n id=\"logout\"\n icon=\"ri-logout-box-line\"\n />\n </div>\n <dsv-modal-alert\n id=\"logout\"\n title=\"Déconnexion\"\n text=\"Voulez-vous vraiment vous déconnecter ?\"\n button=\"Oui\"\n buttonClose=\"Non\"\n (callback)=\"logout()\"\n ></dsv-modal-alert>\n}\n","import { inject } from '@angular/core';\nimport { ActivatedRouteSnapshot, CanActivateFn, Router } from '@angular/router';\nimport { PlatformService } from '@ng-vagabond-lab/ng-dsv/platform';\nimport { AuthService, hasRole } from '../public-api';\n\nexport const authGuard: CanActivateFn = (route: ActivatedRouteSnapshot) => {\n const platformService = inject(PlatformService);\n\n if (!platformService.isPlatformBrowser()) {\n return true;\n }\n\n const authService = inject(AuthService);\n const router = inject(Router);\n\n const requiredRole = route.data['role'];\n\n if (!requiredRole) {\n console.warn('No role specified in route data.');\n return false;\n }\n\n const profiles = authService.userConnected()?.profiles;\n if (hasRole(requiredRole, profiles)) {\n return true;\n }\n\n router.navigate(['/']);\n return false;\n};\n","import { HttpClient, HttpErrorResponse, HttpHandlerFn, HttpRequest } from '@angular/common/http';\nimport { inject } from '@angular/core';\nimport { ToastService } from '@ng-vagabond-lab/ng-dsv/ds/toast';\nimport { catchError, switchMap, throwError } from 'rxjs';\nimport { AuthService } from '../public-api';\n\nexport const authInterceptor = (req: HttpRequest<unknown>, next: HttpHandlerFn) => {\n const httpClient = inject(HttpClient);\n const authService = inject(AuthService);\n const toastService = inject(ToastService);\n\n return next(getToken(req, authService)).pipe(\n catchError((error) => {\n if (\n error instanceof HttpErrorResponse &&\n !req.url.includes('auth/') &&\n req.url.includes(authService.apiService.baseUrl) &&\n error.status === 401\n ) {\n return handle401Error(httpClient, authService, req, next);\n }\n\n const errorMessage = error.error.debugMessage ?? error.error.message ?? error.message;\n\n if (errorMessage === 'NO_REFRESH_TOKEN') {\n authService.logout(false);\n } else {\n toastService.showToast({\n type: 'error',\n text: errorMessage,\n });\n }\n\n return throwError(() => error);\n }),\n );\n};\n\nconst getToken = <T>(req: HttpRequest<T>, authService: AuthService) => {\n const jwt = authService.userToken();\n if (!req.url.includes('/auth/') && req.url.includes(authService.apiService.baseUrl) && jwt) {\n const headers = req.headers.set('Authorization', `Bearer ${jwt}`);\n\n return req.clone({\n headers,\n });\n }\n return req;\n};\n\nconst handle401Error = <T>(\n httpClient: HttpClient,\n authService: AuthService,\n request: HttpRequest<T>,\n next: HttpHandlerFn,\n) => {\n return httpClient\n .post(authService.apiService.baseUrl + '/auth/refresh-token', {}, { withCredentials: true })\n .pipe(\n switchMap((response) => {\n authService.initUser(response);\n return next(getToken(request, authService));\n }),\n );\n};\n","import { inject, Injectable, signal } from '@angular/core';\nimport { ApiService, JSONValue } from '@ng-vagabond-lab/ng-dsv/api';\nimport { UserDto, UserSigninDto } from '../dto/user.dto';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AuthService {\n readonly apiService = inject(ApiService);\n\n userConnected = signal<UserDto | null>(null);\n userToken = signal<string>('');\n\n initUser(user: UserSigninDto | null = null) {\n this.userConnected.set(user?.user ?? null);\n this.userToken.set(user?.jwt ?? '');\n }\n\n googleLogin(credential: string) {\n this.apiService.post<JSONValue, UserSigninDto>(\n 'auth/google-identity-connect',\n {\n googleToken: credential,\n },\n (data) => {\n this.initUser(data);\n this.apiService.toastService.showToast({\n type: 'success',\n text: 'Connexion réussie',\n });\n },\n true,\n );\n }\n\n refreshToken() {\n this.apiService.post<UserSigninDto>('auth/refresh-token', {}, (data) => this.initUser(data), true);\n }\n\n logout(showToast: boolean = true) {\n this.apiService.post<UserSigninDto>(\n 'auth/logout',\n {},\n () => {\n this.initUser();\n if (showToast) {\n this.apiService.toastService.showToast({\n type: 'success',\n text: 'Déconnexion réussie',\n });\n }\n },\n true,\n );\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { EnvironmentService } from '@ng-vagabond-lab/ng-dsv/environment';\nimport { AuthService } from './auth.service';\n\ndeclare const google: any;\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AuthGoogleService {\n private readonly authService = inject(AuthService);\n private readonly environmentService = inject(EnvironmentService);\n\n initGoogleAuth(googleButtonid: string = 'google-signin-button') {\n google.accounts.id.initialize({\n client_id: this.environmentService.env()?.GOOGLE_CLIENT_ID,\n callback: this.handleCredentialResponse.bind(this),\n });\n google.accounts.id.renderButton(document.getElementById(googleButtonid)!, {\n theme: 'outline',\n size: 'medium',\n type: 'icon',\n });\n }\n\n handleCredentialResponse(response: { credential: string }) {\n this.authService.googleLogin(response.credential);\n }\n\n loginWithGoogle() {\n google.accounts.id.prompt();\n }\n}\n","import { ApiDto } from '@ng-vagabond-lab/ng-dsv/api';\n\nexport const hasRole = (roles: string, userRoles?: ApiDto[]) => {\n const roleSplit = roles.split(',');\n let find = false;\n roleSplit.forEach((role) => {\n if (\n userRoles?.find(\n (userRole) =>\n userRole['roles' as keyof ApiDto]?.toString().includes(role) ||\n userRole['name' as keyof ApiDto] === role,\n )\n ) {\n find = true;\n }\n });\n return find;\n};\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ng-vagabond-lab/ng-dsv",
3
- "version": "0.1.95",
3
+ "version": "0.1.98",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^20.0.0",
6
6
  "@angular/core": "^20.0.0"
@@ -29,7 +29,7 @@ interface ApiDto {
29
29
  deletedDate?: string;
30
30
  active?: boolean;
31
31
  }
32
- interface BaseUserConnectedDto {
32
+ interface BaseUserTokenDto {
33
33
  jwt?: string;
34
34
  }
35
35
  interface OrderState {
@@ -121,4 +121,4 @@ declare abstract class BaseSearchService<T> {
121
121
  }
122
122
 
123
123
  export { ApiResourceService, ApiService, BaseSearchService };
124
- export type { ApiDto, ApiFindBy, BaseUserConnectedDto, ID, JSON, JSONObject, JSONValue, OrderState, PageableDto, Primitif, Target };
124
+ export type { ApiDto, ApiFindBy, BaseUserTokenDto, ID, JSON, JSONObject, JSONValue, OrderState, PageableDto, Primitif, Target };
@@ -1,11 +1,11 @@
1
1
  import * as _angular_core from '@angular/core';
2
2
  import { TransferState, OutputEmitterRef } from '@angular/core';
3
+ import * as _angular_router from '@angular/router';
4
+ import { Router, ActivatedRoute } from '@angular/router';
3
5
  import { ApiService } from '@ng-vagabond-lab/ng-dsv/api';
4
6
  import { EnvironmentService } from '@ng-vagabond-lab/ng-dsv/environment';
5
7
  import { PlatformService } from '@ng-vagabond-lab/ng-dsv/platform';
6
8
  import { StorageService } from '@ng-vagabond-lab/ng-dsv/storage';
7
- import * as _angular_router from '@angular/router';
8
- import { ActivatedRoute } from '@angular/router';
9
9
  import { Subscription } from 'rxjs';
10
10
  import { Title, Meta } from '@angular/platform-browser';
11
11
 
@@ -15,6 +15,8 @@ declare abstract class BaseAppComponent {
15
15
  readonly environmentService: EnvironmentService;
16
16
  readonly apiService: ApiService;
17
17
  readonly scrollService: ScrollService;
18
+ readonly router: Router;
19
+ currentUrl: _angular_core.Signal<string>;
18
20
  scroll: _angular_core.WritableSignal<number>;
19
21
  load: _angular_core.WritableSignal<boolean>;
20
22
  constructor();
@@ -24,6 +24,7 @@ declare class DsvMenuComponent {
24
24
  declare class MenuService extends BaseService {
25
25
  isMenuOpen: i0.WritableSignal<boolean>;
26
26
  toogleMenu(): void;
27
+ closeMenu(): void;
27
28
  static ɵfac: i0.ɵɵFactoryDeclaration<MenuService, never>;
28
29
  static ɵprov: i0.ɵɵInjectableDeclaration<MenuService>;
29
30
  }
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { ID, BaseUserConnectedDto, ApiDto, ApiService } from '@ng-vagabond-lab/ng-dsv/api';
2
+ import { ID, ApiDto, BaseUserTokenDto, ApiService } from '@ng-vagabond-lab/ng-dsv/api';
3
3
  import { CanActivateFn } from '@angular/router';
4
4
  import * as rxjs from 'rxjs';
5
5
  import * as _angular_common_http from '@angular/common/http';
@@ -25,9 +25,7 @@ interface UserDto extends ApiDto {
25
25
  username?: string;
26
26
  profiles?: [];
27
27
  }
28
- interface UserConnectedDto extends BaseUserConnectedDto {
29
- googleToken?: string;
30
- jwt?: string;
28
+ interface UserSigninDto extends BaseUserTokenDto {
31
29
  user?: UserDto;
32
30
  }
33
31
  interface GoogleRequest {
@@ -52,9 +50,9 @@ declare class AuthGoogleService {
52
50
 
53
51
  declare class AuthService {
54
52
  readonly apiService: ApiService;
55
- userConnected: i0.WritableSignal<UserConnectedDto | null>;
53
+ userConnected: i0.WritableSignal<UserDto | null>;
56
54
  userToken: i0.WritableSignal<string>;
57
- initUser(user?: UserConnectedDto | null): void;
55
+ initUser(user?: UserSigninDto | null): void;
58
56
  googleLogin(credential: string): void;
59
57
  refreshToken(): void;
60
58
  logout(showToast?: boolean): void;
@@ -65,4 +63,4 @@ declare class AuthService {
65
63
  declare const hasRole: (roles: string, userRoles?: ApiDto[]) => boolean;
66
64
 
67
65
  export { AuthComponent, AuthGoogleService, AuthService, authGuard, authInterceptor, hasRole };
68
- export type { GoogleRequest, UserConnectedDto, UserDto };
66
+ export type { GoogleRequest, UserDto, UserSigninDto };