Skip to content

Events

ROnboardingWrapper supports event callbacks to hook into the onboarding lifecycle.

Props

NameTypeDescription
onFinish() => voidCalled when the user completes the onboarding by clicking the finish button
onExit(index: number) => voidCalled when the user exits the onboarding early (via exit button or programmatically)

onFinish

The onFinish callback is triggered when the user completes the entire onboarding flow by clicking the finish button on the last step.

tsx
<ROnboardingWrapper
  ref={wrapperRef}
  steps={steps}
  onFinish={() => {
    console.log('Onboarding completed!')
    // Save completion status, show success message, etc.
  }}
/>

onExit

The onExit callback is triggered when the user exits the onboarding before completing all steps. It receives the current step index as a parameter.

tsx
<ROnboardingWrapper
  ref={wrapperRef}
  steps={steps}
  onExit={(index) => {
    console.log(`User exited at step ${index + 1}`)
    // Track analytics, save progress, etc.
  }}
/>

Complete Example

tsx
import { ROnboardingWrapper, useROnboarding } from 'r-onboarding'
import 'r-onboarding/dist/style.css'
import { useRef, useState } from 'react'

export default function App() {
  const wrapperRef = useRef(null)
  const { start } = useROnboarding(wrapperRef)
  const [status, setStatus] = useState('')

  const steps = [
    { attachTo: { element: '#step1' }, content: { title: 'Step 1' } },
    { attachTo: { element: '#step2' }, content: { title: 'Step 2' } },
    { attachTo: { element: '#step3' }, content: { title: 'Step 3' } }
  ]

  const handleFinish = () => {
    setStatus('Onboarding completed!')
    localStorage.setItem('onboarding_complete', 'true')
  }

  const handleExit = (index) => {
    setStatus(`Exited at step ${index + 1}`)
    // Optionally save progress
    localStorage.setItem('onboarding_progress', index.toString())
  }

  return (
    <div>
      <ROnboardingWrapper
        ref={wrapperRef}
        steps={steps}
        onFinish={handleFinish}
        onExit={handleExit}
      />
      <button onClick={start}>Start Tour</button>
      {status && <p>{status}</p>}
      <div id="step1">First Element</div>
      <div id="step2">Second Element</div>
      <div id="step3">Third Element</div>
    </div>
  )
}

Difference Between onFinish and onExit

EventTriggerUse Case
onFinishUser clicks "Finish" on last stepMark onboarding as complete
onExitUser clicks close/exit buttonTrack abandonment, save progress

TIP

Both callbacks can be used together to handle all end-of-tour scenarios.

Released under the MIT License.