intro.js-react icon indicating copy to clipboard operation
intro.js-react copied to clipboard

onPreventChange() callback not firing

Open jaimefps opened this issue 1 year ago • 1 comments

Describe the bug

onPreventChange() callback not firing when onBeforeChange() returns a Promise that outputs false. Also seeing what I suspect is the incorrect value passed to onPreventChange()

To Reproduce

// first issue example

  <Steps
      // some large amount of steps:
      steps={[{..}, {..}, {..}]}
      
      // async attempt to skip step 1
      onBeforeChange={async (step) => {
            if (step == 1) return 2
      })
      
      // try to detect the skip:
      onPreventChange={(step) => {
        // this never logs
        console.log({ skipped: step })
      }}
    />

// second issue example

  <Steps
      // some large amount of steps:
      steps={[{..}, {..}, {..}]}
      
      // attempt to skip step 1
      onBeforeChange={(step) => {
            if (step == 1) return 2
      })
      
      // try to detect the skip:
      onPreventChange={(step) => {
        // logs 0, instead of 1
        console.log({ skipped: step }) 
      }}
    />

Expected behavior

I'd expect that if the returned Promise from onBeforeChange() itself outputs a false, then we still get to fire onPreventChange()

How often does this bug happen?

Every time

System Info

macOS 14.5 (23F79) Chromium browsers

Additional Context

No response

jaimefps avatar Aug 11 '24 02:08 jaimefps

Thanks for the feedback.

Indeed, the intro.js-react props onBeforeChange is not a 1:1 match with the intro.js onbeforechange callback function. The current implementation does not seem to support a promise-based approach.

I would be open to reviewing a PR that adds support for a promise-based approach.

HiDeoo avatar Aug 12 '24 09:08 HiDeoo