| 
					
				 | 
			
			
				@@ -1,386 +0,0 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-<template> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	<div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		<page-metadata title="Admin | Test" /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		<div class="admin-tab"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			<advanced-table 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				:column-default="columnDefault" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				:columns="columns" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				:filters="filters" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				data-action="songs.getData" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				name="admin-test" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				<template #column-thumbnailImage="slotProps"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					<img 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						class="song-thumbnail" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						:src="slotProps.item.thumbnail" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						onerror="this.src='/assets/notes-transparent.png'" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						loading="lazy" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					/> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				</template> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				<template #column-thumbnailUrl="slotProps"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					<a :href="slotProps.item.thumbnail" target="_blank"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						{{ slotProps.item.thumbnail }} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					</a> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				</template> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				<template #column-_id="slotProps"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					<span :title="slotProps.item._id">{{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						slotProps.item._id 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					}}</span> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				</template> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				<template #column-youtubeId="slotProps"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					<a 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						:href=" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							'https://www.youtube.com/watch?v=' + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							`${slotProps.item.youtubeId}` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						target="_blank" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						{{ slotProps.item.youtubeId }} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					</a> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				</template> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				<template #column-title="slotProps"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					<span :title="slotProps.item.title">{{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						slotProps.item.title 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					}}</span> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				</template> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				<template #column-artists="slotProps"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					<span :title="slotProps.item.artists.join(', ')">{{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						slotProps.item.artists.join(", ") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					}}</span> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				</template> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				<template #column-genres="slotProps"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					<span :title="slotProps.item.genres.join(', ')">{{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						slotProps.item.genres.join(", ") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					}}</span> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				</template> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				<template #column-requestedBy="slotProps"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					<user-id-to-username 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						:user-id="slotProps.item.requestedBy" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						:link="true" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					/> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				</template> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				<template #bulk-actions="slotProps"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					<div class="song-bulk-actions"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						<i 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							class="material-icons edit-songs-icon" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							@click.prevent="editMany(slotProps.item)" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							content="Edit Songs" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							v-tippy 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							edit 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						</i> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						<i 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							class="material-icons verify-songs-icon" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							@click.prevent="verifyMany(slotProps.item)" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							content="Verify Songs" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							v-tippy 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							check_circle 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						</i> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						<i 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							class="material-icons unverify-songs-icon" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							@click.prevent="unverifyMany(slotProps.item)" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							content="Unverify Songs" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							v-tippy 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							cancel 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						</i> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						<i 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							class="material-icons tag-songs-icon" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							@click.prevent="tagMany(slotProps.item)" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							content="Tag Songs" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							v-tippy 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							local_offer 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						</i> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						<i 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							class="material-icons artists-songs-icon" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							@click.prevent="setArtists(slotProps.item)" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							content="Set Artists" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							v-tippy 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							group 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						</i> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						<i 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							class="material-icons genres-songs-icon" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							@click.prevent="setGenres(slotProps.item)" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							content="Set Genres" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							v-tippy 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							theater_comedy 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						</i> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						<i 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							class="material-icons delete-songs-icon" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							@click.prevent=" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-								confirmAction({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-									message: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-										'Removing this song will remove it from all playlists and cause a ratings recalculation.', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-									action: 'deleteMany', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-									params: slotProps.item 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-								}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							content="Delete Songs" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							v-tippy 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							delete_forever 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						</i> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					</div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				</template> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				<!-- <template #bulk-actions-right="slotProps"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				</template> --> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			</advanced-table> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		</div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		<edit-song v-if="modals.editSong" song-type="songs" :key="song._id" /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		<report v-if="modals.report" /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		<confirm v-if="modals.confirm" @confirmed="handleConfirmed()" /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	</div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-</template> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-<script> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import { mapState, mapActions } from "vuex"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import { defineAsyncComponent } from "vue"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import Toast from "toasters"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import AdvancedTable from "@/components/AdvancedTable.vue"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import UserIdToUsername from "@/components/UserIdToUsername.vue"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-export default { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	components: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		AdvancedTable, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		UserIdToUsername, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		EditSong: defineAsyncComponent(() => 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			import("@/components/modals/EditSong") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		Report: defineAsyncComponent(() => 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			import("@/components/modals/Report.vue") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		Confirm: defineAsyncComponent(() => 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			import("@/components/modals/Confirm.vue") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	data() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		return { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			columnDefault: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				sortable: true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				hidable: true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				defaultVisibility: "shown", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				draggable: true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				resizable: true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				minWidth: 200, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				maxWidth: 600 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			columns: [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					name: "thumbnailImage", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					displayName: "Thumb", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					properties: ["thumbnail"], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					sortable: false, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					minWidth: 75, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					defaultWidth: 75, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					maxWidth: 75, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					resizable: false 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					name: "_id", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					displayName: "Musare ID", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					properties: ["_id"], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					sortProperty: "_id", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					minWidth: 215, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					defaultWidth: 215 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					name: "youtubeId", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					displayName: "YouTube ID", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					properties: ["youtubeId"], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					sortProperty: "youtubeId", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					minWidth: 120, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					defaultWidth: 120 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					name: "title", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					displayName: "Title", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					properties: ["title"], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					sortProperty: "title" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					name: "artists", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					displayName: "Artists", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					properties: ["artists"], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					sortable: false 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					name: "genres", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					displayName: "Genres", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					properties: ["genres"], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					sortable: false 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					name: "thumbnailUrl", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					displayName: "Thumbnail (URL)", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					properties: ["thumbnail"], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					sortProperty: "thumbnail", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					defaultVisibility: "hidden" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					name: "requestedBy", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					displayName: "Requested By", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					properties: ["requestedBy"], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					sortProperty: "requestedBy", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					defaultWidth: 200 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			filters: [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					name: "_id", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					displayName: "Musare ID", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					property: "_id", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					filterTypes: ["exact"], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					defaultFilterType: "exact" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					name: "youtubeId", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					displayName: "YouTube ID", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					property: "youtubeId", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					filterTypes: ["contains", "exact", "regex"], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					defaultFilterType: "contains" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					name: "title", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					displayName: "Title", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					property: "title", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					filterTypes: ["contains", "exact", "regex"], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					defaultFilterType: "contains" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					name: "artists", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					displayName: "Artists", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					property: "artists", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					filterTypes: ["contains", "exact", "regex"], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					defaultFilterType: "contains" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					name: "genres", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					displayName: "Genres", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					property: "genres", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					filterTypes: ["contains", "exact", "regex"], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					defaultFilterType: "contains" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					name: "thumbnail", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					displayName: "Thumbnail", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					property: "thumbnail", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					filterTypes: ["contains", "exact", "regex"], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					defaultFilterType: "contains" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					name: "requestedBy", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					displayName: "Requested By", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					property: "requestedBy", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					filterTypes: ["contains", "exact", "regex"], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					defaultFilterType: "contains" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			confirm: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				message: "", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				action: "", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				params: null 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	computed: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		...mapState("modalVisibility", { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			modals: state => state.modals 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		}), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		...mapState("modals/editSong", { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			song: state => state.song 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	mounted() {}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	beforeUnmount() {}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	methods: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		editMany(selectedRows) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if (selectedRows.length === 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				this.editSong(selectedRows[0]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				this.openModal("editSong"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				new Toast("Bulk editing not yet implemented."); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		verifyMany() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			new Toast("Bulk verifying not yet implemented."); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		unverifyMany() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			new Toast("Bulk unverifying not yet implemented."); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		tagMany() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			new Toast("Bulk tagging not yet implemented."); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		setArtists() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			new Toast("Bulk setting artists not yet implemented."); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		setGenres() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			new Toast("Bulk setting genres not yet implemented."); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		deleteMany() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			new Toast("Bulk deleting not yet implemented."); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		confirmAction(confirm) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			this.confirm = confirm; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			this.updateConfirmMessage(confirm.message); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			this.openModal("confirm"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		handleConfirmed() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			const { action, params } = this.confirm; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if (typeof this[action] === "function") { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				if (params) this[action](params); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				else this[action](); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			this.confirm = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				message: "", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				action: "", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				params: null 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		...mapActions("modals/editSong", ["editSong"]), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		...mapActions("modals/confirm", ["updateConfirmMessage"]), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		...mapActions("modalVisibility", ["openModal"]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-</script> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-<style lang="scss" scoped> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-.song-thumbnail { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	display: block; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	max-width: 50px; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	margin: 0 auto; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-.bulk-popup { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	.song-bulk-actions { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		display: flex; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		flex-direction: row; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		width: 100%; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		justify-content: space-evenly; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		.material-icons { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			position: relative; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			top: 6px; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			margin-left: 5px; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			cursor: pointer; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			color: var(--primary-color); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			&:hover, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			&:focus { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				filter: brightness(90%); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		.verify-songs-icon { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			color: var(--green); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		.unverify-songs-icon, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		.delete-songs-icon { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			color: var(--dark-red); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-</style> 
			 |