@xyo-network/react-node
Version:
Common React library for all XYO projects that use React
20 lines (17 loc) • 1.04 kB
text/typescript
import { usePromise } from '@xylabs/react-promise'
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 && nodeAddress) {
return new WeakRef(asNodeInstance(await providedNodeInstance.resolve(nodeAddress), 'Module is not a node'))
}
}, [providedNode, nodeAddress])
return [nodeAddressNode ?? nodeInstance ?? providedNode ?? undefined, error]
}