[ADF-1095] Date Range picker remains on screen remove md-data-picker (#2190)

* [ADF-1095] Date Range picker remains on screen

* created date widget component  with md datepicker.

* [ADF-1095] Date Range picker remains on screen.

* Changed mdl date picker to md date picker.
* Updated en.josn with new fields.
* Added md libraires to  spec files .

* [ADF-1095] Date Range picker remains on screen

* Removed old id's for start and end date inputs.

* remove md-date-time-picker

* use local MaterialModule in test

* [activiti-analytics] remove encapsulation and fix test

* remove from vendor md-date-time-picker
This commit is contained in:
Eugenio Romano
2017-08-14 13:59:22 +01:00
committed by Mario Romano
parent 6d30752386
commit 56e65cd652
44 changed files with 275 additions and 344 deletions

View File

@@ -15,37 +15,26 @@
* limitations under the License.
*/
/* tslint:disable:component-selector */
/* tslint:disable::no-access-missing-member */
import { Component, ElementRef, EventEmitter, Input, OnDestroy, OnInit, Output, ViewChild } from '@angular/core';
import { Component, EventEmitter, Input, OnInit, Output, ViewEncapsulation } from '@angular/core';
import { AbstractControl, FormControl, FormGroup, Validators } from '@angular/forms';
import { DateAdapter, MD_DATE_FORMATS } from '@angular/material';
import * as moment from 'moment';
import { WidgetComponent } from './../widget.component';
function dateCheck(c: AbstractControl) {
let startDate = moment(c.get('startDate').value);
let endDate = moment(c.get('endDate').value);
let result = startDate.isAfter(endDate);
return result ? {'greaterThan': true} : null;
}
declare let mdDateTimePicker: any;
import { Moment } from 'moment';
import { MOMENT_DATE_FORMATS, MomentDateAdapter } from 'ng2-alfresco-core';
@Component({
selector: 'date-range-widget',
selector: 'adf-date-range-widget',
templateUrl: './date-range.widget.html',
styleUrls: ['./date-range.widget.css']
providers: [
{provide: DateAdapter, useClass: MomentDateAdapter},
{provide: MD_DATE_FORMATS, useValue: MOMENT_DATE_FORMATS}],
styleUrls: ['./date-range.widget.scss'],
encapsulation: ViewEncapsulation.None
})
export class DateRangeWidgetComponent extends WidgetComponent implements OnInit, OnDestroy {
export class DateRangeWidgetComponent implements OnInit {
public static FORMAT_DATE_ACTIVITI: string = 'YYYY-MM-DD';
@ViewChild('startElement')
startElement: any;
@ViewChild('endElement')
endElement: any;
public FORMAT_DATE_ACTIVITI: string = 'YYYY-MM-DD';
public SHOW_FORMAT: string = 'DD/MM/YYYY';
@Input('group')
public dateRange: FormGroup;
@@ -56,152 +45,66 @@ export class DateRangeWidgetComponent extends WidgetComponent implements OnInit,
@Output()
dateRangeChanged: EventEmitter<any> = new EventEmitter<any>();
minDate: Moment;
maxDate: Moment;
startDatePicker: Moment;
endDatePicker: Moment;
debug: boolean = false;
dialogStart: any;
dialogEnd: any;
constructor(public elementRef: ElementRef) {
super();
constructor(public dateAdapter: DateAdapter<Moment>) {
}
ngOnInit() {
this.initForm();
this.addAccessibilityLabelToDatePicker();
}
let momentDateAdapter = <MomentDateAdapter> this.dateAdapter;
momentDateAdapter.overrideDisplyaFormat = this.SHOW_FORMAT;
initForm() {
let startDateForm = this.field.value ? this.field.value.startDate : '' ;
let startDate = this.convertToMomentDate(startDateForm);
let endDateForm = this.field.value ? this.field.value.endDate : '' ;
let endDate = this.convertToMomentDate(endDateForm);
if (this.field) {
if (this.field.value && this.field.value.startDate) {
this.startDatePicker = moment(this.field.value.startDate, this.FORMAT_DATE_ACTIVITI);
}
let startDateControl = new FormControl(startDate);
if (this.field.value && this.field.value.endDate) {
this.endDatePicker = moment(this.field.value.endDate, this.FORMAT_DATE_ACTIVITI);
}
}
let startDateControl = new FormControl(this.startDatePicker);
startDateControl.setValidators(Validators.required);
this.dateRange.addControl('startDate', startDateControl);
let endDateControl = new FormControl(endDate);
let endDateControl = new FormControl(this.endDatePicker);
endDateControl.setValidators(Validators.required);
this.dateRange.addControl('endDate', endDateControl);
this.dateRange.setValidators(dateCheck);
this.dateRange.valueChanges.subscribe(data => this.onGroupValueChanged(data));
this.initSartDateDialog(startDate);
this.initEndDateDialog(endDate);
this.dateRange.setValidators(this.dateCheck);
this.dateRange.valueChanges.subscribe(() => this.onGroupValueChanged());
}
initSartDateDialog(date: string) {
let settings: any = {
type: 'date',
past: moment().subtract(100, 'years'),
future: moment().add(100, 'years')
};
settings.init = moment(date, DateRangeWidgetComponent.FORMAT_DATE_ACTIVITI);
this.dialogStart = new mdDateTimePicker.default(settings);
this.dialogStart.trigger = this.startElement.nativeElement;
let startDateButton = document.getElementById('startDateButton');
startDateButton.addEventListener('click', () => {
this.dialogStart.toggle();
});
}
private addAccessibilityLabelToDatePicker() {
let left: any = document.querySelector('#mddtp-date__left');
if (left) {
left.appendChild(this.createCustomElement('date left'));
}
let right: any = document.querySelector('#mddtp-date__right');
if (right) {
right.appendChild(this.createCustomElement('date right'));
}
let cancel: any = document.querySelector('#mddtp-date__cancel');
if (cancel) {
cancel.appendChild(this.createCustomElement('date cancel'));
}
let ok: any = document.querySelector('#mddtp-date__ok');
if (ok) {
ok.appendChild(this.createCustomElement('date ok'));
}
}
private createCustomElement(text: string): HTMLElement {
let span = document.createElement('span');
span.style.visibility = 'hidden';
let rightSpanText = document.createTextNode(text);
span.appendChild(rightSpanText);
return span;
}
initEndDateDialog(date: string) {
let settings: any = {
type: 'date',
past: moment().subtract(100, 'years'),
future: moment().add(100, 'years')
};
settings.init = moment(date, DateRangeWidgetComponent.FORMAT_DATE_ACTIVITI);
this.dialogEnd = new mdDateTimePicker.default(settings);
this.dialogEnd.trigger = this.endElement.nativeElement;
let endDateButton = document.getElementById('endDateButton');
endDateButton.addEventListener('click', () => {
this.dialogEnd.toggle();
});
}
onOkStart(inputEl: HTMLInputElement) {
let date = this.dialogStart.time.format(DateRangeWidgetComponent.FORMAT_DATE_ACTIVITI);
this.dateRange.patchValue({
startDate: date
});
let materialElemen: any = inputEl.parentElement;
if (materialElemen) {
materialElemen.MaterialTextfield.change(date);
}
}
onOkEnd(inputEl: HTMLInputElement) {
let date = this.dialogEnd.time.format(DateRangeWidgetComponent.FORMAT_DATE_ACTIVITI);
this.dateRange.patchValue({
endDate: date
});
let materialElemen: any = inputEl.parentElement;
if (materialElemen) {
materialElemen.MaterialTextfield.change(date);
}
}
onGroupValueChanged(data: any) {
onGroupValueChanged() {
if (this.dateRange.valid) {
let dateStart = this.convertToMomentDateWithTime(this.dateRange.controls['startDate'].value);
let endStart = this.convertToMomentDateWithTime(this.dateRange.controls['endDate'].value);
let dateStart = this.convertToMomentDateWithTime(this.dateRange.controls.startDate.value);
let endStart = this.convertToMomentDateWithTime(this.dateRange.controls.endDate.value);
this.dateRangeChanged.emit({startDate: dateStart, endDate: endStart});
}
}
public convertToMomentDateWithTime(date: string) {
return moment(date, DateRangeWidgetComponent.FORMAT_DATE_ACTIVITI, true).format(DateRangeWidgetComponent.FORMAT_DATE_ACTIVITI) + 'T00:00:00.000Z';
convertToMomentDateWithTime(date: string) {
return moment(date, this.FORMAT_DATE_ACTIVITI, true).format(this.FORMAT_DATE_ACTIVITI) + 'T00:00:00.000Z';
}
private convertToMomentDate(date: string) {
if (date) {
return moment(date).format(DateRangeWidgetComponent.FORMAT_DATE_ACTIVITI);
} else {
return moment().format(DateRangeWidgetComponent.FORMAT_DATE_ACTIVITI);
}
dateCheck(formControl: AbstractControl) {
let startDate = moment(formControl.get('startDate').value);
let endDate = moment(formControl.get('endDate').value);
let result = startDate.isAfter(endDate);
return result ? {'greaterThan': true} : null;
}
ngOnDestroy() {
isStartDateGreaterThanEndDate() {
return this.dateRange && this.dateRange.errors && this.dateRange.errors.greaterThan;
}
isStartDateEmpty() {
return this.dateRange && this.dateRange.controls.startDate && !this.dateRange.controls.startDate.valid;
}
}