From 3ecfe846a03a381f33d5caa00f63809a3dc98365 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Sun, 24 Jan 2021 10:14:30 -0800 Subject: [PATCH] Fixed: Queue refresh closing manual import from queue if items change Closes #1934 --- frontend/src/Activity/Queue/Queue.js | 24 +++++++++++++++++++++++- frontend/src/Activity/Queue/QueueRow.js | 18 ++++++++++++++++-- 2 files changed, 39 insertions(+), 3 deletions(-) diff --git a/frontend/src/Activity/Queue/Queue.js b/frontend/src/Activity/Queue/Queue.js index a5a1633c6..1a7bd1df5 100644 --- a/frontend/src/Activity/Queue/Queue.js +++ b/frontend/src/Activity/Queue/Queue.js @@ -31,6 +31,8 @@ class Queue extends Component { constructor(props, context) { super(props, context); + this._shouldBlockRefresh = false; + this.state = { allSelected: false, allUnselected: false, @@ -42,6 +44,18 @@ class Queue extends Component { }; } + shouldComponentUpdate(nextProps) { + if (!this._shouldBlockRefresh) { + return true; + } + + if (hasDifferentItems(this.props.items, nextProps.items)) { + return false; + } + + return true; + } + componentDidUpdate(prevProps) { const { items, @@ -84,6 +98,10 @@ class Queue extends Component { // // Listeners + onQueueRowModalOpenOrClose = (isOpen) => { + this._shouldBlockRefresh = isOpen; + } + onSelectAllChange = ({ value }) => { this.setState(selectAll(this.state.selectedState, value)); } @@ -99,16 +117,19 @@ class Queue extends Component { } onRemoveSelectedPress = () => { + this._shouldBlockRefresh = true; this.setState({ isConfirmRemoveModalOpen: true }); } onRemoveSelectedConfirmed = (payload) => { this.props.onRemoveSelectedPress({ ids: this.getSelectedIds(), ...payload }); this.setState({ isConfirmRemoveModalOpen: false }); + this._shouldBlockRefresh = false; } onConfirmRemoveModalClose = () => { this.setState({ isConfirmRemoveModalOpen: false }); + this._shouldBlockRefresh = false; } // @@ -209,7 +230,7 @@ class Queue extends Component { } { - isPopulated && !hasError && !items.length && + isAllPopulated && !hasError && !items.length &&
Queue is empty
@@ -238,6 +259,7 @@ class Queue extends Component { columns={columns} {...item} onSelectedChange={this.onSelectedChange} + onQueueRowModalOpenOrClose={this.onQueueRowModalOpenOrClose} /> ); }) diff --git a/frontend/src/Activity/Queue/QueueRow.js b/frontend/src/Activity/Queue/QueueRow.js index ffd90d1b3..09752c4e7 100644 --- a/frontend/src/Activity/Queue/QueueRow.js +++ b/frontend/src/Activity/Queue/QueueRow.js @@ -42,19 +42,32 @@ class QueueRow extends Component { } onRemoveQueueItemModalConfirmed = (blacklist, skipredownload) => { - this.props.onRemoveQueueItemPress(blacklist, skipredownload); + const { + onRemoveQueueItemPress, + onQueueRowModalOpenOrClose + } = this.props; + + onQueueRowModalOpenOrClose(false); + onRemoveQueueItemPress(blacklist, skipredownload); + this.setState({ isRemoveQueueItemModalOpen: false }); } onRemoveQueueItemModalClose = () => { + this.props.onQueueRowModalOpenOrClose(false); + this.setState({ isRemoveQueueItemModalOpen: false }); } onInteractiveImportPress = () => { + this.props.onQueueRowModalOpenOrClose(true); + this.setState({ isInteractiveImportModalOpen: true }); } onInteractiveImportModalClose = () => { + this.props.onQueueRowModalOpenOrClose(false); + this.setState({ isInteractiveImportModalOpen: false }); } @@ -380,7 +393,8 @@ QueueRow.propTypes = { columns: PropTypes.arrayOf(PropTypes.object).isRequired, onSelectedChange: PropTypes.func.isRequired, onGrabPress: PropTypes.func.isRequired, - onRemoveQueueItemPress: PropTypes.func.isRequired + onRemoveQueueItemPress: PropTypes.func.isRequired, + onQueueRowModalOpenOrClose: PropTypes.func.isRequired }; QueueRow.defaultProps = {