diff --git a/platforms/blabsy/.eslintrc.json b/platforms/blabsy/.eslintrc.json index ee7e5000..632c1d85 100644 --- a/platforms/blabsy/.eslintrc.json +++ b/platforms/blabsy/.eslintrc.json @@ -1,14 +1,14 @@ { + "root": true, "parser": "@typescript-eslint/parser", "parserOptions": { - "project": "tsconfig.json" + "project": true }, "plugins": ["@typescript-eslint"], "extends": [ "eslint:recommended", "plugin:import/typescript", "plugin:@typescript-eslint/recommended", - "plugin:@typescript-eslint/recommended-requiring-type-checking", "next/core-web-vitals" ], "settings": { diff --git a/platforms/blabsy/src/components/common/maintenance-banner.tsx b/platforms/blabsy/src/components/common/maintenance-banner.tsx index 4612868d..3f4b364d 100644 --- a/platforms/blabsy/src/components/common/maintenance-banner.tsx +++ b/platforms/blabsy/src/components/common/maintenance-banner.tsx @@ -6,8 +6,11 @@ interface Motd { message: string; } +const DISMISSED_KEY = 'maintenance-banner-dismissed'; + export function MaintenanceBanner(): JSX.Element | null { const [motd, setMotd] = useState(null); + const [isDismissed, setIsDismissed] = useState(false); useEffect(() => { const fetchMotd = async () => { @@ -15,6 +18,12 @@ export function MaintenanceBanner(): JSX.Element | null { const registryUrl = process.env.NEXT_PUBLIC_REGISTRY_URL || 'http://localhost:4321'; const response = await axios.get(`${registryUrl}/motd`); setMotd(response.data); + + // Check if this message has been dismissed + if (response.data.status === 'maintenance') { + const dismissed = localStorage.getItem(DISMISSED_KEY); + setIsDismissed(dismissed === response.data.message); + } } catch (error) { console.error('Failed to fetch motd:', error); } @@ -23,13 +32,40 @@ export function MaintenanceBanner(): JSX.Element | null { void fetchMotd(); }, []); - if (motd?.status !== 'maintenance') { + const dismissBanner = (): void => { + if (motd?.message) { + localStorage.setItem(DISMISSED_KEY, motd.message); + setIsDismissed(true); + } + }; + + if (motd?.status !== 'maintenance' || isDismissed) { return null; } return ( -
- ⚠️ {motd.message} +
+ ⚠️ {motd.message} +
); } diff --git a/platforms/eVoting/src/components/MaintenanceBanner.tsx b/platforms/eVoting/src/components/MaintenanceBanner.tsx index a97d0e3f..e6920739 100644 --- a/platforms/eVoting/src/components/MaintenanceBanner.tsx +++ b/platforms/eVoting/src/components/MaintenanceBanner.tsx @@ -8,8 +8,11 @@ interface Motd { message: string; } +const DISMISSED_KEY = 'maintenance-banner-dismissed'; + export function MaintenanceBanner() { const [motd, setMotd] = useState(null); + const [isDismissed, setIsDismissed] = useState(false); useEffect(() => { const fetchMotd = async () => { @@ -17,6 +20,12 @@ export function MaintenanceBanner() { const registryUrl = process.env.NEXT_PUBLIC_REGISTRY_URL || 'http://localhost:4321'; const response = await axios.get(`${registryUrl}/motd`); setMotd(response.data); + + // Check if this message has been dismissed + if (response.data.status === 'maintenance') { + const dismissed = localStorage.getItem(DISMISSED_KEY); + setIsDismissed(dismissed === response.data.message); + } } catch (error) { console.error('Failed to fetch motd:', error); } @@ -25,13 +34,40 @@ export function MaintenanceBanner() { fetchMotd(); }, []); - if (motd?.status !== 'maintenance') { + const dismissBanner = () => { + if (motd?.message) { + localStorage.setItem(DISMISSED_KEY, motd.message); + setIsDismissed(true); + } + }; + + if (motd?.status !== 'maintenance' || isDismissed) { return null; } return ( -
- ⚠️ {motd.message} +
+ ⚠️ {motd.message} +
); } diff --git a/platforms/group-charter-manager/src/components/MaintenanceBanner.tsx b/platforms/group-charter-manager/src/components/MaintenanceBanner.tsx index a97d0e3f..e6920739 100644 --- a/platforms/group-charter-manager/src/components/MaintenanceBanner.tsx +++ b/platforms/group-charter-manager/src/components/MaintenanceBanner.tsx @@ -8,8 +8,11 @@ interface Motd { message: string; } +const DISMISSED_KEY = 'maintenance-banner-dismissed'; + export function MaintenanceBanner() { const [motd, setMotd] = useState(null); + const [isDismissed, setIsDismissed] = useState(false); useEffect(() => { const fetchMotd = async () => { @@ -17,6 +20,12 @@ export function MaintenanceBanner() { const registryUrl = process.env.NEXT_PUBLIC_REGISTRY_URL || 'http://localhost:4321'; const response = await axios.get(`${registryUrl}/motd`); setMotd(response.data); + + // Check if this message has been dismissed + if (response.data.status === 'maintenance') { + const dismissed = localStorage.getItem(DISMISSED_KEY); + setIsDismissed(dismissed === response.data.message); + } } catch (error) { console.error('Failed to fetch motd:', error); } @@ -25,13 +34,40 @@ export function MaintenanceBanner() { fetchMotd(); }, []); - if (motd?.status !== 'maintenance') { + const dismissBanner = () => { + if (motd?.message) { + localStorage.setItem(DISMISSED_KEY, motd.message); + setIsDismissed(true); + } + }; + + if (motd?.status !== 'maintenance' || isDismissed) { return null; } return ( -
- ⚠️ {motd.message} +
+ ⚠️ {motd.message} +
); } diff --git a/platforms/pictique/src/lib/fragments/MaintenanceBanner/MaintenanceBanner.svelte b/platforms/pictique/src/lib/fragments/MaintenanceBanner/MaintenanceBanner.svelte index 58b1ef09..2902eb12 100644 --- a/platforms/pictique/src/lib/fragments/MaintenanceBanner/MaintenanceBanner.svelte +++ b/platforms/pictique/src/lib/fragments/MaintenanceBanner/MaintenanceBanner.svelte @@ -4,20 +4,60 @@ import { PUBLIC_REGISTRY_URL } from '$env/static/public'; let motd = $state<{ status: 'up' | 'maintenance'; message: string } | null>(null); + let isDismissed = $state(false); + + const DISMISSED_KEY = 'maintenance-banner-dismissed'; + + function checkIfDismissed(message: string): boolean { + if (typeof window === 'undefined') return false; + const dismissed = localStorage.getItem(DISMISSED_KEY); + return dismissed === message; + } + + function dismissBanner() { + if (motd?.message) { + localStorage.setItem(DISMISSED_KEY, motd.message); + isDismissed = true; + } + } onMount(async () => { try { const registryUrl = PUBLIC_REGISTRY_URL || 'http://localhost:4321'; const response = await axios.get(`${registryUrl}/motd`); motd = response.data; + + if (motd?.status === 'maintenance') { + isDismissed = checkIfDismissed(motd.message); + } } catch (error) { console.error('Failed to fetch motd:', error); } }); -{#if motd?.status === 'maintenance'} -
- ⚠️ {motd.message} +{#if motd?.status === 'maintenance' && !isDismissed} +
+ ⚠️ {motd.message} +
{/if}