@memberjunction/ng-conversations 2.104.0 → 2.106.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/components/collection/collection-view.component.d.ts +5 -1
- package/dist/lib/components/collection/collection-view.component.d.ts.map +1 -1
- package/dist/lib/components/collection/collection-view.component.js +53 -11
- package/dist/lib/components/collection/collection-view.component.js.map +1 -1
- package/dist/lib/components/conversation/conversation-chat-area.component.d.ts +53 -13
- package/dist/lib/components/conversation/conversation-chat-area.component.d.ts.map +1 -1
- package/dist/lib/components/conversation/conversation-chat-area.component.js +455 -289
- package/dist/lib/components/conversation/conversation-chat-area.component.js.map +1 -1
- package/dist/lib/components/conversation/conversation-list.component.d.ts +9 -1
- package/dist/lib/components/conversation/conversation-list.component.d.ts.map +1 -1
- package/dist/lib/components/conversation/conversation-list.component.js +258 -71
- package/dist/lib/components/conversation/conversation-list.component.js.map +1 -1
- package/dist/lib/components/mention/mention-dropdown.component.d.ts +6 -0
- package/dist/lib/components/mention/mention-dropdown.component.d.ts.map +1 -1
- package/dist/lib/components/mention/mention-dropdown.component.js +35 -13
- package/dist/lib/components/mention/mention-dropdown.component.js.map +1 -1
- package/dist/lib/components/message/message-input.component.d.ts +49 -12
- package/dist/lib/components/message/message-input.component.d.ts.map +1 -1
- package/dist/lib/components/message/message-input.component.js +579 -221
- package/dist/lib/components/message/message-input.component.js.map +1 -1
- package/dist/lib/components/message/message-item.component.d.ts +16 -5
- package/dist/lib/components/message/message-item.component.d.ts.map +1 -1
- package/dist/lib/components/message/message-item.component.js +136 -64
- package/dist/lib/components/message/message-item.component.js.map +1 -1
- package/dist/lib/components/message/message-list.component.d.ts +11 -5
- package/dist/lib/components/message/message-list.component.d.ts.map +1 -1
- package/dist/lib/components/message/message-list.component.js +48 -9
- package/dist/lib/components/message/message-list.component.js.map +1 -1
- package/dist/lib/components/navigation/conversation-navigation.component.d.ts.map +1 -1
- package/dist/lib/components/navigation/conversation-navigation.component.js +24 -9
- package/dist/lib/components/navigation/conversation-navigation.component.js.map +1 -1
- package/dist/lib/components/task/tasks-full-view.component.d.ts +47 -0
- package/dist/lib/components/task/tasks-full-view.component.d.ts.map +1 -0
- package/dist/lib/components/task/tasks-full-view.component.js +368 -0
- package/dist/lib/components/task/tasks-full-view.component.js.map +1 -0
- package/dist/lib/components/tasks/task-widget.component.d.ts +29 -0
- package/dist/lib/components/tasks/task-widget.component.d.ts.map +1 -0
- package/dist/lib/components/tasks/task-widget.component.js +385 -0
- package/dist/lib/components/tasks/task-widget.component.js.map +1 -0
- package/dist/lib/components/tasks/tasks-dropdown.component.d.ts +22 -8
- package/dist/lib/components/tasks/tasks-dropdown.component.d.ts.map +1 -1
- package/dist/lib/components/tasks/tasks-dropdown.component.js +195 -99
- package/dist/lib/components/tasks/tasks-dropdown.component.js.map +1 -1
- package/dist/lib/components/thread/thread-panel.component.d.ts +3 -1
- package/dist/lib/components/thread/thread-panel.component.d.ts.map +1 -1
- package/dist/lib/components/thread/thread-panel.component.js +14 -14
- package/dist/lib/components/thread/thread-panel.component.js.map +1 -1
- package/dist/lib/components/workspace/conversation-workspace.component.d.ts +43 -4
- package/dist/lib/components/workspace/conversation-workspace.component.d.ts.map +1 -1
- package/dist/lib/components/workspace/conversation-workspace.component.js +288 -46
- package/dist/lib/components/workspace/conversation-workspace.component.js.map +1 -1
- package/dist/lib/conversations.module.d.ts +40 -46
- package/dist/lib/conversations.module.d.ts.map +1 -1
- package/dist/lib/conversations.module.js +28 -42
- package/dist/lib/conversations.module.js.map +1 -1
- package/dist/lib/models/conversation-state.model.d.ts +29 -1
- package/dist/lib/models/conversation-state.model.d.ts.map +1 -1
- package/dist/lib/services/conversation-agent.service.d.ts +6 -5
- package/dist/lib/services/conversation-agent.service.d.ts.map +1 -1
- package/dist/lib/services/conversation-agent.service.js +18 -19
- package/dist/lib/services/conversation-agent.service.js.map +1 -1
- package/dist/lib/services/data-cache.service.d.ts +96 -0
- package/dist/lib/services/data-cache.service.d.ts.map +1 -0
- package/dist/lib/services/data-cache.service.js +203 -0
- package/dist/lib/services/data-cache.service.js.map +1 -0
- package/dist/public-api.d.ts +3 -6
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +3 -6
- package/dist/public-api.js.map +1 -1
- package/package.json +12 -10
- package/dist/lib/components/artifact/artifact-panel.component.d.ts +0 -22
- package/dist/lib/components/artifact/artifact-panel.component.d.ts.map +0 -1
- package/dist/lib/components/artifact/artifact-panel.component.js +0 -237
- package/dist/lib/components/artifact/artifact-panel.component.js.map +0 -1
- package/dist/lib/components/artifact/artifact-upload-modal.component.d.ts +0 -39
- package/dist/lib/components/artifact/artifact-upload-modal.component.d.ts.map +0 -1
- package/dist/lib/components/artifact/artifact-upload-modal.component.js +0 -384
- package/dist/lib/components/artifact/artifact-upload-modal.component.js.map +0 -1
- package/dist/lib/components/artifact/artifact-version-history.component.d.ts +0 -28
- package/dist/lib/components/artifact/artifact-version-history.component.d.ts.map +0 -1
- package/dist/lib/components/artifact/artifact-version-history.component.js +0 -280
- package/dist/lib/components/artifact/artifact-version-history.component.js.map +0 -1
- package/dist/lib/components/artifact/artifact-viewer-panel.component.d.ts +0 -22
- package/dist/lib/components/artifact/artifact-viewer-panel.component.d.ts.map +0 -1
- package/dist/lib/components/artifact/artifact-viewer-panel.component.js +0 -182
- package/dist/lib/components/artifact/artifact-viewer-panel.component.js.map +0 -1
- package/dist/lib/components/artifact/artifact-viewer.component.d.ts +0 -27
- package/dist/lib/components/artifact/artifact-viewer.component.d.ts.map +0 -1
- package/dist/lib/components/artifact/artifact-viewer.component.js +0 -266
- package/dist/lib/components/artifact/artifact-viewer.component.js.map +0 -1
- package/dist/lib/components/artifact/inline-artifact.component.d.ts +0 -46
- package/dist/lib/components/artifact/inline-artifact.component.d.ts.map +0 -1
- package/dist/lib/components/artifact/inline-artifact.component.js +0 -447
- package/dist/lib/components/artifact/inline-artifact.component.js.map +0 -1
- package/dist/lib/components/task/task-form-modal.component.d.ts +0 -42
- package/dist/lib/components/task/task-form-modal.component.d.ts.map +0 -1
- package/dist/lib/components/task/task-form-modal.component.js +0 -329
- package/dist/lib/components/task/task-form-modal.component.js.map +0 -1
- package/dist/lib/components/task/task-item.component.d.ts +0 -22
- package/dist/lib/components/task/task-item.component.d.ts.map +0 -1
- package/dist/lib/components/task/task-item.component.js +0 -234
- package/dist/lib/components/task/task-item.component.js.map +0 -1
- package/dist/lib/components/task/task-list.component.d.ts +0 -32
- package/dist/lib/components/task/task-list.component.d.ts.map +0 -1
- package/dist/lib/components/task/task-list.component.js +0 -290
- package/dist/lib/components/task/task-list.component.js.map +0 -1
|
@@ -0,0 +1,368 @@
|
|
|
1
|
+
import { Component, Input, Output, EventEmitter } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { RunView } from '@memberjunction/core';
|
|
4
|
+
import { TaskComponent } from '@memberjunction/ng-tasks';
|
|
5
|
+
import { AIEngineBase } from '@memberjunction/ai-engine-base';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
function TasksFullViewComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
8
|
+
const _r1 = i0.ɵɵgetCurrentView();
|
|
9
|
+
i0.ɵɵelementStart(0, "mj-task", 3);
|
|
10
|
+
i0.ɵɵlistener("taskClicked", function TasksFullViewComponent_Conditional_1_Template_mj_task_taskClicked_0_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onTaskClick($event)); });
|
|
11
|
+
i0.ɵɵelementEnd();
|
|
12
|
+
} if (rf & 2) {
|
|
13
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
14
|
+
i0.ɵɵproperty("tasks", ctx_r1.filteredTasks)("title", "Tasks")("description", ctx_r1.getDescription())("showHeader", true)("showViewToggle", false)("viewMode", "simple");
|
|
15
|
+
} }
|
|
16
|
+
function TasksFullViewComponent_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
17
|
+
const _r3 = i0.ɵɵgetCurrentView();
|
|
18
|
+
i0.ɵɵelementStart(0, "div", 4)(1, "div", 5)(2, "button", 6);
|
|
19
|
+
i0.ɵɵlistener("click", function TasksFullViewComponent_Conditional_2_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.backToTaskList()); });
|
|
20
|
+
i0.ɵɵelement(3, "i", 7);
|
|
21
|
+
i0.ɵɵelementStart(4, "span");
|
|
22
|
+
i0.ɵɵtext(5, "Back to Tasks");
|
|
23
|
+
i0.ɵɵelementEnd()();
|
|
24
|
+
i0.ɵɵelementStart(6, "div", 8);
|
|
25
|
+
i0.ɵɵtext(7, "/");
|
|
26
|
+
i0.ɵɵelementEnd();
|
|
27
|
+
i0.ɵɵelementStart(8, "span", 9);
|
|
28
|
+
i0.ɵɵtext(9);
|
|
29
|
+
i0.ɵɵelementEnd()();
|
|
30
|
+
i0.ɵɵelementStart(10, "mj-task", 10);
|
|
31
|
+
i0.ɵɵlistener("taskClicked", function TasksFullViewComponent_Conditional_2_Template_mj_task_taskClicked_10_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onSubTaskClick($event)); })("openEntityRecord", function TasksFullViewComponent_Conditional_2_Template_mj_task_openEntityRecord_10_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onOpenEntityRecord($event)); });
|
|
32
|
+
i0.ɵɵelementEnd()();
|
|
33
|
+
} if (rf & 2) {
|
|
34
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
35
|
+
i0.ɵɵclassProp("swoosh-in", ctx_r1.showDetailAnimation);
|
|
36
|
+
i0.ɵɵadvance(9);
|
|
37
|
+
i0.ɵɵtextInterpolate(ctx_r1.selectedTask.Name);
|
|
38
|
+
i0.ɵɵadvance();
|
|
39
|
+
i0.ɵɵproperty("tasks", ctx_r1.subTasks)("ganttTasks", ctx_r1.subTasksWithParent)("taskDependencies", ctx_r1.taskDependencies)("agentRunMap", ctx_r1.agentRunMap)("title", ctx_r1.selectedTask.Name)("description", ctx_r1.getTaskDetailDescription())("showHeader", true)("showViewToggle", true)("viewMode", "gantt");
|
|
40
|
+
} }
|
|
41
|
+
/**
|
|
42
|
+
* Full-page tasks view with task list and Gantt chart
|
|
43
|
+
* Generic component that displays tasks based on provided filter
|
|
44
|
+
* Supports drilling into individual tasks to see sub-tasks
|
|
45
|
+
*/
|
|
46
|
+
export class TasksFullViewComponent {
|
|
47
|
+
environmentId;
|
|
48
|
+
currentUser;
|
|
49
|
+
baseFilter = '1=1'; // SQL filter for tasks (default: show all)
|
|
50
|
+
activeTaskId; // Task ID to auto-select and drill into
|
|
51
|
+
openEntityRecord = new EventEmitter();
|
|
52
|
+
allTasks = [];
|
|
53
|
+
filteredTasks = [];
|
|
54
|
+
subTasks = [];
|
|
55
|
+
subTasksWithParent = []; // Includes parent for Gantt hierarchy
|
|
56
|
+
taskDependencies = []; // Dependencies for Gantt links
|
|
57
|
+
agentRunMap = new Map(); // Maps TaskID -> AgentRunID
|
|
58
|
+
selectedTask = null;
|
|
59
|
+
showDetailAnimation = false;
|
|
60
|
+
isLoading = false;
|
|
61
|
+
aiEngineConfigured = false;
|
|
62
|
+
ngOnInit() {
|
|
63
|
+
this.loadTasks();
|
|
64
|
+
}
|
|
65
|
+
ngOnChanges(changes) {
|
|
66
|
+
// Reload tasks if baseFilter changes
|
|
67
|
+
if (changes['baseFilter'] && !changes['baseFilter'].firstChange) {
|
|
68
|
+
this.loadTasks();
|
|
69
|
+
}
|
|
70
|
+
// Auto-drill into task if activeTaskId changes
|
|
71
|
+
if (changes['activeTaskId'] && this.activeTaskId) {
|
|
72
|
+
const task = this.allTasks.find(t => t.ID === this.activeTaskId);
|
|
73
|
+
if (task) {
|
|
74
|
+
this.onTaskClick(task);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
async loadTasks() {
|
|
79
|
+
this.isLoading = true;
|
|
80
|
+
try {
|
|
81
|
+
// Configure AIEngineBase on first load (false = don't force refresh)
|
|
82
|
+
if (!this.aiEngineConfigured) {
|
|
83
|
+
await AIEngineBase.Instance.Config(false);
|
|
84
|
+
this.aiEngineConfigured = true;
|
|
85
|
+
}
|
|
86
|
+
const rv = new RunView();
|
|
87
|
+
console.log('📝 Tasks filter SQL:', this.baseFilter);
|
|
88
|
+
// Load all tasks with the provided filter
|
|
89
|
+
const tasksResult = await rv.RunView({
|
|
90
|
+
EntityName: 'MJ: Tasks',
|
|
91
|
+
ExtraFilter: this.baseFilter,
|
|
92
|
+
OrderBy: '__mj_CreatedAt DESC',
|
|
93
|
+
MaxRows: 1000,
|
|
94
|
+
ResultType: 'entity_object'
|
|
95
|
+
}, this.currentUser);
|
|
96
|
+
console.log('📊 Tasks query result:', {
|
|
97
|
+
success: tasksResult.Success,
|
|
98
|
+
resultCount: tasksResult.Results?.length || 0,
|
|
99
|
+
errorMessage: tasksResult.ErrorMessage
|
|
100
|
+
});
|
|
101
|
+
if (tasksResult.Success) {
|
|
102
|
+
this.allTasks = tasksResult.Results || [];
|
|
103
|
+
this.filteredTasks = this.allTasks;
|
|
104
|
+
console.log(`📋 Loaded ${this.allTasks.length} tasks`);
|
|
105
|
+
if (this.allTasks.length === 0) {
|
|
106
|
+
console.log('💡 No tasks found with current filter');
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
console.log('✅ Sample task:', {
|
|
110
|
+
id: this.allTasks[0].ID,
|
|
111
|
+
name: this.allTasks[0].Name,
|
|
112
|
+
status: this.allTasks[0].Status,
|
|
113
|
+
conversationDetailID: this.allTasks[0].ConversationDetailID
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
console.error('❌ Failed to load tasks:', tasksResult.ErrorMessage);
|
|
119
|
+
this.allTasks = [];
|
|
120
|
+
this.filteredTasks = [];
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
catch (error) {
|
|
124
|
+
console.error('Failed to load tasks:', error);
|
|
125
|
+
this.allTasks = [];
|
|
126
|
+
this.filteredTasks = [];
|
|
127
|
+
}
|
|
128
|
+
finally {
|
|
129
|
+
this.isLoading = false;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
async onTaskClick(task) {
|
|
133
|
+
console.log('Task clicked:', task);
|
|
134
|
+
this.selectedTask = task;
|
|
135
|
+
this.showDetailAnimation = true;
|
|
136
|
+
// Load all tasks in the hierarchy using RootParentID
|
|
137
|
+
await this.loadTaskHierarchy(task);
|
|
138
|
+
}
|
|
139
|
+
async loadTaskHierarchy(task) {
|
|
140
|
+
try {
|
|
141
|
+
const rv = new RunView();
|
|
142
|
+
// Use RootParentID to load all tasks in this hierarchy
|
|
143
|
+
// If task has no RootParentID, it's the root itself, so use its ID
|
|
144
|
+
const rootId = task.RootParentID || task.ID;
|
|
145
|
+
// Load all tasks where RootParentID matches, or tasks that are the root itself
|
|
146
|
+
const hierarchyResult = await rv.RunView({
|
|
147
|
+
EntityName: 'MJ: Tasks',
|
|
148
|
+
ExtraFilter: `RootParentID='${rootId}' OR ID='${rootId}'`,
|
|
149
|
+
OrderBy: '__mj_CreatedAt ASC',
|
|
150
|
+
MaxRows: 1000,
|
|
151
|
+
ResultType: 'entity_object'
|
|
152
|
+
}, this.currentUser);
|
|
153
|
+
if (hierarchyResult.Success) {
|
|
154
|
+
const allHierarchy = hierarchyResult.Results || [];
|
|
155
|
+
// For list view: Filter out the clicked task itself - only show its children/descendants
|
|
156
|
+
this.subTasks = allHierarchy.filter(t => t.ID !== task.ID);
|
|
157
|
+
// For Gantt view: Include the parent task so hierarchy works correctly
|
|
158
|
+
this.subTasksWithParent = allHierarchy;
|
|
159
|
+
console.log(`📋 Loaded ${this.subTasks.length} tasks in hierarchy for root ${rootId}`);
|
|
160
|
+
// Load task dependencies for this hierarchy
|
|
161
|
+
await this.loadTaskDependencies(rootId);
|
|
162
|
+
// Load agent runs for this hierarchy
|
|
163
|
+
await this.loadAgentRuns(allHierarchy);
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
console.error('❌ Failed to load task hierarchy:', hierarchyResult.ErrorMessage);
|
|
167
|
+
this.subTasks = [];
|
|
168
|
+
this.subTasksWithParent = [];
|
|
169
|
+
this.taskDependencies = [];
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
catch (error) {
|
|
173
|
+
console.error('Failed to load task hierarchy:', error);
|
|
174
|
+
this.subTasks = [];
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
async loadTaskDependencies(rootId) {
|
|
178
|
+
try {
|
|
179
|
+
const rv = new RunView();
|
|
180
|
+
// Load task dependencies where either TaskID or DependsOnTaskID is in this hierarchy
|
|
181
|
+
// Use subquery to find all tasks with this RootParentID
|
|
182
|
+
// Note: Using __mj as the default schema - this is the standard MJ schema
|
|
183
|
+
const schema = '__mj';
|
|
184
|
+
const depsResult = await rv.RunView({
|
|
185
|
+
EntityName: 'MJ: Task Dependencies',
|
|
186
|
+
ExtraFilter: `
|
|
187
|
+
TaskID IN (SELECT ID FROM [${schema}].[vwTasks] WHERE RootParentID='${rootId}' OR ID='${rootId}')
|
|
188
|
+
OR
|
|
189
|
+
DependsOnTaskID IN (SELECT ID FROM [${schema}].[vwTasks] WHERE RootParentID='${rootId}' OR ID='${rootId}')
|
|
190
|
+
`,
|
|
191
|
+
ResultType: 'entity_object'
|
|
192
|
+
}, this.currentUser);
|
|
193
|
+
if (depsResult.Success) {
|
|
194
|
+
this.taskDependencies = depsResult.Results || [];
|
|
195
|
+
console.log(`🔗 Loaded ${this.taskDependencies.length} task dependencies`);
|
|
196
|
+
}
|
|
197
|
+
else {
|
|
198
|
+
console.error('❌ Failed to load task dependencies:', depsResult.ErrorMessage);
|
|
199
|
+
this.taskDependencies = [];
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
catch (error) {
|
|
203
|
+
console.error('Failed to load task dependencies:', error);
|
|
204
|
+
this.taskDependencies = [];
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
async loadAgentRuns(tasks) {
|
|
208
|
+
try {
|
|
209
|
+
// Clear existing map
|
|
210
|
+
this.agentRunMap.clear();
|
|
211
|
+
// Get all unique ConversationDetailIDs from tasks (filter out nulls)
|
|
212
|
+
const conversationDetailIds = tasks
|
|
213
|
+
.filter(t => t.ConversationDetailID != null)
|
|
214
|
+
.map(t => t.ConversationDetailID);
|
|
215
|
+
if (conversationDetailIds.length === 0) {
|
|
216
|
+
console.log('💡 No tasks with ConversationDetailID');
|
|
217
|
+
return;
|
|
218
|
+
}
|
|
219
|
+
const rv = new RunView();
|
|
220
|
+
const schema = '__mj';
|
|
221
|
+
// Build filter to find agent runs for these conversation details
|
|
222
|
+
// Use a subquery to avoid passing large ID lists
|
|
223
|
+
const taskIds = tasks.map(t => `'${t.ID}'`).join(',');
|
|
224
|
+
const agentRunsResult = await rv.RunView({
|
|
225
|
+
EntityName: 'MJ: AI Agent Runs',
|
|
226
|
+
ExtraFilter: `
|
|
227
|
+
ConversationDetailID IN (
|
|
228
|
+
SELECT DISTINCT ConversationDetailID
|
|
229
|
+
FROM [${schema}].[vwTasks]
|
|
230
|
+
WHERE ID IN (${taskIds})
|
|
231
|
+
AND ConversationDetailID IS NOT NULL
|
|
232
|
+
)
|
|
233
|
+
`,
|
|
234
|
+
ResultType: 'entity_object'
|
|
235
|
+
}, this.currentUser);
|
|
236
|
+
if (agentRunsResult.Success) {
|
|
237
|
+
const agentRuns = agentRunsResult.Results || [];
|
|
238
|
+
console.log(`🤖 Loaded ${agentRuns.length} agent runs`, agentRuns);
|
|
239
|
+
// Build map: ConversationDetailID -> AgentRunID
|
|
240
|
+
const convoToRunMap = new Map();
|
|
241
|
+
agentRuns.forEach(run => {
|
|
242
|
+
if (run.ConversationDetailID) {
|
|
243
|
+
convoToRunMap.set(run.ConversationDetailID, run.ID);
|
|
244
|
+
console.log(`📝 Mapping ConvoDetailID ${run.ConversationDetailID} -> RunID ${run.ID}`);
|
|
245
|
+
}
|
|
246
|
+
});
|
|
247
|
+
// Map TaskID -> AgentRunID using ConversationDetailID as the link
|
|
248
|
+
tasks.forEach(task => {
|
|
249
|
+
console.log(`🔍 Task ${task.Name} - ConvoDetailID: ${task.ConversationDetailID}, AgentID: ${task.AgentID}`);
|
|
250
|
+
if (task.ConversationDetailID) {
|
|
251
|
+
const agentRunId = convoToRunMap.get(task.ConversationDetailID);
|
|
252
|
+
if (agentRunId) {
|
|
253
|
+
this.agentRunMap.set(task.ID, agentRunId);
|
|
254
|
+
console.log(`✅ Mapped Task ${task.ID} -> AgentRun ${agentRunId}`);
|
|
255
|
+
}
|
|
256
|
+
else {
|
|
257
|
+
console.log(`⚠️ No agent run found for ConvoDetailID ${task.ConversationDetailID}`);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
});
|
|
261
|
+
console.log(`🔗 Mapped ${this.agentRunMap.size} tasks to agent runs`, Array.from(this.agentRunMap.entries()));
|
|
262
|
+
}
|
|
263
|
+
else {
|
|
264
|
+
console.error('❌ Failed to load agent runs:', agentRunsResult.ErrorMessage);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
catch (error) {
|
|
268
|
+
console.error('Failed to load agent runs:', error);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
backToTaskList() {
|
|
272
|
+
this.selectedTask = null;
|
|
273
|
+
this.subTasks = [];
|
|
274
|
+
this.subTasksWithParent = [];
|
|
275
|
+
this.taskDependencies = [];
|
|
276
|
+
this.agentRunMap.clear();
|
|
277
|
+
this.showDetailAnimation = false;
|
|
278
|
+
}
|
|
279
|
+
onSubTaskClick(subTask) {
|
|
280
|
+
console.log('Sub-task clicked:', subTask);
|
|
281
|
+
// Could drill down further if needed
|
|
282
|
+
}
|
|
283
|
+
onOpenEntityRecord(event) {
|
|
284
|
+
// Bubble up the event to parent component
|
|
285
|
+
this.openEntityRecord.emit(event);
|
|
286
|
+
}
|
|
287
|
+
getDescription() {
|
|
288
|
+
const activeCount = this.allTasks.filter(t => t.Status === 'Pending' || t.Status === 'In Progress').length;
|
|
289
|
+
const completedCount = this.allTasks.filter(t => t.Status === 'Complete').length;
|
|
290
|
+
return `${activeCount} active, ${completedCount} completed, ${this.allTasks.length} total`;
|
|
291
|
+
}
|
|
292
|
+
getTaskDetailDescription() {
|
|
293
|
+
if (this.subTasks.length === 0) {
|
|
294
|
+
return 'No sub-tasks';
|
|
295
|
+
}
|
|
296
|
+
const activeCount = this.subTasks.filter(t => t.Status === 'Pending' || t.Status === 'In Progress').length;
|
|
297
|
+
const completedCount = this.subTasks.filter(t => t.Status === 'Complete').length;
|
|
298
|
+
return `${activeCount} active, ${completedCount} completed, ${this.subTasks.length} sub-tasks`;
|
|
299
|
+
}
|
|
300
|
+
static ɵfac = function TasksFullViewComponent_Factory(t) { return new (t || TasksFullViewComponent)(); };
|
|
301
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TasksFullViewComponent, selectors: [["mj-tasks-full-view"]], inputs: { environmentId: "environmentId", currentUser: "currentUser", baseFilter: "baseFilter", activeTaskId: "activeTaskId" }, outputs: { openEntityRecord: "openEntityRecord" }, standalone: true, features: [i0.ɵɵNgOnChangesFeature, i0.ɵɵStandaloneFeature], decls: 3, vars: 1, consts: [[1, "tasks-full-view"], [3, "tasks", "title", "description", "showHeader", "showViewToggle", "viewMode"], [1, "task-detail-view", 3, "swoosh-in"], [3, "taskClicked", "tasks", "title", "description", "showHeader", "showViewToggle", "viewMode"], [1, "task-detail-view"], [1, "breadcrumb-nav"], [1, "breadcrumb-back", 3, "click"], [1, "fas", "fa-arrow-left"], [1, "breadcrumb-divider"], [1, "breadcrumb-current"], [3, "taskClicked", "openEntityRecord", "tasks", "ganttTasks", "taskDependencies", "agentRunMap", "title", "description", "showHeader", "showViewToggle", "viewMode"]], template: function TasksFullViewComponent_Template(rf, ctx) { if (rf & 1) {
|
|
302
|
+
i0.ɵɵelementStart(0, "div", 0);
|
|
303
|
+
i0.ɵɵtemplate(1, TasksFullViewComponent_Conditional_1_Template, 1, 6, "mj-task", 1)(2, TasksFullViewComponent_Conditional_2_Template, 11, 12, "div", 2);
|
|
304
|
+
i0.ɵɵelementEnd();
|
|
305
|
+
} if (rf & 2) {
|
|
306
|
+
i0.ɵɵadvance();
|
|
307
|
+
i0.ɵɵconditional(!ctx.selectedTask ? 1 : 2);
|
|
308
|
+
} }, dependencies: [CommonModule, TaskComponent], styles: [".tasks-full-view[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: #F9FAFB;\n }\n\n .task-detail-view[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: white;\n }\n\n .swoosh-in[_ngcontent-%COMP%] {\n animation: _ngcontent-%COMP%_swooshIn 0.3s ease-out;\n }\n\n @keyframes _ngcontent-%COMP%_swooshIn {\n from {\n opacity: 0;\n transform: translateX(50px);\n }\n to {\n opacity: 1;\n transform: translateX(0);\n }\n }\n\n .breadcrumb-nav[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 16px 24px;\n background: white;\n border-bottom: 1px solid #E5E7EB;\n }\n\n .breadcrumb-back[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n background: transparent;\n border: 1px solid #D1D5DB;\n border-radius: 6px;\n color: #374151;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s;\n }\n\n .breadcrumb-back[_ngcontent-%COMP%]:hover {\n background: #F3F4F6;\n border-color: #9CA3AF;\n }\n\n .breadcrumb-back[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 12px;\n }\n\n .breadcrumb-divider[_ngcontent-%COMP%] {\n color: #9CA3AF;\n font-size: 14px;\n }\n\n .breadcrumb-current[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 600;\n color: #111827;\n }"] });
|
|
309
|
+
}
|
|
310
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TasksFullViewComponent, [{
|
|
311
|
+
type: Component,
|
|
312
|
+
args: [{ selector: 'mj-tasks-full-view', standalone: true, imports: [CommonModule, TaskComponent], template: `
|
|
313
|
+
<div class="tasks-full-view">
|
|
314
|
+
@if (!selectedTask) {
|
|
315
|
+
<!-- Task List View -->
|
|
316
|
+
<mj-task
|
|
317
|
+
[tasks]="filteredTasks"
|
|
318
|
+
[title]="'Tasks'"
|
|
319
|
+
[description]="getDescription()"
|
|
320
|
+
[showHeader]="true"
|
|
321
|
+
[showViewToggle]="false"
|
|
322
|
+
[viewMode]="'simple'"
|
|
323
|
+
(taskClicked)="onTaskClick($event)">
|
|
324
|
+
</mj-task>
|
|
325
|
+
} @else {
|
|
326
|
+
<!-- Task Detail View with Sub-tasks -->
|
|
327
|
+
<div class="task-detail-view" [class.swoosh-in]="showDetailAnimation">
|
|
328
|
+
<!-- Breadcrumb -->
|
|
329
|
+
<div class="breadcrumb-nav">
|
|
330
|
+
<button class="breadcrumb-back" (click)="backToTaskList()">
|
|
331
|
+
<i class="fas fa-arrow-left"></i>
|
|
332
|
+
<span>Back to Tasks</span>
|
|
333
|
+
</button>
|
|
334
|
+
<div class="breadcrumb-divider">/</div>
|
|
335
|
+
<span class="breadcrumb-current">{{ selectedTask.Name }}</span>
|
|
336
|
+
</div>
|
|
337
|
+
|
|
338
|
+
<!-- Task Details & Sub-tasks with Gantt Toggle -->
|
|
339
|
+
<mj-task
|
|
340
|
+
[tasks]="subTasks"
|
|
341
|
+
[ganttTasks]="subTasksWithParent"
|
|
342
|
+
[taskDependencies]="taskDependencies"
|
|
343
|
+
[agentRunMap]="agentRunMap"
|
|
344
|
+
[title]="selectedTask.Name"
|
|
345
|
+
[description]="getTaskDetailDescription()"
|
|
346
|
+
[showHeader]="true"
|
|
347
|
+
[showViewToggle]="true"
|
|
348
|
+
[viewMode]="'gantt'"
|
|
349
|
+
(taskClicked)="onSubTaskClick($event)"
|
|
350
|
+
(openEntityRecord)="onOpenEntityRecord($event)">
|
|
351
|
+
</mj-task>
|
|
352
|
+
</div>
|
|
353
|
+
}
|
|
354
|
+
</div>
|
|
355
|
+
`, styles: ["\n .tasks-full-view {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: #F9FAFB;\n }\n\n .task-detail-view {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: white;\n }\n\n .swoosh-in {\n animation: swooshIn 0.3s ease-out;\n }\n\n @keyframes swooshIn {\n from {\n opacity: 0;\n transform: translateX(50px);\n }\n to {\n opacity: 1;\n transform: translateX(0);\n }\n }\n\n .breadcrumb-nav {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 16px 24px;\n background: white;\n border-bottom: 1px solid #E5E7EB;\n }\n\n .breadcrumb-back {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n background: transparent;\n border: 1px solid #D1D5DB;\n border-radius: 6px;\n color: #374151;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s;\n }\n\n .breadcrumb-back:hover {\n background: #F3F4F6;\n border-color: #9CA3AF;\n }\n\n .breadcrumb-back i {\n font-size: 12px;\n }\n\n .breadcrumb-divider {\n color: #9CA3AF;\n font-size: 14px;\n }\n\n .breadcrumb-current {\n font-size: 14px;\n font-weight: 600;\n color: #111827;\n }\n "] }]
|
|
356
|
+
}], null, { environmentId: [{
|
|
357
|
+
type: Input
|
|
358
|
+
}], currentUser: [{
|
|
359
|
+
type: Input
|
|
360
|
+
}], baseFilter: [{
|
|
361
|
+
type: Input
|
|
362
|
+
}], activeTaskId: [{
|
|
363
|
+
type: Input
|
|
364
|
+
}], openEntityRecord: [{
|
|
365
|
+
type: Output
|
|
366
|
+
}] }); })();
|
|
367
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(TasksFullViewComponent, { className: "TasksFullViewComponent", filePath: "src/lib/components/task/tasks-full-view.component.ts", lineNumber: 136 }); })();
|
|
368
|
+
//# sourceMappingURL=tasks-full-view.component.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tasks-full-view.component.js","sourceRoot":"","sources":["../../../../src/lib/components/task/tasks-full-view.component.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { EventEmitter } from '@angular/core';
|
|
2
|
+
import { TaskEntity } from '@memberjunction/core-entities';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
/**
|
|
5
|
+
* Reusable task widget component that displays task information
|
|
6
|
+
* in a consistent, polished format across the application.
|
|
7
|
+
*
|
|
8
|
+
* Can be used in:
|
|
9
|
+
* - Tasks dropdown (active tasks)
|
|
10
|
+
* - Gear icon dropdown (tasks for conversation detail)
|
|
11
|
+
* - Tasks tab (full task list with filters)
|
|
12
|
+
*/
|
|
13
|
+
export declare class TaskWidgetComponent {
|
|
14
|
+
task: TaskEntity;
|
|
15
|
+
clickable: boolean;
|
|
16
|
+
compact: boolean;
|
|
17
|
+
showProgress: boolean;
|
|
18
|
+
showDuration: boolean;
|
|
19
|
+
taskClick: EventEmitter<TaskEntity>;
|
|
20
|
+
get isActive(): boolean;
|
|
21
|
+
onTaskClick(): void;
|
|
22
|
+
formatDate(date: Date | null): string;
|
|
23
|
+
isOverdue(dueDate: Date | null): boolean;
|
|
24
|
+
getDuration(start: Date | null, end: Date | null): string;
|
|
25
|
+
getElapsedTime(start: Date | null): string;
|
|
26
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<TaskWidgetComponent, never>;
|
|
27
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<TaskWidgetComponent, "mj-task-widget", never, { "task": { "alias": "task"; "required": false; }; "clickable": { "alias": "clickable"; "required": false; }; "compact": { "alias": "compact"; "required": false; }; "showProgress": { "alias": "showProgress"; "required": false; }; "showDuration": { "alias": "showDuration"; "required": false; }; }, { "taskClick": "taskClick"; }, never, never, false, never>;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=task-widget.component.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-widget.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/tasks/task-widget.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAE,MAAM,eAAe,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;;AAE3D;;;;;;;;GAQG;AACH,qBA6Ta,mBAAmB;IACrB,IAAI,EAAG,UAAU,CAAC;IAClB,SAAS,EAAE,OAAO,CAAS;IAC3B,OAAO,EAAE,OAAO,CAAS;IACzB,YAAY,EAAE,OAAO,CAAQ;IAC7B,YAAY,EAAE,OAAO,CAAQ;IAC5B,SAAS,2BAAkC;IAErD,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,WAAW,IAAI,IAAI;IAMnB,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,MAAM;IA6BrC,SAAS,CAAC,OAAO,EAAE,IAAI,GAAG,IAAI,GAAG,OAAO;IAKxC,WAAW,CAAC,KAAK,EAAE,IAAI,GAAG,IAAI,EAAE,GAAG,EAAE,IAAI,GAAG,IAAI,GAAG,MAAM;IA2BzD,cAAc,CAAC,KAAK,EAAE,IAAI,GAAG,IAAI,GAAG,MAAM;yCA/E/B,mBAAmB;2CAAnB,mBAAmB;CAoG/B"}
|