@pepperi/components
Version:
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 10.0.1.
199 lines (173 loc) • 7.37 kB
text/typescript
import { Component, ElementRef, OnInit, OnChanges, Input, Output, EventEmitter, ChangeDetectionStrategy, ViewChild, Renderer2, OnDestroy } from '@angular/core';
import { FormGroup } from '@angular/forms';
import { DateAdapter, MAT_DATE_FORMATS } from '@angular/material/core';
import { DatetimeAdapter, MAT_DATETIME_FORMATS } from '@mat-datetimepicker/core';
import { MomentDateAdapter } from '@angular/material-moment-adapter';
import { MomentDatetimeAdapter } from '@mat-datetimepicker/moment';
import { TranslateService } from '@ngx-translate/core';
import { SessionService, UtilitiesService, LAYOUT_TYPE, CustomizationService } from '@pepperi/lib';
export class PepperiDateComponent implements OnChanges, OnInit, OnDestroy {
key: string = '';
value: string = '';
formattedValue: string = '';
label: string = '';
type: string = 'date';
required: boolean = false;
disabled: boolean = false;
readonly: boolean = false;
textColor: string = '';
xAlignment: string = '0';
rowSpan: number = 1;
minValue: number = 0;
maxValue: number = 0;
controlType = 'date';
form: FormGroup = null;
isActive: boolean = false;
showTitle: boolean = true;
layoutType: LAYOUT_TYPE = LAYOUT_TYPE.PepperiForm;
valueChanged: EventEmitter<any> = new EventEmitter<any>();
datetimePicker: any;
input: ElementRef;
LAYOUT_TYPE = LAYOUT_TYPE;
standAlone = false;
isInEditMode: boolean = false;
dateModel: Date;
minDate: Date;
maxDate: Date;
showDatepicker: boolean = false;
showTime: boolean = false;
constructor(
public _eref: ElementRef,
public sessionService: SessionService,
private utilitiesService: UtilitiesService,
private customizationService: CustomizationService,
private renderer: Renderer2,
private translate: TranslateService,
private adapter: DateAdapter<any>
) { }
ngOnInit() {
if (this.form === null) {
this.standAlone = true;
this.form = this.customizationService.getDefaultFromGroup(this.key, this.value, this.required, this.readonly, this.disabled);
this.formattedValue = this.formattedValue || this.value;
this.renderer.addClass(this._eref.nativeElement, CustomizationService.STAND_ALONE_FIELD_CLASS_NAME);
}
this.showTime = this.type === 'datetime';
if (this.minValue > 0) {
this.minDate = new Date(this.minValue * 1000 * 60 * 60 * 24);
}
if (this.maxValue > 0) {
this.maxDate = new Date(this.maxValue * 1000 * 60 * 60 * 24);
}
this.initDate();
}
ngOnChanges(changes: any) { }
ngOnDestroy() {
if (this.valueChanged) {
this.valueChanged.unsubscribe();
}
}
initDate() {
const culture = this.translate.getBrowserCultureLang() || 'en-US'; // this.userLang,
this.adapter.setLocale(culture);
if (this.value.indexOf('1900-1-1') >= 0 || this.value.indexOf('1900-01-01') >= 0 || this.value.indexOf('1970-1-1') >= 0 || this.value.indexOf('1970-01-01') >= 0) {
this.value = '';
this.formattedValue = '';
this.dateModel = null;
} else {
this.dateModel = this.utilitiesService.parseDate(this.value, this.showTime);
}
}
openDatetimePicker(datetimePicker) {
datetimePicker.opened = false;
datetimePicker.open();
}
onBlur(event: any) {
if (this.isInEditMode && !this.datetimePicker.opened) {
this.isInEditMode = false;
}
}
onDateChange(event: any) {
let value = '';
if (event.value != null) {
value = this.utilitiesService.stringifyDateWithOffset(event.value.toDate(), this.showTime);
}
this.customizationService.updateFormFieldValue(this.form, this.key, value);
this.valueChanged.emit({ apiName: this.key, value: value });
if (this.isInEditMode) {
setTimeout(() => {
this.isInEditMode = false;
}, 0);
}
}
cardTemplateClicked(event) {
const self = this;
this.isInEditMode = true;
setTimeout(() => {
self.input.nativeElement.focus();
self.openDatetimePicker(self.datetimePicker);
}, 0);
}
}