Skip to main content

Documentation Index

Fetch the complete documentation index at: https://usegately.com/docs/llms.txt

Use this file to discover all available pages before exploring further.

The FormEmbed component allows you to embed Gately forms directly in your website.

Basic Usage

JavaScript

Gately.embedForm('FORM_ID', {
  container: '#form-container'
})

React

import { FormEmbed } from '@gately/sdk'

function ContactPage() {
  return (
    <div>
      <h1>Contact Us</h1>
      <FormEmbed formId="FORM_ID" />
    </div>
  )
}

Options

interface FormEmbedOptions {
  container?: string | HTMLElement  // Container element or selector
  onSubmit?: (data: FormData) => void  // Called on successful submission
  onError?: (error: Error) => void  // Called on error
  onLoad?: () => void  // Called when form loads
  styles?: FormStyles  // Custom styling
  prefill?: Record<string, any>  // Pre-fill field values
}

Event Handlers

On Submit

Gately.embedForm('FORM_ID', {
  container: '#form',
  onSubmit: (data) => {
    console.log('Form submitted:', data)
    
    // Show success message
    document.getElementById('form').innerHTML = `
      <div class="success">
        <h2>Thank you!</h2>
        <p>We'll be in touch soon.</p>
      </div>
    `
  }
})

On Error

Gately.embedForm('FORM_ID', {
  container: '#form',
  onError: (error) => {
    console.error('Form error:', error)
    alert('Something went wrong. Please try again.')
  }
})

On Load

Gately.embedForm('FORM_ID', {
  container: '#form',
  onLoad: () => {
    // Hide loading spinner
    document.getElementById('loading').style.display = 'none'
  }
})

Custom Styling

Gately.embedForm('FORM_ID', {
  container: '#form',
  styles: {
    fontFamily: 'Inter, sans-serif',
    fontSize: '16px',
    primaryColor: '#F97316',
    backgroundColor: '#ffffff',
    textColor: '#111827',
    borderRadius: '8px',
    borderColor: '#e5e7eb',
    inputPadding: '12px',
    buttonStyle: 'filled' // 'filled' | 'outline'
  }
})

Pre-fill Fields

// Pre-fill from URL params
const params = new URLSearchParams(window.location.search)

Gately.embedForm('FORM_ID', {
  container: '#form',
  prefill: {
    email: params.get('email'),
    name: params.get('name'),
    plan: 'pro'
  }
})

Pre-fill for Logged-in Users

const user = Gately.getUser()

Gately.embedForm('FORM_ID', {
  container: '#form',
  prefill: user ? {
    email: user.email,
    name: user.full_name
  } : {}
})

React Component

Basic

import { FormEmbed } from '@gately/sdk'

function ContactForm() {
  return (
    <FormEmbed 
      formId="FORM_ID"
      onSubmit={(data) => console.log('Submitted:', data)}
      onError={(error) => console.error('Error:', error)}
    />
  )
}

With Custom Styling

<FormEmbed 
  formId="FORM_ID"
  styles={{
    fontFamily: 'system-ui',
    primaryColor: '#6366f1',
    borderRadius: '12px'
  }}
/>

With Loading State

function ContactForm() {
  const [loading, setLoading] = useState(true)

  return (
    <div>
      {loading && <Spinner />}
      <FormEmbed 
        formId="FORM_ID"
        onLoad={() => setLoading(false)}
        style={{ display: loading ? 'none' : 'block' }}
      />
    </div>
  )
}

iFrame Embed

For complete isolation, use an iFrame:
<iframe 
  src="https://forms.usegately.com/f/FORM_ID"
  width="100%"
  height="600"
  frameborder="0"
  style="border: none;"
></iframe>

Responsive iFrame

<div style="position: relative; padding-bottom: 75%; height: 0; overflow: hidden;">
  <iframe 
    src="https://forms.usegately.com/f/FORM_ID"
    style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border: none;"
  ></iframe>
</div>

File Uploads

Forms with file fields handle uploads automatically:
Gately.embedForm('FORM_ID', {
  container: '#form',
  onSubmit: (data) => {
    // File URLs are included in the response
    console.log('Uploaded files:', data.files)
  }
})

Payment Forms

For forms with payment fields:
Gately.embedForm('FORM_ID', {
  container: '#form',
  onSubmit: (data) => {
    if (data.payment) {
      console.log('Payment ID:', data.payment.id)
      console.log('Amount:', data.payment.amount)
    }
  }
})

Multi-Step Forms

Multi-step forms are handled automatically. Track progress:
Gately.embedForm('FORM_ID', {
  container: '#form',
  onStepChange: (step, totalSteps) => {
    console.log(`Step ${step} of ${totalSteps}`)
    updateProgressBar(step / totalSteps)
  }
})

Validation

Client-side validation is built-in. Customize error messages:
Gately.embedForm('FORM_ID', {
  container: '#form',
  validationMessages: {
    required: 'This field is required',
    email: 'Please enter a valid email',
    minLength: 'Must be at least {min} characters'
  }
})

Accessibility

Forms are accessible by default:
  • Proper ARIA labels
  • Keyboard navigation
  • Screen reader support
  • Focus management