feat: delay initial loading message & tweak design (#5049)
This commit is contained in:
parent
4348c55c31
commit
55ccd5b79b
@ -124,26 +124,6 @@
|
|||||||
user-select: none;
|
user-select: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.LoadingMessage {
|
|
||||||
position: absolute;
|
|
||||||
top: 0;
|
|
||||||
right: 0;
|
|
||||||
bottom: 0;
|
|
||||||
left: 0;
|
|
||||||
z-index: 999;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
pointer-events: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.LoadingMessage span {
|
|
||||||
background-color: var(--button-gray-1);
|
|
||||||
border-radius: 5px;
|
|
||||||
padding: 0.8em 1.2em;
|
|
||||||
color: var(--popup-text-color);
|
|
||||||
font-size: 1.3em;
|
|
||||||
}
|
|
||||||
#root {
|
#root {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
-webkit-touch-callout: none;
|
-webkit-touch-callout: none;
|
||||||
@ -172,10 +152,6 @@
|
|||||||
<header>
|
<header>
|
||||||
<h1 class="visually-hidden">Excalidraw</h1>
|
<h1 class="visually-hidden">Excalidraw</h1>
|
||||||
</header>
|
</header>
|
||||||
<div id="root">
|
<div id="root"></div>
|
||||||
<div class="LoadingMessage">
|
|
||||||
<span>Loading scene...</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
@ -492,7 +492,7 @@ const LayerUI = ({
|
|||||||
|
|
||||||
const dialogs = (
|
const dialogs = (
|
||||||
<>
|
<>
|
||||||
{appState.isLoading && <LoadingMessage />}
|
{appState.isLoading && <LoadingMessage delay={250} />}
|
||||||
{appState.errorMessage && (
|
{appState.errorMessage && (
|
||||||
<ErrorDialog
|
<ErrorDialog
|
||||||
message={appState.errorMessage}
|
message={appState.errorMessage}
|
||||||
|
@ -1,10 +1,30 @@
|
|||||||
import { t } from "../i18n";
|
import { t } from "../i18n";
|
||||||
|
import { useState, useEffect } from "react";
|
||||||
|
import Spinner from "./Spinner";
|
||||||
|
|
||||||
|
export const LoadingMessage: React.FC<{ delay?: number }> = ({ delay }) => {
|
||||||
|
const [isWaiting, setIsWaiting] = useState(!!delay);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (!delay) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const timer = setTimeout(() => {
|
||||||
|
setIsWaiting(false);
|
||||||
|
}, delay);
|
||||||
|
return () => clearTimeout(timer);
|
||||||
|
}, [delay]);
|
||||||
|
|
||||||
|
if (isWaiting) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
export const LoadingMessage = () => {
|
|
||||||
// !! KEEP THIS IN SYNC WITH index.html !!
|
|
||||||
return (
|
return (
|
||||||
<div className="LoadingMessage">
|
<div className="LoadingMessage">
|
||||||
<span>{t("labels.loadingScene")}</span>
|
<div>
|
||||||
|
<Spinner />
|
||||||
|
</div>
|
||||||
|
<div className="LoadingMessage-text">{t("labels.loadingScene")}</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
@ -16,15 +16,17 @@
|
|||||||
left: 0;
|
left: 0;
|
||||||
z-index: 999;
|
z-index: 999;
|
||||||
display: flex;
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
}
|
|
||||||
|
|
||||||
.LoadingMessage span {
|
.Spinner {
|
||||||
background-color: var(--button-gray-1);
|
font-size: 2.8em;
|
||||||
border-radius: 5px;
|
}
|
||||||
padding: 0.8em 1.2em;
|
|
||||||
color: var(--popup-text-color);
|
.LoadingMessage-text {
|
||||||
font-size: 1.3em;
|
margin-top: 1em;
|
||||||
|
font-size: 0.8em;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user