aboutsummaryrefslogtreecommitdiffstats
path: root/sdnr/wt/odlux/framework/src/store
diff options
context:
space:
mode:
authorHerbert Eiselt <herbert.eiselt@highstreet-technologies.com>2019-02-11 14:54:12 +0100
committerHerbert Eiselt <herbert.eiselt@highstreet-technologies.com>2019-02-11 14:54:53 +0100
commit3d202a04b99f0e61b6ccf8b7a5610e1a15ca58e7 (patch)
treeab756cfa8de5eced886d3947423d198be8c0ce62 /sdnr/wt/odlux/framework/src/store
parent12a8c669f52c0e84d580c078cee849b25133b585 (diff)
Add sdnr wt odlux
Add complete sdnr wireless transport app odlux core and apps Change-Id: I5dcbfb8f3b790e3bda7c8df67bd69d81958f65e5 Issue-ID: SDNC-576 Signed-off-by: Herbert Eiselt <herbert.eiselt@highstreet-technologies.com>
Diffstat (limited to 'sdnr/wt/odlux/framework/src/store')
-rw-r--r--sdnr/wt/odlux/framework/src/store/applicationStore.ts56
1 files changed, 56 insertions, 0 deletions
diff --git a/sdnr/wt/odlux/framework/src/store/applicationStore.ts b/sdnr/wt/odlux/framework/src/store/applicationStore.ts
new file mode 100644
index 000000000..97c98d120
--- /dev/null
+++ b/sdnr/wt/odlux/framework/src/store/applicationStore.ts
@@ -0,0 +1,56 @@
+
+import { Store } from '../flux/store';
+import { combineActionHandler, MiddlewareArg, Middleware, chainMiddleware } from '../flux/middleware';
+
+import applicationService from '../services/applicationManager';
+
+import { applicationRegistryHandler, IApplicationRegistration } from '../handlers/applicationRegistryHandler';
+import { authenticationStateHandler, IAuthenticationState } from '../handlers/authenticationHandler';
+import { applicationStateHandler, IApplicationState } from '../handlers/applicationStateHandler';
+import { navigationStateHandler, INavigationState } from '../handlers/navigationStateHandler';
+
+import { setApplicationStore } from '../services/applicationApi';
+
+import apiMiddleware from '../middleware/api';
+import thunkMiddleware from '../middleware/thunk';
+import loggerMiddleware from '../middleware/logger';
+import routerMiddleware from '../middleware/navigation';
+
+export type MiddlewareApi = MiddlewareArg<IApplicationStoreState>;
+
+export interface IFrameworkStoreState {
+ applicationRegistraion: IApplicationRegistration;
+ applicationState: IApplicationState;
+ authenticationState: IAuthenticationState;
+ navigationState: INavigationState;
+}
+
+export interface IApplicationStoreState {
+ framework: IFrameworkStoreState;
+}
+
+const frameworkHandlers = combineActionHandler({
+ applicationRegistraion: applicationRegistryHandler,
+ applicationState: applicationStateHandler,
+ authenticationState: authenticationStateHandler,
+ navigationState: navigationStateHandler
+});
+
+export class ApplicationStore extends Store<IApplicationStoreState> { }
+
+/** This function will create the application store considering the currently registered application ans their middlewares. */
+export const applicationStoreCreator = (): ApplicationStore => {
+ const middlewares: Middleware<IApplicationStoreState>[] = [];
+ const actionHandlers = Object.keys(applicationService.applications).reduce((acc, cur) => {
+ const reg = applicationService.applications[cur];
+ reg && typeof reg.rootActionHandler === 'function' && (acc[cur] = reg.rootActionHandler);
+ reg && +(reg.middlewares || 0) && middlewares.push(...(reg.middlewares as Middleware<IApplicationStoreState>[]));
+ return acc;
+ }, { framework: frameworkHandlers } as any);
+
+ const applicationStore = new ApplicationStore(combineActionHandler(actionHandlers), chainMiddleware(loggerMiddleware, thunkMiddleware, routerMiddleware, apiMiddleware, ...middlewares));
+ setApplicationStore(applicationStore);
+ return applicationStore;
+}
+
+export default applicationStoreCreator; \ No newline at end of file