/**
 * This component is the base class for {@link Ext.dataview.pullrefresh.Bar pullrefreshbar}
 * and {@link Ext.dataview.pullrefresh.Spinner pullrefreshspinner}.
 * @since 6.5.0
 * @private
 */
Ext.define('Ext.dataview.pullrefresh.Item', {
    extend: 'Ext.Component',
 
    config: {
        /**
         * @private
         */
        lastUpdated: null,
 
        /**
         * @cfg {'loading'/'loaded'/'pulling'/'holding'} state
         * @private
         */
        state: null,
 
        /**
         * @cfg {Number} pull
         * The value from 0 (not pulled) to 1 (fully pulled) and potentially more for
         * over-pulling or over-scrolling.
         * @private
         */
        pull: null
    },
 
    privates: {
        clsMap: {
            loaded: Ext.baseCSSPrefix + 'pullrefresh-loaded',
            loading: Ext.baseCSSPrefix + 'pullrefresh-loading',
            pulling: Ext.baseCSSPrefix + 'pullrefresh-pulling',
            holding: Ext.baseCSSPrefix + 'pullrefresh-holding'
        },
 
        isLoading: function(state) {
            state = state || this.getState();
 
            return state === 'loading' || state === 'loaded';
        },
 
        updateState: function(value) {
            var el = this.el,
                map = this.clsMap,
                classes;
 
            if (el) {
                classes = el.getClassMap(/* clone= */false);
 
                delete classes[map.loaded];
                delete classes[map.loading];
                delete classes[map.pulling];
                delete classes[map.holding];
 
                classes[map[value]] = 1;
 
                el.setClassMap(classes, /* keep= */true);
 
            }
        }
    }
});