New: Added MinAvailability Option to UI

This commit is contained in:
Qstick
2019-10-10 23:20:48 -04:00
parent 5eb7fe958f
commit 1514613f61
25 changed files with 246 additions and 28 deletions

View File

@@ -55,6 +55,7 @@ class AddNewMovieModalContent extends Component {
rootFolderPath,
monitor,
qualityProfileId,
minimumAvailability,
folder,
tags,
isSmallScreen,
@@ -126,6 +127,17 @@ class AddNewMovieModalContent extends Component {
/>
</FormGroup>
<FormGroup>
<FormLabel>Minimum Availability</FormLabel>
<FormInputGroup
type={inputTypes.AVAILABILITY_SELECT}
name="minimumAvailability"
onChange={onInputChange}
{...minimumAvailability}
/>
</FormGroup>
<FormGroup>
<FormLabel>Quality Profile</FormLabel>
@@ -191,6 +203,7 @@ AddNewMovieModalContent.propTypes = {
rootFolderPath: PropTypes.object,
monitor: PropTypes.object.isRequired,
qualityProfileId: PropTypes.object,
minimumAvailability: PropTypes.object.isRequired,
folder: PropTypes.string.isRequired,
tags: PropTypes.object.isRequired,
isSmallScreen: PropTypes.bool.isRequired,

View File

@@ -59,6 +59,7 @@ class AddNewMovieModalContentConnector extends Component {
rootFolderPath,
monitor,
qualityProfileId,
minimumAvailability,
tags
} = this.props;
@@ -67,6 +68,7 @@ class AddNewMovieModalContentConnector extends Component {
rootFolderPath: rootFolderPath.value,
monitor: monitor.value,
qualityProfileId: qualityProfileId.value,
minimumAvailability: minimumAvailability.value,
tags: tags.value,
searchForMovie
});
@@ -91,6 +93,7 @@ AddNewMovieModalContentConnector.propTypes = {
rootFolderPath: PropTypes.object,
monitor: PropTypes.object.isRequired,
qualityProfileId: PropTypes.object,
minimumAvailability: PropTypes.object.isRequired,
tags: PropTypes.object.isRequired,
onModalClose: PropTypes.func.isRequired,
setAddMovieDefault: PropTypes.func.isRequired,

View File

@@ -22,12 +22,14 @@ class ImportMovieFooter extends Component {
const {
defaultMonitor,
defaultQualityProfileId
defaultQualityProfileId,
defaultMinimumAvailability
} = props;
this.state = {
monitor: defaultMonitor,
qualityProfileId: defaultQualityProfileId
qualityProfileId: defaultQualityProfileId,
minimumAvailability: defaultMinimumAvailability
};
}
@@ -35,13 +37,16 @@ class ImportMovieFooter extends Component {
const {
defaultMonitor,
defaultQualityProfileId,
defaultMinimumAvailability,
isMonitorMixed,
isQualityProfileIdMixed
isQualityProfileIdMixed,
isMinimumAvailabilityMixed
} = this.props;
const {
monitor,
qualityProfileId
qualityProfileId,
minimumAvailability
} = this.state;
const newState = {};
@@ -58,6 +63,12 @@ class ImportMovieFooter extends Component {
newState.qualityProfileId = defaultQualityProfileId;
}
if (isMinimumAvailabilityMixed && minimumAvailability !== MIXED) {
newState.minimumAvailability = MIXED;
} else if (!isMinimumAvailabilityMixed && minimumAvailability !== defaultMinimumAvailability) {
newState.minimumAvailability = defaultMinimumAvailability;
}
if (!_.isEmpty(newState)) {
this.setState(newState);
}
@@ -81,13 +92,15 @@ class ImportMovieFooter extends Component {
isLookingUpMovie,
isMonitorMixed,
isQualityProfileIdMixed,
isMinimumAvailabilityMixed,
onImportPress,
onCancelLookupPress
} = this.props;
const {
monitor,
qualityProfileId
qualityProfileId,
minimumAvailability
} = this.state;
return (
@@ -107,6 +120,21 @@ class ImportMovieFooter extends Component {
/>
</div>
<div className={styles.inputContainer}>
<div className={styles.label}>
Minimum Availability
</div>
<FormInputGroup
type={inputTypes.AVAILABILITY_SELECT}
name="minimumAvailability"
value={minimumAvailability}
isDisabled={!selectedCount}
includeMixed={isMinimumAvailabilityMixed}
onChange={this.onInputChange}
/>
</div>
<div className={styles.inputContainer}>
<div className={styles.label}>
Quality Profile
@@ -174,8 +202,10 @@ ImportMovieFooter.propTypes = {
isLookingUpMovie: PropTypes.bool.isRequired,
defaultMonitor: PropTypes.string.isRequired,
defaultQualityProfileId: PropTypes.number,
defaultMinimumAvailability: PropTypes.string,
isMonitorMixed: PropTypes.bool.isRequired,
isQualityProfileIdMixed: PropTypes.bool.isRequired,
isMinimumAvailabilityMixed: PropTypes.bool.isRequired,
onInputChange: PropTypes.func.isRequired,
onImportPress: PropTypes.func.isRequired,
onCancelLookupPress: PropTypes.func.isRequired

View File

@@ -18,7 +18,8 @@ function createMapStateToProps() {
(addMovie, importMovie, selectedIds) => {
const {
monitor: defaultMonitor,
qualityProfileId: defaultQualityProfileId
qualityProfileId: defaultQualityProfileId,
minimumAvailability: defaultMinimumAvailability
} = addMovie.defaults;
const {
@@ -29,6 +30,7 @@ function createMapStateToProps() {
const isMonitorMixed = isMixed(items, selectedIds, defaultMonitor, 'monitor');
const isQualityProfileIdMixed = isMixed(items, selectedIds, defaultQualityProfileId, 'qualityProfileId');
const isMinimumAvailabilityMixed = isMixed(items, selectedIds, defaultMinimumAvailability, 'minimumAvailability');
return {
selectedCount: selectedIds.length,
@@ -36,8 +38,10 @@ function createMapStateToProps() {
isImporting,
defaultMonitor,
defaultQualityProfileId,
defaultMinimumAvailability,
isMonitorMixed,
isQualityProfileIdMixed
isQualityProfileIdMixed,
isMinimumAvailabilityMixed
};
}
);

View File

@@ -11,6 +11,7 @@
min-width: 185px;
}
.minimumAvailability,
.qualityProfile {
composes: headerCell from '~Components/Table/VirtualTableHeaderCell.css';

View File

@@ -34,6 +34,13 @@ function ImportMovieHeader(props) {
Monitor
</VirtualTableHeaderCell>
<VirtualTableHeaderCell
className={styles.minimumAvailability}
name="minimumAvailability"
>
Min Availability
</VirtualTableHeaderCell>
<VirtualTableHeaderCell
className={styles.qualityProfile}
name="qualityProfileId"

View File

@@ -16,6 +16,7 @@
min-width: 185px;
}
.minimumAvailability,
.qualityProfile {
composes: cell from '~Components/Table/Cells/VirtualTableRowCell.css';

View File

@@ -14,6 +14,7 @@ function ImportMovieRow(props) {
id,
monitor,
qualityProfileId,
minimumAvailability,
selectedMovie,
isExistingMovie,
isSelected,
@@ -44,6 +45,15 @@ function ImportMovieRow(props) {
/>
</VirtualTableRowCell>
<VirtualTableRowCell className={styles.minimumAvailability}>
<FormInputGroup
type={inputTypes.AVAILABILITY_SELECT}
name="minimumAvailability"
value={minimumAvailability}
onChange={onInputChange}
/>
</VirtualTableRowCell>
<VirtualTableRowCell className={styles.qualityProfile}>
<FormInputGroup
type={inputTypes.QUALITY_PROFILE_SELECT}
@@ -68,6 +78,7 @@ ImportMovieRow.propTypes = {
id: PropTypes.string.isRequired,
monitor: PropTypes.string.isRequired,
qualityProfileId: PropTypes.number.isRequired,
minimumAvailability: PropTypes.string.isRequired,
selectedMovie: PropTypes.object,
isExistingMovie: PropTypes.bool.isRequired,
items: PropTypes.arrayOf(PropTypes.object).isRequired,

View File

@@ -15,13 +15,15 @@ class ImportMovieTable extends Component {
unmappedFolders,
defaultMonitor,
defaultQualityProfileId,
defaultMinimumAvailability,
onMovieLookup,
onSetImportMovieValue
} = this.props;
const values = {
monitor: defaultMonitor,
qualityProfileId: defaultQualityProfileId
qualityProfileId: defaultQualityProfileId,
minimumAvailability: defaultMinimumAvailability
};
unmappedFolders.forEach((unmappedFolder) => {
@@ -165,6 +167,7 @@ ImportMovieTable.propTypes = {
unmappedFolders: PropTypes.arrayOf(PropTypes.object),
defaultMonitor: PropTypes.string.isRequired,
defaultQualityProfileId: PropTypes.number,
defaultMinimumAvailability: PropTypes.string,
allSelected: PropTypes.bool.isRequired,
allUnselected: PropTypes.bool.isRequired,
selectedState: PropTypes.object.isRequired,

View File

@@ -14,6 +14,7 @@ function createMapStateToProps() {
return {
defaultMonitor: addMovie.defaults.monitor,
defaultQualityProfileId: addMovie.defaults.qualityProfileId,
defaultMinimumAvailability: addMovie.defaults.minimumAvailability,
items: importMovie.items,
isSmallScreen: dimensions.isSmallScreen,
allMovies