Florian Eisenmenger 1 год назад
Родитель
Сommit
79e2690e0e
6 измененных файлов: 115 добавлений и 105 удалений
  1. +1
    -1
      matsen-tool/src/app/_views/tasks/new-task-note/new-task-note.component.html
  2. +12
    -9
      matsen-tool/src/app/_views/tasks/new-task/new-task.component.html
  3. +5
    -0
      matsen-tool/src/app/_views/tasks/new-task/new-task.component.ts
  4. +89
    -87
      matsen-tool/src/app/_views/tasks/task-list/task-list.component.html
  5. +7
    -7
      matsen-tool/src/app/_views/tasks/task-list/task-list.component.ts
  6. +1
    -1
      matsen-tool/src/assets/scss/_tasks-posts.scss

+ 1
- 1
matsen-tool/src/app/_views/tasks/new-task-note/new-task-note.component.html Просмотреть файл

@@ -24,7 +24,7 @@
</div>

<p class="form-label">{{ 'form.contact-type' | translate }}:</p>
<div class="d-flex">
<div class="d-flex mb-3">
<div class="form-check me-3" *ngFor="let type of contactTypes; let i = index">
<input type="radio" class="form-check-input" id="radio-{{ type }}" formControlName="contactType" [value]="type" />
<label for="radio-{{ type }}" class="form-check-label">{{ getContactTypeTranslationKey(type) | translate }}</label>


+ 12
- 9
matsen-tool/src/app/_views/tasks/new-task/new-task.component.html Просмотреть файл

@@ -59,15 +59,18 @@
</div>
</div>

<div class="mb-3">
<label for="prio" class="form-label">{{ 'form.prio' | translate }}:</label>
<select class="form-control" id="prio" formControlName="prio">
<option value="low" selected>{{ 'form.prio-low' | translate }}</option>
<option value="medium">{{ 'form.prio-medium' | translate }}</option>
<option value="high">{{ 'form.prio-high' | translate }}</option>
</select>
<div class="form-text" *ngIf="taskForm.get('prio')?.invalid && taskForm.get('prio')?.touched">
{{ 'form.prio' | translate }} {{ 'form.mandatory' | translate }}.
<div class="d-flex mb-3">
<div class="form-check me-3">
<input type="radio" class="form-check-input" id="radio-prio-low" formControlName="prio" value="low" />
<label for="radio-prio-low" class="form-check-label">{{ 'form.prio-low' | translate }}</label>
</div>
<div class="form-check me-3">
<input type="radio" class="form-check-input" id="radio-prio-medium" formControlName="prio" value="medium" />
<label for="radio-prio-medium" class="form-check-label">{{ 'form.prio-medium' | translate }}</label>
</div>
<div class="form-check me-3">
<input type="radio" class="form-check-input" id="radio-prio-high" formControlName="prio" value="high" />
<label for="radio-prio-high" class="form-check-label">{{ 'form.prio-high' | translate }}</label>
</div>
</div>



+ 5
- 0
matsen-tool/src/app/_views/tasks/new-task/new-task.component.ts Просмотреть файл

@@ -74,6 +74,11 @@ export class NewTaskComponent implements OnInit, AfterViewInit {

ngOnInit(): void {
this.taskForm = FormGroupInitializer.initFormGroup(this.taskForm, this.task);
const prio = this.taskForm.get('prio');
// Set first radio checked
if (prio && !prio.value) {
prio.patchValue('low');
}
}

ngAfterViewInit(): void {


+ 89
- 87
matsen-tool/src/app/_views/tasks/task-list/task-list.component.html Просмотреть файл

@@ -13,110 +13,112 @@
<div class="taskCompactModeBox" (click)="switchTaskCompactMode()"
[class.taskCompactMode]="taskCompactMode">{{ 'overview.compact-view' | translate }}
</div>
<div class="taskCompactModeBox ms-3" (click)="switchTaskHideDone()"
[class.taskHideDone]="taskHideCompleted">{{ 'overview.show-done' | translate }}
<div class="taskCompactModeBox ms-3" (click)="switchTaskHideCompleted()"
[class.taskHideCompleted]="showCompletedTasks">{{ 'overview.show-done' | translate }}
</div>
</div>
<div class="tasks pb-1" *ngFor="let task of tasks">
<ng-container *ngIf="!taskHideCompleted || !task.completed">
<div class="card ps-3 pe-3 pt-3" [ngClass]="{'task-completed': task.completed}" *ngIf="taskCompactMode">
<div class="row pb-1">
<div class="col-12">
<div class="info-box">
<span class="importance" [attr.data-importance]="task.prio"></span>
<span class="due-date pe-3">{{ task.dueAt | date:'dd.MM.YYYY - HH:mm':'GMT+0000' }}
Uhr</span>
<h3 class="m-0 pe-3" *ngIf="task.partner">
<ng-container *ngFor="let task of tasks">
<ng-container *ngIf="!task.completed || showCompletedTasks">
<div class="tasks pb-1">
<div class="card ps-3 pe-3 pt-3" [ngClass]="{'task-completed': task.completed}" *ngIf="taskCompactMode">
<div class="row pb-1">
<div class="col-12">
<div class="info-box">
<span class="importance" [attr.data-importance]="task.prio"></span>
<span class="due-date pe-3">{{ task.dueAt | date:'dd.MM.YYYY - HH:mm':'GMT+0000' }}
Uhr</span>
<h3 class="m-0 pe-3" *ngIf="task.partner">
<app-linked-label [partner]="task.partner"></app-linked-label>
</h3>
<h3 class="m-0 pe-3" *ngIf="task.product">
<app-linked-label [product]="task.product"></app-linked-label>
</h3>
<p class="m-0" *ngIf="task.assignedTo">
<app-linked-label [user]="task.assignedTo"></app-linked-label>
</p>
</div>
</div>
</div>
<div class="row spt-compact">
<div class="col-12 col-md-4">
<h2 class="m-0">{{ task.headline }}</h2>
</div>
<div class="col-12 col-md-8">
<p class="m-0 mb-3 mt-2"
[innerHTML]="appHelperService.getSafeLongtext(task.description)"></p>
<span *ngIf="task.createdBy === currentUser?.id" class="position-absolute bi bi-pencil p-2"
data-type="user-tool" data-action="edit" (click)="openModalEditTask(task)"></span>
<div class="spt-comments-box d-flex justify-content-end mt-1 position-absolute">
<span *ngIf="task.numTaskNotes !== undefined && task.numTaskNotes !== null && task.numTaskNotes > 0"
role="button" class="spt-btn-low badge bg-secondary p-2 me-2"
(click)="showTaskNotes(task)">
<ng-container
*ngIf="task.id && taskNotesVisibility.get(task.id)">{{ 'basic.hide-comments' | translate }}</ng-container>
<ng-container
*ngIf="task.id && !taskNotesVisibility.get(task.id)">{{ 'basic.show-comments' | translate }}
({{ task.numTaskNotes }})</ng-container>
</span>
<span role="button" class="badge bg-secondary p-2"
(click)="openModalNewTaskNote(task)">{{ 'basic.comment-it' | translate }}</span>
</div>
</div>
</div>
</div>
<div class="card p-3" [ngClass]="{'task-completed': task.completed}" *ngIf="!taskCompactMode">
<div class="row">
<div class="col-12 col-sm-6 col-lg-4">
<span class="due-date">{{ task.dueAt | date:'dd.MM.YYYY - HH:mm':'GMT+0000' }} Uhr</span>
<h3 class="m-0" *ngIf="task.partner">
<app-linked-label [partner]="task.partner"></app-linked-label>
</h3>
<h3 class="m-0 pe-3" *ngIf="task.product">
<h3 class="m-0" *ngIf="task.product">
<app-linked-label [product]="task.product"></app-linked-label>
</h3>
<p class="m-0" *ngIf="task.assignedTo">
<p *ngIf="task.assignedTo">
<app-linked-label [user]="task.assignedTo"></app-linked-label>
</p>
</div>
</div>
</div>
<div class="row spt-compact">
<div class="col-12 col-md-4">
<h2 class="m-0">{{ task.headline }}</h2>
</div>
<div class="col-12 col-md-8">
<p class="m-0 mb-3 mt-2"
[innerHTML]="appHelperService.getSafeLongtext(task.description)"></p>
<span *ngIf="task.createdBy === currentUser?.id" class="position-absolute bi bi-pencil p-2"
data-type="user-tool" data-action="edit" (click)="openModalEditTask(task)"></span>
<div class="spt-comments-box d-flex justify-content-end mt-1 position-absolute">
<span *ngIf="task.numTaskNotes !== undefined && task.numTaskNotes !== null && task.numTaskNotes > 0"
role="button" class="spt-btn-low badge bg-secondary p-2 me-2"
(click)="showTaskNotes(task)">
<ng-container
*ngIf="task.id && taskNotesVisibility.get(task.id)">{{ 'basic.hide-comments' | translate }}</ng-container>
<ng-container
*ngIf="task.id && !taskNotesVisibility.get(task.id)">{{ 'basic.show-comments' | translate }}
({{ task.numTaskNotes }})</ng-container>
</span>
<span role="button" class="badge bg-secondary p-2"
(click)="openModalNewTaskNote(task)">{{ 'basic.comment-it' | translate }}</span>
</div>
</div>
</div>
</div>
<div class="card p-3" [ngClass]="{'task-completed': task.completed}" *ngIf="!taskCompactMode">
<div class="row">
<div class="col-12 col-sm-6 col-lg-4">
<span class="due-date">{{ task.dueAt | date:'dd.MM.YYYY - HH:mm':'GMT+0000' }} Uhr</span>
<h3 class="m-0" *ngIf="task.partner">
<app-linked-label [partner]="task.partner"></app-linked-label>
</h3>
<h3 class="m-0" *ngIf="task.product">
<app-linked-label [product]="task.product"></app-linked-label>
</h3>
<p *ngIf="task.assignedTo">
<app-linked-label [user]="task.assignedTo"></app-linked-label>
</p>
</div>
<div class="spt-border col-12 col-sm-6 col-lg-8">
<span class="importance" [attr.data-importance]="task.prio"></span>
<h2 class="m-0">{{ task.headline }}</h2>
<p class="m-0" [innerHTML]="appHelperService.getSafeLongtext(task.description)"></p>
<span *ngIf="task.createdBy === currentUser?.id" class="position-absolute bi bi-pencil p-2"
data-type="user-tool" data-action="edit" (click)="openModalEditTask(task)"></span>
<div class="spt-comments-box d-flex justify-content-end mt-1 position-absolute">
<span *ngIf="task.numTaskNotes !== undefined && task.numTaskNotes !== null && task.numTaskNotes > 0"
role="button" class="spt-btn-low badge bg-secondary p-2 me-2"
(click)="showTaskNotes(task)">
<ng-container
*ngIf="task.id && taskNotesVisibility.get(task.id)">{{ 'basic.hide-comments' | translate }}</ng-container>
<ng-container
*ngIf="task.id && !taskNotesVisibility.get(task.id)">{{ 'basic.show-comments' | translate }}
({{ task.numTaskNotes }})</ng-container>
</span>
<span role="button" class="badge bg-secondary p-2"
(click)="openModalNewTaskNote(task)">{{ 'basic.comment-it' | translate }}</span>
<div class="spt-border col-12 col-sm-6 col-lg-8">
<span class="importance" [attr.data-importance]="task.prio"></span>
<h2 class="m-0">{{ task.headline }}</h2>
<p class="m-0" [innerHTML]="appHelperService.getSafeLongtext(task.description)"></p>
<span *ngIf="task.createdBy === currentUser?.id" class="position-absolute bi bi-pencil p-2"
data-type="user-tool" data-action="edit" (click)="openModalEditTask(task)"></span>
<div class="spt-comments-box d-flex justify-content-end mt-1 position-absolute">
<span *ngIf="task.numTaskNotes !== undefined && task.numTaskNotes !== null && task.numTaskNotes > 0"
role="button" class="spt-btn-low badge bg-secondary p-2 me-2"
(click)="showTaskNotes(task)">
<ng-container
*ngIf="task.id && taskNotesVisibility.get(task.id)">{{ 'basic.hide-comments' | translate }}</ng-container>
<ng-container
*ngIf="task.id && !taskNotesVisibility.get(task.id)">{{ 'basic.show-comments' | translate }}
({{ task.numTaskNotes }})</ng-container>
</span>
<span role="button" class="badge bg-secondary p-2"
(click)="openModalNewTaskNote(task)">{{ 'basic.comment-it' | translate }}</span>
</div>
</div>
</div>
</div>
</div>
<div *ngIf="task.id && taskNotesVisibility.get(task.id)" class="pb-1">
<div class="card spt-comments" *ngFor="let taskNote of taskNotes.get(task.id)">
<div class="card-body">
<div class="d-flex justify-content-between align-items-center">
<p>{{ taskNote.owner?.firstName }} {{ taskNote.owner?.lastName }} - {{ getTranslationKey(taskNote.contactType) | translate }}</p>
<p>{{ taskNote.createdAt | date:'dd.MM.YYYY - HH:mm':'GMT+0000' }} Uhr</p>
<div *ngIf="task.id && taskNotesVisibility.get(task.id)" class="pb-1">
<div class="card spt-comments" *ngFor="let taskNote of taskNotes.get(task.id)">
<div class="card-body">
<div class="d-flex justify-content-between align-items-center">
<p>{{ taskNote.owner?.firstName }} {{ taskNote.owner?.lastName }} - {{ getTranslationKey(taskNote.contactType) | translate }}</p>
<p>{{ taskNote.createdAt | date:'dd.MM.YYYY - HH:mm':'GMT+0000' }} Uhr</p>
</div>
<div>
<p [innerHTML]="appHelperService.getSafeLongtext(taskNote.message)"></p>
</div>
<span *ngIf="taskNote.owner === currentUser?.id" class="position-absolute bi bi-pencil p-2"
data-type="user-tool" data-action="edit"
(click)="openModalEditTaskNote(taskNote, task)"></span>
</div>
<div>
<p [innerHTML]="appHelperService.getSafeLongtext(taskNote.message)"></p>
</div>
<span *ngIf="taskNote.owner === currentUser?.id" class="position-absolute bi bi-pencil p-2"
data-type="user-tool" data-action="edit"
(click)="openModalEditTaskNote(taskNote, task)"></span>
</div>
</div>
</div>
</ng-container>
</div>
</ng-container>
</div>
</app-paging>
</div>

+ 7
- 7
matsen-tool/src/app/_views/tasks/task-list/task-list.component.ts Просмотреть файл

@@ -34,7 +34,7 @@ export class TaskListComponent implements OnInit, AfterViewInit {
protected tasks: Array<TaskJsonld>;
protected dataSource;
protected taskCompactMode: boolean;
protected taskHideCompleted: boolean;
protected showCompletedTasks: boolean;
protected taskNotes: Map<string, TaskNoteJsonld[]>;
protected taskSub: Subscription;

@@ -59,10 +59,10 @@ export class TaskListComponent implements OnInit, AfterViewInit {
} else {
this.taskCompactMode = false;
}
if (localStorage.getItem('taskHideDone') !== null) {
this.taskHideCompleted = localStorage.getItem('taskHideDone') === 'true';
if (localStorage.getItem('showCompletedTasks') !== null) {
this.showCompletedTasks = localStorage.getItem('showCompletedTasks') === 'true';
} else {
this.taskHideCompleted = false;
this.showCompletedTasks = false;
}
}

@@ -169,8 +169,8 @@ export class TaskListComponent implements OnInit, AfterViewInit {
this.taskCompactMode = !this.taskCompactMode;
}

switchTaskHideDone() {
localStorage.setItem('taskHideCompleted', this.taskHideCompleted ? 'false' : 'true');
this.taskHideCompleted = !this.taskHideCompleted;
switchTaskHideCompleted() {
localStorage.setItem('showCompletedTasks', this.showCompletedTasks ? 'false' : 'true');
this.showCompletedTasks = !this.showCompletedTasks;
}
}

+ 1
- 1
matsen-tool/src/assets/scss/_tasks-posts.scss Просмотреть файл

@@ -66,7 +66,7 @@
border: 1px solid rgb(33, 37, 41);
}
&.taskCompactMode,
&.taskHideDone {
&.taskHideCompleted {
&:after {
content: "";
position: absolute;


Загрузка…
Отмена
Сохранить