Skip to content

Instantly share code, notes, and snippets.

@xyzdata
Created July 4, 2017 01:25
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save xyzdata/edda2b9df56d0b449778978a5565d792 to your computer and use it in GitHub Desktop.
Save xyzdata/edda2b9df56d0b449778978a5565d792 to your computer and use it in GitHub Desktop.
Symbol.iterator & object-rest-spread
@xyzdata
Copy link
Author

xyzdata commented Jul 4, 2017

@xyzdata
Copy link
Author

xyzdata commented Jul 4, 2017

https://github.com/dvajs/dva-loading/issues/22

import {query, logout} from '../services/app';
import {routerRedux} from 'dva/router';
import {parse} from 'qs';
import {config} from '../utils';
const {prefix} = config;

export default {
    namespace: 'app',
    state: {
        user: {},
        menuPopoverVisible: false,
        siderFold: localStorage.getItem(`${prefix}siderFold`) === 'true',
        darkTheme: localStorage.getItem(`${prefix}darkTheme`) === 'true',
        isNavbar: document.body.clientWidth < 769,
        navOpenKeys: JSON.parse(localStorage.getItem(`${prefix}navOpenKeys`)) || []
    },
    subscriptions: {
        setup({dispatch}) {
            dispatch({type: 'query'});
            let tid;
            window.onresize = () => {
                clearTimeout(tid)
                tid = setTimeout(() => {
                    dispatch({type: 'changeNavbar'});
                }, 300);
            };
        }
    },
    effects: {
        *query(
            {payload},
            {call, put}
        ){
            const data = yield call(query, parse(payload));
            if (data.success && data.user) {
                yield put({
                    type: 'querySuccess',
                    payload: data.user
                });
                if (location.pathname === '/login') {
                    yield put(routerRedux.push('/dashboard'));
                }
            }else {
                if (config.openPages && config.openPages.indexOf(location.pathname) < 0) {
                    let from = location.pathname;
                    window.location = `${location.origin}/login?from=${from}`;
                }
            }
        },
        *logout (
            {payload},
            {call, put}
        ){
            const data = yield call(logout, parse(payload));
            if (data.success) {
                yield put({ type: 'query' });
            } else {
                throw (data);
            }
        },
        *changeNavbar (
            {payload}, 
            {put, select}
        ){
            const { app } = yield(select(_ => _));
            const isNavbar = document.body.clientWidth < 769;
            if (isNavbar !== app.isNavbar) {
                yield put({ type: 'handleNavbar', payload: isNavbar });
            }
        }
    },
    reducers: {
        querySuccess (state, { payload: user }) {
            return {
                ...state,
                user
            };
        },
        switchSider (state) {
            localStorage.setItem(`${prefix}siderFold`, !state.siderFold);
            return {
                ...state,
                siderFold: !state.siderFold
            };
        },
        switchTheme (state) {
            localStorage.setItem(`${prefix}darkTheme`, !state.darkTheme);
            return {
                ...state,
                darkTheme: !state.darkTheme
            };
        },
        switchMenuPopver (state) {
            return {
                ...state,
                menuPopoverVisible: !state.menuPopoverVisible
            };
        },
        handleNavbar (state, { payload }) {
            return {
                ...state,
                isNavbar: payload
            };
        },
        handleNavOpenKeys (state, { payload: navOpenKeys }) {
            return {
                ...state,
                ...navOpenKeys
            };
        }
    }
}

@xyzdata
Copy link
Author

xyzdata commented Jul 4, 2017

querystring parsing

qs

一个查询字符串解析和字符串库,具有一些额外的安全性。

https://www.npmjs.com/package/qs

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment