EdgeStream
useEdgeStream
useEdgeStream() returns the EdgeStream client from context. Use it when you need direct access to the client — for example to call send(), access a server reference, or subscribe imperatively.
Signature
function useEdgeStream(): IEdgeStream
Usage
import { useEdgeStream } from 'edge-stream-js-react';
function SendButton() {
const stream = useEdgeStream();
const handleClick = async () => {
await stream.send('bas', 'workflow.action.trigger', {
workflowId: 'wf-123',
action: 'approve',
});
};
return <button onClick={handleClick}>Approve</button>;
}
Accessing a Server Reference
function ServerStatusInfo() {
const stream = useEdgeStream();
const basServer = stream.server('bas');
const transportStatus = basServer?.transport.status; // 'connected' | 'reconnecting' | ...
return (
<div>
<p>BAS transport: {transportStatus}</p>
<p>EdgeStream status: {stream.status}</p>
</div>
);
}
Subscribing Imperatively
// useEdgeStream + useEffect = manual subscription with explicit cleanup
// Prefer useSubscription() hook instead — it handles this automatically
function ManualSubscription() {
const stream = useEdgeStream();
useEffect(() => {
const sub = stream.subscribe('bas', 'hil.*', (envelope) => {
console.log('HIL event:', envelope.body);
});
return () => sub.unsubscribe(); // manual cleanup required
}, [stream]);
return <div>...</div>;
}
// Preferred: let useSubscription handle cleanup
function AutoSubscription() {
useSubscription('bas', 'hil.*', (envelope) => {
console.log('HIL event:', envelope.body);
});
return <div>...</div>;
}
Error Behavior
// useEdgeStream throws if called outside EdgeStreamProvider
function Orphan() {
const stream = useEdgeStream();
// Throws: "useEdgeStream must be used within <EdgeStreamProvider>"
// This is a programming error — always mount EdgeStreamProvider above this component
}
useEdgeStream vs Direct Import
If you created the EdgeStream instance at module scope, you could import it directly. Use
useEdgeStream() when the client is configured externally (e.g., from a different module or injected via dependency injection) and you want components to be decoupled from the specific instance.