/** * Da usare come annotazione sugli @Input () booleani. * Esempio: * @Input () @BooleanInput () readOnly: boolean; * * Nei template, permette di poter utilizzare l'input nei seguenti modi: * - per true: readOnly | readOnly=true | [readOnly]="true" * - per false: readOnly=false | [readOnly]="false" */ export function BooleanInput () { return (componentProt: Record, inputKey: K) => { const rawBooleanKey = rawBooleanSymbol (inputKey); Object.defineProperty (componentProt, inputKey, { get: function () { return this[rawBooleanKey]; }, set: function (value: any) { this[rawBooleanKey] = (value != null && `${ value }` !== "false"); } }); }; } // BooleanInput /** * Da usare come annotazione sugli @Input () numerici. * * ```@Input () @NumberInput () decimals: numeric;``` * * Nei template, permette di poter utilizzare l'input nei seguenti modi: * - ```decimals=2 | [decimals]="2"``` */ export function NumberInput (fallbackValue?: number) { if (fallbackValue === undefined) { fallbackValue = 0; } return (componentProt: Record, inputKey: K) => { const rawNumberKey = rawNumberSymbol (inputKey); Object.defineProperty (componentProt, inputKey, { get: function () { return this[rawNumberKey]; }, set: function (value: any) { this[rawNumberKey] = numberUtil.isNumber (value) ? Number (value) : fallbackValue; } // set }); }; } // NumberInput