From b45c06fe2bead8b742f529aade31465bce1ef595 Mon Sep 17 00:00:00 2001
From: Coung Ngo <cngo@gitlab.com>
Date: Thu, 9 Dec 2021 08:45:08 +0000
Subject: [PATCH] Organise ~/milestones code

---
 .../available_dropdown_mappings.js            |  2 +-
 app/assets/javascripts/milestones/form.js     | 22 --------
 ...elete_milestone_modal_init.js => index.js} | 52 ++++++++++++++++++-
 .../milestones/init_milestones_show.js        | 11 ----
 .../milestones/milestone_select.js            |  2 +-
 .../promote_milestone_modal_init.js           | 19 -------
 .../{milestone_utils.js => utils.js}          |  0
 .../pages/groups/milestones/edit/index.js     |  2 +-
 .../pages/groups/milestones/new/index.js      |  2 +-
 .../pages/groups/milestones/show/index.js     |  5 +-
 .../pages/projects/milestones/edit/index.js   |  2 +-
 .../pages/projects/milestones/index/index.js  |  3 +-
 .../pages/projects/milestones/new/index.js    |  2 +-
 .../pages/projects/milestones/show/index.js   |  6 +--
 .../tokens/milestone_token.vue                |  2 +-
 .../available_dropdown_mappings.js            |  2 +-
 .../milestone_combobox_spec.js                |  2 +-
 ...{milestone_utils_spec.js => utils_spec.js} |  2 +-
 .../tokens/milestone_token_spec.js            |  4 +-
 19 files changed, 67 insertions(+), 75 deletions(-)
 delete mode 100644 app/assets/javascripts/milestones/form.js
 rename app/assets/javascripts/milestones/{delete_milestone_modal_init.js => index.js} (63%)
 delete mode 100644 app/assets/javascripts/milestones/init_milestones_show.js
 delete mode 100644 app/assets/javascripts/milestones/promote_milestone_modal_init.js
 rename app/assets/javascripts/milestones/{milestone_utils.js => utils.js} (100%)
 rename spec/frontend/milestones/{ => components}/milestone_combobox_spec.js (99%)
 rename spec/frontend/milestones/{milestone_utils_spec.js => utils_spec.js} (95%)

diff --git a/app/assets/javascripts/filtered_search/available_dropdown_mappings.js b/app/assets/javascripts/filtered_search/available_dropdown_mappings.js
index e0281b8f443f..3cd4d48a4a3f 100644
--- a/app/assets/javascripts/filtered_search/available_dropdown_mappings.js
+++ b/app/assets/javascripts/filtered_search/available_dropdown_mappings.js
@@ -1,4 +1,4 @@
-import { sortMilestonesByDueDate } from '~/milestones/milestone_utils';
+import { sortMilestonesByDueDate } from '~/milestones/utils';
 import { mergeUrlParams } from '../lib/utils/url_utility';
 import DropdownAjaxFilter from './dropdown_ajax_filter';
 import DropdownEmoji from './dropdown_emoji';
diff --git a/app/assets/javascripts/milestones/form.js b/app/assets/javascripts/milestones/form.js
deleted file mode 100644
index 40d45d7deb8b..000000000000
--- a/app/assets/javascripts/milestones/form.js
+++ /dev/null
@@ -1,22 +0,0 @@
-import $ from 'jquery';
-import initDatePicker from '~/behaviors/date_picker';
-import GLForm from '~/gl_form';
-import ZenMode from '~/zen_mode';
-
-export default (initGFM = true) => {
-  new ZenMode(); // eslint-disable-line no-new
-  initDatePicker();
-
-  // eslint-disable-next-line no-new
-  new GLForm($('.milestone-form'), {
-    emojis: true,
-    members: initGFM,
-    issues: initGFM,
-    mergeRequests: initGFM,
-    epics: initGFM,
-    milestones: initGFM,
-    labels: initGFM,
-    snippets: initGFM,
-    vulnerabilities: initGFM,
-  });
-};
diff --git a/app/assets/javascripts/milestones/delete_milestone_modal_init.js b/app/assets/javascripts/milestones/index.js
similarity index 63%
rename from app/assets/javascripts/milestones/delete_milestone_modal_init.js
rename to app/assets/javascripts/milestones/index.js
index 3aeff2db2e0d..2ca5f104b4fb 100644
--- a/app/assets/javascripts/milestones/delete_milestone_modal_init.js
+++ b/app/assets/javascripts/milestones/index.js
@@ -1,10 +1,58 @@
+import $ from 'jquery';
 import Vue from 'vue';
+import initDatePicker from '~/behaviors/date_picker';
+import GLForm from '~/gl_form';
 import { BV_SHOW_MODAL } from '~/lib/utils/constants';
+import Milestone from '~/milestones/milestone';
+import Sidebar from '~/right_sidebar';
+import MountMilestoneSidebar from '~/sidebar/mount_milestone_sidebar';
 import Translate from '~/vue_shared/translate';
+import ZenMode from '~/zen_mode';
 import DeleteMilestoneModal from './components/delete_milestone_modal.vue';
+import PromoteMilestoneModal from './components/promote_milestone_modal.vue';
 import eventHub from './event_hub';
 
-export default () => {
+export function initForm(initGFM = true) {
+  new ZenMode(); // eslint-disable-line no-new
+  initDatePicker();
+
+  // eslint-disable-next-line no-new
+  new GLForm($('.milestone-form'), {
+    emojis: true,
+    members: initGFM,
+    issues: initGFM,
+    mergeRequests: initGFM,
+    epics: initGFM,
+    milestones: initGFM,
+    labels: initGFM,
+    snippets: initGFM,
+    vulnerabilities: initGFM,
+  });
+}
+
+export function initShow() {
+  new Milestone(); // eslint-disable-line no-new
+  new Sidebar(); // eslint-disable-line no-new
+  new MountMilestoneSidebar(); // eslint-disable-line no-new
+}
+
+export function initPromoteMilestoneModal() {
+  Vue.use(Translate);
+
+  const promoteMilestoneModal = document.getElementById('promote-milestone-modal');
+  if (!promoteMilestoneModal) {
+    return null;
+  }
+
+  return new Vue({
+    el: promoteMilestoneModal,
+    render(createElement) {
+      return createElement(PromoteMilestoneModal);
+    },
+  });
+}
+
+export function initDeleteMilestoneModal() {
   Vue.use(Translate);
 
   const onRequestFinished = ({ milestoneUrl, successful }) => {
@@ -72,4 +120,4 @@ export default () => {
       });
     },
   });
-};
+}
diff --git a/app/assets/javascripts/milestones/init_milestones_show.js b/app/assets/javascripts/milestones/init_milestones_show.js
deleted file mode 100644
index 8939e1535c1a..000000000000
--- a/app/assets/javascripts/milestones/init_milestones_show.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/* eslint-disable no-new */
-
-import Milestone from '~/milestones/milestone';
-import Sidebar from '~/right_sidebar';
-import MountMilestoneSidebar from '~/sidebar/mount_milestone_sidebar';
-
-export default () => {
-  new Milestone();
-  new Sidebar();
-  new MountMilestoneSidebar();
-};
diff --git a/app/assets/javascripts/milestones/milestone_select.js b/app/assets/javascripts/milestones/milestone_select.js
index 91780d5ee010..c95ec3dd10b6 100644
--- a/app/assets/javascripts/milestones/milestone_select.js
+++ b/app/assets/javascripts/milestones/milestone_select.js
@@ -6,7 +6,7 @@ import { template, escape } from 'lodash';
 import Api from '~/api';
 import initDeprecatedJQueryDropdown from '~/deprecated_jquery_dropdown';
 import { __, sprintf } from '~/locale';
-import { sortMilestonesByDueDate } from '~/milestones/milestone_utils';
+import { sortMilestonesByDueDate } from '~/milestones/utils';
 import axios from '~/lib/utils/axios_utils';
 import { timeFor, parsePikadayDate, dateInWords } from '~/lib/utils/datetime_utility';
 
diff --git a/app/assets/javascripts/milestones/promote_milestone_modal_init.js b/app/assets/javascripts/milestones/promote_milestone_modal_init.js
deleted file mode 100644
index 5472b8c684f3..000000000000
--- a/app/assets/javascripts/milestones/promote_milestone_modal_init.js
+++ /dev/null
@@ -1,19 +0,0 @@
-import Vue from 'vue';
-import Translate from '~/vue_shared/translate';
-import PromoteMilestoneModal from './components/promote_milestone_modal.vue';
-
-Vue.use(Translate);
-
-export default () => {
-  const promoteMilestoneModal = document.getElementById('promote-milestone-modal');
-  if (!promoteMilestoneModal) {
-    return null;
-  }
-
-  return new Vue({
-    el: promoteMilestoneModal,
-    render(createElement) {
-      return createElement(PromoteMilestoneModal);
-    },
-  });
-};
diff --git a/app/assets/javascripts/milestones/milestone_utils.js b/app/assets/javascripts/milestones/utils.js
similarity index 100%
rename from app/assets/javascripts/milestones/milestone_utils.js
rename to app/assets/javascripts/milestones/utils.js
diff --git a/app/assets/javascripts/pages/groups/milestones/edit/index.js b/app/assets/javascripts/pages/groups/milestones/edit/index.js
index 6bf73c2563cb..7fda129a85dc 100644
--- a/app/assets/javascripts/pages/groups/milestones/edit/index.js
+++ b/app/assets/javascripts/pages/groups/milestones/edit/index.js
@@ -1,3 +1,3 @@
-import initForm from '~/milestones/form';
+import { initForm } from '~/milestones';
 
 initForm();
diff --git a/app/assets/javascripts/pages/groups/milestones/new/index.js b/app/assets/javascripts/pages/groups/milestones/new/index.js
index 6bf73c2563cb..7fda129a85dc 100644
--- a/app/assets/javascripts/pages/groups/milestones/new/index.js
+++ b/app/assets/javascripts/pages/groups/milestones/new/index.js
@@ -1,3 +1,3 @@
-import initForm from '~/milestones/form';
+import { initForm } from '~/milestones';
 
 initForm();
diff --git a/app/assets/javascripts/pages/groups/milestones/show/index.js b/app/assets/javascripts/pages/groups/milestones/show/index.js
index 5eec1015447f..f2ab5d783747 100644
--- a/app/assets/javascripts/pages/groups/milestones/show/index.js
+++ b/app/assets/javascripts/pages/groups/milestones/show/index.js
@@ -1,5 +1,4 @@
-import initDeleteMilestoneModal from '~/milestones/delete_milestone_modal_init';
-import initMilestonesShow from '~/milestones/init_milestones_show';
+import { initDeleteMilestoneModal, initShow } from '~/milestones';
 
-initMilestonesShow();
+initShow();
 initDeleteMilestoneModal();
diff --git a/app/assets/javascripts/pages/projects/milestones/edit/index.js b/app/assets/javascripts/pages/projects/milestones/edit/index.js
index 6bf73c2563cb..7fda129a85dc 100644
--- a/app/assets/javascripts/pages/projects/milestones/edit/index.js
+++ b/app/assets/javascripts/pages/projects/milestones/edit/index.js
@@ -1,3 +1,3 @@
-import initForm from '~/milestones/form';
+import { initForm } from '~/milestones';
 
 initForm();
diff --git a/app/assets/javascripts/pages/projects/milestones/index/index.js b/app/assets/javascripts/pages/projects/milestones/index/index.js
index 6912ab9f8bab..ef1c9ab83dbe 100644
--- a/app/assets/javascripts/pages/projects/milestones/index/index.js
+++ b/app/assets/javascripts/pages/projects/milestones/index/index.js
@@ -1,5 +1,4 @@
-import initDeleteMilestoneModal from '~/milestones/delete_milestone_modal_init';
-import initPromoteMilestoneModal from '~/milestones/promote_milestone_modal_init';
+import { initDeleteMilestoneModal, initPromoteMilestoneModal } from '~/milestones';
 
 initDeleteMilestoneModal();
 initPromoteMilestoneModal();
diff --git a/app/assets/javascripts/pages/projects/milestones/new/index.js b/app/assets/javascripts/pages/projects/milestones/new/index.js
index 6bf73c2563cb..7fda129a85dc 100644
--- a/app/assets/javascripts/pages/projects/milestones/new/index.js
+++ b/app/assets/javascripts/pages/projects/milestones/new/index.js
@@ -1,3 +1,3 @@
-import initForm from '~/milestones/form';
+import { initForm } from '~/milestones';
 
 initForm();
diff --git a/app/assets/javascripts/pages/projects/milestones/show/index.js b/app/assets/javascripts/pages/projects/milestones/show/index.js
index 098b3a5f391a..16aac7748da8 100644
--- a/app/assets/javascripts/pages/projects/milestones/show/index.js
+++ b/app/assets/javascripts/pages/projects/milestones/show/index.js
@@ -1,7 +1,5 @@
-import initMilestonesShow from '~/milestones/init_milestones_show';
-import initDeleteMilestoneModal from '~/milestones/delete_milestone_modal_init';
-import initPromoteMilestoneModal from '~/milestones/promote_milestone_modal_init';
+import { initDeleteMilestoneModal, initPromoteMilestoneModal, initShow } from '~/milestones';
 
-initMilestonesShow();
+initShow();
 initDeleteMilestoneModal();
 initPromoteMilestoneModal();
diff --git a/app/assets/javascripts/vue_shared/components/filtered_search_bar/tokens/milestone_token.vue b/app/assets/javascripts/vue_shared/components/filtered_search_bar/tokens/milestone_token.vue
index 523438f459cc..0d3394788fa5 100644
--- a/app/assets/javascripts/vue_shared/components/filtered_search_bar/tokens/milestone_token.vue
+++ b/app/assets/javascripts/vue_shared/components/filtered_search_bar/tokens/milestone_token.vue
@@ -2,7 +2,7 @@
 import { GlFilteredSearchSuggestion } from '@gitlab/ui';
 import createFlash from '~/flash';
 import { __ } from '~/locale';
-import { sortMilestonesByDueDate } from '~/milestones/milestone_utils';
+import { sortMilestonesByDueDate } from '~/milestones/utils';
 import BaseToken from '~/vue_shared/components/filtered_search_bar/tokens/base_token.vue';
 import { DEFAULT_MILESTONES } from '../constants';
 import { stripQuotes } from '../filtered_search_utils';
diff --git a/ee/app/assets/javascripts/filtered_search/available_dropdown_mappings.js b/ee/app/assets/javascripts/filtered_search/available_dropdown_mappings.js
index 3ec5e221f6be..201b26094004 100644
--- a/ee/app/assets/javascripts/filtered_search/available_dropdown_mappings.js
+++ b/ee/app/assets/javascripts/filtered_search/available_dropdown_mappings.js
@@ -2,7 +2,7 @@ import AvailableDropdownMappingsCE from '~/filtered_search/available_dropdown_ma
 import DropdownAjaxFilter from '~/filtered_search/dropdown_ajax_filter';
 import DropdownNonUser from '~/filtered_search/dropdown_non_user';
 import DropdownUser from '~/filtered_search/dropdown_user';
-import { sortMilestonesByDueDate } from '~/milestones/milestone_utils';
+import { sortMilestonesByDueDate } from '~/milestones/utils';
 import DropdownWeight from './dropdown_weight';
 
 export default class AvailableDropdownMappings {
diff --git a/spec/frontend/milestones/milestone_combobox_spec.js b/spec/frontend/milestones/components/milestone_combobox_spec.js
similarity index 99%
rename from spec/frontend/milestones/milestone_combobox_spec.js
rename to spec/frontend/milestones/components/milestone_combobox_spec.js
index 4d1a0a0a4404..1af39aff30ca 100644
--- a/spec/frontend/milestones/milestone_combobox_spec.js
+++ b/spec/frontend/milestones/components/milestone_combobox_spec.js
@@ -7,7 +7,7 @@ import Vuex from 'vuex';
 import { ENTER_KEY } from '~/lib/utils/keys';
 import MilestoneCombobox from '~/milestones/components/milestone_combobox.vue';
 import createStore from '~/milestones/stores/';
-import { projectMilestones, groupMilestones } from './mock_data';
+import { projectMilestones, groupMilestones } from '../mock_data';
 
 const extraLinks = [
   { text: 'Create new', url: 'http://127.0.0.1:3000/h5bp/html5-boilerplate/-/milestones/new' },
diff --git a/spec/frontend/milestones/milestone_utils_spec.js b/spec/frontend/milestones/utils_spec.js
similarity index 95%
rename from spec/frontend/milestones/milestone_utils_spec.js
rename to spec/frontend/milestones/utils_spec.js
index f863f31e5a97..82e31c983985 100644
--- a/spec/frontend/milestones/milestone_utils_spec.js
+++ b/spec/frontend/milestones/utils_spec.js
@@ -1,5 +1,5 @@
 import { useFakeDate } from 'helpers/fake_date';
-import { sortMilestonesByDueDate } from '~/milestones/milestone_utils';
+import { sortMilestonesByDueDate } from '~/milestones/utils';
 
 describe('sortMilestonesByDueDate', () => {
   useFakeDate(2021, 6, 22);
diff --git a/spec/frontend/vue_shared/components/filtered_search_bar/tokens/milestone_token_spec.js b/spec/frontend/vue_shared/components/filtered_search_bar/tokens/milestone_token_spec.js
index 81ec2622f4c5..4a098db33c5c 100644
--- a/spec/frontend/vue_shared/components/filtered_search_bar/tokens/milestone_token_spec.js
+++ b/spec/frontend/vue_shared/components/filtered_search_bar/tokens/milestone_token_spec.js
@@ -9,7 +9,7 @@ import MockAdapter from 'axios-mock-adapter';
 import waitForPromises from 'helpers/wait_for_promises';
 import createFlash from '~/flash';
 import axios from '~/lib/utils/axios_utils';
-import { sortMilestonesByDueDate } from '~/milestones/milestone_utils';
+import { sortMilestonesByDueDate } from '~/milestones/utils';
 
 import { DEFAULT_MILESTONES } from '~/vue_shared/components/filtered_search_bar/constants';
 import MilestoneToken from '~/vue_shared/components/filtered_search_bar/tokens/milestone_token.vue';
@@ -17,7 +17,7 @@ import MilestoneToken from '~/vue_shared/components/filtered_search_bar/tokens/m
 import { mockMilestoneToken, mockMilestones, mockRegularMilestone } from '../mock_data';
 
 jest.mock('~/flash');
-jest.mock('~/milestones/milestone_utils');
+jest.mock('~/milestones/utils');
 
 const defaultStubs = {
   Portal: true,
-- 
GitLab