xref: /aosp_15_r20/tools/netsim/ui/ts/netsim-app.ts (revision cf78ab8cffb8fc9207af348f23af247fb04370a6)
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