@ng-vagabond-lab/ng-dsv 0.2.53 → 0.2.54

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.
@@ -13,9 +13,10 @@ body {
13
13
  }
14
14
 
15
15
  app-root {
16
- height: 100%;
17
16
  display: flex;
18
17
  flex-direction: column;
18
+ height: 100vh;
19
+ height: var(--app-height, 100dvh);
19
20
 
20
21
  dsv-theme {
21
22
  scrollbar-color: var(--scrollbar);
package/assets/style.scss CHANGED
@@ -154,7 +154,7 @@ dsv-tooltip>*:not(.dsv-tooltip) {
154
154
 
155
155
  p,
156
156
  li {
157
- text-align: justify;
157
+ text-align: left;
158
158
  padding: 5px 0;
159
159
  }
160
160
 
@@ -117,6 +117,7 @@ class BaseMainContainer {
117
117
  analyticsService = inject(AnalyticsService);
118
118
  initRefreshToken = signal(false, /* @ts-ignore */
119
119
  ...(ngDevMode ? [{ debugName: "initRefreshToken" }] : /* istanbul ignore next */ []));
120
+ resizeListener;
120
121
  constructor() {
121
122
  this.analyticsService.init(this.environmentService.config()?.ANALYTICS_ID);
122
123
  effect(() => {
@@ -125,6 +126,21 @@ class BaseMainContainer {
125
126
  this.authService.refreshToken();
126
127
  }
127
128
  });
129
+ effect(() => {
130
+ if (this.environmentService.platformService.isPlatformBrowser() && window.visualViewport) {
131
+ this.resizeListener = () => {
132
+ const vh = window.visualViewport?.height;
133
+ document.documentElement.style.setProperty('--app-height', `${vh}px`);
134
+ };
135
+ window.visualViewport.addEventListener('resize', this.resizeListener);
136
+ this.resizeListener();
137
+ }
138
+ });
139
+ }
140
+ ngOnDestroy() {
141
+ if (this.resizeListener && window.visualViewport) {
142
+ window.visualViewport.removeEventListener('resize', this.resizeListener);
143
+ }
128
144
  }
129
145
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: BaseMainContainer, deps: [], target: i0.ɵɵFactoryTarget.Directive });
130
146
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.6", type: BaseMainContainer, isStandalone: true, ngImport: i0 });
@@ -1 +1 @@
1
- {"version":3,"file":"ng-vagabond-lab-ng-dsv-base.mjs","sources":["../../../projects/ng-dsv/base/service/base/base.service.ts","../../../projects/ng-dsv/base/service/base/base-api.service.ts","../../../projects/ng-dsv/base/service/seo/seo.service.ts","../../../projects/ng-dsv/base/container/base.container.ts","../../../projects/ng-dsv/base/service/analytics/analytics.service.ts","../../../projects/ng-dsv/base/container/main/base-main.container.ts","../../../projects/ng-dsv/base/container/route/base-route.container.ts","../../../projects/ng-dsv/base/container/search/base-search.container.ts","../../../projects/ng-dsv/base/utils/base.utils.ts","../../../projects/ng-dsv/base/ng-vagabond-lab-ng-dsv-base.ts"],"sourcesContent":["import { Directive, inject, signal, TransferState } from '@angular/core';\nimport { ToastService } from '@ng-vagabond-lab/ng-dsv/ds/toast';\nimport { I18nService } from '@ng-vagabond-lab/ng-dsv/i18n';\nimport { PlatformService } from '@ng-vagabond-lab/ng-dsv/platform';\n\n@Directive()\nexport abstract class BaseService {\n readonly toastService = inject(ToastService);\n readonly transferState = inject(TransferState);\n readonly platformService = inject(PlatformService);\n readonly i18nService = inject(I18nService);\n readonly translateService = this.i18nService.translateService;\n\n readonly loaded = signal<boolean>(true);\n\n isPlatformBrowser(): boolean {\n return this.platformService.isPlatformBrowser();\n }\n}\n","import { Directive, inject } from '@angular/core';\nimport { ApiService } from '@ng-vagabond-lab/ng-dsv/api';\nimport { BaseService } from './base.service';\n\n@Directive()\nexport abstract class BaseApiService extends BaseService {\n readonly apiService = inject(ApiService);\n}\n","import { inject, Injectable, makeStateKey } from '@angular/core';\nimport { Meta, Title } from '@angular/platform-browser';\nimport { EnvironmentService } from '@ng-vagabond-lab/ng-dsv/environment';\nimport { BaseApiService } from '../base/base-api.service';\n\n@Injectable({ providedIn: 'root' })\nexport class SeoService extends BaseApiService {\n readonly environmentService = inject(EnvironmentService);\n readonly title = inject(Title);\n readonly meta = inject(Meta);\n\n setMeta(title: string, description: string, image?: string): void {\n const newTitle = this.environmentService.config()?.APP_NAME + ' - ' + 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 { computed, Directive, effect, inject, signal } from '@angular/core';\nimport { AuthService } from '@ng-vagabond-lab/ng-dsv/module/auth';\nimport { RouterService } from '@ng-vagabond-lab/ng-dsv/router';\nimport { SeoService } from '../service/seo/seo.service';\n\n@Directive()\nexport abstract class BaseContainer {\n readonly authService = inject(AuthService);\n readonly seoService = inject(SeoService);\n readonly routerService = inject(RouterService);\n\n protected requiredRole = signal<string>('');\n\n readonly hasAccess = computed<boolean>(() => {\n const role = this.requiredRole();\n return !role || this.authService.hasRole(role);\n });\n\n constructor() {\n effect(() => {\n if (!this.hasAccess()) {\n this.routerService.router.navigate(['/']);\n }\n });\n }\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport { inject, PLATFORM_ID, Service } from '@angular/core';\n\n@Service()\nexport class AnalyticsService {\n readonly platformId = inject(PLATFORM_ID);\n\n init(analyticsId?: string): void {\n if (!isPlatformBrowser(this.platformId) || !analyticsId) {\n return;\n }\n\n const script = document.createElement('script');\n script.async = true;\n script.src = `https://www.googletagmanager.com/gtag/js?id=${analyticsId}`;\n document.head.appendChild(script);\n\n const inlineScript = document.createElement('script');\n inlineScript.innerHTML = `\n window.dataLayer = window.dataLayer || [];\n function gtag(){ dataLayer.push(arguments); }\n gtag('js', new Date());\n gtag('config', '${analyticsId}');\n `;\n document.head.appendChild(inlineScript);\n }\n}\n","import { Directive, effect, inject, signal } from '@angular/core';\nimport { EnvironmentService } from '@ng-vagabond-lab/ng-dsv/environment';\nimport { AuthService } from '@ng-vagabond-lab/ng-dsv/module/auth';\nimport { RouterService } from '@ng-vagabond-lab/ng-dsv/router';\nimport { AnalyticsService } from '../../service/analytics/analytics.service';\n\n@Directive()\nexport abstract class BaseMainContainer {\n readonly authService = inject(AuthService);\n readonly routerService = inject(RouterService);\n readonly environmentService = inject(EnvironmentService);\n readonly analyticsService = inject(AnalyticsService);\n\n readonly initRefreshToken = signal<boolean>(false);\n\n constructor() {\n this.analyticsService.init(this.environmentService.config()?.ANALYTICS_ID);\n effect(() => {\n if (this.authService.isPlatformBrowser() && !this.initRefreshToken()) {\n this.initRefreshToken.set(true);\n this.authService.refreshToken();\n }\n });\n }\n}\n","import { Directive, inject } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { ActivatedRoute } from '@angular/router';\nimport { BaseContainer } from '../base.container';\n\n@Directive()\nexport abstract class BaseRouteContainer extends BaseContainer {\n readonly activatedRoute = inject<ActivatedRoute>(ActivatedRoute);\n\n readonly routeParams = toSignal(this.activatedRoute.params);\n}\n","import { Directive, effect, ElementRef, inject } from '@angular/core';\nimport { ApiDto } from '@ng-vagabond-lab/ng-dsv/api';\nimport { SCROLL_CLASS, scrollToTop } from '@ng-vagabond-lab/ng-dsv/ds/scroll';\nimport { BaseSearchService } from '../../service';\nimport { BaseContainer } from '../base.container';\n\n@Directive()\nexport abstract class BaseSearchContainer<\n T extends BaseSearchService<U>,\n U extends ApiDto,\n> extends BaseContainer {\n readonly element = inject(ElementRef);\n\n readonly service: T | undefined = undefined;\n\n constructor(searchService: T) {\n super();\n this.service = searchService;\n this.service.isLoading.set(true);\n effect(() => {\n if (\n this.service?.datas().length === 0 &&\n this.service.search() === '' &&\n !this.service.stopFetch() &&\n this.authService.canFetch(this.service.ssr())\n ) {\n this.doFetch();\n }\n });\n effect(() => {\n if (this.service?.datas()?.length! > 0) {\n this.service?.isLoading.set(false);\n }\n });\n }\n\n doFetch(search: string | undefined = this.service?.search()): void {\n this.service?.fetchByPage(search as string, this.service?.page());\n }\n\n doSearch(search: string): void {\n this.service?.page.set(1);\n scrollToTop(this.element, SCROLL_CLASS);\n this.doFetch(search);\n }\n}\n","import { OutputEmitterRef } from '@angular/core';\n\nexport const isCallback = <T>(callback: OutputEmitterRef<T>): boolean => {\n const listeners = callback['listeners' as keyof OutputEmitterRef<T>];\n return listeners?.length > 0;\n};\n\nexport const generateArray = (length: number = 20): number[] => Array.from({ length }, (_, i) => i);\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;MAMsB,WAAW,CAAA;AACpB,IAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACnC,IAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AACrC,IAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AACzC,IAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACjC,IAAA,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,gBAAgB;IAEpD,MAAM,GAAG,MAAM,CAAU,IAAI;+EAAC;IAEvC,iBAAiB,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,iBAAiB,EAAE;IACnD;uGAXkB,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAX,WAAW,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAX,WAAW,EAAA,UAAA,EAAA,CAAA;kBADhC;;;ACAK,MAAgB,cAAe,SAAQ,WAAW,CAAA;AAC3C,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;uGADtB,cAAc,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAd,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBADnC;;;ACEK,MAAO,UAAW,SAAQ,cAAc,CAAA;AACjC,IAAA,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAC/C,IAAA,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;AACrB,IAAA,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;AAE5B,IAAA,OAAO,CAAC,KAAa,EAAE,WAAmB,EAAE,KAAc,EAAA;AACtD,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,EAAE,QAAQ,GAAG,KAAK,GAAG,KAAK;AAC3E,QAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC;AAC7B,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,CAAS,OAAO,CAAC,EAAE,QAAQ,CAAC;AAC/D,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;AAClE,QAAA,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC1E;uGAXS,UAAU,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAV,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAU,cADG,MAAM,EAAA,CAAA;;2FACnB,UAAU,EAAA,UAAA,EAAA,CAAA;kBADtB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCCZ,aAAa,CAAA;AACtB,IAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACjC,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,IAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;IAEpC,YAAY,GAAG,MAAM,CAAS,EAAE;qFAAC;AAElC,IAAA,SAAS,GAAG,QAAQ,CAAU,MAAK;AACxC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE;QAChC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;IAClD,CAAC;kFAAC;AAEF,IAAA,WAAA,GAAA;QACI,MAAM,CAAC,MAAK;AACR,YAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE;gBACnB,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC;YAC7C;AACJ,QAAA,CAAC,CAAC;IACN;uGAlBkB,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAb,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBADlC;;;MCDY,gBAAgB,CAAA;AAChB,IAAA,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC;AAEzC,IAAA,IAAI,CAAC,WAAoB,EAAA;QACrB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE;YACrD;QACJ;QAEA,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;AAC/C,QAAA,MAAM,CAAC,KAAK,GAAG,IAAI;AACnB,QAAA,MAAM,CAAC,GAAG,GAAG,CAAA,4CAAA,EAA+C,WAAW,EAAE;AACzE,QAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;QAEjC,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;QACrD,YAAY,CAAC,SAAS,GAAG;;;;8BAIH,WAAW,CAAA;SAChC;AACD,QAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC;IAC3C;uGArBS,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,OAAA,EAAA,CAAA;wGAAhB,gBAAgB,EAAA,CAAA;;2FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAD5B;;;MCIqB,iBAAiB,CAAA;AAC1B,IAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACjC,IAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AACrC,IAAA,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAC/C,IAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;IAE3C,gBAAgB,GAAG,MAAM,CAAU,KAAK;yFAAC;AAElD,IAAA,WAAA,GAAA;AACI,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,EAAE,YAAY,CAAC;QAC1E,MAAM,CAAC,MAAK;AACR,YAAA,IAAI,IAAI,CAAC,WAAW,CAAC,iBAAiB,EAAE,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE;AAClE,gBAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC;AAC/B,gBAAA,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE;YACnC;AACJ,QAAA,CAAC,CAAC;IACN;uGAhBkB,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBADtC;;;ACAK,MAAgB,kBAAmB,SAAQ,aAAa,CAAA;AACjD,IAAA,cAAc,GAAG,MAAM,CAAiB,cAAc,CAAC;IAEvD,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;uGAHzC,kBAAkB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBADvC;;;ACEK,MAAgB,mBAGpB,SAAQ,aAAa,CAAA;AACV,IAAA,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC;IAE5B,OAAO,GAAkB,SAAS;AAE3C,IAAA,WAAA,CAAY,aAAgB,EAAA;AACxB,QAAA,KAAK,EAAE;AACP,QAAA,IAAI,CAAC,OAAO,GAAG,aAAa;QAC5B,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;QAChC,MAAM,CAAC,MAAK;YACR,IACI,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,MAAM,KAAK,CAAC;AAClC,gBAAA,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE;AAC5B,gBAAA,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;AACzB,gBAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,EAC/C;gBACE,IAAI,CAAC,OAAO,EAAE;YAClB;AACJ,QAAA,CAAC,CAAC;QACF,MAAM,CAAC,MAAK;YACR,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,MAAO,GAAG,CAAC,EAAE;gBACpC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;YACtC;AACJ,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,OAAO,CAAC,MAAA,GAA6B,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAA;AACvD,QAAA,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,MAAgB,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC;IACrE;AAEA,IAAA,QAAQ,CAAC,MAAc,EAAA;QACnB,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB,QAAA,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC;AACvC,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;IACxB;uGArCkB,mBAAmB,EAAA,IAAA,EAAA,SAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBADxC;;;ACJM,MAAM,UAAU,GAAG,CAAI,QAA6B,KAAa;AACpE,IAAA,MAAM,SAAS,GAAG,QAAQ,CAAC,WAAwC,CAAC;AACpE,IAAA,OAAO,SAAS,EAAE,MAAM,GAAG,CAAC;AAChC;AAEO,MAAM,aAAa,GAAG,CAAC,MAAA,GAAiB,EAAE,KAAe,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;;ACPlG;;AAEG;;"}
1
+ {"version":3,"file":"ng-vagabond-lab-ng-dsv-base.mjs","sources":["../../../projects/ng-dsv/base/service/base/base.service.ts","../../../projects/ng-dsv/base/service/base/base-api.service.ts","../../../projects/ng-dsv/base/service/seo/seo.service.ts","../../../projects/ng-dsv/base/container/base.container.ts","../../../projects/ng-dsv/base/service/analytics/analytics.service.ts","../../../projects/ng-dsv/base/container/main/base-main.container.ts","../../../projects/ng-dsv/base/container/route/base-route.container.ts","../../../projects/ng-dsv/base/container/search/base-search.container.ts","../../../projects/ng-dsv/base/utils/base.utils.ts","../../../projects/ng-dsv/base/ng-vagabond-lab-ng-dsv-base.ts"],"sourcesContent":["import { Directive, inject, signal, TransferState } from '@angular/core';\nimport { ToastService } from '@ng-vagabond-lab/ng-dsv/ds/toast';\nimport { I18nService } from '@ng-vagabond-lab/ng-dsv/i18n';\nimport { PlatformService } from '@ng-vagabond-lab/ng-dsv/platform';\n\n@Directive()\nexport abstract class BaseService {\n readonly toastService = inject(ToastService);\n readonly transferState = inject(TransferState);\n readonly platformService = inject(PlatformService);\n readonly i18nService = inject(I18nService);\n readonly translateService = this.i18nService.translateService;\n\n readonly loaded = signal<boolean>(true);\n\n isPlatformBrowser(): boolean {\n return this.platformService.isPlatformBrowser();\n }\n}\n","import { Directive, inject } from '@angular/core';\nimport { ApiService } from '@ng-vagabond-lab/ng-dsv/api';\nimport { BaseService } from './base.service';\n\n@Directive()\nexport abstract class BaseApiService extends BaseService {\n readonly apiService = inject(ApiService);\n}\n","import { inject, Injectable, makeStateKey } from '@angular/core';\nimport { Meta, Title } from '@angular/platform-browser';\nimport { EnvironmentService } from '@ng-vagabond-lab/ng-dsv/environment';\nimport { BaseApiService } from '../base/base-api.service';\n\n@Injectable({ providedIn: 'root' })\nexport class SeoService extends BaseApiService {\n readonly environmentService = inject(EnvironmentService);\n readonly title = inject(Title);\n readonly meta = inject(Meta);\n\n setMeta(title: string, description: string, image?: string): void {\n const newTitle = this.environmentService.config()?.APP_NAME + ' - ' + 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 { computed, Directive, effect, inject, signal } from '@angular/core';\nimport { AuthService } from '@ng-vagabond-lab/ng-dsv/module/auth';\nimport { RouterService } from '@ng-vagabond-lab/ng-dsv/router';\nimport { SeoService } from '../service/seo/seo.service';\n\n@Directive()\nexport abstract class BaseContainer {\n readonly authService = inject(AuthService);\n readonly seoService = inject(SeoService);\n readonly routerService = inject(RouterService);\n\n protected requiredRole = signal<string>('');\n\n readonly hasAccess = computed<boolean>(() => {\n const role = this.requiredRole();\n return !role || this.authService.hasRole(role);\n });\n\n constructor() {\n effect(() => {\n if (!this.hasAccess()) {\n this.routerService.router.navigate(['/']);\n }\n });\n }\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport { inject, PLATFORM_ID, Service } from '@angular/core';\n\n@Service()\nexport class AnalyticsService {\n readonly platformId = inject(PLATFORM_ID);\n\n init(analyticsId?: string): void {\n if (!isPlatformBrowser(this.platformId) || !analyticsId) {\n return;\n }\n\n const script = document.createElement('script');\n script.async = true;\n script.src = `https://www.googletagmanager.com/gtag/js?id=${analyticsId}`;\n document.head.appendChild(script);\n\n const inlineScript = document.createElement('script');\n inlineScript.innerHTML = `\n window.dataLayer = window.dataLayer || [];\n function gtag(){ dataLayer.push(arguments); }\n gtag('js', new Date());\n gtag('config', '${analyticsId}');\n `;\n document.head.appendChild(inlineScript);\n }\n}\n","import { Directive, effect, inject, signal } from '@angular/core';\nimport { EnvironmentService } from '@ng-vagabond-lab/ng-dsv/environment';\nimport { AuthService } from '@ng-vagabond-lab/ng-dsv/module/auth';\nimport { RouterService } from '@ng-vagabond-lab/ng-dsv/router';\nimport { AnalyticsService } from '../../service/analytics/analytics.service';\n\n@Directive()\nexport abstract class BaseMainContainer {\n readonly authService = inject(AuthService);\n readonly routerService = inject(RouterService);\n readonly environmentService = inject(EnvironmentService);\n readonly analyticsService = inject(AnalyticsService);\n\n readonly initRefreshToken = signal<boolean>(false);\n\n private resizeListener?: () => void;\n\n constructor() {\n this.analyticsService.init(this.environmentService.config()?.ANALYTICS_ID);\n effect(() => {\n if (this.authService.isPlatformBrowser() && !this.initRefreshToken()) {\n this.initRefreshToken.set(true);\n this.authService.refreshToken();\n }\n });\n effect(() => {\n if (this.environmentService.platformService.isPlatformBrowser() && window.visualViewport) {\n this.resizeListener = () => {\n const vh = window.visualViewport?.height;\n document.documentElement.style.setProperty('--app-height', `${vh}px`);\n };\n\n window.visualViewport.addEventListener('resize', this.resizeListener);\n this.resizeListener();\n }\n });\n }\n\n ngOnDestroy() {\n if (this.resizeListener && window.visualViewport) {\n window.visualViewport.removeEventListener('resize', this.resizeListener);\n }\n }\n}\n","import { Directive, inject } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { ActivatedRoute } from '@angular/router';\nimport { BaseContainer } from '../base.container';\n\n@Directive()\nexport abstract class BaseRouteContainer extends BaseContainer {\n readonly activatedRoute = inject<ActivatedRoute>(ActivatedRoute);\n\n readonly routeParams = toSignal(this.activatedRoute.params);\n}\n","import { Directive, effect, ElementRef, inject } from '@angular/core';\nimport { ApiDto } from '@ng-vagabond-lab/ng-dsv/api';\nimport { SCROLL_CLASS, scrollToTop } from '@ng-vagabond-lab/ng-dsv/ds/scroll';\nimport { BaseSearchService } from '../../service';\nimport { BaseContainer } from '../base.container';\n\n@Directive()\nexport abstract class BaseSearchContainer<\n T extends BaseSearchService<U>,\n U extends ApiDto,\n> extends BaseContainer {\n readonly element = inject(ElementRef);\n\n readonly service: T | undefined = undefined;\n\n constructor(searchService: T) {\n super();\n this.service = searchService;\n this.service.isLoading.set(true);\n effect(() => {\n if (\n this.service?.datas().length === 0 &&\n this.service.search() === '' &&\n !this.service.stopFetch() &&\n this.authService.canFetch(this.service.ssr())\n ) {\n this.doFetch();\n }\n });\n effect(() => {\n if (this.service?.datas()?.length! > 0) {\n this.service?.isLoading.set(false);\n }\n });\n }\n\n doFetch(search: string | undefined = this.service?.search()): void {\n this.service?.fetchByPage(search as string, this.service?.page());\n }\n\n doSearch(search: string): void {\n this.service?.page.set(1);\n scrollToTop(this.element, SCROLL_CLASS);\n this.doFetch(search);\n }\n}\n","import { OutputEmitterRef } from '@angular/core';\n\nexport const isCallback = <T>(callback: OutputEmitterRef<T>): boolean => {\n const listeners = callback['listeners' as keyof OutputEmitterRef<T>];\n return listeners?.length > 0;\n};\n\nexport const generateArray = (length: number = 20): number[] => Array.from({ length }, (_, i) => i);\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.2.53",
3
+ "version": "0.2.54",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^20.0.0",
6
6
  "@angular/core": "^20.0.0"
@@ -63,7 +63,9 @@ declare abstract class BaseMainContainer {
63
63
  readonly environmentService: EnvironmentService;
64
64
  readonly analyticsService: AnalyticsService;
65
65
  readonly initRefreshToken: i0.WritableSignal<boolean>;
66
+ private resizeListener?;
66
67
  constructor();
68
+ ngOnDestroy(): void;
67
69
  static ɵfac: i0.ɵɵFactoryDeclaration<BaseMainContainer, never>;
68
70
  static ɵdir: i0.ɵɵDirectiveDeclaration<BaseMainContainer, never, never, {}, {}, never, never, true, never>;
69
71
  }