File
Metadata
providers |
{
provide: NG_VALUE_ACCESSOR, useExisting: DatePickerInput, multi: true
}
|
selector |
ibm-date-picker-input |
template |
<div class="bx--form-item">
<div class="bx--date-picker"
[ngClass]="{
'bx--date-picker--single' : type === 'single',
'bx--date-picker--range' : type === 'range',
'bx--date-picker--light' : theme === 'light',
'bx--skeleton' : skeleton
}">
<div class="bx--date-picker-container">
<label *ngIf="label" [for]="id" class="bx--label">
<ng-container *ngIf="!isTemplate(label)">{{label}}</ng-container>
<ng-template *ngIf="isTemplate(label)" [ngTemplateOutlet]="label"></ng-template>
</label>
<div class="bx--date-picker-input__wrapper">
<input
#input
*ngIf="!skeleton"
autocomplete="off"
type="text"
class="bx--date-picker__input"
[value]="value"
[pattern]="pattern"
[placeholder]="placeholder"
[id]= "id"
[disabled]="disabled"
(change)="onChange($event)"/>
<svg ibmIconCalendar16 class="bx--date-picker__icon"></svg>
</div>
<div *ngIf="invalid" class="bx--form-requirement">
<ng-container *ngIf="!isTemplate(invalidText)">{{invalidText}}</ng-container>
<ng-template *ngIf="isTemplate(invalidText)" [ngTemplateOutlet]="invalidText"></ng-template>
</div>
</div>
</div>
</div>
|
Index
Properties
|
|
Methods
|
|
Inputs
|
|
Outputs
|
|
disabled
|
Default value : false
|
|
hasIcon
|
Default value : false
|
|
id
|
Default value : `datepicker-${DatePickerInput.datePickerCount++}`
|
|
invalid
|
Default value : false
|
|
invalidText
|
Type : string | TemplateRef<any>
|
|
label
|
Type : string | TemplateRef<any>
|
|
pattern
|
Default value : "^\\d{1,2}/\\d{1,2}/\\d{4}$"
|
|
placeholder
|
Default value : "mm/dd/yyyy"
|
|
skeleton
|
Default value : false
|
|
theme
|
Type : "light" | "dark"
Default value : "dark"
|
|
Outputs
valueChange
|
$event Type: EventEmitter<string>
|
|
Methods
Public
isTemplate
|
isTemplate(value)
|
|
|
Public
registerOnChange
|
registerOnChange(fn: any)
|
|
Parameters :
Name |
Type |
Optional |
fn |
any
|
No
|
|
Public
registerOnTouched
|
registerOnTouched(fn: any)
|
|
Parameters :
Name |
Type |
Optional |
fn |
any
|
No
|
|
Public
writeValue
|
writeValue(value: any)
|
|
Parameters :
Name |
Type |
Optional |
value |
any
|
No
|
|
Private
Static
datePickerCount
|
datePickerCount: number
|
Type : number
|
Default value : 0
|
|
propagateChange
|
propagateChange:
|
Default value : (_: any) => {}
|
|
import {
Component,
Input,
Output,
EventEmitter,
ElementRef,
TemplateRef,
ViewChild
} from "@angular/core";
import { NG_VALUE_ACCESSOR } from "@angular/forms";
@Component({
selector: "ibm-date-picker-input",
template: `
<div class="bx--form-item">
<div class="bx--date-picker"
[ngClass]="{
'bx--date-picker--single' : type === 'single',
'bx--date-picker--range' : type === 'range',
'bx--date-picker--light' : theme === 'light',
'bx--skeleton' : skeleton
}">
<div class="bx--date-picker-container">
<label *ngIf="label" [for]="id" class="bx--label">
<ng-container *ngIf="!isTemplate(label)">{{label}}</ng-container>
<ng-template *ngIf="isTemplate(label)" [ngTemplateOutlet]="label"></ng-template>
</label>
<div class="bx--date-picker-input__wrapper">
<input
#input
*ngIf="!skeleton"
autocomplete="off"
type="text"
class="bx--date-picker__input"
[value]="value"
[pattern]="pattern"
[placeholder]="placeholder"
[id]= "id"
[disabled]="disabled"
(change)="onChange($event)"/>
<svg ibmIconCalendar16 class="bx--date-picker__icon"></svg>
</div>
<div *ngIf="invalid" class="bx--form-requirement">
<ng-container *ngIf="!isTemplate(invalidText)">{{invalidText}}</ng-container>
<ng-template *ngIf="isTemplate(invalidText)" [ngTemplateOutlet]="invalidText"></ng-template>
</div>
</div>
</div>
</div>
`,
providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: DatePickerInput,
multi: true
}
]
})
export class DatePickerInput {
private static datePickerCount = 0;
/**
* Select a calendar type for the `model`.
* Internal purposes only.
*/
@Input() type: "simple" | "single" | "range" = "simple";
@Input() id = `datepicker-${DatePickerInput.datePickerCount++}`;
@Input() hasIcon = false;
@Input() label: string | TemplateRef<any>;
@Input() placeholder = "mm/dd/yyyy";
@Input() pattern = "^\\d{1,2}/\\d{1,2}/\\d{4}$";
@Output() valueChange: EventEmitter<string> = new EventEmitter();
@Input() theme: "light" | "dark" = "dark";
@Input() disabled = false;
@Input() invalid = false;
@Input() invalidText: string | TemplateRef<any>;
@Input() skeleton = false;
@Input() value = "";
@ViewChild("input") input: ElementRef;
constructor(protected elementRef: ElementRef) {}
onChange(event) {
this.value = event.target.value;
this.valueChange.emit(this.value);
this.propagateChange(this.value);
this.onTouched();
}
public writeValue(value: any) {
this.value = value;
}
public registerOnChange(fn: any) {
this.propagateChange = fn;
}
public registerOnTouched(fn: any) {
this.onTouched = fn;
}
onTouched: () => any = () => {};
propagateChange = (_: any) => {};
public isTemplate(value) {
return value instanceof TemplateRef;
}
}
Legend
Html element with directive