diff --git a/app/assets/javascripts/import/fogbugz/app.vue b/app/assets/javascripts/import/fogbugz/app.vue new file mode 100644 index 0000000000000000000000000000000000000000..d7637c7ae9bc06c36c8e73bef5094bb485945f4d --- /dev/null +++ b/app/assets/javascripts/import/fogbugz/app.vue @@ -0,0 +1,74 @@ + + + diff --git a/app/assets/javascripts/import/fogbugz/index.js b/app/assets/javascripts/import/fogbugz/index.js new file mode 100644 index 0000000000000000000000000000000000000000..011a1a76ee7ca8082322c8651f0928b80b247201 --- /dev/null +++ b/app/assets/javascripts/import/fogbugz/index.js @@ -0,0 +1,21 @@ +import Vue from 'vue'; +import App from './app.vue'; + +export function initFogbugzImportProjectForm() { + const el = document.getElementById('js-vue-import-fogbugz-project-app'); + + if (!el) { + return null; + } + + const { backButtonPath, formPath } = el.dataset; + + const props = { backButtonPath, formPath }; + + return new Vue({ + el, + render(createElement) { + return createElement(App, { props }); + }, + }); +} diff --git a/app/assets/javascripts/pages/import/fogbugz/new/index.js b/app/assets/javascripts/pages/import/fogbugz/new/index.js new file mode 100644 index 0000000000000000000000000000000000000000..62f615ea84ad810df13401e3e52e2a009e49b598 --- /dev/null +++ b/app/assets/javascripts/pages/import/fogbugz/new/index.js @@ -0,0 +1,3 @@ +import { initFogbugzImportProjectForm } from '~/import/fogbugz'; + +initFogbugzImportProjectForm(); diff --git a/app/views/import/fogbugz/new.html.haml b/app/views/import/fogbugz/new.html.haml index f05d7be6dbd0af2db5d40f1ce8e8a02d216c5a73..a04732f0b7d56b919158533ec3a82d5b79b47330 100644 --- a/app/views/import/fogbugz/new.html.haml +++ b/app/views/import/fogbugz/new.html.haml @@ -2,27 +2,33 @@ - header_title _("New project"), new_project_path - add_to_breadcrumbs s_('ProjectsNew|Import project'), new_project_path(anchor: 'import_project') -%h1.page-title.gl-text-size-h-display.gl-flex.gl-items-center - .gl-flex.gl-items-center.gl-justify-center - = sprite_icon('bug', css_class: 'gl-mr-3', size: 48) - = _('Import projects from FogBugz') -%hr +- if Feature.enabled?(:new_project_creation_form, @user) + #js-vue-import-fogbugz-project-app{ data: { + back_button_path: new_project_path(anchor: 'import_project'), + form_path: callback_import_fogbugz_path(namespace_id: params[:namespace_id]) + } } +- else + %h1.page-title.gl-text-size-h-display.gl-flex.gl-items-center + .gl-flex.gl-items-center.gl-justify-center + = sprite_icon('bug', css_class: 'gl-mr-3', size: 48) + = _('Import projects from FogBugz') + %hr -= form_tag callback_import_fogbugz_path(namespace_id: params[:namespace_id]) do - %p - = _("To get started you enter your FogBugz URL and login information below. In the next steps, you'll be able to map users and select the projects you want to import.") - .form-group.row - = label_tag :uri, _('FogBugz URL'), class: 'col-form-label col-md-2' - .col-md-4 - = text_field_tag :uri, nil, placeholder: 'https://mycompany.fogbugz.com', class: 'form-control gl-form-input' - .form-group.row - = label_tag :email, _('FogBugz Email'), class: 'col-form-label col-md-2' - .col-md-4 - = text_field_tag :email, nil, class: 'form-control gl-form-input' - .form-group.row - = label_tag :password, _('FogBugz Password'), class: 'col-form-label col-md-2' - .col-md-4 - = password_field_tag :password, nil, class: 'form-control gl-form-input' - .form-actions - = render Pajamas::ButtonComponent.new(type: :submit, variant: :confirm) do - = _('Continue to the next step') + = form_tag callback_import_fogbugz_path(namespace_id: params[:namespace_id]) do + %p + = _("To get started you enter your FogBugz URL and login information below. In the next steps, you'll be able to map users and select the projects you want to import.") + .form-group.row + = label_tag :uri, _('FogBugz URL'), class: 'col-form-label col-md-2' + .col-md-4 + = text_field_tag :uri, nil, placeholder: 'https://mycompany.fogbugz.com', class: 'form-control gl-form-input' + .form-group.row + = label_tag :email, _('FogBugz Email'), class: 'col-form-label col-md-2' + .col-md-4 + = text_field_tag :email, nil, class: 'form-control gl-form-input' + .form-group.row + = label_tag :password, _('FogBugz Password'), class: 'col-form-label col-md-2' + .col-md-4 + = password_field_tag :password, nil, class: 'form-control gl-form-input' + .form-actions + = render Pajamas::ButtonComponent.new(type: :submit, variant: :confirm) do + = _('Continue to the next step') diff --git a/locale/gitlab.pot b/locale/gitlab.pot index c2212cd5b9d8e204fd74f405d846fb90b1b7a9ee..3a19978c33c4b0091544a545e04a8a53690613e3 100644 --- a/locale/gitlab.pot +++ b/locale/gitlab.pot @@ -46037,6 +46037,9 @@ msgstr "" msgid "ProjectsNew|Experimental settings" msgstr "" +msgid "ProjectsNew|FogBugz URL" +msgstr "" + msgid "ProjectsNew|Get started with one of our popular project templates." msgstr "" @@ -46052,6 +46055,9 @@ msgstr "" msgid "ProjectsNew|Import project" msgstr "" +msgid "ProjectsNew|Import projects from FogBugz" +msgstr "" + msgid "ProjectsNew|Import projects from Gitea" msgstr "" @@ -46142,6 +46148,9 @@ msgstr "" msgid "ProjectsNew|Your project will be created at:" msgstr "" +msgid "ProjectsNew|https://mycompany.fogbugz.com" +msgstr "" + msgid "Projects|An error occurred deleting the project. Please refresh the page to try again." msgstr "" @@ -67444,6 +67453,9 @@ msgstr "" msgid "Your device was successfully set up! Give it a name and register it with the GitLab server." msgstr "" +msgid "Your email" +msgstr "" + msgid "Your feedback is important to us 👋" msgstr "" diff --git a/spec/frontend/import/fogbugz/app_spec.js b/spec/frontend/import/fogbugz/app_spec.js new file mode 100644 index 0000000000000000000000000000000000000000..a18508657d1102cd7aa6b87585c010d62315dce3 --- /dev/null +++ b/spec/frontend/import/fogbugz/app_spec.js @@ -0,0 +1,42 @@ +import { shallowMountExtended } from 'helpers/vue_test_utils_helper'; +import App from '~/import/fogbugz/app.vue'; +import MultiStepFormTemplate from '~/vue_shared/components/multi_step_form_template.vue'; + +describe('Import from FugBugz app', () => { + let wrapper; + + const createComponent = () => { + wrapper = shallowMountExtended(App, { + propsData: { + backButtonPath: '/projects/new#import_project', + formPath: '/import/fogbugz/callback', + }, + }); + }; + + beforeEach(() => { + createComponent(); + }); + + const findMultiStepForm = () => wrapper.findComponent(MultiStepFormTemplate); + const findBackButton = () => wrapper.findByTestId('back-button'); + const findNextButton = () => wrapper.findByTestId('next-button'); + + it('renders a form', () => { + expect(findMultiStepForm().exists()).toBe(true); + }); + + describe('back button', () => { + it('renders a back button', () => { + expect(findBackButton().exists()).toBe(true); + expect(findBackButton().attributes('href')).toBe('/projects/new#import_project'); + }); + }); + + describe('next button', () => { + it('renders a next button', () => { + expect(findNextButton().exists()).toBe(true); + expect(findNextButton().attributes('type')).toBe('submit'); + }); + }); +});