From 77cdd394b947a99b70654cd1f5aff3ee724b76fc Mon Sep 17 00:00:00 2001 From: Ariel Costas Guerrero Date: Thu, 1 Jan 2026 02:46:29 +0100 Subject: Add enmarcha announcement --- .../app/components/EnMarchaAnnouncement.tsx | 119 +++++++++++++++++++++ src/frontend/app/components/layout/AppShell.tsx | 5 + 2 files changed, 124 insertions(+) create mode 100644 src/frontend/app/components/EnMarchaAnnouncement.tsx (limited to 'src/frontend/app/components') diff --git a/src/frontend/app/components/EnMarchaAnnouncement.tsx b/src/frontend/app/components/EnMarchaAnnouncement.tsx new file mode 100644 index 0000000..0e7d0dd --- /dev/null +++ b/src/frontend/app/components/EnMarchaAnnouncement.tsx @@ -0,0 +1,119 @@ +import { AlertCircle, CheckCircle2, ExternalLink, Smartphone, X } from "lucide-react"; +import React from "react"; +import { useTranslation } from "react-i18next"; +import { Sheet } from "react-modal-sheet"; + +interface EnMarchaAnnouncementProps { + isOpen: boolean; + onClose: () => void; +} + +export const EnMarchaAnnouncement: React.FC = ({ + isOpen, + onClose, +}) => { + const { t } = useTranslation(); + + const features = [ + "feature_planner", + "feature_realtime", + "feature_operators", + "feature_ui", + "feature_more", + ]; + + return ( + + + + +
+
+

+ {t("enmarcha_announcement.title")} +

+ +
+ +
+
+ +

+ {t("enmarcha_announcement.discontinuation_notice")} +

+
+ +

+ {t("enmarcha_announcement.description")} +

+ +
+

+ {t("enmarcha_announcement.features_title")} +

+
    + {features.map((feature) => ( +
  • + + {t(`enmarcha_announcement.${feature}`)} +
  • + ))} +
+
+ + + {t("enmarcha_announcement.link_text")} + + +
+ +
+
+ +

+ {t("enmarcha_announcement.install_title")} +

+
+ +
+
+

Android

+
+

{t("enmarcha_announcement.android_chrome")}

+

{t("enmarcha_announcement.android_firefox")}

+
+
+ +
+

iOS

+

+ {t("enmarcha_announcement.ios_safari")} +

+
+
+
+ + +
+
+
+ +
+ ); +}; diff --git a/src/frontend/app/components/layout/AppShell.tsx b/src/frontend/app/components/layout/AppShell.tsx index afc19f3..1088035 100644 --- a/src/frontend/app/components/layout/AppShell.tsx +++ b/src/frontend/app/components/layout/AppShell.tsx @@ -1,9 +1,11 @@ import React, { useState } from "react"; import { Outlet } from "react-router"; +import { useEnMarchaAnnouncement } from "~/hooks/useEnMarchaAnnouncement"; import { PageTitleProvider, usePageTitleContext, } from "~/contexts/PageTitleContext"; +import { EnMarchaAnnouncement } from "../EnMarchaAnnouncement"; import { ThemeColorManager } from "../ThemeColorManager"; import "./AppShell.css"; import { Drawer } from "./Drawer"; @@ -13,6 +15,7 @@ import NavBar from "./NavBar"; const AppShellContent: React.FC = () => { const { title } = usePageTitleContext(); const [isDrawerOpen, setIsDrawerOpen] = useState(false); + const { isOpen, closeAnnouncement } = useEnMarchaAnnouncement(); return (
@@ -31,6 +34,8 @@ const AppShellContent: React.FC = () => {
+ +
); }; -- cgit v1.3