mirror of
https://github.com/Sonarr/Sonarr.git
synced 2026-04-19 21:46:43 -04:00
@@ -1,4 +1,6 @@
|
|||||||
import React, { useCallback, useMemo, useState } from 'react';
|
import React, { useCallback, useMemo } from 'react';
|
||||||
|
import { useDispatch, useSelector } from 'react-redux';
|
||||||
|
import AppState from 'App/State/AppState';
|
||||||
import FormGroup from 'Components/Form/FormGroup';
|
import FormGroup from 'Components/Form/FormGroup';
|
||||||
import FormInputGroup from 'Components/Form/FormInputGroup';
|
import FormInputGroup from 'Components/Form/FormInputGroup';
|
||||||
import FormLabel from 'Components/Form/FormLabel';
|
import FormLabel from 'Components/Form/FormLabel';
|
||||||
@@ -10,6 +12,8 @@ import ModalContent from 'Components/Modal/ModalContent';
|
|||||||
import ModalFooter from 'Components/Modal/ModalFooter';
|
import ModalFooter from 'Components/Modal/ModalFooter';
|
||||||
import ModalHeader from 'Components/Modal/ModalHeader';
|
import ModalHeader from 'Components/Modal/ModalHeader';
|
||||||
import { inputTypes, kinds, sizes } from 'Helpers/Props';
|
import { inputTypes, kinds, sizes } from 'Helpers/Props';
|
||||||
|
import { setQueueRemovalOption } from 'Store/Actions/queueActions';
|
||||||
|
import { InputChanged } from 'typings/inputs';
|
||||||
import translate from 'Utilities/String/translate';
|
import translate from 'Utilities/String/translate';
|
||||||
import styles from './RemoveQueueItemModal.css';
|
import styles from './RemoveQueueItemModal.css';
|
||||||
|
|
||||||
@@ -31,12 +35,6 @@ interface RemoveQueueItemModalProps {
|
|||||||
onModalClose: () => void;
|
onModalClose: () => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
type RemovalMethod = 'removeFromClient' | 'changeCategory' | 'ignore';
|
|
||||||
type BlocklistMethod =
|
|
||||||
| 'doNotBlocklist'
|
|
||||||
| 'blocklistAndSearch'
|
|
||||||
| 'blocklistOnly';
|
|
||||||
|
|
||||||
function RemoveQueueItemModal(props: RemoveQueueItemModalProps) {
|
function RemoveQueueItemModal(props: RemoveQueueItemModalProps) {
|
||||||
const {
|
const {
|
||||||
isOpen,
|
isOpen,
|
||||||
@@ -49,12 +47,13 @@ function RemoveQueueItemModal(props: RemoveQueueItemModalProps) {
|
|||||||
onModalClose,
|
onModalClose,
|
||||||
} = props;
|
} = props;
|
||||||
|
|
||||||
|
const dispatch = useDispatch();
|
||||||
|
|
||||||
const multipleSelected = selectedCount && selectedCount > 1;
|
const multipleSelected = selectedCount && selectedCount > 1;
|
||||||
|
|
||||||
const [removalMethod, setRemovalMethod] =
|
const { removalMethod, blocklistMethod } = useSelector(
|
||||||
useState<RemovalMethod>('removeFromClient');
|
(state: AppState) => state.queue.removalOptions
|
||||||
const [blocklistMethod, setBlocklistMethod] =
|
);
|
||||||
useState<BlocklistMethod>('doNotBlocklist');
|
|
||||||
|
|
||||||
const { title, message } = useMemo(() => {
|
const { title, message } = useMemo(() => {
|
||||||
if (!selectedCount) {
|
if (!selectedCount) {
|
||||||
@@ -138,18 +137,11 @@ function RemoveQueueItemModal(props: RemoveQueueItemModalProps) {
|
|||||||
return options;
|
return options;
|
||||||
}, [isPending, multipleSelected]);
|
}, [isPending, multipleSelected]);
|
||||||
|
|
||||||
const handleRemovalMethodChange = useCallback(
|
const handleRemovalOptionInputChange = useCallback(
|
||||||
({ value }: { value: RemovalMethod }) => {
|
({ name, value }: InputChanged) => {
|
||||||
setRemovalMethod(value);
|
dispatch(setQueueRemovalOption({ [name]: value }));
|
||||||
},
|
},
|
||||||
[setRemovalMethod]
|
[dispatch]
|
||||||
);
|
|
||||||
|
|
||||||
const handleBlocklistMethodChange = useCallback(
|
|
||||||
({ value }: { value: BlocklistMethod }) => {
|
|
||||||
setBlocklistMethod(value);
|
|
||||||
},
|
|
||||||
[setBlocklistMethod]
|
|
||||||
);
|
);
|
||||||
|
|
||||||
const handleConfirmRemove = useCallback(() => {
|
const handleConfirmRemove = useCallback(() => {
|
||||||
@@ -159,23 +151,11 @@ function RemoveQueueItemModal(props: RemoveQueueItemModalProps) {
|
|||||||
blocklist: blocklistMethod !== 'doNotBlocklist',
|
blocklist: blocklistMethod !== 'doNotBlocklist',
|
||||||
skipRedownload: blocklistMethod === 'blocklistOnly',
|
skipRedownload: blocklistMethod === 'blocklistOnly',
|
||||||
});
|
});
|
||||||
|
}, [removalMethod, blocklistMethod, onRemovePress]);
|
||||||
setRemovalMethod('removeFromClient');
|
|
||||||
setBlocklistMethod('doNotBlocklist');
|
|
||||||
}, [
|
|
||||||
removalMethod,
|
|
||||||
blocklistMethod,
|
|
||||||
setRemovalMethod,
|
|
||||||
setBlocklistMethod,
|
|
||||||
onRemovePress,
|
|
||||||
]);
|
|
||||||
|
|
||||||
const handleModalClose = useCallback(() => {
|
const handleModalClose = useCallback(() => {
|
||||||
setRemovalMethod('removeFromClient');
|
|
||||||
setBlocklistMethod('doNotBlocklist');
|
|
||||||
|
|
||||||
onModalClose();
|
onModalClose();
|
||||||
}, [setRemovalMethod, setBlocklistMethod, onModalClose]);
|
}, [onModalClose]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Modal isOpen={isOpen} size={sizes.MEDIUM} onModalClose={handleModalClose}>
|
<Modal isOpen={isOpen} size={sizes.MEDIUM} onModalClose={handleModalClose}>
|
||||||
@@ -198,7 +178,7 @@ function RemoveQueueItemModal(props: RemoveQueueItemModalProps) {
|
|||||||
helpTextWarning={translate(
|
helpTextWarning={translate(
|
||||||
'RemoveQueueItemRemovalMethodHelpTextWarning'
|
'RemoveQueueItemRemovalMethodHelpTextWarning'
|
||||||
)}
|
)}
|
||||||
onChange={handleRemovalMethodChange}
|
onChange={handleRemovalOptionInputChange}
|
||||||
/>
|
/>
|
||||||
</FormGroup>
|
</FormGroup>
|
||||||
)}
|
)}
|
||||||
@@ -216,7 +196,7 @@ function RemoveQueueItemModal(props: RemoveQueueItemModalProps) {
|
|||||||
value={blocklistMethod}
|
value={blocklistMethod}
|
||||||
values={blocklistMethodOptions}
|
values={blocklistMethodOptions}
|
||||||
helpText={translate('BlocklistReleaseHelpText')}
|
helpText={translate('BlocklistReleaseHelpText')}
|
||||||
onChange={handleBlocklistMethodChange}
|
onChange={handleRemovalOptionInputChange}
|
||||||
/>
|
/>
|
||||||
</FormGroup>
|
</FormGroup>
|
||||||
</ModalBody>
|
</ModalBody>
|
||||||
|
|||||||
@@ -32,6 +32,17 @@ export interface QueuePagedAppState
|
|||||||
removeError: Error;
|
removeError: Error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export type RemovalMethod = 'removeFromClient' | 'changeCategory' | 'ignore';
|
||||||
|
export type BlocklistMethod =
|
||||||
|
| 'doNotBlocklist'
|
||||||
|
| 'blocklistAndSearch'
|
||||||
|
| 'blocklistOnly';
|
||||||
|
|
||||||
|
interface RemovalOptions {
|
||||||
|
removalMethod: RemovalMethod;
|
||||||
|
blocklistMethod: BlocklistMethod;
|
||||||
|
}
|
||||||
|
|
||||||
interface QueueAppState {
|
interface QueueAppState {
|
||||||
status: AppSectionItemState<QueueStatus>;
|
status: AppSectionItemState<QueueStatus>;
|
||||||
details: QueueDetailsAppState;
|
details: QueueDetailsAppState;
|
||||||
@@ -39,6 +50,7 @@ interface QueueAppState {
|
|||||||
options: {
|
options: {
|
||||||
includeUnknownSeriesItems: boolean;
|
includeUnknownSeriesItems: boolean;
|
||||||
};
|
};
|
||||||
|
removalOptions: RemovalOptions;
|
||||||
}
|
}
|
||||||
|
|
||||||
export default QueueAppState;
|
export default QueueAppState;
|
||||||
|
|||||||
@@ -31,6 +31,11 @@ export const defaultState = {
|
|||||||
includeUnknownSeriesItems: true
|
includeUnknownSeriesItems: true
|
||||||
},
|
},
|
||||||
|
|
||||||
|
removalOptions: {
|
||||||
|
removalMethod: 'removeFromClient',
|
||||||
|
blocklistMethod: 'doNotBlocklist'
|
||||||
|
},
|
||||||
|
|
||||||
status: {
|
status: {
|
||||||
isFetching: false,
|
isFetching: false,
|
||||||
isPopulated: false,
|
isPopulated: false,
|
||||||
@@ -225,6 +230,7 @@ export const defaultState = {
|
|||||||
|
|
||||||
export const persistState = [
|
export const persistState = [
|
||||||
'queue.options',
|
'queue.options',
|
||||||
|
'queue.removalOptions',
|
||||||
'queue.paged.pageSize',
|
'queue.paged.pageSize',
|
||||||
'queue.paged.sortKey',
|
'queue.paged.sortKey',
|
||||||
'queue.paged.sortDirection',
|
'queue.paged.sortDirection',
|
||||||
@@ -257,6 +263,7 @@ export const SET_QUEUE_SORT = 'queue/setQueueSort';
|
|||||||
export const SET_QUEUE_FILTER = 'queue/setQueueFilter';
|
export const SET_QUEUE_FILTER = 'queue/setQueueFilter';
|
||||||
export const SET_QUEUE_TABLE_OPTION = 'queue/setQueueTableOption';
|
export const SET_QUEUE_TABLE_OPTION = 'queue/setQueueTableOption';
|
||||||
export const SET_QUEUE_OPTION = 'queue/setQueueOption';
|
export const SET_QUEUE_OPTION = 'queue/setQueueOption';
|
||||||
|
export const SET_QUEUE_REMOVAL_OPTION = 'queue/setQueueRemoveOption';
|
||||||
export const CLEAR_QUEUE = 'queue/clearQueue';
|
export const CLEAR_QUEUE = 'queue/clearQueue';
|
||||||
|
|
||||||
export const GRAB_QUEUE_ITEM = 'queue/grabQueueItem';
|
export const GRAB_QUEUE_ITEM = 'queue/grabQueueItem';
|
||||||
@@ -282,6 +289,7 @@ export const setQueueSort = createThunk(SET_QUEUE_SORT);
|
|||||||
export const setQueueFilter = createThunk(SET_QUEUE_FILTER);
|
export const setQueueFilter = createThunk(SET_QUEUE_FILTER);
|
||||||
export const setQueueTableOption = createAction(SET_QUEUE_TABLE_OPTION);
|
export const setQueueTableOption = createAction(SET_QUEUE_TABLE_OPTION);
|
||||||
export const setQueueOption = createAction(SET_QUEUE_OPTION);
|
export const setQueueOption = createAction(SET_QUEUE_OPTION);
|
||||||
|
export const setQueueRemovalOption = createAction(SET_QUEUE_REMOVAL_OPTION);
|
||||||
export const clearQueue = createAction(CLEAR_QUEUE);
|
export const clearQueue = createAction(CLEAR_QUEUE);
|
||||||
|
|
||||||
export const grabQueueItem = createThunk(GRAB_QUEUE_ITEM);
|
export const grabQueueItem = createThunk(GRAB_QUEUE_ITEM);
|
||||||
@@ -529,6 +537,18 @@ export const reducers = createHandleActions({
|
|||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
|
[SET_QUEUE_REMOVAL_OPTION]: function(state, { payload }) {
|
||||||
|
const queueRemovalOptions = state.removalOptions;
|
||||||
|
|
||||||
|
return {
|
||||||
|
...state,
|
||||||
|
removalOptions: {
|
||||||
|
...queueRemovalOptions,
|
||||||
|
...payload
|
||||||
|
}
|
||||||
|
};
|
||||||
|
},
|
||||||
|
|
||||||
[CLEAR_QUEUE]: createClearReducer(paged, {
|
[CLEAR_QUEUE]: createClearReducer(paged, {
|
||||||
isFetching: false,
|
isFetching: false,
|
||||||
isPopulated: false,
|
isPopulated: false,
|
||||||
|
|||||||
Reference in New Issue
Block a user