blob: b911f2d322190bbb2cfd2f8364bc50138c1daa1c [file] [log] [blame] [edit]
import {css, html, LitElement} from 'lit';
import {customElement, property} from 'lit/decorators.js';
import {Device, Notifiable, SimulationInfo, simulationState,} from './device-observer.js';
@customElement('ns-device-list')
export class DeviceList extends LitElement implements Notifiable {
@property() deviceData: Device[] = [];
connectedCallback(): void {
// eslint-disable-next-line
super.connectedCallback();
simulationState.registerObserver(this);
}
disconnectedCallback(): void {
// eslint-disable-next-line
super.disconnectedCallback();
simulationState.removeObserver(this);
}
static styles = css`
:host {
justify-content: center;
display: flex;
flex-wrap: wrap;
gap: 1rem;
margin: 0;
padding: 0;
list-style: none;
}
li {
border-style: solid;
border-color: lightgray;
flex-grow: 0;
flex-shrink: 0;
flex-basis: 125px;
}
li center {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
margin: 8px;
}
.box {
position: relative;
width: 80vw;
height: 60vh;
border: solid 1px rgb(198, 210, 255);
margin: 2.5em auto;
}
`;
onNotify(data: SimulationInfo): void {
this.deviceData = data.devices;
this.requestUpdate();
}
render() {
const rainbow = [
'red',
'orange',
'yellow',
'green',
'blue',
'indigo',
'purple',
];
// Repeating templates with map
return html`
${
this.deviceData.map(
(device, idx) => html`
<li>
<center>
${
device.visible === true ?
html`<ns-cube-sprite
id=${device.name}
color=${rainbow[idx % rainbow.length]}
size="30px"
style="opacity:0.5;"
role="listitem"
tabindex="0"
aria-label="${device.name} in Device Legends"
></ns-cube-sprite
>${device.name} ` :
html`<ns-device-dragzone action="move">
<ns-cube-sprite
id=${device.name}
color=${rainbow[idx % rainbow.length]}
size="30px"
role="listitem"
tabindex="0"
aria-label="${device.name} in Device Legends"
></ns-cube-sprite> </ns-device-dragzone
>${device.name}`}
</center>
</li>
`)}
<li>
<center>
<ns-pyramid-sprite
id="1234"
color=${rainbow[this.deviceData.length % rainbow.length]}
size="30px"
style="opacity:0.5;"
role="listitem"
tabindex="0"
aria-label="beacon in Device Legends"
></ns-pyramid-sprite
>beacon
</center>
</li>
<li>
<center>
<ns-pyramid-sprite
id="5678"
color=${rainbow[(this.deviceData.length + 1) % rainbow.length]}
size="30px"
style="opacity:0.5;"
role="listitem"
tabindex="0"
aria-label="anchor in Device Legends"
></ns-pyramid-sprite
>anchor
</center>
</li>
`;
}
}