mirror of
https://github.com/Stremio/stremio-web.git
synced 2026-04-21 15:52:02 +00:00
feat: add notifications toggle on details
This commit is contained in:
parent
f4f5907495
commit
acb38b0e58
5 changed files with 44 additions and 5 deletions
|
|
@ -61,6 +61,17 @@ const MetaDetails = ({ urlParams, queryParams }) => {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}, [metaDetails]);
|
}, [metaDetails]);
|
||||||
|
const toggleNotifications = React.useCallback(() => {
|
||||||
|
if (metaDetails.libraryItem) {
|
||||||
|
core.transport.dispatch({
|
||||||
|
action: 'Ctx',
|
||||||
|
args: {
|
||||||
|
action: 'ToggleLibraryItemNotifications',
|
||||||
|
args: [metaDetails.libraryItem._id, !metaDetails.libraryItem.state.noNotif],
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}, [metaDetails.libraryItem]);
|
||||||
const seasonOnSelect = React.useCallback((event) => {
|
const seasonOnSelect = React.useCallback((event) => {
|
||||||
setSeason(event.value);
|
setSeason(event.value);
|
||||||
}, [setSeason]);
|
}, [setSeason]);
|
||||||
|
|
@ -156,8 +167,10 @@ const MetaDetails = ({ urlParams, queryParams }) => {
|
||||||
<VideosList
|
<VideosList
|
||||||
className={styles['videos-list']}
|
className={styles['videos-list']}
|
||||||
metaItem={metaDetails.metaItem}
|
metaItem={metaDetails.metaItem}
|
||||||
|
libraryItem={metaDetails.libraryItem}
|
||||||
season={season}
|
season={season}
|
||||||
seasonOnSelect={seasonOnSelect}
|
seasonOnSelect={seasonOnSelect}
|
||||||
|
toggleNotifications={toggleNotifications}
|
||||||
/>
|
/>
|
||||||
:
|
:
|
||||||
null
|
null
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,6 @@
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
padding: 1rem;
|
|
||||||
overflow: visible;
|
overflow: visible;
|
||||||
|
|
||||||
.prev-season-button, .next-season-button {
|
.prev-season-button, .next-season-button {
|
||||||
|
|
|
||||||
|
|
@ -4,13 +4,15 @@ const React = require('react');
|
||||||
const PropTypes = require('prop-types');
|
const PropTypes = require('prop-types');
|
||||||
const classnames = require('classnames');
|
const classnames = require('classnames');
|
||||||
const { t } = require('i18next');
|
const { t } = require('i18next');
|
||||||
const Image = require('stremio/common/Image');
|
const { Image, SearchBar, Checkbox } = require('stremio/common');
|
||||||
const SearchBar = require('stremio/common/SearchBar');
|
|
||||||
const SeasonsBar = require('./SeasonsBar');
|
const SeasonsBar = require('./SeasonsBar');
|
||||||
const Video = require('./Video');
|
const Video = require('./Video');
|
||||||
const styles = require('./styles');
|
const styles = require('./styles');
|
||||||
|
|
||||||
const VideosList = ({ className, metaItem, season, seasonOnSelect }) => {
|
const VideosList = ({ className, metaItem, libraryItem, season, seasonOnSelect, toggleNotifications }) => {
|
||||||
|
const showNotificationsToggle = React.useMemo(() => {
|
||||||
|
return metaItem?.content?.content?.inLibrary && metaItem?.content?.content?.videos?.length;
|
||||||
|
}, [metaItem]);
|
||||||
const videos = React.useMemo(() => {
|
const videos = React.useMemo(() => {
|
||||||
return metaItem && metaItem.content.type === 'Ready' ?
|
return metaItem && metaItem.content.type === 'Ready' ?
|
||||||
metaItem.content.content.videos
|
metaItem.content.content.videos
|
||||||
|
|
@ -80,6 +82,14 @@ const VideosList = ({ className, metaItem, season, seasonOnSelect }) => {
|
||||||
</div>
|
</div>
|
||||||
:
|
:
|
||||||
<React.Fragment>
|
<React.Fragment>
|
||||||
|
{
|
||||||
|
showNotificationsToggle && libraryItem ?
|
||||||
|
<Checkbox className={styles['notifications-checkbox']} checked={!libraryItem.state.noNotif} onClick={toggleNotifications}>
|
||||||
|
{t('DETAIL_RECEIVE_NOTIF_SERIES')}
|
||||||
|
</Checkbox>
|
||||||
|
:
|
||||||
|
null
|
||||||
|
}
|
||||||
{
|
{
|
||||||
seasons.length > 0 ?
|
seasons.length > 0 ?
|
||||||
<SeasonsBar
|
<SeasonsBar
|
||||||
|
|
@ -133,8 +143,10 @@ const VideosList = ({ className, metaItem, season, seasonOnSelect }) => {
|
||||||
VideosList.propTypes = {
|
VideosList.propTypes = {
|
||||||
className: PropTypes.string,
|
className: PropTypes.string,
|
||||||
metaItem: PropTypes.object,
|
metaItem: PropTypes.object,
|
||||||
|
libraryItem: PropTypes.object,
|
||||||
season: PropTypes.number,
|
season: PropTypes.number,
|
||||||
seasonOnSelect: PropTypes.func
|
seasonOnSelect: PropTypes.func,
|
||||||
|
toggleNotifications: PropTypes.func,
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports = VideosList;
|
module.exports = VideosList;
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@
|
||||||
.videos-list-container {
|
.videos-list-container {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
|
padding-top: 0.5rem;
|
||||||
|
|
||||||
.message-container {
|
.message-container {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
|
|
@ -35,9 +36,22 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.notifications-checkbox {
|
||||||
|
flex: none;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: flex-start;
|
||||||
|
gap: 1rem;
|
||||||
|
height: 3rem;
|
||||||
|
padding: 0 1.5rem;
|
||||||
|
color: @color-surface-light5-90;
|
||||||
|
}
|
||||||
|
|
||||||
.seasons-bar {
|
.seasons-bar {
|
||||||
flex: none;
|
flex: none;
|
||||||
align-self: stretch;
|
align-self: stretch;
|
||||||
|
margin: 0.5rem 1rem 1rem 1rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.search-bar {
|
.search-bar {
|
||||||
|
|
|
||||||
1
src/types/models/MetaDetails.d.ts
vendored
1
src/types/models/MetaDetails.d.ts
vendored
|
|
@ -14,6 +14,7 @@ type MetaDetails = {
|
||||||
addon: Addon,
|
addon: Addon,
|
||||||
content: Loadable<MetaItemMetaDetails>,
|
content: Loadable<MetaItemMetaDetails>,
|
||||||
} | null,
|
} | null,
|
||||||
|
libraryItem: LibraryItem | null,
|
||||||
selected: {
|
selected: {
|
||||||
metaPath: ResourceRequestPath,
|
metaPath: ResourceRequestPath,
|
||||||
streamPath: ResourceRequestPath,
|
streamPath: ResourceRequestPath,
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue