Hi Aditya, 1) Why don't we start using webpack alias's instead of using absolute path. > For eg, > import {RestoreDialogWrapper} from > '../../../pgadmin/static/js/restore/restore_dialog_wrapper'; > can be used as import {RestoreDialogWrapper} from > 'pgadmin_static/js/restore/restore_dialog_wrapper'; > by adding pgadmin_static alias to webpack config.
Great point. In some areas of the code, we began making this change. There is already an alias in webpack shims for `../../../pgadmin/static/js` called `sources`. You can find an example of this in import statements for `supported_database_node.js` 2) Few of the js are left behind, the ones which are used in python > __init__.py. Can't we move them too ? It would be nicer to not to leave > behind a single js. I'm not sure what you mean. Could you point to an example of a single js file? Sincerely, Victoria On Wed, Jun 6, 2018 at 7:07 AM Aditya Toshniwal < aditya.toshni...@enterprisedb.com> wrote: > Hi Anthony/Victoria/Joao, > > I know I am very late to review on patch 004. The idea of moving js files > from tools to static folder looks good, but I have a few suggestions: > > 1) Why don't we start using webpack alias's instead of using absolute > path. For eg, > import {RestoreDialogWrapper} from > '../../../pgadmin/static/js/restore/restore_dialog_wrapper'; > can be used as import {RestoreDialogWrapper} from > 'pgadmin_static/js/restore/restore_dialog_wrapper'; > by adding pgadmin_static alias to webpack config. > > 2) Few of the js are left behind, the ones which are used in python > __init__.py. Can't we move them too ? It would be nicer to not to leave > behind a single js. > > Kindly let me know your views on this. > > > Thanks and Regards, > Aditya Toshniwal > Software Engineer | EnterpriseDB Software Solutions | Pune > "Don't Complain about Heat, Plant a tree" > > On Sat, Jun 2, 2018 at 12:47 AM, Victoria Henry <vhe...@pivotal.io> wrote: > >> Hey Ashesh, >> >> LGTM! The some of the CI tests failed but it looks like a flake. But >> you can go ahead and merge this. >> >> Sincerely, >> >> Victoria >> >> On Fri, Jun 1, 2018 at 2:36 PM Ashesh Vashi < >> ashesh.va...@enterprisedb.com> wrote: >> >>> On Fri, Jun 1, 2018 at 10:09 PM, Victoria Henry <vhe...@pivotal.io> >>> wrote: >>> >>>> Hi Ashesh, >>>> >>>> We just attempted to apply your patch over master but it did not work. >>>> We don't want to introduce any bugs or break any functionality. Please >>>> update the patch to make sure it is synced up with the master branch. >>>> >>> Please find the updated patch. >>> >>>> >>>> Sincerely, >>>> >>>> Victoria >>>> >>>> On Fri, Jun 1, 2018 at 11:18 AM Anthony Emengo <aeme...@pivotal.io> >>>> wrote: >>>> >>>>> Hey Ashesh, >>>>> >>>>> Thanks for the explanation. It was great and it really helped! >>>>> >>>>> C >>>>> pgadmin/browser/server_groups/servers/databases/schemas/static/js/child.js >>>>> C >>>>> pgadmin/browser/server_groups/servers/databases/schemas/static/js/schema_child_tree_node.js >>>>> >>>>> It makes sense to remove duplication by extracting these attributes >>>>> out and setting the canDrop and canCreate functions here. But is it >>>>> possible to combine these two files into one since they are related so we >>>>> don’t need to import schema_child_tree_node? >>>>> >>>> That was the original plan, but 'pgadmin/browser/static/js//node.js' >>> script has too many dependecies, which are not easily portable. >>> And - that may lead to change the scope of the patch. >>> >>> Hence - I decided to use the separate file to make sure we have enough >>> test coverage (which is more imprortant than changing the scope). >>> >>>> M pgadmin/static/js/tree/tree.js >>>>> >>>>> The creation of the ancestorNode function feels like a >>>>> pre-optimization. That function is not used any where outside of the >>>>> tree.js file, so it’s more confusing to have it defined. >>>>> >>>> It is being used in the latest changes. :-) >>> >>> >>>> On a lighter note, could we avoid the !! syntax when possible? For >>>>> example, instead of return !!obj, we could do something like return >>>>> obj === undefined or return _.isUndefined(obj) as this is more >>>>> intuitive. >>>>> >>>>> https://softwareengineering.stackexchange.com/a/80092 >>>>> >>>> I am kind of disagree here. But - I have changed it anyway. >>> >>>> In addition, please update this patch as it is out of sync with the >>>>> latest commit on the master branch. Otherwise, everything looks good! >>>>> >>>> Here - you go! >>> >>> -- Thanks, Ashesh >>> >>>> >>>>> >>>>> Thanks >>>>> Anthony && Victoria >>>>> >>>>> On Fri, Jun 1, 2018 at 7:52 AM Ashesh Vashi < >>>>> ashesh.va...@enterprisedb.com> wrote: >>>>> >>>>>> On Thu, May 24, 2018 at 8:13 PM, Joao De Almeida Pereira < >>>>>> jdealmeidapere...@pivotal.io> wrote: >>>>>> >>>>>>> Hey, Thanks so much for the reply. >>>>>>> >>>>>>> We've noticed that you've made several modifications on top of our >>>>>>> original patch. Unfortunately, we've found it very hard to follow. >>>>>>> Could we >>>>>>> please get a brief synopsis of the changes you have made - just so we >>>>>>> can >>>>>>> better understand the rationale behind them? Just like we've done for >>>>>>> you >>>>>>> previously. >>>>>>> >>>>>> Please find the changes from your original patch: >>>>>> >>>>>> M webpack.shim.js >>>>>> M webpack.test.config.js >>>>>> - In order to specify the fake_browser in regression tests, we need to >>>>>> use 'pgbrowser/browser' in the 'schema_child_tree_node.js' script.D >>>>>> pgadmin/browser/server_groups/servers/databases/schemas/static/js/can_drop_child.js >>>>>> - We don't need this with the new implementation.C >>>>>> pgadmin/browser/server_groups/servers/databases/schemas/static/js/child.js >>>>>> - All the children of schema node have common properties as >>>>>> 'parent_type', 'canDrop', 'canDropCascase', 'canCreate'. >>>>>> Hence - instead of defining them in each node, we have created a base >>>>>> node, which will have all these properties. >>>>>> And, modified all schema children node to inherit from it.C >>>>>> pgadmin/browser/server_groups/servers/databases/schemas/static/js/schema_child_tree_node.js >>>>>> - In this script, we're defining three functions >>>>>> 'childCreateMenuEnabled', 'isTreeItemOfChildOfSchema', & >>>>>> 'isTreeNodeOfSchemaChild', which are used by the 'SchemaChildNode' >>>>>> objects.M pgadmin/browser/static/js/collection.js >>>>>> - Fixed an issue related to wrongly defined 'error' function for the >>>>>> Collection object.D pgadmin/static/js/menu/can_create.js >>>>>> - It defined the function, which was defining a check for creation of a >>>>>> schema child node, or not by looking at the parent node (i.e. a >>>>>> schema/catalog node). >>>>>> The file was not defintely placed under the wrong directory, because - >>>>>> the similar logic was under 'can_drop_child.js', and it was defined >>>>>> under >>>>>> 'pgadmin/browser/server_groups/servers/databases/schemas/static/js' >>>>>> directory.D pgadmin/static/js/menu/menu_enabled.jsC >>>>>> pgadmin/static/js/nodes/supported_database_node.js >>>>>> - Used by the external tools for checking whether the 'selected' >>>>>> tree-node is: >>>>>> + 'database' node, and it is allowed to connect it. >>>>>> + Or, it is one of the schema child (and, not 'catalog' child). >>>>>> - Finding the correct location was difficult for this, as there is no >>>>>> defined pattern, also it can be used by other functions too. Hence - >>>>>> moved it out of 'pgadmin/static/js/menu' directory.M >>>>>> pgadmin/static/js/tree/tree.js >>>>>> - Introduced a function, which returns the ancestor node object, fow >>>>>> which the condition is true.D >>>>>> regression/javascript/menu/can_create_spec.js >>>>>> D regression/javascript/menu/menu_enabled_spec.js >>>>>> D regression/javascript/schema/can_drop_child_spec.jsC >>>>>> regression/javascript/fake_browser/browser.js >>>>>> C regression/javascript/nodes/schema/child_menu_spec.js >>>>>> - Modified the regression to test the new functionalies.M >>>>>> pgadmin/browser/server_groups/servers/databases/schemas/**/*.js >>>>>> - Extending the schema child nodes from the 'SchemaChildNode' class >>>>>> defined in 'pgadmin/.../schemas/static/js/child.js' script. >>>>>> >>>>>> Let me know if you need more information. >>>>>> >>>>>> >>>>>>> Let's keep in mind that the original intent was simply to introduce >>>>>>> this abstraction into the code base, which is a big enough task. I'd >>>>>>> hate >>>>>>> for the scope of the changes we're making to expand beyond that. >>>>>>> >>>>>> >>>>>> I have the mutual feeling. >>>>>> >>>>>> -- Thanks, Ashesh >>>>>> >>>>>>> >>>>>>> Thanks >>>>>>> Joao && Anthony >>>>>>> >>>>>>> >>>>>>> On Thu, May 24, 2018 at 2:59 AM Ashesh Vashi < >>>>>>> ashesh.va...@enterprisedb.com> wrote: >>>>>>> >>>>>>>> Sorry for the late reply. >>>>>>>> On Wed, May 16, 2018 at 8:55 PM, Anthony Emengo <aeme...@pivotal.io >>>>>>>> > wrote: >>>>>>>> >>>>>>>>> export function canCreate(pgBrowser, childOfCatalogType) { >>>>>>>>> return canCreateObject.bind({ >>>>>>>>> browser: pgBrowser, >>>>>>>>> childOfCatalogType: childOfCatalogType, >>>>>>>>> }); >>>>>>>>> } >>>>>>>>> >>>>>>>>> With respect to the above code: this bind pattern looks good and >>>>>>>>> seems like the idiomatic way to handle this in JavaScript. On a >>>>>>>>> lighter >>>>>>>>> node, I don’t even see the need for an additional method to wrap it. >>>>>>>>> The >>>>>>>>> invocation could have easily been like canCreate: >>>>>>>>> canCreateObject.bind({ browser: pgBrowser, childOfCatalogType: >>>>>>>>> childOfCatalogType }), I don’t feel too strongly here. >>>>>>>>> >>>>>>>> I do agree - we can handle the same problem many ways. >>>>>>>> I prefer object oriented pardigm more in general. >>>>>>>> Any way - I have modified the code with some other changes. >>>>>>>> >>>>>>>>> I renamed it as isValidTreeNodeData, because - we were using it in >>>>>>>>> for testing the tree data. Please suggest me the right place, and >>>>>>>>> name. >>>>>>>>> >>>>>>>>> We’re not sure; maybe after continued refactoring, we will come >>>>>>>>> across more generic functions. At that point we can revisit this and >>>>>>>>> create >>>>>>>>> a utils.js file. >>>>>>>>> >>>>>>>> Sure. >>>>>>>> >>>>>>>>> The original patch was separating them in different places, but - >>>>>>>>> still uses some of the functionalities directly from the tree, which >>>>>>>>> was >>>>>>>>> happening because we have contextual menu. >>>>>>>>> To give a better solution, I can think of putting the menus >>>>>>>>> related code understand ‘sources/tree/menu’ directory. >>>>>>>>> >>>>>>>>> We’re particularly worried because we’re trying to avoid the >>>>>>>>> coupling that we see in the code base today. We want to decouple >>>>>>>>> *application >>>>>>>>> state* from *business domain* logic as much as we can - because >>>>>>>>> this makes the code much easier to understand. We achieve lower >>>>>>>>> coupling by >>>>>>>>> have more suitable interfaces to retrieve *application state* >>>>>>>>> like: anyParent (the menu doesn’t care how this happens). This is >>>>>>>>> the direction that we’re trying to move towards, we just don’t want >>>>>>>>> the >>>>>>>>> package structure to undermine that developer intent. >>>>>>>>> >>>>>>>> I realized after revisiting the code, menu/can_create.js was only >>>>>>>> applicable to the children of the schema/catalog nodes, same as >>>>>>>> 'can_drop_child'. >>>>>>>> We should have put both scripts in the same directory. >>>>>>>> >>>>>>>> Please find the updated patch for the same. >>>>>>>> >>>>>>>> Please review it, and let me know your concerns. >>>>>>>> >>>>>>>> -- Thanks, Ashesh >>>>>>>> >>>>>>>>> How about nodeMenu.isSupportedNode(…)? >>>>>>>>> >>>>>>>>> Naming is one of the hardest problems in programming. I don’t feel >>>>>>>>> too strongly about this one. For now, let’s keep it as is >>>>>>>>> >>>>>>>>> Thanks >>>>>>>>> Anthony && Victoria >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>> >>> >