in client/src/components/special/periods.js [189:317]
function getPeriod (period, range) {
const dateNow = getCurrentDate();
let {start, end, isCurrent} = Range.parse(range, period);
let before = start ? moment(start).add(-1, 'd') : moment(dateNow).add(-1, 'd');
const rangeIsSelected = !!start && !!end;
let tickFormat;
let previousStart;
let previousEnd;
let endStrict;
let previousEndStrict;
let previousShiftFn;
let previousFilterFn;
switch ((period || '').toLowerCase()) {
case Period.month:
if (!rangeIsSelected) {
start = moment(dateNow).startOf('month');
end = moment(dateNow).endOf('month');
}
before = start ? moment(start).add(-1, 'M') : moment(dateNow).add(-1, 'M');
tickFormat = '1d';
previousStart = moment(start).add(-1, 'M');
previousEnd = moment(previousStart).endOf('M');
endStrict = moment(end);
previousEndStrict = moment(previousEnd);
if (isCurrent) {
if (dateNow < endStrict) {
endStrict = moment(dateNow);
}
const temp = moment(endStrict).add(-1, 'M');
if (temp < previousEndStrict) {
previousEndStrict = temp;
}
}
endStrict = endStrict.endOf('D');
previousEndStrict = previousEndStrict.endOf('D');
const daysInMonth = start.daysInMonth();
previousShiftFn = (momentDate) => moment(momentDate).add(1, 'M');
previousFilterFn = (momentDate) => momentDate.get('D') <= daysInMonth;
break;
case Period.quarter:
if (!rangeIsSelected) {
start = moment(dateNow).startOf('Q');
end = moment(start).endOf('Q');
}
before = start ? moment(start).add(-1, 'Q') : moment(dateNow).add(-1, 'Q');
tickFormat = '1M';
previousStart = moment(start).add(-1, 'y');
previousEnd = moment(end).add(-1, 'y');
endStrict = moment(end);
previousEndStrict = moment(previousEnd);
if (isCurrent) {
if (dateNow < endStrict) {
endStrict = moment(dateNow);
}
const temp = moment(endStrict).add(-1, 'y');
if (temp < previousEndStrict) {
previousEndStrict = temp;
}
}
endStrict = endStrict.endOf('D');
previousEndStrict = previousEndStrict.endOf('D');
previousShiftFn = (momentDate) => moment(momentDate).add(1, 'y');
break;
case Period.year:
if (!rangeIsSelected) {
start = moment(dateNow).startOf('Y');
end = moment(dateNow).endOf('Y');
}
before = start ? moment(start).add(-1, 'Y') : moment(dateNow).add(-1, 'Y');
tickFormat = '1M';
previousStart = moment(start).add(-1, 'y');
previousEnd = moment(end).add(-1, 'y');
endStrict = moment(end);
previousEndStrict = moment(previousEnd);
if (isCurrent) {
if (dateNow < endStrict) {
endStrict = moment(dateNow);
}
const temp = moment(endStrict).add(-1, 'y');
if (temp < previousEndStrict) {
previousEndStrict = temp;
}
}
previousShiftFn = (momentDate) => moment(momentDate).add(1, 'y');
break;
case Period.day:
if (!rangeIsSelected) {
start = moment().startOf('D');
end = moment().endOf('D');
}
before = start ? moment(start).add(-1, 'D') : moment().add(-1, 'D');
tickFormat = getTickFormat(start, end);
previousStart = moment(start).add(-1, 'd');
previousEnd = moment(end).add(-1, 'd');
endStrict = moment(end);
previousEndStrict = moment(previousEnd);
if (isCurrent) {
if (moment() < endStrict) {
endStrict = moment();
}
const temp = moment(endStrict).add(-1, 'd');
if (temp < previousEndStrict) {
previousEndStrict = temp;
}
}
previousShiftFn = (momentDate) => moment(momentDate).add(1, 'd');
break;
default:
tickFormat = getTickFormat(start, end);
endStrict = moment(end);
before = undefined;
break;
}
return {
name: period,
tick: tickFormat,
start,
end,
endStrict,
previousStart,
previousEnd,
previousEndStrict,
previousShiftFn,
previousFilterFn,
current: Range.build({start}, period),
before: Range.build({start: before}, period)
};
}