import { assert } from '../../utils' import { ActionState, addActionAsUnique } from '../actions/actions.slice' import { addPipeline } from '../pipeline/pipeline.slice' import { addRelation } from '../relations/relations.slice' import { Store } from '../store' import { attributesToObjectEntries, paramsAttributesToObjectEntries, } from '../utils/attribute' /** * Attach an action to the store * @param store * @returns */ export const attach = (store: Store) => ( relId: string, action: ActionState, x: number = 0, y: number = 0 ) => { assert(relId, 'relId is required') assert(!!action, 'action is required') const produce = Object.fromEntries( attributesToObjectEntries( action.rAttributes.filter(attr => attr.required), relId ) ) const params = Object.fromEntries( paramsAttributesToObjectEntries(action.pAttributes) ) store.dispatch(addActionAsUnique(action)) store.dispatch( addPipeline({ id: relId, consume: {}, produce, params, }) ) store.dispatch( addRelation({ id: relId, actName: action.name, label: action.metadata?.label || '', rel: [], x, y, }) ) }