diff --git a/frontend/src/Movie/Editor/Delete/DeleteMovieModal.js b/frontend/src/Movie/Editor/Delete/DeleteMovieModal.js deleted file mode 100644 index 8a9a80b16c..0000000000 --- a/frontend/src/Movie/Editor/Delete/DeleteMovieModal.js +++ /dev/null @@ -1,31 +0,0 @@ -import PropTypes from 'prop-types'; -import React from 'react'; -import Modal from 'Components/Modal/Modal'; -import DeleteMovieModalContentConnector from './DeleteMovieModalContentConnector'; - -function DeleteMovieModal(props) { - const { - isOpen, - onModalClose, - ...otherProps - } = props; - - return ( - - - - ); -} - -DeleteMovieModal.propTypes = { - isOpen: PropTypes.bool.isRequired, - onModalClose: PropTypes.func.isRequired -}; - -export default DeleteMovieModal; diff --git a/frontend/src/Movie/Editor/Delete/DeleteMovieModalContent.css b/frontend/src/Movie/Editor/Delete/DeleteMovieModalContent.css deleted file mode 100644 index 02a0514beb..0000000000 --- a/frontend/src/Movie/Editor/Delete/DeleteMovieModalContent.css +++ /dev/null @@ -1,13 +0,0 @@ -.message { - margin-top: 20px; - margin-bottom: 10px; -} - -.pathContainer { - margin-left: 5px; -} - -.path { - margin-left: 5px; - color: var(--dangerColor); -} diff --git a/frontend/src/Movie/Editor/Delete/DeleteMovieModalContent.css.d.ts b/frontend/src/Movie/Editor/Delete/DeleteMovieModalContent.css.d.ts deleted file mode 100644 index bcc2e24925..0000000000 --- a/frontend/src/Movie/Editor/Delete/DeleteMovieModalContent.css.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -// This file is automatically generated. -// Please do not change this file! -interface CssExports { - 'message': string; - 'path': string; - 'pathContainer': string; -} -export const cssExports: CssExports; -export default cssExports; diff --git a/frontend/src/Movie/Editor/Delete/DeleteMovieModalContent.js b/frontend/src/Movie/Editor/Delete/DeleteMovieModalContent.js deleted file mode 100644 index cba092b643..0000000000 --- a/frontend/src/Movie/Editor/Delete/DeleteMovieModalContent.js +++ /dev/null @@ -1,145 +0,0 @@ -import PropTypes from 'prop-types'; -import React, { Component } from 'react'; -import FormGroup from 'Components/Form/FormGroup'; -import FormInputGroup from 'Components/Form/FormInputGroup'; -import FormLabel from 'Components/Form/FormLabel'; -import Button from 'Components/Link/Button'; -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 { inputTypes, kinds } from 'Helpers/Props'; -import translate from 'Utilities/String/translate'; -import styles from './DeleteMovieModalContent.css'; - -class DeleteMovieModalContent extends Component { - - // - // Lifecycle - - constructor(props, context) { - super(props, context); - - this.state = { - deleteFiles: false, - addImportExclusion: false - }; - } - - // - // Listeners - - onDeleteFilesChange = ({ value }) => { - this.setState({ deleteFiles: value }); - }; - - onAddImportExclusionChange = ({ value }) => { - this.setState({ addImportExclusion: value }); - }; - - onDeleteMovieConfirmed = () => { - const deleteFiles = this.state.deleteFiles; - const addImportExclusion = this.state.addImportExclusion; - - this.setState({ deleteFiles: false, addImportExclusion: false }); - this.props.onDeleteSelectedPress(deleteFiles, addImportExclusion); - }; - - // - // Render - - render() { - const { - movies, - onModalClose - } = this.props; - - const deleteFiles = this.state.deleteFiles; - const addImportExclusion = this.state.addImportExclusion; - - return ( - - - {translate('DeleteSelectedMovie')} - - - -
- - {`Delete Movie Folder${movies.length > 1 ? 's' : ''}`} - - 1 ? 's' : ''} and all contents`} - kind={kinds.DANGER} - onChange={this.onDeleteFilesChange} - /> - - - - {translate('AddListExclusion')} - - - -
- -
- {`Are you sure you want to delete ${movies.length} selected movie(s)${deleteFiles ? ' and all contents' : ''}?`} -
- - -
- - - - - - -
- ); - } -} - -DeleteMovieModalContent.propTypes = { - movies: PropTypes.arrayOf(PropTypes.object).isRequired, - onModalClose: PropTypes.func.isRequired, - onDeleteSelectedPress: PropTypes.func.isRequired -}; - -export default DeleteMovieModalContent; diff --git a/frontend/src/Movie/Editor/Delete/DeleteMovieModalContentConnector.js b/frontend/src/Movie/Editor/Delete/DeleteMovieModalContentConnector.js deleted file mode 100644 index d3d26105b4..0000000000 --- a/frontend/src/Movie/Editor/Delete/DeleteMovieModalContentConnector.js +++ /dev/null @@ -1,46 +0,0 @@ -import _ from 'lodash'; -import { connect } from 'react-redux'; -import { createSelector } from 'reselect'; -import { bulkDeleteMovie } from 'Store/Actions/movieIndexActions'; -import createAllMoviesSelector from 'Store/Selectors/createAllMoviesSelector'; -import DeleteMovieModalContent from './DeleteMovieModalContent'; - -function createMapStateToProps() { - return createSelector( - (state, { movieIds }) => movieIds, - createAllMoviesSelector(), - (movieIds, allMovies) => { - const selectedMovie = _.intersectionWith(allMovies, movieIds, (s, id) => { - return s.id === id; - }); - - const sortedMovies = _.orderBy(selectedMovie, 'sortTitle'); - const movies = _.map(sortedMovies, (s) => { - return { - title: s.title, - path: s.path - }; - }); - - return { - movies - }; - } - ); -} - -function createMapDispatchToProps(dispatch, props) { - return { - onDeleteSelectedPress(deleteFiles, addImportExclusion) { - dispatch(bulkDeleteMovie({ - movieIds: props.movieIds, - deleteFiles, - addImportExclusion - })); - - props.onModalClose(); - } - }; -} - -export default connect(createMapStateToProps, createMapDispatchToProps)(DeleteMovieModalContent); diff --git a/frontend/src/Movie/Editor/MovieEditorFooter.css b/frontend/src/Movie/Editor/MovieEditorFooter.css deleted file mode 100644 index 59049c1844..0000000000 --- a/frontend/src/Movie/Editor/MovieEditorFooter.css +++ /dev/null @@ -1,57 +0,0 @@ -.inputContainer { - margin-right: 20px; - min-width: 150px; -} - -.buttonContainer { - display: flex; - justify-content: flex-end; - flex-grow: 1; -} - -.buttonContainerContent { - flex-grow: 0; -} - -.buttons { - display: flex; - justify-content: flex-end; - flex-grow: 1; -} - -.organizeSelectedButton, -.tagsButton { - composes: button from '~Components/Link/SpinnerButton.css'; - - margin-right: 10px; - height: 35px; -} - -.deleteSelectedButton { - composes: button from '~Components/Link/SpinnerButton.css'; - - margin-left: 50px; - height: 35px; -} - -@media only screen and (max-width: $breakpointSmall) { - .inputContainer { - margin-right: 0; - } - - .buttonContainer { - justify-content: flex-start; - } - - .buttonContainerContent { - flex-grow: 1; - } - - .buttons { - justify-content: space-between; - } - - .selectedMovieLabel { - text-align: left; - } -} diff --git a/frontend/src/Movie/Editor/MovieEditorFooter.css.d.ts b/frontend/src/Movie/Editor/MovieEditorFooter.css.d.ts deleted file mode 100644 index 415c09c302..0000000000 --- a/frontend/src/Movie/Editor/MovieEditorFooter.css.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -// This file is automatically generated. -// Please do not change this file! -interface CssExports { - 'buttonContainer': string; - 'buttonContainerContent': string; - 'buttons': string; - 'deleteSelectedButton': string; - 'inputContainer': string; - 'organizeSelectedButton': string; - 'selectedMovieLabel': string; - 'tagsButton': string; -} -export const cssExports: CssExports; -export default cssExports; diff --git a/frontend/src/Movie/Editor/MovieEditorFooter.js b/frontend/src/Movie/Editor/MovieEditorFooter.js deleted file mode 100644 index 8f0228aa97..0000000000 --- a/frontend/src/Movie/Editor/MovieEditorFooter.js +++ /dev/null @@ -1,303 +0,0 @@ -import PropTypes from 'prop-types'; -import React, { Component } from 'react'; -import AvailabilitySelectInput from 'Components/Form/AvailabilitySelectInput'; -import QualityProfileSelectInputConnector from 'Components/Form/QualityProfileSelectInputConnector'; -import RootFolderSelectInputConnector from 'Components/Form/RootFolderSelectInputConnector'; -import SelectInput from 'Components/Form/SelectInput'; -import SpinnerButton from 'Components/Link/SpinnerButton'; -import PageContentFooter from 'Components/Page/PageContentFooter'; -import { kinds } from 'Helpers/Props'; -import MoveMovieModal from 'Movie/MoveMovie/MoveMovieModal'; -import translate from 'Utilities/String/translate'; -import DeleteMovieModal from './Delete/DeleteMovieModal'; -import MovieEditorFooterLabel from './MovieEditorFooterLabel'; -import TagsModal from './Tags/TagsModal'; -import styles from './MovieEditorFooter.css'; - -const NO_CHANGE = 'noChange'; - -class MovieEditorFooter extends Component { - - // - // Lifecycle - - constructor(props, context) { - super(props, context); - - this.state = { - monitored: NO_CHANGE, - qualityProfileId: NO_CHANGE, - minimumAvailability: NO_CHANGE, - rootFolderPath: NO_CHANGE, - savingTags: false, - isDeleteMovieModalOpen: false, - isTagsModalOpen: false, - isConfirmMoveModalOpen: false, - destinationRootFolder: null - }; - } - - componentDidUpdate(prevProps) { - const { - isSaving, - saveError - } = this.props; - - if (prevProps.isSaving && !isSaving && !saveError) { - this.setState({ - monitored: NO_CHANGE, - qualityProfileId: NO_CHANGE, - minimumAvailability: NO_CHANGE, - rootFolderPath: NO_CHANGE, - savingTags: false - }); - } - } - - // - // Listeners - - onInputChange = ({ name, value }) => { - this.setState({ [name]: value }); - - if (value === NO_CHANGE) { - return; - } - - switch (name) { - case 'rootFolderPath': - this.setState({ - isConfirmMoveModalOpen: true, - destinationRootFolder: value - }); - break; - case 'monitored': - this.props.onSaveSelected({ [name]: value === 'monitored' }); - break; - default: - this.props.onSaveSelected({ [name]: value }); - } - }; - - onApplyTagsPress = (tags, applyTags) => { - this.setState({ - savingTags: true, - isTagsModalOpen: false - }); - - this.props.onSaveSelected({ - tags, - applyTags - }); - }; - - onDeleteSelectedPress = () => { - this.setState({ isDeleteMovieModalOpen: true }); - }; - - onDeleteMovieModalClose = () => { - this.setState({ isDeleteMovieModalOpen: false }); - }; - - onTagsPress = () => { - this.setState({ isTagsModalOpen: true }); - }; - - onTagsModalClose = () => { - this.setState({ isTagsModalOpen: false }); - }; - - onSaveRootFolderPress = () => { - this.setState({ - isConfirmMoveModalOpen: false, - destinationRootFolder: null - }); - - this.props.onSaveSelected({ rootFolderPath: this.state.destinationRootFolder }); - }; - - onMoveMoviePress = () => { - this.setState({ - isConfirmMoveModalOpen: false, - destinationRootFolder: null - }); - - this.props.onSaveSelected({ - rootFolderPath: this.state.destinationRootFolder, - moveFiles: true - }); - }; - - // - // Render - - render() { - const { - movieIds, - selectedCount, - isSaving, - isDeleting, - isOrganizingMovie, - onOrganizeMoviePress - } = this.props; - - const { - monitored, - qualityProfileId, - minimumAvailability, - rootFolderPath, - savingTags, - isTagsModalOpen, - isDeleteMovieModalOpen, - isConfirmMoveModalOpen, - destinationRootFolder - } = this.state; - - const monitoredOptions = [ - { key: NO_CHANGE, value: translate('NoChange'), disabled: true }, - { key: 'monitored', value: translate('Monitored') }, - { key: 'unmonitored', value: translate('Unmonitored') } - ]; - - return ( - -
- - - -
- -
- - - -
- -
- - - -
- -
- - - -
- -
-
- - -
-
- - {translate('RenameFiles')} - - - - {translate('SetTags')} - -
- - - {translate('Delete')} - -
-
-
- - - - - - -
- ); - } -} - -MovieEditorFooter.propTypes = { - movieIds: PropTypes.arrayOf(PropTypes.number).isRequired, - selectedCount: PropTypes.number.isRequired, - isSaving: PropTypes.bool.isRequired, - saveError: PropTypes.object, - isDeleting: PropTypes.bool.isRequired, - deleteError: PropTypes.object, - isOrganizingMovie: PropTypes.bool.isRequired, - onSaveSelected: PropTypes.func.isRequired, - onOrganizeMoviePress: PropTypes.func.isRequired -}; - -export default MovieEditorFooter; diff --git a/frontend/src/Movie/Editor/MovieEditorFooterLabel.css b/frontend/src/Movie/Editor/MovieEditorFooterLabel.css deleted file mode 100644 index 9b4b40be62..0000000000 --- a/frontend/src/Movie/Editor/MovieEditorFooterLabel.css +++ /dev/null @@ -1,8 +0,0 @@ -.label { - margin-bottom: 3px; - font-weight: bold; -} - -.savingIcon { - margin-left: 8px; -} diff --git a/frontend/src/Movie/Editor/MovieEditorFooterLabel.css.d.ts b/frontend/src/Movie/Editor/MovieEditorFooterLabel.css.d.ts deleted file mode 100644 index 06f814a94f..0000000000 --- a/frontend/src/Movie/Editor/MovieEditorFooterLabel.css.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -// This file is automatically generated. -// Please do not change this file! -interface CssExports { - 'label': string; - 'savingIcon': string; -} -export const cssExports: CssExports; -export default cssExports; diff --git a/frontend/src/Movie/Editor/MovieEditorFooterLabel.js b/frontend/src/Movie/Editor/MovieEditorFooterLabel.js deleted file mode 100644 index 805ecd39ed..0000000000 --- a/frontend/src/Movie/Editor/MovieEditorFooterLabel.js +++ /dev/null @@ -1,40 +0,0 @@ -import PropTypes from 'prop-types'; -import React from 'react'; -import SpinnerIcon from 'Components/SpinnerIcon'; -import { icons } from 'Helpers/Props'; -import styles from './MovieEditorFooterLabel.css'; - -function MovieEditorFooterLabel(props) { - const { - className, - label, - isSaving - } = props; - - return ( -
- {label} - - { - isSaving && - - } -
- ); -} - -MovieEditorFooterLabel.propTypes = { - className: PropTypes.string.isRequired, - label: PropTypes.string.isRequired, - isSaving: PropTypes.bool.isRequired -}; - -MovieEditorFooterLabel.defaultProps = { - className: styles.label -}; - -export default MovieEditorFooterLabel; diff --git a/frontend/src/Movie/Editor/Organize/OrganizeMovieModal.js b/frontend/src/Movie/Editor/Organize/OrganizeMovieModal.js deleted file mode 100644 index e82d9e92c8..0000000000 --- a/frontend/src/Movie/Editor/Organize/OrganizeMovieModal.js +++ /dev/null @@ -1,31 +0,0 @@ -import PropTypes from 'prop-types'; -import React from 'react'; -import Modal from 'Components/Modal/Modal'; -import OrganizeMovieModalContentConnector from './OrganizeMovieModalContentConnector'; - -function OrganizeMovieModal(props) { - const { - isOpen, - onModalClose, - ...otherProps - } = props; - - return ( - - - - ); -} - -OrganizeMovieModal.propTypes = { - isOpen: PropTypes.bool.isRequired, - onModalClose: PropTypes.func.isRequired -}; - -export default OrganizeMovieModal; diff --git a/frontend/src/Movie/Editor/Organize/OrganizeMovieModalContent.css b/frontend/src/Movie/Editor/Organize/OrganizeMovieModalContent.css deleted file mode 100644 index 0b896f4ef8..0000000000 --- a/frontend/src/Movie/Editor/Organize/OrganizeMovieModalContent.css +++ /dev/null @@ -1,8 +0,0 @@ -.renameIcon { - margin-left: 5px; -} - -.message { - margin-top: 20px; - margin-bottom: 10px; -} diff --git a/frontend/src/Movie/Editor/Organize/OrganizeMovieModalContent.css.d.ts b/frontend/src/Movie/Editor/Organize/OrganizeMovieModalContent.css.d.ts deleted file mode 100644 index ae23034760..0000000000 --- a/frontend/src/Movie/Editor/Organize/OrganizeMovieModalContent.css.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -// This file is automatically generated. -// Please do not change this file! -interface CssExports { - 'message': string; - 'renameIcon': string; -} -export const cssExports: CssExports; -export default cssExports; diff --git a/frontend/src/Movie/Editor/Organize/OrganizeMovieModalContent.js b/frontend/src/Movie/Editor/Organize/OrganizeMovieModalContent.js deleted file mode 100644 index 3c2f75c29f..0000000000 --- a/frontend/src/Movie/Editor/Organize/OrganizeMovieModalContent.js +++ /dev/null @@ -1,75 +0,0 @@ -import PropTypes from 'prop-types'; -import React from 'react'; -import Alert from 'Components/Alert'; -import Icon from 'Components/Icon'; -import Button from 'Components/Link/Button'; -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 { icons, kinds } from 'Helpers/Props'; -import translate from 'Utilities/String/translate'; -import styles from './OrganizeMovieModalContent.css'; - -function OrganizeMovieModalContent(props) { - const { - movieTitles, - onModalClose, - onOrganizeMoviePress - } = props; - - return ( - - - {translate('OrganizeSelectedMovies')} - - - - - {translate('PreviewRenameHelpText')} - - - -
- {translate('OrganizeConfirm', [movieTitles.length])} -
- - -
- - - - - - -
- ); -} - -OrganizeMovieModalContent.propTypes = { - movieTitles: PropTypes.arrayOf(PropTypes.string).isRequired, - onModalClose: PropTypes.func.isRequired, - onOrganizeMoviePress: PropTypes.func.isRequired -}; - -export default OrganizeMovieModalContent; diff --git a/frontend/src/Movie/Editor/Organize/OrganizeMovieModalContentConnector.js b/frontend/src/Movie/Editor/Organize/OrganizeMovieModalContentConnector.js deleted file mode 100644 index 2faf1b0685..0000000000 --- a/frontend/src/Movie/Editor/Organize/OrganizeMovieModalContentConnector.js +++ /dev/null @@ -1,67 +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 * as commandNames from 'Commands/commandNames'; -import { executeCommand } from 'Store/Actions/commandActions'; -import createAllMoviesSelector from 'Store/Selectors/createAllMoviesSelector'; -import OrganizeMovieModalContent from './OrganizeMovieModalContent'; - -function createMapStateToProps() { - return createSelector( - (state, { movieIds }) => movieIds, - createAllMoviesSelector(), - (movieIds, allMovies) => { - const movies = _.intersectionWith(allMovies, movieIds, (s, id) => { - return s.id === id; - }); - - const sortedMovies = _.orderBy(movies, 'sortTitle'); - const movieTitles = _.map(sortedMovies, 'title'); - - return { - movieTitles - }; - } - ); -} - -const mapDispatchToProps = { - executeCommand -}; - -class OrganizeMovieModalContentConnector extends Component { - - // - // Listeners - - onOrganizeMoviePress = () => { - this.props.executeCommand({ - name: commandNames.RENAME_MOVIE, - movieIds: this.props.movieIds - }); - - this.props.onModalClose(true); - }; - - // - // Render - - render(props) { - return ( - - ); - } -} - -OrganizeMovieModalContentConnector.propTypes = { - movieIds: PropTypes.arrayOf(PropTypes.number).isRequired, - onModalClose: PropTypes.func.isRequired, - executeCommand: PropTypes.func.isRequired -}; - -export default connect(createMapStateToProps, mapDispatchToProps)(OrganizeMovieModalContentConnector); diff --git a/frontend/src/Movie/Editor/Tags/TagsModal.js b/frontend/src/Movie/Editor/Tags/TagsModal.js deleted file mode 100644 index 0f6c2d7ec7..0000000000 --- a/frontend/src/Movie/Editor/Tags/TagsModal.js +++ /dev/null @@ -1,31 +0,0 @@ -import PropTypes from 'prop-types'; -import React from 'react'; -import Modal from 'Components/Modal/Modal'; -import TagsModalContentConnector from './TagsModalContentConnector'; - -function TagsModal(props) { - const { - isOpen, - onModalClose, - ...otherProps - } = props; - - return ( - - - - ); -} - -TagsModal.propTypes = { - isOpen: PropTypes.bool.isRequired, - onModalClose: PropTypes.func.isRequired -}; - -export default TagsModal; diff --git a/frontend/src/Movie/Editor/Tags/TagsModalContent.css b/frontend/src/Movie/Editor/Tags/TagsModalContent.css deleted file mode 100644 index 63be9aaddb..0000000000 --- a/frontend/src/Movie/Editor/Tags/TagsModalContent.css +++ /dev/null @@ -1,12 +0,0 @@ -.renameIcon { - margin-left: 5px; -} - -.message { - margin-top: 20px; - margin-bottom: 10px; -} - -.result { - padding-top: 4px; -} diff --git a/frontend/src/Movie/Editor/Tags/TagsModalContent.css.d.ts b/frontend/src/Movie/Editor/Tags/TagsModalContent.css.d.ts deleted file mode 100644 index 9b4321dcc6..0000000000 --- a/frontend/src/Movie/Editor/Tags/TagsModalContent.css.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -// This file is automatically generated. -// Please do not change this file! -interface CssExports { - 'message': string; - 'renameIcon': string; - 'result': string; -} -export const cssExports: CssExports; -export default cssExports; diff --git a/frontend/src/Movie/Editor/Tags/TagsModalContent.js b/frontend/src/Movie/Editor/Tags/TagsModalContent.js deleted file mode 100644 index e5011d33be..0000000000 --- a/frontend/src/Movie/Editor/Tags/TagsModalContent.js +++ /dev/null @@ -1,188 +0,0 @@ -import _ from 'lodash'; -import PropTypes from 'prop-types'; -import React, { Component } from 'react'; -import Form from 'Components/Form/Form'; -import FormGroup from 'Components/Form/FormGroup'; -import FormInputGroup from 'Components/Form/FormInputGroup'; -import FormLabel from 'Components/Form/FormLabel'; -import Label from 'Components/Label'; -import Button from 'Components/Link/Button'; -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 { inputTypes, kinds, sizes } from 'Helpers/Props'; -import translate from 'Utilities/String/translate'; -import styles from './TagsModalContent.css'; - -class TagsModalContent extends Component { - - // - // Lifecycle - - constructor(props, context) { - super(props, context); - - this.state = { - tags: [], - applyTags: 'add' - }; - } - - // - // Lifecycle - - onInputChange = ({ name, value }) => { - this.setState({ [name]: value }); - }; - - onApplyTagsPress = () => { - const { - tags, - applyTags - } = this.state; - - this.props.onApplyTagsPress(tags, applyTags); - }; - - // - // Render - - render() { - const { - movieTags, - tagList, - onModalClose - } = this.props; - - const { - tags, - applyTags - } = this.state; - - const applyTagsOptions = [ - { key: 'add', value: translate('Add') }, - { key: 'remove', value: translate('Remove') }, - { key: 'replace', value: translate('Replace') } - ]; - - return ( - - - Tags - - - -
- - {translate('Tags')} - - - - - - {translate('ApplyTags')} - - - - - - {translate('Result')} - -
- { - movieTags.map((t) => { - const tag = _.find(tagList, { id: t }); - - if (!tag) { - return null; - } - - const removeTag = (applyTags === 'remove' && tags.indexOf(t) > -1) || - (applyTags === 'replace' && tags.indexOf(t) === -1); - - return ( - - ); - }) - } - - { - (applyTags === 'add' || applyTags === 'replace') && - tags.map((t) => { - const tag = _.find(tagList, { id: t }); - - if (!tag) { - return null; - } - - if (movieTags.indexOf(t) > -1) { - return null; - } - - return ( - - ); - }) - } -
-
-
-
- - - - - - -
- ); - } -} - -TagsModalContent.propTypes = { - movieTags: PropTypes.arrayOf(PropTypes.number).isRequired, - tagList: PropTypes.arrayOf(PropTypes.object).isRequired, - onModalClose: PropTypes.func.isRequired, - onApplyTagsPress: PropTypes.func.isRequired -}; - -export default TagsModalContent; diff --git a/frontend/src/Movie/Editor/Tags/TagsModalContentConnector.js b/frontend/src/Movie/Editor/Tags/TagsModalContentConnector.js deleted file mode 100644 index 75d2006d44..0000000000 --- a/frontend/src/Movie/Editor/Tags/TagsModalContentConnector.js +++ /dev/null @@ -1,36 +0,0 @@ -import _ from 'lodash'; -import { connect } from 'react-redux'; -import { createSelector } from 'reselect'; -import createAllMoviesSelector from 'Store/Selectors/createAllMoviesSelector'; -import createTagsSelector from 'Store/Selectors/createTagsSelector'; -import TagsModalContent from './TagsModalContent'; - -function createMapStateToProps() { - return createSelector( - (state, { movieIds }) => movieIds, - createAllMoviesSelector(), - createTagsSelector(), - (movieIds, allMovies, tagList) => { - const movies = _.intersectionWith(allMovies, movieIds, (s, id) => { - return s.id === id; - }); - - const movieTags = _.uniq(_.concat(..._.map(movies, 'tags'))); - - return { - movieTags, - tagList - }; - } - ); -} - -function createMapDispatchToProps(dispatch, props) { - return { - onAction() { - // Do something - } - }; -} - -export default connect(createMapStateToProps, createMapDispatchToProps)(TagsModalContent);