mirror of https://github.com/docusealco/docuseal
				
				
				
			
			You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							56 lines
						
					
					
						
							1.6 KiB
						
					
					
				
			
		
		
	
	
							56 lines
						
					
					
						
							1.6 KiB
						
					
					
				| export default class extends HTMLElement {
 | |
|   connectedCallback () {
 | |
|     const iframeTemplate = this.querySelector('template')
 | |
| 
 | |
|     this.observer = new IntersectionObserver((entries) => {
 | |
|       if (entries.some(e => e.isIntersecting)) {
 | |
|         iframeTemplate.parentElement.prepend(iframeTemplate.content)
 | |
| 
 | |
|         this.observer.disconnect()
 | |
|       }
 | |
|     })
 | |
| 
 | |
|     this.observer.observe(this)
 | |
| 
 | |
|     window.addEventListener('message', this.messageHandler)
 | |
|   }
 | |
| 
 | |
|   messageHandler = (event) => {
 | |
|     if (event.data.type === 'google-drive-files-picked') {
 | |
|       this.form.querySelectorAll('input[name="google_drive_file_ids[]"]').forEach(el => el.remove())
 | |
| 
 | |
|       const files = event.data.files || []
 | |
| 
 | |
|       files.forEach((file) => {
 | |
|         const input = document.createElement('input')
 | |
|         input.type = 'hidden'
 | |
|         input.name = 'google_drive_file_ids[]'
 | |
|         input.value = file.id
 | |
|         this.form.appendChild(input)
 | |
|       })
 | |
| 
 | |
|       this.form.querySelector('button[type="submit"]').click()
 | |
|       this.loader.classList.remove('hidden')
 | |
|     } else if (event.data.type === 'google-drive-picker-loaded') {
 | |
|       this.loader.classList.add('hidden')
 | |
|       this.form.classList.remove('hidden')
 | |
|     } else if (event.data.type === 'google-drive-picker-request-oauth') {
 | |
|       document.getElementById(this.dataset.oauthButtonId).classList.remove('hidden')
 | |
|       this.classList.add('hidden')
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   disconnectedCallback () {
 | |
|     this.observer?.unobserve(this)
 | |
|     window.removeEventListener('message', this.messageHandler)
 | |
|   }
 | |
| 
 | |
|   get form () {
 | |
|     return this.querySelector('form')
 | |
|   }
 | |
| 
 | |
|   get loader () {
 | |
|     return document.getElementById('google_drive_loader')
 | |
|   }
 | |
| }
 |