fc9a625414
* only change flags when mounted * update changelog
33 lines
847 B
TypeScript
33 lines
847 B
TypeScript
import { useState, useCallback } from 'react'
|
|
import { useIsMounted } from './use-is-mounted'
|
|
|
|
export function useFlags(initialFlags = 0) {
|
|
let [flags, setFlags] = useState(initialFlags)
|
|
let mounted = useIsMounted()
|
|
|
|
let addFlag = useCallback(
|
|
(flag: number) => {
|
|
if (!mounted.current) return
|
|
setFlags((flags) => flags | flag)
|
|
},
|
|
[flags, mounted]
|
|
)
|
|
let hasFlag = useCallback((flag: number) => Boolean(flags & flag), [flags])
|
|
let removeFlag = useCallback(
|
|
(flag: number) => {
|
|
if (!mounted.current) return
|
|
setFlags((flags) => flags & ~flag)
|
|
},
|
|
[setFlags, mounted]
|
|
)
|
|
let toggleFlag = useCallback(
|
|
(flag: number) => {
|
|
if (!mounted.current) return
|
|
setFlags((flags) => flags ^ flag)
|
|
},
|
|
[setFlags]
|
|
)
|
|
|
|
return { flags, addFlag, hasFlag, removeFlag, toggleFlag }
|
|
}
|