framadate-responsive/src/app/pages/dates/dates.component.ts

138 lines
4.1 KiB
TypeScript
Raw Normal View History

import { ChangeDetectorRef, Component, Inject, OnInit } from '@angular/core';
import { ConfigService } from '../../services/config.service';
import { BaseComponent } from '../base-page/base.component';
import { DOCUMENT } from '@angular/common';
import { MessageService } from 'primeng/api';
import { otherDefaultDates } from '../../config/defaultConfigs';
import { DateUtilities } from '../../config/DateUtilities';
2019-08-10 16:20:59 +02:00
@Component({
selector: 'framadate-dates',
templateUrl: './dates.component.html',
styleUrls: ['./dates.component.scss'],
2019-08-10 16:20:59 +02:00
})
2019-11-19 14:42:59 +01:00
export class DatesComponent extends BaseComponent implements OnInit {
showDateInterval: boolean = false;
2019-11-19 14:23:51 +01:00
startDateInterval: any;
intervalDays: any;
intervalDaysDefault: number = 7;
endDateInterval: any;
constructor(
public config: ConfigService,
private cd: ChangeDetectorRef,
private messageService: MessageService,
private dateUtilities: DateUtilities,
@Inject(DOCUMENT) private document: any
) {
2019-08-10 16:20:59 +02:00
super(config);
}
2019-11-19 14:42:59 +01:00
countDays() {
2019-11-19 14:23:51 +01:00
// compute the number of days in the date interval
if (this.endDateInterval && this.startDateInterval) {
this.intervalDays = this.dateUtilities.dayDiff(this.endDateInterval, this.startDateInterval).toFixed(0);
2019-11-19 14:23:51 +01:00
}
}
/**
* set the interval options
*/
2019-08-10 16:20:59 +02:00
ngOnInit() {
2019-11-19 14:23:51 +01:00
let dateCurrent = new Date();
const dateJson = dateCurrent.toISOString();
this.startDateInterval = dateJson.substring(0, 10);
this.endDateInterval = this.dateUtilities
.addDaysToDate(this.intervalDaysDefault, dateCurrent)
.toISOString()
.substring(0, 10);
2019-08-10 16:20:59 +02:00
}
addDate() {
2020-01-24 11:15:38 +01:00
this.config.dateList.push({
literal: '',
date_object: new Date(),
timeList: [],
});
2019-11-19 14:42:59 +01:00
let selector = '[ng-reflect-name="dateChoices_' + (this.config.dateList.length - 1) + '"]';
this.cd.detectChanges();
const elem = this.document.querySelector(selector);
if (elem) {
elem.focus();
}
2019-11-15 15:19:42 +01:00
}
2020-01-24 10:57:54 +01:00
/**
* change time spans
*/
2019-11-19 14:42:59 +01:00
addTime() {
this.config.timeList.push({
literal: '',
timeList: [],
date_object: new Date(),
});
2019-11-15 15:19:42 +01:00
}
2020-01-24 10:57:54 +01:00
removeAllTimes() {
this.config.timeList = [];
}
resetTimes() {
this.config.timeList = otherDefaultDates;
2020-01-24 10:57:54 +01:00
}
2019-11-15 15:19:42 +01:00
/**
* add a time period to a specific date choice,
* focus on the new input
* @param config
* @param id
*/
2019-11-19 14:42:59 +01:00
addTimeToDate(config: any, id: number) {
config.timeList.push({ literal: '' });
2019-11-15 15:19:42 +01:00
let selector = '[ng-reflect-name="dateTime_' + id + '_Choices_' + (config.timeList.length - 1) + '"]';
this.cd.detectChanges();
const elem = this.document.querySelector(selector);
2019-11-18 11:36:34 +01:00
if (elem) {
elem.focus();
2019-11-15 15:19:42 +01:00
}
}
2019-11-19 14:23:51 +01:00
/**
* remove all input contents, does not reset to default
*/
2019-11-15 15:19:42 +01:00
emptyAll() {
this.config.dateList.forEach((element) => {
2019-11-15 15:19:42 +01:00
element.literal = '';
element.date_object = new Date();
element.timeList = ['', '', ''];
});
this.config.timeList.forEach((element) => {
element.literal = '';
2019-11-15 15:19:42 +01:00
});
2019-08-10 16:20:59 +02:00
}
2019-11-19 14:23:51 +01:00
/**
2019-11-19 14:42:59 +01:00
* add all the dates between the start and end dates in the interval section
2019-11-19 14:23:51 +01:00
*/
addIntervalOfDates() {
let newIntervalArray = this.dateUtilities.getDatesInRange(this.startDateInterval, this.endDateInterval, 1);
2019-11-19 14:23:51 +01:00
const converted = [];
newIntervalArray.forEach((element) => {
converted.push({
literal: element.literal,
date_object: element.date_object,
timeList: [],
});
2019-11-19 14:23:51 +01:00
});
this.config.dateList = [...new Set(converted)]; // add only dates that are not already present with a Set of unique items
2019-11-19 14:42:59 +01:00
this.showDateInterval = false;
2019-11-19 14:23:51 +01:00
this.messageService.add({
severity: 'success',
summary: 'Dates ajoutées',
detail: `les dates ont été ajoutées aux réponses possibles`,
});
2019-11-19 14:23:51 +01:00
}
2019-08-10 16:20:59 +02:00
}