aboutsummaryrefslogtreecommitdiff
path: root/FrontEnd/src/views/common/alert
diff options
context:
space:
mode:
Diffstat (limited to 'FrontEnd/src/views/common/alert')
-rw-r--r--FrontEnd/src/views/common/alert/AlertHost.tsx50
-rw-r--r--FrontEnd/src/views/common/alert/alert.css32
-rw-r--r--FrontEnd/src/views/common/alert/alert.sass15
3 files changed, 59 insertions, 38 deletions
diff --git a/FrontEnd/src/views/common/alert/AlertHost.tsx b/FrontEnd/src/views/common/alert/AlertHost.tsx
index 949be7ed..ba6d6a0f 100644
--- a/FrontEnd/src/views/common/alert/AlertHost.tsx
+++ b/FrontEnd/src/views/common/alert/AlertHost.tsx
@@ -1,16 +1,13 @@
import React from "react";
import without from "lodash/without";
import { useTranslation } from "react-i18next";
-import { Alert } from "react-bootstrap";
+import classNames from "classnames";
-import {
- alertService,
- AlertInfoEx,
- kAlertHostId,
- AlertInfo,
-} from "@/services/alert";
+import { alertService, AlertInfoEx, AlertInfo } from "@/services/alert";
import { convertI18nText } from "@/common";
+import "./alert.css";
+
interface AutoCloseAlertProps {
alert: AlertInfo;
close: () => void;
@@ -52,29 +49,36 @@ export const AutoCloseAlert: React.FC<AutoCloseAlertProps> = (props) => {
};
return (
- <Alert
- className="m-3"
- variant={alert.type ?? "primary"}
+ <div
+ className={classNames(
+ "m-3 cru-alert",
+ "cru-" + (alert.type ?? "primary")
+ )}
onClick={cancelTimer}
- onClose={close}
- dismissible
>
- {(() => {
- const { message } = alert;
- if (typeof message === "function") {
- const Message = message;
- return <Message />;
- } else return convertI18nText(message, t);
- })()}
- </Alert>
+ <div className="cru-alert-content">
+ {(() => {
+ const { message, customMessage } = alert;
+ if (customMessage != null) {
+ return customMessage;
+ } else {
+ return convertI18nText(message, t);
+ }
+ })()}
+ </div>
+ <div className="cru-alert-close-button-container">
+ <i
+ className={classNames("icon-button bi-x cru-alert-close-button")}
+ onClick={close}
+ />
+ </div>
+ </div>
);
};
const AlertHost: React.FC = () => {
const [alerts, setAlerts] = React.useState<AlertInfoEx[]>([]);
- // react guarantee that state setters are stable, so we don't need to add it to dependency list
-
React.useEffect(() => {
const consume = (alert: AlertInfoEx): void => {
setAlerts((old) => [...old, alert]);
@@ -87,7 +91,7 @@ const AlertHost: React.FC = () => {
}, []);
return (
- <div id={kAlertHostId} className="alert-container">
+ <div className="alert-container">
{alerts.map((alert) => {
return (
<AutoCloseAlert
diff --git a/FrontEnd/src/views/common/alert/alert.css b/FrontEnd/src/views/common/alert/alert.css
new file mode 100644
index 00000000..328f5f9b
--- /dev/null
+++ b/FrontEnd/src/views/common/alert/alert.css
@@ -0,0 +1,32 @@
+.alert-container {
+ position: fixed;
+ z-index: 1040;
+}
+
+.cru-alert {
+ border-radius: 5px;
+ border: var(--cru-theme-color) 1px solid;
+ color: var(--cru-theme-t-color);
+ background-color: var(--cru-theme-r1-color);
+
+ display: flex;
+ overflow: hidden;
+}
+
+.cru-alert-content {
+ padding: 0.5em 2em;
+}
+
+.cru-alert-close-button-container {
+ margin-left: auto;
+ width: 2em;
+ text-align: center;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ background-color: var(--cru-theme-t-color);
+}
+
+.cru-alert-close-button {
+ color: var(--cru-theme-color);
+}
diff --git a/FrontEnd/src/views/common/alert/alert.sass b/FrontEnd/src/views/common/alert/alert.sass
deleted file mode 100644
index c3560b87..00000000
--- a/FrontEnd/src/views/common/alert/alert.sass
+++ /dev/null
@@ -1,15 +0,0 @@
-.alert-container
- position: fixed
- z-index: $zindex-popover
-
-@include media-breakpoint-up(sm)
- .alert-container
- bottom: 0
- right: 0
-
-@include media-breakpoint-down(sm)
- .alert-container
- bottom: 0
- right: 0
- left: 0
- text-align: center