diff --git a/hooks/useResizeObserver.ts b/hooks/useResizeObserver.ts new file mode 100644 index 000000000..350e03ceb --- /dev/null +++ b/hooks/useResizeObserver.ts @@ -0,0 +1,3 @@ +import useResizeObserver from 'use-resize-observer'; + +export { useResizeObserver }; diff --git a/package.json b/package.json index 0c37ca4c3..e742e92dd 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,8 @@ "styled-components": "^5.3.1", "swiper": "7.0.7", "url-loader": "^4.1.1", - "use-clipboard-copy": "^0.2.0" + "use-clipboard-copy": "^0.2.0", + "use-resize-observer": "^8.0.0" }, "devDependencies": { "@babel/eslint-parser": "^7.15.4", diff --git a/views/HomePage/ScrollableBlogPosts.tsx b/views/HomePage/ScrollableBlogPosts.tsx index 777fbfd27..ccfc2c00d 100644 --- a/views/HomePage/ScrollableBlogPosts.tsx +++ b/views/HomePage/ScrollableBlogPosts.tsx @@ -1,3 +1,4 @@ +import { useEffect, useState } from 'react'; import styled from 'styled-components'; import { A11y } from 'swiper'; import { Swiper, SwiperSlide } from 'swiper/react'; @@ -5,6 +6,7 @@ import ArticleCard from 'components/ArticleCard'; import Container from 'components/Container'; import OverTitle from 'components/OverTitle'; import SectionTitle from 'components/SectionTitle'; +import { useResizeObserver } from 'hooks/useResizeObserver'; import { SingleArticle } from 'types'; import { media } from 'utils/media'; @@ -13,6 +15,16 @@ interface ScrollableBlogPostsProps { } export default function ScrollableBlogPosts({ posts }: ScrollableBlogPostsProps) { + const [hasMounted, setHasMounted] = useState(false); + const { ref, width = 1 } = useResizeObserver(); + + const oneItemWidth = 350; + const noOfItems = width / oneItemWidth; + + useEffect(() => { + setHasMounted(true); + }, []); + return (
@@ -22,31 +34,21 @@ export default function ScrollableBlogPosts({ posts }: ScrollableBlogPostsProps) - - - {posts.map((singlePost, idx) => ( - - - - ))} - + + {hasMounted && ( + + {posts.map((singlePost, idx) => ( + + + + ))} + + )}
); @@ -74,6 +76,7 @@ const Section = styled.section` const SwiperContainer = styled(Container)` max-width: 250em; + height: 46rem; & > *:first-child { margin-top: 4rem; @@ -83,8 +86,4 @@ const SwiperContainer = styled(Container)` max-width: 100%; padding: 0; } - - .first-slide { - margin-left: 2rem; - } `; diff --git a/yarn.lock b/yarn.lock index 40395304a..b0444d326 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1187,6 +1187,11 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz#87de7af9c231826fdd68ac7258f77c429e0e5fcf" integrity sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w== +"@juggle/resize-observer@^3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@juggle/resize-observer/-/resize-observer-3.3.1.tgz#b50a781709c81e10701004214340f25475a171a0" + integrity sha512-zMM9Ds+SawiUkakS7y94Ymqx+S0ORzpG3frZirN3l+UlXUmSUR7hF4wxCVqW+ei94JzV5kt0uXBcoOEAuiydrw== + "@mdx-js/mdx@^1.6.22": version "1.6.22" resolved "https://registry.yarnpkg.com/@mdx-js/mdx/-/mdx-1.6.22.tgz#8a723157bf90e78f17dc0f27995398e6c731f1ba" @@ -7049,6 +7054,13 @@ use-clipboard-copy@^0.2.0: dependencies: clipboard-copy "^3.0.0" +use-resize-observer@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/use-resize-observer/-/use-resize-observer-8.0.0.tgz#69bd80c1ddd94f3758563fe107efb25fed85067a" + integrity sha512-n0iKSeiQpJCyaFh5JA0qsVLBIovsF4EIIR1G6XiBwKJN66ZrD4Oj62bjcuTAATPKiSp6an/2UZZxCf/67fk3sQ== + dependencies: + "@juggle/resize-observer" "^3.3.1" + use-subscription@1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/use-subscription/-/use-subscription-1.5.1.tgz#73501107f02fad84c6dd57965beb0b75c68c42d1"