@xyo-network/react-node
Version:
Common React library for all XYO projects that use React
21 lines (18 loc) • 1.12 kB
text/typescript
import { usePromise } from '@xylabs/react-promise'
import { isDefined } from '@xylabs/typeof'
import type { NodeInstance } from '@xyo-network/node-model'
import { asNodeInstance } from '@xyo-network/node-model'
import { useWeakProvidedNode } from './provided/index.ts'
import { useWeakNodeConfigNodeField } from './useWeakNodeConfigNodeField.ts'
import type { WeakModuleFromNodeConfig } from './WeakModuleFromNodeConfig.ts'
export const useWeakNode = (config?: WeakModuleFromNodeConfig | undefined): [WeakRef<NodeInstance> | undefined, Error | undefined] => {
const [nodeAddress, nodeInstance] = useWeakNodeConfigNodeField(config)
const [providedNode] = useWeakProvidedNode()
const [nodeAddressNode, error] = usePromise(async () => {
const providedNodeInstance = providedNode?.deref()
if (providedNodeInstance && isDefined(nodeAddress)) {
return new WeakRef(asNodeInstance(await providedNodeInstance.resolve(nodeAddress), () => 'Module is not a node', { required: true }))
}
}, [providedNode, nodeAddress])
return [nodeAddressNode ?? nodeInstance ?? providedNode ?? undefined, error]
}