Thanks for your post Eric.

I wish I could say it's fun, I'm under deadline. It was my bright idea to 
bring Angular in as a solution for dealing with xx,xxx rows at a time... I 
literally started learning AngularJS 2 weeks ago... I'm feeling the heat to 
solve this problem. We were using DataTables & jQuery but had to limit our 
data set to a few thousand rows and even that was sluggish but I could 
manage about 4000. We want to manage the entire record set which is between 
10K and 15K depending on the client. 

Angular has been handling it like a champ... but man it's a paradigm shift 
in how you do things... and yes, this problem is not trivial but makes all 
the tutorials I've seen look trivial! lol

So regarding 1, 2 & 3... that is what I am currently doing and that is 
working. Using shift I end up with 2 indexes... the start and the end.

I am using* logic in the controller to mark an item in the scope to 
selected true or false*. This is my problem with Shift select... I can only 
get the correct range if my ngRepeat is unsorted and unfiltered. As soon as 
I filter or change the sort order... $index is useless to me as the indexes 
don't line up with the scope. Could you elaborate on this specifically?

How do you select the range, regardless of the state of the view? And 
paging throws another problem into the mix... but at this point, I'd like 
to get it working just on the current page of results.




On Thursday, July 31, 2014 1:28:44 AM UTC-4, Eric Miller wrote:
>
> Heheh. This is a surprisingly hard problem, to emulate file system 
> selection behavior. I enjoyed this one myself :)
> Not really angular-specific, but it's fun. As far as I know nobody has 
> written a lib for it. It's tough to isolate a selection model from UI and 
> data dependencies, so you're probably on your own to build it.
>
> Here's how I solved it (as I recall).
>
> 1: Click by itself deselects everything, then selects whatever you 
> clicked, unless it was selected, then it deselects this. Subtle difference 
> from...
> 2: CTRL click toggles. This is easy.
> 3: Either click or CTRL click sets a "lastSingleClick" variable. This is 
> your anchor for the shift click.
> 4: Shift click selects from your "lastSingleClick" until the clicked 
> index. Your selection model knows the full set of selections, but you need 
> to separately store "currentSpanSelection"s, because...
> 5: Every time you shift click, the first thing you do is deselect 
> everything in "currentSpanSelections", because the behavior file systems 
> show is spans fipping around if you change what you shift+click on.
>
> So the total set of selection data you need for this algo is:
>
> * currentSpan = [] // array of the most recent shift selected span
> * lastSingleClick = 3 // the index of the last single click that happened, 
> naked or CTRL.
> * selections = [] // all of the selections
>
>
>
> On Wednesday, July 30, 2014 1:50:30 PM UTC-7, Skattabrain wrote:
>>
>> Hello,
>>
>> So my Angular JS dilemma of the day is with a shift/control select 
>> feature I am implementing on a table. Here is the scenario..
>>
>>
>>    - I have a large list - $scope.users
>>    - I can sort and filter this list
>>    - it's a huge list... 10K +
>>    - I use paging (and the performance is incredible... as if there were 
>>    hundreds not thousands of records)
>>    - Clicking a row toggles true/false on a property "selected"
>>    - I have buttons that add/remove "selected" users to a new list and 
>>    then I send it off to the server via ajax
>>
>> I have CTRL click implemented and working.... SHIFT is giving me trouble.
>>
>> I get the last selected record index, then the current (when SHIFT is 
>> depressed) and that's good... however changing the sort order changes the 
>> UI but I'm setting selected from my controller... which is looking at 
>> $scope.users and not the view currently in ngRepeat. If I could get the 
>> right order to the scope I think I could get this working in conjunction 
>> with pagination.
>>
>> So shift select user #1 on page 1 and with user #50 on page #3 would get 
>> users 1 - 50.
>>
>> Any ideas on this? I can't seem to find anything... and AngularUI does 
>> shift select... however if you try it in their paging it doesn't work.
>>
>> Any input would be greatly appreciated!
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"AngularJS" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/angular.
For more options, visit https://groups.google.com/d/optout.

Reply via email to