blob: b38db9946458f55a60fc735559797b051223f233 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
export const createActionsFromDefinitions = (actionDefinitions, validate) => {
const actions = {};
Object.keys(actionDefinitions).forEach((actionName) => {
const action = (params = {}) => {
const schema = actionDefinitions[actionName];
validate(schema, params, actionName);
action.notify(params);
};
actions[actionName] = action;
action.listeners = [];
action.listen = listener => action.listeners.push(listener);
action.off = (listener) => {
const { listeners } = action;
listeners.splice(listeners.indexOf(listener), 1);
};
action.notify = params => action.listeners.forEach(listener => listener(params));
});
return actions;
};
export default (definitions, validate) => {
const newActions = {};
Object.keys(definitions).forEach((scopeName) => {
newActions[scopeName] = createActionsFromDefinitions(definitions[scopeName], validate);
});
return newActions;
};
|