cyclejs-modal
Version:
An easy way to open custom modals in a cyclejs app
53 lines • 1.88 kB
JavaScript
import xs from 'xstream';
import { run } from '@cycle/run';
import { button, div, span, makeDOMDriver } from '@cycle/dom';
import onionify from 'cycle-onionify';
import isolate from '@cycle/isolate';
import { modalify } from '../../../src/modalify';
function main(sources) {
var DOM = sources.DOM, onion = sources.onion, modal = sources.modal;
var isolatedModal = isolate(Modal, 'child');
var modalSinks = modal.sinks(['onion', 'modal']);
return {
DOM: onion.state$.map(function (state) {
return div([
span("My state: " + JSON.stringify(state)),
button('.button', ['open modal'])
]);
}),
onion: xs.merge(xs.of(function () { return ({ i: 7, child: { foo: 'something' } }); }), modalSinks.onion),
modal: xs.merge(DOM.select('.button')
.events('click')
.mapTo({
type: 'open',
component: isolatedModal,
sources: sources,
id: 'myModal'
}), modalSinks.modal)
};
}
function Modal(_a) {
var DOM = _a.DOM, onion = _a.onion;
return {
DOM: onion.state$.map(function (state) {
return div('.div', [
span('.span', [
"This is a modal. My state: " + JSON.stringify(state) + " :)"
]),
button('.set', ['Set to "SOMETHING"']),
button('.button', ['close'])
]);
}),
modal: DOM.select('.button')
.events('click')
.mapTo({ type: 'close' }),
onion: DOM.select('.set')
.events('click')
.mapTo(function () { return ({ foo: 'SOMETHING' }); })
};
}
var wrappedMain = onionify(modalify(main, { background: 'rgba(0,0,0,0.2)' }));
run(wrappedMain, {
DOM: makeDOMDriver('#app')
});
//# sourceMappingURL=index.js.map