parent
4849d1da10
commit
7b4bd50f18
@ -1,40 +0,0 @@
|
|||||||
import PropTypes from 'prop-types';
|
|
||||||
import React, { Component } from 'react';
|
|
||||||
import { connect } from 'react-redux';
|
|
||||||
import { clearPendingChanges } from 'Store/Actions/baseActions';
|
|
||||||
import EditSeriesModal from './EditSeriesModal';
|
|
||||||
|
|
||||||
const mapDispatchToProps = {
|
|
||||||
clearPendingChanges
|
|
||||||
};
|
|
||||||
|
|
||||||
class EditSeriesModalConnector extends Component {
|
|
||||||
|
|
||||||
//
|
|
||||||
// Listeners
|
|
||||||
|
|
||||||
onModalClose = () => {
|
|
||||||
this.props.clearPendingChanges({ section: 'series' });
|
|
||||||
this.props.onModalClose();
|
|
||||||
};
|
|
||||||
|
|
||||||
//
|
|
||||||
// Render
|
|
||||||
|
|
||||||
render() {
|
|
||||||
return (
|
|
||||||
<EditSeriesModal
|
|
||||||
{...this.props}
|
|
||||||
onModalClose={this.onModalClose}
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
EditSeriesModalConnector.propTypes = {
|
|
||||||
...EditSeriesModal.propTypes,
|
|
||||||
onModalClose: PropTypes.func.isRequired,
|
|
||||||
clearPendingChanges: PropTypes.func.isRequired
|
|
||||||
};
|
|
||||||
|
|
||||||
export default connect(undefined, mapDispatchToProps)(EditSeriesModalConnector);
|
|
@ -1,118 +0,0 @@
|
|||||||
import _ from 'lodash';
|
|
||||||
import PropTypes from 'prop-types';
|
|
||||||
import React, { Component } from 'react';
|
|
||||||
import { connect } from 'react-redux';
|
|
||||||
import { createSelector } from 'reselect';
|
|
||||||
import { saveSeries, setSeriesValue } from 'Store/Actions/seriesActions';
|
|
||||||
import createSeriesSelector from 'Store/Selectors/createSeriesSelector';
|
|
||||||
import selectSettings from 'Store/Selectors/selectSettings';
|
|
||||||
import EditSeriesModalContent from './EditSeriesModalContent';
|
|
||||||
|
|
||||||
function createIsPathChangingSelector() {
|
|
||||||
return createSelector(
|
|
||||||
(state) => state.series.pendingChanges,
|
|
||||||
createSeriesSelector(),
|
|
||||||
(pendingChanges, series) => {
|
|
||||||
const path = pendingChanges.path;
|
|
||||||
|
|
||||||
if (path == null) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return series.path !== path;
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
function createMapStateToProps() {
|
|
||||||
return createSelector(
|
|
||||||
(state) => state.series,
|
|
||||||
createSeriesSelector(),
|
|
||||||
createIsPathChangingSelector(),
|
|
||||||
(seriesState, series, isPathChanging) => {
|
|
||||||
const {
|
|
||||||
isSaving,
|
|
||||||
saveError,
|
|
||||||
pendingChanges
|
|
||||||
} = seriesState;
|
|
||||||
|
|
||||||
const seriesSettings = _.pick(series, [
|
|
||||||
'monitored',
|
|
||||||
'monitorNewItems',
|
|
||||||
'seasonFolder',
|
|
||||||
'qualityProfileId',
|
|
||||||
'seriesType',
|
|
||||||
'path',
|
|
||||||
'tags'
|
|
||||||
]);
|
|
||||||
|
|
||||||
const settings = selectSettings(seriesSettings, pendingChanges, saveError);
|
|
||||||
|
|
||||||
return {
|
|
||||||
title: series.title,
|
|
||||||
isSaving,
|
|
||||||
saveError,
|
|
||||||
isPathChanging,
|
|
||||||
originalPath: series.path,
|
|
||||||
item: settings.settings,
|
|
||||||
...settings
|
|
||||||
};
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
const mapDispatchToProps = {
|
|
||||||
dispatchSetSeriesValue: setSeriesValue,
|
|
||||||
dispatchSaveSeries: saveSeries
|
|
||||||
};
|
|
||||||
|
|
||||||
class EditSeriesModalContentConnector extends Component {
|
|
||||||
|
|
||||||
//
|
|
||||||
// Lifecycle
|
|
||||||
|
|
||||||
componentDidUpdate(prevProps, prevState) {
|
|
||||||
if (prevProps.isSaving && !this.props.isSaving && !this.props.saveError) {
|
|
||||||
this.props.onModalClose();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Listeners
|
|
||||||
|
|
||||||
onInputChange = ({ name, value }) => {
|
|
||||||
this.props.dispatchSetSeriesValue({ name, value });
|
|
||||||
};
|
|
||||||
|
|
||||||
onSavePress = (moveFiles) => {
|
|
||||||
this.props.dispatchSaveSeries({
|
|
||||||
id: this.props.seriesId,
|
|
||||||
moveFiles
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
//
|
|
||||||
// Render
|
|
||||||
|
|
||||||
render() {
|
|
||||||
return (
|
|
||||||
<EditSeriesModalContent
|
|
||||||
{...this.props}
|
|
||||||
onInputChange={this.onInputChange}
|
|
||||||
onSavePress={this.onSavePress}
|
|
||||||
onMoveSeriesPress={this.onMoveSeriesPress}
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
EditSeriesModalContentConnector.propTypes = {
|
|
||||||
seriesId: PropTypes.number,
|
|
||||||
isSaving: PropTypes.bool.isRequired,
|
|
||||||
saveError: PropTypes.object,
|
|
||||||
dispatchSetSeriesValue: PropTypes.func.isRequired,
|
|
||||||
dispatchSaveSeries: PropTypes.func.isRequired,
|
|
||||||
onModalClose: PropTypes.func.isRequired
|
|
||||||
};
|
|
||||||
|
|
||||||
export default connect(createMapStateToProps, mapDispatchToProps)(EditSeriesModalContentConnector);
|
|
@ -1,86 +0,0 @@
|
|||||||
import PropTypes from 'prop-types';
|
|
||||||
import React from 'react';
|
|
||||||
import Button from 'Components/Link/Button';
|
|
||||||
import Modal from 'Components/Modal/Modal';
|
|
||||||
import ModalBody from 'Components/Modal/ModalBody';
|
|
||||||
import ModalContent from 'Components/Modal/ModalContent';
|
|
||||||
import ModalFooter from 'Components/Modal/ModalFooter';
|
|
||||||
import ModalHeader from 'Components/Modal/ModalHeader';
|
|
||||||
import { kinds, sizes } from 'Helpers/Props';
|
|
||||||
import translate from 'Utilities/String/translate';
|
|
||||||
import styles from './MoveSeriesModal.css';
|
|
||||||
|
|
||||||
function MoveSeriesModal(props) {
|
|
||||||
const {
|
|
||||||
originalPath,
|
|
||||||
destinationPath,
|
|
||||||
destinationRootFolder,
|
|
||||||
isOpen,
|
|
||||||
onModalClose,
|
|
||||||
onSavePress,
|
|
||||||
onMoveSeriesPress
|
|
||||||
} = props;
|
|
||||||
|
|
||||||
if (
|
|
||||||
isOpen &&
|
|
||||||
!originalPath &&
|
|
||||||
!destinationPath &&
|
|
||||||
!destinationRootFolder
|
|
||||||
) {
|
|
||||||
console.error('originalPath and destinationPath OR destinationRootFolder must be provided');
|
|
||||||
}
|
|
||||||
|
|
||||||
return (
|
|
||||||
<Modal
|
|
||||||
isOpen={isOpen}
|
|
||||||
size={sizes.MEDIUM}
|
|
||||||
closeOnBackgroundClick={false}
|
|
||||||
onModalClose={onModalClose}
|
|
||||||
>
|
|
||||||
<ModalContent
|
|
||||||
showCloseButton={true}
|
|
||||||
onModalClose={onModalClose}
|
|
||||||
>
|
|
||||||
<ModalHeader>
|
|
||||||
{translate('MoveFiles')}
|
|
||||||
</ModalHeader>
|
|
||||||
|
|
||||||
<ModalBody>
|
|
||||||
{
|
|
||||||
destinationRootFolder ?
|
|
||||||
translate('MoveSeriesFoldersToRootFolder', { destinationRootFolder }) :
|
|
||||||
translate('MoveSeriesFoldersToNewPath', { originalPath, destinationPath })
|
|
||||||
}
|
|
||||||
</ModalBody>
|
|
||||||
|
|
||||||
<ModalFooter>
|
|
||||||
<Button
|
|
||||||
className={styles.doNotMoveButton}
|
|
||||||
onPress={onSavePress}
|
|
||||||
>
|
|
||||||
{translate('MoveSeriesFoldersDontMoveFiles')}
|
|
||||||
</Button>
|
|
||||||
|
|
||||||
<Button
|
|
||||||
kind={kinds.DANGER}
|
|
||||||
onPress={onMoveSeriesPress}
|
|
||||||
>
|
|
||||||
{translate('MoveSeriesFoldersMoveFiles')}
|
|
||||||
</Button>
|
|
||||||
</ModalFooter>
|
|
||||||
</ModalContent>
|
|
||||||
</Modal>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
MoveSeriesModal.propTypes = {
|
|
||||||
originalPath: PropTypes.string,
|
|
||||||
destinationPath: PropTypes.string,
|
|
||||||
destinationRootFolder: PropTypes.string,
|
|
||||||
isOpen: PropTypes.bool.isRequired,
|
|
||||||
onModalClose: PropTypes.func.isRequired,
|
|
||||||
onSavePress: PropTypes.func.isRequired,
|
|
||||||
onMoveSeriesPress: PropTypes.func.isRequired
|
|
||||||
};
|
|
||||||
|
|
||||||
export default MoveSeriesModal;
|
|
@ -0,0 +1,76 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import Button from 'Components/Link/Button';
|
||||||
|
import Modal from 'Components/Modal/Modal';
|
||||||
|
import ModalBody from 'Components/Modal/ModalBody';
|
||||||
|
import ModalContent from 'Components/Modal/ModalContent';
|
||||||
|
import ModalFooter from 'Components/Modal/ModalFooter';
|
||||||
|
import ModalHeader from 'Components/Modal/ModalHeader';
|
||||||
|
import { kinds, sizes } from 'Helpers/Props';
|
||||||
|
import translate from 'Utilities/String/translate';
|
||||||
|
import styles from './MoveSeriesModal.css';
|
||||||
|
|
||||||
|
interface MoveSeriesModalProps {
|
||||||
|
originalPath?: string;
|
||||||
|
destinationPath?: string;
|
||||||
|
destinationRootFolder?: string;
|
||||||
|
isOpen: boolean;
|
||||||
|
onModalClose: () => void;
|
||||||
|
onSavePress: () => void;
|
||||||
|
onMoveSeriesPress: () => void;
|
||||||
|
}
|
||||||
|
|
||||||
|
function MoveSeriesModal({
|
||||||
|
originalPath,
|
||||||
|
destinationPath,
|
||||||
|
destinationRootFolder,
|
||||||
|
isOpen,
|
||||||
|
onModalClose,
|
||||||
|
onSavePress,
|
||||||
|
onMoveSeriesPress,
|
||||||
|
}: MoveSeriesModalProps) {
|
||||||
|
if (isOpen && !originalPath && !destinationPath && !destinationRootFolder) {
|
||||||
|
console.error(
|
||||||
|
'originalPath and destinationPath OR destinationRootFolder must be provided'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Modal
|
||||||
|
isOpen={isOpen}
|
||||||
|
size={sizes.MEDIUM}
|
||||||
|
closeOnBackgroundClick={false}
|
||||||
|
onModalClose={onModalClose}
|
||||||
|
>
|
||||||
|
<ModalContent showCloseButton={true} onModalClose={onModalClose}>
|
||||||
|
<ModalHeader>{translate('MoveFiles')}</ModalHeader>
|
||||||
|
|
||||||
|
<ModalBody>
|
||||||
|
{destinationRootFolder
|
||||||
|
? translate('MoveSeriesFoldersToRootFolder', {
|
||||||
|
destinationRootFolder,
|
||||||
|
})
|
||||||
|
: null}
|
||||||
|
|
||||||
|
{originalPath && destinationPath
|
||||||
|
? translate('MoveSeriesFoldersToNewPath', {
|
||||||
|
originalPath,
|
||||||
|
destinationPath,
|
||||||
|
})
|
||||||
|
: null}
|
||||||
|
</ModalBody>
|
||||||
|
|
||||||
|
<ModalFooter>
|
||||||
|
<Button className={styles.doNotMoveButton} onPress={onSavePress}>
|
||||||
|
{translate('MoveSeriesFoldersDontMoveFiles')}
|
||||||
|
</Button>
|
||||||
|
|
||||||
|
<Button kind={kinds.DANGER} onPress={onMoveSeriesPress}>
|
||||||
|
{translate('MoveSeriesFoldersMoveFiles')}
|
||||||
|
</Button>
|
||||||
|
</ModalFooter>
|
||||||
|
</ModalContent>
|
||||||
|
</Modal>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default MoveSeriesModal;
|
Loading…
Reference in new issue