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')
 | 
						|
  }
 | 
						|
}
 |