Skip to content

Commit

Permalink
[refactored] merge to use named args
Browse files Browse the repository at this point in the history
Summary: Continuation of #193

Reviewers: O2 Material Motion, O3 Material JavaScript platform reviewers, #material_motion, vietanh

Reviewed By: #material_motion, vietanh

Tags: #material_motion

Differential Revision: http://codereview.cc/D3414
  • Loading branch information
appsforartists committed Oct 11, 2017
1 parent 635eb98 commit e08a97a
Show file tree
Hide file tree
Showing 5 changed files with 43 additions and 29 deletions.
14 changes: 8 additions & 6 deletions packages/core/src/interactions/Draggable.ts
Original file line number Diff line number Diff line change
Expand Up @@ -178,7 +178,7 @@ export class Draggable {
(downEvent.target as Element).setPointerCapture(downEvent.pointerId);
}

moveSubscription = move$.merge(up$)._filter({
moveSubscription = move$.merge({ others: [ up$ ] })._filter({
predicate: (nextEvent: PartialPointerEvent) => nextEvent.pointerId === downEvent.pointerId
}).subscribe(
(nextEvent: PartialPointerEvent) => {
Expand Down Expand Up @@ -251,11 +251,13 @@ export class Draggable {
}
);

cancellationSubscription = this.cancellation$.merge(
when(not(this.enabled$)),
cancel$,
contextMenu$,
).subscribe(
cancellationSubscription = this.cancellation$.merge({
others: [
when(not(this.enabled$)),
cancel$,
contextMenu$,
]
}).subscribe(
() => {
if (moveSubscription) {
moveSubscription.unsubscribe();
Expand Down
8 changes: 5 additions & 3 deletions packages/core/src/interactions/Swipeable.ts
Original file line number Diff line number Diff line change
Expand Up @@ -184,9 +184,11 @@ export class Swipeable {

subscribe({
sink: spring.enabled$,
source: this.whenThresholdFirstCrossed$.merge(
when(spring.state$.isAnyOf({ candidates: [ State.AT_REST ] })).rewriteTo(false)
),
source: this.whenThresholdFirstCrossed$.merge({
others: [
when(spring.state$.isAnyOf({ candidates: [ State.AT_REST ] })).rewriteTo(false)
]
}),
});

subscribe({
Expand Down
2 changes: 1 addition & 1 deletion packages/core/src/operators/__tests__/merge.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ describe('motionObservable.merge',

it('should dispatch values from both upstream and its stream arguments',
() => {
stream1.merge(stream2, stream3).subscribe(listener);
stream1.merge({ others: [ stream2, stream3 ] }).subscribe(listener);

mockObserver1.next(1);
expect(listener).to.have.been.calledOnce.and.calledWith(1);
Expand Down
12 changes: 8 additions & 4 deletions packages/core/src/operators/merge.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,12 @@ import {
createPlucker,
} from './pluck';

export type MergeArgs<T> = {
others: Array<Observable<T>>
};

export interface MotionMergeable<T> extends Observable<T> {
merge(...otherStreams: Array<Observable<any>>): ObservableWithMotionOperators<any>;
merge(kwargs: MergeArgs<T>): ObservableWithMotionOperators<T>;
}

export function withMerge<T, S extends Constructor<Observable<T>>>(superclass: S): S & Constructor<MotionMergeable<T>> {
Expand All @@ -39,10 +43,10 @@ export function withMerge<T, S extends Constructor<Observable<T>>>(superclass: S
* Dispatches values as it receives them, both from upstream and from any
* streams provided as arguments.
*/
merge(...otherStreams: Array<Observable<any>>): ObservableWithMotionOperators<any> {
merge({ others }: MergeArgs<T>): ObservableWithMotionOperators<T> {
return new MotionObservable(
(observer: Observer<any>) => {
const subscriptions = [this, ...otherStreams].map(
(observer: Observer<T>) => {
const subscriptions = [this, ...others].map(
stream => stream.subscribe(observer)
);

Expand Down
36 changes: 21 additions & 15 deletions packages/views-dom/src/getPointerEventStreamsFromElement.ts
Original file line number Diff line number Diff line change
Expand Up @@ -53,21 +53,27 @@ export function getPointerEventStreamsFromElement(element: Element): PointerEven
};
} else {
return {
down$: getEventStreamFromElement<MouseEvent>('mousedown', element).merge(
convertTouchEventsToPointerEvents(
getEventStreamFromElement<TouchEvent>('touchstart', element)
)
),
move$: getEventStreamFromElement<MouseEvent>('mousemove', element).merge(
convertTouchEventsToPointerEvents(
getEventStreamFromElement<TouchEvent>('touchmove', element)
)
),
up$: getEventStreamFromElement<MouseEvent>('mouseup', element).merge(
convertTouchEventsToPointerEvents(
getEventStreamFromElement<TouchEvent>('touchend', element)
)
),
down$: getEventStreamFromElement<MouseEvent>('mousedown', element).merge({
others: [
convertTouchEventsToPointerEvents(
getEventStreamFromElement<TouchEvent>('touchstart', element)
),
],
}),
move$: getEventStreamFromElement<MouseEvent>('mousemove', element).merge({
others: [
convertTouchEventsToPointerEvents(
getEventStreamFromElement<TouchEvent>('touchmove', element)
),
],
}),
up$: getEventStreamFromElement<MouseEvent>('mouseup', element).merge({
others: [
convertTouchEventsToPointerEvents(
getEventStreamFromElement<TouchEvent>('touchend', element)
),
],
}),
cancel$: convertTouchEventsToPointerEvents(
getEventStreamFromElement<TouchEvent>('touchcancel', element)
),
Expand Down

0 comments on commit e08a97a

Please sign in to comment.