@memberjunction/ng-explorer-core 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.
- package/README.md +0 -1
- package/dist/app-routing.module.d.ts +6 -5
- package/dist/app-routing.module.d.ts.map +1 -1
- package/dist/app-routing.module.js +266 -132
- package/dist/app-routing.module.js.map +1 -1
- package/dist/lib/app-view/application-view.component.js +10 -10
- package/dist/lib/app-view/application-view.component.js.map +1 -1
- package/dist/lib/dashboard-preferences-dialog/dashboard-preferences-dialog.component.js +11 -12
- package/dist/lib/dashboard-preferences-dialog/dashboard-preferences-dialog.component.js.map +1 -1
- package/dist/lib/data-browser-component/data-browser.component.js +8 -8
- package/dist/lib/data-browser-component/data-browser.component.js.map +1 -1
- package/dist/lib/generic-browse-list/generic-browse-list.component.js +10 -7
- package/dist/lib/generic-browse-list/generic-browse-list.component.js.map +1 -1
- package/dist/lib/generic-browser-list/generic-browser-list.component.js +14 -11
- package/dist/lib/generic-browser-list/generic-browser-list.component.js.map +1 -1
- package/dist/lib/list-view/list-view.component.js +24 -21
- package/dist/lib/list-view/list-view.component.js.map +1 -1
- package/dist/lib/navigation/navigation.component.d.ts +0 -1
- package/dist/lib/navigation/navigation.component.d.ts.map +1 -1
- package/dist/lib/navigation/navigation.component.js +11 -19
- package/dist/lib/navigation/navigation.component.js.map +1 -1
- package/dist/lib/resource-browser/resource-browser.component.js +14 -11
- package/dist/lib/resource-browser/resource-browser.component.js.map +1 -1
- package/dist/lib/resource-wrappers/artifact-resource.component.d.ts +20 -0
- package/dist/lib/resource-wrappers/artifact-resource.component.d.ts.map +1 -0
- package/dist/lib/resource-wrappers/artifact-resource.component.js +92 -0
- package/dist/lib/resource-wrappers/artifact-resource.component.js.map +1 -0
- package/dist/lib/resource-wrappers/chat-collections-resource.component.d.ts +119 -0
- package/dist/lib/resource-wrappers/chat-collections-resource.component.d.ts.map +1 -0
- package/dist/lib/resource-wrappers/chat-collections-resource.component.js +500 -0
- package/dist/lib/resource-wrappers/chat-collections-resource.component.js.map +1 -0
- package/dist/lib/resource-wrappers/chat-conversations-resource.component.d.ts +87 -0
- package/dist/lib/resource-wrappers/chat-conversations-resource.component.d.ts.map +1 -0
- package/dist/lib/resource-wrappers/chat-conversations-resource.component.js +345 -0
- package/dist/lib/resource-wrappers/chat-conversations-resource.component.js.map +1 -0
- package/dist/lib/resource-wrappers/chat-tasks-resource.component.d.ts +67 -0
- package/dist/lib/resource-wrappers/chat-tasks-resource.component.d.ts.map +1 -0
- package/dist/lib/resource-wrappers/chat-tasks-resource.component.js +244 -0
- package/dist/lib/resource-wrappers/chat-tasks-resource.component.js.map +1 -0
- package/dist/lib/resource-wrappers/dashboard-resource.component.d.ts +46 -3
- package/dist/lib/resource-wrappers/dashboard-resource.component.d.ts.map +1 -1
- package/dist/lib/resource-wrappers/dashboard-resource.component.js +298 -21
- package/dist/lib/resource-wrappers/dashboard-resource.component.js.map +1 -1
- package/dist/lib/resource-wrappers/list-detail-resource.component.js +1 -1
- package/dist/lib/resource-wrappers/list-detail-resource.component.js.map +1 -1
- package/dist/lib/resource-wrappers/query-resource.component.js +1 -1
- package/dist/lib/resource-wrappers/query-resource.component.js.map +1 -1
- package/dist/lib/resource-wrappers/record-resource.component.d.ts.map +1 -1
- package/dist/lib/resource-wrappers/record-resource.component.js +22 -5
- package/dist/lib/resource-wrappers/record-resource.component.js.map +1 -1
- package/dist/lib/resource-wrappers/report-resource.component.js +1 -1
- package/dist/lib/resource-wrappers/report-resource.component.js.map +1 -1
- package/dist/lib/resource-wrappers/resource-wrappers-loader.d.ts.map +1 -1
- package/dist/lib/resource-wrappers/resource-wrappers-loader.js +15 -0
- package/dist/lib/resource-wrappers/resource-wrappers-loader.js.map +1 -1
- package/dist/lib/resource-wrappers/search-results-resource.component.js +1 -1
- package/dist/lib/resource-wrappers/search-results-resource.component.js.map +1 -1
- package/dist/lib/resource-wrappers/view-resource.component.js +1 -1
- package/dist/lib/resource-wrappers/view-resource.component.js.map +1 -1
- package/dist/lib/shell/components/header/app-nav.component.d.ts +45 -0
- package/dist/lib/shell/components/header/app-nav.component.d.ts.map +1 -0
- package/dist/lib/shell/components/header/app-nav.component.js +127 -0
- package/dist/lib/shell/components/header/app-nav.component.js.map +1 -0
- package/dist/lib/shell/components/header/app-switcher.component.d.ts +53 -0
- package/dist/lib/shell/components/header/app-switcher.component.d.ts.map +1 -0
- package/dist/lib/shell/components/header/app-switcher.component.js +190 -0
- package/dist/lib/shell/components/header/app-switcher.component.js.map +1 -0
- package/dist/lib/shell/components/tabs/component-cache-manager.d.ts +83 -0
- package/dist/lib/shell/components/tabs/component-cache-manager.d.ts.map +1 -0
- package/dist/lib/shell/components/tabs/component-cache-manager.js +175 -0
- package/dist/lib/shell/components/tabs/component-cache-manager.js.map +1 -0
- package/dist/lib/shell/components/tabs/tab-container.component.d.ts +138 -0
- package/dist/lib/shell/components/tabs/tab-container.component.d.ts.map +1 -0
- package/dist/lib/shell/components/tabs/tab-container.component.js +920 -0
- package/dist/lib/shell/components/tabs/tab-container.component.js.map +1 -0
- package/dist/lib/shell/services/settings-dialog.service.d.ts +28 -0
- package/dist/lib/shell/services/settings-dialog.service.d.ts.map +1 -0
- package/dist/lib/shell/services/settings-dialog.service.js +67 -0
- package/dist/lib/shell/services/settings-dialog.service.js.map +1 -0
- package/dist/lib/shell/shell.component.d.ts +166 -0
- package/dist/lib/shell/shell.component.d.ts.map +1 -0
- package/dist/lib/shell/shell.component.js +1173 -0
- package/dist/lib/shell/shell.component.js.map +1 -0
- package/dist/lib/shell/shell.module.d.ts +14 -0
- package/dist/lib/shell/shell.module.d.ts.map +1 -0
- package/dist/lib/shell/shell.module.js +42 -0
- package/dist/lib/shell/shell.module.js.map +1 -0
- package/dist/lib/single-dashboard/Components/add-item/add-item.component.js +17 -13
- package/dist/lib/single-dashboard/Components/add-item/add-item.component.js.map +1 -1
- package/dist/lib/single-dashboard/single-dashboard.component.d.ts +2 -1
- package/dist/lib/single-dashboard/single-dashboard.component.d.ts.map +1 -1
- package/dist/lib/single-dashboard/single-dashboard.component.js +6 -1
- package/dist/lib/single-dashboard/single-dashboard.component.js.map +1 -1
- package/dist/lib/single-entity/single-entity.component.js +21 -17
- package/dist/lib/single-entity/single-entity.component.js.map +1 -1
- package/dist/lib/single-list-detail/single-list-detail.component.js +36 -30
- package/dist/lib/single-list-detail/single-list-detail.component.js.map +1 -1
- package/dist/lib/single-record/single-record.component.d.ts +1 -0
- package/dist/lib/single-record/single-record.component.d.ts.map +1 -1
- package/dist/lib/single-record/single-record.component.js +16 -9
- package/dist/lib/single-record/single-record.component.js.map +1 -1
- package/dist/lib/single-report/single-report.component.d.ts +1 -7
- package/dist/lib/single-report/single-report.component.d.ts.map +1 -1
- package/dist/lib/single-report/single-report.component.js +16 -37
- package/dist/lib/single-report/single-report.component.js.map +1 -1
- package/dist/lib/single-view/single-view.component.d.ts +1 -2
- package/dist/lib/single-view/single-view.component.d.ts.map +1 -1
- package/dist/lib/single-view/single-view.component.js +35 -43
- package/dist/lib/single-view/single-view.component.js.map +1 -1
- package/dist/lib/style-guide-test/style-guide-test.component.js +20 -13
- package/dist/lib/style-guide-test/style-guide-test.component.js.map +1 -1
- package/dist/lib/tabbed-dashboard/tabbed-dashboard.component.d.ts +1 -1
- package/dist/lib/tabbed-dashboard/tabbed-dashboard.component.d.ts.map +1 -1
- package/dist/lib/tabbed-dashboard/tabbed-dashboard.component.js +8 -11
- package/dist/lib/tabbed-dashboard/tabbed-dashboard.component.js.map +1 -1
- package/dist/lib/user-notifications/user-notifications.component.d.ts.map +1 -1
- package/dist/lib/user-notifications/user-notifications.component.js +0 -5
- package/dist/lib/user-notifications/user-notifications.component.js.map +1 -1
- package/dist/module.d.ts +50 -46
- package/dist/module.d.ts.map +1 -1
- package/dist/module.js +23 -11
- package/dist/module.js.map +1 -1
- package/dist/public-api.d.ts +4 -0
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +5 -0
- package/dist/public-api.js.map +1 -1
- package/package.json +36 -35
|
@@ -0,0 +1,500 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import { Component, ViewEncapsulation } from '@angular/core';
|
|
8
|
+
import { NavigationEnd } from '@angular/router';
|
|
9
|
+
import { Metadata } from '@memberjunction/core';
|
|
10
|
+
import { RegisterClass } from '@memberjunction/global';
|
|
11
|
+
import { BaseResourceComponent } from '@memberjunction/ng-shared';
|
|
12
|
+
import { EnvironmentEntityExtended } from '@memberjunction/core-entities';
|
|
13
|
+
import { Subject, takeUntil, distinctUntilChanged, combineLatest, filter } from 'rxjs';
|
|
14
|
+
import * as i0 from "@angular/core";
|
|
15
|
+
import * as i1 from "@memberjunction/ng-conversations";
|
|
16
|
+
import * as i2 from "@memberjunction/ng-shared";
|
|
17
|
+
import * as i3 from "@angular/router";
|
|
18
|
+
import * as i4 from "@angular/common";
|
|
19
|
+
import * as i5 from "@memberjunction/ng-artifacts";
|
|
20
|
+
function ChatCollectionsResource_mj_collections_full_view_2_Template(rf, ctx) { if (rf & 1) {
|
|
21
|
+
i0.ɵɵelement(0, "mj-collections-full-view", 4);
|
|
22
|
+
} if (rf & 2) {
|
|
23
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
24
|
+
i0.ɵɵproperty("environmentId", ctx_r0.environmentId)("currentUser", ctx_r0.currentUser);
|
|
25
|
+
} }
|
|
26
|
+
function ChatCollectionsResource_ng_container_3_div_1_Template(rf, ctx) { if (rf & 1) {
|
|
27
|
+
const _r3 = i0.ɵɵgetCurrentView();
|
|
28
|
+
i0.ɵɵelementStart(0, "div", 8);
|
|
29
|
+
i0.ɵɵlistener("mousedown", function ChatCollectionsResource_ng_container_3_div_1_Template_div_mousedown_0_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.onResizeStart($event)); });
|
|
30
|
+
i0.ɵɵelementEnd();
|
|
31
|
+
} }
|
|
32
|
+
function ChatCollectionsResource_ng_container_3_Template(rf, ctx) { if (rf & 1) {
|
|
33
|
+
const _r2 = i0.ɵɵgetCurrentView();
|
|
34
|
+
i0.ɵɵelementContainerStart(0);
|
|
35
|
+
i0.ɵɵtemplate(1, ChatCollectionsResource_ng_container_3_div_1_Template, 1, 0, "div", 5);
|
|
36
|
+
i0.ɵɵelementStart(2, "div", 6)(3, "mj-artifact-viewer-panel", 7);
|
|
37
|
+
i0.ɵɵlistener("closed", function ChatCollectionsResource_ng_container_3_Template_mj_artifact_viewer_panel_closed_3_listener() { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.closeArtifactPanel()); })("maximizeToggled", function ChatCollectionsResource_ng_container_3_Template_mj_artifact_viewer_panel_maximizeToggled_3_listener() { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.toggleMaximizeArtifactPanel()); })("navigateToLink", function ChatCollectionsResource_ng_container_3_Template_mj_artifact_viewer_panel_navigateToLink_3_listener($event) { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.onNavigateToLink($event)); });
|
|
38
|
+
i0.ɵɵelementEnd()();
|
|
39
|
+
i0.ɵɵelementContainerEnd();
|
|
40
|
+
} if (rf & 2) {
|
|
41
|
+
let tmp_7_0;
|
|
42
|
+
let tmp_10_0;
|
|
43
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
44
|
+
i0.ɵɵadvance();
|
|
45
|
+
i0.ɵɵproperty("ngIf", !ctx_r0.isArtifactPanelMaximized);
|
|
46
|
+
i0.ɵɵadvance();
|
|
47
|
+
i0.ɵɵstyleProp("width", ctx_r0.artifactPanelWidth, "%");
|
|
48
|
+
i0.ɵɵclassProp("maximized", ctx_r0.isArtifactPanelMaximized);
|
|
49
|
+
i0.ɵɵadvance();
|
|
50
|
+
i0.ɵɵproperty("artifactId", ctx_r0.activeArtifactId)("currentUser", ctx_r0.currentUser)("environmentId", ctx_r0.environmentId)("versionNumber", (tmp_7_0 = ctx_r0.activeVersionNumber) !== null && tmp_7_0 !== undefined ? tmp_7_0 : undefined)("showSaveToCollection", false)("viewContext", "collection")("contextCollectionId", (tmp_10_0 = ctx_r0.collectionState.activeCollectionId) !== null && tmp_10_0 !== undefined ? tmp_10_0 : undefined)("canShare", ctx_r0.canShareActiveArtifact)("canEdit", ctx_r0.canEditActiveArtifact)("isMaximized", ctx_r0.isArtifactPanelMaximized);
|
|
51
|
+
} }
|
|
52
|
+
export function LoadChatCollectionsResource() {
|
|
53
|
+
// Force inclusion in production builds (tree shaking workaround)
|
|
54
|
+
// Using null placeholders since Angular DI provides actual instances
|
|
55
|
+
const test = new ChatCollectionsResource(null, null, null, null, null);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Chat Collections Resource - displays the collections full view for tab-based display
|
|
59
|
+
* Extends BaseResourceComponent to work with the resource type system
|
|
60
|
+
* Shows all collections and their artifacts in a comprehensive view
|
|
61
|
+
* Includes artifact panel support for viewing selected artifacts
|
|
62
|
+
*/
|
|
63
|
+
let ChatCollectionsResource = class ChatCollectionsResource extends BaseResourceComponent {
|
|
64
|
+
artifactState;
|
|
65
|
+
artifactPermissionService;
|
|
66
|
+
collectionState;
|
|
67
|
+
navigationService;
|
|
68
|
+
router;
|
|
69
|
+
currentUser = null;
|
|
70
|
+
// Artifact panel state
|
|
71
|
+
isArtifactPanelOpen = false;
|
|
72
|
+
activeArtifactId = null;
|
|
73
|
+
activeVersionNumber = null;
|
|
74
|
+
canShareActiveArtifact = false;
|
|
75
|
+
canEditActiveArtifact = false;
|
|
76
|
+
artifactPanelWidth = 40; // Default 40% width (percentage-based)
|
|
77
|
+
isArtifactPanelMaximized = false;
|
|
78
|
+
artifactPanelWidthBeforeMaximize = 40; // Store width before maximizing
|
|
79
|
+
// Resize state
|
|
80
|
+
isResizing = false;
|
|
81
|
+
resizeStartX = 0;
|
|
82
|
+
resizeStartWidth = 0;
|
|
83
|
+
destroy$ = new Subject();
|
|
84
|
+
skipUrlUpdate = true; // Skip URL updates during initialization
|
|
85
|
+
lastNavigatedUrl = ''; // Track URL to avoid reacting to our own navigation
|
|
86
|
+
constructor(artifactState, artifactPermissionService, collectionState, navigationService, router) {
|
|
87
|
+
super();
|
|
88
|
+
this.artifactState = artifactState;
|
|
89
|
+
this.artifactPermissionService = artifactPermissionService;
|
|
90
|
+
this.collectionState = collectionState;
|
|
91
|
+
this.navigationService = navigationService;
|
|
92
|
+
this.router = router;
|
|
93
|
+
}
|
|
94
|
+
ngOnInit() {
|
|
95
|
+
const md = new Metadata();
|
|
96
|
+
this.currentUser = md.CurrentUser;
|
|
97
|
+
// Subscribe to artifact state changes
|
|
98
|
+
this.subscribeToArtifactState();
|
|
99
|
+
// Setup resize listeners
|
|
100
|
+
this.setupResizeListeners();
|
|
101
|
+
// Parse URL first and apply state
|
|
102
|
+
const urlState = this.parseUrlState();
|
|
103
|
+
if (urlState) {
|
|
104
|
+
this.applyUrlState(urlState);
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
// Check if we have navigation params from config (e.g., from Conversations linking here)
|
|
108
|
+
this.applyNavigationParams();
|
|
109
|
+
}
|
|
110
|
+
// Subscribe to state changes to update URL
|
|
111
|
+
this.subscribeToUrlStateChanges();
|
|
112
|
+
// Subscribe to router NavigationEnd events for back/forward button support
|
|
113
|
+
this.router.events
|
|
114
|
+
.pipe(filter((event) => event instanceof NavigationEnd), takeUntil(this.destroy$))
|
|
115
|
+
.subscribe(event => {
|
|
116
|
+
const currentUrl = event.urlAfterRedirects || event.url;
|
|
117
|
+
if (currentUrl !== this.lastNavigatedUrl) {
|
|
118
|
+
this.onExternalNavigation(currentUrl);
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
// Enable URL updates after initialization
|
|
122
|
+
this.skipUrlUpdate = false;
|
|
123
|
+
// Update URL to reflect current state
|
|
124
|
+
this.updateUrl();
|
|
125
|
+
// Notify load complete after user is set
|
|
126
|
+
setTimeout(() => {
|
|
127
|
+
this.NotifyLoadComplete();
|
|
128
|
+
}, 100);
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Parse URL query string for collection state.
|
|
132
|
+
* Query params: collectionId, artifactId, versionNumber
|
|
133
|
+
*/
|
|
134
|
+
parseUrlState() {
|
|
135
|
+
const url = this.router.url;
|
|
136
|
+
const queryIndex = url.indexOf('?');
|
|
137
|
+
if (queryIndex === -1)
|
|
138
|
+
return null;
|
|
139
|
+
const queryString = url.substring(queryIndex + 1);
|
|
140
|
+
const params = new URLSearchParams(queryString);
|
|
141
|
+
const collectionId = params.get('collectionId');
|
|
142
|
+
const artifactId = params.get('artifactId');
|
|
143
|
+
const versionNumber = params.get('versionNumber');
|
|
144
|
+
if (!collectionId && !artifactId)
|
|
145
|
+
return null;
|
|
146
|
+
return {
|
|
147
|
+
collectionId: collectionId || undefined,
|
|
148
|
+
artifactId: artifactId || undefined,
|
|
149
|
+
versionNumber: versionNumber ? parseInt(versionNumber, 10) : undefined
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Apply URL state to collection services.
|
|
154
|
+
*/
|
|
155
|
+
applyUrlState(state) {
|
|
156
|
+
// Set active collection if specified
|
|
157
|
+
if (state.collectionId) {
|
|
158
|
+
this.collectionState.setActiveCollection(state.collectionId);
|
|
159
|
+
}
|
|
160
|
+
// Open artifact if specified
|
|
161
|
+
if (state.artifactId) {
|
|
162
|
+
this.artifactState.openArtifact(state.artifactId, state.versionNumber);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Apply navigation parameters from configuration.
|
|
167
|
+
* This handles deep-linking from other resources (e.g., clicking a link in Conversations).
|
|
168
|
+
*/
|
|
169
|
+
applyNavigationParams() {
|
|
170
|
+
const config = this.Data?.Configuration;
|
|
171
|
+
if (!config)
|
|
172
|
+
return;
|
|
173
|
+
// Set active collection if specified
|
|
174
|
+
if (config.collectionId) {
|
|
175
|
+
this.collectionState.setActiveCollection(config.collectionId);
|
|
176
|
+
}
|
|
177
|
+
// Open artifact if specified
|
|
178
|
+
if (config.artifactId) {
|
|
179
|
+
const versionNumber = config.versionNumber ? config.versionNumber : undefined;
|
|
180
|
+
this.artifactState.openArtifact(config.artifactId, versionNumber);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Subscribe to state changes for URL updates.
|
|
185
|
+
*/
|
|
186
|
+
subscribeToUrlStateChanges() {
|
|
187
|
+
// Combine collection and artifact state changes
|
|
188
|
+
combineLatest([
|
|
189
|
+
this.collectionState.activeCollectionId$.pipe(distinctUntilChanged()),
|
|
190
|
+
this.artifactState.activeArtifactId$.pipe(distinctUntilChanged()),
|
|
191
|
+
this.artifactState.activeVersionNumber$.pipe(distinctUntilChanged())
|
|
192
|
+
])
|
|
193
|
+
.pipe(takeUntil(this.destroy$))
|
|
194
|
+
.subscribe(() => {
|
|
195
|
+
if (!this.skipUrlUpdate) {
|
|
196
|
+
this.updateUrl();
|
|
197
|
+
}
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Update URL query string to reflect current state.
|
|
202
|
+
* Uses Angular Router for proper browser history integration.
|
|
203
|
+
*/
|
|
204
|
+
updateUrl() {
|
|
205
|
+
const params = new URLSearchParams();
|
|
206
|
+
// Add collection ID
|
|
207
|
+
const collectionId = this.collectionState.activeCollectionId;
|
|
208
|
+
if (collectionId) {
|
|
209
|
+
params.set('collectionId', collectionId);
|
|
210
|
+
}
|
|
211
|
+
// Add artifact ID if panel is open
|
|
212
|
+
if (this.activeArtifactId) {
|
|
213
|
+
params.set('artifactId', this.activeArtifactId);
|
|
214
|
+
if (this.activeVersionNumber) {
|
|
215
|
+
params.set('versionNumber', this.activeVersionNumber.toString());
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
// Get current path without query string
|
|
219
|
+
const currentUrl = this.router.url;
|
|
220
|
+
const currentPath = currentUrl.split('?')[0];
|
|
221
|
+
const queryString = params.toString();
|
|
222
|
+
const newUrl = queryString ? `${currentPath}?${queryString}` : currentPath;
|
|
223
|
+
// Track this URL so we don't react to our own navigation
|
|
224
|
+
this.lastNavigatedUrl = newUrl;
|
|
225
|
+
// Use Angular Router for proper browser history integration
|
|
226
|
+
this.router.navigateByUrl(newUrl, { replaceUrl: false });
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Handle external navigation (back/forward buttons).
|
|
230
|
+
* Parses the URL and applies the state without triggering a new navigation.
|
|
231
|
+
*/
|
|
232
|
+
onExternalNavigation(url) {
|
|
233
|
+
// Check if this URL is for our component (contains our base path)
|
|
234
|
+
const currentPath = this.router.url.split('?')[0];
|
|
235
|
+
const newPath = url.split('?')[0];
|
|
236
|
+
// Only handle if we're still on the same base path (same component instance)
|
|
237
|
+
if (currentPath !== newPath) {
|
|
238
|
+
return; // Different route entirely, shell will handle it
|
|
239
|
+
}
|
|
240
|
+
// Parse the new URL state
|
|
241
|
+
const urlState = this.parseUrlFromString(url);
|
|
242
|
+
// Apply the state without triggering URL updates
|
|
243
|
+
this.skipUrlUpdate = true;
|
|
244
|
+
if (urlState) {
|
|
245
|
+
this.applyUrlState(urlState);
|
|
246
|
+
}
|
|
247
|
+
else {
|
|
248
|
+
// No params means clear state
|
|
249
|
+
this.collectionState.setActiveCollection(null);
|
|
250
|
+
this.artifactState.closeArtifact();
|
|
251
|
+
}
|
|
252
|
+
this.skipUrlUpdate = false;
|
|
253
|
+
// Update the tracked URL
|
|
254
|
+
this.lastNavigatedUrl = url;
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Parse URL state from a URL string (used for external navigation).
|
|
258
|
+
*/
|
|
259
|
+
parseUrlFromString(url) {
|
|
260
|
+
const queryIndex = url.indexOf('?');
|
|
261
|
+
if (queryIndex === -1)
|
|
262
|
+
return null;
|
|
263
|
+
const queryString = url.substring(queryIndex + 1);
|
|
264
|
+
const params = new URLSearchParams(queryString);
|
|
265
|
+
const collectionId = params.get('collectionId');
|
|
266
|
+
const artifactId = params.get('artifactId');
|
|
267
|
+
const versionNumber = params.get('versionNumber');
|
|
268
|
+
if (!collectionId && !artifactId)
|
|
269
|
+
return null;
|
|
270
|
+
return {
|
|
271
|
+
collectionId: collectionId || undefined,
|
|
272
|
+
artifactId: artifactId || undefined,
|
|
273
|
+
versionNumber: versionNumber ? parseInt(versionNumber, 10) : undefined
|
|
274
|
+
};
|
|
275
|
+
}
|
|
276
|
+
ngOnDestroy() {
|
|
277
|
+
this.destroy$.next();
|
|
278
|
+
this.destroy$.complete();
|
|
279
|
+
this.removeResizeListeners();
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Subscribe to artifact state service for panel open/close
|
|
283
|
+
*/
|
|
284
|
+
subscribeToArtifactState() {
|
|
285
|
+
// Subscribe to panel open state
|
|
286
|
+
this.artifactState.isPanelOpen$
|
|
287
|
+
.pipe(takeUntil(this.destroy$))
|
|
288
|
+
.subscribe(isOpen => {
|
|
289
|
+
this.isArtifactPanelOpen = isOpen;
|
|
290
|
+
});
|
|
291
|
+
// Subscribe to active artifact ID
|
|
292
|
+
this.artifactState.activeArtifactId$
|
|
293
|
+
.pipe(takeUntil(this.destroy$))
|
|
294
|
+
.subscribe(async (id) => {
|
|
295
|
+
this.activeArtifactId = id;
|
|
296
|
+
if (id) {
|
|
297
|
+
await this.loadArtifactPermissions(id);
|
|
298
|
+
}
|
|
299
|
+
else {
|
|
300
|
+
this.canShareActiveArtifact = false;
|
|
301
|
+
this.canEditActiveArtifact = false;
|
|
302
|
+
}
|
|
303
|
+
});
|
|
304
|
+
// Subscribe to active version number
|
|
305
|
+
this.artifactState.activeVersionNumber$
|
|
306
|
+
.pipe(takeUntil(this.destroy$))
|
|
307
|
+
.subscribe(versionNumber => {
|
|
308
|
+
this.activeVersionNumber = versionNumber;
|
|
309
|
+
});
|
|
310
|
+
}
|
|
311
|
+
/**
|
|
312
|
+
* Load permissions for the active artifact
|
|
313
|
+
*/
|
|
314
|
+
async loadArtifactPermissions(artifactId) {
|
|
315
|
+
if (!artifactId || !this.currentUser) {
|
|
316
|
+
this.canShareActiveArtifact = false;
|
|
317
|
+
this.canEditActiveArtifact = false;
|
|
318
|
+
return;
|
|
319
|
+
}
|
|
320
|
+
try {
|
|
321
|
+
const permissions = await this.artifactPermissionService.getUserPermissions(artifactId, this.currentUser);
|
|
322
|
+
this.canShareActiveArtifact = permissions.canShare;
|
|
323
|
+
this.canEditActiveArtifact = permissions.canEdit;
|
|
324
|
+
}
|
|
325
|
+
catch (error) {
|
|
326
|
+
console.error('Failed to load artifact permissions:', error);
|
|
327
|
+
this.canShareActiveArtifact = false;
|
|
328
|
+
this.canEditActiveArtifact = false;
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
/**
|
|
332
|
+
* Close the artifact panel
|
|
333
|
+
*/
|
|
334
|
+
closeArtifactPanel() {
|
|
335
|
+
this.artifactState.closeArtifact();
|
|
336
|
+
}
|
|
337
|
+
/**
|
|
338
|
+
* Toggle maximize/restore state for artifact panel
|
|
339
|
+
*/
|
|
340
|
+
toggleMaximizeArtifactPanel() {
|
|
341
|
+
if (this.isArtifactPanelMaximized) {
|
|
342
|
+
// Restore to previous width
|
|
343
|
+
this.artifactPanelWidth = this.artifactPanelWidthBeforeMaximize;
|
|
344
|
+
this.isArtifactPanelMaximized = false;
|
|
345
|
+
}
|
|
346
|
+
else {
|
|
347
|
+
// Maximize - store current width and set to 100%
|
|
348
|
+
this.artifactPanelWidthBeforeMaximize = this.artifactPanelWidth;
|
|
349
|
+
this.artifactPanelWidth = 100;
|
|
350
|
+
this.isArtifactPanelMaximized = true;
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
/**
|
|
354
|
+
* Handle navigation request from artifact viewer panel.
|
|
355
|
+
* Converts the link event to a generic navigation request and uses NavigationService.
|
|
356
|
+
*/
|
|
357
|
+
onNavigateToLink(event) {
|
|
358
|
+
// Map the link type to the nav item name
|
|
359
|
+
const navItemName = event.type === 'conversation' ? 'Conversations' : 'Collections';
|
|
360
|
+
// Build configuration params to pass to the target resource
|
|
361
|
+
const params = {};
|
|
362
|
+
if (event.type === 'conversation') {
|
|
363
|
+
params['conversationId'] = event.id;
|
|
364
|
+
}
|
|
365
|
+
else {
|
|
366
|
+
params['collectionId'] = event.id;
|
|
367
|
+
}
|
|
368
|
+
// Include artifact info so destination can open it
|
|
369
|
+
if (event.artifactId) {
|
|
370
|
+
params['artifactId'] = event.artifactId;
|
|
371
|
+
if (event.versionNumber) {
|
|
372
|
+
params['versionNumber'] = event.versionNumber;
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
// Navigate using the generic nav item method
|
|
376
|
+
this.navigationService.OpenNavItemByName(navItemName, params);
|
|
377
|
+
}
|
|
378
|
+
/**
|
|
379
|
+
* Get the environment ID from configuration or use default
|
|
380
|
+
*/
|
|
381
|
+
get environmentId() {
|
|
382
|
+
return this.Data?.Configuration?.environmentId || EnvironmentEntityExtended.DefaultEnvironmentID;
|
|
383
|
+
}
|
|
384
|
+
/**
|
|
385
|
+
* Get the display name for chat collections
|
|
386
|
+
*/
|
|
387
|
+
async GetResourceDisplayName(data) {
|
|
388
|
+
return 'Collections';
|
|
389
|
+
}
|
|
390
|
+
/**
|
|
391
|
+
* Get the icon class for chat collections
|
|
392
|
+
*/
|
|
393
|
+
async GetResourceIconClass(data) {
|
|
394
|
+
return 'fa-solid fa-folder-open';
|
|
395
|
+
}
|
|
396
|
+
// Resize handling
|
|
397
|
+
setupResizeListeners() {
|
|
398
|
+
this.boundOnResizeMove = this.onResizeMove.bind(this);
|
|
399
|
+
this.boundOnResizeEnd = this.onResizeEnd.bind(this);
|
|
400
|
+
}
|
|
401
|
+
removeResizeListeners() {
|
|
402
|
+
window.removeEventListener('mousemove', this.boundOnResizeMove);
|
|
403
|
+
window.removeEventListener('mouseup', this.boundOnResizeEnd);
|
|
404
|
+
}
|
|
405
|
+
boundOnResizeMove = () => { };
|
|
406
|
+
boundOnResizeEnd = () => { };
|
|
407
|
+
onResizeStart(event) {
|
|
408
|
+
this.isResizing = true;
|
|
409
|
+
this.resizeStartX = event.clientX;
|
|
410
|
+
this.resizeStartWidth = this.artifactPanelWidth;
|
|
411
|
+
window.addEventListener('mousemove', this.boundOnResizeMove);
|
|
412
|
+
window.addEventListener('mouseup', this.boundOnResizeEnd);
|
|
413
|
+
event.preventDefault();
|
|
414
|
+
document.body.style.cursor = 'col-resize';
|
|
415
|
+
document.body.style.userSelect = 'none';
|
|
416
|
+
}
|
|
417
|
+
onResizeMove(event) {
|
|
418
|
+
if (!this.isResizing)
|
|
419
|
+
return;
|
|
420
|
+
const container = document.querySelector('.chat-collections-container');
|
|
421
|
+
if (!container)
|
|
422
|
+
return;
|
|
423
|
+
const containerWidth = container.offsetWidth;
|
|
424
|
+
const deltaX = event.clientX - this.resizeStartX;
|
|
425
|
+
const deltaPercent = (deltaX / containerWidth) * -100; // Negative because we're pulling from the right
|
|
426
|
+
let newWidth = this.resizeStartWidth + deltaPercent;
|
|
427
|
+
// Constrain between 20% and 80%
|
|
428
|
+
newWidth = Math.max(20, Math.min(80, newWidth));
|
|
429
|
+
this.artifactPanelWidth = newWidth;
|
|
430
|
+
}
|
|
431
|
+
onResizeEnd(event) {
|
|
432
|
+
this.isResizing = false;
|
|
433
|
+
window.removeEventListener('mousemove', this.boundOnResizeMove);
|
|
434
|
+
window.removeEventListener('mouseup', this.boundOnResizeEnd);
|
|
435
|
+
document.body.style.cursor = '';
|
|
436
|
+
document.body.style.userSelect = '';
|
|
437
|
+
}
|
|
438
|
+
static ɵfac = function ChatCollectionsResource_Factory(t) { return new (t || ChatCollectionsResource)(i0.ɵɵdirectiveInject(i1.ArtifactStateService), i0.ɵɵdirectiveInject(i1.ArtifactPermissionService), i0.ɵɵdirectiveInject(i1.CollectionStateService), i0.ɵɵdirectiveInject(i2.NavigationService), i0.ɵɵdirectiveInject(i3.Router)); };
|
|
439
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ChatCollectionsResource, selectors: [["mj-chat-collections-resource"]], features: [i0.ɵɵInheritDefinitionFeature], decls: 4, vars: 4, consts: [[1, "chat-collections-container"], [1, "collections-main"], [3, "environmentId", "currentUser", 4, "ngIf"], [4, "ngIf"], [3, "environmentId", "currentUser"], ["class", "artifact-panel-resize-handle", 3, "mousedown", 4, "ngIf"], [1, "artifact-panel"], [3, "closed", "maximizeToggled", "navigateToLink", "artifactId", "currentUser", "environmentId", "versionNumber", "showSaveToCollection", "viewContext", "contextCollectionId", "canShare", "canEdit", "isMaximized"], [1, "artifact-panel-resize-handle", 3, "mousedown"]], template: function ChatCollectionsResource_Template(rf, ctx) { if (rf & 1) {
|
|
440
|
+
i0.ɵɵelementStart(0, "div", 0)(1, "div", 1);
|
|
441
|
+
i0.ɵɵtemplate(2, ChatCollectionsResource_mj_collections_full_view_2_Template, 1, 2, "mj-collections-full-view", 2);
|
|
442
|
+
i0.ɵɵelementEnd();
|
|
443
|
+
i0.ɵɵtemplate(3, ChatCollectionsResource_ng_container_3_Template, 4, 15, "ng-container", 3);
|
|
444
|
+
i0.ɵɵelementEnd();
|
|
445
|
+
} if (rf & 2) {
|
|
446
|
+
i0.ɵɵadvance();
|
|
447
|
+
i0.ɵɵclassProp("with-artifact-panel", ctx.isArtifactPanelOpen && ctx.activeArtifactId);
|
|
448
|
+
i0.ɵɵadvance();
|
|
449
|
+
i0.ɵɵproperty("ngIf", ctx.currentUser);
|
|
450
|
+
i0.ɵɵadvance();
|
|
451
|
+
i0.ɵɵproperty("ngIf", ctx.isArtifactPanelOpen && ctx.activeArtifactId);
|
|
452
|
+
} }, dependencies: [i4.NgIf, i1.CollectionsFullViewComponent, i5.ArtifactViewerPanelComponent], styles: ["\n :host {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n }\n\n .chat-collections-container {\n display: flex;\n width: 100%;\n height: 100%;\n flex: 1;\n overflow: hidden;\n position: relative; /* Required for absolute positioning of maximized panel */\n }\n\n .collections-main {\n flex: 1;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n min-width: 0;\n }\n\n .collections-main.with-artifact-panel {\n /* When artifact panel is open, main area shrinks */\n }\n\n .artifact-panel-resize-handle {\n width: 8px;\n cursor: col-resize;\n background: transparent;\n transition: background 150ms ease;\n flex-shrink: 0;\n }\n\n .artifact-panel-resize-handle:hover {\n background: #0076B6;\n }\n\n .artifact-panel-resize-handle:active {\n background: #005a8c;\n }\n\n .artifact-panel {\n flex-shrink: 0;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n border-left: 1px solid #e0e0e0;\n background: white;\n transition: width 0.2s ease;\n }\n\n .artifact-panel.maximized {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n width: 100% !important;\n z-index: 100;\n }\n "], encapsulation: 2 });
|
|
453
|
+
};
|
|
454
|
+
ChatCollectionsResource = __decorate([
|
|
455
|
+
RegisterClass(BaseResourceComponent, 'ChatCollectionsResource')
|
|
456
|
+
], ChatCollectionsResource);
|
|
457
|
+
export { ChatCollectionsResource };
|
|
458
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ChatCollectionsResource, [{
|
|
459
|
+
type: Component,
|
|
460
|
+
args: [{ selector: 'mj-chat-collections-resource', template: `
|
|
461
|
+
<div class="chat-collections-container">
|
|
462
|
+
<!-- Collections view -->
|
|
463
|
+
<div class="collections-main" [class.with-artifact-panel]="isArtifactPanelOpen && activeArtifactId">
|
|
464
|
+
<mj-collections-full-view
|
|
465
|
+
*ngIf="currentUser"
|
|
466
|
+
[environmentId]="environmentId"
|
|
467
|
+
[currentUser]="currentUser">
|
|
468
|
+
</mj-collections-full-view>
|
|
469
|
+
</div>
|
|
470
|
+
|
|
471
|
+
<!-- Artifact Panel -->
|
|
472
|
+
<ng-container *ngIf="isArtifactPanelOpen && activeArtifactId">
|
|
473
|
+
<div class="artifact-panel-resize-handle"
|
|
474
|
+
*ngIf="!isArtifactPanelMaximized"
|
|
475
|
+
(mousedown)="onResizeStart($event)"></div>
|
|
476
|
+
<div class="artifact-panel"
|
|
477
|
+
[style.width.%]="artifactPanelWidth"
|
|
478
|
+
[class.maximized]="isArtifactPanelMaximized">
|
|
479
|
+
<mj-artifact-viewer-panel
|
|
480
|
+
[artifactId]="activeArtifactId"
|
|
481
|
+
[currentUser]="currentUser"
|
|
482
|
+
[environmentId]="environmentId"
|
|
483
|
+
[versionNumber]="activeVersionNumber ?? undefined"
|
|
484
|
+
[showSaveToCollection]="false"
|
|
485
|
+
[viewContext]="'collection'"
|
|
486
|
+
[contextCollectionId]="collectionState.activeCollectionId ?? undefined"
|
|
487
|
+
[canShare]="canShareActiveArtifact"
|
|
488
|
+
[canEdit]="canEditActiveArtifact"
|
|
489
|
+
[isMaximized]="isArtifactPanelMaximized"
|
|
490
|
+
(closed)="closeArtifactPanel()"
|
|
491
|
+
(maximizeToggled)="toggleMaximizeArtifactPanel()"
|
|
492
|
+
(navigateToLink)="onNavigateToLink($event)">
|
|
493
|
+
</mj-artifact-viewer-panel>
|
|
494
|
+
</div>
|
|
495
|
+
</ng-container>
|
|
496
|
+
</div>
|
|
497
|
+
`, encapsulation: ViewEncapsulation.None, styles: ["\n :host {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n }\n\n .chat-collections-container {\n display: flex;\n width: 100%;\n height: 100%;\n flex: 1;\n overflow: hidden;\n position: relative; /* Required for absolute positioning of maximized panel */\n }\n\n .collections-main {\n flex: 1;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n min-width: 0;\n }\n\n .collections-main.with-artifact-panel {\n /* When artifact panel is open, main area shrinks */\n }\n\n .artifact-panel-resize-handle {\n width: 8px;\n cursor: col-resize;\n background: transparent;\n transition: background 150ms ease;\n flex-shrink: 0;\n }\n\n .artifact-panel-resize-handle:hover {\n background: #0076B6;\n }\n\n .artifact-panel-resize-handle:active {\n background: #005a8c;\n }\n\n .artifact-panel {\n flex-shrink: 0;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n border-left: 1px solid #e0e0e0;\n background: white;\n transition: width 0.2s ease;\n }\n\n .artifact-panel.maximized {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n width: 100% !important;\n z-index: 100;\n }\n "] }]
|
|
498
|
+
}], () => [{ type: i1.ArtifactStateService }, { type: i1.ArtifactPermissionService }, { type: i1.CollectionStateService }, { type: i2.NavigationService }, { type: i3.Router }], null); })();
|
|
499
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ChatCollectionsResource, { className: "ChatCollectionsResource", filePath: "src/lib/resource-wrappers/chat-collections-resource.component.ts", lineNumber: 129 }); })();
|
|
500
|
+
//# sourceMappingURL=chat-collections-resource.component.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-collections-resource.component.js","sourceRoot":"","sources":["../../../src/lib/resource-wrappers/chat-collections-resource.component.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { OnDestroy } from '@angular/core';
|
|
2
|
+
import { Router } from '@angular/router';
|
|
3
|
+
import { BaseResourceComponent, NavigationService } from '@memberjunction/ng-shared';
|
|
4
|
+
import { ResourceData } from '@memberjunction/core-entities';
|
|
5
|
+
import { ConversationStateService, ArtifactStateService } from '@memberjunction/ng-conversations';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
export declare function LoadChatConversationsResource(): void;
|
|
8
|
+
/**
|
|
9
|
+
* Chat Conversations Resource - wraps the conversation chat area for tab-based display
|
|
10
|
+
* Extends BaseResourceComponent to work with the resource type system
|
|
11
|
+
* Displays conversation list sidebar + active conversation chat interface
|
|
12
|
+
* Designed to work with the tab system for multi-tab conversation management
|
|
13
|
+
*/
|
|
14
|
+
export declare class ChatConversationsResource extends BaseResourceComponent implements OnDestroy {
|
|
15
|
+
private navigationService;
|
|
16
|
+
private conversationState;
|
|
17
|
+
private artifactState;
|
|
18
|
+
private router;
|
|
19
|
+
currentUser: any;
|
|
20
|
+
private destroy$;
|
|
21
|
+
private skipUrlUpdate;
|
|
22
|
+
private lastNavigatedUrl;
|
|
23
|
+
constructor(navigationService: NavigationService, conversationState: ConversationStateService, artifactState: ArtifactStateService, router: Router);
|
|
24
|
+
ngOnInit(): void;
|
|
25
|
+
ngOnDestroy(): void;
|
|
26
|
+
/**
|
|
27
|
+
* Parse URL query string for conversation state.
|
|
28
|
+
* Query params: conversationId, artifactId, versionNumber
|
|
29
|
+
*/
|
|
30
|
+
private parseUrlState;
|
|
31
|
+
/**
|
|
32
|
+
* Apply URL state to conversation services.
|
|
33
|
+
*/
|
|
34
|
+
private applyUrlState;
|
|
35
|
+
/**
|
|
36
|
+
* Apply navigation parameters from configuration.
|
|
37
|
+
* This handles deep-linking from other resources (e.g., clicking a link in Collections).
|
|
38
|
+
*/
|
|
39
|
+
private applyNavigationParams;
|
|
40
|
+
/**
|
|
41
|
+
* Subscribe to state changes from services to update URL.
|
|
42
|
+
*/
|
|
43
|
+
private subscribeToStateChanges;
|
|
44
|
+
/**
|
|
45
|
+
* Update URL query string to reflect current state.
|
|
46
|
+
* Uses Angular Router for proper browser history integration.
|
|
47
|
+
*/
|
|
48
|
+
private updateUrl;
|
|
49
|
+
/**
|
|
50
|
+
* Handle external navigation (back/forward buttons).
|
|
51
|
+
* Parses the URL and applies the state without triggering a new navigation.
|
|
52
|
+
*/
|
|
53
|
+
private onExternalNavigation;
|
|
54
|
+
/**
|
|
55
|
+
* Parse URL state from a URL string (used for external navigation).
|
|
56
|
+
*/
|
|
57
|
+
private parseUrlFromString;
|
|
58
|
+
/**
|
|
59
|
+
* Get the environment ID from configuration or use default
|
|
60
|
+
*/
|
|
61
|
+
get environmentId(): string;
|
|
62
|
+
/**
|
|
63
|
+
* Get the active conversation ID from configuration (if specified)
|
|
64
|
+
*/
|
|
65
|
+
get activeConversationId(): string | undefined;
|
|
66
|
+
/**
|
|
67
|
+
* Get the display name for chat conversations
|
|
68
|
+
*/
|
|
69
|
+
GetResourceDisplayName(data: ResourceData): Promise<string>;
|
|
70
|
+
/**
|
|
71
|
+
* Get the icon class for chat conversations
|
|
72
|
+
*/
|
|
73
|
+
GetResourceIconClass(data: ResourceData): Promise<string>;
|
|
74
|
+
/**
|
|
75
|
+
* Handle navigation request from artifact viewer panel within the chat area.
|
|
76
|
+
* Converts the link event to a generic navigation request and uses NavigationService.
|
|
77
|
+
*/
|
|
78
|
+
onArtifactLinkClicked(event: {
|
|
79
|
+
type: 'conversation' | 'collection';
|
|
80
|
+
id: string;
|
|
81
|
+
artifactId?: string;
|
|
82
|
+
versionNumber?: number;
|
|
83
|
+
}): void;
|
|
84
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ChatConversationsResource, never>;
|
|
85
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ChatConversationsResource, "mj-chat-conversations-resource", never, {}, {}, never, never, false, never>;
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=chat-conversations-resource.component.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-conversations-resource.component.d.ts","sourceRoot":"","sources":["../../../src/lib/resource-wrappers/chat-conversations-resource.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgC,SAAS,EAAE,MAAM,eAAe,CAAC;AACxE,OAAO,EAAE,MAAM,EAAiB,MAAM,iBAAiB,CAAC;AAGxD,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACrF,OAAO,EAAE,YAAY,EAA6B,MAAM,+BAA+B,CAAC;AACxF,OAAO,EAAE,wBAAwB,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;;AAGlG,wBAAgB,6BAA6B,SAI5C;AAED;;;;;GAKG;AACH,qBA0Da,yBAA0B,SAAQ,qBAAsB,YAAW,SAAS;IAOrF,OAAO,CAAC,iBAAiB;IACzB,OAAO,CAAC,iBAAiB;IACzB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,MAAM;IATT,WAAW,EAAE,GAAG,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,aAAa,CAAQ;IAC7B,OAAO,CAAC,gBAAgB,CAAc;gBAG5B,iBAAiB,EAAE,iBAAiB,EACpC,iBAAiB,EAAE,wBAAwB,EAC3C,aAAa,EAAE,oBAAoB,EACnC,MAAM,EAAE,MAAM;IAKxB,QAAQ;IAyCR,WAAW;IAKX;;;OAGG;IACH,OAAO,CAAC,aAAa;IAoBrB;;OAEG;IACH,OAAO,CAAC,aAAa;IAarB;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IAgB7B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAe/B;;;OAGG;IACH,OAAO,CAAC,SAAS;IAgCjB;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IA4B5B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAmB1B;;OAEG;IACH,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED;;OAEG;IACH,IAAI,oBAAoB,IAAI,MAAM,GAAG,SAAS,CAE7C;IAED;;OAEG;IACG,sBAAsB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IASjE;;OAEG;IACG,oBAAoB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAI/D;;;OAGG;IACH,qBAAqB,CAAC,KAAK,EAAE;QAC3B,IAAI,EAAE,cAAc,GAAG,YAAY,CAAC;QACpC,EAAE,EAAE,MAAM,CAAC;QACX,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,GAAG,IAAI;yCA/QG,yBAAyB;2CAAzB,yBAAyB;CAsSrC"}
|