From 6baa0fa04792c12fac7493082b1a989b7c6f4094 Mon Sep 17 00:00:00 2001 From: advplyr Date: Thu, 1 Dec 2022 17:39:23 -0600 Subject: [PATCH] Fix:Multi-select library items using shift key #1236 --- client/components/app/LazyBookshelf.vue | 9 +++++---- client/store/globals.js | 14 +++++--------- 2 files changed, 10 insertions(+), 13 deletions(-) diff --git a/client/components/app/LazyBookshelf.vue b/client/components/app/LazyBookshelf.vue index 4c5dfc3d..ed66475e 100644 --- a/client/components/app/LazyBookshelf.vue +++ b/client/components/app/LazyBookshelf.vue @@ -230,7 +230,7 @@ export default { }, selectEntity(entity, shiftKey) { if (this.entityName === 'books' || this.entityName === 'series-books') { - var indexOf = this.entities.findIndex((ent) => ent && ent.id === entity.id) + const indexOf = this.entities.findIndex((ent) => ent && ent.id === entity.id) const lastLastItemIndexSelected = this.lastItemIndexSelected if (!this.selectedMediaItems.some((i) => i.id === entity.id)) { this.lastItemIndexSelected = indexOf @@ -239,14 +239,14 @@ export default { } if (shiftKey && lastLastItemIndexSelected >= 0) { - var loopStart = indexOf - var loopEnd = lastLastItemIndexSelected + let loopStart = indexOf + let loopEnd = lastLastItemIndexSelected if (indexOf > lastLastItemIndexSelected) { loopStart = lastLastItemIndexSelected loopEnd = indexOf } - var isSelecting = false + let isSelecting = false // If any items in this range is not selected then select all otherwise unselect all for (let i = loopStart; i <= loopEnd; i++) { const thisEntity = this.entities[i] @@ -275,6 +275,7 @@ export default { mediaType: thisEntity.mediaType, hasTracks: thisEntity.mediaType === 'podcast' || thisEntity.media.numTracks || (thisEntity.media.tracks && thisEntity.media.tracks.length) } + console.log('Setting media item selected', mediaItem, 'Num Selected=', this.selectedMediaItems.length) this.$store.commit('globals/setMediaItemSelected', { item: mediaItem, selected: isSelecting }) } else { console.error('Invalid entity index', i) diff --git a/client/store/globals.js b/client/store/globals.js index 0080ed5d..730add3e 100644 --- a/client/store/globals.js +++ b/client/store/globals.js @@ -140,26 +140,22 @@ export const mutations = { state.showBatchQuickMatchModal = val }, resetSelectedMediaItems(state) { - // Vue.set(state, 'selectedMediaItems', []) state.selectedMediaItems = [] }, toggleMediaItemSelected(state, item) { if (state.selectedMediaItems.some(i => i.id === item.id)) { state.selectedMediaItems = state.selectedMediaItems.filter(i => i.id !== item.id) } else { - // const newSel = state.selectedMediaItems.concat([{...item}]) - // Vue.set(state, 'selectedMediaItems', newSel) state.selectedMediaItems.push(item) } }, setMediaItemSelected(state, { item, selected }) { - const index = state.selectedMediaItems.findIndex(i => i.id === item.id) - if (index && !selected) { + const isAlreadySelected = state.selectedMediaItems.some(i => i.id === item.id) + if (isAlreadySelected && !selected) { state.selectedMediaItems = state.selectedMediaItems.filter(i => i.id !== item.id) - } else if (selected && !index) { - state.selectedMediaItems.splice(index, 1, item) - // var newSel = state.selectedMediaItems.concat([libraryItemId]) - // Vue.set(state, 'selectedMediaItems', newSel) + + } else if (selected && !isAlreadySelected) { + state.selectedMediaItems.push(item) } } } \ No newline at end of file