Skip to content

Commit 49e7a27

Browse files
committed
feat: loading
Improve loading animations
1 parent c6d9a36 commit 49e7a27

3 files changed

Lines changed: 241 additions & 235 deletions

File tree

src/components/GetStartedModule/GetStartedLink.tsx

Lines changed: 28 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import {
55
Icon,
66
Image,
77
Link,
8+
Skeleton,
89
Text,
910
VStack,
1011
} from "@chakra-ui/react";
@@ -23,9 +24,14 @@ type GetStartedLinkProps = {
2324

2425
export const GetStartedLink = (props: GetStartedLinkProps) => {
2526
const t = useTranslations("GetStartedModule");
27+
const [imageLoaded, setImageLoaded] = useState(false);
2628
const { href, badges, heading, imageSource, imageAlt } = props;
2729
const [isElementHovered, setIsElementHovered] = useState(false);
2830

31+
const handleImageLoad = () => {
32+
setImageLoaded(true);
33+
};
34+
2935
return (
3036
<Link
3137
textDecoration={"none"}
@@ -79,23 +85,28 @@ export const GetStartedLink = (props: GetStartedLinkProps) => {
7985
/>
8086
</Text>
8187
</VStack>
82-
<Box
83-
maxWidth={{ base: "100%", lg: "80%" }}
84-
maxHeight={{ base: "125px", lg: "none" }}
85-
overflow={{ base: "hidden", lg: "visible" }}
86-
>
87-
<Image
88-
borderTopLeftRadius={"lg"}
89-
borderTopRightRadius={"lg"}
90-
boxShadow={"lg"}
91-
src={imageSource}
92-
alt={imageAlt}
93-
transition={"transform 0.25s ease-in-out"}
94-
transform={
95-
isElementHovered ? "translateY(0px)" : "translateY(10px)"
96-
}
97-
/>
98-
</Box>
88+
<Skeleton loading={!imageLoaded}>
89+
<Box
90+
maxWidth={{ base: "100%", lg: "80%" }}
91+
maxHeight={{ base: "125px", lg: "none" }}
92+
overflow={{ base: "hidden", lg: "visible" }}
93+
>
94+
<Image
95+
borderTopLeftRadius={"lg"}
96+
borderTopRightRadius={"lg"}
97+
boxShadow={"lg"}
98+
src={imageSource}
99+
alt={imageAlt}
100+
transition={"transform 0.25s ease-in-out"}
101+
onLoad={handleImageLoad}
102+
transform={
103+
isElementHovered ? "translateY(0px)" : "translateY(10px)"
104+
}
105+
width={"100%"}
106+
height={"100%"}
107+
/>
108+
</Box>
109+
</Skeleton>
99110
</VStack>
100111
</NextLink>
101112
</Link>

src/pages/app/index.tsx

Lines changed: 5 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import {
1111
Heading,
1212
Icon,
1313
Portal,
14-
Spinner,
14+
Skeleton,
1515
Text,
1616
Textarea,
1717
VStack,
@@ -68,22 +68,11 @@ const AppPage = () => {
6868
const { uuid, Component } = module;
6969

7070
return (
71-
<GridItem key={uuid} w="100%" h={"100%"}>
72-
{isLoading ? (
73-
<Box
74-
minHeight={"350px"}
75-
height={"100%"}
76-
display={"flex"}
77-
justifyContent={"center"}
78-
alignItems={"center"}
79-
maxWidth={"80%"}
80-
>
81-
<Spinner />
82-
</Box>
83-
) : (
71+
<Skeleton loading={isLoading} key={uuid}>
72+
<GridItem w="100%" h={"100%"}>
8473
<Component />
85-
)}
86-
</GridItem>
74+
</GridItem>
75+
</Skeleton>
8776
);
8877
})}
8978
<GridItem w="100%">

0 commit comments

Comments
 (0)