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.
