/**
 * @private - To be merged when DataView behaviors are used.
 */
Ext.define('Ext.dataview.ListItem', {
    extend: 'Ext.dataview.DataItem',

    xtype: 'listitem',

    requires: [
        'Ext.dataview.ListItemHeader',
        'Ext.dataview.ListDisclosure',
        'Ext.dataview.ListIcon'
    ],

    cachedConfig: {
        dataMap: {
            getIcon: {
                setSrc: 'iconSrc'
            },
            getDisclosure: {
                setVisible: 'disclosure'
            }
        }
    },

    config: {
        baseCls: Ext.baseCSSPrefix + 'list-item',

        header: null,

        icon: null,

        disclosure: null
    },

    applyIcon: function(config) {
        return Ext.factory(config, Ext.dataview.ListIcon, this.getIcon());
    },

    updateIcon: function(newIcon) {
        if (newIcon) {
            this.add(newIcon);
        }
    },

    applyDisclosure: function(config) {
        return Ext.factory(config, Ext.dataview.ListDisclosure, this.getDisclosure());
    },

    updateDisclosure: function(newDisclosure, oldDisclosure) {
        if (newDisclosure) {
            this.add(newDisclosure);
        }
        else if (oldDisclosure) {
            oldDisclosure.destroy();
        }
    },

    applyHeader: function(config) {
        return Ext.factory(config, Ext.dataview.ListItemHeader, this.getHeader());
    },

    updateHeader: function(newHeader, oldHeader) {
        if (newHeader) {
            this.insert(0, newHeader);
        }
        else {
            oldHeader.destroy();
        }
    }
});