diff --git a/src/app/components/board/board.component.html b/src/app/components/board/board.component.html index d6ad9f7..7f53a47 100644 --- a/src/app/components/board/board.component.html +++ b/src/app/components/board/board.component.html @@ -33,8 +33,8 @@
To do
-
+
+ + + empthy + +
-
In progress
-
+
+ + + empthy + +
Await feedback
-
+
+ + + empthy + +
Done
-
+
+ + + empthy + +
diff --git a/src/app/components/board/board.component.ts b/src/app/components/board/board.component.ts index 11a1852..f08d472 100644 --- a/src/app/components/board/board.component.ts +++ b/src/app/components/board/board.component.ts @@ -1,11 +1,34 @@ import { Component } from '@angular/core'; import { TaskComponent } from './task/task.component'; +import { DragDropService } from '../../services/drag-drop.service'; +import { CommonModule } from '@angular/common'; @Component({ selector: 'app-board', standalone: true, - imports: [TaskComponent], + imports: [TaskComponent, CommonModule], templateUrl: './board.component.html', styleUrl: './board.component.scss', }) -export class BoardComponent {} +export class BoardComponent { + tasks = [ + { + id: '1', + category: 'HTML', + status: 'todo', + }, + { + id: '2', + category: 'CSS', + status: 'done', + }, + ]; + + constructor(public dragDropService: DragDropService) { + this.dragDropService.itemDropped.subscribe(({ index, status }) => { + if (index >= 0 && index < this.tasks.length) { + this.tasks[index].status = status; + } + }); + } +} diff --git a/src/app/components/board/task/task.component.html b/src/app/components/board/task/task.component.html index 40a6399..833addd 100644 --- a/src/app/components/board/task/task.component.html +++ b/src/app/components/board/task/task.component.html @@ -2,9 +2,8 @@
description
checkSubtasks(tasks[id].id)
diff --git a/src/app/components/board/task/task.component.scss b/src/app/components/board/task/task.component.scss index b0e40a9..bdbd8f6 100644 --- a/src/app/components/board/task/task.component.scss +++ b/src/app/components/board/task/task.component.scss @@ -30,8 +30,8 @@ section { border-radius: 24px; background-color: var(--white); box-shadow: 0px 0px 10px 3px rgba(0, 0, 0, 0.08); - cursor: pointer; margin-bottom: 16px; + cursor: pointer; &:hover { box-shadow: 0px 0px 10px 3px rgba(0, 0, 0, 0.3); } diff --git a/src/app/components/board/task/task.component.ts b/src/app/components/board/task/task.component.ts index e3d816f..7cc5ad3 100644 --- a/src/app/components/board/task/task.component.ts +++ b/src/app/components/board/task/task.component.ts @@ -1,10 +1,16 @@ -import { Component } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { Component, Input } from '@angular/core'; +import { DragDropService } from '../../../services/drag-drop.service'; @Component({ selector: 'app-task', standalone: true, - imports: [], + imports: [CommonModule], templateUrl: './task.component.html', styleUrl: './task.component.scss', }) -export class TaskComponent {} +export class TaskComponent { + @Input() index: number | undefined; + + constructor(public dragDropService: DragDropService) {} +} diff --git a/src/app/services/drag-drop.service.ts b/src/app/services/drag-drop.service.ts new file mode 100644 index 0000000..f76bc26 --- /dev/null +++ b/src/app/services/drag-drop.service.ts @@ -0,0 +1,29 @@ +import { Injectable, EventEmitter } from '@angular/core'; + +@Injectable({ + providedIn: 'root', +}) +export class DragDropService { + itemDropped = new EventEmitter<{ index: number; status: string }>(); + + constructor() {} + + startDragging(event: DragEvent, index: number) { + event.dataTransfer?.setData('text/plain', index.toString()); + } + + allowDrop(event: DragEvent) { + event.preventDefault(); + } + + drop(event: DragEvent, status: string) { + event.preventDefault(); + const dataTransfer = event.dataTransfer; + if (dataTransfer) { + const index = +dataTransfer.getData('text/plain'); + if (!isNaN(index)) { + this.itemDropped.emit({ index, status }); + } + } + } +}