design subtask field & save new subtask
This commit is contained in:
parent
01740eb730
commit
436da4f6be
7 changed files with 76 additions and 8 deletions
|
|
@ -201,6 +201,35 @@
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="subtask">
|
||||||
|
<p>Subtasks</p>
|
||||||
|
<input
|
||||||
|
type="text"
|
||||||
|
id="subtask"
|
||||||
|
name="subtask"
|
||||||
|
#subtask="ngModel"
|
||||||
|
placeholder="Add new subtask"
|
||||||
|
[(ngModel)]="subtaskValue"
|
||||||
|
autocomplete="off"
|
||||||
|
/>
|
||||||
|
@if (subtaskValue) {
|
||||||
|
<div class="subtask-btns">
|
||||||
|
<img
|
||||||
|
src="./../../../assets/img/close.svg"
|
||||||
|
alt=""
|
||||||
|
(click)="subtask.reset()"
|
||||||
|
/>
|
||||||
|
<span class="line"></span>
|
||||||
|
<img
|
||||||
|
src="./../../../assets/img/add-task/check.svg"
|
||||||
|
alt=""
|
||||||
|
(click)="addSubtask(subtask.value); subtask.reset()"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
} @else {
|
||||||
|
<img class="add" src="./../../../assets/img/add.svg" alt="" />
|
||||||
|
}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-buttons">
|
<div class="form-buttons">
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,6 @@
|
||||||
section {
|
section {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
background-color: var(--very-light-gray);
|
background-color: var(--very-light-gray);
|
||||||
padding-bottom: 32px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.content {
|
.content {
|
||||||
|
|
@ -87,6 +86,39 @@ p {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.subtask {
|
||||||
|
position: relative;
|
||||||
|
.add {
|
||||||
|
position: absolute;
|
||||||
|
top: 45px;
|
||||||
|
right: 15px;
|
||||||
|
width: 25px;
|
||||||
|
height: 25px;
|
||||||
|
}
|
||||||
|
.subtask-btns {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
position: absolute;
|
||||||
|
top: 45px;
|
||||||
|
right: 15px;
|
||||||
|
img {
|
||||||
|
width: 25px;
|
||||||
|
height: 25px;
|
||||||
|
cursor: pointer;
|
||||||
|
&:hover {
|
||||||
|
filter: invert(60%) sepia(58%) saturate(1629%) hue-rotate(165deg)
|
||||||
|
brightness(92%) contrast(92%);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.line {
|
||||||
|
height: 18px;
|
||||||
|
padding: 1px;
|
||||||
|
margin: 0 6px;
|
||||||
|
background-color: var(--light-gray);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.assigned-badget {
|
.assigned-badget {
|
||||||
display: flex;
|
display: flex;
|
||||||
margin-top: 6px;
|
margin-top: 6px;
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import { CommonModule } from '@angular/common';
|
import { CommonModule } from '@angular/common';
|
||||||
import { Component, HostListener, ViewChild } from '@angular/core';
|
import { Component, ElementRef, HostListener, ViewChild } from '@angular/core';
|
||||||
import { FormsModule, NgForm, NgModel } from '@angular/forms';
|
import { FormsModule, NgForm, NgModel } from '@angular/forms';
|
||||||
import { AssignedComponent } from './assigned/assigned.component';
|
import { AssignedComponent } from './assigned/assigned.component';
|
||||||
import { User } from '../../interfaces/user.interface';
|
import { User } from '../../interfaces/user.interface';
|
||||||
|
|
@ -21,10 +21,10 @@ export class AddTaskComponent {
|
||||||
currentDate: string = new Date().toISOString().split('T')[0];
|
currentDate: string = new Date().toISOString().split('T')[0];
|
||||||
dateInPast: boolean = false;
|
dateInPast: boolean = false;
|
||||||
isAssignedOpen: boolean = false;
|
isAssignedOpen: boolean = false;
|
||||||
|
subtaskValue: string = '';
|
||||||
searchValue: string = '';
|
searchValue: string = '';
|
||||||
searchInput: boolean = false;
|
searchInput: boolean = false;
|
||||||
filteredUsers: User[] = [];
|
filteredUsers: User[] = [];
|
||||||
parentAssigned: string[] = [];
|
|
||||||
|
|
||||||
constructor(public firebaseService: FirebaseService) {}
|
constructor(public firebaseService: FirebaseService) {}
|
||||||
|
|
||||||
|
|
@ -35,12 +35,18 @@ export class AddTaskComponent {
|
||||||
priority: 'medium',
|
priority: 'medium',
|
||||||
category: '',
|
category: '',
|
||||||
assigned: [],
|
assigned: [],
|
||||||
|
subtasks: [],
|
||||||
};
|
};
|
||||||
|
|
||||||
receiveAssigned(assigned: string[]) {
|
receiveAssigned(assigned: string[]) {
|
||||||
this.taskData.assigned = assigned;
|
this.taskData.assigned = assigned;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
addSubtask(subtaskName: string) {
|
||||||
|
this.taskData.subtasks.push(subtaskName);
|
||||||
|
this.saveTaskData();
|
||||||
|
}
|
||||||
|
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
const storedTaskData = localStorage.getItem('taskData');
|
const storedTaskData = localStorage.getItem('taskData');
|
||||||
if (storedTaskData) {
|
if (storedTaskData) {
|
||||||
|
|
|
||||||
|
|
@ -45,7 +45,7 @@
|
||||||
>
|
>
|
||||||
<div class="headline">
|
<div class="headline">
|
||||||
<span>To do</span
|
<span>To do</span
|
||||||
><img src="./../../../assets/img/board/add.svg" alt="add" />
|
><img src="./../../../assets/img/add.svg" alt="add" />
|
||||||
</div>
|
</div>
|
||||||
<div id="todo" class="details">
|
<div id="todo" class="details">
|
||||||
@for(task of getTaskStatus("todo"); track task) {
|
@for(task of getTaskStatus("todo"); track task) {
|
||||||
|
|
@ -62,7 +62,7 @@
|
||||||
>
|
>
|
||||||
<div class="headline">
|
<div class="headline">
|
||||||
<span>In progress</span
|
<span>In progress</span
|
||||||
><img src="./../../../assets/img/board/add.svg" alt="add" />
|
><img src="./../../../assets/img/add.svg" alt="add" />
|
||||||
</div>
|
</div>
|
||||||
<div id="inprogress" class="details">
|
<div id="inprogress" class="details">
|
||||||
@for(task of getTaskStatus("inprogress"); track task) {
|
@for(task of getTaskStatus("inprogress"); track task) {
|
||||||
|
|
@ -79,7 +79,7 @@
|
||||||
>
|
>
|
||||||
<div class="headline">
|
<div class="headline">
|
||||||
<span>Await feedback</span
|
<span>Await feedback</span
|
||||||
><img src="./../../../assets/img/board/add.svg" alt="add" />
|
><img src="./../../../assets/img/add.svg" alt="add" />
|
||||||
</div>
|
</div>
|
||||||
<div id="awaitfeedback" class="details">
|
<div id="awaitfeedback" class="details">
|
||||||
@for(task of getTaskStatus("awaitfeedback"); track task) {
|
@for(task of getTaskStatus("awaitfeedback"); track task) {
|
||||||
|
|
@ -95,8 +95,7 @@
|
||||||
(drop)="dragDropService.drop($event, 'done')"
|
(drop)="dragDropService.drop($event, 'done')"
|
||||||
>
|
>
|
||||||
<div class="headline">
|
<div class="headline">
|
||||||
<span>Done</span
|
<span>Done</span><img src="./../../../assets/img/add.svg" alt="add" />
|
||||||
><img src="./../../../assets/img/board/add.svg" alt="add" />
|
|
||||||
</div>
|
</div>
|
||||||
<div id="done" class="details">
|
<div id="done" class="details">
|
||||||
@for(task of getTaskStatus("done"); track task) {
|
@for(task of getTaskStatus("done"); track task) {
|
||||||
|
|
|
||||||
|
|
@ -5,4 +5,5 @@ export interface TaskData {
|
||||||
priority: string;
|
priority: string;
|
||||||
category: string;
|
category: string;
|
||||||
assigned: string[];
|
assigned: string[];
|
||||||
|
subtasks: string[];
|
||||||
}
|
}
|
||||||
|
|
|
||||||
1
src/assets/img/add-task/check.svg
Normal file
1
src/assets/img/add-task/check.svg
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24"><path d="M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z"/></svg>
|
||||||
|
After Width: | Height: | Size: 159 B |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
Loading…
Reference in a new issue