madiator.com/ui/component/previewLink/view.jsx
2021-08-16 12:11:25 +02:00

66 lines
2.1 KiB
JavaScript

// @flow
import * as React from 'react';
import UriIndicator from 'component/uriIndicator';
import TruncatedText from 'component/common/truncated-text';
import MarkdownPreview from 'component/common/markdown-preview';
import { withRouter } from 'react-router-dom';
import { formatLbryUrlForWeb } from 'util/url';
import { parseURI } from 'lbry-redux';
import classnames from 'classnames';
type Props = {
uri: string,
title: ?string,
thumbnail: ?string,
description: ?string,
history: { push: string => void },
};
class PreviewLink extends React.PureComponent<Props> {
handleClick = () => {
const { uri, history } = this.props;
history.push(formatLbryUrlForWeb(uri));
};
render() {
const { uri, title, description, thumbnail } = this.props;
const { isChannel } = parseURI(uri);
const placeholder = 'static/img/placeholder.png';
const thumbnailStyle = {
backgroundImage: `url(${thumbnail || placeholder})`,
};
return (
<span className="preview-link" role="button" onClick={this.handleClick}>
<span className="claim-preview">
<span
style={thumbnailStyle}
className={classnames('preview-link__thumbnail media__thumb', {
'preview-link__thumbnail--channel': isChannel,
})}
/>
<span className="claim-preview-metadata">
<span className="claim-preview-info">
<span className="claim-preview__title">
<TruncatedText text={title} lines={1} />
</span>
</span>
<span className="media__subtitle">
<UriIndicator uri={uri} link />
</span>
<span className="claim-preview-properties">
<span className="preview-link__description media__subtitle">
<TruncatedText lines={2} showTooltip={false}>
<MarkdownPreview content={description} strip />
</TruncatedText>
</span>
</span>
</span>
</span>
</span>
);
}
}
export default withRouter(PreviewLink);