mirror of
https://github.com/logto-io/logto.git
synced 2025-01-06 20:40:08 -05:00
feat(console): dashboard skeleton (#1077)
This commit is contained in:
parent
c38fab89e1
commit
5afbe9d70b
3 changed files with 84 additions and 0 deletions
|
@ -0,0 +1,47 @@
|
||||||
|
@use '@/scss/underscore' as _;
|
||||||
|
|
||||||
|
.title {
|
||||||
|
@include _.shimmering-animation;
|
||||||
|
height: 24px;
|
||||||
|
margin-bottom: _.unit(6);
|
||||||
|
}
|
||||||
|
|
||||||
|
.number {
|
||||||
|
@include _.shimmering-animation;
|
||||||
|
height: 32px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.blocks {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
margin-bottom: _.unit(4);
|
||||||
|
}
|
||||||
|
|
||||||
|
.block {
|
||||||
|
flex: 1;
|
||||||
|
|
||||||
|
&:not(:last-child) {
|
||||||
|
margin-right: _.unit(4);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.dau {
|
||||||
|
width: 300px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.curve {
|
||||||
|
@include _.shimmering-animation;
|
||||||
|
margin: _.unit(10) 0 _.unit(6);
|
||||||
|
height: 168px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.activeBlocks {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
.block {
|
||||||
|
border: 1px solid var(--color-divider);
|
||||||
|
width: 360px;
|
||||||
|
flex: unset;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,35 @@
|
||||||
|
import React from 'react';
|
||||||
|
|
||||||
|
import Card from '@/components/Card';
|
||||||
|
|
||||||
|
import * as styles from './index.module.scss';
|
||||||
|
|
||||||
|
const Skeleton = () => (
|
||||||
|
<div>
|
||||||
|
<div className={styles.blocks}>
|
||||||
|
{[...Array.from({ length: 3 }).keys()].map((index) => (
|
||||||
|
<Card key={index} className={styles.block}>
|
||||||
|
<div className={styles.title} />
|
||||||
|
<div className={styles.number} />
|
||||||
|
</Card>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
<Card>
|
||||||
|
<div className={styles.dau}>
|
||||||
|
<div className={styles.title} />
|
||||||
|
<div className={styles.number} />
|
||||||
|
</div>
|
||||||
|
<div className={styles.curve} />
|
||||||
|
<div className={styles.activeBlocks}>
|
||||||
|
{[...Array.from({ length: 2 }).keys()].map((index) => (
|
||||||
|
<Card key={index} className={styles.block}>
|
||||||
|
<div className={styles.title} />
|
||||||
|
<div className={styles.number} />
|
||||||
|
</Card>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
</Card>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
|
||||||
|
export default Skeleton;
|
|
@ -14,6 +14,7 @@ import useSWR from 'swr';
|
||||||
import Card from '@/components/Card';
|
import Card from '@/components/Card';
|
||||||
|
|
||||||
import Block from './components/Block';
|
import Block from './components/Block';
|
||||||
|
import Skeleton from './components/Skeleton';
|
||||||
import * as styles from './index.module.scss';
|
import * as styles from './index.module.scss';
|
||||||
import { ActiveUsersResponse, NewUsersResponse, TotalUsersResponse } from './types';
|
import { ActiveUsersResponse, NewUsersResponse, TotalUsersResponse } from './types';
|
||||||
|
|
||||||
|
@ -31,6 +32,7 @@ const Dashboard = () => {
|
||||||
<div className={styles.title}>{t('dashboard.title')}</div>
|
<div className={styles.title}>{t('dashboard.title')}</div>
|
||||||
<div className={styles.subtitle}>{t('dashboard.description')}</div>
|
<div className={styles.subtitle}>{t('dashboard.description')}</div>
|
||||||
</div>
|
</div>
|
||||||
|
{isLoading && <Skeleton />}
|
||||||
{!isLoading && (
|
{!isLoading && (
|
||||||
<>
|
<>
|
||||||
<div className={styles.blocks}>
|
<div className={styles.blocks}>
|
||||||
|
|
Loading…
Reference in a new issue