Argh .. wrong thread ... again (I really wonder why this happens)

Chris

Am 25.09.20, 10:15 schrieb "Christofer Dutz" <[email protected]>:

    Hi Harbs,

    if you want (ideally after my ApacheCon talk on Wednesday) I would be 
willing to go through the release with you via Zoom (or other video chat tool)

    Chris



    Am 24.09.20, 23:23 schrieb "Harbs" <[email protected]>:

        The data provider notifier listens to collectionChanged. There should 
be no need for additional sort-specific events.

        Look at DataProviderChangeNotifier.

        If you can’t figure it out, I can help you on Tuesday. I’m not 
available until then.

        > On Sep 24, 2020, at 11:30 PM, Carlos Rovira <[email protected]> 
wrote:
        > 
        > Hi Harbs,
        > 
        > I think we are not listening for the "collectionChanged" event in 
DataGrid
        > beads (DataGridView).
        > Maybe I could add it (the same as I did with "sortedChanged", also the
        > other event could be a better name since it is more global and we can 
use
        > for filtering, and more).
        > But in doing that, I think I would need to still have a similar 
change to
        > ArraySelectionModel where we have a method that doesn't check if the
        > dataProvider is the same, since it will be in fact the same, but we 
need to
        > trigger the view refresh to show the sorting
        > 
        > Hope I was able to explain it right.
        > 
        > If you have time, you can revert my commit locally and try to do what 
you
        > have in mind and if that works commit the revert and the change. If 
not
        > I'll try it as I have time. I have many things on my plate now and 
also to
        > ApacheCon talks to prepare.
        > 
        > thanks
        > 
        > 
        > 
        > El jue., 24 sept. 2020 a las 18:42, Harbs (<[email protected]>)
        > escribió:
        > 
        >> There must be something more subtle here.
        >> 
        >> Without looking into your issue too deeply, I think the problem is 
that
        >> you’re not actually triggering an event.
        >> 
        >> The dataProvider setter in ArraySelectionModel will not actually do
        >> anything unless you’re really changing the dataProvider.
        >> 
        >> The solution would be to trigger a collectionChanged event in your
        >> collection when the array is sorted. You can do that by either 
setting
        >> collection.source = collection.source.slice() or a better solution 
(IMO)
        >> would be to simply: collection.dispatchEvent(new
        >> Event(“collectionChanged”));
        >> 
        >> HTH,
        >> Harbs
        >> 
        >>> On Sep 24, 2020, at 6:23 PM, Carlos Rovira <[email protected]>
        >> wrote:
        >>> 
        >>> Hi Harbs,
        >>> 
        >>> I reverted locally my changes and tried this:
        >>> 
        >>> <j:DataGrid localId="dg2" width="100%" height="100%"
        >>> dataProvider="{new ArrayListView(productModel.productList)}"
        >>> change="lb2.html = describeItem(event.target.selectedItem)">
        >>> <j:beads>
        >>> <j:DataGridColumnLabelsChange/>
        >>> <j:DataGridSort/>
        >>> <js:EasyDataProviderChangeNotifier/>
        >>> </j:beads>
        >>> <j:columns>
        >>> <j:DataGridColumn label="Title" dataField="title"/>
        >>> <j:DataGridColumn label="Sales" dataField="sales"/>
        >>> </j:columns>
        >>> </j:DataGrid>
        >>> 
        >>> 
        >>> In DataGridSort I changed final lines to this:
        >>> 
        >>> // This way we can't refresh the columns since the dataProvider is 
the
        >> same
        >>> dg.model.dispatchEvent(new Event("dataProviderChanged"));
        >>> header.model.dispatchEvent(new Event("dataProviderChanged"));
        >>> 
        >>> // dg.dataProvider = null;
        >>> // dg.dataProvider = collection;
        >>> 
        >>> But this is not working.
        >>> 
        >>> I think the use case is not the same since the notifier is checking 
for
        >> the
        >>> same object:
        >>> 
        >>> if(object[propertyName] == dataProvider)
        >>> return;
        >>> 
        >>> the problem I had is that the dataprovider is the same, but the 
order
        >> not,
        >>> so we need to "redraw" but without reassing again the provider and
        >> avoiding
        >>> to remove cells and recreate (what in the end has some more 
problems like
        >>> loosing selection and reset the scrolling).
        >>> 
        >>> Maybe I'm using wrong? or what I'm exposing is ok?
        >>> 
        >>> thanks
        >>> 
        >>> 
        >>> 
        >>> 
        >>> 
        >>> El mar., 22 sept. 2020 a las 9:53, Harbs (<[email protected]>)
        >> escribió:
        >>> 
        >>>> This problem has been solved already with beads.
        >>>> 
        >>>> Check out DataProviderChangeNotifier 
EasyDataProviderChangeNotifier.
        >>>> 
        >>>>> On Sep 21, 2020, at 6:40 PM, Carlos Rovira 
<[email protected]>
        >>>> wrote:
        >>>>> 
        >>>>> Hi,
        >>>>> 
        >>>>> I solved the problem with sorting in DataGrid (or List).
        >>>>> 
        >>>>> The problem was: a sorted dataProvider is the same object,so 
making
        >>>>> "dataProvider = sortedDP" was stopped at the start of the method 
since
        >> as
        >>>>> usual we check if dataprovider is the same and in that case we 
return.
        >>>>> 
        >>>>> The workaround was to do
        >>>>> 
        >>>>> dataProvider = null;
        >>>>> dataProvider = oldDP;
        >>>>> 
        >>>>> This had 2 problems:
        >>>>> 1.- if selection was in place, the selection was lost
        >>>>> 2.- if some scrolling was in place, the scrolling was lost.
        >>>>> 
        >>>>> So my solution, was create a new "sortChanged" event
        >>>>> 
        >>>>> 1.- in DataGridSort we dispatch the "sortChanged" instead of
        >>>>> "dataProviderChanged" (in fact that's what really happened, 
right?).
        >>>>> 2.- DataGridView now listen for "sortChanged" too (additionally to
        >>>>> "dataProviderChanged"), and we have a new handler that just 
propagate
        >> to
        >>>>> make each list to call "list.model.sortChangedHandler(dp);"
        >>>>> 3.- the shared model, ArraySelectionModel, decouple dataProvider 
setter
        >>>> to
        >>>>> extract the main functionality to "setDataProvider" and add
        >>>>> "sortChangeHandler" that avoid to check if dataProvider is the 
same as
        >>>>> before, so this time the refresh happen.
        >>>>> 
        >>>>> The solution made the selection and the scrolling be persisted (if
        >> any),
        >>>> so
        >>>>> for now this solved the problems and seems (at least) to be a step
        >>>> forward.
        >>>>> 
        >>>>> So my question: Do you think this solution is ok?
        >>>>> If so, maybe the event name should change to something that 
describes
        >>>>> things "wider", since this could be a "sort" a "filtering",....
        >>>>> 
        >>>>> --
        >>>>> Carlos Rovira
        >>>>> http://about.me/carlosrovira
        >>>> 
        >>>> 
        >>> 
        >>> --
        >>> Carlos Rovira
        >>> http://about.me/carlosrovira
        >> 
        >> 
        > 
        > -- 
        > Carlos Rovira
        > http://about.me/carlosrovira



Reply via email to