Skip to content

Commit 5aeb9a3

Browse files
committed
(frontend) nicer loading for 'shelf'
1 parent 1474506 commit 5aeb9a3

File tree

3 files changed

+19
-15
lines changed

3 files changed

+19
-15
lines changed

frontend/src/App.tsx

+3-5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { Routes, Route, Outlet, useParams, A } from '@solidjs/router';
2-
import { Component, For, Show, createResource, createSignal } from 'solid-js';
2+
import { Component, For, Show, Suspense, createResource, createSignal } from 'solid-js';
33
import Header from './components/header';
44
import { useApi } from './contexts/ApiProvider';
55
import ProtectedRoute from './components/protected_route';
@@ -115,9 +115,7 @@ const MainApp: Component = () => {
115115
})
116116
}}
117117
>
118-
<Show when={!booksById.loading && !notesById.loading} fallback={<LoadingBar />}>
119-
<Outlet />
120-
</Show>
118+
<Outlet />
121119
</DrawerProvider>
122120
</div>
123121
</div>
@@ -141,7 +139,7 @@ const MainApp: Component = () => {
141139
</ul>
142140
<li class="menu-title"><span>NOTES</span></li>
143141
<ul class="overflow-auto bg-base-100 flex-1 w-full rounded-lg">
144-
<Show when={!notesById.loading} fallback={<LoadingSpin />}>
142+
<Show when={!notesById.loading && !booksById.loading} fallback={<LoadingSpin />}>
145143
<For each={sortedNotes()}>
146144
{(note) => <li>
147145
<A

frontend/src/components/loading.tsx

+4
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@ export const LoadingSpin: Component = () => {
88
return <span class="loading loading-spinner m-auto block mt-2"></span>
99
}
1010

11+
export const LoadingRing: Component = () => {
12+
return <span class="loading loading-ring loading-ring-lg block m-auto"></span>
13+
}
14+
1115
type LoadingScreenProps = {
1216
message?: string
1317
}

frontend/src/pages/shelf.tsx

+12-10
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import NewNoteModal from '../components/modals/new_note';
1010
import UpdateBookModal from '../components/modals/edit_book';
1111
import UpdateNoteModal from '../components/modals/edit_note';
1212
import { useDrawer } from '../contexts/DrawerProvider';
13-
import { LoadingBar } from '../components/loading';
13+
import { LoadingRing } from '../components/loading';
1414
import { apiErrorIntoToast, useToast } from '../contexts/ToastProvider';
1515
import { ApiError } from '../core/api';
1616
import Icon from '../components/icon';
@@ -76,11 +76,13 @@ const Shelf: Component = () => {
7676
}
7777
})
7878

79+
const globalLoading = () => book.loading || note.loading || noteContent.loading
80+
7981
const breadcrumb: () => Breadcrumb = () => {
8082
return {
8183
username: params.username,
82-
bookSlug: book()?.name,
83-
noteSlug: note()?.name,
84+
bookSlug: globalLoading() ? undefined : book()?.name,
85+
noteSlug: globalLoading() ? undefined : note()?.name,
8486
}
8587
}
8688

@@ -155,7 +157,7 @@ const Shelf: Component = () => {
155157
onclick={onNewBookClick}
156158
class="btn join-item btn-ghost"
157159
type="button"
158-
disabled={!allowBookCreate()}
160+
disabled={globalLoading() || !allowBookCreate()}
159161
title="Create New Notebook"
160162
>
161163
<Icon name="folder-plus" />
@@ -164,30 +166,30 @@ const Shelf: Component = () => {
164166
onclick={onNewNoteClick}
165167
class="btn join-item btn-ghost"
166168
type="button"
167-
disabled={!allowNoteCreate()}
169+
disabled={globalLoading() || !allowNoteCreate()}
168170
title="Create New Note"
169171
>
170172
<Icon name="file-plus" />
171173
</button>
172174
<Switch>
173-
<Match when={book() && !note()}>
175+
<Match when={slugParts().bookSlug && !slugParts().noteSlug}>
174176
<button
175177
onclick={onUpdateBookClick}
176178
class="btn join-item btn-ghost"
177179
type="button"
178-
disabled={!allowNoteCreate()}
180+
disabled={globalLoading() || !allowNoteCreate()}
179181
title="Notebook Settings"
180182
>
181183
<Icon name="settings" />
182184
<Icon name="folder" />
183185
</button>
184186
</Match>
185-
<Match when={book() && note()}>
187+
<Match when={slugParts().bookSlug && slugParts().noteSlug}>
186188
<button
187189
onclick={onUpdateNoteClick}
188190
class="btn join-item btn-ghost"
189191
type="button"
190-
disabled={!allowNoteCreate()}
192+
disabled={globalLoading() || !allowNoteCreate()}
191193
title="Note Settings"
192194
>
193195
<Icon name="settings" />
@@ -198,7 +200,7 @@ const Shelf: Component = () => {
198200
</div>
199201
<NoteBreadcrumb class="flex-1" {...breadcrumb()} />
200202
</div>
201-
<Show when={!note.loading && !noteContent.loading} fallback={<LoadingBar />}>
203+
<Show when={!note.loading && !noteContent.loading} fallback={<LoadingRing />}>
202204
<Show when={note()} fallback={
203205
<div class="hero pt-6 bg-base-200 rounded-md">
204206
<div class="hero-content text-center">

0 commit comments

Comments
 (0)