1
0
mirror of https://github.com/Radarr/Radarr.git synced 2024-07-07 04:19:25 +02:00

New: Minimum Availability in bulk manage import lists

Fixes #9461
This commit is contained in:
Bogdan 2023-12-06 14:35:20 +02:00
parent ced624c2ff
commit a059a700eb
8 changed files with 45 additions and 1 deletions

View File

@ -15,6 +15,7 @@ interface SavePayload {
enabled?: boolean; enabled?: boolean;
enableAuto?: boolean; enableAuto?: boolean;
qualityProfileId?: number; qualityProfileId?: number;
minimumAvailability?: string;
rootFolderPath?: string; rootFolderPath?: string;
} }
@ -58,6 +59,7 @@ function ManageImportListsEditModalContent(
const [qualityProfileId, setQualityProfileId] = useState<string | number>( const [qualityProfileId, setQualityProfileId] = useState<string | number>(
NO_CHANGE NO_CHANGE
); );
const [minimumAvailability, setMinimumAvailability] = useState(NO_CHANGE);
const [rootFolderPath, setRootFolderPath] = useState(NO_CHANGE); const [rootFolderPath, setRootFolderPath] = useState(NO_CHANGE);
const save = useCallback(() => { const save = useCallback(() => {
@ -79,6 +81,11 @@ function ManageImportListsEditModalContent(
payload.qualityProfileId = qualityProfileId as number; payload.qualityProfileId = qualityProfileId as number;
} }
if (minimumAvailability !== NO_CHANGE) {
hasChanges = true;
payload.minimumAvailability = minimumAvailability as string;
}
if (rootFolderPath !== NO_CHANGE) { if (rootFolderPath !== NO_CHANGE) {
hasChanges = true; hasChanges = true;
payload.rootFolderPath = rootFolderPath; payload.rootFolderPath = rootFolderPath;
@ -93,6 +100,7 @@ function ManageImportListsEditModalContent(
enabled, enabled,
enableAuto, enableAuto,
qualityProfileId, qualityProfileId,
minimumAvailability,
rootFolderPath, rootFolderPath,
onSavePress, onSavePress,
onModalClose, onModalClose,
@ -110,6 +118,9 @@ function ManageImportListsEditModalContent(
case 'qualityProfileId': case 'qualityProfileId':
setQualityProfileId(value); setQualityProfileId(value);
break; break;
case 'minimumAvailability':
setMinimumAvailability(value);
break;
case 'rootFolderPath': case 'rootFolderPath':
setRootFolderPath(value); setRootFolderPath(value);
break; break;
@ -164,6 +175,19 @@ function ManageImportListsEditModalContent(
/> />
</FormGroup> </FormGroup>
<FormGroup>
<FormLabel>{translate('MinimumAvailability')}</FormLabel>
<FormInputGroup
type={inputTypes.AVAILABILITY_SELECT}
name="minimumAvailability"
value={minimumAvailability}
includeNoChange={true}
includeNoChangeDisabled={false}
onChange={onInputChange}
/>
</FormGroup>
<FormGroup> <FormGroup>
<FormLabel>{translate('RootFolder')}</FormLabel> <FormLabel>{translate('RootFolder')}</FormLabel>

View File

@ -1,5 +1,6 @@
import React from 'react'; import React from 'react';
import Modal from 'Components/Modal/Modal'; import Modal from 'Components/Modal/Modal';
import { sizes } from 'Helpers/Props';
import ManageImportListsModalContent from './ManageImportListsModalContent'; import ManageImportListsModalContent from './ManageImportListsModalContent';
interface ManageImportListsModalProps { interface ManageImportListsModalProps {
@ -11,7 +12,7 @@ function ManageImportListsModal(props: ManageImportListsModalProps) {
const { isOpen, onModalClose } = props; const { isOpen, onModalClose } = props;
return ( return (
<Modal isOpen={isOpen} onModalClose={onModalClose}> <Modal isOpen={isOpen} size={sizes.EXTRA_LARGE} onModalClose={onModalClose}>
<ManageImportListsModalContent onModalClose={onModalClose} /> <ManageImportListsModalContent onModalClose={onModalClose} />
</Modal> </Modal>
); );

View File

@ -52,6 +52,12 @@ const COLUMNS = [
isSortable: true, isSortable: true,
isVisible: true, isVisible: true,
}, },
{
name: 'minimumAvailability',
label: () => translate('MinimumAvailability'),
isSortable: true,
isVisible: true,
},
{ {
name: 'rootFolderPath', name: 'rootFolderPath',
label: () => translate('RootFolder'), label: () => translate('RootFolder'),

View File

@ -2,6 +2,7 @@
.tags, .tags,
.enabled, .enabled,
.enableAuto, .enableAuto,
.minimumAvailability,
.qualityProfileId, .qualityProfileId,
.rootFolderPath, .rootFolderPath,
.implementation { .implementation {

View File

@ -4,6 +4,7 @@ interface CssExports {
'enableAuto': string; 'enableAuto': string;
'enabled': string; 'enabled': string;
'implementation': string; 'implementation': string;
'minimumAvailability': string;
'name': string; 'name': string;
'qualityProfileId': string; 'qualityProfileId': string;
'rootFolderPath': string; 'rootFolderPath': string;

View File

@ -7,6 +7,7 @@ import TableRow from 'Components/Table/TableRow';
import TagListConnector from 'Components/TagListConnector'; import TagListConnector from 'Components/TagListConnector';
import { createQualityProfileSelectorForHook } from 'Store/Selectors/createQualityProfileSelector'; import { createQualityProfileSelectorForHook } from 'Store/Selectors/createQualityProfileSelector';
import { SelectStateInputProps } from 'typings/props'; import { SelectStateInputProps } from 'typings/props';
import firstCharToUpper from 'Utilities/String/firstCharToUpper';
import translate from 'Utilities/String/translate'; import translate from 'Utilities/String/translate';
import styles from './ManageImportListsModalRow.css'; import styles from './ManageImportListsModalRow.css';
@ -15,6 +16,7 @@ interface ManageImportListsModalRowProps {
name: string; name: string;
rootFolderPath: string; rootFolderPath: string;
qualityProfileId: number; qualityProfileId: number;
minimumAvailability: string;
implementation: string; implementation: string;
tags: number[]; tags: number[];
enabled: boolean; enabled: boolean;
@ -30,6 +32,7 @@ function ManageImportListsModalRow(props: ManageImportListsModalRowProps) {
isSelected, isSelected,
name, name,
rootFolderPath, rootFolderPath,
minimumAvailability,
qualityProfileId, qualityProfileId,
implementation, implementation,
enabled, enabled,
@ -69,6 +72,10 @@ function ManageImportListsModalRow(props: ManageImportListsModalRowProps) {
{qualityProfile?.name ?? translate('None')} {qualityProfile?.name ?? translate('None')}
</TableRowCell> </TableRowCell>
<TableRowCell className={styles.minimumAvailability}>
{translate(firstCharToUpper(minimumAvailability))}
</TableRowCell>
<TableRowCell className={styles.rootFolderPath}> <TableRowCell className={styles.rootFolderPath}>
{rootFolderPath} {rootFolderPath}
</TableRowCell> </TableRowCell>

View File

@ -15,6 +15,7 @@ interface ImportList extends ModelBase {
enabled: boolean; enabled: boolean;
enableAuto: boolean; enableAuto: boolean;
qualityProfileId: number; qualityProfileId: number;
minimumAvailability: string;
rootFolderPath: string; rootFolderPath: string;
name: string; name: string;
fields: Field[]; fields: Field[];

View File

@ -1,5 +1,6 @@
using System.Collections.Generic; using System.Collections.Generic;
using NzbDrone.Core.ImportLists; using NzbDrone.Core.ImportLists;
using NzbDrone.Core.Movies;
namespace Radarr.Api.V3.ImportLists namespace Radarr.Api.V3.ImportLists
{ {
@ -9,6 +10,7 @@ public class ImportListBulkResource : ProviderBulkResource<ImportListBulkResourc
public bool? EnableAuto { get; set; } public bool? EnableAuto { get; set; }
public string RootFolderPath { get; set; } public string RootFolderPath { get; set; }
public int? QualityProfileId { get; set; } public int? QualityProfileId { get; set; }
public MovieStatusType? MinimumAvailability { get; set; }
} }
public class ImportListBulkResourceMapper : ProviderBulkResourceMapper<ImportListBulkResource, ImportListDefinition> public class ImportListBulkResourceMapper : ProviderBulkResourceMapper<ImportListBulkResource, ImportListDefinition>
@ -26,6 +28,7 @@ public override List<ImportListDefinition> UpdateModel(ImportListBulkResource re
existing.EnableAuto = resource.EnableAuto ?? existing.EnableAuto; existing.EnableAuto = resource.EnableAuto ?? existing.EnableAuto;
existing.RootFolderPath = resource.RootFolderPath ?? existing.RootFolderPath; existing.RootFolderPath = resource.RootFolderPath ?? existing.RootFolderPath;
existing.QualityProfileId = resource.QualityProfileId ?? existing.QualityProfileId; existing.QualityProfileId = resource.QualityProfileId ?? existing.QualityProfileId;
existing.MinimumAvailability = resource.MinimumAvailability ?? existing.MinimumAvailability;
}); });
return existingDefinitions; return existingDefinitions;