forest-express
Version:
Official package for all Forest Express Lianas
117 lines (116 loc) • 6.99 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var moment = require('moment-timezone');
var _require = require('../utils/error'),
NoMatchingOperatorError = _require.NoMatchingOperatorError;
var PERIODS = {
yesterday: 'days',
previous_week: 'weeks',
previous_week_to_date: 'weeks',
previous_month: 'months',
previous_month_to_date: 'months',
previous_quarter: 'quarters',
previous_quarter_to_date: 'quarters',
previous_year: 'years',
previous_year_to_date: 'years'
};
var PERIODS_VALUES = {
days: 'day',
weeks: 'isoWeek',
months: 'month',
quarters: 'quarter',
years: 'year'
};
var DATE_OPERATORS_HAVING_PREVIOUS_INTERVAL = ['today', 'yesterday', 'previous_week', 'previous_month', 'previous_quarter', 'previous_year', 'previous_week_to_date', 'previous_month_to_date', 'previous_quarter_to_date', 'previous_year_to_date', 'previous_x_days', 'previous_x_days_to_date'];
var DATE_OPERATORS = [].concat(DATE_OPERATORS_HAVING_PREVIOUS_INTERVAL, ['past', 'future', 'before_x_hours_ago', 'after_x_hours_ago']);
function BaseOperatorDateParser(options) {
var _this = this;
var offsetClient = Number.parseInt(moment().tz(options.timezone).format('Z'), 10);
var offsetServer = moment().utcOffset() / 60;
this.offsetHours = offsetServer - offsetClient;
this.toDateWithTimezone = function (date) {
return date.add(_this.offsetHours, 'h').toDate();
};
this.isDateOperator = function (operator) {
return DATE_OPERATORS.includes(operator);
};
this.hasPreviousDateInterval = function (operator) {
return DATE_OPERATORS_HAVING_PREVIOUS_INTERVAL.includes(operator);
};
this.getDateFilter = function (operator, value) {
var _ref, _ref5, _ref6, _ref7;
value = Number.parseInt(value, 10);
switch (operator) {
case 'today':
return _ref = {}, (0, _defineProperty2["default"])(_ref, options.operators.GTE, _this.toDateWithTimezone(moment().startOf('day'))), (0, _defineProperty2["default"])(_ref, options.operators.LTE, _this.toDateWithTimezone(moment().endOf('day'))), _ref;
case 'past':
return (0, _defineProperty2["default"])({}, options.operators.LTE, moment().toDate());
case 'future':
return (0, _defineProperty2["default"])({}, options.operators.GTE, moment().toDate());
case 'yesterday':
case 'previous_week':
case 'previous_month':
case 'previous_quarter':
case 'previous_year':
{
var _ref4;
var previousPeriod = moment().subtract(1, PERIODS[operator]);
return _ref4 = {}, (0, _defineProperty2["default"])(_ref4, options.operators.GTE, _this.toDateWithTimezone(previousPeriod.clone().startOf(PERIODS_VALUES[PERIODS[operator]]))), (0, _defineProperty2["default"])(_ref4, options.operators.LTE, _this.toDateWithTimezone(previousPeriod.clone().endOf(PERIODS_VALUES[PERIODS[operator]]))), _ref4;
}
case 'previous_week_to_date':
case 'previous_month_to_date':
case 'previous_quarter_to_date':
case 'previous_year_to_date':
return _ref5 = {}, (0, _defineProperty2["default"])(_ref5, options.operators.GTE, _this.toDateWithTimezone(moment().startOf(PERIODS_VALUES[PERIODS[operator]]))), (0, _defineProperty2["default"])(_ref5, options.operators.LTE, moment().toDate()), _ref5;
case 'previous_x_days':
return _ref6 = {}, (0, _defineProperty2["default"])(_ref6, options.operators.GTE, _this.toDateWithTimezone(moment().subtract(value, 'days').startOf('day'))), (0, _defineProperty2["default"])(_ref6, options.operators.LTE, _this.toDateWithTimezone(moment().subtract(1, 'days').endOf('day'))), _ref6;
case 'previous_x_days_to_date':
return _ref7 = {}, (0, _defineProperty2["default"])(_ref7, options.operators.GTE, _this.toDateWithTimezone(moment().subtract(value - 1, 'days').startOf('day'))), (0, _defineProperty2["default"])(_ref7, options.operators.LTE, moment().toDate()), _ref7;
case 'before_x_hours_ago':
return (0, _defineProperty2["default"])({}, options.operators.LTE, moment().subtract(value, 'hours').toDate());
case 'after_x_hours_ago':
return (0, _defineProperty2["default"])({}, options.operators.GTE, moment().subtract(value, 'hours').toDate());
default:
throw new NoMatchingOperatorError();
}
};
this.getPreviousDateFilter = function (operator, value) {
var _ref11, _ref12;
value = Number.parseInt(value, 10);
switch (operator) {
case 'today':
{
var _ref10;
var yesterday = moment().subtract(1, 'days');
return _ref10 = {}, (0, _defineProperty2["default"])(_ref10, options.operators.GTE, _this.toDateWithTimezone(yesterday.clone().startOf('day'))), (0, _defineProperty2["default"])(_ref10, options.operators.LTE, _this.toDateWithTimezone(yesterday.clone().endOf('day'))), _ref10;
}
case 'previous_x_days':
return _ref11 = {}, (0, _defineProperty2["default"])(_ref11, options.operators.GTE, _this.toDateWithTimezone(moment().subtract(value * 2, 'days').startOf('day'))), (0, _defineProperty2["default"])(_ref11, options.operators.LTE, _this.toDateWithTimezone(moment().subtract(value + 1, 'days').endOf('day'))), _ref11;
case 'previous_x_days_to_date':
return _ref12 = {}, (0, _defineProperty2["default"])(_ref12, options.operators.GTE, _this.toDateWithTimezone(moment().subtract(value * 2 - 1, 'days').startOf('day'))), (0, _defineProperty2["default"])(_ref12, options.operators.LTE, _this.toDateWithTimezone(moment().subtract(value, 'days'))), _ref12;
case 'yesterday':
case 'previous_week':
case 'previous_month':
case 'previous_quarter':
case 'previous_year':
{
var _ref13;
var penultimatePeriod = moment().subtract(2, PERIODS[operator]);
return _ref13 = {}, (0, _defineProperty2["default"])(_ref13, options.operators.GTE, _this.toDateWithTimezone(penultimatePeriod.clone().startOf(PERIODS_VALUES[PERIODS[operator]]))), (0, _defineProperty2["default"])(_ref13, options.operators.LTE, _this.toDateWithTimezone(penultimatePeriod.clone().endOf(PERIODS_VALUES[PERIODS[operator]]))), _ref13;
}
case 'previous_week_to_date':
case 'previous_month_to_date':
case 'previous_quarter_to_date':
case 'previous_year_to_date':
{
var _ref14;
var previousPeriod = moment().subtract(1, PERIODS[operator]);
return _ref14 = {}, (0, _defineProperty2["default"])(_ref14, options.operators.GTE, _this.toDateWithTimezone(previousPeriod.clone().startOf(PERIODS_VALUES[PERIODS[operator]]))), (0, _defineProperty2["default"])(_ref14, options.operators.LTE, _this.toDateWithTimezone(previousPeriod.clone())), _ref14;
}
default:
throw new NoMatchingOperatorError();
}
};
}
module.exports = BaseOperatorDateParser;