Fix window height adjustment during dev

This commit is contained in:
Berkeley Martinez
2016-05-11 21:14:08 -07:00
parent 302d4b3ffb
commit e173463cdb
8 changed files with 51 additions and 26 deletions

View File

@ -19,7 +19,7 @@ import {
saveToColdStorage
} from './cold-reload';
Rx.config.longStackSupport = !!debug.enabled;
const isDev = Rx.config.longStackSupport = !!debug.enabled;
const log = debug('fcc:client');
const hotReloadTimeout = 5000;
@ -39,6 +39,7 @@ const devTools = window.devToolsExtension ? window.devToolsExtension() : f => f;
const shouldRouterListenForReplays = !!window.devToolsExtension;
const sagaOptions = {
isDev,
window,
document: window.document,
location: window.location

View File

@ -2,5 +2,12 @@ import errSaga from './err-saga';
import titleSaga from './title-saga';
import localStorageSaga from './local-storage-saga';
import hardGoToSaga from './hard-go-to-saga';
import windowSaga from './window-saga';
export default [ errSaga, titleSaga, localStorageSaga, hardGoToSaga ];
export default [
errSaga,
titleSaga,
localStorageSaga,
hardGoToSaga,
windowSaga
];

View File

@ -0,0 +1,34 @@
import { Observable } from 'rx';
import { initWindowHeight } from '../../common/app/redux/types';
import { updateWindowHeight } from '../../common/app/redux/actions';
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);
}

View File

@ -8,10 +8,9 @@ import { createSelector } from 'reselect';
import {
fetchUser,
updateWindowHeight,
initWindowHeight,
updateNavHeight
} from './redux/actions';
import getWindowHeight from './utils/get-window-height';
import Nav from './components/Nav';
@ -50,7 +49,7 @@ export class FreeCodeCamp extends React.Component {
picture: PropTypes.string,
toast: PropTypes.object,
updateNavHeight: PropTypes.func,
updateWindowHeight: PropTypes.func
initWindowHeight: PropTypes.func
};
componentWillReceiveProps({ toast: nextToast = {} }) {
@ -68,7 +67,7 @@ export class FreeCodeCamp extends React.Component {
}
componentDidMount() {
this.props.updateWindowHeight(getWindowHeight());
this.props.initWindowHeight();
}
render() {
@ -92,7 +91,7 @@ export class FreeCodeCamp extends React.Component {
const wrapComponent = compose(
// connect Component to Redux Store
connect(mapStateToProps, { updateWindowHeight, updateNavHeight, fetchUser }),
connect(mapStateToProps, { initWindowHeight, updateNavHeight, fetchUser }),
// handles prefetching data
contain(fetchContainerOptions)
);

View File

@ -32,6 +32,7 @@ export const updatePoints = createAction(types.updatePoints);
// hardGoTo(path: String) => Action
export const hardGoTo = createAction(types.hardGoTo);
export const initWindowHeight = createAction(types.initWindowHeight);
export const updateWindowHeight = createAction(types.updateWindowHeight);
export const updateNavHeight = createAction(types.updateNavHeight);

View File

@ -12,6 +12,7 @@ export default createTypes([
// used to hit the server
'hardGoTo',
'initWindowHeight',
'updateWindowHeight',
'updateNavHeight',

View File

@ -12,7 +12,7 @@ import ToolPanel from './Tool-Panel.jsx';
const mapStateToProps = createSelector(
state => state.app.windowHeight,
state => state.app.navHeight,
(windowHeight, navHeight) => ({ height: windowHeight - navHeight - 50 })
(windowHeight, navHeight) => ({ height: windowHeight - navHeight - 20 })
);
export class SidePanel extends PureComponent {

View File

@ -1,18 +0,0 @@
export default function getWindowHeight() {
try {
const win = typeof window !== 'undefined' ?
window :
null;
if (!win) {
return 0;
}
const docElement = win.document.documentElement;
const body = win.document.getElementsByTagName('body')[0];
return win.innerHeight ||
docElement.clientHeight ||
body.clientHeight ||
0;
} catch (e) {
return 0;
}
}