import { CommonModule } from '@angular/common';
import { Component, HostListener, computed, inject, input, output, signal } from '@angular/core';
import { UiService } from '../../core/services/ui.service';
import type { Category } from '../models';
@Component({
selector: 'app-category-picker',
standalone: true,
imports: [CommonModule],
template: `
@if (open()) {
@for (item of items(); track item.id) {
} @empty {
{{ ui.t('common.noCategories') }}
}
}
`
})
export class CategoryPickerComponent {
readonly ui = inject(UiService);
readonly items = input([]);
readonly selectedIds = input([]);
readonly placeholder = input('');
readonly changed = output();
readonly open = signal(false);
readonly selectedItems = computed(() => this.items().filter((item) => this.selectedIds().includes(item.id)));
toggle(event?: Event) {
event?.stopPropagation();
this.open.update((value) => !value);
}
isSelected(id: string) {
return this.selectedIds().includes(id);
}
toggleItem(id: string) {
const next = this.isSelected(id)
? this.selectedIds().filter((item) => item !== id)
: [...this.selectedIds(), id];
this.changed.emit(next);
}
@HostListener('document:click')
closeOnOutsideClick() {
this.open.set(false);
}
}