@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,385 @@
|
|
|
1
|
+
import { Component, Input, Output, EventEmitter } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "@angular/common";
|
|
4
|
+
function TaskWidgetComponent_span_7_Template(rf, ctx) { if (rf & 1) {
|
|
5
|
+
i0.ɵɵelementStart(0, "span", 13);
|
|
6
|
+
i0.ɵɵtext(1);
|
|
7
|
+
i0.ɵɵelementEnd();
|
|
8
|
+
} if (rf & 2) {
|
|
9
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
10
|
+
i0.ɵɵadvance();
|
|
11
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r0.task.Type, " ");
|
|
12
|
+
} }
|
|
13
|
+
function TaskWidgetComponent_div_10_Template(rf, ctx) { if (rf & 1) {
|
|
14
|
+
i0.ɵɵelementStart(0, "div", 14);
|
|
15
|
+
i0.ɵɵtext(1);
|
|
16
|
+
i0.ɵɵelementEnd();
|
|
17
|
+
} if (rf & 2) {
|
|
18
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
19
|
+
i0.ɵɵadvance();
|
|
20
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r0.task.Description, " ");
|
|
21
|
+
} }
|
|
22
|
+
function TaskWidgetComponent_div_11_Template(rf, ctx) { if (rf & 1) {
|
|
23
|
+
i0.ɵɵelementStart(0, "div", 15)(1, "div", 16);
|
|
24
|
+
i0.ɵɵelement(2, "div", 17);
|
|
25
|
+
i0.ɵɵelementEnd();
|
|
26
|
+
i0.ɵɵelementStart(3, "span", 18);
|
|
27
|
+
i0.ɵɵtext(4);
|
|
28
|
+
i0.ɵɵelementEnd()();
|
|
29
|
+
} if (rf & 2) {
|
|
30
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
31
|
+
i0.ɵɵadvance(2);
|
|
32
|
+
i0.ɵɵstyleProp("width", ctx_r0.task.PercentComplete, "%");
|
|
33
|
+
i0.ɵɵattribute("data-status", ctx_r0.task.Status);
|
|
34
|
+
i0.ɵɵadvance(2);
|
|
35
|
+
i0.ɵɵtextInterpolate1("", ctx_r0.task.PercentComplete, "%");
|
|
36
|
+
} }
|
|
37
|
+
function TaskWidgetComponent_span_13_Template(rf, ctx) { if (rf & 1) {
|
|
38
|
+
i0.ɵɵelementStart(0, "span", 19);
|
|
39
|
+
i0.ɵɵelement(1, "i", 20);
|
|
40
|
+
i0.ɵɵelementStart(2, "span", 21);
|
|
41
|
+
i0.ɵɵtext(3, "User:");
|
|
42
|
+
i0.ɵɵelementEnd();
|
|
43
|
+
i0.ɵɵelementStart(4, "span", 22);
|
|
44
|
+
i0.ɵɵtext(5);
|
|
45
|
+
i0.ɵɵelementEnd()();
|
|
46
|
+
} if (rf & 2) {
|
|
47
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
48
|
+
i0.ɵɵadvance(5);
|
|
49
|
+
i0.ɵɵtextInterpolate(ctx_r0.task.User);
|
|
50
|
+
} }
|
|
51
|
+
function TaskWidgetComponent_span_14_Template(rf, ctx) { if (rf & 1) {
|
|
52
|
+
i0.ɵɵelementStart(0, "span", 19);
|
|
53
|
+
i0.ɵɵelement(1, "i", 23);
|
|
54
|
+
i0.ɵɵelementStart(2, "span", 21);
|
|
55
|
+
i0.ɵɵtext(3, "Agent:");
|
|
56
|
+
i0.ɵɵelementEnd();
|
|
57
|
+
i0.ɵɵelementStart(4, "span", 22);
|
|
58
|
+
i0.ɵɵtext(5);
|
|
59
|
+
i0.ɵɵelementEnd()();
|
|
60
|
+
} if (rf & 2) {
|
|
61
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
62
|
+
i0.ɵɵadvance(5);
|
|
63
|
+
i0.ɵɵtextInterpolate(ctx_r0.task.Agent);
|
|
64
|
+
} }
|
|
65
|
+
function TaskWidgetComponent_span_15_Template(rf, ctx) { if (rf & 1) {
|
|
66
|
+
i0.ɵɵelementStart(0, "span", 19);
|
|
67
|
+
i0.ɵɵelement(1, "i", 24);
|
|
68
|
+
i0.ɵɵelementStart(2, "span", 21);
|
|
69
|
+
i0.ɵɵtext(3, "Started:");
|
|
70
|
+
i0.ɵɵelementEnd();
|
|
71
|
+
i0.ɵɵelementStart(4, "span", 22);
|
|
72
|
+
i0.ɵɵtext(5);
|
|
73
|
+
i0.ɵɵelementEnd()();
|
|
74
|
+
} if (rf & 2) {
|
|
75
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
76
|
+
i0.ɵɵadvance(5);
|
|
77
|
+
i0.ɵɵtextInterpolate(ctx_r0.formatDate(ctx_r0.task.StartedAt));
|
|
78
|
+
} }
|
|
79
|
+
function TaskWidgetComponent_span_16_Template(rf, ctx) { if (rf & 1) {
|
|
80
|
+
i0.ɵɵelementStart(0, "span", 19);
|
|
81
|
+
i0.ɵɵelement(1, "i", 25);
|
|
82
|
+
i0.ɵɵelementStart(2, "span", 21);
|
|
83
|
+
i0.ɵɵtext(3, "Completed:");
|
|
84
|
+
i0.ɵɵelementEnd();
|
|
85
|
+
i0.ɵɵelementStart(4, "span", 22);
|
|
86
|
+
i0.ɵɵtext(5);
|
|
87
|
+
i0.ɵɵelementEnd()();
|
|
88
|
+
} if (rf & 2) {
|
|
89
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
90
|
+
i0.ɵɵadvance(5);
|
|
91
|
+
i0.ɵɵtextInterpolate(ctx_r0.formatDate(ctx_r0.task.CompletedAt));
|
|
92
|
+
} }
|
|
93
|
+
function TaskWidgetComponent_span_17_Template(rf, ctx) { if (rf & 1) {
|
|
94
|
+
i0.ɵɵelementStart(0, "span", 19);
|
|
95
|
+
i0.ɵɵelement(1, "i", 26);
|
|
96
|
+
i0.ɵɵelementStart(2, "span", 21);
|
|
97
|
+
i0.ɵɵtext(3, "Due:");
|
|
98
|
+
i0.ɵɵelementEnd();
|
|
99
|
+
i0.ɵɵelementStart(4, "span", 22);
|
|
100
|
+
i0.ɵɵtext(5);
|
|
101
|
+
i0.ɵɵelementEnd()();
|
|
102
|
+
} if (rf & 2) {
|
|
103
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
104
|
+
i0.ɵɵadvance(4);
|
|
105
|
+
i0.ɵɵclassProp("overdue", ctx_r0.isOverdue(ctx_r0.task.DueAt));
|
|
106
|
+
i0.ɵɵadvance();
|
|
107
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r0.formatDate(ctx_r0.task.DueAt), " ");
|
|
108
|
+
} }
|
|
109
|
+
function TaskWidgetComponent_span_18_Template(rf, ctx) { if (rf & 1) {
|
|
110
|
+
i0.ɵɵelementStart(0, "span", 19);
|
|
111
|
+
i0.ɵɵelement(1, "i", 27);
|
|
112
|
+
i0.ɵɵelementStart(2, "span", 21);
|
|
113
|
+
i0.ɵɵtext(3, "Duration:");
|
|
114
|
+
i0.ɵɵelementEnd();
|
|
115
|
+
i0.ɵɵelementStart(4, "span", 22);
|
|
116
|
+
i0.ɵɵtext(5);
|
|
117
|
+
i0.ɵɵelementEnd()();
|
|
118
|
+
} if (rf & 2) {
|
|
119
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
120
|
+
i0.ɵɵadvance(5);
|
|
121
|
+
i0.ɵɵtextInterpolate(ctx_r0.getDuration(ctx_r0.task.StartedAt, ctx_r0.task.CompletedAt));
|
|
122
|
+
} }
|
|
123
|
+
function TaskWidgetComponent_span_19_Template(rf, ctx) { if (rf & 1) {
|
|
124
|
+
i0.ɵɵelementStart(0, "span", 28);
|
|
125
|
+
i0.ɵɵelement(1, "i", 29);
|
|
126
|
+
i0.ɵɵelementStart(2, "span", 22);
|
|
127
|
+
i0.ɵɵtext(3);
|
|
128
|
+
i0.ɵɵelementEnd()();
|
|
129
|
+
} if (rf & 2) {
|
|
130
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
131
|
+
i0.ɵɵadvance(3);
|
|
132
|
+
i0.ɵɵtextInterpolate(ctx_r0.getElapsedTime(ctx_r0.task.StartedAt));
|
|
133
|
+
} }
|
|
134
|
+
/**
|
|
135
|
+
* Reusable task widget component that displays task information
|
|
136
|
+
* in a consistent, polished format across the application.
|
|
137
|
+
*
|
|
138
|
+
* Can be used in:
|
|
139
|
+
* - Tasks dropdown (active tasks)
|
|
140
|
+
* - Gear icon dropdown (tasks for conversation detail)
|
|
141
|
+
* - Tasks tab (full task list with filters)
|
|
142
|
+
*/
|
|
143
|
+
export class TaskWidgetComponent {
|
|
144
|
+
task;
|
|
145
|
+
clickable = false;
|
|
146
|
+
compact = false;
|
|
147
|
+
showProgress = true;
|
|
148
|
+
showDuration = true;
|
|
149
|
+
taskClick = new EventEmitter();
|
|
150
|
+
get isActive() {
|
|
151
|
+
return this.task.Status === 'In Progress';
|
|
152
|
+
}
|
|
153
|
+
onTaskClick() {
|
|
154
|
+
if (this.clickable) {
|
|
155
|
+
this.taskClick.emit(this.task);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
formatDate(date) {
|
|
159
|
+
if (!date)
|
|
160
|
+
return '';
|
|
161
|
+
const now = new Date();
|
|
162
|
+
const taskDate = new Date(date);
|
|
163
|
+
const diffMs = now.getTime() - taskDate.getTime();
|
|
164
|
+
const diffMins = Math.floor(diffMs / 60000);
|
|
165
|
+
// Less than 1 hour ago
|
|
166
|
+
if (diffMins < 60) {
|
|
167
|
+
return diffMins <= 1 ? 'just now' : `${diffMins}m ago`;
|
|
168
|
+
}
|
|
169
|
+
// Less than 24 hours ago
|
|
170
|
+
const diffHours = Math.floor(diffMins / 60);
|
|
171
|
+
if (diffHours < 24) {
|
|
172
|
+
return `${diffHours}h ago`;
|
|
173
|
+
}
|
|
174
|
+
// Less than 7 days ago
|
|
175
|
+
const diffDays = Math.floor(diffHours / 24);
|
|
176
|
+
if (diffDays < 7) {
|
|
177
|
+
return `${diffDays}d ago`;
|
|
178
|
+
}
|
|
179
|
+
// Format as date
|
|
180
|
+
return taskDate.toLocaleDateString();
|
|
181
|
+
}
|
|
182
|
+
isOverdue(dueDate) {
|
|
183
|
+
if (!dueDate)
|
|
184
|
+
return false;
|
|
185
|
+
return new Date(dueDate).getTime() < Date.now();
|
|
186
|
+
}
|
|
187
|
+
getDuration(start, end) {
|
|
188
|
+
if (!start || !end)
|
|
189
|
+
return '';
|
|
190
|
+
const diffMs = new Date(end).getTime() - new Date(start).getTime();
|
|
191
|
+
const diffSecs = Math.floor(diffMs / 1000);
|
|
192
|
+
if (diffSecs < 60) {
|
|
193
|
+
return `${diffSecs}s`;
|
|
194
|
+
}
|
|
195
|
+
const diffMins = Math.floor(diffSecs / 60);
|
|
196
|
+
if (diffMins < 60) {
|
|
197
|
+
return `${diffMins}m`;
|
|
198
|
+
}
|
|
199
|
+
const diffHours = Math.floor(diffMins / 60);
|
|
200
|
+
const remainingMins = diffMins % 60;
|
|
201
|
+
if (diffHours < 24) {
|
|
202
|
+
return remainingMins > 0 ? `${diffHours}h ${remainingMins}m` : `${diffHours}h`;
|
|
203
|
+
}
|
|
204
|
+
const diffDays = Math.floor(diffHours / 24);
|
|
205
|
+
const remainingHours = diffHours % 24;
|
|
206
|
+
return remainingHours > 0 ? `${diffDays}d ${remainingHours}h` : `${diffDays}d`;
|
|
207
|
+
}
|
|
208
|
+
getElapsedTime(start) {
|
|
209
|
+
if (!start)
|
|
210
|
+
return '';
|
|
211
|
+
const diffMs = Date.now() - new Date(start).getTime();
|
|
212
|
+
const diffSecs = Math.floor(diffMs / 1000);
|
|
213
|
+
if (diffSecs < 60) {
|
|
214
|
+
return `${diffSecs}s`;
|
|
215
|
+
}
|
|
216
|
+
const diffMins = Math.floor(diffSecs / 60);
|
|
217
|
+
const remainingSecs = diffSecs % 60;
|
|
218
|
+
if (diffMins < 60) {
|
|
219
|
+
return `${diffMins}:${remainingSecs.toString().padStart(2, '0')}`;
|
|
220
|
+
}
|
|
221
|
+
const diffHours = Math.floor(diffMins / 60);
|
|
222
|
+
const remainingMins = diffMins % 60;
|
|
223
|
+
return `${diffHours}:${remainingMins.toString().padStart(2, '0')}`;
|
|
224
|
+
}
|
|
225
|
+
static ɵfac = function TaskWidgetComponent_Factory(t) { return new (t || TaskWidgetComponent)(); };
|
|
226
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TaskWidgetComponent, selectors: [["mj-task-widget"]], inputs: { task: "task", clickable: "clickable", compact: "compact", showProgress: "showProgress", showDuration: "showDuration" }, outputs: { taskClick: "taskClick" }, decls: 20, vars: 18, consts: [[1, "task-widget", 3, "click"], [1, "task-status-indicator"], [1, "task-main"], [1, "task-header"], [1, "task-title"], [1, "task-badges"], ["class", "badge badge-type", 4, "ngIf"], [1, "badge", "badge-status"], ["class", "task-description", 4, "ngIf"], ["class", "task-progress-container", 4, "ngIf"], [1, "task-meta"], ["class", "meta-item", 4, "ngIf"], ["class", "meta-item meta-elapsed", 4, "ngIf"], [1, "badge", "badge-type"], [1, "task-description"], [1, "task-progress-container"], [1, "progress-bar"], [1, "progress-fill"], [1, "progress-text"], [1, "meta-item"], [1, "fas", "fa-user"], [1, "meta-label"], [1, "meta-value"], [1, "fas", "fa-robot"], [1, "fas", "fa-play-circle"], [1, "fas", "fa-check-circle"], [1, "fas", "fa-calendar-alt"], [1, "fas", "fa-clock"], [1, "meta-item", "meta-elapsed"], [1, "fas", "fa-hourglass-half"]], template: function TaskWidgetComponent_Template(rf, ctx) { if (rf & 1) {
|
|
227
|
+
i0.ɵɵelementStart(0, "div", 0);
|
|
228
|
+
i0.ɵɵlistener("click", function TaskWidgetComponent_Template_div_click_0_listener() { return ctx.onTaskClick(); });
|
|
229
|
+
i0.ɵɵelement(1, "div", 1);
|
|
230
|
+
i0.ɵɵelementStart(2, "div", 2)(3, "div", 3)(4, "div", 4);
|
|
231
|
+
i0.ɵɵtext(5);
|
|
232
|
+
i0.ɵɵelementEnd();
|
|
233
|
+
i0.ɵɵelementStart(6, "div", 5);
|
|
234
|
+
i0.ɵɵtemplate(7, TaskWidgetComponent_span_7_Template, 2, 1, "span", 6);
|
|
235
|
+
i0.ɵɵelementStart(8, "span", 7);
|
|
236
|
+
i0.ɵɵtext(9);
|
|
237
|
+
i0.ɵɵelementEnd()()();
|
|
238
|
+
i0.ɵɵtemplate(10, TaskWidgetComponent_div_10_Template, 2, 1, "div", 8)(11, TaskWidgetComponent_div_11_Template, 5, 4, "div", 9);
|
|
239
|
+
i0.ɵɵelementStart(12, "div", 10);
|
|
240
|
+
i0.ɵɵtemplate(13, TaskWidgetComponent_span_13_Template, 6, 1, "span", 11)(14, TaskWidgetComponent_span_14_Template, 6, 1, "span", 11)(15, TaskWidgetComponent_span_15_Template, 6, 1, "span", 11)(16, TaskWidgetComponent_span_16_Template, 6, 1, "span", 11)(17, TaskWidgetComponent_span_17_Template, 6, 3, "span", 11)(18, TaskWidgetComponent_span_18_Template, 6, 1, "span", 11)(19, TaskWidgetComponent_span_19_Template, 4, 1, "span", 12);
|
|
241
|
+
i0.ɵɵelementEnd()()();
|
|
242
|
+
} if (rf & 2) {
|
|
243
|
+
i0.ɵɵclassProp("clickable", ctx.clickable)("compact", ctx.compact);
|
|
244
|
+
i0.ɵɵadvance();
|
|
245
|
+
i0.ɵɵattribute("data-status", ctx.task.Status);
|
|
246
|
+
i0.ɵɵadvance(4);
|
|
247
|
+
i0.ɵɵtextInterpolate(ctx.task.Name);
|
|
248
|
+
i0.ɵɵadvance(2);
|
|
249
|
+
i0.ɵɵproperty("ngIf", ctx.task.Type);
|
|
250
|
+
i0.ɵɵadvance();
|
|
251
|
+
i0.ɵɵattribute("data-status", ctx.task.Status);
|
|
252
|
+
i0.ɵɵadvance();
|
|
253
|
+
i0.ɵɵtextInterpolate1(" ", ctx.task.Status, " ");
|
|
254
|
+
i0.ɵɵadvance();
|
|
255
|
+
i0.ɵɵproperty("ngIf", !ctx.compact && ctx.task.Description);
|
|
256
|
+
i0.ɵɵadvance();
|
|
257
|
+
i0.ɵɵproperty("ngIf", ctx.showProgress && ctx.task.PercentComplete != null);
|
|
258
|
+
i0.ɵɵadvance(2);
|
|
259
|
+
i0.ɵɵproperty("ngIf", ctx.task.User);
|
|
260
|
+
i0.ɵɵadvance();
|
|
261
|
+
i0.ɵɵproperty("ngIf", ctx.task.Agent);
|
|
262
|
+
i0.ɵɵadvance();
|
|
263
|
+
i0.ɵɵproperty("ngIf", ctx.task.StartedAt);
|
|
264
|
+
i0.ɵɵadvance();
|
|
265
|
+
i0.ɵɵproperty("ngIf", ctx.task.CompletedAt);
|
|
266
|
+
i0.ɵɵadvance();
|
|
267
|
+
i0.ɵɵproperty("ngIf", ctx.task.DueAt && !ctx.task.CompletedAt);
|
|
268
|
+
i0.ɵɵadvance();
|
|
269
|
+
i0.ɵɵproperty("ngIf", ctx.showDuration && ctx.task.StartedAt && ctx.task.CompletedAt);
|
|
270
|
+
i0.ɵɵadvance();
|
|
271
|
+
i0.ɵɵproperty("ngIf", ctx.isActive && ctx.task.StartedAt && !ctx.task.CompletedAt);
|
|
272
|
+
} }, dependencies: [i1.NgIf], styles: [".task-widget[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n padding: 12px;\n border-radius: 6px;\n background: white;\n border: 1px solid #E5E7EB;\n transition: all 150ms ease;\n }\n\n .task-widget.clickable[_ngcontent-%COMP%] {\n cursor: pointer;\n }\n\n .task-widget.clickable[_ngcontent-%COMP%]:hover {\n background: #F9FAFB;\n border-color: #D1D5DB;\n box-shadow: 0 2px 4px rgba(0,0,0,0.05);\n }\n\n .task-widget.compact[_ngcontent-%COMP%] {\n padding: 8px 12px;\n }\n\n .task-status-indicator[_ngcontent-%COMP%] {\n width: 4px;\n border-radius: 2px;\n flex-shrink: 0;\n }\n\n .task-status-indicator[data-status=\"Pending\"][_ngcontent-%COMP%] {\n background: #9CA3AF;\n }\n\n .task-status-indicator[data-status=\"In Progress\"][_ngcontent-%COMP%] {\n background: #3B82F6;\n }\n\n .task-status-indicator[data-status=\"Complete\"][_ngcontent-%COMP%] {\n background: #10B981;\n }\n\n .task-status-indicator[data-status=\"Blocked\"][_ngcontent-%COMP%] {\n background: #EF4444;\n }\n\n .task-status-indicator[data-status=\"Failed\"][_ngcontent-%COMP%] {\n background: #DC2626;\n }\n\n .task-status-indicator[data-status=\"Cancelled\"][_ngcontent-%COMP%], \n .task-status-indicator[data-status=\"Deferred\"][_ngcontent-%COMP%] {\n background: #6B7280;\n }\n\n .task-main[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: 8px;\n }\n\n .task-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 12px;\n }\n\n .task-title[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 600;\n color: #111827;\n line-height: 1.4;\n flex: 1;\n }\n\n .task-badges[_ngcontent-%COMP%] {\n display: flex;\n gap: 6px;\n flex-shrink: 0;\n }\n\n .badge[_ngcontent-%COMP%] {\n padding: 2px 8px;\n border-radius: 4px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n white-space: nowrap;\n }\n\n .badge-type[_ngcontent-%COMP%] {\n background: #F3F4F6;\n color: #6B7280;\n }\n\n .badge-status[data-status=\"Pending\"][_ngcontent-%COMP%] {\n background: #F3F4F6;\n color: #6B7280;\n }\n\n .badge-status[data-status=\"In Progress\"][_ngcontent-%COMP%] {\n background: #DBEAFE;\n color: #1E40AF;\n }\n\n .badge-status[data-status=\"Complete\"][_ngcontent-%COMP%] {\n background: #D1FAE5;\n color: #065F46;\n }\n\n .badge-status[data-status=\"Blocked\"][_ngcontent-%COMP%] {\n background: #FEE2E2;\n color: #991B1B;\n }\n\n .badge-status[data-status=\"Failed\"][_ngcontent-%COMP%] {\n background: #FEE2E2;\n color: #7F1D1D;\n }\n\n .badge-status[data-status=\"Cancelled\"][_ngcontent-%COMP%], \n .badge-status[data-status=\"Deferred\"][_ngcontent-%COMP%] {\n background: #F3F4F6;\n color: #4B5563;\n }\n\n .task-description[_ngcontent-%COMP%] {\n font-size: 13px;\n color: #6B7280;\n line-height: 1.5;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n }\n\n .task-progress-container[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .progress-bar[_ngcontent-%COMP%] {\n flex: 1;\n height: 6px;\n background: #F3F4F6;\n border-radius: 3px;\n overflow: hidden;\n }\n\n .progress-fill[_ngcontent-%COMP%] {\n height: 100%;\n transition: width 300ms ease;\n border-radius: 3px;\n }\n\n .progress-fill[data-status=\"In Progress\"][_ngcontent-%COMP%] {\n background: #3B82F6;\n }\n\n .progress-fill[data-status=\"Complete\"][_ngcontent-%COMP%] {\n background: #10B981;\n }\n\n .progress-fill[data-status=\"Blocked\"][_ngcontent-%COMP%], \n .progress-fill[data-status=\"Failed\"][_ngcontent-%COMP%] {\n background: #EF4444;\n }\n\n .progress-text[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 600;\n color: #6B7280;\n min-width: 35px;\n text-align: right;\n }\n\n .task-meta[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 12px;\n font-size: 12px;\n color: #6B7280;\n }\n\n .meta-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n }\n\n .meta-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n opacity: 0.7;\n }\n\n .meta-label[_ngcontent-%COMP%] {\n font-weight: 500;\n }\n\n .meta-value[_ngcontent-%COMP%] {\n color: #111827;\n }\n\n .meta-value.overdue[_ngcontent-%COMP%] {\n color: #DC2626;\n font-weight: 600;\n }\n\n .meta-elapsed[_ngcontent-%COMP%] {\n color: #3B82F6;\n font-weight: 600;\n }"] });
|
|
273
|
+
}
|
|
274
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TaskWidgetComponent, [{
|
|
275
|
+
type: Component,
|
|
276
|
+
args: [{ selector: 'mj-task-widget', template: `
|
|
277
|
+
<div
|
|
278
|
+
class="task-widget"
|
|
279
|
+
[class.clickable]="clickable"
|
|
280
|
+
[class.compact]="compact"
|
|
281
|
+
(click)="onTaskClick()">
|
|
282
|
+
|
|
283
|
+
<!-- Status Indicator -->
|
|
284
|
+
<div class="task-status-indicator" [attr.data-status]="task.Status"></div>
|
|
285
|
+
|
|
286
|
+
<!-- Task Content -->
|
|
287
|
+
<div class="task-main">
|
|
288
|
+
<!-- Header Row -->
|
|
289
|
+
<div class="task-header">
|
|
290
|
+
<div class="task-title">{{ task.Name }}</div>
|
|
291
|
+
<div class="task-badges">
|
|
292
|
+
<!-- Type Badge -->
|
|
293
|
+
<span class="badge badge-type" *ngIf="task.Type">
|
|
294
|
+
{{ task.Type }}
|
|
295
|
+
</span>
|
|
296
|
+
<!-- Status Badge -->
|
|
297
|
+
<span
|
|
298
|
+
class="badge badge-status"
|
|
299
|
+
[attr.data-status]="task.Status">
|
|
300
|
+
{{ task.Status }}
|
|
301
|
+
</span>
|
|
302
|
+
</div>
|
|
303
|
+
</div>
|
|
304
|
+
|
|
305
|
+
<!-- Description -->
|
|
306
|
+
<div class="task-description" *ngIf="!compact && task.Description">
|
|
307
|
+
{{ task.Description }}
|
|
308
|
+
</div>
|
|
309
|
+
|
|
310
|
+
<!-- Progress Bar (if in progress or has completion %) -->
|
|
311
|
+
<div class="task-progress-container" *ngIf="showProgress && task.PercentComplete != null">
|
|
312
|
+
<div class="progress-bar">
|
|
313
|
+
<div
|
|
314
|
+
class="progress-fill"
|
|
315
|
+
[style.width.%]="task.PercentComplete"
|
|
316
|
+
[attr.data-status]="task.Status">
|
|
317
|
+
</div>
|
|
318
|
+
</div>
|
|
319
|
+
<span class="progress-text">{{ task.PercentComplete }}%</span>
|
|
320
|
+
</div>
|
|
321
|
+
|
|
322
|
+
<!-- Meta Information -->
|
|
323
|
+
<div class="task-meta">
|
|
324
|
+
<!-- Assignment -->
|
|
325
|
+
<span class="meta-item" *ngIf="task.User">
|
|
326
|
+
<i class="fas fa-user"></i>
|
|
327
|
+
<span class="meta-label">User:</span>
|
|
328
|
+
<span class="meta-value">{{ task.User }}</span>
|
|
329
|
+
</span>
|
|
330
|
+
<span class="meta-item" *ngIf="task.Agent">
|
|
331
|
+
<i class="fas fa-robot"></i>
|
|
332
|
+
<span class="meta-label">Agent:</span>
|
|
333
|
+
<span class="meta-value">{{ task.Agent }}</span>
|
|
334
|
+
</span>
|
|
335
|
+
|
|
336
|
+
<!-- Timestamps -->
|
|
337
|
+
<span class="meta-item" *ngIf="task.StartedAt">
|
|
338
|
+
<i class="fas fa-play-circle"></i>
|
|
339
|
+
<span class="meta-label">Started:</span>
|
|
340
|
+
<span class="meta-value">{{ formatDate(task.StartedAt) }}</span>
|
|
341
|
+
</span>
|
|
342
|
+
<span class="meta-item" *ngIf="task.CompletedAt">
|
|
343
|
+
<i class="fas fa-check-circle"></i>
|
|
344
|
+
<span class="meta-label">Completed:</span>
|
|
345
|
+
<span class="meta-value">{{ formatDate(task.CompletedAt) }}</span>
|
|
346
|
+
</span>
|
|
347
|
+
<span class="meta-item" *ngIf="task.DueAt && !task.CompletedAt">
|
|
348
|
+
<i class="fas fa-calendar-alt"></i>
|
|
349
|
+
<span class="meta-label">Due:</span>
|
|
350
|
+
<span class="meta-value" [class.overdue]="isOverdue(task.DueAt)">
|
|
351
|
+
{{ formatDate(task.DueAt) }}
|
|
352
|
+
</span>
|
|
353
|
+
</span>
|
|
354
|
+
|
|
355
|
+
<!-- Duration (for completed tasks) -->
|
|
356
|
+
<span class="meta-item" *ngIf="showDuration && task.StartedAt && task.CompletedAt">
|
|
357
|
+
<i class="fas fa-clock"></i>
|
|
358
|
+
<span class="meta-label">Duration:</span>
|
|
359
|
+
<span class="meta-value">{{ getDuration(task.StartedAt, task.CompletedAt) }}</span>
|
|
360
|
+
</span>
|
|
361
|
+
|
|
362
|
+
<!-- Elapsed time (for active tasks) -->
|
|
363
|
+
<span class="meta-item meta-elapsed" *ngIf="isActive && task.StartedAt && !task.CompletedAt">
|
|
364
|
+
<i class="fas fa-hourglass-half"></i>
|
|
365
|
+
<span class="meta-value">{{ getElapsedTime(task.StartedAt) }}</span>
|
|
366
|
+
</span>
|
|
367
|
+
</div>
|
|
368
|
+
</div>
|
|
369
|
+
</div>
|
|
370
|
+
`, styles: ["\n .task-widget {\n display: flex;\n gap: 12px;\n padding: 12px;\n border-radius: 6px;\n background: white;\n border: 1px solid #E5E7EB;\n transition: all 150ms ease;\n }\n\n .task-widget.clickable {\n cursor: pointer;\n }\n\n .task-widget.clickable:hover {\n background: #F9FAFB;\n border-color: #D1D5DB;\n box-shadow: 0 2px 4px rgba(0,0,0,0.05);\n }\n\n .task-widget.compact {\n padding: 8px 12px;\n }\n\n .task-status-indicator {\n width: 4px;\n border-radius: 2px;\n flex-shrink: 0;\n }\n\n .task-status-indicator[data-status=\"Pending\"] {\n background: #9CA3AF;\n }\n\n .task-status-indicator[data-status=\"In Progress\"] {\n background: #3B82F6;\n }\n\n .task-status-indicator[data-status=\"Complete\"] {\n background: #10B981;\n }\n\n .task-status-indicator[data-status=\"Blocked\"] {\n background: #EF4444;\n }\n\n .task-status-indicator[data-status=\"Failed\"] {\n background: #DC2626;\n }\n\n .task-status-indicator[data-status=\"Cancelled\"],\n .task-status-indicator[data-status=\"Deferred\"] {\n background: #6B7280;\n }\n\n .task-main {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: 8px;\n }\n\n .task-header {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 12px;\n }\n\n .task-title {\n font-size: 14px;\n font-weight: 600;\n color: #111827;\n line-height: 1.4;\n flex: 1;\n }\n\n .task-badges {\n display: flex;\n gap: 6px;\n flex-shrink: 0;\n }\n\n .badge {\n padding: 2px 8px;\n border-radius: 4px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n white-space: nowrap;\n }\n\n .badge-type {\n background: #F3F4F6;\n color: #6B7280;\n }\n\n .badge-status[data-status=\"Pending\"] {\n background: #F3F4F6;\n color: #6B7280;\n }\n\n .badge-status[data-status=\"In Progress\"] {\n background: #DBEAFE;\n color: #1E40AF;\n }\n\n .badge-status[data-status=\"Complete\"] {\n background: #D1FAE5;\n color: #065F46;\n }\n\n .badge-status[data-status=\"Blocked\"] {\n background: #FEE2E2;\n color: #991B1B;\n }\n\n .badge-status[data-status=\"Failed\"] {\n background: #FEE2E2;\n color: #7F1D1D;\n }\n\n .badge-status[data-status=\"Cancelled\"],\n .badge-status[data-status=\"Deferred\"] {\n background: #F3F4F6;\n color: #4B5563;\n }\n\n .task-description {\n font-size: 13px;\n color: #6B7280;\n line-height: 1.5;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n }\n\n .task-progress-container {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .progress-bar {\n flex: 1;\n height: 6px;\n background: #F3F4F6;\n border-radius: 3px;\n overflow: hidden;\n }\n\n .progress-fill {\n height: 100%;\n transition: width 300ms ease;\n border-radius: 3px;\n }\n\n .progress-fill[data-status=\"In Progress\"] {\n background: #3B82F6;\n }\n\n .progress-fill[data-status=\"Complete\"] {\n background: #10B981;\n }\n\n .progress-fill[data-status=\"Blocked\"],\n .progress-fill[data-status=\"Failed\"] {\n background: #EF4444;\n }\n\n .progress-text {\n font-size: 11px;\n font-weight: 600;\n color: #6B7280;\n min-width: 35px;\n text-align: right;\n }\n\n .task-meta {\n display: flex;\n flex-wrap: wrap;\n gap: 12px;\n font-size: 12px;\n color: #6B7280;\n }\n\n .meta-item {\n display: flex;\n align-items: center;\n gap: 4px;\n }\n\n .meta-item i {\n font-size: 10px;\n opacity: 0.7;\n }\n\n .meta-label {\n font-weight: 500;\n }\n\n .meta-value {\n color: #111827;\n }\n\n .meta-value.overdue {\n color: #DC2626;\n font-weight: 600;\n }\n\n .meta-elapsed {\n color: #3B82F6;\n font-weight: 600;\n }\n "] }]
|
|
371
|
+
}], null, { task: [{
|
|
372
|
+
type: Input
|
|
373
|
+
}], clickable: [{
|
|
374
|
+
type: Input
|
|
375
|
+
}], compact: [{
|
|
376
|
+
type: Input
|
|
377
|
+
}], showProgress: [{
|
|
378
|
+
type: Input
|
|
379
|
+
}], showDuration: [{
|
|
380
|
+
type: Input
|
|
381
|
+
}], taskClick: [{
|
|
382
|
+
type: Output
|
|
383
|
+
}] }); })();
|
|
384
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(TaskWidgetComponent, { className: "TaskWidgetComponent", filePath: "src/lib/components/tasks/task-widget.component.ts", lineNumber: 330 }); })();
|
|
385
|
+
//# sourceMappingURL=task-widget.component.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-widget.component.js","sourceRoot":"","sources":["../../../../src/lib/components/tasks/task-widget.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;;;;IA+B3D,gCAAiD;IAC/C,YACF;IAAA,iBAAO;;;IADL,cACF;IADE,iDACF;;;IAWJ,+BAAmE;IACjE,YACF;IAAA,iBAAM;;;IADJ,cACF;IADE,wDACF;;;IAIE,AADF,+BAA0F,cAC9D;IACxB,0BAIM;IACR,iBAAM;IACN,gCAA4B;IAAA,YAA2B;IACzD,AADyD,iBAAO,EAC1D;;;IALA,eAAsC;IAAtC,yDAAsC;;IAId,eAA2B;IAA3B,2DAA2B;;;IAMvD,gCAA0C;IACxC,wBAA2B;IAC3B,gCAAyB;IAAA,qBAAK;IAAA,iBAAO;IACrC,gCAAyB;IAAA,YAAe;IAC1C,AAD0C,iBAAO,EAC1C;;;IADoB,eAAe;IAAf,sCAAe;;;IAE1C,gCAA2C;IACzC,wBAA4B;IAC5B,gCAAyB;IAAA,sBAAM;IAAA,iBAAO;IACtC,gCAAyB;IAAA,YAAgB;IAC3C,AAD2C,iBAAO,EAC3C;;;IADoB,eAAgB;IAAhB,uCAAgB;;;IAI3C,gCAA+C;IAC7C,wBAAkC;IAClC,gCAAyB;IAAA,wBAAQ;IAAA,iBAAO;IACxC,gCAAyB;IAAA,YAAgC;IAC3D,AAD2D,iBAAO,EAC3D;;;IADoB,eAAgC;IAAhC,8DAAgC;;;IAE3D,gCAAiD;IAC/C,wBAAmC;IACnC,gCAAyB;IAAA,0BAAU;IAAA,iBAAO;IAC1C,gCAAyB;IAAA,YAAkC;IAC7D,AAD6D,iBAAO,EAC7D;;;IADoB,eAAkC;IAAlC,gEAAkC;;;IAE7D,gCAAgE;IAC9D,wBAAmC;IACnC,gCAAyB;IAAA,oBAAI;IAAA,iBAAO;IACpC,gCAAiE;IAC/D,YACF;IACF,AADE,iBAAO,EACF;;;IAHoB,eAAuC;IAAvC,8DAAuC;IAC9D,cACF;IADE,qEACF;;;IAIF,gCAAmF;IACjF,wBAA4B;IAC5B,gCAAyB;IAAA,yBAAS;IAAA,iBAAO;IACzC,gCAAyB;IAAA,YAAmD;IAC9E,AAD8E,iBAAO,EAC9E;;;IADoB,eAAmD;IAAnD,wFAAmD;;;IAI9E,gCAA6F;IAC3F,wBAAqC;IACrC,gCAAyB;IAAA,YAAoC;IAC/D,AAD+D,iBAAO,EAC/D;;;IADoB,eAAoC;IAApC,kEAAoC;;AApGzE;;;;;;;;GAQG;AA8TH,MAAM,OAAO,mBAAmB;IACrB,IAAI,CAAc;IAClB,SAAS,GAAY,KAAK,CAAC;IAC3B,OAAO,GAAY,KAAK,CAAC;IACzB,YAAY,GAAY,IAAI,CAAC;IAC7B,YAAY,GAAY,IAAI,CAAC;IAC5B,SAAS,GAAG,IAAI,YAAY,EAAc,CAAC;IAErD,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,aAAa,CAAC;IAC5C,CAAC;IAED,WAAW;QACT,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAED,UAAU,CAAC,IAAiB;QAC1B,IAAI,CAAC,IAAI;YAAE,OAAO,EAAE,CAAC;QAErB,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC;QAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC;QAE5C,uBAAuB;QACvB,IAAI,QAAQ,GAAG,EAAE,EAAE,CAAC;YAClB,OAAO,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,QAAQ,OAAO,CAAC;QACzD,CAAC;QAED,yBAAyB;QACzB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC;QAC5C,IAAI,SAAS,GAAG,EAAE,EAAE,CAAC;YACnB,OAAO,GAAG,SAAS,OAAO,CAAC;QAC7B,CAAC;QAED,uBAAuB;QACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC;QAC5C,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;YACjB,OAAO,GAAG,QAAQ,OAAO,CAAC;QAC5B,CAAC;QAED,iBAAiB;QACjB,OAAO,QAAQ,CAAC,kBAAkB,EAAE,CAAC;IACvC,CAAC;IAED,SAAS,CAAC,OAAoB;QAC5B,IAAI,CAAC,OAAO;YAAE,OAAO,KAAK,CAAC;QAC3B,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAClD,CAAC;IAED,WAAW,CAAC,KAAkB,EAAE,GAAgB;QAC9C,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG;YAAE,OAAO,EAAE,CAAC;QAE9B,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;QACnE,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;QAE3C,IAAI,QAAQ,GAAG,EAAE,EAAE,CAAC;YAClB,OAAO,GAAG,QAAQ,GAAG,CAAC;QACxB,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC;QAC3C,IAAI,QAAQ,GAAG,EAAE,EAAE,CAAC;YAClB,OAAO,GAAG,QAAQ,GAAG,CAAC;QACxB,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC;QAC5C,MAAM,aAAa,GAAG,QAAQ,GAAG,EAAE,CAAC;QAEpC,IAAI,SAAS,GAAG,EAAE,EAAE,CAAC;YACnB,OAAO,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,KAAK,aAAa,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,CAAC;QACjF,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC;QAC5C,MAAM,cAAc,GAAG,SAAS,GAAG,EAAE,CAAC;QACtC,OAAO,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,KAAK,cAAc,GAAG,CAAC,CAAC,CAAC,GAAG,QAAQ,GAAG,CAAC;IACjF,CAAC;IAED,cAAc,CAAC,KAAkB;QAC/B,IAAI,CAAC,KAAK;YAAE,OAAO,EAAE,CAAC;QAEtB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;QACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;QAE3C,IAAI,QAAQ,GAAG,EAAE,EAAE,CAAC;YAClB,OAAO,GAAG,QAAQ,GAAG,CAAC;QACxB,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC;QAC3C,MAAM,aAAa,GAAG,QAAQ,GAAG,EAAE,CAAC;QAEpC,IAAI,QAAQ,GAAG,EAAE,EAAE,CAAC;YAClB,OAAO,GAAG,QAAQ,IAAI,aAAa,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;QACpE,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC;QAC5C,MAAM,aAAa,GAAG,QAAQ,GAAG,EAAE,CAAC;QACpC,OAAO,GAAG,SAAS,IAAI,aAAa,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;IACrE,CAAC;6EAnGU,mBAAmB;6DAAnB,mBAAmB;YA1T5B,8BAI0B;YAAxB,6FAAS,iBAAa,IAAC;YAGvB,yBAA0E;YAMtE,AADF,AAFF,8BAAuB,aAEI,aACC;YAAA,YAAe;YAAA,iBAAM;YAC7C,8BAAyB;YAEvB,sEAAiD;YAIjD,+BAEmC;YACjC,YACF;YAEJ,AADE,AADE,iBAAO,EACH,EACF;YAQN,AALA,sEAAmE,yDAKuB;YAY1F,gCAAuB;YAwCrB,AAPA,AATA,AALA,AALA,AAPA,AALA,yEAA0C,4DAKC,4DAOI,4DAKE,4DAKe,4DASmB,4DAOU;YAMnG,AADE,AADE,iBAAM,EACF,EACF;;YAzFJ,AADA,0CAA6B,wBACJ;YAIU,cAAgC;;YAMvC,eAAe;YAAf,mCAAe;YAGL,eAAe;YAAf,oCAAe;YAM7C,cAAgC;;YAChC,cACF;YADE,gDACF;YAK2B,cAAkC;YAAlC,2DAAkC;YAK3B,cAAkD;YAAlD,2EAAkD;YAc7D,eAAe;YAAf,oCAAe;YAKf,cAAgB;YAAhB,qCAAgB;YAOhB,cAAoB;YAApB,yCAAoB;YAKpB,cAAsB;YAAtB,2CAAsB;YAKtB,cAAqC;YAArC,8DAAqC;YASrC,cAAwD;YAAxD,qFAAwD;YAO3C,cAAqD;YAArD,kFAAqD;;;iFAoOxF,mBAAmB;cA7T/B,SAAS;2BACE,gBAAgB,YAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8FT;gBA8NQ,IAAI;kBAAZ,KAAK;YACG,SAAS;kBAAjB,KAAK;YACG,OAAO;kBAAf,KAAK;YACG,YAAY;kBAApB,KAAK;YACG,YAAY;kBAApB,KAAK;YACI,SAAS;kBAAlB,MAAM;;kFANI,mBAAmB"}
|
|
@@ -1,27 +1,41 @@
|
|
|
1
|
-
import { OnInit, OnDestroy, DoCheck } from '@angular/core';
|
|
1
|
+
import { EventEmitter, OnInit, OnDestroy, DoCheck } from '@angular/core';
|
|
2
2
|
import { UserInfo } from '@memberjunction/core';
|
|
3
3
|
import { TaskEntity } from '@memberjunction/core-entities';
|
|
4
4
|
import { ConversationStateService } from '../../services/conversation-state.service';
|
|
5
|
+
import { ActiveTasksService, ActiveTask } from '../../services/active-tasks.service';
|
|
5
6
|
import * as i0 from "@angular/core";
|
|
6
7
|
/**
|
|
7
|
-
*
|
|
8
|
-
*
|
|
8
|
+
* Enhanced tasks dropdown component for chat header.
|
|
9
|
+
* Shows both:
|
|
10
|
+
* 1. Active (running) tasks from ActiveTasksService
|
|
11
|
+
* 2. Database tasks for the current conversation
|
|
9
12
|
*/
|
|
10
13
|
export declare class TasksDropdownComponent implements OnInit, OnDestroy, DoCheck {
|
|
11
14
|
private conversationState;
|
|
15
|
+
private activeTasksService;
|
|
12
16
|
currentUser: UserInfo;
|
|
17
|
+
taskClicked: EventEmitter<TaskEntity>;
|
|
13
18
|
isOpen: boolean;
|
|
14
|
-
|
|
15
|
-
|
|
19
|
+
activeTasks: ActiveTask[];
|
|
20
|
+
dbTasks: TaskEntity[];
|
|
21
|
+
totalTaskCount: number;
|
|
16
22
|
private previousConversationId;
|
|
17
|
-
|
|
23
|
+
private destroy$;
|
|
24
|
+
private pollingInterval;
|
|
25
|
+
constructor(conversationState: ConversationStateService, activeTasksService: ActiveTasksService);
|
|
18
26
|
ngOnInit(): void;
|
|
27
|
+
private startPolling;
|
|
28
|
+
private stopPolling;
|
|
19
29
|
ngDoCheck(): void;
|
|
20
30
|
ngOnDestroy(): void;
|
|
21
31
|
toggleDropdown(): void;
|
|
22
32
|
closeDropdown(): void;
|
|
23
|
-
private
|
|
33
|
+
private updateTotalCount;
|
|
34
|
+
private loadDatabaseTasks;
|
|
35
|
+
getElapsedTime(task: ActiveTask): string;
|
|
36
|
+
getTrimmedStatus(status: string): string;
|
|
37
|
+
onTaskClick(task: TaskEntity): void;
|
|
24
38
|
static ɵfac: i0.ɵɵFactoryDeclaration<TasksDropdownComponent, never>;
|
|
25
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<TasksDropdownComponent, "mj-tasks-dropdown", never, { "currentUser": { "alias": "currentUser"; "required": false; }; }, {}, never, never, false, never>;
|
|
39
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<TasksDropdownComponent, "mj-tasks-dropdown", never, { "currentUser": { "alias": "currentUser"; "required": false; }; }, { "taskClicked": "taskClicked"; }, never, never, false, never>;
|
|
26
40
|
}
|
|
27
41
|
//# sourceMappingURL=tasks-dropdown.component.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tasks-dropdown.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/tasks/tasks-dropdown.component.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"tasks-dropdown.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/tasks/tasks-dropdown.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACnG,OAAO,EAAE,QAAQ,EAAW,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,UAAU,EAA4B,MAAM,+BAA+B,CAAC;AACrF,OAAO,EAAE,wBAAwB,EAAE,MAAM,2CAA2C,CAAC;AACrF,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAC;;AAIrF;;;;;GAKG;AACH,qBA8Ra,sBAAuB,YAAW,MAAM,EAAE,SAAS,EAAE,OAAO;IAcrE,OAAO,CAAC,iBAAiB;IACzB,OAAO,CAAC,kBAAkB;IAdnB,WAAW,EAAG,QAAQ,CAAC;IACtB,WAAW,2BAAkC;IAEhD,MAAM,EAAE,OAAO,CAAS;IACxB,WAAW,EAAE,UAAU,EAAE,CAAM;IAC/B,OAAO,EAAE,UAAU,EAAE,CAAM;IAC3B,cAAc,EAAE,MAAM,CAAK;IAElC,OAAO,CAAC,sBAAsB,CAAuB;IACrD,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,eAAe,CAAa;gBAG1B,iBAAiB,EAAE,wBAAwB,EAC3C,kBAAkB,EAAE,kBAAkB;IAGhD,QAAQ;IAkBR,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,WAAW;IAOnB,SAAS;IAcT,WAAW;IAMX,cAAc,IAAI,IAAI;IAQtB,aAAa,IAAI,IAAI;IAIrB,OAAO,CAAC,gBAAgB;YAIV,iBAAiB;IAkD/B,cAAc,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM;IAaxC,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAQxC,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;yCA9JxB,sBAAsB;2CAAtB,sBAAsB;CAkKlC"}
|