import { Component, Output, EventEmitter, ElementRef, Input, ExistingProvider, forwardRef, OnInit, OnDestroy } from '@angular/core';
import { RdLib } from "../../base/rdLib";
import { AppComponent } from "../../app.component";
import { ScriptLoaderService } from "../../library/script-loader.service";
import { InputBase } from './inputBase';
declare const moment;
const provider: ExistingProvider = { provide: InputBase, useExisting: forwardRef(() => InputDateRange) }
export class ChangeObject {
start: number;
end: number
}
@Component({
selector: 'rd-date-range',
template: `
`,
providers: [provider],
})
export class InputDateRange extends InputBase implements OnInit, OnDestroy {
constructor(private element: ElementRef, private script: ScriptLoaderService) {
super();
this.script.load(["./assets/js/moment.min.js", "./assets/js/moment-tr.js"]);
}
@Input("startDate") startDate: number;
@Input("endDate") endDate: number;
@Input("rd-before-start-day") beforeStartDay: number = 1;
@Output("rd-change") changeEvent: EventEmitter = new EventEmitter();
container: any;
rangeLocale: object = {};
daysLocale: Array = [];
monthLocale: Array = [];
ngOnInit() {
this.getLocales();
this.container = this.jQuery(this.element.nativeElement).find('#dateRange');
this.container.daterangepicker({
opens: 'right',
startDate: this.startDate ? moment(this.startDate, "YYYYMMDD") : moment().subtract(this.beforeStartDay, 'days'),
endDate: this.endDate ? moment(this.endDate, "YYYYMMDD") : moment(),
showDropdowns: true,
showWeekNumbers: true,
timePicker: false,
timePickerIncrement: 1,
timePicker12Hour: true,
ranges: this.rangeLocale,
buttonClasses: ['btn btn-sm'],
applyClass: 'green',
cancelClass: 'red',
format: 'MM/DD/YYYY',
separator: ' to ',
locale: {
applyLabel: RdLib.localization.translateEn('Apply'),
cancelLabel: RdLib.localization.translateEn('Cancel'),
customRangeLabel: RdLib.localization.translateEn('Custom Range'),
daysOfWeek: this.daysLocale,
monthNames: this.monthLocale,
firstDay: 1
}
}, (start, end) => {
this.changeEvent.emit({
start: RdLib.typeOperations.dateToLong(start.toDate()),
end: RdLib.typeOperations.dateToLong(end.toDate())
});
this.jQuery(this.container).find('span').html(start.format('MMMM D, YYYY') + ' - ' + end.format('MMMM D, YYYY'));
});
let now = moment();
let yesterday = moment().subtract(this.beforeStartDay, 'days');
this.jQuery(this.container).find('span').html(moment().subtract(this.beforeStartDay, 'days').format('MMMM D, YYYY') + ' - ' + moment().format('MMMM D, YYYY'));
this.changeEvent.emit({
start: RdLib.typeOperations.dateToLong(yesterday.toDate()),
end: RdLib.typeOperations.dateToLong(now.toDate())
});
}
ngOnDestroy() {
this.container.data("daterangepicker").remove();
}
getLocales() {
this.rangeLocale[RdLib.localization.translateEn("Yesterday")] = [moment().subtract(1, 'days'), moment()];
this.rangeLocale[RdLib.localization.translateEn("Last 1 Month")] = [moment().subtract(30, 'days'), moment()];
this.rangeLocale[RdLib.localization.translateEn("Last 3 Months")] = [moment().subtract(90, 'days'), moment()];
this.rangeLocale[RdLib.localization.translateEn("Last 6 Months")] = [moment().subtract(180, 'days'), moment()];
if (AppComponent.user.language == 'en') {
this.daysLocale = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'];
this.monthLocale = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
} else {
this.daysLocale = ["Paz", "Pts", "Sal", "Çar", "Per", "Cum", "Cts"];
this.monthLocale = ['Ocak', 'Şubat', 'Mart', 'Nisan', 'Mayıs', 'Haziran', 'Temmmuz', 'Ağustos', 'Eylül', 'Ekim', 'Kasım', 'Aralık'];
}
}
}