diff --git a/src/common/MetaItem/MetaItem.js b/src/common/MetaItem/MetaItem.js
index df55143dc..1d4537bc4 100644
--- a/src/common/MetaItem/MetaItem.js
+++ b/src/common/MetaItem/MetaItem.js
@@ -1,13 +1,40 @@
-import React, { Component } from 'react';
+import React, { PureComponent } from 'react';
import PropTypes from 'prop-types';
import classnames from 'classnames';
+import Icon from 'stremio-icons/dom';
import styles from './styles';
-class MetaItem extends Component {
+class MetaItem extends PureComponent {
+ renderProgress() {
+ if (this.props.progress === 0) {
+ return null;
+ }
+
+ return (
+
+ );
+ }
+
+ renderPoster() {
+ const placeholderIcon = this.props.type === 'tv' ? 'ic_tv'
+ : this.props.type === 'series' ? 'ic_series'
+ : this.props.type === 'channel' ? 'ic_channels'
+ : 'ic_movies';
+ return (
+
+
+
+ {this.renderProgress()}
+
+ );
+ }
+
render() {
return (
-
+ {this.renderPoster()}
);
}
@@ -15,14 +42,23 @@ class MetaItem extends Component {
MetaItem.propTypes = {
className: PropTypes.string,
+ type: PropTypes.string.isRequired,
relativeSize: PropTypes.oneOf(['auto', 'height']).isRequired,
posterShape: PropTypes.oneOf(['poster', 'landscape', 'square']).isRequired,
poster: PropTypes.string.isRequired,
+ title: PropTypes.string.isRequired,
+ subtitle: PropTypes.string.isRequired,
+ progress: PropTypes.number.isRequired,
+ released: PropTypes.instanceOf(Date).isRequired,
};
MetaItem.defaultProps = {
relativeSize: 'auto',
posterShape: 'square',
poster: '',
+ title: '',
+ subtitle: '',
+ progress: 0,
+ released: new Date(NaN)
};
export default MetaItem;
diff --git a/src/common/MetaItem/styles.less b/src/common/MetaItem/styles.less
index a107ae7bb..a00241d28 100644
--- a/src/common/MetaItem/styles.less
+++ b/src/common/MetaItem/styles.less
@@ -1,16 +1,60 @@
.meta-item-container {
margin: 10px;
display: inline-block;
+ background-color: var(--color-backgroundlight);
+
+ .poster-image-container {
+ position: relative;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ z-index: 0;
+
+ .placeholder-image {
+ width: calc(var(--poster-relative-size) * 0.5);
+ height: calc(var(--poster-relative-size) * 0.5);
+ fill: var(--color-surfacelighter);
+ }
+
+ .poster-image {
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 1;
+ background-size: cover;
+ background-repeat: no-repeat;
+ background-position: center;
+ background-origin: border-box;
+ }
+
+ .progress-bar-container {
+ position: absolute;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 2;
+ height: 6px;
+ background-color: var(--color-backgroundlighter);
+ box-shadow: 0 0 20px 8px var(--color-backgrounddarker);
+
+ .progress {
+ height: 100%;
+ background-color: var(--color-primary);
+ }
+ }
+ }
&.poster-shape-square {
- .poster-image {
+ .poster-image-container {
width: var(--poster-relative-size);
height: var(--poster-relative-size);
}
}
&.poster-shape-landscape {
- .poster-image {
+ .poster-image-container {
width: calc(var(--poster-relative-size) / var(--landscape-shape-ratio));
height: var(--poster-relative-size);
}
@@ -18,14 +62,14 @@
&.poster-shape-poster {
&.relative-size-auto {
- .poster-image {
+ .poster-image-container {
width: var(--poster-relative-size);
height: calc(var(--poster-relative-size) * var(--poster-shape-ratio));
}
}
&.relative-size-height {
- .poster-image {
+ .poster-image-container {
width: calc(var(--poster-relative-size) / var(--poster-shape-ratio));
height: var(--poster-relative-size);
}