Repository URL to install this package:
|
Version:
2.0.1 ▾
|
"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;