diff --git a/frontend/package-lock.json b/frontend/package-lock.json index eb26e80..c7d02e9 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -31,6 +31,7 @@ "react-fast-marquee": "^1.6.4", "react-hot-toast": "^2.4.1", "react-icons": "^5.2.1", + "react-loading-skeleton": "^3.4.0", "react-parallax-tilt": "^1.7.231", "react-responsive-modal": "^6.4.2", "react-router-dom": "^6.24.0", @@ -4842,6 +4843,14 @@ "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", "license": "MIT" }, + "node_modules/react-loading-skeleton": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/react-loading-skeleton/-/react-loading-skeleton-3.4.0.tgz", + "integrity": "sha512-1oJEBc9+wn7BbkQQk7YodlYEIjgeR+GrRjD+QXkVjwZN7LGIcAFHrx4NhT7UHGBxNY1+zax3c+Fo6XQM4R7CgA==", + "peerDependencies": { + "react": ">=16.8.0" + } + }, "node_modules/react-parallax-tilt": { "version": "1.7.232", "resolved": "https://registry.npmjs.org/react-parallax-tilt/-/react-parallax-tilt-1.7.232.tgz", diff --git a/frontend/package.json b/frontend/package.json index 254593c..dc06007 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -33,6 +33,7 @@ "react-fast-marquee": "^1.6.4", "react-hot-toast": "^2.4.1", "react-icons": "^5.2.1", + "react-loading-skeleton": "^3.4.0", "react-parallax-tilt": "^1.7.231", "react-responsive-modal": "^6.4.2", "react-router-dom": "^6.24.0", diff --git a/frontend/src/components/PostsSkeleton.tsx b/frontend/src/components/PostsSkeleton.tsx new file mode 100644 index 0000000..3763a9a --- /dev/null +++ b/frontend/src/components/PostsSkeleton.tsx @@ -0,0 +1,44 @@ +import Skeleton from 'react-loading-skeleton'; +import 'react-loading-skeleton/dist/skeleton.css'; + +const PostsPageSkeleton = () => { + const skeletonArray = Array(9).fill(0); // Create an array with 9 elements for the skeleton placeholders + + return ( +
+ {skeletonArray.map((_, index) => ( +
+
+ + +
+ + + +
+ {Array(3).fill(0).map((_, idx) => ( + + ))} +
+
+
+ {Array(3).fill(0).map((_, idx) => ( + + ))} +
+
+ + +
+
+
+ ))} +
+ ); +}; + +export default PostsPageSkeleton; diff --git a/frontend/src/pages/Posts.tsx b/frontend/src/pages/Posts.tsx index d55de4a..c2f4192 100644 --- a/frontend/src/pages/Posts.tsx +++ b/frontend/src/pages/Posts.tsx @@ -1,11 +1,11 @@ import { useEffect, useState, useRef } from "react"; -import Loader from "../components/Loader"; import PostCard from "../components/PostCard"; import { userState } from "../store/atoms/auth"; import { useRecoilValue } from "recoil"; import usePosts from "../hooks/usePosts"; import bgHero from "../assets/bgHero.png"; import { IoIosArrowDown } from "react-icons/io"; +import PostsPageSkeleton from "../components/PostsSkeleton"; const Posts = () => { const currentUser = useRecoilValue(userState); @@ -80,7 +80,7 @@ const Posts = () => { }; if (loading) { - return ; + return ; } if (error) {