diff --git a/app/assets/javascripts/groups_projects/components/more_actions_dropdown.vue b/app/assets/javascripts/groups_projects/components/more_actions_dropdown.vue new file mode 100644 index 0000000000000000000000000000000000000000..50392de0b67d8c110d4c7ec338abb988ce8142bb --- /dev/null +++ b/app/assets/javascripts/groups_projects/components/more_actions_dropdown.vue @@ -0,0 +1,154 @@ + + + diff --git a/app/assets/javascripts/groups_projects/init_more_actions_dropdown.js b/app/assets/javascripts/groups_projects/init_more_actions_dropdown.js new file mode 100644 index 0000000000000000000000000000000000000000..5d83f9ed3b2e78598912591c432b7b6ee6db51ac --- /dev/null +++ b/app/assets/javascripts/groups_projects/init_more_actions_dropdown.js @@ -0,0 +1,36 @@ +import Vue from 'vue'; +import { parseBoolean } from '~/lib/utils/common_utils'; +import MoreActionsDropdown from '~/groups_projects/components/more_actions_dropdown.vue'; + +export default function InitMoreActionsDropdown() { + const el = document.querySelector('.js-groups-projects-more-actions-dropdown'); + + if (!el) { + return false; + } + + const { + isGroup, + id, + leavePath, + leaveConfirmMessage, + withdrawPath, + withdrawConfirmMessage, + requestAccessPath, + } = el.dataset; + + return new Vue({ + el, + name: 'MoreActionsDropdownRoot', + provide: { + isGroup: parseBoolean(isGroup), + id, + leavePath, + leaveConfirmMessage, + withdrawPath, + withdrawConfirmMessage, + requestAccessPath, + }, + render: (createElement) => createElement(MoreActionsDropdown), + }); +} diff --git a/app/assets/javascripts/pages/groups/show/index.js b/app/assets/javascripts/pages/groups/show/index.js index f6a4ca0f360e2ea2f499bc2824040995869e433c..1c6c3c0c518eb978cc18e06c971e7cbc5022eeca 100644 --- a/app/assets/javascripts/pages/groups/show/index.js +++ b/app/assets/javascripts/pages/groups/show/index.js @@ -2,10 +2,12 @@ import leaveByUrl from '~/namespaces/leave_by_url'; import { initGroupOverviewTabs } from '~/groups/init_overview_tabs'; import { initGroupReadme } from '~/groups/init_group_readme'; import initReadMore from '~/read_more'; +import InitMoreActionsDropdown from '~/groups_projects/init_more_actions_dropdown'; import initGroupDetails from '../shared/group_details'; -leaveByUrl('group'); initGroupDetails(); initGroupOverviewTabs(); initReadMore(); initGroupReadme(); +InitMoreActionsDropdown(); +leaveByUrl('group'); diff --git a/app/assets/javascripts/pages/projects/show/index.js b/app/assets/javascripts/pages/projects/show/index.js index 98c58515d24887c2aeab6ff9ec41ea67ad1d3631..af7616c6f6f84ea630c1b55c1f4480d5af413ec5 100644 --- a/app/assets/javascripts/pages/projects/show/index.js +++ b/app/assets/javascripts/pages/projects/show/index.js @@ -8,6 +8,7 @@ import { initUploadFileTrigger } from '~/projects/upload_file'; import initReadMore from '~/read_more'; import initForksButton from '~/forks/init_forks_button'; import initAmbiguousRefModal from '~/ref/init_ambiguous_ref_modal'; +import InitMoreActionsDropdown from '~/groups_projects/init_more_actions_dropdown'; // Project show page loads different overview content based on user preferences if (document.getElementById('js-tree-list')) { @@ -34,8 +35,6 @@ if (document.querySelector('.project-show-activity')) { .catch(() => {}); } -leaveByUrl('project'); - initVueNotificationsDropdown(); new ShortcutsNavigation(); // eslint-disable-line no-new @@ -61,3 +60,5 @@ if (document.querySelector('.js-autodevops-banner')) { } initForksButton(); +InitMoreActionsDropdown(); +leaveByUrl('project'); diff --git a/app/assets/javascripts/projects/tree/components/commit_pipeline_status.vue b/app/assets/javascripts/projects/tree/components/commit_pipeline_status.vue index 074cddac42221e1856c04e1c1b1422537c148505..ff96fa99683473f2dd21bc5c8e6eb49a8010b37b 100644 --- a/app/assets/javascripts/projects/tree/components/commit_pipeline_status.vue +++ b/app/assets/javascripts/projects/tree/components/commit_pipeline_status.vue @@ -92,7 +92,7 @@ export default {