feat(kubectl-shell): page state refreshes in k8s endpoint do not close shell EE-1628 (#5685)

* converting all kubernetes view reload to partial state heirarchy refresh

* updated helm and kube kustom templates headers to use the reusable k8s page header component
pull/5751/head
zees-dev 2021-09-24 20:21:50 +12:00 committed by GitHub
parent d4f581a596
commit 7d40a83d03
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
20 changed files with 34 additions and 38 deletions

View File

@ -21,7 +21,7 @@ export default class HelmAddRepositoryController {
try {
await this.HelmService.addHelmRepository(this.EndpointProvider.currentEndpoint().Id, { url: this.state.repository });
this.Notifications.success('Helm repository added successfully');
this.$state.reload();
this.$state.reload(this.$state.current);
} catch (err) {
this.Notifications.error('Installation error', err);
} finally {

View File

@ -1,11 +1,6 @@
<rd-header id="view-top">
<rd-header-title title-text="Helm">
<a data-toggle="tooltip" title="Refresh" ui-sref="kubernetes.templates.helm" ui-sref-opts="{reload: true}">
<i class="fa fa-sync" aria-hidden="true"></i>
</a>
</rd-header-title>
<rd-header-content>Charts</rd-header-content>
</rd-header>
<kubernetes-view-header title="Helm" state="kubernetes.templates.helm" view-ready="true">
Charts
</kubernetes-view-header>
<information-panel title-text="Information" ng-if="!$ctrl.state.chart">
<span class="small text-muted">

View File

@ -10,6 +10,12 @@ export default class KubectlShellController {
this.EndpointProvider = EndpointProvider;
this.LocalStorage = LocalStorage;
this.Notifications = Notifications;
$window.onbeforeunload = () => {
if (this.state.shell.connected) {
return '';
}
};
}
disconnect() {

View File

@ -1,6 +1,6 @@
<rd-header ng-if="$ctrl.viewReady">
<rd-header-title title-text="{{ $ctrl.title }}">
<a data-toggle="tooltip" title="refresh the view" ui-sref="{{ $ctrl.state }}" ui-sref-opts="{reload: true}" ng-if="$ctrl.viewReady">
<a data-toggle="tooltip" title="refresh the view" ui-sref="{{ $ctrl.state }}" ui-sref-opts="{reload: $ctrl.state}" ng-if="$ctrl.viewReady">
<i class="fa fa-sm fa-sync" aria-hidden="true" data-cy="component-refreshTableButton"></i>
</a>
</rd-header-title>

View File

@ -1,11 +1,6 @@
<rd-header id="view-top">
<rd-header-title title-text="Custom Templates">
<a data-toggle="tooltip" title="Refresh" ui-sref="kubernetes.templates.custom" ui-sref-opts="{reload: true}">
<i class="fa fa-sync" aria-hidden="true"></i>
</a>
</rd-header-title>
<rd-header-content>Custom Templates</rd-header-content>
</rd-header>
<kubernetes-view-header title="Custom Templates" state="kubernetes.templates.custom" view-ready="true">
Custom Templates
</kubernetes-view-header>
<div class="row">
<div class="col-sm-12">

View File

@ -44,7 +44,7 @@ export default class KubernetesRegistryAccessController {
await this.EndpointService.updateRegistryAccess(this.endpoint.Id, this.registry.Id, {
namespaces,
});
this.$state.reload();
this.$state.reload(this.$state.current);
} catch (err) {
this.Notifications.error('Failure', err, 'Failed saving registry access');
}

View File

@ -45,7 +45,7 @@ class KubernetesApplicationsController {
} finally {
--actionCount;
if (actionCount === 0) {
this.$state.reload();
this.$state.reload(this.$state.current);
}
}
}
@ -79,7 +79,7 @@ class KubernetesApplicationsController {
} finally {
--actionCount;
if (actionCount === 0) {
this.$state.reload();
this.$state.reload(this.$state.current);
}
}
}

View File

@ -169,7 +169,7 @@ class KubernetesCreateApplicationController {
this.state.updateWebEditorInProgress = true;
await this.StackService.updateKubeStack({ EndpointId: this.endpoint.Id, Id: this.application.StackId }, this.stackFileContent, null);
this.state.isEditorDirty = false;
await this.$state.reload();
await this.$state.reload(this.$state.current);
} catch (err) {
this.Notifications.error('Failure', err, 'Failed redeploying application');
} finally {

View File

@ -215,7 +215,7 @@ class KubernetesApplicationController {
const revision = _.nth(this.application.Revisions, -2);
await this.KubernetesApplicationService.rollback(this.application, revision);
this.Notifications.success('Application successfully rolled back');
this.$state.reload();
this.$state.reload(this.$state.current);
} catch (err) {
this.Notifications.error('Failure', err, 'Unable to rollback the application');
}
@ -236,7 +236,7 @@ class KubernetesApplicationController {
const promises = _.map(this.application.Pods, (item) => this.KubernetesPodService.delete(item));
await Promise.all(promises);
this.Notifications.success('Application successfully redeployed');
this.$state.reload();
this.$state.reload(this.$state.current);
} catch (err) {
this.Notifications.error('Failure', err, 'Unable to redeploy the application');
}
@ -259,7 +259,7 @@ class KubernetesApplicationController {
application.Note = this.formValues.Note;
await this.KubernetesApplicationService.patch(this.application, application, true);
this.Notifications.success('Application successfully updated');
this.$state.reload();
this.$state.reload(this.$state.current);
} catch (err) {
this.Notifications.error('Failure', err, 'Unable to update application');
}

View File

@ -20,7 +20,7 @@ export default class KubernetesHelmApplicationController {
if (releases.length > 0) {
this.state.release = releases[0];
} else {
throw PortainerError(`Release ${this.state.params.name} not found`);
throw new PortainerError(`Release ${this.state.params.name} not found`);
}
} catch (err) {
this.Notifications.error('Failure', err, 'Unable to retrieve helm application details');

View File

@ -253,7 +253,7 @@ class KubernetesNodeController {
await this.drainNode();
}
this.Notifications.success('Node updated successfully');
this.$state.reload();
this.$state.reload(this.$state.current);
} catch (err) {
this.Notifications.error('Failure', err, 'Unable to update node');
}

View File

@ -51,7 +51,7 @@ class KubernetesConfigurationsController {
} finally {
--actionCount;
if (actionCount === 0) {
this.$state.reload();
this.$state.reload(this.$state.current);
}
}
}

View File

@ -107,7 +107,7 @@ class KubernetesConfigurationController {
} else {
await this.KubernetesConfigurationService.update(this.formValues, this.configuration);
this.Notifications.success('Configuration succesfully updated');
this.$state.reload();
this.$state.reload(this.$state.current);
}
} catch (err) {
this.Notifications.error('Failure', err, 'Unable to update configuration');

View File

@ -98,7 +98,7 @@ class KubernetesResourcePoolAccessController {
const accessConfigMap = KubernetesConfigMapHelper.modifiyNamespaceAccesses(angular.copy(this.accessConfigMap), this.pool.Namespace.Name, newAccesses);
await this.KubernetesConfigMapService.updateAccess(accessConfigMap);
this.Notifications.success('Access successfully created');
this.$state.reload();
this.$state.reload(this.$state.current);
} catch (err) {
this.Notifications.error('Failure', err, 'Unable to create accesses');
}
@ -118,7 +118,7 @@ class KubernetesResourcePoolAccessController {
const accessConfigMap = KubernetesConfigMapHelper.modifiyNamespaceAccesses(angular.copy(this.accessConfigMap), this.pool.Namespace.Name, newAccesses);
await this.KubernetesConfigMapService.updateAccess(accessConfigMap);
this.Notifications.success('Access successfully removed');
this.$state.reload();
this.$state.reload(this.$state.current);
} catch (err) {
this.Notifications.error('Failure', err, 'Unable to remove accesses');
} finally {

View File

@ -176,7 +176,7 @@ class KubernetesResourcePoolController {
this.checkDefaults();
await this.KubernetesResourcePoolService.patch(oldFormValues, newFormValues);
this.Notifications.success('Namespace successfully updated', this.pool.Namespace.Name);
this.$state.reload();
this.$state.reload(this.$state.current);
} catch (err) {
this.Notifications.error('Failure', err, 'Unable to create namespace');
} finally {
@ -238,7 +238,7 @@ class KubernetesResourcePoolController {
await this.KubernetesResourcePoolService.toggleSystem(this.endpoint.Id, namespaceName, !this.isSystem);
this.Notifications.success('Namespace successfully updated', namespaceName);
this.$state.reload();
this.$state.reload(this.$state.current);
} catch (err) {
this.Notifications.error('Failure', err, 'Unable to create namespace');
} finally {

View File

@ -29,7 +29,7 @@ class KubernetesResourcePoolsController {
} finally {
--actionCount;
if (actionCount === 0) {
this.$state.reload();
this.$state.reload(this.$state.current);
}
}
}

View File

@ -96,7 +96,7 @@ class KubernetesVolumeController {
this.Notifications.success('Applications successfully redeployed');
}
this.$state.reload();
this.$state.reload(this.$state.current);
} catch (err) {
this.Notifications.error('Failure', err, 'Unable to update volume.');
}

View File

@ -68,7 +68,7 @@ class KubernetesVolumesController {
} finally {
--actionCount;
if (actionCount === 0) {
this.$state.reload();
this.$state.reload(this.$state.current);
}
}
}

View File

@ -55,7 +55,7 @@ class KubernetesAppGitFormController {
this.state.redeployInProgress = true;
await this.StackService.updateKubeGit(this.stack.Id, this.stack.EndpointId, this.namespace, this.formValues);
this.Notifications.success('Pulled and redeployed stack successfully');
await this.$state.reload();
await this.$state.reload(this.$state.current);
} catch (err) {
this.Notifications.error('Failure', err, 'Failed redeploying application');
} finally {

View File

@ -33,7 +33,7 @@ class EndpointAccessController {
this.state.actionInProgress = true;
await this.EndpointService.updateEndpoint(this.$transition$.params().id, this.endpoint);
this.Notifications.success('Access successfully updated');
this.$state.reload();
this.$state.reload(this.$state.current);
} catch (err) {
this.state.actionInProgress = false;
this.Notifications.error('Failure', err, 'Unable to update accesses');