From 191e9b5e348284b5d49e18f8eb6a2a6c7669e5f0 Mon Sep 17 00:00:00 2001
From: Ivan Shtyrliaiev <ee923925@gmail.com>
Date: Tue, 6 Feb 2024 22:32:14 +0000
Subject: [PATCH] Redirect is current environment page empty empty

If after removing protected environment current
page becomes empty redirect user to the previous
pagination page

Changelog: changed

EE: true
---
 .../store/edit/actions.js                     |  6 +++-
 .../store/edit/actions_spec.js                | 33 +++++++++++++++++++
 2 files changed, 38 insertions(+), 1 deletion(-)

diff --git a/ee/app/assets/javascripts/protected_environments/store/edit/actions.js b/ee/app/assets/javascripts/protected_environments/store/edit/actions.js
index d88a1bc9825af..53bc5757a77cf 100644
--- a/ee/app/assets/javascripts/protected_environments/store/edit/actions.js
+++ b/ee/app/assets/javascripts/protected_environments/store/edit/actions.js
@@ -154,12 +154,16 @@ export const updateApproverInheritance = ({ commit }, { rule, value }) => {
 
 export const editRule = ({ commit }, rule) => commit(types.EDIT_RULE, rule);
 
-export const unprotectEnvironment = ({ state, commit }, environment) => {
+export const unprotectEnvironment = ({ state, commit, dispatch }, environment) => {
   commit(types.REQUEST_UPDATE_PROTECTED_ENVIRONMENT);
 
   return Api.deleteProtectedEnvironment(state.projectId, environment)
     .then(() => {
       commit(types.DELETE_PROTECTED_ENVIRONMENT_SUCCESS, environment);
+
+      if (!state.protectedEnvironments.length && state.pageInfo.page > 1) {
+        dispatch('setPage', state.pageInfo.page - 1);
+      }
     })
     .catch((error) => {
       commit(types.RECEIVE_UPDATE_PROTECTED_ENVIRONMENT_ERROR, error);
diff --git a/ee/spec/frontend/protected_environments/store/edit/actions_spec.js b/ee/spec/frontend/protected_environments/store/edit/actions_spec.js
index 58d396e28daca..93774b8f5ea01 100644
--- a/ee/spec/frontend/protected_environments/store/edit/actions_spec.js
+++ b/ee/spec/frontend/protected_environments/store/edit/actions_spec.js
@@ -426,5 +426,38 @@ describe('ee/protected_environments/store/edit/actions', () => {
         [],
       );
     });
+
+    it('redirects to previous page after deleting if current page is empty', () => {
+      const environment = {
+        name: 'staging',
+      };
+
+      mockedState.pageInfo = {
+        page: 2,
+        nextPage: null,
+        previousPage: 1,
+        perPage: 10,
+        total: 11,
+        totalPages: 2,
+      };
+
+      mock.onDelete(url, environment).replyOnce(HTTP_STATUS_OK);
+
+      return testAction({
+        action: unprotectEnvironment,
+        payload: environment,
+        state: mockedState,
+        expectedMutations: [
+          { type: types.REQUEST_UPDATE_PROTECTED_ENVIRONMENT },
+          { type: types.DELETE_PROTECTED_ENVIRONMENT_SUCCESS, payload: environment },
+        ],
+        expectedActions: [
+          {
+            type: 'setPage',
+            payload: 1,
+          },
+        ],
+      });
+    });
   });
 });
-- 
GitLab