improve editing of evaluation

- an evaluation type can be repeated multiple times on the same action;
- in vue, evaluation are listed by key, not id,
- adding an evaluation make appears directly in "edit" mode;
- ...
This commit is contained in:
2021-08-19 10:14:10 +02:00
parent 9447516694
commit bab06796f1
6 changed files with 134 additions and 83 deletions

View File

@@ -13,15 +13,15 @@
*
*/
const dateToISO = (date) => {
if (null === date) {
return null;
}
if (null === date) {
return null;
}
return [
date.getFullYear(),
(date.getMonth() + 1).toString().padStart(2, '0'),
date.getDate().toString().padStart(2, '0')
].join('-');
return [
date.getFullYear(),
(date.getMonth() + 1).toString().padStart(2, '0'),
date.getDate().toString().padStart(2, '0')
].join('-');
};
/**
@@ -30,10 +30,10 @@ const dateToISO = (date) => {
* **Experimental**
*/
const ISOToDate = (str) => {
let
[year, month, day] = str.split('-');
return new Date(year, month-1, day);
let
[year, month, day] = str.split('-');
return new Date(year, month-1, day);
}
/**
@@ -41,53 +41,100 @@ const ISOToDate = (str) => {
*
*/
const ISOToDatetime = (str) => {
if (null === str) {
return null;
}
if (null === str) {
return null;
}
let
[cal, times] = str.split('T'),
[year, month, date] = cal.split('-'),
[time, timezone] = times.split(times.charAt(8)),
[hours, minutes, seconds] = time.split(':')
;
let
[cal, times] = str.split('T'),
[year, month, date] = cal.split('-'),
[time, timezone] = times.split(times.charAt(8)),
[hours, minutes, seconds] = time.split(':')
;
return new Date(year, month-1, date, hours, minutes, seconds);
return new Date(year, month-1, date, hours, minutes, seconds);
}
/**
* Convert a date to ISO8601, valid for usage in api
*
*
*/
const datetimeToISO = (date) => {
let cal, time, offset;
cal = [
date.getFullYear(),
(date.getMonth() + 1).toString().padStart(2, '0'),
date.getDate().toString().padStart(2, '0')
].join('-');
time = [
date.getHours().toString().padStart(2, '0'),
date.getMinutes().toString().padStart(2, '0'),
date.getSeconds().toString().padStart(2, '0')
].join(':');
let cal, time, offset;
cal = [
date.getFullYear(),
(date.getMonth() + 1).toString().padStart(2, '0'),
date.getDate().toString().padStart(2, '0')
].join('-');
offset = [
date.getTimezoneOffset() <= 0 ? '+' : '-',
Math.abs(Math.floor(date.getTimezoneOffset() / 60)).toString().padStart(2, '0'),
':',
Math.abs(date.getTimezoneOffset() % 60).toString().padStart(2, '0'),
].join('');
let x = cal + 'T' + time + offset;
time = [
date.getHours().toString().padStart(2, '0'),
date.getMinutes().toString().padStart(2, '0'),
date.getSeconds().toString().padStart(2, '0')
].join(':');
return x;
offset = [
date.getTimezoneOffset() <= 0 ? '+' : '-',
Math.abs(Math.floor(date.getTimezoneOffset() / 60)).toString().padStart(2, '0'),
':',
Math.abs(date.getTimezoneOffset() % 60).toString().padStart(2, '0'),
].join('');
let x = cal + 'T' + time + offset;
return x;
};
const intervalDaysToISO = (days) => {
if (null === days) {
return null;
}
return `PD${days}`;
}
const intervalISOToDays = (str) => {
if (null === str) {
return null
}
let days = 0;
let isDate = true;
for (let i = 0; i < str.length; i = i + 1) {
// we do not take time into account
if (!isDate) {
continue;
}
switch (str.charAt(i)) {
case 'P':
isDate = true;
break;
case 'Y':
i = i+1;
days = days + Number.parseInt(str.charAt(i)) * 365;
break;
case 'M':
i = i+1;
days = days + Number.parseInt(str.charAt(i)) * 30;
break;
case 'D':
i = i+1;
days = days + Number.parseInt(str.charAt(i));
break;
case 'T':
isDate = false;
break;
}
}
return days;
}
export {
dateToISO,
ISOToDate,
ISOToDatetime,
datetimeToISO
dateToISO,
ISOToDate,
ISOToDatetime,
datetimeToISO,
intervalISOToDays,
intervalDaysToISO,
};