diff --git a/app/assets/javascripts/api/projects_api.js b/app/assets/javascripts/api/projects_api.js index 1cd7fb0b954..b018db9a02d 100644 --- a/app/assets/javascripts/api/projects_api.js +++ b/app/assets/javascripts/api/projects_api.js @@ -3,6 +3,7 @@ import axios from '../lib/utils/axios_utils'; import { buildApiUrl } from './api_utils'; const PROJECTS_PATH = '/api/:version/projects.json'; +const PROJECT_IMPORT_MEMBERS_PATH = '/api/:version/projects/:id/import_project_members/:project_id'; export function getProjects(query, options, callback = () => {}) { const url = buildApiUrl(PROJECTS_PATH); @@ -25,3 +26,10 @@ export function getProjects(query, options, callback = () => {}) { return { data, headers }; }); } + +export function importProjectMembers(sourceId, targetId) { + const url = buildApiUrl(PROJECT_IMPORT_MEMBERS_PATH) + .replace(':id', sourceId) + .replace(':project_id', targetId); + return axios.post(url); +} diff --git a/app/assets/javascripts/invite_members/components/import_a_project_modal.vue b/app/assets/javascripts/invite_members/components/import_a_project_modal.vue new file mode 100644 index 00000000000..d71468284ca --- /dev/null +++ b/app/assets/javascripts/invite_members/components/import_a_project_modal.vue @@ -0,0 +1,157 @@ + + + diff --git a/app/assets/javascripts/invite_members/components/project_select.vue b/app/assets/javascripts/invite_members/components/project_select.vue new file mode 100644 index 00000000000..b7a3918813b --- /dev/null +++ b/app/assets/javascripts/invite_members/components/project_select.vue @@ -0,0 +1,143 @@ + + diff --git a/app/assets/javascripts/invite_members/init_import_a_project_modal.js b/app/assets/javascripts/invite_members/init_import_a_project_modal.js new file mode 100644 index 00000000000..954347467de --- /dev/null +++ b/app/assets/javascripts/invite_members/init_import_a_project_modal.js @@ -0,0 +1,23 @@ +import Vue from 'vue'; +import ImportAProjectModal from '~/invite_members/components/import_a_project_modal.vue'; + +export default function initImportAProjectModal() { + const el = document.querySelector('.js-import-a-project-modal'); + + if (!el) { + return false; + } + + const { projectId, projectName } = el.dataset; + + return new Vue({ + el, + render: (createElement) => + createElement(ImportAProjectModal, { + props: { + projectId, + projectName, + }, + }), + }); +} diff --git a/app/assets/javascripts/pages/projects/project_members/index.js b/app/assets/javascripts/pages/projects/project_members/index.js index fb0be31834d..0b662c945c6 100644 --- a/app/assets/javascripts/pages/projects/project_members/index.js +++ b/app/assets/javascripts/pages/projects/project_members/index.js @@ -1,4 +1,5 @@ import groupsSelect from '~/groups_select'; +import initImportAProjectModal from '~/invite_members/init_import_a_project_modal'; import initInviteGroupTrigger from '~/invite_members/init_invite_group_trigger'; import initInviteMembersForm from '~/invite_members/init_invite_members_form'; import initInviteMembersModal from '~/invite_members/init_invite_members_modal'; @@ -14,6 +15,7 @@ import UsersSelect from '~/users_select'; groupsSelect(); memberExpirationDate(); memberExpirationDate('.js-access-expiration-date-groups'); +initImportAProjectModal(); initInviteMembersModal(); initInviteMembersTrigger(); initInviteGroupTrigger(); diff --git a/app/assets/javascripts/pipelines/components/pipelines_list/tokens/constants.js b/app/assets/javascripts/pipelines/components/pipelines_list/tokens/constants.js new file mode 100644 index 00000000000..02baa76f627 --- /dev/null +++ b/app/assets/javascripts/pipelines/components/pipelines_list/tokens/constants.js @@ -0,0 +1,52 @@ +import { s__ } from '~/locale'; + +export const PIPELINE_SOURCES = [ + { + text: s__('Pipeline|Source|Push'), + value: 'push', + }, + { + text: s__('Pipeline|Source|Web'), + value: 'web', + }, + { + text: s__('Pipeline|Source|Trigger'), + value: 'trigger', + }, + { + text: s__('Pipeline|Source|Schedule'), + value: 'schedule', + }, + { + text: s__('Pipeline|Source|API'), + value: 'api', + }, + { + text: s__('Pipeline|Source|External'), + value: 'external', + }, + { + text: s__('Pipeline|Source|Pipeline'), + value: 'pipeline', + }, + { + text: s__('Pipeline|Source|Chat'), + value: 'chat', + }, + { + text: s__('Pipeline|Source|Web IDE'), + value: 'webide', + }, + { + text: s__('Pipeline|Source|Merge Request'), + value: 'merge_request_event', + }, + { + text: s__('Pipeline|Source|External Pull Request'), + value: 'external_pull_request_event', + }, + { + text: s__('Pipeline|Source|Parent Pipeline'), + value: 'parent_pipeline', + }, +]; diff --git a/app/assets/javascripts/pipelines/components/pipelines_list/tokens/pipeline_source_token.vue b/app/assets/javascripts/pipelines/components/pipelines_list/tokens/pipeline_source_token.vue index 71efa8b2ab4..9643ddfbd21 100644 --- a/app/assets/javascripts/pipelines/components/pipelines_list/tokens/pipeline_source_token.vue +++ b/app/assets/javascripts/pipelines/components/pipelines_list/tokens/pipeline_source_token.vue @@ -1,8 +1,9 @@