aboutsummaryrefslogtreecommitdiffstats
path: root/src/actions/lib/actions.js
blob: 499018d702dafaeb88088869bb7b2c2f84de463d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
export default (definitions, validate) => {
  const newActions = {};
  Object.keys(definitions).forEach((scopeName) => {
    newActions[scopeName] = {};
    Object.keys(definitions[scopeName]).forEach((actionName) => {
      const action = (params) => {
        const schema = definitions[scopeName][actionName];
        validate(schema, params, actionName);
        action.notify(params);
      };
      newActions[scopeName][actionName] = action;
      action.listeners = [];
      action.listen = listener => action.listeners.push(listener);
      action.notify = params => action.listeners.forEach(listener => listener(params));
    });
  });
  return newActions;
};