aboutsummaryrefslogtreecommitdiffstats
path: root/src/actions/lib/actions.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/actions/lib/actions.js')
-rw-r--r--src/actions/lib/actions.js18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/actions/lib/actions.js b/src/actions/lib/actions.js
new file mode 100644
index 000000000..499018d70
--- /dev/null
+++ b/src/actions/lib/actions.js
@@ -0,0 +1,18 @@
1export default (definitions, validate) => {
2 const newActions = {};
3 Object.keys(definitions).forEach((scopeName) => {
4 newActions[scopeName] = {};
5 Object.keys(definitions[scopeName]).forEach((actionName) => {
6 const action = (params) => {
7 const schema = definitions[scopeName][actionName];
8 validate(schema, params, actionName);
9 action.notify(params);
10 };
11 newActions[scopeName][actionName] = action;
12 action.listeners = [];
13 action.listen = listener => action.listeners.push(listener);
14 action.notify = params => action.listeners.forEach(listener => listener(params));
15 });
16 });
17 return newActions;
18};