|
1 | 1 | <script lang="ts"> |
2 | 2 | import { onNavigate } from "$app/navigation"; |
3 | | - import { page } from "$app/state"; |
4 | | - import { Menu } from "@lucide/svelte"; |
| 3 | + import { navigating, page } from "$app/state"; |
| 4 | + import { LoaderCircle, Menu } from "@lucide/svelte"; |
5 | 5 | import { uniqueRepos } from "$lib/repositories"; |
6 | 6 | import { Button } from "$lib/components/ui/button"; |
7 | 7 | import * as Sheet from "$lib/components/ui/sheet"; |
| 8 | + import { Skeleton } from "$lib/components/ui/skeleton"; |
8 | 9 | import RepoSidePanel from "./RepoSidePanel.svelte"; |
9 | 10 |
|
10 | 11 | let { children } = $props(); |
|
15 | 16 | }); |
16 | 17 |
|
17 | 18 | let open = $state(false); |
| 19 | +
|
| 20 | + /** |
| 21 | + * The classic function that generates a random integer |
| 22 | + * between the specified minimum and maximum values, inclusive. |
| 23 | + * |
| 24 | + * @param min - The minimum value in the range. |
| 25 | + * @param max - The maximum value in the range. |
| 26 | + * @returns A random integer within the range [min, max]. |
| 27 | + */ |
| 28 | + function random(min: number, max: number) { |
| 29 | + return Math.floor(Math.random() * (max - min + 1)) + min; |
| 30 | + } |
18 | 31 | </script> |
19 | 32 |
|
20 | 33 | {#snippet repoList()} |
|
39 | 52 | {/snippet} |
40 | 53 |
|
41 | 54 | <div class="relative flex gap-8"> |
42 | | - <div class="min-w-0"> |
43 | | - {@render children()} |
44 | | - </div> |
| 55 | + {#if navigating.to} |
| 56 | + <div class="flex w-full flex-col"> |
| 57 | + <div class="mt-8 space-y-2"> |
| 58 | + <Skeleton class="h-16 w-72" /> |
| 59 | + <Skeleton class="h-8 w-56" /> |
| 60 | + </div> |
| 61 | + <div class="relative w-full space-y-2"> |
| 62 | + <p |
| 63 | + class="absolute top-44 left-1/2 z-10 inline-flex -translate-x-1/2 -translate-y-1/2 justify-center text-xl" |
| 64 | + > |
| 65 | + <LoaderCircle class="mr-2 h-lh shrink-0 animate-spin" /> |
| 66 | + Gathering all the data, this may take some time... |
| 67 | + </p> |
| 68 | + {#each Array(3), i (i)} |
| 69 | + <Skeleton class="mt-16 mb-4 h-12 w-52" /> |
| 70 | + {#each Array(random(1, 6)), j (j)} |
| 71 | + <Skeleton class="h-24 w-full" /> |
| 72 | + {/each} |
| 73 | + {/each} |
| 74 | + </div> |
| 75 | + </div> |
| 76 | + {:else} |
| 77 | + <div class="min-w-0"> |
| 78 | + {@render children()} |
| 79 | + </div> |
| 80 | + {/if} |
45 | 81 |
|
46 | 82 | <Sheet.Root bind:open> |
47 | 83 | <Sheet.Trigger> |
|
0 commit comments