|
1 | | -import React, {ReactElement, useMemo, useState} from 'react'; |
| 1 | +import React, {ReactElement, useContext, useMemo, useState} from 'react'; |
2 | 2 |
|
| 3 | +import {InnerContext} from '../../context/innerContext'; |
3 | 4 | import {MediaProps, QAProps} from '../../models'; |
4 | 5 | import {block, getQaAttrubutes} from '../../utils'; |
| 6 | +import {sanitizeMicrodata} from '../../utils/microdata'; |
5 | 7 | import IframeVideoBlock from '../VideoBlock/VideoBlock'; |
6 | 8 |
|
7 | 9 | import DataLens from './DataLens/DataLens'; |
@@ -49,9 +51,11 @@ export const Media = (props: MediaAllProps) => { |
49 | 51 | onImageLoad, |
50 | 52 | iframe, |
51 | 53 | margins, |
| 54 | + videoMicrodata, |
52 | 55 | } = props; |
53 | 56 |
|
54 | 57 | const [hasVideoFallback, setHasVideoFallback] = useState(false); |
| 58 | + const {microdata} = useContext(InnerContext); |
55 | 59 |
|
56 | 60 | const qaAttributes = getQaAttrubutes(qa, 'video'); |
57 | 61 |
|
@@ -155,8 +159,27 @@ export const Media = (props: MediaAllProps) => { |
155 | 159 | margins, |
156 | 160 | ]); |
157 | 161 |
|
| 162 | + const videoMicrodataScript = useMemo(() => { |
| 163 | + const {name, description} = videoMicrodata || {}; |
| 164 | + const json = JSON.stringify({ |
| 165 | + '@context': 'http://schema.org/', |
| 166 | + '@type': 'VideoObject', |
| 167 | + uploadDate: microdata?.contentUpdatedDate, |
| 168 | + contentUrl: video?.src?.[0] || videoIframe || youtube, |
| 169 | + thumbnailUrl: previewImg, |
| 170 | + ...(videoMicrodata || {}), |
| 171 | + name: name ? sanitizeMicrodata(name) : name, |
| 172 | + description: description ? sanitizeMicrodata(description) : description, |
| 173 | + }); |
| 174 | + |
| 175 | + return video || youtube || videoIframe ? ( |
| 176 | + <script type="application/ld+json">{json}</script> |
| 177 | + ) : null; |
| 178 | + }, [microdata?.contentUpdatedDate, previewImg, video, videoIframe, videoMicrodata, youtube]); |
| 179 | + |
158 | 180 | return ( |
159 | 181 | <div className={b(null, className)} style={{backgroundColor: color}} data-qa={qa}> |
| 182 | + {videoMicrodataScript} |
160 | 183 | {content} |
161 | 184 | </div> |
162 | 185 | ); |
|
0 commit comments