feat: add optional spinner into toast message

This commit is contained in:
Arnošt Pleskot 2023-06-04 11:56:48 +02:00
parent e1ff9791f2
commit ef190ebf30
No known key found for this signature in database
4 changed files with 29 additions and 1 deletions

View File

@ -2377,6 +2377,7 @@ class App extends React.Component<AppProps, AppState> {
toast: {
message: string;
closable?: boolean;
spinner?: boolean;
duration?: number;
} | null,
) => {

View File

@ -25,6 +25,17 @@
white-space: pre-wrap;
}
.Toast__message--spinner {
padding: 0 3rem;
}
.Toast__spinner {
position: absolute;
left: 1.5rem;
top: 50%;
margin-top: -8px;
}
.close {
position: absolute;
top: 0;

View File

@ -1,5 +1,7 @@
import clsx from "clsx";
import { useCallback, useEffect, useRef } from "react";
import { CloseIcon } from "./icons";
import Spinner from "./Spinner";
import "./Toast.scss";
import { ToolButton } from "./ToolButton";
@ -9,12 +11,14 @@ export const Toast = ({
message,
onClose,
closable = false,
spinner = true,
// To prevent autoclose, pass duration as Infinity
duration = DEFAULT_TOAST_TIMEOUT,
}: {
message: string;
onClose: () => void;
closable?: boolean;
spinner?: boolean;
duration?: number;
}) => {
const timerRef = useRef<number>(0);
@ -44,7 +48,18 @@ export const Toast = ({
onMouseEnter={onMouseEnter}
onMouseLeave={onMouseLeave}
>
<p className="Toast__message">{message}</p>
{spinner && (
<div className="Toast__spinner">
<Spinner />
</div>
)}
<p
className={clsx("Toast__message", {
"Toast__message--spinner": spinner,
})}
>
{message}
</p>
{closable && (
<ToolButton
icon={CloseIcon}

View File

@ -343,6 +343,7 @@ class Collab extends PureComponent<Props, CollabState> {
this.excalidrawAPI.setToast({
message: t("toast.reconnectRoomServer"),
duration: Infinity,
spinner: true,
closable: false,
});
}