computer-scienceangular-roadmapbackend-roadmapblockchain-roadmapdba-roadmapdeveloper-roadmapdevops-roadmapfrontend-roadmapgo-roadmaphactoberfestjava-roadmapjavascript-roadmapnodejs-roadmappython-roadmapqa-roadmapreact-roadmaproadmapstudy-planvue-roadmapweb3-roadmap
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
69 lines
1.9 KiB
69 lines
1.9 KiB
import { cn } from '../lib/classname.ts'; |
|
import { memo, useEffect, useState } from 'react'; |
|
import { useScrollPosition } from '../hooks/use-scroll-position.ts'; |
|
import { X } from 'lucide-react'; |
|
|
|
type OnboardingNudgeProps = { |
|
onStartOnboarding: () => void; |
|
}; |
|
|
|
export const NUDGE_ONBOARDING_KEY = 'should_nudge_onboarding'; |
|
|
|
export function OnboardingNudge(props: OnboardingNudgeProps) { |
|
const { onStartOnboarding } = props; |
|
|
|
const [isLoading, setIsLoading] = useState(false); |
|
|
|
const { y: scrollY } = useScrollPosition(); |
|
|
|
useEffect(() => { |
|
if (localStorage.getItem(NUDGE_ONBOARDING_KEY) === null) { |
|
localStorage.setItem(NUDGE_ONBOARDING_KEY, 'true'); |
|
} |
|
}, []); |
|
|
|
if (localStorage.getItem(NUDGE_ONBOARDING_KEY) !== 'true') { |
|
return null; |
|
} |
|
|
|
if (scrollY < 100) { |
|
return null; |
|
} |
|
|
|
return ( |
|
<div |
|
className={cn( |
|
'fixed left-0 right-0 top-0 z-[91] flex w-full items-center justify-center bg-yellow-300 border-b border-b-yellow-500/30 py-1.5', |
|
{ |
|
'striped-loader': isLoading, |
|
}, |
|
)} |
|
> |
|
<p className="text-base font-semibold text-yellow-950"> |
|
Welcome! Please take a moment to{' '} |
|
<button |
|
type="button" |
|
onClick={() => { |
|
setIsLoading(true); |
|
localStorage.setItem(NUDGE_ONBOARDING_KEY, 'false'); |
|
onStartOnboarding(); |
|
}} |
|
className="underline" |
|
> |
|
complete onboarding |
|
</button> |
|
<button |
|
type="button" |
|
className="relative top-[3px] ml-1 px-1 py-1 text-yellow-600 hover:text-yellow-950" |
|
onClick={(e) => { |
|
e.stopPropagation(); |
|
localStorage.setItem(NUDGE_ONBOARDING_KEY, 'false'); |
|
setIsLoading(true); |
|
}} |
|
> |
|
<X className="h-4 w-4" strokeWidth={3} /> |
|
</button> |
|
</p> |
|
</div> |
|
); |
|
}
|
|
|