From 54017cbffa58219a679e01fa9e70612fd2bbd501 Mon Sep 17 00:00:00 2001 From: "Willow (GHOST)" Date: Thu, 28 Nov 2024 11:43:34 +0000 Subject: [PATCH] feat: always show alerts tab and lock email alerts when keys are missing (#1478) --- .../app/components/navigation/SideMenu.tsx | 18 ++++------ apps/webapp/app/features.server.ts | 2 -- apps/webapp/app/hooks/useFeatures.ts | 2 +- .../route.tsx | 34 +++++++++++++------ 4 files changed, 31 insertions(+), 25 deletions(-) diff --git a/apps/webapp/app/components/navigation/SideMenu.tsx b/apps/webapp/app/components/navigation/SideMenu.tsx index 668e9f211..6435715dd 100644 --- a/apps/webapp/app/components/navigation/SideMenu.tsx +++ b/apps/webapp/app/components/navigation/SideMenu.tsx @@ -459,8 +459,6 @@ function V3ProjectSideMenu({ project: SideMenuProject; organization: MatchedOrganization; }) { - const { alertsEnabled } = useFeatures(); - return ( <> @@ -520,15 +518,13 @@ function V3ProjectSideMenu({ to={v3DeploymentsPath(organization, project)} data-action="deployments" /> - {alertsEnabled && ( - - )} + ("root"); - return routeMatch?.features ?? { isManagedCloud: false, v3Enabled: false, alertsEnabled: false }; + return routeMatch?.features ?? { isManagedCloud: false, v3Enabled: false }; } diff --git a/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.v3.$projectParam.alerts.new/route.tsx b/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.v3.$projectParam.alerts.new/route.tsx index 0012f52e4..4ef306f1d 100644 --- a/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.v3.$projectParam.alerts.new/route.tsx +++ b/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.v3.$projectParam.alerts.new/route.tsx @@ -23,6 +23,7 @@ import { Label } from "~/components/primitives/Label"; import SegmentedControl from "~/components/primitives/SegmentedControl"; import { Select, SelectItem } from "~/components/primitives/Select"; import { InfoIconTooltip } from "~/components/primitives/Tooltip"; +import { env } from "~/env.server"; import { useOrganization } from "~/hooks/useOrganizations"; import { useProject } from "~/hooks/useProject"; import { redirectWithSuccessMessage } from "~/models/message.server"; @@ -150,9 +151,13 @@ export async function loader({ request, params }: LoaderFunctionArgs) { const url = new URL(request.url); const option = url.searchParams.get("option"); + const emailAlertsEnabled = + env.ALERT_FROM_EMAIL !== undefined && env.ALERT_RESEND_API_KEY !== undefined; + return typedjson({ ...results, option: option === "slack" ? ("SLACK" as const) : undefined, + emailAlertsEnabled, }); } @@ -200,7 +205,7 @@ export const action = async ({ request, params }: ActionFunctionArgs) => { export default function Page() { const [isOpen, setIsOpen] = useState(false); - const { slack, option } = useTypedLoaderData(); + const { slack, option, emailAlertsEnabled } = useTypedLoaderData(); const lastSubmission = useActionData(); const navigation = useNavigation(); const navigate = useNavigate(); @@ -271,16 +276,23 @@ export default function Page() { {currentAlertChannel === "EMAIL" ? ( - - - - {channelValue.error} - + emailAlertsEnabled ? ( + + + + {channelValue.error} + + ) : ( + + Email integration is not available. Please contact your organization + administrator. + + ) ) : currentAlertChannel === "SLACK" ? ( {slack.status === "READY" ? (