import { Component, computed, inject, resource, signal } from '@angular/core';
import { TaskItem } from './task-item';
import { Task } from './task';
import { TaskService } from './task-service';
import { RouterLink } from '@angular/router';
import { FormsModule } from '@angular/forms';
import { NgIcon, provideIcons } from '@ng-icons/core';
import { lucideCircleX, lucideSquarePlus } from '@ng-icons/lucide';
@Component({
selector: 'ksk-crm-home-page',
imports: [TaskItem, RouterLink, FormsModule, NgIcon],
providers: [provideIcons({ lucideSquarePlus, lucideCircleX })],
template: `
@for (task of filteredTasks(); track task.id) {
@if (!$last) {
}
} @empty {
Список пуст
}
`,
styles: `
.topBar {
display: flex;
.input-wrapper {
display: inline-flex;
flex-grow: 1;
position: relative;
input {
width: 100%;
margin: auto 0;
}
button {
border: none;
background: none;
position: absolute;
top: 55%;
right: 1em;
transform: translateY(-50%);
cursor: pointer;
color: var(--color-primary);
}
input:placeholder-shown + button {
display: none;
}
}
a {
display: inline-flex;
align-items: center;
justify-content: center;
margin-left: 0.5em;
}
}
.result {
margin-top: 20px;
display: flex;
flex-direction: column;
> p {
text-align: center;
}
}
hr {
border: 1px solid var(--color-primary);
opacity: 0.3;
}
`,
})
export class TaskList {
taskService: TaskService = inject(TaskService);
tasks = resource({
loader: () => this.taskService.getAllTasks(),
});
filterInput = signal('');
filteredTasks = computed(() => {
const s = this.filterInput();
const tasks = this.tasks.value();
if (!tasks) return [];
if (s === '') return tasks;
return tasks.filter(
(task) =>
task.name.includes(s) ||
task.city.includes(s) ||
task.streetAddress.includes(s) ||
task.numberPhone.includes(s),
);
});
}