From 8732e5004704e1355d0981aa06d7a5a9929c8c14 Mon Sep 17 00:00:00 2001 From: miloschwartz Date: Tue, 23 Dec 2025 13:33:24 -0500 Subject: [PATCH] add flag to disable product help banners --- server/lib/config.ts | 4 ++++ server/lib/readConfigFile.ts | 3 ++- src/components/DismissableBanner.tsx | 9 ++++++++- src/lib/pullEnv.ts | 6 +++++- src/lib/types/env.ts | 1 + 5 files changed, 20 insertions(+), 3 deletions(-) diff --git a/server/lib/config.ts b/server/lib/config.ts index 405db2d1..d3931ec3 100644 --- a/server/lib/config.ts +++ b/server/lib/config.ts @@ -84,6 +84,10 @@ export class Config { ?.disable_basic_wireguard_sites ? "true" : "false"; + process.env.FLAGS_DISABLE_PRODUCT_HELP_BANNERS = parsedConfig.flags + ?.disable_product_help_banners + ? "true" + : "false"; process.env.PRODUCT_UPDATES_NOTIFICATION_ENABLED = parsedConfig.app .notifications.product_updates diff --git a/server/lib/readConfigFile.ts b/server/lib/readConfigFile.ts index da567820..90ebdc89 100644 --- a/server/lib/readConfigFile.ts +++ b/server/lib/readConfigFile.ts @@ -330,7 +330,8 @@ export const configSchema = z enable_integration_api: z.boolean().optional(), disable_local_sites: z.boolean().optional(), disable_basic_wireguard_sites: z.boolean().optional(), - disable_config_managed_domains: z.boolean().optional() + disable_config_managed_domains: z.boolean().optional(), + disable_product_help_banners: z.boolean().optional() }) .optional(), dns: z diff --git a/src/components/DismissableBanner.tsx b/src/components/DismissableBanner.tsx index 9d8b246e..c4230c54 100644 --- a/src/components/DismissableBanner.tsx +++ b/src/components/DismissableBanner.tsx @@ -1,9 +1,10 @@ "use client"; -import React, { useState, useEffect, type ReactNode } from "react"; +import React, { useState, useEffect, type ReactNode, useEffectEvent } from "react"; import { Card, CardContent } from "@app/components/ui/card"; import { X } from "lucide-react"; import { useTranslations } from "next-intl"; +import { useEnvContext } from "@app/hooks/useEnvContext"; type DismissableBannerProps = { storageKey: string; @@ -25,6 +26,12 @@ export const DismissableBanner = ({ const [isDismissed, setIsDismissed] = useState(true); const t = useTranslations(); + const { env } = useEnvContext(); + + if (env.flags.disableProductHelpBanners) { + return null; + } + useEffect(() => { const dismissedData = localStorage.getItem(storageKey); if (dismissedData) { diff --git a/src/lib/pullEnv.ts b/src/lib/pullEnv.ts index dbe47bd5..ed0057de 100644 --- a/src/lib/pullEnv.ts +++ b/src/lib/pullEnv.ts @@ -59,7 +59,11 @@ export function pullEnv(): Env { hideSupporterKey: process.env.HIDE_SUPPORTER_KEY === "true" ? true : false, usePangolinDns: - process.env.USE_PANGOLIN_DNS === "true" ? true : false + process.env.USE_PANGOLIN_DNS === "true" ? true : false, + disableProductHelpBanners: + process.env.FLAGS_DISABLE_PRODUCT_HELP_BANNERS === "true" + ? true + : false }, branding: { diff --git a/src/lib/types/env.ts b/src/lib/types/env.ts index e40ac5d3..1f54f680 100644 --- a/src/lib/types/env.ts +++ b/src/lib/types/env.ts @@ -33,6 +33,7 @@ export type Env = { disableBasicWireguardSites: boolean; hideSupporterKey: boolean; usePangolinDns: boolean; + disableProductHelpBanners: boolean; }; branding: { appName?: string;