import { MusterEvent, NodeDefinition, NodeLike, Params, StatefulGraphNode, StatefulNodeDefinition, StatefulNodeType } from '../../types/graph'; /** * An instance of the [[on]] node. * See the [[on]] documentation to find out more. */ export interface OnNode extends StatefulGraphNode<'on', OnNodeProperties, OnNodeState, OnNodeData> { } /** * A definition of the [[on]] node. * See the [[on]] documentation to find out more */ export interface OnNodeDefinition extends StatefulNodeDefinition<'on', OnNodeProperties, OnNodeState, OnNodeData> { } export declare type OnNodeCallback = (event: MusterEvent, props: Params) => NodeDefinition | undefined; export interface OnNodeProperties { initialValue: NodeDefinition; callback: OnNodeCallback; } export interface OnNodeState { currentValue: NodeDefinition | undefined; } export interface OnNodeData { subscription: () => void; } /** * The implementation of the [[on]] node. * See the [[on]] documentation to find out more. */ export declare const OnNodeType: StatefulNodeType<'on', OnNodeProperties, OnNodeState>; /** * Creates a new instance of an [[on]] node, which is a type of [[NodeDefinition]] which can react to the dispatched * Muster events. The node starts its lifecycle by emitting the `initialValue`. * This value can then be changed by the `callback` when a correct event has arrived. See the [[dispatch]] * documentation to learn more about dispatching events. * * * @example **Change the value on event** * ```ts * import muster, { dispatch, on, ref, value } from '@dws/muster'; * * const app = muster({ * isOnline: on((event) => { * if (event.type === 'online') return value(true); * if (event.type === 'offline') return value(false); * return undefined; * }, true), * }); * * app.resolve(ref('isOnline')).subscribe((isOnline) => { * console.log(isOnline ? 'Online' : 'Offline'); * }); * * console.log('Dispatching `offline` event'); * await app.resolve(dispatch('offline')); * * // Console output: * // Online * // Dispatching `offline` event * // Offline * ``` */ export declare function on(callback: ((event: MusterEvent, params: Params) => NodeDefinition | NodeLike | undefined), initialValue: NodeDefinition | NodeLike): OnNodeDefinition; export declare function isOnNodeDefinition(value: NodeDefinition): value is OnNodeDefinition;