/**
 * @private
 */
Ext.define('Ext.grid.feature.AdvancedGroupStore', {
    extend: 'Ext.grid.AdvancedGroupStore',

    config: {
        view: null,
        gridLocked: false
    },

    fireReplaceEvent: true,

    // Number of records to load into a buffered grid before it has been
    // bound to a view of known size
    defaultViewSize: 100,

    // Use this property moving forward for all feature stores. It will be used to ensure
    // that the correct object is used to call various APIs. See EXTJSIV-10022.
    isFeatureStore: true,

    destroy: function() {
        Ext.destroy(this.viewListeners);
        this.callParent();
    },

    updateSource: function(store, oldStore) {
        var me = this;

        if (!me.getGridLocked()) {
            me.bindViewStoreListeners();
        }

        me.callParent([store, oldStore]);
    },

    bindViewStoreListeners: function() {
        var me = this,
            view = me.getView(),
            listeners = view.getStoreListeners(me);

        listeners.scope = view;
        listeners.destroyable = true;

        Ext.destroy(me.viewListeners);

        me.viewListeners = me.on(listeners);
    }
});