2025-05-01 18:21:45 +07:00
|
|
|
import { React } from '@revenge-mod/react'
|
2025-06-03 16:24:58 +07:00
|
|
|
import { findInTree } from './trees'
|
2025-05-01 18:21:45 +07:00
|
|
|
import type { ReactNode } from 'react'
|
2025-06-03 16:24:58 +07:00
|
|
|
import type { SearchFilter } from './trees'
|
2025-05-01 18:21:45 +07:00
|
|
|
|
|
|
|
|
export function useIsFirstRender() {
|
|
|
|
|
let firstRender = false
|
|
|
|
|
|
|
|
|
|
React.useEffect(() => {
|
|
|
|
|
firstRender = true
|
|
|
|
|
}, [])
|
|
|
|
|
|
|
|
|
|
return firstRender
|
|
|
|
|
}
|
|
|
|
|
|
2025-05-05 19:13:02 +07:00
|
|
|
export function useReRender() {
|
2025-05-09 00:04:36 +07:00
|
|
|
const [, forceUpdate] = React.useReducer(x => ~x, 0)
|
|
|
|
|
return forceUpdate
|
2025-05-05 19:13:02 +07:00
|
|
|
}
|
|
|
|
|
|
2025-05-01 18:21:45 +07:00
|
|
|
const ReactFiberWalkable = new Set(['props', 'children', 'child', 'sibling'])
|
|
|
|
|
|
2025-06-03 16:24:58 +07:00
|
|
|
export function findInReactFiber(
|
|
|
|
|
tree: Extract<ReactNode, { props: unknown }>,
|
|
|
|
|
filter: SearchFilter,
|
|
|
|
|
): any {
|
2025-05-01 18:21:45 +07:00
|
|
|
return findInTree(tree, filter, {
|
|
|
|
|
walkable: ReactFiberWalkable,
|
|
|
|
|
})
|
|
|
|
|
}
|