dpaw-qweb-app
Version:
Simple viewer app to interface with QGIS/monorail
92 lines (75 loc) • 2.55 kB
JavaScript
/**
* @fileOverview
* @name app.js
* @author Gavin Coombes
* @license BSD-3-Clause
*
*/
;
let Cycle = require('@cycle/core');
let CycleDOM = require('@cycle/dom');
let Rx = require('rx');
let u = require('dpaw-brocket-utility');
let h = CycleDOM.h;
let Obs = Rx.Observable;
let log = u.log;
let makeDOMDriver = CycleDOM.makeDOMDriver;
// let Relay = require('dpaw-brocket-relay');
let makeRelayDriver = require('./relay-driver');
let labeledSlider = require('./slider-component');
let AdminDialogue = require('./admin');
let intent = require('./intent');
let model = require('./model');
let view = require('./view');
var leaflet = require('./leaflet-component');
var Log = require('./logs');
function main({DOM, relay}) {
let {channel, port} = parseQuery(window.location);
console.log(`Parsed channel ${channel} and port ${port}`);
// Heartbeat to check network is open
let incoming$ = relay;
log('main: relay is', relay);
let beat$ = Rx.Observable.from({tag: 'beat', payload: {says: 'dadum' }});
let interval$ = Rx.Observable
.interval(30000);
let heartbeat$ = Rx.Observable
.combineLatest( interval$, ( i) => ({tag: 'qweb:app:beat', payload:{msg: 'dadum'}})).share();
let incomingDialog = Log(DOM, incoming$, {title: 'incoming'});
let dummyDialog = {vtree$: Rx.Observable.just(h('div', 'Incoming Log'))};
// let outgoingDialog = Log(DOM, outgoing$, {title: 'outgoing'});
let adminDialog = AdminDialogue({DOM, incoming$});
log('heartbeat$ is ', heartbeat$);
log('admin, outgoing is ', adminDialog.outgoing$);
let outgoing$ = Rx.Observable.merge(heartbeat$, adminDialog.outgoing$);
let action$ = intent(DOM, incoming$);
let state$ = model(action$, incoming$);
let newDOM = view({state$,
admin$: adminDialog.vtree$,
incoming$: incomingDialog.vtree$
});
let newDOM2 = Obs.just(h('div', 'hello'));
log('App: got newDOM', newDOM);
log('App: got newDOM2', newDOM2);
return {
DOM: newDOM,
relay: outgoing$
};
}
Cycle.run(main, {
DOM: makeDOMDriver('#app'),
relay: makeRelayDriver()
});
function parseQuery(location) {
let channel, port;
let reChannel = /[\\?&]channel=([^&#]*)/;
let rePort = /[\\?&]port=([^&#]*)/;
try {
[_, channel] = reChannel.exec(location.search);
[__, port] = rePort.exec(location.search);
} catch(err) {
console.log(err);
console.log('Using default params');
[channel, port] = ['dendrite', 30000];
}
return {channel, port};
}