@memberjunction/ng-shared 2.120.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.
- package/dist/lib/base-dashboard.d.ts +65 -0
- package/dist/lib/base-dashboard.d.ts.map +1 -0
- package/dist/lib/base-dashboard.js +74 -0
- package/dist/lib/base-dashboard.js.map +1 -0
- package/dist/lib/base-resource-component.d.ts +3 -1
- package/dist/lib/base-resource-component.d.ts.map +1 -1
- package/dist/lib/base-resource-component.js +7 -1
- package/dist/lib/base-resource-component.js.map +1 -1
- package/dist/lib/navigation.interfaces.d.ts +28 -0
- package/dist/lib/navigation.interfaces.d.ts.map +1 -0
- package/dist/lib/navigation.interfaces.js +2 -0
- package/dist/lib/navigation.interfaces.js.map +1 -0
- package/dist/lib/navigation.service.d.ts +115 -0
- package/dist/lib/navigation.service.d.ts.map +1 -0
- package/dist/lib/navigation.service.js +518 -0
- package/dist/lib/navigation.service.js.map +1 -0
- package/dist/lib/shared.service.d.ts +17 -4
- package/dist/lib/shared.service.d.ts.map +1 -1
- package/dist/lib/shared.service.js +31 -7
- package/dist/lib/shared.service.js.map +1 -1
- package/dist/lib/title.service.d.ts +64 -0
- package/dist/lib/title.service.d.ts.map +1 -0
- package/dist/lib/title.service.js +114 -0
- package/dist/lib/title.service.js.map +1 -0
- package/dist/public-api.d.ts +6 -0
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +7 -0
- package/dist/public-api.js.map +1 -1
- package/package.json +7 -6
|
@@ -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
|
|
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
|
-
|
|
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":"AAAA,OAAO,EAAE,UAAU,EAAc,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"shared.service.d.ts","sourceRoot":"","sources":["../../src/lib/shared.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAc,QAAQ,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EAAE,YAAY,EAAsB,MAAM,sBAAsB,CAAC;AACxE,OAAO,EAA4B,kBAAkB,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAGrI,OAAO,EAAW,UAAU,EAAmC,MAAM,MAAM,CAAC;AAE5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;;AAGzE,qBAGa,aAAa;IAUtB,OAAO,CAAC,mBAAmB;IAC3B,OAAO,CAAC,sBAAsB;IAC9B,OAAO,CAAC,QAAQ;IAXlB,OAAO,CAAC,MAAM,CAAC,SAAS,CAAgB;IACxC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAkB;IACxC,OAAO,CAAC,MAAM,CAAC,cAAc,CAA4B;IACzD,OAAO,CAAC,MAAM,CAAC,UAAU,CAAuC;IAChE,OAAO,CAAC,SAAS,CAAiB;IAClC,UAAU,sBAAiC;IAC3C,OAAO,CAAC,kBAAkB,CAAkC;gBAGlD,mBAAmB,EAAE,mBAAmB,EACxC,sBAAsB,EAAE,qBAAqB,EAC7C,QAAQ,EAAE,QAAQ;IAsB5B,WAAkB,QAAQ,IAAI,aAAa,CAE1C;IAED;;;OAGG;IACH,OAAO,KAAK,iBAAiB,GAK5B;IAED;;OAEG;IACH,IAAW,gBAAgB,IAAI,MAAM,CAEpC;IAED;;OAEG;IACH,IAAW,SAAS,IAAI,MAAM,CAE7B;IAED,IAAW,aAAa,IAAI,kBAAkB,EAAE,CAE/C;IACD,IAAW,gBAAgB,IAAI,kBAAkB,CAEhD;IACD,IAAW,kBAAkB,IAAI,kBAAkB,CAElD;IACD,IAAW,qBAAqB,IAAI,kBAAkB,CAErD;IACD,IAAW,kBAAkB,IAAI,kBAAkB,CAElD;IACD,IAAW,yBAAyB,IAAI,kBAAkB,CAEzD;IACD,IAAW,gBAAgB,IAAI,kBAAkB,CAEhD;IACM,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS;IAG5D,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS;IAIvE;;OAEG;WACiB,WAAW,CAAC,YAAY,GAAE,OAAe;mBA6BxC,iBAAiB;IAStC,iBAAiB,CAAC,GAAG,EAAE,cAAc,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,GAAE,MAAU,EAAE,aAAa,GAAE,MAAc;IAiBhG,+BAA+B,CAAC,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM;IAK7E,kBAAkB,CAAC,KAAK,GAAE,MAAW;IAIrC,iBAAiB,IAAI,UAAU,CAAC,MAAM,CAAC;IAK9C,OAAO,CAAC,iBAAiB,CAAqC;IAC9D,IAAW,gBAAgB,IAAI,MAAM,GAAG,IAAI,CAE3C;IACD,IAAW,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,EAE/C;IAED;;OAEG;IACH,WAAkB,iBAAiB,IAAI,sBAAsB,EAAE,CAE9D;IACD;;OAEG;IACH,WAAkB,uBAAuB,IAAI,sBAAsB,EAAE,CAEpE;IACD;;OAEG;IACH,WAAkB,2BAA2B,IAAI,MAAM,CAEtD;IAED;;OAEG;WACW,YAAY,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU;IAchE;;;;;;;;;OASG;IACU,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,IAAI,EAAE,gBAAgB,EAAE,MAAM,GAAG,IAAI,EAAE,qBAAqB,EAAE,GAAG,GAAG,IAAI,EAAE,aAAa,GAAG,OAAc,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAInO;;OAEG;WACiB,wBAAwB;IAI5C;;;;;;OAMG;IACI,wBAAwB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,GAAE,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,MAAkB,EAAE,SAAS,CAAC,EAAE,MAAM;IAMzI,OAAO,CAAC,gBAAgB,CASvB;IACD;;;;OAIG;IACI,iCAAiC,CAAC,gBAAgB,EAAE,MAAM;IAQjE;;;;OAIG;IACI,iCAAiC,CAAC,oBAAoB,EAAE,MAAM;IAQrE;;;OAGG;IACI,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY;yCAzRzD,aAAa;6CAAb,aAAa;CAoSzB;AAED,eAAO,MAAM,YAAY;;;CAGf,CAAC;AAEX,MAAM,MAAM,YAAY,GAAG,OAAO,YAAY,CAAC,MAAM,OAAO,YAAY,CAAC,CAAC;AAG1E,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;CAgBb,CAAC;AAEX,MAAM,MAAM,UAAU,GAAG,OAAO,UAAU,CAAC,MAAM,OAAO,UAAU,CAAC,CAAC"}
|