diff --git a/src/common/utility.js b/src/common/utility.js index 8bf0354ac37..c540081f508 100644 --- a/src/common/utility.js +++ b/src/common/utility.js @@ -2,6 +2,7 @@ import { navigate } from 'gatsby' import Cookies from 'js-cookie' import extend from 'extend' import { + cms_assets_end_point, deriv_cookie_domain, deriv_app_languages, live_chat_redirection_link, @@ -255,3 +256,33 @@ export const convertDate = (date) => { newdate.toLocaleString('en', { year: 'numeric' }) ) } + +// CMS Related Utilities +export const getAssetUrl = (id) => `${cms_assets_end_point}${id}` + +export const getVideoObject = (video_data) => { + const { + published_date, + video_file, + video_thumbnail, + video_title, + video_duration, + video_description, + featured, + tags, + } = video_data + const { id: video_id } = video_file + const { id: thumbnail_id, title: alt } = video_thumbnail + + return { + published_date, + thumbnail_img: getAssetUrl(thumbnail_id), + thumbnail_img_alt: alt, + video_title, + video_description, + video_url: getAssetUrl(video_id), + video_duration, + featured, + types: tags.map((t) => t.tags_id.tag_name), + } +} diff --git a/src/pages/blog/_recent-featured-posts.js b/src/pages/blog/_recent-featured-posts.js index 677c2e49a7d..ed24b8105f0 100644 --- a/src/pages/blog/_recent-featured-posts.js +++ b/src/pages/blog/_recent-featured-posts.js @@ -227,7 +227,7 @@ const RecentFeaturedPosts = () => { - + See all blog articles diff --git a/src/pages/blog/_video-player.js b/src/pages/blog/_video-player.js index 749e86fedee..277e37d1836 100644 --- a/src/pages/blog/_video-player.js +++ b/src/pages/blog/_video-player.js @@ -138,7 +138,7 @@ const VideoPlayer = ({ video_src, closeVideo }) => { VideoPlayer.propTypes = { closeVideo: PropTypes.func, - video_src: PropTypes.object, + video_src: PropTypes.string, } export default VideoPlayer diff --git a/src/pages/blog/components/_markets-news.js b/src/pages/blog/components/_markets-news.js index 6d7d6910791..876cfd2beab 100644 --- a/src/pages/blog/components/_markets-news.js +++ b/src/pages/blog/components/_markets-news.js @@ -68,6 +68,7 @@ const MarketNews = ({ data }) => { data={data.main_image.imageFile} width="104px" height="78px" + alt={data.main_image.alt || ''} />
@@ -109,5 +110,5 @@ const MarketNews = ({ data }) => { export default MarketNews MarketNews.propTypes = { - data: PropTypes.object, + data: PropTypes.array, } diff --git a/src/pages/blog/index.js b/src/pages/blog/index.js index 4d517e20b2e..a724a53ed40 100644 --- a/src/pages/blog/index.js +++ b/src/pages/blog/index.js @@ -57,6 +57,25 @@ export const query = graphql` id } } + videos(limit: 6, sort: "-published_date") { + video_title + published_date + video_description + video_duration + featured + video_thumbnail { + id + title + } + video_file { + id + } + tags { + tags_id { + tag_name + } + } + } } } ` @@ -80,6 +99,8 @@ const DerivBlog = ({ data }) => { } const homepage_banner_data = data.directus.homepage_banners const market_news_data = data.directus.blog + const video_list_data = data.directus.videos + return ( { - + diff --git a/src/pages/blog/template/_side-cta/_side-cta.js b/src/pages/blog/template/_side-cta/_side-cta.js index 07ad11790ef..98fd57a7e2f 100644 --- a/src/pages/blog/template/_side-cta/_side-cta.js +++ b/src/pages/blog/template/_side-cta/_side-cta.js @@ -33,7 +33,7 @@ const SideCta = () => {
- + Claim free ebook diff --git a/src/pages/blog/video-banner/_DBanner.js b/src/pages/blog/video-banner/_DBanner.js index 370c9143c21..925ed2bc036 100644 --- a/src/pages/blog/video-banner/_DBanner.js +++ b/src/pages/blog/video-banner/_DBanner.js @@ -3,6 +3,7 @@ import styled from 'styled-components' import PropTypes from 'prop-types' import VideoPlayer from '../_video-player' import VideoCarousel from './_VideoCarousel' +import { convertDate, getVideoObject } from 'common/utility' import { Flex, Container } from 'components/containers' import { Header } from 'components/elements' import device from 'themes/device' @@ -63,10 +64,22 @@ const StyledDot = styled.img` margin: 0 10px 4px; ` -const Dbanner = ({ video_details, video_list }) => { +const Dbanner = ({ video_list }) => { const [show, setShow] = useState(false) const handleCloseVideo = () => setShow(false) const handleOpenVideo = () => setShow(true) + const featured_video = video_list.find((v) => v.featured) + const filtered_video = video_list.filter((v) => v !== featured_video) + + const { + published_date, + thumbnail_img, + video_title, + video_description, + video_url, + video_duration, + types, + } = getVideoObject(featured_video) useEffect(() => { show ? (document.body.style.overflow = 'hidden') : (document.body.style.overflow = 'unset') @@ -74,7 +87,7 @@ const Dbanner = ({ video_details, video_list }) => { return ( <> - + { - -
- {video_details[0].type} -
-
+ {types.slice(0, 2).map((t) => ( + +
+ {t} +
+
+ ))} + {types.length > 2 && ( + +
+ +2 +
+
+ )}
- {video_details[0].title} + {video_title}
{ max_width="894px" mobile_max_width="100%" > - {video_details[0].description} + {video_description}
{ color="grey-17" width="auto" > - {video_details[0].published_date} + {convertDate(published_date)}
{ color="grey-17" width="auto" > - {video_details[0].duration} + {video_duration}
- +
- {show && ( - - )} + {show && } ) } Dbanner.propTypes = { - video_details: PropTypes.array, video_list: PropTypes.array, } diff --git a/src/pages/blog/video-banner/_VideoCarousel.js b/src/pages/blog/video-banner/_VideoCarousel.js index dad927e455c..362ccbb97ea 100644 --- a/src/pages/blog/video-banner/_VideoCarousel.js +++ b/src/pages/blog/video-banner/_VideoCarousel.js @@ -7,6 +7,7 @@ import { CustomCarousel } from './carousel/_custom-carousel' import { Flex } from 'components/containers' import { Header } from 'components/elements' import { LinkButton } from 'components/form' +import { convertDate, getVideoObject } from 'common/utility' import device from 'themes/device' import { useBrowserResize } from 'components/hooks/use-browser-resize' import PlayIcon from 'images/svg/blog/video/Triangle.svg' @@ -94,10 +95,13 @@ const SeeMoreBtnMobile = styled(LinkButton)` const VideoCarousel = ({ carousel_items }) => { const [show, setShow] = useState(false) + const [video_src, setVideoSrc] = useState('') const [is_mobile] = useBrowserResize() + const handleCloseVideo = () => setShow(false) - const handleOpenVideo = (event) => { + const handleOpenVideo = (event, url) => { if (event.defaultPrevented) return + setVideoSrc(url) setShow(true) } @@ -146,14 +150,23 @@ const VideoCarousel = ({ carousel_items }) => { {carousel_items.map((item, index) => { + const { + published_date, + thumbnail_img, + thumbnail_img_alt, + video_title, + video_url, + video_duration, + } = getVideoObject(item) + return ( handleOpenVideo(e, video_url)} > - + @@ -162,7 +175,7 @@ const VideoCarousel = ({ carousel_items }) => {
- {item.title} + {video_title}
{ color="grey-17" width="auto" > - {item.date} + {convertDate(published_date)}
{ color="grey-17" width="auto" > - {item.duration} + {video_duration}
@@ -203,12 +216,7 @@ const VideoCarousel = ({ carousel_items }) => { )}
- {show && ( - - )} + {show && } ) } diff --git a/src/pages/blog/video-banner/index.js b/src/pages/blog/video-banner/index.js index bfab6cdf655..a456c76f9cd 100644 --- a/src/pages/blog/video-banner/index.js +++ b/src/pages/blog/video-banner/index.js @@ -1,85 +1,20 @@ import React from 'react' +import PropTypes from 'prop-types' import Dbanner from './_DBanner' // import Layout from 'components/layout/layout' import { Flex } from 'components/containers' // import { WithIntl } from 'components/localization' -const MainVidDetails = [ - { - type: 'Trade types', - title: 'What’s multipliers', - description: - 'Combine the higher returns of margin trading with the simplicity of options. With multipliers, you can leverage your trades to maximise returns for correctly predicting market movements, without risking more than your initial stake.', - published_date: '21 Apr 2021', - duration: '2:40', - bg_img_url: - 'https://blog.deriv.com/content/images/size/w1000/2021/04/deriv-weekly-market-report-06042021.jpg', - }, -] - -const carouselItem = [ - { - image: 'video_banner_1', - title: 'The weekly market report, 07.06.2021 - 13.06.2021', - date: 'April 7, 2021', - duration: '14:09', - img_url: - 'https://blog.deriv.com/content/images/size/w1000/2021/06/shutterstock_1220527444.jpg', - }, - { - image: 'video_banner_2', - title: 'Open a new DMT5 Real Synthetic account on our new servers', - date: 'April 7, 2021', - duration: '14:09', - img_url: - 'https://blog.deriv.com/content/images/size/w1000/2021/05/Weekly-market-report-with-Deriv.jpg', - }, - { - image: 'video_banner_3', - title: '7 traits of successful financial traders', - date: 'April 7, 2021', - duration: '14:09', - img_url: - 'https://blog.deriv.com/content/images/size/w1000/2021/05/Market-report-with-Deriv.jpg', - }, - { - image: 'video_banner_4', - title: 'How To Trade Forex', - date: 'April 7, 2021', - duration: '14:09', - img_url: - 'https://blog.deriv.com/content/images/size/w1000/2021/05/Deriv-weekly-market-report.jpg', - }, - { - image: 'video_banner_5', - title: '5 Golden Rules to Follow When Trading Stock CFDs', - date: 'April 7, 2021', - duration: '14:09', - img_url: - 'https://blog.deriv.com/content/images/size/w1000/2021/05/Deriv-weekly-market-report.jpg', - }, - { - image: 'video_banner_1', - title: 'Strategies to Trade Synthetic Indices', - date: 'April 7, 2021', - duration: '14:09', - img_url: 'https://blog.deriv.com/content/images/size/w1000/2021/05/BeSquare-by-Deriv.png', - }, - { - image: 'video_banner_3', - title: 'Multipliers: Leverage without losing your shirt', - date: 'April 7, 2021', - duration: '14:09', - img_url: 'https://blog.deriv.com/content/images/size/w1000/2021/04/Changelly2-1.jpg', - }, -] - -const DVideoBanner = () => { +const DVideoBanner = ({ video_list_data }) => { return ( - + {video_list_data && video_list_data.length && } ) } +DVideoBanner.propTypes = { + video_list_data: PropTypes.array, +} + export default DVideoBanner