1*cf78ab8cSAndroid Build Coastguard Workerimport {css, html, LitElement} from 'lit'; 2*cf78ab8cSAndroid Build Coastguard Workerimport {customElement, property} from 'lit/decorators.js'; 3*cf78ab8cSAndroid Build Coastguard Worker 4*cf78ab8cSAndroid Build Coastguard Worker@customElement('netsim-app') 5*cf78ab8cSAndroid Build Coastguard Workerexport class NetsimApp extends LitElement { 6*cf78ab8cSAndroid Build Coastguard Worker /** 7*cf78ab8cSAndroid Build Coastguard Worker * The view of the netsim app: main (map view), trace (packet trace view) 8*cf78ab8cSAndroid Build Coastguard Worker */ 9*cf78ab8cSAndroid Build Coastguard Worker @property() viewMode: string = 'main'; 10*cf78ab8cSAndroid Build Coastguard Worker 11*cf78ab8cSAndroid Build Coastguard Worker /** 12*cf78ab8cSAndroid Build Coastguard Worker * The version of netsim. 13*cf78ab8cSAndroid Build Coastguard Worker */ 14*cf78ab8cSAndroid Build Coastguard Worker @property() version: string = ''; 15*cf78ab8cSAndroid Build Coastguard Worker 16*cf78ab8cSAndroid Build Coastguard Worker static styles = css` 17*cf78ab8cSAndroid Build Coastguard Worker .container { 18*cf78ab8cSAndroid Build Coastguard Worker display: flex; 19*cf78ab8cSAndroid Build Coastguard Worker width: 100%; 20*cf78ab8cSAndroid Build Coastguard Worker } 21*cf78ab8cSAndroid Build Coastguard Worker 22*cf78ab8cSAndroid Build Coastguard Worker .contentA { 23*cf78ab8cSAndroid Build Coastguard Worker flex: 2; 24*cf78ab8cSAndroid Build Coastguard Worker } 25*cf78ab8cSAndroid Build Coastguard Worker 26*cf78ab8cSAndroid Build Coastguard Worker .contentB { 27*cf78ab8cSAndroid Build Coastguard Worker flex: 2; 28*cf78ab8cSAndroid Build Coastguard Worker } 29*cf78ab8cSAndroid Build Coastguard Worker 30*cf78ab8cSAndroid Build Coastguard Worker #bottom { 31*cf78ab8cSAndroid Build Coastguard Worker position: relative; 32*cf78ab8cSAndroid Build Coastguard Worker bottom: 0; 33*cf78ab8cSAndroid Build Coastguard Worker left: 0; 34*cf78ab8cSAndroid Build Coastguard Worker font-size: 20px; 35*cf78ab8cSAndroid Build Coastguard Worker } 36*cf78ab8cSAndroid Build Coastguard Worker `; 37*cf78ab8cSAndroid Build Coastguard Worker 38*cf78ab8cSAndroid Build Coastguard Worker constructor() { 39*cf78ab8cSAndroid Build Coastguard Worker super(); 40*cf78ab8cSAndroid Build Coastguard Worker this.invokeGetVersion(); 41*cf78ab8cSAndroid Build Coastguard Worker } 42*cf78ab8cSAndroid Build Coastguard Worker 43*cf78ab8cSAndroid Build Coastguard Worker invokeGetVersion() { 44*cf78ab8cSAndroid Build Coastguard Worker fetch('./version', { 45*cf78ab8cSAndroid Build Coastguard Worker method: 'GET', 46*cf78ab8cSAndroid Build Coastguard Worker }) 47*cf78ab8cSAndroid Build Coastguard Worker .then(response => response.json()) 48*cf78ab8cSAndroid Build Coastguard Worker .then(data => { 49*cf78ab8cSAndroid Build Coastguard Worker this.version = data.version; 50*cf78ab8cSAndroid Build Coastguard Worker }) 51*cf78ab8cSAndroid Build Coastguard Worker .catch(error => { 52*cf78ab8cSAndroid Build Coastguard Worker // eslint-disable-next-line 53*cf78ab8cSAndroid Build Coastguard Worker console.log('Cannot connect to netsim web server', error); 54*cf78ab8cSAndroid Build Coastguard Worker }); 55*cf78ab8cSAndroid Build Coastguard Worker } 56*cf78ab8cSAndroid Build Coastguard Worker 57*cf78ab8cSAndroid Build Coastguard Worker connectedCallback() { 58*cf78ab8cSAndroid Build Coastguard Worker super.connectedCallback(); 59*cf78ab8cSAndroid Build Coastguard Worker window.addEventListener('changeModeEvent', this.handleChangeModeEvent); 60*cf78ab8cSAndroid Build Coastguard Worker window.addEventListener('reset-button-clicked', this.handleReset); 61*cf78ab8cSAndroid Build Coastguard Worker window.addEventListener('bumble-button-clicked', this.handleBumbleHive); 62*cf78ab8cSAndroid Build Coastguard Worker } 63*cf78ab8cSAndroid Build Coastguard Worker 64*cf78ab8cSAndroid Build Coastguard Worker disconnectedCallback() { 65*cf78ab8cSAndroid Build Coastguard Worker window.removeEventListener('bumble-button-clicked', this.handleBumbleHive); 66*cf78ab8cSAndroid Build Coastguard Worker window.removeEventListener('reset-button-clicked', this.handleReset); 67*cf78ab8cSAndroid Build Coastguard Worker window.removeEventListener('changeModeEvent', this.handleChangeModeEvent); 68*cf78ab8cSAndroid Build Coastguard Worker super.disconnectedCallback(); 69*cf78ab8cSAndroid Build Coastguard Worker } 70*cf78ab8cSAndroid Build Coastguard Worker 71*cf78ab8cSAndroid Build Coastguard Worker handleChangeModeEvent = (e: Event) => { 72*cf78ab8cSAndroid Build Coastguard Worker const {detail} = (e as CustomEvent); 73*cf78ab8cSAndroid Build Coastguard Worker this.viewMode = detail.mode; 74*cf78ab8cSAndroid Build Coastguard Worker }; 75*cf78ab8cSAndroid Build Coastguard Worker 76*cf78ab8cSAndroid Build Coastguard Worker handleReset() { 77*cf78ab8cSAndroid Build Coastguard Worker fetch('./v1/devices', { 78*cf78ab8cSAndroid Build Coastguard Worker method: 'PUT', 79*cf78ab8cSAndroid Build Coastguard Worker }).catch(error => { 80*cf78ab8cSAndroid Build Coastguard Worker console.log('Cannot connect to netsim web server:', error); 81*cf78ab8cSAndroid Build Coastguard Worker }) 82*cf78ab8cSAndroid Build Coastguard Worker }; 83*cf78ab8cSAndroid Build Coastguard Worker 84*cf78ab8cSAndroid Build Coastguard Worker handleBumbleHive() { 85*cf78ab8cSAndroid Build Coastguard Worker window.open('https://google.github.io/bumble/hive/index.html', '_blank'); 86*cf78ab8cSAndroid Build Coastguard Worker } 87*cf78ab8cSAndroid Build Coastguard Worker 88*cf78ab8cSAndroid Build Coastguard Worker render() { 89*cf78ab8cSAndroid Build Coastguard Worker let page = html``; 90*cf78ab8cSAndroid Build Coastguard Worker if (this.viewMode === 'main') { 91*cf78ab8cSAndroid Build Coastguard Worker page = html` 92*cf78ab8cSAndroid Build Coastguard Worker <ns-customize-button eventName="map-button-clicked" class="primary" aria-label="Change background of the device map">Change Background</ns-customize-button> 93*cf78ab8cSAndroid Build Coastguard Worker <ns-customize-button eventName="isometric-button-clicked" class="primary" aria-label="Toggle view of the device map">Toggle View</ns-customize-button> 94*cf78ab8cSAndroid Build Coastguard Worker <ns-customize-button eventName="reset-button-clicked" class="primary" aria-label="Reset device information">Reset</ns-customize-button> 95*cf78ab8cSAndroid Build Coastguard Worker <ns-customize-button eventName="bumble-button-clicked" class="primary" aria-label="Bumble Hive Webpage">Bumble Hive</ns-customize-button> 96*cf78ab8cSAndroid Build Coastguard Worker <div class="container"> 97*cf78ab8cSAndroid Build Coastguard Worker <div class="contentA"> 98*cf78ab8cSAndroid Build Coastguard Worker <ns-device-map></ns-device-map> 99*cf78ab8cSAndroid Build Coastguard Worker <ns-device-list></ns-device-list> 100*cf78ab8cSAndroid Build Coastguard Worker </div> 101*cf78ab8cSAndroid Build Coastguard Worker <div class="contentB"> 102*cf78ab8cSAndroid Build Coastguard Worker <ns-device-info></ns-device-info> 103*cf78ab8cSAndroid Build Coastguard Worker </div> 104*cf78ab8cSAndroid Build Coastguard Worker </div> 105*cf78ab8cSAndroid Build Coastguard Worker `; 106*cf78ab8cSAndroid Build Coastguard Worker } else if (this.viewMode === 'trace') { 107*cf78ab8cSAndroid Build Coastguard Worker page = html` 108*cf78ab8cSAndroid Build Coastguard Worker <ns-packet-info></ns-packet-info> 109*cf78ab8cSAndroid Build Coastguard Worker `; 110*cf78ab8cSAndroid Build Coastguard Worker } else if (this.viewMode === 'oslib') { 111*cf78ab8cSAndroid Build Coastguard Worker page = html` 112*cf78ab8cSAndroid Build Coastguard Worker <ns-license-info></ns-license-info> 113*cf78ab8cSAndroid Build Coastguard Worker `; 114*cf78ab8cSAndroid Build Coastguard Worker } 115*cf78ab8cSAndroid Build Coastguard Worker return html` 116*cf78ab8cSAndroid Build Coastguard Worker <div id="bottom">version: ${this.version}</div> 117*cf78ab8cSAndroid Build Coastguard Worker <ns-navigation-bar></ns-navigation-bar> 118*cf78ab8cSAndroid Build Coastguard Worker ${page} 119*cf78ab8cSAndroid Build Coastguard Worker `; 120*cf78ab8cSAndroid Build Coastguard Worker } 121*cf78ab8cSAndroid Build Coastguard Worker} 122