From 3d202a04b99f0e61b6ccf8b7a5610e1a15ca58e7 Mon Sep 17 00:00:00 2001
From: Herbert Eiselt <herbert.eiselt@highstreet-technologies.com>
Date: Mon, 11 Feb 2019 14:54:12 +0100
Subject: 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>
---
 sdnr/wt/odlux/apps/mediatorApp/src/plugin.tsx | 66 +++++++++++++++++++++++++++
 1 file changed, 66 insertions(+)
 create mode 100644 sdnr/wt/odlux/apps/mediatorApp/src/plugin.tsx

(limited to 'sdnr/wt/odlux/apps/mediatorApp/src/plugin.tsx')

diff --git a/sdnr/wt/odlux/apps/mediatorApp/src/plugin.tsx b/sdnr/wt/odlux/apps/mediatorApp/src/plugin.tsx
new file mode 100644
index 000000000..0878fee65
--- /dev/null
+++ b/sdnr/wt/odlux/apps/mediatorApp/src/plugin.tsx
@@ -0,0 +1,66 @@
+// app configuration and main entry point for the app
+
+import * as React from "react";
+import { withRouter, RouteComponentProps, Route, Switch, Redirect } from 'react-router-dom';
+
+import { faGlobe } from '@fortawesome/free-solid-svg-icons';  // select app icon
+
+import applicationManager from '../../../framework/src/services/applicationManager';
+import { IApplicationStoreState } from "../../../framework/src/store/applicationStore";
+import connect, { Connect, IDispatcher } from '../../../framework/src/flux/connect';
+
+import { mediatorAppRootHandler } from './handlers/mediatorAppRootHandler';
+import { avaliableMediatorServersReloadAction } from "./handlers/avaliableMediatorServersHandler";
+
+import { MediatorApplication } from "./views/mediatorApplication";
+import { MediatorServerSelection } from "./views/mediatorServerSelection";
+import { initializeMediatorServerAsyncActionCreator } from "./actions/mediatorServerActions";
+
+let currentMediatorServerId: string | undefined = undefined; 
+
+const mapDisp = (dispatcher: IDispatcher) => ({
+  loadMediatorServer : (mediatorServerId: string) => dispatcher.dispatch(initializeMediatorServerAsyncActionCreator(mediatorServerId)),
+});
+
+const MediatorServerRouteAdapter = connect(undefined, mapDisp)((props: RouteComponentProps<{ mediatorServerId: string }> & Connect<undefined, typeof mapDisp>) => {
+  if (currentMediatorServerId !== props.match.params.mediatorServerId) {
+    // route parameter has changed 
+    currentMediatorServerId = props.match.params.mediatorServerId || undefined;
+    // Hint: This timeout is need, since it is not recommended to change the state while rendering is in progress !
+    window.setTimeout(() => {
+      if (currentMediatorServerId) {
+        props.loadMediatorServer(currentMediatorServerId);
+      }
+    });
+  }
+  return (
+    <MediatorApplication />
+  )
+});
+
+type AppProps = RouteComponentProps & Connect;
+
+const App = (props: AppProps) => (
+  <Switch>
+    <Route exact path={ `${ props.match.path }` } component={ MediatorServerSelection } /> 
+    <Route path={ `${ props.match.path }/:mediatorServerId` } component={ MediatorServerRouteAdapter } /> 
+    <Redirect to={ `${ props.match.path }` } />
+   </Switch>
+); 
+
+const FinalApp = withRouter(connect()(App));
+
+export function register() {
+  const applicationApi = applicationManager.registerApplication({
+    name: "mediatorApp",
+    icon: faGlobe,
+    rootComponent: FinalApp,
+    rootActionHandler: mediatorAppRootHandler,
+    menuEntry: "Mediator App"
+  });
+
+  // prefetch all avaliable mediator servers
+  applicationApi.applicationStoreInitialized.then(applicationStore => {
+    applicationStore.dispatch(avaliableMediatorServersReloadAction)
+  });
+};
-- 
cgit 1.2.3-korg

