import { GraphAction, GraphNode, NodeDefinition, StatefulGraphNode, StatefulNodeDefinition, StatefulNodeType } from '../../types/graph'; /** * An instance of the [[removeItem]] node. * See the [[removeItem]] documentation to find out more. */ export interface RemoveItemNode extends StatefulGraphNode<'remove-item', RemoveItemNodeProperties> { } /** * A definition of the [[removeItem]] node. * See the [[removeItem]] documentation to find out more. */ export interface RemoveItemNodeDefinition extends StatefulNodeDefinition<'remove-item', RemoveItemNodeProperties> { } export interface RemoveItemNodeProperties { item: NodeDefinition; target: NodeDefinition; } export interface RemoveItemNodeState { memoized: (targetNode: GraphNode, id: string) => GraphAction; } /** * The implementation of the [[removeItem]]. * See the [[removeItem]] documentation for more information. */ export declare const RemoveItemNodeType: StatefulNodeType<'remove-item', RemoveItemNodeProperties, RemoveItemNodeState, {}>; /** * Creates a new instance of the [[removeItem]] node, which is a type of a [[NodeDefinition]] used when removing a * specific item from a collection supporting [[removeItemOperation]]. * * * @example **Remove the last item from a collection** * ```js * import muster, { arrayList, entries, last, query, ref, removeItem } from '@dws/muster'; * * const app = muster({ * people: arrayList([ * { name: 'Sarah' }, * { name: 'Jane' }, * { name: 'Kate' }, * ]), * }); * * app.resolve(query(ref('people'), entries({ name: true }))).subscribe((people) => { * console.log('People:', people); * }); * * console.log('Removing last entry'); * await app.resolve(removeItem(ref('people'), ref('people', last()))); * * // Console output: * // People: [{ name: 'Sarah' }, { name: 'Jane' }, { name: 'Kate' }] * // Removing last entry * // People: [{ name: 'Sarah' }, { name: 'Jane' }] * ``` * * @example **Remove person with name `Jane`** * ```js * import muster, { applyTransforms, arrayList, eq, entries, filter, get, head, query, ref, removeItem } from '@dws/muster'; * * const app = muster({ * people: arrayList([ * { name: 'Sarah' }, * { name: 'Jane' }, * { name: 'Kate' }, * ]), * }); * * app.resolve(query(ref('people'), entries({ name: true }))).subscribe((people) => { * console.log('People:', people); * }); * * console.log('Removing Jane'); * await app.resolve(removeItem(ref('people'), head(applyTransforms(ref('people'), [ * filter((person) => eq(get(person, 'name'), 'Jane')) * ])))); * * // Console output: * // People: [{ name: 'Sarah' }, { name: 'Jane' }, { name: 'Kate' }] * // Removing Jane * // People: [{ name: 'Sarah' }, { name: 'Kate' }] * ``` */ export declare function removeItem(target: NodeDefinition, item: NodeDefinition): RemoveItemNodeDefinition;