/** * ============LICENSE_START======================================================================== * ONAP : ccsdk feature sdnr wt odlux * ================================================================================================= * Copyright (C) 2020 highstreet technologies GmbH Intellectual Property. All rights reserved. * ================================================================================================= * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except * in compliance with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under the License * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express * or implied. See the License for the specific language governing permissions and limitations under * the License. * ============LICENSE_END========================================================================== */ // 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 { faBookOpen } from '@fortawesome/free-solid-svg-icons'; // select app icon import applicationManager from '../../../framework/src/services/applicationManager'; import LinkCalculation from './views/linkCalculationComponent'; import LinkCalculationAppRootHandler from './handlers/linkCalculationAppRootHandler'; import connect, { Connect, IDispatcher } from '../../../framework/src/flux/connect'; import { IApplicationStoreState } from "../../../framework/src/store/applicationStore"; import { UpdateLinkIdAction, UpdateLatLonAction, updateHideForm, UpdateSiteAction, UpdateDistanceAction, isCalculationServerReachableAction, updateAltitudeAction } from "./actions/commonLinkCalculationActions"; let currentLinkId: string | null = null; let lastUrl: string = "/linkCalculation"; const mapProps = (state: IApplicationStoreState) => ({ reachable: state.linkCalculation.calculations.reachable }); const mapDisp = (dispatcher: IDispatcher) => ({ updateLinkId: (mountId: string) => dispatcher.dispatch(new UpdateLinkIdAction(mountId)), updateSiteName: (siteNameA?:any, siteNameB?:any)=>{ dispatcher.dispatch(new UpdateSiteAction(siteNameA, siteNameB)) }, updateDistance :(distance:number) =>{ dispatcher.dispatch(new UpdateDistanceAction(distance)) }, updateLatLon : (Lat1:number, Lon1:number, Lat2:number, Lon2:number)=> { dispatcher.dispatch(new UpdateLatLonAction(Lat1, Lon1, Lat2, Lon2)) dispatcher.dispatch(new updateHideForm (true)) }, updateAltitude : (amslA:number, aglA:number, amslB:number, aglB:number) => { dispatcher.dispatch(new updateAltitudeAction(amslA,aglA,amslB,aglB)) } // UpdateConectivity : (reachable:boolean) => { // dispatcher.dispatch (new isCalculationServerReachableAction (reachable)) // } }); const LinkCalculationRouteAdapter = connect(mapProps, mapDisp)((props: RouteComponentProps<{ mountId?: string }> & Connect) => { let linkId: string = ""; // called when component finshed mounting React.useEffect(() => { lastUrl = props.location.pathname; linkId = getLinkId(lastUrl); const data= props.location.search if (data !== undefined && data.length>0){ const lat1 = data.split('&')[0].split('=')[1] const lon1 = data.split('&')[1].split('=')[1] const lat2 = data.split('&')[2].split('=')[1] const lon2 = data.split('&')[3].split('=')[1] const siteNameA = data.split('&')[4].split('=')[1] const siteNameB = data.split('&')[5].split('=')[1] const distance = data.split('&')[8].split('=')[1] const amslA = data.split('&')[9].split('=')[1] const aglA = data.split('&')[10].split('=')[1] const amslB = data.split('&')[11].split('=')[1] const aglB = data.split('&')[12].split('=')[1] props.updateSiteName(String(siteNameA), String(siteNameB)) props.updateDistance(Number(distance)) props.updateLatLon(Number(lat1),Number(lon1),Number(lat2),Number(lon2)) props.updateAltitude (Number(amslA), Number(aglA), Number(amslB), Number(aglB)) } if (currentLinkId !== linkId) { // new element is loaded currentLinkId = linkId; props.updateLinkId(currentLinkId); } }, []); // called when component gets updated React.useEffect(() => { lastUrl = props.location.pathname; linkId = getLinkId(lastUrl); if (currentLinkId !== linkId) { currentLinkId = linkId; props.updateLinkId(currentLinkId); } }); const getLinkId = (lastUrl: string) => { let index = lastUrl.lastIndexOf("linkCalculation/"); if (index >= 0) { linkId = lastUrl.substr(index+16); } else { linkId = ""; } return linkId; } return ( ); }); const App = withRouter((props: RouteComponentProps) => { props.history.action = "POP"; return ( ) }); export function register() { applicationManager.registerApplication({ name: "linkCalculation", icon: faBookOpen, rootActionHandler: LinkCalculationAppRootHandler, rootComponent: App, menuEntry: "Link Calculation" }); }