dpaw-monorail-plugin
Version:
JS library to link the brocket network to the QGIS/monorail server
83 lines (66 loc) • 2.09 kB
JavaScript
/**
* @fileOverview
* @name plugin.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 makeDOMDriver = CycleDOM.makeDOMDriver;
let makeRelayDriver = require('./relay-driver');
let log = u.log;
let Obs = Rx.Observable;
// let Relay = require('dpaw-brocket-relay');
let intent = require('./intent');
let model = require('./model');
let view = require('./view');
let xform = require('./transform');
let command = require('./command');
let LogComponent = require('./logs-component');
// UPDATED!
function main({DOM, relay}) {
let {channel, port} = parseQuery(window.location);
console.log(`Parsed channel ${channel} and port ${port}`);
// Incoming streams
let incoming$ = relay;
let incomingLog = LogComponent(DOM, incoming$, {title: 'Incoming'});
// The Command Object takes a stream of commands and options and
// returns any messages returning from qgis.
let commandOpts = {channelName: channel, port: port};
let command$ = incoming$
.map(xform.appwards)
.do(cmd => log('Plugin: transformed cmd', cmd))
.filter(cmd => !u.isNull(cmd));
let qgisOutgoing$ = command(command$, commandOpts);
// Outgoing streams
let outgoing$ = Obs.combineLatest(
Obs.interval(10000),
Obs.just({tag: 'monorail:plugin:beat', payload: 'dadum'}),
(i, msg) => msg
);
// Main loop
let action$ = intent(DOM, incoming$);
let state$ = model(action$, incoming$);
let newDOM = view(state$, incomingLog.vtree$);
return {
DOM: newDOM,
relay: outgoing$
};
}
Cycle.run(main, {
DOM: makeDOMDriver('#app'),
relay: makeRelayDriver()
});
function parseQuery(location) {
log('Parsing query string');
let reChannel = /[\\?&]channel=([^&#]*)/;
let rePort = /[\\?&]port=([^&#]*)/;
let [_, channel] = reChannel.exec(location.search);
let [__, port] = rePort.exec(location.search);
return {channel, port};
}