HiDeoo / intro.js-react

Intro.js react wrapper
MIT License
406 stars 58 forks source link

onPreventChange() callback not firing #115

Open jaimefps opened 1 month ago

jaimefps commented 1 month ago

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

HiDeoo commented 1 month ago

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.