• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

mozilla / fx-private-relay / eb3c159f-b9db-447e-9f07-80d64871396a

12 May 2025 01:52PM CUT coverage: 85.235%. Remained the same
eb3c159f-b9db-447e-9f07-80d64871396a

push

circleci

groovecoder
build(deps): bump django from 4.2.20 to 4.2.21

Bumps [django](https://github.com/django/django) from 4.2.20 to 4.2.21.
- [Commits](https://github.com/django/django/compare/4.2.20...4.2.21)

---
updated-dependencies:
- dependency-name: django
  dependency-version: 4.2.21
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>

2461 of 3599 branches covered (68.38%)

Branch coverage included in aggregate %.

17316 of 19604 relevant lines covered (88.33%)

9.69 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

75.0
/frontend/src/components/dashboard/CornerNotification.tsx
1
import { useInView } from "react-intersection-observer";
1✔
2
import styles from "./CornerNotification.module.scss";
1✔
3
import { CloseIcon } from "../Icons";
1✔
4
import Image from "../Image";
1✔
5
import { ProfileData } from "../../hooks/api/profile";
6
import { useLocalDismissal } from "../../hooks/localDismissal";
1✔
7
import UpsellBannerNonUs from "../../pages/accounts/images/upsell-banner-nonus.svg";
1✔
8
import { useGaViewPing } from "../../hooks/gaViewPing";
1✔
9
import { RuntimeData } from "../../hooks/api/runtimeData";
10
import { isFlagActive } from "../../functions/waffle";
1✔
11
import { useGaEvent } from "../../hooks/gaEvent";
1✔
12
import { useL10n } from "../../hooks/l10n";
1✔
13
import { LinkButton } from "../Button";
1✔
14
import { AliasData } from "../../hooks/api/aliases";
15

16
export type Props = {
17
  profile: ProfileData;
18
  runtimeData: RuntimeData;
19
  aliases: AliasData[];
20
};
21

22
export const CornerNotification = (props: Props) => {
45✔
23
  const l10n = useL10n();
45✔
24
  const [wrapperRef, wrapperIsInView] = useInView({ threshold: 1 });
45✔
25
  const runtimeData = props.runtimeData;
45✔
26
  const profile = props.profile;
45✔
27
  const dismissal = useLocalDismissal(
45✔
28
    `corner_notification_masks_upsell_${props.profile.id}`,
29
  );
30
  const aliases = props.aliases;
45✔
31
  const ctaRef = useGaViewPing({
45✔
32
    category: "Purchase Button",
33
    label: "4-mask-limit-upsell",
34
  });
35
  const gaEvent = useGaEvent();
45✔
36

37
  const title = l10n.getString(`upsell-banner-4-masks-us-heading-2`);
45✔
38
  const description = l10n.getString(`upsell-banner-4-masks-us-description-2`);
45✔
39

40
  if (
45!
41
    isFlagActive(runtimeData, "four_mask_limit_upsell") &&
45!
42
    !profile.has_premium &&
43
    !dismissal.isDismissed &&
44
    aliases.length === 4
45
  ) {
46
    return (
47
      <aside
48
        ref={wrapperRef}
49
        aria-label={title}
50
        className={`${styles.wrapper} ${
51
          wrapperIsInView ? styles["is-in-view"] : styles["is-out-of-view"]
×
52
        }`}
53
      >
54
        <div className={styles.card}>
55
          <div className={styles["card-header"]}>
56
            <button
57
              className={styles["close-button"]}
58
              onClick={() => dismissal.dismiss()}
×
59
            >
60
              <CloseIcon
61
                alt={l10n.getString("upsell-banner-4-masks-button-close-label")}
62
                width={20}
63
                height={20}
64
              />
65
            </button>
66
            <Image src={UpsellBannerNonUs} alt="" />
67
          </div>
68
          <div className={styles["card-content"]}>
69
            <p className={styles["card-title"]}>{title}</p>
70
            <p className={styles["card-description"]}>{description}</p>
71
            <LinkButton
72
              className={styles["card-cta"]}
73
              href="/premium/?utm_medium=referral&utm_source=relay-dashboard&utm_campaign=4-masks-modal#pricing"
74
              ref={ctaRef}
75
              onClick={() => {
76
                gaEvent({
×
77
                  category: "Purchase Button",
78
                  action: "Engage",
79
                  label: "4-mask-limit-upsell",
80
                });
81
              }}
82
            >
83
              {l10n.getString("upsell-banner-4-masks-us-cta")}
84
            </LinkButton>
85
          </div>
86
        </div>
87
      </aside>
88
    );
89
  }
90
};
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc