Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
@doodle/subscriptions-api-connector / state / selectors / subscriptionSelectors.js
Size: Mime:
"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.isEligibleForFreeTrial = exports.getCountDownBannerSubscriptionData = exports.getMaxPremiumSeats = exports.getLastSubscriptionEndDate = exports.getSubscriptionEndDateByDuration = exports.getDateInMs = void 0;

var _reselect = require("reselect");

var ONE_DAY_MILLISECONDS = 1000 * 60 * 60 * 24;
/**
 * Returns the first active subscription. If none exists, it returns the most recent subscription
 * (assuming the backend will return sorted array of subscriptions). Defaults to null.
 * @param {Object} state
 * @returns {Object}
 */

var getLastSubscription = function getLastSubscription(state) {
  var subscriptionsList = state.subscriptions && state.subscriptions.list || [];
  var activeSubscriptions = subscriptionsList.filter(function (subscription) {
    return subscription.status && subscription.status.active;
  });

  if (activeSubscriptions.length > 0) {
    return activeSubscriptions[0];
  }

  if (subscriptionsList.length > 0) {
    return subscriptionsList[subscriptionsList.length - 1];
  }

  return null;
};
/**
 * Checks if a given subscription is a private subscription.
 * @param {Object} state
 */


var isPrivateSubscription = function isPrivateSubscription(subscription) {
  return /private/.test(subscription.plan.bundleName);
};
/**
 * Force the value to be a timestamp in case the date is an object.
 * @param {string|object} dateFromBackend The date as received from the backend
 * @returns {number}
 */


var getDateInMs = function getDateInMs(dateFromBackend) {
  return Number(new Date(dateFromBackend));
};
/**
 * Returns the end date of the subscription, based on its monthly or daily duration.
 * @param {object} subscription
 * @returns {number} The end date as a timestamp
 */


exports.getDateInMs = getDateInMs;

var getSubscriptionEndDateByDuration = function getSubscriptionEndDateByDuration(subscription) {
  var trial = subscription.trial,
      start = subscription.start,
      trialPeriod = subscription.trialPeriod,
      days = subscription.days;
  var daysInMs = (trial ? trialPeriod : days) * ONE_DAY_MILLISECONDS;
  return getDateInMs(start) + daysInMs;
};

exports.getSubscriptionEndDateByDuration = getSubscriptionEndDateByDuration;
var getLastSubscriptionEndDate = (0, _reselect.createSelector)([getLastSubscription], function (subscription) {
  if (subscription) {
    var cancelledAt = subscription.cancelledAt;

    if (cancelledAt) {
      return getDateInMs(cancelledAt);
    }

    return getSubscriptionEndDateByDuration(subscription);
  }

  return -1;
});
exports.getLastSubscriptionEndDate = getLastSubscriptionEndDate;
var getMaxPremiumSeats = (0, _reselect.createSelector)([getLastSubscription], function (subscription) {
  return subscription && subscription.plan && subscription.plan.maxUnits || 0;
});
exports.getMaxPremiumSeats = getMaxPremiumSeats;

var getCountdownBannerMessageText = function getCountdownBannerMessageText(trial, status, expirationDays) {
  if (expirationDays === 0 && status.active) return trial ? 'trialEndsToday' : 'subscriptionEndsToday';

  if (trial) {
    return !status.active ? 'trialEnded' : 'trialEnds';
  }

  return !status.active ? 'subscriptionEnded' : 'subscriptionEnds';
};

var getUserSelectedPremiumId = function getUserSelectedPremiumId(state) {
  return state.user.data.premium && state.user.data.premium.active.id;
};

var getCountDownBannerSubscriptionData = (0, _reselect.createSelector)([getLastSubscription, getLastSubscriptionEndDate, getUserSelectedPremiumId], function (lastSubscription, lastSubscriptionEndDate, userSelectedPremiumId) {
  if (lastSubscription && lastSubscriptionEndDate) {
    var autoRenewal = lastSubscription.autoRenewal,
        trial = lastSubscription.trial,
        status = lastSubscription.status,
        mandatorId = lastSubscription.mandatorId;
    var expirationDays = Math.round((new Date(lastSubscriptionEndDate) - new Date()) / ONE_DAY_MILLISECONDS);
    return {
      selectedPremiumIsOwnPremium: userSelectedPremiumId === mandatorId.toString(10),
      autoRenewal: autoRenewal,
      trial: trial,
      expirationDays: expirationDays,
      isExpiredSub: !status.active,
      countdownBannerMessageText: getCountdownBannerMessageText(trial, status, expirationDays),
      isPrivateSubscription: isPrivateSubscription(lastSubscription)
    };
  }

  return null;
});
/**
 * Returns whether user is eligible for a free trial.
 * @param {Object} state
 * @return {boolean} true if eligible
 */

exports.getCountDownBannerSubscriptionData = getCountDownBannerSubscriptionData;
var isEligibleForFreeTrial = (0, _reselect.createSelector)([getLastSubscription], function (sub) {
  return sub ? !(sub.status.active || sub.trial || sub.trialAvailed) : true;
});
exports.isEligibleForFreeTrial = isEligibleForFreeTrial;