mirror of
https://github.com/Sonarr/Sonarr.git
synced 2026-04-19 21:46:43 -04:00
New: 'Seasons Monitored Status' Custom Filter to replace 'Has Unmonitored Season'
Closes #6896
This commit is contained in:
@@ -13,6 +13,7 @@ import LanguageFilterBuilderRowValue from './LanguageFilterBuilderRowValue';
|
||||
import ProtocolFilterBuilderRowValue from './ProtocolFilterBuilderRowValue';
|
||||
import QualityFilterBuilderRowValueConnector from './QualityFilterBuilderRowValueConnector';
|
||||
import QualityProfileFilterBuilderRowValueConnector from './QualityProfileFilterBuilderRowValueConnector';
|
||||
import SeasonsMonitoredStatusFilterBuilderRowValue from './SeasonsMonitoredStatusFilterBuilderRowValue';
|
||||
import SeriesFilterBuilderRowValue from './SeriesFilterBuilderRowValue';
|
||||
import SeriesStatusFilterBuilderRowValue from './SeriesStatusFilterBuilderRowValue';
|
||||
import SeriesTypeFilterBuilderRowValue from './SeriesTypeFilterBuilderRowValue';
|
||||
@@ -79,6 +80,9 @@ function getRowValueConnector(selectedFilterBuilderProp) {
|
||||
case filterBuilderValueTypes.QUALITY_PROFILE:
|
||||
return QualityProfileFilterBuilderRowValueConnector;
|
||||
|
||||
case filterBuilderValueTypes.SEASONS_MONITORED_STATUS:
|
||||
return SeasonsMonitoredStatusFilterBuilderRowValue;
|
||||
|
||||
case filterBuilderValueTypes.SERIES:
|
||||
return SeriesFilterBuilderRowValue;
|
||||
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
import React from 'react';
|
||||
import translate from 'Utilities/String/translate';
|
||||
import FilterBuilderRowValue from './FilterBuilderRowValue';
|
||||
|
||||
const seasonsMonitoredStatusList = [
|
||||
{
|
||||
id: 'all',
|
||||
get name() {
|
||||
return translate('SeasonsMonitoredAll');
|
||||
}
|
||||
},
|
||||
{
|
||||
id: 'partial',
|
||||
get name() {
|
||||
return translate('SeasonsMonitoredPartial');
|
||||
}
|
||||
},
|
||||
{
|
||||
id: 'none',
|
||||
get name() {
|
||||
return translate('SeasonsMonitoredNone');
|
||||
}
|
||||
}
|
||||
];
|
||||
|
||||
function SeasonsMonitoredStatusFilterBuilderRowValue(props) {
|
||||
return (
|
||||
<FilterBuilderRowValue
|
||||
tagList={seasonsMonitoredStatusList}
|
||||
{...props}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
export default SeasonsMonitoredStatusFilterBuilderRowValue;
|
||||
@@ -8,6 +8,7 @@ export const LANGUAGE = 'language';
|
||||
export const PROTOCOL = 'protocol';
|
||||
export const QUALITY = 'quality';
|
||||
export const QUALITY_PROFILE = 'qualityProfile';
|
||||
export const SEASONS_MONITORED_STATUS = 'seasonsMonitoredStatus';
|
||||
export const SERIES = 'series';
|
||||
export const SERIES_STATUS = 'seriesStatus';
|
||||
export const SERIES_TYPES = 'seriesType';
|
||||
|
||||
@@ -202,20 +202,33 @@ export const filterPredicates = {
|
||||
return predicate(hasMissingSeason, filterValue);
|
||||
},
|
||||
|
||||
hasUnmonitoredSeason: function(item, filterValue, type) {
|
||||
seasonsMonitoredStatus: function(item, filterValue, type) {
|
||||
const predicate = filterTypePredicates[type];
|
||||
const { seasons = [] } = item;
|
||||
|
||||
const hasUnmonitoredSeason = seasons.some((season) => {
|
||||
const {
|
||||
seasonNumber,
|
||||
monitored
|
||||
} = season;
|
||||
const { monitoredCount, unmonitoredCount } = seasons.reduce((acc, { seasonNumber, monitored }) => {
|
||||
if (seasonNumber <= 0) {
|
||||
return acc;
|
||||
}
|
||||
|
||||
return seasonNumber > 0 && !monitored;
|
||||
});
|
||||
if (monitored) {
|
||||
acc.monitoredCount++;
|
||||
} else {
|
||||
acc.unmonitoredCount++;
|
||||
}
|
||||
|
||||
return predicate(hasUnmonitoredSeason, filterValue);
|
||||
return acc;
|
||||
}, { monitoredCount: 0, unmonitoredCount: 0 });
|
||||
|
||||
let seasonsMonitoredStatus = 'partial';
|
||||
|
||||
if (monitoredCount === 0) {
|
||||
seasonsMonitoredStatus = 'none';
|
||||
} else if (unmonitoredCount === 0) {
|
||||
seasonsMonitoredStatus = 'all';
|
||||
}
|
||||
|
||||
return predicate(seasonsMonitoredStatus, filterValue);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -383,10 +396,10 @@ export const filterBuilderProps = [
|
||||
valueType: filterBuilderValueTypes.BOOL
|
||||
},
|
||||
{
|
||||
name: 'hasUnmonitoredSeason',
|
||||
label: () => translate('HasUnmonitoredSeason'),
|
||||
name: 'seasonsMonitoredStatus',
|
||||
label: () => translate('SeasonsMonitoredStatus'),
|
||||
type: filterBuilderTypes.EXACT,
|
||||
valueType: filterBuilderValueTypes.BOOL
|
||||
valueType: filterBuilderValueTypes.SEASONS_MONITORED_STATUS
|
||||
},
|
||||
{
|
||||
name: 'year',
|
||||
|
||||
Reference in New Issue
Block a user