@equinor/fusion-observable
Version:
18 lines • 762 B
JavaScript
/**
* Maps action definitions to a subject {@link FlowSubject}
*
* @param actions - object of named action
* @param subject - target subject to map actions to
* @returns object of callable action which maps to provided subject
*/
export const actionMapper = (actions,
// eslint-disable-next-line @typescript-eslint/no-explicit-any
subject) => Object.entries(actions).reduce((cur, [prop, fnOrActions]) => Object.assign(cur, {
[prop]: typeof fnOrActions === 'function'
? /** if value is a function, call it 🤙🏻 */
(...args) => subject.next(fnOrActions(...args))
: /** extract child actions */
actionMapper(fnOrActions, subject),
}), {});
export default actionMapper;
//# sourceMappingURL=action-mapper.js.map