36 lines
941 B
JavaScript
36 lines
941 B
JavaScript
import { Observable } from 'rx';
|
|
import types from '../../common/app/redux/types';
|
|
import { updateWindowHeight } from '../../common/app/redux/actions';
|
|
|
|
const { initWindowHeight } = types;
|
|
function getWindowSize(document, window) {
|
|
const body = document.getElementsByTagName('body')[0];
|
|
return window.innerHeight ||
|
|
document.docElement.clientHeight ||
|
|
body.clientHeight ||
|
|
0;
|
|
}
|
|
|
|
function listenForResize(document, window) {
|
|
return Observable.fromEvent(window, 'resize')
|
|
.debounce(250)
|
|
.startWith({})
|
|
.map(() => getWindowSize(document, window));
|
|
}
|
|
|
|
export default function windowSaga(
|
|
action$,
|
|
getState,
|
|
{ isDev, document, window }
|
|
) {
|
|
return action$
|
|
.filter(({ type }) => type === initWindowHeight)
|
|
.flatMap(() => {
|
|
if (isDev) {
|
|
return listenForResize(document, window);
|
|
}
|
|
return Observable.just(getWindowSize(document, window));
|
|
})
|
|
.map(updateWindowHeight);
|
|
}
|