ui: form/GroupFilter: copy records for the pbsGroupSelectors

store.getData() returns an 'Ext.util.Collection' which is a special
class that does more than being an array of records. Namely, it can
have 'observers' which can react on the change of the collection

Here, the 'onWidgetAttach' callback will be called twice on the first
row add and the widgets (and thus stores) are cached by extjs. When
doing a 'setData' of a Collection, it tries to add the store as an
observer, but due to the above caching and multiple calling this fails
since the store is already an observer.

For this reason, we want to actually copy the records (which neither
the store, nor the Collection has a method for...)

This gives us an additional benefit: The different pbsGroupSelectors can
sort independently now, before it was all linked to the original store's
collection.

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
This commit is contained in:
Dominik Csapak 2021-12-01 11:57:08 +01:00 committed by Thomas Lamprecht
parent b3c7567e3c
commit f49cd6c135
1 changed files with 5 additions and 1 deletions

View File

@ -134,7 +134,11 @@ Ext.define('PBS.form.GroupFilter', {
let regex = widget.down('textfield[type=regex]'); let regex = widget.down('textfield[type=regex]');
let group = widget.down('pbsGroupSelector'); let group = widget.down('pbsGroupSelector');
group.getStore().setData(view.dsStore.getData()); let recs = [];
view.dsStore.each((record) => {
recs.push(record.data);
});
group.getStore().setData(recs);
// add a widget reference to the record so we can acces them // add a widget reference to the record so we can acces them
// from the other column // from the other column