my-lib/input-item/input-item.ts
| changeDetection | ChangeDetectionStrategy.OnPush | 
| encapsulation | ViewEncapsulation.None | 
| selector | input-item | 
| styleUrls | input-item.less, | 
| templateUrl | ./input-item.html | 
| Properties | 
| Methods | 
| Inputs | 
| Outputs | 
| Accessors | 
| constructor(ele: ElementRef, render: Renderer2) | ||||||||||||
| Defined in my-lib/input-item/input-item.ts:72 | ||||||||||||
| 
                                        Parameters :
                                         
 | 
| clear | 
                                Type:     
                              Default value:  | 
| Defined in my-lib/input-item/input-item.ts:51 | |
| defaultValue | 
                                Type:     | 
| Defined in my-lib/input-item/input-item.ts:23 | |
| disabled | 
                                Type:     | 
| Defined in my-lib/input-item/input-item.ts:29 | |
| editable | 
                                Type:     
                              Default value:  | 
| Defined in my-lib/input-item/input-item.ts:25 | |
| error | 
                                Type:     | 
| Defined in my-lib/input-item/input-item.ts:54 | |
| extra | 
                                Type:     | 
| Defined in my-lib/input-item/input-item.ts:62 | |
| labelNumber | 
                                Type:     
                              Default value:  | 
| Defined in my-lib/input-item/input-item.ts:63 | |
| maxLength | 
                                Type:     | 
| Defined in my-lib/input-item/input-item.ts:52 | |
| moneyKeyboardAlign | 
                                Type:     | 
| Defined in my-lib/input-item/input-item.ts:66 | |
| name | 
                                Type:     | 
| Defined in my-lib/input-item/input-item.ts:65 | |
| placeholder | 
                                Type:     | 
| Defined in my-lib/input-item/input-item.ts:24 | |
| readonly | 
                                Type:     | 
| Defined in my-lib/input-item/input-item.ts:42 | |
| type | 
                                Type:     | 
| Defined in my-lib/input-item/input-item.ts:21 | |
| updatePlaceholder | 
                                Type:     
                              Default value:  | 
| Defined in my-lib/input-item/input-item.ts:64 | |
| value | 
                                Type:     | 
| Defined in my-lib/input-item/input-item.ts:22 | |
| onBlur | $eventtype:EventEmitter<any> | 
| Defined in my-lib/input-item/input-item.ts:69 | |
| onChange | $eventtype:EventEmitter<any> | 
| Defined in my-lib/input-item/input-item.ts:68 | |
| onErrorClick | $eventtype:EventEmitter<any> | 
| Defined in my-lib/input-item/input-item.ts:71 | |
| onExtraClick | $eventtype:EventEmitter<any> | 
| Defined in my-lib/input-item/input-item.ts:72 | |
| onFocus | $eventtype:EventEmitter<any> | 
| Defined in my-lib/input-item/input-item.ts:70 | |
| _onClear | ||||||||
| _onClear(e: Event) | ||||||||
| Defined in my-lib/input-item/input-item.ts:91 | ||||||||
| 
                                        Parameters :
                                         
 
                                    Returns :      void | 
| _onError | ||||||||
| _onError(e: any) | ||||||||
| Defined in my-lib/input-item/input-item.ts:83 | ||||||||
| 
                                        Parameters :
                                         
 
                                    Returns :      void | 
| _onExtra | ||||||||
| _onExtra(e: any) | ||||||||
| Defined in my-lib/input-item/input-item.ts:87 | ||||||||
| 
                                        Parameters :
                                         
 
                                    Returns :      void | 
| initRipple | 
| initRipple() | 
| Defined in my-lib/input-item/input-item.ts:81 | 
| 
                                    Returns :      void | 
| ngOnInit | 
| ngOnInit() | 
| Defined in my-lib/input-item/input-item.ts:103 | 
| 
                                    Returns :      void | 
| setItemActive | ||||||||
| setItemActive(isActive?: boolean) | ||||||||
| Defined in my-lib/input-item/input-item.ts:97 | ||||||||
| 
                                        Parameters :
                                         
 
                                    Returns :      void | 
| _disabled | 
| _disabled:      | 
| Type : boolean | 
| Default value : false | 
| Defined in my-lib/input-item/input-item.ts:27 | 
| _readonly | 
| _readonly:      | 
| Type : boolean | 
| Default value : false | 
| Defined in my-lib/input-item/input-item.ts:40 | 
| input | 
| input:      | 
| Type : ElementRef | 
| Decorators : ViewChild | 
| Defined in my-lib/input-item/input-item.ts:19 | 
| disabled | 
| set disabled(val: any) | 
| Defined in my-lib/input-item/input-item.ts:29 | 
| readonly | 
| set readonly(val: any) | 
| Defined in my-lib/input-item/input-item.ts:42 | 
| error | 
| set error(val: any) | 
| Defined in my-lib/input-item/input-item.ts:54 | 
import {
    ViewEncapsulation, Component,
    Input, HostBinding, OnInit,
    InjectionToken, Inject, ChangeDetectionStrategy,
    ElementRef, Renderer2, ViewChild,
    Output, EventEmitter, TemplateRef
} from '@angular/core';
import { ListItemComponent } from '../list/list-item/list-item';
import { fromEvent, merge } from 'meepo-utils';
@Component({
    selector: 'input-item',
    templateUrl: './input-item.html',
    styleUrls: ['./input-item.less', './patch.less'],
    encapsulation: ViewEncapsulation.None,
    changeDetection: ChangeDetectionStrategy.OnPush
})
export class InputItemComponent extends ListItemComponent implements OnInit {
    @ViewChild('input') input: ElementRef;
    @Input() type: string;
    @Input() value: string;
    @Input() defaultValue: string;
    @Input() placeholder: string;
    @Input() editable: boolean = true;
    _disabled: boolean = false;
    @Input()
    set disabled(val: any) {
        const _disabled = this.isMeepoTrue(val);
        if (_disabled) {
            this.render.setAttribute(this.input.nativeElement, 'disabled', '');
            this.addToClass('am-input-disabled', true, false);
        } else {
            this.render.removeAttribute(this.input.nativeElement, 'disabled');
            this.addToClass('am-input-disabled', false, false);
        }
    }
    _readonly: boolean = false;
    @Input()
    set readonly(val: any) {
        this._readonly = this.isMeepoTrue(val);
        if (this._readonly) {
            this.render.setAttribute(this.input.nativeElement, 'readonly', '');
        } else {
            this.render.removeAttribute(this.input.nativeElement, 'readonly');
        }
    }
    @Input() clear: boolean = false;
    @Input() maxLength: number;
    @Input()
    set error(val: any) {
        const error = this.isMeepoTrue(val);
        if (error) {
            this.addToClass('am-input-error', true, false);
        } else {
            this.addToClass('am-input-error', false, false);
        }
    }
    @Input() extra: string | TemplateRef<any>;
    @Input() labelNumber: number = 5;
    @Input() updatePlaceholder: boolean = false;
    @Input() name: string;
    @Input() moneyKeyboardAlign: 'left' | 'right';
    @Output() onChange: EventEmitter<any> = new EventEmitter();
    @Output() onBlur: EventEmitter<any> = new EventEmitter();
    @Output() onFocus: EventEmitter<any> = new EventEmitter();
    @Output() onErrorClick: EventEmitter<any> = new EventEmitter();
    @Output() onExtraClick: EventEmitter<any> = new EventEmitter();
    constructor(
        ele: ElementRef, render: Renderer2
    ) {
        super(ele, render);
        this.addToClass('am-input-item', true, false);
        this.addToClass('am-input-arrow', true, false);
    }
    initRipple() { }
    _onError(e: any) {
        this.onErrorClick.emit(e);
    }
    _onExtra(e: any) {
        this.onExtraClick.emit(e);
    }
    _onClear(e: Event) {
        e.stopPropagation();
        e.preventDefault();
        this.input.nativeElement.value = '';
    }
    setItemActive(isActive?: boolean) {
        setTimeout(() => {
            this.input.nativeElement.focus();
        });
    }
    ngOnInit() {
        this.arrow = 'empty';
        const change = merge(
            // fromEvent(this.input.nativeElement, 'change'),
            // fromEvent(this.input.nativeElement, 'keyup'),
            // fromEvent(this.input.nativeElement, 'keydown'),
            fromEvent(this.input.nativeElement, 'input'),
            fromEvent(this.input.nativeElement, 'propertychange')
        );
        const blur = fromEvent(this.input.nativeElement, 'blur');
        const focus = fromEvent(this.input.nativeElement, 'focus');
        change
            .distinctUntilChanged()
            .debounceTime(300)
            .subscribe(res => {
                this.onChange.emit(res);
            });
        blur.subscribe(res => {
            setTimeout(() => {
                if (!this._readonly) {
                    this.addToClass('am-input-focus', false, false);
                    this.onBlur.emit(res);
                }
            });
        });
        focus.subscribe(res => {
            setTimeout(() => {
                if (!this._readonly) {
                    this.addToClass('am-input-focus', true, false)
                    this.onFocus.emit(res);
                }
            });
        });
    }
}
<div class="{{_name}}-thumb" *ngIf="_thumb && !thumbRef">
    <img [src]="_thumb" />
</div>
<ng-container *ngIf="thumbRef">
    <div class="{{_name}}-thumb">
        <ng-container *ngTemplateOutlet="thumbRef"></ng-container>
    </div>
</ng-container>
<div class="am-list-line" [class.am-list-line-multiple]="_multiple">
    <div class="am-input-label am-input-label-{{labelNumber}}">
        <ng-content></ng-content>
    </div>
    <div class="am-input-control">
        <input #input [attr.name]="name" [attr.placeholder]="placeholder" [attr.value]="value" [attr.type]="type">
    </div>
    <div class="am-input-extra" (click)="_onExtra($event)" *ngIf="extra && extraType === 'string'">
        {{extra}}
    </div>
    <div class="am-input-extra" (click)="_onExtra($event)" *ngIf="extra && extraType !== 'string'">
        <ng-container *ngTemplateOutlet="extra"></ng-container>
    </div>
    <div class="am-input-clear" (click)="_onClear($event)"></div>
    <div class="am-input-error-extra" (click)="_onError($event)"></div>
</div>
<div listRipple style="display: none;"></div>