ngx-universal-zone 1.0.7 → 2.0.1

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.
Files changed (51) hide show
  1. package/README.md +2 -0
  2. package/analytics/index.d.ts +237 -4
  3. package/database/index.d.ts +122 -6
  4. package/fesm2022/ngx-universal-zone-analytics.mjs +12 -12
  5. package/fesm2022/ngx-universal-zone-analytics.mjs.map +1 -1
  6. package/fesm2022/ngx-universal-zone-database.mjs +8 -22
  7. package/fesm2022/ngx-universal-zone-database.mjs.map +1 -1
  8. package/fesm2022/ngx-universal-zone-pipes.mjs +6 -6
  9. package/fesm2022/ngx-universal-zone-pipes.mjs.map +1 -1
  10. package/fesm2022/ngx-universal-zone-pub-sub.mjs +7 -7
  11. package/fesm2022/ngx-universal-zone-pub-sub.mjs.map +1 -1
  12. package/fesm2022/ngx-universal-zone-ui.mjs +20 -20
  13. package/fesm2022/ngx-universal-zone-ui.mjs.map +1 -1
  14. package/fesm2022/ngx-universal-zone.mjs +20 -34
  15. package/fesm2022/ngx-universal-zone.mjs.map +1 -1
  16. package/index.d.ts +184 -3
  17. package/package.json +4 -4
  18. package/pipes/index.d.ts +29 -2
  19. package/pub-sub/index.d.ts +37 -2
  20. package/ui/index.d.ts +56 -5
  21. package/analytics/analytics.module.d.ts +0 -2
  22. package/analytics/base-analytics.service.d.ts +0 -135
  23. package/analytics/firebase-analytics.service.d.ts +0 -81
  24. package/analytics/router-analytics.service.d.ts +0 -16
  25. package/database/db-base.service.d.ts +0 -37
  26. package/database/db-setting-constant.d.ts +0 -7
  27. package/database/db-web.service.d.ts +0 -50
  28. package/database/db.module.d.ts +0 -9
  29. package/database/schema.service.d.ts +0 -25
  30. package/pipes/formateDate.pipe.d.ts +0 -8
  31. package/pipes/safe.pipe.d.ts +0 -18
  32. package/pub-sub/i-hash.d.ts +0 -10
  33. package/pub-sub/ngx-pub-sub.module.d.ts +0 -7
  34. package/pub-sub/ngx-pub-sub.service.d.ts +0 -27
  35. package/pub-sub/subject-type.enum.d.ts +0 -5
  36. package/public-api.d.ts +0 -6
  37. package/shared/app-injector.d.ts +0 -6
  38. package/shared/app-setting.service.d.ts +0 -18
  39. package/shared/flag-based-preloading-strategy.d.ts +0 -12
  40. package/shared/helper.service.d.ts +0 -15
  41. package/shared/message-bus/index.d.ts +0 -4
  42. package/shared/message-bus/message-bus.d.ts +0 -15
  43. package/shared/message-bus/message-bus.testing.d.ts +0 -9
  44. package/shared/message-bus/messages.d.ts +0 -2
  45. package/shared/message-bus/models.d.ts +0 -39
  46. package/shared/universal-zone.provider.d.ts +0 -2
  47. package/ui/directives/directives.module.d.ts +0 -9
  48. package/ui/directives/long-ress.directive.d.ts +0 -21
  49. package/ui/directives/only-number.directive.d.ts +0 -7
  50. package/ui/no-data/no-data.component.d.ts +0 -13
  51. package/ui/no-data/no-data.module.d.ts +0 -8
package/README.md ADDED
@@ -0,0 +1,2 @@
1
+ # Versioning
2
+ - for Angular v19, use 1.0.7
@@ -1,4 +1,237 @@
1
- export * from './base-analytics.service';
2
- export * from './firebase-analytics.service';
3
- export * from './router-analytics.service';
4
- export * from './analytics.module';
1
+ import * as i0 from '@angular/core';
2
+ import { Provider } from '@angular/core';
3
+ import { Router } from '@angular/router';
4
+
5
+ interface IAnalyticsConfig {
6
+ apiKey: string;
7
+ authDomain: string;
8
+ projectId: string;
9
+ storageBucket: string;
10
+ messagingSenderId: string;
11
+ appId: string;
12
+ measurementId: string;
13
+ }
14
+ interface IAnalyticsService {
15
+ /**
16
+ * Track page view
17
+ */
18
+ trackPageView(pageName: string, pageTitle?: string): void;
19
+ /**
20
+ * Track button click events
21
+ */
22
+ trackButtonClick(buttonName: string, buttonLocation?: string): void;
23
+ /**
24
+ * Track user navigation events
25
+ */
26
+ trackNavigation(from: string, to: string, method?: string): void;
27
+ /**
28
+ * Track user actions in the app
29
+ */
30
+ trackUserAction(action: string, category: string, label?: string, value?: number): void;
31
+ /**
32
+ * Track business-specific events
33
+ */
34
+ trackBusinessEvent(eventName: string, parameters: {
35
+ [key: string]: any;
36
+ }): void;
37
+ /**
38
+ * Track errors that occur in the app
39
+ */
40
+ trackError(errorMessage: string, errorLocation: string, errorType?: string): void;
41
+ /**
42
+ * Set user ID for analytics
43
+ */
44
+ setUserId(userId: string): void;
45
+ /**
46
+ * Set user properties
47
+ */
48
+ setUserProperties(properties: {
49
+ [key: string]: any;
50
+ }): void;
51
+ /**
52
+ * Test analytics functionality
53
+ */
54
+ testAnalytics(): void;
55
+ /**
56
+ * Get analytics debug info
57
+ */
58
+ getDebugInfo(): any;
59
+ /**
60
+ * Dashboard specific events
61
+ */
62
+ trackDashboardEvents: {
63
+ dashboardViewed(): void;
64
+ dashboardButtonClicked(buttonType: string): void;
65
+ storeInfoClicked(): void;
66
+ lottieAnimationCompleted(): void;
67
+ syncStatusViewed(status: string): void;
68
+ };
69
+ }
70
+ declare abstract class BaseAnalyticsService implements IAnalyticsService {
71
+ protected isDebugMode: boolean;
72
+ protected eventCount: number;
73
+ abstract trackPageView(pageName: string, pageTitle?: string): void;
74
+ abstract trackButtonClick(buttonName: string, buttonLocation?: string): void;
75
+ abstract trackNavigation(from: string, to: string, method?: string): void;
76
+ abstract trackUserAction(action: string, category: string, label?: string, value?: number): void;
77
+ abstract trackBusinessEvent(eventName: string, parameters: {
78
+ [key: string]: any;
79
+ }): void;
80
+ abstract trackError(errorMessage: string, errorLocation: string, errorType?: string): void;
81
+ abstract setUserId(userId: string): void;
82
+ abstract setUserProperties(properties: {
83
+ [key: string]: any;
84
+ }): void;
85
+ abstract testAnalytics(): void;
86
+ abstract getDebugInfo(): any;
87
+ /**
88
+ * Dashboard specific events
89
+ */
90
+ abstract trackDashboardEvents: {
91
+ dashboardViewed(): void;
92
+ dashboardButtonClicked(buttonType: string): void;
93
+ storeInfoClicked(): void;
94
+ lottieAnimationCompleted(): void;
95
+ syncStatusViewed(status: string): void;
96
+ };
97
+ /**
98
+ * Internal method to track event count in debug mode
99
+ */
100
+ protected incrementEventCount(): void;
101
+ /**
102
+ * Log debug information
103
+ */
104
+ protected logDebug(message: string, data?: any): void;
105
+ static ɵfac: i0.ɵɵFactoryDeclaration<BaseAnalyticsService, never>;
106
+ static ɵprov: i0.ɵɵInjectableDeclaration<BaseAnalyticsService>;
107
+ }
108
+ /**
109
+ * No-op implementation for development environment
110
+ */
111
+ declare class NoOpAnalyticsService extends BaseAnalyticsService {
112
+ trackPageView(pageName: string, pageTitle?: string): void;
113
+ trackButtonClick(buttonName: string, buttonLocation?: string): void;
114
+ trackNavigation(from: string, to: string, method?: string): void;
115
+ trackUserAction(action: string, category: string, label?: string, value?: number): void;
116
+ trackBusinessEvent(eventName: string, parameters: {
117
+ [key: string]: any;
118
+ }): void;
119
+ trackError(errorMessage: string, errorLocation: string, errorType?: string): void;
120
+ setUserId(userId: string): void;
121
+ setUserProperties(properties: {
122
+ [key: string]: any;
123
+ }): void;
124
+ testAnalytics(): void;
125
+ getDebugInfo(): any;
126
+ /**
127
+ * Dashboard specific events
128
+ */
129
+ trackDashboardEvents: {
130
+ dashboardViewed: () => void;
131
+ dashboardButtonClicked: (buttonType: string) => void;
132
+ storeInfoClicked: () => void;
133
+ lottieAnimationCompleted: () => void;
134
+ syncStatusViewed: (status: string) => void;
135
+ };
136
+ static ɵfac: i0.ɵɵFactoryDeclaration<NoOpAnalyticsService, never>;
137
+ static ɵprov: i0.ɵɵInjectableDeclaration<NoOpAnalyticsService>;
138
+ }
139
+
140
+ interface IFirebaseAnalytics {
141
+ logEvent: (eventName: string, parameters?: {
142
+ [key: string]: any;
143
+ }) => void;
144
+ setUserId: (userId: string) => void;
145
+ setUserProperties: (properties: {
146
+ [key: string]: any;
147
+ }) => void;
148
+ setCurrentScreen: (screenName: string) => void;
149
+ }
150
+ declare class FirebaseAnalyticsService extends BaseAnalyticsService {
151
+ private analytics;
152
+ private config;
153
+ constructor();
154
+ /**
155
+ * Initialize Firebase Analytics
156
+ */
157
+ initialize(analytics: IFirebaseAnalytics, config: IAnalyticsConfig, isDebugMode?: boolean): void;
158
+ /**
159
+ * Monitor gtag calls for debugging
160
+ */
161
+ private monitorGtagCalls;
162
+ /**
163
+ * Track page view
164
+ */
165
+ trackPageView(pageName: string, pageTitle?: string): void;
166
+ /**
167
+ * Track button click events
168
+ */
169
+ trackButtonClick(buttonName: string, buttonLocation?: string): void;
170
+ /**
171
+ * Track user navigation events
172
+ */
173
+ trackNavigation(from: string, to: string, method?: string): void;
174
+ /**
175
+ * Track user actions in the app
176
+ */
177
+ trackUserAction(action: string, category: string, label?: string, value?: number): void;
178
+ /**
179
+ * Track business-specific events
180
+ */
181
+ trackBusinessEvent(eventName: string, parameters: {
182
+ [key: string]: any;
183
+ }): void;
184
+ /**
185
+ * Track errors that occur in the app
186
+ */
187
+ trackError(errorMessage: string, errorLocation: string, errorType?: string): void;
188
+ /**
189
+ * Set user ID for analytics
190
+ */
191
+ setUserId(userId: string): void;
192
+ /**
193
+ * Set user properties
194
+ */
195
+ setUserProperties(properties: {
196
+ [key: string]: any;
197
+ }): void;
198
+ /**
199
+ * Test analytics functionality
200
+ */
201
+ testAnalytics(): void;
202
+ /**
203
+ * Get analytics debug info
204
+ */
205
+ getDebugInfo(): any;
206
+ /**
207
+ * Dashboard specific events
208
+ */
209
+ trackDashboardEvents: {
210
+ dashboardViewed: () => void;
211
+ dashboardButtonClicked: (buttonType: string) => void;
212
+ storeInfoClicked: () => void;
213
+ lottieAnimationCompleted: () => void;
214
+ syncStatusViewed: (status: string) => void;
215
+ };
216
+ static ɵfac: i0.ɵɵFactoryDeclaration<FirebaseAnalyticsService, never>;
217
+ static ɵprov: i0.ɵɵInjectableDeclaration<FirebaseAnalyticsService>;
218
+ }
219
+
220
+ declare class RouterAnalyticsService {
221
+ private router;
222
+ private analyticsService;
223
+ private previousUrl;
224
+ private currentUrl;
225
+ constructor(router: Router, analyticsService: BaseAnalyticsService);
226
+ private initializeRouterTracking;
227
+ private trackPageView;
228
+ private trackNavigation;
229
+ private getPageNameFromUrl;
230
+ static ɵfac: i0.ɵɵFactoryDeclaration<RouterAnalyticsService, never>;
231
+ static ɵprov: i0.ɵɵInjectableDeclaration<RouterAnalyticsService>;
232
+ }
233
+
234
+ declare function provideUzAnalytics(): Provider[];
235
+
236
+ export { BaseAnalyticsService, FirebaseAnalyticsService, NoOpAnalyticsService, RouterAnalyticsService, provideUzAnalytics };
237
+ export type { IAnalyticsConfig, IAnalyticsService, IFirebaseAnalytics };
@@ -1,6 +1,122 @@
1
- export * from './db-base.service';
2
- export * from './db-web.service';
3
- export * from './db-base.service';
4
- export * from './schema.service';
5
- export * from './db-setting-constant';
6
- export * from './db.module';
1
+ import { Observable } from 'rxjs';
2
+ import * as i0 from '@angular/core';
3
+ import { EnvironmentProviders } from '@angular/core';
4
+ import Dexie from 'dexie';
5
+
6
+ interface ITableOptions {
7
+ name: string;
8
+ columns: Array<{
9
+ name: any;
10
+ isPrimaryKey?: any;
11
+ type?: any;
12
+ }>;
13
+ }
14
+ declare class SchemaService {
15
+ schema: {
16
+ stores: ITableOptions[];
17
+ };
18
+ tables: Record<string, string>;
19
+ private _config;
20
+ /**
21
+ * Represents a SchemaService that manages the database schema.
22
+ */
23
+ constructor();
24
+ get config(): DbServiceConfig;
25
+ init(config: DbServiceConfig): void;
26
+ static ɵfac: i0.ɵɵFactoryDeclaration<SchemaService, never>;
27
+ static ɵprov: i0.ɵɵInjectableDeclaration<SchemaService>;
28
+ }
29
+
30
+ declare class DbWebService extends Dexie implements DbService {
31
+ private config;
32
+ private schemaService;
33
+ private _db;
34
+ private dbInitialized;
35
+ constructor(config: DbServiceConfig, schemaService: SchemaService);
36
+ dbInitialized$: Observable<any>;
37
+ get Db(): Dexie;
38
+ putLocal(store: any, data: any): Promise<{
39
+ rowsAffected: any;
40
+ insertId: any;
41
+ }>;
42
+ putLocalRx(store: any, data: any): Observable<unknown>;
43
+ get<T>(store: string, key: any): Promise<T>;
44
+ getRx<T>(store: string, key: any): Observable<T>;
45
+ getByFieldName<T>(storeName: any, fieldName: any, key: any): Promise<Array<T>>;
46
+ getAll<T>(store: string, opt?: DbFilter): Promise<T>;
47
+ getAllRx<T>(store: string, opt?: DbFilter): Observable<T>;
48
+ remove(store: any, key: any): Promise<any>;
49
+ removeRx(store: any, key: any): Observable<any>;
50
+ removeAll(store: any): Promise<void>;
51
+ removeAllRx(store: string): Observable<any[]>;
52
+ count(store: any, opts?: {
53
+ key: any;
54
+ }): Promise<number>;
55
+ countRx(store: any, opts?: {
56
+ key: any;
57
+ }): Observable<number>;
58
+ deleteDb(): Promise<unknown>;
59
+ deleteTable(store: any): Observable<void>;
60
+ }
61
+ interface DbFilter {
62
+ key?: any;
63
+ value?: any;
64
+ keyRange?: KeyRangeType;
65
+ pageIndex?: number;
66
+ pageSize?: number;
67
+ sortBy?: any;
68
+ sortType?: 'asc' | 'desc';
69
+ }
70
+ declare enum KeyRangeType {
71
+ equalToIgnoreCase = 1,
72
+ startsWithIgnoreCase = 2,
73
+ equalTo = 3,
74
+ notEqualTo = 4
75
+ }
76
+
77
+ declare class DbServiceConfig {
78
+ dbName: string;
79
+ schema: ITableOptions[];
80
+ }
81
+ declare enum DbServiceType {
82
+ IndexDd = 0,
83
+ Sqlite = 1
84
+ }
85
+ declare abstract class DbService {
86
+ dbInitialized$: Observable<any>;
87
+ get Db(): any;
88
+ putLocal(store: any, data: any): Promise<{
89
+ rowsAffected: any;
90
+ insertId: any;
91
+ }>;
92
+ putLocalRx(store: any, data: any): Observable<any>;
93
+ get<T>(store: string, key: any): Promise<T>;
94
+ getRx<T>(store: string, key: any): Observable<T>;
95
+ getAll<T>(store: string, opt?: DbFilter): Promise<T>;
96
+ getAllRx<T>(store: string, opt?: DbFilter): Observable<T>;
97
+ remove(store: any, id: any): Promise<any>;
98
+ removeRx(store: any, key: any): Observable<any>;
99
+ removeAll(store: any): Promise<any>;
100
+ removeAllRx(store: string): Observable<any>;
101
+ count(store: any, opts?: {
102
+ key: any;
103
+ }): Promise<number>;
104
+ countRx(store: any, opts?: {
105
+ key: any;
106
+ }): Observable<number>;
107
+ deleteDb(): Promise<any>;
108
+ deleteTable(store: any): Observable<void>;
109
+ }
110
+
111
+ declare class DbSettingConstant {
112
+ static readonly SETTING = "setting";
113
+ }
114
+ declare const DbSettingConfig: {
115
+ schema: ITableOptions;
116
+ };
117
+
118
+ declare function dbFactory(schemaSvc: SchemaService): DbWebService;
119
+ declare function provideDb(): EnvironmentProviders;
120
+
121
+ export { DbService, DbServiceConfig, DbServiceType, DbSettingConfig, DbSettingConstant, DbWebService, KeyRangeType, SchemaService, dbFactory, provideDb };
122
+ export type { DbFilter, ITableOptions };
@@ -29,10 +29,10 @@ class BaseAnalyticsService {
29
29
  });
30
30
  }
31
31
  }
32
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: BaseAnalyticsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
33
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: BaseAnalyticsService, providedIn: 'root' }); }
32
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: BaseAnalyticsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
33
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: BaseAnalyticsService, providedIn: 'root' }); }
34
34
  }
35
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: BaseAnalyticsService, decorators: [{
35
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: BaseAnalyticsService, decorators: [{
36
36
  type: Injectable,
37
37
  args: [{
38
38
  providedIn: 'root'
@@ -99,10 +99,10 @@ class NoOpAnalyticsService extends BaseAnalyticsService {
99
99
  eventCount: this.eventCount
100
100
  };
101
101
  }
102
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: NoOpAnalyticsService, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
103
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: NoOpAnalyticsService, providedIn: 'root' }); }
102
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: NoOpAnalyticsService, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
103
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: NoOpAnalyticsService, providedIn: 'root' }); }
104
104
  }
105
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: NoOpAnalyticsService, decorators: [{
105
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: NoOpAnalyticsService, decorators: [{
106
106
  type: Injectable,
107
107
  args: [{
108
108
  providedIn: 'root'
@@ -303,10 +303,10 @@ class FirebaseAnalyticsService extends BaseAnalyticsService {
303
303
  config: this.config
304
304
  };
305
305
  }
306
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: FirebaseAnalyticsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
307
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: FirebaseAnalyticsService, providedIn: 'root' }); }
306
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: FirebaseAnalyticsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
307
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: FirebaseAnalyticsService, providedIn: 'root' }); }
308
308
  }
309
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: FirebaseAnalyticsService, decorators: [{
309
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: FirebaseAnalyticsService, decorators: [{
310
310
  type: Injectable,
311
311
  args: [{
312
312
  providedIn: 'root'
@@ -375,10 +375,10 @@ class RouterAnalyticsService {
375
375
  // Default: remove leading slash and take first segment
376
376
  return cleanUrl.replace('/', '').split('/')[0] || 'unknown';
377
377
  }
378
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: RouterAnalyticsService, deps: [{ token: i1.Router }, { token: BaseAnalyticsService }], target: i0.ɵɵFactoryTarget.Injectable }); }
379
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: RouterAnalyticsService, providedIn: 'root' }); }
378
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: RouterAnalyticsService, deps: [{ token: i1.Router }, { token: BaseAnalyticsService }], target: i0.ɵɵFactoryTarget.Injectable }); }
379
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: RouterAnalyticsService, providedIn: 'root' }); }
380
380
  }
381
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: RouterAnalyticsService, decorators: [{
381
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: RouterAnalyticsService, decorators: [{
382
382
  type: Injectable,
383
383
  args: [{
384
384
  providedIn: 'root'
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-universal-zone-analytics.mjs","sources":["../../../projects/ngx-universal-zone/analytics/base-analytics.service.ts","../../../projects/ngx-universal-zone/analytics/firebase-analytics.service.ts","../../../projects/ngx-universal-zone/analytics/router-analytics.service.ts","../../../projects/ngx-universal-zone/analytics/analytics.module.ts","../../../projects/ngx-universal-zone/analytics/ngx-universal-zone-analytics.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\nexport interface IAnalyticsConfig {\n apiKey: string;\n authDomain: string;\n projectId: string;\n storageBucket: string;\n messagingSenderId: string;\n appId: string;\n measurementId: string;\n}\n\nexport interface IAnalyticsService {\n /**\n * Track page view\n */\n trackPageView(pageName: string, pageTitle?: string): void;\n \n /**\n * Track button click events\n */\n trackButtonClick(buttonName: string, buttonLocation?: string): void;\n \n /**\n * Track user navigation events\n */\n trackNavigation(from: string, to: string, method?: string): void;\n \n /**\n * Track user actions in the app\n */\n trackUserAction(action: string, category: string, label?: string, value?: number): void;\n \n /**\n * Track business-specific events\n */\n trackBusinessEvent(eventName: string, parameters: { [key: string]: any }): void;\n \n /**\n * Track errors that occur in the app\n */\n trackError(errorMessage: string, errorLocation: string, errorType?: string): void;\n \n /**\n * Set user ID for analytics\n */\n setUserId(userId: string): void;\n \n /**\n * Set user properties\n */\n setUserProperties(properties: { [key: string]: any }): void;\n \n /**\n * Test analytics functionality\n */\n testAnalytics(): void;\n \n /**\n * Get analytics debug info\n */\n getDebugInfo(): any;\n\n /**\n * Dashboard specific events\n */\n trackDashboardEvents: {\n dashboardViewed(): void;\n dashboardButtonClicked(buttonType: string): void;\n storeInfoClicked(): void;\n lottieAnimationCompleted(): void;\n syncStatusViewed(status: string): void;\n };\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport abstract class BaseAnalyticsService implements IAnalyticsService {\n protected isDebugMode = false;\n protected eventCount = 0;\n \n abstract trackPageView(pageName: string, pageTitle?: string): void;\n abstract trackButtonClick(buttonName: string, buttonLocation?: string): void;\n abstract trackNavigation(from: string, to: string, method?: string): void;\n abstract trackUserAction(action: string, category: string, label?: string, value?: number): void;\n abstract trackBusinessEvent(eventName: string, parameters: { [key: string]: any }): void;\n abstract trackError(errorMessage: string, errorLocation: string, errorType?: string): void;\n abstract setUserId(userId: string): void;\n abstract setUserProperties(properties: { [key: string]: any }): void;\n abstract testAnalytics(): void;\n abstract getDebugInfo(): any;\n \n /**\n * Dashboard specific events\n */\n abstract trackDashboardEvents: {\n dashboardViewed(): void;\n dashboardButtonClicked(buttonType: string): void;\n storeInfoClicked(): void;\n lottieAnimationCompleted(): void;\n syncStatusViewed(status: string): void;\n };\n \n /**\n * Internal method to track event count in debug mode\n */\n protected incrementEventCount() {\n if (this.isDebugMode) {\n this.eventCount++;\n console.log(`[Analytics] Total events tracked: ${this.eventCount}`);\n }\n }\n\n /**\n * Log debug information\n */\n protected logDebug(message: string, data?: any) {\n if (this.isDebugMode) {\n console.log(`[Analytics] ${message}`, {\n ...data,\n timestamp: new Date().toISOString()\n });\n }\n }\n}\n\n/**\n * No-op implementation for development environment\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class NoOpAnalyticsService extends BaseAnalyticsService {\n trackPageView(pageName: string, pageTitle?: string): void {\n this.logDebug(`[Dev] Page View: ${pageName}`, { pageTitle });\n }\n\n trackButtonClick(buttonName: string, buttonLocation?: string): void {\n this.logDebug(`[Dev] Button Click: ${buttonName}`, { buttonLocation });\n }\n\n trackNavigation(from: string, to: string, method?: string): void {\n this.logDebug(`[Dev] Navigation: ${from} -> ${to}`, { method });\n }\n\n trackUserAction(action: string, category: string, label?: string, value?: number): void {\n this.logDebug(`[Dev] User Action: ${action}`, { category, label, value });\n }\n\n trackBusinessEvent(eventName: string, parameters: { [key: string]: any }): void {\n this.logDebug(`[Dev] Business Event: ${eventName}`, parameters);\n }\n\n trackError(errorMessage: string, errorLocation: string, errorType?: string): void {\n this.logDebug(`[Dev] Error: ${errorMessage}`, { errorLocation, errorType });\n }\n\n setUserId(userId: string): void {\n this.logDebug(`[Dev] Set User ID: ${userId}`);\n }\n\n setUserProperties(properties: { [key: string]: any }): void {\n this.logDebug(`[Dev] Set User Properties:`, properties);\n }\n\n testAnalytics(): void {\n console.log('[Dev] Analytics test - no-op implementation');\n }\n\n getDebugInfo(): any {\n return {\n implementation: 'no-op',\n isDebugMode: this.isDebugMode,\n eventCount: this.eventCount\n };\n }\n\n /**\n * Dashboard specific events\n */\n trackDashboardEvents = {\n dashboardViewed: () => {\n this.logDebug('[Dev] Dashboard viewed');\n },\n \n dashboardButtonClicked: (buttonType: string) => {\n this.logDebug(`[Dev] Dashboard button clicked: ${buttonType}`);\n },\n \n storeInfoClicked: () => {\n this.logDebug('[Dev] Store info clicked');\n },\n \n lottieAnimationCompleted: () => {\n this.logDebug('[Dev] Lottie animation completed');\n },\n \n syncStatusViewed: (status: string) => {\n this.logDebug(`[Dev] Sync status viewed: ${status}`);\n }\n };\n}\n","import { Injectable } from '@angular/core';\nimport { BaseAnalyticsService, IAnalyticsConfig } from './base-analytics.service';\n\n// Firebase Analytics types (to avoid importing Firebase directly in the base library)\nexport interface IFirebaseAnalytics {\n logEvent: (eventName: string, parameters?: { [key: string]: any }) => void;\n setUserId: (userId: string) => void;\n setUserProperties: (properties: { [key: string]: any }) => void;\n setCurrentScreen: (screenName: string) => void;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FirebaseAnalyticsService extends BaseAnalyticsService {\n private analytics: IFirebaseAnalytics | null = null;\n private config: IAnalyticsConfig | null = null;\n \n constructor() {\n super();\n }\n\n /**\n * Initialize Firebase Analytics\n */\n initialize(analytics: IFirebaseAnalytics, config: IAnalyticsConfig, isDebugMode: boolean = false) {\n this.analytics = analytics;\n this.config = config;\n this.isDebugMode = isDebugMode;\n \n if (this.isDebugMode) {\n console.log('[Firebase Analytics] Service initialized in debug mode');\n console.log('[Firebase Analytics] Config:', config);\n this.monitorGtagCalls();\n }\n }\n\n /**\n * Monitor gtag calls for debugging\n */\n private monitorGtagCalls() {\n const originalGtag = (window as any).gtag;\n if (originalGtag) {\n (window as any).gtag = (...args: any[]) => {\n console.log('[Firebase Analytics] gtag call:', args);\n return originalGtag.apply(window, args);\n };\n }\n }\n\n /**\n * Track page view\n */\n trackPageView(pageName: string, pageTitle?: string): void {\n if (!this.analytics) return;\n \n this.logDebug(`Page View: ${pageName}`, { page_title: pageTitle });\n \n // Set current screen\n this.analytics.setCurrentScreen(pageName);\n \n // Log page view event\n this.analytics.logEvent('page_view', {\n page_name: pageName,\n page_title: pageTitle || pageName\n });\n \n this.incrementEventCount();\n }\n\n /**\n * Track button click events\n */\n trackButtonClick(buttonName: string, buttonLocation?: string): void {\n if (!this.analytics) return;\n \n this.logDebug(`Button Click: ${buttonName}`, { location: buttonLocation });\n \n this.analytics.logEvent('button_click', {\n button_name: buttonName,\n button_location: buttonLocation || 'unknown'\n });\n \n this.incrementEventCount();\n }\n\n /**\n * Track user navigation events\n */\n trackNavigation(from: string, to: string, method: string = 'click'): void {\n if (!this.analytics) return;\n \n this.logDebug(`Navigation: ${from} -> ${to}`, { method });\n \n this.analytics.logEvent('navigation', {\n from_page: from,\n to_page: to,\n method: method\n });\n \n this.incrementEventCount();\n }\n\n /**\n * Track user actions in the app\n */\n trackUserAction(action: string, category: string, label?: string, value?: number): void {\n if (!this.analytics) return;\n \n this.logDebug(`User Action: ${action}`, { category, label, value });\n \n this.analytics.logEvent('user_action', {\n action: action,\n category: category,\n label: label || '',\n value: value || 0\n });\n \n this.incrementEventCount();\n }\n\n /**\n * Track business-specific events\n */\n trackBusinessEvent(eventName: string, parameters: { [key: string]: any }): void {\n if (!this.analytics) return;\n \n this.logDebug(`Business Event: ${eventName}`, parameters);\n \n this.analytics.logEvent(eventName, parameters);\n \n this.incrementEventCount();\n }\n\n /**\n * Track errors that occur in the app\n */\n trackError(errorMessage: string, errorLocation: string, errorType: string = 'runtime'): void {\n if (!this.analytics) return;\n \n this.logDebug(`Error: ${errorMessage}`, { location: errorLocation, type: errorType });\n \n this.analytics.logEvent('error', {\n error_message: errorMessage,\n error_location: errorLocation,\n error_type: errorType\n });\n \n this.incrementEventCount();\n }\n\n /**\n * Set user ID for analytics\n */\n setUserId(userId: string): void {\n if (!this.analytics) return;\n \n this.logDebug(`Set User ID: ${userId}`);\n \n this.analytics.setUserId(userId);\n }\n\n /**\n * Set user properties\n */\n setUserProperties(properties: { [key: string]: any }): void {\n if (!this.analytics) return;\n \n this.logDebug(`Set User Properties:`, properties);\n \n this.analytics.setUserProperties(properties);\n }\n\n /**\n * Test analytics functionality\n */\n testAnalytics(): void {\n console.log('[Analytics] Testing Firebase Analytics...');\n console.log('[Analytics] Analytics initialized:', !!this.analytics);\n console.log('[Analytics] Config:', this.config);\n \n if (!this.analytics) {\n console.error('[Analytics] Analytics not initialized! Call initialize() first.');\n return;\n }\n \n // Test events\n this.trackBusinessEvent('analytics_test', {\n test_type: 'manual_validation',\n timestamp: Date.now(),\n user_agent: navigator.userAgent\n });\n \n this.trackPageView('test_page', 'Analytics Test Page');\n this.trackButtonClick('test_button', 'analytics_validation');\n \n console.log('[Analytics] Test events sent.');\n }\n\n /**\n * Get analytics debug info\n */\n getDebugInfo(): any {\n return {\n isDebugMode: this.isDebugMode,\n eventCount: this.eventCount,\n analyticsInitialized: !!this.analytics,\n config: this.config\n };\n }\n\n /**\n * Dashboard specific events\n */\n trackDashboardEvents = {\n dashboardViewed: () => {\n this.trackPageView('dashboard', 'Dashboard');\n },\n \n dashboardButtonClicked: (buttonType: string) => {\n this.trackButtonClick(`dashboard_${buttonType}`, 'dashboard');\n this.trackBusinessEvent('dashboard_action', {\n action_type: buttonType,\n screen: 'dashboard'\n });\n },\n \n storeInfoClicked: () => {\n this.trackButtonClick('store_info', 'dashboard');\n this.trackBusinessEvent('store_interaction', {\n action: 'info_clicked',\n screen: 'dashboard'\n });\n },\n \n lottieAnimationCompleted: () => {\n this.trackUserAction('lottie_animation_completed', 'ui_interaction', 'dashboard');\n },\n \n syncStatusViewed: (status: string) => {\n this.trackBusinessEvent('sync_status_viewed', {\n status: status,\n screen: 'dashboard'\n });\n }\n };\n}\n","import { Injectable } from '@angular/core';\nimport { Router, NavigationEnd } from '@angular/router';\nimport { filter } from 'rxjs/operators';\nimport { BaseAnalyticsService } from './base-analytics.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class RouterAnalyticsService {\n private previousUrl: string = '';\n private currentUrl: string = '';\n\n constructor(\n private router: Router,\n private analyticsService: BaseAnalyticsService\n ) {\n this.initializeRouterTracking();\n }\n\n private initializeRouterTracking() {\n this.router.events\n .pipe(filter(event => event instanceof NavigationEnd))\n .subscribe((event: NavigationEnd) => {\n this.previousUrl = this.currentUrl;\n this.currentUrl = event.url;\n \n // Track page view\n this.trackPageView(event.url);\n \n // Track navigation if we have a previous URL\n if (this.previousUrl && this.previousUrl !== this.currentUrl) {\n this.trackNavigation(this.previousUrl, this.currentUrl);\n }\n });\n }\n\n private trackPageView(url: string) {\n try {\n const pageName = this.getPageNameFromUrl(url);\n if (this.analyticsService && typeof this.analyticsService.trackPageView === 'function') {\n this.analyticsService.trackPageView(pageName, `Page: ${pageName}`);\n }\n } catch (error) {\n console.warn('[RouterAnalytics] Error tracking page view:', error);\n }\n }\n\n private trackNavigation(from: string, to: string) {\n try {\n const fromPage = this.getPageNameFromUrl(from);\n const toPage = this.getPageNameFromUrl(to);\n if (this.analyticsService && typeof this.analyticsService.trackNavigation === 'function') {\n this.analyticsService.trackNavigation(fromPage, toPage, 'router_navigation');\n }\n } catch (error) {\n console.warn('[RouterAnalytics] Error tracking navigation:', error);\n }\n }\n\n private getPageNameFromUrl(url: string): string {\n // Remove query parameters and fragments\n const cleanUrl = url.split('?')[0].split('#')[0];\n \n // Handle specific routes\n if (cleanUrl === '/' || cleanUrl === '/home') return 'dashboard';\n if (cleanUrl.startsWith('/admin')) return 'admin';\n if (cleanUrl.startsWith('/checkout')) return 'checkout';\n if (cleanUrl.startsWith('/auth')) return 'auth';\n if (cleanUrl.startsWith('/store')) return 'store';\n \n // Default: remove leading slash and take first segment\n return cleanUrl.replace('/', '').split('/')[0] || 'unknown';\n }\n}\n","import { Provider } from '@angular/core';\nimport { BaseAnalyticsService, NoOpAnalyticsService } from './base-analytics.service';\nimport { RouterAnalyticsService } from './router-analytics.service';\n\nexport function provideUzAnalytics(): Provider[] {\n return [\n {\n provide: BaseAnalyticsService,\n useClass: NoOpAnalyticsService\n },\n RouterAnalyticsService,\n ];\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2.BaseAnalyticsService"],"mappings":"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"}
1
+ {"version":3,"file":"ngx-universal-zone-analytics.mjs","sources":["../../../projects/ngx-universal-zone/analytics/base-analytics.service.ts","../../../projects/ngx-universal-zone/analytics/firebase-analytics.service.ts","../../../projects/ngx-universal-zone/analytics/router-analytics.service.ts","../../../projects/ngx-universal-zone/analytics/analytics.module.ts","../../../projects/ngx-universal-zone/analytics/ngx-universal-zone-analytics.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\nexport interface IAnalyticsConfig {\n apiKey: string;\n authDomain: string;\n projectId: string;\n storageBucket: string;\n messagingSenderId: string;\n appId: string;\n measurementId: string;\n}\n\nexport interface IAnalyticsService {\n /**\n * Track page view\n */\n trackPageView(pageName: string, pageTitle?: string): void;\n \n /**\n * Track button click events\n */\n trackButtonClick(buttonName: string, buttonLocation?: string): void;\n \n /**\n * Track user navigation events\n */\n trackNavigation(from: string, to: string, method?: string): void;\n \n /**\n * Track user actions in the app\n */\n trackUserAction(action: string, category: string, label?: string, value?: number): void;\n \n /**\n * Track business-specific events\n */\n trackBusinessEvent(eventName: string, parameters: { [key: string]: any }): void;\n \n /**\n * Track errors that occur in the app\n */\n trackError(errorMessage: string, errorLocation: string, errorType?: string): void;\n \n /**\n * Set user ID for analytics\n */\n setUserId(userId: string): void;\n \n /**\n * Set user properties\n */\n setUserProperties(properties: { [key: string]: any }): void;\n \n /**\n * Test analytics functionality\n */\n testAnalytics(): void;\n \n /**\n * Get analytics debug info\n */\n getDebugInfo(): any;\n\n /**\n * Dashboard specific events\n */\n trackDashboardEvents: {\n dashboardViewed(): void;\n dashboardButtonClicked(buttonType: string): void;\n storeInfoClicked(): void;\n lottieAnimationCompleted(): void;\n syncStatusViewed(status: string): void;\n };\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport abstract class BaseAnalyticsService implements IAnalyticsService {\n protected isDebugMode = false;\n protected eventCount = 0;\n \n abstract trackPageView(pageName: string, pageTitle?: string): void;\n abstract trackButtonClick(buttonName: string, buttonLocation?: string): void;\n abstract trackNavigation(from: string, to: string, method?: string): void;\n abstract trackUserAction(action: string, category: string, label?: string, value?: number): void;\n abstract trackBusinessEvent(eventName: string, parameters: { [key: string]: any }): void;\n abstract trackError(errorMessage: string, errorLocation: string, errorType?: string): void;\n abstract setUserId(userId: string): void;\n abstract setUserProperties(properties: { [key: string]: any }): void;\n abstract testAnalytics(): void;\n abstract getDebugInfo(): any;\n \n /**\n * Dashboard specific events\n */\n abstract trackDashboardEvents: {\n dashboardViewed(): void;\n dashboardButtonClicked(buttonType: string): void;\n storeInfoClicked(): void;\n lottieAnimationCompleted(): void;\n syncStatusViewed(status: string): void;\n };\n \n /**\n * Internal method to track event count in debug mode\n */\n protected incrementEventCount() {\n if (this.isDebugMode) {\n this.eventCount++;\n console.log(`[Analytics] Total events tracked: ${this.eventCount}`);\n }\n }\n\n /**\n * Log debug information\n */\n protected logDebug(message: string, data?: any) {\n if (this.isDebugMode) {\n console.log(`[Analytics] ${message}`, {\n ...data,\n timestamp: new Date().toISOString()\n });\n }\n }\n}\n\n/**\n * No-op implementation for development environment\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class NoOpAnalyticsService extends BaseAnalyticsService {\n trackPageView(pageName: string, pageTitle?: string): void {\n this.logDebug(`[Dev] Page View: ${pageName}`, { pageTitle });\n }\n\n trackButtonClick(buttonName: string, buttonLocation?: string): void {\n this.logDebug(`[Dev] Button Click: ${buttonName}`, { buttonLocation });\n }\n\n trackNavigation(from: string, to: string, method?: string): void {\n this.logDebug(`[Dev] Navigation: ${from} -> ${to}`, { method });\n }\n\n trackUserAction(action: string, category: string, label?: string, value?: number): void {\n this.logDebug(`[Dev] User Action: ${action}`, { category, label, value });\n }\n\n trackBusinessEvent(eventName: string, parameters: { [key: string]: any }): void {\n this.logDebug(`[Dev] Business Event: ${eventName}`, parameters);\n }\n\n trackError(errorMessage: string, errorLocation: string, errorType?: string): void {\n this.logDebug(`[Dev] Error: ${errorMessage}`, { errorLocation, errorType });\n }\n\n setUserId(userId: string): void {\n this.logDebug(`[Dev] Set User ID: ${userId}`);\n }\n\n setUserProperties(properties: { [key: string]: any }): void {\n this.logDebug(`[Dev] Set User Properties:`, properties);\n }\n\n testAnalytics(): void {\n console.log('[Dev] Analytics test - no-op implementation');\n }\n\n getDebugInfo(): any {\n return {\n implementation: 'no-op',\n isDebugMode: this.isDebugMode,\n eventCount: this.eventCount\n };\n }\n\n /**\n * Dashboard specific events\n */\n trackDashboardEvents = {\n dashboardViewed: () => {\n this.logDebug('[Dev] Dashboard viewed');\n },\n \n dashboardButtonClicked: (buttonType: string) => {\n this.logDebug(`[Dev] Dashboard button clicked: ${buttonType}`);\n },\n \n storeInfoClicked: () => {\n this.logDebug('[Dev] Store info clicked');\n },\n \n lottieAnimationCompleted: () => {\n this.logDebug('[Dev] Lottie animation completed');\n },\n \n syncStatusViewed: (status: string) => {\n this.logDebug(`[Dev] Sync status viewed: ${status}`);\n }\n };\n}\n","import { Injectable } from '@angular/core';\nimport { BaseAnalyticsService, IAnalyticsConfig } from './base-analytics.service';\n\n// Firebase Analytics types (to avoid importing Firebase directly in the base library)\nexport interface IFirebaseAnalytics {\n logEvent: (eventName: string, parameters?: { [key: string]: any }) => void;\n setUserId: (userId: string) => void;\n setUserProperties: (properties: { [key: string]: any }) => void;\n setCurrentScreen: (screenName: string) => void;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FirebaseAnalyticsService extends BaseAnalyticsService {\n private analytics: IFirebaseAnalytics | null = null;\n private config: IAnalyticsConfig | null = null;\n \n constructor() {\n super();\n }\n\n /**\n * Initialize Firebase Analytics\n */\n initialize(analytics: IFirebaseAnalytics, config: IAnalyticsConfig, isDebugMode: boolean = false) {\n this.analytics = analytics;\n this.config = config;\n this.isDebugMode = isDebugMode;\n \n if (this.isDebugMode) {\n console.log('[Firebase Analytics] Service initialized in debug mode');\n console.log('[Firebase Analytics] Config:', config);\n this.monitorGtagCalls();\n }\n }\n\n /**\n * Monitor gtag calls for debugging\n */\n private monitorGtagCalls() {\n const originalGtag = (window as any).gtag;\n if (originalGtag) {\n (window as any).gtag = (...args: any[]) => {\n console.log('[Firebase Analytics] gtag call:', args);\n return originalGtag.apply(window, args);\n };\n }\n }\n\n /**\n * Track page view\n */\n trackPageView(pageName: string, pageTitle?: string): void {\n if (!this.analytics) return;\n \n this.logDebug(`Page View: ${pageName}`, { page_title: pageTitle });\n \n // Set current screen\n this.analytics.setCurrentScreen(pageName);\n \n // Log page view event\n this.analytics.logEvent('page_view', {\n page_name: pageName,\n page_title: pageTitle || pageName\n });\n \n this.incrementEventCount();\n }\n\n /**\n * Track button click events\n */\n trackButtonClick(buttonName: string, buttonLocation?: string): void {\n if (!this.analytics) return;\n \n this.logDebug(`Button Click: ${buttonName}`, { location: buttonLocation });\n \n this.analytics.logEvent('button_click', {\n button_name: buttonName,\n button_location: buttonLocation || 'unknown'\n });\n \n this.incrementEventCount();\n }\n\n /**\n * Track user navigation events\n */\n trackNavigation(from: string, to: string, method: string = 'click'): void {\n if (!this.analytics) return;\n \n this.logDebug(`Navigation: ${from} -> ${to}`, { method });\n \n this.analytics.logEvent('navigation', {\n from_page: from,\n to_page: to,\n method: method\n });\n \n this.incrementEventCount();\n }\n\n /**\n * Track user actions in the app\n */\n trackUserAction(action: string, category: string, label?: string, value?: number): void {\n if (!this.analytics) return;\n \n this.logDebug(`User Action: ${action}`, { category, label, value });\n \n this.analytics.logEvent('user_action', {\n action: action,\n category: category,\n label: label || '',\n value: value || 0\n });\n \n this.incrementEventCount();\n }\n\n /**\n * Track business-specific events\n */\n trackBusinessEvent(eventName: string, parameters: { [key: string]: any }): void {\n if (!this.analytics) return;\n \n this.logDebug(`Business Event: ${eventName}`, parameters);\n \n this.analytics.logEvent(eventName, parameters);\n \n this.incrementEventCount();\n }\n\n /**\n * Track errors that occur in the app\n */\n trackError(errorMessage: string, errorLocation: string, errorType: string = 'runtime'): void {\n if (!this.analytics) return;\n \n this.logDebug(`Error: ${errorMessage}`, { location: errorLocation, type: errorType });\n \n this.analytics.logEvent('error', {\n error_message: errorMessage,\n error_location: errorLocation,\n error_type: errorType\n });\n \n this.incrementEventCount();\n }\n\n /**\n * Set user ID for analytics\n */\n setUserId(userId: string): void {\n if (!this.analytics) return;\n \n this.logDebug(`Set User ID: ${userId}`);\n \n this.analytics.setUserId(userId);\n }\n\n /**\n * Set user properties\n */\n setUserProperties(properties: { [key: string]: any }): void {\n if (!this.analytics) return;\n \n this.logDebug(`Set User Properties:`, properties);\n \n this.analytics.setUserProperties(properties);\n }\n\n /**\n * Test analytics functionality\n */\n testAnalytics(): void {\n console.log('[Analytics] Testing Firebase Analytics...');\n console.log('[Analytics] Analytics initialized:', !!this.analytics);\n console.log('[Analytics] Config:', this.config);\n \n if (!this.analytics) {\n console.error('[Analytics] Analytics not initialized! Call initialize() first.');\n return;\n }\n \n // Test events\n this.trackBusinessEvent('analytics_test', {\n test_type: 'manual_validation',\n timestamp: Date.now(),\n user_agent: navigator.userAgent\n });\n \n this.trackPageView('test_page', 'Analytics Test Page');\n this.trackButtonClick('test_button', 'analytics_validation');\n \n console.log('[Analytics] Test events sent.');\n }\n\n /**\n * Get analytics debug info\n */\n getDebugInfo(): any {\n return {\n isDebugMode: this.isDebugMode,\n eventCount: this.eventCount,\n analyticsInitialized: !!this.analytics,\n config: this.config\n };\n }\n\n /**\n * Dashboard specific events\n */\n trackDashboardEvents = {\n dashboardViewed: () => {\n this.trackPageView('dashboard', 'Dashboard');\n },\n \n dashboardButtonClicked: (buttonType: string) => {\n this.trackButtonClick(`dashboard_${buttonType}`, 'dashboard');\n this.trackBusinessEvent('dashboard_action', {\n action_type: buttonType,\n screen: 'dashboard'\n });\n },\n \n storeInfoClicked: () => {\n this.trackButtonClick('store_info', 'dashboard');\n this.trackBusinessEvent('store_interaction', {\n action: 'info_clicked',\n screen: 'dashboard'\n });\n },\n \n lottieAnimationCompleted: () => {\n this.trackUserAction('lottie_animation_completed', 'ui_interaction', 'dashboard');\n },\n \n syncStatusViewed: (status: string) => {\n this.trackBusinessEvent('sync_status_viewed', {\n status: status,\n screen: 'dashboard'\n });\n }\n };\n}\n","import { Injectable } from '@angular/core';\nimport { Router, NavigationEnd } from '@angular/router';\nimport { filter } from 'rxjs/operators';\nimport { BaseAnalyticsService } from './base-analytics.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class RouterAnalyticsService {\n private previousUrl: string = '';\n private currentUrl: string = '';\n\n constructor(\n private router: Router,\n private analyticsService: BaseAnalyticsService\n ) {\n this.initializeRouterTracking();\n }\n\n private initializeRouterTracking() {\n this.router.events\n .pipe(filter(event => event instanceof NavigationEnd))\n .subscribe((event: NavigationEnd) => {\n this.previousUrl = this.currentUrl;\n this.currentUrl = event.url;\n \n // Track page view\n this.trackPageView(event.url);\n \n // Track navigation if we have a previous URL\n if (this.previousUrl && this.previousUrl !== this.currentUrl) {\n this.trackNavigation(this.previousUrl, this.currentUrl);\n }\n });\n }\n\n private trackPageView(url: string) {\n try {\n const pageName = this.getPageNameFromUrl(url);\n if (this.analyticsService && typeof this.analyticsService.trackPageView === 'function') {\n this.analyticsService.trackPageView(pageName, `Page: ${pageName}`);\n }\n } catch (error) {\n console.warn('[RouterAnalytics] Error tracking page view:', error);\n }\n }\n\n private trackNavigation(from: string, to: string) {\n try {\n const fromPage = this.getPageNameFromUrl(from);\n const toPage = this.getPageNameFromUrl(to);\n if (this.analyticsService && typeof this.analyticsService.trackNavigation === 'function') {\n this.analyticsService.trackNavigation(fromPage, toPage, 'router_navigation');\n }\n } catch (error) {\n console.warn('[RouterAnalytics] Error tracking navigation:', error);\n }\n }\n\n private getPageNameFromUrl(url: string): string {\n // Remove query parameters and fragments\n const cleanUrl = url.split('?')[0].split('#')[0];\n \n // Handle specific routes\n if (cleanUrl === '/' || cleanUrl === '/home') return 'dashboard';\n if (cleanUrl.startsWith('/admin')) return 'admin';\n if (cleanUrl.startsWith('/checkout')) return 'checkout';\n if (cleanUrl.startsWith('/auth')) return 'auth';\n if (cleanUrl.startsWith('/store')) return 'store';\n \n // Default: remove leading slash and take first segment\n return cleanUrl.replace('/', '').split('/')[0] || 'unknown';\n }\n}\n","import { Provider } from '@angular/core';\nimport { BaseAnalyticsService, NoOpAnalyticsService } from './base-analytics.service';\nimport { RouterAnalyticsService } from './router-analytics.service';\n\nexport function provideUzAnalytics(): Provider[] {\n return [\n {\n provide: BaseAnalyticsService,\n useClass: NoOpAnalyticsService\n },\n RouterAnalyticsService,\n ];\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2.BaseAnalyticsService"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { Observable, Subject, switchMap, of, forkJoin } from 'rxjs';
2
2
  import Dexie from 'dexie';
3
3
  import * as i0 from '@angular/core';
4
- import { Injectable, inject, makeEnvironmentProviders } from '@angular/core';
4
+ import { Injectable, makeEnvironmentProviders } from '@angular/core';
5
5
 
6
6
  // @ts-ignore
7
7
  class DbServiceConfig {
@@ -323,10 +323,10 @@ class SchemaService {
323
323
  this.schema.stores.forEach((s) => this.tables[s.name] = s.name);
324
324
  }
325
325
  }
326
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: SchemaService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
327
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: SchemaService }); }
326
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: SchemaService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
327
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: SchemaService }); }
328
328
  }
329
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: SchemaService, decorators: [{
329
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: SchemaService, decorators: [{
330
330
  type: Injectable
331
331
  }], ctorParameters: () => [] });
332
332
 
@@ -350,30 +350,16 @@ const DbSettingConfig = {
350
350
  }
351
351
  };
352
352
 
353
- // Accept an optional custom DbService provider (e.g., for SQLite)
354
- function dbFactory(schemaSvc, customDbService) {
353
+ function dbFactory(schemaSvc) {
355
354
  const dbConfig = schemaSvc.config;
356
- if (customDbService) {
357
- // If a custom DbService is provided (e.g., SQLite), instantiate it
358
- return inject(customDbService, { optional: false });
359
- }
360
- switch (dbConfig.dbType) {
361
- case DbServiceType.IndexDd:
362
- return new DbWebService(dbConfig, schemaSvc);
363
- // Remove Sqlite case from here
364
- default:
365
- throw new Error('Unsupported dbType or missing customDbService');
366
- }
355
+ return new DbWebService(dbConfig, schemaSvc);
367
356
  }
368
- /**
369
- * Optionally accepts a custom DbService class (e.g., from ngx-ionic-zone).
370
- */
371
- function provideDb(customDbService) {
357
+ function provideDb() {
372
358
  const providers = [
373
359
  SchemaService,
374
360
  {
375
361
  provide: DbService,
376
- useFactory: (schemaSvc) => dbFactory(schemaSvc, customDbService),
362
+ useFactory: (schemaSvc) => dbFactory(schemaSvc),
377
363
  deps: [SchemaService],
378
364
  }
379
365
  ];