Add loading overlay for fetch operation #9

Merged
tcoh merged 1 commits from feature/fetch-loading-indication into master 2022-08-31 20:38:13 +00:00
2 changed files with 22 additions and 0 deletions

View File

@ -333,6 +333,7 @@ i {
/* Expression set page */ /* Expression set page */
.page-loading { .page-loading {
position: relative;
height: 100%; height: 100%;
width: 100%; width: 100%;
display: flex; display: flex;
@ -341,13 +342,25 @@ i {
} }
.page-with-padding { .page-with-padding {
position: relative;
padding: var(--gap-small) var(--gap-medium) var(--gap-medium); padding: var(--gap-small) var(--gap-medium) var(--gap-medium);
} }
.page-with-bottom-navigation { .page-with-bottom-navigation {
position: relative;
display: grid; display: grid;
grid-template-columns: 1fr; grid-template-columns: 1fr;
grid-template-rows: calc(100% - 88px) 80px; grid-template-rows: calc(100% - 88px) 80px;
grid-gap: var(--gap-small); grid-gap: var(--gap-small);
height: 100%; height: 100%;
} }
.loading-overlay {
position: absolute;
animation: fadein linear var(--duration-short);
background-color: lavender;
top: 0;
left: 0;
width: 100%;
height: 100%;
}

View File

@ -8,6 +8,7 @@ import {
setWiktionaryWordLanguage, setWiktionaryWordLanguage,
} from "../../lib/wiktionary"; } from "../../lib/wiktionary";
import { addExpressionWithRelationships, Expression } from "../../model"; import { addExpressionWithRelationships, Expression } from "../../model";
import { LoadingView } from "../LoadingView";
export function AddExpressionView() { export function AddExpressionView() {
const [prompt, setPrompt] = useState(""); const [prompt, setPrompt] = useState("");
@ -16,6 +17,7 @@ export function AddExpressionView() {
const [submitStatus, setSubmitStatus] = const [submitStatus, setSubmitStatus] =
useState<string | undefined>(undefined); useState<string | undefined>(undefined);
const [error, setError] = useState<any>(undefined); const [error, setError] = useState<any>(undefined);
const [loading, setLoading] = useState<boolean>(false);
// TODO waiting fetch completion elements // TODO waiting fetch completion elements
@ -82,6 +84,7 @@ export function AddExpressionView() {
disabled={prompt === ""} disabled={prompt === ""}
onClick={async (event) => { onClick={async (event) => {
event.preventDefault(); event.preventDefault();
setLoading(true);
try { try {
// `https://en.wiktionary.org/w/api.php?action=parse&format=json&prop=text&page=${query}`; // `https://en.wiktionary.org/w/api.php?action=parse&format=json&prop=text&page=${query}`;
const url = URL.format({ const url = URL.format({
@ -113,6 +116,7 @@ export function AddExpressionView() {
setError(error); setError(error);
} finally { } finally {
setSubmitStatus(undefined); setSubmitStatus(undefined);
setLoading(false);
} }
}} }}
> >
@ -162,6 +166,11 @@ export function AddExpressionView() {
</> </>
)} )}
</section> </section>
{loading ? (
<div className="loading-overlay">
<LoadingView />
</div>
) : null}
</form> </form>
); );
} }