From c9d43ffdbab5b7ac6f96700236ab6f2ec7303c41 Mon Sep 17 00:00:00 2001 From: Alex Andreev Date: Mon, 13 Feb 2023 16:52:42 +0300 Subject: [PATCH] Fix: create/edit resource tab Save & Close button behavior (#7124) * Close dock tab only if submit() resolved Signed-off-by: Alex Andreev * Close dock tab only if all resources successfully created Signed-off-by: Alex Andreev * Simpler error throw Signed-off-by: Alex Andreev --------- Signed-off-by: Alex Andreev --- .../edit-namespace-from-new-tab.test.tsx.snap | 173 +++++++++++++++++- .../edit-namespace-from-new-tab.test.tsx | 3 +- .../components/dock/create-resource/view.tsx | 12 +- .../edit-resource-model.injectable.tsx | 2 + .../renderer/components/dock/info-panel.tsx | 11 +- 5 files changed, 190 insertions(+), 11 deletions(-) diff --git a/packages/core/src/features/cluster/namespaces/__snapshots__/edit-namespace-from-new-tab.test.tsx.snap b/packages/core/src/features/cluster/namespaces/__snapshots__/edit-namespace-from-new-tab.test.tsx.snap index 6675611fca..832ee400c8 100644 --- a/packages/core/src/features/cluster/namespaces/__snapshots__/edit-namespace-from-new-tab.test.tsx.snap +++ b/packages/core/src/features/cluster/namespaces/__snapshots__/edit-namespace-from-new-tab.test.tsx.snap @@ -10119,11 +10119,11 @@ exports[`cluster/namespaces - edit namespace from new tab when navigating to nam class="footer" >
+ > + +
+ + + fullscreen + + +
+ Fit to window +
+ + + keyboard_arrow_down + + +
+ Minimize +
+
+
+
+
+
+
+
+ + Kind: + +
+ Namespace +
+ + Name: + +
+ some-name +
+ + Namespace: + +
+ default +
+
+
+
+ + + +
+
diff --git a/packages/core/src/features/cluster/namespaces/edit-namespace-from-new-tab.test.tsx b/packages/core/src/features/cluster/namespaces/edit-namespace-from-new-tab.test.tsx index c6102f3f24..52796fc314 100644 --- a/packages/core/src/features/cluster/namespaces/edit-namespace-from-new-tab.test.tsx +++ b/packages/core/src/features/cluster/namespaces/edit-namespace-from-new-tab.test.tsx @@ -401,8 +401,7 @@ metadata: expect(rendered.baseElement).toMatchSnapshot(); }); - // TODO: Not doable at the moment because info panel controls closing of the tab - xit("does not close the dock tab", () => { + it("does not close the dock tab", () => { expect( rendered.getByTestId("dock-tab-for-some-first-tab-id"), ).toBeInTheDocument(); diff --git a/packages/core/src/renderer/components/dock/create-resource/view.tsx b/packages/core/src/renderer/components/dock/create-resource/view.tsx index 00221a7b32..d72af4b282 100644 --- a/packages/core/src/renderer/components/dock/create-resource/view.tsx +++ b/packages/core/src/renderer/components/dock/create-resource/view.tsx @@ -76,7 +76,7 @@ class NonInjectedCreateResource extends React.Component => { + create = async (): Promise => { const { apiManager, getDetailsUrl, navigate, requestKubeObjectCreation } = this.props; if (this.error || !this.data?.trim()) { @@ -98,7 +98,7 @@ class NonInjectedCreateResource extends React.Component result.status === "rejected")) { + return; + } + + return "All resources have been successfully created"; }; renderControls() { diff --git a/packages/core/src/renderer/components/dock/edit-resource/edit-resource-model/edit-resource-model.injectable.tsx b/packages/core/src/renderer/components/dock/edit-resource/edit-resource-model/edit-resource-model.injectable.tsx index f7efb026d8..a6ffe22423 100644 --- a/packages/core/src/renderer/components/dock/edit-resource/edit-resource-model/edit-resource-model.injectable.tsx +++ b/packages/core/src/renderer/components/dock/edit-resource/edit-resource-model/edit-resource-model.injectable.tsx @@ -174,5 +174,7 @@ export class EditResourceModel { runInAction(() => { this.editingResource.firstDraft = currentValue; }); + + return result.response.toString(); }; } diff --git a/packages/core/src/renderer/components/dock/info-panel.tsx b/packages/core/src/renderer/components/dock/info-panel.tsx index 48a53a0308..8f1ac32266 100644 --- a/packages/core/src/renderer/components/dock/info-panel.tsx +++ b/packages/core/src/renderer/components/dock/info-panel.tsx @@ -93,18 +93,25 @@ class NonInjectedInfoPanel extends Component { if (showNotifications && result) { this.props.showSuccessNotification(result); } + + return result; } catch (error) { if (showNotifications) { this.props.showCheckedErrorNotification(error, "Unknown error while submitting"); } + + return false; } finally { this.waiting = false; } }; submitAndClose = async () => { - await this.submit(); - this.close(); + const result = await this.submit(); + + if (result) { + this.close(); + } }; close = () => {