Agreed Ryan, I know this is a bit of a cart before the horse scenario. This isn't the most desirable of circumstances, and we're doing our best to accommodate the contribution because it's a good feature to have, and the work so far looks pretty solid. We have a bit more flexibility in a feature branch than we would if this was (as it was originally) submitted against master - I think the most important thing here is we do architecture/code/test review on an individual PR basis. They've split up this work pretty fine-grained, so I don't think it should be too hard for us to work through. When we get through PRs 1-14 from a code review perspective, we'll have to do a run of manual acceptance tests on the final product before accepting the feature branch into master. Anything that appears to be broken or missing will simply need another PR to address it, and we can get it in. I actually don't think this should be too bad. Again, thank you to Shane, Tibor, and Tamas for breaking this down. Just be careful in the future when you're collaborating on something of this size that you either A) split off the work in fully functioning PRs, e.g. refactoring work or library changes can very easily be submitted against master without breaking anything or B) start with a feature branch and discuss thread that lays out your plan for delivering the feature in that FB.
Please review Apache's guide on consensus building, as well - http://community.apache.org/committers/consensusBuilding.html On Tue, Jun 11, 2019 at 12:01 PM Ryan Merriman <merrim...@gmail.com> wrote: > "We planning to add the changes to the latest PR as additional commits to > avoid impacting the PR sequence. We will refer to the source PR in the > commit message of the fix. Also adding a link to the comment section of the > source PR of the change request to the fixing commit to make them > connected." > > I don't think this is going to work. If changes are requested and applied > in a different PR, how would you test the original PR? What would you do > if there were merge conflicts introduced between the current and final PR? > What's the point of even having any PRs before the final one if they won't > get committed or changed? I don't see any way to avoid having to propagate > changes through all subsequent PRs. > > On Wed, May 29, 2019 at 7:03 AM Tibor Meller <tibor.mel...@gmail.com> > wrote: > > > Hi all, > > > > *We still need some volunteer reviewers for this feature.* All individual > > PR is under 1000 line of changes except one and it is due to an > > autogenerated package.lock.json file. > > Just a heads up: parser aggregation by default turned on for bro, snort > and > > yarn parser on full dev. Without this changeset, full dev is broken. > > > > > https://lists.apache.org/thread.html/beeb4cfddfca7958a22ab926f72f52f46a33c42edce714112df9a2da@%3Cdev.metron.apache.org%3E > > > > > > > > On Fri, May 24, 2019 at 3:20 PM Tibor Meller <tibor.mel...@gmail.com> > > wrote: > > > > > Please find below the list of the PRs we opened for Parser Aggregation. > > > With Shane, Tamas we tried to provide as much information as possible > to > > > make the reviewing process easier. > > > Please keep that in mind these PRs are not against muster but a Parser > > > Aggregation feature branch. > > > If you like to read more about the process we followed with these PRs > > > please read the previous three message in this thread. > > > > > > PR#1 METRON-2114: [UI] Moving components to sensor parser module > > > <https://github.com/apache/metron/pull/1410> > > > PR#2 METRON-2116: [UI] Removing redundant AppConfigService > > > <https://github.com/apache/metron/pull/1411> > > > PR#3 METRON-2117: [UI] Aligning models to grouping feature > > > <https://github.com/apache/metron/pull/1412> > > > PR#4 METRON-2115: [UI] Aligning UI to the parser aggregation AP > > > <https://github.com/apache/metron/pull/1414> > > > PR#5 METRON-2122: [UI] Fixing early app config access issue > > > <https://github.com/apache/metron/pull/1415> > > > PR#6 METRON-2124: [UI] Move status information and start/stop to the > > > Aggregate level <https://github.com/apache/metron/pull/1418> > > > PR#7 METRON-2125: [UI] Making changes visible in the parser list by > > > marking changed items <https://github.com/apache/metron/pull/1422> > > > PR#8 METRON-2131: Add NgRx and related dependencies > > > <https://github.com/apache/metron/pull/1423> > > > PR#9 METRON-2133: Add NgRx effects to communicate with the server > > > <https://github.com/apache/metron/pull/1424> > > > PR#10 METRON-2134: Add NgRx reducers to perform parser and group > changes > > > in the store <https://github.com/apache/metron/pull/1425> > > > PR#11 METRON-2135: Add NgRx actions to trigger state changes > > > <https://github.com/apache/metron/pull/1426> > > > PR#12 METRON-2136: Add parser aggregation sidebar > > > <https://github.com/apache/metron/pull/1427> > > > PR#13 METRON-2137: Implement drag and drop mechanism and wire NgRx > > > <https://github.com/apache/metron/pull/1428> > > > PR#14 METRON-2138: Code clean up > > > <https://github.com/apache/metron/pull/1429> > > > PR#15 METRON-2139: Refactoring sensor-parser-config.component and wire > > > NgRx <https://github.com/apache/metron/pull/1430> > > > > > > Thanks, > > > Tibor > > > > > > > > > On Thu, May 23, 2019 at 11:45 AM Tibor Meller <tibor.mel...@gmail.com> > > > wrote: > > > > > >> Yes, am expecting that some change request will rase due to the > review. > > >> We planning to add the changes to the latest PR as additional commits > to > > >> avoid impacting the PR sequence. We will refer to the source PR in the > > >> commit message of the fix. Also adding a link to the comment section > of > > the > > >> source PR of the change request to the fixing commit to make them > > connected. > > >> > > >> On Wed, May 22, 2019 at 5:49 PM Michael Miklavcic < > > >> michael.miklav...@gmail.com> wrote: > > >> > > >>> Tibor, that sounds reasonable to me. If PR #1 ends up requiring code > > >>> changes, will you guys just percolate those up through the remaining > k > > >>> PRs > > >>> in order, or just the final PR? I'm wondering how this works in > > reference > > >>> to your last point in #5 about rebasing. > > >>> > > >>> On Wed, May 22, 2019 at 8:47 AM Tibor Meller <tibor.mel...@gmail.com > > > > >>> wrote: > > >>> > > >>> > I would like to describe quickly *our approach to breaking down > > Parser > > >>> > Aggregation PR for smaller chunks* > > >>> > > > >>> > *1. we squashed the commits in the original development branch* > > >>> > - when we started to open smaller PRs from the commits from the > > >>> original > > >>> > branch, we found ourself opening PRs out of historical states of > the > > >>> code > > >>> > instead of the final one > > >>> > - none of those states of development are worth (or make sense) to > be > > >>> > reviewed (initial phases of development are included in the > original > > >>> commit > > >>> > history, multiple iterations of refactoring, etc.) > > >>> > - while the actual development history was irrelevant, the > > attribution > > >>> > aspect of it was still important > > >>> > *2. we divided** the changes by the original authors* > > >>> > - the original contributors were sardell, ruffle1986 and tiborm > > >>> > - we isolated the changes that belong to each individual > contributor > > >>> > *3. each of us identified smaller but belonging changesets * > > >>> > - with this, we ended up opening 5 PRs from tiborm, 3 from sardell > > and > > >>> 6 > > >>> > from ruffle1986 > > >>> > - each of these are smaller than 500 lines of changes, which makes > > the > > >>> task > > >>> > of reviewing easier > > >>> > - they have their own context and purpose described by the PR and > the > > >>> > related Jira ticket > > >>> > *4. Each PR introduces a single new commit which is meant to be > > >>> reviewed* > > >>> > - with this we were able to open PRs on top of each others work, > but > > >>> the > > >>> > reviewer is still able to identify what changes were introduced and > > >>> > described by the pr simply by focusing on the last commit > > >>> > - the commit introduced by the PR has the same commit message as > the > > >>> title > > >>> > of the PR to make it easier to find > > >>> > *5. Only the last PR is meant to be merged into the feature branch* > > >>> > - the last PR also introduces a single new commit to being reviewed > > >>> > - this contains all the commits from the previous PRs that belong > to > > >>> parser > > >>> > aggregation > > >>> > - it builds fine in Travis > > >>> > - it's fully functional and ready to being tested against full dev > > >>> > - If we only merge the last PR, we don't have to rebase and > recreate > > >>> all of > > >>> > our PRs due to merge conflicts that will result from to conflicting > > >>> > histories (which is common in feature branch work) > > >>> > > > >>> > Once all the Pull Requests are open, I will submit a list of all of > > >>> them to > > >>> > this discussion thread. > > >>> > > > >>> > On Wed, May 8, 2019 at 3:58 PM Otto Fowler < > ottobackwa...@gmail.com> > > >>> > wrote: > > >>> > > > >>> > > You need to be a committer, that is all I think. > > >>> > > I would not use the github UI for it though, I do it through the > > cli > > >>> > > > > >>> > > > > >>> > > > > >>> > > On May 8, 2019 at 09:45:24, Michael Miklavcic ( > > >>> > michael.miklav...@gmail.com > > >>> > > ) > > >>> > > wrote: > > >>> > > > > >>> > > Not that I'm aware of. Nick and Otto, you've created them before, > > >>> did you > > >>> > > need any special perms? > > >>> > > > > >>> > > On Wed, May 8, 2019 at 3:57 AM Shane Ardell < > > >>> shane.m.ard...@gmail.com> > > >>> > > wrote: > > >>> > > > > >>> > > > This morning, we started to break down our work as Michael > > >>> suggested in > > >>> > > > this thread. However, it looks like I don't have permission to > > >>> create a > > >>> > > new > > >>> > > > branch in the GitHub UI or push a new branch to the > apache/metron > > >>> repo. > > >>> > > Is > > >>> > > > this action restricted to PMC members only? > > >>> > > > > > >>> > > > Shane > > >>> > > > > > >>> > > > On Wed, May 8, 2019 at 9:06 AM Tamás Fodor < > > ftamas.m...@gmail.com> > > >>> > > wrote: > > >>> > > > > > >>> > > > > Here's the process we've gone through in order to implement > the > > >>> > > feature. > > >>> > > > > > > >>> > > > > At the beginning we had some bootstrap work like creating a > > mock > > >>> API > > >>> > > > > (written in NodeJS) because we were a few steps ahead the > > backend > > >>> > part. > > >>> > > > But > > >>> > > > > this is in a totally different repository so it doesn't > really > > >>> count. > > >>> > > We > > >>> > > > > also had to wire NgRX, our chosen 3rd party that supports the > > >>> flux > > >>> > flow > > >>> > > > to > > >>> > > > > get a better state management. When we were ready to kick off > > >>> > > > implementing > > >>> > > > > the business logic in, we splited up the work by subfeatures > > like > > >>> > drag > > >>> > > > and > > >>> > > > > dropping table rows. At this point, we created a POC without > > NgRX > > >>> > just > > >>> > > to > > >>> > > > > let you have the feeling of how it works in real life. Later > > on, > > >>> > after > > >>> > > > > introducing NgRX, we had to refactor it a little bit > obviously > > to > > >>> > make > > >>> > > it > > >>> > > > > compatible with NgRX. There were other subfeatures like > > creating > > >>> and > > >>> > > > > editing groups in a floating pane on the right side of the > > >>> window. > > >>> > > > > When the real backend API was ready we made the necessary > > >>> changes and > > >>> > > > > tested whether it worked how it was expected. There were a > few > > >>> > > difference > > >>> > > > > between how we originally planned the API and the current > > >>> > > implementation > > >>> > > > so > > >>> > > > > we had to adapt it accordingly. While we were implementing > the > > >>> > > features, > > >>> > > > we > > >>> > > > > wrote the unit tests simultaneously. The latest task on the > > >>> feature > > >>> > was > > >>> > > > > restricting the user from aggregating parsers together. > > >>> > > > > > > >>> > > > > As a first iteration, we've decided to put the restriction in > > >>> because > > >>> > > it > > >>> > > > > requires a bigger effort on the backend to deal with that. In > > my > > >>> > > opinion, > > >>> > > > > we should get rid of the restriction because it's not > intuitive > > >>> and > > >>> > > very > > >>> > > > > inconvenient. In my opinion, we should let the users to > > >>> aggregate the > > >>> > > > > running parsers together and do the job to handle this edge > > case > > >>> on > > >>> > the > > >>> > > > > backend accordingly. > > >>> > > > > > > >>> > > > > What do you think, guys? > > >>> > > > > > > >>> > > > > Hope this helps. > > >>> > > > > > > >>> > > > > Tamas > > >>> > > > > > > >>> > > > > On Tue, May 7, 2019 at 4:34 PM Michael Miklavcic < > > >>> > > > > michael.miklav...@gmail.com> wrote: > > >>> > > > > > > >>> > > > > > This was my expectation as well. > > >>> > > > > > > > >>> > > > > > Shane, Tibor, Tamas - how did you go about breaking this > down > > >>> into > > >>> > > > chunks > > >>> > > > > > and/or microchunks when you collaborated offline? As Nick > > >>> > mentioned, > > >>> > > > you > > >>> > > > > > obviously split up work and shared it amongst yourselves. > > Some > > >>> > > > > explanation > > >>> > > > > > around this process would be helpful for reviewers as well. > > We > > >>> > might > > >>> > > be > > >>> > > > > > able to provide better guidance and examples to future > > >>> contributors > > >>> > > as > > >>> > > > > > well. > > >>> > > > > > > > >>> > > > > > I talked a little bit with Shane about this offline last > > week. > > >>> It > > >>> > > looks > > >>> > > > > > like you guys effectively ran a local feature branch. > > >>> Replicating > > >>> > > that > > >>> > > > > > process in a feature branch in Apache is probably what you > > guys > > >>> > > should > > >>> > > > > > be doing for a change this size. We don't have hard limits > on > > >>> line > > >>> > > > change > > >>> > > > > > size, but in the past it's been somewhere around 2k-3k > lines > > >>> and > > >>> > > above > > >>> > > > > > being the tipping point for discussing a feature branch. > > >>> Strictly > > >>> > > > > speaking, > > >>> > > > > > line quantity alone is not the only metric, but it's > relevant > > >>> here. > > >>> > > If > > >>> > > > > you > > >>> > > > > > want to make smaller incremental changes locally, there's > > >>> nothing > > >>> > to > > >>> > > > keep > > >>> > > > > > you from doing that - I would only advise that you consider > > >>> > squashing > > >>> > > > > those > > >>> > > > > > commits (just ask if you're unclear about how to handle > that) > > >>> into > > >>> > a > > >>> > > > > single > > >>> > > > > > larger commit/chunk when you're ready to publish them as a > > >>> chunk to > > >>> > > the > > >>> > > > > > public feature branch. So it would look something like > this: > > >>> > > > > > > > >>> > > > > > Commits by person locally > > >>> > > > > > Shane: 1,2,3 -> squash as A > > >>> > > > > > Tibor: 4,5,6 -> squash as B > > >>> > > > > > Tamas: 7,8,9 -> squash as C > > >>> > > > > > > > >>> > > > > > Commits by person in Apache > > >>> > > > > > Shane: A > > >>> > > > > > Tibor: B > > >>> > > > > > Tamas: C > > >>> > > > > > > > >>> > > > > > We need to maintain a record of attribution. Your real > > >>> workflow may > > >>> > > not > > >>> > > > > be > > >>> > > > > > that cleanly delineated, but you can choose how you want to > > >>> squash > > >>> > in > > >>> > > > > those > > >>> > > > > > cases. Even in public collaboration, there are plenty of > > cases > > >>> > where > > >>> > > > > folks > > >>> > > > > > submit PRs against PRs, abstain from accepting attribution, > > >>> and it > > >>> > > all > > >>> > > > > gets > > >>> > > > > > squashed down into one person's final PR commit. There are > > many > > >>> > > > options. > > >>> > > > > > > > >>> > > > > > Hope this helps. > > >>> > > > > > > > >>> > > > > > Best, > > >>> > > > > > Mike > > >>> > > > > > > > >>> > > > > > On Mon, May 6, 2019 at 8:19 AM Nick Allen < > > n...@nickallen.org> > > >>> > > wrote: > > >>> > > > > > > > >>> > > > > > > Have you considered creating a feature branch for the > > effort? > > >>> > This > > >>> > > > > would > > >>> > > > > > > allow you to break the effort into chunks, where the > result > > >>> of > > >>> > each > > >>> > > > PR > > >>> > > > > > may > > >>> > > > > > > not be a fully working "master-ready" result. > > >>> > > > > > > > > >>> > > > > > > I am sure you guys tackled the work in chunks when > > >>> developing it, > > >>> > > so > > >>> > > > > > > consider just replaying those chunks onto the feature > > branch > > >>> as > > >>> > > > > separate > > >>> > > > > > > PRs. > > >>> > > > > > > > > >>> > > > > > > > > >>> > > > > > > > > >>> > > > > > > On Mon, May 6, 2019 at 5:24 AM Tibor Meller < > > >>> > > tibor.mel...@gmail.com> > > >>> > > > > >>> > > > > > > wrote: > > >>> > > > > > > > > >>> > > > > > > > I wondered on the weekend how we could split that PR to > > >>> smaller > > >>> > > > > chunks. > > >>> > > > > > > > That PR is a result of almost 2 months of development > > and I > > >>> > don't > > >>> > > > see > > >>> > > > > > how > > >>> > > > > > > > to split that to multiple WORKING parts. It is as it > is a > > >>> whole > > >>> > > > > working > > >>> > > > > > > > feature. If we split it by packages or files we could > > >>> provide > > >>> > > > smaller > > >>> > > > > > > > non-functional PR's, but can end up having a broken > > >>> Management > > >>> > UI > > >>> > > > > after > > >>> > > > > > > > having the 1st PR part merged into master. I don't > think > > >>> that > > >>> > > would > > >>> > > > > be > > >>> > > > > > > > acceptable by the community (or even by me) so I would > > >>> like to > > >>> > > > > suggest > > >>> > > > > > > two > > >>> > > > > > > > other option to help review PR#1360. > > >>> > > > > > > > > > >>> > > > > > > > #1 We could extend that PR with our own author comments > > in > > >>> > > Github. > > >>> > > > > That > > >>> > > > > > > > would help following which code part belongs to where > and > > >>> why > > >>> > it > > >>> > > > was > > >>> > > > > > > > necessary. > > >>> > > > > > > > #2 We can schedule an interactive code walkthrough call > > >>> with > > >>> > the > > >>> > > > ones > > >>> > > > > > who > > >>> > > > > > > > interested in reviewing or the particular changeset. > > >>> > > > > > > > > > >>> > > > > > > > Please share your thoughts on this! Which version would > > >>> support > > >>> > > you > > >>> > > > > the > > >>> > > > > > > > best? Or if you have any other idea let us know. > > >>> > > > > > > > > > >>> > > > > > > > PS: I think the size of our PR's depends on how small > > >>> > > independently > > >>> > > > > > > > deliverable changesets we can identify before we > starting > > >>> to > > >>> > > > > implement > > >>> > > > > > a > > >>> > > > > > > > relatively big new feature. Unfortunately, we missed to > > do > > >>> that > > >>> > > > with > > >>> > > > > > this > > >>> > > > > > > > feature. > > >>> > > > > > > > > > >>> > > > > > > > On Fri, May 3, 2019 at 1:49 PM Shane Ardell < > > >>> > > > > shane.m.ard...@gmail.com> > > >>> > > > > > > > wrote: > > >>> > > > > > > > > > >>> > > > > > > > > NgRx was only used for the aggregation feature and > > >>> doesn't go > > >>> > > > > beyond > > >>> > > > > > > > that. > > >>> > > > > > > > > I think the way I worded that sentence may have > caused > > >>> > > > confusion. I > > >>> > > > > > > just > > >>> > > > > > > > > meant we use it to manage more pieces of state within > > the > > >>> > > > > aggregation > > >>> > > > > > > > > feature than just previous and current state of > grouped > > >>> > > parsers. > > >>> > > > > > > > > > > >>> > > > > > > > > On Fri, May 3, 2019 at 1:32 AM Michael Miklavcic < > > >>> > > > > > > > > michael.miklav...@gmail.com> wrote: > > >>> > > > > > > > > > > >>> > > > > > > > > > Shane, thanks for putting this together. The > updates > > >>> on the > > >>> > > > Jira > > >>> > > > > > are > > >>> > > > > > > > > useful > > >>> > > > > > > > > > as well. > > >>> > > > > > > > > > > > >>> > > > > > > > > > > (we used it for more than just that in this > > feature, > > >>> but > > >>> > > that > > >>> > > > > was > > >>> > > > > > > the > > >>> > > > > > > > > > initial reasoning) > > >>> > > > > > > > > > What are you using NgRx for in the submitted work > > that > > >>> goes > > >>> > > > > beyond > > >>> > > > > > > the > > >>> > > > > > > > > > aggregation feature? > > >>> > > > > > > > > > > > >>> > > > > > > > > > > > >>> > > > > > > > > > > > >>> > > > > > > > > > On Thu, May 2, 2019 at 12:22 PM Shane Ardell < > > >>> > > > > > > shane.m.ard...@gmail.com > > >>> > > > > > > > > > > >>> > > > > > > > > > wrote: > > >>> > > > > > > > > > > > >>> > > > > > > > > > > Hello everyone, > > >>> > > > > > > > > > > > > >>> > > > > > > > > > > In response to discussions in the 0.7.1 release > > >>> thread, I > > >>> > > > > wanted > > >>> > > > > > to > > >>> > > > > > > > > > start a > > >>> > > > > > > > > > > thread regarding the parser aggregation work for > > the > > >>> > > > Management > > >>> > > > > > UI. > > >>> > > > > > > > For > > >>> > > > > > > > > > > anyone who has not already read and tested the PR > > >>> > locally, > > >>> > > > I've > > >>> > > > > > > > added a > > >>> > > > > > > > > > > detailed description of what we did and why to > the > > >>> JIRA > > >>> > > > ticket > > >>> > > > > > > here: > > >>> > > > > > > > > > > > https://issues.apache.org/jira/browse/METRON-1856 > > >>> > > > > > > > > > > > > >>> > > > > > > > > > > I'm wondering what the community thinks about > what > > >>> we've > > >>> > > > built > > >>> > > > > > thus > > >>> > > > > > > > > far. > > >>> > > > > > > > > > Do > > >>> > > > > > > > > > > you see anything missing that must be part of > this > > >>> new > > >>> > > > feature > > >>> > > > > in > > >>> > > > > > > the > > >>> > > > > > > > > UI? > > >>> > > > > > > > > > > Are there any strong objections to how we > > >>> implemented it? > > >>> > > > > > > > > > > > > >>> > > > > > > > > > > I’m also looking to see if anyone has any > thoughts > > >>> on how > > >>> > > we > > >>> > > > > can > > >>> > > > > > > > > possibly > > >>> > > > > > > > > > > simplify this PR. Right now it's pretty big, and > > >>> there > > >>> > are > > >>> > > a > > >>> > > > > lot > > >>> > > > > > of > > >>> > > > > > > > > > commits > > >>> > > > > > > > > > > to parse through, but I'm not sure how we could > > break > > >>> > this > > >>> > > > work > > >>> > > > > > out > > >>> > > > > > > > > into > > >>> > > > > > > > > > > separate, smaller PRs opened against master. We > > >>> could try > > >>> > > to > > >>> > > > > > > > > cherry-pick > > >>> > > > > > > > > > > the commits into smaller PRs and then merge them > > >>> into a > > >>> > > > feature > > >>> > > > > > > > branch, > > >>> > > > > > > > > > but > > >>> > > > > > > > > > > I'm not sure if that's worth the effort since > that > > >>> will > > >>> > > only > > >>> > > > > > reduce > > >>> > > > > > > > the > > >>> > > > > > > > > > > number commits to review, not the lines changed. > > >>> > > > > > > > > > > > > >>> > > > > > > > > > > As an aside, I also want to give a little > > background > > >>> into > > >>> > > the > > >>> > > > > > > > > > introduction > > >>> > > > > > > > > > > of NgRx in this PR. To give a little background > on > > >>> why we > > >>> > > > chose > > >>> > > > > > to > > >>> > > > > > > do > > >>> > > > > > > > > > this, > > >>> > > > > > > > > > > you can refer to the discussion thread here: > > >>> > > > > > > > > > > > > >>> > > > > > > > > > > > > >>> > > > > > > > > > > > >>> > > > > > > > > > > >>> > > > > > > > > > >>> > > > > > > > > >>> > > > > > > > >>> > > > > > > >>> > > > > > >>> > > > > >>> > > > > >>> > > > >>> > > > https://lists.apache.org/thread.html/06a59ea42e8d9a9dea5f90aab4011e44434555f8b7f3cf21297c7c87@%3Cdev.metron.apache.org%3E > > >>> > > > > > > > > > > > > >>> > > > > > > > > > > We previously discussed introducing a better way > to > > >>> > manage > > >>> > > > > > > > application > > >>> > > > > > > > > > > state in both UIs in that thread. It was decided > > that > > >>> > NgRx > > >>> > > > was > > >>> > > > > a > > >>> > > > > > > > great > > >>> > > > > > > > > > tool > > >>> > > > > > > > > > > for many reasons, one of them being that we can > > >>> piecemeal > > >>> > > it > > >>> > > > > into > > >>> > > > > > > the > > >>> > > > > > > > > > > application rather than doing a huge rewrite of > all > > >>> the > > >>> > > > > > application > > >>> > > > > > > > > state > > >>> > > > > > > > > > > at once. The contributors in this PR (myself > > >>> included) > > >>> > > > decided > > >>> > > > > > this > > >>> > > > > > > > > would > > >>> > > > > > > > > > > be a perfect opportunity to introduce NgRx into > the > > >>> > > > Management > > >>> > > > > UI > > >>> > > > > > > > since > > >>> > > > > > > > > > we > > >>> > > > > > > > > > > need to manage the previous and current state > with > > >>> the > > >>> > > > grouping > > >>> > > > > > > > feature > > >>> > > > > > > > > > so > > >>> > > > > > > > > > > that users can undo the changes they've made (we > > >>> used it > > >>> > > for > > >>> > > > > more > > >>> > > > > > > > than > > >>> > > > > > > > > > just > > >>> > > > > > > > > > > that in this feature, but that was the initial > > >>> > reasoning). > > >>> > > In > > >>> > > > > > > > addition, > > >>> > > > > > > > > > we > > >>> > > > > > > > > > > greatly benefited from this when it came time to > > >>> debug > > >>> > our > > >>> > > > work > > >>> > > > > > in > > >>> > > > > > > > the > > >>> > > > > > > > > UI > > >>> > > > > > > > > > > (the discussion in the above thread link goes a > > >>> little > > >>> > more > > >>> > > > > into > > >>> > > > > > > the > > >>> > > > > > > > > > > advantages of debugging with NgRx and DevTools). > > >>> Removing > > >>> > > > NgRx > > >>> > > > > > from > > >>> > > > > > > > > this > > >>> > > > > > > > > > > work would reduce the numbers of lines changed > > >>> slightly, > > >>> > > but > > >>> > > > it > > >>> > > > > > > would > > >>> > > > > > > > > > still > > >>> > > > > > > > > > > be a big PR and a lot of that code would just > move > > >>> to the > > >>> > > > > > component > > >>> > > > > > > > or > > >>> > > > > > > > > > > service level in the Angular application. > > >>> > > > > > > > > > > > > >>> > > > > > > > > > > Shane > > >>> > > > > > > > > > > > > >>> > > > > > > > > > > > >>> > > > > > > > > > > >>> > > > > > > > > > >>> > > > > > > > > >>> > > > > > > > >>> > > > > > > >>> > > > > > >>> > > > > >>> > > > >>> > > >> > > >