mirror of
https://github.com/sasjs/server.git
synced 2025-12-10 19:34:34 +00:00
37 lines
854 B
TypeScript
37 lines
854 B
TypeScript
import { useEffect, useCallback, useContext } from 'react'
|
|
import { UNSAFE_NavigationContext as NavigationContext } from 'react-router-dom'
|
|
import { History, Blocker, Transition } from 'history'
|
|
|
|
const useBlocker = (blocker: Blocker, when = true) => {
|
|
const navigator = useContext(NavigationContext).navigator as History
|
|
|
|
useEffect(() => {
|
|
if (!when) return
|
|
|
|
const unblock = navigator.block((tx: Transition) => {
|
|
const autoUnblockingTx = {
|
|
...tx,
|
|
retry() {
|
|
unblock()
|
|
tx.retry()
|
|
}
|
|
}
|
|
|
|
blocker(autoUnblockingTx)
|
|
})
|
|
|
|
return unblock
|
|
}, [navigator, blocker, when])
|
|
}
|
|
|
|
export const usePrompt = (message: string, when = true) => {
|
|
const blocker = useCallback(
|
|
(tx) => {
|
|
if (window.confirm(message)) tx.retry()
|
|
},
|
|
[message]
|
|
)
|
|
|
|
useBlocker(blocker, when)
|
|
}
|