本文整理汇总了TypeScript中xstream.merge函数的典型用法代码示例。如果您正苦于以下问题:TypeScript merge函数的具体用法?TypeScript merge怎么用?TypeScript merge使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了merge函数的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的TypeScript代码示例。
示例1: Main
function Main(sources: {state: StateSource<any>}) {
sources.state.stream.addListener({
next(x) {
assert.deepEqual(x.list, expected.shift());
},
error(e) {
done(e.message);
},
complete() {
done('complete should not be called');
},
});
const childSinks = isolate(List, 'list')(sources);
const childReducer$ = childSinks.state;
const initReducer$ = xs.of(function initReducer(prevState: any): any {
return {list: [{val: 3}]};
});
const addReducer$ = xs
.of(function addSecond(prev: any) {
return {list: prev.list.concat({val: null})};
})
.compose(delay(100));
const parentReducer$ = xs.merge(initReducer$, addReducer$);
const reducer$ = xs.merge(parentReducer$, childReducer$) as Stream<
Reducer<any>
>;
return {
state: reducer$,
};
}
示例2: Client
function Client (sources) {
const stateUpdate$ = sources.Socket.messages
.filter(message => message.type === 'UPDATE_STATE')
.map(message => message.data);
const stateOverride$ = stateUpdate$
.map(serverState => ({type: 'OVERRIDE', data: serverState}));
const id$ = sources.Socket.messages
.filter(message => message.type === 'SET_ID')
.map(message => message.data)
.remember();
const move$ = sources.DOM
.select('svg')
.events('click')
.map(mousePosition)
.map(destination => ({type: 'MOVE', data: destination}));
const attack$ = sources.DOM
.select('.enemy')
.events('click')
.debug(event => event.stopPropagation())
.map(event => ({type: 'ATTACK', data: event.target.id}));
const chat$ = sources.DOM
.select('document')
.events('keydown')
.map(event => ({type: 'CHAT', data: event.key}));
const action$ = xs.merge(
move$,
chat$,
attack$
);
const gameActionWithId$ = id$
.map(id => action$.map(action => ({...action, id})))
.flatten();
const gameAction$ = xs.merge(gameActionWithId$, stateOverride$);
const state$ = Game({
Animation: sources.Animation,
action$: gameAction$ as Stream<Action>
});
return {
DOM: xs.combine(id$, state$).map(view),
Socket: action$
}
}
示例3: ProjectName
function ProjectName(sources: IProjectNameSources): IProjectNameSinks {
const startEditing$ = sources.DOM
.select(".edit-project-name")
.events("click")
.mapTo(true);
const save$ = sources.DOM
.select(".save-project-name")
.events("click")
.mapTo(false);
const cancelEditing$ = sources.DOM
.select(".cancel-editing-project-name")
.events("click")
.mapTo(false);
const editing$ = xs.merge(xs.of(false), startEditing$, save$, cancelEditing$);
const newName$ = sources.DOM
.select(".project-name-input")
.events("input")
.map((ev: any) => ev.currentTarget.value);
const nameChange$ = newName$.map(name => save$.mapTo(name)).flatten();
function view([name, editing]: [string, boolean]): VNode {
if (editing) {
return div(".project-name-container", [
div([
input(".project-name-input", { props: { value: name } }),
a(".save-project-name", " ✓ "),
a(".cancel-editing-project-name", " ✖ ")
])
]);
}
return div(".project-name-container", [
div([span(".project-name", `${name}`), a(".edit-project-name", " ✎ ")])
]);
}
return {
DOM: xs.combine(sources.name$, editing$).map(view),
name$: xs.merge(sources.name$, nameChange$),
nameChange$
};
}
示例4: DOMDriver
function DOMDriver(vnode$: Stream<VNode>, name = 'DOM'): MainDOMSource {
domDriverInputGuard(vnode$);
const sanitation$ = xs.create<null>();
const rootElement$ = xs
.merge(vnode$.endWhen(sanitation$), sanitation$)
.map(vnode => vnodeWrapper.call(vnode))
.fold(patch, toVNode(rootElement))
.drop(1)
.map(unwrapElementFromVNode)
.compose(dropCompletion) // don't complete this stream
.startWith(rootElement as any);
// Start the snabbdom patching, over time
const listener = {error: reportSnabbdomError};
if (document.readyState === 'loading') {
document.addEventListener('readystatechange', () => {
if (document.readyState === 'interactive') {
rootElement$.addListener(listener);
}
});
} else {
rootElement$.addListener(listener);
}
return new MainDOMSource(
rootElement$,
sanitation$,
[],
isolateModule,
delegators,
name,
);
}
示例5: Counter
function Counter(sources: Sources): Sinks {
const IncrementButton = isolate(Button);
const DecrementButton = isolate(Button);
let incrementButtonProps$ = xs.of<ButtonProps>({
text: 'Increment', amount: 1
}).remember();
let decrementButtonProps$ = xs.of<ButtonProps>({
text: 'Decrement', amount: -1
}).remember();
let incrementButton = IncrementButton({DOM: sources.DOM, props$: incrementButtonProps$});
let decrementButton = DecrementButton({DOM: sources.DOM, props$: decrementButtonProps$});
let count$ = xs.merge(incrementButton.delta$, decrementButton.delta$)
.fold((acc, x) => acc + x, 0);
return {
DOM: xs.combine(count$, incrementButton.DOM, decrementButton.DOM)
.map(([count, incrementVTree, decrementVTree]) =>
div([
incrementVTree,
decrementVTree,
h2('Clicks: ' + count),
])
)
};
}
示例6: function
return function (): Stream<Input> {
return xs.merge(
fromEvent(window, 'keydown')
.map((e: KeyboardEvent) => {
switch (e.keyCode) {
case 74:
return xs.of('up');
case 75:
return xs.of('down');
default:
return xs.empty();
}
}).flatten(),
fromEvent(window, 'keyup')
.map((e: KeyboardEvent) => {
switch (e.keyCode) {
case 188:
return xs.of('decrement');
case 190:
return xs.of('increment');
default:
return xs.empty();
}
}).flatten()
);
}
示例7: main
function main(sources: {state: StateSource<any>}) {
const expected = [7, 9];
sources.state.stream.addListener({
next(x) {
assert.strictEqual(x.child.count, expected.shift());
calledMain += 1;
},
error(e) {
done(e);
},
complete() {},
});
const childSinks = child({state: isolateSource(sources.state, 'child')});
assert(childSinks.state);
const childReducer$ = isolateSink(childSinks.state, 'child');
const parentReducer$ = xs.of(function initReducer(prevState: any): any {
return {child: {count: 7}};
});
const reducer$ = xs.merge(parentReducer$, childReducer$);
return {
state: reducer$,
};
}