const React = require('react'); const PropTypes = require('prop-types'); const classnames = require('classnames'); const UrlUtils = require('url'); const Icon = require('stremio-icons/dom'); const Image = require('stremio/common/Image'); const ModalDialog = require('stremio/common/ModalDialog'); const SharePrompt = require('stremio/common/SharePrompt'); const routesRegexp = require('stremio/common/routesRegexp'); const useBinaryState = require('stremio/common/useBinaryState'); const ActionButton = require('./ActionButton'); const MetaLinks = require('./MetaLinks'); const MetaPreviewPlaceholder = require('./MetaPreviewPlaceholder'); const styles = require('./styles'); const IMDB_LINK_CATEGORY = 'imdb'; const SHARE_LINK_CATEGORY = 'share'; const ALLOWED_LINK_REDIRECTS = [ routesRegexp.search.regexp, routesRegexp.discover.regexp, routesRegexp.metadetails.regexp ]; const MetaPreview = ({ className, compact, name, logo, background, runtime, releaseInfo, released, description, links, trailer, inLibrary, toggleInLibrary }) => { const [shareModalOpen, openShareModal, closeShareModal] = useBinaryState(false); const linksGroups = React.useMemo(() => { return Array.isArray(links) ? links .filter((link) => { return link && typeof link.category === 'string' && typeof link.url === 'string'; }) .reduce((linksGroups, { category, name, url }) => { if (category === IMDB_LINK_CATEGORY) { linksGroups[category] = { label: name, href: `https://www.stremio.com/warning#${encodeURIComponent(`https://www.imdb.com/title/${url}`)}` }; } else if (category === SHARE_LINK_CATEGORY) { linksGroups[category] = { label: name, href: url }; } else { const { protocol, host, path, pathname } = UrlUtils.parse(url); if (protocol === 'stremio:') { if (ALLOWED_LINK_REDIRECTS.some((regexp) => pathname.match(regexp))) { linksGroups[category] = linksGroups[category] || []; linksGroups[category].push({ label: name, href: `#${path}` }); } } else { if (typeof host === 'string' && host.length > 0) { linksGroups[category] = linksGroups[category] || []; linksGroups[category].push({ label: name, href: `https://www.stremio.com/warning#${encodeURIComponent(url)}` }); } } } return linksGroups; }, {}) : []; }, [links]); return (