@flusys/ng-task-manager 7.1.0 → 8.0.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.
|
@@ -1,18 +1,17 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import {
|
|
3
|
-
import { ApiResourceService, TranslatePipe,
|
|
2
|
+
import { Service, inject, signal, DestroyRef, computed, input, output, Component, model, effect, untracked } from '@angular/core';
|
|
3
|
+
import { ApiResourceService, TranslatePipe, TranslateService, UserSelectComponent, resolveTranslationModule, SHARED_MESSAGES } from '@flusys/ng-shared';
|
|
4
4
|
import { firstValueFrom, Subject } from 'rxjs';
|
|
5
5
|
import { io } from 'socket.io-client';
|
|
6
6
|
import { APP_CONFIG } from '@flusys/ng-core';
|
|
7
7
|
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
8
|
-
import * as i3 from '@angular/common';
|
|
9
8
|
import { DatePipe } from '@angular/common';
|
|
10
|
-
import
|
|
11
|
-
import
|
|
12
|
-
import * as i2 from '@angular/forms';
|
|
9
|
+
import { TooltipDirective, AvatarComponent, TagComponent, UiIconComponent, DatePickerComponent, DialogComponent, FButtonDirective, InputTextDirective, MultiSelectComponent, SelectComponent, TextareaDirective, DrawerComponent, SkeletonComponent, ConfirmationService, MessageService, SortableColumnDirective, SortIconComponent, TableComponent } from '@flusys/ng-ui';
|
|
10
|
+
import * as i1 from '@angular/forms';
|
|
13
11
|
import { FormsModule } from '@angular/forms';
|
|
12
|
+
import { form, required, FormField } from '@angular/forms/signals';
|
|
14
13
|
import { Router } from '@angular/router';
|
|
15
|
-
import * as
|
|
14
|
+
import * as i1$1 from '@angular/cdk/drag-drop';
|
|
16
15
|
import { moveItemInArray, transferArrayItem, DragDropModule } from '@angular/cdk/drag-drop';
|
|
17
16
|
|
|
18
17
|
class TaskBoardApiService extends ApiResourceService {
|
|
@@ -31,12 +30,11 @@ class TaskBoardApiService extends ApiResourceService {
|
|
|
31
30
|
userId,
|
|
32
31
|
}));
|
|
33
32
|
}
|
|
34
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
35
|
-
static ɵprov = i0.ɵɵ
|
|
33
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: TaskBoardApiService, deps: [], target: i0.ɵɵFactoryTarget.Service });
|
|
34
|
+
static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.1.5", ngImport: i0, type: TaskBoardApiService });
|
|
36
35
|
}
|
|
37
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
38
|
-
type:
|
|
39
|
-
args: [{ providedIn: 'root' }]
|
|
36
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: TaskBoardApiService, decorators: [{
|
|
37
|
+
type: Service
|
|
40
38
|
}], ctorParameters: () => [] });
|
|
41
39
|
|
|
42
40
|
class TaskApiService extends ApiResourceService {
|
|
@@ -46,12 +44,11 @@ class TaskApiService extends ApiResourceService {
|
|
|
46
44
|
moveTask(dto) {
|
|
47
45
|
return firstValueFrom(this.http.post(`${this.baseUrl}/move`, dto));
|
|
48
46
|
}
|
|
49
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
50
|
-
static ɵprov = i0.ɵɵ
|
|
47
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: TaskApiService, deps: [], target: i0.ɵɵFactoryTarget.Service });
|
|
48
|
+
static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.1.5", ngImport: i0, type: TaskApiService });
|
|
51
49
|
}
|
|
52
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
53
|
-
type:
|
|
54
|
-
args: [{ providedIn: 'root' }]
|
|
50
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: TaskApiService, decorators: [{
|
|
51
|
+
type: Service
|
|
55
52
|
}], ctorParameters: () => [] });
|
|
56
53
|
class TaskListApiService extends ApiResourceService {
|
|
57
54
|
constructor() {
|
|
@@ -63,34 +60,31 @@ class TaskListApiService extends ApiResourceService {
|
|
|
63
60
|
reorderLists(dto) {
|
|
64
61
|
return firstValueFrom(this.http.post(`${this.baseUrl}/reorder`, dto));
|
|
65
62
|
}
|
|
66
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
67
|
-
static ɵprov = i0.ɵɵ
|
|
63
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: TaskListApiService, deps: [], target: i0.ɵɵFactoryTarget.Service });
|
|
64
|
+
static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.1.5", ngImport: i0, type: TaskListApiService });
|
|
68
65
|
}
|
|
69
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
70
|
-
type:
|
|
71
|
-
args: [{ providedIn: 'root' }]
|
|
66
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: TaskListApiService, decorators: [{
|
|
67
|
+
type: Service
|
|
72
68
|
}], ctorParameters: () => [] });
|
|
73
69
|
class TaskLabelApiService extends ApiResourceService {
|
|
74
70
|
constructor() {
|
|
75
71
|
super('label', 'taskManager');
|
|
76
72
|
}
|
|
77
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
78
|
-
static ɵprov = i0.ɵɵ
|
|
73
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: TaskLabelApiService, deps: [], target: i0.ɵɵFactoryTarget.Service });
|
|
74
|
+
static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.1.5", ngImport: i0, type: TaskLabelApiService });
|
|
79
75
|
}
|
|
80
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
81
|
-
type:
|
|
82
|
-
args: [{ providedIn: 'root' }]
|
|
76
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: TaskLabelApiService, decorators: [{
|
|
77
|
+
type: Service
|
|
83
78
|
}], ctorParameters: () => [] });
|
|
84
79
|
class TaskCommentApiService extends ApiResourceService {
|
|
85
80
|
constructor() {
|
|
86
81
|
super('comment', 'taskManager');
|
|
87
82
|
}
|
|
88
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
89
|
-
static ɵprov = i0.ɵɵ
|
|
83
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: TaskCommentApiService, deps: [], target: i0.ɵɵFactoryTarget.Service });
|
|
84
|
+
static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.1.5", ngImport: i0, type: TaskCommentApiService });
|
|
90
85
|
}
|
|
91
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
92
|
-
type:
|
|
93
|
-
args: [{ providedIn: 'root' }]
|
|
86
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: TaskCommentApiService, decorators: [{
|
|
87
|
+
type: Service
|
|
94
88
|
}], ctorParameters: () => [] });
|
|
95
89
|
|
|
96
90
|
class TaskBoardSocketService {
|
|
@@ -136,12 +130,11 @@ class TaskBoardSocketService {
|
|
|
136
130
|
const services = this.appConfig.services;
|
|
137
131
|
return services?.['taskManager']?.socketUrl ?? this.appConfig.apiBaseUrl;
|
|
138
132
|
}
|
|
139
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
140
|
-
static ɵprov = i0.ɵɵ
|
|
133
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: TaskBoardSocketService, deps: [], target: i0.ɵɵFactoryTarget.Service });
|
|
134
|
+
static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.1.5", ngImport: i0, type: TaskBoardSocketService });
|
|
141
135
|
}
|
|
142
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
143
|
-
type:
|
|
144
|
-
args: [{ providedIn: 'root' }]
|
|
136
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: TaskBoardSocketService, decorators: [{
|
|
137
|
+
type: Service
|
|
145
138
|
}] });
|
|
146
139
|
|
|
147
140
|
class TaskBoardStateService {
|
|
@@ -359,12 +352,11 @@ class TaskBoardStateService {
|
|
|
359
352
|
}
|
|
360
353
|
}
|
|
361
354
|
}
|
|
362
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
363
|
-
static ɵprov = i0.ɵɵ
|
|
355
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: TaskBoardStateService, deps: [], target: i0.ɵɵFactoryTarget.Service });
|
|
356
|
+
static ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.1.5", ngImport: i0, type: TaskBoardStateService });
|
|
364
357
|
}
|
|
365
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
366
|
-
type:
|
|
367
|
-
args: [{ providedIn: 'root' }]
|
|
358
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: TaskBoardStateService, decorators: [{
|
|
359
|
+
type: Service
|
|
368
360
|
}], ctorParameters: () => [] });
|
|
369
361
|
|
|
370
362
|
const MEMBER_COLOR_PALETTE = [
|
|
@@ -426,8 +418,8 @@ class TaskCardComponent {
|
|
|
426
418
|
initials = memberInitials;
|
|
427
419
|
isOverdue = isTaskOverdue;
|
|
428
420
|
memberColor = memberColorFromId;
|
|
429
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
430
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.
|
|
421
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: TaskCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
422
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.5", type: TaskCardComponent, isStandalone: true, selector: "tm-task-card", inputs: { task: { classPropertyName: "task", publicName: "task", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { cardClick: "cardClick", editClick: "editClick", deleteClick: "deleteClick" }, ngImport: i0, template: `
|
|
431
423
|
<div
|
|
432
424
|
class="task-card group relative rounded-border border border-surface p-3 cursor-pointer shadow-sm hover:shadow-md transition-shadow"
|
|
433
425
|
(click)="cardClick.emit(task())"
|
|
@@ -507,13 +499,13 @@ class TaskCardComponent {
|
|
|
507
499
|
}
|
|
508
500
|
</div>
|
|
509
501
|
</div>
|
|
510
|
-
`, isInline: true, dependencies: [{ kind: "directive", type: TooltipDirective, selector: "[fTooltip]", inputs: ["fTooltip", "tooltipPosition", "positionStyle", "tooltipStyleClass", "disabled", "tooltipEvent", "showDelay", "hideDelay", "life", "autoHide", "positionTop", "positionLeft", "escape"] }, { kind: "
|
|
502
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: TooltipDirective, selector: "[fTooltip]", inputs: ["fTooltip", "tooltipPosition", "positionStyle", "tooltipStyleClass", "disabled", "tooltipEvent", "showDelay", "hideDelay", "life", "autoHide", "positionTop", "positionLeft", "escape"] }, { kind: "component", type: AvatarComponent, selector: "f-avatar", inputs: ["label", "icon", "image", "shape", "size", "color", "styleClass", "ariaLabel", "ariaLabelledBy"], outputs: ["onImageError"] }, { kind: "component", type: TagComponent, selector: "f-tag", inputs: ["value", "severity", "icon", "rounded", "color", "styleClass", "style"] }, { kind: "component", type: UiIconComponent, selector: "ui-icon", inputs: ["name", "size", "spin", "fill", "severity"] }, { kind: "pipe", type: DatePipe, name: "date" }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
|
|
511
503
|
}
|
|
512
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
504
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: TaskCardComponent, decorators: [{
|
|
513
505
|
type: Component,
|
|
514
506
|
args: [{
|
|
515
507
|
selector: 'tm-task-card',
|
|
516
|
-
imports: [DatePipe, TranslatePipe, TooltipDirective,
|
|
508
|
+
imports: [DatePipe, TranslatePipe, TooltipDirective, AvatarComponent, TagComponent, UiIconComponent],
|
|
517
509
|
template: `
|
|
518
510
|
<div
|
|
519
511
|
class="task-card group relative rounded-border border border-surface p-3 cursor-pointer shadow-sm hover:shadow-md transition-shadow"
|
|
@@ -622,22 +614,33 @@ class TaskFormDialogComponent {
|
|
|
622
614
|
isSaving = signal(false, /* @ts-ignore */
|
|
623
615
|
...(ngDevMode ? [{ debugName: "isSaving" }] : /* istanbul ignore next */ []));
|
|
624
616
|
priorityOptions = PRIORITY_OPTIONS;
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
617
|
+
formModel = signal({
|
|
618
|
+
title: '',
|
|
619
|
+
description: '',
|
|
620
|
+
priority: 'MEDIUM',
|
|
621
|
+
}, /* @ts-ignore */
|
|
622
|
+
...(ngDevMode ? [{ debugName: "formModel" }] : /* istanbul ignore next */ []));
|
|
623
|
+
taskForm = form(this.formModel, (f) => {
|
|
624
|
+
required(f.title);
|
|
625
|
+
});
|
|
626
|
+
dueDate = signal(null, /* @ts-ignore */
|
|
627
|
+
...(ngDevMode ? [{ debugName: "dueDate" }] : /* istanbul ignore next */ []));
|
|
628
|
+
selectedAssigneeIds = signal([], /* @ts-ignore */
|
|
629
|
+
...(ngDevMode ? [{ debugName: "selectedAssigneeIds" }] : /* istanbul ignore next */ []));
|
|
630
|
+
selectedLabelIds = signal([], /* @ts-ignore */
|
|
631
|
+
...(ngDevMode ? [{ debugName: "selectedLabelIds" }] : /* istanbul ignore next */ []));
|
|
631
632
|
constructor() {
|
|
632
633
|
effect(() => {
|
|
633
634
|
const t = this.task();
|
|
634
635
|
if (t) {
|
|
635
|
-
this.
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
this.
|
|
636
|
+
this.formModel.set({
|
|
637
|
+
title: t.title,
|
|
638
|
+
description: t.description ?? '',
|
|
639
|
+
priority: t.priority,
|
|
640
|
+
});
|
|
641
|
+
this.dueDate.set(t.dueDate ? new Date(t.dueDate) : null);
|
|
642
|
+
this.selectedAssigneeIds.set(t.assignees?.map((a) => a.userId) ?? []);
|
|
643
|
+
this.selectedLabelIds.set(t.labelIds ?? []);
|
|
641
644
|
}
|
|
642
645
|
else {
|
|
643
646
|
this.reset();
|
|
@@ -645,25 +648,26 @@ class TaskFormDialogComponent {
|
|
|
645
648
|
});
|
|
646
649
|
}
|
|
647
650
|
async onSave() {
|
|
648
|
-
|
|
651
|
+
const { title, description, priority } = this.formModel();
|
|
652
|
+
if (!title.trim())
|
|
649
653
|
return;
|
|
650
654
|
this.isSaving.set(true);
|
|
651
655
|
try {
|
|
652
|
-
const
|
|
653
|
-
|
|
654
|
-
: undefined;
|
|
656
|
+
const dueDate = this.dueDate();
|
|
657
|
+
const dueDateStr = dueDate ? dueDate.toISOString().slice(0, 10) : undefined;
|
|
655
658
|
const existing = this.task();
|
|
656
|
-
const
|
|
659
|
+
const assigneeIds = this.selectedAssigneeIds();
|
|
660
|
+
const labelIds = this.selectedLabelIds();
|
|
657
661
|
let result;
|
|
658
662
|
if (existing) {
|
|
659
663
|
const dto = {
|
|
660
664
|
id: existing.id,
|
|
661
|
-
title
|
|
662
|
-
description:
|
|
665
|
+
title,
|
|
666
|
+
description: description || undefined,
|
|
663
667
|
priority,
|
|
664
668
|
dueDate: dueDateStr,
|
|
665
|
-
assigneeIds
|
|
666
|
-
labelIds
|
|
669
|
+
assigneeIds,
|
|
670
|
+
labelIds,
|
|
667
671
|
};
|
|
668
672
|
result = await this.taskApi.update(dto);
|
|
669
673
|
}
|
|
@@ -671,12 +675,12 @@ class TaskFormDialogComponent {
|
|
|
671
675
|
const dto = {
|
|
672
676
|
boardId: this.boardId(),
|
|
673
677
|
listId: this.listId(),
|
|
674
|
-
title
|
|
675
|
-
description:
|
|
678
|
+
title,
|
|
679
|
+
description: description || undefined,
|
|
676
680
|
priority,
|
|
677
681
|
dueDate: dueDateStr,
|
|
678
|
-
assigneeIds
|
|
679
|
-
labelIds
|
|
682
|
+
assigneeIds,
|
|
683
|
+
labelIds,
|
|
680
684
|
};
|
|
681
685
|
result = await this.taskApi.insert(dto);
|
|
682
686
|
}
|
|
@@ -693,15 +697,13 @@ class TaskFormDialogComponent {
|
|
|
693
697
|
this.reset();
|
|
694
698
|
}
|
|
695
699
|
reset() {
|
|
696
|
-
this.title
|
|
697
|
-
this.
|
|
698
|
-
this.
|
|
699
|
-
this.
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
}
|
|
703
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: TaskFormDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
704
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.6", type: TaskFormDialogComponent, isStandalone: true, selector: "tm-task-form-dialog", inputs: { visible: { classPropertyName: "visible", publicName: "visible", isSignal: true, isRequired: false, transformFunction: null }, task: { classPropertyName: "task", publicName: "task", isSignal: true, isRequired: false, transformFunction: null }, boardId: { classPropertyName: "boardId", publicName: "boardId", isSignal: true, isRequired: true, transformFunction: null }, listId: { classPropertyName: "listId", publicName: "listId", isSignal: true, isRequired: true, transformFunction: null }, members: { classPropertyName: "members", publicName: "members", isSignal: true, isRequired: false, transformFunction: null }, labels: { classPropertyName: "labels", publicName: "labels", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { visible: "visibleChange", saved: "saved" }, ngImport: i0, template: `
|
|
700
|
+
this.formModel.set({ title: '', description: '', priority: 'MEDIUM' });
|
|
701
|
+
this.dueDate.set(null);
|
|
702
|
+
this.selectedAssigneeIds.set([]);
|
|
703
|
+
this.selectedLabelIds.set([]);
|
|
704
|
+
}
|
|
705
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: TaskFormDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
706
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.5", type: TaskFormDialogComponent, isStandalone: true, selector: "tm-task-form-dialog", inputs: { visible: { classPropertyName: "visible", publicName: "visible", isSignal: true, isRequired: false, transformFunction: null }, task: { classPropertyName: "task", publicName: "task", isSignal: true, isRequired: false, transformFunction: null }, boardId: { classPropertyName: "boardId", publicName: "boardId", isSignal: true, isRequired: true, transformFunction: null }, listId: { classPropertyName: "listId", publicName: "listId", isSignal: true, isRequired: true, transformFunction: null }, members: { classPropertyName: "members", publicName: "members", isSignal: true, isRequired: false, transformFunction: null }, labels: { classPropertyName: "labels", publicName: "labels", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { visible: "visibleChange", saved: "saved" }, ngImport: i0, template: `
|
|
705
707
|
<f-dialog
|
|
706
708
|
[header]="
|
|
707
709
|
(task() ? 'task.form.title.edit' : 'task.form.title.create') | translate
|
|
@@ -719,7 +721,7 @@ class TaskFormDialogComponent {
|
|
|
719
721
|
>
|
|
720
722
|
<input
|
|
721
723
|
fInputText
|
|
722
|
-
[
|
|
724
|
+
[formField]="taskForm.title"
|
|
723
725
|
[placeholder]="'task.form.title.placeholder' | translate"
|
|
724
726
|
/>
|
|
725
727
|
</div>
|
|
@@ -730,7 +732,7 @@ class TaskFormDialogComponent {
|
|
|
730
732
|
}}</label>
|
|
731
733
|
<textarea
|
|
732
734
|
fTextarea
|
|
733
|
-
[
|
|
735
|
+
[formField]="taskForm.description"
|
|
734
736
|
rows="3"
|
|
735
737
|
[placeholder]="'task.form.description.placeholder' | translate"
|
|
736
738
|
></textarea>
|
|
@@ -742,7 +744,7 @@ class TaskFormDialogComponent {
|
|
|
742
744
|
'task.form.priority.label' | translate
|
|
743
745
|
}}</label>
|
|
744
746
|
<f-select
|
|
745
|
-
[
|
|
747
|
+
[formField]="taskForm.priority"
|
|
746
748
|
[options]="priorityOptions"
|
|
747
749
|
optionLabel="labelKey"
|
|
748
750
|
optionValue="value"
|
|
@@ -762,7 +764,8 @@ class TaskFormDialogComponent {
|
|
|
762
764
|
'task.form.due.date.label' | translate
|
|
763
765
|
}}</label>
|
|
764
766
|
<f-datepicker
|
|
765
|
-
[
|
|
767
|
+
[ngModel]="dueDate()"
|
|
768
|
+
(ngModelChange)="dueDate.set($event)"
|
|
766
769
|
[showClear]="true"
|
|
767
770
|
[placeholder]="'task.form.due.date.placeholder' | translate"
|
|
768
771
|
/>
|
|
@@ -774,7 +777,8 @@ class TaskFormDialogComponent {
|
|
|
774
777
|
'task.form.assignee.label' | translate
|
|
775
778
|
}}</label>
|
|
776
779
|
<f-multiselect
|
|
777
|
-
[
|
|
780
|
+
[ngModel]="selectedAssigneeIds()"
|
|
781
|
+
(ngModelChange)="selectedAssigneeIds.set($event)"
|
|
778
782
|
[options]="members()"
|
|
779
783
|
optionLabel="userName"
|
|
780
784
|
optionValue="userId"
|
|
@@ -788,7 +792,8 @@ class TaskFormDialogComponent {
|
|
|
788
792
|
'task.form.labels.label' | translate
|
|
789
793
|
}}</label>
|
|
790
794
|
<f-multiselect
|
|
791
|
-
[
|
|
795
|
+
[ngModel]="selectedLabelIds()"
|
|
796
|
+
(ngModelChange)="selectedLabelIds.set($event)"
|
|
792
797
|
[options]="labels()"
|
|
793
798
|
optionLabel="name"
|
|
794
799
|
optionValue="id"
|
|
@@ -811,13 +816,25 @@ class TaskFormDialogComponent {
|
|
|
811
816
|
</div>
|
|
812
817
|
</ng-template>
|
|
813
818
|
</f-dialog>
|
|
814
|
-
`, isInline: true, dependencies: [{ kind: "
|
|
819
|
+
`, isInline: true, dependencies: [{ kind: "component", type: DatePickerComponent, selector: "f-datepicker", inputs: ["placeholder", "dateFormat", "disabled", "readonly", "readonlyInput", "showTime", "timeOnly", "hourFormat", "showSeconds", "selectionMode", "minDate", "maxDate", "disabledDates", "disabledDays", "inputId", "invalid", "touched", "showClear", "inputStyleClass", "showIcon", "iconDisplay", "showButtonBar", "inline", "numberOfMonths", "view", "showOtherMonths", "selectOtherMonths", "firstDayOfWeek", "appendTo", "styleClass", "style"], outputs: ["onBlur", "onSelect", "onShow", "onHide", "onClearClick", "onTodayClick", "onMonthChange", "onYearChange"] }, { kind: "component", type: DialogComponent, selector: "f-dialog", inputs: ["header", "visible", "modal", "closable", "closeOnEscape", "dismissableMask", "resizable", "draggable", "maximizable", "blockScroll", "returnFocusOnClose", "position", "style", "styleClass", "breakpoints"], outputs: ["visibleChange", "onShow", "onHide", "onMaximize"] }, { kind: "directive", type: FButtonDirective, selector: "[fButton]", inputs: ["severity", "text", "outlined", "link", "variant", "rounded", "raised", "fluid", "disabled", "loading", "loadingIcon", "size", "label", "icon", "iconPos", "ariaLabel", "plain"] }, { kind: "directive", type: InputTextDirective, selector: "[fInputText]", inputs: ["invalid", "touched", "variant", "size", "fluid"] }, { kind: "component", type: MultiSelectComponent, selector: "f-multiselect", inputs: ["options", "optionLabel", "optionValue", "placeholder", "disabled", "filter", "filterBy", "filterMatchMode", "filterLocale", "filterPlaceholder", "resetFilterOnHide", "autofocusFilter", "emptyMessage", "emptyFilterMessage", "inputId", "invalid", "touched", "showClear", "optionDisabled", "display", "maxSelectedLabels", "selectionLimit", "showToggleAll", "styleClass", "style", "appendTo", "readonly", "autofocus", "loading", "loadingIcon", "dropdownIcon", "clearIcon", "group", "optionGroupLabel", "optionGroupChildren", "virtualScroll", "virtualScrollItemSize", "lazy"], outputs: ["onBlur", "onFocus", "onChange", "onFilter", "onShow", "onHide", "onClear", "onLazyLoad", "onSelectAllChange"] }, { kind: "component", type: SelectComponent, selector: "f-select", inputs: ["options", "optionLabel", "optionValue", "placeholder", "disabled", "filter", "filterBy", "filterMatchMode", "filterLocale", "filterPlaceholder", "resetFilterOnHide", "autofocusFilter", "emptyMessage", "emptyFilterMessage", "showClear", "loading", "loadingIcon", "dropdownIcon", "clearIcon", "inputId", "invalid", "touched", "styleClass", "style", "appendTo", "editable", "readonly", "autofocus", "checkmark", "group", "optionGroupLabel", "optionGroupChildren", "virtualScroll", "virtualScrollItemSize", "lazy"], outputs: ["onFilter", "onChange", "onShow", "onHide", "onBlur", "onFocus", "onClear", "onLazyLoad"] }, { kind: "directive", type: TextareaDirective, selector: "[fTextarea]", inputs: ["invalid", "touched", "variant", "fluid", "autoResize"], outputs: ["onResize"] }, { kind: "component", type: UiIconComponent, selector: "ui-icon", inputs: ["name", "size", "spin", "fill", "severity"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: FormField, selector: "[formField]", inputs: ["formField"], exportAs: ["formField"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
|
|
815
820
|
}
|
|
816
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
821
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: TaskFormDialogComponent, decorators: [{
|
|
817
822
|
type: Component,
|
|
818
823
|
args: [{
|
|
819
824
|
selector: 'tm-task-form-dialog',
|
|
820
|
-
imports: [
|
|
825
|
+
imports: [
|
|
826
|
+
DatePickerComponent,
|
|
827
|
+
DialogComponent,
|
|
828
|
+
FButtonDirective,
|
|
829
|
+
InputTextDirective,
|
|
830
|
+
MultiSelectComponent,
|
|
831
|
+
SelectComponent,
|
|
832
|
+
TextareaDirective,
|
|
833
|
+
UiIconComponent,
|
|
834
|
+
FormsModule,
|
|
835
|
+
FormField,
|
|
836
|
+
TranslatePipe,
|
|
837
|
+
],
|
|
821
838
|
template: `
|
|
822
839
|
<f-dialog
|
|
823
840
|
[header]="
|
|
@@ -836,7 +853,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImpor
|
|
|
836
853
|
>
|
|
837
854
|
<input
|
|
838
855
|
fInputText
|
|
839
|
-
[
|
|
856
|
+
[formField]="taskForm.title"
|
|
840
857
|
[placeholder]="'task.form.title.placeholder' | translate"
|
|
841
858
|
/>
|
|
842
859
|
</div>
|
|
@@ -847,7 +864,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImpor
|
|
|
847
864
|
}}</label>
|
|
848
865
|
<textarea
|
|
849
866
|
fTextarea
|
|
850
|
-
[
|
|
867
|
+
[formField]="taskForm.description"
|
|
851
868
|
rows="3"
|
|
852
869
|
[placeholder]="'task.form.description.placeholder' | translate"
|
|
853
870
|
></textarea>
|
|
@@ -859,7 +876,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImpor
|
|
|
859
876
|
'task.form.priority.label' | translate
|
|
860
877
|
}}</label>
|
|
861
878
|
<f-select
|
|
862
|
-
[
|
|
879
|
+
[formField]="taskForm.priority"
|
|
863
880
|
[options]="priorityOptions"
|
|
864
881
|
optionLabel="labelKey"
|
|
865
882
|
optionValue="value"
|
|
@@ -879,7 +896,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImpor
|
|
|
879
896
|
'task.form.due.date.label' | translate
|
|
880
897
|
}}</label>
|
|
881
898
|
<f-datepicker
|
|
882
|
-
[
|
|
899
|
+
[ngModel]="dueDate()"
|
|
900
|
+
(ngModelChange)="dueDate.set($event)"
|
|
883
901
|
[showClear]="true"
|
|
884
902
|
[placeholder]="'task.form.due.date.placeholder' | translate"
|
|
885
903
|
/>
|
|
@@ -891,7 +909,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImpor
|
|
|
891
909
|
'task.form.assignee.label' | translate
|
|
892
910
|
}}</label>
|
|
893
911
|
<f-multiselect
|
|
894
|
-
[
|
|
912
|
+
[ngModel]="selectedAssigneeIds()"
|
|
913
|
+
(ngModelChange)="selectedAssigneeIds.set($event)"
|
|
895
914
|
[options]="members()"
|
|
896
915
|
optionLabel="userName"
|
|
897
916
|
optionValue="userId"
|
|
@@ -905,7 +924,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImpor
|
|
|
905
924
|
'task.form.labels.label' | translate
|
|
906
925
|
}}</label>
|
|
907
926
|
<f-multiselect
|
|
908
|
-
[
|
|
927
|
+
[ngModel]="selectedLabelIds()"
|
|
928
|
+
(ngModelChange)="selectedLabelIds.set($event)"
|
|
909
929
|
[options]="labels()"
|
|
910
930
|
optionLabel="name"
|
|
911
931
|
optionValue="id"
|
|
@@ -949,8 +969,10 @@ class TaskDetailPanelComponent {
|
|
|
949
969
|
...(ngDevMode ? [{ debugName: "replyingToId" }] : /* istanbul ignore next */ []));
|
|
950
970
|
isDeleting = signal(false, /* @ts-ignore */
|
|
951
971
|
...(ngDevMode ? [{ debugName: "isDeleting" }] : /* istanbul ignore next */ []));
|
|
952
|
-
newComment = ''
|
|
953
|
-
|
|
972
|
+
newComment = signal('', /* @ts-ignore */
|
|
973
|
+
...(ngDevMode ? [{ debugName: "newComment" }] : /* istanbul ignore next */ []));
|
|
974
|
+
replyText = signal('', /* @ts-ignore */
|
|
975
|
+
...(ngDevMode ? [{ debugName: "replyText" }] : /* istanbul ignore next */ []));
|
|
954
976
|
assigneeMembers = computed(() => this.task()?.assignees ?? [], /* @ts-ignore */
|
|
955
977
|
...(ngDevMode ? [{ debugName: "assigneeMembers" }] : /* istanbul ignore next */ []));
|
|
956
978
|
rootComments = computed(() => this.comments().filter((c) => !c.parentCommentId), /* @ts-ignore */
|
|
@@ -975,12 +997,12 @@ class TaskDetailPanelComponent {
|
|
|
975
997
|
}
|
|
976
998
|
else {
|
|
977
999
|
this.replyingToId.set(commentId);
|
|
978
|
-
this.replyText
|
|
1000
|
+
this.replyText.set('');
|
|
979
1001
|
}
|
|
980
1002
|
}
|
|
981
1003
|
cancelReply() {
|
|
982
1004
|
this.replyingToId.set(null);
|
|
983
|
-
this.replyText
|
|
1005
|
+
this.replyText.set('');
|
|
984
1006
|
}
|
|
985
1007
|
async deleteTask(taskId) {
|
|
986
1008
|
this.isDeleting.set(true);
|
|
@@ -999,30 +1021,30 @@ class TaskDetailPanelComponent {
|
|
|
999
1021
|
this.comments.set(res.data ?? []);
|
|
1000
1022
|
}
|
|
1001
1023
|
async addComment(taskId) {
|
|
1002
|
-
if (!this.newComment.trim())
|
|
1024
|
+
if (!this.newComment().trim())
|
|
1003
1025
|
return;
|
|
1004
1026
|
this.isSendingComment.set(true);
|
|
1005
1027
|
try {
|
|
1006
1028
|
const res = await this.commentApi.insert({
|
|
1007
1029
|
taskId,
|
|
1008
|
-
content: this.newComment,
|
|
1030
|
+
content: this.newComment(),
|
|
1009
1031
|
});
|
|
1010
1032
|
if (res.data)
|
|
1011
1033
|
this.comments.update((list) => [...list, res.data]);
|
|
1012
|
-
this.newComment
|
|
1034
|
+
this.newComment.set('');
|
|
1013
1035
|
}
|
|
1014
1036
|
finally {
|
|
1015
1037
|
this.isSendingComment.set(false);
|
|
1016
1038
|
}
|
|
1017
1039
|
}
|
|
1018
1040
|
async submitReply(taskId, parentCommentId) {
|
|
1019
|
-
if (!this.replyText.trim())
|
|
1041
|
+
if (!this.replyText().trim())
|
|
1020
1042
|
return;
|
|
1021
1043
|
this.isSendingReply.set(true);
|
|
1022
1044
|
try {
|
|
1023
1045
|
const res = await this.commentApi.insert({
|
|
1024
1046
|
taskId,
|
|
1025
|
-
content: this.replyText,
|
|
1047
|
+
content: this.replyText(),
|
|
1026
1048
|
parentCommentId,
|
|
1027
1049
|
});
|
|
1028
1050
|
if (res.data)
|
|
@@ -1033,8 +1055,8 @@ class TaskDetailPanelComponent {
|
|
|
1033
1055
|
this.isSendingReply.set(false);
|
|
1034
1056
|
}
|
|
1035
1057
|
}
|
|
1036
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
1037
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.
|
|
1058
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: TaskDetailPanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1059
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.5", type: TaskDetailPanelComponent, isStandalone: true, selector: "tm-task-detail-panel", inputs: { task: { classPropertyName: "task", publicName: "task", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { closePanel: "closePanel", editTask: "editTask" }, ngImport: i0, template: `
|
|
1038
1060
|
<f-drawer
|
|
1039
1061
|
[visible]="!!task()"
|
|
1040
1062
|
position="right"
|
|
@@ -1169,7 +1191,8 @@ class TaskDetailPanelComponent {
|
|
|
1169
1191
|
>
|
|
1170
1192
|
<textarea
|
|
1171
1193
|
fTextarea
|
|
1172
|
-
[
|
|
1194
|
+
[ngModel]="replyText()"
|
|
1195
|
+
(ngModelChange)="replyText.set($event)"
|
|
1173
1196
|
rows="2"
|
|
1174
1197
|
[placeholder]="
|
|
1175
1198
|
'task.comment.reply.placeholder' | translate
|
|
@@ -1181,7 +1204,7 @@ class TaskDetailPanelComponent {
|
|
|
1181
1204
|
<button
|
|
1182
1205
|
fButton
|
|
1183
1206
|
size="small"
|
|
1184
|
-
[disabled]="!replyText.trim() || isSendingReply()"
|
|
1207
|
+
[disabled]="!replyText().trim() || isSendingReply()"
|
|
1185
1208
|
(click)="submitReply(t.id, comment.id)"
|
|
1186
1209
|
>
|
|
1187
1210
|
@if (isSendingReply()) {
|
|
@@ -1214,14 +1237,15 @@ class TaskDetailPanelComponent {
|
|
|
1214
1237
|
<div class="flex gap-2 mt-3">
|
|
1215
1238
|
<textarea
|
|
1216
1239
|
fTextarea
|
|
1217
|
-
[
|
|
1240
|
+
[ngModel]="newComment()"
|
|
1241
|
+
(ngModelChange)="newComment.set($event)"
|
|
1218
1242
|
rows="2"
|
|
1219
1243
|
[placeholder]="'task.detail.comment.placeholder' | translate"
|
|
1220
1244
|
class="flex-1 resize-none"
|
|
1221
1245
|
></textarea>
|
|
1222
1246
|
<button
|
|
1223
1247
|
fButton
|
|
1224
|
-
[disabled]="!newComment.trim() || isSendingComment()"
|
|
1248
|
+
[disabled]="!newComment().trim() || isSendingComment()"
|
|
1225
1249
|
(click)="addComment(t.id)"
|
|
1226
1250
|
>
|
|
1227
1251
|
@if (isSendingComment()) {
|
|
@@ -1235,15 +1259,24 @@ class TaskDetailPanelComponent {
|
|
|
1235
1259
|
</div>
|
|
1236
1260
|
}
|
|
1237
1261
|
</f-drawer>
|
|
1238
|
-
`, isInline: true, dependencies: [{ kind: "
|
|
1262
|
+
`, isInline: true, dependencies: [{ kind: "component", type: AvatarComponent, selector: "f-avatar", inputs: ["label", "icon", "image", "shape", "size", "color", "styleClass", "ariaLabel", "ariaLabelledBy"], outputs: ["onImageError"] }, { kind: "component", type: DrawerComponent, selector: "f-drawer", inputs: ["header", "visible", "position", "fullScreen", "modal", "closable", "closeOnEscape", "dismissable", "blockScroll", "returnFocusOnClose", "style", "styleClass"], outputs: ["visibleChange", "onShow", "onHide"] }, { kind: "directive", type: FButtonDirective, selector: "[fButton]", inputs: ["severity", "text", "outlined", "link", "variant", "rounded", "raised", "fluid", "disabled", "loading", "loadingIcon", "size", "label", "icon", "iconPos", "ariaLabel", "plain"] }, { kind: "component", type: TagComponent, selector: "f-tag", inputs: ["value", "severity", "icon", "rounded", "color", "styleClass", "style"] }, { kind: "directive", type: TextareaDirective, selector: "[fTextarea]", inputs: ["invalid", "touched", "variant", "fluid", "autoResize"], outputs: ["onResize"] }, { kind: "directive", type: TooltipDirective, selector: "[fTooltip]", inputs: ["fTooltip", "tooltipPosition", "positionStyle", "tooltipStyleClass", "disabled", "tooltipEvent", "showDelay", "hideDelay", "life", "autoHide", "positionTop", "positionLeft", "escape"] }, { kind: "component", type: UiIconComponent, selector: "ui-icon", inputs: ["name", "size", "spin", "fill", "severity"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: DatePipe, name: "date" }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
|
|
1239
1263
|
}
|
|
1240
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
1264
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: TaskDetailPanelComponent, decorators: [{
|
|
1241
1265
|
type: Component,
|
|
1242
1266
|
args: [{
|
|
1243
1267
|
selector: 'tm-task-detail-panel',
|
|
1244
|
-
imports: [
|
|
1268
|
+
imports: [
|
|
1269
|
+
AvatarComponent,
|
|
1270
|
+
DrawerComponent,
|
|
1271
|
+
FButtonDirective,
|
|
1272
|
+
TagComponent,
|
|
1273
|
+
TextareaDirective,
|
|
1274
|
+
TooltipDirective,
|
|
1275
|
+
UiIconComponent,
|
|
1276
|
+
DatePipe,
|
|
1245
1277
|
FormsModule,
|
|
1246
|
-
TranslatePipe,
|
|
1278
|
+
TranslatePipe,
|
|
1279
|
+
],
|
|
1247
1280
|
template: `
|
|
1248
1281
|
<f-drawer
|
|
1249
1282
|
[visible]="!!task()"
|
|
@@ -1379,7 +1412,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImpor
|
|
|
1379
1412
|
>
|
|
1380
1413
|
<textarea
|
|
1381
1414
|
fTextarea
|
|
1382
|
-
[
|
|
1415
|
+
[ngModel]="replyText()"
|
|
1416
|
+
(ngModelChange)="replyText.set($event)"
|
|
1383
1417
|
rows="2"
|
|
1384
1418
|
[placeholder]="
|
|
1385
1419
|
'task.comment.reply.placeholder' | translate
|
|
@@ -1391,7 +1425,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImpor
|
|
|
1391
1425
|
<button
|
|
1392
1426
|
fButton
|
|
1393
1427
|
size="small"
|
|
1394
|
-
[disabled]="!replyText.trim() || isSendingReply()"
|
|
1428
|
+
[disabled]="!replyText().trim() || isSendingReply()"
|
|
1395
1429
|
(click)="submitReply(t.id, comment.id)"
|
|
1396
1430
|
>
|
|
1397
1431
|
@if (isSendingReply()) {
|
|
@@ -1424,14 +1458,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImpor
|
|
|
1424
1458
|
<div class="flex gap-2 mt-3">
|
|
1425
1459
|
<textarea
|
|
1426
1460
|
fTextarea
|
|
1427
|
-
[
|
|
1461
|
+
[ngModel]="newComment()"
|
|
1462
|
+
(ngModelChange)="newComment.set($event)"
|
|
1428
1463
|
rows="2"
|
|
1429
1464
|
[placeholder]="'task.detail.comment.placeholder' | translate"
|
|
1430
1465
|
class="flex-1 resize-none"
|
|
1431
1466
|
></textarea>
|
|
1432
1467
|
<button
|
|
1433
1468
|
fButton
|
|
1434
|
-
[disabled]="!newComment.trim() || isSendingComment()"
|
|
1469
|
+
[disabled]="!newComment().trim() || isSendingComment()"
|
|
1435
1470
|
(click)="addComment(t.id)"
|
|
1436
1471
|
>
|
|
1437
1472
|
@if (isSendingComment()) {
|
|
@@ -1490,8 +1525,8 @@ class BoardListPageComponent {
|
|
|
1490
1525
|
this.isCreating.set(false);
|
|
1491
1526
|
}
|
|
1492
1527
|
}
|
|
1493
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
1494
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.
|
|
1528
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: BoardListPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1529
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.5", type: BoardListPageComponent, isStandalone: true, selector: "tm-board-list-page", ngImport: i0, template: `
|
|
1495
1530
|
<div class="p-2 sm:p-4">
|
|
1496
1531
|
<div
|
|
1497
1532
|
class="flex flex-col sm:flex-row justify-between items-start sm:items-center gap-3 mb-4"
|
|
@@ -1723,13 +1758,24 @@ class BoardListPageComponent {
|
|
|
1723
1758
|
</div>
|
|
1724
1759
|
</ng-template>
|
|
1725
1760
|
</f-dialog>
|
|
1726
|
-
`, isInline: true, dependencies: [{ kind: "ngmodule", type:
|
|
1761
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: DialogComponent, selector: "f-dialog", inputs: ["header", "visible", "modal", "closable", "closeOnEscape", "dismissableMask", "resizable", "draggable", "maximizable", "blockScroll", "returnFocusOnClose", "position", "style", "styleClass", "breakpoints"], outputs: ["visibleChange", "onShow", "onHide", "onMaximize"] }, { kind: "directive", type: FButtonDirective, selector: "[fButton]", inputs: ["severity", "text", "outlined", "link", "variant", "rounded", "raised", "fluid", "disabled", "loading", "loadingIcon", "size", "label", "icon", "iconPos", "ariaLabel", "plain"] }, { kind: "directive", type: InputTextDirective, selector: "[fInputText]", inputs: ["invalid", "touched", "variant", "size", "fluid"] }, { kind: "component", type: SkeletonComponent, selector: "f-skeleton", inputs: ["width", "height", "size", "borderRadius", "shape", "animation", "styleClass"] }, { kind: "directive", type: TextareaDirective, selector: "[fTextarea]", inputs: ["invalid", "touched", "variant", "fluid", "autoResize"], outputs: ["onResize"] }, { kind: "directive", type: TooltipDirective, selector: "[fTooltip]", inputs: ["fTooltip", "tooltipPosition", "positionStyle", "tooltipStyleClass", "disabled", "tooltipEvent", "showDelay", "hideDelay", "life", "autoHide", "positionTop", "positionLeft", "escape"] }, { kind: "component", type: UiIconComponent, selector: "ui-icon", inputs: ["name", "size", "spin", "fill", "severity"] }, { kind: "pipe", type: DatePipe, name: "date" }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
|
|
1727
1762
|
}
|
|
1728
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
1763
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: BoardListPageComponent, decorators: [{
|
|
1729
1764
|
type: Component,
|
|
1730
1765
|
args: [{
|
|
1731
1766
|
selector: 'tm-board-list-page',
|
|
1732
|
-
imports: [
|
|
1767
|
+
imports: [
|
|
1768
|
+
DatePipe,
|
|
1769
|
+
FormsModule,
|
|
1770
|
+
DialogComponent,
|
|
1771
|
+
FButtonDirective,
|
|
1772
|
+
InputTextDirective,
|
|
1773
|
+
SkeletonComponent,
|
|
1774
|
+
TextareaDirective,
|
|
1775
|
+
TooltipDirective,
|
|
1776
|
+
UiIconComponent,
|
|
1777
|
+
TranslatePipe,
|
|
1778
|
+
],
|
|
1733
1779
|
template: `
|
|
1734
1780
|
<div class="p-2 sm:p-4">
|
|
1735
1781
|
<div
|
|
@@ -2231,8 +2277,8 @@ class BoardViewPageComponent {
|
|
|
2231
2277
|
this.isAddingList.set(false);
|
|
2232
2278
|
}
|
|
2233
2279
|
}
|
|
2234
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.
|
|
2235
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.
|
|
2280
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: BoardViewPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2281
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.5", type: BoardViewPageComponent, isStandalone: true, selector: "tm-board-view-page", inputs: { boardId: { classPropertyName: "boardId", publicName: "boardId", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: `
|
|
2236
2282
|
<div class="flex flex-col h-full">
|
|
2237
2283
|
<div class="flex flex-col">
|
|
2238
2284
|
<div class="flex items-center justify-between px-5 py-2.5 gap-4">
|
|
@@ -3035,16 +3081,29 @@ class BoardViewPageComponent {
|
|
|
3035
3081
|
</div>
|
|
3036
3082
|
</ng-template>
|
|
3037
3083
|
</f-dialog>
|
|
3038
|
-
`, isInline: true, dependencies: [{ kind: "
|
|
3084
|
+
`, isInline: true, dependencies: [{ kind: "component", type: AvatarComponent, selector: "f-avatar", inputs: ["label", "icon", "image", "shape", "size", "color", "styleClass", "ariaLabel", "ariaLabelledBy"], outputs: ["onImageError"] }, { kind: "component", type: DialogComponent, selector: "f-dialog", inputs: ["header", "visible", "modal", "closable", "closeOnEscape", "dismissableMask", "resizable", "draggable", "maximizable", "blockScroll", "returnFocusOnClose", "position", "style", "styleClass", "breakpoints"], outputs: ["visibleChange", "onShow", "onHide", "onMaximize"] }, { kind: "directive", type: FButtonDirective, selector: "[fButton]", inputs: ["severity", "text", "outlined", "link", "variant", "rounded", "raised", "fluid", "disabled", "loading", "loadingIcon", "size", "label", "icon", "iconPos", "ariaLabel", "plain"] }, { kind: "directive", type: InputTextDirective, selector: "[fInputText]", inputs: ["invalid", "touched", "variant", "size", "fluid"] }, { kind: "component", type: SelectComponent, selector: "f-select", inputs: ["options", "optionLabel", "optionValue", "placeholder", "disabled", "filter", "filterBy", "filterMatchMode", "filterLocale", "filterPlaceholder", "resetFilterOnHide", "autofocusFilter", "emptyMessage", "emptyFilterMessage", "showClear", "loading", "loadingIcon", "dropdownIcon", "clearIcon", "inputId", "invalid", "touched", "styleClass", "style", "appendTo", "editable", "readonly", "autofocus", "checkmark", "group", "optionGroupLabel", "optionGroupChildren", "virtualScroll", "virtualScrollItemSize", "lazy"], outputs: ["onFilter", "onChange", "onShow", "onHide", "onBlur", "onFocus", "onClear", "onLazyLoad"] }, { kind: "component", type: SkeletonComponent, selector: "f-skeleton", inputs: ["width", "height", "size", "borderRadius", "shape", "animation", "styleClass"] }, { kind: "directive", type: SortableColumnDirective, selector: "[fSortableColumn]", inputs: ["fSortableColumn"] }, { kind: "component", type: SortIconComponent, selector: "f-sorticon", inputs: ["field"] }, { kind: "component", type: TableComponent, selector: "f-table", inputs: ["value", "lazy", "loading", "rows", "totalRecords", "rowHover", "dataKey", "scrollable", "scrollHeight", "paginator", "first", "rowsPerPageOptions", "showCurrentPageReport", "currentPageReportTemplate", "tableStyle", "styleClass", "globalFilterFields", "filterDelay", "responsiveLayout", "selectionMode", "sortMode", "rowExpandMode", "resizableColumns", "rowStyleClass", "virtualScroll", "virtualScrollItemSize", "sortField", "sortOrder", "multiSortMeta", "filters", "selection", "expandedRowKeys", "contextMenuSelection"], outputs: ["sortFieldChange", "sortOrderChange", "multiSortMetaChange", "filtersChange", "selectionChange", "expandedRowKeysChange", "contextMenuSelectionChange", "onLazyLoad", "onSort", "onFilter", "onRowSelect", "onRowUnselect", "onSelectAllChange", "onRowExpand", "onRowCollapse", "onColResize", "onRowContextMenu"] }, { kind: "component", type: TagComponent, selector: "f-tag", inputs: ["value", "severity", "icon", "rounded", "color", "styleClass", "style"] }, { kind: "directive", type: TextareaDirective, selector: "[fTextarea]", inputs: ["invalid", "touched", "variant", "fluid", "autoResize"], outputs: ["onResize"] }, { kind: "directive", type: TooltipDirective, selector: "[fTooltip]", inputs: ["fTooltip", "tooltipPosition", "positionStyle", "tooltipStyleClass", "disabled", "tooltipEvent", "showDelay", "hideDelay", "life", "autoHide", "positionTop", "positionLeft", "escape"] }, { kind: "component", type: UiIconComponent, selector: "ui-icon", inputs: ["name", "size", "spin", "fill", "severity"] }, { kind: "ngmodule", type: DragDropModule }, { kind: "directive", type: i1$1.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer", "cdkDropListHasAnchor"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i1$1.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i1$1.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: TaskCardComponent, selector: "tm-task-card", inputs: ["task"], outputs: ["cardClick", "editClick", "deleteClick"] }, { kind: "component", type: TaskFormDialogComponent, selector: "tm-task-form-dialog", inputs: ["visible", "task", "boardId", "listId", "members", "labels"], outputs: ["visibleChange", "saved"] }, { kind: "component", type: TaskDetailPanelComponent, selector: "tm-task-detail-panel", inputs: ["task"], outputs: ["closePanel", "editTask"] }, { kind: "component", type: UserSelectComponent, selector: "lib-user-select", inputs: ["showClear", "value"], outputs: ["valueChange", "userSelected"] }, { kind: "pipe", type: DatePipe, name: "date" }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
|
|
3039
3085
|
}
|
|
3040
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.
|
|
3086
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: BoardViewPageComponent, decorators: [{
|
|
3041
3087
|
type: Component,
|
|
3042
3088
|
args: [{
|
|
3043
3089
|
selector: 'tm-board-view-page',
|
|
3044
3090
|
imports: [
|
|
3045
|
-
|
|
3091
|
+
AvatarComponent,
|
|
3092
|
+
DialogComponent,
|
|
3093
|
+
FButtonDirective,
|
|
3094
|
+
InputTextDirective,
|
|
3095
|
+
SelectComponent,
|
|
3096
|
+
SkeletonComponent,
|
|
3097
|
+
SortableColumnDirective,
|
|
3098
|
+
SortIconComponent,
|
|
3099
|
+
TableComponent,
|
|
3100
|
+
TagComponent,
|
|
3101
|
+
TextareaDirective,
|
|
3102
|
+
TooltipDirective,
|
|
3103
|
+
UiIconComponent,
|
|
3046
3104
|
DragDropModule,
|
|
3047
|
-
|
|
3105
|
+
DatePipe,
|
|
3106
|
+
FormsModule,
|
|
3048
3107
|
TaskCardComponent,
|
|
3049
3108
|
TaskFormDialogComponent,
|
|
3050
3109
|
TaskDetailPanelComponent,
|