From da3f6c39ad28ab01d42e38d090ffc5ca41bccc50 Mon Sep 17 00:00:00 2001
From: Winnie Hellmann <winnie@gitlab.com>
Date: Wed, 25 Sep 2019 13:48:37 +0000
Subject: [PATCH] Remove actionType from RelatedItemsTreeApp component

---
 .../components/related_items_tree_app.vue           | 11 +++++------
 .../components/related_items_tree_header.vue        |  5 +----
 .../javascripts/related_items_tree/store/getters.js | 13 +++++++++++++
 .../related_items_tree/store/mutations.js           |  7 ++++---
 .../related_items_tree/store/getters_spec.js        | 12 ++++++++++++
 .../related_items_tree/store/mutations_spec.js      |  8 ++------
 .../components/related_items_tree_app_spec.js       | 10 +---------
 .../components/related_items_tree_header_spec.js    | 10 ++--------
 8 files changed, 40 insertions(+), 36 deletions(-)

diff --git a/ee/app/assets/javascripts/related_items_tree/components/related_items_tree_app.vue b/ee/app/assets/javascripts/related_items_tree/components/related_items_tree_app.vue
index 2836214473755..1e232eaaa12ff 100644
--- a/ee/app/assets/javascripts/related_items_tree/components/related_items_tree_app.vue
+++ b/ee/app/assets/javascripts/related_items_tree/components/related_items_tree_app.vue
@@ -10,11 +10,10 @@ import TreeItemRemoveModal from './tree_item_remove_modal.vue';
 import RelatedItemsTreeHeader from './related_items_tree_header.vue';
 import RelatedItemsTreeBody from './related_items_tree_body.vue';
 
-import { PathIdSeparator, ActionType, OVERFLOW_AFTER } from '../constants';
+import { PathIdSeparator, OVERFLOW_AFTER } from '../constants';
 
 export default {
   PathIdSeparator,
-  ActionType,
   OVERFLOW_AFTER,
   components: {
     GlLoadingIcon,
@@ -37,7 +36,7 @@ export default {
       'autoCompleteIssues',
       'pendingReferences',
       'itemInputValue',
-      'actionType',
+      'issuableType',
       'epicsEndpoint',
       'issuesEndpoint',
     ]),
@@ -90,12 +89,12 @@ export default {
       });
     },
     handleAddItemFormCancel() {
-      this.toggleAddItemForm({ toggleState: false, actionType: this.actionType });
+      this.toggleAddItemForm({ toggleState: false });
       this.setPendingReferences([]);
       this.setItemInputValue('');
     },
     handleCreateEpicFormCancel() {
-      this.toggleCreateEpicForm({ toggleState: false, actionType: this.actionType });
+      this.toggleCreateEpicForm({ toggleState: false });
       this.setItemInputValue('');
     },
   },
@@ -123,7 +122,7 @@ export default {
       >
         <add-item-form
           v-if="showAddItemForm"
-          :issuable-type="actionType"
+          :issuable-type="issuableType"
           :input-value="itemInputValue"
           :is-submitting="itemAddInProgress"
           :pending-references="pendingReferences"
diff --git a/ee/app/assets/javascripts/related_items_tree/components/related_items_tree_header.vue b/ee/app/assets/javascripts/related_items_tree/components/related_items_tree_header.vue
index 9060ab7b49031..3891d16a7ea0a 100644
--- a/ee/app/assets/javascripts/related_items_tree/components/related_items_tree_header.vue
+++ b/ee/app/assets/javascripts/related_items_tree/components/related_items_tree_header.vue
@@ -40,10 +40,7 @@ export default {
           toggleState: true,
         });
       } else {
-        this.toggleCreateEpicForm({
-          actionType,
-          toggleState: true,
-        });
+        this.toggleCreateEpicForm({ toggleState: true });
       }
     },
   },
diff --git a/ee/app/assets/javascripts/related_items_tree/store/getters.js b/ee/app/assets/javascripts/related_items_tree/store/getters.js
index 0e8a39c28c043..27f06fa743923 100644
--- a/ee/app/assets/javascripts/related_items_tree/store/getters.js
+++ b/ee/app/assets/javascripts/related_items_tree/store/getters.js
@@ -1,3 +1,4 @@
+import { issuableTypesMap } from 'ee/related_issues/constants';
 import { ChildType, ActionType, PathIdSeparator } from '../constants';
 
 export const autoCompleteSources = () => gl.GfmAutoComplete && gl.GfmAutoComplete.dataSources;
@@ -32,6 +33,18 @@ export const itemAutoCompleteSources = (state, getters) => {
   return state.autoCompleteIssues ? getters.autoCompleteSources : {};
 };
 
+export const issuableType = state => {
+  if (state.actionType === ActionType.Epic) {
+    return issuableTypesMap.EPIC;
+  }
+
+  if (state.actionType === ActionType.Issue) {
+    return issuableTypesMap.ISSUE;
+  }
+
+  return null;
+};
+
 export const itemPathIdSeparator = state =>
   state.actionType === ActionType.Epic ? PathIdSeparator.Epic : PathIdSeparator.Issue;
 
diff --git a/ee/app/assets/javascripts/related_items_tree/store/mutations.js b/ee/app/assets/javascripts/related_items_tree/store/mutations.js
index 9170c099e65a1..e25ffe0b7446d 100644
--- a/ee/app/assets/javascripts/related_items_tree/store/mutations.js
+++ b/ee/app/assets/javascripts/related_items_tree/store/mutations.js
@@ -121,13 +121,14 @@ export default {
   },
 
   [types.TOGGLE_ADD_ITEM_FORM](state, { actionType, toggleState }) {
-    state.actionType = actionType;
+    if (actionType) {
+      state.actionType = actionType;
+    }
     state.showAddItemForm = toggleState;
     state.showCreateEpicForm = false;
   },
 
-  [types.TOGGLE_CREATE_EPIC_FORM](state, { actionType, toggleState }) {
-    state.actionType = actionType;
+  [types.TOGGLE_CREATE_EPIC_FORM](state, { toggleState }) {
     state.showCreateEpicForm = toggleState;
     state.showAddItemForm = false;
   },
diff --git a/ee/spec/frontend/related_items_tree/store/getters_spec.js b/ee/spec/frontend/related_items_tree/store/getters_spec.js
index 6da7cb8c05af6..192f3344de9d3 100644
--- a/ee/spec/frontend/related_items_tree/store/getters_spec.js
+++ b/ee/spec/frontend/related_items_tree/store/getters_spec.js
@@ -2,6 +2,7 @@ import * as getters from 'ee/related_items_tree/store/getters';
 
 import createDefaultState from 'ee/related_items_tree/store/state';
 
+import { issuableTypesMap } from 'ee/related_issues/constants';
 import { ChildType, ActionType } from 'ee/related_items_tree/constants';
 
 import {
@@ -142,6 +143,17 @@ describe('RelatedItemsTree', () => {
         });
       });
 
+      describe('issuableType', () => {
+        it.each`
+          actionType          | expectedValue
+          ${null}             | ${null}
+          ${ActionType.Epic}  | ${issuableTypesMap.EPIC}
+          ${ActionType.Issue} | ${issuableTypesMap.ISSUE}
+        `('for $actionType returns $expectedValue', ({ actionType, expectedValue }) => {
+          expect(getters.issuableType({ actionType })).toBe(expectedValue);
+        });
+      });
+
       describe('itemPathIdSeparator', () => {
         it('returns string containing pathIdSeparator for `Epic` when `state.actionType` is set to `Epic`', () => {
           state.actionType = ActionType.Epic;
diff --git a/ee/spec/frontend/related_items_tree/store/mutations_spec.js b/ee/spec/frontend/related_items_tree/store/mutations_spec.js
index d8a3b0998fb96..1485e1b0400b4 100644
--- a/ee/spec/frontend/related_items_tree/store/mutations_spec.js
+++ b/ee/spec/frontend/related_items_tree/store/mutations_spec.js
@@ -379,15 +379,11 @@ describe('RelatedItemsTree', () => {
       });
 
       describe(types.TOGGLE_CREATE_EPIC_FORM, () => {
-        it('should set value of `actionType`, `showCreateEpicForm` as it is and `showAddItemForm` as false on state', () => {
-          const data = {
-            actionType: 'Epic',
-            toggleState: true,
-          };
+        it('should set value of `showCreateEpicForm` as it is and `showAddItemForm` as false on state', () => {
+          const data = { toggleState: true };
 
           mutations[types.TOGGLE_CREATE_EPIC_FORM](state, data);
 
-          expect(state.actionType).toBe(data.actionType);
           expect(state.showCreateEpicForm).toBe(data.toggleState);
           expect(state.showAddItemForm).toBe(false);
         });
diff --git a/ee/spec/javascripts/related_items_tree/components/related_items_tree_app_spec.js b/ee/spec/javascripts/related_items_tree/components/related_items_tree_app_spec.js
index 647dd1f2dabeb..1f181bf31a882 100644
--- a/ee/spec/javascripts/related_items_tree/components/related_items_tree_app_spec.js
+++ b/ee/spec/javascripts/related_items_tree/components/related_items_tree_app_spec.js
@@ -124,10 +124,7 @@ describe('RelatedItemsTreeApp', () => {
 
         wrapper.vm.handleAddItemFormCancel();
 
-        expect(wrapper.vm.toggleAddItemForm).toHaveBeenCalledWith({
-          toggleState: false,
-          actionType: '',
-        });
+        expect(wrapper.vm.toggleAddItemForm).toHaveBeenCalledWith({ toggleState: false });
       });
 
       it('calls `setPendingReferences` action with empty array', () => {
@@ -152,11 +149,6 @@ describe('RelatedItemsTreeApp', () => {
         spyOn(wrapper.vm, 'toggleCreateEpicForm');
 
         wrapper.vm.handleCreateEpicFormCancel();
-
-        expect(wrapper.vm.toggleCreateEpicForm).toHaveBeenCalledWith({
-          toggleState: false,
-          actionType: '',
-        });
       });
 
       it('calls `setItemInputValue` action with empty string', () => {
diff --git a/ee/spec/javascripts/related_items_tree/components/related_items_tree_header_spec.js b/ee/spec/javascripts/related_items_tree/components/related_items_tree_header_spec.js
index ec6c122650e28..5dae5cf5cd3ba 100644
--- a/ee/spec/javascripts/related_items_tree/components/related_items_tree_header_spec.js
+++ b/ee/spec/javascripts/related_items_tree/components/related_items_tree_header_spec.js
@@ -73,15 +73,9 @@ describe('RelatedItemsTree', () => {
         it('calls `toggleCreateEpicForm` action when provided `id` param value is not `0`', () => {
           spyOn(wrapper.vm, 'toggleCreateEpicForm');
 
-          wrapper.vm.handleActionClick({
-            id: 1,
-            actionType,
-          });
+          wrapper.vm.handleActionClick({ id: 1 });
 
-          expect(wrapper.vm.toggleCreateEpicForm).toHaveBeenCalledWith({
-            actionType,
-            toggleState: true,
-          });
+          expect(wrapper.vm.toggleCreateEpicForm).toHaveBeenCalledWith({ toggleState: true });
         });
       });
     });
-- 
GitLab