UNPKG

forest-express

Version:

Official package for all Forest Express Lianas

117 lines (116 loc) 6.99 kB
"use strict"; 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;