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