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/lib-paywall / src / utils / checkRules.js
Size: Mime:
import { setUserDataRequest } from '../methods/requests';

import { businessPremiumPlans, inactivePlans, paywallSegments } from '../constants/segments';
import { bannerPostfix } from '../constants/tracking';
import { modalTypes } from '../constants/paywall';

export default ({ segments, activeCalendarMax, activeCalendarCount, appSettings = {}, token, apiHost }) => {
  const isBusinessPlan = segments.some(segment =>
    businessPremiumPlans.some(businessPremiumPlan => businessPremiumPlan === segment)
  );

  const isLimitOfCalendars = activeCalendarCount >= activeCalendarMax;
  const isPremiumActive = segments.some(segment => segment === paywallSegments.PRIVATE_PREMIUM_ACTIVE);
  const isPremiumInTrial = segments.some(segment => segment === paywallSegments.PRIVATE_PREMIUM_IN_TRIAL);
  const isUserHadTrial = segments.some(segment => inactivePlans.some(inactivePlan => inactivePlan === segment));
  const { isUpgradeToBusinessModalDisabled } = appSettings;

  switch (true) {
    case isBusinessPlan: {
      return { shouldOpenModal: false };
    }

    case isPremiumActive && !isUpgradeToBusinessModalDisabled: {
      setUserDataRequest({
        data: { ...appSettings, isUpgradeToBusinessModalDisabled: !isUpgradeToBusinessModalDisabled },
        token,
        apiHost,
      });

      return {
        shouldOpenModal: true,
        modalType: modalTypes.getPremium,
        trackingEventPostfix: bannerPostfix.privateSubscription,
      };
    }

    case !isLimitOfCalendars: {
      return { shouldOpenModal: false };
    }

    case isPremiumActive: {
      return {
        shouldOpenModal: true,
        modalType: modalTypes.getPlanAfterLimit,
        trackingEventPostfix: bannerPostfix.privateSubscription,
      };
    }

    case isPremiumInTrial: {
      return {
        shouldOpenModal: true,
        modalType: modalTypes.upgradePrivateTrial,
        trackingEventPostfix: bannerPostfix.privateTrial,
      };
    }

    case isUserHadTrial: {
      return {
        shouldOpenModal: true,
        modalType: modalTypes.getPremiumAfterLimit,
        trackingEventPostfix: bannerPostfix.freeNotEligibleForTrial,
      };
    }

    default: {
      return {
        shouldOpenModal: true,
        modalType: modalTypes.getTrial,
        trackingEventPostfix: bannerPostfix.freeEligibleForTrial,
      };
    }
  }
};