diff options
author | 2021-09-14 10:34:04 +0200 | |
---|---|---|
committer | 2021-09-14 10:34:04 +0200 | |
commit | 979ec02c9a1019152be08705986337e470eabb57 (patch) | |
tree | 6021179ad8649112717a499780f475275af487f2 /src/actions/lib/actions.ts | |
parent | refactor: defensive programming to avoid javascript error for unread badges (diff) | |
download | ferdium-app-979ec02c9a1019152be08705986337e470eabb57.tar.gz ferdium-app-979ec02c9a1019152be08705986337e470eabb57.tar.zst ferdium-app-979ec02c9a1019152be08705986337e470eabb57.zip |
chore: codebase improvements (#1930)
Diffstat (limited to 'src/actions/lib/actions.ts')
-rw-r--r-- | src/actions/lib/actions.ts | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/src/actions/lib/actions.ts b/src/actions/lib/actions.ts new file mode 100644 index 000000000..ed42eabc0 --- /dev/null +++ b/src/actions/lib/actions.ts | |||
@@ -0,0 +1,31 @@ | |||
1 | export const createActionsFromDefinitions = (actionDefinitions, validate) => { | ||
2 | const actions = {}; | ||
3 | Object.keys(actionDefinitions).forEach(actionName => { | ||
4 | const action = (params = {}) => { | ||
5 | const schema = actionDefinitions[actionName]; | ||
6 | validate(schema, params, actionName); | ||
7 | action.notify(params); | ||
8 | }; | ||
9 | actions[actionName] = action; | ||
10 | action.listeners = []; | ||
11 | action.listen = listener => action.listeners.push(listener); | ||
12 | action.off = listener => { | ||
13 | const { listeners } = action; | ||
14 | listeners.splice(listeners.indexOf(listener), 1); | ||
15 | }; | ||
16 | action.notify = params => | ||
17 | action.listeners.forEach(listener => listener(params)); | ||
18 | }); | ||
19 | return actions; | ||
20 | }; | ||
21 | |||
22 | export default (definitions, validate) => { | ||
23 | const newActions = {}; | ||
24 | Object.keys(definitions).forEach(scopeName => { | ||
25 | newActions[scopeName] = createActionsFromDefinitions( | ||
26 | definitions[scopeName], | ||
27 | validate, | ||
28 | ); | ||
29 | }); | ||
30 | return newActions; | ||
31 | }; | ||