moved task is highlighted (drag and drop)
This commit is contained in:
parent
3c146d7fa0
commit
a2bc51ff48
7 changed files with 59 additions and 6 deletions
|
|
@ -40,7 +40,7 @@
|
||||||
<div class="status">
|
<div class="status">
|
||||||
<div
|
<div
|
||||||
class="column"
|
class="column"
|
||||||
(dragover)="dragDropService.allowDrop($event)"
|
(dragover)="dragDropService.allowDrop($event, 'todo')"
|
||||||
(drop)="dragDropService.drop($event, 'todo')"
|
(drop)="dragDropService.drop($event, 'todo')"
|
||||||
>
|
>
|
||||||
<div class="headline">
|
<div class="headline">
|
||||||
|
|
@ -54,14 +54,16 @@
|
||||||
<div id="todo" class="details">
|
<div id="todo" class="details">
|
||||||
@for(task of getTaskStatus("todo"); track task) {
|
@for(task of getTaskStatus("todo"); track task) {
|
||||||
<app-task [task]="task"></app-task>
|
<app-task [task]="task"></app-task>
|
||||||
} @empty {
|
@if(taskMovedTo === "todo") {
|
||||||
|
<app-task-highlighted></app-task-highlighted>
|
||||||
|
} } @empty {
|
||||||
<app-task-empty>{{ "board.noTasks" | translate }}</app-task-empty>
|
<app-task-empty>{{ "board.noTasks" | translate }}</app-task-empty>
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
class="column"
|
class="column"
|
||||||
(dragover)="dragDropService.allowDrop($event)"
|
(dragover)="dragDropService.allowDrop($event, 'inprogress')"
|
||||||
(drop)="dragDropService.drop($event, 'inprogress')"
|
(drop)="dragDropService.drop($event, 'inprogress')"
|
||||||
>
|
>
|
||||||
<div class="headline">
|
<div class="headline">
|
||||||
|
|
@ -82,7 +84,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
class="column"
|
class="column"
|
||||||
(dragover)="dragDropService.allowDrop($event)"
|
(dragover)="dragDropService.allowDrop($event, 'awaitfeedback')"
|
||||||
(drop)="dragDropService.drop($event, 'awaitfeedback')"
|
(drop)="dragDropService.drop($event, 'awaitfeedback')"
|
||||||
>
|
>
|
||||||
<div class="headline">
|
<div class="headline">
|
||||||
|
|
@ -103,7 +105,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
class="column"
|
class="column"
|
||||||
(dragover)="dragDropService.allowDrop($event)"
|
(dragover)="dragDropService.allowDrop($event, 'done')"
|
||||||
(drop)="dragDropService.drop($event, 'done')"
|
(drop)="dragDropService.drop($event, 'done')"
|
||||||
>
|
>
|
||||||
<div class="headline">
|
<div class="headline">
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,7 @@ import { OverlayService } from '../../services/overlay.service';
|
||||||
import { Router } from '@angular/router';
|
import { Router } from '@angular/router';
|
||||||
import { SharedService } from '../../services/shared.service';
|
import { SharedService } from '../../services/shared.service';
|
||||||
import { TranslateModule } from '@ngx-translate/core';
|
import { TranslateModule } from '@ngx-translate/core';
|
||||||
|
import { TaskHighlightedComponent } from './task/task-highlighted/task-highlighted.component';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-board',
|
selector: 'app-board',
|
||||||
|
|
@ -19,6 +20,7 @@ import { TranslateModule } from '@ngx-translate/core';
|
||||||
TaskEmptyComponent,
|
TaskEmptyComponent,
|
||||||
FormsModule,
|
FormsModule,
|
||||||
TranslateModule,
|
TranslateModule,
|
||||||
|
TaskHighlightedComponent,
|
||||||
],
|
],
|
||||||
templateUrl: './board.component.html',
|
templateUrl: './board.component.html',
|
||||||
styleUrl: './board.component.scss',
|
styleUrl: './board.component.scss',
|
||||||
|
|
@ -33,11 +35,15 @@ export class BoardComponent {
|
||||||
) {}
|
) {}
|
||||||
searchValue: string = '';
|
searchValue: string = '';
|
||||||
searchInput: boolean = false;
|
searchInput: boolean = false;
|
||||||
|
taskMovedTo: string = '';
|
||||||
|
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
this.dragDropService.itemDropped.subscribe(({ id, status }) => {
|
this.dragDropService.itemDropped.subscribe(({ id, status }) => {
|
||||||
this.handleItemDropped(id, status);
|
this.handleItemDropped(id, status);
|
||||||
});
|
});
|
||||||
|
this.dragDropService.itemMoved.subscribe(({ status }) => {
|
||||||
|
this.handleItemMoved(status);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
addNewTaskOverlay(status: string) {
|
addNewTaskOverlay(status: string) {
|
||||||
|
|
@ -58,6 +64,10 @@ export class BoardComponent {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
handleItemMoved(status: string) {
|
||||||
|
this.taskMovedTo = status;
|
||||||
|
}
|
||||||
|
|
||||||
handleItemDropped(id: string, status: string): void {
|
handleItemDropped(id: string, status: string): void {
|
||||||
const index = this.firebaseService.allTasks.findIndex(
|
const index = this.firebaseService.allTasks.findIndex(
|
||||||
(task) => task.id === id
|
(task) => task.id === id
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
<p>task-highlighted works!</p>
|
||||||
|
|
@ -0,0 +1,23 @@
|
||||||
|
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
|
|
||||||
|
import { TaskHighlightedComponent } from './task-highlighted.component';
|
||||||
|
|
||||||
|
describe('TaskHighlightedComponent', () => {
|
||||||
|
let component: TaskHighlightedComponent;
|
||||||
|
let fixture: ComponentFixture<TaskHighlightedComponent>;
|
||||||
|
|
||||||
|
beforeEach(async () => {
|
||||||
|
await TestBed.configureTestingModule({
|
||||||
|
imports: [TaskHighlightedComponent]
|
||||||
|
})
|
||||||
|
.compileComponents();
|
||||||
|
|
||||||
|
fixture = TestBed.createComponent(TaskHighlightedComponent);
|
||||||
|
component = fixture.componentInstance;
|
||||||
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should create', () => {
|
||||||
|
expect(component).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
import { Component } from '@angular/core';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-task-highlighted',
|
||||||
|
standalone: true,
|
||||||
|
imports: [],
|
||||||
|
templateUrl: './task-highlighted.component.html',
|
||||||
|
styleUrl: './task-highlighted.component.scss'
|
||||||
|
})
|
||||||
|
export class TaskHighlightedComponent {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -5,6 +5,7 @@ import { Injectable, EventEmitter } from '@angular/core';
|
||||||
})
|
})
|
||||||
export class DragDropService {
|
export class DragDropService {
|
||||||
itemDropped = new EventEmitter<{ id: string; status: string }>();
|
itemDropped = new EventEmitter<{ id: string; status: string }>();
|
||||||
|
itemMoved = new EventEmitter<{ status: string }>();
|
||||||
|
|
||||||
constructor() {}
|
constructor() {}
|
||||||
|
|
||||||
|
|
@ -14,8 +15,12 @@ export class DragDropService {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
allowDrop(event: DragEvent) {
|
allowDrop(event: DragEvent, status: string) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
|
const dataTransfer = event.dataTransfer;
|
||||||
|
if (dataTransfer) {
|
||||||
|
this.itemMoved.emit({ status });
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
drop(event: DragEvent, status: string) {
|
drop(event: DragEvent, status: string) {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue