google-map-react/develop/utils/props2Stream.js

29 lines
873 B
JavaScript

import { Component } from 'react';
import createEagerFactory from './createEagerFactory';
import createHelper from 'recompose/createHelper';
import { BehaviorSubject } from 'rxjs/BehaviorSubject';
import 'rxjs/add/operator/distinctUntilChanged';
import omit from './omit';
const prop2Stream = (propName, comparator = (a, b) => a === b) =>
BaseComponent => {
const factory = createEagerFactory(BaseComponent);
return class extends Component {
props$ = (new BehaviorSubject(this.props[propName]))
.distinctUntilChanged(comparator);
componentWillReceiveProps(nextProps) {
this.props$.next(nextProps[propName]);
}
render() {
return factory({
...omit(this.props, [propName]),
[`${propName}$`]: this.props$,
});
}
};
};
export default createHelper(prop2Stream, 'prop2Stream');