@shival99/z-ui 2.2.4 → 2.2.6
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/css/themes/hospital.css +28 -2
- package/fesm2022/shival99-z-ui-components-z-drawer.mjs +22 -13
- package/fesm2022/shival99-z-ui-components-z-drawer.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-icon.mjs +80 -8
- package/fesm2022/shival99-z-ui-components-z-icon.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-menu.mjs +5 -5
- package/fesm2022/shival99-z-ui-components-z-menu.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-components-z-table.mjs +2 -2
- package/fesm2022/shival99-z-ui-components-z-table.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-providers.mjs +9 -2
- package/fesm2022/shival99-z-ui-providers.mjs.map +1 -1
- package/fesm2022/shival99-z-ui-services.mjs +161 -73
- package/fesm2022/shival99-z-ui-services.mjs.map +1 -1
- package/package.json +1 -1
- package/types/shival99-z-ui-components-z-autocomplete.d.ts +1 -1
- package/types/shival99-z-ui-components-z-calendar.d.ts +4 -4
- package/types/shival99-z-ui-components-z-drawer.d.ts +13 -5
- package/types/shival99-z-ui-components-z-editor.d.ts +1 -1
- package/types/shival99-z-ui-components-z-gallery.d.ts +4 -4
- package/types/shival99-z-ui-components-z-icon.d.ts +16 -4
- package/types/shival99-z-ui-components-z-modal.d.ts +1 -1
- package/types/shival99-z-ui-components-z-popover.d.ts +1 -1
- package/types/shival99-z-ui-components-z-select.d.ts +1 -1
- package/types/shival99-z-ui-components-z-table.d.ts +1 -1
- package/types/shival99-z-ui-components-z-upload.d.ts +3 -3
- package/types/shival99-z-ui-providers.d.ts +3 -1
- package/types/shival99-z-ui-services.d.ts +21 -6
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { InjectionToken, makeEnvironmentProviders, provideEnvironmentInitializer, inject, provideAppInitializer } from '@angular/core';
|
|
2
|
-
import { ZCacheService, ZIndexDbService, Z_THEME_CONFIG, Z_LANG_CACHE_KEY } from '@shival99/z-ui/services';
|
|
2
|
+
import { ZCacheService, ZIndexDbService, zConfigureStorageAppName, Z_THEME_CONFIG, Z_LANG_CACHE_KEY } from '@shival99/z-ui/services';
|
|
3
3
|
import { provideEnvironmentNgxMask } from 'ngx-mask';
|
|
4
4
|
import { provideScrollbarOptions } from 'ngx-scrollbar';
|
|
5
5
|
import { HttpClient } from '@angular/common/http';
|
|
@@ -19,7 +19,8 @@ const Z_CACHE_CONFIG = new InjectionToken('Z_CACHE_CONFIG');
|
|
|
19
19
|
* export const appConfig: ApplicationConfig = {
|
|
20
20
|
* providers: [
|
|
21
21
|
* provideZCache({
|
|
22
|
-
*
|
|
22
|
+
* appName: 'my-app',
|
|
23
|
+
* prefix: 'custom_',
|
|
23
24
|
* encrypt: false, // Disable encryption for debugging
|
|
24
25
|
* }),
|
|
25
26
|
* ],
|
|
@@ -51,6 +52,7 @@ const Z_INDEXDB_SERVICE = new InjectionToken('ZIndexDbService');
|
|
|
51
52
|
* export const appConfig: ApplicationConfig = {
|
|
52
53
|
* providers: [
|
|
53
54
|
* provideZIndexDb({
|
|
55
|
+
* appName: 'my-app',
|
|
54
56
|
* dbName: 'MyApp',
|
|
55
57
|
* version: 1,
|
|
56
58
|
* stores: [
|
|
@@ -67,6 +69,11 @@ const Z_INDEXDB_SERVICE = new InjectionToken('ZIndexDbService');
|
|
|
67
69
|
*/
|
|
68
70
|
function provideZIndexDb(config = {}) {
|
|
69
71
|
return makeEnvironmentProviders([
|
|
72
|
+
provideEnvironmentInitializer(() => {
|
|
73
|
+
if (config.appName !== undefined) {
|
|
74
|
+
zConfigureStorageAppName(config.appName);
|
|
75
|
+
}
|
|
76
|
+
}),
|
|
70
77
|
{
|
|
71
78
|
provide: Z_INDEXDB_SERVICE,
|
|
72
79
|
useFactory: () => new ZIndexDbService(config),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shival99-z-ui-providers.mjs","sources":["../../../../libs/core-ui/providers/z-cache.provider.ts","../../../../libs/core-ui/providers/z-indexdb.provider.ts","../../../../libs/core-ui/providers/z-ngx-mask.provider.ts","../../../../libs/core-ui/providers/z-scrollbar.provider.ts","../../../../libs/core-ui/providers/z-theme.provider.ts","../../../../libs/core-ui/providers/z-translate.provider.ts","../../../../libs/core-ui/providers/types/z-ngx-mask.types.ts","../../../../libs/core-ui/providers/shival99-z-ui-providers.ts"],"sourcesContent":["import {\n type EnvironmentProviders,\n inject,\n InjectionToken,\n makeEnvironmentProviders,\n provideEnvironmentInitializer,\n} from '@angular/core';\nimport { type ZCacheConfig, ZCacheService } from '@shival99/z-ui/services';\n\n/** Injection token for ZCacheService configuration */\nexport const Z_CACHE_CONFIG = new InjectionToken<ZCacheConfig>('Z_CACHE_CONFIG');\n\n/**\n * Provide Z-Cache service with configuration\n * @param config - Cache configuration with prefix and encrypt options\n *\n * @example\n * ```typescript\n * // In app.config.ts\n * export const appConfig: ApplicationConfig = {\n * providers: [\n * provideZCache({\n * prefix: 'myapp_',\n * encrypt: false, // Disable encryption for debugging\n * }),\n * ],\n * };\n * ```\n */\nexport function provideZCache(config: ZCacheConfig = {}): EnvironmentProviders {\n return makeEnvironmentProviders([\n {\n provide: Z_CACHE_CONFIG,\n useValue: config,\n },\n provideEnvironmentInitializer(() => {\n const cacheConfig = inject(Z_CACHE_CONFIG);\n ZCacheService.configure(cacheConfig);\n }),\n ]);\n}\n","import { type EnvironmentProviders, InjectionToken, makeEnvironmentProviders } from '@angular/core';\nimport { type ZIndexDbConfig, ZIndexDbService } from '@shival99/z-ui/services';\n\n/** Injection token for ZIndexDbService */\nexport const Z_INDEXDB_SERVICE = new InjectionToken<ZIndexDbService>('ZIndexDbService');\n\n/**\n * Provide Z-IndexDB service with configuration\n * @param config - IndexDB configuration with multi-store support\n *\n * @example\n * ```typescript\n * // In app.config.ts\n * export const appConfig: ApplicationConfig = {\n * providers: [\n * provideZIndexDb({\n * dbName: 'MyApp',\n * version: 1,\n * stores: [\n * { name: 'cache', encrypt: true },\n * { name: 'userData', encrypt: true, protectedKeys: ['profile'] },\n * { name: 'settings', encrypt: false },\n * ],\n * defaultStore: 'cache',\n * protectedKeys: ['token'],\n * }),\n * ],\n * };\n * ```\n */\nexport function provideZIndexDb(config: ZIndexDbConfig = {}): EnvironmentProviders {\n return makeEnvironmentProviders([\n {\n provide: Z_INDEXDB_SERVICE,\n useFactory: () => new ZIndexDbService(config),\n },\n {\n provide: ZIndexDbService,\n useExisting: Z_INDEXDB_SERVICE,\n },\n ]);\n}\n","import { type EnvironmentProviders, InjectionToken, makeEnvironmentProviders } from '@angular/core';\nimport { ZCacheService } from '@shival99/z-ui/services';\nimport { provideEnvironmentNgxMask } from 'ngx-mask';\nimport type { ZNgxMaskConfig } from './types/z-ngx-mask.types';\n\nconst LANG_CACHE_KEY = 'Z_LANGUAGE';\n\nexport const Z_NGX_MASK_CONFIG = new InjectionToken<ZNgxMaskConfig>('Z_NGX_MASK_CONFIG');\n\n/**\n * Get locale-specific mask configuration\n */\nfunction getMaskConfig(lang: string, config: ZNgxMaskConfig = {}) {\n const normalizedLang = lang.toLowerCase().replace('_', '-');\n const isVietnamese = normalizedLang === 'vi' || normalizedLang.startsWith('vi-');\n const { lang: _lang, decimalPlaces: _decimalPlaces, ...maskConfig } = config;\n\n return {\n ...maskConfig,\n validation: maskConfig.validation ?? true,\n thousandSeparator: maskConfig.thousandSeparator ?? (isVietnamese ? '.' : ','),\n decimalMarker: maskConfig.decimalMarker ?? (isVietnamese ? ',' : '.'),\n allowNegativeNumbers: maskConfig.allowNegativeNumbers ?? true,\n };\n}\n\n/**\n * Provide Z-NgxMask with locale-aware configuration\n * @param config - Mask configuration\n *\n * @example\n * ```typescript\n * // In app.config.ts\n * export const appConfig: ApplicationConfig = {\n * providers: [\n * provideZNgxMask({ lang: 'vi' }),\n * ],\n * };\n * ```\n *\n * Vietnamese defaults: thousandSeparator '.', decimalMarker ','.\n */\nexport function provideZNgxMask(config: ZNgxMaskConfig = {}): EnvironmentProviders {\n const savedLang = typeof window !== 'undefined' ? ZCacheService.get<string>(LANG_CACHE_KEY) : null;\n const lang = config.lang ?? savedLang ?? 'vi';\n const maskConfig = getMaskConfig(lang, config);\n const zMaskConfig: ZNgxMaskConfig = {\n ...maskConfig,\n lang,\n decimalPlaces: config.decimalPlaces,\n };\n\n return makeEnvironmentProviders([\n {\n provide: Z_NGX_MASK_CONFIG,\n useValue: zMaskConfig,\n },\n provideEnvironmentNgxMask(maskConfig),\n ]);\n}\n","import { type EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\nimport { provideScrollbarOptions } from 'ngx-scrollbar';\n\n/**\n * Provides global scrollbar options for ngx-scrollbar\n * Use this in app.config.ts: providers: [provideZScrollbar()]\n */\nexport function provideZScrollbar(): EnvironmentProviders {\n return makeEnvironmentProviders([\n provideScrollbarOptions({\n visibility: 'hover',\n appearance: 'compact',\n withButtons: false,\n sensorThrottleTime: 200,\n }),\n ]);\n}\n","import { makeEnvironmentProviders, type EnvironmentProviders } from '@angular/core';\nimport { type ZThemeConfig, Z_THEME_CONFIG } from '@shival99/z-ui/services';\n\n/**\n * Provide theme configuration for the application\n * @param config - Theme configuration with defaultTheme, defaultDarkMode, and optional cacheKey\n * @example\n * ```typescript\n * // In app.config.ts\n * export const appConfig: ApplicationConfig = {\n * providers: [\n * provideZTheme({\n * defaultTheme: 'hospital',\n * defaultDarkMode: false,\n * cacheKey: 'Z_THEME_PREFERENCES_CRM',\n * })\n * ]\n * };\n * ```\n */\nexport function provideZTheme(config: ZThemeConfig = {}): EnvironmentProviders {\n return makeEnvironmentProviders([{ provide: Z_THEME_CONFIG, useValue: config }]);\n}\n","/* eslint-disable @stylistic/indent */\nimport { HttpClient } from '@angular/common/http';\nimport { inject, makeEnvironmentProviders, provideAppInitializer, type EnvironmentProviders } from '@angular/core';\nimport {\n provideTranslateService,\n TranslateLoader,\n TranslateService,\n type TranslationObject,\n} from '@ngx-translate/core';\nimport type { ZUITranslations } from '@shival99/z-ui/i18n';\nimport { Z_LANG_CACHE_KEY, ZCacheService } from '@shival99/z-ui/services';\nimport { firstValueFrom, forkJoin, from, map, type Observable, of } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport type { ZTranslateProviderConfig, ZUITranslationsLoader } from './types/z-translate.types';\n\nconst DEFAULT_LANG = 'en';\nconst zuiTranslationsPromiseCache = new Map<string, Promise<ZUITranslations>>();\n\nasync function zLoadDefaultZUITranslations(lang: string): Promise<ZUITranslations> {\n const module = await import('@shival99/z-ui/i18n');\n return module.getZUITranslations(lang) ?? module.getZUITranslations(DEFAULT_LANG);\n}\n\nclass ZTranslateHttpLoader implements TranslateLoader {\n public constructor(\n private readonly _http: HttpClient,\n private readonly _prefix: string,\n private readonly _suffix: string,\n private readonly _includeZUI: boolean,\n private readonly _zuiOverridePath?: string,\n private readonly _zuiLoader: ZUITranslationsLoader = zLoadDefaultZUITranslations\n ) {}\n\n private _loadZUITranslations(lang: string): Promise<ZUITranslations> {\n const cached = zuiTranslationsPromiseCache.get(lang);\n if (cached) {\n return cached;\n }\n\n const loadPromise = this._zuiLoader(lang).catch(async () => {\n if (lang === DEFAULT_LANG) {\n return {};\n }\n return this._zuiLoader(DEFAULT_LANG).catch(() => ({}));\n });\n\n zuiTranslationsPromiseCache.set(lang, loadPromise);\n return loadPromise;\n }\n\n public getTranslation(lang: string): Observable<TranslationObject> {\n const userTranslations$ = this._http\n .get<TranslationObject>(`${this._prefix}${lang}${this._suffix}`)\n .pipe(catchError(() => of({} as TranslationObject)));\n\n if (!this._includeZUI) {\n return userTranslations$;\n }\n\n const zuiDefaults$ = from(this._loadZUITranslations(lang)).pipe(catchError(() => of({} as ZUITranslations)));\n const zuiFileOverrides$ = this._zuiOverridePath\n ? this._http\n .get<ZUITranslations>(`${this._zuiOverridePath}${lang}${this._suffix}`)\n .pipe(catchError(() => of({} as ZUITranslations)))\n : of({} as ZUITranslations);\n\n return forkJoin([zuiDefaults$, zuiFileOverrides$, userTranslations$]).pipe(\n map(\n ([defaults, fileOverrides, user]) =>\n ({\n ...defaults,\n ...fileOverrides,\n ...(user as Record<string, unknown>),\n }) as TranslationObject\n )\n );\n }\n}\n\nexport function zCreateTranslateLoader(\n http: HttpClient,\n path = './assets/i18n/',\n extension = '.json',\n includeZUI = true,\n zuiOverridePath?: string,\n zuiLoader: ZUITranslationsLoader = zLoadDefaultZUITranslations\n): TranslateLoader {\n return new ZTranslateHttpLoader(http, path, extension, includeZUI, zuiOverridePath, zuiLoader);\n}\n\nfunction initializeTranslate(defaultLang: string): Promise<unknown> {\n const translate = inject(TranslateService);\n const savedLang = ZCacheService.get<string>(Z_LANG_CACHE_KEY) ?? defaultLang;\n ZCacheService.set(Z_LANG_CACHE_KEY, savedLang);\n translate.setFallbackLang(defaultLang);\n return firstValueFrom(translate.use(savedLang));\n}\n\nexport function provideZTranslate(config: ZTranslateProviderConfig = {}): EnvironmentProviders {\n const {\n defaultLang = 'vi',\n translationPath = './assets/i18n/',\n fileExtension = '.json',\n includeZUITranslations = true,\n zuiOverridePath,\n zuiTranslationsLoader = zLoadDefaultZUITranslations,\n } = config;\n\n return makeEnvironmentProviders([\n provideTranslateService({\n fallbackLang: defaultLang,\n loader: {\n provide: TranslateLoader,\n useFactory: (http: HttpClient) =>\n zCreateTranslateLoader(\n http,\n translationPath,\n fileExtension,\n includeZUITranslations,\n zuiOverridePath,\n zuiTranslationsLoader\n ),\n deps: [HttpClient],\n },\n }),\n provideAppInitializer(() => initializeTranslate(defaultLang)),\n ]);\n}\n\nexport type { ZUITranslations, ZUILanguage, ZUITranslationSet } from '@shival99/z-ui/i18n';\n","/**\n * Z-NgxMask Provider Types\n */\n\nimport type { NgxMaskOptions } from 'ngx-mask';\n\nexport interface ZNgxMaskConfig extends NgxMaskOptions {\n /** Language code (vi, en, etc.) */\n lang?: string;\n /** Default decimal places for Z-UI number inputs. */\n decimalPlaces?: number;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"shival99-z-ui-providers.mjs","sources":["../../../../libs/core-ui/providers/z-cache.provider.ts","../../../../libs/core-ui/providers/z-indexdb.provider.ts","../../../../libs/core-ui/providers/z-ngx-mask.provider.ts","../../../../libs/core-ui/providers/z-scrollbar.provider.ts","../../../../libs/core-ui/providers/z-theme.provider.ts","../../../../libs/core-ui/providers/z-translate.provider.ts","../../../../libs/core-ui/providers/types/z-ngx-mask.types.ts","../../../../libs/core-ui/providers/shival99-z-ui-providers.ts"],"sourcesContent":["import {\n type EnvironmentProviders,\n inject,\n InjectionToken,\n makeEnvironmentProviders,\n provideEnvironmentInitializer,\n} from '@angular/core';\nimport { type ZCacheConfig, ZCacheService } from '@shival99/z-ui/services';\n\n/** Injection token for ZCacheService configuration */\nexport const Z_CACHE_CONFIG = new InjectionToken<ZCacheConfig>('Z_CACHE_CONFIG');\n\n/**\n * Provide Z-Cache service with configuration\n * @param config - Cache configuration with prefix and encrypt options\n *\n * @example\n * ```typescript\n * // In app.config.ts\n * export const appConfig: ApplicationConfig = {\n * providers: [\n * provideZCache({\n * appName: 'my-app',\n * prefix: 'custom_',\n * encrypt: false, // Disable encryption for debugging\n * }),\n * ],\n * };\n * ```\n */\nexport function provideZCache(config: ZCacheConfig = {}): EnvironmentProviders {\n return makeEnvironmentProviders([\n {\n provide: Z_CACHE_CONFIG,\n useValue: config,\n },\n provideEnvironmentInitializer(() => {\n const cacheConfig = inject(Z_CACHE_CONFIG);\n ZCacheService.configure(cacheConfig);\n }),\n ]);\n}\n","import {\n type EnvironmentProviders,\n InjectionToken,\n makeEnvironmentProviders,\n provideEnvironmentInitializer,\n} from '@angular/core';\nimport { type ZIndexDbConfig, zConfigureStorageAppName, ZIndexDbService } from '@shival99/z-ui/services';\n\n/** Injection token for ZIndexDbService */\nexport const Z_INDEXDB_SERVICE = new InjectionToken<ZIndexDbService>('ZIndexDbService');\n\n/**\n * Provide Z-IndexDB service with configuration\n * @param config - IndexDB configuration with multi-store support\n *\n * @example\n * ```typescript\n * // In app.config.ts\n * export const appConfig: ApplicationConfig = {\n * providers: [\n * provideZIndexDb({\n * appName: 'my-app',\n * dbName: 'MyApp',\n * version: 1,\n * stores: [\n * { name: 'cache', encrypt: true },\n * { name: 'userData', encrypt: true, protectedKeys: ['profile'] },\n * { name: 'settings', encrypt: false },\n * ],\n * defaultStore: 'cache',\n * protectedKeys: ['token'],\n * }),\n * ],\n * };\n * ```\n */\nexport function provideZIndexDb(config: ZIndexDbConfig = {}): EnvironmentProviders {\n return makeEnvironmentProviders([\n provideEnvironmentInitializer(() => {\n if (config.appName !== undefined) {\n zConfigureStorageAppName(config.appName);\n }\n }),\n {\n provide: Z_INDEXDB_SERVICE,\n useFactory: () => new ZIndexDbService(config),\n },\n {\n provide: ZIndexDbService,\n useExisting: Z_INDEXDB_SERVICE,\n },\n ]);\n}\n","import { type EnvironmentProviders, InjectionToken, makeEnvironmentProviders } from '@angular/core';\nimport { ZCacheService } from '@shival99/z-ui/services';\nimport { provideEnvironmentNgxMask } from 'ngx-mask';\nimport type { ZNgxMaskConfig } from './types/z-ngx-mask.types';\n\nconst LANG_CACHE_KEY = 'Z_LANGUAGE';\n\nexport const Z_NGX_MASK_CONFIG = new InjectionToken<ZNgxMaskConfig>('Z_NGX_MASK_CONFIG');\n\n/**\n * Get locale-specific mask configuration\n */\nfunction getMaskConfig(lang: string, config: ZNgxMaskConfig = {}) {\n const normalizedLang = lang.toLowerCase().replace('_', '-');\n const isVietnamese = normalizedLang === 'vi' || normalizedLang.startsWith('vi-');\n const { lang: _lang, decimalPlaces: _decimalPlaces, ...maskConfig } = config;\n\n return {\n ...maskConfig,\n validation: maskConfig.validation ?? true,\n thousandSeparator: maskConfig.thousandSeparator ?? (isVietnamese ? '.' : ','),\n decimalMarker: maskConfig.decimalMarker ?? (isVietnamese ? ',' : '.'),\n allowNegativeNumbers: maskConfig.allowNegativeNumbers ?? true,\n };\n}\n\n/**\n * Provide Z-NgxMask with locale-aware configuration\n * @param config - Mask configuration\n *\n * @example\n * ```typescript\n * // In app.config.ts\n * export const appConfig: ApplicationConfig = {\n * providers: [\n * provideZNgxMask({ lang: 'vi' }),\n * ],\n * };\n * ```\n *\n * Vietnamese defaults: thousandSeparator '.', decimalMarker ','.\n */\nexport function provideZNgxMask(config: ZNgxMaskConfig = {}): EnvironmentProviders {\n const savedLang = typeof window !== 'undefined' ? ZCacheService.get<string>(LANG_CACHE_KEY) : null;\n const lang = config.lang ?? savedLang ?? 'vi';\n const maskConfig = getMaskConfig(lang, config);\n const zMaskConfig: ZNgxMaskConfig = {\n ...maskConfig,\n lang,\n decimalPlaces: config.decimalPlaces,\n };\n\n return makeEnvironmentProviders([\n {\n provide: Z_NGX_MASK_CONFIG,\n useValue: zMaskConfig,\n },\n provideEnvironmentNgxMask(maskConfig),\n ]);\n}\n","import { type EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\nimport { provideScrollbarOptions } from 'ngx-scrollbar';\n\n/**\n * Provides global scrollbar options for ngx-scrollbar\n * Use this in app.config.ts: providers: [provideZScrollbar()]\n */\nexport function provideZScrollbar(): EnvironmentProviders {\n return makeEnvironmentProviders([\n provideScrollbarOptions({\n visibility: 'hover',\n appearance: 'compact',\n withButtons: false,\n sensorThrottleTime: 200,\n }),\n ]);\n}\n","import { makeEnvironmentProviders, type EnvironmentProviders } from '@angular/core';\nimport { type ZThemeConfig, Z_THEME_CONFIG } from '@shival99/z-ui/services';\n\n/**\n * Provide theme configuration for the application\n * @param config - Theme configuration with defaultTheme, defaultDarkMode, and optional cacheKey\n * @example\n * ```typescript\n * // In app.config.ts\n * export const appConfig: ApplicationConfig = {\n * providers: [\n * provideZTheme({\n * defaultTheme: 'hospital',\n * defaultDarkMode: false,\n * cacheKey: 'Z_THEME_PREFERENCES_CRM',\n * })\n * ]\n * };\n * ```\n */\nexport function provideZTheme(config: ZThemeConfig = {}): EnvironmentProviders {\n return makeEnvironmentProviders([{ provide: Z_THEME_CONFIG, useValue: config }]);\n}\n","/* eslint-disable @stylistic/indent */\nimport { HttpClient } from '@angular/common/http';\nimport { inject, makeEnvironmentProviders, provideAppInitializer, type EnvironmentProviders } from '@angular/core';\nimport {\n provideTranslateService,\n TranslateLoader,\n TranslateService,\n type TranslationObject,\n} from '@ngx-translate/core';\nimport type { ZUITranslations } from '@shival99/z-ui/i18n';\nimport { Z_LANG_CACHE_KEY, ZCacheService } from '@shival99/z-ui/services';\nimport { firstValueFrom, forkJoin, from, map, type Observable, of } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport type { ZTranslateProviderConfig, ZUITranslationsLoader } from './types/z-translate.types';\n\nconst DEFAULT_LANG = 'en';\nconst zuiTranslationsPromiseCache = new Map<string, Promise<ZUITranslations>>();\n\nasync function zLoadDefaultZUITranslations(lang: string): Promise<ZUITranslations> {\n const module = await import('@shival99/z-ui/i18n');\n return module.getZUITranslations(lang) ?? module.getZUITranslations(DEFAULT_LANG);\n}\n\nclass ZTranslateHttpLoader implements TranslateLoader {\n public constructor(\n private readonly _http: HttpClient,\n private readonly _prefix: string,\n private readonly _suffix: string,\n private readonly _includeZUI: boolean,\n private readonly _zuiOverridePath?: string,\n private readonly _zuiLoader: ZUITranslationsLoader = zLoadDefaultZUITranslations\n ) {}\n\n private _loadZUITranslations(lang: string): Promise<ZUITranslations> {\n const cached = zuiTranslationsPromiseCache.get(lang);\n if (cached) {\n return cached;\n }\n\n const loadPromise = this._zuiLoader(lang).catch(async () => {\n if (lang === DEFAULT_LANG) {\n return {};\n }\n return this._zuiLoader(DEFAULT_LANG).catch(() => ({}));\n });\n\n zuiTranslationsPromiseCache.set(lang, loadPromise);\n return loadPromise;\n }\n\n public getTranslation(lang: string): Observable<TranslationObject> {\n const userTranslations$ = this._http\n .get<TranslationObject>(`${this._prefix}${lang}${this._suffix}`)\n .pipe(catchError(() => of({} as TranslationObject)));\n\n if (!this._includeZUI) {\n return userTranslations$;\n }\n\n const zuiDefaults$ = from(this._loadZUITranslations(lang)).pipe(catchError(() => of({} as ZUITranslations)));\n const zuiFileOverrides$ = this._zuiOverridePath\n ? this._http\n .get<ZUITranslations>(`${this._zuiOverridePath}${lang}${this._suffix}`)\n .pipe(catchError(() => of({} as ZUITranslations)))\n : of({} as ZUITranslations);\n\n return forkJoin([zuiDefaults$, zuiFileOverrides$, userTranslations$]).pipe(\n map(\n ([defaults, fileOverrides, user]) =>\n ({\n ...defaults,\n ...fileOverrides,\n ...(user as Record<string, unknown>),\n }) as TranslationObject\n )\n );\n }\n}\n\nexport function zCreateTranslateLoader(\n http: HttpClient,\n path = './assets/i18n/',\n extension = '.json',\n includeZUI = true,\n zuiOverridePath?: string,\n zuiLoader: ZUITranslationsLoader = zLoadDefaultZUITranslations\n): TranslateLoader {\n return new ZTranslateHttpLoader(http, path, extension, includeZUI, zuiOverridePath, zuiLoader);\n}\n\nfunction initializeTranslate(defaultLang: string): Promise<unknown> {\n const translate = inject(TranslateService);\n const savedLang = ZCacheService.get<string>(Z_LANG_CACHE_KEY) ?? defaultLang;\n ZCacheService.set(Z_LANG_CACHE_KEY, savedLang);\n translate.setFallbackLang(defaultLang);\n return firstValueFrom(translate.use(savedLang));\n}\n\nexport function provideZTranslate(config: ZTranslateProviderConfig = {}): EnvironmentProviders {\n const {\n defaultLang = 'vi',\n translationPath = './assets/i18n/',\n fileExtension = '.json',\n includeZUITranslations = true,\n zuiOverridePath,\n zuiTranslationsLoader = zLoadDefaultZUITranslations,\n } = config;\n\n return makeEnvironmentProviders([\n provideTranslateService({\n fallbackLang: defaultLang,\n loader: {\n provide: TranslateLoader,\n useFactory: (http: HttpClient) =>\n zCreateTranslateLoader(\n http,\n translationPath,\n fileExtension,\n includeZUITranslations,\n zuiOverridePath,\n zuiTranslationsLoader\n ),\n deps: [HttpClient],\n },\n }),\n provideAppInitializer(() => initializeTranslate(defaultLang)),\n ]);\n}\n\nexport type { ZUITranslations, ZUILanguage, ZUITranslationSet } from '@shival99/z-ui/i18n';\n","/**\n * Z-NgxMask Provider Types\n */\n\nimport type { NgxMaskOptions } from 'ngx-mask';\n\nexport interface ZNgxMaskConfig extends NgxMaskOptions {\n /** Language code (vi, en, etc.) */\n lang?: string;\n /** Default decimal places for Z-UI number inputs. */\n decimalPlaces?: number;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -14,50 +14,107 @@ import { Router } from '@angular/router';
|
|
|
14
14
|
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
15
15
|
import { TranslateService } from '@ngx-translate/core';
|
|
16
16
|
|
|
17
|
-
const Z_CACHE_SCOPE_SEPARATOR = '
|
|
17
|
+
const Z_CACHE_SCOPE_SEPARATOR = '-';
|
|
18
18
|
const Z_DB_SCOPE_SEPARATOR = '__';
|
|
19
|
-
const
|
|
20
|
-
const
|
|
19
|
+
const Z_STORAGE_SCOPE_FALLBACK = 'global';
|
|
20
|
+
const Z_CACHE_DEFAULT_PREFIX = 'z_';
|
|
21
|
+
|
|
22
|
+
const Z_LEGACY_CACHE_SCOPE_SEPARATOR = '::';
|
|
23
|
+
const Z_LEGACY_RUNTIME_SCOPE = (() => {
|
|
21
24
|
if (typeof window === 'undefined') {
|
|
22
|
-
return
|
|
25
|
+
return Z_STORAGE_SCOPE_FALLBACK;
|
|
23
26
|
}
|
|
24
27
|
const origin = zNormalize(window.location.origin);
|
|
25
28
|
const baseHref = typeof document !== 'undefined' ? zNormalize(document.querySelector('base')?.getAttribute('href') ?? '') : '';
|
|
26
29
|
if (!origin && !baseHref) {
|
|
27
|
-
return
|
|
30
|
+
return Z_STORAGE_SCOPE_FALLBACK;
|
|
28
31
|
}
|
|
29
32
|
if (!origin) {
|
|
30
|
-
return baseHref ||
|
|
33
|
+
return baseHref || Z_STORAGE_SCOPE_FALLBACK;
|
|
31
34
|
}
|
|
32
35
|
if (!baseHref) {
|
|
33
36
|
return origin;
|
|
34
37
|
}
|
|
35
38
|
return `${origin}__${baseHref}`;
|
|
36
39
|
})();
|
|
37
|
-
const
|
|
38
|
-
const
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
40
|
+
const Z_LEGACY_CACHE_SCOPE_SUFFIX = `${Z_LEGACY_CACHE_SCOPE_SEPARATOR}${Z_LEGACY_RUNTIME_SCOPE}`;
|
|
41
|
+
const Z_LEGACY_DB_SCOPE_SUFFIX = `${Z_DB_SCOPE_SEPARATOR}${Z_LEGACY_RUNTIME_SCOPE}`;
|
|
42
|
+
const Z_STORAGE_SCOPE_STATE = {};
|
|
43
|
+
function zNormalizeStorageAppName(appName) {
|
|
44
|
+
const normalized = (appName ?? '')
|
|
45
|
+
.trim()
|
|
46
|
+
.toLowerCase()
|
|
47
|
+
.replace(/[^a-z0-9]+/g, Z_CACHE_SCOPE_SEPARATOR)
|
|
48
|
+
.replace(/^-+|-+$/g, '');
|
|
49
|
+
return normalized || Z_STORAGE_SCOPE_FALLBACK;
|
|
45
50
|
}
|
|
46
|
-
function
|
|
47
|
-
|
|
51
|
+
function zConfigureStorageAppName(appName) {
|
|
52
|
+
Z_STORAGE_SCOPE_STATE.appName = appName === undefined ? undefined : zNormalizeStorageAppName(appName);
|
|
48
53
|
}
|
|
49
|
-
function
|
|
50
|
-
return
|
|
54
|
+
function zGetStorageAppName() {
|
|
55
|
+
return Z_STORAGE_SCOPE_STATE.appName;
|
|
51
56
|
}
|
|
52
|
-
function
|
|
57
|
+
function zBuildScopedCacheKey(baseKey, appName = zGetStorageAppName()) {
|
|
58
|
+
if (appName === undefined) {
|
|
59
|
+
return zBuildLegacyScopedCacheKey(baseKey);
|
|
60
|
+
}
|
|
61
|
+
const trimmedKey = baseKey.trim();
|
|
62
|
+
if (!trimmedKey) {
|
|
63
|
+
return baseKey;
|
|
64
|
+
}
|
|
65
|
+
const scopePrefix = `${zNormalizeStorageAppName(appName)}${Z_CACHE_SCOPE_SEPARATOR}`;
|
|
66
|
+
if (trimmedKey.startsWith(scopePrefix)) {
|
|
67
|
+
return trimmedKey;
|
|
68
|
+
}
|
|
69
|
+
return `${scopePrefix}${trimmedKey}`;
|
|
70
|
+
}
|
|
71
|
+
function zBuildScopedDbName(baseDbName, appName = zGetStorageAppName()) {
|
|
72
|
+
if (appName === undefined) {
|
|
73
|
+
return zBuildLegacyScopedDbName(baseDbName);
|
|
74
|
+
}
|
|
75
|
+
const trimmedName = baseDbName.trim();
|
|
76
|
+
if (!trimmedName) {
|
|
77
|
+
return baseDbName;
|
|
78
|
+
}
|
|
79
|
+
const scopeSuffix = `${Z_DB_SCOPE_SEPARATOR}${zNormalizeStorageAppName(appName)}`;
|
|
80
|
+
if (trimmedName.endsWith(scopeSuffix)) {
|
|
81
|
+
return trimmedName;
|
|
82
|
+
}
|
|
83
|
+
return `${trimmedName}${scopeSuffix}`;
|
|
84
|
+
}
|
|
85
|
+
function zStripScopedCacheKey(key, appName = zGetStorageAppName()) {
|
|
86
|
+
if (appName === undefined) {
|
|
87
|
+
return zStripLegacyScopedCacheKey(key);
|
|
88
|
+
}
|
|
53
89
|
const normalizedKey = key.trim();
|
|
54
90
|
if (!normalizedKey) {
|
|
55
91
|
return key;
|
|
56
92
|
}
|
|
57
|
-
|
|
93
|
+
const scopePrefix = `${zNormalizeStorageAppName(appName)}${Z_CACHE_SCOPE_SEPARATOR}`;
|
|
94
|
+
if (!normalizedKey.startsWith(scopePrefix)) {
|
|
58
95
|
return normalizedKey;
|
|
59
96
|
}
|
|
60
|
-
return normalizedKey.slice(
|
|
97
|
+
return normalizedKey.slice(scopePrefix.length);
|
|
98
|
+
}
|
|
99
|
+
function zBuildLegacyScopedCacheKey(baseKey) {
|
|
100
|
+
return zAppendLegacyScope(baseKey, Z_LEGACY_CACHE_SCOPE_SUFFIX);
|
|
101
|
+
}
|
|
102
|
+
function zBuildLegacyScopedDbName(baseDbName) {
|
|
103
|
+
return zAppendLegacyScope(baseDbName, Z_LEGACY_DB_SCOPE_SUFFIX);
|
|
104
|
+
}
|
|
105
|
+
function zStripLegacyScopedCacheKey(key) {
|
|
106
|
+
const normalizedKey = key.trim();
|
|
107
|
+
if (!normalizedKey || !normalizedKey.endsWith(Z_LEGACY_CACHE_SCOPE_SUFFIX)) {
|
|
108
|
+
return normalizedKey || key;
|
|
109
|
+
}
|
|
110
|
+
return normalizedKey.slice(0, normalizedKey.length - Z_LEGACY_CACHE_SCOPE_SUFFIX.length);
|
|
111
|
+
}
|
|
112
|
+
function zAppendLegacyScope(value, scopeSuffix) {
|
|
113
|
+
const trimmed = value.trim();
|
|
114
|
+
if (!trimmed || trimmed.endsWith(scopeSuffix)) {
|
|
115
|
+
return value;
|
|
116
|
+
}
|
|
117
|
+
return `${trimmed}${scopeSuffix}`;
|
|
61
118
|
}
|
|
62
119
|
|
|
63
120
|
/** Injection token for data passed to a dynamic component or template. */
|
|
@@ -274,10 +331,11 @@ const Z_LANG_TO_LOCALE = {
|
|
|
274
331
|
};
|
|
275
332
|
|
|
276
333
|
class ZCacheService {
|
|
277
|
-
static _prefix =
|
|
334
|
+
static _prefix = Z_CACHE_DEFAULT_PREFIX;
|
|
278
335
|
static _encrypt = true;
|
|
279
336
|
static configure(config) {
|
|
280
|
-
|
|
337
|
+
zConfigureStorageAppName(config.appName);
|
|
338
|
+
if (config.prefix !== undefined) {
|
|
281
339
|
ZCacheService._prefix = config.prefix;
|
|
282
340
|
}
|
|
283
341
|
if (config.encrypt !== undefined) {
|
|
@@ -310,21 +368,31 @@ class ZCacheService {
|
|
|
310
368
|
const prefixedKey = `${ZCacheService._prefix}${normalizedKey}`;
|
|
311
369
|
return encrypt ? ZCacheService._encode(prefixedKey) : prefixedKey;
|
|
312
370
|
}
|
|
371
|
+
static _toLegacyStorageKey(normalizedKey, encrypt) {
|
|
372
|
+
const prefixedKey = `z_${normalizedKey}`;
|
|
373
|
+
return encrypt ? ZCacheService._encode(prefixedKey) : prefixedKey;
|
|
374
|
+
}
|
|
313
375
|
static _getFullKey(key, encrypt) {
|
|
314
376
|
return ZCacheService._toStorageKey(ZCacheService._normalizeKey(key), encrypt);
|
|
315
377
|
}
|
|
316
|
-
static
|
|
378
|
+
static _getLegacyFullKeys(key, encrypt) {
|
|
317
379
|
const legacyNormalized = ZCacheService._normalizeLegacyKey(key);
|
|
318
380
|
const scopedNormalized = ZCacheService._normalizeKey(key);
|
|
319
|
-
|
|
320
|
-
|
|
381
|
+
const legacyLogicalKeys = zGetStorageAppName() === undefined
|
|
382
|
+
? [legacyNormalized]
|
|
383
|
+
: [zBuildLegacyScopedCacheKey(legacyNormalized), legacyNormalized];
|
|
384
|
+
if (legacyLogicalKeys.includes(scopedNormalized)) {
|
|
385
|
+
return [];
|
|
321
386
|
}
|
|
322
|
-
|
|
387
|
+
const legacyKeys = legacyLogicalKeys.flatMap(logicalKey => [
|
|
388
|
+
ZCacheService._toStorageKey(logicalKey, encrypt),
|
|
389
|
+
ZCacheService._toLegacyStorageKey(logicalKey, encrypt),
|
|
390
|
+
]);
|
|
391
|
+
return [...new Set(legacyKeys)];
|
|
323
392
|
}
|
|
324
393
|
static _getCandidateStorageKeys(key, encrypt) {
|
|
325
394
|
const scopedKey = ZCacheService._getFullKey(key, encrypt);
|
|
326
|
-
|
|
327
|
-
return legacyKey ? [scopedKey, legacyKey] : [scopedKey];
|
|
395
|
+
return [scopedKey, ...ZCacheService._getLegacyFullKeys(key, encrypt)];
|
|
328
396
|
}
|
|
329
397
|
static _decodeStorageKey(storageKey) {
|
|
330
398
|
const decoded = ZCacheService._decode(storageKey);
|
|
@@ -334,14 +402,14 @@ class ZCacheService {
|
|
|
334
402
|
return decoded;
|
|
335
403
|
}
|
|
336
404
|
static _isManagedStorageKey(storageKey) {
|
|
337
|
-
if (storageKey.startsWith(ZCacheService._prefix)) {
|
|
405
|
+
if (storageKey.startsWith(ZCacheService._prefix) || storageKey.startsWith('z_')) {
|
|
338
406
|
return true;
|
|
339
407
|
}
|
|
340
408
|
const decoded = ZCacheService._decodeStorageKey(storageKey);
|
|
341
409
|
if (!decoded) {
|
|
342
410
|
return false;
|
|
343
411
|
}
|
|
344
|
-
return decoded.startsWith(ZCacheService._prefix);
|
|
412
|
+
return decoded.startsWith(ZCacheService._prefix) || decoded.startsWith('z_');
|
|
345
413
|
}
|
|
346
414
|
static _safeOperation(operation, fallback) {
|
|
347
415
|
try {
|
|
@@ -377,12 +445,10 @@ class ZCacheService {
|
|
|
377
445
|
static set(key, data, encrypt = ZCacheService._encrypt) {
|
|
378
446
|
return ZCacheService._safeOperation(() => {
|
|
379
447
|
const _key = ZCacheService._getFullKey(key, encrypt);
|
|
380
|
-
const
|
|
448
|
+
const legacyKeys = ZCacheService._getLegacyFullKeys(key, encrypt);
|
|
381
449
|
const _value = encrypt ? ZCacheService._encode(data) : JSON.stringify(data);
|
|
382
450
|
localStorage.setItem(_key, _value);
|
|
383
|
-
|
|
384
|
-
localStorage.removeItem(legacyKey);
|
|
385
|
-
}
|
|
451
|
+
legacyKeys.forEach(legacyKey => localStorage.removeItem(legacyKey));
|
|
386
452
|
return true;
|
|
387
453
|
}, false);
|
|
388
454
|
}
|
|
@@ -1251,6 +1317,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImpor
|
|
|
1251
1317
|
class ZIndexDbService {
|
|
1252
1318
|
_db = null;
|
|
1253
1319
|
_dbName;
|
|
1320
|
+
_appName;
|
|
1254
1321
|
_legacyDbName = null;
|
|
1255
1322
|
_version;
|
|
1256
1323
|
_mode;
|
|
@@ -1261,9 +1328,16 @@ class ZIndexDbService {
|
|
|
1261
1328
|
_encrypt = true;
|
|
1262
1329
|
constructor(config = {}) {
|
|
1263
1330
|
const baseDbName = config.dbName ?? Z_INDEXDB_DEFAULT_CONFIG.dbName;
|
|
1264
|
-
|
|
1331
|
+
this._appName = config.appName ?? zGetStorageAppName();
|
|
1332
|
+
if (config.appName !== undefined) {
|
|
1333
|
+
zConfigureStorageAppName(config.appName);
|
|
1334
|
+
}
|
|
1335
|
+
const scopedDbName = this._appName === undefined
|
|
1336
|
+
? zBuildLegacyScopedDbName(baseDbName)
|
|
1337
|
+
: zBuildScopedDbName(baseDbName, this._appName);
|
|
1265
1338
|
this._dbName = scopedDbName;
|
|
1266
|
-
|
|
1339
|
+
const legacyDbName = this._appName === undefined ? baseDbName : zBuildLegacyScopedDbName(baseDbName);
|
|
1340
|
+
this._legacyDbName = scopedDbName === legacyDbName ? null : legacyDbName;
|
|
1267
1341
|
this._version = config.version ?? Z_INDEXDB_DEFAULT_CONFIG.version;
|
|
1268
1342
|
this._mode = config.mode ?? Z_INDEXDB_DEFAULT_CONFIG.mode;
|
|
1269
1343
|
this._defaultStoreName = config.defaultStore ?? Z_INDEXDB_DEFAULT_CONFIG.defaultStore;
|
|
@@ -1297,17 +1371,16 @@ class ZIndexDbService {
|
|
|
1297
1371
|
return key.trim().toLowerCase();
|
|
1298
1372
|
}
|
|
1299
1373
|
_normalizeKey(key) {
|
|
1300
|
-
|
|
1301
|
-
|
|
1302
|
-
|
|
1303
|
-
|
|
1304
|
-
const scopedKey = this._normalizeKey(key);
|
|
1305
|
-
return legacyKey === scopedKey ? null : legacyKey;
|
|
1374
|
+
const normalizedKey = this._normalizeLegacyKey(key);
|
|
1375
|
+
return this._appName === undefined
|
|
1376
|
+
? zBuildLegacyScopedCacheKey(normalizedKey)
|
|
1377
|
+
: zBuildScopedCacheKey(normalizedKey, this._appName);
|
|
1306
1378
|
}
|
|
1307
1379
|
_buildStorageKeys(key, encrypt) {
|
|
1380
|
+
const normalizedKey = this._normalizeLegacyKey(key);
|
|
1308
1381
|
const scopedKey = this._normalizeKey(key);
|
|
1309
|
-
const
|
|
1310
|
-
const logicalKeys =
|
|
1382
|
+
const legacyLogicalKeys = this._appName === undefined ? [normalizedKey] : [zBuildLegacyScopedCacheKey(normalizedKey), normalizedKey];
|
|
1383
|
+
const logicalKeys = [...new Set([scopedKey, ...legacyLogicalKeys])];
|
|
1311
1384
|
if (!encrypt) {
|
|
1312
1385
|
return logicalKeys;
|
|
1313
1386
|
}
|
|
@@ -1531,6 +1604,12 @@ class ZIndexDbService {
|
|
|
1531
1604
|
}
|
|
1532
1605
|
return this._db.objectStoreNames.contains(storeName);
|
|
1533
1606
|
}
|
|
1607
|
+
_getDbOrThrow() {
|
|
1608
|
+
if (!this._db) {
|
|
1609
|
+
throw new Error('Database not initialized');
|
|
1610
|
+
}
|
|
1611
|
+
return this._db;
|
|
1612
|
+
}
|
|
1534
1613
|
async get(key, options) {
|
|
1535
1614
|
const storeConfig = this._getStoreConfig(options?.storeName);
|
|
1536
1615
|
const shouldEncrypt = this._shouldEncrypt(storeConfig, options?.encrypt);
|
|
@@ -1552,34 +1631,44 @@ class ZIndexDbService {
|
|
|
1552
1631
|
const storageKeys = this._buildStorageKeys(key, shouldEncrypt);
|
|
1553
1632
|
return new Promise(resolve => {
|
|
1554
1633
|
try {
|
|
1555
|
-
const transaction = this.
|
|
1634
|
+
const transaction = this._getDbOrThrow().transaction([storeConfig.name], this._mode);
|
|
1556
1635
|
const store = transaction.objectStore(storeConfig.name);
|
|
1557
1636
|
const request = store.get(storageKeys[0]);
|
|
1558
1637
|
request.onsuccess = () => {
|
|
1559
1638
|
const resolveData = (rawValue) => {
|
|
1560
1639
|
try {
|
|
1561
|
-
if (
|
|
1562
|
-
|
|
1563
|
-
return;
|
|
1640
|
+
if (rawValue === undefined) {
|
|
1641
|
+
return false;
|
|
1564
1642
|
}
|
|
1565
1643
|
const decrypted = shouldEncrypt ? this._decryptData(rawValue) : rawValue;
|
|
1644
|
+
if (decrypted === null) {
|
|
1645
|
+
return false;
|
|
1646
|
+
}
|
|
1566
1647
|
resolve(decrypted ?? defaultValue);
|
|
1648
|
+
return true;
|
|
1567
1649
|
}
|
|
1568
1650
|
catch {
|
|
1569
|
-
|
|
1651
|
+
return false;
|
|
1570
1652
|
}
|
|
1571
1653
|
};
|
|
1572
|
-
if (request.result) {
|
|
1573
|
-
resolveData(request.result);
|
|
1654
|
+
if (resolveData(request.result)) {
|
|
1574
1655
|
return;
|
|
1575
1656
|
}
|
|
1576
|
-
|
|
1577
|
-
|
|
1578
|
-
|
|
1579
|
-
|
|
1580
|
-
|
|
1581
|
-
|
|
1582
|
-
|
|
1657
|
+
const readFallback = (index) => {
|
|
1658
|
+
if (index >= storageKeys.length) {
|
|
1659
|
+
resolve(defaultValue);
|
|
1660
|
+
return;
|
|
1661
|
+
}
|
|
1662
|
+
const fallbackRequest = store.get(storageKeys[index]);
|
|
1663
|
+
fallbackRequest.onsuccess = () => {
|
|
1664
|
+
if (resolveData(fallbackRequest.result)) {
|
|
1665
|
+
return;
|
|
1666
|
+
}
|
|
1667
|
+
readFallback(index + 1);
|
|
1668
|
+
};
|
|
1669
|
+
fallbackRequest.onerror = () => readFallback(index + 1);
|
|
1670
|
+
};
|
|
1671
|
+
readFallback(1);
|
|
1583
1672
|
};
|
|
1584
1673
|
request.onerror = () => resolve(defaultValue);
|
|
1585
1674
|
transaction.onerror = () => resolve(defaultValue);
|
|
@@ -1612,12 +1701,10 @@ class ZIndexDbService {
|
|
|
1612
1701
|
const _value = shouldEncrypt ? this._encryptData(value) : value;
|
|
1613
1702
|
return new Promise((resolve, reject) => {
|
|
1614
1703
|
try {
|
|
1615
|
-
const transaction = this.
|
|
1704
|
+
const transaction = this._getDbOrThrow().transaction([storeConfig.name], 'readwrite');
|
|
1616
1705
|
const store = transaction.objectStore(storeConfig.name);
|
|
1617
1706
|
const request = store.put(_value, _key);
|
|
1618
|
-
|
|
1619
|
-
store.delete(storageKeys[1]);
|
|
1620
|
-
}
|
|
1707
|
+
storageKeys.slice(1).forEach(item => store.delete(item));
|
|
1621
1708
|
request.onerror = () => reject(request.error);
|
|
1622
1709
|
transaction.oncomplete = () => resolve();
|
|
1623
1710
|
transaction.onerror = () => reject(transaction.error);
|
|
@@ -1655,7 +1742,7 @@ class ZIndexDbService {
|
|
|
1655
1742
|
const keys = Array.isArray(key) ? key : [key];
|
|
1656
1743
|
return new Promise((resolve, reject) => {
|
|
1657
1744
|
try {
|
|
1658
|
-
const transaction = this.
|
|
1745
|
+
const transaction = this._getDbOrThrow().transaction([storeConfig.name], 'readwrite');
|
|
1659
1746
|
const store = transaction.objectStore(storeConfig.name);
|
|
1660
1747
|
keys.forEach(k => {
|
|
1661
1748
|
const plainKeys = this._buildStorageKeys(k, false);
|
|
@@ -1688,7 +1775,7 @@ class ZIndexDbService {
|
|
|
1688
1775
|
}
|
|
1689
1776
|
if (protectedKeys.length === 0) {
|
|
1690
1777
|
return new Promise((resolve, reject) => {
|
|
1691
|
-
const transaction = this.
|
|
1778
|
+
const transaction = this._getDbOrThrow().transaction([storeConfig.name], 'readwrite');
|
|
1692
1779
|
const store = transaction.objectStore(storeConfig.name);
|
|
1693
1780
|
const request = store.clear();
|
|
1694
1781
|
request.onsuccess = () => resolve();
|
|
@@ -1697,7 +1784,7 @@ class ZIndexDbService {
|
|
|
1697
1784
|
}
|
|
1698
1785
|
return new Promise((resolve, reject) => {
|
|
1699
1786
|
try {
|
|
1700
|
-
const transaction = this.
|
|
1787
|
+
const transaction = this._getDbOrThrow().transaction([storeConfig.name], 'readwrite');
|
|
1701
1788
|
const store = transaction.objectStore(storeConfig.name);
|
|
1702
1789
|
const keyRequest = store.getAllKeys();
|
|
1703
1790
|
const protectedSet = new Set();
|
|
@@ -1747,7 +1834,7 @@ class ZIndexDbService {
|
|
|
1747
1834
|
}
|
|
1748
1835
|
return new Promise(resolve => {
|
|
1749
1836
|
try {
|
|
1750
|
-
const transaction = this.
|
|
1837
|
+
const transaction = this._getDbOrThrow().transaction([storeConfig.name], this._mode);
|
|
1751
1838
|
const store = transaction.objectStore(storeConfig.name);
|
|
1752
1839
|
const keysRequest = store.getAllKeys();
|
|
1753
1840
|
const valuesRequest = store.getAll();
|
|
@@ -1761,7 +1848,10 @@ class ZIndexDbService {
|
|
|
1761
1848
|
const _key = this._shouldEncrypt(storeConfig) ? this._decryptData(key) : key;
|
|
1762
1849
|
const _value = this._shouldEncrypt(storeConfig) ? this._decryptData(values[index]) : values[index];
|
|
1763
1850
|
if (_key && _value !== null) {
|
|
1764
|
-
|
|
1851
|
+
const scopedKey = this._appName === undefined
|
|
1852
|
+
? zStripLegacyScopedCacheKey(_key)
|
|
1853
|
+
: zStripScopedCacheKey(_key, this._appName);
|
|
1854
|
+
results[zStripLegacyScopedCacheKey(scopedKey)] = _value;
|
|
1765
1855
|
}
|
|
1766
1856
|
}
|
|
1767
1857
|
catch {
|
|
@@ -1802,16 +1892,14 @@ class ZIndexDbService {
|
|
|
1802
1892
|
throw new Error(`Store "${storeConfig.name}" does not exist`);
|
|
1803
1893
|
}
|
|
1804
1894
|
return new Promise((resolve, reject) => {
|
|
1805
|
-
const transaction = this.
|
|
1895
|
+
const transaction = this._getDbOrThrow().transaction([storeConfig.name], 'readwrite');
|
|
1806
1896
|
const store = transaction.objectStore(storeConfig.name);
|
|
1807
1897
|
batch.forEach(([key, value]) => {
|
|
1808
1898
|
const storageKeys = this._buildStorageKeys(key, shouldEncrypt);
|
|
1809
1899
|
const _key = storageKeys[0];
|
|
1810
1900
|
const _value = shouldEncrypt ? this._encryptData(value) : value;
|
|
1811
1901
|
store.put(_value, _key);
|
|
1812
|
-
|
|
1813
|
-
store.delete(storageKeys[1]);
|
|
1814
|
-
}
|
|
1902
|
+
storageKeys.slice(1).forEach(item => store.delete(item));
|
|
1815
1903
|
});
|
|
1816
1904
|
transaction.oncomplete = () => resolve();
|
|
1817
1905
|
transaction.onerror = () => reject(transaction.error);
|
|
@@ -2584,5 +2672,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImpor
|
|
|
2584
2672
|
* Generated bundle index. Do not edit.
|
|
2585
2673
|
*/
|
|
2586
2674
|
|
|
2587
|
-
export { ZCacheService, ZDynamicRef, ZDynamicService, ZExcelService, ZHttpAbstractService, ZIndexDbService, ZOverlayContainerService, ZOverlayZIndexService, ZSubjectService, ZThemeService, ZTranslateService, Z_DEFAULT_THEME, Z_DYNAMIC_DATA, Z_EXCEL_BORDER_THIN, Z_EXCEL_CHAR_WIDTH_MAP, Z_EXCEL_COLORS, Z_EXCEL_DEFAULT_CONFIG, Z_EXCEL_FONT_MULTIPLIERS, Z_EXCEL_WIDTH_LIMITS, Z_HTTP_DEFAULT_CONFIG, Z_INDEXDB_BATCH_SIZE, Z_INDEXDB_DEFAULT_CONFIG, Z_INDEXDB_MAX_VERSION, Z_LANG_CACHE_KEY, Z_LANG_TO_LOCALE, Z_THEME_CONFIG, Z_THEME_CSS_MAP, Z_THEME_PREFERENCES_CACHE_KEY, zBuildScopedCacheKey, zBuildScopedDbName, zStripScopedCacheKey };
|
|
2675
|
+
export { ZCacheService, ZDynamicRef, ZDynamicService, ZExcelService, ZHttpAbstractService, ZIndexDbService, ZOverlayContainerService, ZOverlayZIndexService, ZSubjectService, ZThemeService, ZTranslateService, Z_CACHE_DEFAULT_PREFIX, Z_CACHE_SCOPE_SEPARATOR, Z_DB_SCOPE_SEPARATOR, Z_DEFAULT_THEME, Z_DYNAMIC_DATA, Z_EXCEL_BORDER_THIN, Z_EXCEL_CHAR_WIDTH_MAP, Z_EXCEL_COLORS, Z_EXCEL_DEFAULT_CONFIG, Z_EXCEL_FONT_MULTIPLIERS, Z_EXCEL_WIDTH_LIMITS, Z_HTTP_DEFAULT_CONFIG, Z_INDEXDB_BATCH_SIZE, Z_INDEXDB_DEFAULT_CONFIG, Z_INDEXDB_MAX_VERSION, Z_LANG_CACHE_KEY, Z_LANG_TO_LOCALE, Z_STORAGE_SCOPE_FALLBACK, Z_THEME_CONFIG, Z_THEME_CSS_MAP, Z_THEME_PREFERENCES_CACHE_KEY, zBuildLegacyScopedCacheKey, zBuildLegacyScopedDbName, zBuildScopedCacheKey, zBuildScopedDbName, zConfigureStorageAppName, zGetStorageAppName, zNormalizeStorageAppName, zStripLegacyScopedCacheKey, zStripScopedCacheKey };
|
|
2588
2676
|
//# sourceMappingURL=shival99-z-ui-services.mjs.map
|