import { Devices } from "./src/devices";
import { initDevice } from "./src/device.frontend";
import { DOMService } from 'graphscript';
import { ElementProps } from "graphscript/dist/services/dom/types/index";
// let selectBLE = document.createElement('select');
// let selectUSB = document.createElement('select');
// for(const key in Devices.BLE) {
// selectBLE.innerHTML += ``
// }
// for(const key in Devices.Serial) {
// selectUSB.innerHTML += ``
// }
let DOM = new DOMService({
routes:{
'app':{
tagName:'div',
children:{
'devices':{
tagName:'div',
children:{
'devicediv':{
tagName:'div',
children:{
'connectmode':{
tagName:'select',
attributes:{
innerHTML:`
`,
onchange:(ev)=>{
if(ev.target.value === 'BLE') {
ev.target.parentNode.querySelector('#selectUSB').style.display = 'none';
ev.target.parentNode.querySelector('#selectBLE').style.display = '';
}
else if(ev.target.value === 'USB') {
ev.target.parentNode.querySelector('#selectUSB').style.display = '';
ev.target.parentNode.querySelector('#selectBLE').style.display = 'none';
}
}
}
} as ElementProps,
'selectUSB':{
tagName:'select',
style:{display:'none'},
onrender:(self)=>{
for(const key in Devices.USB) {
self.innerHTML += ``
}
}
} as ElementProps,
'selectBLE':{
tagName:'select',
onrender:(self)=>{
for(const key in Devices.BLE) {
self.innerHTML += ``
}
}
} as ElementProps,
'connectDevice':{
tagName:'button',
attributes:{
innerHTML:'Connect Device',
onclick:(ev)=>{
let outputelm = document.getElementById('output') as HTMLDivElement;
let mode = (document.getElementById('connectmode') as HTMLSelectElement).value;
let selected;
if(mode === 'BLE')
selected = (document.getElementById('selectBLE') as HTMLSelectElement).value;
else if (mode === 'USB')
selected = (document.getElementById('selectUSB') as HTMLSelectElement).value;
let info = initDevice(
mode as 'BLE'|'USB',
selected,
{
ondecoded:(data)=>{
outputelm.innerText = JSON.stringify(data);
console.log(data)
}
}
);
if(info) {
info.then((result) => {
console.log(result);
let disc = document.createElement('button');
disc.innerHTML = `Disconnect ${selected} (${mode})`;
disc.onclick = () => {
result.disconnect();
disc.remove();
}
ev.target.parentNode.appendChild(disc);
})
}
}
}
} as ElementProps
}
}
}
},
'output':{
tagName:'div',
innerHTML:'Connect to a supported BLE or USB Device to see output',
} as ElementProps
}
} as ElementProps
}
})