From 02e2e09ad341077159391dbfc9fce40036faac99 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sun, 14 Jan 2024 03:36:02 +0200 Subject: [PATCH] Fixed: Use movie file from state for status label in add search results --- .../AddNewMovie/AddNewMovieConnector.js | 27 +++++++++++++++++-- .../AddNewMovieSearchResultConnector.js | 6 ++++- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/frontend/src/AddMovie/AddNewMovie/AddNewMovieConnector.js b/frontend/src/AddMovie/AddNewMovie/AddNewMovieConnector.js index 238c10d43..19a6de436 100644 --- a/frontend/src/AddMovie/AddNewMovie/AddNewMovieConnector.js +++ b/frontend/src/AddMovie/AddNewMovie/AddNewMovieConnector.js @@ -3,10 +3,13 @@ import React, { Component } from 'react'; import { connect } from 'react-redux'; import { createSelector } from 'reselect'; import { clearAddMovie, lookupMovie } from 'Store/Actions/addMovieActions'; +import { clearMovieFiles, fetchMovieFiles } from 'Store/Actions/movieFileActions'; import { clearQueueDetails, fetchQueueDetails } from 'Store/Actions/queueActions'; import { fetchRootFolders } from 'Store/Actions/rootFolderActions'; import { fetchImportExclusions } from 'Store/Actions/Settings/importExclusions'; import createUISettingsSelector from 'Store/Selectors/createUISettingsSelector'; +import hasDifferentItems from 'Utilities/Object/hasDifferentItems'; +import selectUniqueIds from 'Utilities/Object/selectUniqueIds'; import parseUrl from 'Utilities/String/parseUrl'; import AddNewMovie from './AddNewMovie'; @@ -35,7 +38,9 @@ const mapDispatchToProps = { fetchRootFolders, fetchImportExclusions, fetchQueueDetails, - clearQueueDetails + clearQueueDetails, + fetchMovieFiles, + clearMovieFiles }; class AddNewMovieConnector extends Component { @@ -55,6 +60,20 @@ class AddNewMovieConnector extends Component { this.props.fetchQueueDetails(); } + componentDidUpdate(prevProps) { + const { + items + } = this.props; + + if (hasDifferentItems(prevProps.items, items)) { + const movieIds = selectUniqueIds(items, 'internalId'); + + if (movieIds.length) { + movieIds.map((movieId) => this.props.fetchMovieFiles({ movieId })); + } + } + } + componentWillUnmount() { if (this._movieLookupTimeout) { clearTimeout(this._movieLookupTimeout); @@ -62,6 +81,7 @@ class AddNewMovieConnector extends Component { this.props.clearAddMovie(); this.props.clearQueueDetails(); + this.props.clearMovieFiles(); } // @@ -107,12 +127,15 @@ class AddNewMovieConnector extends Component { AddNewMovieConnector.propTypes = { term: PropTypes.string, + items: PropTypes.arrayOf(PropTypes.object).isRequired, lookupMovie: PropTypes.func.isRequired, clearAddMovie: PropTypes.func.isRequired, fetchRootFolders: PropTypes.func.isRequired, fetchImportExclusions: PropTypes.func.isRequired, fetchQueueDetails: PropTypes.func.isRequired, - clearQueueDetails: PropTypes.func.isRequired + clearQueueDetails: PropTypes.func.isRequired, + fetchMovieFiles: PropTypes.func.isRequired, + clearMovieFiles: PropTypes.func.isRequired }; export default connect(createMapStateToProps, mapDispatchToProps)(AddNewMovieConnector); diff --git a/frontend/src/AddMovie/AddNewMovie/AddNewMovieSearchResultConnector.js b/frontend/src/AddMovie/AddNewMovie/AddNewMovieSearchResultConnector.js index de32432fe..f7d9db0c2 100644 --- a/frontend/src/AddMovie/AddNewMovie/AddNewMovieSearchResultConnector.js +++ b/frontend/src/AddMovie/AddNewMovie/AddNewMovieSearchResultConnector.js @@ -11,10 +11,12 @@ function createMapStateToProps() { createExclusionMovieSelector(), createDimensionsSelector(), (state) => state.queue.details.items, + (state) => state.movieFiles.items, (state, { internalId }) => internalId, (state) => state.settings.ui.item.movieRuntimeFormat, - (isExistingMovie, isExclusionMovie, dimensions, queueItems, internalId, movieRuntimeFormat) => { + (isExistingMovie, isExclusionMovie, dimensions, queueItems, movieFiles, internalId, movieRuntimeFormat) => { const queueItem = queueItems.find((item) => internalId > 0 && item.movieId === internalId); + const movieFile = movieFiles.find((item) => internalId > 0 && item.movieId === internalId); return { existingMovieId: internalId, @@ -22,6 +24,8 @@ function createMapStateToProps() { isExclusionMovie, isSmallScreen: dimensions.isSmallScreen, queueItem, + movieFile, + hasFile: !!movieFile, movieRuntimeFormat }; }