getReasonToShowSurvey: async()

in src/js/popup/popup.js [1159:1250]


          getReasonToShowSurvey: async () => {
            let reasonToShow = null;
            const firstSeen = await popup.panel.survey.utils.useFirstSeen();
            const { premium } = await browser.storage.local.get("premium");
            const { profileID } = await browser.storage.local.get("profileID");
            const dismiss = popup.panel.survey.dismiss;
            const free1DayDismissal = await dismiss.free1DayDismissal(
              profileID
            );
            const free7DaysDismissal = await dismiss.free7DaysDismissal(
              profileID
            );
            const free30DaysDismissal = await dismiss.free30DaysDismissal(
              profileID
            );
            const free90DaysDismissal = await dismiss.free90DaysDismissal(
              profileID
            );
            const premium7DaysDismissal = await dismiss.premium7DaysDismissal(
              profileID
            );
            const premium30DaysDismissal = await dismiss.premium30DaysDismissal(
              profileID
            );
            const premium90DaysDismissal = await dismiss.premium90DaysDismissal(
              profileID
            );
            const { date_subscribed } = await browser.storage.local.get(
              "date_subscribed"
            );
            let isDismissed;

            if (premium && (date_subscribed || firstSeen instanceof Date)) {
              // There are two reasons why someone might not have a subscription date set:
              // - They subscribed before we started tracking that.
              // - They have Premium because they have a Mozilla email address.
              // In the latter case, their first visit date is effectively their
              // subscription date. In the former case, they will have had Premium for
              // a while, so they can be shown the survey too. Their first visit will
              // have been a while ago, so we'll just use that as a proxy for the
              // subscription date:
              const subscriptionDate = date_subscribed
                ? new Date(date_subscribed)
                : firstSeen;
              const daysSinceSubscription =
                (Date.now() - subscriptionDate.getTime()) / 1000 / 60 / 60 / 24;

              if (daysSinceSubscription >= 90) {
                isDismissed = await premium90DaysDismissal.isDismissed();
                if (!isDismissed) {
                  reasonToShow = "premium90days";
                }
              } else if (daysSinceSubscription >= 30) {
                isDismissed = await premium30DaysDismissal.isDismissed();
                if (!isDismissed) {
                  reasonToShow = "premium30days";
                }
              } else if (daysSinceSubscription >= 7) {
                isDismissed = await premium7DaysDismissal.isDismissed();
                if (!isDismissed) {
                  reasonToShow = "premium7days";
                }
              }
            } else if (!premium && firstSeen instanceof Date) {
              const daysSinceFirstSeen =
                (Date.now() - firstSeen.getTime()) / 1000 / 60 / 60 / 24;

              if (daysSinceFirstSeen >= 90) {
                isDismissed = await free90DaysDismissal.isDismissed();
                if (!isDismissed) {
                  reasonToShow = "free90days";
                }
              } else if (daysSinceFirstSeen >= 30) {
                isDismissed = await free30DaysDismissal.isDismissed();
                if (!isDismissed) {
                  reasonToShow = "free30days";
                }
              } else if (daysSinceFirstSeen >= 7) {
                isDismissed = await free7DaysDismissal.isDismissed();
                if (!isDismissed) {
                  reasonToShow = "free7days";
                }
              } else if (daysSinceFirstSeen > 1) {
                isDismissed = await free1DayDismissal.isDismissed();
                if (!isDismissed) {
                  reasonToShow = "free1day";
                }
              }
            }

            return reasonToShow;
          },