diff --git a/core/src/plugins/gui.ajax/res/js/es6/model/Action.es6 b/core/src/plugins/gui.ajax/res/js/es6/model/Action.es6 index 3bb6e94d3e..ec2347a119 100644 --- a/core/src/plugins/gui.ajax/res/js/es6/model/Action.es6 +++ b/core/src/plugins/gui.ajax/res/js/es6/model/Action.es6 @@ -209,12 +209,12 @@ class Action extends Observable{ /** * Updates the action status on context change + * @param PydioDataModel dataModel + * @param boolean usersEnabled + * @param string crtUser * @returns void */ - fireContextChange(){ - if(arguments.length < 3) return; - var usersEnabled = arguments[0]; - var crtUser = arguments[1]; + fireContextChange(dataModel, usersEnabled, crtUser){ var crtIsRecycle = false; var crtInZip = false; @@ -222,7 +222,7 @@ class Action extends Observable{ var crtAjxpMime = ''; var crtIsReadOnly = false; - var crtNode = arguments[2]; + var crtNode = dataModel.getContextNode(); if(crtNode){ crtIsRecycle = (crtNode.getAjxpMime() == "ajxp_recycle"); crtInZip = crtNode.hasAjxpMimeInBranch("ajxp_browsable_archive"); @@ -284,7 +284,8 @@ class Action extends Observable{ if(!this.context.root && crtIsRoot){ return this.hideForContext(); } - this.showForContext(); + + this.showForContext(dataModel); } @@ -663,11 +664,11 @@ class Action extends Observable{ /** * Changes show/hide state */ - showForContext(){ + showForContext(dataModel){ this.contextHidden = false; this.show(); if(this.selectionContext){ - this.fireSelectionChange(); + this.fireSelectionChange(dataModel); } } diff --git a/core/src/plugins/gui.ajax/res/js/es6/model/Controller.es6 b/core/src/plugins/gui.ajax/res/js/es6/model/Controller.es6 index 9c6e819645..395c332675 100644 --- a/core/src/plugins/gui.ajax/res/js/es6/model/Controller.es6 +++ b/core/src/plugins/gui.ajax/res/js/es6/model/Controller.es6 @@ -441,12 +441,9 @@ class Controller extends Observable{ * by triggering ajaxplorer:actions_refreshed event. */ fireSelectionChange(){ - var userSelection = null; - userSelection = this._dataModel; - if(userSelection.isEmpty()) userSelection = null; this.actions.forEach(function(action){ - action.fireSelectionChange(userSelection); - }); + action.fireSelectionChange(this._dataModel); + }.bind(this)); if(this.localDataModel){ this.notify("actions_refreshed"); }else{ @@ -459,11 +456,10 @@ class Controller extends Observable{ * by triggering ajaxplorer:actions_refreshed event. */ fireContextChange(){ - var crtNode = this._dataModel.getContextNode(); this.actions.forEach(function(action){ - action.fireContextChange(this.usersEnabled, - this.oUser, - crtNode); + action.fireContextChange(this._dataModel, + this.usersEnabled, + this.oUser); }.bind(this)); if(this.localDataModel){ this.notify("actions_refreshed"); diff --git a/core/src/plugins/gui.ajax/res/js/es6/model/PydioDataModel.es6 b/core/src/plugins/gui.ajax/res/js/es6/model/PydioDataModel.es6 index 3196d198a2..68fbb03ea3 100644 --- a/core/src/plugins/gui.ajax/res/js/es6/model/PydioDataModel.es6 +++ b/core/src/plugins/gui.ajax/res/js/es6/model/PydioDataModel.es6 @@ -391,6 +391,14 @@ class PydioDataModel extends Observable{ parent.addChild(node); } }else{ + if(node.getMetadata().get("original_path") === "/" && node.getPath() === "/"){ + n = this.getRootNode(); + n._metadata = node.getMetadata(); + if(setSelectedAfterUpdate && this.getContextNode() == n) { + this.setSelectedNodes([n], {}); + } + return; + } fake = new AjxpNode(original); n = fake.findInArbo(this.getRootNode(), undefined); if(n && !n.isMoreRecentThan(node)){ diff --git a/core/src/plugins/gui.ajax/res/js/ui/prototype/class.ActionsToolbar.js b/core/src/plugins/gui.ajax/res/js/ui/prototype/class.ActionsToolbar.js index 04194ad845..e5d5f59609 100644 --- a/core/src/plugins/gui.ajax/res/js/ui/prototype/class.ActionsToolbar.js +++ b/core/src/plugins/gui.ajax/res/js/ui/prototype/class.ActionsToolbar.js @@ -423,9 +423,10 @@ Class.create("ActionsToolbar", AjxpPane, { attachListeners : function(button, action){ if(this.options.attachToNode){ - action.fireContextChange(ajaxplorer.usersEnabled, ajaxplorer.user, this.options.attachToNode.getParent()); var fakeDm = new PydioDataModel(); + fakeDm.setContextNode(this.options.attachToNode.getParent()); fakeDm.setSelectedNodes([this.options.attachToNode]); + action.fireContextChange(fakeDm, pydio.usersEnabled, pydio.user); action.fireSelectionChange(fakeDm); if(action.deny) { button.hideButton(); diff --git a/core/src/plugins/gui.ajax/res/js/ui/reactjs/jsx/ReactPydioComponents.js b/core/src/plugins/gui.ajax/res/js/ui/reactjs/jsx/ReactPydioComponents.js index 1fbc7e3a52..ed0936043d 100644 --- a/core/src/plugins/gui.ajax/res/js/ui/reactjs/jsx/ReactPydioComponents.js +++ b/core/src/plugins/gui.ajax/res/js/ui/reactjs/jsx/ReactPydioComponents.js @@ -716,8 +716,8 @@ var actionName = event.currentTarget.getAttribute("data-action"); this.props.dataModel.setSelectedNodes([this.props.node]); var a = global.pydio.Controller.getActionByName(actionName); - a.fireContextChange(true, global.pydio.user, this.props.dataModel.getContextNode()); - a.fireSelectionChange(this.props.dataModel); + a.fireContextChange(this.props.dataModel, true, global.pydio.user); + //a.fireSelectionChange(this.props.dataModel); a.apply([this.props.dataModel]); event.stopPropagation(); event.preventDefault(); @@ -1551,8 +1551,8 @@ }); dm.setSelectedNodes(selNodes); var a = global.pydio.Controller.getActionByName(actionName); - a.fireContextChange(true, global.pydio.user, dm.getContextNode()); - a.fireSelectionChange(dm); + a.fireContextChange(dm, true, global.pydio.user); + //a.fireSelectionChange(dm); a.apply([dm]); ev.stopPropagation(); @@ -1568,8 +1568,8 @@ }else{ dm.setSelectedNodes([node]); global.pydio.Controller.actions.forEach(function(a){ - a.fireContextChange(true, global.pydio.user, dm.getContextNode()); - a.fireSelectionChange(dm); + a.fireContextChange(dm, true, global.pydio.user); + //a.fireSelectionChange(dm); if(a.context.selection && a.context.actionBar && a.selectionContext[cacheKey] && !a.deny && a.options.icon_class && (!this.props.actionBarGroups || this.props.actionBarGroups.indexOf(a.context.actionBarGroup) !== -1) ) {