NProgress
Slim progress bars for Ajax'y applications. Inspired by Google, YouTube, and Medium.
Usage
'use client'
import { useQuery } from '@tanstack/react-query'
import { Button } from '@workspace/ui/components/Button'
import { useNProgress } from '@workspace/ui/components/NProgress'
import { Spinner } from '@workspace/ui/components/Spinner'
import React from 'react'
// Simulate a slow API call, returning a promise that resolves after 1 second
function useFakeApiCall() {
return useQuery({
queryKey: ['nprogress'],
queryFn: () => {
return new Promise(resolve => {
setTimeout(() => {
resolve(true)
}, 1000)
})
},
})
}
// Actual demo
export function NProgressDemo() {
const { isFetching, refetch } = useFakeApiCall()
useNProgress({ isFetching })
return (
<div>
<Button isDisabled={isFetching} onClick={() => refetch()}>
{isFetching && <Spinner />}
Refetch
</Button>
</div>
)
}