|
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