Open EliasVal opened 2 months ago
It seems #1062 would resolve this issue
Yeah, this library isn't compatible with React 19 yet.
Any plans/estimations on React 19 compatibility?
Any updates for this?
Any updates for this?
It seems like @gilbarbara has other plans before updating this package to support React v19, which I disagree with but hey, I don't maintain nor contribute to this package 😅
But, in my opinion, React v19 should be prioritized since it is nearing release, and versions before 16.3 are being used less and less. One way to keep both parties happy is to do the v19 update and backport any new features @gilbarbara would like the React <16.3 folks to have. But supporting those legacy React versions is pretty pointless.
Anywho, my workaround was to clone and build #1062 and add it as a package in my monorepo. Is it the best way? I don't know. Does it work? sure does!
I've published a separate package in the meanwhile. https://www.npmjs.com/package/react-joyride-react-19
npm install react-joyride-react-19
It includes the latest from main and PR https://github.com/gilbarbara/react-joyride/pull/1062
I hope we can find a way moving forward where we can support React 19 and still keep backwards compatibility in the original package.
@cjkihl Amazing work! But do you mind updating the package? Thanks in advance :D
@EliasVal You should use "use client" and next/dynamic with ssr: false on "react-joyride"
My working example:
then import exported consts as usual
@kirill2400 Build still fails when trying your solution.
@EliasVal I have two projects with Next.js 14.2.5 and 14.2.7 with react-joyride 2.9.2 and this code work perfectly
"use client"
import dynamic from "next/dynamic";
import { Locale } from "react-joyride";
import { useEffect, useState } from "react";
import { hintTourSteps } from "@/components/Joyride/TourSteps";
const JoyRide = dynamic(
() => import("react-joyride"),
{ ssr: false }
)
const locale: Locale = {
back: "Назад",
close: "Закрыть",
last: "Завершить",
next: "Далее",
nextLabelWithProgress: "Далее (Шаг {step} из {steps})",
open: "Открыть обучение",
skip: "Пропустить"
}
export const Tour = ({ uid, steps, repeatable }: { uid: string, steps: any, repeatable?: boolean }) => {
const [ run, setRun ] = useState(false)
useEffect(() => {
let timeoutId: NodeJS.Timeout | undefined = undefined;
if (typeof window != "undefined") {
const value = localStorage.getItem(uid)
if (!repeatable && value == "completed") {
return
}
timeoutId = setTimeout(() => {
setRun(true)
timeoutId = undefined
}, 1000)
}
return () => timeoutId && clearTimeout(timeoutId)
}, [])
return (
<JoyRide
steps={steps}
callback={(e) => {
if (e.action == "skip" || e.index == steps.length - 1) {
localStorage.setItem(uid, "completed")
} else if (e.action == "next" && e.lifecycle == "ready") {
localStorage.setItem(uid, e.index.toString())
}
}}
continuous={true}
showSkipButton={true}
disableCloseOnEsc={true}
disableOverlayClose={true}
hideCloseButton={true}
locale={locale}
run={run}
/>
)
}
export const ShowWithTour = ({ uid, children }: { uid: string, children: React.ReactNode }) => {
const [ show, setShow ] = useState(false)
useEffect(() => {
if (typeof window != "undefined") {
const value = localStorage.getItem(uid)
if (value == "completed") {
return
}
setShow(true)
}
}, [])
return show && children || <></>
}
export const HintTour = () => <Tour uid="hint-tour" steps={hintTourSteps} repeatable={true}/>
I can import
@kirill2400 I'm using Next.js canary (15.0.0-canary) which is probably why I can't get this to work.
@cjkihl Amazing work! But do you mind updating the package? Thanks in advance :D
Sure. thank you for the reminder
Are there any updates? This is currently blocking the migration to Next.js 15, which is a significant issue.
Are there any updates? This is currently blocking the migration to Next.js 15, which is a significant issue. @mngrs I published this package in the meanwhile: https://www.npmjs.com/package/react-joyride-react-19
You can try the next version, but breaking changes will occur before the final release.
npm i react-joyride@next
🐛 Bug Report
When trying to compile a Next.js app using
react-joyride
(React-rc, ReactDOM-rc, Next.js-canary), the build fails.To Reproduce
react-joyride
in a Next.js appExpected behavior
Normal build
Current behavior
Build fails with the following output:
System Information