Hi Aditya Sure. I did not find moving > web/pgadmin/tools/datagrid/static/js/datagrid.js. Please correct me if I am > missing anything.
Generally speaking, I agree with moving/deleting files if it makes sense. But in regards to web/pgadmin/tools/datagrid/static/js/datagrid.js, it looks like this is still being used in web/pgadmin/tools/sqleditor/static/js/sqleditor.js with Datagrid.create_transaction Sincerely, Victoria On Thu, Jun 7, 2018 at 12:35 AM Aditya Toshniwal < aditya.toshni...@enterprisedb.com> wrote: > Hi Victoria, > > On Wed, Jun 6, 2018 at 8:55 PM, Victoria Henry <vhe...@pivotal.io> wrote: > >> 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? >> > > Sure. I did not find moving > web/pgadmin/tools/datagrid/static/js/datagrid.js. Please correct me if I am > missing anything. > >> >> 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 >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>> >>>>>>>> >>>>> >>> >