|  |  | @ -160,12 +160,14 @@ | 
			
		
	
		
		
			
				
					
					|  |  |  |     </div> |  |  |  |     </div> | 
			
		
	
		
		
			
				
					
					|  |  |  |     <div |  |  |  |     <div | 
			
		
	
		
		
			
				
					
					|  |  |  |       v-else |  |  |  |       v-else | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     > | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       <div | 
			
		
	
		
		
			
				
					
					|  |  |  |         class="flex h-52 w-full" |  |  |  |         class="flex h-52 w-full" | 
			
		
	
		
		
			
				
					
					|  |  |  |         @dragover.prevent |  |  |  |         @dragover.prevent | 
			
		
	
		
		
			
				
					
					|  |  |  |         @drop.prevent="onDropFiles" |  |  |  |         @drop.prevent="onDropFiles" | 
			
		
	
		
		
			
				
					
					|  |  |  |       > |  |  |  |       > | 
			
		
	
		
		
			
				
					
					|  |  |  |         <label |  |  |  |         <label | 
			
		
	
		
		
			
				
					
					|  |  |  |         class="w-full relative hover:bg-base-200/30 rounded-md border border-2 border-base-content/10 border-dashed" |  |  |  |           class="w-full relative bg-base-200/20  hover:bg-base-200/30 rounded-md border border-2 border-base-content/10 border-dashed" | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |           for="import_list_file" |  |  |  |           for="import_list_file" | 
			
		
	
		
		
			
				
					
					|  |  |  |           :class="{ 'opacity-50': isLoading }" |  |  |  |           :class="{ 'opacity-50': isLoading }" | 
			
		
	
		
		
			
				
					
					|  |  |  |         > |  |  |  |         > | 
			
		
	
	
		
		
			
				
					|  |  | @ -207,6 +209,14 @@ | 
			
		
	
		
		
			
				
					
					|  |  |  |           </form> |  |  |  |           </form> | 
			
		
	
		
		
			
				
					
					|  |  |  |         </label> |  |  |  |         </label> | 
			
		
	
		
		
			
				
					
					|  |  |  |       </div> |  |  |  |       </div> | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       <div class="text-center mt-2"> | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         Or <a | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |           :download="`${template.name}.csv`" | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |           :href="`data:text/csv;base64,${csvBase64}`" | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |           class="link font-medium" | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         >download</a> a spreadsheet to fill and import | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       </div> | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     </div> | 
			
		
	
		
		
			
				
					
					|  |  |  |   </div> |  |  |  |   </div> | 
			
		
	
		
		
			
				
					
					|  |  |  | </template> |  |  |  | </template> | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
	
		
		
			
				
					|  |  | @ -274,6 +284,25 @@ export default { | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |       return submissions |  |  |  |       return submissions | 
			
		
	
		
		
			
				
					
					|  |  |  |     }, |  |  |  |     }, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     csvBase64 () { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       const rows = [] | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       this.submitters.forEach((submitter) => { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         this.selectFieldsForSubmitter(submitter).forEach((field) => { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |           rows.push(this.submitters.length > 1 ? `${submitter.name} - ${field.name}` : field.name) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         }) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       }) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       const csv = rows.map(item => { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         if (/[",\n]/.test(item)) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |           return `"${item.replace(/"/g, '""')}"` | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         } else { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |           return item | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       }).join(',') | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       return window.btoa(csv + '\n' + rows.map(() => '').join(',') + '\n') | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     }, | 
			
		
	
		
		
			
				
					
					|  |  |  |     submitters () { |  |  |  |     submitters () { | 
			
		
	
		
		
			
				
					
					|  |  |  |       return this.template.submitters |  |  |  |       return this.template.submitters | 
			
		
	
		
		
			
				
					
					|  |  |  |     }, |  |  |  |     }, | 
			
		
	
	
		
		
			
				
					|  |  | 
 |