import { Component, ElementRef, viewChild, output, input } from "@angular/core"; import { Checkable } from "../interfaces"; import { FormsModule } from "@angular/forms"; @Component({ selector: 'app-master-checkbox', template: `
`, imports: [ FormsModule ] }) export class MasterCheckboxComponent { readonly id = input.required(); readonly list = input.required>(); readonly changed = output(); readonly masterCheckbox = viewChild.required('masterCheckbox'); selected!: boolean; clicked() { this.list().forEach(item => item.checked = this.selected); this.selectionChanged(); } selectionChanged() { const masterCheckbox = this.masterCheckbox(); if (!masterCheckbox) return; let checked = 0; this.list().forEach(item => { if(item.checked) checked++ }); this.selected = checked > 0 && checked == this.list().size; masterCheckbox.nativeElement.indeterminate = checked > 0 && checked < this.list().size; this.changed.emit(checked); } }