From e4c8fcb7f01c194ed5d63a48977089c6111a474c Mon Sep 17 00:00:00 2001 From: Chneemann Date: Thu, 17 Apr 2025 04:12:56 +0200 Subject: [PATCH] feat: add task category constants, labels and colors for task management --- .../add-task/add-task.component.html | 7 +++-- .../components/add-task/add-task.component.ts | 8 ++++-- src/app/components/board/board.component.html | 1 + src/app/components/board/board.component.ts | 4 +++ .../components/board/task/task.component.html | 4 +-- .../components/board/task/task.component.ts | 13 +++++---- src/app/constants/task-category.constants.ts | 16 +++++++++++ .../task-overlay/task-overlay.component.html | 6 ++--- .../task-overlay/task-overlay.component.ts | 27 +++++++++---------- src/assets/i18n/de.json | 4 +++ src/assets/i18n/en.json | 4 +++ 11 files changed, 65 insertions(+), 29 deletions(-) create mode 100644 src/app/constants/task-category.constants.ts diff --git a/src/app/components/add-task/add-task.component.html b/src/app/components/add-task/add-task.component.html index fb36e56..6d76f92 100644 --- a/src/app/components/add-task/add-task.component.html +++ b/src/app/components/add-task/add-task.component.html @@ -166,8 +166,11 @@ - - + @for (category of CATEGORIES; track category) { + + }
+ @for (status of STATUSES; track status) {
-

{{ task.category }}

+

{{ CATEGORY_LABELS[task.category] | translate }}

diff --git a/src/app/components/board/task/task.component.ts b/src/app/components/board/task/task.component.ts index e904c14..26275a2 100644 --- a/src/app/components/board/task/task.component.ts +++ b/src/app/components/board/task/task.component.ts @@ -17,11 +17,16 @@ import { Router } from '@angular/router'; import { TaskMenuComponent } from './task-menu/task-menu.component'; import { ResizeService } from '../../../services/resize.service'; import { take } from 'rxjs'; +import { + CATEGORY_COLORS, + CATEGORY_LABELS, +} from '../../../constants/task-category.constants'; +import { TranslateModule } from '@ngx-translate/core'; @Component({ selector: 'app-task', standalone: true, - imports: [CommonModule, TaskMenuComponent], + imports: [CommonModule, TranslateModule, TaskMenuComponent], templateUrl: './task.component.html', styleUrl: './task.component.scss', }) @@ -29,6 +34,8 @@ export class TaskComponent { @Input() task!: Task; @Output() updateStatusEmitter = new EventEmitter(); + readonly CATEGORY_LABELS = CATEGORY_LABELS; + readonly categoryColors = CATEGORY_COLORS; readonly DISABLE_DRAG_BREAKPOINT = 667; readonly DIALOG_OFFSET_X = 25; readonly DIALOG_OFFSET_Y = 10; @@ -36,10 +43,6 @@ export class TaskComponent { pageViewMedia$ = this.resizeService.pageViewMedia$; assignees: Assignee[] = []; - categoryColors = new Map([ - ['User Story', '#0038ff'], - ['Technical Task', '#20d7c2'], - ]); mobileMenuOpen = false; disableDrag = false; diff --git a/src/app/constants/task-category.constants.ts b/src/app/constants/task-category.constants.ts new file mode 100644 index 0000000..99a1b48 --- /dev/null +++ b/src/app/constants/task-category.constants.ts @@ -0,0 +1,16 @@ +import { TaskCategory } from '../interfaces/task.interface'; + +export const CATEGORIES: TaskCategory[] = [ + TaskCategory.USER_STORY, + TaskCategory.TECHNICAL_TASK, +]; + +export const CATEGORY_LABELS: Record = { + [TaskCategory.USER_STORY]: 'taskCategory.userStory', + [TaskCategory.TECHNICAL_TASK]: 'taskCategory.technicalTask', +}; + +export const CATEGORY_COLORS: Record = { + [TaskCategory.USER_STORY]: '#0038ff', + [TaskCategory.TECHNICAL_TASK]: '#20d7c2', +}; diff --git a/src/app/shared/components/overlay/task-overlay/task-overlay.component.html b/src/app/shared/components/overlay/task-overlay/task-overlay.component.html index 8bb8f36..b9e049d 100644 --- a/src/app/shared/components/overlay/task-overlay/task-overlay.component.html +++ b/src/app/shared/components/overlay/task-overlay/task-overlay.component.html @@ -8,9 +8,9 @@
- {{ task.category }} +

{{ CATEGORY_LABELS[task.category] | translate }}

@if (overlayMobile) { @@ -34,7 +34,7 @@

{{ "addTask.priority" | translate }}:

- {{ capitalizeFirstLetter(task.priority) }} + {{ PRIORITY_LABELS[task.priority] | translate }}
diff --git a/src/app/shared/components/overlay/task-overlay/task-overlay.component.ts b/src/app/shared/components/overlay/task-overlay/task-overlay.component.ts index b406d88..1a52be8 100644 --- a/src/app/shared/components/overlay/task-overlay/task-overlay.component.ts +++ b/src/app/shared/components/overlay/task-overlay/task-overlay.component.ts @@ -19,6 +19,11 @@ import { map, Subject, takeUntil } from 'rxjs'; import { ApiService } from '../../../../services/api.service'; import { UpdateNotifierService } from '../../../../services/update-notifier.service'; import { ToastNotificationService } from '../../../../services/toast-notification.service'; +import { + CATEGORY_COLORS, + CATEGORY_LABELS, +} from '../../../../constants/task-category.constants'; +import { PRIORITY_LABELS } from '../../../../constants/task-priority.constants'; @Component({ selector: 'app-task-overlay', @@ -31,6 +36,10 @@ export class TaskOverlayComponent implements OnInit, OnDestroy { @Input() overlayData: string = ''; @Output() closeDialogEmitter = new EventEmitter(); + readonly CATEGORY_LABELS = CATEGORY_LABELS; + readonly PRIORITY_LABELS = PRIORITY_LABELS; + readonly categoryColors = CATEGORY_COLORS; + task: Task | null = null; overlayMobile: boolean = false; currentUserId: string = ''; @@ -49,11 +58,6 @@ export class TaskOverlayComponent implements OnInit, OnDestroy { private route: ActivatedRoute ) {} - categoryColors = new Map([ - ['User Story', '#0038ff'], - ['Technical Task', '#20d7c2'], - ]); - ngOnInit(): void { this.setCurrentUserId(); this.setOverlayDataFromRoute(); @@ -175,16 +179,9 @@ export class TaskOverlayComponent implements OnInit, OnDestroy { ); } - /** - * Capitalizes the first letter of a given string. - * - * This function takes a string as an argument and returns a new string - * with the first letter capitalized. - * @param data The string to capitalize. - * @returns {string} A new string with the first letter capitalized. - */ - capitalizeFirstLetter(data: string) { - return data.charAt(0).toUpperCase() + data.slice(1); + capitalizeFirstLetter(value: string): string { + if (!value) return ''; + return value.charAt(0).toUpperCase() + value.slice(1); } toggleConfirmDialog() { diff --git a/src/assets/i18n/de.json b/src/assets/i18n/de.json index 2eb48d4..8f95678 100644 --- a/src/assets/i18n/de.json +++ b/src/assets/i18n/de.json @@ -134,6 +134,10 @@ "medium": "Mittel", "urgent": "Dringend" }, + "taskCategory": { + "userStory": "Benutzergeschichte", + "technicalTask": "Technischer Auftrag" + }, "addTask": { "headline": "Aufgabe", "title": "Titel", diff --git a/src/assets/i18n/en.json b/src/assets/i18n/en.json index 704f3b6..7dc89da 100644 --- a/src/assets/i18n/en.json +++ b/src/assets/i18n/en.json @@ -134,6 +134,10 @@ "medium": "Medium", "low": "Low" }, + "taskCategory": { + "userStory": "User Story", + "technicalTask": "Technical Task" + }, "addTask": { "headline": "Add Task", "title": "Title",