import {
Component,
Input,
forwardRef,
ChangeDetectionStrategy,
} from '@angular/core';
import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';
import { Topping } from '../../models/topping.model';
const PIZZA_TOPPINGS_ACCESSOR = {
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => PizzaToppingsComponent),
multi: true,
};
@Component({
selector: 'pizza-toppings',
providers: [PIZZA_TOPPINGS_ACCESSOR],
changeDetection: ChangeDetectionStrategy.OnPush,
styleUrls: ['pizza-toppings.component.scss'],
template: `

{{ topping.name }}
`,
})
export class PizzaToppingsComponent implements ControlValueAccessor {
@Input() toppings: Topping[] = [];
value: Topping[] = [];
private onTouch: Function;
private onModelChange: Function;
registerOnChange(fn: Function) {
this.onModelChange = fn;
}
registerOnTouched(fn: Function) {
this.onTouch = fn;
}
writeValue(value: Topping[]) {
this.value = value;
}
selectTopping(topping: Topping) {
if (this.existsInToppings(topping)) {
this.value = this.value.filter(item => item.id !== topping.id);
} else {
this.value = [...this.value, topping];
}
this.onTouch();
this.onModelChange(this.value);
}
existsInToppings(topping: Topping) {
return this.value.some(val => val.id === topping.id);
}
}