@memberjunction/ng-shared 2.121.0 → 2.122.0

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.
@@ -0,0 +1,518 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { fromEvent } from 'rxjs';
3
+ import { map } from 'rxjs/operators';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@memberjunction/ng-base-application";
6
+ /**
7
+ * System application ID for non-app-specific resources
8
+ * Uses double underscore prefix to indicate system-level resource
9
+ */
10
+ export const SYSTEM_APP_ID = '__explorer';
11
+ /**
12
+ * Centralized navigation service that handles all navigation operations
13
+ * with automatic shift-key detection for power user workflows
14
+ */
15
+ export class NavigationService {
16
+ workspaceManager;
17
+ appManager;
18
+ shiftKeyPressed = false;
19
+ subscriptions = [];
20
+ constructor(workspaceManager, appManager) {
21
+ this.workspaceManager = workspaceManager;
22
+ this.appManager = appManager;
23
+ this.setupGlobalShiftKeyDetection();
24
+ }
25
+ /**
26
+ * Get the neutral color used for system-wide resources (entities, views, dashboards)
27
+ * Returns a light neutral gray
28
+ */
29
+ get ExplorerAppColor() {
30
+ return '#9E9E9E'; // Material Design Gray 500 - neutral, professional
31
+ }
32
+ ngOnDestroy() {
33
+ this.subscriptions.forEach(sub => sub.unsubscribe());
34
+ }
35
+ /**
36
+ * Set up global keyboard event listeners to track shift key state
37
+ */
38
+ setupGlobalShiftKeyDetection() {
39
+ // Track shift key down
40
+ const keyDown$ = fromEvent(document, 'keydown').pipe(map(event => event.shiftKey));
41
+ // Track shift key up
42
+ const keyUp$ = fromEvent(document, 'keyup').pipe(map(event => event.shiftKey));
43
+ this.subscriptions.push(keyDown$.subscribe(shiftKey => {
44
+ this.shiftKeyPressed = shiftKey;
45
+ }), keyUp$.subscribe(shiftKey => {
46
+ this.shiftKeyPressed = shiftKey;
47
+ }));
48
+ }
49
+ /**
50
+ * Get current shift key state
51
+ */
52
+ isShiftPressed() {
53
+ return this.shiftKeyPressed;
54
+ }
55
+ /**
56
+ * Determine if a new tab should be forced based on options and shift key state
57
+ */
58
+ shouldForceNewTab(options) {
59
+ // If forceNewTab is explicitly set, use that
60
+ if (options?.forceNewTab !== undefined) {
61
+ return options.forceNewTab;
62
+ }
63
+ // Otherwise, use global shift key detection
64
+ return this.isShiftPressed();
65
+ }
66
+ /**
67
+ * Handle temporary tab preservation when forcing new tabs
68
+ * Rule: Only ONE tab should be temporary at a time
69
+ * When shift+clicking to force a new tab, pin the current active tab if it's temporary
70
+ */
71
+ handleSingleResourceModeTransition(forceNew, newRequest) {
72
+ if (!forceNew) {
73
+ return; // Normal navigation, not forcing new tab
74
+ }
75
+ const config = this.workspaceManager.GetConfiguration();
76
+ console.log('[NavigationService.handleSingleResourceModeTransition] Current config:', {
77
+ tabCount: config?.tabs?.length || 0,
78
+ activeTabId: config?.activeTabId,
79
+ tabs: config?.tabs?.map(t => ({ id: t.id, title: t.title, isPinned: t.isPinned }))
80
+ });
81
+ if (!config || !config.tabs || config.tabs.length === 0) {
82
+ console.log('[NavigationService.handleSingleResourceModeTransition] No tabs to preserve');
83
+ return; // No tabs to preserve
84
+ }
85
+ // Find the currently active tab
86
+ const activeTab = config.tabs.find(tab => tab.id === config.activeTabId);
87
+ if (!activeTab) {
88
+ console.log('[NavigationService.handleSingleResourceModeTransition] No active tab found');
89
+ return; // No active tab
90
+ }
91
+ console.log('[NavigationService.handleSingleResourceModeTransition] Active tab:', {
92
+ id: activeTab.id,
93
+ title: activeTab.title,
94
+ isPinned: activeTab.isPinned
95
+ });
96
+ // If the active tab is NOT pinned (i.e., it's temporary), pin it to preserve it
97
+ // This maintains the "only one temporary tab" rule
98
+ if (!activeTab.isPinned) {
99
+ console.log('[NavigationService.handleSingleResourceModeTransition] Pinning current temporary tab before creating new tab');
100
+ this.workspaceManager.TogglePin(activeTab.id);
101
+ }
102
+ else {
103
+ console.log('[NavigationService.handleSingleResourceModeTransition] Active tab already pinned, no action needed');
104
+ }
105
+ }
106
+ /**
107
+ * Check if a tab request matches an existing tab's resource
108
+ */
109
+ isSameResource(tab, request) {
110
+ // Different apps = different resources
111
+ if (tab.applicationId !== request.ApplicationId) {
112
+ return false;
113
+ }
114
+ // For resource-based tabs, compare resourceType and recordId
115
+ if (request.Configuration?.resourceType) {
116
+ const requestRecordId = request.ResourceRecordId || '';
117
+ const tabRecordId = tab.resourceRecordId || '';
118
+ return tab.configuration?.resourceType === request.Configuration.resourceType &&
119
+ tabRecordId === requestRecordId;
120
+ }
121
+ // For app nav items, compare appName and navItemName
122
+ if (request.Configuration?.appName && request.Configuration?.navItemName) {
123
+ return tab.configuration?.appName === request.Configuration.appName &&
124
+ tab.configuration?.navItemName === request.Configuration.navItemName;
125
+ }
126
+ // Fallback to basic comparison
127
+ return false;
128
+ }
129
+ /**
130
+ * Open a navigation item within an app
131
+ */
132
+ OpenNavItem(appId, navItem, appColor, options) {
133
+ console.log('[NavigationService.OpenNavItem] Called with:', {
134
+ appId,
135
+ navItemLabel: navItem.Label,
136
+ navItemResourceType: navItem.ResourceType,
137
+ navItemDriverClass: navItem.DriverClass,
138
+ appColor,
139
+ options
140
+ });
141
+ const forceNew = this.shouldForceNewTab(options);
142
+ console.log('[NavigationService.OpenNavItem] forceNew:', forceNew);
143
+ // Get the app to find its name
144
+ const app = this.appManager.GetAppById(appId);
145
+ const appName = app?.Name || '';
146
+ console.log('[NavigationService.OpenNavItem] App name:', appName);
147
+ const request = {
148
+ ApplicationId: appId,
149
+ Title: navItem.Label,
150
+ Configuration: {
151
+ route: navItem.Route,
152
+ resourceType: navItem.ResourceType,
153
+ driverClass: navItem.DriverClass, // Pass through DriverClass for Custom resource type
154
+ recordId: navItem.RecordID,
155
+ appName: appName, // Store app name for URL building
156
+ appId: appId,
157
+ navItemName: navItem.Label, // Store nav item name for URL building
158
+ ...(navItem.Configuration || {})
159
+ },
160
+ IsPinned: options?.pinTab || false
161
+ };
162
+ console.log('[NavigationService.OpenNavItem] Tab request:', request);
163
+ // Handle transition from single-resource mode
164
+ this.handleSingleResourceModeTransition(forceNew, request);
165
+ if (forceNew) {
166
+ // Always create a new tab
167
+ console.log('[NavigationService.OpenNavItem] Opening forced new tab');
168
+ const tabId = this.workspaceManager.OpenTabForced(request, appColor);
169
+ console.log('[NavigationService.OpenNavItem] Created tab:', tabId);
170
+ return tabId;
171
+ }
172
+ else {
173
+ // Use existing OpenTab logic (may replace temporary tab)
174
+ console.log('[NavigationService.OpenNavItem] Opening tab (may replace)');
175
+ const tabId = this.workspaceManager.OpenTab(request, appColor);
176
+ console.log('[NavigationService.OpenNavItem] Opened tab:', tabId);
177
+ return tabId;
178
+ }
179
+ }
180
+ /**
181
+ * Open an entity record view
182
+ * System-wide resource using __explorer app ID and neutral color
183
+ */
184
+ OpenEntityRecord(entityName, recordPkey, options) {
185
+ console.log('NavigationService.OpenEntityRecord called:', {
186
+ entityName,
187
+ recordPkey: recordPkey.ToURLSegment(),
188
+ systemAppId: SYSTEM_APP_ID,
189
+ color: this.ExplorerAppColor,
190
+ options
191
+ });
192
+ const forceNew = this.shouldForceNewTab(options);
193
+ const recordId = recordPkey.ToURLSegment();
194
+ const request = {
195
+ ApplicationId: SYSTEM_APP_ID,
196
+ Title: `${entityName} - ${recordId}`,
197
+ Configuration: {
198
+ resourceType: 'Records',
199
+ Entity: entityName, // Must use 'Entity' (capital E) - expected by record-resource.component
200
+ recordId: recordId // Also needed in Configuration for tab-container.component to populate ResourceRecordID
201
+ },
202
+ ResourceRecordId: recordId,
203
+ IsPinned: options?.pinTab || false
204
+ };
205
+ console.log('NavigationService.OpenEntityRecord request:', request, 'forceNew:', forceNew);
206
+ // Handle transition from single-resource mode
207
+ this.handleSingleResourceModeTransition(forceNew, request);
208
+ if (forceNew) {
209
+ const tabId = this.workspaceManager.OpenTabForced(request, this.ExplorerAppColor);
210
+ console.log('NavigationService.OpenEntityRecord created new tab:', tabId);
211
+ return tabId;
212
+ }
213
+ else {
214
+ const tabId = this.workspaceManager.OpenTab(request, this.ExplorerAppColor);
215
+ console.log('NavigationService.OpenEntityRecord opened tab:', tabId);
216
+ return tabId;
217
+ }
218
+ }
219
+ /**
220
+ * Open a view (system-wide resource)
221
+ */
222
+ OpenView(viewId, viewName, options) {
223
+ const forceNew = this.shouldForceNewTab(options);
224
+ const request = {
225
+ ApplicationId: SYSTEM_APP_ID,
226
+ Title: viewName,
227
+ Configuration: {
228
+ resourceType: 'User Views',
229
+ viewId,
230
+ recordId: viewId // Also needed in Configuration for tab-container.component to populate ResourceRecordID
231
+ },
232
+ ResourceRecordId: viewId,
233
+ IsPinned: options?.pinTab || false
234
+ };
235
+ // Handle transition from single-resource mode
236
+ this.handleSingleResourceModeTransition(forceNew, request);
237
+ if (forceNew) {
238
+ return this.workspaceManager.OpenTabForced(request, this.ExplorerAppColor);
239
+ }
240
+ else {
241
+ return this.workspaceManager.OpenTab(request, this.ExplorerAppColor);
242
+ }
243
+ }
244
+ /**
245
+ * Open a dashboard (system-wide resource)
246
+ */
247
+ OpenDashboard(dashboardId, dashboardName, options) {
248
+ const forceNew = this.shouldForceNewTab(options);
249
+ const request = {
250
+ ApplicationId: SYSTEM_APP_ID,
251
+ Title: dashboardName,
252
+ Configuration: {
253
+ resourceType: 'Dashboards',
254
+ dashboardId,
255
+ recordId: dashboardId // Also needed in Configuration for tab-container.component to populate ResourceRecordID
256
+ },
257
+ ResourceRecordId: dashboardId,
258
+ IsPinned: options?.pinTab || false
259
+ };
260
+ // Handle transition from single-resource mode
261
+ this.handleSingleResourceModeTransition(forceNew, request);
262
+ if (forceNew) {
263
+ return this.workspaceManager.OpenTabForced(request, this.ExplorerAppColor);
264
+ }
265
+ else {
266
+ return this.workspaceManager.OpenTab(request, this.ExplorerAppColor);
267
+ }
268
+ }
269
+ /**
270
+ * Open a report (system-wide resource)
271
+ */
272
+ OpenReport(reportId, reportName, options) {
273
+ const forceNew = this.shouldForceNewTab(options);
274
+ const request = {
275
+ ApplicationId: SYSTEM_APP_ID,
276
+ Title: reportName,
277
+ Configuration: {
278
+ resourceType: 'Reports',
279
+ reportId,
280
+ recordId: reportId // Also needed in Configuration for tab-container.component to populate ResourceRecordID
281
+ },
282
+ ResourceRecordId: reportId,
283
+ IsPinned: options?.pinTab || false
284
+ };
285
+ // Handle transition from single-resource mode
286
+ this.handleSingleResourceModeTransition(forceNew, request);
287
+ if (forceNew) {
288
+ return this.workspaceManager.OpenTabForced(request, this.ExplorerAppColor);
289
+ }
290
+ else {
291
+ return this.workspaceManager.OpenTab(request, this.ExplorerAppColor);
292
+ }
293
+ }
294
+ /**
295
+ * Open an artifact (system-wide resource)
296
+ * Artifacts are versioned content containers (reports, dashboards, UI components, etc.)
297
+ */
298
+ OpenArtifact(artifactId, artifactName, options) {
299
+ const forceNew = this.shouldForceNewTab(options);
300
+ const request = {
301
+ ApplicationId: SYSTEM_APP_ID,
302
+ Title: artifactName || `Artifact - ${artifactId}`,
303
+ Configuration: {
304
+ resourceType: 'Artifacts',
305
+ artifactId,
306
+ recordId: artifactId // Also needed in Configuration for tab-container.component to populate ResourceRecordID
307
+ },
308
+ ResourceRecordId: artifactId,
309
+ IsPinned: options?.pinTab || false
310
+ };
311
+ // Handle transition from single-resource mode
312
+ this.handleSingleResourceModeTransition(forceNew, request);
313
+ if (forceNew) {
314
+ return this.workspaceManager.OpenTabForced(request, this.ExplorerAppColor);
315
+ }
316
+ else {
317
+ return this.workspaceManager.OpenTab(request, this.ExplorerAppColor);
318
+ }
319
+ }
320
+ /**
321
+ * Open a dynamic view (system-wide resource)
322
+ * Dynamic views are entity-based views with custom filters, not saved views
323
+ */
324
+ OpenDynamicView(entityName, extraFilter, options) {
325
+ const forceNew = this.shouldForceNewTab(options);
326
+ const filterSuffix = extraFilter ? ' (Filtered)' : '';
327
+ const request = {
328
+ ApplicationId: SYSTEM_APP_ID,
329
+ Title: `${entityName}${filterSuffix}`,
330
+ Configuration: {
331
+ resourceType: 'User Views',
332
+ Entity: entityName,
333
+ ExtraFilter: extraFilter,
334
+ isDynamic: true,
335
+ recordId: 'dynamic' // Special marker for dynamic views
336
+ },
337
+ ResourceRecordId: 'dynamic',
338
+ IsPinned: options?.pinTab || false
339
+ };
340
+ // Handle transition from single-resource mode
341
+ this.handleSingleResourceModeTransition(forceNew, request);
342
+ if (forceNew) {
343
+ return this.workspaceManager.OpenTabForced(request, this.ExplorerAppColor);
344
+ }
345
+ else {
346
+ return this.workspaceManager.OpenTab(request, this.ExplorerAppColor);
347
+ }
348
+ }
349
+ /**
350
+ * Open a query (system-wide resource)
351
+ */
352
+ OpenQuery(queryId, queryName, options) {
353
+ const forceNew = this.shouldForceNewTab(options);
354
+ const request = {
355
+ ApplicationId: SYSTEM_APP_ID,
356
+ Title: queryName,
357
+ Configuration: {
358
+ resourceType: 'Queries',
359
+ queryId,
360
+ recordId: queryId // Also needed in Configuration for tab-container.component to populate ResourceRecordID
361
+ },
362
+ ResourceRecordId: queryId,
363
+ IsPinned: options?.pinTab || false
364
+ };
365
+ // Handle transition from single-resource mode
366
+ this.handleSingleResourceModeTransition(forceNew, request);
367
+ if (forceNew) {
368
+ return this.workspaceManager.OpenTabForced(request, this.ExplorerAppColor);
369
+ }
370
+ else {
371
+ return this.workspaceManager.OpenTab(request, this.ExplorerAppColor);
372
+ }
373
+ }
374
+ /**
375
+ * Open a new entity record creation form
376
+ * System-wide resource using __explorer app ID and neutral color
377
+ * @param entityName The name of the entity to create a new record for
378
+ * @param options Navigation options including optional newRecordValues for pre-populating fields
379
+ */
380
+ OpenNewEntityRecord(entityName, options) {
381
+ console.log('NavigationService.OpenNewEntityRecord called:', {
382
+ entityName,
383
+ systemAppId: SYSTEM_APP_ID,
384
+ color: this.ExplorerAppColor,
385
+ options
386
+ });
387
+ const forceNew = this.shouldForceNewTab(options);
388
+ const request = {
389
+ ApplicationId: SYSTEM_APP_ID,
390
+ Title: `New ${entityName}`,
391
+ Configuration: {
392
+ resourceType: 'Records',
393
+ Entity: entityName, // Must use 'Entity' (capital E) - expected by record-resource.component
394
+ recordId: '', // Empty recordId indicates new record
395
+ isNew: true, // Flag to indicate this is a new record
396
+ NewRecordValues: options?.newRecordValues // Pass through initial values if provided
397
+ },
398
+ ResourceRecordId: '', // Empty for new records
399
+ IsPinned: options?.pinTab || false
400
+ };
401
+ console.log('NavigationService.OpenNewEntityRecord request:', request, 'forceNew:', forceNew);
402
+ // Handle transition from single-resource mode
403
+ this.handleSingleResourceModeTransition(forceNew, request);
404
+ if (forceNew) {
405
+ const tabId = this.workspaceManager.OpenTabForced(request, this.ExplorerAppColor);
406
+ console.log('NavigationService.OpenNewEntityRecord created new tab:', tabId);
407
+ return tabId;
408
+ }
409
+ else {
410
+ const tabId = this.workspaceManager.OpenTab(request, this.ExplorerAppColor);
411
+ console.log('NavigationService.OpenNewEntityRecord opened tab:', tabId);
412
+ return tabId;
413
+ }
414
+ }
415
+ /**
416
+ * Navigate to a nav item by name within the current or specified application.
417
+ * Allows passing additional configuration parameters to merge with the nav item's config.
418
+ * This is useful for cross-resource navigation where a component needs to navigate
419
+ * to another nav item with specific parameters (e.g., navigate to Conversations with a specific conversationId).
420
+ *
421
+ * @param navItemName The label/name of the nav item to navigate to
422
+ * @param configuration Additional configuration to merge (e.g., conversationId, artifactId)
423
+ * @param appId Optional app ID (defaults to current active app)
424
+ * @param options Navigation options
425
+ * @returns The tab ID if successful, null if nav item not found
426
+ */
427
+ OpenNavItemByName(navItemName, configuration, appId, options) {
428
+ // Get app (use provided or current active)
429
+ const targetAppId = appId || this.appManager.GetActiveApp()?.ID;
430
+ if (!targetAppId) {
431
+ console.warn('[NavigationService.OpenNavItemByName] No app ID provided and no active app');
432
+ return null;
433
+ }
434
+ const app = this.appManager.GetAppById(targetAppId);
435
+ if (!app) {
436
+ console.warn('[NavigationService.OpenNavItemByName] App not found:', targetAppId);
437
+ return null;
438
+ }
439
+ // Find the nav item by name
440
+ const navItems = app.GetNavItems();
441
+ const navItem = navItems.find(item => item.Label === navItemName);
442
+ if (!navItem) {
443
+ console.warn('[NavigationService.OpenNavItemByName] Nav item not found:', navItemName, 'in app:', targetAppId);
444
+ return null;
445
+ }
446
+ // Create a merged nav item with additional configuration
447
+ const mergedNavItem = {
448
+ ...navItem,
449
+ Configuration: {
450
+ ...(navItem.Configuration || {}),
451
+ ...(configuration || {})
452
+ }
453
+ };
454
+ // Use existing OpenNavItem
455
+ return this.OpenNavItem(targetAppId, mergedNavItem, app.GetColor(), options);
456
+ }
457
+ /**
458
+ * Switch to an application by ID.
459
+ * This sets the app as active and either opens a specific nav item or creates a default tab.
460
+ * If the requested nav item already has an open tab, switches to that tab instead of creating a new one.
461
+ * @param appId The application ID to switch to
462
+ * @param navItemName Optional name of a nav item to open within the app. If provided, opens that nav item.
463
+ */
464
+ async SwitchToApp(appId, navItemName) {
465
+ await this.appManager.SetActiveApp(appId);
466
+ const app = this.appManager.GetAllApps().find(a => a.ID === appId);
467
+ if (!app) {
468
+ return;
469
+ }
470
+ const appTabs = this.workspaceManager.GetAppTabs(appId);
471
+ // If a specific nav item is requested
472
+ if (navItemName) {
473
+ const navItems = app.GetNavItems();
474
+ const navItem = navItems.find(item => item.Label === navItemName);
475
+ if (navItem) {
476
+ // Check if there's already a tab for this nav item
477
+ const existingTab = appTabs.find(tab => tab.title === navItem.Label ||
478
+ (tab.configuration?.['route'] === navItem.Route && navItem.Route));
479
+ if (existingTab) {
480
+ // Switch to existing tab
481
+ this.workspaceManager.SetActiveTab(existingTab.id);
482
+ }
483
+ else {
484
+ // Open new tab for this nav item
485
+ this.OpenNavItem(appId, navItem, app.GetColor());
486
+ }
487
+ return;
488
+ }
489
+ // Nav item not found, fall through to default behavior
490
+ }
491
+ // No specific nav item requested - check if app has any tabs
492
+ if (appTabs.length === 0) {
493
+ // Create default tab
494
+ const tabRequest = await app.CreateDefaultTab();
495
+ if (tabRequest) {
496
+ this.workspaceManager.OpenTab(tabRequest, app.GetColor());
497
+ }
498
+ }
499
+ else {
500
+ // App has tabs - switch to the first one (or active one if exists)
501
+ const config = this.workspaceManager.GetConfiguration();
502
+ const activeAppTab = appTabs.find(t => t.id === config?.activeTabId);
503
+ if (!activeAppTab) {
504
+ // No active tab for this app, switch to first tab
505
+ this.workspaceManager.SetActiveTab(appTabs[0].id);
506
+ }
507
+ }
508
+ }
509
+ static ɵfac = function NavigationService_Factory(t) { return new (t || NavigationService)(i0.ɵɵinject(i1.WorkspaceStateManager), i0.ɵɵinject(i1.ApplicationManager)); };
510
+ static ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: NavigationService, factory: NavigationService.ɵfac, providedIn: 'root' });
511
+ }
512
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(NavigationService, [{
513
+ type: Injectable,
514
+ args: [{
515
+ providedIn: 'root'
516
+ }]
517
+ }], () => [{ type: i1.WorkspaceStateManager }, { type: i1.ApplicationManager }], null); })();
518
+ //# sourceMappingURL=navigation.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"navigation.service.js","sourceRoot":"","sources":["../../src/lib/navigation.service.ts"],"names":[],"mappings":"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"}
@@ -1,23 +1,32 @@
1
- import { ElementRef } from '@angular/core';
1
+ import { ElementRef, Injector } from '@angular/core';
2
2
  import { CompositeKey } from '@memberjunction/core';
3
3
  import { ResourceTypeEntity, UserNotificationEntity, ViewColumnInfo } from '@memberjunction/core-entities';
4
4
  import { Observable } from 'rxjs';
5
5
  import { NotificationService } from "@progress/kendo-angular-notification";
6
6
  import { MJNotificationService } from '@memberjunction/ng-notifications';
7
- import { Router } from '@angular/router';
8
7
  import * as i0 from "@angular/core";
9
8
  export declare class SharedService {
10
9
  private notificationService;
11
10
  private mjNotificationsService;
12
- private router;
11
+ private injector;
13
12
  private static _instance;
14
13
  private static _loaded;
15
14
  private static _resourceTypes;
16
15
  private static isLoading$;
17
16
  private tabChange;
18
17
  tabChange$: Observable<unknown>;
19
- constructor(notificationService: NotificationService, mjNotificationsService: MJNotificationService, router: Router);
18
+ private _navigationService;
19
+ constructor(notificationService: NotificationService, mjNotificationsService: MJNotificationService, injector: Injector);
20
20
  static get Instance(): SharedService;
21
+ /**
22
+ * Get the NavigationService singleton instance
23
+ * Lazy-loaded to avoid circular dependency issues
24
+ */
25
+ private get navigationService();
26
+ /**
27
+ * Get the neutral color used for system-wide resources
28
+ */
29
+ get ExplorerAppColor(): string;
21
30
  /**
22
31
  * Returns the current session ID, which is automatically created when the service is instantiated.
23
32
  */
@@ -95,6 +104,10 @@ export declare class SharedService {
95
104
  * @returns
96
105
  */
97
106
  mapResourceTypeRouteSegmentToName(resourceRouteSegment: string): string | null;
107
+ /**
108
+ * Opens an entity record in a new or existing tab
109
+ * Uses the modern NavigationService for tab-based navigation
110
+ */
98
111
  OpenEntityRecord(entityName: string, recordPkey: CompositeKey): void;
99
112
  static ɵfac: i0.ɵɵFactoryDeclaration<SharedService, never>;
100
113
  static ɵprov: i0.ɵɵInjectableDeclaration<SharedService>;
@@ -1 +1 @@
1
- {"version":3,"file":"shared.service.d.ts","sourceRoot":"","sources":["../../src/lib/shared.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shared.service.d.ts","sourceRoot":"","sources":["../../src/lib/shared.service.ts"],"names":[],"mappings":"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"}