/** * ============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, updateAntennaNameAction, UpdateAntennaGainAction, UpdateWaveguideLossAction } 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)) }, updateAntennaName: (antennaNameA: string, antennaNameB: string) => { dispatcher.dispatch(new updateAntennaNameAction(antennaNameA, antennaNameB)) }, updateAntennaGainAction: (antennaGainA: number, antennaGainB: number) => { dispatcher.dispatch(new UpdateAntennaGainAction(antennaGainA, antennaGainB)) }, updateWaveguideLossAction: (waveguideLossA: number, waveguideLossB: number) => { dispatcher.dispatch(new UpdateWaveguideLossAction(waveguideLossA, waveguideLossB)) } }); 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] const antennaNameA = data.split('&')[13].split('=')[1].replace("%20", " ") const antennaGainA = data.split('&')[14].split('=')[1] const waveguideLossA = data.split('&')[15].split('=')[1] const antennaNameB = data.split('&')[16].split('=')[1].replace("%20", " ") const antennaGainB = data.split('&')[17].split('=')[1] const waveguideLossB = data.split('&')[18].split('=')[1] if (siteNameA !== null && siteNameB !== null) { props.updateSiteName(String(siteNameA), String(siteNameB)) } if (Number(distance) !== null) { props.updateDistance(Number(distance)) } if (Number(lat1) >= -90 && Number(lat2) >= -90 && Number(lat1) <= 90 && Number(lat2) <= 90 && Number(lon1) >= -180 && Number(lon2) >= -180 && Number(lon1) <= 180 && Number(lon2) <= 180) { props.updateLatLon(Number(lat1), Number(lon1), Number(lat2), Number(lon2)) } if (Number(amslA)> 0 && Number(amslB)> 0) { if (Number(aglA)>= Number(amslA) && Number(aglB)>= Number(amslB)) { props.updateAltitude(Number(amslA), Number(aglA), Number(amslB), Number(aglB)) } } if (antennaNameA && antennaNameB.length) { props.updateAntennaName(String(antennaNameA), String(antennaNameB)) } if (Number(antennaGainA) > 0 && Number(antennaGainA) > 0) { props.updateAntennaGainAction(Number(antennaGainA), Number(antennaGainB)) } if(Number(waveguideLossA) !== null, Number(waveguideLossB) !== null){ props.updateWaveguideLossAction(Number(waveguideLossA),Number(waveguideLossB) ) } } 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" }); }