UNPKG

dpaw-monorail-plugin

Version:

JS library to link the brocket network to the QGIS/monorail server

83 lines (66 loc) 2.09 kB
/** * @fileOverview * @name plugin.js * @author Gavin Coombes * @license BSD-3-Clause * */ 'use strict'; 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}; }