@@ -3,7 +3,7 @@ import Stat from '@/components/Stat';
33import type { Response } from '@/lib/api/response' ;
44import { bytes } from '@/lib/bytes' ;
55import useLogin from '@/lib/hooks/useLogin' ;
6- import { LoadingOverlay , Paper , ScrollArea , SimpleGrid , Table , Text , Title } from '@mantine/core' ;
6+ import { Paper , ScrollArea , SimpleGrid , Skeleton , Table , Text , Title } from '@mantine/core' ;
77import { IconDeviceSdCard , IconEyeFilled , IconFiles , IconLink , IconStarFilled } from '@tabler/icons-react' ;
88import useSWR from 'swr' ;
99
@@ -17,9 +17,13 @@ export default function DashboardHome() {
1717 < Title order = { 1 } >
1818 Welcome back, < b > { user ?. username } </ b >
1919 </ Title >
20- < Text size = 'sm' c = 'dimmed' >
21- You have < b > { statsLoading ? '...' : stats ?. filesUploaded } </ b > files uploaded.
22- </ Text >
20+
21+ < Skeleton visible = { statsLoading } animate >
22+ < Text size = 'sm' c = 'dimmed' >
23+ You have < b > { statsLoading ? '...' : stats ?. filesUploaded } </ b > files uploaded.
24+ </ Text >
25+ </ Skeleton >
26+
2327 { user ?. quota && ( user . quota . maxBytes || user . quota . maxFiles ) ? (
2428 < Text size = 'sm' c = 'dimmed' >
2529 { user . quota . filesQuota === 'BY_BYTES' ? (
@@ -47,9 +51,11 @@ export default function DashboardHome() {
4751 </ Title >
4852
4953 { recentLoading ? (
50- < Paper withBorder p = 'md' radius = 'md' pos = 'relative' h = { 300 } >
51- < LoadingOverlay visible />
52- </ Paper >
54+ < SimpleGrid cols = { { base : 1 , md : 2 , lg : 3 } } spacing = { { base : 'sm' , md : 'md' } } >
55+ { [ ...Array ( 3 ) ] . map ( ( i ) => (
56+ < Skeleton key = { i } height = { 350 } />
57+ ) ) }
58+ </ SimpleGrid >
5359 ) : recent ?. length !== 0 ? (
5460 < SimpleGrid cols = { { base : 1 , md : 2 , lg : 3 } } spacing = { { base : 'sm' , md : 'md' } } >
5561 { recent ! . map ( ( file ) => (
@@ -70,9 +76,46 @@ export default function DashboardHome() {
7076 </ Text >
7177
7278 { statsLoading ? (
73- < Paper withBorder p = 'md' radius = 'md' pos = 'relative' h = { 300 } >
74- < LoadingOverlay visible />
75- </ Paper >
79+ < >
80+ < SimpleGrid cols = { { base : 1 , md : 2 , lg : 4 } } spacing = { { base : 'sm' , md : 'md' } } >
81+ { [ ...Array ( 8 ) ] . map ( ( i ) => (
82+ < Skeleton key = { i } height = { 105 } />
83+ ) ) }
84+ </ SimpleGrid >
85+
86+ < Title order = { 3 } mt = 'lg' mb = 'xs' >
87+ File types
88+ </ Title >
89+
90+ < Paper radius = 'sm' withBorder >
91+ < ScrollArea . Autosize mah = { 400 } type = 'auto' >
92+ < Table highlightOnHover >
93+ < Table . Thead >
94+ < Table . Tr >
95+ < Table . Th > File Type</ Table . Th >
96+ < Table . Th > Count</ Table . Th >
97+ </ Table . Tr >
98+ </ Table . Thead >
99+ < Table . Tbody >
100+ { [ 1 , 2 , 3 , 4 , 5 ] . map ( ( i ) => (
101+ < Table . Tr key = { i } >
102+ < Table . Td >
103+ < Skeleton animate >
104+ < Text > ...</ Text >
105+ </ Skeleton >
106+ </ Table . Td >
107+ < Table . Td >
108+ < Skeleton animate >
109+ < Text > ...</ Text >
110+ </ Skeleton >
111+ </ Table . Td >
112+ </ Table . Tr >
113+ ) ) }
114+ </ Table . Tbody >
115+ </ Table >
116+ </ ScrollArea . Autosize >
117+ </ Paper >
118+ </ >
76119 ) : (
77120 < >
78121 < SimpleGrid cols = { { base : 1 , md : 2 , lg : 4 } } spacing = { { base : 'sm' , md : 'md' } } >
0 commit comments