diff options
author | Herbert Eiselt <herbert.eiselt@highstreet-technologies.com> | 2019-04-03 17:12:30 +0200 |
---|---|---|
committer | Herbert Eiselt <herbert.eiselt@highstreet-technologies.com> | 2019-04-03 17:13:01 +0200 |
commit | 97fa6d943c57a784a52462aaacb329ce93cf42d6 (patch) | |
tree | b5f0f2484c0a886fcade7b9bcf1d230e6f9e9501 /sdnr/wt/odlux/apps/configurationApp/src/plugin.tsx | |
parent | 3d6dd098db8ec243ca716a09fc55decbdd23b726 (diff) |
SDN-R odlux configuration
Add odlux configuration app
Change-Id: Ifecd3f6e1e3060a1fd1008f1f625a70cb2475a8a
Issue-ID: SDNC-584
Signed-off-by: Herbert Eiselt <herbert.eiselt@highstreet-technologies.com>
Diffstat (limited to 'sdnr/wt/odlux/apps/configurationApp/src/plugin.tsx')
-rw-r--r-- | sdnr/wt/odlux/apps/configurationApp/src/plugin.tsx | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/sdnr/wt/odlux/apps/configurationApp/src/plugin.tsx b/sdnr/wt/odlux/apps/configurationApp/src/plugin.tsx new file mode 100644 index 000000000..b7d44f70b --- /dev/null +++ b/sdnr/wt/odlux/apps/configurationApp/src/plugin.tsx @@ -0,0 +1,90 @@ +// 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 { faAdjust } from '@fortawesome/free-solid-svg-icons'; // select app icon + +import connect, { Connect, IDispatcher } from '../../../framework/src/flux/connect'; +import applicationManager from '../../../framework/src/services/applicationManager'; +import { IApplicationStoreState } from "../../../framework/src/store/applicationStore"; + +import { configurationAppRootHandler } from './handlers/configurationAppRootHandler'; +import configurationService from "./services/configurationService"; + +import ConfigurationApplication from "./views/configurationApplication"; +import { updateMountIdAsyncActionCreator, updateLpIdAsyncActionCreator, updateViewDataAsyncActionCreator } from "./actions/configurationActions"; + +let currentMountId: string | null | undefined = undefined; +let currentLpId: string | null |undefined = undefined; +let currentViewId: string | null | undefined = undefined; +let currentIndex: string | null | undefined = undefined; +let lastUrl: string | undefined = undefined; + +const mapProps = (state: IApplicationStoreState) => ({ + // currentProblemsProperties: createCurrentProblemsProperties(state), +}); + +const mapDisp = (dispatcher: IDispatcher) => ({ + updateMountId: (mountId: string | undefined) => dispatcher.dispatch(updateMountIdAsyncActionCreator(mountId)), + updateLpId: (lpId: string | undefined) => dispatcher.dispatch(updateLpIdAsyncActionCreator(lpId)), + updateViewData: (viewPath: string, indexValues: string[]) => dispatcher.dispatch(updateViewDataAsyncActionCreator(viewPath, indexValues)), +}); + +const ConfigurationApplicationRouteAdapter = connect(mapProps, mapDisp)((props: RouteComponentProps<{ mountId?: string, lpId?: string, viewId?: string, "0"?: string }> & Connect<typeof mapProps, typeof mapDisp>) => { + if (props.location.pathname !== lastUrl) { + // ensure the asynchronus update will only be called once per path + lastUrl = props.location.pathname; + window.setTimeout(async () => { + + // check if the mountId has changed + if (currentMountId !== props.match.params.mountId) { + currentMountId = props.match.params.mountId || undefined; + currentLpId = null; + currentViewId = null; + currentIndex = null; + await props.updateMountId(currentMountId); + } + + // check if the lpId has changed + if (currentLpId !== props.match.params.lpId) { + currentLpId = props.match.params.lpId || undefined; + currentViewId = null; + currentIndex = null; + currentLpId && await props.updateLpId(currentLpId); + } + + // check if the viewId or the indices has changed + if (currentViewId !== props.match.params.viewId || currentIndex !== props.match.params[0]) { + currentViewId = props.match.params.viewId || undefined; + currentIndex = props.match.params[0] || undefined; + currentViewId && await props.updateViewData(currentViewId || '', currentIndex && currentIndex.split("/") || [] ); + } + + }); + } + return ( + <ConfigurationApplication /> + ); +}); + +const App = withRouter((props: RouteComponentProps) => ( + <Switch> + <Route path={`${props.match.path}/:mountId/:lpId/:viewId/*`} component={ConfigurationApplicationRouteAdapter} /> + <Route path={`${props.match.path}/:mountId/:lpId/:viewId`} component={ConfigurationApplicationRouteAdapter} /> + <Route path={`${props.match.path}/:mountId/:lpId`} component={ConfigurationApplicationRouteAdapter} /> + <Route path={`${props.match.path}/:mountId`} component={ConfigurationApplicationRouteAdapter} /> + <Route path={`${props.match.path}`} component={ConfigurationApplicationRouteAdapter} /> + <Redirect to={`${props.match.path}`} /> + </Switch> +)); + +export function register() { + applicationManager.registerApplication({ + name: "configuration", + icon: faAdjust, + rootComponent: App, + rootActionHandler: configurationAppRootHandler, + menuEntry: "Configuration" + }); +} |