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 Workerimport {Device, Notifiable, SimulationInfo, simulationState,} from './device-observer.js'; 5*cf78ab8cSAndroid Build Coastguard Worker 6*cf78ab8cSAndroid Build Coastguard Worker@customElement('ns-device-list') 7*cf78ab8cSAndroid Build Coastguard Workerexport class DeviceList extends LitElement implements Notifiable { 8*cf78ab8cSAndroid Build Coastguard Worker @property() deviceData: Device[] = []; 9*cf78ab8cSAndroid Build Coastguard Worker 10*cf78ab8cSAndroid Build Coastguard Worker connectedCallback(): void { 11*cf78ab8cSAndroid Build Coastguard Worker // eslint-disable-next-line 12*cf78ab8cSAndroid Build Coastguard Worker super.connectedCallback(); 13*cf78ab8cSAndroid Build Coastguard Worker simulationState.registerObserver(this); 14*cf78ab8cSAndroid Build Coastguard Worker } 15*cf78ab8cSAndroid Build Coastguard Worker 16*cf78ab8cSAndroid Build Coastguard Worker disconnectedCallback(): void { 17*cf78ab8cSAndroid Build Coastguard Worker // eslint-disable-next-line 18*cf78ab8cSAndroid Build Coastguard Worker super.disconnectedCallback(); 19*cf78ab8cSAndroid Build Coastguard Worker simulationState.removeObserver(this); 20*cf78ab8cSAndroid Build Coastguard Worker } 21*cf78ab8cSAndroid Build Coastguard Worker 22*cf78ab8cSAndroid Build Coastguard Worker static styles = css` 23*cf78ab8cSAndroid Build Coastguard Worker :host { 24*cf78ab8cSAndroid Build Coastguard Worker justify-content: center; 25*cf78ab8cSAndroid Build Coastguard Worker display: flex; 26*cf78ab8cSAndroid Build Coastguard Worker flex-wrap: wrap; 27*cf78ab8cSAndroid Build Coastguard Worker gap: 1rem; 28*cf78ab8cSAndroid Build Coastguard Worker margin: 0; 29*cf78ab8cSAndroid Build Coastguard Worker padding: 0; 30*cf78ab8cSAndroid Build Coastguard Worker list-style: none; 31*cf78ab8cSAndroid Build Coastguard Worker } 32*cf78ab8cSAndroid Build Coastguard Worker 33*cf78ab8cSAndroid Build Coastguard Worker li { 34*cf78ab8cSAndroid Build Coastguard Worker border-style: solid; 35*cf78ab8cSAndroid Build Coastguard Worker border-color: lightgray; 36*cf78ab8cSAndroid Build Coastguard Worker flex-grow: 0; 37*cf78ab8cSAndroid Build Coastguard Worker flex-shrink: 0; 38*cf78ab8cSAndroid Build Coastguard Worker flex-basis: 125px; 39*cf78ab8cSAndroid Build Coastguard Worker } 40*cf78ab8cSAndroid Build Coastguard Worker 41*cf78ab8cSAndroid Build Coastguard Worker li center { 42*cf78ab8cSAndroid Build Coastguard Worker font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; 43*cf78ab8cSAndroid Build Coastguard Worker margin: 8px; 44*cf78ab8cSAndroid Build Coastguard Worker } 45*cf78ab8cSAndroid Build Coastguard Worker 46*cf78ab8cSAndroid Build Coastguard Worker .box { 47*cf78ab8cSAndroid Build Coastguard Worker position: relative; 48*cf78ab8cSAndroid Build Coastguard Worker width: 80vw; 49*cf78ab8cSAndroid Build Coastguard Worker height: 60vh; 50*cf78ab8cSAndroid Build Coastguard Worker border: solid 1px rgb(198, 210, 255); 51*cf78ab8cSAndroid Build Coastguard Worker margin: 2.5em auto; 52*cf78ab8cSAndroid Build Coastguard Worker } 53*cf78ab8cSAndroid Build Coastguard Worker `; 54*cf78ab8cSAndroid Build Coastguard Worker 55*cf78ab8cSAndroid Build Coastguard Worker onNotify(data: SimulationInfo): void { 56*cf78ab8cSAndroid Build Coastguard Worker this.deviceData = data.devices; 57*cf78ab8cSAndroid Build Coastguard Worker this.requestUpdate(); 58*cf78ab8cSAndroid Build Coastguard Worker } 59*cf78ab8cSAndroid Build Coastguard Worker 60*cf78ab8cSAndroid Build Coastguard Worker checkBle(device: Device): 61*cf78ab8cSAndroid Build Coastguard Worker boolean{return device.chips.at(0)?.bleBeacon !== undefined} 62*cf78ab8cSAndroid Build Coastguard Worker 63*cf78ab8cSAndroid Build Coastguard Worker render() { 64*cf78ab8cSAndroid Build Coastguard Worker const rainbow = [ 65*cf78ab8cSAndroid Build Coastguard Worker 'red', 66*cf78ab8cSAndroid Build Coastguard Worker 'orange', 67*cf78ab8cSAndroid Build Coastguard Worker 'yellow', 68*cf78ab8cSAndroid Build Coastguard Worker 'green', 69*cf78ab8cSAndroid Build Coastguard Worker 'blue', 70*cf78ab8cSAndroid Build Coastguard Worker 'indigo', 71*cf78ab8cSAndroid Build Coastguard Worker 'purple', 72*cf78ab8cSAndroid Build Coastguard Worker ]; 73*cf78ab8cSAndroid Build Coastguard Worker 74*cf78ab8cSAndroid Build Coastguard Worker // Repeating templates with map 75*cf78ab8cSAndroid Build Coastguard Worker return html` 76*cf78ab8cSAndroid Build Coastguard Worker ${ 77*cf78ab8cSAndroid Build Coastguard Worker this.deviceData.map( 78*cf78ab8cSAndroid Build Coastguard Worker (device, idx) => html` 79*cf78ab8cSAndroid Build Coastguard Worker <li> 80*cf78ab8cSAndroid Build Coastguard Worker <center> 81*cf78ab8cSAndroid Build Coastguard Worker ${ 82*cf78ab8cSAndroid Build Coastguard Worker true ? // TODO manage device.visible in Web UI 83*cf78ab8cSAndroid Build Coastguard Worker this.checkBle(device) ? html`<ns-pyramid-sprite 84*cf78ab8cSAndroid Build Coastguard Worker id=${device.name} 85*cf78ab8cSAndroid Build Coastguard Worker color=${rainbow[idx % rainbow.length]} 86*cf78ab8cSAndroid Build Coastguard Worker size="30px" 87*cf78ab8cSAndroid Build Coastguard Worker style="opacity:0.5;" 88*cf78ab8cSAndroid Build Coastguard Worker role="listitem" 89*cf78ab8cSAndroid Build Coastguard Worker tabindex="0" 90*cf78ab8cSAndroid Build Coastguard Worker aria-label="${device.name} in Device Legends" 91*cf78ab8cSAndroid Build Coastguard Worker ></ns-pyramid-sprite 92*cf78ab8cSAndroid Build Coastguard Worker >${device.name} ` : 93*cf78ab8cSAndroid Build Coastguard Worker html`<ns-cube-sprite 94*cf78ab8cSAndroid Build Coastguard Worker id=${device.name} 95*cf78ab8cSAndroid Build Coastguard Worker color=${rainbow[idx % rainbow.length]} 96*cf78ab8cSAndroid Build Coastguard Worker size="30px" 97*cf78ab8cSAndroid Build Coastguard Worker style="opacity:0.5;" 98*cf78ab8cSAndroid Build Coastguard Worker role="listitem" 99*cf78ab8cSAndroid Build Coastguard Worker tabindex="0" 100*cf78ab8cSAndroid Build Coastguard Worker aria-label="${device.name} in Device Legends" 101*cf78ab8cSAndroid Build Coastguard Worker ></ns-cube-sprite 102*cf78ab8cSAndroid Build Coastguard Worker >${device.name} ` : 103*cf78ab8cSAndroid Build Coastguard Worker this.checkBle(device) ? 104*cf78ab8cSAndroid Build Coastguard Worker html`<ns-device-dragzone action="move"> 105*cf78ab8cSAndroid Build Coastguard Worker <ns-pyramid-sprite 106*cf78ab8cSAndroid Build Coastguard Worker id=${device.name} 107*cf78ab8cSAndroid Build Coastguard Worker color=${rainbow[idx % rainbow.length]} 108*cf78ab8cSAndroid Build Coastguard Worker size="30px" 109*cf78ab8cSAndroid Build Coastguard Worker role="listitem" 110*cf78ab8cSAndroid Build Coastguard Worker tabindex="0" 111*cf78ab8cSAndroid Build Coastguard Worker aria-label="${device.name} in Device Legends" 112*cf78ab8cSAndroid Build Coastguard Worker ></ns-pyramid-sprite> </ns-device-dragzone 113*cf78ab8cSAndroid Build Coastguard Worker >${device.name}` : 114*cf78ab8cSAndroid Build Coastguard Worker html`<ns-device-dragzone action="move"> 115*cf78ab8cSAndroid Build Coastguard Worker <ns-cube-sprite 116*cf78ab8cSAndroid Build Coastguard Worker id=${device.name} 117*cf78ab8cSAndroid Build Coastguard Worker color=${rainbow[idx % rainbow.length]} 118*cf78ab8cSAndroid Build Coastguard Worker size="30px" 119*cf78ab8cSAndroid Build Coastguard Worker role="listitem" 120*cf78ab8cSAndroid Build Coastguard Worker tabindex="0" 121*cf78ab8cSAndroid Build Coastguard Worker aria-label="${device.name} in Device Legends" 122*cf78ab8cSAndroid Build Coastguard Worker ></ns-cube-sprite> </ns-device-dragzone 123*cf78ab8cSAndroid Build Coastguard Worker >${device.name}`} 124*cf78ab8cSAndroid Build Coastguard Worker </center> 125*cf78ab8cSAndroid Build Coastguard Worker </li> 126*cf78ab8cSAndroid Build Coastguard Worker `)} 127*cf78ab8cSAndroid Build Coastguard Worker <li> 128*cf78ab8cSAndroid Build Coastguard Worker <center> 129*cf78ab8cSAndroid Build Coastguard Worker <ns-pyramid-sprite 130*cf78ab8cSAndroid Build Coastguard Worker id="1234" 131*cf78ab8cSAndroid Build Coastguard Worker color=${rainbow[this.deviceData.length % rainbow.length]} 132*cf78ab8cSAndroid Build Coastguard Worker size="30px" 133*cf78ab8cSAndroid Build Coastguard Worker style="opacity:0.5;" 134*cf78ab8cSAndroid Build Coastguard Worker role="listitem" 135*cf78ab8cSAndroid Build Coastguard Worker tabindex="0" 136*cf78ab8cSAndroid Build Coastguard Worker aria-label="beacon in Device Legends" 137*cf78ab8cSAndroid Build Coastguard Worker ></ns-pyramid-sprite 138*cf78ab8cSAndroid Build Coastguard Worker >beacon 139*cf78ab8cSAndroid Build Coastguard Worker </center> 140*cf78ab8cSAndroid Build Coastguard Worker </li> 141*cf78ab8cSAndroid Build Coastguard Worker <li> 142*cf78ab8cSAndroid Build Coastguard Worker <center> 143*cf78ab8cSAndroid Build Coastguard Worker <ns-pyramid-sprite 144*cf78ab8cSAndroid Build Coastguard Worker id="5678" 145*cf78ab8cSAndroid Build Coastguard Worker color=${rainbow[(this.deviceData.length + 1) % rainbow.length]} 146*cf78ab8cSAndroid Build Coastguard Worker size="30px" 147*cf78ab8cSAndroid Build Coastguard Worker style="opacity:0.5;" 148*cf78ab8cSAndroid Build Coastguard Worker role="listitem" 149*cf78ab8cSAndroid Build Coastguard Worker tabindex="0" 150*cf78ab8cSAndroid Build Coastguard Worker aria-label="anchor in Device Legends" 151*cf78ab8cSAndroid Build Coastguard Worker ></ns-pyramid-sprite 152*cf78ab8cSAndroid Build Coastguard Worker >anchor 153*cf78ab8cSAndroid Build Coastguard Worker </center> 154*cf78ab8cSAndroid Build Coastguard Worker </li> 155*cf78ab8cSAndroid Build Coastguard Worker `; 156*cf78ab8cSAndroid Build Coastguard Worker } 157*cf78ab8cSAndroid Build Coastguard Worker} 158