mirror of
https://github.com/XFox111/my-website.git
synced 2026-04-22 07:28:01 +03:00
61 lines
1.6 KiB
TypeScript
61 lines
1.6 KiB
TypeScript
import ChatWarningRegular from "@fluentui/svg-icons/icons/chat_warning_24_regular.svg";
|
|
import React from "react";
|
|
import cls from "./AlertMessage.module.scss";
|
|
|
|
/**
|
|
* This alert box displays a custom message at the top of the homepage.
|
|
*
|
|
* It retrieves the message from a text file located at ALERT_TEXT_URL.
|
|
* Useful when needed to display a quick urgent message without recompiling the website.
|
|
*
|
|
* The message is shown when following criterias are met:
|
|
* - ALERT_TEXT_URL variable is set
|
|
* - The file located at ALERT_TEXT_URL is accessible, not empty, and returns successfull HTTP status code (2xx)
|
|
*/
|
|
|
|
async function fetchAlert(): Promise<[string, string, string] | null>
|
|
{
|
|
if (!process.env.ALERT_TEXT_URL)
|
|
return null;
|
|
|
|
try
|
|
{
|
|
const response: Response = await fetch(process.env.ALERT_TEXT_URL, { cache: "no-cache" });
|
|
const alertText: string = await response.text();
|
|
|
|
if (!response.ok || !alertText)
|
|
return null;
|
|
|
|
const title: string = alertText.split("\n", 1)[0].trim();
|
|
const message: string = alertText.substring(title.length + 1).trim();
|
|
|
|
return [alertText, title, message];
|
|
}
|
|
catch
|
|
{
|
|
return null;
|
|
}
|
|
}
|
|
|
|
const AlertMessage: React.FC = async () =>
|
|
{
|
|
const result = await fetchAlert();
|
|
|
|
if (!result)
|
|
return null;
|
|
|
|
const [alertText, title, message] = result;
|
|
|
|
return (
|
|
<div role="alert" className={ cls.alertBox } aria-label={ alertText }>
|
|
<ChatWarningRegular className={ cls.icon } />
|
|
<div>
|
|
<p className={ cls.title }>{ title }</p>
|
|
<p className={ cls.message } dangerouslySetInnerHTML={ { __html: message } } />
|
|
</div>
|
|
</div>
|
|
);
|
|
};
|
|
|
|
export default AlertMessage;
|