UNPKG

dpaw-qweb-app

Version:

Simple viewer app to interface with QGIS/monorail

92 lines (75 loc) 2.55 kB
/** * @fileOverview * @name app.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 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}; }