@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
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import { OnInit, OnChanges, SimpleChanges } from '@angular/core';
|
|
2
|
-
import { TaskEntity } from '@memberjunction/core-entities';
|
|
3
|
-
import { UserInfo } from '@memberjunction/core';
|
|
4
|
-
import { DialogService } from '../../services/dialog.service';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
export declare class TaskListComponent implements OnInit, OnChanges {
|
|
7
|
-
private dialogService;
|
|
8
|
-
conversationId: string;
|
|
9
|
-
currentUser: UserInfo;
|
|
10
|
-
tasks: TaskEntity[];
|
|
11
|
-
filteredTasks: TaskEntity[];
|
|
12
|
-
filterStatus: 'all' | 'active' | 'overdue' | 'completed';
|
|
13
|
-
isTaskModalVisible: boolean;
|
|
14
|
-
selectedTask?: TaskEntity;
|
|
15
|
-
constructor(dialogService: DialogService);
|
|
16
|
-
ngOnInit(): void;
|
|
17
|
-
ngOnChanges(changes: SimpleChanges): void;
|
|
18
|
-
private loadTasks;
|
|
19
|
-
applyFilter(): void;
|
|
20
|
-
private isTaskOverdue;
|
|
21
|
-
private sortTasks;
|
|
22
|
-
getOverdueCount(): number;
|
|
23
|
-
onToggleStatus(task: TaskEntity): Promise<void>;
|
|
24
|
-
onAddTask(): void;
|
|
25
|
-
onEditTask(task: TaskEntity): void;
|
|
26
|
-
onDeleteTask(task: TaskEntity): Promise<void>;
|
|
27
|
-
onTaskSaved(task: TaskEntity): void;
|
|
28
|
-
onTaskModalCancelled(): void;
|
|
29
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<TaskListComponent, never>;
|
|
30
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<TaskListComponent, "mj-task-list", never, { "conversationId": { "alias": "conversationId"; "required": false; }; "currentUser": { "alias": "currentUser"; "required": false; }; }, {}, never, never, false, never>;
|
|
31
|
-
}
|
|
32
|
-
//# sourceMappingURL=task-list.component.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"task-list.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/task/task-list.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnF,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAW,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;;AAE9D,qBAuFa,iBAAkB,YAAW,MAAM,EAAE,SAAS;IAU7C,OAAO,CAAC,aAAa;IATxB,cAAc,EAAG,MAAM,CAAC;IACxB,WAAW,EAAG,QAAQ,CAAC;IAEzB,KAAK,EAAE,UAAU,EAAE,CAAM;IACzB,aAAa,EAAE,UAAU,EAAE,CAAM;IACjC,YAAY,EAAE,KAAK,GAAG,QAAQ,GAAG,SAAS,GAAG,WAAW,CAAS;IACjE,kBAAkB,UAAS;IAC3B,YAAY,CAAC,EAAE,UAAU,CAAC;gBAEb,aAAa,EAAE,aAAa;IAEhD,QAAQ;IAIR,WAAW,CAAC,OAAO,EAAE,aAAa;YAMpB,SAAS;IAmBvB,WAAW,IAAI,IAAI;IAYnB,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,SAAS;IAmBjB,eAAe,IAAI,MAAM;IAInB,cAAc,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAWrD,SAAS,IAAI,IAAI;IAKjB,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAK5B,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBnD,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAMnC,oBAAoB,IAAI,IAAI;yCArIjB,iBAAiB;2CAAjB,iBAAiB;CAyI7B"}
|
|
@@ -1,290 +0,0 @@
|
|
|
1
|
-
import { Component, Input } from '@angular/core';
|
|
2
|
-
import { RunView } from '@memberjunction/core';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
import * as i1 from "../../services/dialog.service";
|
|
5
|
-
import * as i2 from "./task-item.component";
|
|
6
|
-
import * as i3 from "./task-form-modal.component";
|
|
7
|
-
const _forTrack0 = ($index, $item) => $item.ID;
|
|
8
|
-
function TaskListComponent_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
9
|
-
i0.ɵɵelementStart(0, "span", 5);
|
|
10
|
-
i0.ɵɵtext(1);
|
|
11
|
-
i0.ɵɵelementEnd();
|
|
12
|
-
} if (rf & 2) {
|
|
13
|
-
const ctx_r0 = i0.ɵɵnextContext();
|
|
14
|
-
i0.ɵɵadvance();
|
|
15
|
-
i0.ɵɵtextInterpolate(ctx_r0.getOverdueCount());
|
|
16
|
-
} }
|
|
17
|
-
function TaskListComponent_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
18
|
-
i0.ɵɵelementStart(0, "div", 9);
|
|
19
|
-
i0.ɵɵelement(1, "i", 12);
|
|
20
|
-
i0.ɵɵelementStart(2, "p");
|
|
21
|
-
i0.ɵɵtext(3, "No tasks found");
|
|
22
|
-
i0.ɵɵelementEnd()();
|
|
23
|
-
} }
|
|
24
|
-
function TaskListComponent_For_19_Template(rf, ctx) { if (rf & 1) {
|
|
25
|
-
const _r2 = i0.ɵɵgetCurrentView();
|
|
26
|
-
i0.ɵɵelementStart(0, "mj-task-item", 13);
|
|
27
|
-
i0.ɵɵlistener("statusToggled", function TaskListComponent_For_19_Template_mj_task_item_statusToggled_0_listener($event) { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.onToggleStatus($event)); })("editRequested", function TaskListComponent_For_19_Template_mj_task_item_editRequested_0_listener($event) { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.onEditTask($event)); })("deleteRequested", function TaskListComponent_For_19_Template_mj_task_item_deleteRequested_0_listener($event) { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.onDeleteTask($event)); });
|
|
28
|
-
i0.ɵɵelementEnd();
|
|
29
|
-
} if (rf & 2) {
|
|
30
|
-
const task_r3 = ctx.$implicit;
|
|
31
|
-
i0.ɵɵproperty("task", task_r3);
|
|
32
|
-
} }
|
|
33
|
-
export class TaskListComponent {
|
|
34
|
-
dialogService;
|
|
35
|
-
conversationId;
|
|
36
|
-
currentUser;
|
|
37
|
-
tasks = [];
|
|
38
|
-
filteredTasks = [];
|
|
39
|
-
filterStatus = 'all';
|
|
40
|
-
isTaskModalVisible = false;
|
|
41
|
-
selectedTask;
|
|
42
|
-
constructor(dialogService) {
|
|
43
|
-
this.dialogService = dialogService;
|
|
44
|
-
}
|
|
45
|
-
ngOnInit() {
|
|
46
|
-
this.loadTasks();
|
|
47
|
-
}
|
|
48
|
-
ngOnChanges(changes) {
|
|
49
|
-
if (changes['conversationId'] && !changes['conversationId'].firstChange) {
|
|
50
|
-
this.loadTasks();
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
async loadTasks() {
|
|
54
|
-
try {
|
|
55
|
-
const rv = new RunView();
|
|
56
|
-
const result = await rv.RunView({
|
|
57
|
-
EntityName: 'MJ: Tasks',
|
|
58
|
-
ExtraFilter: `ConversationDetailID='${this.conversationId}'`,
|
|
59
|
-
OrderBy: 'Status ASC, DueAt ASC, __mj_CreatedAt ASC',
|
|
60
|
-
ResultType: 'entity_object'
|
|
61
|
-
}, this.currentUser);
|
|
62
|
-
if (result.Success) {
|
|
63
|
-
this.tasks = result.Results || [];
|
|
64
|
-
this.applyFilter();
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
catch (error) {
|
|
68
|
-
console.error('Failed to load tasks:', error);
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
applyFilter() {
|
|
72
|
-
if (this.filterStatus === 'all') {
|
|
73
|
-
this.filteredTasks = this.sortTasks(this.tasks);
|
|
74
|
-
}
|
|
75
|
-
else if (this.filterStatus === 'active') {
|
|
76
|
-
this.filteredTasks = this.sortTasks(this.tasks.filter(t => t.Status !== 'Complete'));
|
|
77
|
-
}
|
|
78
|
-
else if (this.filterStatus === 'overdue') {
|
|
79
|
-
this.filteredTasks = this.sortTasks(this.tasks.filter(t => this.isTaskOverdue(t)));
|
|
80
|
-
}
|
|
81
|
-
else {
|
|
82
|
-
this.filteredTasks = this.sortTasks(this.tasks.filter(t => t.Status === 'Complete'));
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
isTaskOverdue(task) {
|
|
86
|
-
if (!task.DueAt || task.Status === 'Complete') {
|
|
87
|
-
return false;
|
|
88
|
-
}
|
|
89
|
-
const now = new Date();
|
|
90
|
-
const dueDate = new Date(task.DueAt);
|
|
91
|
-
return dueDate.getTime() < now.getTime();
|
|
92
|
-
}
|
|
93
|
-
sortTasks(tasks) {
|
|
94
|
-
return [...tasks].sort((a, b) => {
|
|
95
|
-
const aOverdue = this.isTaskOverdue(a);
|
|
96
|
-
const bOverdue = this.isTaskOverdue(b);
|
|
97
|
-
if (aOverdue && !bOverdue)
|
|
98
|
-
return -1;
|
|
99
|
-
if (!aOverdue && bOverdue)
|
|
100
|
-
return 1;
|
|
101
|
-
if (a.DueAt && b.DueAt) {
|
|
102
|
-
return new Date(a.DueAt).getTime() - new Date(b.DueAt).getTime();
|
|
103
|
-
}
|
|
104
|
-
if (a.DueAt && !b.DueAt)
|
|
105
|
-
return -1;
|
|
106
|
-
if (!a.DueAt && b.DueAt)
|
|
107
|
-
return 1;
|
|
108
|
-
return 0;
|
|
109
|
-
});
|
|
110
|
-
}
|
|
111
|
-
getOverdueCount() {
|
|
112
|
-
return this.tasks.filter(t => this.isTaskOverdue(t)).length;
|
|
113
|
-
}
|
|
114
|
-
async onToggleStatus(task) {
|
|
115
|
-
try {
|
|
116
|
-
task.Status = task.Status === 'Complete' ? 'In Progress' : 'Complete';
|
|
117
|
-
await task.Save();
|
|
118
|
-
this.applyFilter();
|
|
119
|
-
}
|
|
120
|
-
catch (error) {
|
|
121
|
-
console.error('Failed to update task status:', error);
|
|
122
|
-
await this.dialogService.alert('Error', 'Failed to update task status');
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
onAddTask() {
|
|
126
|
-
this.selectedTask = undefined;
|
|
127
|
-
this.isTaskModalVisible = true;
|
|
128
|
-
}
|
|
129
|
-
onEditTask(task) {
|
|
130
|
-
this.selectedTask = task;
|
|
131
|
-
this.isTaskModalVisible = true;
|
|
132
|
-
}
|
|
133
|
-
async onDeleteTask(task) {
|
|
134
|
-
const confirmed = await this.dialogService.confirm({
|
|
135
|
-
title: 'Delete Task',
|
|
136
|
-
message: `Delete task "${task.Name}"?`,
|
|
137
|
-
okText: 'Delete',
|
|
138
|
-
cancelText: 'Cancel'
|
|
139
|
-
});
|
|
140
|
-
if (!confirmed)
|
|
141
|
-
return;
|
|
142
|
-
try {
|
|
143
|
-
const deleted = await task.Delete();
|
|
144
|
-
if (deleted) {
|
|
145
|
-
await this.loadTasks();
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
catch (error) {
|
|
149
|
-
console.error('Failed to delete task:', error);
|
|
150
|
-
await this.dialogService.alert('Error', 'Failed to delete task');
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
onTaskSaved(task) {
|
|
154
|
-
this.isTaskModalVisible = false;
|
|
155
|
-
this.selectedTask = undefined;
|
|
156
|
-
this.loadTasks();
|
|
157
|
-
}
|
|
158
|
-
onTaskModalCancelled() {
|
|
159
|
-
this.isTaskModalVisible = false;
|
|
160
|
-
this.selectedTask = undefined;
|
|
161
|
-
}
|
|
162
|
-
static ɵfac = function TaskListComponent_Factory(t) { return new (t || TaskListComponent)(i0.ɵɵdirectiveInject(i1.DialogService)); };
|
|
163
|
-
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TaskListComponent, selectors: [["mj-task-list"]], inputs: { conversationId: "conversationId", currentUser: "currentUser" }, features: [i0.ɵɵNgOnChangesFeature], decls: 21, vars: 15, consts: [[1, "task-list"], [1, "task-header"], [1, "task-filters"], [1, "filter-btn", 3, "click"], [1, "filter-btn", 3, "click", "title"], [1, "filter-badge"], ["title", "Add Task", 1, "btn-add-task", 3, "click"], [1, "fa-solid", "fa-plus"], [1, "task-content"], [1, "empty-state"], [3, "task"], [3, "saved", "cancelled", "isVisible", "task", "conversationId", "currentUser"], [1, "fa-solid", "fa-tasks"], [3, "statusToggled", "editRequested", "deleteRequested", "task"]], template: function TaskListComponent_Template(rf, ctx) { if (rf & 1) {
|
|
164
|
-
i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "h3");
|
|
165
|
-
i0.ɵɵtext(3, "Tasks");
|
|
166
|
-
i0.ɵɵelementEnd();
|
|
167
|
-
i0.ɵɵelementStart(4, "div", 2)(5, "button", 3);
|
|
168
|
-
i0.ɵɵlistener("click", function TaskListComponent_Template_button_click_5_listener() { ctx.filterStatus = "all"; return ctx.applyFilter(); });
|
|
169
|
-
i0.ɵɵtext(6, " All ");
|
|
170
|
-
i0.ɵɵelementEnd();
|
|
171
|
-
i0.ɵɵelementStart(7, "button", 3);
|
|
172
|
-
i0.ɵɵlistener("click", function TaskListComponent_Template_button_click_7_listener() { ctx.filterStatus = "active"; return ctx.applyFilter(); });
|
|
173
|
-
i0.ɵɵtext(8, " Active ");
|
|
174
|
-
i0.ɵɵelementEnd();
|
|
175
|
-
i0.ɵɵelementStart(9, "button", 4);
|
|
176
|
-
i0.ɵɵlistener("click", function TaskListComponent_Template_button_click_9_listener() { ctx.filterStatus = "overdue"; return ctx.applyFilter(); });
|
|
177
|
-
i0.ɵɵtext(10, " Overdue ");
|
|
178
|
-
i0.ɵɵtemplate(11, TaskListComponent_Conditional_11_Template, 2, 1, "span", 5);
|
|
179
|
-
i0.ɵɵelementEnd();
|
|
180
|
-
i0.ɵɵelementStart(12, "button", 3);
|
|
181
|
-
i0.ɵɵlistener("click", function TaskListComponent_Template_button_click_12_listener() { ctx.filterStatus = "completed"; return ctx.applyFilter(); });
|
|
182
|
-
i0.ɵɵtext(13, " Completed ");
|
|
183
|
-
i0.ɵɵelementEnd()();
|
|
184
|
-
i0.ɵɵelementStart(14, "button", 6);
|
|
185
|
-
i0.ɵɵlistener("click", function TaskListComponent_Template_button_click_14_listener() { return ctx.onAddTask(); });
|
|
186
|
-
i0.ɵɵelement(15, "i", 7);
|
|
187
|
-
i0.ɵɵelementEnd()();
|
|
188
|
-
i0.ɵɵelementStart(16, "div", 8);
|
|
189
|
-
i0.ɵɵtemplate(17, TaskListComponent_Conditional_17_Template, 4, 0, "div", 9);
|
|
190
|
-
i0.ɵɵrepeaterCreate(18, TaskListComponent_For_19_Template, 1, 1, "mj-task-item", 10, _forTrack0);
|
|
191
|
-
i0.ɵɵelementEnd();
|
|
192
|
-
i0.ɵɵelementStart(20, "mj-task-form-modal", 11);
|
|
193
|
-
i0.ɵɵlistener("saved", function TaskListComponent_Template_mj_task_form_modal_saved_20_listener($event) { return ctx.onTaskSaved($event); })("cancelled", function TaskListComponent_Template_mj_task_form_modal_cancelled_20_listener() { return ctx.onTaskModalCancelled(); });
|
|
194
|
-
i0.ɵɵelementEnd()();
|
|
195
|
-
} if (rf & 2) {
|
|
196
|
-
i0.ɵɵadvance(5);
|
|
197
|
-
i0.ɵɵclassProp("active", ctx.filterStatus === "all");
|
|
198
|
-
i0.ɵɵadvance(2);
|
|
199
|
-
i0.ɵɵclassProp("active", ctx.filterStatus === "active");
|
|
200
|
-
i0.ɵɵadvance(2);
|
|
201
|
-
i0.ɵɵclassProp("active", ctx.filterStatus === "overdue");
|
|
202
|
-
i0.ɵɵproperty("title", ctx.getOverdueCount() + " overdue tasks");
|
|
203
|
-
i0.ɵɵadvance(2);
|
|
204
|
-
i0.ɵɵconditional(ctx.getOverdueCount() > 0 ? 11 : -1);
|
|
205
|
-
i0.ɵɵadvance();
|
|
206
|
-
i0.ɵɵclassProp("active", ctx.filterStatus === "completed");
|
|
207
|
-
i0.ɵɵadvance(5);
|
|
208
|
-
i0.ɵɵconditional(ctx.filteredTasks.length === 0 ? 17 : -1);
|
|
209
|
-
i0.ɵɵadvance();
|
|
210
|
-
i0.ɵɵrepeater(ctx.filteredTasks);
|
|
211
|
-
i0.ɵɵadvance(2);
|
|
212
|
-
i0.ɵɵproperty("isVisible", ctx.isTaskModalVisible)("task", ctx.selectedTask)("conversationId", ctx.conversationId)("currentUser", ctx.currentUser);
|
|
213
|
-
} }, dependencies: [i2.TaskItemComponent, i3.TaskFormModalComponent], styles: [".task-list[_ngcontent-%COMP%] { display: flex; flex-direction: column; height: 100%; background: white; }\n .task-header[_ngcontent-%COMP%] { padding: 16px; border-bottom: 1px solid #D9D9D9; display: flex; align-items: center; gap: 12px; }\n .task-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] { margin: 0; font-size: 16px; flex: 1; }\n .task-filters[_ngcontent-%COMP%] { display: flex; gap: 4px; }\n .filter-btn[_ngcontent-%COMP%] { padding: 6px 12px; background: transparent; border: 1px solid #D9D9D9; border-radius: 4px; cursor: pointer; font-size: 13px; transition: all 150ms ease; position: relative; }\n .filter-btn[_ngcontent-%COMP%]:hover { background: #F4F4F4; }\n .filter-btn.active[_ngcontent-%COMP%] { background: #0076B6; color: white; border-color: #0076B6; }\n .filter-badge[_ngcontent-%COMP%] { display: inline-block; margin-left: 6px; padding: 1px 6px; background: #C62828; color: white; border-radius: 10px; font-size: 10px; font-weight: bold; }\n .filter-btn.active[_ngcontent-%COMP%] .filter-badge[_ngcontent-%COMP%] { background: rgba(255,255,255,0.3); }\n .btn-add-task[_ngcontent-%COMP%] { padding: 6px 10px; background: #0076B6; color: white; border: none; border-radius: 4px; cursor: pointer; }\n .btn-add-task[_ngcontent-%COMP%]:hover { background: #005A8C; }\n .task-content[_ngcontent-%COMP%] { flex: 1; overflow-y: auto; }\n .empty-state[_ngcontent-%COMP%] { display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 48px 24px; color: #999; }\n .empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { font-size: 48px; margin-bottom: 16px; }\n .empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] { margin: 0; font-size: 14px; }"] });
|
|
214
|
-
}
|
|
215
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TaskListComponent, [{
|
|
216
|
-
type: Component,
|
|
217
|
-
args: [{ selector: 'mj-task-list', template: `
|
|
218
|
-
<div class="task-list">
|
|
219
|
-
<div class="task-header">
|
|
220
|
-
<h3>Tasks</h3>
|
|
221
|
-
<div class="task-filters">
|
|
222
|
-
<button
|
|
223
|
-
class="filter-btn"
|
|
224
|
-
[class.active]="filterStatus === 'all'"
|
|
225
|
-
(click)="filterStatus = 'all'; applyFilter()">
|
|
226
|
-
All
|
|
227
|
-
</button>
|
|
228
|
-
<button
|
|
229
|
-
class="filter-btn"
|
|
230
|
-
[class.active]="filterStatus === 'active'"
|
|
231
|
-
(click)="filterStatus = 'active'; applyFilter()">
|
|
232
|
-
Active
|
|
233
|
-
</button>
|
|
234
|
-
<button
|
|
235
|
-
class="filter-btn"
|
|
236
|
-
[class.active]="filterStatus === 'overdue'"
|
|
237
|
-
(click)="filterStatus = 'overdue'; applyFilter()"
|
|
238
|
-
[title]="getOverdueCount() + ' overdue tasks'">
|
|
239
|
-
Overdue
|
|
240
|
-
@if (getOverdueCount() > 0) {
|
|
241
|
-
<span class="filter-badge">{{ getOverdueCount() }}</span>
|
|
242
|
-
}
|
|
243
|
-
</button>
|
|
244
|
-
<button
|
|
245
|
-
class="filter-btn"
|
|
246
|
-
[class.active]="filterStatus === 'completed'"
|
|
247
|
-
(click)="filterStatus = 'completed'; applyFilter()">
|
|
248
|
-
Completed
|
|
249
|
-
</button>
|
|
250
|
-
</div>
|
|
251
|
-
<button class="btn-add-task" (click)="onAddTask()" title="Add Task">
|
|
252
|
-
<i class="fa-solid fa-plus"></i>
|
|
253
|
-
</button>
|
|
254
|
-
</div>
|
|
255
|
-
|
|
256
|
-
<div class="task-content">
|
|
257
|
-
@if (filteredTasks.length === 0) {
|
|
258
|
-
<div class="empty-state">
|
|
259
|
-
<i class="fa-solid fa-tasks"></i>
|
|
260
|
-
<p>No tasks found</p>
|
|
261
|
-
</div>
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
@for (task of filteredTasks; track task.ID) {
|
|
265
|
-
<mj-task-item
|
|
266
|
-
[task]="task"
|
|
267
|
-
(statusToggled)="onToggleStatus($event)"
|
|
268
|
-
(editRequested)="onEditTask($event)"
|
|
269
|
-
(deleteRequested)="onDeleteTask($event)">
|
|
270
|
-
</mj-task-item>
|
|
271
|
-
}
|
|
272
|
-
</div>
|
|
273
|
-
|
|
274
|
-
<mj-task-form-modal
|
|
275
|
-
[isVisible]="isTaskModalVisible"
|
|
276
|
-
[task]="selectedTask"
|
|
277
|
-
[conversationId]="conversationId"
|
|
278
|
-
[currentUser]="currentUser"
|
|
279
|
-
(saved)="onTaskSaved($event)"
|
|
280
|
-
(cancelled)="onTaskModalCancelled()">
|
|
281
|
-
</mj-task-form-modal>
|
|
282
|
-
</div>
|
|
283
|
-
`, styles: ["\n .task-list { display: flex; flex-direction: column; height: 100%; background: white; }\n .task-header { padding: 16px; border-bottom: 1px solid #D9D9D9; display: flex; align-items: center; gap: 12px; }\n .task-header h3 { margin: 0; font-size: 16px; flex: 1; }\n .task-filters { display: flex; gap: 4px; }\n .filter-btn { padding: 6px 12px; background: transparent; border: 1px solid #D9D9D9; border-radius: 4px; cursor: pointer; font-size: 13px; transition: all 150ms ease; position: relative; }\n .filter-btn:hover { background: #F4F4F4; }\n .filter-btn.active { background: #0076B6; color: white; border-color: #0076B6; }\n .filter-badge { display: inline-block; margin-left: 6px; padding: 1px 6px; background: #C62828; color: white; border-radius: 10px; font-size: 10px; font-weight: bold; }\n .filter-btn.active .filter-badge { background: rgba(255,255,255,0.3); }\n .btn-add-task { padding: 6px 10px; background: #0076B6; color: white; border: none; border-radius: 4px; cursor: pointer; }\n .btn-add-task:hover { background: #005A8C; }\n .task-content { flex: 1; overflow-y: auto; }\n .empty-state { display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 48px 24px; color: #999; }\n .empty-state i { font-size: 48px; margin-bottom: 16px; }\n .empty-state p { margin: 0; font-size: 14px; }\n "] }]
|
|
284
|
-
}], () => [{ type: i1.DialogService }], { conversationId: [{
|
|
285
|
-
type: Input
|
|
286
|
-
}], currentUser: [{
|
|
287
|
-
type: Input
|
|
288
|
-
}] }); })();
|
|
289
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(TaskListComponent, { className: "TaskListComponent", filePath: "src/lib/components/task/task-list.component.ts", lineNumber: 93 }); })();
|
|
290
|
-
//# sourceMappingURL=task-list.component.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"task-list.component.js","sourceRoot":"","sources":["../../../../src/lib/components/task/task-list.component.ts"],"names":[],"mappings":"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"}
|