Skip to content

Commit

Permalink
fixup! fixup! CHE-10097: fix unexpected page scroll
Browse files Browse the repository at this point in the history
  • Loading branch information
akurinnoy committed Jul 13, 2018
1 parent 6289611 commit 5c9d688
Show file tree
Hide file tree
Showing 5 changed files with 37 additions and 21 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@
<!-- Agents -->
<che-label-container che-label-name="Agents">
<div class="config-params-table">
<che-machine-agents agents="workspaceMachineConfigController.machineConfig.installers"
<che-machine-agents selected-machine="workspaceMachineConfigController.machineConfig"
on-change="workspaceMachineConfigController.updateAgents()"></che-machine-agents>
</div>
</che-label-container>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -153,9 +153,7 @@ export class MachineSelectorController {
}

let name = this.selectedMachine && names.indexOf(this.selectedMachine.name) >= 0 ? this.selectedMachine.name : this.machinesList[0].name;
this.$timeout(() => {
this.updateData(name);
}, 500);
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@
<che-machine-selector content-title="Workspace Installers"
workspace-details="workspaceDetailsController.workspaceDetails"
on-change="workspaceDetailsController.checkEditMode(true)">
<che-machine-agents agents="machine.installers"
<che-machine-agents selected-machine="machine"
on-change="onChange()"></che-machine-agents>
</che-machine-selector>
</md-tab-body>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
*/
'use strict';
import {CheAgent} from '../../../../components/api/che-agent.factory';
import { IEnvironmentManagerMachine } from '../../../../../target/dist/components/api/environment/environment-manager-machine';

export interface IAgentItem extends che.IAgent {
isEnabled: boolean;
Expand All @@ -27,7 +28,7 @@ const LATEST: string = 'latest';
*/
export class MachineAgentsController {

static $inject = ['$scope', 'cheAgent', '$timeout'];
static $inject = ['$scope', 'cheAgent', '$timeout', '$q'];

onChange: Function;
agentOrderBy = 'name';
Expand All @@ -36,38 +37,54 @@ export class MachineAgentsController {
private cheAgent: CheAgent;
private $timeout: ng.ITimeoutService;
private timeoutPromise: ng.IPromise<any>;
private agents: Array<string>;
private machine: IEnvironmentManagerMachine;
private machineAgentsList: Array<string>;
private availableAgents: Array<che.IAgent>;
private agentsToUpdate: Array<IAgentItem> = [];

/**
* Default constructor that is using resource
*/
constructor($scope: ng.IScope, cheAgent: CheAgent, $timeout: ng.ITimeoutService) {
constructor($scope: ng.IScope, cheAgent: CheAgent, $timeout: ng.ITimeoutService, $q: ng.IQService) {
this.cheAgent = cheAgent;
this.$timeout = $timeout;

this.availableAgents = cheAgent.getAgents();
const availableAgentsDefer = $q.defer();
if (this.availableAgents && this.availableAgents.length) {
this.buildAgentsList();
availableAgentsDefer.resolve();
} else {
cheAgent.fetchAgents().then(() => {
this.availableAgents = cheAgent.getAgents();
this.buildAgentsList();
availableAgentsDefer.resolve();
});
}

let agentsCopy = [];
let resolved = false;
const machineAgentsDefer = $q.defer();
const deRegistrationFn = $scope.$watch(() => {
return this.agents;
}, (newList: string[]) => {
if (angular.equals(newList, agentsCopy)) {
return this.machine && this.machine.installers;
}, (newAgentsList: string[]) => {
if (!resolved && newAgentsList && newAgentsList.length) {
machineAgentsDefer.resolve();
resolved = true;

this.machineAgentsList = angular.copy(newAgentsList);
return;
}

if (angular.equals(newAgentsList, this.machineAgentsList)) {
return;
}
agentsCopy = angular.copy(newList);

this.machineAgentsList = angular.copy(newAgentsList);
this.buildAgentsList();
});

$q.all([availableAgentsDefer.promise, machineAgentsDefer.promise]).then(() => {
this.buildAgentsList();
}) ;

$scope.$on('$destroy', () => {
deRegistrationFn();
if (this.timeoutPromise) {
Expand All @@ -80,7 +97,7 @@ export class MachineAgentsController {
* Builds agents list.
*/
buildAgentsList(): void {
if (!this.agents) {
if (!this.machineAgentsList) {
return;
}

Expand All @@ -101,16 +118,17 @@ export class MachineAgentsController {

this.timeoutPromise = this.$timeout(() => {
this.agentsToUpdate.forEach((agent: IAgentItem) => {
const index = this.agents.indexOf(agent.id);
const index = this.machineAgentsList.indexOf(agent.id);
if (agent.isEnabled) {
if (index === -1) {
this.agents.push(agent.id);
this.machineAgentsList.push(agent.id);
}
} else if (index >= 0) {
this.agents.splice(index, 1);
this.machineAgentsList.splice(index, 1);
}
});
this.agentsToUpdate.length = 0;
this.machine.installers = angular.copy(this.machineAgentsList);

this.buildAgentsList();
this.onChange();
Expand All @@ -132,8 +150,8 @@ export class MachineAgentsController {
* @param agentItem {IAgentItem}
*/
checkEnabled(agentItem: IAgentItem): void {
for (let i = 0; i < this.agents.length; i++) {
let agent = this.agents[i];
for (let i = 0; i < this.machineAgentsList.length; i++) {
let agent = this.machineAgentsList[i];
// try to extract agent's version in format id:version:
let groups = agent.match(/[^:]+(:(.+)){0,1}/);
let id;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ export class MachineAgents implements ng.IDirective {
constructor() {
// scope values
this.scope = {
agents: '=',
machine: '=selectedMachine',
onChange: '&'
};
}
Expand Down

0 comments on commit 5c9d688

Please sign in to comment.