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
>>>>>>>>> ​
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>
>>>
>

Reply via email to