/**
 * Component基类，追加Immutable
 * User: bjyangxiuwu
 * Date: 2017/03/07
 * Time: 11:11
 */
import React from 'react';
import { is } from 'immutable';

class BaseComponent extends React.Component {
    /**
     * 判断组件是否需要更新
     * @param {object} nextPropsParam object
     * @param {object} nextStateParam object
     * @returns {boolean} 是否更新
     */
    shouldComponentUpdate(nextPropsParam, nextStateParam) {
        const thisProps = this.props || {};
        const thisState = this.state || {};

        const nextState = nextStateParam || {};
        const nextProps = nextPropsParam || {};

        if (Object.keys(thisProps).length !== Object.keys(nextProps).length ||
            Object.keys(thisState).length !== Object.keys(nextState).length) {
            return true;
        }
        
        const propsKeys = Object.keys(nextProps) || [];
        for (let i = 0; i < propsKeys.length; i+=1) {
            const key = propsKeys[i];
            if (!is(thisProps[key], nextProps[key])) {
                return true;
            }
        }

        const stateKeys = Object.keys(nextState) || [];
        for (let i = 0; i < stateKeys.length; i+=1) {
            const key = stateKeys[i];
            if (!is(thisState[key], nextState[key])) {
                return true;
            }
        }

        return false;
    }
}

export default BaseComponent;
