Skip to content

Commit e718961

Browse files
committed
Flag to disable welcome scan UI
1 parent 059d5e3 commit e718961

File tree

11 files changed

+79
-18
lines changed

11 files changed

+79
-18
lines changed

src/app/(proper_react)/(redesign)/(authenticated)/user/(dashboard)/dashboard/View.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -538,6 +538,7 @@ export const View = (props: Props) => {
538538
isEligibleForPremium={canSubscribeToPremium({
539539
user: props.user,
540540
countryCode,
541+
enabledFeatureFlags: props.enabledFeatureFlags,
541542
})}
542543
isEligibleForFreeScan={props.isEligibleForFreeScan}
543544
hasExposures={hasExposures}

src/app/(proper_react)/(redesign)/(authenticated)/user/(dashboard)/dashboard/[[...slug]]/page.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,7 @@ export default async function DashboardPage(props: Props) {
140140
canSubscribeToPremium({
141141
user: session.user,
142142
countryCode,
143+
enabledFeatureFlags,
143144
})))
144145
) {
145146
return redirect("/user/welcome");
@@ -153,8 +154,11 @@ export default async function DashboardPage(props: Props) {
153154
const userIsEligibleForFreeScan = await isEligibleForFreeOnerepScan(
154155
session.user,
155156
countryCode,
157+
enabledFeatureFlags,
156158
);
157-
const userIsEligibleForPremium = isEligibleForPremium(countryCode);
159+
const userIsEligibleForPremium =
160+
isEligibleForPremium(countryCode) &&
161+
(!enabledFeatureFlags.includes("FreeOnly") || isPremiumUser);
158162

159163
const monthlySubscriptionUrl = getPremiumSubscriptionUrl({
160164
type: "monthly",

src/app/(proper_react)/(redesign)/(authenticated)/user/(dashboard)/settings/[[...slug]]/page.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,7 @@ export default async function SettingsPage(props: Props) {
135135
const isEligibleForPremium = canSubscribeToPremium({
136136
user: session.user,
137137
countryCode,
138+
enabledFeatureFlags,
138139
});
139140

140141
const userAnnouncements = await initializeUserAnnouncements(session.user);

src/app/(proper_react)/(redesign)/(authenticated)/user/welcome/[[...slug]]/page.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ export default async function Onboarding(props: Props) {
6868
const userIsEligible = await isEligibleForFreeOnerepScan(
6969
session.user,
7070
countryCode,
71+
enabledFeatureFlags,
7172
);
7273

7374
if (!userIsEligible) {

src/app/(proper_react)/(redesign)/Shell/ShellNavbarList.tsx

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -39,23 +39,25 @@ export const NavbarList = (props: {
3939
{l10n.getString("main-nav-link-dashboard-label")}
4040
</PageLink>
4141
</li>
42-
{props.enabledFeatureFlags.includes("EditScanProfileDetails") && (
43-
<li key="settings-edit-info">
44-
<PageLink
45-
href="/user/settings/edit-info"
46-
activeClassName={styles.isActive}
47-
hasTelemetry={{ link_id: "navigation_edit_info" }}
48-
>
49-
<ScanInfoIcon alt="" />
50-
{l10n.getString("settings-tab-label-update-scan-info")}
51-
</PageLink>
52-
</li>
53-
)}
42+
{props.enabledFeatureFlags.includes("EditScanProfileDetails") &&
43+
!props.enabledFeatureFlags.includes("FreeOnly") && (
44+
<li key="settings-edit-info">
45+
<PageLink
46+
href="/user/settings/edit-info"
47+
activeClassName={styles.isActive}
48+
hasTelemetry={{ link_id: "navigation_edit_info" }}
49+
>
50+
<ScanInfoIcon alt="" />
51+
{l10n.getString("settings-tab-label-update-scan-info")}
52+
</PageLink>
53+
</li>
54+
)}
5455
</ul>
5556
<hr />
5657
<strong>{l10n.getString("main-nav-link-settings-label")}</strong>
5758
<ul className="noList">
58-
{!props.enabledFeatureFlags.includes("EditScanProfileDetails") && (
59+
{(!props.enabledFeatureFlags.includes("EditScanProfileDetails") ||
60+
props.enabledFeatureFlags.includes("FreeOnly")) && (
5961
<li key="settings-edit-info">
6062
<PageLink
6163
href="/user/settings/edit-info"

src/app/api/v1/user/welcome-scan/create/route.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import {
3030
getAcceptLangHeaderInServerComponents,
3131
getL10n,
3232
} from "../../../../../functions/l10n/serverComponents";
33+
import { getEnabledFeatureFlags } from "../../../../../../db/tables/featureFlags";
3334

3435
export interface WelcomeScanBody {
3536
success: boolean;
@@ -63,7 +64,15 @@ export async function POST(
6364
countryCode,
6465
locale: getLocale(getL10n(await getAcceptLangHeaderInServerComponents())),
6566
});
66-
const eligible = await isEligibleForFreeOnerepScan(session.user, countryCode);
67+
const enabledFeatureFlags = await getEnabledFeatureFlags({
68+
isSignedOut: false,
69+
email: session.user.email,
70+
});
71+
const eligible = await isEligibleForFreeOnerepScan(
72+
session.user,
73+
countryCode,
74+
enabledFeatureFlags,
75+
);
6776
if (!eligible) {
6877
logger.warn("scan_created_warn", {
6978
message: "User is not eligible for feature",

src/app/components/client/toolbar/UpsellBadge.tsx

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,14 @@ export function UpsellBadge(props: UpsellBadgeProps) {
163163

164164
const { user } = session.data;
165165
const userHasPremium = hasPremium(user);
166-
if (userHasPremium || canSubscribeToPremium({ user, countryCode })) {
166+
if (
167+
userHasPremium ||
168+
canSubscribeToPremium({
169+
user,
170+
countryCode,
171+
enabledFeatureFlags: props.enabledFeatureFlags,
172+
})
173+
) {
167174
return <UpsellToggleLinkButton {...props} hasPremium={userHasPremium} />;
168175
}
169176

src/app/functions/server/getRelevantGuidedSteps.test.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -456,6 +456,27 @@ describe("getNextGuidedStep", () => {
456456
});
457457
});
458458

459+
it("does not link to the scan even if the user has not run a scan yet, if the `FreeOnly` flag is enabled", () => {
460+
expect(
461+
getNextGuidedStep(
462+
{
463+
countryCode: "us",
464+
latestScanData: {
465+
scan: null,
466+
results: [],
467+
},
468+
subscriberBreaches: [],
469+
user: {
470+
471+
},
472+
},
473+
["FreeOnly"],
474+
),
475+
).not.toMatchObject({
476+
id: "Scan",
477+
});
478+
});
479+
459480
it("links to the scan if the user has a scan in progress and not all scan results are resolved", () => {
460481
expect(
461482
getNextGuidedStep(

src/app/functions/server/getRelevantGuidedSteps.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { LatestOnerepScanData } from "../../../db/tables/onerep_scans";
77
import { SubscriberBreach } from "../../../utils/subscriberBreaches";
88
import { BreachDataTypes, HighRiskDataTypes } from "../universal/breach";
99
import { FeatureFlagName } from "../../../db/tables/featureFlags";
10+
import { hasPremium } from "../universal/user";
1011

1112
export type StepDeterminationData = {
1213
user: Session["user"];
@@ -164,7 +165,10 @@ export function isEligibleForStep(
164165
/* c8 ignore stop */
165166

166167
if (stepId === "Scan") {
167-
return data.countryCode === "us";
168+
return (
169+
data.countryCode === "us" &&
170+
(!enabledFeatureFlags?.includes("FreeOnly") || hasPremium(data.user))
171+
);
168172
}
169173

170174
if (stepId === "HighRiskSsn") {

src/app/functions/server/onerep.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import { logger } from "./logging";
1616
import { hasPremium } from "../universal/user.ts";
1717
import { OnerepProfileAddress } from "knex/types/tables";
1818
import { isUsingMockONEREPEndpoint } from "../universal/mock.ts";
19+
import type { FeatureFlagName } from "../../../db/tables/featureFlags";
1920

2021
export const monthlyScansQuota = parseInt(
2122
(process.env.MONTHLY_SCANS_QUOTA as string) ?? "0",
@@ -460,10 +461,14 @@ async function listScanResults(
460461
export async function isEligibleForFreeScan(
461462
user: Session["user"],
462463
countryCode: string,
464+
enabledFeatureFlags: FeatureFlagName[],
463465
) {
464466
if (countryCode !== "us") {
465467
return false;
466468
}
469+
if (enabledFeatureFlags.includes("FreeOnly") && !hasPremium(user)) {
470+
return false;
471+
}
467472

468473
if (!user?.subscriber?.id) {
469474
throw new Error("No session with a known subscriber found");

0 commit comments

Comments
 (0)